HD-dependent random resistance check, replace it with an Invocations-dependent timeout, and restrict it to monsters that are no worse than lightly wounded/damaged.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@10134 c06c8d41-db1a-0410-9941-cceddc491573
OY7HY5MTXM2OO43HM2GYUS5U3MBTKDM66IALE5OXAXF2EGYVAEGQC
JOBNTX4QILB3BEPWWIQHKWPXXZJWUOOSRBKSYMRDOMNVTZKCSBNAC
WRZPWGC3EX4FH2OSQHYKVLBUCYUNLHXFMSCWMBDMPVB3YAWNO4GAC
KZWOHH536QBWAPWROR32EOXEK5LRY6I5VHVL7HHI7GOFKCMQTCSQC
BNRY5YIXLFE2TDNU2JQHWWXJQVWNSEWQ52DU7XUWIT5DZWKGBDDAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
3HGELZU7NELOQ635HZO6IJIYLBSNCJ5VPH46IE22KA3OSLEFK7AQC
23PFLB2E4QHL5SF3Q2YV5FXRH6MFHENEU2ACVC572ZCYDXCBZVQAC
2G7MZ653N3JUHJ4DA5Q7VRO3S5T27DLPKDCJEKB6DGYSTXULUVWAC
5XSXMOBGXFLTIQE6WDXWWFVDOTUPZSIQ2FWT3YI5QMVU6D76IUYQC
X5WLJCJVW55SXZVP7IKP7ADCJIGNKN4PKAXFECVR6TNK7XSMZR7QC
T4FNOPMWYYJHJBTTY33PB43HTJPKEC46L62YERTWIX73HYZSELXQC
HM6NOS7BN5665KWIFGBXOHZIDMRSVCESN72GMGI6NVBFZGCF3L6QC
FD6T6JC5XCPO2PD335ZGQZUNGKQ6UVZH6DP23RSQXQWZESVYGJXAC
OEHJJ5X5CBOHTXISZLJHVLCAPH77RYSVKKBGW3US2GGXZMZJ5CEQC
UADYVV3UD5ERJTZZJGY4EUQ4NJ2JSBG7YYUJ75ZRBIXRQXQKOJPAC
Mark a monster's living soul as yours, once the monster dies. The soul will retain at least some of the monster's innate healing ability and faculties, and sometimes even the monster's equipment. However, you can only enslave one soul at any given time. Note that enslaved souls, whether twisted or intact, can follow you beyond the level they were created on.
The soul will retain at least some of the monster's innate healing ability and faculties, and sometimes even the monster's equipment. However, only one soul can be enslaved at a time. Also, only a relatively uninjured monster can have its soul marked, and the duration of the mark is dependent on Invocations skill.
Note that enslaved souls, whether twisted or intact, can follow you beyond the level they were created on.
if (mon->hit_dice >= random2(ench_power / 2))
return (MON_RESIST);
// The monster can be no more than lightly wounded/damaged,
// using the formula from monstuff.cc:mons_get_damage_level().
if (mon->hit_points <= (mon->max_hit_points * 3) / 4)
{
simple_monster_message(mon, "'s soul is too badly injured.");
return (MON_OTHER);
}