OSDN Git Service

[Refactor] #38997 pseudo_plev() の関数マクロをget_pseudo_monster_level() に差し替え / Changed...
[hengband/hengband.git] / src / mspells3.c
index a2bde22..b3c674c 100644 (file)
 #include "targeting.h"
 #include "view-mainwindow.h"
 
-#define pseudo_plev() (((p_ptr->lev + 40) * (p_ptr->lev + 40) - 1550) / 130) /*!< モンスター魔法をプレイヤーが使用する場合の換算レベル */
+ /*!
+  * @brief モンスター魔法をプレイヤーが使用する場合の換算レベル
+  * @param caster_ptr プレーヤーへの参照ポインタ
+  * @param 換算レベル
+  */
+PLAYER_LEVEL get_pseudo_monstetr_level(player_type *caster_ptr)
+{
+       PLAYER_LEVEL monster_level = caster_ptr->lev + 40;
+       return (monster_level * monster_level - 1550) / 130;
+}
 
 
  /*!
@@ -237,6 +246,7 @@ const monster_power monster_powers[MAX_MONSPELLS] =
 
 };
 
+
 /*!
  * @brief モンスター魔法名テーブル
  */
@@ -279,7 +289,6 @@ const concptr monster_powers_short[MAX_MONSPELLS] = {
 };
 
 
-
 /*!
 * @brief 文字列に青魔導師の呪文の攻撃力を加える
 * @param SPELL_NUM 呪文番号
@@ -300,15 +309,17 @@ void set_bluemage_damage(int SPELL_NUM, PLAYER_LEVEL plev, concptr msg, char* tm
     sprintf(tmp, " %s %s", msg, dmg_str);
 }
 
+
 /*!
  * @brief 受け取ったモンスター魔法のIDに応じて青魔法の効果情報をまとめたフォーマットを返す
+ * @param learner_ptr プレーヤーへの参照ポインタ
  * @param p 情報を返す文字列参照ポインタ
  * @param power モンスター魔法のID
  * @return なし
  */
-static void learned_info(char *p, int power)
+static void learned_info(player_type *learner_ptr, char *p, int power)
 {
-       PLAYER_LEVEL plev = pseudo_plev();
+       PLAYER_LEVEL plev = get_pseudo_monstetr_level(learner_ptr);
 
        strcpy(p, "");
 
@@ -460,7 +471,7 @@ static bool get_learned_power(player_type *caster_ptr, SPELL_IDX *sn)
        TERM_LEN y = 1;
        TERM_LEN x = 18;
        PERCENTAGE minfail = 0;
-       PLAYER_LEVEL plev = p_ptr->lev;
+       PLAYER_LEVEL plev = caster_ptr->lev;
        PERCENTAGE chance = 0;
        int             ask = TRUE, mode = 0;
        int             spellnum[MAX_MONSPELLS];
@@ -486,7 +497,7 @@ static bool get_learned_power(player_type *caster_ptr, SPELL_IDX *sn)
        if (repeat_pull(&code))
        {
                *sn = (SPELL_IDX)code;
-               return (TRUE);
+               return TRUE;
        }
 
        if (use_menu)
@@ -583,7 +594,7 @@ static bool get_learned_power(player_type *caster_ptr, SPELL_IDX *sn)
        }
        for (i = 0; i < num; i++)
        {
-               if (p_ptr->magic_num2[spellnum[i]])
+               if (caster_ptr->magic_num2[spellnum[i]])
                {
                        if (use_menu) menu_line = i+1;
                        break;
@@ -592,7 +603,7 @@ static bool get_learned_power(player_type *caster_ptr, SPELL_IDX *sn)
        if (i == num)
        {
                msg_print(_("その種類の魔法は覚えていない!", "You don't know any spell of this type."));
-               return (FALSE);
+               return FALSE;
        }
 
        /* Build a prompt (accept all spells) */
@@ -614,7 +625,7 @@ static bool get_learned_power(player_type *caster_ptr, SPELL_IDX *sn)
                                case '0':
                                {
                                        screen_load();
-                                       return (FALSE);
+                                       return FALSE;
                                }
 
                                case '8':
@@ -625,7 +636,7 @@ static bool get_learned_power(player_type *caster_ptr, SPELL_IDX *sn)
                                        {
                                                menu_line += (num-1);
                                                if (menu_line > num) menu_line -= num;
-                                       } while(!p_ptr->magic_num2[spellnum[menu_line-1]]);
+                                       } while(!caster_ptr->magic_num2[spellnum[menu_line-1]]);
                                        break;
                                }
 
@@ -637,7 +648,7 @@ static bool get_learned_power(player_type *caster_ptr, SPELL_IDX *sn)
                                        {
                                                menu_line++;
                                                if (menu_line > num) menu_line -= num;
-                                       } while(!p_ptr->magic_num2[spellnum[menu_line-1]]);
+                                       } while(!caster_ptr->magic_num2[spellnum[menu_line-1]]);
                                        break;
                                }
 
