git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@5539 c06c8d41-db1a-0410-9941-cceddc491573
HHKRUVC6WMVKQRUQRYB5VAEDXUS6TMAKO7BSTBGVVL2AUOEBFUJAC
LPYSYKZRHXUQUI3WQRTHWUXRDUAKSOHV7LRMRY3JKZYSZIHJMI7AC
WN23ASQC225ARDXLCVN64V7Q42IWWLZXWBGZQLMYV2WSCKBQE34QC
KLCR26P7MSX4ZWIHQHRK7BZH7M2QGCITN46FCFVHNX7U7WQWYDAQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
O6OHDRHPEF6S5B36LHMW36OMST3B3MJURDR6WVLUXAEMGR6YUD6QC
6EMXRBTQJU5JJP77EBZMYM5Z2CTCW22YRESUTVBQ2HJAS36QDVTQC
Q72IOCEGVWNC34LLHA4SEVNMCVKWHEIY5HA4FYGFFNC3WNRQDQ2QC
5T56ZXHVBN4LBEOHZPRV65UNS2HJ7RX6AMU7GHNAJRAQ7QKECP5AC
PACHJJO52BZM5BCXAWPQGJKLIRFSKAY6SIXZQFTHJ2HQWFQS2MCAC
VBQODM6G5B35WWYGNT36EQDJFVTHMZB6CJWAFP3UQVD6NRUSKJAQC
QZUSP5WXCHQKOZ6TO574PITHBAJHPDBSVJJ6YUGFMJNGVN6A427AC
LX2YKPU73XMOVRWVEYQ4QRCVXLBYLVVGTEYGKA6WO5IORK27RMGAC
CY3IZ6EIDAWLHWKULZ4LVNUJ5GQ4W2ZGPZMW6ZM2DC4EU36WHAPQC
4Z7USHJ5ISQRNQ2W7T32UXN4VAZL5JLOXHXTNINOGN5ARKNVZBKAC
SJXOZ6J66G3S5VYGIZ3YHEUCKUF5554YEFUYLVBH7X4ALYSXKTGQC
{
bool quiet =
(spell == SPELL_SUMMON_BUTTERFLIES
|| spell == SPELL_CALL_CANINE_FAMILIAR);
monster_type mon = MONS_PROGRAM_BUG;
beh_type beha =
(spell == SPELL_SUMMON_GREATER_DEMON) ? BEH_CHARMED
: BEH_FRIENDLY;
int hostile =
(spell == SPELL_SUMMON_SCORPIONS
|| spell == SPELL_SUMMON_DEMON
|| spell == SPELL_DEMONIC_HORDE
|| spell == SPELL_CALL_CANINE_FAMILIAR
|| spell == SPELL_SUMMON_UGLY_THING) ? 3 :
(spell == SPELL_SUMMON_GREATER_DEMON
|| spell == SPELL_SUMMON_WRAITHS
|| spell == SPELL_SUMMON_DRAGON) ? 5
: -1;
int numsc =
(spell == SPELL_SUMMON_BUTTERFLIES
|| spell == SPELL_SUMMON_SCORPIONS) ? 3 :
(spell == SPELL_SUMMON_GREATER_DEMON
|| spell == SPELL_SUMMON_WRAITHS) ? 5
: -1;
int how_many =
(spell == SPELL_SUMMON_BUTTERFLIES) ? std::max(15, 4 + random2(3) + random2(powc) / 10) :
(spell == SPELL_SUMMON_SCORPIONS) ? stepdown_value(1 + random2(powc) / 10 + random2(powc) / 10, 2, 2, 6, 8) :
(spell == SPELL_DEMONIC_HORDE) ? 7 + random2(5) :
(spell == SPELL_SUMMON_WRAITHS) ? stepdown_value(1 + random2(powc) / 30 + random2(powc) / 30, 2, 2, 6, 8)
: 1;
for (int i = 0; i < how_many; ++i)
{
switch (spell)
{
case SPELL_SUMMON_BUTTERFLIES:
mon = MONS_BUTTERFLY;
break;
case SPELL_SUMMON_SCORPIONS:
mon = MONS_SCORPION;
break;
case SPELL_CALL_IMP:
mon = (one_chance_in(3)) ? MONS_WHITE_IMP :
(one_chance_in(7)) ? MONS_SHADOW_IMP
: MONS_IMP;
break;
case SPELL_SUMMON_DEMON:
case SPELL_DEMONIC_HORDE:
case SPELL_SUMMON_GREATER_DEMON:
mon = summon_any_demon(
(spell == SPELL_SUMMON_GREATER_DEMON) ? DEMON_GREATER :
(spell == SPELL_SUMMON_DEMON) ? DEMON_COMMON
: DEMON_LESSER);
break;
case SPELL_CALL_CANINE_FAMILIAR:
{
const int chance = random2(powc);
if (chance < 10)
mon = MONS_JACKAL;
else if (chance < 15)
mon = MONS_HOUND;
else
{
switch (chance % 7)
{
case 0:
if (one_chance_in(you.species == SP_HILL_ORC ? 3 : 6))
mon = MONS_WARG;
else
mon = MONS_WOLF;
break;
case 1:
case 2:
mon = MONS_WAR_DOG;
break;
case 3:
case 4:
mon = MONS_HOUND;
break;
default:
mon = MONS_JACKAL;
break;
}
}
}
case SPELL_SUMMON_ICE_BEAST:
mon = MONS_ICE_BEAST;
break;
case SPELL_SUMMON_UGLY_THING:
{
const int chance = std::max(6 - (powc / 12), 1);
mon = (one_chance_in(chance)) ? MONS_VERY_UGLY_THING
: MONS_UGLY_THING;
break;
}
case SPELL_SUMMON_WRAITHS:
{
const int chance = random2(25);
mon = ((chance > 8) ? MONS_WRAITH : // 64%
(chance > 3) ? MONS_FREEZING_WRAITH // 20%
: MONS_SPECTRAL_WARRIOR); // 16%
break;
}
case SPELL_SUMMON_GUARDIAN:
mon = MONS_ANGEL;
break;
case SPELL_SUMMON_DAEVA:
mon = MONS_DAEVA;
break;
case SPELL_SUMMON_DRAGON:
mon = MONS_DRAGON;
break;
default:
break;
}
if (i == 0 && (spell == SPELL_SUMMON_DEMON
|| spell == SPELL_DEMONIC_HORDE
|| spell == SPELL_SUMMON_GREATER_DEMON))
{
mpr("You open a gate to Pandemonium!");
}
summon_general_creature(powc, quiet, mon, beha,
hostile, numsc, false);
}
summon_general_creature_spell(spell, powc);
beh_type beha =
(spell == SPELL_SUMMON_GREATER_DEMON) ? BEH_CHARMED
: BEH_FRIENDLY;
int hostile = (spell == SPELL_SUMMON_SCORPIONS
|| spell == SPELL_SUMMON_DEMON
|| spell == SPELL_DEMONIC_HORDE
|| spell == SPELL_CALL_CANINE_FAMILIAR
|| spell == SPELL_SUMMON_UGLY_THING) ? 3 :
(spell == SPELL_SUMMON_GREATER_DEMON
|| spell == SPELL_SUMMON_WRAITHS
|| spell == SPELL_SUMMON_DRAGON) ? 5
: -1;
int numsc = (spell == SPELL_SUMMON_BUTTERFLIES
|| spell == SPELL_SUMMON_SCORPIONS) ? 3 :
(spell == SPELL_SUMMON_GREATER_DEMON
|| spell == SPELL_SUMMON_WRAITHS) ? 5
: -1;
int how_many = (spell == SPELL_SUMMON_BUTTERFLIES) ?
std::max(15, 4 + random2(3) + random2(pow) / 10) :
(spell == SPELL_SUMMON_SCORPIONS) ?
stepdown_value(1 + random2(pow) / 10 + random2(pow) / 10, 2, 2, 6, 8) :
(spell == SPELL_DEMONIC_HORDE) ?
7 + random2(5) :
(spell == SPELL_SUMMON_WRAITHS) ?
stepdown_value(1 + random2(pow) / 30 + random2(pow) / 30, 2, 2, 6, 8)
: 1;
for (int i = 0; i < how_many; ++i)
{
switch (spell)
{
case SPELL_SUMMON_BUTTERFLIES:
mon = MONS_BUTTERFLY;
break;
case SPELL_SUMMON_SCORPIONS:
mon = MONS_SCORPION;
break;
case SPELL_CALL_IMP:
mon = (one_chance_in(3)) ? MONS_WHITE_IMP :
(one_chance_in(7)) ? MONS_SHADOW_IMP
: MONS_IMP;
break;
case SPELL_SUMMON_DEMON:
case SPELL_DEMONIC_HORDE:
case SPELL_SUMMON_GREATER_DEMON:
mon = summon_any_demon(
(spell == SPELL_SUMMON_GREATER_DEMON) ? DEMON_GREATER :
(spell == SPELL_SUMMON_DEMON) ? DEMON_COMMON
: DEMON_LESSER);
break;
case SPELL_CALL_CANINE_FAMILIAR:
{
const int chance = random2(pow);
if (chance < 10)
mon = MONS_JACKAL;
else if (chance < 15)
mon = MONS_HOUND;
else
{
switch (chance % 7)
{
case 0:
if (one_chance_in(you.species == SP_HILL_ORC ? 3 : 6))
mon = MONS_WARG;
else
mon = MONS_WOLF;
break;
case 1:
case 2:
mon = MONS_WAR_DOG;
break;
case 3:
case 4:
mon = MONS_HOUND;
break;
default:
mon = MONS_JACKAL;
break;
}
}
}
case SPELL_SUMMON_ICE_BEAST:
mon = MONS_ICE_BEAST;
break;
case SPELL_SUMMON_UGLY_THING:
{
const int chance = std::max(6 - (pow / 12), 1);
mon = (one_chance_in(chance)) ? MONS_VERY_UGLY_THING
: MONS_UGLY_THING;
break;
}
case SPELL_SUMMON_WRAITHS:
{
const int chance = random2(25);
mon = ((chance > 8) ? MONS_WRAITH : // 64%
(chance > 3) ? MONS_FREEZING_WRAITH // 20%
: MONS_SPECTRAL_WARRIOR); // 16%
break;
}
case SPELL_SUMMON_GUARDIAN:
mon = MONS_ANGEL;
break;
case SPELL_SUMMON_DAEVA:
mon = MONS_DAEVA;
break;
case SPELL_SUMMON_DRAGON:
mon = MONS_DRAGON;
break;
default:
break;
}
if (i == 0 && (spell == SPELL_SUMMON_DEMON
|| spell == SPELL_DEMONIC_HORDE
|| spell == SPELL_SUMMON_GREATER_DEMON))
{
mpr("You open a gate to Pandemonium!");
}
if (summon_general_creature(pow, quiet, mon, beha,
hostile, numsc, false))
{
success = true;
}
}
return success;
}