#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; /*!< 振り落とされた際のダメージ量 */
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 配置した鏡リストの次を取得する /
*/
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;
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;
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;
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);
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))
{
*/
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;
{
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;
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;
}
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");
+ }
+}
+