several tweaks: its resistances are the inverse of the freezing wraith's, but with sticky flame resistance added, and its console character is a lightred 'z'. As specified, it uses a sticky flame melee attack: AF_NAPALM. Note that it needs a tile.
Also, expand the list of servants that Yredelemnul can send, as specified by Lemuel awhile ago (including the flaming corpse). This expansion allows the sending of more than one creature per instance, currently only used for Yred's flying skulls.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@6873 c06c8d41-db1a-0410-9941-cceddc491573
PWY4VZVHDLYL7UVNCCOW7BM7LYK2BOGTL23P75HXUJ33MHJPEJPQC
QMVQVP32K32IJNOTDWB2FRRZHVRQQZ65I5DOTV6MOU7LNVP6REQQC
VAG7CONYPCZU4TSFOJDGFYODOOV2M7R6L4V2SVVU6QG3CDRUKBIQC
KPSCSVGHKEQ4ENM3QQU2U3GYMV52NDFO5L6ML7YDPUKV3365OA3QC
4QMMF3ZQ37PVVPLFUCNA6VJAL6S7QCFJ4QBU6V7ZFJR4FRDH3R6QC
DONTX7OVBXA7UDYK62EZ7Y6RG7HTZDP7G5U3MTWEG6PYQF2S7TGAC
5ZTUKFQSIU3NVZGNX7MPQQ3IZVXRCWB5EZSQSYEXXA4G5UFCFPTQC
P2OYYNPHIBGOLT4CRLNTTIXDN34EU2QCMFQJNLAMUAHQXZTEDPXQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
CA6ZG6P2CE5EPAOQSB3P7NBDKTNFFHQP4CPOUFZL32ON6N32GSSQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
3MAPXTL5GAQ6373CUUVPBARIRHBRSISAF3BO2WBEROT2KUAXWLGAC
MI7CWKRDXHAU7PIHLXXOSFBULRGT2OOMIMOSQLMVYOUVGABIVXGAC
3XL4DKV7PSWAU3ZBJSKZFJ2VUYABC47I7KKWGIRCJYXULQD453MQC
GPEJOT73KMACP33IPAKFR5ROGHCOIP22VXZMQNYTGLEA2OSZUM2AC
4SWAT5KCKQV527NKELAXFQ5XA4Q5HONQXD4VBXMUZNPVPQKPCPNAC
SWOYPTHJAWFEDBMB3ROT33VQZIXGZD5UOXEV456DDUENW2HGA66QC
WHY6LRRJ5T2NSBE3IUCR4X3TOAH7TTK5NPUPUIFT7TPNJ6J4HBDAC
YZEMUABJPKIFXOVAZJFA2YRRZX5575H7XQJTYRMICDFZI5HMUM3AC
OJKUO2UJ2O2MUITGVQNF3BQITGVYE3XK6QTG7XW6OYPJ4YFWCFQQC
IE3INS4WUXZOBVXB5VWRBYPVPXADD2U2W5H3TBTOYNWJ3EGRSGQQC
6ARBZEUSCIPVJUQJST5HG6TKQYQZPOHWYIIJO4OD2SUECPYMLVIQC
QDTVLBRGHDTRUVT7I3O72K6TMOYAUSAJBZUHGOEFU2RKJNUPWZSQC
RBAGQ2PB7V5YAM5KSHSZR2E3MLKDSRVM5XYGI2TIXP5QMVBOQHDQC
LHYPG77SUY6OKJV3KQ7CLHGSVTSLS54OGWPOVX6IP3CKLU2YJX2QC
SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC
3WHI3KM43ZCN4ITJLFQQBQBC4OJPRS7QTBPIQ6QBCUVKRSK476SAC
PR42BCP5BPRFD2MP5H6CIJP7E57Q6TKL6SOXZWFKMFVR2OZWHT7AC
KBNY5FWKTEAKABFCLPC3QFKFSVZKAGXINPCIFV6WDSWFO4VCKNTAC
3EUPIYJNWOMOQBP2Z5SGSMWK453BXJD6KL2WFTR3NM565MEBYASAC
OP6CTAKWCAU64JXQ3USQYR5E5IFHQHNCACII5UMVRXUTZXJQOAZAC
ASLW3Z5PAVZSWJEMMMVZT226P44EKSAD47QS72JIFJESAI3RPN3AC
LJK4ZQATLSB4MKZG3ARZX5V6RFGTN3NLCN6GTCUGJQKU26SOXMUAC
JZCODQCOUBBBPPR4TLOAPIB4BQLDY3ORTJXTWEQSUJVJ7DMK7FVAC
I7QLYOTE6DLQZM7YWUWYLKHRJRB2A3STQ42ALSRGQICEWKD2QTEQC
TFYLN3PQEKFQNOYRVJRCXFJ4J6VSKC7QQFOHNWTDPSVYWAPAJABAC
Y56C5OMUQ5XF2G6DKDV4R5MED44UOIUPTBBQVWQBUHYIXYA5MOZAC
UEI5JAVCMN7Y2SACTEZPZSNFJWOJTC55G24Q6LKQCT4XNDH5ZQIAC
GT7BSR54BVJKHUCLEBTELGBMNBFFDQW52EVC4XKVEMUVG2UGZMDAC
32PXX2XJVV7YSLLYNAVS7RYKYRAOQ565TZMTITSEPSSXOYPB5M2AC
GSJA56E3ORVIBCBA6T6WU2HE4DCLJ6NZPW76O7L54N4CYPKLJOWQC
5BJPWUPLJFS34FUTFJVKA4A52YMIGV6EWDXLNSDCWBJWBGVSQFGQC
thing_called = ((temp_rand > 66) ? MONS_WRAITH : // 33%
(temp_rand > 52) ? MONS_WIGHT : // 13%
(temp_rand > 40) ? MONS_SPECTRAL_WARRIOR : // 11%
(temp_rand > 31) ? MONS_ROTTING_HULK : // 8%
(temp_rand > 23) ? MONS_SKELETAL_WARRIOR : // 7%
(temp_rand > 16) ? MONS_VAMPIRE : // 6%
(temp_rand > 10) ? MONS_GHOUL : // 5%
(temp_rand > 4) ? MONS_MUMMY // 5%
: MONS_FLAYED_GHOST); // 4%
mon = ((temp_rand > 74) ? MONS_WRAITH : // 25%
(temp_rand > 64) ? MONS_WIGHT : // 10%
(temp_rand > 54) ? MONS_FLYING_SKULL : // 10%
(temp_rand > 45) ? MONS_SPECTRAL_WARRIOR : // 9%
(temp_rand > 38) ? MONS_ROTTING_HULK : // 7%
(temp_rand > 32) ? MONS_SKELETAL_WARRIOR : // 6%
(temp_rand > 27) ? MONS_FREEZING_WRAITH : // 5%
(temp_rand > 22) ? MONS_FLAMING_CORPSE : // 5%
(temp_rand > 18) ? MONS_GHOUL : // 5%
(temp_rand > 13) ? MONS_MUMMY : // 5%
(temp_rand > 9) ? MONS_VAMPIRE : // 4%
(temp_rand > 5) ? MONS_FLAYED_GHOST : // 4%
(temp_rand > 2) ? MONS_SKELETAL_DRAGON // 3%
: MONS_DEATH_COB); // 2%
if (mon == MONS_FLYING_SKULL)
how_many = 2 + random2(4);
thing_called = ((temp_rand > 84) ? MONS_ORC_WARRIOR : // 15%
(temp_rand > 69) ? MONS_ORC_KNIGHT : // 14%
(temp_rand > 59) ? MONS_NAGA_WARRIOR : // 9%
(temp_rand > 49) ? MONS_CENTAUR_WARRIOR : // 9%
(temp_rand > 39) ? MONS_STONE_GIANT : // 9%
(temp_rand > 29) ? MONS_FIRE_GIANT : // 9%
(temp_rand > 19) ? MONS_FROST_GIANT : // 9%
(temp_rand > 9) ? MONS_CYCLOPS : // 9%
(temp_rand > 4) ? MONS_HILL_GIANT // 4%
: MONS_TITAN); // 4%
mon = ((temp_rand > 84) ? MONS_ORC_WARRIOR : // 15%
(temp_rand > 69) ? MONS_ORC_KNIGHT : // 14%
(temp_rand > 59) ? MONS_NAGA_WARRIOR : // 9%
(temp_rand > 49) ? MONS_CENTAUR_WARRIOR : // 9%
(temp_rand > 39) ? MONS_STONE_GIANT : // 9%
(temp_rand > 29) ? MONS_FIRE_GIANT : // 9%
(temp_rand > 19) ? MONS_FROST_GIANT : // 9%
(temp_rand > 9) ? MONS_CYCLOPS : // 9%
(temp_rand > 4) ? MONS_HILL_GIANT // 4%
: MONS_TITAN); // 4%
return (thing_called);
for (int i = 0; i < how_many; ++i)
{
if (create_monster(
mgen_data(mon,
!force_hostile ? BEH_FRIENDLY : BEH_HOSTILE,
0, you.pos(),
!force_hostile ? you.pet_target : MHITYOU,
0, god)) != -1)
{
count++;
}
}
return (count);
for (int i = 0; i < how_many; ++i)
{
monster_type punisher = _random_servant(GOD_YREDELEMNUL);
for (; how_many > 0; --how_many)
count += _random_servants(GOD_YREDELEMNUL, true);
if (create_monster(
mgen_data::hostile_at(punisher,
you.pos(), 0, 0, true, GOD_YREDELEMNUL)) != -1)
{
count++;
}
}
for (int i = 0; i < how_many; ++i)
{
monster_type punisher = _random_servant(GOD_OKAWARU);
for (; how_many > 0; --how_many)
count += _random_servants(GOD_OKAWARU, true);
if (create_monster(
mgen_data::hostile_at(punisher,
you.pos(), 0, 0, true, GOD_OKAWARU)) != -1)
{
success = true;
}
}
simple_god_message(count > 0 ? " sends forces against you!"
: "'s forces are busy with other wars.", god);
MONS_FLYING_SKULL, MONS_MUMMY, MONS_VAMPIRE, MONS_WIGHT, MONS_WRAITH,
MONS_SHADOW_WRAITH, MONS_FREEZING_WRAITH, MONS_SPECTRAL_WARRIOR,
MONS_ZOMBIE_LARGE, MONS_SKELETON_LARGE, MONS_SIMULACRUM_LARGE,
MONS_SHADOW
MONS_FLYING_SKULL, MONS_FLAMING_CORPSE, MONS_MUMMY, MONS_VAMPIRE,
MONS_WIGHT, MONS_WRAITH, MONS_SHADOW_WRAITH, MONS_FREEZING_WRAITH,
MONS_SPECTRAL_WARRIOR, MONS_ZOMBIE_LARGE, MONS_SKELETON_LARGE,
MONS_SIMULACRUM_LARGE, MONS_SHADOW
{
MONS_FLAMING_CORPSE, 'z', LIGHTRED, "flaming corpse",
M_EVIL,
MR_RES_POISON | MR_VUL_COLD | mrd(MR_RES_FIRE, 3) | MR_RES_STICKY_FLAME,
0, 17, MONS_FLAMING_CORPSE, MONS_FLAMING_CORPSE, MH_UNDEAD, -4,
{ {AT_HIT, AF_NAPALM, 20}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 8, 3, 5, 0 },
12, 13, MST_NO_SPELLS, CE_NOCORPSE, Z_NOZOMBIE, S_SCREAM, I_NORMAL,
HT_LAND, 12, DEFAULT_ENERGY, MONUSE_NOTHING, SIZE_MEDIUM
},
// Check if this is a resist that pretends to be boolean for
// damage purposes - only electricity at the moment, raw poison
// damage uses the normal formula.
// Check if this is a resist that pretends to be boolean for damage
// damage purposes - only electricity and sticky flame (napalm) at
// the moment, raw poison damage uses the normal formula.
case AF_NAPALM:
if (one_chance_in(20) || (damage_done > 0 && one_chance_in(3)))
{
if (needs_message)
{
mprf("%s %s covered in liquid flames%s",
def_name(DESC_CAP_THE).c_str(),
defender->conj_verb("are").c_str(),
special_attack_punctuation().c_str());
}
if (defender->atype() == ACT_PLAYER)
sticky_flame_player();
else
{
sticky_flame_monster(monster_index(def),
mons_friendly(atk) ? KC_FRIENDLY : KC_OTHER,
std::min(4, 1 + random2(atk->hit_dice) / 2));
}
}
break;
// Actually napalms a monster (w/ message).
void _sticky_flame_monster(int mn, kill_category who, int levels)
// Actually napalms the player.
void sticky_flame_player()
{
you.duration[DUR_LIQUID_FLAMES] += random2avg(7, 3) + 1;
}
// Actually napalms a monster (with message).
void sticky_flame_monster(int mn, kill_category who, int levels)
if (beam.name == "sticky flame"
&& (you.species != SP_MOTTLED_DRACONIAN
|| you.experience_level < 6))
if (beam.name == "sticky flame")