it's a necromantic spell.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@5604 c06c8d41-db1a-0410-9941-cceddc491573
WZWOQZCXUB7QX7PGQMIUCH5JM5YME25GE2GMMT2NIJP5OIZUZLBQC
O2XPBLHUM6FOTLUIVPTPHYPMDZDL3STCZX2PHAFDDAL3OIGBO6XQC
Q3VABBQ6WGBJVKL2FIX5R4RKB3LJCXHI2LJAKO3WIWT6DRTXXPTAC
FZJ24VMFYPMLOHWRQXVEDWDMZKOS2K54KMW44KVD4WRQMIWZO37QC
6DHYNXJ2UAN6YCQCTIBX6PFZQIR435E3TBSPUQ6PBXNJDJTPYS3AC
SS6TGQMYUEQEFVKYE77VHVQRKSR3ELRQ5Q6VE5KYXZF226OJUSXAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
QFHC4VZHHDG5PKLY7A263OJFT2OQ3MF2HX423AKINPRNR5UUT7LQC
WVIVA3M3ABBQTBYTCFE2W53IE4IZ223FBSQ6P7BACWKIJPYA66ZQC
EY6KXNVGJ5OWJQWBE3W5E4T625XZXUNJMXIEQLCZUAJASUK4KHMQC
GP7DDCLYNLI6SDXJJ7MH6XHXS5FGFM4SNL2J7J5DGE2EJOETJPHAC
BGJ7P65JV2OFVXMGAJDHV5Y36TR7JOFDWJUZJBHUBD7SCQMDRBEAC
RA7RDZC5P4OYMR4MKTBO463YCREXENESV2VTMWKIT4G4SBJHFGLQC
NFJKJYTT6CBLOKLGT6HIVIDEPWXMGXJV5AAL37SBZTG2HSFMJMKQC
HHKRUVC6WMVKQRUQRYB5VAEDXUS6TMAKO7BSTBGVVL2AUOEBFUJAC
S6FRUNPFE3PD2DAMVJGWX7TX262KVATIMQ4ON67BPRNVTOOO2XVQC
OQYJHB4D7DUXP6EUXH7F5Z5ODNF52TOSIAXAUOICEVD3UAOTXCZQC
N3NXT75G2JYKVON7ZTE3TG34BBWITCL2HHVQ6H7QREYCDTVQFSGAC
RQIADBIESWPIW3Y6T7PQ7UH6PBH32ECSM65SM2DFVUEJME6P524AC
bool simulacrum(int pow, bool god_gift = false);
bool summon_horrible_things(int pow, bool god_gift = false);
bool cast_summon_horrible_things(int pow, bool god_gift = false);
bool cast_simulacrum(int pow, bool god_gift = false);
bool cast_summon_wraiths(int pow, bool god_gift = false);
}
bool cast_summon_horrible_things(int pow, bool god_gift)
{
if (one_chance_in(3)
&& !lose_stat(STAT_INTELLIGENCE, 1, true, "summoning horrible things"))
{
mpr("Your call goes unanswered.");
return (false);
}
int how_many_small =
stepdown_value(2 + (random2(pow) / 10) + (random2(pow) / 10),
2, 2, 6, -1);
int how_many_big = 0;
// No more than 2 tentacled monstrosities.
while (how_many_small > 2 && how_many_big < 2 && one_chance_in(3))
{
how_many_small -= 2;
how_many_big++;
}
// No more than 8 summons.
how_many_small = std::min(8, how_many_small);
how_many_big = std::min(8, how_many_big);
int count = 0;
while (how_many_big > 0)
{
if (create_monster(
mgen_data(MONS_TENTACLED_MONSTROSITY, BEH_FRIENDLY, 6,
you.pos(), you.pet_target,
god_gift ? MF_GOD_GIFT : 0)) != -1)
{
count++;
}
how_many_big--;
}
while (how_many_small > 0)
{
if (create_monster(
mgen_data(MONS_ABOMINATION_LARGE, BEH_FRIENDLY, 6,
you.pos(), you.pet_target,
god_gift ? MF_GOD_GIFT : 0)) != -1)
{
count++;
}
how_many_small--;
}
if (count > 0)
{
mprf("Some Thing%s answered your call!",
(count > 1) ? "s" : "");
return (true);
}
mpr("Your call goes unanswered.");
return (false);
if (one_chance_in(3)
&& !lose_stat(STAT_INTELLIGENCE, 1, true, "summoning horrible things"))
{
mpr("Your call goes unanswered.");
return (false);
}
int how_many_small =
stepdown_value(2 + (random2(pow) / 10) + (random2(pow) / 10),
2, 2, 6, -1);
int how_many_big = 0;
// No more than 2 tentacled monstrosities.
while (how_many_small > 2 && how_many_big < 2 && one_chance_in(3))
{
how_many_small -= 2;
how_many_big++;
}
bool success = false;
// No more than 8 summons.
how_many_small = std::min(8, how_many_small);
how_many_big = std::min(8, how_many_big);
const int chance = random2(25);
monster_type mon = ((chance > 8) ? MONS_WRAITH : // 64%
(chance > 3) ? MONS_FREEZING_WRAITH // 20%
: MONS_SPECTRAL_WARRIOR); // 16%
bool cast_summon_wraiths(int pow, bool god_gift)
{
bool success = false;
const int chance = random2(25);
monster_type mon = ((chance > 8) ? MONS_WRAITH : // 64%
(chance > 3) ? MONS_FREEZING_WRAITH // 20%
: MONS_SPECTRAL_WARRIOR); // 16%
const bool friendly = (random2(pow) > 5);
if (create_monster(
mgen_data(mon,
friendly ? BEH_FRIENDLY : BEH_HOSTILE,
5, you.pos(),
friendly ? you.pet_target : MHITYOU,
god_gift ? MF_GOD_GIFT : 0)) != -1)
{
success = true;
mprf("%s",
friendly ? "An insubstantial figure forms in the air."
: "You sense a hostile presence.");
}
else
canned_msg(MSG_NOTHING_HAPPENS);
//jmf: Kiku sometimes deflects this
if (!(you.religion == GOD_KIKUBAAQUDGHA
&& (!player_under_penance()
&& you.piety >= piety_breakpoint(3)
&& you.piety > random2(MAX_PIETY))))
{
disease_player(25 + random2(50));
}
return (success);
}