OSDN Git Service

[Refactor] #37285 Separated monster-attach-lose.c/h from monster-attack-switcher.c
authorHourier <hourier@users.sourceforge.jp>
Sat, 26 Sep 2020 05:11:51 +0000 (14:11 +0900)
committerdeskull <deskull@users.sourceforge.jp>
Wed, 11 Nov 2020 23:24:38 +0000 (08:24 +0900)
(cherry picked from commit 057055900e0ddd3c9652d434be87ba34127220b8)

Hengband/Hengband/Hengband.vcxproj
Hengband/Hengband/Hengband.vcxproj.filters
src/Makefile.am
src/monster-attack/monster-attack-lose.c [new file with mode: 0644]
src/monster-attack/monster-attack-lose.h [new file with mode: 0644]
src/monster-attack/monster-attack-switcher.c

index 964b2e6..ccbec21 100644 (file)
     <ClCompile Include="..\..\src\mind\mind-power-getter.c" />\r
     <ClCompile Include="..\..\src\mind\mind-priest.c" />\r
     <ClCompile Include="..\..\src\mind\mind-weaponsmith.c" />\r
+    <ClCompile Include="..\..\src\monster-attack\monster-attack-lose.c" />\r
     <ClCompile Include="..\..\src\monster-floor\monster-death-util.c" />\r
     <ClCompile Include="..\..\src\monster-floor\monster-lite-util.c" />\r
     <ClCompile Include="..\..\src\monster-floor\monster-lite.c" />\r
     <ClInclude Include="..\..\src\mind\mind-priest.h" />\r
     <ClInclude Include="..\..\src\mind\mind-types.h" />\r
     <ClInclude Include="..\..\src\mind\mind-weaponsmith.h" />\r
+    <ClInclude Include="..\..\src\monster-attack\monster-attack-lose.h" />\r
     <ClInclude Include="..\..\src\monster-floor\monster-death-util.h" />\r
     <ClInclude Include="..\..\src\monster-floor\monster-lite-util.h" />\r
     <ClInclude Include="..\..\src\monster-floor\monster-lite.h" />\r
index a0c521d..a2ca23d 100644 (file)
     <ClCompile Include="..\..\src\player\player-status-resist.c">
       <Filter>player</Filter>
     </ClCompile>
+<<<<<<< HEAD
     <ClCompile Include="..\..\src\io\record-play-movie.c">
       <Filter>io</Filter>
+=======
+    <ClCompile Include="..\..\src\monster-attack\monster-attack-lose.c">
+      <Filter>monster-attack</Filter>
+>>>>>>> 057055900... [Refactor] #37285 Separated monster-attach-lose.c/h from monster-attack-switcher.c
     </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\src\player\player-status-resist.h">
       <Filter>player</Filter>
     </ClInclude>
+<<<<<<< HEAD
     <ClInclude Include="..\..\src\io\record-play-movie.h">
       <Filter>io</Filter>
+=======
+    <ClInclude Include="..\..\src\monster-attack\monster-attack-lose.h">
+      <Filter>monster-attack</Filter>
+>>>>>>> 057055900... [Refactor] #37285 Separated monster-attach-lose.c/h from monster-attack-switcher.c
     </ClInclude>
   </ItemGroup>
   <ItemGroup>
index 3a09711..83f829d 100644 (file)
@@ -466,6 +466,7 @@ hengband_SOURCES = \
        monster-attack/insults-moans.c monster-attack/insults-moans.h \
        monster-attack/monster-attack-describer.c monster-attack/monster-attack-describer.h \
        monster-attack/monster-attack-effect.h \
+       monster-attack/monster-attack-lose.c monster-attack/monster-attack-lose.h \
        monster-attack/monster-attack-player.c monster-attack/monster-attack-player.h \
        monster-attack/monster-attack-processor.c monster-attack/monster-attack-processor.h \
        monster-attack/monster-attack-status.c monster-attack/monster-attack-status.h \
