OSDN Git Service

[Refactor] #39963 Separated effect-player-spirit.c/h from effect-player-switcher.c
[hengband/hengband.git] / src / effect / effect-player-switcher.c
index 6719251..339087b 100644 (file)
 #include "angband.h"
 #include "effect-player-util.h"
+#include "effect/effect-player-curse.h"
 #include "effect/effect-player-switcher.h"
-#include "spell/spells-type.h"
-#include "player-damage.h"
-#include "world.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"
+#include "player-damage.h"
 #include "player-effects.h"
 #include "player/mimic-info-table.h"
-#include "monster-spell.h"
-#include "object-curse.h"
-#include "effect/effect-player-resist-hurt.h"
-
-/*!
- * @brief \96\82\96@\82Ì\8cø\89Ê\82É\82æ\82Á\82Ä\97l\81X\82È\83\81\83b\83Z\81[\82ð\8fo\97Í\82µ\82½\82è\97^\82¦\82é\83_\83\81\81[\83W\82Ì\91\9d\8c¸\82ð\8ds\82Á\82½\82è\82·\82é
- * @param target_ptr \83v\83\8c\81[\83\84\81[\82Ö\82Ì\8eQ\8fÆ\83|\83C\83\93\83^
- * @param em_ptr \83v\83\8c\81[\83\84\81[\8cø\89Ê\8d\\91¢\91Ì\82Ö\82Ì\8eQ\8fÆ\83|\83C\83\93\83^
- * @return \82È\82µ
- */
-void switch_effects_player(player_type *target_ptr, effect_player_type *ep_ptr)
-{
-       switch (ep_ptr->effect_type)
-       {
-       case GF_ACID:
-               effect_player_elements(target_ptr, ep_ptr, _("\8e_\82Å\8dU\8c\82\82³\82ê\82½\81I", "You are hit by acid!"), acid_dam);
-               return;
-       case GF_FIRE:
-               effect_player_elements(target_ptr, ep_ptr, _("\89Î\89\8a\82Å\8dU\8c\82\82³\82ê\82½\81I", "You are hit by fire!"), fire_dam);
-               return;
-       case GF_COLD:
-               effect_player_elements(target_ptr, ep_ptr, _("\97â\8bC\82Å\8dU\8c\82\82³\82ê\82½\81I", "You are hit by cold!"), cold_dam);
-               return;
-       case GF_ELEC:
-               effect_player_elements(target_ptr, ep_ptr, _("\93d\8c\82\82Å\8dU\8c\82\82³\82ê\82½\81I", "You are hit by lightning!"), elec_dam);
-               return;
-       case GF_POIS:
-               effect_player_poison(target_ptr, ep_ptr);
-               return;
-       case GF_NUKE:
-               effect_player_nuke(target_ptr, ep_ptr);
-               return;
-       case GF_MISSILE:
-               effect_player_missile(target_ptr, ep_ptr);
-               return;
-       case GF_HOLY_FIRE:
-               effect_player_holy_fire(target_ptr, ep_ptr);
-               return;
-       case GF_HELL_FIRE:
-               effect_player_hell_fire(target_ptr, ep_ptr);
-               return;
-       case GF_ARROW:
-               effect_player_arrow(target_ptr, ep_ptr);
-               return;
-       case GF_PLASMA:
-               effect_player_plasma(target_ptr, ep_ptr);
-               return;
-       case GF_NETHER:
-               effect_player_nether(target_ptr, ep_ptr);
-               return;
-       case GF_WATER:
-               effect_player_water(target_ptr, ep_ptr);
-               return;
-       case GF_CHAOS:
-               effect_player_chaos(target_ptr, ep_ptr);
-               return;
-       case GF_SHARDS:
-               effect_player_shards(target_ptr, ep_ptr);
-               return;
-       case GF_SOUND:
-               effect_player_sound(target_ptr, ep_ptr);
-               return;
-       case GF_CONFUSION:
-               effect_player_confusion(target_ptr, ep_ptr);
-               return;
-       case GF_DISENCHANT:
-               effect_player_disenchant(target_ptr, ep_ptr);
-               return;
-       case GF_NEXUS:
-               effect_player_nexus(target_ptr, ep_ptr);
-               return;
-       case GF_FORCE:
-               effect_player_force(target_ptr, ep_ptr);
-               return;
-       case GF_ROCKET:
-               effect_player_rocket(target_ptr, ep_ptr);
-               return;
-       case GF_INERTIAL:
-               effect_player_inertial(target_ptr, ep_ptr);
-               return;
-       case GF_LITE:
-               effect_player_lite(target_ptr, ep_ptr);
-               return;
-       case GF_DARK:
-               effect_player_dark(target_ptr, ep_ptr);
-               return;
-       case GF_TIME:
-               effect_player_time(target_ptr, ep_ptr);
-               return;
-       case GF_GRAVITY:
-               effect_player_gravity(target_ptr, ep_ptr);
-               return;
-       case GF_DISINTEGRATE:
-               effect_player_disintegration(target_ptr, ep_ptr);
-               return;
-       case GF_OLD_HEAL:
-       {
-               if (target_ptr->blind) msg_print(_("\89½\82ç\82©\82Ì\8dU\8c\82\82É\82æ\82Á\82Ä\8bC\95ª\82ª\82æ\82­\82È\82Á\82½\81B", "You are hit by something invigorating!"));
-
-               (void)hp_player(target_ptr, ep_ptr->dam);
-               ep_ptr->dam = 0;
-               break;
-       }
-       case GF_OLD_SPEED:
-       {
-               if (target_ptr->blind) msg_print(_("\89½\82©\82Å\8dU\8c\82\82³\82ê\82½\81I", "You are hit by something!"));
-               (void)set_fast(target_ptr, target_ptr->fast + randint1(5), FALSE);
-               ep_ptr->dam = 0;
-               break;
-       }
-       case GF_OLD_SLOW:
-       {
-               if (target_ptr->blind) msg_print(_("\89½\82©\92x\82¢\82à\82Ì\82Å\8dU\8c\82\82³\82ê\82½\81I", "You are hit by something slow!"));
-               (void)set_slow(target_ptr, target_ptr->slow + randint0(4) + 4, FALSE);
-               break;
-       }
-       case GF_OLD_SLEEP:
-       {
-               if (target_ptr->free_act)  break;
-               if (target_ptr->blind) msg_print(_("\96°\82Á\82Ä\82µ\82Ü\82Á\82½\81I", "You fall asleep!"));
-
-               if (ironman_nightmare)
-               {
-                       msg_print(_("\8b°\82ë\82µ\82¢\8cõ\8ci\82ª\93ª\82É\95\82\82©\82ñ\82Å\82«\82½\81B", "A horrible vision enters your mind."));
-                       /* Have some nightmares */
-                       sanity_blast(target_ptr, NULL, FALSE);
-               }
-
-               set_paralyzed(target_ptr, target_ptr->paralyzed + ep_ptr->dam);
-               ep_ptr->dam = 0;
-               break;
-       }
-       case GF_MANA:
-       case GF_SEEKER:
-       case GF_SUPER_RAY:
-       {
-               if (target_ptr->blind) msg_print(_("\96\82\96@\82Ì\83I\81[\83\89\82Å\8dU\8c\82\82³\82ê\82½\81I", "You are hit by an aura of magic!"));
-
-               ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
-               break;
-       }
-       case GF_PSY_SPEAR:
-       {
-               if (target_ptr->blind) msg_print(_("\83G\83l\83\8b\83M\81[\82Ì\89ò\82Å\8dU\8c\82\82³\82ê\82½\81I", "You are hit by an energy!"));
-
-               ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_FORCE, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
-               break;
-       }
-       case GF_METEOR:
-       {
-               if (target_ptr->blind) msg_print(_("\89½\82©\82ª\8bó\82©\82ç\82 \82È\82½\82Ì\93ª\8fã\82É\97\8e\82¿\82Ä\82«\82½\81I", "Something falls from the sky on you!"));
-
-               ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
-               if (!target_ptr->resist_shard || one_in_(13))
-               {
-                       if (!target_ptr->immune_fire) inventory_damage(target_ptr, set_fire_destroy, 2);
-                       inventory_damage(target_ptr, set_cold_destroy, 2);
-               }
-
-               break;
-       }
-       case GF_ICE:
-       {
-               if (target_ptr->blind) msg_print(_("\89½\82©\89s\82­\97â\82½\82¢\82à\82Ì\82Å\8dU\8c\82\82³\82ê\82½\81I", "You are hit by something sharp and cold!"));
-
-               ep_ptr->get_damage = cold_dam(target_ptr, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell, FALSE);
-               if (CHECK_MULTISHADOW(target_ptr)) break;
-
-               if (!target_ptr->resist_shard)
-               {
-                       (void)set_cut(target_ptr, target_ptr->cut + damroll(5, 8));
-               }
-
-               if (!target_ptr->resist_sound)
-               {
-                       (void)set_stun(target_ptr, target_ptr->stun + randint1(15));
-               }
-
-               if ((!(target_ptr->resist_cold || is_oppose_cold(target_ptr))) || one_in_(12))
-               {
-                       if (!target_ptr->immune_cold) inventory_damage(target_ptr, set_cold_destroy, 3);
-               }
-
-               break;
-       }
-       case GF_DEATH_RAY:
-       {
-               if (target_ptr->blind) msg_print(_("\89½\82©\94ñ\8fí\82É\97â\82½\82¢\82à\82Ì\82Å\8dU\8c\82\82³\82ê\82½\81I", "You are hit by something extremely cold!"));
-
-               if (target_ptr->mimic_form)
-               {
-                       if (!(mimic_info[target_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_NONLIVING))
-                               ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
-
-                       break;
-               }
-
-               switch (target_ptr->prace)
-               {
-               case RACE_GOLEM:
-               case RACE_SKELETON:
-               case RACE_ZOMBIE:
-               case RACE_VAMPIRE:
-               case RACE_DEMON:
-               case RACE_SPECTRE:
-               {
-                       ep_ptr->dam = 0;
-                       break;
-               }
-               default:
-               {
-                       ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
-                       break;
-               }
-               }
-
-               break;
-       }
-       case GF_DRAIN_MANA:
-       {
-               if (CHECK_MULTISHADOW(target_ptr))
-               {
-                       msg_print(_("\8dU\8c\82\82Í\8c\89e\82É\96½\92\86\82µ\81A\82 \82È\82½\82É\82Í\93Í\82©\82È\82©\82Á\82½\81B", "The attack hits Shadow, but you are unharmed!"));
-                       ep_ptr->dam = 0;
-                       break;
-               }
-
-               if (target_ptr->csp == 0)
-               {
-                       ep_ptr->dam = 0;
-                       break;
-               }
-
-               if (ep_ptr->who > 0)
-                       msg_format(_("%^s\82É\90¸\90_\83G\83l\83\8b\83M\81[\82ð\8bz\82¢\8eæ\82ç\82ê\82Ä\82µ\82Ü\82Á\82½\81I", "%^s draws psychic energy from you!"), ep_ptr->m_name);
-               else
-                       msg_print(_("\90¸\90_\83G\83l\83\8b\83M\81[\82ð\8bz\82¢\8eæ\82ç\82ê\82Ä\82µ\82Ü\82Á\82½\81I", "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;
-                       break;
-               }
-
-               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\82Í\8bC\95ª\82ª\97Ç\82³\82»\82¤\82¾\81B", "%^s appears healthier."), ep_ptr->m_name);
-               }
-
-               ep_ptr->dam = 0;
-               break;
-       }
-       case GF_MIND_BLAST:
-       {
-               if ((randint0(100 + ep_ptr->rlev / 2) < MAX(5, target_ptr->skill_sav)) && !CHECK_MULTISHADOW(target_ptr))
-               {
-                       msg_print(_("\82µ\82©\82µ\8cø\97Í\82ð\92µ\82Ë\95Ô\82µ\82½\81I", "You resist the effects!"));
-                       learn_spell(target_ptr, ep_ptr->monspell);
-                       break;
-               }
-
-               if (CHECK_MULTISHADOW(target_ptr))
-               {
-                       ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
-                       break;
-               }
-
-               msg_print(_("\97ì\93I\83G\83l\83\8b\83M\81[\82Å\90¸\90_\82ª\8dU\8c\82\82³\82ê\82½\81B", "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);
-               break;
-       }
-       case GF_BRAIN_SMASH:
-       {
-               if ((randint0(100 + ep_ptr->rlev / 2) < MAX(5, target_ptr->skill_sav)) && !CHECK_MULTISHADOW(target_ptr))
-               {
-                       msg_print(_("\82µ\82©\82µ\8cø\97Í\82ð\92µ\82Ë\95Ô\82µ\82½\81I", "You resist the effects!"));
-                       learn_spell(target_ptr, ep_ptr->monspell);
-                       break;
-               }
-
-               if (!CHECK_MULTISHADOW(target_ptr))
-               {
-                       msg_print(_("\97ì\93I\83G\83l\83\8b\83M\81[\82Å\90¸\90_\82ª\8dU\8c\82\82³\82ê\82½\81B", "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)) break;
-
-               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);
-               }
+#include "spell/spells-type.h"
+#include "world.h"
 
-               if (!target_ptr->free_act)
-               {
-                       (void)set_paralyzed(target_ptr, target_ptr->paralyzed + randint0(4) + 4);
-               }
+void effect_player_mana(player_type *target_ptr, effect_player_type *ep_ptr) {
+  if (target_ptr->blind)
+    msg_print(
+        _("\96\82\96@\82Ì\83I\81[\83\89\82Å\8dU\8c\82\82³\82ê\82½\81I", "You are hit by an aura of magic!"));
 
-               (void)set_slow(target_ptr, target_ptr->slow + randint0(4) + 4, FALSE);
+  ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam,
+                                ep_ptr->killer, ep_ptr->monspell);
+}
 
-               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);
+void effect_player_psy_spear(player_type *target_ptr,
+                             effect_player_type *ep_ptr) {
+  if (target_ptr->blind)
+    msg_print(_("\83G\83l\83\8b\83M\81[\82Ì\89ò\82Å\8dU\8c\82\82³\82ê\82½\81I", "You are hit by an energy!"));
 
-               if (!target_ptr->resist_chaos)
-               {
-                       (void)set_image(target_ptr, target_ptr->image + randint0(250) + 150);
-               }
+  ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_FORCE, ep_ptr->dam,
+                                ep_ptr->killer, ep_ptr->monspell);
+}
 
-               break;
-       }
-       case GF_CAUSE_1:
-       {
-               if ((randint0(100 + ep_ptr->rlev / 2) < target_ptr->skill_sav) && !CHECK_MULTISHADOW(target_ptr))
-               {
-                       msg_print(_("\82µ\82©\82µ\8cø\97Í\82ð\92µ\82Ë\95Ô\82µ\82½\81I", "You resist the effects!"));
-                       learn_spell(target_ptr, ep_ptr->monspell);
-               }
-               else
-               {
-                       if (!CHECK_MULTISHADOW(target_ptr)) curse_equipment(target_ptr, 15, 0);
-                       ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
-               }
-               break;
-       }
-       case GF_CAUSE_2:
-       {
-               if ((randint0(100 + ep_ptr->rlev / 2) < target_ptr->skill_sav) && !CHECK_MULTISHADOW(target_ptr))
-               {
-                       msg_print(_("\82µ\82©\82µ\8cø\97Í\82ð\92µ\82Ë\95Ô\82µ\82½\81I", "You resist the effects!"));
-                       learn_spell(target_ptr, ep_ptr->monspell);
-               }
-               else
-               {
-                       if (!CHECK_MULTISHADOW(target_ptr)) curse_equipment(target_ptr, 25, MIN(ep_ptr->rlev / 2 - 15, 5));
-                       ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
-               }
-               break;
-       }
-       case GF_CAUSE_3:
-       {
-               if ((randint0(100 + ep_ptr->rlev / 2) < target_ptr->skill_sav) && !CHECK_MULTISHADOW(target_ptr))
-               {
-                       msg_print(_("\82µ\82©\82µ\8cø\97Í\82ð\92µ\82Ë\95Ô\82µ\82½\81I", "You resist the effects!"));
-                       learn_spell(target_ptr, ep_ptr->monspell);
-               }
-               else
-               {
-                       if (!CHECK_MULTISHADOW(target_ptr)) curse_equipment(target_ptr, 33, MIN(ep_ptr->rlev / 2 - 15, 15));
-                       ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
-               }
-               break;
-       }
-       case GF_CAUSE_4:
-       {
-               if ((randint0(100 + ep_ptr->rlev / 2) < target_ptr->skill_sav) && !(ep_ptr->m_ptr->r_idx == MON_KENSHIROU) && !CHECK_MULTISHADOW(target_ptr))
-               {
-                       msg_print(_("\82µ\82©\82µ\94é\8dE\82ð\92µ\82Ë\95Ô\82µ\82½\81I", "You resist the effects!"));
-                       learn_spell(target_ptr, ep_ptr->monspell);
-               }
-               else
-               {
-                       ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
-                       if (!CHECK_MULTISHADOW(target_ptr)) (void)set_cut(target_ptr, target_ptr->cut + damroll(10, 10));
-               }
+void effect_player_meteor(player_type *target_ptr, effect_player_type *ep_ptr) {
+  if (target_ptr->blind)
+    msg_print(_("\89½\82©\82ª\8bó\82©\82ç\82 \82È\82½\82Ì\93ª\8fã\82É\97\8e\82¿\82Ä\82«\82½\81I",
+                "Something falls from the sky on you!"));
+
+  ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam,
+                                ep_ptr->killer, ep_ptr->monspell);
+  if (!target_ptr->resist_shard || one_in_(13)) {
+    if (!target_ptr->immune_fire)
+      inventory_damage(target_ptr, set_fire_destroy, 2);
+    inventory_damage(target_ptr, set_cold_destroy, 2);
+  }
+}
 
-               break;
-       }
-       case GF_HAND_DOOM:
-       {
-               if ((randint0(100 + ep_ptr->rlev / 2) < target_ptr->skill_sav) && !CHECK_MULTISHADOW(target_ptr))
-               {
-                       msg_print(_("\82µ\82©\82µ\8cø\97Í\82ð\92µ\82Ë\95Ô\82µ\82½\81I", "You resist the effects!"));
-                       learn_spell(target_ptr, ep_ptr->monspell);
-               }
-               else
-               {
-                       if (!CHECK_MULTISHADOW(target_ptr))
-                       {
-                               msg_print(_("\82 \82È\82½\82Í\96½\82ª\94\96\82Ü\82Á\82Ä\82¢\82­\82æ\82¤\82É\8a´\82\82½\81I", "You feel your life fade away!"));
-                               curse_equipment(target_ptr, 40, 20);
-                       }
+void effect_player_icee(player_type *target_ptr, effect_player_type *ep_ptr) {
+  if (target_ptr->blind)
+    msg_print(_("\89½\82©\89s\82­\97â\82½\82¢\82à\82Ì\82Å\8dU\8c\82\82³\82ê\82½\81I",
+                "You are hit by something sharp and cold!"));
+
+  ep_ptr->get_damage = cold_dam(target_ptr, ep_ptr->dam, ep_ptr->killer,
+                                ep_ptr->monspell, FALSE);
+  if (CHECK_MULTISHADOW(target_ptr))
+    return;
+
+  if (!target_ptr->resist_shard) {
+    (void)set_cut(target_ptr, target_ptr->cut + damroll(5, 8));
+  }
+
+  if (!target_ptr->resist_sound) {
+    (void)set_stun(target_ptr, target_ptr->stun + randint1(15));
+  }
+
+  if ((!(target_ptr->resist_cold || is_oppose_cold(target_ptr))) ||
+      one_in_(12)) {
+    if (!target_ptr->immune_cold)
+      inventory_damage(target_ptr, set_cold_destroy, 3);
+  }
+}
 
-                       ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->m_name, ep_ptr->monspell);
+void effect_player_death_ray(player_type *target_ptr,
+                             effect_player_type *ep_ptr) {
+  if (target_ptr->blind)
+    msg_print(_("\89½\82©\94ñ\8fí\82É\97â\82½\82¢\82à\82Ì\82Å\8dU\8c\82\82³\82ê\82½\81I",
+                "You are hit by something extremely cold!"));
+
+  if (target_ptr->mimic_form) {
+    if (!(mimic_info[target_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_NONLIVING))
+      ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam,
+                                    ep_ptr->killer, ep_ptr->monspell);
+
+    return;
+  }
+
+  switch (target_ptr->prace) {
+  case RACE_GOLEM:
+  case RACE_SKELETON:
+  case RACE_ZOMBIE:
+  case RACE_VAMPIRE:
+  case RACE_DEMON:
+  case RACE_SPECTRE: {
+    ep_ptr->dam = 0;
+    break;
+  }
+  default: {
+    ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam,
+                                  ep_ptr->killer, ep_ptr->monspell);
+    break;
+  }
+  }
+}
 
-                       if (target_ptr->chp < 1) target_ptr->chp = 1;
-               }
+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) &&
+      !CHECK_MULTISHADOW(target_ptr)) {
+    msg_print(_("\82µ\82©\82µ\8cø\97Í\82ð\92µ\82Ë\95Ô\82µ\82½\81I", "You resist the effects!"));
+    learn_spell(target_ptr, ep_ptr->monspell);
+  } else {
+    if (!CHECK_MULTISHADOW(target_ptr)) {
+      msg_print(_("\82 \82È\82½\82Í\96½\82ª\94\96\82Ü\82Á\82Ä\82¢\82­\82æ\82¤\82É\8a´\82\82½\81I",
+                  "You feel your life fade away!"));
+      curse_equipment(target_ptr, 40, 20);
+    }
+
+    ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam,
+                                  ep_ptr->m_name, ep_ptr->monspell);
+
+    if (target_ptr->chp < 1)
+      target_ptr->chp = 1;
+  }
+}
 
