From 206a182059e31bcc70f35ffb8cddd2ad523691dc Mon Sep 17 00:00:00 2001 From: Hourier Date: Mon, 4 May 2020 21:59:39 +0900 Subject: [PATCH] [Refactor] #39963 Separated effect-player-spirit.c/h from effect-player-switcher.c --- Hengband_vcs2017/Hengband/Hengband.vcxproj | 2 + Hengband_vcs2017/Hengband/Hengband.vcxproj.filters | 6 + src/Makefile.am | 1 + src/effect/effect-player-spirit.c | 149 +++++++++++++++++++++ src/effect/effect-player-spirit.h | 5 + src/effect/effect-player-switcher.c | 143 +------------------- 6 files changed, 164 insertions(+), 142 deletions(-) create mode 100644 src/effect/effect-player-spirit.c create mode 100644 src/effect/effect-player-spirit.h diff --git a/Hengband_vcs2017/Hengband/Hengband.vcxproj b/Hengband_vcs2017/Hengband/Hengband.vcxproj index 053d3b298..f4976c075 100644 --- a/Hengband_vcs2017/Hengband/Hengband.vcxproj +++ b/Hengband_vcs2017/Hengband/Hengband.vcxproj @@ -193,6 +193,7 @@ + @@ -377,6 +378,7 @@ + diff --git a/Hengband_vcs2017/Hengband/Hengband.vcxproj.filters b/Hengband_vcs2017/Hengband/Hengband.vcxproj.filters index 172c78b6e..d7d5e43fa 100644 --- a/Hengband_vcs2017/Hengband/Hengband.vcxproj.filters +++ b/Hengband_vcs2017/Hengband/Hengband.vcxproj.filters @@ -754,6 +754,9 @@ effect + + effect + @@ -1520,6 +1523,9 @@ effect + + effect + diff --git a/src/Makefile.am b/src/Makefile.am index 24972dcd9..5e37084d6 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -184,6 +184,7 @@ hengband_SOURCES = \ effect/effect-player-resist-hurt.c effect/effect-player-resist-hurt.h \ effect/effect-player-oldies.c effect/effect-player-oldies.h \ effect/effect-player-curse.c effect/effect-player-curse.h \ + effect/effect-player-spirit.c effect/effect-player-spirit.h \ effect/effect-player-switcher.c effect/effect-player-switcher.h \ \ spell/technic-info-table.c spell/technic-info-table.h \ diff --git a/src/effect/effect-player-spirit.c b/src/effect/effect-player-spirit.c new file mode 100644 index 000000000..d5698edcd --- /dev/null +++ b/src/effect/effect-player-spirit.c @@ -0,0 +1,149 @@ +#include "angband.h" +#include "effect/effect-player-util.h" +#include "effect/effect-player-spirit.h" +#include "monster-spell.h" +#include "player-damage.h" +#include "player-effects.h" +#include "world.h" + +void effect_player_drain_mana(player_type *target_ptr, + effect_player_type *ep_ptr) { + if (CHECK_MULTISHADOW(target_ptr)) { + msg_print(_("攻撃は幻影に命中し、あなたには届かなかった。", + "The attack hits Shadow, but you are unharmed!")); + ep_ptr->dam = 0; + return; + } + + if (target_ptr->csp == 0) { + ep_ptr->dam = 0; + return; + } + + if (ep_ptr->who > 0) + msg_format(_("%^sに精神エネルギーを吸い取られてしまった!", + "%^s draws psychic energy from you!"), + ep_ptr->m_name); + else + msg_print(_("精神エネルギーを吸い取られてしまった!", + "Your psychic energy is drawn!")); + + if (ep_ptr->dam >= target_ptr->csp) { + ep_ptr->dam = target_ptr->csp; + target_ptr->csp = 0; + target_ptr->csp_frac = 0; + } else { + target_ptr->csp -= ep_ptr->dam; + } + + learn_spell(target_ptr, ep_ptr->monspell); + target_ptr->redraw |= (PR_MANA); + target_ptr->window |= (PW_PLAYER | PW_SPELL); + + if ((ep_ptr->who <= 0) || (ep_ptr->m_ptr->hp >= ep_ptr->m_ptr->maxhp)) { + ep_ptr->dam = 0; + return; + } + + ep_ptr->m_ptr->hp += ep_ptr->dam; + if (ep_ptr->m_ptr->hp > ep_ptr->m_ptr->maxhp) + ep_ptr->m_ptr->hp = ep_ptr->m_ptr->maxhp; + + if (target_ptr->health_who == ep_ptr->who) + target_ptr->redraw |= (PR_HEALTH); + if (target_ptr->riding == ep_ptr->who) + target_ptr->redraw |= (PR_UHEALTH); + + if (ep_ptr->m_ptr->ml) { + msg_format(_("%^sは気分が良さそうだ。", "%^s appears healthier."), + ep_ptr->m_name); + } + + ep_ptr->dam = 0; +} + +void effect_player_mind_blast(player_type *target_ptr, + effect_player_type *ep_ptr) { + if ((randint0(100 + ep_ptr->rlev / 2) < MAX(5, target_ptr->skill_sav)) && + !CHECK_MULTISHADOW(target_ptr)) { + msg_print(_("しかし効力を跳ね返した!", "You resist the effects!")); + learn_spell(target_ptr, ep_ptr->monspell); + return; + } + + if (CHECK_MULTISHADOW(target_ptr)) { + ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, + ep_ptr->killer, ep_ptr->monspell); + return; + } + + msg_print(_("霊的エネルギーで精神が攻撃された。", + "Your mind is blasted by psionic energy.")); + if (!target_ptr->resist_conf) { + (void)set_confused(target_ptr, target_ptr->confused + randint0(4) + 4); + } + + if (!target_ptr->resist_chaos && one_in_(3)) { + (void)set_image(target_ptr, target_ptr->image + randint0(250) + 150); + } + + target_ptr->csp -= 50; + if (target_ptr->csp < 0) { + target_ptr->csp = 0; + target_ptr->csp_frac = 0; + } + + target_ptr->redraw |= PR_MANA; + ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, + ep_ptr->killer, ep_ptr->monspell); +} + +void effect_player_brain_smash(player_type *target_ptr, + effect_player_type *ep_ptr) { + if ((randint0(100 + ep_ptr->rlev / 2) < MAX(5, target_ptr->skill_sav)) && + !CHECK_MULTISHADOW(target_ptr)) { + msg_print(_("しかし効力を跳ね返した!", "You resist the effects!")); + learn_spell(target_ptr, ep_ptr->monspell); + return; + } + + if (!CHECK_MULTISHADOW(target_ptr)) { + msg_print(_("霊的エネルギーで精神が攻撃された。", + "Your mind is blasted by psionic energy.")); + + target_ptr->csp -= 100; + if (target_ptr->csp < 0) { + target_ptr->csp = 0; + target_ptr->csp_frac = 0; + } + target_ptr->redraw |= PR_MANA; + } + + ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, + ep_ptr->killer, ep_ptr->monspell); + if (CHECK_MULTISHADOW(target_ptr)) + return; + + if (!target_ptr->resist_blind) { + (void)set_blind(target_ptr, target_ptr->blind + 8 + randint0(8)); + } + + if (!target_ptr->resist_conf) { + (void)set_confused(target_ptr, target_ptr->confused + randint0(4) + 4); + } + + if (!target_ptr->free_act) { + (void)set_paralyzed(target_ptr, target_ptr->paralyzed + randint0(4) + 4); + } + + (void)set_slow(target_ptr, target_ptr->slow + randint0(4) + 4, FALSE); + + while (randint0(100 + ep_ptr->rlev / 2) > (MAX(5, target_ptr->skill_sav))) + (void)do_dec_stat(target_ptr, A_INT); + while (randint0(100 + ep_ptr->rlev / 2) > (MAX(5, target_ptr->skill_sav))) + (void)do_dec_stat(target_ptr, A_WIS); + + if (!target_ptr->resist_chaos) { + (void)set_image(target_ptr, target_ptr->image + randint0(250) + 150); + } +} diff --git a/src/effect/effect-player-spirit.h b/src/effect/effect-player-spirit.h new file mode 100644 index 000000000..6d839b019 --- /dev/null +++ b/src/effect/effect-player-spirit.h @@ -0,0 +1,5 @@ +#pragma once + +void effect_player_drain_mana(player_type *target_ptr, effect_player_type *ep_ptr); +void effect_player_mind_blast(player_type *target_ptr, effect_player_type *ep_ptr); +void effect_player_brain_smash(player_type *target_ptr, effect_player_type *ep_ptr); diff --git a/src/effect/effect-player-switcher.c b/src/effect/effect-player-switcher.c index ba25a85b2..339087bee 100644 --- a/src/effect/effect-player-switcher.c +++ b/src/effect/effect-player-switcher.c @@ -4,6 +4,7 @@ #include "effect/effect-player-switcher.h" #include "effect/effect-player-oldies.h" #include "effect/effect-player-resist-hurt.h" +#include "effect/effect-player-spirit.h" #include "monster-spell.h" #include "object-broken.h" #include "object-curse.h" @@ -102,148 +103,6 @@ void effect_player_death_ray(player_type *target_ptr, } } -void effect_player_drain_mana(player_type *target_ptr, - effect_player_type *ep_ptr) { - if (CHECK_MULTISHADOW(target_ptr)) { - msg_print(_("UŒ‚‚ÍŒ¶‰e‚É–½’†‚µA‚ ‚È‚½‚É‚Í“Í‚©‚È‚©‚Á‚½B", - "The attack hits Shadow, but you are unharmed!")); - ep_ptr->dam = 0; - return; - } - - if (target_ptr->csp == 0) { - ep_ptr->dam = 0; - return; - } - - if (ep_ptr->who > 0) - msg_format(_("%^s‚ɐ¸_ƒGƒlƒ‹ƒM[‚ð‹z‚¢Žæ‚ç‚ê‚Ä‚µ‚Ü‚Á‚½I", - "%^s draws psychic energy from you!"), - ep_ptr->m_name); - else - msg_print(_("¸_ƒGƒlƒ‹ƒM[‚ð‹z‚¢Žæ‚ç‚ê‚Ä‚µ‚Ü‚Á‚½I", - "Your psychic energy is drawn!")); - - if (ep_ptr->dam >= target_ptr->csp) { - ep_ptr->dam = target_ptr->csp; - target_ptr->csp = 0; - target_ptr->csp_frac = 0; - } else { - target_ptr->csp -= ep_ptr->dam; - } - - learn_spell(target_ptr, ep_ptr->monspell); - target_ptr->redraw |= (PR_MANA); - target_ptr->window |= (PW_PLAYER | PW_SPELL); - - if ((ep_ptr->who <= 0) || (ep_ptr->m_ptr->hp >= ep_ptr->m_ptr->maxhp)) { - ep_ptr->dam = 0; - return; - } - - ep_ptr->m_ptr->hp += ep_ptr->dam; - if (ep_ptr->m_ptr->hp > ep_ptr->m_ptr->maxhp) - ep_ptr->m_ptr->hp = ep_ptr->m_ptr->maxhp; - - if (target_ptr->health_who == ep_ptr->who) - target_ptr->redraw |= (PR_HEALTH); - if (target_ptr->riding == ep_ptr->who) - target_ptr->redraw |= (PR_UHEALTH); - - if (ep_ptr->m_ptr->ml) { - msg_format(_("%^s‚Í‹C•ª‚ª—Ç‚³‚»‚¤‚¾B", "%^s appears healthier."), - ep_ptr->m_name); - } - - ep_ptr->dam = 0; -} - -void effect_player_mind_blast(player_type *target_ptr, - effect_player_type *ep_ptr) { - if ((randint0(100 + ep_ptr->rlev / 2) < MAX(5, target_ptr->skill_sav)) && - !CHECK_MULTISHADOW(target_ptr)) { - msg_print(_("‚µ‚©‚µŒø—͂𒵂˕Ԃµ‚½I", "You resist the effects!")); - learn_spell(target_ptr, ep_ptr->monspell); - return; - } - - if (CHECK_MULTISHADOW(target_ptr)) { - ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, - ep_ptr->killer, ep_ptr->monspell); - return; - } - - msg_print(_("—ì“IƒGƒlƒ‹ƒM[‚Ő¸_‚ªUŒ‚‚³‚ꂽB", - "Your mind is blasted by psionic energy.")); - if (!target_ptr->resist_conf) { - (void)set_confused(target_ptr, target_ptr->confused + randint0(4) + 4); - } - - if (!target_ptr->resist_chaos && one_in_(3)) { - (void)set_image(target_ptr, target_ptr->image + randint0(250) + 150); - } - - target_ptr->csp -= 50; - if (target_ptr->csp < 0) { - target_ptr->csp = 0; - target_ptr->csp_frac = 0; - } - - target_ptr->redraw |= PR_MANA; - ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, - ep_ptr->killer, ep_ptr->monspell); -} - -void effect_player_brain_smash(player_type *target_ptr, - effect_player_type *ep_ptr) { - if ((randint0(100 + ep_ptr->rlev / 2) < MAX(5, target_ptr->skill_sav)) && - !CHECK_MULTISHADOW(target_ptr)) { - msg_print(_("‚µ‚©‚µŒø—͂𒵂˕Ԃµ‚½I", "You resist the effects!")); - learn_spell(target_ptr, ep_ptr->monspell); - return; - } - - if (!CHECK_MULTISHADOW(target_ptr)) { - msg_print(_("—ì“IƒGƒlƒ‹ƒM[‚Ő¸_‚ªUŒ‚‚³‚ꂽB", - "Your mind is blasted by psionic energy.")); - - target_ptr->csp -= 100; - if (target_ptr->csp < 0) { - target_ptr->csp = 0; - target_ptr->csp_frac = 0; - } - target_ptr->redraw |= PR_MANA; - } - - ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, - ep_ptr->killer, ep_ptr->monspell); - if (CHECK_MULTISHADOW(target_ptr)) - return; - - if (!target_ptr->resist_blind) { - (void)set_blind(target_ptr, target_ptr->blind + 8 + randint0(8)); - } - - if (!target_ptr->resist_conf) { - (void)set_confused(target_ptr, target_ptr->confused + randint0(4) + 4); - } - - if (!target_ptr->free_act) { - (void)set_paralyzed(target_ptr, target_ptr->paralyzed + randint0(4) + 4); - } - - (void)set_slow(target_ptr, target_ptr->slow + randint0(4) + 4, FALSE); - - while (randint0(100 + ep_ptr->rlev / 2) > (MAX(5, target_ptr->skill_sav))) - (void)do_dec_stat(target_ptr, A_INT); - while (randint0(100 + ep_ptr->rlev / 2) > (MAX(5, target_ptr->skill_sav))) - (void)do_dec_stat(target_ptr, A_WIS); - - if (!target_ptr->resist_chaos) { - (void)set_image(target_ptr, target_ptr->image + randint0(250) + 150); - } -} - void effect_player_hand_doom(player_type *target_ptr, effect_player_type *ep_ptr) { if ((randint0(100 + ep_ptr->rlev / 2) < target_ptr->skill_sav) && -- 2.11.0