diff --git a/src/monster-attack/monster-attack-lose.c b/src/monster-attack/monster-attack-lose.c
new file mode 100644 (file)
index 0000000..610244c
--- /dev/null
@@ -0,0 +1,193 @@
+#include "monster-attack/monster-attack-lose.h"
+#include "mind/mind-mirror-master.h"
+#include "monster-attack/monster-attack-status.h"
+#include "monster-attack/monster-attack-util.h"
+#include "player/player-damage.h"
+#include "player/player-status-flags.h"
+#include "player/player-status-resist.h"
+#include "status/bad-status-setter.h"
+#include "status/base-status.h"
+#include "status/element-resistance.h"
+#include "view/display-messages.h"
+
+/*!
+ * @brief \95a\8bC\83_\83\81\81[\83W\82ð\8cv\8eZ\82·\82é (\93Å\91Ï\90«\82ª\82 \82ê\82Î\81A(1d4 + 4) / 9\82É\82È\82é\81B\93ñ\8fd\91Ï\90«\82È\82ç\8dX\82É(1d4 + 4) / 9)
+ * @param target_ptr \83v\83\8c\81[\83\84\81[\82Ö\82Ì\8eQ\8fÆ\83|\83C\83\93\83^
+ * @param monap_ptr \83\82\83\93\83X\83^\81[\82©\82ç\83v\83\8c\81[\83\84\81[\82Ö\82Ì\92¼\90Ú\8dU\8c\82\8d\\91¢\91Ì\82Ö\82Ì\8eQ\8fÆ\83|\83C\83\93\83^
+ * @return \82È\82µ
+ * @details 10% (\93Å\82Ì\88ê\8e\9f\91Ï\90«\82ª\82 \82ê\82Î4%\81A\93ñ\8fd\91Ï\90«\82È\82ç\82Î1.6%)\82Ì\8am\97¦\82Å\91Ï\8bv\82ª\92á\89º\82µ\81A\8dX\82É1/10\82Ì\8am\97¦\82Å\89i\8bv\92á\89º\82·\82é
+ */
+void calc_blow_disease(player_type *target_ptr, monap_type *monap_ptr)
+{
+    if (has_resist_pois(target_ptr))
+        monap_ptr->damage = monap_ptr->damage * (randint1(4) + 4) / 9;
+
+    if (is_oppose_pois(target_ptr))
+        monap_ptr->damage = monap_ptr->damage * (randint1(4) + 4) / 9;
+
+    monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1);
+    if (target_ptr->is_dead || check_multishadow(target_ptr))
+        return;
+
+    if (!(target_ptr->resist_pois || is_oppose_pois(target_ptr)) && set_poisoned(target_ptr, target_ptr->poisoned + randint1(monap_ptr->rlev) + 5))
+        monap_ptr->obvious = TRUE;
+
+    bool disease_possibility = randint1(100) > calc_nuke_damage_rate(target_ptr);
+    if (disease_possibility || (randint1(100) > 10) || (target_ptr->prace == RACE_ANDROID))
+        return;
+
+    bool perm = one_in_(10);
+    if (dec_stat(target_ptr, A_CON, randint1(10), perm)) {
+        msg_print(_("\95a\82ª\82 \82È\82½\82ð\90I\82ñ\82Å\82¢\82é\8bC\82ª\82·\82é\81B", "You feel sickly."));
+        monap_ptr->obvious = TRUE;
+    }
+}
+
+/*!
+ * @brief \98r\97Í\92á\89º\83_\83\81\81[\83W\82ð\8cv\8eZ\82·\82é (\88Û\8e\9d\82ª\82 \82ê\82Î\81A(1d4 + 4) / 9\82É\82È\82é)
+ * @param target_ptr \83v\83\8c\81[\83\84\81[\82Ö\82Ì\8eQ\8fÆ\83|\83C\83\93\83^
+ * @param monap_ptr \83\82\83\93\83X\83^\81[\82©\82ç\83v\83\8c\81[\83\84\81[\82Ö\82Ì\92¼\90Ú\8dU\8c\82\8d\\91¢\91Ì\82Ö\82Ì\8eQ\8fÆ\83|\83C\83\93\83^
+ * @return \82È\82µ
+ */
+void calc_blow_lose_strength(player_type *target_ptr, monap_type *monap_ptr)
+{
+    if (has_sustain_str(target_ptr))
+        monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
+
+    monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1);
+    if (target_ptr->is_dead || check_multishadow(target_ptr))
+        return;
+
+    if (do_dec_stat(target_ptr, A_STR))
+        monap_ptr->obvious = TRUE;
+}
+
+/*!
+ * @brief \92m\94\\92á\89º\83_\83\81\81[\83W\82ð\8cv\8eZ\82·\82é (\88Û\8e\9d\82ª\82 \82ê\82Î\81A(1d4 + 4) / 9\82É\82È\82é)
+ * @param target_ptr \83v\83\8c\81[\83\84\81[\82Ö\82Ì\8eQ\8fÆ\83|\83C\83\93\83^
+ * @param monap_ptr \83\82\83\93\83X\83^\81[\82©\82ç\83v\83\8c\81[\83\84\81[\82Ö\82Ì\92¼\90Ú\8dU\8c\82\8d\\91¢\91Ì\82Ö\82Ì\8eQ\8fÆ\83|\83C\83\93\83^
+ * @return \82È\82µ
+ */
+void calc_blow_lose_intelligence(player_type *target_ptr, monap_type *monap_ptr)
+{
+    if (has_sustain_int(target_ptr))
+        monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
+
+    monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1);
+    if (target_ptr->is_dead || check_multishadow(target_ptr))
+        return;
+
+    if (do_dec_stat(target_ptr, A_INT))
+        monap_ptr->obvious = TRUE;
+}
+
+/*!
+ * @brief \8c«\82³\92á\89º\83_\83\81\81[\83W\82ð\8cv\8eZ\82·\82é (\88Û\8e\9d\82ª\82 \82ê\82Î\81A(1d4 + 4) / 9\82É\82È\82é)
+ * @param target_ptr \83v\83\8c\81[\83\84\81[\82Ö\82Ì\8eQ\8fÆ\83|\83C\83\93\83^
+ * @param monap_ptr \83\82\83\93\83X\83^\81[\82©\82ç\83v\83\8c\81[\83\84\81[\82Ö\82Ì\92¼\90Ú\8dU\8c\82\8d\\91¢\91Ì\82Ö\82Ì\8eQ\8fÆ\83|\83C\83\93\83^
+ * @return \82È\82µ
+ */
+void calc_blow_lose_wisdom(player_type *target_ptr, monap_type *monap_ptr)
+{
+    if (has_sustain_wis(target_ptr))
+        monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
+
+    monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1);
+    if (target_ptr->is_dead || check_multishadow(target_ptr))
+        return;
+
+    if (do_dec_stat(target_ptr, A_WIS))
+        monap_ptr->obvious = TRUE;
+}
+
+/*!
+ * @brief \8aí\97p\92á\89º\83_\83\81\81[\83W\82ð\8cv\8eZ\82·\82é (\88Û\8e\9d\82ª\82 \82ê\82Î\81A(1d4 + 4) / 9\82É\82È\82é)
+ * @param target_ptr \83v\83\8c\81[\83\84\81[\82Ö\82Ì\8eQ\8fÆ\83|\83C\83\93\83^
+ * @param monap_ptr \83\82\83\93\83X\83^\81[\82©\82ç\83v\83\8c\81[\83\84\81[\82Ö\82Ì\92¼\90Ú\8dU\8c\82\8d\\91¢\91Ì\82Ö\82Ì\8eQ\8fÆ\83|\83C\83\93\83^
+ * @return \82È\82µ
+ */
+void calc_blow_lose_dexterity(player_type *target_ptr, monap_type *monap_ptr)
+{
+    if (has_sustain_dex(target_ptr))
+        monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
+
+    monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1);
+    if (target_ptr->is_dead || check_multishadow(target_ptr))
+        return;
+
+    if (do_dec_stat(target_ptr, A_DEX))
+        monap_ptr->obvious = TRUE;
+}
+
+/*!
+ * @brief \91Ï\8bv\92á\89º\83_\83\81\81[\83W\82ð\8cv\8eZ\82·\82é (\88Û\8e\9d\82ª\82 \82ê\82Î\81A(1d4 + 4) / 9\82É\82È\82é)
+ * @param target_ptr \83v\83\8c\81[\83\84\81[\82Ö\82Ì\8eQ\8fÆ\83|\83C\83\93\83^
+ * @param monap_ptr \83\82\83\93\83X\83^\81[\82©\82ç\83v\83\8c\81[\83\84\81[\82Ö\82Ì\92¼\90Ú\8dU\8c\82\8d\\91¢\91Ì\82Ö\82Ì\8eQ\8fÆ\83|\83C\83\93\83^
+ * @return \82È\82µ
+ */
+void calc_blow_lose_constitution(player_type *target_ptr, monap_type *monap_ptr)
+{
+    if (has_sustain_con(target_ptr))
+        monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
+
+    monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1);
+    if (target_ptr->is_dead || check_multishadow(target_ptr))
+        return;
+
+    if (do_dec_stat(target_ptr, A_CON))
+        monap_ptr->obvious = TRUE;
+}
+
+/*!
+ * @brief \96£\97Í\92á\89º\83_\83\81\81[\83W\82ð\8cv\8eZ\82·\82é (\88Û\8e\9d\82ª\82 \82ê\82Î\81A(1d4 + 4) / 9\82É\82È\82é)
+ * @param target_ptr \83v\83\8c\81[\83\84\81[\82Ö\82Ì\8eQ\8fÆ\83|\83C\83\93\83^
+ * @param monap_ptr \83\82\83\93\83X\83^\81[\82©\82ç\83v\83\8c\81[\83\84\81[\82Ö\82Ì\92¼\90Ú\8dU\8c\82\8d\\91¢\91Ì\82Ö\82Ì\8eQ\8fÆ\83|\83C\83\93\83^
+ * @return \82È\82µ
+ */
+void calc_blow_lose_charisma(player_type *target_ptr, monap_type *monap_ptr)
+{
+    if (has_sustain_chr(target_ptr))
+        monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
+
+    monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1);
+    if (target_ptr->is_dead || check_multishadow(target_ptr))
+        return;
+
+    if (do_dec_stat(target_ptr, A_CHR))
+        monap_ptr->obvious = TRUE;
+}
+
+/*!
+ * @brief \91S\94\\97Í\92á\89º\83_\83\81\81[\83W\82ð\8cv\8eZ\82·\82é (\88Û\8e\9d\82ª\82 \82ê\82Î\81A1\82Â\82É\95t\82«-3%\8cy\8c¸\82·\82é)
+ * @param target_ptr \83v\83\8c\81[\83\84\81[\82Ö\82Ì\8eQ\8fÆ\83|\83C\83\93\83^
+ * @param monap_ptr \83\82\83\93\83X\83^\81[\82©\82ç\83v\83\8c\81[\83\84\81[\82Ö\82Ì\92¼\90Ú\8dU\8c\82\8d\\91¢\91Ì\82Ö\82Ì\8eQ\8fÆ\83|\83C\83\93\83^
+ * @return \82È\82µ
+ */
+void calc_blow_lose_all(player_type *target_ptr, monap_type *monap_ptr)
+{
+    int damage_ratio = 100;
+    if (has_sustain_str(target_ptr))
+        damage_ratio -= 3;
+
+    if (has_sustain_int(target_ptr))
+        damage_ratio -= 3;
+
+    if (has_sustain_wis(target_ptr))
+        damage_ratio -= 3;
+
+    if (has_sustain_dex(target_ptr))
+        damage_ratio -= 3;
+
+    if (has_sustain_con(target_ptr))
+        damage_ratio -= 3;
+
+    if (has_sustain_chr(target_ptr))
+        damage_ratio -= 3;
+
+    monap_ptr->damage = monap_ptr->damage * damage_ratio / 100;
+    monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1);
+    if (target_ptr->is_dead || check_multishadow(target_ptr))
+        return;
+
+    process_lose_all_attack(target_ptr, monap_ptr);
+}
diff --git a/src/monster-attack/monster-attack-lose.h b/src/monster-attack/monster-attack-lose.h
new file mode 100644 (file)
index 0000000..70bd2cd
--- /dev/null
@@ -0,0 +1,13 @@
+#pragma once
+
+#include "system/angband.h"
+
+typedef struct monap_type monap_type;
+void calc_blow_disease(player_type *target_ptr, monap_type *monap_ptr);
+void calc_blow_lose_strength(player_type *target_ptr, monap_type *monap_ptr);
+void calc_blow_lose_intelligence(player_type *target_ptr, monap_type *monap_ptr);
+void calc_blow_lose_wisdom(player_type *target_ptr, monap_type *monap_ptr);
+void calc_blow_lose_dexterity(player_type *target_ptr, monap_type *monap_ptr);
+void calc_blow_lose_constitution(player_type *target_ptr, monap_type *monap_ptr);
+void calc_blow_lose_charisma(player_type *target_ptr, monap_type *monap_ptr);
+void calc_blow_lose_all(player_type *target_ptr, monap_type *monap_ptr);
index e4ed138..93e7b23 100644 (file)
@@ -9,6 +9,7 @@
 #include "inventory/inventory-slot-types.h"
 #include "mind/drs-types.h"
 #include "mind/mind-mirror-master.h"
