that can summon multiple wraiths and ghosts (FR 2865657).
ZR6IG6JO2HEUWDJX5C3BHN3Z4Z2V6HFRGGS2NIW3PCODCWL7PRYAC
6QIJGB3K64A3JK6S7FRHT4A64MNI2ENZPGWNZO6WOYYO3LFV43UAC
Q6QWWEURCCP5CRAMRDPFPMM7B6FLLOQZZMI553QKG4KEYVMXARCAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
QO5ZJWQ3JK3PEGBPTQSAYIPEJEHG2M2KTD74227G5VG7DVXUL3BQC
NQMXQ6OQVUSC7Y7F7IL252QW4A5JED224EECNHWAM4ZZYVNY745AC
PR2XIEELO6UJWT3EXDHWCJZGIZCCF3D6KF6LC67R6RWWAVNWEHWAC
SUWIERONPDATHPDMZRYO6GYIXSW6XIS5V5MK5IV23DWQH2LL7VIAC
ZEFGFQHN6J2S6EIPX7EPDG22C5YXTI6DMKQHHRCLWN5MQC44KY3AC
WZWOQZCXUB7QX7PGQMIUCH5JM5YME25GE2GMMT2NIJP5OIZUZLBQC
4SWAT5KCKQV527NKELAXFQ5XA4Q5HONQXD4VBXMUZNPVPQKPCPNAC
EY6KXNVGJ5OWJQWBE3W5E4T625XZXUNJMXIEQLCZUAJASUK4KHMQC
DL4ZORRUZ3X4OCAGW5GVSIXLNK72KFHQOVA5QXU5QHT4YPRLFS2QC
RA7RDZC5P4OYMR4MKTBO463YCREXENESV2VTMWKIT4G4SBJHFGLQC
EEXPOHBIJ7CZLM4L7ZDIYANWJ4SDA4XNDEVOEPHAVFPUSKX465AAC
XGPPA2X3G3266EVSTXGQ7ZWYOCJ32FEYPEUJV55AI5TGFYHTYTQQC
DHI4FAUHYA3V7I2LKBE74AA672FVDUE2LBOZHTTL3EAE4YJP2ICAC
7P5WSNAGXFBICVTPQO6EHXMJ7O2HAYOIGVRS37EPA5GDQY7KUMIQC
BMGB25AWEDOAWKDB7H22R6D4SL32CSBSOBWBIEN3GFGDLEDGEWJAC
AYU5OVG2HZO46KDAPKUWAVHS5HTYFKUWIMIRMTHAXVVFEDJE7YPAC
LHYPG77SUY6OKJV3KQ7CLHGSVTSLS54OGWPOVX6IP3CKLU2YJX2QC
DDU4A3JGN5IUIPP5IASOODKPR2WBHSDSV4FITZ6HNXNSXXQACWAQC
AA3I6WU2SPJUPKRIPGXCLU4EZOV4QELVVZ7EIAW3H73GES5DSFXQC
UAJN2CFA2QHYDHW2UFAVPPHDQFCD54RKM6V2UC4AMEDJUBBLNWIQC
YO7TE72UUQA22IZVAYEFAKVFC24Q3AMVUQZHQGKVKKM34T52TJZAC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
IE3INS4WUXZOBVXB5VWRBYPVPXADD2U2W5H3TBTOYNWJ3EGRSGQQC
const int chance = random2(25);
monster_type mon = ((chance > 8) ? MONS_WRAITH : // 64%
(chance > 3) ? MONS_FREEZING_WRAITH // 20%
: MONS_SPECTRAL_WARRIOR); // 16%
if (m == NULL)
{
mpr("An evil force gathers but it quickly dissipates.");
return (true);
}
int mi = monster_index(m);
ASSERT(!(invalid_monster_index(mi)));
const int monster =
create_monster(
mgen_data(mon,
friendly ? BEH_FRIENDLY : BEH_HOSTILE,
5, SPELL_SUMMON_WRAITHS,
you.pos(), MHITYOU, MG_FORCE_BEH, god));
bool friendly = true;
int success = 0;
int to_summon = stepdown_value(2 + (random2(pow) / 10) + (random2(pow) / 10),
2, 2, 6, -1);
success = true;
const int chance = random2(25);
monster_type mon = ((chance > 22) ? MONS_PHANTOM : // 8%
(chance > 20) ? MONS_HUNGRY_GHOST : // 8%
(chance > 18) ? MONS_FLAYED_GHOST : // 8%
(chance > 7) ? MONS_WRAITH : // 44%/40%
(chance > 2) ? MONS_FREEZING_WRAITH // 20%/16%
: MONS_SPECTRAL_WARRIOR); // 12%
if ((chance == 3 || chance == 8) && player_see_invis())
mon = MONS_SHADOW_WRAITH; // 0%/8%
const int monster =
create_monster(
mgen_data(mon,
BEH_FRIENDLY,
5, SPELL_SUMMON_WRAITHS,
where, mi, MG_FORCE_BEH, god));
}
void mons_cast_haunt(monsters *monster)
{
coord_def fpos;
switch (monster->foe)
{
case MHITNOT:
return;
case MHITYOU:
fpos = you.pos();
break;
default:
fpos = menv[monster->foe].pos();
}
_do_high_level_summon(monster, mons_near(monster), SPELL_SUMMON_WRAITHS,
_pick_random_wraith, random_range(3, 6), GOD_NO_GOD, &fpos);
return;
case SPELL_SUMMON_WRAITHS:
_do_high_level_summon(monster, monsterNearby, spell_cast,
_pick_random_wraith, random_range(3, 6), god);