-               break;
-       }
-       default:
-       {
-               ep_ptr->dam = 0;
-               break;
-       }
-       }
+/*!
+ * @brief
+ * \96\82\96@\82Ì\8cø\89Ê\82É\82æ\82Á\82Ä\97l\81X\82È\83\81\83b\83Z\81[\82ð\8fo\97Í\82µ\82½\82è\97^\82¦\82é\83_\83\81\81[\83W\82Ì\91\9d\8c¸\82ð\8ds\82Á\82½\82è\82·\82é
+ * @param target_ptr \83v\83\8c\81[\83\84\81[\82Ö\82Ì\8eQ\8fÆ\83|\83C\83\93\83^
+ * @param em_ptr \83v\83\8c\81[\83\84\81[\8cø\89Ê\8d\\91¢\91Ì\82Ö\82Ì\8eQ\8fÆ\83|\83C\83\93\83^
+ * @return \82È\82µ
+ */
+void switch_effects_player(player_type *target_ptr,
+                           effect_player_type *ep_ptr) {
+  switch (ep_ptr->effect_type) {
+  case GF_ACID:
+    effect_player_elements(target_ptr, ep_ptr,
+                           _("\8e_\82Å\8dU\8c\82\82³\82ê\82½\81I", "You are hit by acid!"),
+                           acid_dam);
+    return;
+  case GF_FIRE:
+    effect_player_elements(target_ptr, ep_ptr,
+                           _("\89Î\89\8a\82Å\8dU\8c\82\82³\82ê\82½\81I", "You are hit by fire!"),
+                           fire_dam);
+    return;
+  case GF_COLD:
+    effect_player_elements(target_ptr, ep_ptr,
+                           _("\97â\8bC\82Å\8dU\8c\82\82³\82ê\82½\81I", "You are hit by cold!"),
+                           cold_dam);
+    return;
+  case GF_ELEC:
+    effect_player_elements(target_ptr, ep_ptr,
+                           _("\93d\8c\82\82Å\8dU\8c\82\82³\82ê\82½\81I", "You are hit by lightning!"),
+                           elec_dam);
+    return;
+  case GF_POIS:
+    effect_player_poison(target_ptr, ep_ptr);
+    return;
+  case GF_NUKE:
+    effect_player_nuke(target_ptr, ep_ptr);
+    return;
+  case GF_MISSILE:
+    effect_player_missile(target_ptr, ep_ptr);
+    return;
+  case GF_HOLY_FIRE:
+    effect_player_holy_fire(target_ptr, ep_ptr);
+    return;
+  case GF_HELL_FIRE:
+    effect_player_hell_fire(target_ptr, ep_ptr);
+    return;
+  case GF_ARROW:
+    effect_player_arrow(target_ptr, ep_ptr);
+    return;
+  case GF_PLASMA:
+    effect_player_plasma(target_ptr, ep_ptr);
+    return;
+  case GF_NETHER:
+    effect_player_nether(target_ptr, ep_ptr);
+    return;
+  case GF_WATER:
+    effect_player_water(target_ptr, ep_ptr);
+    return;
+  case GF_CHAOS:
+    effect_player_chaos(target_ptr, ep_ptr);
+    return;
+  case GF_SHARDS:
+    effect_player_shards(target_ptr, ep_ptr);
+    return;
+  case GF_SOUND:
+    effect_player_sound(target_ptr, ep_ptr);
+    return;
+  case GF_CONFUSION:
+    effect_player_confusion(target_ptr, ep_ptr);
+    return;
+  case GF_DISENCHANT:
+    effect_player_disenchant(target_ptr, ep_ptr);
+    return;
+  case GF_NEXUS:
+    effect_player_nexus(target_ptr, ep_ptr);
+    return;
+  case GF_FORCE:
+    effect_player_force(target_ptr, ep_ptr);
+    return;
+  case GF_ROCKET:
+    effect_player_rocket(target_ptr, ep_ptr);
+    return;
+  case GF_INERTIAL:
+    effect_player_inertial(target_ptr, ep_ptr);
+    return;
+  case GF_LITE:
+    effect_player_lite(target_ptr, ep_ptr);
+    return;
+  case GF_DARK:
+    effect_player_dark(target_ptr, ep_ptr);
+    return;
+  case GF_TIME:
+    effect_player_time(target_ptr, ep_ptr);
+    return;
+  case GF_GRAVITY:
+    effect_player_gravity(target_ptr, ep_ptr);
+    return;
+  case GF_DISINTEGRATE:
+    effect_player_disintegration(target_ptr, ep_ptr);
+    return;
+  case GF_OLD_HEAL:
+    effect_player_old_heal(target_ptr, ep_ptr);
+    return;
+  case GF_OLD_SPEED:
+    effect_player_old_speed(target_ptr, ep_ptr);
+    return;
+  case GF_OLD_SLOW:
+    effect_player_old_slow(target_ptr);
+    return;
+  case GF_OLD_SLEEP:
+    effect_player_old_sleep(target_ptr, ep_ptr);
+    return;
+  case GF_MANA:
+  case GF_SEEKER:
+  case GF_SUPER_RAY:
+    effect_player_mana(target_ptr, ep_ptr);
+    return;
+  case GF_PSY_SPEAR:
+    effect_player_psy_spear(target_ptr, ep_ptr);
+    return;
+  case GF_METEOR:
+    effect_player_meteor(target_ptr, ep_ptr);
+    return;
+  case GF_ICE:
+    effect_player_icee(target_ptr, ep_ptr);
+    return;
+  case GF_DEATH_RAY:
+    effect_player_death_ray(target_ptr, ep_ptr);
+    return;
+  case GF_DRAIN_MANA:
+    effect_player_drain_mana(target_ptr, ep_ptr);
+    return;
+  case GF_MIND_BLAST:
+    effect_player_mind_blast(target_ptr, ep_ptr);
+    return;
+  case GF_BRAIN_SMASH:
+    effect_player_brain_smash(target_ptr, ep_ptr);
+    return;
+  case GF_CAUSE_1:
+    effect_player_curse_1(target_ptr, ep_ptr);
+    return;
+  case GF_CAUSE_2:
+    effect_player_curse_2(target_ptr, ep_ptr);
+    return;
+  case GF_CAUSE_3:
+    effect_player_curse_3(target_ptr, ep_ptr);
+    return;
+  case GF_CAUSE_4:
+    effect_player_curse_4(target_ptr, ep_ptr);
+    return;
+  case GF_HAND_DOOM:
+    effect_player_hand_doom(target_ptr, ep_ptr);
+    return;
+  default: {
+    ep_ptr->dam = 0;
+    return;
+  }
+  }
 }