+#include "monster-attack/monster-attack-lose.h"
 #include "monster-attack/monster-attack-status.h"
 #include "monster-attack/monster-eating.h"
 #include "monster/monster-status.h"
@@ -62,7 +63,7 @@ static void calc_blow_disenchant(player_type *target_ptr, monap_type *monap_ptr)
         monap_ptr->obvious = TRUE;
     }
 
-    if (is_resist_disen(target_ptr))
+    if (has_resist_disen(target_ptr))
         monap_ptr->damage = monap_ptr->damage * (randint1(4) + 4) / 9;
 
     monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1);
@@ -77,7 +78,7 @@ static void calc_blow_disenchant(player_type *target_ptr, monap_type *monap_ptr)
  */
 static void calc_blow_blind(player_type *target_ptr, monap_type *monap_ptr)
 {
-    if (is_resist_blind(target_ptr))
+    if (has_resist_blind(target_ptr))
         monap_ptr->damage = monap_ptr->damage * (randint1(4) + 3) / 8;
 
     monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1);
@@ -99,7 +100,7 @@ static void calc_blow_confusion(player_type *target_ptr, monap_type *monap_ptr)
     if (monap_ptr->explode)
         return;
 
-    if (is_resist_conf(target_ptr))
+    if (has_resist_conf(target_ptr))
         monap_ptr->damage = monap_ptr->damage * (randint1(4) + 3) / 8;
 
     monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1);
