dungeon.cc.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@3984 c06c8d41-db1a-0410-9941-cceddc491573
B7MSPF6X2RLGWN4M6ZZF3WSOPKGYPTTD7LIJVST7DXN27DG6JHNAC
DDCHJDZXKVD3OR767DLXGZG22SU2SFSDJHZUAAN73OYITFQXJAYAC
NHZ3VSRYE72XHSNDHOL2P6IX7DS3FK4FDAD2MDEULM3YFJDYTYDAC
D6AJOTSOJNLJBBLQC2RAQOTPJJQENNBBVNRP45CZKDUHLLZLBFFQC
PJ52ZBDCBPZMFAH5VRITX3OM67W4DCSZQP3BG44GU6N3DQC2YSEAC
A7NKTYZ6VZC42TSSSDEWD5ROPE3P3M5I2QSNAVUMCYJ46PCXTDPQC
QJXVVCY2SB3JOFTGVYQBBIIIJRLBTUJCBWOTAX44VEJ4ZK5JD2JQC
ITXPKG6VHYSJSRQBRJUTD4AGCMMF4RDAJBAULFAN4J7OPQEHAQGQC
Y2CHAC4BULOT2UHD47F7JTSLUGGMVHYOJZB4W76AXMSLIDVHULEQC
KC4WE63EQMVI6QBPDO3EAEPMFLAOS7H5WUAFL7JPRIE3V7CR333AC
IFUVP76NTBEAK2WA5HC4QWPQ2DUBVL2TKFKG5EIMEXARGVPUHOIQC
KZ362RP6C7HRFQB66QL3PBRG7MBEPLRKTFMJYK7DFJQKERFGNFXQC
MC5GWSF6I7TGB422CBRCP6IPX5SV36OX4LAXEE33C65GKCDI64IQC
L3DRKFURVDCV3EJKGG6GVVQX3D5MZPICTVOKNOD3LGM2PECBA7PQC
72GIZBEMQLEF3TITOHABWHRLL5TE7KOUSVWOUEHFMO2OZQ4EIB7AC
4ZFFJ2D4IE2FXSGONGJWPOTHX4CFIGLVQOGZYV2KFAGYDUBJYCCQC
LVCBY444HPB4RRFMUAZPHVZ67IC3L6DB27AEMCW3DEXHLBF73TMQC
KYKFOLADMUWUGJG2YWH2SSQRPRU5VOLSORANZKHDYGJSLIKVAXUQC
45EMD3KLQPMERNMIKU5G76H6556XOMIW352TSBP7VLWJX2YYGS7AC
F7X6HVUKHZXYURABYAZJHRYBV7UZTIPOWJMGCMDK26FQ66WGKFZAC
25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC
U6ILMKBXTQZYT62IGD2CALYNU4VQGRSTHN6QBFBU7BVUBHWYOEQQC
LP5EK64IEM7AHNYQID4GGKOQJQNZLKY4DCCZN47SIUZ6IXAXH5UAC
GSS3OCYMI4MYKACCGNLFA267VDH2U7G4QVVDLMOVAUHZTYQ3QJDAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
WG6O475IOLZFMUQSLVR2KHM7XTBF5HH276L2KDGF7UOSESDOAILQC
DH3YTI6VVI727SQXO4CXSDCSBG2UN3UAWLFULBGRLBVH22ACRXIAC
AREBCIU2RU2RNHBWD4GARWEBKSL7HDFGDLII22H56OJO2AQUOMLQC
U6HLBU2OIMKVNWWZ55SERG56WKAW3GSFFEGUJBP4SQVYSESGXC2QC
X4OCLD5YEXCYVQNMOQORLIO72AKUEMT3BT6FB3TW2HARKN5X7MEQC
74LQ7JXVLAFSHLI7LCBKFX47CNTYSKGUQSXNX5FCIUIGCC2JTR3QC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
HH3HFWVXABJ4IRMN22PPJCREMULZSN6DA7VYKOGECGMNUQTZ5QNQC
X5WLJCJVW55SXZVP7IKP7ADCJIGNKN4PKAXFECVR6TNK7XSMZR7QC
RBAGQ2PB7V5YAM5KSHSZR2E3MLKDSRVM5XYGI2TIXP5QMVBOQHDQC
SJDOBXECX7F3ZPPVR7FPURE53D47PP2TFIF4SB6XPS456PZV3DQAC
NNG27Y5ZQAZX6UD7F7M4F6KEZBEDFXPEEC3LFUSX4ESKT7K6UJQAC
6G4LD3DLA4TB7BEXUK262EDZQYL2S4JTLEMAMS4HOPLF3CPIWJ4AC
5DI5IBEYOMNFQOLSI4ZNFJCGG4CFYYEEMIGZNCA42ESVEIBTJLSAC
LS3DAZVRDCXVN2BKBC6RGCKO3R43Z7HKG4GXJWLBK4AKBL2G6QDQC
4PUWNQO7QMEWY3GSUHLBKMYOAI7ASYSRM32KDGTA7DLNDIGFAWFAC
RSIUBEQUGNU4LO6KH4PKVROWQS33DAKSY4XFVGN7T3CEKSXABCSAC
6GSGCC5JQJ5NOKX36UHRNOCXNHDBS2A2TDMAR34UBOGWE2DORXIQC
J6APXOT4QOGQFONWB7G546VTVF6QG42HVOROMHF7YBDJPR4K26OAC
AIIVH43Z5X3GTPFY4FXQRZPG6Y7QPH2KJ47VM2Q43PCGGD5MTMOAC
3QLM46S44Z7GDLWPH3VHBMW2RSWZAOLGJMG2BDKNGUOZIM4IX6WAC
64RZSOR4B4T5QO3FAERBTH2QJIQFSCIFHI4WYK3MDAEAZVAHRLVQC
G5WLU3B4MR3ZDJLGR6OHNIMLZXGQS2EWBJ5YYY5J2GWM6DTD44BAC
SCWXQW5H65OXUP2MEJ2MEEAVPSRJDT3RQGKYCMKVTORS2334PQSQC
2YSMM7QMFZOPD5NXAD2OAMDJEY5LOZO4NCYBC7UCQVANKINJRNBAC
ILOED4VB4I6VPAUTR75ZWX6MXDYXB5DO2EDK2UH67O3HNKWV23RQC
56C44YMFHZ62GXAAOLYSLLGBVGRWXB53W2VI37Q26ZECEK2XG5SQC
C22455VGUQOSUX2OORA32LROFQ7NNYDMD2ZDTTUZSAQLXK4AD6QAC
3XZOL3FFQZITUJIGDD6B6V6ZYMBN524JKNN6ZPJAXEC7RY433I3QC
GQL5SIGBHLU3FMCE54XVGLRY5AZHRM6DUEB722REA2DPLGJSN6EQC
KCHX2F3JFEWOZT3WMJVZAAQUU2QSZ5Q7RDCD7WUJ7VE65J52JFUQC
ZVK4J5HTKFNOOIVCI62ZWEYGXEE5TYJ65DLYYZAZWTADFSXE62ZAC
6QWZDCP5HGYLTJO3WWYJJGRRT7QFY6IG64TC7TUB553Z7GAA2HIQC
SSCG2FLJMUTTIRXBFSPLAUUBUIN375ZGL5UOAF3SC62ZIILSMMKAC
34C4U6EQWERY75GZJKUCM5KVGU2OUICETS5LGZF6RMKMZT4R5SQAC
TFZ4TER7O2Z4FOGF2RCPEPYIHBTUA4LG3ECXLR7XGLCC6GO6OOTAC
TZ55IZNANEJO2WDTKYWVLY2W2VV6BR7WKIN7XLNISAMMFT6LG2WQC
HZK3YN3SAISTDS5JI4COBYFG7YB4ABDVENXWZZEYLFA2LDI232VAC
WWR4IDWLXP4XLBWDZBA5GFG7CRKUJQNRK7FFUFOISK6OJTMYQPFQC
FZAQNANLZOQHX675KR5GE2ZAVNT4AWX4TWEUJXXEZMOXWQ5FDHOAC
TLA5UN6LZPXGKERI27EFY4HKIIU3VU5Y7ZU54WXL6ANBUV2VOTMQC
K6ELQ4HEZYDROC7CJFLPJS64AAJQ4G6RVLL4GBRUG6FJMKSBDDIQC
KKROXTUPBNEXXEUUDJNADATK3BCQPSQWFZ6L4VTKBPTYXJLYUHDQC
FSD7GIK3YLZXWLEH37BU6KV3IUCFGXPQL6IZ7H65YWNRBEKDBX5AC
AO3KHGKGSX2ZR24KJVIOTUY7EHYHMMI5W4HN3CAG4YGQHBOHLGDQC
AF7VAKCSGEYCXRTITS2WAW7VTM3OEQOECMNXR6YMOQLBCVZZFAVQC
PISXY4NKSKL5KDJWAHD7CTXWTQDH3NFWQSFAHUAI3VVATWKXRODQC
A3CO4KBFTFU3ZSHWRY2OPPX3MMTFV7OUCZGL7Q4Y2FU7JO4AP7MAC
5KJCHLIUFKRPMIVWUAYT6EOF7SW4PTQF6Y5OPEFWXGLE7DUGYLZAC
JDM27QE4HR52AYFSQE763BFF57ANOTF5MXKMO377PP5EXMN7SAOAC
7Z37EO2GGM2DAS65DWEI5VVPRPXMGH6XHB6IADG3Q6KOITSV25MAC
3PY3L3A4QRW3Z5Y7SHO4TMVOOP2VNCO27X2MX4DTOP2SADLBQUOAC
OY7KHQPESOUHPBXRZ2JSNUKPAC7DCDY73TAUHCSJG5V6TPAHBVYQC
XAFFD52IHN6FWFR2TT5F2KCUS7HAVCBI5CWTFMKPQG77GGTGAHLAC
ZJLJGSB2XSBQU42OFQMXL3EG4CXAQGOYAU6YTV2SAWZEJIPFH2CAC
CCMBDS5S4KEI4LJTVBFDDEGWRTWM4GQB2GLEUUT7TMQRXFLZ4HXQC
WLX2RQMMOMP2PYPAGJRM4VFD2WTLJTOAZZPPY3MV76FU2EGEJ54QC
ED62QWGKBPORWVKDFOQRKJXEIWZVNGR3O4KWQBDSRNPT36AYOQYAC
TLO257LZSB6ZO36STDUEWJBO2LETXFKTFGXELA6Y4BZBVAEIIINAC
2WRXQTGYDBLV46WRNVIUKGNA5QS563XZNNW3N2L6PVOCHIP2YGHQC
2G55UEHQ7554OPNSZVTUCZTWSHIFKGT56QEGSYFKCTX547I4AL3AC
NDTQUANX3GZ6HZP5FONYNJUYPD3R2P6SGRC3ICKJ7ZWF3KO23LTAC
E5JKWMBVQQGVSCAX4UOGHI6QW5RFOX6PJB77LHL3UI2NJ427BFFQC
JNB3PBPBJHDUHH47ZICB25QENPTMLYK7CXC5BXRVWZ3J3ZZPKCUAC
UZ6N6HOUPGVSPC5NQROEEDWMEGJA5XUWUY2AKH5QG65AZ25PVXDAC
DKRSOHZXL6EPSLKOKHF7GJXSZEJVY7CXGACSHWLM5B5FTRETWWCAC
BTO5WE4OEK64DZQVNYLOESM74KKQNE7KSNMQVF5UDB26OBKP7ORQC
YYHCM4CUN6G5PFWPGOYMDYX4P3SGNYUT5SZK5AUWUL2G7RULQJDAC
AOLWOUIFBQDQTCMSVB7N7GAKFUY5J5LH7CJZAY3HEY3WEUSLADZAC
MSQI3TH6T62JAXQGLL52QZCWAMC372TGB6ZNNRDGUGMJKBNNV2VAC
SH6NU4H5TG4O7CRXRHZ7MDHABZLWWXQ77NJDBHI7KCVHXHQYK46QC
EJ4GIPFSSQCQASUMRF4CR2WPUQOTEHFRGLOYEZ7BH6YEMIR6DN4QC
ANBVGN4RZOMY5LI4QSHOV2477FN55H353ZYLSVCPTXC7AWWSQZBAC
KXUQB3WNWC5IFL6VFWADEPQMMU3VV3NDI5FLA666PGOEWFYUHCLQC
5UVDIVD4NSXA52U4QMQIVST3GSZJ2A2YZK3RUEXKPM43YVQ7LI5AC
6L4EP4ZRWWYLT55PD5KTTJON5J2JB5VV5MWNHF5VPZQZ5BKEYZ4QC
I7NXCEKCEBDWOGO7EDNRZ36GELP3P5GTOOXQG2YS5TXZTCNN7CDQC
CREW3VTGN2BV622ZXHCPHUEZWBAGEQMNUELDLTHLEKG4VBXGMRPQC
JT672SIJK4BOIUAGL2WQ6NR2NF4PSWP3BT6Q4HMNRF25UN6JQ2MAC
4WOHWWHMQPU22PK6TN5KIFCB4G22NDF5OQ3ZEYDK4Z5U7XCB5IWQC
KNBQ2Y4XXAJGSHC4FU2AHCRGLLHETYA2MU55TDSHV2TIMTOX3QZQC
7J3H7JY6AUO2UHNF6DAHDZI4O33JMTUUTYTPRM3CKNPUOF2RQOGAC
SCXU5KW3LWPSVVCOWSCZLDXHV7IUMCFTGIWZ2LFSBIUKAOBYHJBQC
ZJU5Z2WDMI7HN4XJ3NVTVRHIZO2CGFUQ2FSKIRJVTQG47XHNCZFQC
3C2VE43SHCSBY4LTRTFYFLIPRWFUN6DXU6D34QVWDQTSNRBUFG7AC
442VGKMARB6LTQUEBIB5P447EI34BRJL6JALZKXLWPDHWCM6KKCQC
EH4VJW3I5Y4V6DT3YMLNDA3NW2DEAV4LRE4T5IEXAVB4WB3JJMGAC
APGCKU4AFOV7Z7XIEO5A27H4IFUGDU227I3Z7OIRROYSLOFFBJ5AC
ILN2K6ASDZSMEHOPJ22IZLZJUO6DDGZTKAKXM3YXG6JZZHJNLX4AC
NTFA3ZSJFTVLTTKI6ONJE33PGGDW36IVGWMO6GXRA4ZG57TOWNFAC
OYTCBRC7LE44EUVRZVYTOOVKQWJ6P6YE3FXTOGUTNKEMLNWPHKSQC
GTPAKUU3R5AS3LQNCCZIP3BWV473RM4EB2AIS4FXAJRXHEOVH2PAC
QZERCVTY5BISIKSDH6WUXGZPIBAF4KUCGSZEEGMGBCORNUXT4HXAC
KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC
O4XZM4P4VW53I4TZMQWCQ7K4SOEL2YHKDWXWXCDPLZ6LJNKZDD4AC
R5JKQLY5QE6UBG3RH3Y5ZRSX6H35CHYI2HYNDZF6ZHVRULUORXBQC
ITUTGFJ56GR7FWMC5Y7XKUJJ4Z35I6BMOHCPCW3W5MKDQGVOGM4AC
CUNNC574MESEMTTONZ6YB6CJ2S5P6VA3V7Z3OODESWAK37GYOBPAC
PJ7HBIWAV3H23LXGZAAD2QYJ7HMOFOIR5ZJ4U2UTHI766LOTRRWQC
475LL4U4ND6PTNV4XKC7WQAOJC7RF2VCCVX3DRILP2PKIBFYWE6QC
7UQJTYJTHTDW55ZUKG4TINZTNALGPK5CB7UB7PJ2Y2SKQ5XOYP5AC
BNP25NWD5OXPQEPLM3YJRJCRE24DH55RZKFCZPUX5NLWGOSBIYGAC
EGV2HM7SD7UQSWJGLR65NQJTUBAJ7WHLM67FMH4UFP7JRSFKREPAC
3KAINFIXO7WNWGUGZB43EUNFRS2ZPBLQZDTY456QACMRHYIJ7WDAC
2IJDLTWK74ULETLFTIPUIY2MSG6RNONVAFNFE7MADPT6UNYSSBDAC
3YBQGKQ22WFXA5RXDSKLFWMABLJ6KHBVWEIA3WIDHWM25OECNTYAC
VUP5G3CB6L5I5TPVWMM4KAMF6N4X6UPO4HQZKTSO2ETXZEFBMOMAC
QMDOGHN3AZOBGTS2CHK5VYAZ5MKYHTSIDJYN7HANSGWFWSNXCLAQC
MWA35QHODXDNH2OYJ3URQQOXSEONHFXY4OG4VMGHYBBTAC777NLQC
6LYLJJDKKIPIXKJITRAC7LAZSNBO7O4IJIVBKUC7FD57AV53LHHAC
2BCJY2VAUXBEDHN7RN5T3DZ4Q2PNXKVZF7RYH5TY6M2CXGJAPZYAC
CUB27EJDQG66FF2YCKOV4HU3LAJVJIHUJ5QYLURRDIEVGPK666DQC
Q2XCGRT36NCRQKWNL53EAS3ADON5SJQ5GEMJMX5S3QAG553HFVFQC
QKGDOYIYKE6B36ION5O2DRW65DWWPZMYNWJVH7LJJ7FPGGM2MYAQC
CJWCTWT75S4P3OSCMUZ2W6UTWI6GOQMUSBUN6KEN4TVFEG4HHHGQC
5BJPWUPLJFS34FUTFJVKA4A52YMIGV6EWDXLNSDCWBJWBGVSQFGQC
2ESKXYN266CEMLSL6DNCKG4REDO34FXL4ODVGMWDJTNJRKMXWCRQC
LBTLHHRZTKOBOGAEWQH7VFEDG4WY5IDUEIZARAUFR6SBVWTTMYJQC
JPYDWBRN75GC6UZ26MXJTCXGORTJOWGRDEU4JFPU52LYHGK6UI2QC
Z7SW3IKYNXMOHHD77NGXN6RGL32PZBO6AIHLJY74IRO23AIRKWMQC
PTHJX2MZO5SDSHZMZOWBUPHUEZZPNU6NQAFOC6L3IYMO7C3C4UWQC
RR2J4VLJCZSAKY3HNS334KI4YUAPOMSETO2HGCGEEIUCUJAYAGSQC
HVFAA245ZWF7IALC2ZFCJREYGHIZQ2FTW2VO4Z7FTET2B3JZIZCAC
XUCCWGMXKPIR34BBCCOI67YHI3RST4STDWSDUZTN4B2CJWXQLQ7AC
TMFNNWBMIPWM2FDC7I5R2RUKWNBS3GD3DX6VN452VYRPC3GU2HCQC
IXLNOTBJGHKESBCTME6QAR6XVWFNCHYGMS62V62ZJEA7VLQHXO2QC
ZTBLYDLADGKZ7JZVYC2GJQFODEUOGBPBKDIVYJOE3MON5SV5PTAAC
EWQIUA5WOC7YATFBBYEC4FM3V36MPM44EEDIMR4NU2DEUCSB2GSAC
SJXOZ6J66G3S5VYGIZ3YHEUCKUF5554YEFUYLVBH7X4ALYSXKTGQC
JIMH7VEMQ7QF6VV2D65UISCRG5W55UX5YSQLLUW6SZNSTZMFWQ5AC
IE3INS4WUXZOBVXB5VWRBYPVPXADD2U2W5H3TBTOYNWJ3EGRSGQQC
I2B33Z7NZGC33AMDSSK446AZZYWKPHWLAGULVHKKZU4MVB4BNJOAC
C6E4OROPXFOSAVGLTJE2MYHOGC6QXP4JU275LGBHAYASP27KCY3AC
WVFKGV3AMOYUZ53MWH2RWRITRRCPKKNPTO7QASA5WVKWAUGDJ2OQC
35KOQQV4ZBNNIAXGKPOYHOWTN7RBQY7HRZTVMR3WAS4GOYFBM6PQC
XDJGQNFELURGXMUAOOVALQMSLAJVHMG63KPKVA33HTJFVZROGZ4AC
LKLHWERPXMDTRNYPEXVDVB6PE7CT5PZ6WMNJJDTBBE5FBHOCEK5AC
3BUZB6SWAESYJGX564WE7IS2FFURCDOZT4D2I4PWSZXUVHEQDTQAC
JM7UAK777RAVDAVLQLEOBRTGNW2B47S5G55XITJXO243IUNZHVYQC
else if ((intel == I_NORMAL && one_chance_in(13))
|| (intel == I_HIGH && one_chance_in(6)))
else if (intel == I_NORMAL && one_chance_in(13)
|| intel == I_HIGH && one_chance_in(6))
{
static std::string try_exact_string(const std::vector<std::string> prefixes,
const std::string key,
bool ignore_hostile = false,
bool ignore_related = false,
bool ignore_religion = false,
bool ignore_silenced = false)
static std::string _try_exact_string(const std::vector<std::string> prefixes,
const std::string key,
bool ignore_hostile = false,
bool ignore_related = false,
bool ignore_religion = false,
bool ignore_silenced = false)
static void build_dungeon_level(int level_number, int level_type);
static void reset_level();
static bool valid_dungeon_level(int level_number, int level_type);
static void _build_dungeon_level(int level_number, int level_type);
static void _reset_level();
static bool _valid_dungeon_level(int level_number, int level_type);
static bool find_in_area(int sx, int sy, int ex, int ey,
dungeon_feature_type feature);
static bool make_box(int room_x1, int room_y1, int room_x2, int room_y2,
dungeon_feature_type floor=DNGN_UNSEEN,
dungeon_feature_type wall=DNGN_UNSEEN,
dungeon_feature_type avoid=DNGN_UNSEEN);
static void replace_area(int sx, int sy, int ex, int ey,
dungeon_feature_type replace,
dungeon_feature_type feature,
unsigned mmask = 0);
static builder_rc_type builder_by_type(int level_number, char level_type);
static builder_rc_type builder_by_branch(int level_number);
static builder_rc_type builder_normal(int level_number, char level_type, spec_room &s);
static builder_rc_type builder_basic(int level_number);
static void builder_extras(int level_number, int level_type);
static void builder_items(int level_number, char level_type, int items_wanted);
static void builder_monsters(int level_number, char level_type, int mon_wanted);
static void place_specific_stair(dungeon_feature_type stair,
const std::string &tag = "",
int dl = 0,
bool vault_only = false);
static void place_branch_entrances(int dlevel, char level_type);
static void place_extra_vaults();
static void place_minivaults(const std::string &tag = "",
int fewest = -1, int most = -1,
bool force = false);
static void place_traps( int level_number );
static void place_fog_machines( int level_number );
static void prepare_swamp();
static void prepare_shoals( int level_number );
static void prepare_water( int level_number );
static void check_doors();
static void hide_doors();
static void make_trail(int xs, int xr, int ys, int yr,int corrlength,
int intersect_chance,
int no_corr, dungeon_feature_type begin,
dungeon_feature_type end=DNGN_UNSEEN);
static bool make_room(int sx,int sy,int ex,int ey,int max_doors, int doorlevel);
static void place_pool(dungeon_feature_type pool_type, unsigned char pool_x1,
unsigned char pool_y1, unsigned char pool_x2,
unsigned char pool_y2);
static void many_pools(dungeon_feature_type pool_type);
static bool join_the_dots(const coord_def &from, const coord_def &to,
unsigned mmask, bool early_exit = false);
static bool join_the_dots_rigorous(const coord_def &from,
const coord_def &to,
unsigned mapmask,
bool early_exit = false);
static bool _find_in_area(int sx, int sy, int ex, int ey,
dungeon_feature_type feature);
static bool _make_box(int room_x1, int room_y1, int room_x2, int room_y2,
dungeon_feature_type floor=DNGN_UNSEEN,
dungeon_feature_type wall=DNGN_UNSEEN,
dungeon_feature_type avoid=DNGN_UNSEEN);
static void _replace_area(int sx, int sy, int ex, int ey,
dungeon_feature_type replace,
dungeon_feature_type feature,
unsigned mmask = 0);
static builder_rc_type _builder_by_type(int level_number, char level_type);
static builder_rc_type _builder_by_branch(int level_number);
static builder_rc_type _builder_normal(int level_number, char level_type,
spec_room &s);
static builder_rc_type _builder_basic(int level_number);
static void _builder_extras(int level_number, int level_type);
static void _builder_items(int level_number, char level_type, int items_wanted);
static void _builder_monsters(int level_number, char level_type, int mon_wanted);
static void _place_specific_stair(dungeon_feature_type stair,
const std::string &tag = "",
int dl = 0, bool vault_only = false);
static void _place_branch_entrances(int dlevel, char level_type);
static void _place_extra_vaults();
static void _place_minivaults(const std::string &tag = "",
int fewest = -1, int most = -1,
bool force = false);
static void _place_traps( int level_number );
static void _place_fog_machines( int level_number );
static void _prepare_swamp();
static void _prepare_shoals( int level_number );
static void _prepare_water( int level_number );
static void _check_doors();
static void _hide_doors();
static void _make_trail(int xs, int xr, int ys, int yr,int corrlength,
int intersect_chance,
int no_corr, dungeon_feature_type begin,
dungeon_feature_type end=DNGN_UNSEEN);
static bool _make_room(int sx,int sy,int ex,int ey,int max_doors, int doorlevel);
static void _place_pool(dungeon_feature_type pool_type, unsigned char pool_x1,
unsigned char pool_y1, unsigned char pool_x2,
unsigned char pool_y2);
static void _many_pools(dungeon_feature_type pool_type);
static bool _join_the_dots(const coord_def &from, const coord_def &to,
unsigned mmask, bool early_exit = false);
static bool _join_the_dots_rigorous(const coord_def &from,
const coord_def &to,
unsigned mapmask,
bool early_exit = false);
static void build_river(dungeon_feature_type river_type); //mv
static void build_lake(dungeon_feature_type lake_type); //mv
static void _build_river(dungeon_feature_type river_type); //mv
static void _build_lake(dungeon_feature_type lake_type); //mv
static void spotty_level(bool seeded, int iterations, bool boxy);
static void bigger_room();
static void plan_main(int level_number, int force_plan);
static char plan_1();
static char plan_2();
static char plan_3();
static char plan_4(char forbid_x1, char forbid_y1, char forbid_x2,
char forbid_y2, dungeon_feature_type force_wall);
static char plan_5();
static char plan_6(int level_number);
static bool octa_room(spec_room &sr, int oblique_max,
dungeon_feature_type type_floor);
static void portal_vault_level(int level_number);
static void labyrinth_level(int level_number);
static void box_room(int bx1, int bx2, int by1, int by2,
dungeon_feature_type wall_type);
static int box_room_doors( int bx1, int bx2, int by1, int by2, int new_doors);
static void city_level(int level_number);
static void diamond_rooms(int level_number);
static void _spotty_level(bool seeded, int iterations, bool boxy);
static void _bigger_room();
static void _plan_main(int level_number, int force_plan);
static char _plan_1();
static char _plan_2();
static char _plan_3();
static char _plan_4(char forbid_x1, char forbid_y1, char forbid_x2,
char forbid_y2, dungeon_feature_type force_wall);
static char _plan_5();
static char _plan_6(int level_number);
static bool _octa_room(spec_room &sr, int oblique_max,
dungeon_feature_type type_floor);
static void _portal_vault_level(int level_number);
static void _labyrinth_level(int level_number);
static void _box_room(int bx1, int bx2, int by1, int by2,
dungeon_feature_type wall_type);
static int _box_room_doors( int bx1, int bx2, int by1, int by2, int new_doors);
static void _city_level(int level_number);
static void _diamond_rooms(int level_number);
static void pick_float_exits(vault_placement &place,
std::vector<coord_def> &targets);
static void connect_vault(const vault_placement &vp);
static void _pick_float_exits(vault_placement &place,
std::vector<coord_def> &targets);
static void _connect_vault(const vault_placement &vp);
static void place_shops(int level_number, int nshops = 0);
static object_class_type item_in_shop(unsigned char shop_type);
static bool treasure_area(int level_number, unsigned char ta1_x,
unsigned char ta2_x, unsigned char ta1_y,
unsigned char ta2_y);
static void big_room(int level_number);
static void chequerboard(spec_room &sr, dungeon_feature_type target,
dungeon_feature_type floor1,
dungeon_feature_type floor2);
static void roguey_level(int level_number, spec_room &sr);
static void morgue(spec_room &sr);
static void _place_shops(int level_number, int nshops = 0);
static object_class_type _item_in_shop(unsigned char shop_type);
static bool _treasure_area(int level_number, unsigned char ta1_x,
unsigned char ta2_x, unsigned char ta1_y,
unsigned char ta2_y);
static void special_room(int level_number, spec_room &sr);
static void specr_2(spec_room &sr);
static void beehive(spec_room &sr);
static void jelly_pit(int level_number, spec_room &sr);
static void _special_room(int level_number, spec_room &sr);
static void _specr_2(spec_room &sr);
static void _big_room(int level_number);
static void _chequerboard(spec_room &sr, dungeon_feature_type target,
dungeon_feature_type floor1,
dungeon_feature_type floor2);
static void _roguey_level(int level_number, spec_room &sr);
static void _morgue(spec_room &sr);
static void _beehive(spec_room &sr);
static void _jelly_pit(int level_number, spec_room &sr);
static bool build_secondary_vault(int level_number, int vault,
int rune_subst = -1,
bool generating_level = true,
bool clobber = false,
bool make_no_exits = false,
const coord_def &where = coord_def(-1, -1));
static bool build_vaults(int level_number, int vault_number,
int rune_subst = -1, bool build_only = false,
bool check_vault_place = false,
bool generating_level = true, bool clobber = false,
bool make_no_exits = false,
const coord_def &where = coord_def(-1, -1));
static bool build_minivaults(int level_number, int force_vault,
bool level_builder = true, bool clobber = false,
bool make_no_exits = false,
const coord_def &where = coord_def() );
static int vault_grid( vault_placement &,
int level_number, int vx, int vy, int altar_count,
FixedVector < object_class_type, 7 > &acq_item_class,
int vgrid, std::vector<coord_def> &targets,
int &num_runes, int rune_subst = -1, bool foll = false);
static bool _build_secondary_vault(int level_number, int vault,
int rune_subst = -1,
bool generating_level = true,
bool clobber = false,
bool make_no_exits = false,
const coord_def &where = coord_def(-1, -1));
static bool _build_vaults(int level_number, int vault_number,
int rune_subst = -1, bool build_only = false,
bool check_vault_place = false,
bool generating_level = true, bool clobber = false,
bool make_no_exits = false,
const coord_def &where = coord_def(-1, -1));
static bool _build_minivaults(int level_number, int force_vault,
bool level_builder = true, bool clobber = false,
bool make_no_exits = false,
const coord_def &where = coord_def() );
static int _vault_grid( vault_placement &,
int level_number, int vx, int vy, int altar_count,
FixedVector < object_class_type, 7 > &acq_item_class,
int vgrid, std::vector<coord_def> &targets,
int &num_runes, int rune_subst = -1, bool foll = false);
static int dgn_random_map_for_place(bool wantmini);
static void dgn_load_colour_grid();
static void dgn_map_colour_fixup();
static int _dgn_random_map_for_place(bool wantmini);
static void _dgn_load_colour_grid();
static void _dgn_map_colour_fixup();
static void dgn_fill_zone( const coord_def &c, int zone, point_record &prec,
bool (*passable)(const coord_def &)
= dgn_square_is_passable)
static void _dgn_fill_zone( const coord_def &c, int zone, point_record &prec,
bool (*passable)(const coord_def &)
= _dgn_square_is_passable)
replace_area( 0,0,GXM-1,GYM-1, DNGN_BUILDER_SPECIAL_WALL, DNGN_ROCK_WALL );
replace_area( 0,0,GXM-1,GYM-1, DNGN_BUILDER_SPECIAL_FLOOR, DNGN_FLOOR );
_replace_area( 0,0,GXM-1,GYM-1, DNGN_BUILDER_SPECIAL_WALL, DNGN_ROCK_WALL );
_replace_area( 0,0,GXM-1,GYM-1, DNGN_BUILDER_SPECIAL_FLOOR, DNGN_FLOOR );
place_minivaults();
place_branch_entrances( level_number, level_type );
place_extra_vaults();
dgn_verify_connectivity(nvaults);
_place_minivaults();
_place_branch_entrances( level_number, level_type );
_place_extra_vaults();
_dgn_verify_connectivity(nvaults);
if (!player_in_branch(BRANCH_COCYTUS) &&
!player_in_branch(BRANCH_SWAMP) &&
!player_in_branch(BRANCH_SHOALS))
prepare_water( level_number );
if (!player_in_branch(BRANCH_COCYTUS)
&& !player_in_branch(BRANCH_SWAMP)
&& !player_in_branch(BRANCH_SHOALS))
{
_prepare_water( level_number );
}
static void replace_in_grid(int x1, int y1, int x2, int y2,
dungeon_feature_type oldfeat,
dungeon_feature_type newfeat)
static void _replace_in_grid(int x1, int y1, int x2, int y2,
dungeon_feature_type oldfeat,
dungeon_feature_type newfeat)
static bool make_box(int room_x1, int room_y1, int room_x2, int room_y2,
dungeon_feature_type floor,
dungeon_feature_type wall,
dungeon_feature_type avoid)
static bool _make_box(int room_x1, int room_y1, int room_x2, int room_y2,
dungeon_feature_type floor,
dungeon_feature_type wall,
dungeon_feature_type avoid)
make_trail( 35, 30, 35, 20, corrlength, intersect_chance, no_corr,
DNGN_STONE_STAIRS_DOWN_I, DNGN_STONE_STAIRS_UP_I );
_make_trail( 35, 30, 35, 20, corrlength, intersect_chance, no_corr,
DNGN_STONE_STAIRS_DOWN_I, DNGN_STONE_STAIRS_UP_I );
make_trail( 10, 15, 10, 15, corrlength, intersect_chance, no_corr,
DNGN_STONE_STAIRS_DOWN_II, DNGN_STONE_STAIRS_UP_II );
_make_trail( 10, 15, 10, 15, corrlength, intersect_chance, no_corr,
DNGN_STONE_STAIRS_DOWN_II, DNGN_STONE_STAIRS_UP_II );
make_trail(50,20,10,15,corrlength,intersect_chance,no_corr,
DNGN_STONE_STAIRS_DOWN_III, DNGN_STONE_STAIRS_UP_III);
_make_trail( 50, 20, 10, 15, corrlength, intersect_chance, no_corr,
DNGN_STONE_STAIRS_DOWN_III, DNGN_STONE_STAIRS_UP_III);
static void place_specific_stair(dungeon_feature_type stair,
const std::string &tag,
int dlevel,
bool vault_only)
static void _place_specific_stair(dungeon_feature_type stair,
const std::string &tag,
int dlevel,
bool vault_only)
static void make_trail(int xs, int xr, int ys, int yr, int corrlength,
int intersect_chance, int no_corr,
dungeon_feature_type begin,
dungeon_feature_type end)
static void _make_trail(int xs, int xr, int ys, int yr, int corrlength,
int intersect_chance, int no_corr,
dungeon_feature_type begin,
dungeon_feature_type end)
diag_door += good_door_spot(sx,sy);
diag_door += good_door_spot(ex,sy);
diag_door += good_door_spot(sx,ey);
diag_door += good_door_spot(ex,ey);
diag_door += _good_door_spot(sx,sy);
diag_door += _good_door_spot(ex,sy);
diag_door += _good_door_spot(sx,ey);
diag_door += _good_door_spot(ex,ey);
place_monster_vector(swimming_things, level_number,
std::min(random2avg(9, 2)
+ (random2(lava_spaces) / 10), 15));
_place_monster_vector(swimming_things, level_number,
std::min(random2avg(9, 2)
+ (random2(lava_spaces) / 10), 15));
place_monster_vector(swimming_things, level_number,
std::min(random2avg(9, 2)
+ (random2(water_spaces) / 10), 15));
_place_monster_vector(swimming_things, level_number,
std::min(random2avg(9, 2)
+ (random2(water_spaces) / 10), 15));
static void fill_monster_pit( spec_room &sr, FixedVector<pit_mons_def,
MAX_PIT_MONSTERS> &pit_list, int density,
int lord_type, int lordx, int lordy )
static void _fill_monster_pit( spec_room &sr, FixedVector<pit_mons_def,
MAX_PIT_MONSTERS> &pit_list, int density,
int lord_type, int lordx, int lordy )
static bool build_minivaults(int level_number, int force_vault,
bool building_level, bool clobber,
bool make_no_exits, const coord_def &where)
static bool _build_minivaults(int level_number, int force_vault,
bool building_level, bool clobber,
bool make_no_exits, const coord_def &where)
altar_count = vault_grid( place,
level_number, vx, vy,
altar_count,
acq_item_class,
feat, target_connections,
num_runes );
altar_count = _vault_grid( place,
level_number, vx, vy,
altar_count,
acq_item_class,
feat, target_connections,
num_runes );
static coord_def dig_away_dir(const vault_placement &place,
const coord_def &pos)
static coord_def _dig_away_dir(const vault_placement &place,
const coord_def &pos)
static void pick_float_exits(vault_placement &place,
std::vector<coord_def> &targets)
static void _pick_float_exits(vault_placement &place,
std::vector<coord_def> &targets)
static std::vector<coord_def> external_connection_points(
const vault_placement &place,
const std::vector<coord_def> &target_connections)
static std::vector<coord_def> _external_connection_points(
const vault_placement &place,
const std::vector<coord_def> &target_connections)
rune_subst = dgn_find_rune_subst_tags(mdef->tags);
did_map = build_secondary_vault(you.your_level, map, rune_subst,
generating_level, clobber,
make_no_exits, where);
rune_subst = _dgn_find_rune_subst_tags(mdef->tags);
did_map = _build_secondary_vault(you.your_level, map, rune_subst,
generating_level, clobber,
make_no_exits, where);
static bool build_secondary_vault(int level_number, int vault,
int rune_subst, bool generating_level,
bool clobber, bool no_exits,
const coord_def &where)
static bool _build_secondary_vault(int level_number, int vault,
int rune_subst, bool generating_level,
bool clobber, bool no_exits,
const coord_def &where)
static bool build_vaults(int level_number, int force_vault, int rune_subst,
bool build_only, bool check_collisions,
bool generating_level, bool clobber,
bool make_no_exits, const coord_def &where)
static bool _build_vaults(int level_number, int force_vault, int rune_subst,
bool build_only, bool check_collisions,
bool generating_level, bool clobber,
bool make_no_exits, const coord_def &where)
altar_count = vault_grid( place,
level_number, vx, vy, altar_count,
acq_item_class,
vgrid[vy][vx],
target_connections,
num_runes,
rune_subst );
altar_count = _vault_grid( place,
level_number, vx, vy, altar_count,
acq_item_class,
vgrid[vy][vx],
target_connections,
num_runes,
rune_subst );
static int vault_grid( vault_placement &place,
int level_number,
int vx, int vy,
int altar_count,
FixedVector < object_class_type, 7 > &acq_item_class,
int vgrid,
std::vector<coord_def> &targets,
int &num_runes,
int rune_subst,
bool following )
static int _vault_grid( vault_placement &place,
int level_number,
int vx, int vy,
int altar_count,
FixedVector < object_class_type, 7 > &acq_item_class,
int vgrid,
std::vector<coord_def> &targets,
int &num_runes,
int rune_subst,
bool following )
altar_count = vault_grid( place, level_number, vx, vy,
altar_count, acq_item_class,
f.glyph, targets, num_runes,
rune_subst, true );
altar_count = _vault_grid( place, level_number, vx, vy,
altar_count, acq_item_class,
f.glyph, targets, num_runes,
rune_subst, true );
static void replace_area( int sx, int sy, int ex, int ey,
dungeon_feature_type replace,
dungeon_feature_type feature, unsigned mapmask)
static void _replace_area( int sx, int sy, int ex, int ey,
dungeon_feature_type replace,
dungeon_feature_type feature, unsigned mapmask)
static bool join_the_dots_pathfind(coord_set &coords,
const coord_def &from, const coord_def &to,
unsigned mapmask, bool early_exit)
static bool _join_the_dots_pathfind(coord_set &coords,
const coord_def &from, const coord_def &to,
unsigned mapmask, bool early_exit)
static void place_pool(dungeon_feature_type pool_type, unsigned char pool_x1,
unsigned char pool_y1, unsigned char pool_x2,
unsigned char pool_y2)
static void _place_pool(dungeon_feature_type pool_type, unsigned char pool_x1,
unsigned char pool_y1, unsigned char pool_x2,
unsigned char pool_y2)
count_feature_in_box(px-2, py-2, px+3, py+3, DNGN_ROCK_WALL) +
count_feature_in_box(px-2, py-2, px+3, py+3, DNGN_CLOSED_DOOR) +
count_feature_in_box(px-2, py-2, px+3, py+3, DNGN_SECRET_DOOR) +
count_feature_in_box(px-2, py-2, px+3, py+3, DNGN_FLOOR);
_count_feature_in_box(px-2, py-2, px+3, py+3, DNGN_ROCK_WALL) +
_count_feature_in_box(px-2, py-2, px+3, py+3, DNGN_CLOSED_DOOR) +
_count_feature_in_box(px-2, py-2, px+3, py+3, DNGN_SECRET_DOOR) +
_count_feature_in_box(px-2, py-2, px+3, py+3, DNGN_FLOOR);
place_specific_stair( static_cast<dungeon_feature_type>(
j + ((i==0) ? DNGN_STONE_STAIRS_DOWN_I
: DNGN_STONE_STAIRS_UP_I)) );
_place_specific_stair( static_cast<dungeon_feature_type>(
j + ((i == 0) ? DNGN_STONE_STAIRS_DOWN_I
: DNGN_STONE_STAIRS_UP_I)) );
do_stairs = ((force_plan == 1) ? plan_1() :
(force_plan == 2) ? plan_2() :
(force_plan == 3) ? plan_3() :
(force_plan == 4) ? plan_4(0, 0, 0, 0, NUM_FEATURES) :
(force_plan == 5) ? (one_chance_in(9) ? plan_5()
: plan_3()) :
(force_plan == 6) ? plan_6(level_number)
: plan_3());
do_stairs = ((force_plan == 1) ? _plan_1() :
(force_plan == 2) ? _plan_2() :
(force_plan == 3) ? _plan_3() :
(force_plan == 4) ? _plan_4(0, 0, 0, 0, NUM_FEATURES) :
(force_plan == 5) ? (one_chance_in(9) ? _plan_5()
: _plan_3()) :
(force_plan == 6) ? _plan_6(level_number)
: _plan_3());
place_specific_stair( static_cast<dungeon_feature_type>(
j + ((i==0) ? DNGN_STONE_STAIRS_DOWN_I
: DNGN_STONE_STAIRS_UP_I)) );
_place_specific_stair( static_cast<dungeon_feature_type>(
j + ((i == 0)? DNGN_STONE_STAIRS_DOWN_I
: DNGN_STONE_STAIRS_UP_I)));
replace_area(10, 10, (GXM - 10), (10 + width), DNGN_ROCK_WALL, DNGN_FLOOR);
replace_area(10, (60 - width), (GXM - 10), (GYM - 10),
DNGN_ROCK_WALL, DNGN_FLOOR);
replace_area(10, 10, (10 + width), (GYM - 10), DNGN_ROCK_WALL, DNGN_FLOOR);
replace_area((60 - width), 10, (GXM - 10), (GYM - 10),
DNGN_ROCK_WALL, DNGN_FLOOR);
_replace_area(10, 10, (GXM - 10), (10 + width), DNGN_ROCK_WALL, DNGN_FLOOR);
_replace_area(10, (60 - width), (GXM - 10), (GYM - 10),
DNGN_ROCK_WALL, DNGN_FLOOR);
_replace_area(10, 10, (10 + width), (GYM - 10), DNGN_ROCK_WALL, DNGN_FLOOR);
_replace_area((60 - width), 10, (GXM - 10), (GYM - 10),
DNGN_ROCK_WALL, DNGN_FLOOR);
replace_area(10, (35 - width2), (GXM - 10), (35 + width2),
DNGN_ROCK_WALL, DNGN_FLOOR);
replace_area((40 - width2), 10, (40 + width2), (GYM - 10),
DNGN_ROCK_WALL, DNGN_FLOOR);
_replace_area(10, (35 - width2), (GXM - 10), (35 + width2),
DNGN_ROCK_WALL, DNGN_FLOOR);
_replace_area((40 - width2), 10, (40 + width2), (GYM - 10),
DNGN_ROCK_WALL, DNGN_FLOOR);
replace_area(10, (35 - width2), (GXM - 10), (35 + width2),
DNGN_ROCK_WALL, DNGN_FLOOR);
replace_area((40 - width2), 10, (40 + width2), (GYM - 10),
DNGN_ROCK_WALL, DNGN_FLOOR);
_replace_area(10, (35 - width2), (GXM - 10), (35 + width2),
DNGN_ROCK_WALL, DNGN_FLOOR);
_replace_area((40 - width2), 10, (40 + width2), (GYM - 10),
DNGN_ROCK_WALL, DNGN_FLOOR);
if (exclusive && count_antifeature_in_box(romx1[which_room] - 1,
romy1[which_room] - 1,
romx2[which_room] + 1,
romy2[which_room] + 1,
DNGN_ROCK_WALL))
if (exclusive && _count_antifeature_in_box(romx1[which_room] - 1,
romy1[which_room] - 1,
romx2[which_room] + 1,
romy2[which_room] + 1,
DNGN_ROCK_WALL))
replace_area(romx1[which_room], romy1[which_room], romx2[which_room],
romy2[which_room], DNGN_ROCK_WALL, DNGN_FLOOR);
_replace_area(romx1[which_room], romy1[which_room], romx2[which_room],
romy2[which_room], DNGN_ROCK_WALL, DNGN_FLOOR);
join_the_dots( coord_def(rx1 + random2( rx2 - rx1 ),
ry1 + random2( ry2 - ry1 )),
coord_def(prev_rx1 + random2(prev_rx2 - prev_rx1),
prev_ry1 + random2(prev_ry2 - prev_ry1)),
MMT_VAULT );
_join_the_dots( coord_def(rx1 + random2( rx2 - rx1 ),
ry1 + random2( ry2 - ry1 )),
coord_def(prev_rx1 + random2(prev_rx2 - prev_rx1),
prev_ry1 + random2(prev_ry2 - prev_ry1)),
MMT_VAULT );
join_the_dots( coord_def( rx1 + random2( rx2 - rx1 ),
ry1 + random2( ry2 - ry1 ) ),
coord_def(
prev_rx1 + random2( prev_rx2 - prev_rx1 ),
prev_ry1 + random2( prev_ry2 - prev_ry1 ) ),
MMT_VAULT );
_join_the_dots( coord_def( rx1 + random2( rx2 - rx1 ),
ry1 + random2( ry2 - ry1 ) ),
coord_def(
prev_rx1 + random2( prev_rx2 - prev_rx1 ),
prev_ry1 + random2( prev_ry2 - prev_ry1 ) ),
MMT_VAULT );
static char plan_4(char forbid_x1, char forbid_y1, char forbid_x2,
char forbid_y2, dungeon_feature_type force_wall)
static char _plan_4(char forbid_x1, char forbid_y1, char forbid_x2,
char forbid_y2, dungeon_feature_type force_wall)
replace_area(23, 23, 26, 26, DNGN_FLOOR, DNGN_STONE_WALL);
replace_area(23, 47, 26, 50, DNGN_FLOOR, DNGN_STONE_WALL);
replace_area(55, 23, 58, 26, DNGN_FLOOR, DNGN_STONE_WALL);
replace_area(55, 47, 58, 50, DNGN_FLOOR, DNGN_STONE_WALL);
replace_area(39, 20, 43, 23, DNGN_FLOOR, DNGN_STONE_WALL);
replace_area(39, 50, 43, 53, DNGN_FLOOR, DNGN_STONE_WALL);
replace_area(20, 30, 23, 33, DNGN_FLOOR, DNGN_STONE_WALL);
replace_area(20, 40, 23, 43, DNGN_FLOOR, DNGN_STONE_WALL);
replace_area(58, 30, 61, 33, DNGN_FLOOR, DNGN_STONE_WALL);
replace_area(58, 40, 61, 43, DNGN_FLOOR, DNGN_STONE_WALL);
_replace_area(23, 23, 26, 26, DNGN_FLOOR, DNGN_STONE_WALL);
_replace_area(23, 47, 26, 50, DNGN_FLOOR, DNGN_STONE_WALL);
_replace_area(55, 23, 58, 26, DNGN_FLOOR, DNGN_STONE_WALL);
_replace_area(55, 47, 58, 50, DNGN_FLOOR, DNGN_STONE_WALL);
_replace_area(39, 20, 43, 23, DNGN_FLOOR, DNGN_STONE_WALL);
_replace_area(39, 50, 43, 53, DNGN_FLOOR, DNGN_STONE_WALL);
_replace_area(20, 30, 23, 33, DNGN_FLOOR, DNGN_STONE_WALL);
_replace_area(20, 40, 23, 43, DNGN_FLOOR, DNGN_STONE_WALL);
_replace_area(58, 30, 61, 33, DNGN_FLOOR, DNGN_STONE_WALL);
_replace_area(58, 40, 61, 43, DNGN_FLOOR, DNGN_STONE_WALL);
static void change_walls_from_centre(const dgn_region ®ion,
const coord_def ¢re,
bool rectangular,
unsigned mmask,
dungeon_feature_type wall,
const std::vector<dist_feat> &ldist)
static void _change_walls_from_centre(const dgn_region ®ion,
const coord_def ¢re,
bool rectangular,
unsigned mmask,
dungeon_feature_type wall,
const std::vector<dist_feat> &ldist)
static void change_walls_from_centre(const dgn_region ®ion,
const coord_def &c,
bool rectangular,
dungeon_feature_type wall,
...)
static void _change_walls_from_centre(const dgn_region ®ion,
const coord_def &c,
bool rectangular,
dungeon_feature_type wall,
...)
static void labyrinth_level(int level_number)
static void _labyrinth_level(int level_number)
change_walls_from_centre(lab, end, false,
DNGN_ROCK_WALL,
15 * 15, DNGN_METAL_WALL,
34 * 34, DNGN_STONE_WALL,
0);
_change_walls_from_centre(lab, end, false,
DNGN_ROCK_WALL,
15 * 15, DNGN_METAL_WALL,
34 * 34, DNGN_STONE_WALL,
0);
if (grd[x-1][y] == DNGN_CLOSED_DOOR && is_wall(x-1,y-1) && is_wall(x-1,y+1)
|| grd[x+1][y] == DNGN_CLOSED_DOOR && is_wall(x+1,y-1) && is_wall(x+1,y+1)
|| grd[x][y-1] == DNGN_CLOSED_DOOR && is_wall(x-1,y-1) && is_wall(x+1,y-1)
|| grd[x][y+1] == DNGN_CLOSED_DOOR && is_wall(x-1,y+1) && is_wall(x+1,y+1))
if ( grd[x-1][y] == DNGN_CLOSED_DOOR
&& _is_wall(x-1,y-1) && _is_wall(x-1,y+1)
|| grd[x+1][y] == DNGN_CLOSED_DOOR
&& _is_wall(x+1,y-1) && _is_wall(x+1,y+1)
|| grd[x][y-1] == DNGN_CLOSED_DOOR
&& _is_wall(x-1,y-1) && _is_wall(x+1,y-1)
|| grd[x][y+1] == DNGN_CLOSED_DOOR
&& _is_wall(x-1,y+1) && _is_wall(x+1,y+1))
place_specific_stair( static_cast<dungeon_feature_type>(
j + ((i == 0) ? DNGN_STONE_STAIRS_DOWN_I
: DNGN_STONE_STAIRS_UP_I)) );
_place_specific_stair( static_cast<dungeon_feature_type>(
j + ((i == 0) ? DNGN_STONE_STAIRS_DOWN_I
: DNGN_STONE_STAIRS_UP_I)) );
static bool treasure_area(int level_number, unsigned char ta1_x,
unsigned char ta2_x, unsigned char ta1_y,
unsigned char ta2_y)
static bool _treasure_area(int level_number, unsigned char ta1_x,
unsigned char ta2_x, unsigned char ta1_y,
unsigned char ta2_y)
replace_area(sr.x1, sr.y1, sr.x2, sr.y2, DNGN_ROCK_WALL, type_floor);
replace_area(sr.x1, sr.y1, sr.x2, sr.y2, DNGN_CLOSED_DOOR, type_floor);
_replace_area(sr.x1, sr.y1, sr.x2, sr.y2, DNGN_ROCK_WALL, type_floor);
_replace_area(sr.x1, sr.y1, sr.x2, sr.y2, DNGN_CLOSED_DOOR, type_floor);
static void chequerboard( spec_room &sr, dungeon_feature_type target,
dungeon_feature_type floor1,
dungeon_feature_type floor2 )
static void _chequerboard( spec_room &sr, dungeon_feature_type target,
dungeon_feature_type floor1,
dungeon_feature_type floor2 )
replace_area(sr.x1-1, sr.y1-1, sr.x2+1,sr.y1-1, DNGN_ROCK_WALL, DNGN_BUILDER_SPECIAL_WALL);
replace_area(sr.x1-1, sr.y1-1, sr.x2+1,sr.y1-1, DNGN_FLOOR, DNGN_BUILDER_SPECIAL_FLOOR);
replace_area(sr.x1-1, sr.y1-1, sr.x2+1,sr.y1-1, DNGN_CLOSED_DOOR, DNGN_BUILDER_SPECIAL_FLOOR);
_replace_area(sr.x1-1, sr.y1-1, sr.x2+1,sr.y1-1,
DNGN_ROCK_WALL, DNGN_BUILDER_SPECIAL_WALL);
_replace_area(sr.x1-1, sr.y1-1, sr.x2+1,sr.y1-1,
DNGN_FLOOR, DNGN_BUILDER_SPECIAL_FLOOR);
_replace_area(sr.x1-1, sr.y1-1, sr.x2+1,sr.y1-1,
DNGN_CLOSED_DOOR, DNGN_BUILDER_SPECIAL_FLOOR);
replace_area(sr.x1-1, sr.y2+1, sr.x2+1,sr.y2+1, DNGN_ROCK_WALL, DNGN_BUILDER_SPECIAL_WALL);
replace_area(sr.x1-1, sr.y2+1, sr.x2+1,sr.y2+1, DNGN_FLOOR, DNGN_BUILDER_SPECIAL_FLOOR);
replace_area(sr.x1-1, sr.y2+1, sr.x2+1,sr.y2+1, DNGN_CLOSED_DOOR, DNGN_BUILDER_SPECIAL_FLOOR);
_replace_area(sr.x1-1, sr.y2+1, sr.x2+1,sr.y2+1,
DNGN_ROCK_WALL, DNGN_BUILDER_SPECIAL_WALL);
_replace_area(sr.x1-1, sr.y2+1, sr.x2+1,sr.y2+1,
DNGN_FLOOR, DNGN_BUILDER_SPECIAL_FLOOR);
_replace_area(sr.x1-1, sr.y2+1, sr.x2+1,sr.y2+1,
DNGN_CLOSED_DOOR, DNGN_BUILDER_SPECIAL_FLOOR);
replace_area(sr.x1-1, sr.y1-1, sr.x1-1, sr.y2+1, DNGN_ROCK_WALL, DNGN_BUILDER_SPECIAL_WALL);
replace_area(sr.x1-1, sr.y1-1, sr.x1-1, sr.y2+1, DNGN_FLOOR, DNGN_BUILDER_SPECIAL_FLOOR);
replace_area(sr.x1-1, sr.y1-1, sr.x1-1, sr.y2+1, DNGN_CLOSED_DOOR, DNGN_BUILDER_SPECIAL_FLOOR);
_replace_area(sr.x1-1, sr.y1-1, sr.x1-1, sr.y2+1,
DNGN_ROCK_WALL, DNGN_BUILDER_SPECIAL_WALL);
_replace_area(sr.x1-1, sr.y1-1, sr.x1-1, sr.y2+1,
DNGN_FLOOR, DNGN_BUILDER_SPECIAL_FLOOR);
_replace_area(sr.x1-1, sr.y1-1, sr.x1-1, sr.y2+1,
DNGN_CLOSED_DOOR, DNGN_BUILDER_SPECIAL_FLOOR);
replace_area(sr.x2+1, sr.y1-1, sr.x2+1, sr.y2+1, DNGN_ROCK_WALL, DNGN_BUILDER_SPECIAL_WALL);
replace_area(sr.x2+1, sr.y1-1, sr.x2+1, sr.y2+1, DNGN_FLOOR, DNGN_BUILDER_SPECIAL_FLOOR);
replace_area(sr.x2+1, sr.y1-1, sr.x2+1, sr.y2+1, DNGN_CLOSED_DOOR, DNGN_BUILDER_SPECIAL_FLOOR);
_replace_area(sr.x2+1, sr.y1-1, sr.x2+1, sr.y2+1,
DNGN_ROCK_WALL, DNGN_BUILDER_SPECIAL_WALL);
_replace_area(sr.x2+1, sr.y1-1, sr.x2+1, sr.y2+1,
DNGN_FLOOR, DNGN_BUILDER_SPECIAL_FLOOR);
_replace_area(sr.x2+1, sr.y1-1, sr.x2+1, sr.y2+1,
DNGN_CLOSED_DOOR, DNGN_BUILDER_SPECIAL_FLOOR);
place_specific_stair( static_cast<dungeon_feature_type>(
j + ((i==0) ? DNGN_STONE_STAIRS_DOWN_I
: DNGN_STONE_STAIRS_UP_I)) );
_place_specific_stair( static_cast<dungeon_feature_type>(
j + ((i == 0) ? DNGN_STONE_STAIRS_DOWN_I
: DNGN_STONE_STAIRS_UP_I)) );
case CARD_PORTAL: return "the Portal";
case CARD_WARP: return "the Warp";
case CARD_SWAP: return "Swap";
case CARD_VELOCITY: return "Velocity";
case CARD_DAMNATION: return "Damnation";
case CARD_SOLITUDE: return "Solitude";
case CARD_ELIXIR: return "the Elixir";
case CARD_BATTLELUST: return "Battlelust";
case CARD_METAMORPHOSIS: return "Metamorphosis";
case CARD_HELM: return "the Helm";
case CARD_BLADE: return "the Blade";
case CARD_SHADOW: return "the Shadow";
case CARD_POTION: return "the Potion";
case CARD_FOCUS: return "Focus";
case CARD_SHUFFLE: return "Shuffle";
case CARD_EXPERIENCE: return "Experience";
case CARD_HELIX: return "the Helix";
case CARD_SAGE: return "the Sage";
case CARD_DOWSING: return "Dowsing";
case CARD_TROWEL: return "the Trowel";
case CARD_MINEFIELD: return "the Minefield";
case CARD_GENIE: return "the Genie";
case CARD_TOMB: return "the Tomb";
case CARD_GLASS: return "Vitrification";
case CARD_MAP: return "the Map";
case CARD_BANSHEE: return "the Banshee";
case CARD_WILD_MAGIC: return "Wild Magic";
case CARD_CRUSADE: return "the Crusade";
case CARD_SUMMON_ANIMAL: return "the Herd";
case CARD_SUMMON_DEMON: return "the Pentagram";
case CARD_SUMMON_WEAPON: return "the Dance";
case CARD_SUMMON_FLYING: return "Foxfire";
case CARD_PORTAL: return "the Portal";
case CARD_WARP: return "the Warp";
case CARD_SWAP: return "Swap";
case CARD_VELOCITY: return "Velocity";
case CARD_DAMNATION: return "Damnation";
case CARD_SOLITUDE: return "Solitude";
case CARD_ELIXIR: return "the Elixir";
case CARD_BATTLELUST: return "Battlelust";
case CARD_METAMORPHOSIS: return "Metamorphosis";
case CARD_HELM: return "the Helm";
case CARD_BLADE: return "the Blade";
case CARD_SHADOW: return "the Shadow";
case CARD_POTION: return "the Potion";
case CARD_FOCUS: return "Focus";
case CARD_SHUFFLE: return "Shuffle";
case CARD_EXPERIENCE: return "Experience";
case CARD_HELIX: return "the Helix";
case CARD_SAGE: return "the Sage";
case CARD_DOWSING: return "Dowsing";
case CARD_TROWEL: return "the Trowel";
case CARD_MINEFIELD: return "the Minefield";
case CARD_GENIE: return "the Genie";
case CARD_TOMB: return "the Tomb";
case CARD_GLASS: return "Vitrification";
case CARD_MAP: return "the Map";
case CARD_BANSHEE: return "the Banshee";
case CARD_WILD_MAGIC: return "Wild Magic";
case CARD_CRUSADE: return "the Crusade";
case CARD_SUMMON_ANIMAL: return "the Herd";
case CARD_SUMMON_DEMON: return "the Pentagram";
case CARD_SUMMON_WEAPON: return "the Dance";
case CARD_SUMMON_FLYING: return "Foxfire";
case CARD_SUMMON_ANY: return "Summoning";
case CARD_XOM: return "Xom";
case CARD_FAMINE: return "Famine";
case CARD_FEAST: return "the Feast";
case CARD_WARPWRIGHT: return "Warpwright";
case CARD_VITRIOL: return "Vitriol";
case CARD_FLAME: return "Flame";
case CARD_FROST: return "Frost";
case CARD_VENOM: return "Venom";
case CARD_SPARK: return "the Spark";
case CARD_HAMMER: return "the Hammer";
case CARD_PAIN: return "Pain";
case CARD_TORMENT: return "Torment";
case CARD_SPADE: return "the Spade";
case CARD_BARGAIN: return "the Bargain";
case CARD_WRATH: return "Wrath";
case CARD_WRAITH: return "the Wraith";
case CARD_CURSE: return "the Curse";
case NUM_CARDS: return "a buggy card";
case CARD_SUMMON_ANY: return "Summoning";
case CARD_XOM: return "Xom";
case CARD_FAMINE: return "Famine";
case CARD_FEAST: return "the Feast";
case CARD_WARPWRIGHT: return "Warpwright";
case CARD_VITRIOL: return "Vitriol";
case CARD_FLAME: return "Flame";
case CARD_FROST: return "Frost";
case CARD_VENOM: return "Venom";
case CARD_SPARK: return "the Spark";
case CARD_HAMMER: return "the Hammer";
case CARD_PAIN: return "Pain";
case CARD_TORMENT: return "Torment";
case CARD_SPADE: return "the Spade";
case CARD_BARGAIN: return "the Bargain";
case CARD_WRATH: return "Wrath";
case CARD_WRAITH: return "the Wraith";
case CARD_CURSE: return "the Curse";
case NUM_CARDS: return "a buggy card";
set_card_and_flags(deck, 0, card1, flags1 | CFLAG_SEEN);
set_card_and_flags(deck, 1, card2, flags2 | CFLAG_SEEN);
set_card_and_flags(deck, 2, card3, flags3 | CFLAG_SEEN);
_set_card_and_flags(deck, 0, card1, flags1 | CFLAG_SEEN);
_set_card_and_flags(deck, 1, card2, flags2 | CFLAG_SEEN);
_set_card_and_flags(deck, 2, card3, flags3 | CFLAG_SEEN);
const zap_type firezaps[3] = { ZAP_FLAME, ZAP_STICKY_FLAME, ZAP_FIRE };
const zap_type frostzaps[3] = { ZAP_FROST, ZAP_ICE_BOLT, ZAP_COLD };
const zap_type firezaps[3] = { ZAP_FLAME, ZAP_STICKY_FLAME, ZAP_FIRE };
const zap_type frostzaps[3] = { ZAP_FROST, ZAP_ICE_BOLT, ZAP_COLD };
const zap_type venomzaps[3] = { ZAP_STING, ZAP_VENOM_BOLT,
ZAP_POISON_ARROW };
const zap_type sparkzaps[3] = { ZAP_ELECTRICITY, ZAP_LIGHTNING,
ZAP_ORB_OF_ELECTRICITY };
const zap_type painzaps[2] = { ZAP_AGONY, ZAP_NEGATIVE_ENERGY };
const zap_type venomzaps[3] = { ZAP_STING, ZAP_VENOM_BOLT,
ZAP_POISON_ARROW };
const zap_type sparkzaps[3] = { ZAP_ELECTRICITY, ZAP_LIGHTNING,
ZAP_ORB_OF_ELECTRICITY };
const zap_type painzaps[2] = { ZAP_AGONY, ZAP_NEGATIVE_ENERGY };
if (monster->type == -1 || !mons_near(monster) ||
mons_friendly(monster) ||
mons_holiness(monster) != MH_NATURAL ||
mons_is_unique(monster->type) ||
mons_immune_magic(monster) ||
(is_good_god(you.religion) && mons_is_evil(monster)))
if (monster->type == -1 || !mons_near(monster)
|| mons_friendly(monster)
|| mons_holiness(monster) != MH_NATURAL
|| mons_is_unique(monster->type)
|| mons_immune_magic(monster)
|| (is_good_god(you.religion) && mons_is_evil(monster)))
case CARD_PORTAL: portal_card(power, rarity); break;
case CARD_WARP: warp_card(power, rarity); break;
case CARD_SWAP: swap_monster_card(power, rarity); break;
case CARD_VELOCITY: velocity_card(power, rarity); break;
case CARD_DAMNATION: damnation_card(power, rarity); break;
case CARD_PORTAL: _portal_card(power, rarity); break;
case CARD_WARP: _warp_card(power, rarity); break;
case CARD_SWAP: _swap_monster_card(power, rarity); break;
case CARD_VELOCITY: _velocity_card(power, rarity); break;
case CARD_DAMNATION: _damnation_card(power, rarity); break;
case CARD_ELIXIR: elixir_card(power, rarity); break;
case CARD_BATTLELUST: battle_lust_card(power, rarity); break;
case CARD_METAMORPHOSIS: metamorphosis_card(power, rarity); break;
case CARD_HELM: helm_card(power, rarity); break;
case CARD_BLADE: blade_card(power, rarity); break;
case CARD_SHADOW: shadow_card(power, rarity); break;
case CARD_POTION: potion_card(power, rarity); break;
case CARD_FOCUS: focus_card(power, rarity); break;
case CARD_SHUFFLE: shuffle_card(power, rarity); break;
case CARD_EXPERIENCE: experience_card(power, rarity); break;
case CARD_HELIX: helix_card(power, rarity); break;
case CARD_SAGE: sage_card(power, rarity); break;
case CARD_GLASS: glass_card(power, rarity); break;
case CARD_DOWSING: dowsing_card(power, rarity); break;
case CARD_MINEFIELD: minefield_card(power, rarity); break;
case CARD_GENIE: genie_card(power, rarity); break;
case CARD_CURSE: curse_card(power, rarity); break;
case CARD_WARPWRIGHT: warpwright_card(power, rarity); break;
case CARD_ELIXIR: _elixir_card(power, rarity); break;
case CARD_BATTLELUST: _battle_lust_card(power, rarity); break;
case CARD_METAMORPHOSIS: _metamorphosis_card(power, rarity); break;
case CARD_HELM: _helm_card(power, rarity); break;
case CARD_BLADE: _blade_card(power, rarity); break;
case CARD_SHADOW: _shadow_card(power, rarity); break;
case CARD_POTION: _potion_card(power, rarity); break;
case CARD_FOCUS: _focus_card(power, rarity); break;
case CARD_SHUFFLE: _shuffle_card(power, rarity); break;
case CARD_EXPERIENCE: _experience_card(power, rarity); break;
case CARD_HELIX: _helix_card(power, rarity); break;
case CARD_SAGE: _sage_card(power, rarity); break;
case CARD_GLASS: _glass_card(power, rarity); break;
case CARD_DOWSING: _dowsing_card(power, rarity); break;
case CARD_MINEFIELD: _minefield_card(power, rarity); break;
case CARD_GENIE: _genie_card(power, rarity); break;
case CARD_CURSE: _curse_card(power, rarity); break;
case CARD_WARPWRIGHT: _warpwright_card(power, rarity); break;
case CARD_WRATH: godly_wrath(); break;
case CARD_CRUSADE: crusade_card(power, rarity); break;
case CARD_SUMMON_DEMON: summon_demon_card(power, rarity); break;
case CARD_WRATH: _godly_wrath(); break;
case CARD_CRUSADE: _crusade_card(power, rarity); break;
case CARD_SUMMON_DEMON: _summon_demon_card(power, rarity); break;
case CARD_SUMMON_ANY: summon_any_monster(power, rarity); break;
case CARD_SUMMON_WEAPON: summon_dancing_weapon(power, rarity); break;
case CARD_SUMMON_FLYING: summon_flying(power, rarity); break;
case CARD_SUMMON_SKELETON: summon_skeleton(power, rarity); break;
case CARD_SUMMON_ANY: _summon_any_monster(power, rarity); break;
case CARD_SUMMON_WEAPON: _summon_dancing_weapon(power, rarity); break;
case CARD_SUMMON_FLYING: _summon_flying(power, rarity); break;
case CARD_SUMMON_SKELETON: _summon_skeleton(power, rarity); break;
case CARD_TROWEL: rc = trowel_card(power, rarity); break;
case CARD_SPADE: your_spells(SPELL_DIG, random2(power/4), false); break;
case CARD_TROWEL: rc = _trowel_card(power, rarity); break;
case CARD_SPADE: your_spells(SPELL_DIG, random2(power/4), false); break;
case CARD_VITRIOL: case CARD_FLAME: case CARD_FROST: case CARD_HAMMER:
case CARD_SPARK: case CARD_PAIN:
rc = damaging_card(which_card, power, rarity);
case CARD_VITRIOL:
case CARD_FLAME:
case CARD_FROST:
case CARD_HAMMER:
case CARD_SPARK:
case CARD_PAIN:
rc = _damaging_card(which_card, power, rarity);