OSDN Git Service

[Refactor] #38997 scatter() に player_type * 引数を追加 / Added player_type * argument...
[hengband/hengband.git] / src / mind.c
index 4cb51ba..4accd42 100644 (file)
@@ -528,7 +528,7 @@ static concptr const mind_tips[5][MAX_MIND_POWERS] =
        "Darken nearby area and inside of a room.",
        "Detects visible monsters in your vicinity and more and more. Detects traps, doors and stairs at level 5, items at level 15. Lights and know the whole level at level 45.",
        "Teleport short distance.",
-       "Teleport as you recieve an attack. Might be able to teleport just before recieveing damages at higher level.",
+       "Teleport as you receive an attack. Might be able to teleport just before recieveing damages at higher level.",
        "Teleport long distance.",
        "Attack and teleport in a time.",
        "Attempt to freeze a monster.",
@@ -557,9 +557,9 @@ static concptr const mind_tips[5][MAX_MIND_POWERS] =
  * @param power モンスター魔法のID
  * @return なし
  */
-void mindcraft_info(char *p, int use_mind, int power)
+void mindcraft_info(player_type *caster_ptr, char *p, int use_mind, int power)
 {
-       PLAYER_LEVEL plev = p_ptr->lev;
+       PLAYER_LEVEL plev = caster_ptr->lev;
 
        strcpy(p, "");
 
@@ -585,14 +585,14 @@ void mindcraft_info(char *p, int use_mind, int power)
 #endif
                case 11: sprintf(p, " %s%dd6", KWD_DAM, plev / 2);  break;
                case 12: sprintf(p, " %sd%d+%d", KWD_DAM, plev * 3, plev * 3); break;
-               case 13: sprintf(p, _(" 行動:%ld回", " %ld acts."), (long int)(p_ptr->csp + 100-p_ptr->energy_need - 50)/100); break;
+               case 13: sprintf(p, _(" 行動:%ld回", " %ld acts."), (long int)(caster_ptr->csp + 100-caster_ptr->energy_need - 50)/100); break;
                }
                break;
        case MIND_KI:
        {
                int boost = P_PTR_KI;
 
-               if (heavy_armor(p_ptr)) boost /= 2;
+               if (heavy_armor(caster_ptr)) boost /= 2;
 
                switch (power)
                {
@@ -930,7 +930,7 @@ static bool_hack get_mind_power(player_type *caster_ptr, SPELL_IDX *sn, bool onl
                                        }
 
                                        /* Get info */
-                                       mindcraft_info(comment, use_mind, i);
+                                       mindcraft_info(caster_ptr, comment, use_mind, i);
 
                                        if (use_menu)
                                        {
@@ -1046,16 +1046,16 @@ static bool cast_mindcrafter_spell(player_type *caster_ptr, int spell)
 
                if (plev < 30)
                {
-                       b = detect_monsters_normal(DETECT_RAD_DEFAULT);
-                       if (plev > 14) b |= detect_monsters_invis(DETECT_RAD_DEFAULT);
+                       b = detect_monsters_normal(caster_ptr, DETECT_RAD_DEFAULT);
+                       if (plev > 14) b |= detect_monsters_invis(caster_ptr, DETECT_RAD_DEFAULT);
                        if (plev > 4)  {
                                b |= detect_traps(caster_ptr, DETECT_RAD_DEFAULT, TRUE);
-                               b |= detect_doors(DETECT_RAD_DEFAULT);
+                               b |= detect_doors(caster_ptr, DETECT_RAD_DEFAULT);
                        }
                }
                else
                {
-                       b = detect_all(DETECT_RAD_DEFAULT);
+                       b = detect_all(caster_ptr, DETECT_RAD_DEFAULT);
                }
 
                if ((plev > 24) && (plev < 40))
@@ -1091,7 +1091,7 @@ static bool cast_mindcrafter_spell(player_type *caster_ptr, int spell)
                }
                else
                {
-                       charm_monsters(plev * 2);
+                       charm_monsters(caster_ptr, plev * 2);
                }
                break;
        case 5:
@@ -1124,7 +1124,7 @@ static bool cast_mindcrafter_spell(player_type *caster_ptr, int spell)
                        project(caster_ptr, 0, 2 + plev / 10, caster_ptr->y, caster_ptr->x,
                        (plev * 3), GF_PSI, PROJECT_KILL, -1);
                else
-                       (void)mindblast_monsters(randint1(plev * ((plev - 5) / 10 + 1)));
+                       (void)mindblast_monsters(caster_ptr, randint1(plev * ((plev - 5) / 10 + 1)));
                break;
        case 9:
                /* Adrenaline */
@@ -1202,7 +1202,7 @@ static bool cast_force_spell(player_type *caster_ptr, int spell)
                fire_ball(caster_ptr, GF_MISSILE, dir, damroll(3 + ((plev - 1) / 5) + boost / 12, 4), 0);
                break;
        case 1:
-               (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
+               (void)lite_area(caster_ptr, damroll(2, (plev / 2)), (plev / 10) + 1);
                break;
        case 2:
                set_tim_levitation(caster_ptr, randint1(30) + 30 + boost / 5, FALSE);
@@ -1245,7 +1245,7 @@ static bool cast_force_spell(player_type *caster_ptr, int spell)
                if (!target_set(TARGET_KILL)) return FALSE;
                m_idx = caster_ptr->current_floor_ptr->grid_array[target_row][target_col].m_idx;
                if (!m_idx) break;
-               if (!player_has_los_bold(p_ptr, target_row, target_col)) break;
+               if (!player_has_los_bold(caster_ptr, target_row, target_col)) break;
                if (!projectable(caster_ptr->current_floor_ptr, caster_ptr->y, caster_ptr->x, target_row, target_col)) break;
                dispel_monster_status(m_idx);
                break;
@@ -1282,6 +1282,7 @@ static bool cast_force_spell(player_type *caster_ptr, int spell)
        default:
                msg_print(_("なに?", "Zap?"));
        }
+
        P_PTR_KI = 0;
        caster_ptr->update |= (PU_BONUS);
 
@@ -1295,16 +1296,17 @@ static bool cast_force_spell(player_type *caster_ptr, int spell)
  */
 static int number_of_mirrors(floor_type *floor_ptr)
 {
-       POSITION x, y;
        int val = 0;
-       for (x = 0; x < floor_ptr->width; x++) {
-               for (y = 0; y < floor_ptr->height; y++) {
+       for (POSITION x = 0; x < floor_ptr->width; x++) {
+               for (POSITION y = 0; y < floor_ptr->height; y++) {
                        if (is_mirror_grid(&floor_ptr->grid_array[y][x])) val++;
                }
        }
+
        return val;
 }
 
+
 /*!
  * @brief 鏡魔法の発動 /
  * do_cmd_cast calls this function if the player's class is 'Mirror magic'.
@@ -1325,8 +1327,8 @@ static bool cast_mirror_spell(player_type *caster_ptr, int spell)
                /* mirror of seeing */
        case 0:
                tmp = is_mirror_grid(&caster_ptr->current_floor_ptr->grid_array[caster_ptr->y][caster_ptr->x]) ? 4 : 0;
-               if (plev + tmp > 4)detect_monsters_normal(DETECT_RAD_DEFAULT);
-               if (plev + tmp > 18)detect_monsters_invis(DETECT_RAD_DEFAULT);
+               if (plev + tmp > 4)detect_monsters_normal(caster_ptr, DETECT_RAD_DEFAULT);
+               if (plev + tmp > 18)detect_monsters_invis(caster_ptr, DETECT_RAD_DEFAULT);
                if (plev + tmp > 28)set_tim_esp(caster_ptr, (TIME_EFFECT)plev, FALSE);
                if (plev + tmp > 38)map_area(caster_ptr, DETECT_RAD_MAP);
                if (tmp == 0 && plev < 5) {
@@ -1357,7 +1359,7 @@ static bool cast_mirror_spell(player_type *caster_ptr, int spell)
                break;
                /* mirror of light */
        case 4:
-               (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
+               (void)lite_area(caster_ptr, damroll(2, (plev / 2)), (plev / 10) + 1);
                break;
                /* mirror of wandering */
        case 5:
@@ -1412,12 +1414,12 @@ static bool cast_mirror_spell(player_type *caster_ptr, int spell)
                /* illusion light */
        case 14:
                tmp = is_mirror_grid(&caster_ptr->current_floor_ptr->grid_array[caster_ptr->y][caster_ptr->x]) ? 4 : 3;
-               slow_monsters(plev);
-               stun_monsters(plev*tmp);
-               confuse_monsters(plev*tmp);
-               turn_monsters(plev*tmp);
-               stun_monsters(plev*tmp);
-               stasis_monsters(plev*tmp);
+               slow_monsters(caster_ptr, plev);
+               stun_monsters(caster_ptr, plev*tmp);
+               confuse_monsters(caster_ptr, plev*tmp);
+               turn_monsters(caster_ptr, plev*tmp);
+               stun_monsters(caster_ptr, plev*tmp);
+               stasis_monsters(caster_ptr, plev*tmp);
                break;
                /* mirror shift */
        case 15:
@@ -1471,7 +1473,7 @@ static bool cast_berserk_spell(player_type *caster_ptr, int spell)
        switch (spell)
        {
        case 0:
-               detect_monsters_mind(DETECT_RAD_DEFAULT);
+               detect_monsters_mind(caster_ptr, DETECT_RAD_DEFAULT);
                break;
        case 1:
        {
@@ -1532,6 +1534,7 @@ static bool cast_berserk_spell(player_type *caster_ptr, int spell)
 /*!
  * @brief 忍術の発動 /
  * do_cmd_cast calls this function if the player's class is 'ninja'.
+ * @param caster_ptr プレーヤーへの参照ポインタ
  * @param spell 発動する特殊技能のID
  * @return 処理を実行したらTRUE、キャンセルした場合FALSEを返す。
  */
@@ -1545,23 +1548,23 @@ static bool cast_ninja_spell(player_type *caster_ptr, int spell)
        switch (spell)
        {
        case 0:
-               (void)unlite_area(0, 3);
+               (void)unlite_area(caster_ptr, 0, 3);
                break;
        case 1:
                if (plev > 44)
                {
                        wiz_lite(caster_ptr, TRUE);
                }
-               detect_monsters_normal(DETECT_RAD_DEFAULT);
+               detect_monsters_normal(caster_ptr, DETECT_RAD_DEFAULT);
                if (plev > 4)
                {
                        detect_traps(caster_ptr, DETECT_RAD_DEFAULT, TRUE);
-                       detect_doors(DETECT_RAD_DEFAULT);
-                       detect_stairs(DETECT_RAD_DEFAULT);
+                       detect_doors(caster_ptr, DETECT_RAD_DEFAULT);
+                       detect_stairs(caster_ptr, DETECT_RAD_DEFAULT);
                }
                if (plev > 14)
                {
-                       detect_objects_normal(DETECT_RAD_DEFAULT);
+                       detect_objects_normal(caster_ptr, DETECT_RAD_DEFAULT);
                }
                break;
        case 2:
@@ -1586,7 +1589,7 @@ static bool cast_ninja_spell(player_type *caster_ptr, int spell)
        }
        case 5:
        {
-               if(!panic_hit()) return FALSE;
+               if(!hit_and_away(caster_ptr)) return FALSE;
                break;
        }
        case 6:
@@ -1646,7 +1649,7 @@ static bool cast_ninja_spell(player_type *caster_ptr, int spell)
                m_idx = caster_ptr->current_floor_ptr->grid_array[target_row][target_col].m_idx;
                if (!m_idx) break;
                if (m_idx == caster_ptr->riding) break;
-               if (!player_has_los_bold(p_ptr, target_row, target_col)) break;
+               if (!player_has_los_bold(caster_ptr, target_row, target_col)) break;
                if (!projectable(caster_ptr->current_floor_ptr, caster_ptr->y, caster_ptr->x, target_row, target_col)) break;
                m_ptr = &caster_ptr->current_floor_ptr->m_list[m_idx];
                monster_desc(m_name, m_ptr, 0);
@@ -1659,7 +1662,7 @@ static bool cast_ninja_spell(player_type *caster_ptr, int spell)
                        POSITION nx = GRID_X(path_g[i]);
                        grid_type *g_ptr = &caster_ptr->current_floor_ptr->grid_array[ny][nx];
 
-                       if (in_bounds(caster_ptr->current_floor_ptr, ny, nx) && cave_empty_bold(p_ptr->current_floor_ptr, ny, nx) &&
+                       if (in_bounds(caster_ptr->current_floor_ptr, ny, nx) && cave_empty_bold(caster_ptr->current_floor_ptr, ny, nx) &&
                            !(g_ptr->info & CAVE_OBJECT) &&
                                !pattern_tile(ny, nx))
                        {
@@ -1736,7 +1739,7 @@ static bool cast_ninja_spell(player_type *caster_ptr, int spell)
 
                        while (attempts--)
                        {
-                               scatter(&y, &x, caster_ptr->y, caster_ptr->x, 4, 0);
+                               scatter(caster_ptr->current_floor_ptr, &y, &x, caster_ptr->y, caster_ptr->x, 4, 0);
 
                                if (!player_bold(caster_ptr, y, x)) break;
                        }
@@ -2061,25 +2064,25 @@ void do_cmd_mind(player_type *caster_ptr)
  * @brief 現在プレイヤーが使用可能な特殊技能の一覧表示 /
  * @return なし
  */
-void do_cmd_mind_browse(void)
+void do_cmd_mind_browse(player_type *caster_ptr)
 {
        SPELL_IDX n = 0;
        int j, line;
        char temp[62*5];
        int use_mind = 0;
 
-       if (p_ptr->pclass == CLASS_MINDCRAFTER) use_mind = MIND_MINDCRAFTER;
-       else if (p_ptr->pclass == CLASS_FORCETRAINER) use_mind = MIND_KI;
-       else if (p_ptr->pclass == CLASS_BERSERKER) use_mind = MIND_BERSERKER;
-       else if (p_ptr->pclass == CLASS_NINJA) use_mind = MIND_NINJUTSU;
-       else if (p_ptr->pclass == CLASS_MIRROR_MASTER)
+       if (caster_ptr->pclass == CLASS_MINDCRAFTER) use_mind = MIND_MINDCRAFTER;
+       else if (caster_ptr->pclass == CLASS_FORCETRAINER) use_mind = MIND_KI;
+       else if (caster_ptr->pclass == CLASS_BERSERKER) use_mind = MIND_BERSERKER;
+       else if (caster_ptr->pclass == CLASS_NINJA) use_mind = MIND_NINJUTSU;
+       else if (caster_ptr->pclass == CLASS_MIRROR_MASTER)
          use_mind = MIND_MIRROR_MASTER;
 
        screen_save();
 
        while(1)
        {
-               if (!get_mind_power(p_ptr, &n, TRUE))
+               if (!get_mind_power(caster_ptr, &n, TRUE))
                {
                        screen_load();
                        return;