OSDN Git Service

[Refactor] #37353 cave_type 構造体を grid_type に改名。 / Rename cave_type structure to grid_...
[hengband/hengband.git] / src / spells1.c
index 0af271b..401f331 100644 (file)
@@ -19,6 +19,7 @@
 
 #include "monster.h"
 #include "monster-status.h"
+#include "spells-diceroll.h"
 #include "spells-summon.h"
 #include "monsterrace-hook.h"
 
 #include "projection.h"
 #include "mutation.h"
 #include "rooms.h"
+#include "artifact.h"
+#include "avatar.h"
+#include "player-status.h"
+#include "realm-hex.h"
 
 
 static int rakubadam_m; /*!< 振り落とされた際のダメージ量 */
@@ -35,81 +40,6 @@ static int rakubadam_p; /*!< 落馬した際のダメージ量 */
 int project_length = 0; /*!< 投射の射程距離 */
 
 
-/*!
- * @brief モンスター魅了用セービングスロー共通部(汎用系)
- * @param pow 魅了パワー
- * @param m_ptr 対象モンスター
- * @return 魅了に抵抗したらTRUE
- */
-static bool_hack common_saving_throw_charm(player_type *player_ptr, HIT_POINT pow, monster_type *m_ptr)
-{
-       monster_race *r_ptr = &r_info[m_ptr->r_idx];
-
-       if(p_ptr->inside_arena) return TRUE;
-
-       /* Memorize a flag */
-       if (r_ptr->flagsr & RFR_RES_ALL)
-       {
-               if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
-               return TRUE;
-       }
-
-       if (r_ptr->flags3 & RF3_NO_CONF)
-       {
-               if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_CONF);
-               return TRUE;
-       }
-
-       if (r_ptr->flags1 & RF1_QUESTOR || m_ptr->mflag2 & MFLAG2_NOPET) return TRUE;
-
-       pow += (adj_chr_chm[player_ptr->stat_ind[A_CHR]] - 1);
-       if((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_NAZGUL)) pow = pow * 2 / 3;
-       return (r_ptr->level > randint1((pow - 10) < 1 ? 1 : (pow - 10)) + 5);
-}
-
-/*!
- * @brief モンスター服従用セービングスロー共通部(部族依存系)
- * @param pow 服従パワー
- * @param m_ptr 対象モンスター
- * @return 服従に抵抗したらTRUE
- */
-static bool_hack common_saving_throw_control(player_type *player_ptr, HIT_POINT pow, monster_type *m_ptr)
-{
-       monster_race *r_ptr = &r_info[m_ptr->r_idx];
-
-       if (p_ptr->inside_arena) return TRUE;
-
-       /* Memorize a flag */
-       if (r_ptr->flagsr & RFR_RES_ALL)
-       {
-               if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
-               return TRUE;
-       }
-
-       if (r_ptr->flags1 & RF1_QUESTOR || m_ptr->mflag2 & MFLAG2_NOPET) return TRUE;
-
-       pow += adj_chr_chm[player_ptr->stat_ind[A_CHR]] - 1;
-       if ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_NAZGUL)) pow = pow * 2 / 3;
-       return (r_ptr->level > randint1((pow - 10) < 1 ? 1 : (pow - 10)) + 5);
-}
-
-/*!
-* @brief 一部ボルト魔法のビーム化確率を算出する / Prepare standard probability to become beam for fire_bolt_or_beam()
-* @return ビーム化確率(%)
-* @details
-* ハードコーティングによる実装が行われている。
-* メイジは(レベル)%、ハイメイジ、スペルマスターは(レベル)%、それ以外の職業は(レベル/2)%
-*/
-PERCENTAGE beam_chance(void)
-{
-       if (p_ptr->pclass == CLASS_MAGE)
-               return (PERCENTAGE)(p_ptr->lev);
-       if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER)
-               return (PERCENTAGE)(p_ptr->lev + 10);
-
-       return (PERCENTAGE)(p_ptr->lev / 2);
-}
-
 
 /*!
  * @brief 配置した鏡リストの次を取得する /
@@ -374,7 +304,7 @@ static POSITION monster_target_y; /*!< モンスターの攻撃目標Y座標 */
  */
 static bool project_f(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_POINT dam, EFFECT_ID typ)
 {
-       cave_type *c_ptr = &cave[y][x];
+       grid_type *c_ptr = &cave[y][x];
        feature_type *f_ptr = &f_info[c_ptr->feat];
 
        bool obvious = FALSE;
@@ -599,101 +529,58 @@ static bool project_f(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                        break;
                }
 
-               /* Make doors */
                case GF_MAKE_DOOR:
                {
-                       /* Require a "naked" floor grid */
                        if (!cave_naked_bold(y, x)) break;
-
-                       /* Not on the player */
                        if (player_bold(y, x)) break;
-
-                       /* Create a closed door */
                        cave_set_feat(y, x, feat_door[DOOR_DOOR].closed);
-
-                       /* Observe */
                        if (c_ptr->info & (CAVE_MARK)) obvious = TRUE;
-
                        break;
                }
 
-               /* Make traps */
                case GF_MAKE_TRAP:
                {
-                       /* Place a trap */
                        place_trap(y, x);
-
                        break;
                }
 
-               /* Make doors */
                case GF_MAKE_TREE:
                {
-                       /* Require a "naked" floor grid */
                        if (!cave_naked_bold(y, x)) break;
-
-                       /* Not on the player */
                        if (player_bold(y, x)) break;
-
-                       /* Create a closed door */
                        cave_set_feat(y, x, feat_tree);
-
-                       /* Observe */
                        if (c_ptr->info & (CAVE_MARK)) obvious = TRUE;
-
-
                        break;
                }
 
                case GF_MAKE_GLYPH:
                {
-                       /* Require a "naked" floor grid */
                        if (!cave_naked_bold(y, x)) break;
-
-                       /* Create a glyph */
                        c_ptr->info |= CAVE_OBJECT;
                        c_ptr->mimic = feat_glyph;
-
                        note_spot(y, x);
-
                        lite_spot(y, x);
-
                        break;
                }
 
                case GF_STONE_WALL:
                {
-                       /* Require a "naked" floor grid */
                        if (!cave_naked_bold(y, x)) break;
-
-                       /* Not on the player */
                        if (player_bold(y, x)) break;
-
-                       /* Place a wall */
                        cave_set_feat(y, x, feat_granite);
-
                        break;
                }
 
-
                case GF_LAVA_FLOW:
                {
-                       /* Ignore permanent grid */
                        if (have_flag(f_ptr->flags, FF_PERMANENT)) break;
-
-                       /* Shallow Lava */
                        if (dam == 1)
                        {
-                               /* Ignore grid without enough space */
                                if (!have_flag(f_ptr->flags, FF_FLOOR)) break;
-
-                               /* Place a shallow lava */
                                cave_set_feat(y, x, feat_shallow_lava);
                        }
-                       /* Deep Lava */
                        else if (dam)
                        {
-                               /* Place a deep lava */
                                cave_set_feat(y, x, feat_deep_lava);
                        }
                        break;
@@ -701,22 +588,14 @@ static bool project_f(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
 
                case GF_WATER_FLOW:
                {
-                       /* Ignore permanent grid */
                        if (have_flag(f_ptr->flags, FF_PERMANENT)) break;
-
-                       /* Shallow Water */
                        if (dam == 1)
                        {
-                               /* Ignore grid without enough space */
                                if (!have_flag(f_ptr->flags, FF_FLOOR)) break;
-
-                               /* Place a shallow water */
                                cave_set_feat(y, x, feat_shallow_water);
                        }
-                       /* Deep Water */
                        else if (dam)
                        {
-                               /* Place a deep water */
                                cave_set_feat(y, x, feat_deep_water);
                        }
                        break;
@@ -727,7 +606,7 @@ static bool project_f(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                case GF_LITE:
                {
                        /* Turn on the light */
-                       if (!(d_info[dungeon_type].flags1 & DF1_DARKNESS))
+                       if (!(d_info[p_ptr->dungeon_idx].flags1 & DF1_DARKNESS))
                        {
                                c_ptr->info |= (CAVE_GLOW);
                                note_spot(y, x);
@@ -769,7 +648,7 @@ static bool project_f(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
 
                                                if (in_bounds2(by, bx))
                                                {
-                                                       cave_type *cc_ptr = &cave[by][bx];
+                                                       grid_type *cc_ptr = &cave[by][bx];
 
                                                        if (have_flag(f_info[get_feat_mimic(cc_ptr)].flags, FF_GLOW))
                                                        {
@@ -918,7 +797,7 @@ static bool project_f(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
  */
 static bool project_o(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_POINT dam, EFFECT_ID typ)
 {
-       cave_type *c_ptr = &cave[y][x];
+       grid_type *c_ptr = &cave[y][x];
 
        OBJECT_IDX this_o_idx, next_o_idx = 0;
 
@@ -1298,7 +1177,7 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
 {
        int tmp;
 
-       cave_type *c_ptr = &cave[y][x];
+       grid_type *c_ptr = &cave[y][x];
 
        monster_type *m_ptr = &m_list[c_ptr->m_idx];
        monster_type *caster_ptr = (who > 0) ? &m_list[who] : NULL;
@@ -6491,11 +6370,11 @@ bool project(MONSTER_IDX who, POSITION rad, POSITION y, POSITION x, HIT_POINT da
 
                for (i = 0; i < path_n; ++i)
                {
-                       int oy = y;
-                       int ox = x;
+                       POSITION oy = y;
+                       POSITION ox = x;
 
-                       int ny = GRID_Y(path_g[i]);
-                       int nx = GRID_X(path_g[i]);
+                       POSITION ny = GRID_Y(path_g[i]);
+                       POSITION nx = GRID_X(path_g[i]);
 
                        /* Advance */
                        y = ny;
@@ -7553,4 +7432,26 @@ void seal_of_mirror(HIT_POINT dam)
        }
        return;
 }
-        
+
+
+
+/*!
+ * @brief 領域魔法に応じて技能の名称を返す。
+ * @param tval 魔法書のtval
+ * @return 領域魔法の技能名称を保管した文字列ポインタ
+ */
+concptr spell_category_name(OBJECT_TYPE_VALUE tval)
+{
+       switch (tval)
+       {
+       case TV_HISSATSU_BOOK:
+               return _("必殺技", "art");
+       case TV_LIFE_BOOK:
+               return _("祈り", "prayer");
+       case TV_MUSIC_BOOK:
+               return _("歌", "song");
+       default:
+               return _("呪文", "spell");
+       }
+}
+