OSDN Git Service

[Refactor] #40416 Moved process_un_power(), check_drain_hp() and process_drain_life...
authorHourier <hourier@users.sourceforge.jp>
Sun, 31 May 2020 05:38:03 +0000 (14:38 +0900)
committerHourier <hourier@users.sourceforge.jp>
Sun, 31 May 2020 05:38:03 +0000 (14:38 +0900)
src/combat/monster-attack-player.c
src/combat/monster-eating.c
src/combat/monster-eating.h

index c7b771a..5d2b8d0 100644 (file)
@@ -21,7 +21,6 @@
 #include "mind/racial-mirror-master.h"
 #include "monster/monster-status.h"
 #include "object/object-hook.h"
-#include "player/mimic-info-table.h"
 #include "player/player-damage.h"
 #include "player/player-effects.h"
 #include "player/player-move.h"
@@ -206,77 +205,6 @@ static void describe_silly_attacks(monap_type *monap_ptr)
 #endif
 }
 
-/*!
- * @brief モンスターからの攻撃による充填魔力吸収処理
- * @param target_ptr プレーヤーへの参照ポインタ
- * @monap_ptr モンスターからモンスターへの直接攻撃構造体への参照ポインタ
- * @return 吸収されたらTRUE、されなかったらFALSE
- */
-static bool process_un_power(player_type *target_ptr, monap_type *monap_ptr)
-{
-    if (((monap_ptr->o_ptr->tval != TV_STAFF) && (monap_ptr->o_ptr->tval != TV_WAND)) || (monap_ptr->o_ptr->pval == 0))
-        return FALSE;
-
-    int heal = monap_ptr->rlev * monap_ptr->o_ptr->pval;
-    if (monap_ptr->o_ptr->tval == TV_STAFF)
-        heal *= monap_ptr->o_ptr->number;
-
-    heal = MIN(heal, monap_ptr->m_ptr->maxhp - monap_ptr->m_ptr->hp);
-    msg_print(_("ザックからエネルギーが吸い取られた!", "Energy drains from your pack!"));
-    monap_ptr->obvious = TRUE;
-    monap_ptr->m_ptr->hp += (HIT_POINT)heal;
-    if (target_ptr->health_who == monap_ptr->m_idx)
-        target_ptr->redraw |= (PR_HEALTH);
-
-    if (target_ptr->riding == monap_ptr->m_idx)
-        target_ptr->redraw |= (PR_UHEALTH);
-
-    monap_ptr->o_ptr->pval = 0;
-    target_ptr->update |= (PU_COMBINE | PU_REORDER);
-    target_ptr->window |= (PW_INVEN);
-    return TRUE;
-}
-
-static bool check_drain_hp(player_type *target_ptr, const s32b d)
-{
-    bool resist_drain = !drain_exp(target_ptr, d, d / 10, 50);
-    if (target_ptr->mimic_form)
-        return (mimic_info[target_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_NONLIVING) != 0 ? TRUE : resist_drain;
-
-    switch (target_ptr->prace) {
-    case RACE_ZOMBIE:
-    case RACE_VAMPIRE:
-    case RACE_SPECTRE:
-    case RACE_SKELETON:
-    case RACE_BALROG:
-    case RACE_GOLEM:
-    case RACE_ANDROID:
-        return TRUE;
-    default:
-        return resist_drain;
-    }
-}
-
-static void process_drain_life(player_type *target_ptr, monap_type *monap_ptr, const bool resist_drain)
-{
-    if ((monap_ptr->damage <= 5) || resist_drain)
-        return;
-
-    bool did_heal = monap_ptr->m_ptr->hp < monap_ptr->m_ptr->maxhp;
-    monap_ptr->m_ptr->hp += damroll(4, monap_ptr->damage / 6);
-    if (monap_ptr->m_ptr->hp > monap_ptr->m_ptr->maxhp)
-        monap_ptr->m_ptr->hp = monap_ptr->m_ptr->maxhp;
-
-    if (target_ptr->health_who == monap_ptr->m_idx)
-        target_ptr->redraw |= (PR_HEALTH);
-
-    if (target_ptr->riding == monap_ptr->m_idx)
-        target_ptr->redraw |= (PR_UHEALTH);
-
-    if (monap_ptr->m_ptr->ml && did_heal)
-        msg_format(_("%sは体力を回復したようだ。", "%^s appears healthier."), monap_ptr->m_name);
-}
-
 static void process_blind_attack(player_type *target_ptr, monap_type *monap_ptr)
 {
     if (target_ptr->resist_blind || check_multishadow(target_ptr))
index 5c97929..b4fd87d 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * @brief プレーヤーのアイテム・お金・明かりの残りターンを盗んだり減少させたりする処理
+ * @brief プレーヤーのHP、アイテム、お金・明かりの残りターン、充填魔力を盗んだり減少させたりする処理
  * @date 2020/05/31
  * @author Hourier
  */
@@ -12,6 +12,8 @@
 #include "object/object-hook.h"
 #include "object/object-mark-types.h"
 #include "player/avatar.h"
+#include "player/mimic-info-table.h"
+#include "player/player-effects.h"
 
 void process_eat_gold(player_type *target_ptr, monap_type *monap_ptr)
 {
@@ -177,3 +179,74 @@ void process_eat_lite(player_type *target_ptr, monap_type *monap_ptr)
 
     target_ptr->window |= (PW_EQUIP);
 }
+
+/*!
+ * @brief モンスターからの攻撃による充填魔力吸収処理
+ * @param target_ptr プレーヤーへの参照ポインタ
+ * @monap_ptr モンスターからモンスターへの直接攻撃構造体への参照ポインタ
+ * @return 吸収されたらTRUE、されなかったらFALSE
+ */
+bool process_un_power(player_type *target_ptr, monap_type *monap_ptr)
+{
+    if (((monap_ptr->o_ptr->tval != TV_STAFF) && (monap_ptr->o_ptr->tval != TV_WAND)) || (monap_ptr->o_ptr->pval == 0))
+        return FALSE;
+
+    int heal = monap_ptr->rlev * monap_ptr->o_ptr->pval;
+    if (monap_ptr->o_ptr->tval == TV_STAFF)
+        heal *= monap_ptr->o_ptr->number;
+
+    heal = MIN(heal, monap_ptr->m_ptr->maxhp - monap_ptr->m_ptr->hp);
+    msg_print(_("ザックからエネルギーが吸い取られた!", "Energy drains from your pack!"));
+    monap_ptr->obvious = TRUE;
+    monap_ptr->m_ptr->hp += (HIT_POINT)heal;
+    if (target_ptr->health_who == monap_ptr->m_idx)
+        target_ptr->redraw |= (PR_HEALTH);
+
+    if (target_ptr->riding == monap_ptr->m_idx)
+        target_ptr->redraw |= (PR_UHEALTH);
+
+    monap_ptr->o_ptr->pval = 0;
+    target_ptr->update |= (PU_COMBINE | PU_REORDER);
+    target_ptr->window |= (PW_INVEN);
+    return TRUE;
+}
+
+bool check_drain_hp(player_type *target_ptr, const s32b d)
+{
+    bool resist_drain = !drain_exp(target_ptr, d, d / 10, 50);
+    if (target_ptr->mimic_form)
+        return (mimic_info[target_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_NONLIVING) != 0 ? TRUE : resist_drain;
+
+    switch (target_ptr->prace) {
+    case RACE_ZOMBIE:
+    case RACE_VAMPIRE:
+    case RACE_SPECTRE:
+    case RACE_SKELETON:
+    case RACE_BALROG:
+    case RACE_GOLEM:
+    case RACE_ANDROID:
+        return TRUE;
+    default:
+        return resist_drain;
+    }
+}
+
+void process_drain_life(player_type *target_ptr, monap_type *monap_ptr, const bool resist_drain)
+{
+    if ((monap_ptr->damage <= 5) || resist_drain)
+        return;
+
+    bool did_heal = monap_ptr->m_ptr->hp < monap_ptr->m_ptr->maxhp;
+    monap_ptr->m_ptr->hp += damroll(4, monap_ptr->damage / 6);
+    if (monap_ptr->m_ptr->hp > monap_ptr->m_ptr->maxhp)
+        monap_ptr->m_ptr->hp = monap_ptr->m_ptr->maxhp;
+
+    if (target_ptr->health_who == monap_ptr->m_idx)
+        target_ptr->redraw |= (PR_HEALTH);
+
+    if (target_ptr->riding == monap_ptr->m_idx)
+        target_ptr->redraw |= (PR_UHEALTH);
+
+    if (monap_ptr->m_ptr->ml && did_heal)
+        msg_format(_("%sは体力を回復したようだ。", "%^s appears healthier."), monap_ptr->m_name);
+}
index d46b006..0c0ae34 100644 (file)
@@ -8,3 +8,7 @@ bool check_eat_item(player_type *target_ptr, monap_type *monap_ptr);
 void process_eat_item(player_type *target_ptr, monap_type *monap_ptr);
 void process_eat_food(player_type *target_ptr, monap_type *monap_ptr);
 void process_eat_lite(player_type *target_ptr, monap_type *monap_ptr);
+
+bool process_un_power(player_type *target_ptr, monap_type *monap_ptr);
+bool check_drain_hp(player_type *target_ptr, const s32b d);
+void process_drain_life(player_type *target_ptr, monap_type *monap_ptr, const bool resist_drain);