OSDN Git Service

[Refactor] #37353 cnv_stat() と modify_stat_value() を player-status.c/h へ移動。
[hengband/hengband.git] / src / mspells3.c
index 5b4c947..5c178fb 100644 (file)
@@ -16,6 +16,8 @@
 #include "avatar.h"
 #include "spells-status.h"
 #include "cmd-spell.h"
+#include "player-status.h"
+#include "monster-spell.h"
 
 #define pseudo_plev() (((p_ptr->lev + 40) * (p_ptr->lev + 40) - 1550) / 130) /*!< モンスター魔法をプレイヤーが使用する場合の換算レベル */
 
@@ -343,8 +345,6 @@ static bool get_learned_power(SPELL_IDX *sn)
 
        if (use_menu) screen_save();
 
-       /* Get a spell from the user */
-
        choice= (always_show_list || use_menu) ? ESCAPE:1 ;
        while (!flag)
        {
@@ -420,8 +420,6 @@ static bool get_learned_power(SPELL_IDX *sn)
                        if (!redraw || use_menu)
                        {
                                char psi_desc[80];
-
-                               /* Show list */
                                redraw = TRUE;
                                if (!use_menu) screen_save();
 
@@ -608,7 +606,7 @@ static bool cast_learned_spell(int spell, bool success)
                MONSTER_IDX m_idx;
 
                if (!target_set(TARGET_KILL)) return FALSE;
-               m_idx = cave[target_row][target_col].m_idx;
+               m_idx = current_floor_ptr->grid_array[target_row][target_col].m_idx;
                if (!m_idx) break;
                if (!player_has_los_bold(target_row, target_col)) break;
                if (!projectable(p_ptr->y, p_ptr->x, target_row, target_col)) break;
@@ -1050,10 +1048,10 @@ static bool cast_learned_spell(int spell, bool success)
                GAME_TEXT m_name[MAX_NLEN];
 
                if (!target_set(TARGET_KILL)) return FALSE;
-               if (!cave[target_row][target_col].m_idx) break;
+               if (!current_floor_ptr->grid_array[target_row][target_col].m_idx) break;
                if (!player_has_los_bold(target_row, target_col)) break;
                if (!projectable(p_ptr->y, p_ptr->x, target_row, target_col)) break;
-               m_ptr = &m_list[cave[target_row][target_col].m_idx];
+               m_ptr = &current_floor_ptr->m_list[current_floor_ptr->grid_array[target_row][target_col].m_idx];
                r_ptr = &r_info[m_ptr->r_idx];
                monster_desc(m_name, m_ptr, 0);
                if (r_ptr->flagsr & RFR_RES_TELE)
@@ -1072,7 +1070,7 @@ static bool cast_learned_spell(int spell, bool success)
                        }
                }
         msg_format(_("%sを引き戻した。", "You command %s to return."), m_name);
-               teleport_monster_to(cave[target_row][target_col].m_idx, p_ptr->y, p_ptr->x, 100, TELEPORT_PASSIVE);
+               teleport_monster_to(current_floor_ptr->grid_array[target_row][target_col].m_idx, p_ptr->y, p_ptr->x, 100, TELEPORT_PASSIVE);
                break;
        }
        case MS_TELE_AWAY:
@@ -1080,31 +1078,11 @@ static bool cast_learned_spell(int spell, bool success)
 
                (void)fire_beam(GF_AWAY_ALL, dir, 100);
                break;
-       case MS_TELE_LEVEL:
-       {
-               MONSTER_IDX target_m_idx;
-               monster_type *m_ptr;
-               monster_race *r_ptr;
-               GAME_TEXT m_name[MAX_NLEN];
-
-               if (!target_set(TARGET_KILL)) return FALSE;
-               target_m_idx = cave[target_row][target_col].m_idx;
-               if (!target_m_idx) break;
-               if (!player_has_los_bold(target_row, target_col)) break;
-               if (!projectable(p_ptr->y, p_ptr->x, target_row, target_col)) break;
-               m_ptr = &m_list[target_m_idx];
-               r_ptr = &r_info[m_ptr->r_idx];
-               monster_desc(m_name, m_ptr, 0);
-        msg_format(_("%^sの足を指さした。", "You gesture at %^s's feet."), m_name);
 
-               if ((r_ptr->flagsr & (RFR_EFF_RES_NEXU_MASK | RFR_RES_TELE)) ||
-                       (r_ptr->flags1 & RF1_QUESTOR) || (r_ptr->level + randint1(50) > plev + randint1(60)))
-               {
-            msg_format(_("しかし効果がなかった!", "%^s is unaffected!"), m_name);
-               }
-               else teleport_level(target_m_idx);
+       case MS_TELE_LEVEL:
+               return teleport_level_other(p_ptr);
                break;
-       }
+
        case MS_PSY_SPEAR:
                if (!get_aim_dir(&dir)) return FALSE;
 
@@ -1201,7 +1179,7 @@ static bool cast_learned_spell(int spell, bool success)
        {
                int k;
         msg_print(_("アリを召喚した。", "You summon ants."));
-               for (k = 0;k < 1; k++)
+               for (k = 0; k < 1; k++)
                        if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, summon_lev, SUMMON_ANT, (PM_ALLOW_GROUP | p_mode), '\0'))
                        {
                 if (!pet)
@@ -1423,15 +1401,8 @@ bool do_cmd_cast_learned(void)
        bool cast;
        MANA_POINT need_mana;
 
+       if (cmd_limit_confused(p_ptr)) return FALSE;
 
-       /* not if confused */
-       if (p_ptr->confused)
-       {
-               msg_print(_("混乱していて唱えられない!", "You are too confused!"));
-               return TRUE;
-       }
-
-       /* get power */
        if (!get_learned_power(&n)) return FALSE;
 
        spell = monster_powers[n];
@@ -1492,16 +1463,12 @@ bool do_cmd_cast_learned(void)
                sound(SOUND_FAIL);
 
                if (n >= MS_S_KIN)
-                       /* Cast the spell */
                        cast = cast_learned_spell(n, FALSE);
        }
        else
        {
                sound(SOUND_ZAP);
-
-               /* Cast the spell */
                cast = cast_learned_spell(n, TRUE);
-
                if (!cast) return FALSE;
        }
 
@@ -1538,11 +1505,10 @@ bool do_cmd_cast_learned(void)
                }
        }
 
-       p_ptr->energy_use = 100;
+       take_turn(p_ptr, 100);
 
        p_ptr->redraw |= (PR_MANA);
-       p_ptr->window |= (PW_PLAYER);
-       p_ptr->window |= (PW_SPELL);
+       p_ptr->window |= (PW_PLAYER | PW_SPELL);
 
        return TRUE;
 }
@@ -1555,7 +1521,7 @@ bool do_cmd_cast_learned(void)
 void learn_spell(int monspell)
 {
        if (p_ptr->action != ACTION_LEARN) return;
-       if (monspell < 0) return; /* Paranoia */
+       if (monspell < 0) return;
        if (p_ptr->magic_num2[monspell]) return;
        if (p_ptr->confused || p_ptr->blind || p_ptr->image || p_ptr->stun || p_ptr->paralyzed) return;
        if (randint1(p_ptr->lev + 70) > monster_powers[monspell].level + 40)