git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@6648 c06c8d41-db1a-0410-9941-cceddc491573
5XNQ3SSNBFXFNWA6DPM74W6FH65NX665P3DMH6YCWVFOPZTJSYCQC CYNUFLTFZNYY3KTA6USUXYIZNVIXH2TDSXKFFXDORMBZVD7TRDSAC GO242VCYZMGMPK5ILYRKUCRPMLL2NBXX26VAFB47HRK2CGI3D7QAC FVKF37R37QZRNUKHBLKGKA3YU2YH3DDQZR54QCARFBZWIVRWSSCAC F6H5PXCHNY6JFQSKO2Z54DHU55BCBA7XZDYDU6IDTVKPJHINP2IQC WLK4WO7OQBDIOL3IU3QWGQ545NZEMGOTL7PFGUESY2QGJDZO3W5AC TGJZXTUIAKCFZQJ54ZQEBGFBVZSJCAX6AWDRSH3TP7UJRLGUM5SAC R2DQBWKIW7YUJB5SOQ7J274JIYRVX4H3ISFRPAL5RG2RVVP4G2KAC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC 2O3C3MTT2ZBYIFGPJ4MF5R4AXBYUHOEN62KAUWFWF6JWHIIVLRNQC ZCRK2DJ5VKECRQXZTWT4NUDL2VT5ZHUK7NT6NQPLRJ56TDX5PJSAC SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC VJDLV4PF2ZJ46NERO4LZUX5JE2CD5XBOBQCYYPTFWTHLUEYDUOYAC GF5VGZLKKWIATLVLTUJR4LVEQZAKR7CWMLNFMJXA67WLHP7JNUUAC GQL5SIGBHLU3FMCE54XVGLRY5AZHRM6DUEB722REA2DPLGJSN6EQC S34LKQDIQJLIWVIPASOJBBZ6ZCXDHP5KPS7TRBZJSCDRVNCLK6UAC AREBCIU2RU2RNHBWD4GARWEBKSL7HDFGDLII22H56OJO2AQUOMLQC KATZLWENEIQMKKWIV4ZLXJ5HFUW6SU5K4ZU6NENBOL4XAAVTDUKAC UASSVST2AY5625MS67C4FMEVQFXEVTG2SOIHW4AVWE22PLP27VUQC YCL3W2PFE6ILTGBFODCSXNPDIA46KVSZP2TI7HDMYAOEJT65RIEAC SWE3F3BLKHYMJEJLXNFH3MR2E6VDEYXJ6DL7QLPP47BJEKEUCAMAC FIYBXLWALQINNQTHG2KNDUUTAQAZRDDLXW2XOVSKDKBADJ3XCJ4AC 3NFVCXRVGHN2CHLLWFZES5RBS4R2BCDS4EEQNSDCFYIFQWQK7MUQC ENQRCBNN7MKP6FFQAZ62FYXEVWCRJB5747LTYMZGRGINXQL6HT5AC 2OPTG7FWHLKQYXJIL4BDN3UW67CV3SKILQE6NTOA3YBYI5V7SQSQC JI4NDSOXGGZ7QHXXFB3ZTHAKHABXYBZXPDGLUFV5SKYEOL5FT7JQC LJK4ZQATLSB4MKZG3ARZX5V6RFGTN3NLCN6GTCUGJQKU26SOXMUAC SJOTTUZMA3UTGT5D6LKUTBDP2CZFXT24FB5IAWCUFHSHLLACM75QC OK6A6PMHOYIQIPXK32AKOH55QRFWQA43BJWHUOCZA2VIJ6NROHMQC NLQNXH3SVJ52CWXEV35FSSZP32VHC4QFGN3HINF4KO5GZHZMOBKQC M6J5C74JDM5ZYIDPN7QXUCP6L44S2Z5XTRJMZBBRYOHA62IGYXKAC J6APXOT4QOGQFONWB7G546VTVF6QG42HVOROMHF7YBDJPR4K26OAC AIIVH43Z5X3GTPFY4FXQRZPG6Y7QPH2KJ47VM2Q43PCGGD5MTMOAC PSCYVKJ7DGXAL3V5U4O6AJTRV6Q3N3SHQWAZ73VIPRTE4W64F2XAC TO43FWKHNIA5MVDOFXYHQODTLBQYEZKX5UIUGID57436UF7G2EXQC YF2GZWXNV6NVFFEBEOYS67JQJQK2IUS5BZMGJW3XQPYIJYHQJCEQC VXSORUQOM2VZA4CAZDC6KPAY373NQIN3UT7CXQXTRCYXO2WM62DAC MJWFTUS66PTCNEYXEJA3CUJFXNWXIKDD6H3V24PW7HK64NSVOFSAC BFZZ7DFLZM4WNHQOKWDJENZOLMXH3UPHZ437BMISYJ3VSO2Y57WQC 57E4T664CXRFPVW2BZBYI33UIHFS4PSEZURZYPSYSZK5DRLJJ5CQC EFWEYIB2R3DPD3JWIPU6LS6SFLPMYN7J7X4GBZR7DJWKHJ3UELSAC B7DNCNY7SXL5WAW5B3XZP5KIQSBWOJ3N2YW46WOUQKTRBRRZ7YOQC E2YM2FO7CSSXLACZBBQPCC2LZN6KNVVJOIWQN4YZYE3NG4T5DR5AC XKAJWK6MPHS3ZCZIPPLTIMOPF6AROGLRDDCS6EFE3IGE4AHT7MYQC SHSIZVHSB4RPTLGMFJXUDVHF3FTEZZYCRIH4CBZP4MXOBR3HC4QAC OFH2B2UZBK43QLFQBZ54FOCFLFNE54BZVDNCEUGDTBCUGNVZULIQC TPZWAV3USKO7RX4IGHLZKVPRN36K33PJPSZYL6FZMX4XBHTYOQYAC 25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC JK3HFJG76OOQHJMXJUSZRTR5CX5ZMS52LRVBLOR7E2NBI6PRSHHAC 4FQAKUKUO6PCAZ3N4HUR5XL6E4VA5UQUZ3AEDGRBLVY7W2LMWI7QC ED62QWGKBPORWVKDFOQRKJXEIWZVNGR3O4KWQBDSRNPT36AYOQYAC KFWX5LI235XQYQOSUSSAKKQUNB2OCN3NOYP6E7D3HSM2UOSBGYHQC SEXTAB43OKE5D5NNPNNPJXWR3CLJVRL7VSLMKDATDRLNX4FI3AFQC 3ZWALZFSTSIVYXY4BAY6ANGINTDACZC6RSSJTEMQSTSUIE66YOBQC I67HCZISOEMUYFEUA6VOJOO2L4TYK73IB4FSTY4CHDR7GZD6CS6QC SW3RLYFNRT3IJBK6LYKHKP2J2YDU7SXQWAJZX7U6S7ICYW43OMNQC HAI4YDKI72OBDT5KMMVCO3DOU765OPWCU7GTRKTALFNSDOI4R2LAC XYBPIU6AQ77EID4VNOMI7KQZULZI4VBZHHIGBRYO7QRJVCODEKYAC AFY6BHEVU67PXCVX6M3KUG5DTLOJTDGF3D4CQ4S7OMIB35WDSJAAC VO5CYD7Z4FYFDT6DGVBX6RT3PHLRSUJA6TWV3GPYVE7QCSJ3JEAAC 22YVHM74WBJNJE4PA5CBEUTDWM6FAGGGILI26A4LXAURX55TNRKAC 75M6AVUSS3G5EJECJJRB67V5UYDOIV26FZNB2FFCMBZ33EK7FVIQC TFHMBVXTRA2LXBHE7L7OEWK37JQN5DWZ3HOACMN7PRWVJNCS4TYQC 32S5UVZCXZ5QWH4NDB23MHOPLVPON3VKIWH6EEY42SRPBFZUUXSQC N5FAAVHNKQZJV2G3JFRW7WKTXB3A4YY6GTVIMBCG5RSA65TKVBGQC NQMXQ6OQVUSC7Y7F7IL252QW4A5JED224EECNHWAM4ZZYVNY745AC EAQJ2VSSFA3MKDR7ELP7M5VHTHGN2DCBPPZHXRAXDRKKAX2R6SHQC SNRNR7OJX2MRRSYXSX3FC2CKM7HAGRQS2XMUUTOOBRHJZO2B5MTAC ABLV37FMURRJPEZV2VRKOUYAKEMLI7E6RA4PDAII2EJ5L7WBHKZQC TJRYL3NXPW5IUGEV3YOC7JYWEXCZDBFPLT4AUG4P227WVKVB72ZAC JM7UAK777RAVDAVLQLEOBRTGNW2B47S5G55XITJXO243IUNZHVYQC Y4NA3JSN63RLATF4NNBPSR5CWF5Z7UEMWCGVX4B6NOAR47CGM4GQC OVLN3RPH65K6TZHPINT2O42WI4BHLW7OTFQFPRSYHZU4UAAMER6QC UEI5JAVCMN7Y2SACTEZPZSNFJWOJTC55G24Q6LKQCT4XNDH5ZQIAC DS2GZKISEP2DM2VU6EJ525Q7W3WVOKJXG5PY2OY4VNFCLBHVVOTAC PI5BATR2SER3RFE76IUGHM2AGXVFOUM3PLU7WC2K2Q2BA5K2E73QC 23PFLB2E4QHL5SF3Q2YV5FXRH6MFHENEU2ACVC572ZCYDXCBZVQAC VS3WVE6ORJ76O3TRRJCR4JJVFVRKKFK5YHZ6AA4AU63DWM3KR3UAC G4TVXOLIF5X2MWV7I4UPT3MSQHRMGME6QRIIFAQ64C45JGYK7SIAC M6MBPHNAERUXYJ7KHK5FE2B44CLBY4M5MR5KY74HVDFNHVLOEQIAC LSAVA5BJQO4Z2MYXVQOM4AOXTCLKDNQMOS3DZ4SDNO4LI422LA3AC DH3YTI6VVI727SQXO4CXSDCSBG2UN3UAWLFULBGRLBVH22ACRXIAC LCCGXSFIDQFIRXHGRJWOELNPQOHHCXCWXS366GOULDFPQVOKAIJAC 7YUGK5Q64KG5O7GJGTUBRRLHAHBCJ5YOE23YUPT6UBKUSB67CYAQC B7MSPF6X2RLGWN4M6ZZF3WSOPKGYPTTD7LIJVST7DXN27DG6JHNAC A76PWKCRXRSTV6CZAGRYV7XW4IA43K2ZM7TCZUZ5JMXITTTOM7RQC CUB27EJDQG66FF2YCKOV4HU3LAJVJIHUJ5QYLURRDIEVGPK666DQC IXLNOTBJGHKESBCTME6QAR6XVWFNCHYGMS62V62ZJEA7VLQHXO2QC 35KOQQV4ZBNNIAXGKPOYHOWTN7RBQY7HRZTVMR3WAS4GOYFBM6PQC MKAR2SIMUA65TXXLYZJFUYAOVGBYJF25YJ2UBANSCPOYYUOFG7PAC SJXOZ6J66G3S5VYGIZ3YHEUCKUF5554YEFUYLVBH7X4ALYSXKTGQC QHQ3XPTZT5KCOGNPTZS62XEBHO7NQUXZ2YZ2GGBDAJJ4JMT2N3XQC SQDS2YBPOYDDDCW3GGARBZ2HQIUHCQKL7SSHKFQWDENOL5YNNVNQC RCLZVH5IZLUUJU3XDIW4GUDJ5G73DOI3EEMRKNMCNPSSEDBU5YFAC BW3XFNOS6LDAQLHOZ6RXARCMKCY5JVLVDSXDSSAX4DSYM3FANQBAC KQNIGKATHT4YSPJFPJGIGPD6VNR5B753SE2JN2LCXZZJNHCGY3DQC ILOED4VB4I6VPAUTR75ZWX6MXDYXB5DO2EDK2UH67O3HNKWV23RQC GTPAKUU3R5AS3LQNCCZIP3BWV473RM4EB2AIS4FXAJRXHEOVH2PAC 47NSOFQMBZCDIBHEAZSENFUGDSQCX3GJHFBUZ65ARDKCYIZ435LAC ZP2KE7A2LE7Z2S7AC45WE4CXDSEVDTWIMV2EM4IBUKXYJIDU6R7QC ATDAT2AONG2BDLZFBJZB4WVNRUFQAU7RDIVUBAZ6STAV62NX5R4AC EJ4GIPFSSQCQASUMRF4CR2WPUQOTEHFRGLOYEZ7BH6YEMIR6DN4QC TLA5UN6LZPXGKERI27EFY4HKIIU3VU5Y7ZU54WXL6ANBUV2VOTMQC FSD7GIK3YLZXWLEH37BU6KV3IUCFGXPQL6IZ7H65YWNRBEKDBX5AC F4WAQJD7KLOXHZOTOT6WG26PVIDHYNVS3AV6ZNXGAS7PDR4HBWQAC QLMCSREGK2UUAPXZSZQKLZOLM4BCB7PAVCSR3DLFQS3EW3IMWQSQC H5BVKRORNXTCJKFXQPTFWDURKSUFW24CGSJXBGZCJUP4DHMSVDBQC LVCBY444HPB4RRFMUAZPHVZ67IC3L6DB27AEMCW3DEXHLBF73TMQC 7V4DCKFJCNBXFODMKJ6H3MCDUTSD4XVQ7D4D6XFCD4JNF4HCE4KAC LFBNFE3PZBXTR2ROPKYPARUWLJAYWAKGTS7VBWADZWVVSJ5CLX6AC JEWGBHOQGDSWMLT4FZTQWUKTBJJWY5CSRAQQUOWIZ7U4QBJ6ZLBQC AMBBZGB4EP4MA2ILKQSAY4O2XQAIH673JHCDQ6N4MBGL2MAZGXNAC 5BJPWUPLJFS34FUTFJVKA4A52YMIGV6EWDXLNSDCWBJWBGVSQFGQC KIJYTJG2XG7T4HEVZTCL2T4XDSMVLXDJMYYRRK6GY5PY7CGJLJTAC ZGUJWUFJ4NFFJ6PGXLFGQWCWBCZHPWGWI44NJHJEVPRG5L36PADQC RWSXCNYUGDSMP2GKN22HROC5Q2GHSAVJJUDRT3Z53WU2DAI4IZOQC VIFZ6DO6GWJGYMXJZKFZ2JYNPHNE74H3OFAOCPISQG7M7A4LCOHAC 5HJJGIOOIIQNCRIL33ZQAY6S57MPTSTG27UETJW3HE3BUUPUKPQAC YMLVBQ6M27MECUVMU3BQP3WSGR7GW4XJMQIHLGHHWMVXHMMIXOYAC PHBACPMH3F34GODHVDKNCMXWU373RJQGVTDLBFCCDLLWDXVYOLTAC XKKLLU7B6AMFPCH5CZRWEC43IQJCER5BZISYGD2DTQS4T6MFWWAAC NVSFIV2ZKP44XHCSCXG6OZVGL67OIFINC34J2EMKTA4KULCERUEAC 7VVRO5HMNNOXVRLBLJUCHUJP6MDIRMC2BWCO7MWH4OLQRM3LMTMQC NOUBFP52ZBOQO4GNLDSLUGRFA2JXMDMXU4PW7LECEJJTQFNI3BBQC 23KINGGZGEVCKOXZQAKJHHCEF7XOJCAJTQT7VEDSS55YMYQM3Z4AC 65PB6QZNUDTUKE3I6YJAUXWHJRC3EKC4CPFHE2FRQDQIBN53DUPQC 7KWDC7XFNMBLSUO2HISIROBINZBX5T67LJEEXTAORXW2YZ7VWFGAC CPTUVTBSOJMAUKMS5RFOAEZEVJGPFHMJA2DJWMDTYN7PFNZUGPWQC EOMCPVNQLX3IMLC46EAO67DPBH5KEG2FQTPBLGU62HIRWA3UQ7XQC GPEJOT73KMACP33IPAKFR5ROGHCOIP22VXZMQNYTGLEA2OSZUM2AC 5YEDO56TF245ZLVPTBO2ILSNGXBU2UYLNHHW74E7YQ35EA3NQXFQC UZ6N6HOUPGVSPC5NQROEEDWMEGJA5XUWUY2AKH5QG65AZ25PVXDAC I2G7DP3TJL4RDMYKNXAA67P3VRSO3RF7FHZWA5CYINSEWEQE2YSQC Q3B3UVMYEVC4YJUPYVSNTR4DJH4E6J4JJDHZNT5LNOCHCPPMEMXAC NRMSQFTORG3GC7HQBIN5DHB5GLWXM6IQO6PTXD4C7LBQWJIHYIGAC FLAGBNUNSIQNFDN53CDWABJRTTFWDL4PG34AI474ZKPXDEPYHOAQC 5P6MEKBISK6NI4MULM75HHFBQW5MXITSZJDGLLIDKJ7G24F7XYNAC NSQ7BSO5C6QSTHWAIDTQ3XMYN5DENKKPUAA2GE6KQJRWQSDEU4NAC FXVDNB6MAAOSEP37HP7CIPPXNS7FDECN3GCRMT5UFFCKLHIL6IVAC };class rectangle_iterator :public std::iterator<std::forward_iterator_tag, coord_def>{public:rectangle_iterator( const coord_def& corner1, const coord_def& corner2 );explicit rectangle_iterator( int x_border_dist, int y_border_dist = -1 );operator bool() const;coord_def operator *() const;const coord_def* operator->() const;rectangle_iterator& operator ++ ();rectangle_iterator operator ++ (int);private:coord_def current, topleft, bottomright;
}rectangle_iterator::rectangle_iterator( const coord_def& corner1,const coord_def& corner2 ){topleft.x = std::min(corner1.x, corner2.x);topleft.y = std::min(corner1.y, corner2.y); // not really necessarybottomright.x = std::max(corner1.x, corner2.x);bottomright.y = std::max(corner1.y, corner2.y);current = topleft;}rectangle_iterator::rectangle_iterator( int x_border_dist, int y_border_dist ){if ( y_border_dist < 0 )y_border_dist = x_border_dist;topleft.set( x_border_dist, y_border_dist );bottomright.set( GXM - x_border_dist, GYM - y_border_dist );current = topleft;}rectangle_iterator::operator bool() const{return current.y > bottomright.y;}coord_def rectangle_iterator::operator *() const{return current;}const coord_def* rectangle_iterator::operator->() const{return ¤t;}rectangle_iterator& rectangle_iterator::operator ++(){if ( current.x == bottomright.x ){current.x = topleft.x;current.y++;}else{current.x++;}return *this;
if (you.duration[DUR_SILENCE] > 0&& distance(x, y, you.x_pos, you.y_pos) <= 36) // (6 * 6){return (true);}else{//else // FIXME: implement, and let monsters cast, too// for (int i = 0; i < MAX_SILENCES; i++)// {// if (distance(x, y, silencer[i].x, silencer[i].y) <= 36)// return (true);// }return (false);}
// FIXME: implement for monstersreturn (you.duration[DUR_SILENCE] > 0 && distance(p, you.pos()) <= 6*6);
if (!grid_is_solid(grd(*ri)) && env.cgrid(*ri) == EMPTY_CLOUD)place_cloud( CLOUD_FIRE, *ri, 1 + random2(6), KC_YOU );}
// Place fire clouds all around youfor ( adjacent_iterator ai; ai; ++ai )if (!grid_is_solid(grd(*ai)) && env.cgrid(*ai) == EMPTY_CLOUD)place_cloud( CLOUD_FIRE, *ai, 1 + random2(6), KC_YOU );
if (fmenv->type == MONS_PLAYER_GHOST&& fmenv->hit_points < fmenv->max_hit_points / 2){mpr("The ghost fades into the shadows.");monster_teleport(fmenv, true);continue;}
if (fmenv->type == MONS_PLAYER_GHOST&& fmenv->hit_points < fmenv->max_hit_points / 2){mpr("The ghost fades into the shadows.");monster_teleport(fmenv, true);
if (make_changes && mgrd[you.x_pos][you.y_pos] != NON_MONSTER)monster_teleport(&menv[mgrd[you.x_pos][you.y_pos]], true, true);
if (make_changes && mgrd(you.pos()) != NON_MONSTER)monster_teleport(&menv[mgrd(you.pos())], true, true);
for (int x = X_BOUND_1; x <= X_BOUND_2; ++x)for (int y = Y_BOUND_1; y <= Y_BOUND_2; ++y)
for ( radius_iterator ri(you.pos(), radius, false, false); ri; ++ri ){const dungeon_feature_type grid = grd(*ri);if (grid == DNGN_ROCK_WALL|| grid == DNGN_STONE_WALL|| grid == DNGN_PERMAROCK_WALL )
if (distance(x,y,you.x_pos,you.y_pos) < radius2){dungeon_feature_type grid = grd[x][y];if (grid == DNGN_ROCK_WALL|| grid == DNGN_STONE_WALL|| grid == DNGN_PERMAROCK_WALL ){grd[x][y]= static_cast<dungeon_feature_type>(grid + clear_plus);something_happened = true;}}
grd(*ri)= static_cast<dungeon_feature_type>(grid + clear_plus);something_happened = true;
for (int x = you.x_pos - 8; x <= you.x_pos + 8; x++)for (int y = you.y_pos - 8; y <= you.y_pos + 8; y++){if (!in_bounds(x,y) || !see_grid(x, y))continue;
for ( radius_iterator ri(you.pos(), 8); ri; ++ri ){if ( mgrd(*ri) == NON_MONSTER )continue;
mons = &menv[mid];if (!found_monsters)found_monsters = true;// Can not be affected in these states.if (_recite_mons_useless(mons))continue;
// Check if audience can listen.if (!_recite_mons_useless( &menv[mgrd(*ri)] ) )
if (!found_monsters)mprf(MSGCH_DIAGNOSTICS, "No audience found!");elsemprf(MSGCH_DIAGNOSTICS, "No sensible audience found!");
if (!found_monsters)mprf(MSGCH_DIAGNOSTICS, "No audience found!");elsemprf(MSGCH_DIAGNOSTICS, "No sensible audience found!");
for (int dx = -radius; dx <= radius; ++dx)for (int dy = -radius; dy <= radius; ++dy){if (dx == 0 && dy == 0)continue;if (dx*dx + dy*dy > radius*radius + 1)continue;const int rx = you.x_pos + dx;const int ry = you.y_pos + dy;if (!in_bounds(rx, ry))continue;
for (radius_iterator ri(you.pos(), radius, false, false, false); ri; ++ri){if ( *ri == you.pos() )continue;
if (grd[rx][ry] == DNGN_FLOOR && trap_at_xy(coord_def(rx,ry)) == -1&& one_chance_in(4 - power_level)){if (you.level_type == LEVEL_ABYSS)grd[rx][ry] = coinflip() ? DNGN_DEEP_WATER : DNGN_LAVA;elseplace_specific_trap(rx, ry, TRAP_RANDOM);}
if (grd(*ri) == DNGN_FLOOR && trap_at_xy(*ri) == -1&& one_chance_in(4 - power_level)){if (you.level_type == LEVEL_ABYSS)grd(*ri) = coinflip() ? DNGN_DEEP_WATER : DNGN_LAVA;elseplace_specific_trap(ri->x, ri->y, TRAP_RANDOM);
if (!in_bounds(*ri)|| env.cgrid(*ri) != EMPTY_CLOUD|| grid_is_solid(grd(*ri))|| is_sanctuary(*ri) && !is_harmless_cloud(cloud.type))
if (!in_bounds(*ai)|| env.cgrid(*ai) != EMPTY_CLOUD|| grid_is_solid(grd(*ai))|| is_sanctuary(*ai) && !is_harmless_cloud(cloud.type))
for (i = 5; i < (GXM - 5); i++)for (j = 5; j < (GYM - 5); j++){temp_rand = random2(4000);
for ( rectangle_iterator ri(5); ri; ++ri ){grd(*ri) =static_cast<dungeon_feature_type>(random_choose_weighted(3000, DNGN_FLOOR,600, DNGN_ROCK_WALL,300, DNGN_STONE_WALL,100, DNGN_METAL_WALL,1, DNGN_CLOSED_DOOR,0));}
const int x1 = 10 + random2(GXM - 20);const int y1 = 10 + random2(GYM - 20);const int x2 = x1 + 1 + random2(10);const int y2 = y1 + 1 + random2(10);
// Pick the cornerscoord_def tl( 10 + random2(GXM - 20), 10 + random2(GYM - 20) );coord_def br( tl.x + 1 + random2(10), tl.y + 1 + random2(10) );
for (int i = x1; room_ok && i < x2; i++)for (int j = y1; room_ok && j < y2; j++){if (grd[i][j] != DNGN_UNSEEN)room_ok = false;}
// Check if the room is taken.for ( rectangle_iterator ri(tl, br); ri && room_ok; ++ri )if (grd(*ri) != DNGN_UNSEEN)room_ok = false;
{for (int i = x1; i < x2; i++)for (int j = y1; j < y2; j++)grd[i][j] = DNGN_FLOOR;}
for ( rectangle_iterator ri(tl,br); ri; ++ri )grd(*ri) = DNGN_FLOOR;
for (int i = gx1; i <= gx2; i++)for (int j = gy1; j <= gy2; j++)
for ( rectangle_iterator ri(topleft, bottomright); ri; ++ri ){if (grd(*ri) == DNGN_UNSEEN && x_chance_in_y(thickness + 1, 100))
if (!placed_abyssal_rune && abyssal_rune_roll != -1&& you.char_direction != GDT_GAME_START&& one_chance_in(abyssal_rune_roll)){thing_created = items(1, OBJ_MISCELLANY,MISC_RUNE_OF_ZOT, true, 51, 51);placed_abyssal_rune = true;
thing_created = items(1, OBJ_MISCELLANY,MISC_RUNE_OF_ZOT, true, 51, 51);placed_abyssal_rune = true;
}else{thing_created = items(1, OBJ_RANDOM, OBJ_RANDOM,true, items_level, 250);}
}else{thing_created = items(1, OBJ_RANDOM, OBJ_RANDOM,true, items_level, 250);}
for (int i = gx1; i <= gx2; i++)for (int j = gy1; j <= gy2; j++){if (grd[i][j] == DNGN_UNSEEN)grd[i][j] = replaced[random2(5)];
for ( rectangle_iterator ri(topleft, bottomright); ri; ++ri ){if (grd(*ri) == DNGN_UNSEEN)grd(*ri) = replaced[random2(5)];
// Don't place exit under items.if (exits_wanted > 0 && igrd[i][j] == NON_ITEM){grd[i][j] = DNGN_EXIT_ABYSS;exits_wanted--;
// Don't place exit under items.if (exits_wanted > 0 && igrd(*ri) == NON_ITEM){grd(*ri) = DNGN_EXIT_ABYSS;exits_wanted--;
do{grd[i][j] = static_cast<dungeon_feature_type>(DNGN_ALTAR_ZIN + random2(NUM_GODS-1) );}while (grd[i][j] == DNGN_ALTAR_ZIN|| grd[i][j] == DNGN_ALTAR_SHINING_ONE|| grd[i][j] == DNGN_ALTAR_ELYVILON);
grd(*ri) = static_cast<dungeon_feature_type>(DNGN_ALTAR_ZIN + random2(NUM_GODS-1) );}while (grd(*ri) == DNGN_ALTAR_ZIN|| grd(*ri) == DNGN_ALTAR_SHINING_ONE|| grd(*ri) == DNGN_ALTAR_ELYVILON);
coord_def pos;for (pos.x = 0; pos.x < LOS_DIAMETER; pos.x++)for (pos.y = 0; pos.y < LOS_DIAMETER; pos.y++){if (fprops(pos) == FPROP_SANCTUARY_1|| fprops(pos) == FPROP_SANCTUARY_2){fprops(pos) = FPROP_NONE;}}}
for (int i = 5; i < (GXM - 5); i++)for (int j = 5; j < (GYM - 5); j++){// Don't modify terrain by player.if (grid_distance(i, j, you.x_pos, you.y_pos) <= 10)continue;
for (rectangle_iterator ri(5); ri; ++ri ){// Don't modify terrain by player.if (grid_distance(*ri, you.pos()) <= 10)continue;
if (mgrd[i][j] != NON_MONSTER)_abyss_lose_monster( menv[ mgrd[i][j] ] );}
if (mgrd(*ri) != NON_MONSTER)_abyss_lose_monster( menv[ mgrd(*ri) ] );}
if ((grd[x][y] == DNGN_FLOOR|| grd[x][y] == DNGN_SHALLOW_WATER)&& mgrd[x][y] == NON_MONSTER&& env.cgrid[x][y] == EMPTY_CLOUD)
if ((grd(newspot) == DNGN_FLOOR|| grd(newspot) == DNGN_SHALLOW_WATER)&& mgrd(newspot) == NON_MONSTER&& env.cgrid(newspot) == EMPTY_CLOUD)
for (i = 10; i < (GXM - 9); i++)for (j = 10; j < (GYM - 9); j++){grd[i][j] = DNGN_UNSEEN; // So generate_area will pick it up.igrd[i][j] = NON_ITEM;mgrd[i][j] = NON_MONSTER;env.cgrid[i][j] = EMPTY_CLOUD;}
for ( rectangle_iterator ri(10); ri; ++ri ){grd(*ri) = DNGN_UNSEEN; // So generate_area will pick it up.igrd(*ri) = NON_ITEM;mgrd(*ri) = NON_MONSTER;env.cgrid(*ri) = EMPTY_CLOUD;}
for (int xi = -1; xi <= 1; ++xi)for (int yi = -1; yi <= 1; ++yi){if (!xi && !yi)continue;const coord_def n(c.x + xi, c.y + yi);if (!in_bounds(n))continue;if (!grid_is_opaque(grd(n)))return (false);}
for (adjacent_iterator ai(c); ai; ++ai)if ( !grid_is_opaque(grd(c)) )return (false);
for (int y = MAPGEN_BORDER; y < GYM - MAPGEN_BORDER; ++y)for (int x = MAPGEN_BORDER; x < GXM - MAPGEN_BORDER; ++x)
for ( rectangle_iterator ri(MAPGEN_BORDER); ri; ++ri ){int distance = GXM * GXM + GYM * GYM;for (int i = 0, size = corrupt_seeds.size(); i < size; ++i){const int dist = (*ri - corrupt_seeds[i]).rdist();if (dist < distance)distance = dist;}if ((distance < 6 || one_chance_in(1 + distance - 6))&& _is_grid_corruptible(*ri))
const coord_def c(x, y);int distance = GXM * GXM + GYM * GYM;for (int i = 0, size = corrupt_seeds.size(); i < size; ++i){const int dist = (c - corrupt_seeds[i]).rdist();if (dist < distance)distance = dist;}if ((distance < 6 || one_chance_in(1 + distance - 6))&& _is_grid_corruptible(c)){_corrupt_square(oenv, c);}
_corrupt_square(oenv, *ri);