OSDN Git Service

[Refactor] #1389 Changed monap_type from struct to class MonsterAttackPlayer
authorHourier <66951241+Hourier@users.noreply.github.com>
Sat, 5 Feb 2022 09:13:09 +0000 (18:13 +0900)
committerHourier <66951241+Hourier@users.noreply.github.com>
Sun, 6 Feb 2022 03:16:27 +0000 (12:16 +0900)
21 files changed:
src/combat/aura-counterattack.cpp
src/combat/aura-counterattack.h
src/mind/mind-samurai.cpp
src/mind/mind-samurai.h
src/monster-attack/monster-attack-describer.cpp
src/monster-attack/monster-attack-describer.h
src/monster-attack/monster-attack-lose.cpp
src/monster-attack/monster-attack-lose.h
src/monster-attack/monster-attack-player.cpp
src/monster-attack/monster-attack-status.cpp
src/monster-attack/monster-attack-status.h
src/monster-attack/monster-attack-switcher.cpp
src/monster-attack/monster-attack-switcher.h
src/monster-attack/monster-attack-util.cpp
src/monster-attack/monster-attack-util.h
src/monster-attack/monster-eating.cpp
src/monster-attack/monster-eating.h
src/pet/pet-fall-off.cpp
src/pet/pet-fall-off.h
src/spell-realm/spells-hex.cpp
src/spell-realm/spells-hex.h

index ccf210f..648a51a 100644 (file)
@@ -30,7 +30,7 @@
 #include "system/player-type-definition.h"
 #include "view/display-messages.h"
 
-static void aura_fire_by_monster_attack(PlayerType *player_ptr, monap_type *monap_ptr)
+static void aura_fire_by_monster_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (!has_sh_fire(player_ptr) || !monap_ptr->alive || player_ptr->is_dead)
         return;
@@ -53,7 +53,7 @@ static void aura_fire_by_monster_attack(PlayerType *player_ptr, monap_type *mona
     }
 }
 
-static void aura_elec_by_monster_attack(PlayerType *player_ptr, monap_type *monap_ptr)
+static void aura_elec_by_monster_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (!has_sh_elec(player_ptr) || !monap_ptr->alive || player_ptr->is_dead)
         return;
@@ -76,7 +76,7 @@ static void aura_elec_by_monster_attack(PlayerType *player_ptr, monap_type *mona
     }
 }
 
-static void aura_cold_by_monster_attack(PlayerType *player_ptr, monap_type *monap_ptr)
+static void aura_cold_by_monster_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (!has_sh_cold(player_ptr) || !monap_ptr->alive || player_ptr->is_dead)
         return;
@@ -99,7 +99,7 @@ static void aura_cold_by_monster_attack(PlayerType *player_ptr, monap_type *mona
     }
 }
 
-static void aura_shards_by_monster_attack(PlayerType *player_ptr, monap_type *monap_ptr)
+static void aura_shards_by_monster_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (!player_ptr->dustrobe || !monap_ptr->alive || player_ptr->is_dead)
         return;
@@ -123,7 +123,7 @@ static void aura_shards_by_monster_attack(PlayerType *player_ptr, monap_type *mo
         teleport_player(player_ptr, 10, TELEPORT_SPONTANEOUS);
 }
 
-static void aura_holy_by_monster_attack(PlayerType *player_ptr, monap_type *monap_ptr)
+static void aura_holy_by_monster_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (!player_ptr->tim_sh_holy || !monap_ptr->alive || player_ptr->is_dead)
         return;
@@ -152,7 +152,7 @@ static void aura_holy_by_monster_attack(PlayerType *player_ptr, monap_type *mona
         r_ptr->r_flags3 |= RF3_EVIL;
 }
 
-static void aura_force_by_monster_attack(PlayerType *player_ptr, monap_type *monap_ptr)
+static void aura_force_by_monster_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (!player_ptr->tim_sh_touki || !monap_ptr->alive || player_ptr->is_dead)
         return;
@@ -175,7 +175,7 @@ static void aura_force_by_monster_attack(PlayerType *player_ptr, monap_type *mon
     }
 }
 
-static void aura_shadow_by_monster_attack(PlayerType *player_ptr, monap_type *monap_ptr)
+static void aura_shadow_by_monster_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (!SpellHex(player_ptr).is_spelling_specific(HEX_SHADOW_CLOAK) || !monap_ptr->alive || player_ptr->is_dead)
         return;
@@ -227,7 +227,7 @@ static void aura_shadow_by_monster_attack(PlayerType *player_ptr, monap_type *mo
     }
 }
 
-void process_aura_counterattack(PlayerType *player_ptr, monap_type *monap_ptr)
+void process_aura_counterattack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (!monap_ptr->touched)
         return;
index 4751e13..cf682a2 100644 (file)
@@ -1,5 +1,5 @@
 #pragma once
 
-typedef struct monap_type monap_type;
+class MonsterAttackPlayer;
 class PlayerType;