@@ -646,7 +657,7 @@ static bool get_learned_power(player_type *caster_ptr, SPELL_IDX *sn)
                                case 'L':
                                {
                                        menu_line=num;
-                                       while(!p_ptr->magic_num2[spellnum[menu_line-1]]) menu_line--;
+                                       while(!caster_ptr->magic_num2[spellnum[menu_line-1]]) menu_line--;
                                        break;
                                }
 
@@ -655,7 +666,7 @@ static bool get_learned_power(player_type *caster_ptr, SPELL_IDX *sn)
                                case 'H':
                                {
                                        menu_line=1;
-                                       while(!p_ptr->magic_num2[spellnum[menu_line-1]]) menu_line++;
+                                       while(!caster_ptr->magic_num2[spellnum[menu_line-1]]) menu_line++;
                                        break;
                                }
 
@@ -691,7 +702,7 @@ static bool get_learned_power(player_type *caster_ptr, SPELL_IDX *sn)
                                        int need_mana;
 
                                        prt("", y + i + 1, x);
-                                       if (!p_ptr->magic_num2[spellnum[i]]) continue;
+                                       if (!caster_ptr->magic_num2[spellnum[i]]) continue;
 
                                        /* Access the spell */
                                        spell = monster_powers[spellnum[i]];
@@ -703,35 +714,35 @@ static bool get_learned_power(player_type *caster_ptr, SPELL_IDX *sn)
                                        else chance += (spell.level - plev);
 
                                        /* Reduce failure rate by INT/WIS adjustment */
-                                       chance -= 3 * (adj_mag_stat[p_ptr->stat_ind[A_INT]] - 1);
+                                       chance -= 3 * (adj_mag_stat[caster_ptr->stat_ind[A_INT]] - 1);
 
-                                       chance = mod_spell_chance_1(p_ptr, chance);
+                                       chance = mod_spell_chance_1(caster_ptr, chance);
 
                                        need_mana = mod_need_mana(caster_ptr, monster_powers[spellnum[i]].smana, 0, REALM_NONE);
 
                                        /* Not enough mana to cast */
-                                       if (need_mana > p_ptr->csp)
+                                       if (need_mana > caster_ptr->csp)
                                        {
-                                               chance += 5 * (need_mana - p_ptr->csp);
+                                               chance += 5 * (need_mana - caster_ptr->csp);
                                        }
 
                                        /* Extract the minimum failure rate */
-                                       minfail = adj_mag_fail[p_ptr->stat_ind[A_INT]];
+                                       minfail = adj_mag_fail[caster_ptr->stat_ind[A_INT]];
 
                                        /* Minimum failure rate */
                                        if (chance < minfail) chance = minfail;
 
                                        /* Stunning makes spells harder */
-                                       if (p_ptr->stun > 50) chance += 25;
-                                       else if (p_ptr->stun) chance += 15;
+                                       if (caster_ptr->stun > 50) chance += 25;
+                                       else if (caster_ptr->stun) chance += 15;
 
                                        /* Always a 5 percent chance of working */
                                        if (chance > 95) chance = 95;
 
-                                       chance = mod_spell_chance_2(p_ptr, chance);
+                                       chance = mod_spell_chance_2(caster_ptr, chance);
 
                                        /* Get info */
-                                       learned_info(comment, spellnum[i]);
+                                       learned_info(caster_ptr, comment, spellnum[i]);
 
                                        if (use_menu)
                                        {
@@ -776,7 +787,7 @@ static bool get_learned_power(player_type *caster_ptr, SPELL_IDX *sn)
                }
 
                /* Totally Illegal */
-               if ((i < 0) || (i >= num) || !p_ptr->magic_num2[spellnum[i]])
+               if ((i < 0) || (i >= num) || !caster_ptr->magic_num2[spellnum[i]])
                {
                        bell();
                        continue;
@@ -800,13 +811,14 @@ static bool get_learned_power(player_type *caster_ptr, SPELL_IDX *sn)
                /* Stop the loop */
                flag = TRUE;
        }
+
        if (redraw) screen_load();
 
-       p_ptr->window |= (PW_SPELL);
-       handle_stuff();
+       caster_ptr->window |= (PW_SPELL);
+       handle_stuff(caster_ptr);
 
        /* Abort if needed */
-       if (!flag) return (FALSE);
+       if (!flag) return FALSE;
 
        /* Save the choice */
        (*sn) = spellnum[i];
@@ -814,7 +826,7 @@ static bool get_learned_power(player_type *caster_ptr, SPELL_IDX *sn)
        repeat_push((COMMAND_CODE)spellnum[i]);
 
        /* Success */
-       return (TRUE);
+       return TRUE;
 }
 
 
