summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBardur Arantsson <bardur@scientician.net>2019-02-15 19:20:25 +0100
committerBardur Arantsson <bardur@scientician.net>2019-02-15 19:20:25 +0100
commitd04c2ec639e3564d1d6544bed5e5e9ce4bc24e54 (patch)
tree487bc750bfb702aa7e11d504c789b43dd0dab178
parentda132e07e700346f2739023d4a1cc026dd41c41a (diff)
Fix indentation
-rw-r--r--src/melee2.cc2097
1 files changed, 1044 insertions, 1053 deletions
diff --git a/src/melee2.cc b/src/melee2.cc
index aac4fe8f..8892fc39 100644
--- a/src/melee2.cc
+++ b/src/melee2.cc
@@ -1007,1328 +1007,1319 @@ static bool monst_spell_monst(int m_idx)
return false;
}
+ int t_idx = m_ptr->target;
+
+ monster_type *t_ptr = &m_list[t_idx];
+ auto const tr_ptr = t_ptr->race();
+
+ /* Hack -- no fighting >100 squares from player */
+ if (t_ptr->cdis > MAX_RANGE)
{
- int t_idx = m_ptr->target;
+ return false;
+ }
+
+ /* Monster must be projectable */
+ if (!projectable(m_ptr->fy, m_ptr->fx, t_ptr->fy, t_ptr->fx))
+ {
+ return false;
+ }
- monster_type *t_ptr = &m_list[t_idx];
- auto const tr_ptr = t_ptr->race();
+ /* OK -- we-ve got a target */
+ int const y = t_ptr->fy;
+ int const x = t_ptr->fx;
+
+ /* Extract the monster level */
+ const int rlev = ((m_ptr->level >= 1) ? m_ptr->level : 1);
+
+ /* Which spells are allowed? */
+ monster_spell_flag_set allowed_spells = r_ptr->spells;
+
+ /* Hack -- allow "desperate" spells */
+ if ((r_ptr->flags & RF_SMART) &&
+ (m_ptr->hp < m_ptr->maxhp / 10) &&
+ (rand_int(100) < 50))
+ {
+ /* Require intelligent spells */
+ allowed_spells &= SF_INT_MASK;
- /* Hack -- no fighting >100 squares from player */
- if (t_ptr->cdis > MAX_RANGE)
+ /* No spells left? */
+ if ((!allowed_spells) && (monst_spell_monst_spell == -1))
{
return false;
}
+ }
+
+ /* Extract spells */
+ auto spell = extract_spells(allowed_spells);
+
+ /* No spells left? */
+ if (spell.empty())
+ {
+ return false;
+ }
- /* Monster must be projectable */
- if (!projectable(m_ptr->fy, m_ptr->fx, t_ptr->fy, t_ptr->fx))
+ /* Stop if player is dead or gone */
+ if (!alive || death)
+ {
+ return false;
+ }
+
+ /* Handle "leaving" */
+ if (p_ptr->leaving)
+ {
+ return false;
+ }
+
+ /* Get the monster name (or "it") */
+ char m_name[80];
+ monster_desc(m_name, m_ptr, 0x00);
+
+ /* Get the monster possessive ("his"/"her"/"its") */
+ char m_poss[80];
+ monster_desc(m_poss, m_ptr, 0x22);
+
+ /* Get the target's name (or "it") */
+ char t_name[80];
+ monster_desc(t_name, t_ptr, 0x00);
+
+ /* Hack -- Get the "died from" name */
+ char ddesc[80];
+ monster_desc(ddesc, m_ptr, 0x88);
+
+ /* Choose a spell to cast */
+ auto thrown_spell = spell[rand_int(spell.size())];
+
+ /* Force a spell ? */
+ if (monst_spell_monst_spell > -1)
+ {
+ thrown_spell = spell[monst_spell_monst_spell];
+ monst_spell_monst_spell = -1;
+ }
+
+ auto const see_m = seen;
+ auto const see_t = !blind && t_ptr->ml;
+ auto const see_either = see_m || see_t;
+ auto const see_both = see_m && see_t;
+
+ /* Do a breath */
+ auto do_breath = [&](char const *element, int gf, s32b max, int divisor) -> void {
+ // Interrupt
+ disturb_on_other();
+ // Message
+ if (!see_either)
{
- return false;
+ monster_msg("You hear breathing noise.");
}
+ else if (blind)
+ {
+ monster_msg("%^s breathes.", m_name);
+ }
+ else
+ {
+ monster_msg("%^s breathes %s at %s.", m_name, element, t_name);
+ }
+ // Breathe
+ monst_breath_monst(m_idx, y, x, gf, std::min(max, m_ptr->hp / divisor), 0);
+ };
- /* OK -- we-ve got a target */
- int const y = t_ptr->fy;
- int const x = t_ptr->fx;
+ /* Messages for summoning */
+ struct summon_messages {
+ char const *singular;
+ char const *plural;
+ };
- /* Extract the monster level */
- const int rlev = ((m_ptr->level >= 1) ? m_ptr->level : 1);
+ /* Default message for summoning when player is blinded */
+ auto blind_msg_default = summon_messages {
+ "You hear something appear nearby.",
+ "You hear many things appear nearby."
+ };
- /* Which spells are allowed? */
- monster_spell_flag_set allowed_spells = r_ptr->spells;
+ /* Do a summoning spell */
+ auto do_summon = [&](char const *action, int n, int friendly_type, int hostile_type, summon_messages const &blind_msg) -> void {
+ // Interrupt
+ disturb_on_other();
- /* Hack -- allow "desperate" spells */
- if ((r_ptr->flags & RF_SMART) &&
- (m_ptr->hp < m_ptr->maxhp / 10) &&
- (rand_int(100) < 50))
+ // Message
+ if (blind || !see_m)
{
- /* Require intelligent spells */
- allowed_spells &= SF_INT_MASK;
+ monster_msg("%^s mumbles.", m_name);
+ }
+ else
+ {
+ monster_msg("%^s magically %s", m_name, action);
+ }
- /* No spells left? */
- if ((!allowed_spells) && (monst_spell_monst_spell == -1))
+ // Do the actual summoning
+ int count = 0;
+ for (int k = 0; k < n; k++)
+ {
+ if (friendly)
{
- return false;
+ count += summon_specific_friendly(m_ptr->fy, m_ptr->fx, rlev, friendly_type, TRUE);
+ }
+ else if (!friendly)
+ {
+ count += summon_specific(m_ptr->fy, m_ptr->fx, rlev, hostile_type);
}
}
+ // Message for blinded characters
+ if (blind)
+ {
+ if (count == 1)
+ {
+ monster_msg(blind_msg.singular);
+ }
+ else if (count > 1)
+ {
+ monster_msg(blind_msg.plural);
+ }
+ }
+ };
- /* Extract spells */
- auto spell = extract_spells(allowed_spells);
+ /* There's no summoning friendly uniques or Nazgul */
+ auto spell_idx = thrown_spell->spell_idx;
- /* No spells left? */
- if (spell.empty())
+ if (friendly)
+ {
+ if ((thrown_spell->spell_idx == SF_S_UNIQUE_IDX) &&
+ (thrown_spell->spell_idx == SF_S_WRAITH_IDX))
{
- return false;
+ // Summon high undead instead
+ spell_idx = SF_S_HI_UNDEAD_IDX;
}
+ }
- /* Stop if player is dead or gone */
- if (!alive || death)
+ /* Spell effect */
+ switch (spell_idx)
+ {
+ case SF_SHRIEK_IDX:
{
- return false;
+ disturb_on_other();
+ if (!see_m) monster_msg("You hear a shriek.");
+ else monster_msg("%^s shrieks at %s.", m_name, t_name);
+ wake_up = true;
+ break;
}
- /* Handle "leaving" */
- if (p_ptr->leaving)
+ case SF_MULTIPLY_IDX:
{
- return false;
+ break;
}
- /* Get the monster name (or "it") */
- char m_name[80];
- monster_desc(m_name, m_ptr, 0x00);
+ case SF_ROCKET_IDX:
+ {
+ disturb_on_other();
+ if (!see_either) monster_msg("You hear an explosion!");
+ else if (blind) monster_msg("%^s shoots something.", m_name);
+ else monster_msg("%^s fires a rocket at %s.", m_name, t_name);
+ monst_breath_monst(m_idx, y, x, GF_ROCKET,
+ ((m_ptr->hp / 4) > 800 ? 800 : (m_ptr->hp / 4)), 2);
+ break;
+ }
- /* Get the monster possessive ("his"/"her"/"its") */
- char m_poss[80];
- monster_desc(m_poss, m_ptr, 0x22);
+ case SF_ARROW_1_IDX:
+ {
+ disturb_on_other();
+ if (!see_either) monster_msg("You hear a strange noise.");
+ else if (blind) monster_msg("%^s makes a strange noise.", m_name);
+ else monster_msg("%^s fires an arrow at %s.", m_name, t_name);
+ monst_bolt_monst(m_idx, y, x, GF_ARROW, damroll(1, 6));
+ break;
+ }
- /* Get the target's name (or "it") */
- char t_name[80];
- monster_desc(t_name, t_ptr, 0x00);
+ case SF_ARROW_2_IDX:
+ {
+ disturb_on_other();
+ if (!see_either) monster_msg("You hear a strange noise.");
+ else if (blind) monster_msg("%^s makes a strange noise.", m_name);
+ else monster_msg("%^s fires an arrow at %s.", m_name, t_name);
+ monst_bolt_monst(m_idx, y, x, GF_ARROW, damroll(3, 6));
+ break;
+ }
- /* Hack -- Get the "died from" name */
- char ddesc[80];
- monster_desc(ddesc, m_ptr, 0x88);
+ case SF_ARROW_3_IDX:
+ {
+ disturb_on_other();
- /* Choose a spell to cast */
- auto thrown_spell = spell[rand_int(spell.size())];
+ if (!see_either) monster_msg("You hear a strange noise.");
+ else if (blind) monster_msg("%^s makes a strange noise.", m_name);
+ else monster_msg("%^s fires a missile at %s.", m_name, t_name);
+ monst_bolt_monst(m_idx, y, x, GF_ARROW, damroll(5, 6));
+ break;
+ }
- /* Force a spell ? */
- if (monst_spell_monst_spell > -1)
+ case SF_ARROW_4_IDX:
{
- thrown_spell = spell[monst_spell_monst_spell];
- monst_spell_monst_spell = -1;
+ if (!see_either) monster_msg("You hear a strange noise.");
+ else disturb_on_other();
+ if (blind) monster_msg("%^s makes a strange noise.", m_name);
+ else monster_msg("%^s fires a missile at %s.", m_name, t_name);
+ monst_bolt_monst(m_idx, y, x, GF_ARROW, damroll(7, 6));
+ break;
}
- auto const see_m = seen;
- auto const see_t = !blind && t_ptr->ml;
- auto const see_either = see_m || see_t;
- auto const see_both = see_m && see_t;
+ case SF_BR_ACID_IDX:
+ {
+ do_breath("acid", GF_ACID, 1600, 3);
+ break;
+ }
- /* Do a breath */
- auto do_breath = [&](char const *element, int gf, s32b max, int divisor) -> void {
- // Interrupt
- disturb_on_other();
- // Message
- if (!see_either)
- {
- monster_msg("You hear breathing noise.");
- }
- else if (blind)
- {
- monster_msg("%^s breathes.", m_name);
- }
- else
- {
- monster_msg("%^s breathes %s at %s.", m_name, element, t_name);
- }
- // Breathe
- monst_breath_monst(m_idx, y, x, gf, std::min(max, m_ptr->hp / divisor), 0);
- };
+ case SF_BR_ELEC_IDX:
+ {
+ do_breath("lightning", GF_ELEC, 1600, 3);
+ break;
+ }
- /* Messages for summoning */
- struct summon_messages {
- char const *singular;
- char const *plural;
- };
+ case SF_BR_FIRE_IDX:
+ {
+ do_breath("fire", GF_FIRE, 1600, 3);
+ break;
+ }
- /* Default message for summoning when player is blinded */
- auto blind_msg_default = summon_messages {
- "You hear something appear nearby.",
- "You hear many things appear nearby."
- };
+ case SF_BR_COLD_IDX:
+ {
+ do_breath("frost", GF_COLD, 1600, 3);
+ break;
+ }
- /* Do a summoning spell */
- auto do_summon = [&](char const *action, int n, int friendly_type, int hostile_type, summon_messages const &blind_msg) -> void {
- // Interrupt
- disturb_on_other();
+ case SF_BR_POIS_IDX:
+ {
+ do_breath("gas", GF_POIS, 800, 3);
+ break;
+ }
- // Message
- if (blind || !see_m)
- {
- monster_msg("%^s mumbles.", m_name);
- }
- else
- {
- monster_msg("%^s magically %s", m_name, action);
- }
+ case SF_BR_NETH_IDX:
+ {
+ do_breath("nether", GF_NETHER, 550, 6);
+ break;
+ }
- // Do the actual summoning
- int count = 0;
- for (int k = 0; k < n; k++)
- {
- if (friendly)
- {
- count += summon_specific_friendly(m_ptr->fy, m_ptr->fx, rlev, friendly_type, TRUE);
- }
- else if (!friendly)
- {
- count += summon_specific(m_ptr->fy, m_ptr->fx, rlev, hostile_type);
- }
- }
- // Message for blinded characters
- if (blind)
- {
- if (count == 1)
- {
- monster_msg(blind_msg.singular);
- }
- else if (count > 1)
- {
- monster_msg(blind_msg.plural);
- }
- }
- };
+ case SF_BR_LITE_IDX:
+ {
+ do_breath("light", GF_LITE, 400, 6);
+ break;
+ }
- /* There's no summoning friendly uniques or Nazgul */
- auto spell_idx = thrown_spell->spell_idx;
+ case SF_BR_DARK_IDX:
+ {
+ do_breath("darkness", GF_DARK, 400, 6);
+ break;
+ }
- if (friendly)
+ case SF_BR_CONF_IDX:
{
- if ((thrown_spell->spell_idx == SF_S_UNIQUE_IDX) &&
- (thrown_spell->spell_idx == SF_S_WRAITH_IDX))
- {
- // Summon high undead instead
- spell_idx = SF_S_HI_UNDEAD_IDX;
- }
+ do_breath("confusion", GF_CONFUSION, 400, 6);
+ break;
}
- /* Spell effect */
- switch (spell_idx)
+ case SF_BR_SOUN_IDX:
{
- case SF_SHRIEK_IDX:
- {
- disturb_on_other();
- if (!see_m) monster_msg("You hear a shriek.");
- else monster_msg("%^s shrieks at %s.", m_name, t_name);
- wake_up = true;
- break;
- }
+ do_breath("sound", GF_SOUND, 400, 6);
+ break;
+ }
- case SF_MULTIPLY_IDX:
- {
- break;
- }
+ case SF_BR_CHAO_IDX:
+ {
+ do_breath("chaos", GF_CHAOS, 600, 6);
+ break;
+ }
- case SF_ROCKET_IDX:
- {
- disturb_on_other();
- if (!see_either) monster_msg("You hear an explosion!");
- else if (blind) monster_msg("%^s shoots something.", m_name);
- else monster_msg("%^s fires a rocket at %s.", m_name, t_name);
- monst_breath_monst(m_idx, y, x, GF_ROCKET,
- ((m_ptr->hp / 4) > 800 ? 800 : (m_ptr->hp / 4)), 2);
- break;
- }
+ case SF_BR_DISE_IDX:
+ {
+ do_breath("disenchantment", GF_DISENCHANT, 500, 6);
+ break;
+ }
- case SF_ARROW_1_IDX:
- {
- disturb_on_other();
- if (!see_either) monster_msg("You hear a strange noise.");
- else if (blind) monster_msg("%^s makes a strange noise.", m_name);
- else monster_msg("%^s fires an arrow at %s.", m_name, t_name);
- monst_bolt_monst(m_idx, y, x, GF_ARROW, damroll(1, 6));
- break;
- }
+ case SF_BR_NEXU_IDX:
+ {
+ do_breath("nexus", GF_NEXUS, 250, 3);
+ break;
+ }
- case SF_ARROW_2_IDX:
- {
- disturb_on_other();
- if (!see_either) monster_msg("You hear a strange noise.");
- else if (blind) monster_msg("%^s makes a strange noise.", m_name);
- else monster_msg("%^s fires an arrow at %s.", m_name, t_name);
- monst_bolt_monst(m_idx, y, x, GF_ARROW, damroll(3, 6));
- break;
- }
+ case SF_BR_TIME_IDX:
+ {
+ do_breath("time", GF_TIME, 150, 3);
+ break;
+ }
- case SF_ARROW_3_IDX:
- {
- disturb_on_other();
+ case SF_BR_INER_IDX:
+ {
+ do_breath("inertia", GF_INERTIA, 200, 6);
+ break;
+ }
- if (!see_either) monster_msg("You hear a strange noise.");
- else if (blind) monster_msg("%^s makes a strange noise.", m_name);
- else monster_msg("%^s fires a missile at %s.", m_name, t_name);
- monst_bolt_monst(m_idx, y, x, GF_ARROW, damroll(5, 6));
- break;
- }
+ case SF_BR_GRAV_IDX:
+ {
+ do_breath("gravity", GF_GRAVITY, 200, 3);
+ break;
+ }
- case SF_ARROW_4_IDX:
- {
- if (!see_either) monster_msg("You hear a strange noise.");
- else disturb_on_other();
- if (blind) monster_msg("%^s makes a strange noise.", m_name);
- else monster_msg("%^s fires a missile at %s.", m_name, t_name);
- monst_bolt_monst(m_idx, y, x, GF_ARROW, damroll(7, 6));
- break;
- }
+ case SF_BR_SHAR_IDX:
+ {
+ do_breath("shards", GF_SHARDS, 400, 6);
+ break;
+ }
- case SF_BR_ACID_IDX:
- {
- do_breath("acid", GF_ACID, 1600, 3);
- break;
- }
+ case SF_BR_PLAS_IDX:
+ {
+ do_breath("plasma", GF_PLASMA, 150, 6);
+ break;
+ }
- case SF_BR_ELEC_IDX:
- {
- do_breath("lightning", GF_ELEC, 1600, 3);
- break;
- }
+ case SF_BR_WALL_IDX:
+ {
+ do_breath("force", GF_FORCE, 200, 6);
+ break;
+ }
- case SF_BR_FIRE_IDX:
- {
- do_breath("fire", GF_FIRE, 1600, 3);
- break;
- }
+ case SF_BR_MANA_IDX:
+ {
+ do_breath("magical energy", GF_MANA, 250, 3);
+ break;
+ }
- case SF_BR_COLD_IDX:
- {
- do_breath("frost", GF_COLD, 1600, 3);
- break;
- }
+ case SF_BA_NUKE_IDX:
+ {
+ disturb_on_other();
+ if (!see_either) monster_msg("You hear someone mumble.");
+ else if (blind) monster_msg("%^s mumbles.", m_name);
+ else monster_msg("%^s casts a ball of radiation at %s.", m_name, t_name);
+ monst_breath_monst(m_idx, y, x, GF_NUKE,
+ (rlev + damroll(10, 6)), 2);
+ break;
+ }
- case SF_BR_POIS_IDX:
- {
- do_breath("gas", GF_POIS, 800, 3);
- break;
- }
+ case SF_BR_NUKE_IDX:
+ {
+ do_breath("toxic waste", GF_NUKE, 800, 3);
+ break;
+ }
- case SF_BR_NETH_IDX:
- {
- do_breath("nether", GF_NETHER, 550, 6);
- break;
- }
+ case SF_BA_CHAO_IDX:
+ {
+ disturb_on_other();
+ if (!see_either) monster_msg("You hear someone mumble frighteningly.");
+ else if (blind) monster_msg("%^s mumbles frighteningly.", m_name);
+ else monster_msg("%^s invokes a raw Chaos upon %s.", m_name, t_name);
+ monst_breath_monst(m_idx, y, x, GF_CHAOS,
+ (rlev * 2) + damroll(10, 10), 4);
+ break;
+ }
- case SF_BR_LITE_IDX:
- {
- do_breath("light", GF_LITE, 400, 6);
- break;
- }
+ case SF_BR_DISI_IDX:
+ {
+ do_breath("disintegration", GF_DISINTEGRATE, 300, 3);
+ break;
+ }
- case SF_BR_DARK_IDX:
- {
- do_breath("darkness", GF_DARK, 400, 6);
- break;
- }
+ case SF_BA_ACID_IDX:
+ {
+ disturb_on_other();
+ if (!see_either) monster_msg ("You hear someone mumble.");
+ else if (blind) monster_msg("%^s mumbles.", m_name);
+ else monster_msg("%^s casts an acid ball at %s.", m_name, t_name);
+ monst_breath_monst(m_idx, y, x, GF_ACID, randint(rlev * 3) + 15, 2);
+ break;
+ }
- case SF_BR_CONF_IDX:
- {
- do_breath("confusion", GF_CONFUSION, 400, 6);
- break;
- }
+ case SF_BA_ELEC_IDX:
+ {
+ disturb_on_other();
+ if (!see_either) monster_msg ("You hear someone mumble.");
+ else
+ if (blind) monster_msg("%^s mumbles.", m_name);
+ else monster_msg("%^s casts a lightning ball at %s.", m_name, t_name);
+ monst_breath_monst(m_idx, y, x, GF_ELEC, randint(rlev * 3 / 2) + 8, 2);
+ break;
+ }
- case SF_BR_SOUN_IDX:
- {
- do_breath("sound", GF_SOUND, 400, 6);
- break;
- }
+ case SF_BA_FIRE_IDX:
+ {
+ disturb_on_other();
+ if (!see_either) monster_msg ("You hear someone mumble.");
+ else
+ if (blind) monster_msg("%^s mumbles.", m_name);
+ else monster_msg("%^s casts a fire ball at %s.", m_name, t_name);
+ monst_breath_monst(m_idx, y, x, GF_FIRE, randint(rlev * 7 / 2) + 10, 2);
+ break;
+ }
- case SF_BR_CHAO_IDX:
- {
- do_breath("chaos", GF_CHAOS, 600, 6);
- break;
- }
+ case SF_BA_COLD_IDX:
+ {
+ disturb_on_other();
+ if (!see_either) monster_msg ("You hear someone mumble.");
+ else
+ if (blind) monster_msg("%^s mumbles.", m_name);
+ else monster_msg("%^s casts a frost ball at %s.", m_name, t_name);
+ monst_breath_monst(m_idx, y, x, GF_COLD, randint(rlev * 3 / 2) + 10, 2);
+ break;
+ }
- case SF_BR_DISE_IDX:
- {
- do_breath("disenchantment", GF_DISENCHANT, 500, 6);
- break;
- }
+ case SF_BA_POIS_IDX:
+ {
+ disturb_on_other();
+ if (!see_either) monster_msg ("You hear someone mumble.");
+ else
+ if (blind) monster_msg("%^s mumbles.", m_name);
+ else monster_msg("%^s casts a stinking cloud at %s.", m_name, t_name);
+ monst_breath_monst(m_idx, y, x, GF_POIS, damroll(12, 2), 2);
+ break;
+ }
- case SF_BR_NEXU_IDX:
- {
- do_breath("nexus", GF_NEXUS, 250, 3);
- break;
- }
+ case SF_BA_NETH_IDX:
+ {
+ disturb_on_other();
+ if (!see_either) monster_msg ("You hear someone mumble.");
+ else
+ if (blind) monster_msg("%^s mumbles.", m_name);
+ else monster_msg("%^s casts a nether ball at %s.", m_name, t_name);
+ monst_breath_monst(m_idx, y, x, GF_NETHER, (50 + damroll(10, 10) + rlev), 2);
+ break;
+ }
- case SF_BR_TIME_IDX:
- {
- do_breath("time", GF_TIME, 150, 3);
- break;
- }
+ case SF_BA_WATE_IDX:
+ {
+ disturb_on_other();
+ if (!see_either) monster_msg ("You hear someone mumble.");
+ else
+ if (blind) monster_msg("%^s mumbles.", m_name);
+ else monster_msg("%^s gestures fluidly at %s.", m_name, t_name);
+ monster_msg("%^s is engulfed in a whirlpool.", t_name);
+ monst_breath_monst(m_idx, y, x, GF_WATER, randint(rlev * 5 / 2) + 50, 4);
+ break;
+ }
- case SF_BR_INER_IDX:
- {
- do_breath("inertia", GF_INERTIA, 200, 6);
- break;
- }
+ case SF_BA_MANA_IDX:
+ {
+ disturb_on_other();
+ if (!see_either) monster_msg ("You hear someone mumble powerfully.");
+ else
+ if (blind) monster_msg("%^s mumbles powerfully.", m_name);
+ else monster_msg("%^s invokes a mana storm upon %s.", m_name, t_name);
+ monst_breath_monst(m_idx, y, x, GF_MANA, (rlev * 5) + damroll(10, 10), 4);
+ break;
+ }
- case SF_BR_GRAV_IDX:
+ case SF_BA_DARK_IDX:
+ {
+ disturb_on_other();
+ if (!see_either) monster_msg ("You hear someone mumble powerfully.");
+ else
+ if (blind) monster_msg("%^s mumbles powerfully.", m_name);
+ else monster_msg("%^s invokes a darkness storm upon %s.", m_name, t_name);
+ monst_breath_monst(m_idx, y, x, GF_DARK, (rlev * 5) + damroll(10, 10), 4);
+ break;
+ }
+
+ case SF_DRAIN_MANA_IDX:
+ {
+ /* Attack power */
+ int r1 = (randint(rlev) / 2) + 1;
+
+ if (see_m)
{
- do_breath("gravity", GF_GRAVITY, 200, 3);
- break;
+ /* Basic message */
+ monster_msg("%^s draws psychic energy from %s.", m_name, t_name);
}
- case SF_BR_SHAR_IDX:
+ /* Heal the monster */
+ if (m_ptr->hp < m_ptr->maxhp)
{
- do_breath("shards", GF_SHARDS, 400, 6);
- break;
+ if (!tr_ptr->spells)
+ {
+ if (see_both)
+ monster_msg("%^s is unaffected!", t_name);
+ }
+ else
+ {
+ /* Heal */
+ m_ptr->hp += (6 * r1);
+ if (m_ptr->hp > m_ptr->maxhp) m_ptr->hp = m_ptr->maxhp;
+
+ /* Redraw (later) if needed */
+ if (health_who == m_idx) p_ptr->redraw |= (PR_FRAME);
+
+ /* Special message */
+ if (seen)
+ {
+ monster_msg("%^s appears healthier.", m_name);
+ }
+ }
}
- case SF_BR_PLAS_IDX:
+ wake_up = true;
+ break;
+ }
+
+ case SF_MIND_BLAST_IDX:
+ {
+ disturb_on_other();
+
+ if (!seen)
{
- do_breath("plasma", GF_PLASMA, 150, 6);
- break;
+ /* */
}
-
- case SF_BR_WALL_IDX:
+ else
{
- do_breath("force", GF_FORCE, 200, 6);
- break;
+ monster_msg("%^s gazes intently at %s.", m_name, t_name);
}
- case SF_BR_MANA_IDX:
+ /* Attempt a saving throw */
+ if ((tr_ptr->flags & RF_UNIQUE) ||
+ (tr_ptr->flags & RF_NO_CONF) ||
+ (t_ptr->level > randint((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10))
{
- do_breath("magical energy", GF_MANA, 250, 3);
- break;
+ /* No obvious effect */
+ if (see_t)
+ {
+ monster_msg("%^s is unaffected!", t_name);
+ }
}
-
- case SF_BA_NUKE_IDX:
+ else
{
- disturb_on_other();
- if (!see_either) monster_msg("You hear someone mumble.");
- else if (blind) monster_msg("%^s mumbles.", m_name);
- else monster_msg("%^s casts a ball of radiation at %s.", m_name, t_name);
- monst_breath_monst(m_idx, y, x, GF_NUKE,
- (rlev + damroll(10, 6)), 2);
- break;
+ monster_msg("%^s is blasted by psionic energy.", t_name);
+ t_ptr->confused += rand_int(4) + 4;
+
+ mon_take_hit_mon(m_idx, t_idx, damroll(8, 8), " collapses, a mindless husk.");
}
- case SF_BR_NUKE_IDX:
+ wake_up = true;
+ break;
+ }
+
+ case SF_BRAIN_SMASH_IDX:
+ {
+ disturb_on_other();
+ if (!seen)
{
- do_breath("toxic waste", GF_NUKE, 800, 3);
- break;
+ /* */
}
-
- case SF_BA_CHAO_IDX:
+ else
{
- disturb_on_other();
- if (!see_either) monster_msg("You hear someone mumble frighteningly.");
- else if (blind) monster_msg("%^s mumbles frighteningly.", m_name);
- else monster_msg("%^s invokes a raw Chaos upon %s.", m_name, t_name);
- monst_breath_monst(m_idx, y, x, GF_CHAOS,
- (rlev * 2) + damroll(10, 10), 4);
- break;
+ monster_msg("%^s gazes intently at %s.", m_name, t_name);
}
- case SF_BR_DISI_IDX:
+ /* Attempt a saving throw */
+ if ((tr_ptr->flags & RF_UNIQUE) ||
+ (tr_ptr->flags & RF_NO_CONF) ||
+ (t_ptr->level > randint((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10))
{
- do_breath("disintegration", GF_DISINTEGRATE, 300, 3);
- break;
+ /* No obvious effect */
+ if (see_t)
+ {
+ monster_msg("%^s is unaffected!", t_name);
+ }
}
-
- case SF_BA_ACID_IDX:
+ else
{
- disturb_on_other();
- if (!see_either) monster_msg ("You hear someone mumble.");
- else if (blind) monster_msg("%^s mumbles.", m_name);
- else monster_msg("%^s casts an acid ball at %s.", m_name, t_name);
- monst_breath_monst(m_idx, y, x, GF_ACID, randint(rlev * 3) + 15, 2);
- break;
+ if (see_t)
+ {
+ monster_msg("%^s is blasted by psionic energy.", t_name);
+ }
+ t_ptr->confused += rand_int(4) + 4;
+ t_ptr->mspeed -= rand_int(4) + 4;
+ t_ptr->stunned += rand_int(4) + 4;
+ mon_take_hit_mon(m_idx, t_idx, damroll(12, 15), " collapses, a mindless husk.");
}
+ wake_up = true;
+ break;
+ }
- case SF_BA_ELEC_IDX:
+ case SF_CAUSE_1_IDX:
+ {
+ disturb_on_other();
+ if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
+ else monster_msg("%^s points at %s and curses.", m_name, t_name);
+ if (t_ptr->level > randint((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
{
- disturb_on_other();
- if (!see_either) monster_msg ("You hear someone mumble.");
- else
- if (blind) monster_msg("%^s mumbles.", m_name);
- else monster_msg("%^s casts a lightning ball at %s.", m_name, t_name);
- monst_breath_monst(m_idx, y, x, GF_ELEC, randint(rlev * 3 / 2) + 8, 2);
- break;
- }
- case SF_BA_FIRE_IDX:
+ if (see_t) monster_msg("%^s resists!", t_name);
+ }
+ else
{
- disturb_on_other();
- if (!see_either) monster_msg ("You hear someone mumble.");
- else
- if (blind) monster_msg("%^s mumbles.", m_name);
- else monster_msg("%^s casts a fire ball at %s.", m_name, t_name);
- monst_breath_monst(m_idx, y, x, GF_FIRE, randint(rlev * 7 / 2) + 10, 2);
- break;
+ mon_take_hit_mon(m_idx, t_idx, damroll(3, 8), " is destroyed.");
}
+ wake_up = true;
+ break;
+ }
- case SF_BA_COLD_IDX:
+ case SF_CAUSE_2_IDX:
+ {
+ disturb_on_other();
+ if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
+ else monster_msg("%^s points at %s and curses horribly.", m_name, t_name);
+ if (t_ptr->level > randint((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
{
- disturb_on_other();
- if (!see_either) monster_msg ("You hear someone mumble.");
- else
- if (blind) monster_msg("%^s mumbles.", m_name);
- else monster_msg("%^s casts a frost ball at %s.", m_name, t_name);
- monst_breath_monst(m_idx, y, x, GF_COLD, randint(rlev * 3 / 2) + 10, 2);
- break;
+ if (see_t) monster_msg("%^s resists!", t_name);
}
-
- case SF_BA_POIS_IDX:
+ else
{
- disturb_on_other();
- if (!see_either) monster_msg ("You hear someone mumble.");
- else
- if (blind) monster_msg("%^s mumbles.", m_name);
- else monster_msg("%^s casts a stinking cloud at %s.", m_name, t_name);
- monst_breath_monst(m_idx, y, x, GF_POIS, damroll(12, 2), 2);
- break;
+ mon_take_hit_mon(m_idx, t_idx, damroll(8, 8), " is destroyed.");
}
+ wake_up = true;
+ break;
+ }
- case SF_BA_NETH_IDX:
+ case SF_CAUSE_3_IDX:
+ {
+ disturb_on_other();
+ if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
+ else monster_msg("%^s points at %s, incanting terribly!", m_name, t_name);
+ if (t_ptr->level > randint((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
{
- disturb_on_other();
- if (!see_either) monster_msg ("You hear someone mumble.");
- else
- if (blind) monster_msg("%^s mumbles.", m_name);
- else monster_msg("%^s casts a nether ball at %s.", m_name, t_name);
- monst_breath_monst(m_idx, y, x, GF_NETHER, (50 + damroll(10, 10) + rlev), 2);
- break;
+ if (see_t) monster_msg("%^s resists!", t_name);
}
-
- case SF_BA_WATE_IDX:
+ else
{
- disturb_on_other();
- if (!see_either) monster_msg ("You hear someone mumble.");
- else
- if (blind) monster_msg("%^s mumbles.", m_name);
- else monster_msg("%^s gestures fluidly at %s.", m_name, t_name);
- monster_msg("%^s is engulfed in a whirlpool.", t_name);
- monst_breath_monst(m_idx, y, x, GF_WATER, randint(rlev * 5 / 2) + 50, 4);
- break;
+ mon_take_hit_mon(m_idx, t_idx, damroll(10, 15), " is destroyed.");
}
+ wake_up = true;
+ break;
+ }
- case SF_BA_MANA_IDX:
+ case SF_CAUSE_4_IDX:
+ {
+ disturb_on_other();
+ if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
+ else monster_msg("%^s points at %s, screaming the word 'DIE!'", m_name, t_name);
+ if (t_ptr->level > randint((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
{
- disturb_on_other();
- if (!see_either) monster_msg ("You hear someone mumble powerfully.");
- else
- if (blind) monster_msg("%^s mumbles powerfully.", m_name);
- else monster_msg("%^s invokes a mana storm upon %s.", m_name, t_name);
- monst_breath_monst(m_idx, y, x, GF_MANA, (rlev * 5) + damroll(10, 10), 4);
- break;
+ if (see_t) monster_msg("%^s resists!", t_name);
}
-
- case SF_BA_DARK_IDX:
+ else
{
- disturb_on_other();
- if (!see_either) monster_msg ("You hear someone mumble powerfully.");
- else
- if (blind) monster_msg("%^s mumbles powerfully.", m_name);
- else monster_msg("%^s invokes a darkness storm upon %s.", m_name, t_name);
- monst_breath_monst(m_idx, y, x, GF_DARK, (rlev * 5) + damroll(10, 10), 4);
- break;
+ mon_take_hit_mon(m_idx, t_idx, damroll(15, 15), " is destroyed.");
}
+ wake_up = true;
+ break;
+ }
- case SF_DRAIN_MANA_IDX:
- {
- /* Attack power */
- int r1 = (randint(rlev) / 2) + 1;
+ case SF_BO_ACID_IDX:
+ {
+ disturb_on_other();
+ if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
+ else monster_msg("%^s casts an acid bolt at %s.", m_name, t_name);
+ monst_bolt_monst(m_idx, y, x, GF_ACID,
+ damroll(7, 8) + (rlev / 3));
+ break;
+ }
- if (see_m)
- {
- /* Basic message */
- monster_msg("%^s draws psychic energy from %s.", m_name, t_name);
- }
+ case SF_BO_ELEC_IDX:
+ {
+ disturb_on_other();
+ if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
+ else monster_msg("%^s casts a lightning bolt at %s.", m_name, t_name);
+ monst_bolt_monst(m_idx, y, x, GF_ELEC,
+ damroll(4, 8) + (rlev / 3));
+ break;
+ }
- /* Heal the monster */
- if (m_ptr->hp < m_ptr->maxhp)
- {
- if (!tr_ptr->spells)
- {
- if (see_both)
- monster_msg("%^s is unaffected!", t_name);
- }
- else
- {
- /* Heal */
- m_ptr->hp += (6 * r1);
- if (m_ptr->hp > m_ptr->maxhp) m_ptr->hp = m_ptr->maxhp;
+ case SF_BO_FIRE_IDX:
+ {
+ disturb_on_other();
+ if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
+ else monster_msg("%^s casts a fire bolt at %s.", m_name, t_name);
+ monst_bolt_monst(m_idx, y, x, GF_FIRE,
+ damroll(9, 8) + (rlev / 3));
+ break;
+ }
- /* Redraw (later) if needed */
- if (health_who == m_idx) p_ptr->redraw |= (PR_FRAME);
+ case SF_BO_COLD_IDX:
+ {
+ disturb_on_other();
+ if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
+ else monster_msg("%^s casts a frost bolt at %s.", m_name, t_name);
+ monst_bolt_monst(m_idx, y, x, GF_COLD,
+ damroll(6, 8) + (rlev / 3));
+ break;
+ }
- /* Special message */
- if (seen)
- {
- monster_msg("%^s appears healthier.", m_name);
- }
- }
- }
+ case SF_BO_POIS_IDX:
+ {
+ /* XXX XXX XXX */
+ break;
+ }
- wake_up = true;
- break;
- }
+ case SF_BO_NETH_IDX:
+ {
+ disturb_on_other();
+ if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
+ else monster_msg("%^s casts a nether bolt at %s.", m_name, t_name);
+ monst_bolt_monst(m_idx, y, x, GF_NETHER,
+ 30 + damroll(5, 5) + (rlev * 3) / 2);
+ break;
+ }
- case SF_MIND_BLAST_IDX:
- {
- disturb_on_other();
+ case SF_BO_WATE_IDX:
+ {
+ disturb_on_other();
+ if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
+ else monster_msg("%^s casts a water bolt at %s.", m_name, t_name);
+ monst_bolt_monst(m_idx, y, x, GF_WATER,
+ damroll(10, 10) + (rlev));
+ break;
+ }
- if (!seen)
- {
- /* */
- }
- else
- {
- monster_msg("%^s gazes intently at %s.", m_name, t_name);
- }
+ case SF_BO_MANA_IDX:
+ {
+ disturb_on_other();
+ if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
+ else monster_msg("%^s casts a mana bolt at %s.", m_name, t_name);
+ monst_bolt_monst(m_idx, y, x, GF_MANA,
+ randint(rlev * 7 / 2) + 50);
+ break;
+ }
- /* Attempt a saving throw */
- if ((tr_ptr->flags & RF_UNIQUE) ||
- (tr_ptr->flags & RF_NO_CONF) ||
- (t_ptr->level > randint((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10))
- {
- /* No obvious effect */
- if (see_t)
- {
- monster_msg("%^s is unaffected!", t_name);
- }
- }
- else
- {
- monster_msg("%^s is blasted by psionic energy.", t_name);
- t_ptr->confused += rand_int(4) + 4;
+ case SF_BO_PLAS_IDX:
+ {
+ disturb_on_other();
+ if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
+ else monster_msg("%^s casts a plasma bolt at %s.", m_name, t_name);
+ monst_bolt_monst(m_idx, y, x, GF_PLASMA,
+ 10 + damroll(8, 7) + (rlev));
+ break;
+ }
- mon_take_hit_mon(m_idx, t_idx, damroll(8, 8), " collapses, a mindless husk.");
- }
+ case SF_BO_ICEE_IDX:
+ {
+ disturb_on_other();
+ if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
+ else monster_msg("%^s casts an ice bolt at %s.", m_name, t_name);
+ monst_bolt_monst(m_idx, y, x, GF_ICE,
+ damroll(6, 6) + (rlev));
+ break;
+ }
- wake_up = true;
- break;
- }
+ case SF_MISSILE_IDX:
+ {
+ disturb_on_other();
+ if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
+ else monster_msg("%^s casts a magic missile at %s.", m_name, t_name);
+ monst_bolt_monst(m_idx, y, x, GF_MISSILE,
+ damroll(2, 6) + (rlev / 3));
+ break;
+ }
- case SF_BRAIN_SMASH_IDX:
+ case SF_SCARE_IDX:
+ {
+ disturb_on_other();
+ if (blind || !see_m) monster_msg("%^s mumbles, and you hear scary noises.", m_name);
+ else monster_msg("%^s casts a fearful illusion at %s.", m_name, t_name);
+ if (tr_ptr->flags & RF_NO_FEAR)
{
- disturb_on_other();
- if (!seen)
- {
- /* */
- }
- else
- {
- monster_msg("%^s gazes intently at %s.", m_name, t_name);
- }
-
- /* Attempt a saving throw */
- if ((tr_ptr->flags & RF_UNIQUE) ||
- (tr_ptr->flags & RF_NO_CONF) ||
- (t_ptr->level > randint((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10))
- {
- /* No obvious effect */
- if (see_t)
- {
- monster_msg("%^s is unaffected!", t_name);
- }
- }
- else
- {
- if (see_t)
- {
- monster_msg("%^s is blasted by psionic energy.", t_name);
- }
- t_ptr->confused += rand_int(4) + 4;
- t_ptr->mspeed -= rand_int(4) + 4;
- t_ptr->stunned += rand_int(4) + 4;
- mon_take_hit_mon(m_idx, t_idx, damroll(12, 15), " collapses, a mindless husk.");
- }
- wake_up = true;
- break;
+ if (see_t) monster_msg("%^s refuses to be frightened.", t_name);
}
-
- case SF_CAUSE_1_IDX:
+ else if (t_ptr->level > randint((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
{
- disturb_on_other();
- if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
- else monster_msg("%^s points at %s and curses.", m_name, t_name);
- if (t_ptr->level > randint((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
- {
-
- if (see_t) monster_msg("%^s resists!", t_name);
- }
- else
- {
- mon_take_hit_mon(m_idx, t_idx, damroll(3, 8), " is destroyed.");
- }
- wake_up = true;
- break;
+ if (see_t) monster_msg("%^s refuses to be frightened.", t_name);
}
-
- case SF_CAUSE_2_IDX:
+ else
{
- disturb_on_other();
- if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
- else monster_msg("%^s points at %s and curses horribly.", m_name, t_name);
- if (t_ptr->level > randint((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
- {
- if (see_t) monster_msg("%^s resists!", t_name);
- }
- else
- {
- mon_take_hit_mon(m_idx, t_idx, damroll(8, 8), " is destroyed.");
- }
- wake_up = true;
- break;
+ if (!(t_ptr->monfear) && see_t) monster_msg("%^s flees in terror!", t_name);
+ t_ptr->monfear += rand_int(4) + 4;
}
+ wake_up = true;
+ break;
+ }
- case SF_CAUSE_3_IDX:
+ case SF_BLIND_IDX:
+ {
+ disturb_on_other();
+ if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
+ else monster_msg("%^s casts a spell, burning %s%s eyes.", m_name, t_name,
+ (equals(t_name, "it") ? "s" : "'s"));
+ if (tr_ptr->flags & RF_NO_CONF) /* Simulate blindness with confusion */
{
- disturb_on_other();
- if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
- else monster_msg("%^s points at %s, incanting terribly!", m_name, t_name);
- if (t_ptr->level > randint((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
- {
- if (see_t) monster_msg("%^s resists!", t_name);
- }
- else
- {
- mon_take_hit_mon(m_idx, t_idx, damroll(10, 15), " is destroyed.");
- }
- wake_up = true;
- break;
+ if (see_t) monster_msg("%^s is unaffected.", t_name);
}
-
- case SF_CAUSE_4_IDX:
+ else if (t_ptr->level > randint((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
{
- disturb_on_other();
- if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
- else monster_msg("%^s points at %s, screaming the word 'DIE!'", m_name, t_name);
- if (t_ptr->level > randint((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
- {
- if (see_t) monster_msg("%^s resists!", t_name);
- }
- else
- {
- mon_take_hit_mon(m_idx, t_idx, damroll(15, 15), " is destroyed.");
- }
- wake_up = true;
- break;
+ if (see_t) monster_msg("%^s is unaffected.", t_name);
}
-
- case SF_BO_ACID_IDX:
+ else
{
- disturb_on_other();
- if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
- else monster_msg("%^s casts an acid bolt at %s.", m_name, t_name);
- monst_bolt_monst(m_idx, y, x, GF_ACID,
- damroll(7, 8) + (rlev / 3));
- break;
+ if (see_t) monster_msg("%^s is blinded!", t_name);
+ t_ptr->confused += 12 + (byte)rand_int(4);
}
+ wake_up = true;
+ break;
- case SF_BO_ELEC_IDX:
- {
- disturb_on_other();
- if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
- else monster_msg("%^s casts a lightning bolt at %s.", m_name, t_name);
- monst_bolt_monst(m_idx, y, x, GF_ELEC,
- damroll(4, 8) + (rlev / 3));
- break;
- }
+ }
- case SF_BO_FIRE_IDX:
+ case SF_CONF_IDX:
+ {
+ disturb_on_other();
+ if (blind || !see_m) monster_msg("%^s mumbles, and you hear puzzling noises.", m_name);
+ else monster_msg("%^s creates a mesmerising illusion in front of %s.", m_name, t_name);
+ if (tr_ptr->flags & RF_NO_CONF)
{
- disturb_on_other();
- if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
- else monster_msg("%^s casts a fire bolt at %s.", m_name, t_name);
- monst_bolt_monst(m_idx, y, x, GF_FIRE,
- damroll(9, 8) + (rlev / 3));
- break;
+ if (see_t) monster_msg("%^s disbelieves the feeble spell.", t_name);
}
-
- case SF_BO_COLD_IDX:
+ else if (t_ptr->level > randint((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
{
- disturb_on_other();
- if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
- else monster_msg("%^s casts a frost bolt at %s.", m_name, t_name);
- monst_bolt_monst(m_idx, y, x, GF_COLD,
- damroll(6, 8) + (rlev / 3));
- break;
+ if (see_t) monster_msg("%^s disbelieves the feeble spell.", t_name);
}
-
- case SF_BO_POIS_IDX:
+ else
{
- /* XXX XXX XXX */
- break;
+ if (see_t) monster_msg("%^s seems confused.", t_name);
+ t_ptr->confused += 12 + (byte)rand_int(4);
}
+ wake_up = true;
+ break;
+ }
- case SF_BO_NETH_IDX:
+ case SF_SLOW_IDX:
+ {
+ disturb_on_other();
+ if (!blind && see_either) monster_msg("%^s drains power from %s%s muscles.", m_name, t_name,
+ (equals(t_name, "it") ? "s" : "'s"));
+ if (tr_ptr->flags & RF_UNIQUE)
{
- disturb_on_other();
- if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
- else monster_msg("%^s casts a nether bolt at %s.", m_name, t_name);
- monst_bolt_monst(m_idx, y, x, GF_NETHER,
- 30 + damroll(5, 5) + (rlev * 3) / 2);
- break;
+ if (see_t) monster_msg("%^s is unaffected.", t_name);
}
-
- case SF_BO_WATE_IDX:
+ else if (t_ptr->level > randint((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
{
- disturb_on_other();
- if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
- else monster_msg("%^s casts a water bolt at %s.", m_name, t_name);
- monst_bolt_monst(m_idx, y, x, GF_WATER,
- damroll(10, 10) + (rlev));
- break;
+ if (see_t) monster_msg("%^s is unaffected.", t_name);
}
-
- case SF_BO_MANA_IDX:
+ else
{
- disturb_on_other();
- if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
- else monster_msg("%^s casts a mana bolt at %s.", m_name, t_name);
- monst_bolt_monst(m_idx, y, x, GF_MANA,
- randint(rlev * 7 / 2) + 50);
- break;
+ t_ptr->mspeed -= 10;
+ if (see_t) monster_msg("%^s starts moving slower.", t_name);
}
+ wake_up = true;
+ break;
+ }
- case SF_BO_PLAS_IDX:
+ case SF_HOLD_IDX:
+ {
+ disturb_on_other();
+ if (!blind && see_m) monster_msg("%^s stares intently at %s.", m_name, t_name);
+ if ((tr_ptr->flags & RF_UNIQUE) ||
+ (tr_ptr->flags & RF_NO_STUN))
{
- disturb_on_other();
- if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
- else monster_msg("%^s casts a plasma bolt at %s.", m_name, t_name);
- monst_bolt_monst(m_idx, y, x, GF_PLASMA,
- 10 + damroll(8, 7) + (rlev));
- break;
+ if (see_t) monster_msg("%^s is unaffected.", t_name);
}
-
- case SF_BO_ICEE_IDX:
+ else if (t_ptr->level > randint((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
{
- disturb_on_other();
- if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
- else monster_msg("%^s casts an ice bolt at %s.", m_name, t_name);
- monst_bolt_monst(m_idx, y, x, GF_ICE,
- damroll(6, 6) + (rlev));
- break;
+ if (see_t) monster_msg("%^s is unaffected.", t_name);
}
-
- case SF_MISSILE_IDX:
+ else
{
- disturb_on_other();
- if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
- else monster_msg("%^s casts a magic missile at %s.", m_name, t_name);
- monst_bolt_monst(m_idx, y, x, GF_MISSILE,
- damroll(2, 6) + (rlev / 3));
- break;
+ t_ptr->stunned += randint(4) + 4;
+ if (see_t) monster_msg("%^s is paralyzed!", t_name);
}
+ wake_up = true;
+ break;
+ }
- case SF_SCARE_IDX:
+ case SF_HASTE_IDX:
+ {
+ disturb_on_other();
+ if (blind || !see_m)
{
- disturb_on_other();
- if (blind || !see_m) monster_msg("%^s mumbles, and you hear scary noises.", m_name);
- else monster_msg("%^s casts a fearful illusion at %s.", m_name, t_name);
- if (tr_ptr->flags & RF_NO_FEAR)
- {
- if (see_t) monster_msg("%^s refuses to be frightened.", t_name);
- }
- else if (t_ptr->level > randint((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
- {
- if (see_t) monster_msg("%^s refuses to be frightened.", t_name);
- }
- else
- {
- if (!(t_ptr->monfear) && see_t) monster_msg("%^s flees in terror!", t_name);
- t_ptr->monfear += rand_int(4) + 4;
- }
- wake_up = true;
- break;
+ monster_msg("%^s mumbles.", m_name);
}
-
- case SF_BLIND_IDX:
+ else
{
- disturb_on_other();
- if (blind || !see_m) monster_msg("%^s mumbles.", m_name);
- else monster_msg("%^s casts a spell, burning %s%s eyes.", m_name, t_name,
- (equals(t_name, "it") ? "s" : "'s"));
- if (tr_ptr->flags & RF_NO_CONF) /* Simulate blindness with confusion */
- {
- if (see_t) monster_msg("%^s is unaffected.", t_name);
- }
- else if (t_ptr->level > randint((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
- {
- if (see_t) monster_msg("%^s is unaffected.", t_name);
- }
- else
- {
- if (see_t) monster_msg("%^s is blinded!", t_name);
- t_ptr->confused += 12 + (byte)rand_int(4);
- }
- wake_up = true;
- break;
-
+ monster_msg("%^s concentrates on %s body.", m_name, m_poss);
}
- case SF_CONF_IDX:
+ /* Allow quick speed increases to base+10 */
+ if (m_ptr->mspeed < m_ptr->speed + 10)
{
- disturb_on_other();
- if (blind || !see_m) monster_msg("%^s mumbles, and you hear puzzling noises.", m_name);
- else monster_msg("%^s creates a mesmerising illusion in front of %s.", m_name, t_name);
- if (tr_ptr->flags & RF_NO_CONF)
- {
- if (see_t) monster_msg("%^s disbelieves the feeble spell.", t_name);
- }
- else if (t_ptr->level > randint((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
- {
- if (see_t) monster_msg("%^s disbelieves the feeble spell.", t_name);
- }
- else
- {
- if (see_t) monster_msg("%^s seems confused.", t_name);
- t_ptr->confused += 12 + (byte)rand_int(4);
- }
- wake_up = true;
- break;
+ if (see_m) monster_msg("%^s starts moving faster.", m_name);
+ m_ptr->mspeed += 10;
}
- case SF_SLOW_IDX:
+ /* Allow small speed increases to base+20 */
+ else if (m_ptr->mspeed < m_ptr->speed + 20)
{
- disturb_on_other();
- if (!blind && see_either) monster_msg("%^s drains power from %s%s muscles.", m_name, t_name,
- (equals(t_name, "it") ? "s" : "'s"));
- if (tr_ptr->flags & RF_UNIQUE)
- {
- if (see_t) monster_msg("%^s is unaffected.", t_name);
- }
- else if (t_ptr->level > randint((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
- {
- if (see_t) monster_msg("%^s is unaffected.", t_name);
- }
- else
- {
- t_ptr->mspeed -= 10;
- if (see_t) monster_msg("%^s starts moving slower.", t_name);
- }
- wake_up = true;
- break;
+ if (see_m) monster_msg("%^s starts moving faster.", m_name);
+ m_ptr->mspeed += 2;
}
- case SF_HOLD_IDX:
+ break;
+ }
+
+ case SF_HAND_DOOM_IDX:
+ {
+ disturb_on_other();
+ if (!see_m) monster_msg("You hear someone invoke the Hand of Doom!");
+ else if (!blind) monster_msg("%^s invokes the Hand of Doom on %s.", m_name, t_name);
+ else
+ monster_msg ("You hear someone invoke the Hand of Doom!");
+ if (tr_ptr->flags & RF_UNIQUE)
{
- disturb_on_other();
- if (!blind && see_m) monster_msg("%^s stares intently at %s.", m_name, t_name);
- if ((tr_ptr->flags & RF_UNIQUE) ||
- (tr_ptr->flags & RF_NO_STUN))
- {
- if (see_t) monster_msg("%^s is unaffected.", t_name);
- }
- else if (t_ptr->level > randint((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
- {
- if (see_t) monster_msg("%^s is unaffected.", t_name);
- }
- else
- {
- t_ptr->stunned += randint(4) + 4;
- if (see_t) monster_msg("%^s is paralyzed!", t_name);
- }
- wake_up = true;
- break;
+ if (!blind && see_t) monster_msg("^%s is unaffected!", t_name);
}
-
- case SF_HASTE_IDX:
+ else
{
- disturb_on_other();
- if (blind || !see_m)
+ if (((m_ptr->level) + randint(20)) >
+ ((t_ptr->level) + 10 + randint(20)))
{
- monster_msg("%^s mumbles.", m_name);
+ t_ptr->hp = t_ptr->hp
+ - (((s32b) ((65 + randint(25)) * (t_ptr->hp))) / 100);
+ if (t_ptr->hp < 1) t_ptr->hp = 1;
}
else
{
- monster_msg("%^s concentrates on %s body.", m_name, m_poss);
+ if (see_t) monster_msg("%^s resists!", t_name);
}
+ }
- /* Allow quick speed increases to base+10 */
- if (m_ptr->mspeed < m_ptr->speed + 10)
- {
- if (see_m) monster_msg("%^s starts moving faster.", m_name);
- m_ptr->mspeed += 10;
- }
+ wake_up = true;
+ break;
+ }
- /* Allow small speed increases to base+20 */
- else if (m_ptr->mspeed < m_ptr->speed + 20)
- {
- if (see_m) monster_msg("%^s starts moving faster.", m_name);
- m_ptr->mspeed += 2;
- }
+ case SF_HEAL_IDX:
+ {
+ disturb_on_other();
- break;
+ /* Message */
+ if (blind || !see_m)
+ {
+ monster_msg("%^s mumbles.", m_name);
}
-
- case SF_HAND_DOOM_IDX:
+ else
{
- disturb_on_other();
- if (!see_m) monster_msg("You hear someone invoke the Hand of Doom!");
- else if (!blind) monster_msg("%^s invokes the Hand of Doom on %s.", m_name, t_name);
- else
- monster_msg ("You hear someone invoke the Hand of Doom!");
- if (tr_ptr->flags & RF_UNIQUE)
- {
- if (!blind && see_t) monster_msg("^%s is unaffected!", t_name);
- }
- else
- {
- if (((m_ptr->level) + randint(20)) >
- ((t_ptr->level) + 10 + randint(20)))
- {
- t_ptr->hp = t_ptr->hp
- - (((s32b) ((65 + randint(25)) * (t_ptr->hp))) / 100);
- if (t_ptr->hp < 1) t_ptr->hp = 1;
- }
- else
- {
- if (see_t) monster_msg("%^s resists!", t_name);
- }
- }
-
- wake_up = true;
- break;
+ monster_msg("%^s concentrates on %s wounds.", m_name, m_poss);
}
- case SF_HEAL_IDX:
+ /* Heal some */
+ m_ptr->hp += (rlev * 6);
+
+ /* Fully healed */
+ if (m_ptr->hp >= m_ptr->maxhp)
{
- disturb_on_other();
+ /* Fully healed */
+ m_ptr->hp = m_ptr->maxhp;
/* Message */
- if (blind || !see_m)
+ if (seen)
{
- monster_msg("%^s mumbles.", m_name);
+ monster_msg("%^s looks completely healed!", m_name);
}
else
{
- monster_msg("%^s concentrates on %s wounds.", m_name, m_poss);
+ monster_msg("%^s sounds completely healed!", m_name);
}
+ }
- /* Heal some */
- m_ptr->hp += (rlev * 6);
-
- /* Fully healed */
- if (m_ptr->hp >= m_ptr->maxhp)
+ /* Partially healed */
+ else
+ {
+ /* Message */
+ if (seen)
{
- /* Fully healed */
- m_ptr->hp = m_ptr->maxhp;
-
- /* Message */
- if (seen)
- {
- monster_msg("%^s looks completely healed!", m_name);
- }
- else
- {
- monster_msg("%^s sounds completely healed!", m_name);
- }
+ monster_msg("%^s looks healthier.", m_name);
}
-
- /* Partially healed */
else
{
- /* Message */
- if (seen)
- {
- monster_msg("%^s looks healthier.", m_name);
- }
- else
- {
- monster_msg("%^s sounds healthier.", m_name);
- }
+ monster_msg("%^s sounds healthier.", m_name);
}
+ }
- /* Redraw (later) if needed */
- if (health_who == m_idx) p_ptr->redraw |= (PR_FRAME);
+ /* Redraw (later) if needed */
+ if (health_who == m_idx) p_ptr->redraw |= (PR_FRAME);
+ /* Cancel fear */
+ if (m_ptr->monfear)
+ {
/* Cancel fear */
- if (m_ptr->monfear)
- {
- /* Cancel fear */
- m_ptr->monfear = 0;
+ m_ptr->monfear = 0;
- /* Message */
- if (see_m) monster_msg("%^s recovers %s courage.", m_name, m_poss);
- }
+ /* Message */
+ if (see_m) monster_msg("%^s recovers %s courage.", m_name, m_poss);
+ }
+ break;
+ }
+
+ case SF_BLINK_IDX:
+ {
+ disturb_on_other();
+ if (see_m) monster_msg("%^s blinks away.", m_name);
+ teleport_away(m_idx, 10);
+ break;
+ }
+
+ case SF_TPORT_IDX:
+ {
+ if (dungeon_flags & DF_NO_TELEPORT)
+ {
+ break; /* No teleport on special levels */
+ }
+ else
+ {
+ disturb_on_other();
+ if (see_m) monster_msg("%^s teleports away.", m_name);
+ teleport_away(m_idx, MAX_SIGHT * 2 + 5);
break;
}
+ }
- case SF_BLINK_IDX:
+ case SF_TELE_TO_IDX:
+ {
+ /* Not implemented */
+ break;
+ }
+
+ case SF_TELE_AWAY_IDX:
+ {
+ if (dungeon_flags & DF_NO_TELEPORT)
{
- disturb_on_other();
- if (see_m) monster_msg("%^s blinks away.", m_name);
- teleport_away(m_idx, 10);
break;
}
- case SF_TPORT_IDX:
+ bool_ resists_tele = FALSE;
+ disturb_on_other();
+ monster_msg("%^s teleports %s away.", m_name, t_name);
+
+ if (tr_ptr->flags & RF_RES_TELE)
{
- if (dungeon_flags & DF_NO_TELEPORT)
+ if (tr_ptr->flags & RF_UNIQUE)
{
- break; /* No teleport on special levels */
+ if (see_t)
+ {
+ monster_msg("%^s is unaffected!", t_name);
+ }
+ resists_tele = TRUE;
}
- else
+ else if (t_ptr->level > randint(100))
{
- disturb_on_other();
- if (see_m) monster_msg("%^s teleports away.", m_name);
- teleport_away(m_idx, MAX_SIGHT * 2 + 5);
- break;
+ if (see_t)
+ {
+ monster_msg("%^s resists!", t_name);
+ }
+ resists_tele = TRUE;
}
}
- case SF_TELE_TO_IDX:
+ if (!resists_tele)
{
- /* Not implemented */
- break;
+ teleport_away(t_idx, MAX_SIGHT * 2 + 5);
}
- case SF_TELE_AWAY_IDX:
- {
- if (dungeon_flags & DF_NO_TELEPORT)
- {
- break;
- }
-
- // Do it
- {
- bool_ resists_tele = FALSE;
- disturb_on_other();
- monster_msg("%^s teleports %s away.", m_name, t_name);
+ break;
+ }
+ case SF_TELE_LEVEL_IDX:
+ {
+ /* Not implemented */
+ break;
+ }
- if (tr_ptr->flags & RF_RES_TELE)
- {
- if (tr_ptr->flags & RF_UNIQUE)
- {
- if (see_t)
- {
- monster_msg("%^s is unaffected!", t_name);
- }
- resists_tele = TRUE;
- }
- else if (t_ptr->level > randint(100))
- {
- if (see_t)
- {
- monster_msg("%^s resists!", t_name);
- }
- resists_tele = TRUE;
- }
- }
+ case SF_DARKNESS_IDX:
+ {
+ disturb_on_other();
+ if (blind) monster_msg("%^s mumbles.", m_name);
+ else monster_msg("%^s gestures in shadow.", m_name);
+ if (seen)
+ monster_msg("%^s is surrounded by darkness.", t_name);
+ project(m_idx, 3, y, x, 0, GF_DARK_WEAK, PROJECT_GRID | PROJECT_KILL);
+ /* Lite up the room */
+ unlite_room(y, x);
+ break;
+ }
- if (!resists_tele)
- {
- teleport_away(t_idx, MAX_SIGHT * 2 + 5);
- }
- }
+ case SF_FORGET_IDX:
+ {
+ /* Not implemented */
+ break;
+ }
- break;
- }
+ case SF_S_ANIMAL_IDX:
+ {
+ do_summon("summons an animal!", 1, SUMMON_ANIMAL, SUMMON_ANIMAL, blind_msg_default);
+ break;
+ }
- case SF_TELE_LEVEL_IDX:
- {
- /* Not implemented */
- break;
- }
+ case SF_S_ANIMALS_IDX:
+ {
+ do_summon("summons some animals!", 4, SUMMON_ANIMAL, SUMMON_ANIMAL, blind_msg_default);
+ break;
+ }
- case SF_DARKNESS_IDX:
- {
- disturb_on_other();
- if (blind) monster_msg("%^s mumbles.", m_name);
- else monster_msg("%^s gestures in shadow.", m_name);
- if (seen)
- monster_msg("%^s is surrounded by darkness.", t_name);
- project(m_idx, 3, y, x, 0, GF_DARK_WEAK, PROJECT_GRID | PROJECT_KILL);
- /* Lite up the room */
- unlite_room(y, x);
- break;
- }
+ case SF_S_BUG_IDX:
+ {
+ do_summon("codes some software bugs.", 6, SUMMON_BUG, SUMMON_BUG, blind_msg_default);
+ break;
+ }
- case SF_FORGET_IDX:
- {
- /* Not implemented */
- break;
- }
+ case SF_S_RNG_IDX:
+ {
+ do_summon("codes some RNGs.", 6, SUMMON_RNG, SUMMON_RNG, blind_msg_default);
+ break;
+ }
- case SF_S_ANIMAL_IDX:
- {
- do_summon("summons an animal!", 1, SUMMON_ANIMAL, SUMMON_ANIMAL, blind_msg_default);
- break;
- }
+ case SF_S_THUNDERLORD_IDX:
+ {
+ do_summon("summons a Thunderlord!", 1, SUMMON_THUNDERLORD, SUMMON_THUNDERLORD, blind_msg_default);
+ break;
+ }
- case SF_S_ANIMALS_IDX:
- {
- do_summon("summons some animals!", 4, SUMMON_ANIMAL, SUMMON_ANIMAL, blind_msg_default);
- break;
- }
+ case SF_S_KIN_IDX:
+ {
+ // Describe the summons
+ char action[256];
+ sprintf(action,
+ "summons %s %s.",
+ m_poss,
+ (r_ptr->flags & RF_UNIQUE ? "minions" : "kin"));
+ // Force the right type of "kin"
+ summon_kin_type = r_ptr->d_char;
+ // Summon
+ do_summon(action, 6, SUMMON_KIN, SUMMON_KIN, blind_msg_default);
+ break;
+ }
- case SF_S_BUG_IDX:
- {
- do_summon("codes some software bugs.", 6, SUMMON_BUG, SUMMON_BUG, blind_msg_default);
- break;
- }
+ case SF_S_HI_DEMON_IDX:
+ {
+ do_summon("summons greater demons!", 8, SUMMON_HI_DEMON, SUMMON_HI_DEMON, blind_msg_default);
+ break;
+ }
- case SF_S_RNG_IDX:
- {
- do_summon("codes some RNGs.", 6, SUMMON_RNG, SUMMON_RNG, blind_msg_default);
- break;
- }
+ case SF_S_MONSTER_IDX:
+ {
+ do_summon("summons help!", 1, SUMMON_NO_UNIQUES, 0, blind_msg_default);
+ break;
+ }
- case SF_S_THUNDERLORD_IDX:
- {
- do_summon("summons a Thunderlord!", 1, SUMMON_THUNDERLORD, SUMMON_THUNDERLORD, blind_msg_default);
- break;
- }
+ case SF_S_MONSTERS_IDX:
+ {
+ do_summon("summons monsters!", 8, SUMMON_NO_UNIQUES, 0, blind_msg_default);
+ break;
+ }
- case SF_S_KIN_IDX:
- {
- // Describe the summons
- char action[256];
- sprintf(action,
- "summons %s %s.",
- m_poss,
- (r_ptr->flags & RF_UNIQUE ? "minions" : "kin"));
- // Force the right type of "kin"
- summon_kin_type = r_ptr->d_char;
- // Summon
- do_summon(action, 6, SUMMON_KIN, SUMMON_KIN, blind_msg_default);
- break;
- }
+ case SF_S_ANT_IDX:
+ {
+ do_summon("summons ants.", 6, SUMMON_ANT, SUMMON_ANT, blind_msg_default);
+ break;
+ }
- case SF_S_HI_DEMON_IDX:
- {
- do_summon("summons greater demons!", 8, SUMMON_HI_DEMON, SUMMON_HI_DEMON, blind_msg_default);
- break;
- }
+ case SF_S_SPIDER_IDX:
+ {
+ do_summon("summons spiders.", 6, SUMMON_SPIDER, SUMMON_SPIDER, blind_msg_default);
+ break;
+ }
- case SF_S_MONSTER_IDX:
- {
- do_summon("summons help!", 1, SUMMON_NO_UNIQUES, 0, blind_msg_default);
- break;
- }
+ case SF_S_HOUND_IDX:
+ {
+ do_summon("summons hounds.", 6, SUMMON_HOUND, SUMMON_HOUND, blind_msg_default);
+ break;
+ }
- case SF_S_MONSTERS_IDX:
- {
- do_summon("summons monsters!", 8, SUMMON_NO_UNIQUES, 0, blind_msg_default);
- break;
- }
+ case SF_S_HYDRA_IDX:
+ {
+ do_summon("summons hydras.", 6, SUMMON_HYDRA, SUMMON_HYDRA, blind_msg_default);
+ break;
+ }
- case SF_S_ANT_IDX:
- {
- do_summon("summons ants.", 6, SUMMON_ANT, SUMMON_ANT, blind_msg_default);
- break;
- }
+ case SF_S_ANGEL_IDX:
+ {
+ do_summon("summons an angel!", 1, SUMMON_ANGEL, SUMMON_ANGEL, blind_msg_default);
+ break;
+ }
- case SF_S_SPIDER_IDX:
- {
- do_summon("summons spiders.", 6, SUMMON_SPIDER, SUMMON_SPIDER, blind_msg_default);
- break;
- }
+ case SF_S_DEMON_IDX:
+ {
+ do_summon("summons a demon!", 1, SUMMON_DEMON, SUMMON_DEMON, blind_msg_default);
+ break;
+ }
- case SF_S_HOUND_IDX:
- {
- do_summon("summons hounds.", 6, SUMMON_HOUND, SUMMON_HOUND, blind_msg_default);
- break;
- }
+ case SF_S_UNDEAD_IDX:
+ {
+ do_summon("summons an undead adversary!", 1, SUMMON_UNDEAD, SUMMON_UNDEAD, blind_msg_default);
+ break;
+ }
- case SF_S_HYDRA_IDX:
- {
- do_summon("summons hydras.", 6, SUMMON_HYDRA, SUMMON_HYDRA, blind_msg_default);
- break;
- }
+ case SF_S_DRAGON_IDX:
+ {
+ do_summon("summons a dragon!", 1, SUMMON_DRAGON, SUMMON_DRAGON, blind_msg_default);
+ break;
+ }
- case SF_S_ANGEL_IDX:
- {
- do_summon("summons an angel!", 1, SUMMON_ANGEL, SUMMON_ANGEL, blind_msg_default);
- break;
- }
+ case SF_S_HI_UNDEAD_IDX:
+ {
+ summon_messages blind_msg {
+ "You hear a creepy thing appear nearby.",
+ "You hear many creepy things appear nearby."
+ };
+ do_summon("summons greater undead!", 8, SUMMON_HI_UNDEAD_NO_UNIQUES, SUMMON_HI_UNDEAD, blind_msg);
+ break;
+ }
- case SF_S_DEMON_IDX:
- {
- do_summon("summons a demon!", 1, SUMMON_DEMON, SUMMON_DEMON, blind_msg_default);
- break;
- }
+ case SF_S_HI_DRAGON_IDX:
+ {
+ summon_messages blind_msg {
+ "You hear many a powerful thing appear nearby.",
+ "You hear many powerful things appear nearby."
+ };
+ do_summon("summons ancient dragons!", 8, SUMMON_HI_DRAGON_NO_UNIQUES, SUMMON_HI_DRAGON, blind_msg);
+ break;
+ }
- case SF_S_UNDEAD_IDX:
- {
- do_summon("summons an undead adversary!", 1, SUMMON_UNDEAD, SUMMON_UNDEAD, blind_msg_default);
- break;
- }
+ case SF_S_WRAITH_IDX:
+ {
+ // No summoning Nazgul; see the remapping code above the switch.
+ assert(!friendly);
+ // Summon
+ summon_messages blind_msg {
+ "You hear an immortal being appear nearby.",
+ "You hear immortal beings appear nearby."
+ };
+ do_summon("summons a wraith!", 8, 0 /* not used */, SUMMON_WRAITH, blind_msg);
+ break;
+ }
- case SF_S_DRAGON_IDX:
+ case SF_S_UNIQUE_IDX:
+ {
+ // No summoning uniques; see the remapping code above the switch.
+ assert(!friendly);
+ // Interrupt
+ disturb_on_other();
+ // Message
+ if (blind || !see_m)
{
- do_summon("summons a dragon!", 1, SUMMON_DRAGON, SUMMON_DRAGON, blind_msg_default);
- break;
+ monster_msg("%^s mumbles.", m_name);
}
-
- case SF_S_HI_UNDEAD_IDX:
+ else
{
- summon_messages blind_msg {
- "You hear a creepy thing appear nearby.",
- "You hear many creepy things appear nearby."
- };
- do_summon("summons greater undead!", 8, SUMMON_HI_UNDEAD_NO_UNIQUES, SUMMON_HI_UNDEAD, blind_msg);
- break;
+ monster_msg("%^s magically summons special opponents!", m_name);
}
-
- case SF_S_HI_DRAGON_IDX:
+ // Summon
+ int count = 0;
+ for (int k = 0; k < 8; k++)
{
- summon_messages blind_msg {
- "You hear many a powerful thing appear nearby.",
- "You hear many powerful things appear nearby."
- };
- do_summon("summons ancient dragons!", 8, SUMMON_HI_DRAGON_NO_UNIQUES, SUMMON_HI_DRAGON, blind_msg);
- break;
+ count += summon_specific(m_ptr->fy, m_ptr->fx, rlev, SUMMON_UNIQUE);
}
-
- case SF_S_WRAITH_IDX:
+ for (int k = 0; k < 8; k++)
{
- // No summoning Nazgul; see the remapping code above the switch.
- assert(!friendly);
- // Summon
- summon_messages blind_msg {
- "You hear an immortal being appear nearby.",
- "You hear immortal beings appear nearby."
- };
- do_summon("summons a wraith!", 8, 0 /* not used */, SUMMON_WRAITH, blind_msg);
- break;
+ count += summon_specific(m_ptr->fy, m_ptr->fx, rlev, SUMMON_HI_UNDEAD);
}
-
- case SF_S_UNIQUE_IDX:
+ // Message
+ if (blind)
{
- // No summoning uniques; see the remapping code above the switch.
- assert(!friendly);
- // Interrupt
- disturb_on_other();
- // Message
- if (blind || !see_m)
- {
- monster_msg("%^s mumbles.", m_name);
- }
- else
- {
- monster_msg("%^s magically summons special opponents!", m_name);
- }
- // Summon
- int count = 0;
- for (int k = 0; k < 8; k++)
- {
- count += summon_specific(m_ptr->fy, m_ptr->fx, rlev, SUMMON_UNIQUE);
- }
- for (int k = 0; k < 8; k++)
+ if (count == 1)
{
- count += summon_specific(m_ptr->fy, m_ptr->fx, rlev, SUMMON_HI_UNDEAD);
+ monster_msg("You hear a powerful thing appear nearby.");
}
- // Message
- if (blind)
+ else if (count > 1)
{
- if (count == 1)
- {
- monster_msg("You hear a powerful thing appear nearby.");
- }
- else if (count > 1)
- {
- monster_msg("You hear many powerful things appear nearby.");
- }
+ monster_msg("You hear many powerful things appear nearby.");
}
- break;
}
+ break;
}
+ }
- if (wake_up)
- {
- t_ptr->csleep = 0;
- }
-
- /* A spell was cast */
- return true;
+ if (wake_up)
+ {
+ t_ptr->csleep = 0;
}
- /* No enemy found */
- return false;
+ /* A spell was cast */
+ return true;
}