git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@5703 c06c8d41-db1a-0410-9941-cceddc491573
UEI5JAVCMN7Y2SACTEZPZSNFJWOJTC55G24Q6LKQCT4XNDH5ZQIAC OOQGI347XJU6FISUDKV57HTMYCPOWSXIXJCLJK3P6FIRDVAWQDWAC UDXBXB47RU3C7SUW3K75NTE2Q66MQ5HR6TE3MDW2V6AYJ5GE7R5QC MQ5RSLTFRLXPJ5N4TT7QP3637W7BLMT6EQUGTUZINBDHWC5L6SAAC F3JXHG37SKCXMJVQCR7EWRNHABPOLNOHE3MRUIRT2EPMZG2MCMFQC LA2LFZAVBUB2BUK7Q3P3B4YQ5PIYHXAAKTN6KAZY5HTZ3QITUJ5AC RUI7TI667LNC7VJIFF544JJ7YF2AAUK2R655ITMWLLBWNBTH7L6QC ERTQJ5ZXDBRGKC5N3GZ6U4MFFK5HB6737FVLVD4GSMGTIFCSJJJQC SYHNAIAJCQHYMVDZWBZC2AUP5F4B5MXL5OY753KGNVH2CLRFSBSAC O5DY2ABCK6UTDJUUQULQERVXLV35IP74NTLYXNMKXCH6UFGYLKWQC VHD6C4BBAWOFITALZA35P7QFYZ6VAUBI4NE7T4NU275SFDAOPGWAC MAXLIRKX4Q3QOV4PUICT47GWJTMAHE5LKYBYYT7MF46VSXJOWYRQC NQXYTPHC5ZBLJDIC5OVAUIDYYOXLPSGWUVD464ODH4KBHYGRDPPAC XPMFRLTXS5LA4TROB43JS7NZ4FB2JAQBZZMZWS7SHPMU4SKUIYTQC KKNUX66ORZWWQH4ARKCHPHNDOYCI65STE3A27LKA3FWUKIX7MAXQC WX4M72MBE2CUPJWOR6HOGQVLV2HX7UPFRPP4HOT4DXQIXQUJMGRAC WDQ3ST3BQ7BMW2IXQMSJVRG7GK2EG444JLKII24FB7IJ5YF5KT5QC YF2GZWXNV6NVFFEBEOYS67JQJQK2IUS5BZMGJW3XQPYIJYHQJCEQC 65PB6QZNUDTUKE3I6YJAUXWHJRC3EKC4CPFHE2FRQDQIBN53DUPQC KATZLWENEIQMKKWIV4ZLXJ5HFUW6SU5K4ZU6NENBOL4XAAVTDUKAC 7KVPF74ACO6Q5FXS2YBBJTJT4Y4YN2M3ZNIPXFI3QSQNGNTHD7AAC ZLQAAP55CJ77XIJN3DZVPT4GTTVLIBFJLIJJKI6L5UBSHX7VUK6AC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC PR2XIEELO6UJWT3EXDHWCJZGIZCCF3D6KF6LC67R6RWWAVNWEHWAC DDU4A3JGN5IUIPP5IASOODKPR2WBHSDSV4FITZ6HNXNSXXQACWAQC U6HLBU2OIMKVNWWZ55SERG56WKAW3GSFFEGUJBP4SQVYSESGXC2QC ITXPKG6VHYSJSRQBRJUTD4AGCMMF4RDAJBAULFAN4J7OPQEHAQGQC QEEJFAETO6B2J4IWDIDCJ5UNIFNNHHG22IWF2CUJRTJJBNE47CWQC B7MSPF6X2RLGWN4M6ZZF3WSOPKGYPTTD7LIJVST7DXN27DG6JHNAC JCWJWGMQIKQGSSFJUQRKNIWW3HBOJSHYDTOPPE5BWOJTIJTDYUTAC FOQJ5S5WR7P7YMEWQ5Q4O7LTGLQ7LFVM4I2SG2Q7MIVC4PB2JHTQC ASLW3Z5PAVZSWJEMMMVZT226P44EKSAD47QS72JIFJESAI3RPN3AC QKGDOYIYKE6B36ION5O2DRW65DWWPZMYNWJVH7LJJ7FPGGM2MYAQC 7YUGK5Q64KG5O7GJGTUBRRLHAHBCJ5YOE23YUPT6UBKUSB67CYAQC PFEJ4LMDNEKLMGRCMWQ7EIRVU4JMYGICI4G7X4WVWOROVXQCBZ7QC BTQKRO24R3D6REBOCQYCWQHWXILNTH4WD4RFWTXWXMCC3H7PHDZAC D2T32ZGFCJFZVJW7H2AEV3QD7Z4ZYKWEPOZTAFTAPDUTBGXNJXNAC DJZK6ZJ42EUTFF2OBOL5YYFPMLXCTDNGE2RF73ZJ4N54FEIHBGPQC X5WLJCJVW55SXZVP7IKP7ADCJIGNKN4PKAXFECVR6TNK7XSMZR7QC 3ZWALZFSTSIVYXY4BAY6ANGINTDACZC6RSSJTEMQSTSUIE66YOBQC I2B33Z7NZGC33AMDSSK446AZZYWKPHWLAGULVHKKZU4MVB4BNJOAC LJK4ZQATLSB4MKZG3ARZX5V6RFGTN3NLCN6GTCUGJQKU26SOXMUAC AUXVWXWIFSTWFA6VZXN2FMG7FQEKRZVV6MD32VQQ7J2RKCXHAVGAC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC RCPQNIRPR3NQXEMVLBAQW6657UJFIP43N54UJVEZHJH22OH4UQIQC LFBNFE3PZBXTR2ROPKYPARUWLJAYWAKGTS7VBWADZWVVSJ5CLX6AC 3JMYZAITZNV5TPYISUMMYGJRYKFDZP34YAG72IB27BISVSZU76VQC QDTVLBRGHDTRUVT7I3O72K6TMOYAUSAJBZUHGOEFU2RKJNUPWZSQC 4UXFU3FZOCBSLDQ4S7MJKAE2H7VUHCNRDQMIY6NJ3PHYXWNGISDQC KKEPQAZMWQFWPQ4P4KT5PWG2YFPG7H4JHL5K7USVHQ3Y6L4NWURQC B4X67DGLW77QLGPTMORE2EJ5K5VA3TWIU23HFUF4TZDODXQSFLRQC 2UUCC7V3WQ5KBHJS4MTKZ5OIELYJHSTUVRPYGPWIQ5JS6D7YIK4AC PDOFPXD2X6VI23AHKCGQ5RVDBG74CNP2E3YOHKXLOARHHBXEK3HQC JDBTF7NKDHWDTAX5LRBQ75A5JBNELFITVYQ6KOGW5XM2SGW33STQC REVECUB3H65Q6RELFWCJJJXN7EK4FB5JJYZP5VJHDDRCV7GXSQUQC 3JKKL6VSKQHBBTKEBSADZVCNXZLL4S6KN2W7G2CY5OBOMMUTIWXQC 2YSMM7QMFZOPD5NXAD2OAMDJEY5LOZO4NCYBC7UCQVANKINJRNBAC 3XZOL3FFQZITUJIGDD6B6V6ZYMBN524JKNN6ZPJAXEC7RY433I3QC NVSFIV2ZKP44XHCSCXG6OZVGL67OIFINC34J2EMKTA4KULCERUEAC QUYSD2DWCIKAAQJGI43EENAWWPA5W33UT3I5WFRSHU6FPSSXTX2AC TZ55IZNANEJO2WDTKYWVLY2W2VV6BR7WKIN7XLNISAMMFT6LG2WQC BTO5WE4OEK64DZQVNYLOESM74KKQNE7KSNMQVF5UDB26OBKP7ORQC VJDLV4PF2ZJ46NERO4LZUX5JE2CD5XBOBQCYYPTFWTHLUEYDUOYAC AOLWOUIFBQDQTCMSVB7N7GAKFUY5J5LH7CJZAY3HEY3WEUSLADZAC 45EMD3KLQPMERNMIKU5G76H6556XOMIW352TSBP7VLWJX2YYGS7AC 6L4EP4ZRWWYLT55PD5KTTJON5J2JB5VV5MWNHF5VPZQZ5BKEYZ4QC 34C4U6EQWERY75GZJKUCM5KVGU2OUICETS5LGZF6RMKMZT4R5SQAC PISXY4NKSKL5KDJWAHD7CTXWTQDH3NFWQSFAHUAI3VVATWKXRODQC 3UKFCWWS5BLFQWZRB5FUA46CE2XGX5VRCEWC3K3XH5RCGQK64N2AC 5UVDIVD4NSXA52U4QMQIVST3GSZJ2A2YZK3RUEXKPM43YVQ7LI5AC 56C44YMFHZ62GXAAOLYSLLGBVGRWXB53W2VI37Q26ZECEK2XG5SQC 4RFKVDJKTCRBZU6WPJ2E5OVI5IRPY3UTRPOBLC5QHY4CQJJTLZKQC FSD7GIK3YLZXWLEH37BU6KV3IUCFGXPQL6IZ7H65YWNRBEKDBX5AC KCHX2F3JFEWOZT3WMJVZAAQUU2QSZ5Q7RDCD7WUJ7VE65J52JFUQC QTAXF435XPFZWNFZHMUKPQ7UVNLUK6TG5ER4MKDY25BZF5PZ4JLAC 2C6B6QRTOK2ZMK2ZOF3EPSFUZTKG5B3IZXWBWIUYC4ZOVGQ2OV2QC OY7KHQPESOUHPBXRZ2JSNUKPAC7DCDY73TAUHCSJG5V6TPAHBVYQC ILOED4VB4I6VPAUTR75ZWX6MXDYXB5DO2EDK2UH67O3HNKWV23RQC 2WRXQTGYDBLV46WRNVIUKGNA5QS563XZNNW3N2L6PVOCHIP2YGHQC SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC CHO4U5JC3RNTLXVIDXXJYZMOBZJ4VXW2GVJWDOTBRKK3AJ36LDLQC TJRYL3NXPW5IUGEV3YOC7JYWEXCZDBFPLT4AUG4P227WVKVB72ZAC EOMCPVNQLX3IMLC46EAO67DPBH5KEG2FQTPBLGU62HIRWA3UQ7XQC YAAJ6PTN6QUSWE52URI5AENOGD366FIHOIFUOXFUJLVZYE4OG6HQC NQMXQ6OQVUSC7Y7F7IL252QW4A5JED224EECNHWAM4ZZYVNY745AC SPOCLROO64OKT2F6SGUJNAQXH2XZWCK3LE7IRCDQCRYPU6Q6SAFQC TXENGSZD2F6LFYQVN3MGWO2LH4H6F4756NIMQZL2B3MXIAGN5AQAC TPPJRQ2NTCV3GI2VRHEXQJREDERPJODCJWUG5WCOQGN4REPPPAMAC VD4KDTGHVKCN35AWREYB4TEOUMCTW7SAUPAMTMF5ABC7VBHVKP4AC 45QV77UI6QFW4234P365LD3FGJYRVWTT5455DPB324NG2NFQMKTQC IIN7AVA6JYRBXH6ZYRR7BY7TV6PW7ANAQ2A3PD55FKBKKQFEEF2AC 4PBRMB7TK2TXL7VSDKMUQMT4QFK3SGRU4TUVMEM7V2VS7KKKILAQC FEGNPOJI2SALUA2PVIXIQ2CIXFLSXD7UB7CNUSAAKV4L3POXCRFQC DS2GZKISEP2DM2VU6EJ525Q7W3WVOKJXG5PY2OY4VNFCLBHVVOTAC TLO257LZSB6ZO36STDUEWJBO2LETXFKTFGXELA6Y4BZBVAEIIINAC GQL5SIGBHLU3FMCE54XVGLRY5AZHRM6DUEB722REA2DPLGJSN6EQC 23I5KJ245D43B6QYWS4TDQYJO2W2PKTDCLFBWPVAFDWS6L7NMGKQC QZERCVTY5BISIKSDH6WUXGZPIBAF4KUCGSZEEGMGBCORNUXT4HXAC UH3CJQMQ3NPICXD34NTCTUZJWOCEF4P5XEGXFLLNDDFLZK7QPUBQC MFONX2CQ4V7HA5NSD6P5NDDBXYDSKIOCYUKRZXJ4ZER2OKJWT2HQC QYQKV4R47PTERXVFQNNWWQVICGSOMBHW6WM5TAZAKLIYOLLPUAJAC 5V47S4NNTHWTSAHV3YLO2VGH7JTUIYJ3GBPDN5ZM4UQALT2ZEXDQC 2G55UEHQ7554OPNSZVTUCZTWSHIFKGT56QEGSYFKCTX547I4AL3AC 7UQJTYJTHTDW55ZUKG4TINZTNALGPK5CB7UB7PJ2Y2SKQ5XOYP5AC I4HQEB6RVIPJD3EQCNADMQJVGYAIIHTBGFVMPXHDNLYYG5JVIK4AC FZKMVCODMWQEVVBBQHTTXFBRO4LZEYLB646ZPVUMLHH6EER7FAOAC OQXMUX5JEITCP2QXJKKOQRLRVTD3LTSDWGI6HTK5GVDIAJ7VKO6AC VCG3BRIYRTNNWYC3LOXD6KFGXOX37HAFW2HNV7WXVG2V7EUHLDZQC LNYPEXOYU2MHSCPQOFOA3LL22OY5ONJVQZYEB7DPZ37M6WE4CK5AC CRX4RG35C3DH57NIXCW4CG4X7SBMSX7TAJR2BAFQ4LQKCLYUNANQC DMG73XDQHY2X2PHKWIY56XKD3O4NPGZKKIO6GX3IV2LLRVXPGKYQC TRZAZJJA5VQBJ65SO5H5DNSILIZEJHIZCBYEBHEATCT6ZSMWIFKQC JVSCP4FTW2G57C6YD5HZOZXTODGZH7TR75JQGFJBEPX3LCZH236QC JL3FRP7BH6VZF3T2NIPX6GHH7W2IF2DHBHHRTCHK5FEN2PDZS3HQC TFYLN3PQEKFQNOYRVJRCXFJ4J6VSKC7QQFOHNWTDPSVYWAPAJABAC KEYK3CH5J46U6TTOKTWRNMYTZXMQXFVEAZUC4ZQ4QCOSJHVIBDRQC UWI3ZNJDRQRL7CXFNFEG46TA6SAK24XUFY5YOKVOTJA3VG3OBNFAC VRFQK6S2TXOFFO5K5HRDXPR7QEKKAZAVCASSIJVPWQ4GE26UOGTQC X2FMEN4E345XD26Z2X7JMJ7VGHOGCGIELMHQRE2ITLVNQACP3NOQC GL7TJGUGV4JPLZCDWH6QVST4RYW7UJV6IP7UAEWEKNBWJO2H2ZHAC JW2KRJHES33W7UTWZ6NDO4TLMK4EFU4HKZXBWR2UJOMPCCOTR4CQC KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC SYXSZQICCRNKCSZ4HDO24JIE5HBVMWFWLXXM26MS3OKB37PJOAVQC SXLHOSCHX4BPRYRR35DI5GWISPIDKRFUSRVCYYHUUAYLAYFHSPBQC VEOWM6UDFNWRAXP5YUO7XBH4ZALAJXCWRA4IRDITXJ3QWH42CTWAC XDJGQNFELURGXMUAOOVALQMSLAJVHMG63KPKVA33HTJFVZROGZ4AC 2BTN774TDEFKS7L23YNEDQJSLSUWWKXPC5GA73ZGKLCKDHVEWSJAC MBBPLL4SZUB3JUUYQYLZW7S5OXRCEGJX3WWADOQXGHWQ7BIKCY5QC 23PFLB2E4QHL5SF3Q2YV5FXRH6MFHENEU2ACVC572ZCYDXCBZVQAC E3STDXDY3HJCQBPDCGEQAXKHF2R4CQYQKINUGSS6IYPLEGJBEIKAC G4TVXOLIF5X2MWV7I4UPT3MSQHRMGME6QRIIFAQ64C45JGYK7SIAC RX6575DZOHRUXQUZH34YZGPZJF4STUPLBQDIVTINA2L6LVCKRIGQC N5XD5IAOMEDF37AXEBALHFINB4H527T6YNTCHN5KKO6YHXAP5PNQC 4EZVKDQA5GM3QDTNTCKEKGH4F6LGAYNLBT756PXODKZ2B7C4ZVHAC P25D567E2UEAQHNI7LAZPNY7KAI3J4OE77YKLWOIEEALC5RREJHAC GZ4FB5VKL4C22KK3GSKQPLJYMRGLFXUDCOBNEBC2OKK6KVZL3OSQC 5R4WV4H5SNIM5WU2X33JJ63HIEGKCXN2HELZ6FRRKKANPLMRLF3QC UET576SVCGS2TXEDRTO7BUTOTLJ77MYHIVZJCDWGH2BAXYMKG6DAC 7UUXAI3G2H24LAZSGX7BYHRGD6ZPFYGJM3CK62DNH5TZNNGSXJRAC 2P3IJKK547AOEFWKXEAL73QFKW423GGAZEZHW6OZ6QB7YUSDNC3AC VS3WVE6ORJ76O3TRRJCR4JJVFVRKKFK5YHZ6AA4AU63DWM3KR3UAC WIMIQZPCMKF4BJZGSOZF2PSEV4RDYM2QU2L73C6LJI5KYDWVCSTAC RQR4PTMGQLTRWLYRU3KXIIDGND7FBORESJWMWFVD3WYU5SISZXAAC QGUV5IINCOK6AXWQ2QTZMPDJTEZPON5O565ANT2EE236I5OAPAVAC BBQWA33DPXWEDYOOPO45VAYD4JQDZQVMZSEJ4RUI5LLC733IMIIQC M6MBPHNAERUXYJ7KHK5FE2B44CLBY4M5MR5KY74HVDFNHVLOEQIAC 5BJPWUPLJFS34FUTFJVKA4A52YMIGV6EWDXLNSDCWBJWBGVSQFGQC BIZDHHK5LIO57S5AKHEPJFLWV5DAFKZIKYBGOUNGICSWTX7DCXKAC PZNRGNZPN4YLXL2UDMEUPE33AAZZ6Z2YPK6EQGYZL2PNTRWLCUNQC HC35ORPWMUNGV4G2TVNPID4ZDRNTWXE4U37LYT4QGSEQR2EXQJNAC MLZSEZWNNZMSIDQNAAIOJJR4K7VSVJICL5SAGHD3ROM7SYDVZABAC ZM4IOCU4Y3NUKTLW3KPBCPWQD4NJ6BCORCVSOBJWXL5Z7H3QBPSAC YIIILIV4ZPRIPWWT4GL7YWSJCUVH6RJJLXV4XIHY6SF3H7Y3EAYAC CDLXSWKIUQAM6TJRTU6HUSYVQXPHXN34NILPPHT2PJ2TPTJT3I2AC PLJI4CMQZJ773B3QFPKBM3NBDHOMKTR63TRI7IRC67LHFNOQNUHQC 4TPFZIL52CS4HPO5LQMKS3PHTE2X2C547ULEFXKM4UIQQ64FUBGAC ODNAIEJW732NG7USKQKCIP4R4DAEYXXJQX6LY7TIN32NKE75454QC 5HPIIGNWB3UXJ5APQLAGFOV2CA7J2GB7AWAVVZDBB2YZS4TNCMAQC JM7UAK777RAVDAVLQLEOBRTGNW2B47S5G55XITJXO243IUNZHVYQC CGYTZT5QWIEGYKUOLOK7MFXSLJKLYRZONER5ZCDZO5XYWSLG475QC JP7SVXCIKEPVDD4Q5CDYDATPK7X5XOYW3T6QK2Y6EWHFH52LBK3QC WQLOHSNCA3VOMDJF6IINJYKSYVYZEBPJJWBB33QSNE4RP5HEXPMAC 3KAINFIXO7WNWGUGZB43EUNFRS2ZPBLQZDTY456QACMRHYIJ7WDAC Y2CHAC4BULOT2UHD47F7JTSLUGGMVHYOJZB4W76AXMSLIDVHULEQC DH3YTI6VVI727SQXO4CXSDCSBG2UN3UAWLFULBGRLBVH22ACRXIAC LHVZICXASE4UFBQQ3UEQF4DLPFGD2NNZV7FFTRUK6PVB6XLZNQQAC LCCGXSFIDQFIRXHGRJWOELNPQOHHCXCWXS366GOULDFPQVOKAIJAC XEC3L6W6TGIRWHINULNLKCIP4UBMHFYE33WJL7272I2GRRCFZBWAC IXLNOTBJGHKESBCTME6QAR6XVWFNCHYGMS62V62ZJEA7VLQHXO2QC 35KOQQV4ZBNNIAXGKPOYHOWTN7RBQY7HRZTVMR3WAS4GOYFBM6PQC H2TREER2QXNII3D6GTVASY5RVE7S7KATVKWRKOOISR5ZGOTLPFZQC ADH3ZALVXLNZ3Q7L3CDCZOZFXHVWOVDM2RJLEMUCS4ROWCU676VAC XUCCWGMXKPIR34BBCCOI67YHI3RST4STDWSDUZTN4B2CJWXQLQ7AC 5FBOE2QNRLKUNOP54CZD6LFAMM7LX6NNLHJRJHRDDIUTQ7J723DQC SJXOZ6J66G3S5VYGIZ3YHEUCKUF5554YEFUYLVBH7X4ALYSXKTGQC JIMH7VEMQ7QF6VV2D65UISCRG5W55UX5YSQLLUW6SZNSTZMFWQ5AC ASZZQSS6PJCN4OEQ7ZNHQ6WVGZRF2IKRJUMPA2TYQNBURPSUKQGAC TF5WVX4WNGWZTEB6BN3CLPOTLT7KWA3B6P2L2QWRFH67YTH5LVMAC KHHAE5ZK7ITEZVMMUKYROKECLE2RU5ZU5OQ4Z4XSRQXE2R65O67AC KZ362RP6C7HRFQB66QL3PBRG7MBEPLRKTFMJYK7DFJQKERFGNFXQC BW3XFNOS6LDAQLHOZ6RXARCMKCY5JVLVDSXDSSAX4DSYM3FANQBAC ZHFUXYUHS6V47WK2NRH7OU6RX77NRKTXOZC3MND2GG7PEEWSGFTAC W52PTX4I7TUG2LS36FJHLZ72DWCVXGUCTUIKPI3IGEYO5KWL6OVAC WLX2RQMMOMP2PYPAGJRM4VFD2WTLJTOAZZPPY3MV76FU2EGEJ54QC ZVK4J5HTKFNOOIVCI62ZWEYGXEE5TYJ65DLYYZAZWTADFSXE62ZAC ECJNCUSSE63BKED3EAYIXQCI62I76QGNHCSFO3CDWPRZF3JQP44QC FMBJCM5LJKCG326YRJGOOJU6QNWONXAHK2AB4CP4SAOHKJ5CORXQC J6APXOT4QOGQFONWB7G546VTVF6QG42HVOROMHF7YBDJPR4K26OAC Y56C5OMUQ5XF2G6DKDV4R5MED44UOIUPTBBQVWQBUHYIXYA5MOZAC WXSNNK2RXP3DQFAEQGQUZJHFWXJC7ZKG2WURZGL566UDM4YXFSWQC U4TYV7RSO64WBA2J5AEMJRHJBIPMVFTWRCVJMP5XVSII3V465P4AC XRZPPYWPWUOM4SFNI6BHKH2UKJQNLKOV6Y7XIEPEZXE5QYRT26PAC AVSMB4Y6F6ZMMNNPOAQQZ34OWC6N5JOURTEWFTUKDWMIIMLWWJUAC YE7M665QKDGI7Y5WMERCWJNDZ4FUZ6GRUCK4E6GZH4SWCUM6RWLAC Q2FZIIGQECGP2FKKWLGDBBQVGCFZ4JTY53PFPJP6X7YKC23AQGFQC OYTCBRC7LE44EUVRZVYTOOVKQWJ6P6YE3FXTOGUTNKEMLNWPHKSQC 7Y5HSDFKA5TPLS2TWTRFMQVX6UXUDHXU5MUMXQSDFAIY4THQ3BIQC JDPJS5SNW6ZTY5DYV5QUBG2WVJ45FJ4CAOK6KDJKPEI2HLIHVLRQC ZP2KE7A2LE7Z2S7AC45WE4CXDSEVDTWIMV2EM4IBUKXYJIDU6R7QC B62ICMDTN5V7R7RBL4JALFVKEMVOOVLRSJASRNYS6CGFWBEEF5JQC HFEFKHVV2ULXS6ZEFNX6ZXXUJKME5L2PITQ3VRTKMRUOU3DHXXWQC 7PRZJ6KZLG26YVTAMXT7YOTQLWZHGWGRTKXZZ52P4XYCQD4GT5WQC DOZORMA366M4HB5JKSS27BMCR6ET7QNZNND2B7KV3NVEEPR5H7EAC FLKXPXQ7SRFZPJPDM35D5CG6M52WP4SL32QNEZNSHGBNZYTKYGYAC QSRRV725GCNDOMIDS36NYAA65MOLDMAZSENVSZ3PNOLBFSGHH7BQC JQK4F4RTKVQWIF5YKFPH7IHF7UREBOY2NOFQ7J3O44KYPCNHNL5AC PTB7I4WQ3NTF7BE3O6WKXDSJD6QRWSZIEWPBSZGCJJZVNKT4OL5AC GT7BSR54BVJKHUCLEBTELGBMNBFFDQW52EVC4XKVEMUVG2UGZMDAC 3EUPIYJNWOMOQBP2Z5SGSMWK453BXJD6KL2WFTR3NM565MEBYASAC 25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC CH7JECYYH35H4TRHRNRTRJCQTQLZ2WRH62TKV72SUIU2RTK5OH7AC O6ZMFKDI3XO2SWPNEYHIPYFDWJR4TVDP5BAATK6LVCVETQID6E7AC Y2NYY7HWFZ2LQDK3ACSLGS37F2J2IJ5LRGCIMZYXLEOSVPD3A4DAC FBK5ECMQ6HJSQSN7C3DICKJIRJ3CSO3CHCQ3ONPBKLLSHDGPBQ7QC 5ASC3STDYCNLZFEBN6UTMUCGDETHBR2OCBZCF5VIAZ5RRWLOTDYQC XE5FBYASPYLMBNHWKL5MRN7TQGIWR4O6PF72I7WXRTUJ7HS2O2LAC LKLHWERPXMDTRNYPEXVDVB6PE7CT5PZ6WMNJJDTBBE5FBHOCEK5AC GBUB77EAYHOFY6GQ5IY3ZSBC7FSQFZZKYNBD5QMCQFIKFLYLWHOQC A3M4LSO6PBVRZ5DYRGLIVZRRNG5GFZ6YAFCKJCE7PVOX5ZYSIF5AC KIJYTJG2XG7T4HEVZTCL2T4XDSMVLXDJMYYRRK6GY5PY7CGJLJTAC ZGUJWUFJ4NFFJ6PGXLFGQWCWBCZHPWGWI44NJHJEVPRG5L36PADQC WHY6LRRJ5T2NSBE3IUCR4X3TOAH7TTK5NPUPUIFT7TPNJ6J4HBDAC VIFZ6DO6GWJGYMXJZKFZ2JYNPHNE74H3OFAOCPISQG7M7A4LCOHAC EFWEYIB2R3DPD3JWIPU6LS6SFLPMYN7J7X4GBZR7DJWKHJ3UELSAC 7KWDC7XFNMBLSUO2HISIROBINZBX5T67LJEEXTAORXW2YZ7VWFGAC UZ6N6HOUPGVSPC5NQROEEDWMEGJA5XUWUY2AKH5QG65AZ25PVXDAC NRMSQFTORG3GC7HQBIN5DHB5GLWXM6IQO6PTXD4C7LBQWJIHYIGAC FXVDNB6MAAOSEP37HP7CIPPXNS7FDECN3GCRMT5UFFCKLHIL6IVAC U3KGUJJQWQORJIIFH3ADVNIEEX5HOX6KEOXO7DJSL7L3Z6GG3PAQC V4DWL5WBO2JCODVS5QQNWXDH4DAYZN3D5V3UDCHM2KKOMADOTEDQC GMYJ4XEEKZASQWMXQZUME5VYCDBRODO7UJJUEZSVZBMSFVBFLK2AC BFIEDGHSMI5CKOOFWYYB3XHPCZOWPERTBIA5U2HMRSCNWHE57VDQC AVSWNOP23Z2QCLQGXFDZV7TI4RC3XSXHIX2HDXFHXGKDEZSSIGJQC static bool cloud_helper(int (*func)(int, int, int, int, cloud_type,kill_category),int x, int y, int pow, int spread_rate,cloud_type ctype, kill_category );
static bool _cloud_helper(int (*func)(int, int, int, int, cloud_type,kill_category),int x, int y, int pow, int spread_rate,cloud_type ctype, kill_category );
// now diagonals; we could randomize dx & dy again hereif (clouds_left && cloud_helper(func, x + dx, y + dy, pow, spread_rate,ctype, whose))
// Mow diagonals; we could randomize dx & dy again here.if (clouds_left && _cloud_helper(func, x + dx, y + dy, pow, spread_rate,ctype, whose))
static bool cloud_helper(int (*func)(int, int, int, int, cloud_type,kill_category),int x, int y, int pow, int spread_rate,cloud_type ctype, kill_category whose )
static bool _cloud_helper(int (*func)(int, int, int, int, cloud_type,kill_category),int x, int y, int pow, int spread_rate,cloud_type ctype, kill_category whose )
static int make_a_rot_cloud(int x, int y, int pow, cloud_type ctype);static int quadrant_blink(int x, int y, int pow, int garbage);
static int _make_a_rot_cloud(int x, int y, int pow, cloud_type ctype);static int _quadrant_blink(int x, int y, int pow, int garbage);
apply_area_within_radius(shatter_items, you.x_pos, you.y_pos, pow, rad, 0);apply_area_within_radius(shatter_monsters, you.x_pos, you.y_pos, pow, rad, 0);int dest = apply_area_within_radius( shatter_walls, you.x_pos, you.y_pos,
apply_area_within_radius(_shatter_items, you.x_pos, you.y_pos,pow, rad, 0);apply_area_within_radius(_shatter_monsters, you.x_pos, you.y_pos,pow, rad, 0);int dest = apply_area_within_radius( _shatter_walls, you.x_pos, you.y_pos,
// strength is now the sum of both poison types (although only// one should actually be present at a given time):
// Strength is now the sum of both poison types// (although only one should actually be present at a given time).
apply_area_visible(ignite_poison_clouds, pow);apply_area_visible(ignite_poison_objects, pow);apply_area_visible(ignite_poison_monsters, pow);
apply_area_visible(_ignite_poison_clouds, pow);apply_area_visible(_ignite_poison_objects, pow);apply_area_visible(_ignite_poison_monsters, pow);
// This function should be currently unused (the effect is too powerful)static int distortion_monsters(int x, int y, int pow, int message)
// This function should be currently unused (the effect is too powerful).static int _distortion_monsters(int x, int y, int pow, int message)
// allow statues as entry points?
// Irony: you can start on a secret door but not a door.// Worked stone walls are out, they're not diggable and// are used for impassable walls... I'm not sure we should// even allow statues (should be contiguous rock). -- bwr// XXX: Allow statues as entry points?
if (mon == NON_MONSTER)return 0;if (mons_intel(menv[mon].type) < I_NORMAL)return 0;if (mons_holiness(&menv[mon]) != MH_NATURAL)return 0;if (mons_res_poison(&menv[mon]) > 0)
if (mon == NON_MONSTER|| mons_intel(menv[mon].type) < I_NORMAL|| mons_holiness(&menv[mon]) != MH_NATURAL|| mons_res_poison(&menv[mon]) > 0){
// find a space near our target... First try to find a random// square not adjacent to the player, then one adjacent if// that fails.if ( !random_near_space(ox, oy, tx, ty) &&!random_near_space(ox, oy, tx, ty, true))
// Find a space near our target...// First try to find a random square not adjacent to the player,// then one adjacent if that fails.if (!random_near_space(ox, oy, tx, ty)&& !random_near_space(ox, oy, tx, ty, true)){
// which is close enough, and also far enough from usif ( distance(ox, oy, tx, ty) > 10 &&distance(you.x_pos, you.y_pos, tx, ty) < 8 )
// ... which is close enough, and also far enough from us.if (distance(ox, oy, tx, ty) > 10&& distance(you.x_pos, you.y_pos, tx, ty) < 8){
static bool mark_detected_creature(int gridx, int gridy, const monsters *mon,int fuzz_chance, int fuzz_radius)
static bool _mark_detected_creature(int gridx, int gridy, const monsters *mon,int fuzz_chance, int fuzz_radius)
// stamp a box. can avoid a possible type, and walls and floors can// be different (or not stamped at all)
// Stamp a box. Can avoid a possible type, and walls and floors can// be different (or not stamped at all).
/** Places a vault somewhere in an already built level if possible.* Returns true if the vault was successfully placed.*/
// Places a vault somewhere in an already built level if possible.// Returns true if the vault was successfully placed.
static void describe_feature(int mx, int my, bool oos);static void describe_cell(int mx, int my);
static void _describe_feature(int mx, int my, bool oos);static void _describe_cell(int mx, int my);
static bool find_object( int x, int y, int mode, bool need_path, int range );static bool find_monster( int x, int y, int mode, bool need_path, int range );static bool find_feature( int x, int y, int mode, bool need_path, int range );
static bool _find_object( int x, int y, int mode, bool need_path, int range );static bool _find_monster( int x, int y, int mode, bool need_path, int range );static bool _find_feature( int x, int y, int mode, bool need_path, int range );
static char find_square_wrapper( int tx, int ty,FixedVector<char, 2> &mfp, char direction,bool (*targ)(int, int, int, bool, int),bool need_path = false, int mode = TARG_ANY,int range = -1, bool wrap = false,int los = LOS_ANY);
static char _find_square_wrapper( int tx, int ty,FixedVector<char, 2> &mfp, char direction,bool (*targ)(int, int, int, bool, int),bool need_path = false, int mode = TARG_ANY,int range = -1, bool wrap = false,int los = LOS_ANY);
static char find_square( int xps, int yps,FixedVector<char, 2> &mfp, int direction,bool (*targ)(int, int, int, bool, int),bool need_path, int mode = TARG_ANY, int range = -1,bool wrap = false, int los = LOS_ANY);
static char _find_square( int xps, int yps,FixedVector<char, 2> &mfp, int direction,bool (*targ)(int, int, int, bool, int),bool need_path, int mode = TARG_ANY, int range = -1,bool wrap = false, int los = LOS_ANY);
static int targeting_cmd_to_compass( command_type command );static void describe_oos_square(int x, int y);static void extend_move_to_edge(dist &moves);
static int _targeting_cmd_to_compass( command_type command );static void _describe_oos_square(int x, int y);static void _extend_move_to_edge(dist &moves);
const int thing_to_find = targeting_cmd_to_feature(key_command);if (find_square_wrapper(moves.tx, moves.ty, objfind_pos, 1,find_feature, needs_path, thing_to_find,range, true, Options.target_los_first ?
const int thing_to_find = _targeting_cmd_to_feature(key_command);if (_find_square_wrapper(moves.tx, moves.ty, objfind_pos, 1,_find_feature, needs_path, thing_to_find,range, true, Options.target_los_first ?
if (find_square_wrapper( moves.tx, moves.ty, objfind_pos, dir,find_object, needs_path, TARG_ANY, range,true, Options.target_los_first ?(dir == 1? LOS_FLIPVH : LOS_FLIPHV): LOS_ANY))
if (_find_square_wrapper( moves.tx, moves.ty, objfind_pos, dir,_find_object, needs_path, TARG_ANY, range,true, Options.target_los_first ?(dir == 1? LOS_FLIPVH : LOS_FLIPHV): LOS_ANY))
if (find_square_wrapper( moves.tx, moves.ty, monsfind_pos, dir,find_monster, needs_path, mode, range,Options.target_wrap))
if (_find_square_wrapper( moves.tx, moves.ty, monsfind_pos, dir,_find_monster, needs_path, mode, range,Options.target_wrap))
static char find_square( int xps, int yps,FixedVector<char, 2> &mfp, int direction,bool (*find_targ)( int x, int y, int mode,bool need_path, int range ),bool need_path, int mode, int range, bool wrap,int los )
static char _find_square( int xps, int yps,FixedVector<char, 2> &mfp, int direction,bool (*find_targ)( int x, int y, int mode,bool need_path, int range ),bool need_path, int mode, int range, bool wrap,int los )
find_square(ctrx, ctry, mfp, direction, find_targ, need_path, mode,range, false, next_los(direction, los, wrap)): find_square(minx, maxy, mfp, direction, find_targ, need_path, mode,range, false, next_los(direction, los, wrap)));
_find_square(ctrx, ctry, mfp, direction, find_targ, need_path, mode,range, false, _next_los(direction, los, wrap)): _find_square(minx, maxy, mfp, direction, find_targ, need_path, mode,range, false, _next_los(direction, los, wrap)));
static char find_square_wrapper( int tx, int ty,FixedVector<char, 2> &mfp, char direction,bool (*find_targ)( int x, int y, int mode,bool need_path, int range ),bool need_path, int mode, int range, bool wrap,int los )
static char _find_square_wrapper( int tx, int ty,FixedVector<char, 2> &mfp, char direction,bool (*find_targ)(int x, int y, int mode,bool need_path, int range),bool need_path, int mode, int range, bool wrap,int los )
const char r = find_square(grid2viewX(tx), grid2viewY(ty), mfp,direction, find_targ, need_path, mode, range,wrap, los);
const char r = _find_square(grid2viewX(tx), grid2viewY(ty), mfp,direction, find_targ, need_path, mode, range,wrap, los);
// information? (Yes, this is entirely subjective. JPEG)static bool interesting_feature(dungeon_feature_type feat)
// information? (Yes, this is entirely subjective. --jpeg)static bool _interesting_feature(dungeon_feature_type feat)
return (which_god == GOD_XOM) ?describe_xom_favour() : describe_favour_generic(which_god);
return (which_god == GOD_XOM) ? describe_xom_favour(): _describe_favour_generic(which_god);
for ( int i = 0; i < MAX_GOD_ABILITIES; ++i )if ( you.piety >= piety_breakpoint(i) )if (print_god_abil_desc(which_god, i))have_any = true;
for (int i = 0; i < MAX_GOD_ABILITIES; ++i)if (you.piety >= piety_breakpoint(i)&& _print_god_abil_desc(which_god, i)){have_any = true;}
static void xom_check_corpse_waste();static void armour_wear_effects(const int item_inv_slot);static void handle_run_delays(const delay_queue_item &delay);static void handle_macro_delay();static void finish_delay(const delay_queue_item &delay);
static void _xom_check_corpse_waste();static void _armour_wear_effects(const int item_inv_slot);static void _handle_run_delays(const delay_queue_item &delay);static void _handle_macro_delay();static void _finish_delay(const delay_queue_item &delay);
static bool should_stop_activity(const delay_queue_item &item,activity_interrupt_type ai,const activity_interrupt_data &at)
static bool _should_stop_activity(const delay_queue_item &item,activity_interrupt_type ai,const activity_interrupt_data &at)
check_mapless(level_id(LEVEL_ABYSS), mapless);check_mapless(level_id(LEVEL_PANDEMONIUM), mapless);check_mapless(level_id(LEVEL_LABYRINTH), mapless);check_mapless(level_id(LEVEL_PORTAL_VAULT), mapless);
_check_mapless(level_id(LEVEL_ABYSS), mapless);_check_mapless(level_id(LEVEL_PANDEMONIUM), mapless);_check_mapless(level_id(LEVEL_LABYRINTH), mapless);_check_mapless(level_id(LEVEL_PORTAL_VAULT), mapless);
static int clua_panic(lua_State *);static void clua_throttle_hook(lua_State *, lua_Debug *);static void *clua_allocator(void *ud, void *ptr, size_t osize, size_t nsize);static int clua_guarded_pcall(lua_State *);static int clua_dofile(lua_State *);static int clua_loadfile(lua_State *);
static int _clua_panic(lua_State *);static void _clua_throttle_hook(lua_State *, lua_Debug *);static void *_clua_allocator(void *ud, void *ptr, size_t osize, size_t nsize);static int _clua_guarded_pcall(lua_State *);static int _clua_dofile(lua_State *);static int _clua_loadfile(lua_State *);
static void clua_register_metatable(lua_State *ls, const char *tn,const luaL_reg *lr,int (*gcfn)(lua_State *ls) = NULL)
static void _clua_register_metatable(lua_State *ls, const char *tn,const luaL_reg *lr,int (*gcfn)(lua_State *ls) = NULL)
clua_register_metatable(ls, REGEX_METATABLE, crawl_regex_ops,crawl_regex_gc);clua_register_metatable(ls, MESSF_METATABLE, crawl_messf_ops,crawl_messf_gc);
_clua_register_metatable(ls, REGEX_METATABLE, crawl_regex_ops,crawl_regex_gc);_clua_register_metatable(ls, MESSF_METATABLE, crawl_messf_ops,crawl_messf_gc);
static void new_cloud( int cloud, cloud_type type, int x, int y, int decay,kill_category whose, unsigned char spread_rate )
static void _new_cloud( int cloud, cloud_type type, int x, int y, int decay,kill_category whose, unsigned char spread_rate )
env.cloud[ cloud ].type = type;env.cloud[ cloud ].decay = decay;env.cloud[ cloud ].x = x;env.cloud[ cloud ].y = y;env.cloud[ cloud ].whose = whose;
env.cloud[ cloud ].type = type;env.cloud[ cloud ].decay = decay;env.cloud[ cloud ].x = x;env.cloud[ cloud ].y = y;env.cloud[ cloud ].whose = whose;
static void place_new_cloud(cloud_type cltype, int x, int y, int decay,kill_category whose, int spread_rate)
static void _place_new_cloud(cloud_type cltype, int x, int y, int decay,kill_category whose, int spread_rate)
env.cloud[ cloud ].type = CLOUD_NONE;env.cloud[ cloud ].decay = 0;env.cloud[ cloud ].x = 0;env.cloud[ cloud ].y = 0;env.cloud[ cloud ].whose = KC_OTHER;env.cloud[ cloud ].spread_rate = 0;
env.cloud[ cloud ].type = CLOUD_NONE;env.cloud[ cloud ].decay = 0;env.cloud[ cloud ].x = 0;env.cloud[ cloud ].y = 0;env.cloud[ cloud ].whose = KC_OTHER;env.cloud[ cloud ].spread_rate = 0;
static void sdump_header(dump_params &);static void sdump_stats(dump_params &);static void sdump_location(dump_params &);static void sdump_religion(dump_params &);static void sdump_burden(dump_params &);static void sdump_hunger(dump_params &);static void sdump_transform(dump_params &);static void sdump_visits(dump_params &);static void sdump_misc(dump_params &);static void sdump_turns_by_place(dump_params &);static void sdump_notes(dump_params &);static void sdump_inventory(dump_params &);static void sdump_skills(dump_params &);static void sdump_spells(dump_params &);static void sdump_mutations(dump_params &);static void sdump_messages(dump_params &);static void sdump_screenshot(dump_params &);static void sdump_kills_by_place(dump_params &);static void sdump_kills(dump_params &);static void sdump_newline(dump_params &);static void sdump_overview(dump_params &);static void sdump_hiscore(dump_params &);static void sdump_monster_list(dump_params &);static void sdump_separator(dump_params &);
static void _sdump_header(dump_params &);static void _sdump_stats(dump_params &);static void _sdump_location(dump_params &);static void _sdump_religion(dump_params &);static void _sdump_burden(dump_params &);static void _sdump_hunger(dump_params &);static void _sdump_transform(dump_params &);static void _sdump_visits(dump_params &);static void _sdump_misc(dump_params &);static void _sdump_turns_by_place(dump_params &);static void _sdump_notes(dump_params &);static void _sdump_inventory(dump_params &);static void _sdump_skills(dump_params &);static void _sdump_spells(dump_params &);static void _sdump_mutations(dump_params &);static void _sdump_messages(dump_params &);static void _sdump_screenshot(dump_params &);static void _sdump_kills_by_place(dump_params &);static void _sdump_kills(dump_params &);static void _sdump_newline(dump_params &);static void _sdump_overview(dump_params &);static void _sdump_hiscore(dump_params &);static void _sdump_monster_list(dump_params &);static void _sdump_separator(dump_params &);
{ "header", sdump_header },{ "stats", sdump_stats },{ "location", sdump_location },{ "religion", sdump_religion },{ "burden", sdump_burden },{ "hunger", sdump_hunger },{ "transform", sdump_transform },{ "visits", sdump_visits },{ "misc", sdump_misc },{ "turns_by_place", sdump_turns_by_place},{ "notes", sdump_notes },{ "inventory", sdump_inventory },{ "skills", sdump_skills },{ "spells", sdump_spells },{ "mutations", sdump_mutations },{ "messages", sdump_messages },{ "screenshot", sdump_screenshot },{ "kills_by_place", sdump_kills_by_place},{ "kills", sdump_kills },{ "overview", sdump_overview },{ "hiscore", sdump_hiscore },{ "monlist", sdump_monster_list },
{ "header", _sdump_header },{ "stats", _sdump_stats },{ "location", _sdump_location },{ "religion", _sdump_religion },{ "burden", _sdump_burden },{ "hunger", _sdump_hunger },{ "transform", _sdump_transform },{ "visits", _sdump_visits },{ "misc", _sdump_misc },{ "turns_by_place", _sdump_turns_by_place},{ "notes", _sdump_notes },{ "inventory", _sdump_inventory },{ "skills", _sdump_skills },{ "spells", _sdump_spells },{ "mutations", _sdump_mutations },{ "messages", _sdump_messages },{ "screenshot", _sdump_screenshot },{ "kills_by_place", _sdump_kills_by_place},{ "kills", _sdump_kills },{ "overview", _sdump_overview },{ "hiscore", _sdump_hiscore },{ "monlist", _sdump_monster_list },
sdump_location(par);sdump_religion(par);sdump_burden(par);sdump_hunger(par);sdump_transform(par);sdump_visits(par);
_sdump_location(par);_sdump_religion(par);_sdump_burden(par);_sdump_hunger(par);_sdump_transform(par);_sdump_visits(par);
/** This function handles the player's input. It's called from main(),* from inside an endless loop.*/
//// This function handles the player's input. It's called from main(),// from inside an endless loop.//
/* Perhaps we should write functions like: update_repel_undead(),update_liquid_flames(), and so on. Even better, we could have avector of callback functions (or objects) which get installedat some point.*/
static bool place_feature_near( const coord_def ¢re,int radius,dungeon_feature_type candidate,dungeon_feature_type replacement,int tries )
static bool _place_feature_near( const coord_def ¢re,int radius,dungeon_feature_type candidate,dungeon_feature_type replacement,int tries )