-void process_aura_counterattack(PlayerType *player_ptr, monap_type *monap_ptr);
+void process_aura_counterattack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
index 8ffed6a..54497a8 100644 (file)
@@ -471,7 +471,7 @@ void mineuchi(PlayerType *player_ptr, player_attack_type *pa_ptr)
  * @param player_ptr プレイヤーへの参照ポインタ
  * @param pa_ptr 直接攻撃構造体への参照ポインタ
  */
-void musou_counterattack(PlayerType *player_ptr, monap_type *monap_ptr)
+void musou_counterattack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if ((!player_ptr->counter && !PlayerClass(player_ptr).samurai_stance_is(SamuraiStanceType::MUSOU)) || !monap_ptr->alive || player_ptr->is_dead || !monap_ptr->m_ptr->ml
         || (player_ptr->csp <= 7))
index 5117d8d..9e80630 100644 (file)
@@ -5,7 +5,7 @@
 #include "combat/combat-options-type.h"
 #include "object-enchant/tr-flags.h"
 
-typedef struct monap_type monap_type;
+class MonsterAttackPlayer;
 struct monster_type;
 struct player_attack_type;
 class PlayerType;
@@ -14,4 +14,4 @@ void concentration(PlayerType *player_ptr);
 bool choose_samurai_stance(PlayerType* player_ptr);
 int calc_attack_quality(PlayerType *player_ptr, player_attack_type *pa_ptr);
 void mineuchi(PlayerType *player_ptr, player_attack_type *pa_ptr);
-void musou_counterattack(PlayerType *player_ptr, monap_type *monap_ptr);
+void musou_counterattack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
index 935cdba..d354580 100644 (file)
@@ -13,7 +13,7 @@
 #include "system/angband.h"
 #include "system/monster-type-definition.h"
 