@@ -828,7 +840,7 @@ static bool get_learned_power(player_type *caster_ptr, SPELL_IDX *sn)
 static bool cast_learned_spell(player_type *caster_ptr, int spell, bool success)
 {
        DIRECTION dir;
-       PLAYER_LEVEL plev = pseudo_plev();
+       PLAYER_LEVEL plev = get_pseudo_monstetr_level(caster_ptr);
        PLAYER_LEVEL summon_lev = caster_ptr->lev * 2 / 3 + randint1(caster_ptr->lev/2);
        HIT_POINT damage = 0;
        bool pet = success;
@@ -862,7 +874,7 @@ static bool cast_learned_spell(player_type *caster_ptr, int spell, bool success)
        {
                MONSTER_IDX m_idx;
 
-               if (!target_set(TARGET_KILL)) return FALSE;
+               if (!target_set(caster_ptr, TARGET_KILL)) return FALSE;
                m_idx = floor_ptr->grid_array[target_row][target_col].m_idx;
                if (!m_idx) break;
                if (!player_has_los_bold(caster_ptr, target_row, target_col)) break;
@@ -1246,25 +1258,25 @@ static bool cast_learned_spell(player_type *caster_ptr, int spell, bool success)
                if (!get_aim_dir(&dir)) return FALSE;
 
         msg_print(_("恐ろしげな幻覚を作り出した。", "You cast a fearful illusion."));
-               fear_monster(dir, plev+10);
+               fear_monster(caster_ptr, dir, plev+10);
                break;
        case MS_BLIND:
                if (!get_aim_dir(&dir)) return FALSE;
-               confuse_monster(dir, plev * 2);
+               confuse_monster(caster_ptr, dir, plev * 2);
                break;
        case MS_CONF:
                if (!get_aim_dir(&dir)) return FALSE;
 
         msg_print(_("誘惑的な幻覚をつくり出した。", "You cast a mesmerizing illusion."));
-               confuse_monster(dir, plev * 2);
+               confuse_monster(caster_ptr, dir, plev * 2);
                break;
        case MS_SLOW:
                if (!get_aim_dir(&dir)) return FALSE;
-               slow_monster(dir, plev);
+               slow_monster(caster_ptr, dir, plev);
                break;
        case MS_SLEEP:
                if (!get_aim_dir(&dir)) return FALSE;
-               sleep_monster(dir, plev);
+               sleep_monster(caster_ptr, dir, plev);
                break;
        case MS_SPEED:
                (void)set_fast(caster_ptr, randint1(20 + plev) + plev, FALSE);
@@ -1304,7 +1316,7 @@ static bool cast_learned_spell(player_type *caster_ptr, int spell, bool success)
                monster_race *r_ptr;
                GAME_TEXT m_name[MAX_NLEN];
 
-               if (!target_set(TARGET_KILL)) return FALSE;
+               if (!target_set(caster_ptr, TARGET_KILL)) return FALSE;
                if (!floor_ptr->grid_array[target_row][target_col].m_idx) break;
                if (!player_has_los_bold(caster_ptr, target_row, target_col)) break;
                if (!projectable(floor_ptr, caster_ptr->y, caster_ptr->x, target_row, target_col)) break;
@@ -1354,7 +1366,7 @@ static bool cast_learned_spell(player_type *caster_ptr, int spell, bool success)
                (void)unlite_area(caster_ptr, 10, 3);
                break;
        case MS_MAKE_TRAP:
-               if (!target_set(TARGET_KILL)) return FALSE;
+               if (!target_set(caster_ptr, TARGET_KILL)) return FALSE;
 
         msg_print(_("呪文を唱えて邪悪に微笑んだ。", "You cast a spell and cackle evilly."));
                trap_creation(caster_ptr, target_row, target_col);
@@ -1642,6 +1654,7 @@ static bool cast_learned_spell(player_type *caster_ptr, int spell, bool success)
        return TRUE;
 }
 
+
 /*!
  * @brief 青魔法コマンドのメインルーチン /
  * do_cmd_cast calls this function if the player's class is 'Blue-Mage'.
@@ -1769,6 +1782,7 @@ bool do_cmd_cast_learned(player_type *caster_ptr)
        return TRUE;
 }
 
+
 /*!
  * @brief 青魔法のラーニング判定と成功した場合のラーニング処理
  * @param monspell ラーニングを試みるモンスター攻撃のID
@@ -1839,6 +1853,4 @@ void set_rf_masks(BIT_FLAGS *f4, BIT_FLAGS *f5, BIT_FLAGS *f6, BIT_FLAGS mode)
                        *f6 = RF6_ATTACK_MASK & ~(RF6_BOLT_MASK | RF6_BEAM_MASK | RF6_BALL_MASK | RF6_INDIRECT_MASK);
                        break;
        }
-
-       return;
 }