From 2de8e5ea6411053098954136cd9e95d7036bfdfd Mon Sep 17 00:00:00 2001 From: Hourier Date: Sat, 23 May 2020 19:39:42 +0900 Subject: [PATCH] [Refactor] #40416 Separated vorpal-weapon.c/h from player-attack.c --- Hengband/Hengband/Hengband.vcxproj | 2 + Hengband/Hengband/Hengband.vcxproj.filters | 6 +++ src/Makefile.am | 1 + src/combat/player-attack.c | 84 +---------------------------- src/combat/vorpal-weapon.c | 85 ++++++++++++++++++++++++++++++ src/combat/vorpal-weapon.h | 6 +++ 6 files changed, 101 insertions(+), 83 deletions(-) create mode 100644 src/combat/vorpal-weapon.c create mode 100644 src/combat/vorpal-weapon.h diff --git a/Hengband/Hengband/Hengband.vcxproj b/Hengband/Hengband/Hengband.vcxproj index 8eccb379b..2649df3a4 100644 --- a/Hengband/Hengband/Hengband.vcxproj +++ b/Hengband/Hengband/Hengband.vcxproj @@ -178,6 +178,7 @@ + @@ -440,6 +441,7 @@ + diff --git a/Hengband/Hengband/Hengband.vcxproj.filters b/Hengband/Hengband/Hengband.vcxproj.filters index e8a2a127d..311f5ad70 100644 --- a/Hengband/Hengband/Hengband.vcxproj.filters +++ b/Hengband/Hengband/Hengband.vcxproj.filters @@ -1019,6 +1019,9 @@ combat + + combat + @@ -2110,6 +2113,9 @@ combat + + combat + diff --git a/src/Makefile.am b/src/Makefile.am index 0548fc669..b938b75ca 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -353,6 +353,7 @@ hengband_SOURCES = \ combat/attack-criticality.c combat/attack-criticality.h \ combat/player-attack.c combat/player-attack.h \ combat/blood-sucking-processor.c combat/blood-sucking-processor.h \ + combat/vorpal-weapon.c combat/vorpal-weapon.h \ combat/shoot.c combat/shoot.h \ combat/snipe.c combat/snipe.h \ \ diff --git a/src/combat/player-attack.c b/src/combat/player-attack.c index 90e1cc4a0..0bfae1b76 100644 --- a/src/combat/player-attack.c +++ b/src/combat/player-attack.c @@ -11,7 +11,7 @@ #include "combat/martial-arts-table.h" #include "combat/player-attack-util.h" #include "combat/slaying.h" -#include "io/files-util.h" +#include "combat/vorpal-weapon.h" #include "main/sound-definitions-table.h" #include "mind/monk-attack.h" #include "mind/racial-samurai.h" @@ -201,88 +201,6 @@ static chaotic_effect select_chaotic_effect(player_type *attacker_ptr, player_at } /*! - * @brief ヴォーパル武器で攻撃した時のメッセージ表示 - * @param pa_ptr 直接攻撃構造体への参照ポインタ - * @param int 倍率 - * @return なし - */ -static void print_vorpal_message(player_attack_type *pa_ptr, const int magnification) -{ - switch (magnification) { - case 2: - msg_format(_("%sを斬った!", "You gouge %s!"), pa_ptr->m_name); - break; - case 3: - msg_format(_("%sをぶった斬った!", "You maim %s!"), pa_ptr->m_name); - break; - case 4: - msg_format(_("%sをメッタ斬りにした!", "You carve %s!"), pa_ptr->m_name); - break; - case 5: - msg_format(_("%sをメッタメタに斬った!", "You cleave %s!"), pa_ptr->m_name); - break; - case 6: - msg_format(_("%sを刺身にした!", "You smite %s!"), pa_ptr->m_name); - break; - case 7: - msg_format(_("%sを斬って斬って斬りまくった!", "You eviscerate %s!"), pa_ptr->m_name); - break; - default: - msg_format(_("%sを細切れにした!", "You shred %s!"), pa_ptr->m_name); - break; - } -} - -/*! - * @brief チェンソーのノイズ音を表示する - * @param o_ptr チェンソーへの参照ポインタ - * @return なし - */ -static void print_chainsword_noise(object_type *o_ptr) -{ - if ((o_ptr->name1 != ART_CHAINSWORD) || one_in_(2)) - return; - - char chainsword_noise[1024]; - if (!get_rnd_line(_("chainswd_j.txt", "chainswd.txt"), 0, chainsword_noise)) - msg_print(chainsword_noise); -} - -/*! - * @brief ヴォーパル武器利用時の処理メインルーチン - * @param attacker_ptr プレーヤーへの参照ポインタ - * @param pa_ptr 直接攻撃構造体への参照ポインタ - * @param vorpal_cut メッタ斬りにできるかどうか - * @param vorpal_chance ヴォーパル倍率上昇の機会値 - * @return なし - */ -static void process_vorpal_attack(player_type *attacker_ptr, player_attack_type *pa_ptr, const bool vorpal_cut, const int vorpal_chance) -{ - if (!vorpal_cut) - return; - - object_type *o_ptr = &attacker_ptr->inventory_list[INVEN_RARM + pa_ptr->hand]; - int vorpal_magnification = 2; - print_chainsword_noise(o_ptr); - if (o_ptr->name1 == ART_VORPAL_BLADE) - msg_print(_("目にも止まらぬヴォーパルブレード、手錬の早業!", "Your Vorpal Blade goes snicker-snack!")); - else - msg_format(_("%sをグッサリ切り裂いた!", "Your weapon cuts deep into %s!"), pa_ptr->m_name); - - while (one_in_(vorpal_chance)) - vorpal_magnification++; - - pa_ptr->attack_damage *= (HIT_POINT)vorpal_magnification; - monster_race *r_ptr = &r_info[pa_ptr->m_ptr->r_idx]; - if (((r_ptr->flagsr & RFR_RES_ALL) ? pa_ptr->attack_damage / 100 : pa_ptr->attack_damage) > pa_ptr->m_ptr->hp) - msg_format(_("%sを真っ二つにした!", "You cut %s in half!"), pa_ptr->m_name); - else - print_vorpal_message(pa_ptr, vorpal_magnification); - - pa_ptr->drain_result = pa_ptr->drain_result * 3 / 2; -} - -/*! * @brief 武器による直接攻撃メインルーチン * @param attacker_ptr プレーヤーへの参照ポインタ * @param pa_ptr 直接攻撃構造体への参照ポインタ diff --git a/src/combat/vorpal-weapon.c b/src/combat/vorpal-weapon.c new file mode 100644 index 000000000..0c0beccb4 --- /dev/null +++ b/src/combat/vorpal-weapon.c @@ -0,0 +1,85 @@ +#include "combat/vorpal-weapon.h" +#include "io/files-util.h" +#include "object/artifact.h" + +/*! + * @brief ヴォーパル武器で攻撃した時のメッセージ表示 + * @param pa_ptr 直接攻撃構造体への参照ポインタ + * @param int 倍率 + * @return なし + */ +static void print_vorpal_message(player_attack_type *pa_ptr, const int magnification) +{ + switch (magnification) { + case 2: + msg_format(_("%sを斬った!", "You gouge %s!"), pa_ptr->m_name); + break; + case 3: + msg_format(_("%sをぶった斬った!", "You maim %s!"), pa_ptr->m_name); + break; + case 4: + msg_format(_("%sをメッタ斬りにした!", "You carve %s!"), pa_ptr->m_name); + break; + case 5: + msg_format(_("%sをメッタメタに斬った!", "You cleave %s!"), pa_ptr->m_name); + break; + case 6: + msg_format(_("%sを刺身にした!", "You smite %s!"), pa_ptr->m_name); + break; + case 7: + msg_format(_("%sを斬って斬って斬りまくった!", "You eviscerate %s!"), pa_ptr->m_name); + break; + default: + msg_format(_("%sを細切れにした!", "You shred %s!"), pa_ptr->m_name); + break; + } +} + +/*! + * @brief チェンソーのノイズ音を表示する + * @param o_ptr チェンソーへの参照ポインタ + * @return なし + */ +static void print_chainsword_noise(object_type *o_ptr) +{ + if ((o_ptr->name1 != ART_CHAINSWORD) || one_in_(2)) + return; + + char chainsword_noise[1024]; + if (!get_rnd_line(_("chainswd_j.txt", "chainswd.txt"), 0, chainsword_noise)) + msg_print(chainsword_noise); +} + +/*! + * @brief ヴォーパル武器利用時の処理メインルーチン + * @param attacker_ptr プレーヤーへの参照ポインタ + * @param pa_ptr 直接攻撃構造体への参照ポインタ + * @param vorpal_cut メッタ斬りにできるかどうか + * @param vorpal_chance ヴォーパル倍率上昇の機会値 + * @return なし + */ +void process_vorpal_attack(player_type *attacker_ptr, player_attack_type *pa_ptr, const bool vorpal_cut, const int vorpal_chance) +{ + if (!vorpal_cut) + return; + + object_type *o_ptr = &attacker_ptr->inventory_list[INVEN_RARM + pa_ptr->hand]; + int vorpal_magnification = 2; + print_chainsword_noise(o_ptr); + if (o_ptr->name1 == ART_VORPAL_BLADE) + msg_print(_("目にも止まらぬヴォーパルブレード、手錬の早業!", "Your Vorpal Blade goes snicker-snack!")); + else + msg_format(_("%sをグッサリ切り裂いた!", "Your weapon cuts deep into %s!"), pa_ptr->m_name); + + while (one_in_(vorpal_chance)) + vorpal_magnification++; + + pa_ptr->attack_damage *= (HIT_POINT)vorpal_magnification; + monster_race *r_ptr = &r_info[pa_ptr->m_ptr->r_idx]; + if (((r_ptr->flagsr & RFR_RES_ALL) ? pa_ptr->attack_damage / 100 : pa_ptr->attack_damage) > pa_ptr->m_ptr->hp) + msg_format(_("%sを真っ二つにした!", "You cut %s in half!"), pa_ptr->m_name); + else + print_vorpal_message(pa_ptr, vorpal_magnification); + + pa_ptr->drain_result = pa_ptr->drain_result * 3 / 2; +} diff --git a/src/combat/vorpal-weapon.h b/src/combat/vorpal-weapon.h new file mode 100644 index 000000000..7c6a3e8be --- /dev/null +++ b/src/combat/vorpal-weapon.h @@ -0,0 +1,6 @@ +#pragma once + +#include "system/angband.h" +#include "combat/player-attack-util.h" + +void process_vorpal_attack(player_type *attacker_ptr, player_attack_type *pa_ptr, const bool vorpal_cut, const int vorpal_chance); -- 2.11.0