Transmigrations, but let them only cast them while full or more.
(Once satiated is reached, they automatically time out.)
Bug 1941885: Don't give vampires nutrition from quaffing non-blood potions.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@4235 c06c8d41-db1a-0410-9941-cceddc491573
JCWJWGMQIKQGSSFJUQRKNIWW3HBOJSHYDTOPPE5BWOJTIJTDYUTAC
DIL5CIV3FGFPRSMRAGDDOHBJ2MBIOEZNMDDTJ4MYI7CU6BYAFVUAC
HH7B5SORPUW74EC3V2ZVZTMDH7UXG2FLAELXUQII4TNGGHDLPETAC
EB2ECXZ3EQ6L2ZY42KLQV4QPE4YCNYENXFGUM7EDTCWC2LDZJYCAC
NZ3NCJMU7VE2C5OHIMHBLSSUWPXYI5RURKED4IHO2QUUAGPGUR5AC
MIMVAKQXKJMHYLKXKY2TJEBL4HCOHKLDQYX6J5H4MWCI442NWEHAC
XIVK73TDPJKGRQ2EHPNUERDI5JIYTYAPSCVKXROD36BIHFE3WNQQC
GKA3ZGZ2P6F22FDNSYNQDMCS3N7HNZD5QCOSQ6VJRAU2K5U4YYTQC
VDMADGWYGYZJWAEWU3WE7UCPVDS2O6HOHCXLOML64U5UCH4FER3AC
JE5K2LGM25NQQ3VIBZ25WJEQ4AJJVFLZWOH5RLNX66NVGQWI3YMQC
VOXLOCDUHOAFIKRTSISYMOA2QFY3TSHQGR7BKGGQ2VZ5BUUKUQYAC
M2HMYLYYXSP5XGX6MCI77IT6UW5K4YSEUJWHPQPYXVSW5L36BJ2AC
2WVP47RBNL5OVYMAZH7TKRYD7F2TGSZ5X74PWVGAYCQP26G3JUHQC
B7MSPF6X2RLGWN4M6ZZF3WSOPKGYPTTD7LIJVST7DXN27DG6JHNAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
P2ZCF3BBG523ZEOD6XQA4X5YEHBTWH3IM33YVHXP2SQ5POXZIH4QC
J7KCPTGASQNRAKVKQ5FCXZ75E75PK7I2BB6MFSI3COWU6HRKTWSAC
CLIEHAE2PP7ZIGLLIMYCWM4FC54KBOAN5AILOLAZJ5S26GTJM4RQC
BZMLXBTB63CXPZZPFXM4VLE7IBXPBEZ6YLM4MSNQGJR4L5IBM3OAC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
3BJ2OOF4F524G6UKVGOZVT6W3FSTSHHTKRJADUBZCHDXZWV3KANQC
4EZVKDQA5GM3QDTNTCKEKGH4F6LGAYNLBT756PXODKZ2B7C4ZVHAC
HVNEDQRIUCCAUXUYVAGIUUKPUPU6JFA2PJ5LHPMIBICCCAAVVJEQC
EEZCC5GUYHETFQV4KSZJSJ6BTTWZHKS7RXQ25XQ6ODGKLDD4XFRAC
GSS3OCYMI4MYKACCGNLFA267VDH2U7G4QVVDLMOVAUHZTYQ3QJDAC
FCL7KOWXA5O3GLMDR22JCGMTHMZ57C4WQIJKBIIUQV3LI2CI3X7AC
DWQDVEHZSTDVFS2GU24ZLIGJDA3M4767TB734JAQEAUVOOCLZ75AC
UZ6N6HOUPGVSPC5NQROEEDWMEGJA5XUWUY2AKH5QG65AZ25PVXDAC
TFNFP2YQA4EOVE4VIXBEQSGACZSXHWIQ2T4TIPQ46R2MJW2C4B5AC
DDU4A3JGN5IUIPP5IASOODKPR2WBHSDSV4FITZ6HNXNSXXQACWAQC
KOSAQXB3KF6VAYTG2TOTHGJBB3F7AL6O32EMCXPVZJ5WHQX6XR5AC
NQMXQ6OQVUSC7Y7F7IL252QW4A5JED224EECNHWAM4ZZYVNY745AC
WG6O475IOLZFMUQSLVR2KHM7XTBF5HH276L2KDGF7UOSESDOAILQC
EAAACIJUVSBDOB6S73O4NFSMRDLFLQTFO7SXWWALGMVDZTQTHQBQC
TV3ZC6WOZKSQQJQN26JIVKCHK6UK7WMDBYZDUYRWEAZ4JB4YVNAAC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
AREBCIU2RU2RNHBWD4GARWEBKSL7HDFGDLII22H56OJO2AQUOMLQC
U6HLBU2OIMKVNWWZ55SERG56WKAW3GSFFEGUJBP4SQVYSESGXC2QC
ITXPKG6VHYSJSRQBRJUTD4AGCMMF4RDAJBAULFAN4J7OPQEHAQGQC
IJ6KN5MQLEB7DR7NW2AYQNCVBV5IUKECUSECUMEJWOBRNJBAXHCQC
7Q4H6B62UZACQOUDHCHPMPBYEBXM5GVQINIHVHM4KLRENSH6VGTAC
YOZHWGKGPWZGHQYNMMBHNGDO2UEVIHPOR6UF3SEZPIYWVMBGWBOAC
5TG5LXU4DX65KMWCZ7YJHOB3VAETQAVBUHEUSQTPMA327XV2HQWAC
ARVJY7XPMCHI4IAQMD2VUWTAXQLCRNVSM2MK3YT4S4WHQYFTLEMAC
74LQ7JXVLAFSHLI7LCBKFX47CNTYSKGUQSXNX5FCIUIGCC2JTR3QC
MBBPLL4SZUB3JUUYQYLZW7S5OXRCEGJX3WWADOQXGHWQ7BIKCY5QC
MMND435BVG6KUGRUEMSHBQX27FRASBK5HJ6OSKLPON2LOG63L75QC
5R4WV4H5SNIM5WU2X33JJ63HIEGKCXN2HELZ6FRRKKANPLMRLF3QC
5S3CAGZSAQC3CYFPM5TQFPHW5IE2OZRVFJMICQZXHBZRGKFMNPRQC
TRCCLE5RJ4VJULBOWOI2WC3RJU7WTEGS7RRQTDQL6W5UU246LKTQC
5ZG33P3GHTV45HM5STF23BNSV7T4Z6MGCLPRGCNHIVCQUTHDPOTQC
H7KLIGBECC2SCGAIFPZFZ7P2TVDKR67HQ7AG5LXPP5SVNL7RWAHAC
CGYTZT5QWIEGYKUOLOK7MFXSLJKLYRZONER5ZCDZO5XYWSLG475QC
2H32CFFM2FNS63JJPNM2S6HMO543EX72GMPOU5GI6HTMQYPL6I3AC
MLZSEZWNNZMSIDQNAAIOJJR4K7VSVJICL5SAGHD3ROM7SYDVZABAC
7V4DCKFJCNBXFODMKJ6H3MCDUTSD4XVQ7D4D6XFCD4JNF4HCE4KAC
YCL3W2PFE6ILTGBFODCSXNPDIA46KVSZP2TI7HDMYAOEJT65RIEAC
CWTKS62IFZYYR3HGPDP5LW5C53CRWVAD6AAEOV4BSWNW52BCQH3QC
Q3XHNSHW6FI4JCXSEABATRFBJPMCF7PXNG2K6ZQTRRPVMIZFHUBQC
KBTDCQ7GYBRPB346ZEOJ4OM2XHOHN6FJMVMTOJ42EDK5KJX7VLIAC
SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC
PR42BCP5BPRFD2MP5H6CIJP7E57Q6TKL6SOXZWFKMFVR2OZWHT7AC
IIN7AVA6JYRBXH6ZYRR7BY7TV6PW7ANAQ2A3PD55FKBKKQFEEF2AC
JYCMD6WMNHXA53K4LLKVTNX6PLRLU25F6J2TYMPQXM2ENAE66NIAC
UZ5623MOLKBTGBSRBJ4OBOEI4IEZSPV3NCV2DRMUZ3CHHJQVHIIAC
GQL5SIGBHLU3FMCE54XVGLRY5AZHRM6DUEB722REA2DPLGJSN6EQC
BWAQ3FHBBM6G3K3KYP75CRTR343RDQZJRYX5ZGYUEXYBAC3APDLAC
IE3INS4WUXZOBVXB5VWRBYPVPXADD2U2W5H3TBTOYNWJ3EGRSGQQC
6L4EP4ZRWWYLT55PD5KTTJON5J2JB5VV5MWNHF5VPZQZ5BKEYZ4QC
7CMQLE4XIFMWDEUZAOKIKDW7BHAJCK5S26APMEZ6TEFEH63TEZ6AC
FBK5ECMQ6HJSQSN7C3DICKJIRJ3CSO3CHCQ3ONPBKLLSHDGPBQ7QC
UKYGZDI6PYZPXDACCQGVPHANUP5ADCSNROOZIE7LYIZQWSNFHJZAC
U3KGUJJQWQORJIIFH3ADVNIEEX5HOX6KEOXO7DJSL7L3Z6GG3PAQC
IHIJSWVOONSTA2WCHKW3YKBLETUQECFVBVLMET5SGQZ4C6U3GCUQC
ESWIM76FGJL4QFLSHU6AC4D74PT7OPLQ7ZCJYWLZS5UCBAJDXYHAC
6LT6USGJOTDMRJGXLAN2NSZXK2GKWEXDKKUV6SVV7ZC6WI6EKMDQC
// If phys_scales is true then we're checking to see if the form keeps
// the physical (AC/EV) properties from scales... the special intrinsic
// If phys_scales is true then we're checking to see if the form keeps
// the physical (AC/EV) properties from scales... the special intrinsic
static bool spell_is_uncastable(spell_type spell)
if (you.hunger_state >= HS_FULL)
return false;
// Satiated or less
switch (spell)
{
case SPELL_RESIST_POISON:
case SPELL_CURE_POISON_II:
case SPELL_TAME_BEASTS:
case SPELL_BLADE_HANDS:
case SPELL_SPIDER_FORM:
case SPELL_ICE_FORM:
case SPELL_STATUE_FORM:
case SPELL_DRAGON_FORM:
case SPELL_AIR_WALK:
case SPELL_BERSERKER_RAGE:
return true;
default:
return false;
}
}
static bool _spell_is_uncastable(spell_type spell)
// go off... the spell only fails at this point. This can
// be a large advantage for characters who have difficulty
// casting Fireball in their standard equipment. However,
// go off... the spell only fails at this point. This can
// be a large advantage for characters who have difficulty
// casting Fireball in their standard equipment. However,
case SPTYP_CONJURATION: miscast_conjuration(sever, cause); break;
case SPTYP_ENCHANTMENT: miscast_enchantment(sever, cause); break;
case SPTYP_TRANSLOCATION: miscast_translocation(sever, cause); break;
case SPTYP_SUMMONING: miscast_summoning(sever, cause); break;
case SPTYP_DIVINATION: miscast_divination(sever, cause); break;
case SPTYP_NECROMANCY: miscast_necromancy(sever, cause); break;
case SPTYP_TRANSMIGRATION: miscast_transmigration(sever, cause); break;
case SPTYP_FIRE: miscast_fire(sever, cause); break;
case SPTYP_ICE: miscast_ice(sever, cause); break;
case SPTYP_EARTH: miscast_earth(sever, cause); break;
case SPTYP_AIR: miscast_air(sever, cause); break;
case SPTYP_POISON: miscast_poison(sever, cause); break;
case SPTYP_CONJURATION: _miscast_conjuration(sever, cause); break;
case SPTYP_ENCHANTMENT: _miscast_enchantment(sever, cause); break;
case SPTYP_TRANSLOCATION: _miscast_translocation(sever, cause); break;
case SPTYP_SUMMONING: _miscast_summoning(sever, cause); break;
case SPTYP_DIVINATION: _miscast_divination(sever, cause); break;
case SPTYP_NECROMANCY: _miscast_necromancy(sever, cause); break;
case SPTYP_TRANSMIGRATION: _miscast_transmigration(sever, cause); break;
case SPTYP_FIRE: _miscast_fire(sever, cause); break;
case SPTYP_ICE: _miscast_ice(sever, cause); break;
case SPTYP_EARTH: _miscast_earth(sever, cause); break;
case SPTYP_AIR: _miscast_air(sever, cause); break;
case SPTYP_POISON: _miscast_poison(sever, cause); break;
case US_UNDEAD:
case US_SEMI_UNDEAD: // Vampires
switch (spell)
{
case SPELL_BORGNJORS_REVIVIFICATION:
case SPELL_DEATHS_DOOR:
case SPELL_NECROMUTATION:
case SPELL_ALTER_SELF:
return true;
default:
// also, the above US_HUNGRY_DEAD spells are not castable
// when satiated or worse
return false;
}
break;
case US_UNDEAD: // Mummies
mpr("Your bloodfilled body can't sustain your transformation much "
"longer.", MSGCH_WARN);
you.duration[DUR_TRANSFORMATION] = 2;
if (newstate <= HS_SATIATED)
{
if (you.duration[DUR_BERSERKER] > 1)
{
mpr("Your bloodless body can't sustain your rage any "
"longer.", MSGCH_DURATION);
you.duration[DUR_BERSERKER] = 1;
}
int transform = you.attribute[ATTR_TRANSFORMATION];
if (transform != TRAN_NONE && transform != TRAN_BAT
&& you.duration[DUR_TRANSFORMATION] > 2)
{
mpr("Your bloodless body can't sustain your "
"transformation much longer.", MSGCH_DURATION);
you.duration[DUR_TRANSFORMATION] = 2;
}
}
else if (newstate == HS_ENGORGED
&& you.attribute[ATTR_TRANSFORMATION] == TRAN_BAT
&& you.duration[DUR_TRANSFORMATION] > 5)
{
mpr("Your bloodfilled body can't sustain your transformation much "
"longer.", MSGCH_WARN);
// give more time because suddenly stopping flying can be lethal
you.duration[DUR_TRANSFORMATION] = 5;
}