most likely broken in some places and might break tiles. Will fix in the near future.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@6636 c06c8d41-db1a-0410-9941-cceddc491573
TGJZXTUIAKCFZQJ54ZQEBGFBVZSJCAX6AWDRSH3TP7UJRLGUM5SAC
2KPMOH6VLRL5YKC7D54UMGRGS5UMAJO224OXTJ5MIKOBRI2EQQ3AC
FDIC4EXOYZLA4WKWTBNA5KRD2DGMOEGCWTCLKCYWZ32I4LU44VTAC
JA465VRRBEMSFQNUXRHTMUQ7OEBUE4GBPXYDQO5JXMAM3TDKQBLAC
Q3ESS2G3M4LBHAIGM66QE2GXWVC67KSR2AXU3MNJEKSP4XKUGXWQC
FWR2IOUBSV4KSFV6YGTKZBTOD2DIUMFYBWHCIYLQJ5PCNAIETDPAC
OK6A6PMHOYIQIPXK32AKOH55QRFWQA43BJWHUOCZA2VIJ6NROHMQC
YNHLI6CSX6FXVNQDDA5PRBIQAR2L37KIBE5TDHNQ2ZCAM4KGBJXAC
IDZRR23PKCZ7WVQFZTHEKGY7D7SLUHCJC5HQKP2FV4GK3B243O7QC
J4FEX23HNK5K75KWIVDILPIWY33F23W66CT4P5BFVZQVZMLZ42WQC
P5KSBMFHDCAFUGHSOCLDG7J7XKCGJBCSDICYOMOYCEBBBXM55CEAC
OMGPA2JNIW5BPBUG6LFK5M2UEB6JH6CT7MP6DH3NKFTJVVLNWWCAC
XI5VME7HFX6PID3Y4PRICAALEXTJET7NEDI4ANYGWLFDZTBVA2LQC
236OSX2W6TK3DQBCBYHZ5IHWEA7KYG6FAEBC4GOH3Q3YRV6PWMMAC
F2MGW5DMHF7AF7R7KX3H6BYJGZ57CVTDCZWUHSFJXS52IVOC3NZQC
X5DCNPFXJAWWTCTVQGZN4PTTWUJIUE4JPTXH3WVWCO2DW67MXWYAC
AXRXY7RSEN3QHQRK6SFEH2OZAAYJRR5RBBBFF4YJF756V2FPFJ3AC
BMGB25AWEDOAWKDB7H22R6D4SL32CSBSOBWBIEN3GFGDLEDGEWJAC
5DMO2DEV7IK3MJG274EUNZBGQ7EBZWC2WTSKAEGPDMILX7BXYG3AC
DVCPTGG5UWM4QMV3TJOLC4BDB77WUGQTJSU5NXQWOSIGSVL7E37AC
5WP65PFRPN43O6CMEE3AIAWPENG3LTMJJ62FP5MQWS3Q3ZRNDMNQC
SVSEDYQW5L2EVFGEGJQKCX3H2PNOI467V6HEPGYH3NLTHS7TX3VQC
IYDUDWPDA7JST3MVKYBAAX7GYDSM6FXXQ2QMMIKEDQLT4VXTHOUAC
2EIE224NR2CHHBAK6RKXLQODHU2WG3WDCWM4KXTDJCUFIUCXWFUQC
TKZWK7DWRWXIN7IJNWF3IKWGZOUSCGYXEJWWYGRKD7TAWJVEXGEAC
7ZWRDDHUNLFWUBFH4322MCPLLHH7G4KVJW64NNUGJD7RPFEHFSWAC
EOSO62ARVOII6OTUCOQB2VYCKYAOHPMVGVXKMUVY4YQSGU3PIW5AC
GJAFXCDBIGFUMCD6IJ523WAT754VOJSUXPNN7ZBECYRRP76CARPAC
A7WCVYROUZ5LXDRACLU5GWN2LND3FYFFK5WFI37JGEGKGUBQCU6QC
23S5SPIJC5VOGKB5RQ3VEEXPUERPYT6WIR54FUSCRENQNGDHUF7AC
UIQABYXDQ4JIVMVEAQCOVR3HOKNNQCAGMGRETLEX3KISPCHCIIOQC
A2SAU7YL5ZS4TODRUTKLI4W4RZOMZSSLBEEXOKPKQKP5SEWU7QOQC
OCAXB5FMLNTM6ZOSWRFWBMRFFXHTLSJXHXR2AT6Q6MZN5RX5V2QAC
QEGZBMFMDLT6HPVW4ZA3JLQL7CCXOI2ITI2RXJNZW5ZPCKX67TDAC
G5G4JTXF6JP3GN7ESZTDLEDNJMTLCCE6BCDBORNAEBOUO5WYHAPQC
ZXZVCXD4FX4K7I336PXBQ5HUBFQUJPY24YNV3GMBPUJXPT37QB5QC
JKEZHDWFNHKMDJQ36ACKV3H64V5B2XAN5XOC6XVR362HY5SAWA4AC
FCEJKZUR27U2PIFOPDQFGB4YFAGIBIGYGY2N25IJBCGMFRDFHSVAC
JINXDPUZLMFAVRZRQHYEHB4E64NNBECNZN3RLPZ5VL2XRGHY67ZAC
JE3SMK7MKFSSNBOPA5RITTF5WOQSSAGUPUO3C2QHFOHA77IPAD3AC
CPTUVTBSOJMAUKMS5RFOAEZEVJGPFHMJA2DJWMDTYN7PFNZUGPWQC
S5CIJLSFFXV445G6CH2AQ3YDU3P7RLSIHWV7GBJ4MZ4C26BWCY6AC
25EF5X4H3LURXFZ35ZGYGUB6ND7NFQVH4M2XX2SI33I4XRGYG5HAC
Q3B3UVMYEVC4YJUPYVSNTR4DJH4E6J4JJDHZNT5LNOCHCPPMEMXAC
L2IP3Q6O2GRUT6XQMHCIHMHZFQRFUDAP7XPPLQ7MZLVWQXCPOY2AC
5FZYO6GQ5DWJFMRHCFSLAI4NVGK2HJ6RE7BLHBVTNQJHN75K5LUQC
EDGP3KBYHBZ62J6RSGWDMWG4AARB2D3ULKELML5H3S4EDWTWUD7QC
UAJN2CFA2QHYDHW2UFAVPPHDQFCD54RKM6V2UC4AMEDJUBBLNWIQC
YKVVFNKT2M5WG2KBURRTOJG23BJVI6WUBP5JOGYPHQBS4RNGFGWQC
IQGGFC563RBS7GDOACKCLXK752EE5RC3T6G5L6H446SXTMSA7T2AC
3J56TWJLIIWUYOWYHDRMQQ6TGJNRUDBPEAZL2AFXUX27X264J2GQC
KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC
PA2AUORPJHOD7XBRM34UMBZRJVTKUFD3PINRMSEE4GKM7AH2KDVAC
ZGZVOMRXLVC42FV67RBTLBOZWFYRL4UHL54A365BR76OUIYRWQXAC
AUXVWXWIFSTWFA6VZXN2FMG7FQEKRZVV6MD32VQQ7J2RKCXHAVGAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
ILOED4VB4I6VPAUTR75ZWX6MXDYXB5DO2EDK2UH67O3HNKWV23RQC
QCIPZ52TOIKLA6O22P7USLEAYI4VAZRLGVXMAASSGEP37KN5PEVAC
C5U3HSOOQ7BKXKXIDS7MLVXUKDTHAWJ5NXNX6YDXTM3GWY5UWX4QC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
JESCEQPAFC23D6BUZMBOB4M54XT3GQZJYT7NCJ556LEUCHRER3SQC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
DK362IHKSDADMUPD35NOTKM4WESQM37KG2PNOJRV2FGELDWULYPQC
PL6I2CMSTHY5ZHWVMIQE5YTM5S5VPKBNZM6QJVHZSSKOJGIJ5W4AC
CGYTZT5QWIEGYKUOLOK7MFXSLJKLYRZONER5ZCDZO5XYWSLG475QC
MJWFTUS66PTCNEYXEJA3CUJFXNWXIKDD6H3V24PW7HK64NSVOFSAC
D27U7RT2C77NEUBP6JCSQJ2DRCJVHOXUO2PFZ45VFYMEVMKI4TSAC
LTX72QGIPNUGWQN5ULPOMFCOPZTK7472DQY4AYX5WM3WHSUVXI5QC
SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC
GVCGKTH5IJ4VSQEIN4CRC7ZFVZW26JPIYNCPTO7GY66CSZZEW3ZQC
UZ6N6HOUPGVSPC5NQROEEDWMEGJA5XUWUY2AKH5QG65AZ25PVXDAC
J6APXOT4QOGQFONWB7G546VTVF6QG42HVOROMHF7YBDJPR4K26OAC
FCZSQBKDNMJZRJS2LWQQWLUFGOXSKXDJZQIHC7L5S7HXCXQPOMMAC
JBZ7NU4BB5PGQWCOSZHD5OQUHQIVOD4XGJLSJQ7BUGQEGPRTVGZQC
3SQQ7NFTRSYDTYI4A6NWKUMOD65JJ5YPSJJIME6JDAAAN7IF6KGQC
BNTPYSO6ECZ76CHHLDP3ASSPDSEUH4Y3E3LETKNXVWAWJRFL3YEQC
VD4KDTGHVKCN35AWREYB4TEOUMCTW7SAUPAMTMF5ABC7VBHVKP4AC
JJULXW764V5C2HJKZNWQAEWB6QM5YZADD7ZCE35LYTBFEM6PMYCAC
VJDLV4PF2ZJ46NERO4LZUX5JE2CD5XBOBQCYYPTFWTHLUEYDUOYAC
542UIZKI65UDRNEMGFFDBWYD5XC7AYLTZ3JZQRR2GHYJALD3YY6QC
DMG73XDQHY2X2PHKWIY56XKD3O4NPGZKKIO6GX3IV2LLRVXPGKYQC
OOFJ4IAVGB6DAUN2AWJBKMFKR7NCE5PCFF5IURV6L5TJYK6CHTHAC
75M6AVUSS3G5EJECJJRB67V5UYDOIV26FZNB2FFCMBZ33EK7FVIQC
77H4BWWPPGLM3PLZH4QTAJRXIZTSDVNCOKZE223I437FN2UJ34RQC
L57WEZMVIHTFRLWVIPWOIOWHCF2I53TVUVYJ2V6IZ64R56FVTZZAC
RC6L3CIBLJEH4GWRFD7UQNGI6PZT74FRUVOYHSAN2XCC74NZUASQC
ZROKMPBKTMVGRHTVFG7V3PAXSBXKABG44RP4C45IHCXEG7NBBTYAC
EOMCPVNQLX3IMLC46EAO67DPBH5KEG2FQTPBLGU62HIRWA3UQ7XQC
WT66JDIRTLLP37SHTV4GI3V64JFJ4D25LNRLGCHFG6CLEFKJ3QGQC
HQTS3VQ6PNUZKHNVEWMML7JNAAAKL4DSW3KFSRCCSLGYTDHZFCCAC
U3KGUJJQWQORJIIFH3ADVNIEEX5HOX6KEOXO7DJSL7L3Z6GG3PAQC
45EMD3KLQPMERNMIKU5G76H6556XOMIW352TSBP7VLWJX2YYGS7AC
UCEAWJ4I6AEFR64SSUFQSX6Q62JGLMJQ5BOO5MQSV3XIE7KAS6CQC
Z6XF4AIERIW4U4AR3HU2ILYFZ54IK4K4ORQ6JKCEWRO5LZODWDDAC
TOOHYAX73C5KPSWGHPCBWCUN62WMMO3BI5CWEEMGV3WBFZ5RIH5AC
LLKV4OYGEDB4GVJS5JVBZP5JQFW7VMPZ2CBRSITJ5XCFS3QNWIBQC
IPXXB4VRVZWOU5DKQ5ZTD37LS3QNK2R6APNZUO672YEEJT6OFAYQC
LGBOBJZ37D3LFSP62KD4IUA37O5ON4UDP724JHE7HZRTBSB27JZQC
TFZ4TER7O2Z4FOGF2RCPEPYIHBTUA4LG3ECXLR7XGLCC6GO6OOTAC
475LL4U4ND6PTNV4XKC7WQAOJC7RF2VCCVX3DRILP2PKIBFYWE6QC
FZKMVCODMWQEVVBBQHTTXFBRO4LZEYLB646ZPVUMLHH6EER7FAOAC
T7CUIVICB74342RA32BR37T36FOX4RBSQIB5PNOHTGTGUYGDKSTQC
RM2JXW3ATVYRYHF3NMG5ALGI64OJ7IP2F3MDUDPUT5TBKSSN4KVQC
HAMUM5IA4BJMLRIME7KVVVYLRHVS55RIYMGLLQZL3F7QEP7FJ5KAC
ZCRK2DJ5VKECRQXZTWT4NUDL2VT5ZHUK7NT6NQPLRJ56TDX5PJSAC
NVSFIV2ZKP44XHCSCXG6OZVGL67OIFINC34J2EMKTA4KULCERUEAC
CIAIASCBKKV7VMYBL2CIFAYGFQTB6GIME4FSQGZNQGXO7FXQTA5AC
XSGOCZRVJO3C2Z7ADWP5N6HTDKJLJ4LN5OY6RNXX3L42FZGGVRLAC
Y4NA3JSN63RLATF4NNBPSR5CWF5Z7UEMWCGVX4B6NOAR47CGM4GQC
3BJ2OOF4F524G6UKVGOZVT6W3FSTSHHTKRJADUBZCHDXZWV3KANQC
LVCBY444HPB4RRFMUAZPHVZ67IC3L6DB27AEMCW3DEXHLBF73TMQC
LE6H6TP2M6KXREJG245JAKDNN6GKT6QSIZ5FJTLV3NYYX5GFKBCAC
MFONX2CQ4V7HA5NSD6P5NDDBXYDSKIOCYUKRZXJ4ZER2OKJWT2HQC
AV3TMWHWB3XBXQCT34UPMZBSIIKVXIGWQPNEFU4CZSBS3ZOF2CUQC
NWUWP5QCMJ7ZZMLCVB74PW7HDEFB6ICEQHNDHCGG7UWDQNNLGVMQC
ASLW3Z5PAVZSWJEMMMVZT226P44EKSAD47QS72JIFJESAI3RPN3AC
LDBTCT5WIPLJPZWXS2RUQ26QKISCUUTLO77M464WOE6VSYSNPKYAC
DMLFJIPOE4ZXUFQ25VVEZCMURP2UPJBBWDGQS3DPQVUNVBBQ4GDQC
KATZLWENEIQMKKWIV4ZLXJ5HFUW6SU5K4ZU6NENBOL4XAAVTDUKAC
AREBCIU2RU2RNHBWD4GARWEBKSL7HDFGDLII22H56OJO2AQUOMLQC
B62ICMDTN5V7R7RBL4JALFVKEMVOOVLRSJASRNYS6CGFWBEEF5JQC
DMN63LCKBTJZN3X2XKYFV2XY3AEKDRJJTKBANH3TT6ZDPELAA3MQC
RX6575DZOHRUXQUZH34YZGPZJF4STUPLBQDIVTINA2L6LVCKRIGQC
7YUGK5Q64KG5O7GJGTUBRRLHAHBCJ5YOE23YUPT6UBKUSB67CYAQC
B4X67DGLW77QLGPTMORE2EJ5K5VA3TWIU23HFUF4TZDODXQSFLRQC
UEI5JAVCMN7Y2SACTEZPZSNFJWOJTC55G24Q6LKQCT4XNDH5ZQIAC
SCXTTP2FDNB2A7F4XXGXSSOEKZQ7ODDGN5YBCTZXGZ22CLCEH3WQC
2PZXX7DNNOL5X3TF2ID22AGDHLHUHBPSAXQJR6EWG5YAXRJCAYWAC
FMSYEPHQUC3RGEOEJ77OZ43JTIFITY56SOOKYPU4CKAVB4VP65FAC
C3OUSRCHDUOJ6ELVDX6YWMQQVXDJLNEXTXWCDDAYWTKNPFPNSONAC
WL3O4GOFGFEDGJ74LVMYJEIRSSZ3ZPIPY5FWAZJED3FPCTUV6NQQC
ARNDCQD3NXQRD5CZFTBQOMID5RPPRRIK647T36FLGHMUN62MF7WAC
QU4M6MULPGDMLHD2EHTSNQDSXRA5JZSXPDBZK3JANTSXABRSAE4AC
SRYIUTTRZYQDYPLLXYKEHMYWC4EGBYPOT65M2HZEIGFG6SDMV7SQC
NIETE75N7WEVCF7CVQQ4ARUIRI36RHUD4JD4WPWRM4IZUVHKT4JQC
SWE3F3BLKHYMJEJLXNFH3MR2E6VDEYXJ6DL7QLPP47BJEKEUCAMAC
XRZPPYWPWUOM4SFNI6BHKH2UKJQNLKOV6Y7XIEPEZXE5QYRT26PAC
4JNV6RTRY2UR3PZFMCNPRGCBSUAB7QTXYJCSYBIUAFMCCYVGN6PQC
X7XW2G6JZTAZEW3DZOD5ZFKQVQTTFDLQ63WF6N4ODEQLO7TNZA6QC
YF6CE2VBFK6K4V34PKBVYVQUTJRDDDCF2M5RMUGW6V6N2M4SUPLAC
67WUNL6XO77CNOMQEZ6BMV4LL2VTCMUBG57DQMCHNEMPCGYXLO3QC
4SWAT5KCKQV527NKELAXFQ5XA4Q5HONQXD4VBXMUZNPVPQKPCPNAC
4UXFU3FZOCBSLDQ4S7MJKAE2H7VUHCNRDQMIY6NJ3PHYXWNGISDQC
RRFPZKCRHPOJH4LDHYMJIQLN2ASWVJBZQW6DDUTBNQRDD7KMEAYAC
226KYCTMLIXUKD734QATY3JKWUUKC5Q3O75JT5EWIX6BKR7ANZSAC
PNIGZ2ABVEGC6DN6PMKO6Z4M2SQ5EB7VZQT33YMEAUPEZVVEDJZQC
T47W6FG7GCHCFEWR6MPVLDYVYG7Y4U4F3VY3FXKJNXV5R7HH544QC
ZWPVFKZVSZ3ULWTC4KUZM7DMPCTTUJAZPHQJSD37V4ZGHPT6CCNAC
S34LKQDIQJLIWVIPASOJBBZ6ZCXDHP5KPS7TRBZJSCDRVNCLK6UAC
FIYBXLWALQINNQTHG2KNDUUTAQAZRDDLXW2XOVSKDKBADJ3XCJ4AC
ZJU5Z2WDMI7HN4XJ3NVTVRHIZO2CGFUQ2FSKIRJVTQG47XHNCZFQC
TXVVUZNKI2O5YJXC2N4GPG3RJFNC6LSC5IJZKD5XLS4LGJHD2H7AC
GQL5SIGBHLU3FMCE54XVGLRY5AZHRM6DUEB722REA2DPLGJSN6EQC
PR2LVM33MZJBAOQ5ZIQNX6CH4DPPG7JJLRCFAPTPLMXSKNJAGJQAC
4DEFHDNO2GUBYL4EGYEAR2IP3KBDXRU7UL7L4P7HEZY2UNR6IYJAC
IGBJ3ZY5G73GTHPRNWKC6XMQDINRGCTIXKBHTEZ7JLUJS6H4JRBAC
XII3RPTU6PPAY7U7TE4MTVPSOFZTOPF7ZKHMBGG2GHLAWPUFOKCQC
WXZQJUZXMYS7R6ORNB7DWE5KEUXT262GXWMRPOJYYB4I3BFGYLLAC
P2OYYNPHIBGOLT4CRLNTTIXDN34EU2QCMFQJNLAMUAHQXZTEDPXQC
JDH6HBFB6QEXQXWQOKNXHFO2SQB64IQHQBASR3RGOTX6XAEYWMRAC
HW7XKO7HRAUQVDVVKG5GA7PYAEL5J5GKVDPT2CKAD3FLERAY5HLAC
WZNB427K3EUNV3FMVXLQTM4UIHER4FIKQXWLUUXRNQC3OQ33VQYAC
WTUFDJICW653ERO6FH63XYGOZQRVY3DVLPIPFN4BMA4NJH5UD3LAC
CQ24AVAI6SW3AHTIDMLPSTRRBEU6FHRF5I5FD6G5QIYE6PO4BQMQC
NVD2HSEW2ONWNYDDCTOMZZOUP6NG4DCXI4LNYYIY4BQEBDMJQK5AC
UPPUAHXHWKGQWDKOCVLR7RG3SHEUVKOUC5GRYCEUDGD6RNCOU5LAC
JDZCDMUCQ7VENYVLB62KQWUIRGABID37OKATOKCBUPCDL7W75NPAC
V4DWL5WBO2JCODVS5QQNWXDH4DAYZN3D5V3UDCHM2KKOMADOTEDQC
LEGFIEUGVU2LZELGQH4TZTIJGKEVUHFTRGQ4Y2KGLSK7KNDI7BFQC
RT4UZQXFGZCMWEP553GYPQKMYIKQHRJO7EZ73N76HJI45AW5O3DQC
5TG5LXU4DX65KMWCZ7YJHOB3VAETQAVBUHEUSQTPMA327XV2HQWAC
33ZMPQC6OXTESW7SRW765GRNJUEJRSYONRVZVIEUDAUEJ2PPMB4AC
KEANRIMF5CGFVZ2XJYNFPOAKLXOSOJUOVA73IWBWOG576265ERHAC
OEISFRW2B7E4YRJSWXNXBH2IAJO4O3LHNYFPFD3MBY57LYVRHMZQC
X7X6JKZXOCG6NVLZLGNCQDFFXW4H3S77BVAJ5LS7ZHZ4GQVLMOMAC
QUHEENPY2PYTEUS7C4R3CKE4FHSHGR2BIXB6EW676ESX3727PA3AC
SKV6JBDAWUWTFECFSQARSNA3DDPUFCR7N3T7D5J35NYTEDMXLP3QC
25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC
F2ZJ55CL3T66DFM34BQWCJNHIT4XJFCGTWTA5KESV6NHWFLTGUYAC
7Y5HSDFKA5TPLS2TWTRFMQVX6UXUDHXU5MUMXQSDFAIY4THQ3BIQC
AVCMVFA3MKCXHO6H44UK5KJNIHTGQV7UA7GYXM26VI6TXXU5ZN6QC
5ASC3STDYCNLZFEBN6UTMUCGDETHBR2OCBZCF5VIAZ5RRWLOTDYQC
QWZR7TCGSJAKK755AVEKFIMF5CX5GQLQC46TLI6URKZO2NJ3O26AC
B7DNCNY7SXL5WAW5B3XZP5KIQSBWOJ3N2YW46WOUQKTRBRRZ7YOQC
7KWDC7XFNMBLSUO2HISIROBINZBX5T67LJEEXTAORXW2YZ7VWFGAC
DKRSOHZXL6EPSLKOKHF7GJXSZEJVY7CXGACSHWLM5B5FTRETWWCAC
DDU4A3JGN5IUIPP5IASOODKPR2WBHSDSV4FITZ6HNXNSXXQACWAQC
W74555HMPXUQ72AGKBXC5P3STMMX5DZAW6ZESUDLNVJBCAG43PLAC
S26C7QFN3OBMIHF5XRB5PKRCQVBY22OLUIJKTD4CEMHKWCWE457AC
BRGAZR5AXWC2IALBVXO5SB354IRQEIRHSK55RZPGFI4AGIOD4LUQC
5JS3QSE3EIXSBVI4DATH2EIFD7QN3POAFEUM7MK4NRMPH5JOPAAQC
GMCNF7YBSN7WQJNHSF3RV2NTHTVP4TABCNP7S26UEIHPAKNCPWGAC
5B5DP5S6A6LQMKZYVLQAEMHQZWFWYDHPCKQGRNSCNNYIBQYZ6BIQC
NG53L53MSFQZAIVKHG54IEMXNJ33AYVPF2OZM4MMJFDKEJCGPBSAC
T5XERKCC6UL2UI2HKE34BTKNINTOXOSDCBYGC3A3JY7XMKIQW4GQC
Y2NYY7HWFZ2LQDK3ACSLGS37F2J2IJ5LRGCIMZYXLEOSVPD3A4DAC
WKX3GD3EAZUV5PV5EXVB7CFYJOGMIOM3LPPPUAW3HTS2EFPF2EPAC
3KRKUK3HCBBZWS5MXFAMM4R5PGWWTSURBSFXEEZPRRCFAZ5EZTCAC
XWEI2LM5HPH3F4Y5TS7B6FWXQLERWJP2MHW36KGYW5TIAOORHYUAC
YENJVRGJY4Y3GK65BF7CE2IT4YSZBFQKVBFMFZZMX6EEC3O5V3ZQC
LUGK6T7QQB7VZCQGXHPOUCUAO75U6COYCSESVFXOR5JEDMJNN3JAC
3CMMAOYW3XCVFBCT2RT6YH5BLVAWQT62QXXWWCMWIZKDFZBY4M2QC
BUSA7O6EFBZVAG2RL5T7MD2WTWKOEKKIAAZ2VS4Y3L6ECT4HQR6QC
M6J5C74JDM5ZYIDPN7QXUCP6L44S2Z5XTRJMZBBRYOHA62IGYXKAC
OP6CTAKWCAU64JXQ3USQYR5E5IFHQHNCACII5UMVRXUTZXJQOAZAC
Y5YQ2AXS6XTWCHEQFDXRYU2IDQTBW7WXNJFES22GSKYQ2JGZ3U5AC
UJTB5VR2BSQSN2QRTLZPM2MDNHQ6KKRCPOBESWSM24N2PTWPRRHQC
KAOE5HB3THUKVGFZRO5EZESHEB3Q34WUO5DFMLWIKOBF47LZTIYAC
U56SICUKK36SJAG3QKV4WGDSAXOW5BELRPZGHTRAMZVUV56AESVAC
2YL37AGHLFOMIF3GCTVQGGV2RNNWETWM6ZMUHO3QEWDVBFFSFAKQC
BFCFMN2BXNLXJCYYCL2V2XTDQQNM3PJPSRB6CU76FM3332NC7GMAC
C5VA63WAQRWPENIMXRPUPZLZJMC77PL2B3A77HYFWDCZU5QDG7VQC
QKGDOYIYKE6B36ION5O2DRW65DWWPZMYNWJVH7LJJ7FPGGM2MYAQC
AOXEL2V6ICXEIRWXB76LJARWP3NPKG2L4UFYOIQUALUJU4ZLE3UQC
USSKCWQTF6BTE3SFLQVCT6RZHU2R7URWFC7EPO2EN3Z6U4IEQ7GQC
25EX6COTFUVEIGQMCJ47FDSEKASVVO74LPJ4ZS66ZYUYXD5G3N3QC
M6MBPHNAERUXYJ7KHK5FE2B44CLBY4M5MR5KY74HVDFNHVLOEQIAC
LFBNFE3PZBXTR2ROPKYPARUWLJAYWAKGTS7VBWADZWVVSJ5CLX6AC
CXMQZDNQ32IQ6S6V5HVIGIFUDYZLIECP4H63YMWVLDCXNII7NHOQC
P5TRGRH7XMQSPCZKM5IEEO34TY6WMLGHHX7BU6Y453JFRXLUR2VQC
M6IHSU5JWCTOTUSPCVVHMAQ4XJDGQJOLZTTN5BGKEOS4B6Z7IOWAC
XJQT4B4TMM6R5AXQZTOQOJV25JXRD5P27OSFXZBFLBV4WUZRSTQAC
32GG34SJYCDQC4CO7FXCFJ6SDARRQ3EEP53XJITL5XBEKED6EAIAC
TRNEOO3YKZSUGYTJZDDXZTJFQJXY6PWKBDJXAOLY3FZAD6WHTUTQC
3IJHKZOTXLU7B6F4UIKXCQCPXEVLKRX2M3VWAAPGRLL24IIP2T2QC
OMTU7OMVWDVAGJCQGQJDZ3YU252T6IM2LPS2ZMPWB7MIXCJK62AQC
5CRNBCK3AH6UGZN4R5MZ47UCVYYA3CKFXYPKEPZWRTBJ5PIGDB6AC
IYIGI5ZDHYV463AFYH7BZVIJOMNHTMPL4VZU7DHSXKFFWAPTPD5AC
F4FAPEZ5P5CPHZIHUSRYULB3LY4LOJCUC7DZAYVL77LFFBUBCUNAC
SPWOUV6ZNHLBSAX455ACJDBEJYVFHGO4H76L4NPAE5DF6BEAK34QC
NV34PXZWSDIIPPJ3HHQIHB4M5UV66QIHOCUEHCSAACMBM765GX4QC
LH4OYDEWEON5QNUCM74R7MNBJDP7O4XRETY74ZMYSXUXYQV427PAC
3OFG2YD2UOHC6UA7H7LWKOWCNFFSTDOXAA6L3KC335OF5RV3YOYQC
B7MSPF6X2RLGWN4M6ZZF3WSOPKGYPTTD7LIJVST7DXN27DG6JHNAC
EHP6PYCIPYQ3KF4JFGBTZXEUQHN3FVAH4NUWEOWDDNKGPYVOTOJQC
QMN4QZWL4LOQMJ7A56O5WXH6J5TBLNA63XWIL34DNU7J3FVQI2UQC
EMOBSWJHHB4V6WVMZL7JCF2V3KZN454Z6NS346OKFPMBNO24EJDQC
22ORIULMB2NHLFZNJFK2AF275Q6XBKOBE4ZRMOADY64VK5FAUUSQC
2E4RV454MTTCKYLKMSHEEAFPNAFVUXXPBZV3XP6V7QMF4BBWE7TAC
SFWCESFCUEVKJ6ZQQX3Y5YTIQD5BC6MCVSLVZFRGRTU46BFLKKWAC
PQ3SLWFD5CF33ZHBG2V7YJEKAL6HTSDYOV25OKUTBCW2QF7TL4AAC
PSCYVKJ7DGXAL3V5U4O6AJTRV6Q3N3SHQWAZ73VIPRTE4W64F2XAC
ZGUJWUFJ4NFFJ6PGXLFGQWCWBCZHPWGWI44NJHJEVPRG5L36PADQC
ZJSJGWYEOMUS4VK7VWFVLKW2E42X7KPFLK6HAA5LN3URQWISQULQC
W6JMQP26KNVIZOJTITBWR447OX63DUKBIQE442Q7QYLUUKJVBELAC
REOC4SN5SYUZ6IDLV6I6XZ4MPKE36VAJXLCZ2SXYYZB3RECLXSLQC
WQIEW3O4MANA2KKYRUWEZP44KHVJ4RRHEZTDXSF4EDELX66LO26QC
LJK4ZQATLSB4MKZG3ARZX5V6RFGTN3NLCN6GTCUGJQKU26SOXMUAC
3RNRFLMD2X4RUFTDVITLXAP377YB6F6YMQLL3DAXSUZDZBTWSLRQC
7BREK7U6OWZ6YU3JDSJSH4CMNNULDYABCKCAUHGZIUJZBIRJS5WQC
TVC7W7C2XKBQSD2IJFMWFVGXZAOD4EUOW43NAQTOF5KFMAUOJABQC
5V47S4NNTHWTSAHV3YLO2VGH7JTUIYJ3GBPDN5ZM4UQALT2ZEXDQC
NCRXRQNCAMQQOZCL7TBMKGM6TOGDAHR3GRXAVVB26FLGE2KUZC2QC
PHBACPMH3F34GODHVDKNCMXWU373RJQGVTDLBFCCDLLWDXVYOLTAC
NNG27Y5ZQAZX6UD7F7M4F6KEZBEDFXPEEC3LFUSX4ESKT7K6UJQAC
IJNXE4Z7S7X3NG26GFV6UNZVEQ6HPXAKSCNPJEKU5DUQUDYJ34KAC
OSGS3PH2L5CBTDVZCZS6OCFQNA4A7RMEXBYJQB7DDZBYYJW7QSSAC
LOEVXFCKSHE3TCQSUSHOIHHVDJT3RFLE6U3VDI6JXAQTQI5KCJ4AC
W3HLXYSWQCDQQIBXBQ47IDMN2HFS3ACTVR55EV5DBUKPHIAPAGOAC
2SFHLF7KGHAKSXERQRCHYY3BFDOZCU5RB6KTSHMFMAF76R7DV4KQC
NW6P7VRKBFBQ2FRDZBXN7APJZPYC4SYCIA3MOOE2KZGX43IXNK2AC
T2AYVN57EFJQLFUFLAZDXKDAFDGTDLQIEQWQZNYFWJZBYSTYH4QQC
D7SLVLRNCYCBDYYRANHDG3JYEF25CFCSUY5FMF5KXVD5D4UZSDDAC
PM65H4V4GNPVIJFUQW57DC3VDB7TRUUNXKVZONQKEFZSK3AXX5GQC
XIDD2TZUOXG6DAMK7OQU5MUKVIEHQWJIJL5BVOTCVY33EPWJNX4QC
KWKVXUJSWKBWPRXD6JVI6K4YHHHNRO525VHPPDQ52XCGQRUHVXQAC
RBAGQ2PB7V5YAM5KSHSZR2E3MLKDSRVM5XYGI2TIXP5QMVBOQHDQC
WMHFDQKUDCUGM3R245LLVZ5NNEZSCXFDSTNMVS2O5EFUHHO7HU3AC
CG4TL4AKSN4J7CMATZFJ5N7PSDCQXLS3QYX7PZ3K67KMMBT675OQC
IAQLRRSOXHIU4XQNOFK5F6IUXCMMXSHDDETNYWFPV7YNWPIRIUOQC
WUWTYSQ2Z7HI637WNO2J55LW6WLPBDF2ILH622T47ICW3AN7OWMQC
ISSEUTHG7EH3QTFLS23GXFIOQXCI5HJPJMK6GWNFMC6NDRD2H34QC
FSD7GIK3YLZXWLEH37BU6KV3IUCFGXPQL6IZ7H65YWNRBEKDBX5AC
K7SLUAS7TC2T6AG5HMZHVMD4ANGAI42FBSZTB6CTHLSGY2CRY4LQC
UTGQ25S6K4R2POPYLVF6A5ZU4PRTN3SIR4DL672HERNAE3RZP7AAC
PES2QAPAJTLHZORDXNJWKK4VWRDCGXMOVVFI2TQALCPB5JUPHCVQC
3HGELZU7NELOQ635HZO6IJIYLBSNCJ5VPH46IE22KA3OSLEFK7AQC
R2DQBWKIW7YUJB5SOQ7J274JIYRVX4H3ISFRPAL5RG2RVVP4G2KAC
GPEJOT73KMACP33IPAKFR5ROGHCOIP22VXZMQNYTGLEA2OSZUM2AC
WDEFQ6YABDQIGJXW5KT3OGR3EO6FZHXZELIRVIXQ4XDYTVOV5V6AC
5DIBLX3RXK752JKG2BQQM76GYEOMQ5E2YKTLROH3QQGHCVLAGRJQC
SQDS2YBPOYDDDCW3GGARBZ2HQIUHCQKL7SSHKFQWDENOL5YNNVNQC
L254F6ZIU2HWGLFFGPIORTN4C3TDQ3E5JZ7Z7GQA5AEDIKL6PKDAC
VVEULZ7FMS53F6WZUJLNJ23URJMCCWHBUEDVGKI6R72JO2DLL5HQC
UASSVST2AY5625MS67C4FMEVQFXEVTG2SOIHW4AVWE22PLP27VUQC
GZ4FB5VKL4C22KK3GSKQPLJYMRGLFXUDCOBNEBC2OKK6KVZL3OSQC
6QOJM3P5IONWA3LWLN7YT7KZKNSFNIGNRLL5ZIKFRQ42BDURNAEAC
627CM2ZOKVBMPVPBYGWBWWPT2FBMVRRH2VDGPT6Z5XCVJ5R4YQWQC
POP6UTTHSJGDU5NU7ENQJOZVFUHYM63HJ6HLPXDDLK7XFIP4XEIQC
ADIVVYTV2MJ3XVRYDNBLPTAEACCNF27XZDCRVZFQEHRHPMZGNITQC
S2LIBA2CLTZ6ZU66AUZ2CCNLCDOBSGWQGTZ6HFAFP2XSWAALGLSQC
EUK6RUR53DH5VHNWUCK6LPU4IKDWPOLA7GFAJ6GABH6WIUT2DRBAC
QCUMH3C7GXV7ZW444WT5SFAXQOJKJSE2YCQCEHMRYXCWF4QI7UMAC
KBNY5FWKTEAKABFCLPC3QFKFSVZKAGXINPCIFV6WDSWFO4VCKNTAC
YF2GZWXNV6NVFFEBEOYS67JQJQK2IUS5BZMGJW3XQPYIJYHQJCEQC
Q3XHNSHW6FI4JCXSEABATRFBJPMCF7PXNG2K6ZQTRRPVMIZFHUBQC
VXSORUQOM2VZA4CAZDC6KPAY373NQIN3UT7CXQXTRCYXO2WM62DAC
TO43FWKHNIA5MVDOFXYHQODTLBQYEZKX5UIUGID57436UF7G2EXQC
4QKMTZSWYJYJ46HW2TXO6KBPJV4NPBXA4T3ZRRRDYZSAA77ULVZQC
TPZWAV3USKO7RX4IGHLZKVPRN36K33PJPSZYL6FZMX4XBHTYOQYAC
7X3KS2DYACYTMNRE47MZSXC3RYRYUYDC5SOPRVWOIH6MQCHMEU7QC
VIHJ3Z75JN7BXWNOPWV3CWQZEA7K5DK36EKHCYMZC7SOSJYH2XHQC
W7KGGF2VUXLD6YH55EPIRQ5SF5VKVKT33P6RNKCFCVQ4QXOLQE7AC
67WH6I2XIMRRL26UM4FJJJZEMJIDPW5Q77FFNZGKWGTWS7GTCJ6QC
ZBPS5ZTPF3DVTR5WET4XEFHYXU26CRHU2OHX3YO6PD4MTM2DUXAQC
JN4GPMQCXOY5ICTLPLWP6DXBFULN4GMAEK7T4GXTZVIJAUUKBBYAC
ZP2KE7A2LE7Z2S7AC45WE4CXDSEVDTWIMV2EM4IBUKXYJIDU6R7QC
JJHOTW7LDUJ6DLUG2DTFWASCAFPGD2WBW7MHBSECJZU7PTJYWQDQC
IGN3Q5YCLHXKWFZQRSRABCHW2JFW5TFVU7TM5EXE2EW7PDBBSQWAC
DTO3EUKWHZ5RJNGNCFYXSOVTIPVXPP637F2W7WFGYKJ7JK7VNKNQC
TLO257LZSB6ZO36STDUEWJBO2LETXFKTFGXELA6Y4BZBVAEIIINAC
23I5KJ245D43B6QYWS4TDQYJO2W2PKTDCLFBWPVAFDWS6L7NMGKQC
AUXHSGS4EFOPZ6TVZYWNVOUDO7NYKUKE3HBKGQQWTALSVFOE3HAAC
ZLQAAP55CJ77XIJN3DZVPT4GTTVLIBFJLIJJKI6L5UBSHX7VUK6AC
47WMN3S37XT6E2JM5S77CNZ37SD5IZKMSHINGY3CDY4QOOS7CLXQC
VIFZ6DO6GWJGYMXJZKFZ2JYNPHNE74H3OFAOCPISQG7M7A4LCOHAC
4GYZYBY7FFORRNPIEFTV4ZM2C7Z6D2KTQOM537ZCC2YBXT2TNSHAC
QS3ZRS3E6KL3YJHPKYEWCWJYRBJSXD5OOYF6Y25HZVECGPJRDB5QC
5BJPWUPLJFS34FUTFJVKA4A52YMIGV6EWDXLNSDCWBJWBGVSQFGQC
EFWEYIB2R3DPD3JWIPU6LS6SFLPMYN7J7X4GBZR7DJWKHJ3UELSAC
RQR4PTMGQLTRWLYRU3KXIIDGND7FBORESJWMWFVD3WYU5SISZXAAC
HWTL2S7OVOJRJAAN66ZTT26HJDAOIW6RKAG5NFMNZJU63CTU2U5AC
OFH2B2UZBK43QLFQBZ54FOCFLFNE54BZVDNCEUGDTBCUGNVZULIQC
XKAJWK6MPHS3ZCZIPPLTIMOPF6AROGLRDDCS6EFE3IGE4AHT7MYQC
GT7BSR54BVJKHUCLEBTELGBMNBFFDQW52EVC4XKVEMUVG2UGZMDAC
HJV7BZBM752K5I47ILBQJJXSPODBBLGKDX5DWJTRDXPJ3V7AEVWAC
GNS2MZLFRFGMG7L26JFBXEEALSIQNPUVA4NDUJH42Q5TEJDPPFDAC
YYMVEFSCN7DGZC74WGG53XOLQF42KY2KGBXF2GOAXCR6WEE5VHCQC
72CQFK27NR37P2WQ32U4PEXXKMRIO7JEMJN2ZCPNVPZMT7UPFJJAC
MG6LLF3XYCOEBQRX7TJ4MUTKM3IROYWUMZGCMYVW4TGDG36CJMJQC
PFDWNTN3NEZCP6NKPIM2FK3KRVDBQUCGIAWWOU2DJVS4KWWJLYYAC
AY3CBJCAR4XMZODH5N4DVJXXJF3B5HUKICRGO7KCTCFACAYVGN4QC
WBAFNYODKTL3YSG3UOJITBJSTFYGJLIWKRNK6NMGIIP5TPC2BDGQC
2DORUQ4B574MDOOMRYWGU5I72AKHMCSTZ6B3VSHQBUQOZYHRC7FAC
Z63Q4DA5J5TZAC5LN55UD4CLADUMU5Z73TGEVE2YUXCHIST2Y4QAC
SJOTTUZMA3UTGT5D6LKUTBDP2CZFXT24FB5IAWCUFHSHLLACM75QC
HIRKGUMNJPWKSVTR6TVBPD3MWNA63CEHCLCIPWEMGDFHVB3NPLDQC
JXYRJYQUCKNTAAQOCMWEMJ6AKQRDJ2MQCLCN3754LQYPBO2XBNOQC
EMZT3U3FL7R6L5Z3VFLJJVEC7BONJ7EJGONN2SSAIHK6L6HLQW5AC
4FQAKUKUO6PCAZ3N4HUR5XL6E4VA5UQUZ3AEDGRBLVY7W2LMWI7QC
TJRYL3NXPW5IUGEV3YOC7JYWEXCZDBFPLT4AUG4P227WVKVB72ZAC
SKWBAGSAB625IIN4UP3NCPRX2H3KCPC2LULHS2A7JVRLO3EUBJDAC
JM7UAK777RAVDAVLQLEOBRTGNW2B47S5G55XITJXO243IUNZHVYQC
TPPJRQ2NTCV3GI2VRHEXQJREDERPJODCJWUG5WCOQGN4REPPPAMAC
CHO4U5JC3RNTLXVIDXXJYZMOBZJ4VXW2GVJWDOTBRKK3AJ36LDLQC
XLLXDEUCIHZOCZVXPNUIXAA5MIT7T7YRDMXKRMTO43UEFNVQ77FQC
NLSZ4SHFD6LN6AWB3HLLKQTCKQW55ZHEW3YM7XRAVAKIPD3C3Q3AC
45QV77UI6QFW4234P365LD3FGJYRVWTT5455DPB324NG2NFQMKTQC
SNTODFY3H2T4RLJ3BEMURGVHBWFJARLS6CFGZ2CVFFVKIH2DBBQAC
4PUWNQO7QMEWY3GSUHLBKMYOAI7ASYSRM32KDGTA7DLNDIGFAWFAC
YMLVBQ6M27MECUVMU3BQP3WSGR7GW4XJMQIHLGHHWMVXHMMIXOYAC
IIN7AVA6JYRBXH6ZYRR7BY7TV6PW7ANAQ2A3PD55FKBKKQFEEF2AC
UPJVSMMMHGRDUIJG4MZX6IBLQ4ODBF5Z3PF3RHDYTSAEOCVDZM5AC
OXHOOJE4XEQKGI3JKURNSITG6CRQFAOFQ2EKKG6M5DCLN7LS4GUAC
RZP5Z6JM74GVX2M6L2JOFRJ5VT2XGFHBNRDESVHSKF66PQKIW32QC
GAUT326KHT3MMZPC7TJUOKGPZ6X624E7Z3IOFZEXYWUCORBCZTOAC
XCEZ7OA2INNPSYNAB5U6JB7XNDAD5BKU26YLFPPZ3SEESFZKADQAC
ECUYJLVGW6ADRLLF2WOMRG464VHOVDPP5OK5SAX2PHBUUC5FD4TQC
4PBRMB7TK2TXL7VSDKMUQMT4QFK3SGRU4TUVMEM7V2VS7KKKILAQC
FEGNPOJI2SALUA2PVIXIQ2CIXFLSXD7UB7CNUSAAKV4L3POXCRFQC
DT6OBXKHMLODEFK6UOIYCR4EJSVJKGYWCM35BVM5SN55K2736QHQC
TAHSTXR7ROOMDFUSBUU4ZAIEWQLAS5CIRCTARLD4Q2BGNLSL7E5QC
QYQKV4R47PTERXVFQNNWWQVICGSOMBHW6WM5TAZAKLIYOLLPUAJAC
6ME4TYV7ITXCAUMNVB27LRRHB72J2FVVZMJNS34IMAN57R37AE2QC
ZCPJIAG7SEY2TUBAGOFWCEJYXSBT36CZU5VO7BWEGSLJ4K24B4TAC
FTFRNIA27JTXPMWMX6GJ7ILWF7IOQQ6ELR2RF2YEFDFMLPF7QTOAC
ODNAIEJW732NG7USKQKCIP4R4DAEYXXJQX6LY7TIN32NKE75454QC
IVVTHLTTLOP5TSULXJWUSSXHOKYWVU3OWKYVK45A7RIB6V34MYQAC
L4RYVF46EQKMVOEADGRG4WMPVTQ6NNFGYMU4SHAH6XJIKWVHT77QC
2G55UEHQ7554OPNSZVTUCZTWSHIFKGT56QEGSYFKCTX547I4AL3AC
7UQJTYJTHTDW55ZUKG4TINZTNALGPK5CB7UB7PJ2Y2SKQ5XOYP5AC
CVC5FFFLGVRR3KPYDNB6RF4FNACV3LI3HPSR4MCUNZ4C3FSQYBDAC
I4HQEB6RVIPJD3EQCNADMQJVGYAIIHTBGFVMPXHDNLYYG5JVIK4AC
CRX4RG35C3DH57NIXCW4CG4X7SBMSX7TAJR2BAFQ4LQKCLYUNANQC
MBBPLL4SZUB3JUUYQYLZW7S5OXRCEGJX3WWADOQXGHWQ7BIKCY5QC
247OW5JFN34ZV3GRVHRE25AXLLISUBPOX5YRGUE64BCM2V7QNEHAC
LSAVA5BJQO4Z2MYXVQOM4AOXTCLKDNQMOS3DZ4SDNO4LI422LA3AC
3KAINFIXO7WNWGUGZB43EUNFRS2ZPBLQZDTY456QACMRHYIJ7WDAC
VXMRWJ2CPHIB2NAHMZKUV7DAFA7GLVA32WDS53WNT3BIDHK6GOZQC
7THPBJV4J3WDSXWL2XOYYN7RZQILOCPKFWQRYKBA74J7WWBFRLSQC
SJXOZ6J66G3S5VYGIZ3YHEUCKUF5554YEFUYLVBH7X4ALYSXKTGQC
Y5RFQ6KNJCBQUSV2T6WDR7TPZLZYLOAWBVMUTHDXGOZQDZ2U423AC
O7S3ILRELHICJXXTDGMF7KPPZWYHPYCNDPV2I77FZXXH4I454B4QC
NQXYTPHC5ZBLJDIC5OVAUIDYYOXLPSGWUVD464ODH4KBHYGRDPPAC
WFED7ME7LXUZCZY3TWX7PCPW4EAA55W626CM2OOYVJTLI2BWFTVAC
FLAGBNUNSIQNFDN53CDWABJRTTFWDL4PG34AI474ZKPXDEPYHOAQC
PI5BATR2SER3RFE76IUGHM2AGXVFOUM3PLU7WC2K2Q2BA5K2E73QC
XVFTIQ7MSVKQDMQ2HT3IY6FJOZFK4H6OFGTUAID5VGCA5BGVXYPAC
YZXHBEKWQPY4BTKG5FFGLP3AIRBQSTKQVLJJHWKQEA3HTN4UHDYQC
OPNCHI4UGN7WBIYPAXVV2C4N22ZSWROA435FJCY5UZVXKWRYQ42QC
AS2IQQJNNCEQNXXKTGYHLB7RO3ZKCF4F7GK6FJH66BOOKDDRGNIQC
TQLWCGVXVZ75H7MDBJD3DJDUFNW62WOAEDJUVKCHQTAXKBP47CSAC
VYGSRD6AGPW3JDTKAMFIUEERMWNCV35SPWXH75XCX2SCMMR72RQQC
WA2OSEGWVCESURYWNERNYWQKHE6SU4XQ4Q4HJY5B6ZPGNFUKQEEQC
OHJE4HQ2B3HVV4BOPBRFKO6HBRTLZEI74P5PLJF5GLSRD2MFWXHQC
GVW4OBPGXY2Q75HB7QHADZIOHKL22FI2BSJ2TM4K5SBJENBFTQKAC
IHOKNI4O7EEW4UBMKHP6XOZNEIQSW4AYOT4O3JXUIXNNR553IQAQC
UZ5623MOLKBTGBSRBJ4OBOEI4IEZSPV3NCV2DRMUZ3CHHJQVHIIAC
AMAPVOFKH3YS5VCVOG2YNHXNDAZATMXFUL6ODZUIOF5OYYKBVKGAC
QMPOKKUAUJ57DVDXG7CFWKICBKAE6NX27F7VS2RPXR7QMKDUQRSQC
TX3LTXGB7TJ2QHLW2TEW6XTCTOW5A3KTZGBPBRTDTUYOZFFT3NLAC
VGSJKJT74DZCMWQ6ETNAA33EDICJQRUOGSO6Y3QNZYIHYML7QMQQC
FFDIVQMLFB3FCJJO5PUEDNAF527HG6P4EGAV6LHUD6NNACZHGBUQC
5K2ANIEXD3CPJM4XNKNPZINP2G4NT7SJBKRN62WNBUKJXFERTILQC
CAGCTYIUYWDHQAJOLVLKOEV5HG6K5ZG7IDHONLIG6BDNCWZJAK4AC
QNKMXCJSGRBEPE6ZNPEXU5EQIOME6EI4DECVC56GLOBCMGWWE6MQC
AAVL2ZLM3DV3NS7LDYQJX2PL5ZBX2F3QOMCCFM5WRGXB53LZOTMQC
GSJA56E3ORVIBCBA6T6WU2HE4DCLJ6NZPW76O7L54N4CYPKLJOWQC
DYFOFUZ7UXOUYTID6UXX6HVU6OAFWYWMTSCG367S6TRLOOK5OXRAC
KPSCSVGHKEQ4ENM3QQU2U3GYMV52NDFO5L6ML7YDPUKV3365OA3QC
6PAG7GHXHIYXJPPTEK4KZQZT4CL2SJDAGTVIUDB4KK66PVSTWUMAC
TWYB52EBZRZEABTKQ7D6OWKMDKIGACWDUGNH5LP47QX4SKC3SFYAC
64VBM7SGUX7CVO5TMVOFU4A26BDOFQXKS6G5K7BXCSWKCCXEETOAC
HAM54HXIO2245W6REO4RZDY2QMIH476AWWJSMYAMSYYNEBBJSHWAC
7TK2D5RI45FKCIQBHGU4FA75NSFZA3ZYFF2UYQJEGHCOV7I4XUGQC
H7HOAPMVNVME2LOADK6US3IEE22NVLVJJ4VKGNM3ZGMFI5HJKQ2AC
G3BHIB4AOVZ7P4DF7RMRI2C2O6HPSJYRMYQLF2LYBFLKHN6UUIZAC
O6ZMFKDI3XO2SWPNEYHIPYFDWJR4TVDP5BAATK6LVCVETQID6E7AC
QLMCSREGK2UUAPXZSZQKLZOLM4BCB7PAVCSR3DLFQS3EW3IMWQSQC
IXLNOTBJGHKESBCTME6QAR6XVWFNCHYGMS62V62ZJEA7VLQHXO2QC
6DO3DRQ3FSJWBJD2ZW47BTNHCSBSOKCUV5HL34XO3CWPXP4QC6CAC
FJQ2RENS2ATHQZUNEE5ZTSTHZ5VI6B36TQPAG3IUVBTULGVCCQ7AC
O4DT3BQQ3XYPL6PQ72G6VPBAVHXZMEOLONFXNHXFMBXBVOYMB6VQC
7V4DCKFJCNBXFODMKJ6H3MCDUTSD4XVQ7D4D6XFCD4JNF4HCE4KAC
7Q7PY2DHSCW7Y663XJUTBFZTHXCF6KPIMZV2A6XORBCMMHIJWVGQC
CHFE5WXJ3TY3K2PL3U5FXCQMQUWXGJH3XZ4JFLREUDXQIRSGZ2TQC
I2B33Z7NZGC33AMDSSK446AZZYWKPHWLAGULVHKKZU4MVB4BNJOAC
3V52MSSK7QX7FWLLUW63DTWCBAJEK674EFZLKP45FLZ5KZKVARHAC
VOXLOCDUHOAFIKRTSISYMOA2QFY3TSHQGR7BKGGQ2VZ5BUUKUQYAC
EWC3J3FZP62OZWT3JBBPNPZUB7NR5ZF6MAJNMPCVV75E3TFBFYYAC
5CNYJQGEILRX2TAYBWMVECJ6D4OPV2CD6YPDIERS2SR77Z4LTZPAC
X5OHFTHRXTI5KHFIYFJ6DB3W5MY3JUJKNTL4HF37MKABYNCOBOZAC
YCL3W2PFE6ILTGBFODCSXNPDIA46KVSZP2TI7HDMYAOEJT65RIEAC
KIJYTJG2XG7T4HEVZTCL2T4XDSMVLXDJMYYRRK6GY5PY7CGJLJTAC
TFHMBVXTRA2LXBHE7L7OEWK37JQN5DWZ3HOACMN7PRWVJNCS4TYQC
bool noisy(int loudness, int nois_x, int nois_y, const char *msg = NULL);
void blood_smell( int strength, int blood_x, int blood_y);
bool noisy(int loudness, const coord_def& where, const char *msg = NULL);
void blood_smell( int strength, const coord_def& where);
if (grid_distance( you.x_pos, you.y_pos, entry_x, entry_y ) == 1
&& (entry_x != empty[0] || entry_y != empty[1])
&& mgrd[entry_x][entry_y] == NON_MONSTER)
if (grid_distance( you.pos(), entry ) == 1
&& (entry.x != empty[0] || entry.y != empty[1])
&& mgrd(entry) == NON_MONSTER)
const coord_def pos = mon->pos();
int walls = num_feats_between(you.x_pos, you.y_pos,
pos.x, pos.y, DNGN_UNSEEN,
DNGN_MAXWALL, true, true);
int walls = num_feats_between(you.pos(), mon->pos(),
DNGN_UNSEEN, DNGN_MAXWALL,
true, true);
for (int x = -radius; x <= radius; x++)
for (int y = -radius; y <= radius; y++)
{
int posx = env.sanctuary_pos.x + x;
int posy = env.sanctuary_pos.y + y;
if (posx <= 0 || posx > GXM || posy <= 0 || posy > GYM)
continue;
if (is_sanctuary(posx, posy))
{
env.map[posx][posy].property = FPROP_NONE;
if (see_grid(coord_def(posx,posy)))
seen_change = true;
}
}
for (radius_iterator ri(env.sanctuary_pos, radius, true, false); ri; ++ri)
{
if (is_sanctuary(*ri))
{
env.map(*ri).property = FPROP_NONE;
if (see_grid(*ri))
seen_change = true;
}
}
for (stx = -1; stx < 2; stx++)
for (sty = -1; sty < 2; sty++)
{
if (sty == 0 && stx == 0)
continue;
//if ( one_chance_in(3) ) beam.range ++;
if (!grid_is_solid(grd[you.x_pos + stx][you.y_pos + sty])
&& env.cgrid[you.x_pos + stx][you.y_pos + sty] == EMPTY_CLOUD)
{
place_cloud( CLOUD_FIRE, you.x_pos + stx, you.y_pos + sty,
1 + random2(6), KC_YOU );
}
}
if (!grid_is_solid(grd(*ri)) && env.cgrid(*ri) == EMPTY_CLOUD)
place_cloud( CLOUD_FIRE, *ri, 1 + random2(6), KC_YOU );
}
{
fall_into_a_pool(you.x_pos, you.y_pos, true,
grd[you.x_pos][you.y_pos]);
}
fall_into_a_pool(you.pos(), true, grd(you.pos()));
{
fall_into_a_pool(you.x_pos, you.y_pos, true,
grd[you.x_pos][you.y_pos]);
}
fall_into_a_pool(you.pos(), true, grd(you.pos()));
const bool from_above = (you.x_pos == x && you.y_pos == y);
const dungeon_feature_type old_grid = (from_above) ? DNGN_FLOOR
: grd[you.x_pos][you.y_pos];
const dungeon_feature_type new_grid = grd[x][y];
const bool from_above = (you.pos() == p);
const dungeon_feature_type old_grid = (from_above) ? DNGN_FLOOR : grd(p);
const dungeon_feature_type new_grid = grd(p);
ASSERT(swapping && mgrd[x][y] != NON_MONSTER ||
!swapping && (mgrd[x][y] == NON_MONSTER
|| mons_is_submerged( &menv[ mgrd[x][y] ])));
ASSERT(swapping && mgrd(p) != NON_MONSTER ||
!swapping && (mgrd(p) == NON_MONSTER
|| mons_is_submerged( &menv[ mgrd(p) ])));
// last updated 12may2000 {dlb}
/* ***********************************************************************
* called from: monstuff
* *********************************************************************** */
void setup_dragon(monsters *monster, struct bolt &pbolt);
// last updated 13feb2001 {gdl}
/* ***********************************************************************
* called from: monstuff
* *********************************************************************** */
void setup_dragon(monsters *monster, bolt &pbolt);
// last updated 7jan2001 {gdl}
/* ***********************************************************************
* called from: monstuff
* *********************************************************************** */
void setup_mons_cast(monsters *monster, bolt &pbolt,
spell_type spell_cast);
// last updated 28july2000 (gdl)
/* ***********************************************************************
* called from: monstuff
* *********************************************************************** */
bool mons_throw(monsters *monster, struct bolt &pbolt, int hand_used);
bool mons_thrown_object_destroyed( item_def *item, int x, int y,
void setup_mons_cast(monsters *monster, bolt &pbolt, spell_type spell_cast);
bool mons_throw(monsters *monster, bolt &pbolt, int hand_used);
bool mons_thrown_object_destroyed( item_def *item, const coord_def& where,
// last updated 07jan2001 (gdl)
/* ***********************************************************************
* called from: monstuff
* *********************************************************************** */
void setup_generic_throw(monsters *monster, struct bolt &pbolt);
// last updated 12may2000 {dlb}
/* ***********************************************************************
* called from: monstuff
* *********************************************************************** */
void setup_generic_throw(monsters *monster, bolt &pbolt);
// last updated 12may2000 {dlb}
/* ***********************************************************************
* called from: beam - fight - files - monstuff - mstuff2 - spells4
* *********************************************************************** */
// last updated Dec17,2000 -- gdl
/* ***********************************************************************
* called from: monstuff
* *********************************************************************** */
if (mgrd[newx][newy] != NON_MONSTER
|| newx == you.x_pos && newy == you.y_pos)
{
if (mgrd(newpos) != NON_MONSTER || newpos == you.pos())
{
behaviour_event(mon, ME_DISTURB, MHITNOT,
chief->x, chief->y);
}
behaviour_event(mon, ME_DISTURB, MHITNOT, chief->pos());
static bool _mon_can_move_to_pos(const monsters *monster, const int count_x,
const int count_y, bool just_check = false);
static bool _is_trap_safe(const monsters *monster, const int trap_x,
const int trap_y, bool just_check = false);
static bool _mon_can_move_to_pos(const monsters *monster,
const coord_def& delta,
bool just_check = false);
static bool _is_trap_safe(const monsters *monster, const coord_def& where,
bool just_check = false);
bool random_near_space(int ox, int oy, int &tx, int &ty, bool allow_adjacent,
bool restrict_LOS, bool forbid_sanctuary)
bool random_near_space(const coord_def& origin, coord_def& target,
bool allow_adjacent, bool restrict_LOS,
bool forbid_sanctuary)
bool trans_wall_block = trans_wall_blocking(ox, oy);
bool origin_is_player = (you.pos() == coord_def(ox, oy));
int min_walls_between = 0;
const bool trans_wall_block = trans_wall_blocking(origin);
const bool origin_is_player = (you.pos() == origin);
int min_walls_between = 0;
if (!in_bounds(tx, ty)
|| restrict_LOS && !see_grid(tx, ty)
|| grd[tx][ty] < DNGN_SHALLOW_WATER
|| mgrd[tx][ty] != NON_MONSTER
|| tx == you.x_pos && ty == you.y_pos
|| !allow_adjacent && distance(ox, oy, tx, ty) <= 2
|| forbid_sanctuary && is_sanctuary(tx, ty))
if (!in_bounds(target)
|| restrict_LOS && !see_grid(target)
|| grd(target) < DNGN_SHALLOW_WATER
|| mgrd(target) != NON_MONSTER
|| target == you.pos()
|| !allow_adjacent && distance(origin, target) <= 2
|| forbid_sanctuary && is_sanctuary(target))
if (!friendly && !neutral && x == you.x_pos && y == you.y_pos
&& mons_player_visible(mon) && !is_sanctuary(x, y))
if (!friendly && !neutral && p == you.pos()
&& mons_player_visible(mon) && !is_sanctuary(p))
if (_mons_check_set_foe(mon, x, my - k, friendly, neutral)
|| _mons_check_set_foe(mon, x, my + k, friendly, neutral))
if (_mons_check_set_foe(mon, coord_def(x, my - k), friendly, neutral)
|| _mons_check_set_foe(mon, coord_def(x, my + k), friendly, neutral))
if (_mons_check_set_foe(mon, mx - k, y, friendly, neutral)
|| _mons_check_set_foe(mon, mx + k, y, friendly, neutral))
if (_mons_check_set_foe(mon, coord_def(mx - k, y), friendly, neutral)
|| _mons_check_set_foe(mon, coord_def(mx + k, y), friendly, neutral))
if (is_sanctuary(monster->x + mmov_x, monster->y + mmov_y)
&& (!is_sanctuary(monster->x, monster->y)
|| monster->x + mmov_x == you.x_pos
&& monster->y + mmov_y == you.y_pos))
if (is_sanctuary(monster->pos() + mmov)
&& (!is_sanctuary(monster->pos())
|| monster->pos() + mmov == you.pos()))
static bool _is_trap_safe(const monsters *monster, const int trap_x,
const int trap_y, bool just_check)
static bool _is_trap_safe(const monsters *monster, const coord_def& where,
bool just_check)
if ((_mon_can_move_to_pos(monster, x-1, y, true)
|| _mon_can_move_to_pos(monster, x+1,y, true))
&& (_mon_can_move_to_pos(monster, x,y-1, true)
|| _mon_can_move_to_pos(monster, x,y+1, true)))
if ((_mon_can_move_to_pos(monster, coord_def(x-1, y), true)
|| _mon_can_move_to_pos(monster, coord_def(x+1,y), true))
&& (_mon_can_move_to_pos(monster, coord_def(x,y-1), true)
|| _mon_can_move_to_pos(monster, coord_def(x,y+1), true)))
if (is_sanctuary(monster->x, monster->y)
&& (targ_x == you.x_pos && targ_y == you.y_pos
|| mgrd[targ_x][targ_y] != NON_MONSTER))
if (is_sanctuary(monster->pos())
&& (targ == you.pos() || mgrd(targ) != NON_MONSTER))
// XXX: Are these bounds still valid? (jpeg)
// We should probably use in_bounds() instead.
if (targ_x <= 7 || targ_x >= (GXM - 8)
|| targ_y <= 7 || targ_y >= (GYM - 8))
{
if (!in_bounds(targ))
const int which_trap = trap_at_xy(targ_x,targ_y);
if (which_trap >= 0 && !_is_trap_safe(monster, targ_x, targ_y, just_check))
const int which_trap = trap_at_xy(targ);
if (which_trap >= 0 && !_is_trap_safe(monster, targ, just_check))
// Let's not even bother with this if mmov_x and mmov_y are zero.
if (mmov_x == 0 && mmov_y == 0)
// Let's not even bother with this if mmov.x and mmov.y are zero.
if (mmov.x == 0 && mmov.y == 0)
if ((grd[monster->x + mmov_x][monster->y + mmov_y] == DNGN_CLOSED_DOOR
|| grd[monster->x + mmov_x][monster->y + mmov_y] == DNGN_OPEN_DOOR)
if ((grd(newpos) == DNGN_CLOSED_DOOR || grd(newpos) == DNGN_OPEN_DOOR)
&& grd[monster->x][monster->y] != DNGN_DEEP_WATER
&& grd[monster->x + mmov_x][monster->y + mmov_y] != DNGN_DEEP_WATER
&& (monster->x + mmov_x != you.x_pos
|| monster->y + mmov_y != you.y_pos)
&& grd(monster->pos()) != DNGN_DEEP_WATER
&& grd(newpos) != DNGN_DEEP_WATER
&& newpos != you.pos()
grd[monster->x + mmov_x][monster->y + mmov_y] = DNGN_FLOOR;
set_terrain_changed(monster->pos() + coord_def(mmov_x, mmov_y));
grd(monster->pos() + mmov) = DNGN_FLOOR;
set_terrain_changed(monster->pos() + mmov);
if (mmov_x || mmov_y || (monster->confused() && one_chance_in(6)))
return _do_move_monster(monster, mmov_x, mmov_y);
if (mmov.x || mmov.y || (monster->confused() && one_chance_in(6)))
return _do_move_monster(monster, mmov);
if (adjacent( menv[mon->foe].x, menv[mon->foe].y, mon->x, mon->y ))
targ_adj = true;
if (is_sanctuary( menv[mon->foe].x, menv[mon->foe].y ))
if (adjacent(menv[mon->foe].pos(), mon->pos()))
targ_adj = true;
if (is_sanctuary(menv[mon->foe].pos()))
for (int i = -1; i <= 1; i++)
for (int j = -1; j <= 1; j++)
{
if (i == 0 && j == 0) // current square
continue;
for ( radius_iterator ri(where, 1, true, false); ri; ++ri )
{
if ( *ri == where ) // current square
continue;
int posx, posy;
for (int x = -1; x <= 1; x++)
for (int y = -1; y <= 1; y++)
{
posx = cx + x;
posy = cy + y;
if (!in_bounds(posx, posy))
continue;
for ( radius_iterator ri(where, 1, true, false); ri; ++ri )
{
if (!allow_bleeding_on_square(*ri))
continue;
feature_description(luaL_checkint(ls, 1), luaL_checkint(ls, 2), false,
dtype, need_stop);
feature_description(coord_def(luaL_checkint(ls, 1),
luaL_checkint(ls, 2)),
false, dtype, need_stop);
bool move_item_to_grid( int *const obj, int x, int y );
void move_item_stack_to_grid( int x, int y, int targ_x, int targ_y );
bool move_item_to_grid( int *const obj, const coord_def& p );
void move_item_stack_to_grid( const coord_def& from, const coord_def& to );
mitm[new_item].quantity = quant_drop;
mitm[new_item].x = 0;
mitm[new_item].y = 0;
mitm[new_item].link = NON_ITEM;
new_item.quantity = quant_drop;
new_item.x = 0;
new_item.y = 0;
new_item.link = NON_ITEM;
mitm[new_item].slot = index_to_letter(item.link);
mitm[new_item].flags |= ISFLAG_DROPPED;
mitm[new_item].flags &= ~ISFLAG_THROWN;
origin_set_unknown(mitm[new_item]);
new_item.slot = index_to_letter(item.link);
new_item.flags |= ISFLAG_DROPPED;
new_item.flags &= ~ISFLAG_THROWN;
origin_set_unknown(new_item);
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( const coord_def& where, int mode, bool need_path, int range );
static bool _find_monster( const coord_def& where, int mode, bool need_path, int range );
static bool _find_feature( const coord_def& where, int mode, bool need_path, int range );
if ((mode == TARG_FRIEND || mode == TARG_ANY)
&& x == you.x_pos && y == you.y_pos)
{
if ((mode == TARG_FRIEND || mode == TARG_ANY) && where == you.pos())
return (in_los(x, y) || Options.target_oos && is_terrain_seen(x, y)
&& (is_stash(x, y) || is_mimic));
return (in_los(where) || Options.target_oos && is_terrain_seen(where)
&& (is_stash(where.x,where.y) || is_mimic));
_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(coord_def(ctrx, ctry), mfp, direction, find_targ, need_path,
mode, range, false, _next_los(direction, los, wrap))
: _find_square(coord_def(minx, maxy), mfp, direction, find_targ,
need_path, mode, range, false,
_next_los(direction, los, wrap)));
const std::string traveldest =
_stair_destination_description(coord_def(mx, my));
const dungeon_feature_type feat = grd[mx][my];
mprf(MSGCH_DIAGNOSTICS, "(%d,%d): %s - %s (%d/%s)%s%s", mx, my,
stringize_glyph(get_screen_glyph(mx, my)).c_str(),
const std::string traveldest = _stair_destination_description(where);
const dungeon_feature_type feat = grd(where);
mprf(MSGCH_DIAGNOSTICS, "(%d,%d): %s - %s (%d/%s)%s%s", where.x, where.y,
stringize_glyph(get_screen_glyph(where)).c_str(),
if (!shift_monster(&menv[mon])
&& !monster_blink(&menv[mon]))
{
monster_teleport( &menv[mon], true, true );
}
if (!shift_monster(m) && !monster_blink(m))
monster_teleport( m, true, true );
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, const coord_def& p,
int decay, kill_category whose,
unsigned char spread_rate )
if (!in_bounds(x, y)
|| env.cgrid[x][y] != EMPTY_CLOUD
|| grid_is_solid(grd[x][y])
|| is_sanctuary(x, y) && !is_harmless_cloud(cloud.type))
continue;
int newdecay = cloud.decay / 2 + 1;
if (newdecay >= cloud.decay)
newdecay = cloud.decay - 1;
_place_new_cloud( cloud.type, x, y, newdecay, cloud.whose,
cloud.spread_rate );
int newdecay = cloud.decay / 2 + 1;
if (newdecay >= cloud.decay)
newdecay = cloud.decay - 1;
_place_new_cloud( cloud.type, *ri, newdecay, cloud.whose,
cloud.spread_rate );
static bool _beam_term_on_target(bolt &beam, int x, int y);
static void _beam_explodes(bolt &beam, int x, int y);
static int _affect_wall(bolt &beam, int x, int y);
static int _affect_place_clouds(bolt &beam, int x, int y);
static void _affect_place_explosion_clouds(bolt &beam, int x, int y);
static bool _beam_term_on_target(bolt &beam, const coord_def& p);
static void _beam_explodes(bolt &beam, const coord_def& p);
static int _affect_wall(bolt &beam, const coord_def& p);
static int _affect_place_clouds(bolt &beam, const coord_def& p);
static void _affect_place_explosion_clouds(bolt &beam, const coord_def& p);
if (tx == pbolt.target_x && ty == pbolt.target_y)
beamTerminate = _beam_term_on_target(pbolt, tx, ty);
if (testpos == pbolt.target())
beamTerminate = _beam_term_on_target(pbolt, testpos);
if (you.x_pos == x && you.y_pos == y && you.attribute[ATTR_HELD]
|| mgrd[x][y] != NON_MONSTER &&
mons_is_caught(&menv[mgrd[x][y]]))
if (you.pos() == p && you.attribute[ATTR_HELD]
|| mgrd(p) != NON_MONSTER &&
mons_is_caught(&menv[mgrd(p)]))
expose_items_to_element(beam.flavour, x, y, burn_power);
rangeUsed += _affect_place_clouds(beam, x, y);
expose_items_to_element(beam.flavour, p, burn_power);
rangeUsed += _affect_place_clouds(beam, p);
if (grd[x][y] == DNGN_STONE_WALL
|| grd[x][y] == DNGN_METAL_WALL
|| grd[x][y] == DNGN_PERMAROCK_WALL
|| grd[x][y] == DNGN_CLEAR_STONE_WALL
|| grd[x][y] == DNGN_CLEAR_PERMAROCK_WALL
|| !in_bounds(x, y))
if (grd(p) == DNGN_STONE_WALL
|| grd(p) == DNGN_METAL_WALL
|| grd(p) == DNGN_PERMAROCK_WALL
|| grd(p) == DNGN_CLEAR_STONE_WALL
|| grd(p) == DNGN_CLEAR_PERMAROCK_WALL
|| !in_bounds(p))
if (beam.flavour == BEAM_COLD && grid_is_watery(grd[x][y]))
place_cloud( CLOUD_COLD, x, y, 2 + random2(5), _whose_kill(beam) );
if (beam.flavour == BEAM_COLD && grid_is_watery(grd(p)))
place_cloud( CLOUD_COLD, p, 2 + random2(5), _whose_kill(beam) );
explode_map[x+9][y+9] = true;
explode_map(p + coord_def(9,9)) = true;
const coord_def spread[] = { coord_def(0, -1), coord_def( 0, 1),
coord_def(1, 0), coord_def(-1, 0) };
const int opdir[] = { 2, 1, 4, 3 };
const int new_targ_x = you.x_pos + move_x;
const int new_targ_y = you.y_pos + move_y;
if (!in_bounds(new_targ_x, new_targ_y)
|| !you.can_pass_through(new_targ_x, new_targ_y))
const coord_def& new_targ = you.pos() + move;
if (!in_bounds(new_targ) || !you.can_pass_through(new_targ))
const int targ_x = you.x_pos + move_x;
const int targ_y = you.y_pos + move_y;
const dungeon_feature_type targ_grid = grd[ targ_x ][ targ_y ];
const unsigned short targ_monst = mgrd[ targ_x ][ targ_y ];
const bool targ_pass = you.can_pass_through(targ_x, targ_y);
const coord_def& targ = you.pos() + move;
const dungeon_feature_type targ_grid = grd(targ);
const unsigned short targ_monst = mgrd(targ);
const bool targ_pass = you.can_pass_through(targ);
monsters* mon = &menv[you.beheld_by[i]];
coord_def pos = mon->pos();
int olddist = grid_distance(you.x_pos, you.y_pos, pos.x, pos.y);
int newdist = grid_distance(you.x_pos + move_x, you.y_pos + move_y,
pos.x, pos.y);
monsters& mon = menv[you.beheld_by[i]];
int olddist = grid_distance(you.pos(), mon.pos());
int newdist = grid_distance(targ, mon.pos());
you.prev_move_x = move_x;
you.prev_move_y = move_y;
move_x = 0;
move_y = 0;
you.prev_move = move;
move.reset();
move_x = 0;
move_y = 0;
you.turn_is_over = 0;
move.reset();
you.turn_is_over = false;
for (int j = you.y_pos - 10; j <= you.y_pos + 10; j++)
{
if (j < 0 || j >= GYM)
continue;
const int ipos = 45 + i - you.x_pos;
const int jpos = 35 + j - you.y_pos;
// Move terrain.
grd[ipos][jpos] = grd[i][j];
// Move item.
// Move terrain.
grd(newpos) = grd(*ri);
// Move item.
if (igrd[i][j] != NON_ITEM)
{
mprf(MSGCH_DIAGNOSTICS,
"Move item stack from (%d, %d) to (%d, %d)",
i, j, ipos, jpos);
}
if (igrd(*ri) != NON_ITEM)
{
mprf(MSGCH_DIAGNOSTICS,
"Move item stack from (%d, %d) to (%d, %d)",
ri->x, ri->y, newpos.x, newpos.y);
}
// Move monster.
mgrd[ipos][jpos] = mgrd[i][j];
if (mgrd[i][j] != NON_MONSTER)
{
menv[mgrd[ipos][jpos]].x = ipos;
menv[mgrd[ipos][jpos]].y = jpos;
mgrd[i][j] = NON_MONSTER;
}
// Move monster.
mgrd(newpos) = mgrd(*ri);
if (mgrd(*ri) != NON_MONSTER)
{
menv[mgrd(newpos)].x = newpos.x;
menv[mgrd(newpos)].y = newpos.y;
mgrd(*ri) = NON_MONSTER;
}
// Move cloud,
if (env.cgrid[i][j] != EMPTY_CLOUD)
move_cloud( env.cgrid[i][j], ipos, jpos );
}
// Move cloud,
if (env.cgrid(*ri) != EMPTY_CLOUD)
move_cloud( env.cgrid(*ri), newpos );