convenience function.
YBNZTFKEZDBA2BWBYEVU62CIVIVTA7LYIRJAOYKGQT7V64DAMZUQC
JSDIPKR5WZ37KDVQRRSLS5ADWRBGEZOOJQTGCZUISCTPPWBD6BKQC
XW4ZV2FCTDSREY5ETAZTHQ2VWF7B2LGAGZGRTBJRJKIHT6ZWE3WQC
7SZPALYNCEAZR6GCI3QH5YSRUMWJXHD7IW3QU3RPTQROC5RTIUBQC
KADKIXTKG32FACYRPWI6XF6FLJ5O7QWUB3UGVCSUPANOY2S6PRSQC
4HCYQDVXJDOY7B7VATNRRRF7XCCF2QLJSBRPAL3ICH7JQ3ZLAL4QC
5I3RE6QCG6W3HD54OBDOZ7IDGHKEL7XBIOU5XVWTUDQQTDZV22NQC
UWKS5RFSHDUBRVQBBH7NLTZSDV63N4RQU6I6HMYN7JGPZOQ5FGXQC
JMBL7S3FVFBUQGRYXVHY4LCL3RTWMFFW42EG4FQPH45YTERD35RAC
6VNXS26SKWXBVS5B3UCWS3OIIPIM2MDHBPUXBVLT5EXXZEEOFVMQC
KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC
PUY2VWZJ3G7HNCLIHZP5VGT2DAGHI436ETDJQTPEBFPRSEHOM2NQC
PEXHYCLRKDG2PVOJ3DDCMUZUK2HTSPU5WKH4MODFL4FTBQRQTY5QC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
ZYRDAY7GAX43C5ZOK3TSWPRAOCZVYOJZZWP7IVX6JPW7B3Y5U55QC
NQMXQ6OQVUSC7Y7F7IL252QW4A5JED224EECNHWAM4ZZYVNY745AC
OLMTUY4KVSPRWQKIOLSIYRAUEVJLRDJV7CCXJRW7IKWGUHSNRZTAC
HB27XKFYVYIEQZGBCEZ6LKPUBMXLIPDAAS636GJ5TULIQ7KND5KQC
4I6DI5BZ4OTBYZCR2FT226PI3WJFJHL3YXPVELPDDMX4MHL5IUXAC
KZIBMMGUSWOMS5NQ2KTWGY3SRYUYGZGD2YRZPQ2ISN5Z3JRSMEWQC
AY3TQCPUUX7KA64V23KUW3PZD4M6DW5DZNJGWS7X2V7ANSU6LREQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
ZB5MLJOVFY2ZULUWA237VLTIJONQOW2QMOEB4O3WRQRJK4QWYOZQC
KNPYFBNK3GESOQDGE2HH2EMUBQQIHUFYL6RQW2EFHCN2O2UGWDKAC
66A23OYT2NMU3M2NIOKNAKM5MQVOVRTOCXYB7BALJPB7CRIPQZLAC
CGI7CYUTISKXPOHQ5MR7F4GK2PHC7ICXSVLPIXWUVNMNFNWCIXYAC
B47CVG54WZNP3CQ7HOTKTWQA26GCOIKQADX2EK4ZOEYRRQ4T5W2AC
RWODUU2EGEVNOZCTZIISH5UY6OJW6QFBWB2DARNATJIYZFW3ESXAC
F2X5SIIXWXXEL2FVMYDC4GL2ODZ4O7RA46U66VGJ5K2EZHHAQGUAC
ASXBSZVXJCWVX5VQSRWXL5BWQ4NA7JLYXP6LWQTRGYW6DC2DZZPQC
3ZWALZFSTSIVYXY4BAY6ANGINTDACZC6RSSJTEMQSTSUIE66YOBQC
UPA65AL4JXYLIHH4D42IWJHRTOAF2BPOVZOAKOXBLZBYIMDZDFFQC
GR6QXMDUVPNXA2XVDRJUWGVSDI2FXQCKLXAXZUVEI6NYRMK6I5LQC
JXO53C3SJ5KPLXVEBFGFWCBI4EFY6TCA6QQVH5NII5NP5BC4EWUAC
LOAPDCDZDTOXBCNX7IQBCACP7TCMVUBNZVUTUCLX5VXM7MEFPQBQC
7UIFNKK5IU2VUAGKWDB6KOETOVQOCOVDHZHB4OPAM2CQRCWV4AGQC
KAOE5HB3THUKVGFZRO5EZESHEB3Q34WUO5DFMLWIKOBF47LZTIYAC
6X4LO6MAQLVRJBTYVGBJUI6RGAAFM6DMXW3KFNWC23R5TX7Q2OLQC
MPQIZUHUAHOF2CKNTLSYCGMR7FIC3EPA2RHZIY6JOQKAS6H6YY4AC
CVYS2M2XNT3GLAYJB2FJCYLONILJ35TPZTICJGYTGRBXHDMUXLVQC
W4HDISG44LF7QZC6SY3YM5OOXP36JREUIFWNYCN2OFAKRZFQUINQC
GDAP46HZY4L5ANBOXI36M2OAIXFT7I7DEVB4C5RUEYEXYOTCKO5AC
W3UFSWJ64J27YAP6URIHMEIC6VCIWG6GS5UPA6KPHONKXYEQ7IDQC
S74K64QSPLDUVI43I2QB4B6LIZTHRSXEXUFY76RBPJZD4J2SHCLAC
U5BUW5QJQ22SXMUA3JEQ4JXOE5NJF7KDOQJWPWCQ6X7P2OQMNBJQC
PAAJWLYMSL5R2NS73EU5AMVTSGQKSK7AZ4P4DWEIVHYYFB3AWEQQC
MPL4NSRZ4TMXOMYDRRLFF5MPEDI4RZIRCOAF6BEH4AKJLRYTMLMQC
KDPJ5HMPM3G2ZE6SV3P24QRRQMZ5NCR5ERT5X3QQZAWN6JVIRUFAC
542UIZKI65UDRNEMGFFDBWYD5XC7AYLTZ3JZQRR2GHYJALD3YY6QC
36BFWYZWCQGMAMK4EF2R5C66RA2EBLTX3MJW3QDEKN64C3BJQX7AC
2IPPYYFWEFI342OOKTTEKMLLBUFPERK7RNLBF2TWQF5D47M6PSTAC
AOXEL2V6ICXEIRWXB76LJARWP3NPKG2L4UFYOIQUALUJU4ZLE3UQC
XJQT4B4TMM6R5AXQZTOQOJV25JXRD5P27OSFXZBFLBV4WUZRSTQAC
WQIEW3O4MANA2KKYRUWEZP44KHVJ4RRHEZTDXSF4EDELX66LO26QC
4M6JJPRNEQZIOYMQI24SLTDL27TRD3HGB344TA2KY7OKJMKBDRXQC
LZH2H24IV7PQGTG4M3DMAEWDUGKMZD5FMPQXLVWYYCNUGA3XD5UAC
N5FAAVHNKQZJV2G3JFRW7WKTXB3A4YY6GTVIMBCG5RSA65TKVBGQC
EXPQHDUJDH3J47STNSABE3SNNZWCVRSMANAZVBYQY3W7E2KQUP7AC
ZVG6W2UMHJ3GHLF4ZVCUHZOOEUNJMWPURVBN2OQXKVTXYC4Z2LPQC
BNRY5YIXLFE2TDNU2JQHWWXJQVWNSEWQ52DU7XUWIT5DZWKGBDDAC
K7EIE5VJDKRYBAZRDFEEEKST2P2B7HFPH2AJVER5JUUQVTYXZWHQC
UWI3ZNJDRQRL7CXFNFEG46TA6SAK24XUFY5YOKVOTJA3VG3OBNFAC
OPNCHI4UGN7WBIYPAXVV2C4N22ZSWROA435FJCY5UZVXKWRYQ42QC
WVKP2MFDE56ZO3OI7FCEKE5LI3MAUIL6IDTUW6MEBCV5OWF4OKEAC
AACWTVIT7SKC6RDU2FU72JT3U43IT37C37WZE3AH4V6XVHSJFBVQC
IT3NSSLR756K7TZ7S7DOMS7DZUVGIFS5EAR22PEERAF5ZRBICV4AC
OWERGKLVPNPGIIS23FZ7ZDOBWUIXCKYAFG3URXU75JAUDX3N5ENAC
BD5ZPI4AQYR4SHYGKH4FJ6XNNCGSSEXESF2HMD5WN4GJAJXAMGGAC
HE3D6YNIZOLTMT7TCUPL7GMHNYOUUF6B7357F6K5PKXTVDOEDI6AC
C67GX7W5HBCDPQJRSHWMLM4DUJ3ELFSHH42SVICFJVCJW25T5Z3AC
W52V2LIYPIAH7SAOWAM5FZ326CJAS3T44AMMERLQP5ET2NGJOIWAC
QDTVLBRGHDTRUVT7I3O72K6TMOYAUSAJBZUHGOEFU2RKJNUPWZSQC
3DQXSE4YGFBBDUWK4YEOFWW4UPWILWELFSLP37SL6BERGAZJC5YAC
X5WLJCJVW55SXZVP7IKP7ADCJIGNKN4PKAXFECVR6TNK7XSMZR7QC
5XSXMOBGXFLTIQE6WDXWWFVDOTUPZSIQ2FWT3YI5QMVU6D76IUYQC
PWH7XDI4TKX47RBFLLWDCQAX3C4W5IDZIQGAGRHNEKOALJN2QCNQC
2BGXBH5OMEFAX2XTS2OWIRODUGW6V2FJR4QRJIQTV4C2WIJI22BQC
DTO3EUKWHZ5RJNGNCFYXSOVTIPVXPP637F2W7WFGYKJ7JK7VNKNQC
GUK3LTWA6FGBAHQ3VMRDVVFHOI3IT5NF33MOC6I43IZ5R4JZS4WAC
V53DXVC5T3N6J47H2CNG4MMPRR4PHW4AIS66QNVTKJNNYTTTQL4AC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
V633AMMPMHJB5ZLP5IHFXCT6FCENVTPX25TY7T5MF2QZLDDN24HAC
MFOXVZEY4AR3FDNGKAIB7YSXWTE6DOUXPS7UGSJGSBIK7VCRWLKAC
2Z6IWKMEWE4OIFVWFSZBA2SIXMBJNV6H6LNEPOXTJZW433ABU4EQC
R22TTMI6WXWULC7ODKFF3QCB7MOTETQQ6IR4BUCUPOCQKQNCTT5AC
KX6HOBTF5OBZLH2VNEFHH6YAX66FSE6JGBY5I2WIAW5IEJUGNL6AC
P4KV3XKK2NCQAUPCMTHJPSA2FETTBY5WOMCVP4IFMNJZABEQWKWQC
RQFQSU37Y3ZBFR634JWYHE77LIOOINGBRNL4KUHPPRA3ZR6W5QIAC
LFIEDWOSNPS5D6EUWPUPOBBN5CEHVF2MLNOSPXEIVMRZ77A5BH4AC
23PFLB2E4QHL5SF3Q2YV5FXRH6MFHENEU2ACVC572ZCYDXCBZVQAC
UEI5JAVCMN7Y2SACTEZPZSNFJWOJTC55G24Q6LKQCT4XNDH5ZQIAC
N5XD5IAOMEDF37AXEBALHFINB4H527T6YNTCHN5KKO6YHXAP5PNQC
LC2XZTUD56PLARIGBTDXDPJIYJNMJU446GFDGLRIFD2I4F66L6TAC
G4TVXOLIF5X2MWV7I4UPT3MSQHRMGME6QRIIFAQ64C45JGYK7SIAC
AGKLT4LWLCN3JE4K72NLWJ2KWVH7QQYUT22B2YTKEJOIPVR3XITAC
IKNISANLZPADZVTNXZFPH2TQWCS6ZAMERU5JVGGSDFIPV3UEDVLQC
2EN4FKVA4YVBL7S2X4765EB5GVPNXXSGPY6IKGX77HFLLEKZ5KBQC
CMGEKP57BEOQXLDZJCFDQJ3R47REQOG45GI6OV4AWOZTZ2CH7JPQC
B7MSPF6X2RLGWN4M6ZZF3WSOPKGYPTTD7LIJVST7DXN27DG6JHNAC
HFXCFYFH2X3BIZR55ZADL3CV4MQJEEHDSIJZ7YSTHO3HTZP7GWEAC
KO7TLN7OM7UQF33RRTOFPFTDQLTYCOE4N7KWQUTWRIUSEB6PQ4WQC
5FHWTG7M6FW4B3I33YI7QSM3OZIB6ZGC6TI6JISSLY5Y43HI56VAC
UADYVV3UD5ERJTZZJGY4EUQ4NJ2JSBG7YYUJ75ZRBIXRQXQKOJPAC
QLEBDRVUQ3BMCT7LV4EBPG7T5X4KMQJAVLMLHHB7DRCNNGDQBRNQC
NHCEH7ZFP3IFRMZMC25ZA2X5ZSS3MOCHCYLVCSVY7RTY62WX7UAQC
5WVUTEZLEZEML54CKPR6GACQBYY3EMVNXMLJOREN6SSEUZGC47AQC
5JCN5YNO7MROLVA6X2TBQROHP6QFOKVP3CDFNPW6IQ7HZT2DXU3QC
if (monster->type != MONS_REAPER
&& mons_holiness(monster) != MH_UNDEAD)
{
if (monster->holiness() != MH_UNDEAD)
if (mons_holiness(mon) == MH_UNDEAD)
monster_polymorph(mon, MONS_DEATH_OOZE);
if (mon->holiness() == MH_UNDEAD)
monster_polymorph(mon, MONS_DEATH_OOZE);
else
{
const int x = mon->hit_dice + (coinflip() ? 1 : -1) * random2(5);
if (x < 3)
monster_polymorph(mon, MONS_OOZE);
else if (x >= 3 && x < 5)
monster_polymorph(mon, MONS_JELLY);
else if (x >= 5 && x < 7)
monster_polymorph(mon, MONS_BROWN_OOZE);
else if (x >= 7 && x <= 11)
{
if (coinflip())
monster_polymorph(mon, MONS_SLIME_CREATURE);
else
monster_polymorph(mon, MONS_GIANT_AMOEBA);
}
const int x = mon->hit_dice + (coinflip() ? 1 : -1) * random2(5);
if (x < 3)
monster_polymorph(mon, MONS_OOZE);
else if (x >= 3 && x < 5)
monster_polymorph(mon, MONS_JELLY);
else if (x >= 5 && x < 7)
monster_polymorph(mon, MONS_BROWN_OOZE);
else if (x >= 7 && x <= 11)
{
if (coinflip())
monster_polymorph(mon, MONS_SLIME_CREATURE);
else
monster_polymorph(mon, MONS_GIANT_AMOEBA);
}
if (coinflip())
monster_polymorph(mon, MONS_ACID_BLOB);
if (mons_class_holiness(mon->type) == MH_PLANT
|| mons_class_holiness(mon->type) == MH_NONLIVING)
if (mon->holiness() == MH_PLANT
|| mon->holiness() == MH_NONLIVING)
mon_holy_type mons_holiness(const monsters *mon)
{
if (testbits(mon->flags, MF_HONORARY_UNDEAD))
return (MH_UNDEAD);
return (mons_class_holiness(mon->type));
}
}
bool mons_is_unholy(const monsters *mon)
{
const mon_holy_type holiness = mons_holiness(mon);
return (holiness == MH_UNDEAD || holiness == MH_DEMONIC);
return (mons_holiness(this));
if (testbits(flags, MF_HONORARY_UNDEAD))
return (MH_UNDEAD);
return (mons_class_holiness(type));
}
bool monsters::is_unholy() const
{
const mon_holy_type holi = holiness();
return (holi == MH_UNDEAD || holi == MH_DEMONIC);
if (!mons_class_is_confusable(mons->type)
|| !mons->add_ench(mon_enchant(ENCH_CONFUSION, 0, KC_YOU,
(16 + random2avg(13, 2)) * 10)))
if (!mons_class_is_confusable(mon->type)
|| !mon->add_ench(mon_enchant(ENCH_CONFUSION, 0, KC_YOU,
(16 + random2avg(13, 2)) * 10)))
rc = (mons_holiness(mon) == MH_DEMONIC && mon->type != MONS_HELL_HOG)
|| (mons_holiness(mon) == MH_NATURAL && mon->type != MONS_HOG);
rc = (mon->holiness() == MH_DEMONIC && mon->type != MONS_HELL_HOG)
|| (mon->holiness() == MH_NATURAL && mon->type != MONS_HOG);