@@ -120,7 +121,7 @@ static void calc_blow_confusion(player_type *target_ptr, monap_type *monap_ptr)
  */
 static void calc_blow_fear(player_type *target_ptr, monap_type *monap_ptr)
 {
-    if (is_resist_fear(target_ptr))
+    if (has_resist_fear(target_ptr))
         monap_ptr->damage = monap_ptr->damage * (randint1(4) + 3) / 8;
 
     monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1);
@@ -150,188 +151,6 @@ static void calc_blow_paralysis(player_type *target_ptr, monap_type *monap_ptr)
     update_smart_learn(target_ptr, monap_ptr->m_idx, DRS_FREE);
 }
 
-/*!
- * @brief 病気ダメージを計算する (毒耐性があれば、(1d4 + 4) / 9になる。二重耐性なら更に(1d4 + 4) / 9)
- * @param target_ptr プレーヤーへの参照ポインタ
- * @param monap_ptr モンスターからプレーヤーへの直接攻撃構造体への参照ポインタ
- * @return なし
- * @details 10% (毒の一次耐性があれば4%、二重耐性ならば1.6%)の確率で耐久が低下し、更に1/10の確率で永久低下する
- */
-static void calc_blow_disease(player_type *target_ptr, monap_type *monap_ptr)
-{
-    if (is_resist_pois(target_ptr))
-        monap_ptr->damage = monap_ptr->damage * (randint1(4) + 4) / 9;
-
-    if (is_oppose_pois(target_ptr))
-        monap_ptr->damage = monap_ptr->damage * (randint1(4) + 4) / 9;
-    
-    monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1);
-    if (target_ptr->is_dead || check_multishadow(target_ptr))
-        return;
-
-    if (!(target_ptr->resist_pois || is_oppose_pois(target_ptr)) && set_poisoned(target_ptr, target_ptr->poisoned + randint1(monap_ptr->rlev) + 5))
-        monap_ptr->obvious = TRUE;
-
-    bool disease_possibility = randint1(100) > calc_nuke_damage_rate(target_ptr);
-    if (disease_possibility || (randint1(100) > 10) || (target_ptr->prace == RACE_ANDROID))
-        return;
-
-    bool perm = one_in_(10);
-    if (dec_stat(target_ptr, A_CON, randint1(10), perm)) {
-        msg_print(_("病があなたを蝕んでいる気がする。", "You feel sickly."));
-        monap_ptr->obvious = TRUE;
-    }
-}
-
-/*!
- * @brief 腕力低下ダメージを計算する (維持があれば、(1d4 + 4) / 9になる)
- * @param target_ptr プレーヤーへの参照ポインタ
- * @param monap_ptr モンスターからプレーヤーへの直接攻撃構造体への参照ポインタ
- * @return なし
- */
-static void calc_blow_lose_strength(player_type *target_ptr, monap_type *monap_ptr)
-{
-    if (is_sustain_str(target_ptr))
-        monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
-
-    monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1);
-    if (target_ptr->is_dead || check_multishadow(target_ptr))
-        return;
-
-    if (do_dec_stat(target_ptr, A_STR))
-        monap_ptr->obvious = TRUE;
-}
-
-/*!
- * @brief 知能低下ダメージを計算する (維持があれば、(1d4 + 4) / 9になる)
- * @param target_ptr プレーヤーへの参照ポインタ
- * @param monap_ptr モンスターからプレーヤーへの直接攻撃構造体への参照ポインタ
- * @return なし
- */
-static void calc_blow_lose_intelligence(player_type *target_ptr, monap_type *monap_ptr)
-{
-    if (is_sustain_int(target_ptr))
-        monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
-
-    monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1);
-    if (target_ptr->is_dead || check_multishadow(target_ptr))
-        return;
-
-    if (do_dec_stat(target_ptr, A_INT))
-        monap_ptr->obvious = TRUE;
-}
-
-/*!
- * @brief 賢さ低下ダメージを計算する (維持があれば、(1d4 + 4) / 9になる)
- * @param target_ptr プレーヤーへの参照ポインタ
- * @param monap_ptr モンスターからプレーヤーへの直接攻撃構造体への参照ポインタ
- * @return なし
- */
-static void calc_blow_lose_wisdom(player_type *target_ptr, monap_type *monap_ptr)
-{
-    if (is_sustain_wis(target_ptr))
-        monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
-
-    monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1);
-    if (target_ptr->is_dead || check_multishadow(target_ptr))
-        return;
-
-    if (do_dec_stat(target_ptr, A_WIS))
-        monap_ptr->obvious = TRUE;
-}
-
-/*!
- * @brief 器用低下ダメージを計算する (維持があれば、(1d4 + 4) / 9になる)
- * @param target_ptr プレーヤーへの参照ポインタ
- * @param monap_ptr モンスターからプレーヤーへの直接攻撃構造体への参照ポインタ
- * @return なし
- */
-static void calc_blow_lose_dexterity(player_type *target_ptr, monap_type *monap_ptr)
-{
-    if (is_sustain_dex(target_ptr))
-        monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
-
-    monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1);
-    if (target_ptr->is_dead || check_multishadow(target_ptr))
-        return;
-
-    if (do_dec_stat(target_ptr, A_DEX))
-        monap_ptr->obvious = TRUE;
-}
-
-/*!
- * @brief 耐久低下ダメージを計算する (維持があれば、(1d4 + 4) / 9になる)
- * @param target_ptr プレーヤーへの参照ポインタ
- * @param monap_ptr モンスターからプレーヤーへの直接攻撃構造体への参照ポインタ
- * @return なし
- */
-static void calc_blow_lose_constitution(player_type *target_ptr, monap_type *monap_ptr)
-{
-    if (is_sustain_con(target_ptr))
-        monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
-
-    monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1);
-    if (target_ptr->is_dead || check_multishadow(target_ptr))
-        return;
-
-    if (do_dec_stat(target_ptr, A_CON))
-        monap_ptr->obvious = TRUE;
-}
-
-/*!
- * @brief 魅力低下ダメージを計算する (維持があれば、(1d4 + 4) / 9になる)
- * @param target_ptr プレーヤーへの参照ポインタ
- * @param monap_ptr モンスターからプレーヤーへの直接攻撃構造体への参照ポインタ
- * @return なし
- */
-static void calc_blow_lose_charisma(player_type *target_ptr, monap_type *monap_ptr)
-{
-    if (is_sustain_chr(target_ptr))
-        monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
-
-    monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1);
-    if (target_ptr->is_dead || check_multishadow(target_ptr))
-        return;
-
-    if (do_dec_stat(target_ptr, A_CHR))
-        monap_ptr->obvious = TRUE;
-}
-
-/*!
- * @brief 全能力低下ダメージを計算する (維持があれば、1つに付き-3%軽減する)
- * @param target_ptr プレーヤーへの参照ポインタ
- * @param monap_ptr モンスターからプレーヤーへの直接攻撃構造体への参照ポインタ
- * @return なし
- */
-static void calc_blow_lose_all(player_type *target_ptr, monap_type *monap_ptr)
-{
-    int damage_ratio = 100;
-    if (is_sustain_str(target_ptr))
-        damage_ratio -= 3;
-
-    if (is_sustain_int(target_ptr))
-        damage_ratio -= 3;
-
-    if (is_sustain_wis(target_ptr))
-        damage_ratio -= 3;
-
-    if (is_sustain_dex(target_ptr))
-        damage_ratio -= 3;
-
-    if (is_sustain_con(target_ptr))
-        damage_ratio -= 3;
-
-    if (is_sustain_chr(target_ptr))
-        damage_ratio -= 3;
-
-    monap_ptr->damage = monap_ptr->damage * damage_ratio / 100;
-    monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1);
-    if (target_ptr->is_dead || check_multishadow(target_ptr))
-        return;
-
-    process_lose_all_attack(target_ptr, monap_ptr);
-}
-
 void switch_monster_blow_to_player(player_type *target_ptr, monap_type *monap_ptr)
 {
     switch (monap_ptr->effect) {
@@ -540,7 +359,7 @@ void switch_monster_blow_to_player(player_type *target_ptr, monap_type *monap_pt
         break;
     }
     case RBE_DISEASE:
-        calc_blow_didease(target_ptr, monap_ptr);
+        calc_blow_disease(target_ptr, monap_ptr);
         break;
     case RBE_TIME: {
         if (monap_ptr->explode)