diff options
Diffstat (limited to 'src/melee2.cc')
-rw-r--r-- | src/melee2.cc | 2653 |
1 files changed, 1329 insertions, 1324 deletions
diff --git a/src/melee2.cc b/src/melee2.cc index d769355a..3e697f7e 100644 --- a/src/melee2.cc +++ b/src/melee2.cc @@ -16,6 +16,7 @@ #include "cave.hpp" #include "cave_type.hpp" #include "cmd1.hpp" +#include "config.hpp" #include "dungeon_flag.hpp" #include "feature_flag.hpp" #include "feature_type.hpp" @@ -47,10 +48,16 @@ #include "util.hpp" #include "variable.hpp" #include "xtra2.hpp" +#include "z-form.hpp" #include "z-rand.hpp" +#include "z-term.hpp" +#include "z-util.hpp" +#include <boost/algorithm/string/predicate.hpp> #include <cassert> +using boost::algorithm::equals; + #define SPEAK_CHANCE 8 #define GRINDNOISE 20 @@ -61,7 +68,7 @@ * Based on mon_take_hit... all monster attacks on * other monsters should use */ -bool_ mon_take_hit_mon(int s_idx, int m_idx, int dam, bool_ *fear, cptr note) +bool mon_take_hit_mon(int s_idx, int m_idx, int dam, const char *note) { monster_type *m_ptr = &m_list[m_idx], *s_ptr = &m_list[s_idx]; @@ -92,7 +99,10 @@ bool_ mon_take_hit_mon(int s_idx, int m_idx, int dam, bool_ *fear, cptr note) /* Some monsters are immune to death */ auto const r_ptr = m_ptr->race(); - if (r_ptr->flags & RF_NO_DEATH) return FALSE; + if (r_ptr->flags & RF_NO_DEATH) + { + return false; + } /* Wake it up */ m_ptr->csleep = 0; @@ -145,7 +155,7 @@ bool_ mon_take_hit_mon(int s_idx, int m_idx, int dam, bool_ *fear, cptr note) if (!dive) dive = 1; /* Monster gains some xp */ - monster_gain_exp(s_idx, dive, FALSE); + monster_gain_exp(s_idx, dive); /* Monster lore skill allows gaining xp from pets */ if (get_skill(SKILL_LORE) && (s_ptr->status >= MSTATUS_PET)) @@ -193,24 +203,21 @@ bool_ mon_take_hit_mon(int s_idx, int m_idx, int dam, bool_ *fear, cptr note) /* Delete the monster */ delete_monster_idx(m_idx); - /* Not afraid */ - (*fear) = FALSE; - /* Monster is dead */ - return (TRUE); + return true; } } /* Apply fear */ - mon_handle_fear(m_ptr, dam, fear); + mon_handle_fear(m_ptr, dam, nullptr); /* Not dead yet */ - return (FALSE); + return false; } -void mon_handle_fear(monster_type *m_ptr, int dam, bool_ *fear) +void mon_handle_fear(monster_type *m_ptr, int dam, bool *fear) { assert(m_ptr != NULL); @@ -233,7 +240,10 @@ void mon_handle_fear(monster_type *m_ptr, int dam, bool_ *fear) m_ptr->monfear = 0; /* No more fear */ - (*fear) = FALSE; + if (fear != nullptr) + { + (*fear) = false; + } } } @@ -254,7 +264,10 @@ void mon_handle_fear(monster_type *m_ptr, int dam, bool_ *fear) ((dam >= m_ptr->hp) && (rand_int(100) < 80))) { /* Hack -- note fear */ - (*fear) = TRUE; + if (fear != nullptr) + { + (*fear) = true; + } /* XXX XXX XXX Hack -- Add some timed fear */ m_ptr->monfear = (randint(10) + @@ -297,7 +310,7 @@ void mon_handle_fear(monster_type *m_ptr, int dam, bool_ *fear) /* * Internal probability routine */ -static bool_ int_outof(std::shared_ptr<monster_race> r_ptr, int prob) +static bool int_outof(std::shared_ptr<monster_race> r_ptr, int prob) { /* Non-Smart monsters are half as "smart" */ if (!(r_ptr->flags & RF_SMART)) prob = prob / 2; @@ -544,7 +557,7 @@ static void remove_bad_spells(int m_idx, monster_spell_flag_set *spells_p) * Determine if there is a space near the player in which * a summoned creature can appear */ -static bool_ summon_possible(int y1, int x1) +static bool summon_possible(int y1, int x1) { int y, x; @@ -564,18 +577,14 @@ static bool_ summon_possible(int y1, int x1) if (cave[y][x].feat == FEAT_MINOR_GLYPH) continue; /* Nor on the between */ - if (cave[y][x].feat == FEAT_BETWEEN) return (FALSE); - - /* ...nor on the Pattern */ - if ((cave[y][x].feat >= FEAT_PATTERN_START) - && (cave[y][x].feat <= FEAT_PATTERN_XTRA2)) continue; + if (cave[y][x].feat == FEAT_BETWEEN) return false; /* Require empty floor grid in line of sight */ - if (cave_empty_bold(y, x) && los(y1, x1, y, x)) return (TRUE); + if (cave_empty_bold(y, x) && los(y1, x1, y, x)) return true; } } - return FALSE; + return false; } @@ -583,10 +592,10 @@ static bool_ summon_possible(int y1, int x1) /* * Determine if a bolt spell will hit the player. * - * This is exactly like "projectable", but it will return FALSE if a monster + * This is exactly like "projectable", but it will return false if a monster * is in the way. */ -static bool_ clean_shot(int y1, int x1, int y2, int x2) +static bool clean_shot(int y1, int x1, int y2, int x2) { int dist, y, x; @@ -606,14 +615,14 @@ static bool_ clean_shot(int y1, int x1, int y2, int x2) } /* Check for arrival at "final target" */ - if ((x == x2) && (y == y2)) return (TRUE); + if ((x == x2) && (y == y2)) return true; /* Calculate the new location */ mmove2(&y, &x, y1, x1, y2, x2); } /* Assume obstruction */ - return (FALSE); + return false; } @@ -893,7 +902,7 @@ static void monst_bolt_monst(int m_idx, int y, int x, int typ, int dam_hp) } -static void monster_msg(cptr fmt, ...) +static void monster_msg(const char *fmt, ...) { va_list vp; @@ -912,7 +921,7 @@ static void monster_msg(cptr fmt, ...) monster_msg_simple(buf); } -void monster_msg_simple(cptr s) +void monster_msg_simple(const char *s) { auto &messages = game->messages; @@ -952,1397 +961,1387 @@ static std::vector<monster_spell const *> extract_spells(monster_spell_flag_set * at another monster. */ int monst_spell_monst_spell = -1; -static bool_ monst_spell_monst(int m_idx) + +static bool monst_spell_monst(int m_idx) { static const monster_spell_flag_set SF_INT_MASK = compute_smart_mask(); - int y = 0, x = 0; - char m_name[80], t_name[80]; - char m_poss[80]; - char ddesc[80]; - monster_type *m_ptr = &m_list[m_idx]; /* Attacker */ - bool_ direct = TRUE; - bool_ wake_up = FALSE; - - /* Extract the blind-ness */ - bool_ blind = (p_ptr->blind ? TRUE : FALSE); - - /* Extract the "see-able-ness" */ - bool_ seen = (!blind && m_ptr->ml); - - bool_ see_m; - bool_ see_t; - bool_ see_either; - bool_ see_both; - - bool_ friendly = FALSE; + auto const &dungeon_flags = game->dungeon_flags; - if (is_friend(m_ptr) > 0) friendly = TRUE; + monster_type *m_ptr = &m_list[m_idx]; /* Attacker */ + bool wake_up = false; /* Cannot cast spells when confused */ - if (m_ptr->confused) return (FALSE); + if (m_ptr->confused) + { + return false; + } + + // Shorthand and/or optimization + auto const blind = p_ptr->blind; + auto const seen = (!blind && m_ptr->ml); + auto const friendly = (is_friend(m_ptr) > 0); /* Hack -- Extract the spell probability */ const auto r_ptr = m_ptr->race(); const int chance = (r_ptr->freq_inate + r_ptr->freq_spell) / 2; /* Not allowed to cast spells */ - if ((!chance) && (monst_spell_monst_spell == -1)) return (FALSE); + if ((!chance) && (monst_spell_monst_spell == -1)) + { + return false; + } - if ((rand_int(100) >= chance) && (monst_spell_monst_spell == -1)) return (FALSE); + if ((rand_int(100) >= chance) && (monst_spell_monst_spell == -1)) + { + return false; + } /* Make sure monster actually has a target */ if (m_ptr->target <= 0) { - return FALSE; + return false; } - { - int t_idx = m_ptr->target; + int t_idx = m_ptr->target; - monster_type *t_ptr = &m_list[t_idx]; - auto const tr_ptr = t_ptr->race(); + 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) return FALSE; + /* Hack -- no fighting >100 squares from player */ + if (t_ptr->cdis > MAX_RANGE) + { + return false; + } - /* Monster must be projectable */ - if (!projectable(m_ptr->fy, m_ptr->fx, t_ptr->fy, t_ptr->fx)) return FALSE; + /* Monster must be projectable */ + if (!projectable(m_ptr->fy, m_ptr->fx, t_ptr->fy, t_ptr->fx)) + { + return false; + } + + /* OK -- we-ve got a target */ + int const y = t_ptr->fy; + int const x = t_ptr->fx; - /* OK -- we-ve got a target */ - y = t_ptr->fy; - x = t_ptr->fx; + /* Extract the monster level */ + const int rlev = ((m_ptr->level >= 1) ? m_ptr->level : 1); - /* 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; - /* 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 -- allow "desperate" spells */ - if ((r_ptr->flags & RF_SMART) && - (m_ptr->hp < m_ptr->maxhp / 10) && - (rand_int(100) < 50)) + /* No spells left? */ + if ((!allowed_spells) && (monst_spell_monst_spell == -1)) { - /* Require intelligent spells */ - allowed_spells &= SF_INT_MASK; - - /* No spells left? */ - if ((!allowed_spells) && (monst_spell_monst_spell == -1)) return (FALSE); + return false; } + } - /* Extract spells */ - auto spell = extract_spells(allowed_spells); + /* Extract spells */ + auto spell = extract_spells(allowed_spells); - /* No spells left? */ - if (spell.empty()) return (FALSE); + /* No spells left? */ + if (spell.empty()) + { + return false; + } - /* Stop if player is dead or gone */ - if (!alive || death) return (FALSE); + /* Stop if player is dead or gone */ + if (!alive || death) + { + return false; + } - /* Handle "leaving" */ - if (p_ptr->leaving) return (FALSE); + /* Handle "leaving" */ + if (p_ptr->leaving) + { + return false; + } - /* Get the monster name (or "it") */ - monster_desc(m_name, m_ptr, 0x00); + /* Get the monster name (or "it") */ + char m_name[80]; + monster_desc(m_name, m_ptr, 0x00); - /* Get the monster possessive ("his"/"her"/"its") */ - monster_desc(m_poss, m_ptr, 0x22); + /* 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") */ - monster_desc(t_name, t_ptr, 0x00); + /* Get the target's name (or "it") */ + char t_name[80]; + monster_desc(t_name, t_ptr, 0x00); - /* Hack -- Get the "died from" name */ - monster_desc(ddesc, m_ptr, 0x88); + /* 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())]; + /* Choose a spell to cast */ + auto thrown_spell = spell[rand_int(spell.size())]; - /* Force a spell ? */ - if (monst_spell_monst_spell > -1) + /* 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) + { + monster_msg("You hear breathing noise."); + } + else if (blind) + { + monster_msg("%^s breathes.", m_name); + } + else { - thrown_spell = spell[monst_spell_monst_spell]; - monst_spell_monst_spell = -1; + 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); + }; - see_m = seen; - see_t = (!blind && t_ptr->ml); - see_either = (see_m || see_t); - see_both = (see_m && see_t); + /* Messages for summoning */ + struct summon_messages { + char const *singular; + char const *plural; + }; - /* Do a breath */ - auto do_breath = [&](char const *element, int gf, s32b max, int divisor) -> void { - // Interrupt - disturb_on_other(); - // Message - if (!see_either) + /* 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." + }; + + /* 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(); + + // Message + if (blind || !see_m) + { + monster_msg("%^s mumbles.", m_name); + } + else + { + monster_msg("%^s magically %s", m_name, action); + } + + // Do the actual summoning + int count = 0; + for (int k = 0; k < n; k++) + { + if (friendly) { - monster_msg("You hear breathing noise."); + count += summon_specific_friendly(m_ptr->fy, m_ptr->fx, rlev, friendly_type, true); } - else if (blind) + else if (!friendly) { - monster_msg("%^s breathes.", m_name); + count += summon_specific(m_ptr->fy, m_ptr->fx, rlev, hostile_type); } - else + } + // Message for blinded characters + if (blind) + { + if (count == 1) { - monster_msg("%^s breathes %s at %s.", m_name, element, t_name); + monster_msg(blind_msg.singular); } - // Breathe - monst_breath_monst(m_idx, y, x, gf, std::min(max, m_ptr->hp / divisor), 0); - }; + else if (count > 1) + { + monster_msg(blind_msg.plural); + } + } + }; - /* Messages for summoning */ - struct summon_messages { - char const *singular; - char const *plural; - }; + /* There's no summoning friendly uniques or Nazgul */ + auto spell_idx = thrown_spell->spell_idx; - /* 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." - }; + if (friendly) + { + 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 a summoning spell */ - auto do_summon = [&](char const *action, int n, int friendly_type, int hostile_type, summon_messages const &blind_msg) -> void { - // Interrupt + /* Spell effect */ + switch (spell_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; + } - // Message - if (blind || !see_m) - { - monster_msg("%^s mumbles.", m_name); - } - else - { - monster_msg("%^s magically %s", m_name, action); - } + case SF_MULTIPLY_IDX: + { + 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_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; + } - /* There's no summoning friendly uniques or Nazgul */ - auto spell_idx = thrown_spell->spell_idx; + 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; + } - if (friendly) + case SF_ARROW_2_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; - } + 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; } - /* Spell effect */ - switch (spell_idx) + case SF_ARROW_3_IDX: { - case SF_SHRIEK_IDX: - { - if (!direct) break; - 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; - } + disturb_on_other(); - case SF_MULTIPLY_IDX: - { - 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_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_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_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_ACID_IDX: + { + do_breath("acid", GF_ACID, 1600, 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_ELEC_IDX: + { + do_breath("lightning", GF_ELEC, 1600, 3); + break; + } - case SF_ARROW_3_IDX: - { - disturb_on_other(); + case SF_BR_FIRE_IDX: + { + do_breath("fire", GF_FIRE, 1600, 3); + 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_COLD_IDX: + { + do_breath("frost", GF_COLD, 1600, 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_POIS_IDX: + { + do_breath("gas", GF_POIS, 800, 3); + break; + } - case SF_BR_ACID_IDX: - { - do_breath("acid", GF_ACID, 1600, 3); - break; - } + case SF_BR_NETH_IDX: + { + do_breath("nether", GF_NETHER, 550, 6); + break; + } - case SF_BR_ELEC_IDX: - { - do_breath("lightning", GF_ELEC, 1600, 3); - break; - } + case SF_BR_LITE_IDX: + { + do_breath("light", GF_LITE, 400, 6); + break; + } - case SF_BR_FIRE_IDX: - { - do_breath("fire", GF_FIRE, 1600, 3); - break; - } + case SF_BR_DARK_IDX: + { + do_breath("darkness", GF_DARK, 400, 6); + break; + } - case SF_BR_COLD_IDX: - { - do_breath("frost", GF_COLD, 1600, 3); - break; - } + case SF_BR_CONF_IDX: + { + do_breath("confusion", GF_CONFUSION, 400, 6); + break; + } - case SF_BR_POIS_IDX: - { - do_breath("gas", GF_POIS, 800, 3); - break; - } + case SF_BR_SOUN_IDX: + { + do_breath("sound", GF_SOUND, 400, 6); + break; + } - case SF_BR_NETH_IDX: - { - do_breath("nether", GF_NETHER, 550, 6); - break; - } + case SF_BR_CHAO_IDX: + { + do_breath("chaos", GF_CHAOS, 600, 6); + break; + } - case SF_BR_LITE_IDX: - { - do_breath("light", GF_LITE, 400, 6); - break; - } + case SF_BR_DISE_IDX: + { + do_breath("disenchantment", GF_DISENCHANT, 500, 6); + break; + } - case SF_BR_DARK_IDX: - { - do_breath("darkness", GF_DARK, 400, 6); - break; - } + case SF_BR_NEXU_IDX: + { + do_breath("nexus", GF_NEXUS, 250, 3); + break; + } - case SF_BR_CONF_IDX: - { - do_breath("confusion", GF_CONFUSION, 400, 6); - break; - } + case SF_BR_TIME_IDX: + { + do_breath("time", GF_TIME, 150, 3); + break; + } - case SF_BR_SOUN_IDX: - { - do_breath("sound", GF_SOUND, 400, 6); - break; - } + case SF_BR_INER_IDX: + { + do_breath("inertia", GF_INERTIA, 200, 6); + break; + } - case SF_BR_CHAO_IDX: - { - do_breath("chaos", GF_CHAOS, 600, 6); - break; - } + case SF_BR_GRAV_IDX: + { + do_breath("gravity", GF_GRAVITY, 200, 3); + break; + } - case SF_BR_DISE_IDX: - { - do_breath("disenchantment", GF_DISENCHANT, 500, 6); - break; - } + case SF_BR_SHAR_IDX: + { + do_breath("shards", GF_SHARDS, 400, 6); + break; + } - case SF_BR_NEXU_IDX: - { - do_breath("nexus", GF_NEXUS, 250, 3); - break; - } + case SF_BR_PLAS_IDX: + { + do_breath("plasma", GF_PLASMA, 150, 6); + break; + } - case SF_BR_TIME_IDX: - { - do_breath("time", GF_TIME, 150, 3); - break; - } + case SF_BR_WALL_IDX: + { + do_breath("force", GF_FORCE, 200, 6); + break; + } - case SF_BR_INER_IDX: - { - do_breath("inertia", GF_INERTIA, 200, 6); - break; - } + case SF_BR_MANA_IDX: + { + do_breath("magical energy", GF_MANA, 250, 3); + break; + } - case SF_BR_GRAV_IDX: - { - do_breath("gravity", GF_GRAVITY, 200, 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_SHAR_IDX: + case SF_BR_NUKE_IDX: + { + do_breath("toxic waste", GF_NUKE, 800, 3); + 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_DISI_IDX: + { + do_breath("disintegration", GF_DISINTEGRATE, 300, 3); + 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_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_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_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_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_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_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_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_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("shards", GF_SHARDS, 400, 6); - break; + /* Basic message */ + monster_msg("%^s draws psychic energy from %s.", m_name, t_name); } - case SF_BR_PLAS_IDX: + /* Heal the monster */ + if (m_ptr->hp < m_ptr->maxhp) { - do_breath("plasma", GF_PLASMA, 150, 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_WALL_IDX: + wake_up = true; + break; + } + + case SF_MIND_BLAST_IDX: + { + disturb_on_other(); + + if (!seen) { - do_breath("force", GF_FORCE, 200, 6); - break; + /* */ } - - case SF_BR_MANA_IDX: + else { - do_breath("magical energy", GF_MANA, 250, 3); - break; + monster_msg("%^s gazes intently at %s.", m_name, t_name); } - case SF_BA_NUKE_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)) { - 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; + /* No obvious effect */ + if (see_t) + { + monster_msg("%^s is unaffected!", t_name); + } } - - case SF_BR_NUKE_IDX: + else { - do_breath("toxic waste", GF_NUKE, 800, 3); - 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_BA_CHAO_IDX: + wake_up = true; + break; + } + + case SF_BRAIN_SMASH_IDX: + { + disturb_on_other(); + if (!seen) { - 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_DISI_IDX: + else { - do_breath("disintegration", GF_DISINTEGRATE, 300, 3); - break; + monster_msg("%^s gazes intently at %s.", m_name, t_name); } - case SF_BA_ACID_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)) { - 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; + /* No obvious effect */ + if (see_t) + { + monster_msg("%^s is unaffected!", t_name); + } } - - case SF_BA_ELEC_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 lightning ball at %s.", m_name, t_name); - monst_breath_monst(m_idx, y, x, GF_ELEC, randint(rlev * 3 / 2) + 8, 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_FIRE_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 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_BA_COLD_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 frost ball at %s.", m_name, t_name); - monst_breath_monst(m_idx, y, x, GF_COLD, randint(rlev * 3 / 2) + 10, 2); - break; + mon_take_hit_mon(m_idx, t_idx, damroll(3, 8), " is destroyed."); } + wake_up = true; + break; + } - case SF_BA_POIS_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 stinking cloud at %s.", m_name, t_name); - monst_breath_monst(m_idx, y, x, GF_POIS, damroll(12, 2), 2); - break; + if (see_t) monster_msg("%^s resists!", t_name); } - - case SF_BA_NETH_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 nether ball at %s.", m_name, t_name); - monst_breath_monst(m_idx, y, x, GF_NETHER, (50 + damroll(10, 10) + rlev), 2); - break; + mon_take_hit_mon(m_idx, t_idx, damroll(8, 8), " is destroyed."); } + wake_up = true; + break; + } - case SF_BA_WATE_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 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; + if (see_t) monster_msg("%^s resists!", t_name); } - - case SF_BA_MANA_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 mana storm upon %s.", m_name, t_name); - monst_breath_monst(m_idx, y, x, GF_MANA, (rlev * 5) + damroll(10, 10), 4); - break; + mon_take_hit_mon(m_idx, t_idx, damroll(10, 15), " is destroyed."); } + wake_up = true; + break; + } - case SF_BA_DARK_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 darkness storm upon %s.", m_name, t_name); - monst_breath_monst(m_idx, y, x, GF_DARK, (rlev * 5) + damroll(10, 10), 4); - break; + if (see_t) monster_msg("%^s resists!", t_name); } - - case SF_DRAIN_MANA_IDX: + else { - /* Attack power */ - int r1 = (randint(rlev) / 2) + 1; + mon_take_hit_mon(m_idx, t_idx, damroll(15, 15), " is destroyed."); + } + wake_up = true; + break; + } - if (see_m) - { - /* Basic message */ - monster_msg("%^s draws psychic energy from %s.", m_name, t_name); - } + 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; + } - /* 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_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; + } - /* Redraw (later) if needed */ - if (health_who == m_idx) p_ptr->redraw |= (PR_FRAME); + 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; + } - /* Special message */ - if (seen) - { - monster_msg("%^s appears healthier.", m_name); - } - } - } + 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; + } - wake_up = TRUE; - break; - } + case SF_BO_POIS_IDX: + { + /* XXX XXX XXX */ + break; + } - case SF_MIND_BLAST_IDX: - { - if (!direct) 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; + } - 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 - { - bool_ fear; - 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), &fear, " 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) { - if (!direct) break; - 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 - { - bool_ fear; - 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), &fear, " 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) { - if (!direct) break; - 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 - { - bool_ fear; - mon_take_hit_mon(m_idx, t_idx, damroll(3, 8), &fear, " is destroyed."); - } - wake_up = TRUE; - break; + if (see_t) monster_msg("%^s refuses to be frightened.", t_name); } - - case SF_CAUSE_2_IDX: + else { - if (!direct) break; - 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 - { - bool_ fear; - mon_take_hit_mon(m_idx, t_idx, damroll(8, 8), &fear, " 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 */ { - if (!direct) break; - 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 - { - bool_ fear; - mon_take_hit_mon(m_idx, t_idx, damroll(10, 15), &fear, " 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) { - if (!direct) break; - 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 - { - bool_ fear; - mon_take_hit_mon(m_idx, t_idx, damroll(15, 15), &fear, " 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) { - if (!direct) break; - 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 { - if (!direct) break; - 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, - (!strcmp(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) { - if (!direct) break; - 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) { - if (!direct) break; - disturb_on_other(); - if (!blind && see_either) monster_msg("%^s drains power from %s%s muscles.", m_name, t_name, - (!strcmp(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) { - if (!direct) break; - 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 { - if (!direct) break; - 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; - } - - if (!direct) - { - break; - } - else - { - 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: - { - if (!direct) break; - 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; } void curse_equipment(int chance, int heavy_chance) { - bool_ changed = FALSE; + bool changed = false; object_type * o_ptr = &p_ptr->inventory[rand_range(INVEN_WIELD, INVEN_TOTAL - 1)]; - if (randint(100) > chance) return; + if (randint(100) > chance) + { + return; + } - if (!(o_ptr->k_idx)) return; + if (!o_ptr->k_ptr) + { + return; + } auto const flags = object_flags(o_ptr); - /* Extra, biased saving throw for blessed items */ if ((flags & TR_BLESSED) && (randint(888) > chance)) { char o_name[256]; - object_desc(o_name, o_ptr, FALSE, 0); + object_desc(o_name, o_ptr, false, 0); msg_format("Your %s resist%s cursing!", o_name, ((o_ptr->number > 1) ? "" : "s")); /* Hmmm -- can we wear multiple items? If not, this is unnecessary */ @@ -2353,17 +2352,15 @@ void curse_equipment(int chance, int heavy_chance) (o_ptr->name1 || o_ptr->name2 || (!o_ptr->artifact_name.empty()))) { if (!(flags & TR_HEAVY_CURSE)) - changed = TRUE; + changed = true; o_ptr->art_flags |= TR_HEAVY_CURSE; o_ptr->art_flags |= TR_CURSED; - o_ptr->ident |= IDENT_CURSED; } else { - if (!(o_ptr->ident & IDENT_CURSED)) - changed = TRUE; + if (!(o_ptr->art_flags & TR_CURSED)) + changed = true; o_ptr->art_flags |= TR_CURSED; - o_ptr->ident |= IDENT_CURSED; } if (changed) @@ -2379,23 +2376,28 @@ void curse_equipment(int chance, int heavy_chance) void curse_equipment_dg(int chance, int heavy_chance) { - bool_ changed = FALSE; + bool changed = false; object_type * o_ptr = &p_ptr->inventory[rand_range(INVEN_WIELD, INVEN_TOTAL - 1)]; - if (randint(100) > chance) return; + if (randint(100) > chance) + { + return; + } - if (!(o_ptr->k_idx)) return; + if (!o_ptr->k_ptr) + { + return; + } auto const flags = object_flags(o_ptr); - /* Extra, biased saving throw for blessed items */ if ((flags & TR_BLESSED) && (randint(888) > chance)) { char o_name[256]; - object_desc(o_name, o_ptr, FALSE, 0); + object_desc(o_name, o_ptr, false, 0); msg_format("Your %s resist%s cursing!", o_name, ((o_ptr->number > 1) ? "" : "s")); return; @@ -2405,19 +2407,17 @@ void curse_equipment_dg(int chance, int heavy_chance) (o_ptr->name1 || o_ptr->name2 || (!o_ptr->artifact_name.empty()))) { if (!(flags & TR_HEAVY_CURSE)) - changed = TRUE; + changed = true; o_ptr->art_flags |= TR_HEAVY_CURSE; o_ptr->art_flags |= TR_CURSED; o_ptr->art_flags |= TR_DG_CURSE; - o_ptr->ident |= IDENT_CURSED; } else { - if (!(o_ptr->ident & IDENT_CURSED)) - changed = TRUE; + if (!(flags & TR_CURSED)) + changed = true; o_ptr->art_flags |= TR_CURSED; o_ptr->art_flags |= TR_DG_CURSE; - o_ptr->ident |= IDENT_CURSED; } if (changed) @@ -2434,7 +2434,7 @@ void curse_equipment_dg(int chance, int heavy_chance) /* * Creatures can cast spells, shoot missiles, and breathe. * - * Returns "TRUE" if a spell (or whatever) was (successfully) cast. + * Returns "true" if a spell (or whatever) was (successfully) cast. * * XXX XXX XXX This function could use some work, but remember to * keep it as optimized as possible, while retaining generic code. @@ -2471,7 +2471,7 @@ void curse_equipment_dg(int chance, int heavy_chance) * Note the special "MFLAG_NICE" flag, which prevents a monster from using * any spell attacks until the player has had a single chance to move. */ -static bool_ make_attack_spell(int m_idx) +static bool make_attack_spell(int m_idx) { static const auto SF_BOLT_MASK = compute_bolt_mask(); static const auto SF_SUMMON_MASK = compute_summoning_mask(); @@ -2480,55 +2480,55 @@ static bool_ make_attack_spell(int m_idx) int chance, rlev, failrate; char m_name[80]; - bool_ no_inate = FALSE; + bool no_inate = false; /* Extract the blind-ness */ - bool_ blind = (p_ptr->blind ? TRUE : FALSE); + bool blind = (p_ptr->blind ? true : false); /* Get a pointer to the monster */ monster_type *m_ptr = &m_list[m_idx]; /* Extract the "see-able-ness" */ - bool_ seen = (!blind && m_ptr->ml); + bool seen = (!blind && m_ptr->ml); /* Target location */ if (m_ptr->target != 0) { - return FALSE; + return false; } int y = p_ptr->py; int x = p_ptr->px; /* Cannot cast spells when confused */ - if (m_ptr->confused) return (FALSE); + if (m_ptr->confused) return false; /* Cannot cast spells when nice */ - if (m_ptr->mflag & (MFLAG_NICE)) return (FALSE); - if (is_friend(m_ptr) >= 0) return (FALSE); + if (m_ptr->mflag & (MFLAG_NICE)) return false; + if (is_friend(m_ptr) >= 0) return false; /* Cannot attack the player if mortal and player fated to never die by the ... */ auto const r_ptr = m_ptr->race(); - if ((r_ptr->flags & RF_MORTAL) && (p_ptr->no_mortal)) return (FALSE); + if ((r_ptr->flags & RF_MORTAL) && (p_ptr->no_mortal)) return false; /* Hack -- Extract the spell probability */ chance = (r_ptr->freq_inate + r_ptr->freq_spell) / 2; /* Not allowed to cast spells */ - if (!chance) return (FALSE); + if (!chance) return false; /* Only do spells occasionally */ - if (rand_int(100) >= chance) return (FALSE); + if (rand_int(100) >= chance) return false; /* Sometimes forbid inate attacks (breaths) */ - if (rand_int(100) >= (chance * 2)) no_inate = TRUE; + if (rand_int(100) >= (chance * 2)) no_inate = true; /* Require projectable player */ { /* Check range */ - if (m_ptr->cdis > MAX_RANGE) return (FALSE); + if (m_ptr->cdis > MAX_RANGE) return false; /* Check path */ - if (!projectable(m_ptr->fy, m_ptr->fx, y, x)) return (FALSE); + if (!projectable(m_ptr->fy, m_ptr->fx, y, x)) return false; } /* Extract the monster level */ @@ -2552,14 +2552,14 @@ static bool_ make_attack_spell(int m_idx) allowed_spells &= SF_INT_MASK; /* No spells left? */ - if (!allowed_spells) return (FALSE); + if (!allowed_spells) return false; } /* Remove the "ineffective" spells */ remove_bad_spells(m_idx, &allowed_spells); /* No spells left */ - if (!allowed_spells) return (FALSE); + if (!allowed_spells) return false; /* Check for a clean bolt shot */ if ((allowed_spells & SF_BOLT_MASK) && @@ -2580,19 +2580,19 @@ static bool_ make_attack_spell(int m_idx) } /* No spells left */ - if (!allowed_spells) return (FALSE); + if (!allowed_spells) return false; /* Extract the "inate" spells */ auto spell = extract_spells(allowed_spells); /* No spells left */ - if (spell.empty()) return (FALSE); + if (spell.empty()) return false; /* Stop if player is dead or gone */ - if (!alive || death) return (FALSE); + if (!alive || death) return false; /* Stop if player is leaving */ - if (p_ptr->leaving) return (FALSE); + if (p_ptr->leaving) return false; /* Get the monster name (or "it") */ monster_desc(m_name, m_ptr, 0x00); @@ -2601,7 +2601,7 @@ static bool_ make_attack_spell(int m_idx) auto thrown_spell = choose_attack_spell(m_idx, spell); /* Abort if no spell was chosen */ - if (!thrown_spell) return (FALSE); + if (!thrown_spell) return false; /* Calculate spell failure rate */ failrate = 25 - (rlev + 3) / 4; @@ -2615,7 +2615,7 @@ static bool_ make_attack_spell(int m_idx) /* Message */ msg_format("%^s tries to cast a spell, but fails.", m_name); - return (TRUE); + return true; } /* Can the player disrupt its puny attempts? */ @@ -3814,7 +3814,7 @@ static bool_ make_attack_spell(int m_idx) } /* A spell was cast */ - return (TRUE); + return true; } @@ -3840,16 +3840,16 @@ static int mon_will_run(int m_idx) u32b p_val, m_val; /* Keep monsters from running too far away */ - if (m_ptr->cdis > MAX_SIGHT + 5) return (FALSE); + if (m_ptr->cdis > MAX_SIGHT + 5) return false; /* Friends don't run away */ - if (is_friend(m_ptr) >= 0) return (FALSE); + if (is_friend(m_ptr) >= 0) return false; /* All "afraid" monsters will run away */ - if (m_ptr->monfear) return (TRUE); + if (m_ptr->monfear) return true; /* Nearby monsters will not become terrified */ - if (m_ptr->cdis <= 5) return (FALSE); + if (m_ptr->cdis <= 5) return false; /* Examine player power (level) */ p_lev = p_ptr->lev; @@ -3858,8 +3858,8 @@ static int mon_will_run(int m_idx) m_lev = m_ptr->level + (m_idx & 0x08) + 25; /* Optimize extreme cases below */ - if (m_lev > p_lev + 4) return (FALSE); - if (m_lev + 4 <= p_lev) return (TRUE); + if (m_lev > p_lev + 4) return false; + if (m_lev + 4 <= p_lev) return true; /* Examine player health */ p_chp = p_ptr->chp; @@ -3874,10 +3874,10 @@ static int mon_will_run(int m_idx) m_val = (m_lev * m_mhp) + (m_chp << 2); /* div m_mhp */ /* Strong players scare strong monsters */ - if (p_val * m_mhp > m_val * p_mhp) return (TRUE); + if (p_val * m_mhp > m_val * p_mhp) return true; /* Assume no terror */ - return (FALSE); + return false; } @@ -3913,12 +3913,12 @@ static int mon_will_run(int m_idx) * but instead of heading directly for it, the monster should "swerve" * around the player so that he has a smaller chance of getting hit. */ -static bool_ get_fear_moves_aux(int m_idx, int *yp, int *xp) +static bool get_fear_moves_aux(int m_idx, int *yp, int *xp) { /* Monster flowing disabled */ if (!options->flow_by_sound) { - return (FALSE); + return false; } /* Monster location */ @@ -3934,13 +3934,13 @@ static bool_ get_fear_moves_aux(int m_idx, int *yp, int *xp) if (cave[fy][fx].when < cave[p_ptr->py][p_ptr->px].when) { /* No reason to attempt flowing */ - return (FALSE); + return false; } /* Monster is too far away to use flow information */ auto const r_ptr = m_ptr->race(); - if (cave[fy][fx].cost > MONSTER_FLOW_DEPTH) return (FALSE); - if (cave[fy][fx].cost > r_ptr->aaf) return (FALSE); + if (cave[fy][fx].cost > MONSTER_FLOW_DEPTH) return false; + if (cave[fy][fx].cost > r_ptr->aaf) return false; /* Loop state */ int when = 0; @@ -3985,14 +3985,14 @@ static bool_ get_fear_moves_aux(int m_idx, int *yp, int *xp) } /* No legal move (?) */ - if (!when) return (FALSE); + if (!when) return false; /* Find deltas */ (*yp) = fy - gy; (*xp) = fx - gx; /* Success */ - return (TRUE); + return true; } @@ -4007,9 +4007,9 @@ static bool_ get_fear_moves_aux(int m_idx, int *yp, int *xp) * This function may take lots of CPU time if lots of monsters are * fleeing. * -* Return TRUE if a safe location is available. +* Return true if a safe location is available. */ -static bool_ find_safety(int m_idx, int *yp, int *xp) +static bool find_safety(int m_idx, int *yp, int *xp) { monster_type *m_ptr = &m_list[m_idx]; @@ -4071,12 +4071,12 @@ static bool_ find_safety(int m_idx, int *yp, int *xp) (*xp) = fx - gx; /* Found safe place */ - return (TRUE); + return true; } } /* No safe place */ - return (FALSE); + return false; } @@ -4086,9 +4086,9 @@ static bool_ find_safety(int m_idx, int *yp, int *xp) * Pack monsters will use this to "ambush" the player and lure him out * of corridors into open space so they can swarm him. * - * Return TRUE if a good location is available. + * Return true if a good location is available. */ -static bool_ find_hiding(int m_idx, int *yp, int *xp) +static bool find_hiding(int m_idx, int *yp, int *xp) { monster_type *m_ptr = &m_list[m_idx]; @@ -4143,12 +4143,12 @@ static bool_ find_hiding(int m_idx, int *yp, int *xp) (*xp) = fx - gx; /* Found good place */ - return (TRUE); + return true; } } /* No good place */ - return (FALSE); + return false; } @@ -4157,24 +4157,40 @@ void find_corpse(monster_type *m_ptr, int *y, int *x) { auto const &r_info = game->edit_data.r_info; - int k, last = -1; + int last = -1; - for (k = 0; k < max_o_idx; k++) + for (int k = 0; k < max_o_idx; k++) { object_type *o_ptr = &o_list[k]; - if (!o_ptr->k_idx) continue; + if (!o_ptr->k_ptr) + { + continue; + } + + if (o_ptr->tval != TV_CORPSE) + { + continue; + } - if (o_ptr->tval != TV_CORPSE) continue; - if ((o_ptr->sval != SV_CORPSE_CORPSE) && (o_ptr->sval != SV_CORPSE_SKELETON)) continue; + if ((o_ptr->sval != SV_CORPSE_CORPSE) && (o_ptr->sval != SV_CORPSE_SKELETON)) + { + continue; + } auto rt_ptr = &r_info[o_ptr->pval2]; /* Cannot incarnate into a higher level monster */ - if (rt_ptr->level > m_ptr->level) continue; + if (rt_ptr->level > m_ptr->level) + { + continue; + } /* Must be in LOS */ - if (!los(m_ptr->fy, m_ptr->fx, o_ptr->iy, o_ptr->ix)) continue; + if (!los(m_ptr->fy, m_ptr->fx, o_ptr->iy, o_ptr->ix)) + { + continue; + } if (last != -1) { @@ -4246,7 +4262,7 @@ static void get_target_monster(int m_idx) /* * Choose "logical" directions for monster movement */ -static bool_ get_moves(int m_idx, int *mm) +static bool get_moves(int m_idx, int *mm) { monster_type *m_ptr = &m_list[m_idx]; @@ -4254,7 +4270,7 @@ static bool_ get_moves(int m_idx, int *mm) int y2 = p_ptr->py; int x2 = p_ptr->px; - bool_ done = FALSE; + bool done = false; /* Oups get nearer */ if ((is_friend(m_ptr) > 0) && (m_ptr->cdis > p_ptr->pet_follow_distance)) @@ -4336,7 +4352,7 @@ static bool_ get_moves(int m_idx, int *mm) { if (!los(m_ptr->fy, m_ptr->fx, y2, x2)) { - return (FALSE); + return false; } } @@ -4370,7 +4386,7 @@ static bool_ get_moves(int m_idx, int *mm) if ((room < 8) && (p_ptr->chp > ((p_ptr->mhp * 3) / 4))) { /* Find hiding place */ - if (find_hiding(m_idx, &y, &x)) done = TRUE; + if (find_hiding(m_idx, &y, &x)) done = true; } } @@ -4408,7 +4424,7 @@ static bool_ get_moves(int m_idx, int *mm) x = m_ptr->fx - x2; /* Done */ - done = TRUE; + done = true; } } @@ -4446,7 +4462,7 @@ static bool_ get_moves(int m_idx, int *mm) /* Check for no move */ - if (!x && !y) return (FALSE); + if (!x && !y) return false; /* Extract the "absolute distances" */ int ay = ABS(y); @@ -4615,7 +4631,7 @@ static bool_ get_moves(int m_idx, int *mm) /* Wants to move... */ - return (TRUE); + return true; } @@ -4633,21 +4649,20 @@ int check_hit2(int power, int level, int ac) i = (power + (level * 3)); /* Power and Level compete against Armor */ - if ((i > 0) && (randint(i) > ((ac * 3) / 4))) return (TRUE); + if ((i > 0) && (randint(i) > ((ac * 3) / 4))) return true; /* Assume miss */ - return (FALSE); + return false; } /* Monster attacks monster */ -static bool_ monst_attack_monst(int m_idx, int t_idx) +static bool monst_attack_monst(int m_idx, int t_idx) { char temp[80]; - bool_ blinked = FALSE; - bool_ touched = FALSE; - bool_ explode = FALSE; - bool_ fear = FALSE; + bool blinked = false; + bool touched = false; + bool explode = false; monster_type *t_ptr = &m_list[t_idx]; byte y_saver = t_ptr->fy; byte x_saver = t_ptr->fx; @@ -4658,7 +4673,7 @@ static bool_ monst_attack_monst(int m_idx, int t_idx) const auto tr_ptr = t_ptr->race(); /* Not allowed to attack */ - if (r_ptr->flags & RF_NEVER_BLOW) return FALSE; + if (r_ptr->flags & RF_NEVER_BLOW) return false; /* Total armor */ const int ac = t_ptr->ac; @@ -4679,7 +4694,7 @@ static bool_ monst_attack_monst(int m_idx, int t_idx) monster_desc(ddesc, m_ptr, 0x88); /* Assume no blink */ - blinked = FALSE; + blinked = false; if (!(m_ptr->ml || t_ptr->ml)) { @@ -4692,7 +4707,7 @@ static bool_ monst_attack_monst(int m_idx, int t_idx) int power = 0; int damage = 0; - cptr act = NULL; + const char *act = NULL; /* Extract the attack infomation */ int effect = m_ptr->blow[ap_cnt].effect; @@ -4735,49 +4750,49 @@ static bool_ monst_attack_monst(int m_idx, int t_idx) case RBM_HIT: { act = "hits %s."; - touched = TRUE; + touched = true; break; } case RBM_TOUCH: { act = "touches %s."; - touched = TRUE; + touched = true; break; } case RBM_PUNCH: { act = "punches %s."; - touched = TRUE; + touched = true; break; } case RBM_KICK: { act = "kicks %s."; - touched = TRUE; + touched = true; break; } case RBM_CLAW: { act = "claws %s."; - touched = TRUE; + touched = true; break; } case RBM_BITE: { act = "bites %s."; - touched = TRUE; + touched = true; break; } case RBM_STING: { act = "stings %s."; - touched = TRUE; + touched = true; break; } @@ -4790,92 +4805,92 @@ static bool_ monst_attack_monst(int m_idx, int t_idx) case RBM_BUTT: { act = "butts %s."; - touched = TRUE; + touched = true; break; } case RBM_CRUSH: { act = "crushes %s."; - touched = TRUE; + touched = true; break; } case RBM_ENGULF: { act = "engulfs %s."; - touched = TRUE; + touched = true; break; } case RBM_CHARGE: { act = "charges %s."; - touched = TRUE; + touched = true; break; } case RBM_CRAWL: { act = "crawls on %s."; - touched = TRUE; + touched = true; break; } case RBM_DROOL: { act = "drools on %s."; - touched = FALSE; + touched = false; break; } case RBM_SPIT: { act = "spits on %s."; - touched = FALSE; + touched = false; break; } case RBM_EXPLODE: { act = "explodes."; - explode = TRUE; - touched = FALSE; + explode = true; + touched = false; break; } case RBM_GAZE: { act = "gazes at %s."; - touched = FALSE; + touched = false; break; } case RBM_WAIL: { act = "wails at %s."; - touched = FALSE; + touched = false; break; } case RBM_SPORE: { act = "releases spores at %s."; - touched = FALSE; + touched = false; break; } case RBM_XXX4: { act = "projects XXX4's at %s."; - touched = FALSE; + touched = false; break; } case RBM_BEG: { act = "begs %s for money."; - touched = FALSE; + touched = false; t_ptr->csleep = 0; break; } @@ -4883,7 +4898,7 @@ static bool_ monst_attack_monst(int m_idx, int t_idx) case RBM_INSULT: { act = "insults %s."; - touched = FALSE; + touched = false; t_ptr->csleep = 0; break; } @@ -4891,7 +4906,7 @@ static bool_ monst_attack_monst(int m_idx, int t_idx) case RBM_MOAN: { act = "moans at %s."; - touched = FALSE; + touched = false; t_ptr->csleep = 0; break; } @@ -4899,7 +4914,7 @@ static bool_ monst_attack_monst(int m_idx, int t_idx) case RBM_SHOW: { act = "sings to %s."; - touched = FALSE; + touched = false; t_ptr->csleep = 0; break; } @@ -4965,7 +4980,7 @@ static bool_ monst_attack_monst(int m_idx, int t_idx) case RBE_EAT_GOLD: { pt = damage = 0; - if (randint(2) == 1) blinked = TRUE; + if (randint(2) == 1) blinked = true; break; } @@ -5075,7 +5090,7 @@ static bool_ monst_attack_monst(int m_idx, int t_idx) { if (m_ptr->ml || t_ptr->ml) { - blinked = FALSE; + blinked = false; monster_msg("%^s is suddenly very hot!", m_name); } project(t_idx, 0, m_ptr->fy, m_ptr->fx, @@ -5089,7 +5104,7 @@ static bool_ monst_attack_monst(int m_idx, int t_idx) { if (m_ptr->ml || t_ptr->ml) { - blinked = FALSE; + blinked = false; monster_msg("%^s gets zapped!", m_name); } project(t_idx, 0, m_ptr->fy, m_ptr->fx, @@ -5139,9 +5154,9 @@ static bool_ monst_attack_monst(int m_idx, int t_idx) if (explode) { - mon_take_hit_mon(m_idx, m_idx, m_ptr->hp + 1, &fear, " explodes into tiny shreds."); + mon_take_hit_mon(m_idx, m_idx, m_ptr->hp + 1, " explodes into tiny shreds."); - blinked = FALSE; + blinked = false; } @@ -5160,7 +5175,7 @@ static bool_ monst_attack_monst(int m_idx, int t_idx) teleport_away(m_idx, MAX_SIGHT * 2 + 5); } - return TRUE; + return true; } @@ -5170,7 +5185,7 @@ static bool_ monst_attack_monst(int m_idx, int t_idx) static u32b noise = 0L; /* Determine whether the player is invisible to a monster */ -static bool_ player_invis(monster_type * m_ptr) +static bool player_invis(monster_type * m_ptr) { const auto r_ptr = m_ptr->race(); s16b inv = p_ptr->invis; @@ -5231,7 +5246,7 @@ static bool_ player_invis(monster_type * m_ptr) * * A "direction" of "5" means "pick a random direction". */ -static void process_monster(int m_idx, bool_ is_frien) +static void process_monster(int m_idx) { auto const &f_info = game->edit_data.f_info; @@ -5240,7 +5255,7 @@ static void process_monster(int m_idx, bool_ is_frien) int mm[8]; monster_type *m_ptr = &m_list[m_idx]; - const bool_ inv = player_invis(m_ptr); + const bool inv = player_invis(m_ptr); auto const r_ptr = m_ptr->race(); if (r_ptr->flags & RF_DOPPLEGANGER) doppleganger = m_idx; @@ -5252,8 +5267,7 @@ static void process_monster(int m_idx, bool_ is_frien) if (d > m_ptr->bleeding) d = m_ptr->bleeding; /* Exit if the monster dies */ - bool_ xxx = FALSE; - if (mon_take_hit(m_idx, d, &xxx, " bleeds to death.")) return; + if (mon_take_hit(m_idx, d, nullptr, " bleeds to death.")) return; /* Hack -- Recover from bleeding */ if (m_ptr->bleeding > d) @@ -5292,8 +5306,7 @@ static void process_monster(int m_idx, bool_ is_frien) if (d < 1) d = 1; /* Exit if the monster dies */ - bool_ xxx = FALSE; - if (mon_take_hit(m_idx, d, &xxx, " dies of poison.")) return; + if (mon_take_hit(m_idx, d, nullptr, " dies of poison.")) return; /* Hack -- Recover from bleeding */ if (m_ptr->poisoned > d) @@ -5453,16 +5466,16 @@ static void process_monster(int m_idx, bool_ is_frien) } /* Do the monster get angry? */ - bool_ gets_angry = FALSE; + bool gets_angry = false; /* No one wants to be your friend if you're aggravating */ if ((m_ptr->status > MSTATUS_NEUTRAL) && (m_ptr->status < MSTATUS_COMPANION) && (p_ptr->aggravate) && !(r_ptr->flags & RF_PET)) - gets_angry = TRUE; + gets_angry = true; /* Paranoia... no friendly uniques outside wizard mode -- TY */ if ((m_ptr->status > MSTATUS_NEUTRAL) && (m_ptr->status < MSTATUS_COMPANION) && !(wizard) && (r_ptr->flags & RF_UNIQUE) && !(r_ptr->flags & RF_PET)) - gets_angry = TRUE; + gets_angry = true; if (gets_angry) { @@ -5570,13 +5583,13 @@ static void process_monster(int m_idx, bool_ is_frien) * Attempt to cast a spell at an enemy other than the player * (may slow the game a smidgeon, but I haven't noticed.) */ - hack_message_pain_may_silent = TRUE; + hack_message_pain_may_silent = true; if (monst_spell_monst(m_idx)) { - hack_message_pain_may_silent = FALSE; + hack_message_pain_may_silent = false; return; } - hack_message_pain_may_silent = FALSE; + hack_message_pain_may_silent = false; /* Hack -- Assume no movement */ @@ -5584,7 +5597,7 @@ static void process_monster(int m_idx, bool_ is_frien) mm[4] = mm[5] = mm[6] = mm[7] = 0; /* Confused -- 100% random */ - if (m_ptr->confused || (inv == TRUE && m_ptr->target == 0)) + if (m_ptr->confused || (inv == true && m_ptr->target == 0)) { /* Try four "random" directions */ mm[0] = mm[1] = mm[2] = mm[3] = 5; @@ -5627,13 +5640,13 @@ static void process_monster(int m_idx, bool_ is_frien) if (!c_ptr->m_idx) return; /* Assume nothing */ - bool_ do_turn = FALSE; - bool_ do_move = FALSE; - bool_ do_view = FALSE; + bool do_turn = false; + bool do_move = false; + bool do_view = false; /* Assume nothing */ - bool_ did_open_door = FALSE; - bool_ did_bash_door = FALSE; + bool did_open_door = false; + bool did_bash_door = false; /* Take a zero-terminated array of "directions" */ for (i = 0; mm[i]; i++) @@ -5659,7 +5672,7 @@ static void process_monster(int m_idx, bool_ is_frien) if (cave_floor_bold(ny, nx)) { /* Go ahead and move */ - do_move = TRUE; + do_move = true; } /* Hack -- check for Glyph of Warding */ @@ -5667,7 +5680,7 @@ static void process_monster(int m_idx, bool_ is_frien) !(r_ptr->flags & RF_NEVER_BLOW)) { /* Assume no move allowed */ - do_move = FALSE; + do_move = false; /* Break the ward */ if (randint(BREAK_GLYPH) < m_ptr->level) @@ -5685,14 +5698,14 @@ static void process_monster(int m_idx, bool_ is_frien) place_floor_convert_glass(ny, nx); /* Allow movement */ - do_move = TRUE; + do_move = true; } } /* Hack -- trees are obstacle */ else if ((cave[ny][nx].feat == FEAT_TREES) && (r_ptr->flags & RF_KILL_TREES)) { - do_move = TRUE; + do_move = true; /* Forget the tree */ c_ptr->info &= ~(CAVE_MARK); @@ -5704,13 +5717,13 @@ static void process_monster(int m_idx, bool_ is_frien) /* Hack -- player 'in' wall */ else if ((ny == p_ptr->py) && (nx == p_ptr->px)) { - do_move = TRUE; + do_move = true; } else if (c_ptr->m_idx) { /* Possibly a monster to attack */ - do_move = TRUE; + do_move = true; } /* Permanent wall */ @@ -5724,28 +5737,28 @@ static void process_monster(int m_idx, bool_ is_frien) else if ((f_info[c_ptr->feat].flags & FF_CAN_LEVITATE) && (r_ptr->flags & RF_CAN_FLY)) { /* Pass through walls/doors/rubble */ - do_move = TRUE; + do_move = true; } /* Some monsters can fly */ else if ((f_info[c_ptr->feat].flags & FF_CAN_FLY) && (r_ptr->flags & RF_CAN_FLY)) { /* Pass through trees/... */ - do_move = TRUE; + do_move = true; } /* Monster moves through walls (and doors) */ else if ((f_info[c_ptr->feat].flags & FF_CAN_PASS) && (r_ptr->flags & RF_PASS_WALL)) { /* Pass through walls/doors/rubble */ - do_move = TRUE; + do_move = true; } /* Monster destroys walls (and doors) */ else if ((f_info[c_ptr->feat].flags & FF_CAN_PASS) && (r_ptr->flags & RF_KILL_WALL)) { /* Eat through walls/doors/rubble */ - do_move = TRUE; + do_move = true; if (randint(GRINDNOISE) == 1) { @@ -5759,14 +5772,14 @@ static void process_monster(int m_idx, bool_ is_frien) cave_set_feat(ny, nx, FEAT_FLOOR); /* Note changes to viewable region */ - if (player_has_los_bold(ny, nx)) do_view = TRUE; + if (player_has_los_bold(ny, nx)) do_view = true; } /* Monster moves through walls (and doors) */ else if ((f_info[c_ptr->feat].flags & FF_CAN_PASS) && (r_ptr->flags & RF_PASS_WALL)) { /* Pass through walls/doors/rubble */ - do_move = TRUE; + do_move = true; } /* Monster moves through webs */ @@ -5774,7 +5787,7 @@ static void process_monster(int m_idx, bool_ is_frien) (r_ptr->flags & RF_SPIDER)) { /* Pass through webs */ - do_move = TRUE; + do_move = true; } /* Handle doors and secret doors */ @@ -5782,10 +5795,10 @@ static void process_monster(int m_idx, bool_ is_frien) (c_ptr->feat <= FEAT_DOOR_TAIL)) || (c_ptr->feat == FEAT_SECRET)) { - bool_ may_bash = TRUE; + bool may_bash = true; /* Take a turn */ - do_turn = TRUE; + do_turn = true; if ((r_ptr->flags & RF_OPEN_DOOR) && ((is_friend(m_ptr) <= 0) || p_ptr->pet_open_doors)) @@ -5795,10 +5808,10 @@ static void process_monster(int m_idx, bool_ is_frien) (c_ptr->feat == FEAT_SECRET)) { /* The door is open */ - did_open_door = TRUE; + did_open_door = true; /* Do not bash the door */ - may_bash = FALSE; + may_bash = false; } /* Locked doors (not jammed) */ @@ -5816,7 +5829,7 @@ static void process_monster(int m_idx, bool_ is_frien) cave_set_feat(ny, nx, FEAT_DOOR_HEAD + 0x00); /* Do not bash the door */ - may_bash = FALSE; + may_bash = false; } } } @@ -5843,10 +5856,10 @@ static void process_monster(int m_idx, bool_ is_frien) } /* The door was bashed open */ - did_bash_door = TRUE; + did_bash_door = true; /* Hack -- fall into doorway */ - do_move = TRUE; + do_move = true; } } @@ -5870,14 +5883,14 @@ static void process_monster(int m_idx, bool_ is_frien) } /* Handle viewable doors */ - if (player_has_los_bold(ny, nx)) do_view = TRUE; + if (player_has_los_bold(ny, nx)) do_view = true; } } else if (do_move && (c_ptr->feat == FEAT_MINOR_GLYPH) && !(r_ptr->flags & RF_NEVER_BLOW)) { /* Assume no move allowed */ - do_move = FALSE; + do_move = false; /* Break the ward */ if (randint(BREAK_MINOR_GLYPH) < m_ptr->level) @@ -5902,7 +5915,7 @@ static void process_monster(int m_idx, bool_ is_frien) place_floor_convert_glass(ny, nx); /* Allow movement */ - do_move = TRUE; + do_move = true; } } @@ -5925,17 +5938,17 @@ static void process_monster(int m_idx, bool_ is_frien) { ny = oy + ddy[d]; nx = ox + ddx[d]; - do_move = FALSE; + do_move = false; } else { m_ptr->hp -= distance(ny, nx, oy, ox) * 2; - do_move = TRUE; + do_move = true; } } else { - do_move = TRUE; + do_move = true; } } @@ -5944,15 +5957,15 @@ static void process_monster(int m_idx, bool_ is_frien) { if (inscription_info[c_ptr->inscription].when & INSCRIP_EXEC_MONST_WALK) { - bool_ t; + bool t; t = execute_inscription(c_ptr->inscription, ny, nx); if (!t && do_move) { /* Hack -- attack the player even if on the inscription */ if ((ny == p_ptr->py) && (nx == p_ptr->px)) - do_move = TRUE; + do_move = true; else - do_move = FALSE; + do_move = false; } } } @@ -5962,7 +5975,7 @@ static void process_monster(int m_idx, bool_ is_frien) (r_ptr->flags & RF_NEVER_BLOW)) { /* Do not move */ - do_move = FALSE; + do_move = false; } /* The player is in the way. Attack him. */ @@ -5972,20 +5985,12 @@ static void process_monster(int m_idx, bool_ is_frien) make_attack_normal(m_idx, 1); /* Do not move */ - do_move = FALSE; + do_move = false; /* Took a turn */ - do_turn = TRUE; + do_turn = true; } - if ((cave[ny][nx].feat >= FEAT_PATTERN_START) && - (cave[ny][nx].feat <= FEAT_PATTERN_XTRA2) && - do_turn == FALSE) - { - do_move = FALSE; - } - - /* A monster is in the way */ if (do_move && c_ptr->m_idx) { @@ -5993,7 +5998,7 @@ static void process_monster(int m_idx, bool_ is_frien) monster_type *m2_ptr = &m_list[c_ptr->m_idx]; /* Assume no movement */ - do_move = FALSE; + do_move = false; /* Kill weaker monsters */ if ((r_ptr->flags & RF_KILL_BODY) && @@ -6008,7 +6013,7 @@ static void process_monster(int m_idx, bool_ is_frien) (is_friend(m2_ptr) <= 0)) { /* Allow movement */ - do_move = TRUE; + do_move = true; /* Kill the monster */ delete_monster(ny, nx); @@ -6020,17 +6025,17 @@ static void process_monster(int m_idx, bool_ is_frien) /* Attack 'enemies' */ else if (is_enemy(m_ptr, m2_ptr) || m_ptr->confused) { - do_move = FALSE; + do_move = false; /* attack */ if (m2_ptr->r_idx && (m2_ptr->hp >= 0)) { - hack_message_pain_may_silent = TRUE; + hack_message_pain_may_silent = true; if (monst_attack_monst(m_idx, c_ptr->m_idx)) { - hack_message_pain_may_silent = FALSE; + hack_message_pain_may_silent = false; return; } - hack_message_pain_may_silent = FALSE; + hack_message_pain_may_silent = false; } } @@ -6040,7 +6045,7 @@ static void process_monster(int m_idx, bool_ is_frien) (cave_floor_bold(m_ptr->fy, m_ptr->fx))) { /* Allow movement */ - do_move = TRUE; + do_move = true; } } @@ -6053,14 +6058,14 @@ static void process_monster(int m_idx, bool_ is_frien) if (do_move && !monster_can_cross_terrain(c_ptr->feat, r_ptr)) { /* Assume no move allowed */ - do_move = FALSE; + do_move = false; } /* Some monsters never move */ if (do_move && (r_ptr->flags & RF_NEVER_MOVE)) { /* Do not move */ - do_move = FALSE; + do_move = false; } @@ -6069,7 +6074,7 @@ static void process_monster(int m_idx, bool_ is_frien) if (do_move) { /* Take a turn */ - do_turn = TRUE; + do_turn = true; /* Hack -- Update the old location */ cave[oy][ox].m_idx = c_ptr->m_idx; @@ -6082,7 +6087,7 @@ static void process_monster(int m_idx, bool_ is_frien) y_ptr->fx = ox; /* Update the old monster */ - update_mon(c_ptr->m_idx, TRUE); + update_mon(c_ptr->m_idx, true); /* Wake up the moved monster */ m_list[c_ptr->m_idx].csleep = 0; @@ -6103,7 +6108,7 @@ static void process_monster(int m_idx, bool_ is_frien) m_ptr->fx = nx; /* Update the monster */ - update_mon(m_idx, TRUE); + update_mon(m_idx, true); /* Redraw the old grid */ lite_spot(oy, ox); @@ -6147,7 +6152,8 @@ static void process_monster(int m_idx, bool_ is_frien) if ((o_ptr->tval == TV_CORPSE) && (r_ptr->flags & RF_POSSESSOR) && ((o_ptr->sval == SV_CORPSE_CORPSE) || (o_ptr->sval == SV_CORPSE_SKELETON))) { - if (ai_possessor(m_idx, this_o_idx)) return; + ai_possessor(m_idx, this_o_idx); + return; } /* Take or Kill objects on the floor */ @@ -6164,7 +6170,7 @@ static void process_monster(int m_idx, bool_ is_frien) auto const flags = object_flags(o_ptr); /* Acquire the object name */ - object_desc(o_name, o_ptr, TRUE, 3); + object_desc(o_name, o_ptr, true, 3); /* Acquire the monster name */ monster_desc(m_name, m_ptr, 0x04); @@ -6214,7 +6220,7 @@ static void process_monster(int m_idx, bool_ is_frien) excise_object_idx(this_o_idx); /* Forget mark */ - o_ptr->marked = FALSE; + o_ptr->marked = false; /* Forget location */ o_ptr->iy = o_ptr->ix = 0; @@ -6329,7 +6335,6 @@ void summon_maint(int m_idx) /* Well, then I'll take my wages from you. */ p_ptr->maintain_sum += cost; } - return; } @@ -6372,8 +6377,8 @@ void process_monsters() int i, e; int fx, fy; - bool_ test; - bool_ is_frien = FALSE; + bool test; + bool is_frien = false; monster_type *m_ptr; @@ -6443,23 +6448,23 @@ void process_monsters() /* Assume no move */ - test = FALSE; + test = false; /* Control monster aint affected by distance */ if (p_ptr->control == i) { - test = TRUE; + test = true; } /* No free upkeep on partial summons just because they're out * of line of sight. */ - else if (m_ptr->mflag & MFLAG_PARTIAL) test = TRUE; + else if (m_ptr->mflag & MFLAG_PARTIAL) test = true; /* Handle "sensing radius" */ else if (m_ptr->cdis <= r_ptr->aaf) { /* We can "sense" the player */ - test = TRUE; + test = true; } /* Handle "sight" and "aggravation" */ @@ -6468,7 +6473,7 @@ void process_monsters() p_ptr->aggravate)) { /* We can "see" or "feel" the player */ - test = TRUE; + test = true; } /* Hack -- Monsters can "smell" the player from far away */ @@ -6479,11 +6484,11 @@ void process_monsters() (cave[fy][fx].cost < r_ptr->aaf)) { /* We can "smell" the player */ - test = TRUE; + test = true; } /* Running away wont save them ! */ - if (m_ptr->poisoned || m_ptr->bleeding) test = TRUE; + if (m_ptr->poisoned || m_ptr->bleeding) test = true; /* Do nothing */ if (!test) continue; @@ -6491,10 +6496,10 @@ void process_monsters() /* Save global index */ hack_m_idx = i; - if (is_friend(m_ptr) > 0) is_frien = TRUE; + if (is_friend(m_ptr) > 0) is_frien = true; /* Process the monster */ - process_monster(i, is_frien); + process_monster(i); /* Hack -- notice death or departure */ if (!alive || death) break; |