OSDN Git Service

[Refactor] #39963 Separated effect_monster_away_evil() from switch_effects_monster()
authorHourier <hourier@users.sourceforge.jp>
Sat, 2 May 2020 14:38:17 +0000 (23:38 +0900)
committerHourier <hourier@users.sourceforge.jp>
Sat, 2 May 2020 14:38:17 +0000 (23:38 +0900)
src/effect/effect-monster-switcher.c

index 2a24a5f..b309ba9 100644 (file)
@@ -143,6 +143,115 @@ gf_switch_result effect_monster_kill_wall(player_type *caster_ptr, effect_monste
 }
 
 
 }
 
 
+gf_switch_result effect_monster_away_undead(player_type *caster_ptr, effect_monster_type *em_ptr)
+{
+       if (em_ptr->r_ptr->flags3 & (RF3_UNDEAD))
+       {
+               bool resists_tele = FALSE;
+
+               if (em_ptr->r_ptr->flagsr & RFR_RES_TELE)
+               {
+                       if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (em_ptr->r_ptr->flagsr & RFR_RES_ALL))
+                       {
+                               if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
+                               em_ptr->note = _("には効果がなかった。", " is unaffected.");
+                               resists_tele = TRUE;
+                       }
+                       else if (em_ptr->r_ptr->level > randint1(100))
+                       {
+                               if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
+                               em_ptr->note = _("には耐性がある!", " resists!");
+                               resists_tele = TRUE;
+                       }
+               }
+
+               if (!resists_tele)
+               {
+                       if (em_ptr->seen) em_ptr->obvious = TRUE;
+                       if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
+                       em_ptr->do_dist = em_ptr->dam;
+               }
+       }
+       else
+       {
+               em_ptr->skipped = TRUE;
+       }
+
+       em_ptr->dam = 0;
+       return GF_SWITCH_CONTINUE;
+}
+
+
+gf_switch_result effect_monster_away_evil(player_type *caster_ptr, effect_monster_type *em_ptr)
+{
+       if (em_ptr->r_ptr->flags3 & (RF3_EVIL))
+       {
+               bool resists_tele = FALSE;
+
+               if (em_ptr->r_ptr->flagsr & RFR_RES_TELE)
+               {
+                       if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (em_ptr->r_ptr->flagsr & RFR_RES_ALL))
+                       {
+                               if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
+                               em_ptr->note = _("には効果がなかった。", " is unaffected.");
+                               resists_tele = TRUE;
+                       }
+                       else if (em_ptr->r_ptr->level > randint1(100))
+                       {
+                               if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
+                               em_ptr->note = _("には耐性がある!", " resists!");
+                               resists_tele = TRUE;
+                       }
+               }
+
+               if (!resists_tele)
+               {
+                       if (em_ptr->seen) em_ptr->obvious = TRUE;
+                       if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_EVIL);
+                       em_ptr->do_dist = em_ptr->dam;
+               }
+       }
+       else
+       {
+               em_ptr->skipped = TRUE;
+       }
+
+       em_ptr->dam = 0;
+       return GF_SWITCH_CONTINUE;
+}
+
+
+gf_switch_result effect_monster_away_all(player_type *caster_ptr, effect_monster_type *em_ptr)
+{
+       bool resists_tele = FALSE;
+       if (em_ptr->r_ptr->flagsr & RFR_RES_TELE)
+       {
+               if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (em_ptr->r_ptr->flagsr & RFR_RES_ALL))
+               {
+                       if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
+                       em_ptr->note = _("には効果がなかった。", " is unaffected.");
+                       resists_tele = TRUE;
+               }
+               else if (em_ptr->r_ptr->level > randint1(100))
+               {
+                       if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
+                       em_ptr->note = _("には耐性がある!", " resists!");
+                       resists_tele = TRUE;
+               }
+       }
+
+       if (!resists_tele)
+       {
+               if (em_ptr->seen) em_ptr->obvious = TRUE;
+
+               em_ptr->do_dist = em_ptr->dam;
+       }
+
+       em_ptr->dam = 0;
+       return GF_SWITCH_CONTINUE;
+}
+
+
 /*!
  * @brief 魔法の効果によって様々なメッセーを出力したり与えるダメージの増減を行ったりする
  * @param em_ptr モンスター効果構造体への参照ポインタ
 /*!
  * @brief 魔法の効果によって様々なメッセーを出力したり与えるダメージの増減を行ったりする
  * @param em_ptr モンスター効果構造体への参照ポインタ
@@ -265,108 +374,11 @@ gf_switch_result switch_effects_monster(player_type *caster_ptr, effect_monster_
        case GF_KILL_WALL:
                return effect_monster_kill_undead(caster_ptr, em_ptr);
        case GF_AWAY_UNDEAD:
        case GF_KILL_WALL:
                return effect_monster_kill_undead(caster_ptr, em_ptr);
        case GF_AWAY_UNDEAD:
-       {
-               if (em_ptr->r_ptr->flags3 & (RF3_UNDEAD))
-               {
-                       bool resists_tele = FALSE;
-
-                       if (em_ptr->r_ptr->flagsr & RFR_RES_TELE)
-                       {
-                               if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (em_ptr->r_ptr->flagsr & RFR_RES_ALL))
-                               {
-                                       if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
-                                       em_ptr->note = _("には効果がなかった。", " is unaffected.");
-                                       resists_tele = TRUE;
-                               }
-                               else if (em_ptr->r_ptr->level > randint1(100))
-                               {
-                                       if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
-                                       em_ptr->note = _("には耐性がある!", " resists!");
-                                       resists_tele = TRUE;
-                               }
-                       }
-
-                       if (!resists_tele)
-                       {
-                               if (em_ptr->seen) em_ptr->obvious = TRUE;
-                               if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
-                               em_ptr->do_dist = em_ptr->dam;
-                       }
-               }
-               else
-               {
-                       em_ptr->skipped = TRUE;
-               }
-
-               em_ptr->dam = 0;
-               break;
-       }
+               return effect_monster_away_undead(caster_ptr, em_ptr);
        case GF_AWAY_EVIL:
        case GF_AWAY_EVIL:
-       {
-               if (em_ptr->r_ptr->flags3 & (RF3_EVIL))
-               {
-                       bool resists_tele = FALSE;
-
-                       if (em_ptr->r_ptr->flagsr & RFR_RES_TELE)
-                       {
-                               if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (em_ptr->r_ptr->flagsr & RFR_RES_ALL))
-                               {
-                                       if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
-                                       em_ptr->note = _("には効果がなかった。", " is unaffected.");
-                                       resists_tele = TRUE;
-                               }
-                               else if (em_ptr->r_ptr->level > randint1(100))
-                               {
-                                       if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
-                                       em_ptr->note = _("には耐性がある!", " resists!");
-                                       resists_tele = TRUE;
-                               }
-                       }
-
-                       if (!resists_tele)
-                       {
-                               if (em_ptr->seen) em_ptr->obvious = TRUE;
-                               if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_EVIL);
-                               em_ptr->do_dist = em_ptr->dam;
-                       }
-               }
-               else
-               {
-                       em_ptr->skipped = TRUE;
-               }
-
-               em_ptr->dam = 0;
-               break;
-       }
+               return effect_monster_away_evil(caster_ptr, em_ptr);
        case GF_AWAY_ALL:
        case GF_AWAY_ALL:
-       {
-               bool resists_tele = FALSE;
-               if (em_ptr->r_ptr->flagsr & RFR_RES_TELE)
-               {
-                       if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (em_ptr->r_ptr->flagsr & RFR_RES_ALL))
-                       {
-                               if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
-                               em_ptr->note = _("には効果がなかった。", " is unaffected.");
-                               resists_tele = TRUE;
-                       }
-                       else if (em_ptr->r_ptr->level > randint1(100))
-                       {
-                               if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
-                               em_ptr->note = _("には耐性がある!", " resists!");
-                               resists_tele = TRUE;
-                       }
-               }
-
-               if (!resists_tele)
-               {
-                       if (em_ptr->seen) em_ptr->obvious = TRUE;
-
-                       em_ptr->do_dist = em_ptr->dam;
-               }
-
-               em_ptr->dam = 0;
-               break;
-       }
+               return effect_monster_away_all(caster_ptr, em_ptr);
        case GF_TURN_UNDEAD:
        {
                if (em_ptr->r_ptr->flags3 & (RF3_UNDEAD))
        case GF_TURN_UNDEAD:
        {
                if (em_ptr->r_ptr->flags3 & (RF3_UNDEAD))