git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@5574 c06c8d41-db1a-0410-9941-cceddc491573
RQIADBIESWPIW3Y6T7PQ7UH6PBH32ECSM65SM2DFVUEJME6P524AC
UW6UG6U4J27IFH2472MBAU6BT7AUKO5YW7YOTYZ5KX4JRHUNORUAC
ZGUJWUFJ4NFFJ6PGXLFGQWCWBCZHPWGWI44NJHJEVPRG5L36PADQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
NQ2PC2EO6VIBYU5MR4LNSLV3LDOYABKSKZEVEDTML6BAJAQAWWBAC
N3NXT75G2JYKVON7ZTE3TG34BBWITCL2HHVQ6H7QREYCDTVQFSGAC
WVIVA3M3ABBQTBYTCFE2W53IE4IZ223FBSQ6P7BACWKIJPYA66ZQC
PACHJJO52BZM5BCXAWPQGJKLIRFSKAY6SIXZQFTHJ2HQWFQS2MCAC
EFS55XWWSC2ARLHL7KI3SZYQB45IUT33RW7JFDGCLUP4A4MBHDYQC
3HMZIQCJSWUYTWQDWRQYPI5VOSRIAGGBOM7LIMF7362RJ2LRMZAAC
CLIEHAE2PP7ZIGLLIMYCWM4FC54KBOAN5AILOLAZJ5S26GTJM4RQC
GNJGG33CNP6IWUW4V2JKIFAC5N43TP5MX4PZOTXROBYZVXQEAJLAC
LX2YKPU73XMOVRWVEYQ4QRCVXLBYLVVGTEYGKA6WO5IORK27RMGAC
GPEJOT73KMACP33IPAKFR5ROGHCOIP22VXZMQNYTGLEA2OSZUM2AC
C7EEMEI6FU6L2VWZBTDCZO5ZTB2N5TCNGSMIBZTN6NZRE7BUBFPQC
IE3INS4WUXZOBVXB5VWRBYPVPXADD2U2W5H3TBTOYNWJ3EGRSGQQC
3XL4DKV7PSWAU3ZBJSKZFJ2VUYABC47I7KKWGIRCJYXULQD453MQC
YCL3W2PFE6ILTGBFODCSXNPDIA46KVSZP2TI7HDMYAOEJT65RIEAC
bool 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);
}
return (false);
}
}
void summon_things(int pow)
{
int big_things = 0;
int numsc = 2 + (random2(pow) / 10) + (random2(pow) / 10);
if (one_chance_in(3)
&& !lose_stat( STAT_INTELLIGENCE, 1, true,
"summoning horrible things" ))
{
mpr("Your call goes unanswered.");
}
else
{
numsc = stepdown_value( numsc, 2, 2, 6, -1 );
// No more than 2 tentacled monstrosities.
while (numsc > 2 && big_things < 2 && one_chance_in(3))
{
numsc -= 2;
++big_things;
}
if (numsc > 8)
numsc = 8;
if (big_things > 8)
big_things = 8;
while (big_things > 0)
{
create_monster(
mgen_data(MONS_TENTACLED_MONSTROSITY, BEH_FRIENDLY, 6,
you.pos(), you.pet_target));
big_things--;
}
while (numsc > 0)
{
create_monster(
mgen_data(MONS_ABOMINATION_LARGE, BEH_FRIENDLY, 6,
you.pos(), you.pet_target));
numsc--;
}
mprf("Some Thing%s answered your call!",
(numsc + big_things > 1) ? "s" : "");
}