-static void show_jaian_song(monap_type *monap_ptr)
+static void show_jaian_song(MonsterAttackPlayer *monap_ptr)
 {
 #ifdef JP
     switch (randint1(15)) {
@@ -64,7 +64,7 @@ static void show_jaian_song(monap_type *monap_ptr)
 #endif
 }
 
-static void monster_attack_show(monap_type *monap_ptr)
+static void monster_attack_show(MonsterAttackPlayer *monap_ptr)
 {
 #ifdef JP
     monap_ptr->abbreviate = -1;
@@ -81,7 +81,7 @@ static void monster_attack_show(monap_type *monap_ptr)
     sound(SOUND_SHOW);
 }
 
-void describe_monster_attack_method(monap_type *monap_ptr)
+void describe_monster_attack_method(MonsterAttackPlayer *monap_ptr)
 {
     switch (monap_ptr->method) {
     case RaceBlowMethodType::HIT: {
index 52efd9b..16dc6f5 100644 (file)
@@ -1,4 +1,4 @@
 #pragma once
 
-typedef struct monap_type monap_type;
-void describe_monster_attack_method(monap_type *monap_ptr);
+class MonsterAttackPlayer;
+void describe_monster_attack_method(MonsterAttackPlayer *monap_ptr);
index a1184bc..3ec45ee 100644 (file)
@@ -17,7 +17,7 @@
  * @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
  * @details 10% (毒の一次耐性があれば4%、二重耐性ならば1.6%)の確率で耐久が低下し、更に1/10の確率で永久低下する
  */
-void calc_blow_disease(PlayerType *player_ptr, monap_type *monap_ptr)
+void calc_blow_disease(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (has_resist_pois(player_ptr))
         monap_ptr->damage = monap_ptr->damage * (randint1(4) + 4) / 9;
@@ -48,7 +48,7 @@ void calc_blow_disease(PlayerType *player_ptr, monap_type *monap_ptr)
  * @param player_ptr プレイヤーへの参照ポインタ
  * @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
  */
-void calc_blow_lose_strength(PlayerType *player_ptr, monap_type *monap_ptr)
+void calc_blow_lose_strength(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (has_sustain_str(player_ptr))
         monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
@@ -66,7 +66,7 @@ void calc_blow_lose_strength(PlayerType *player_ptr, monap_type *monap_ptr)
  * @param player_ptr プレイヤーへの参照ポインタ
  * @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
  */
-void calc_blow_lose_intelligence(PlayerType *player_ptr, monap_type *monap_ptr)
+void calc_blow_lose_intelligence(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (has_sustain_int(player_ptr))
         monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
@@ -84,7 +84,7 @@ void calc_blow_lose_intelligence(PlayerType *player_ptr, monap_type *monap_ptr)
  * @param player_ptr プレイヤーへの参照ポインタ
  * @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
  */
-void calc_blow_lose_wisdom(PlayerType *player_ptr, monap_type *monap_ptr)
+void calc_blow_lose_wisdom(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (has_sustain_wis(player_ptr))
         monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
@@ -102,7 +102,7 @@ void calc_blow_lose_wisdom(PlayerType *player_ptr, monap_type *monap_ptr)
  * @param player_ptr プレイヤーへの参照ポインタ
  * @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
  */
-void calc_blow_lose_dexterity(PlayerType *player_ptr, monap_type *monap_ptr)
+void calc_blow_lose_dexterity(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (has_sustain_dex(player_ptr))
         monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
@@ -120,7 +120,7 @@ void calc_blow_lose_dexterity(PlayerType *player_ptr, monap_type *monap_ptr)
  * @param player_ptr プレイヤーへの参照ポインタ
  * @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
  */
-void calc_blow_lose_constitution(PlayerType *player_ptr, monap_type *monap_ptr)
+void calc_blow_lose_constitution(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (has_sustain_con(player_ptr))
         monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
@@ -138,7 +138,7 @@ void calc_blow_lose_constitution(PlayerType *player_ptr, monap_type *monap_ptr)
  * @param player_ptr プレイヤーへの参照ポインタ
  * @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
  */
-void calc_blow_lose_charisma(PlayerType *player_ptr, monap_type *monap_ptr)
+void calc_blow_lose_charisma(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (has_sustain_chr(player_ptr))
         monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
@@ -156,7 +156,7 @@ void calc_blow_lose_charisma(PlayerType *player_ptr, monap_type *monap_ptr)
  * @param player_ptr プレイヤーへの参照ポインタ
  * @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
  */
-void calc_blow_lose_all(PlayerType *player_ptr, monap_type *monap_ptr)
+void calc_blow_lose_all(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     int damage_ratio = 100;
     if (has_sustain_str(player_ptr))
index 45c0f5f..a3e0e5b 100644 (file)
@@ -1,12 +1,12 @@
 #pragma once
 
-typedef struct monap_type monap_type;
+class MonsterAttackPlayer;
 class PlayerType;
-void calc_blow_disease(PlayerType *player_ptr, monap_type *monap_ptr);
-void calc_blow_lose_strength(PlayerType *player_ptr, monap_type *monap_ptr);
-void calc_blow_lose_intelligence(PlayerType *player_ptr, monap_type *monap_ptr);
-void calc_blow_lose_wisdom(PlayerType *player_ptr, monap_type *monap_ptr);
-void calc_blow_lose_dexterity(PlayerType *player_ptr, monap_type *monap_ptr);
-void calc_blow_lose_constitution(PlayerType *player_ptr, monap_type *monap_ptr);
-void calc_blow_lose_charisma(PlayerType *player_ptr, monap_type *monap_ptr);
-void calc_blow_lose_all(PlayerType *player_ptr, monap_type *monap_ptr);
+void calc_blow_disease(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void calc_blow_lose_strength(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void calc_blow_lose_intelligence(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void calc_blow_lose_wisdom(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void calc_blow_lose_dexterity(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void calc_blow_lose_constitution(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void calc_blow_lose_charisma(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void calc_blow_lose_all(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
index 5dbf05e..c1c7306 100644 (file)
@@ -58,7 +58,7 @@
 #include "util/bit-flags-calculator.h"
 #include "view/display-messages.h"
 
-static bool check_no_blow(PlayerType *player_ptr, monap_type *monap_ptr)
+static bool check_no_blow(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     auto *r_ptr = &r_info[monap_ptr->m_ptr->r_idx];
     if (r_ptr->behavior_flags.has(MonsterBehaviorType::NEVER_BLOW)) {
@@ -78,7 +78,7 @@ static bool check_no_blow(PlayerType *player_ptr, monap_type *monap_ptr)
  * @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
  * @return 攻撃続行ならばTRUE、打ち切りになったらFALSE
  */
-static bool check_monster_continuous_attack(PlayerType *player_ptr, monap_type *monap_ptr)
+static bool check_monster_continuous_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (!monster_is_valid(monap_ptr->m_ptr) || (monap_ptr->method == RaceBlowMethodType::NONE)) {
         return false;
@@ -100,7 +100,7 @@ static bool check_monster_continuous_attack(PlayerType *player_ptr, monap_type *
  * @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
  * @return briefに書いた条件+確率が満たされたらTRUE、それ以外はFALSE
  */
-static bool effect_protecion_from_evil(PlayerType *player_ptr, monap_type *monap_ptr)
+static bool effect_protecion_from_evil(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     auto *r_ptr = &r_info[monap_ptr->m_ptr->r_idx];
     if ((player_ptr->protevil <= 0) || none_bits(r_ptr->flags3, RF3_EVIL) || (player_ptr->lev < monap_ptr->rlev) || ((randint0(100) + player_ptr->lev) <= 50)) {
@@ -121,7 +121,7 @@ static bool effect_protecion_from_evil(PlayerType *player_ptr, monap_type *monap
     return true;
 }
 
-static void describe_silly_attacks(monap_type *monap_ptr)
+static void describe_silly_attacks(MonsterAttackPlayer *monap_ptr)
 {
     if (monap_ptr->act == nullptr) {
         return;
@@ -154,7 +154,7 @@ static void describe_silly_attacks(monap_type *monap_ptr)
  * @brief 切り傷と朦朧が同時に発生した時、片方を無効にする
  * @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
  */
-static void select_cut_stun(monap_type *monap_ptr)
+static void select_cut_stun(MonsterAttackPlayer *monap_ptr)
 {
     if ((monap_ptr->do_cut == 0) || (monap_ptr->do_stun == 0)) {
         return;
@@ -167,7 +167,7 @@ static void select_cut_stun(monap_type *monap_ptr)
     }
 }
 
-static void calc_player_cut(PlayerType *player_ptr, monap_type *monap_ptr)
+static void calc_player_cut(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (monap_ptr->do_cut == 0) {
         return;
@@ -203,7 +203,7 @@ static int stat_value(const int raw)
  * 2%の確率で朦朧蓄積ランクを1上げる.
  * 肉体のパラメータが合計80を超える水準に強化されていたら朦朧蓄積ランクを1下げる.
  */
-static void process_player_stun(PlayerType *player_ptr, monap_type *monap_ptr)
+static void process_player_stun(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (monap_ptr->do_stun == 0) {
         return;
@@ -237,7 +237,7 @@ static void process_player_stun(PlayerType *player_ptr, monap_type *monap_ptr)
     }
 }
 
-static void monster_explode(PlayerType *player_ptr, monap_type *monap_ptr)
+static void monster_explode(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (!monap_ptr->explode) {
         return;
@@ -251,7 +251,7 @@ static void monster_explode(PlayerType *player_ptr, monap_type *monap_ptr)
     }
 }
 
-static void describe_attack_evasion(PlayerType *player_ptr, monap_type *monap_ptr)
+static void describe_attack_evasion(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (!monap_ptr->m_ptr->ml) {
         return;
@@ -272,7 +272,7 @@ static void describe_attack_evasion(PlayerType *player_ptr, monap_type *monap_pt
 #endif
 }
 
-static void gain_armor_exp(PlayerType *player_ptr, monap_type *monap_ptr)
+static void gain_armor_exp(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     const auto o_ptr_mh = &player_ptr->inventory_list[INVEN_MAIN_HAND];
     const auto o_ptr_sh = &player_ptr->inventory_list[INVEN_SUB_HAND];
@@ -305,7 +305,7 @@ static void gain_armor_exp(PlayerType *player_ptr, monap_type *monap_ptr)
  * @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
  * @details 最大4 回/モンスター/ターン、このルーチンを通る
  */
-static bool process_monster_attack_hit(PlayerType *player_ptr, monap_type *monap_ptr)
+static bool process_monster_attack_hit(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     disturb(player_ptr, true, true);
     if (effect_protecion_from_evil(player_ptr, monap_ptr)) {
@@ -336,7 +336,7 @@ static bool process_monster_attack_hit(PlayerType *player_ptr, monap_type *monap
  * @param player_ptr プレイヤーへの参照ポインタ
  * @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
  */
-static void process_monster_attack_evasion(PlayerType *player_ptr, monap_type *monap_ptr)
+static void process_monster_attack_evasion(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     switch (monap_ptr->method) {
     case RaceBlowMethodType::HIT:
@@ -369,7 +369,7 @@ static void process_monster_attack_evasion(PlayerType *player_ptr, monap_type *m
  * 非自明な類の打撃については、そのダメージが 0 ならば基本的に知識が増えない.
  * 但し、既に一定以上の知識があれば常に知識が増える(何をされたのか察知できる).
  */
-static void increase_blow_type_seen(PlayerType *player_ptr, monap_type *monap_ptr, const int ap_cnt)
+static void increase_blow_type_seen(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr, const int ap_cnt)
 {
     if (!is_original_ap_and_seen(player_ptr, monap_ptr->m_ptr) || monap_ptr->do_silly_attack) {
         return;
@@ -389,7 +389,7 @@ static void increase_blow_type_seen(PlayerType *player_ptr, monap_type *monap_pt
  * @brief モンスターからプレイヤーへの打撃処理本体
  * @return 打撃に反応してプレイヤーがその場から離脱したかどうか
  */
-static bool process_monster_blows(PlayerType *player_ptr, monap_type *monap_ptr)
+static bool process_monster_blows(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     auto *r_ptr = &r_info[monap_ptr->m_ptr->r_idx];
     for (auto ap_cnt = 0; ap_cnt < MAX_NUM_BLOWS; ap_cnt++) {
@@ -455,7 +455,7 @@ static bool process_monster_blows(PlayerType *player_ptr, monap_type *monap_ptr)
     return false;
 }
 
-static void postprocess_monster_blows(PlayerType *player_ptr, monap_type *monap_ptr)
+static void postprocess_monster_blows(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     SpellHex spell_hex(player_ptr, monap_ptr);
     spell_hex.store_vengeful_damage(monap_ptr->get_damage);
@@ -481,8 +481,8 @@ static void postprocess_monster_blows(PlayerType *player_ptr, monap_type *monap_
  */
 void make_attack_normal(PlayerType *player_ptr, short m_idx)
 {
-    monap_type tmp_monap;
-    monap_type *monap_ptr = initialize_monap_type(player_ptr, &tmp_monap, m_idx);
+    MonsterAttackPlayer tmp_monap;
+    MonsterAttackPlayer *monap_ptr = initialize_MonsterAttackPlayer(player_ptr, &tmp_monap, m_idx);
     if (!check_no_blow(player_ptr, monap_ptr)) {
         return;
     }
index 1f88fa9..0cc638a 100644 (file)
@@ -20,7 +20,7 @@
 #include "timed-effect/timed-effects.h"
 #include "view/display-messages.h"
 
-void process_blind_attack(PlayerType *player_ptr, monap_type *monap_ptr)
+void process_blind_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (has_resist_blind(player_ptr) || check_multishadow(player_ptr)) {
         return;
@@ -45,7 +45,7 @@ void process_blind_attack(PlayerType *player_ptr, monap_type *monap_ptr)
     monap_ptr->obvious = true;
 }
 
-void process_terrify_attack(PlayerType *player_ptr, monap_type *monap_ptr)
+void process_terrify_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (check_multishadow(player_ptr)) {
         return;
@@ -69,7 +69,7 @@ void process_terrify_attack(PlayerType *player_ptr, monap_type *monap_ptr)
     }
 }
 
-void process_paralyze_attack(PlayerType *player_ptr, monap_type *monap_ptr)
+void process_paralyze_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (check_multishadow(player_ptr)) {
         return;
@@ -93,7 +93,7 @@ void process_paralyze_attack(PlayerType *player_ptr, monap_type *monap_ptr)
     }
 }
 
-void process_lose_all_attack(PlayerType *player_ptr, monap_type *monap_ptr)
+void process_lose_all_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (do_dec_stat(player_ptr, A_STR)) {
         monap_ptr->obvious = true;
@@ -120,7 +120,7 @@ void process_lose_all_attack(PlayerType *player_ptr, monap_type *monap_ptr)
     }
 }
 
-void process_stun_attack(PlayerType *player_ptr, monap_type *monap_ptr)
+void process_stun_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (has_resist_sound(player_ptr) || check_multishadow(player_ptr)) {
         return;
@@ -137,7 +137,7 @@ void process_stun_attack(PlayerType *player_ptr, monap_type *monap_ptr)
  * @param player_ptr プレイヤーへの参照ポインタ
  * @monap_ptr モンスターからモンスターへの直接攻撃構造体への参照ポインタ
  */
-static void describe_disability(PlayerType *player_ptr, monap_type *monap_ptr)
+static void describe_disability(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     int stat = randint0(6);
     switch (stat) {
@@ -168,7 +168,7 @@ static void describe_disability(PlayerType *player_ptr, monap_type *monap_ptr)
     }
 }
 
-void process_monster_attack_time(PlayerType *player_ptr, monap_type *monap_ptr)
+void process_monster_attack_time(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (has_resist_time(player_ptr) || check_multishadow(player_ptr)) {
         return;
index 5ac96d0..4292910 100644 (file)
@@ -2,11 +2,11 @@
 
 #include "system/angband.h"
 
-typedef struct monap_type monap_type;
+class MonsterAttackPlayer;
 class PlayerType;
-void process_blind_attack(PlayerType *player_ptr, monap_type *monap_ptr);
-void process_terrify_attack(PlayerType *player_ptr, monap_type *monap_ptr);
-void process_paralyze_attack(PlayerType *player_ptr, monap_type *monap_ptr);
-void process_lose_all_attack(PlayerType *player_ptr, monap_type *monap_ptr);
-void process_stun_attack(PlayerType *player_ptr, monap_type *monap_ptr);
-void process_monster_attack_time(PlayerType *player_ptr, monap_type *monap_ptr);
+void process_blind_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void process_terrify_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void process_paralyze_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void process_lose_all_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void process_stun_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void process_monster_attack_time(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
index 48a841d..59bacc5 100644 (file)
@@ -36,7 +36,7 @@
  * @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
  * @details 減衰の計算式がpoisではなくnukeなのは仕様 (1/3では減衰が強すぎると判断したため)
  */
-static void calc_blow_poison(PlayerType *player_ptr, monap_type *monap_ptr)
+static void calc_blow_poison(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (monap_ptr->explode)
         return;
@@ -55,7 +55,7 @@ static void calc_blow_poison(PlayerType *player_ptr, monap_type *monap_ptr)
  * @param player_ptr プレイヤーへの参照ポインタ
  * @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
  */
-static void calc_blow_disenchant(PlayerType *player_ptr, monap_type *monap_ptr)
+static void calc_blow_disenchant(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (monap_ptr->explode)
         return;
@@ -78,7 +78,7 @@ static void calc_blow_disenchant(PlayerType *player_ptr, monap_type *monap_ptr)
  * @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
  * @detals 魔道具使用能力向上フラグがあれば、吸収対象のアイテムをスキャンされる回数が半分で済む
  */
-static void calc_blow_un_power(PlayerType *player_ptr, monap_type *monap_ptr)
+static void calc_blow_un_power(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     int damage_ratio = 1000;
     if (has_dec_mana(player_ptr))
@@ -113,7 +113,7 @@ static void calc_blow_un_power(PlayerType *player_ptr, monap_type *monap_ptr)
  * @param player_ptr プレイヤーへの参照ポインタ
  * @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
  */
-static void calc_blow_blind(PlayerType *player_ptr, monap_type *monap_ptr)
+static void calc_blow_blind(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (has_resist_blind(player_ptr))
         monap_ptr->damage = monap_ptr->damage * (randint1(4) + 3) / 8;
@@ -131,7 +131,7 @@ static void calc_blow_blind(PlayerType *player_ptr, monap_type *monap_ptr)
  * @param player_ptr プレイヤーへの参照ポインタ
  * @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
  */
-static void calc_blow_confusion(PlayerType *player_ptr, monap_type *monap_ptr)
+static void calc_blow_confusion(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (monap_ptr->explode) {
         return;
@@ -158,7 +158,7 @@ static void calc_blow_confusion(PlayerType *player_ptr, monap_type *monap_ptr)
  * @param player_ptr プレイヤーへの参照ポインタ
  * @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
  */
-static void calc_blow_fear(PlayerType *player_ptr, monap_type *monap_ptr)
+static void calc_blow_fear(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (has_resist_fear(player_ptr))
         monap_ptr->damage = monap_ptr->damage * (randint1(4) + 3) / 8;
@@ -176,7 +176,7 @@ static void calc_blow_fear(PlayerType *player_ptr, monap_type *monap_ptr)
  * @param player_ptr プレイヤーへの参照ポインタ
  * @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
  */
-static void calc_blow_paralysis(PlayerType *player_ptr, monap_type *monap_ptr)
+static void calc_blow_paralysis(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (has_free_act(player_ptr))
         monap_ptr->damage = monap_ptr->damage * (randint1(4) + 3) / 8;
@@ -194,7 +194,7 @@ static void calc_blow_paralysis(PlayerType *player_ptr, monap_type *monap_ptr)
  * @param player_ptr プレイヤーへの参照ポインタ
  * @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
  */
-static void calc_blow_drain_exp(PlayerType *player_ptr, monap_type *monap_ptr, const int drain_value, const int hold_exp_prob)
+static void calc_blow_drain_exp(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr, const int drain_value, const int hold_exp_prob)
 {
     int32_t d = damroll(drain_value, 6) + (player_ptr->exp / 100) * MON_DRAIN_LIFE;
     monap_ptr->obvious = true;
@@ -218,7 +218,7 @@ static void calc_blow_drain_exp(PlayerType *player_ptr, monap_type *monap_ptr, c
  * @param player_ptr プレイヤーへの参照ポインタ
  * @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
  */
-static void calc_blow_time(PlayerType *player_ptr, monap_type *monap_ptr)
+static void calc_blow_time(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (monap_ptr->explode)
         return;
@@ -235,7 +235,7 @@ static void calc_blow_time(PlayerType *player_ptr, monap_type *monap_ptr)
  * @param player_ptr プレイヤーへの参照ポインタ
  * @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
  */
-static void calc_blow_drain_life(PlayerType *player_ptr, monap_type *monap_ptr)
+static void calc_blow_drain_life(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     int32_t d = damroll(60, 6) + (player_ptr->exp / 100) * MON_DRAIN_LIFE;
     monap_ptr->obvious = true;
@@ -255,7 +255,7 @@ static void calc_blow_drain_life(PlayerType *player_ptr, monap_type *monap_ptr)
  * @param player_ptr プレイヤーへの参照ポインタ
  * @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
  */
-static void calc_blow_drain_mana(PlayerType *player_ptr, monap_type *monap_ptr)
+static void calc_blow_drain_mana(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     monap_ptr->obvious = true;
     int damage_ratio = 100;
@@ -273,7 +273,7 @@ static void calc_blow_drain_mana(PlayerType *player_ptr, monap_type *monap_ptr)
     update_smart_learn(player_ptr, monap_ptr->m_idx, DRS_MANA);
 }
 
-static void calc_blow_inertia(PlayerType *player_ptr, monap_type *monap_ptr)
+static void calc_blow_inertia(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if ((player_ptr->fast > 0) || (player_ptr->pspeed >= 130))
         monap_ptr->damage = monap_ptr->damage * (randint1(4) + 4) / 9;
@@ -289,7 +289,7 @@ static void calc_blow_inertia(PlayerType *player_ptr, monap_type *monap_ptr)
 /*!
 * @brief 空腹進行度を計算する (急速回復があれば+100%、遅消化があれば-50%)
 */
-static void calc_blow_hungry(PlayerType *player_ptr, monap_type *monap_ptr)
+static void calc_blow_hungry(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (player_ptr->regenerate)
         monap_ptr->damage = monap_ptr->damage * 2;
@@ -299,7 +299,7 @@ static void calc_blow_hungry(PlayerType *player_ptr, monap_type *monap_ptr)
     process_monster_attack_hungry(player_ptr, monap_ptr);
 }
 
-void switch_monster_blow_to_player(PlayerType *player_ptr, monap_type *monap_ptr)
+void switch_monster_blow_to_player(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     switch (monap_ptr->effect) {
     case RaceBlowEffectType::NONE:
index e7160b2..aec7744 100644 (file)
@@ -1,5 +1,5 @@
 #pragma once
 
-typedef struct monap_type monap_type;
+class MonsterAttackPlayer;
 class PlayerType;
-void switch_monster_blow_to_player(PlayerType *player_ptr, monap_type *monap_ptr);
+void switch_monster_blow_to_player(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
index ae6aafd..3bb1e18 100644 (file)
@@ -9,7 +9,7 @@
 #include "system/monster-type-definition.h"
 #include "system/player-type-definition.h"
 
-monap_type *initialize_monap_type(PlayerType *player_ptr, monap_type *monap_ptr, MONSTER_IDX m_idx)
+MonsterAttackPlayer *initialize_MonsterAttackPlayer(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr, MONSTER_IDX m_idx)
 {
 #ifdef JP
     monap_ptr->abbreviate = 0;
index c081f05..e888d33 100644 (file)
@@ -4,10 +4,10 @@
 #include "monster-attack/monster-attack-types.h"
 #include "system/angband.h"
 
-/* MONster-Attack-Player、地図のMAPと紛らわしいのでmonapとした */
 struct monster_type;
 struct object_type;
-typedef struct monap_type {
+class MonsterAttackPlayer {
+public:
 #ifdef JP
     int abbreviate; // 2回目以降の省略表現フラグ.
 #endif
@@ -35,7 +35,7 @@ typedef struct monap_type {
     ARMOUR_CLASS ac;
     bool alive;
     bool fear;
-} monap_type;
+};
 
 class PlayerType;
-monap_type *initialize_monap_type(PlayerType *player_ptr, monap_type *monap_ptr, MONSTER_IDX m_idx);
+MonsterAttackPlayer *initialize_MonsterAttackPlayer(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr, MONSTER_IDX m_idx);
index 6ee1ab4..b663572 100644 (file)
@@ -32,7 +32,7 @@
 #include "view/display-messages.h"
 #include "world/world-object.h"
 
-void process_eat_gold(PlayerType *player_ptr, monap_type *monap_ptr)
+void process_eat_gold(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (!player_ptr->paralyzed && (randint0(100) < (adj_dex_safe[player_ptr->stat_index[A_DEX]] + player_ptr->lev))) {
         msg_print(_("しかし素早く財布を守った!", "You quickly protect your money pouch!"));
@@ -76,7 +76,7 @@ void process_eat_gold(PlayerType *player_ptr, monap_type *monap_ptr)
  * @monap_ptr モンスターからモンスターへの直接攻撃構造体への参照ポインタ
  * @return 盗まれたらTRUE、何も盗まれなかったらFALSE
  */
-bool check_eat_item(PlayerType *player_ptr, monap_type *monap_ptr)
+bool check_eat_item(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (monster_confused_remaining(monap_ptr->m_ptr))
         return false;
@@ -99,7 +99,7 @@ bool check_eat_item(PlayerType *player_ptr, monap_type *monap_ptr)
  * @param player_ptr プレイヤーへの参照ポインタ
  * @monap_ptr モンスターからモンスターへの直接攻撃構造体への参照ポインタ
  */
-static void move_item_to_monster(PlayerType *player_ptr, monap_type *monap_ptr, const OBJECT_IDX o_idx)
+static void move_item_to_monster(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr, const OBJECT_IDX o_idx)
 {
     if (o_idx == 0)
         return;
@@ -124,7 +124,7 @@ static void move_item_to_monster(PlayerType *player_ptr, monap_type *monap_ptr,
  * @monap_ptr モンスターからモンスターへの直接攻撃構造体への参照ポインタ
  * @details eatとあるがお金や食べ物と違ってなくならない、盗んだモンスターを倒せば取り戻せる
  */
-void process_eat_item(PlayerType *player_ptr, monap_type *monap_ptr)
+void process_eat_item(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     for (int i = 0; i < 10; i++) {
         OBJECT_IDX o_idx;
@@ -153,7 +153,7 @@ void process_eat_item(PlayerType *player_ptr, monap_type *monap_ptr)
     }
 }
 
-void process_eat_food(PlayerType *player_ptr, monap_type *monap_ptr)
+void process_eat_food(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     for (int i = 0; i < 10; i++) {
         INVENTORY_IDX i_idx = (INVENTORY_IDX)randint0(INVEN_PACK);
@@ -177,7 +177,7 @@ void process_eat_food(PlayerType *player_ptr, monap_type *monap_ptr)
     }
 }
 
-void process_eat_lite(PlayerType *player_ptr, monap_type *monap_ptr)
+void process_eat_lite(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if ((monap_ptr->o_ptr->xtra4 <= 0) || monap_ptr->o_ptr->is_fixed_artifact())
         return;
@@ -202,7 +202,7 @@ void process_eat_lite(PlayerType *player_ptr, monap_type *monap_ptr)
  * @details 魔道具使用能力向上フラグがあれば、吸収量は全部ではない
  * 詳細はOSDN #40911の議論を参照のこと
  */
-bool process_un_power(PlayerType *player_ptr, monap_type *monap_ptr)
+bool process_un_power(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (((monap_ptr->o_ptr->tval != ItemKindType::STAFF) && (monap_ptr->o_ptr->tval != ItemKindType::WAND)) || (monap_ptr->o_ptr->pval == 0))
         return false;
@@ -261,7 +261,7 @@ bool check_drain_hp(PlayerType *player_ptr, const int32_t d)
     }
 }
 
-void process_drain_life(PlayerType *player_ptr, monap_type *monap_ptr, const bool resist_drain)
+void process_drain_life(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr, const bool resist_drain)
 {
     if ((monap_ptr->damage <= 5) || resist_drain)
         return;
@@ -281,7 +281,7 @@ void process_drain_life(PlayerType *player_ptr, monap_type *monap_ptr, const boo
         msg_format(_("%sは体力を回復したようだ。", "%^s appears healthier."), monap_ptr->m_name);
 }
 
-void process_drain_mana(PlayerType *player_ptr, monap_type *monap_ptr)
+void process_drain_mana(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if (check_multishadow(player_ptr)) {
         msg_print(_("攻撃は幻影に命中し、あなたには届かなかった。", "The attack hits Shadow, but you are unharmed!"));
@@ -304,7 +304,7 @@ void process_drain_mana(PlayerType *player_ptr, monap_type *monap_ptr)
  * @monap_ptr モンスターからモンスターへの直接攻撃構造体への参照ポインタ
  * @details 空腹、衰弱の一歩手前で止める優しさは残す。
  */
-void process_monster_attack_hungry(PlayerType *player_ptr, monap_type *monap_ptr)
+void process_monster_attack_hungry(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     msg_format(_("あなたは腹が減った!", "You feel hungry!"));
     auto subtracted_food = static_cast<int16_t>(player_ptr->food - monap_ptr->damage);
index 2c0f37a..b5b418c 100644 (file)
@@ -2,16 +2,16 @@
 
 #include "system/angband.h"
 
-typedef struct monap_type monap_type;
+class MonsterAttackPlayer;
 class PlayerType;
-void process_eat_gold(PlayerType *player_ptr, monap_type *monap_ptr);
-bool check_eat_item(PlayerType *player_ptr, monap_type *monap_ptr);
-void process_eat_item(PlayerType *player_ptr, monap_type *monap_ptr);
-void process_eat_food(PlayerType *player_ptr, monap_type *monap_ptr);
-void process_eat_lite(PlayerType *player_ptr, monap_type *monap_ptr);
+void process_eat_gold(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+bool check_eat_item(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void process_eat_item(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void process_eat_food(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void process_eat_lite(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
 
-bool process_un_power(PlayerType *player_ptr, monap_type *monap_ptr);
+bool process_un_power(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
 bool check_drain_hp(PlayerType *player_ptr, const int32_t d);
-void process_drain_life(PlayerType *player_ptr, monap_type *monap_ptr, const bool resist_drain);
-void process_drain_mana(PlayerType *player_ptr, monap_type *monap_ptr);
-void process_monster_attack_hungry(PlayerType *player_ptr, monap_type *monap_ptr);
+void process_drain_life(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr, const bool resist_drain);
+void process_drain_mana(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void process_monster_attack_hungry(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
index 5811529..42f6aaf 100644 (file)
@@ -33,7 +33,7 @@
  * @param player_ptr プレイヤーへの参照ポインタ
  * @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
  */
-void check_fall_off_horse(PlayerType *player_ptr, monap_type *monap_ptr)
+void check_fall_off_horse(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
 {
     if ((player_ptr->riding == 0) || (monap_ptr->damage == 0))
         return;
index 31277d1..2bde7cb 100644 (file)
@@ -2,7 +2,7 @@
 
 #include "system/angband.h"
 
-typedef struct monap_type monap_type;
+class MonsterAttackPlayer;
 class PlayerType;
-void check_fall_off_horse(PlayerType *player_ptr, monap_type *monap_ptr);
+void check_fall_off_horse(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
 bool process_fall_off_horse(PlayerType *player_ptr, HIT_POINT dam, bool force);
index 6627c2a..87425ab 100644 (file)
@@ -54,7 +54,7 @@ SpellHex::SpellHex(PlayerType *player_ptr)
     }
 }
 
-SpellHex::SpellHex(PlayerType *player_ptr, monap_type *monap_ptr)
+SpellHex::SpellHex(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
     : player_ptr(player_ptr)
     , monap_ptr(monap_ptr)
 {
index e0c7785..1c22c2e 100644 (file)
@@ -10,13 +10,13 @@ enum class SpellHexRevengeType : byte {
     REVENGE = 2,
 };
 
-struct monap_type;
+class MonsterAttackPlayer;
 class PlayerType;
 struct spell_hex_data_type;
 class SpellHex {
 public:
     SpellHex(PlayerType *player_ptr);
-    SpellHex(PlayerType *player_ptr, monap_type *monap_ptr);
+    SpellHex(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
     virtual ~SpellHex() = default;
 
     bool stop_spells_with_selection();
@@ -44,7 +44,7 @@ public:
 private:
     PlayerType *player_ptr;
     std::vector<int> casting_spells;
-    monap_type *monap_ptr = nullptr;
+    MonsterAttackPlayer *monap_ptr = nullptr;
     std::shared_ptr<spell_hex_data_type> spell_hex_data;
 
     std::tuple<bool, bool, char> select_spell_stopping(char *out_val);