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 here
if (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 us
if ( 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 a
vector of callback functions (or objects) which get installed
at 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 )