* @details Return the number of features around (or under) the character.
* Usually look for doors and floor traps.
*/
-static int count_dt(player_type *creature_ptr, POSITION *y, POSITION *x, bool (*test)(FEAT_IDX feat), bool under)
+static int count_dt(player_type *creature_ptr, POSITION *y, POSITION *x, bool (*test)(player_type*, FEAT_IDX feat), bool under)
{
/* Check around (and under) the character */
int count = 0;
feat = get_feat_mimic(g_ptr);
/* Not looking for this feature */
- if (!((*test)(feat))) continue;
+ if (!((*test)(creature_ptr, feat))) continue;
/* OK */
++count;
return more;
}
- s16b closed_feat = feat_state(old_feat, FF_CLOSE);
+ s16b closed_feat = feat_state(creature_ptr, old_feat, FF_CLOSE);
/* Hack -- object in the way */
if ((g_ptr->o_idx || (g_ptr->info & CAVE_OBJECT)) &&
}
}
- if (is_hidden_door(g_ptr))
+ if (is_hidden_door(creature_ptr, g_ptr))
{
/* Occasional Search XXX XXX */
if (randint0(100) < 25) search(creature_ptr);
feature_type *f_ptr = &f_info[g_ptr->feat];
/* Must be a closed door */
- if (!is_closed_door(g_ptr->feat))
+ if (!is_closed_door(creature_ptr, g_ptr->feat))
{
return FALSE;
}
o_idx = chest_check(creature_ptr->current_floor_ptr, y, x, TRUE);
/* Disarm a trap */
- if (!is_trap(feat) && !o_idx)
+ if (!is_trap(creature_ptr, feat) && !o_idx)
{
msg_print(_("そこには解除するものが見当たらない。", "You see nothing there to disarm."));
}
sound(have_flag(f_ptr->flags, FF_GLASS) ? SOUND_GLASS : SOUND_OPENDOOR);
/* Break down the door */
- if ((randint0(100) < 50) || (feat_state(g_ptr->feat, FF_OPEN) == g_ptr->feat) || have_flag(f_ptr->flags, FF_GLASS))
+ if ((randint0(100) < 50) || (feat_state(creature_ptr, g_ptr->feat, FF_OPEN) == g_ptr->feat) || have_flag(f_ptr->flags, FF_GLASS))
{
cave_alter_feat(creature_ptr, y, x, FF_BASH);
}
* @param feat 地形情報のID
* @return 罠持ちの地形ならばTRUEを返す。
*/
-bool is_trap(FEAT_IDX feat)
+bool is_trap(player_type *player_ptr, FEAT_IDX feat)
{
+ /* 関数ポインタの都合 */
+ (void)player_ptr;
return have_flag(f_info[feat].flags, FF_TRAP);
}
* @param feat 地形情報のID
* @return 閉じたドアのある地形ならばTRUEを返す。
*/
-bool is_closed_door(FEAT_IDX feat)
+bool is_closed_door(player_type *player_ptr, FEAT_IDX feat)
{
+ /* 関数ポインタの都合 */
+ (void)player_ptr;
feature_type *f_ptr = &f_info[feat];
return (have_flag(f_ptr->flags, FF_OPEN) || have_flag(f_ptr->flags, FF_BASH)) &&
!have_flag(f_ptr->flags, FF_MOVE);
}
-
extern char *f_name;
extern char *f_tag;
-extern bool is_closed_door(FEAT_IDX feat);
-extern bool is_trap(FEAT_IDX feat);
+extern bool is_closed_door(player_type *player_ptr, FEAT_IDX feat);
+extern bool is_trap(player_type *player_ptr, FEAT_IDX feat);
/*** Terrain feature variables ***/
extern FEAT_IDX feat_none;
g_ptr->mimic = 0;
/* Clear previous contents, add stairs */
- g_ptr->feat = (i < shaft_num) ? feat_state(feat, FF_SHAFT) : feat;
+ g_ptr->feat = (i < shaft_num) ? feat_state(owner_ptr, feat, FF_SHAFT) : feat;
/* No longer "FLOOR" */
g_ptr->info &= ~(CAVE_FLOOR);
/* No stairs down from Quest */
if ((creature_ptr->change_floor_mode & CFM_UP) && !quest_number(creature_ptr, creature_ptr->current_floor_ptr->dun_level))
{
- g_ptr->feat = (creature_ptr->change_floor_mode & CFM_SHAFT) ? feat_state(feat_down_stair, FF_SHAFT) : feat_down_stair;
+ g_ptr->feat = (creature_ptr->change_floor_mode & CFM_SHAFT) ? feat_state(creature_ptr, feat_down_stair, FF_SHAFT) : feat_down_stair;
}
/* No stairs up when ironman_downward */
else if ((creature_ptr->change_floor_mode & CFM_DOWN) && !ironman_downward)
{
- g_ptr->feat = (creature_ptr->change_floor_mode & CFM_SHAFT) ? feat_state(feat_up_stair, FF_SHAFT) : feat_up_stair;
+ g_ptr->feat = (creature_ptr->change_floor_mode & CFM_SHAFT) ? feat_state(creature_ptr, feat_up_stair, FF_SHAFT) : feat_up_stair;
}
/* Paranoia -- Clear mimic */
if (streamer_is_wall)
{
if (!is_extra_grid(g_ptr) && !is_inner_grid(g_ptr) && !is_outer_grid(g_ptr) && !is_solid_grid(g_ptr)) continue;
- if (is_closed_door(g_ptr->feat)) continue;
+ if (is_closed_door(player_ptr, g_ptr->feat)) continue;
}
if (g_ptr->m_idx && !(have_flag(streamer_ptr->flags, FF_PLACE) && monster_can_cross_terrain(feat, &r_info[floor_ptr->m_list[g_ptr->m_idx].r_idx], 0)))
g_ptr = &floor_ptr->grid_array[y][x];
/* Walls, water, and lava cannot hold scent. */
- if (!cave_have_flag_grid(g_ptr, FF_MOVE) && !is_closed_door(g_ptr->feat)) continue;
+ if (!cave_have_flag_grid(g_ptr, FF_MOVE) && !is_closed_door(subject_ptr, g_ptr->feat)) continue;
/* Grid must not be blocked by walls from the character */
if (!player_has_los_bold(subject_ptr, y, x)) continue;
/* Hack -- Decline boundary walls with known treasure */
if ((have_flag(f_ptr->flags, FF_HAS_GOLD) || have_flag(f_ptr->flags, FF_HAS_ITEM)) &&
!have_flag(f_ptr->flags, FF_SECRET))
- g_ptr->feat = feat_state(g_ptr->feat, FF_ENSECRET);
+ g_ptr->feat = feat_state(player_ptr, g_ptr->feat, FF_ENSECRET);
/* Set boundary mimic */
g_ptr->mimic = g_ptr->feat;
/*!
* @brief マスに看破済みの罠があるかの判定を行う。 / Return TRUE if the given grid is a known trap
+ * @param player_ptr プレーヤーへの参照ポインタ
* @param g_ptr マス構造体の参照ポインタ
* @return 看破済みの罠があるならTRUEを返す。
*/
-bool is_known_trap(grid_type *g_ptr)
+bool is_known_trap(player_type *player_ptr, grid_type *g_ptr)
{
if (!g_ptr->mimic && !cave_have_flag_grid(g_ptr, FF_SECRET) &&
- is_trap(g_ptr->feat)) return TRUE;
+ is_trap(player_ptr, g_ptr->feat)) return TRUE;
else
return FALSE;
}
/*!
* @brief マスに隠されたドアがあるかの判定を行う。 / Return TRUE if the given grid is a hidden closed door
+ * @param player_ptr プレーヤーへの参照ポインタ
* @param g_ptr マス構造体の参照ポインタ
* @return 隠されたドアがあるならTRUEを返す。
*/
-bool is_hidden_door(grid_type *g_ptr)
+bool is_hidden_door(player_type *player_ptr, grid_type *g_ptr)
{
if ((g_ptr->mimic || cave_have_flag_grid(g_ptr, FF_SECRET)) &&
- is_closed_door(g_ptr->feat))
+ is_closed_door(player_ptr, g_ptr->feat))
return TRUE;
else
return FALSE;
g_ptr = &subject_ptr->current_floor_ptr->grid_array[y][x];
- if (is_closed_door(g_ptr->feat)) m += 3;
+ if (is_closed_door(subject_ptr, g_ptr->feat)) m += 3;
/* Ignore "pre-stamped" entries */
if (g_ptr->dist != 0 && g_ptr->dist <= n && g_ptr->cost <= m) continue;
/* Ignore "walls" and "rubble" */
- if (!cave_have_flag_grid(g_ptr, FF_MOVE) && !is_closed_door(g_ptr->feat)) continue;
+ if (!cave_have_flag_grid(g_ptr, FF_MOVE) && !is_closed_door(subject_ptr, g_ptr->feat)) continue;
/* Save the flow cost */
if (g_ptr->cost == 0 || g_ptr->cost > m) g_ptr->cost = m;
* Take a feature, determine what that feature becomes
* through applying the given action.
*/
-FEAT_IDX feat_state(FEAT_IDX feat, int action)
+FEAT_IDX feat_state(player_type *player_ptr, FEAT_IDX feat, int action)
{
feature_type *f_ptr = &f_info[feat];
int i;
/* Get the new feature */
+ floor_type *floor_ptr = player_ptr->current_floor_ptr;
for (i = 0; i < MAX_FEAT_STATES; i++)
{
- if (f_ptr->state[i].action == action) return conv_dungeon_feat(p_ptr->current_floor_ptr, f_ptr->state[i].result);
+ if (f_ptr->state[i].action == action) return conv_dungeon_feat(floor_ptr, f_ptr->state[i].result);
}
if (have_flag(f_ptr->flags, FF_PERMANENT)) return feat;
- return (feature_action_flags[action] & FAF_DESTROY) ? conv_dungeon_feat(p_ptr->current_floor_ptr, f_ptr->destroyed) : feat;
+ return (feature_action_flags[action] & FAF_DESTROY) ? conv_dungeon_feat(floor_ptr, f_ptr->destroyed) : feat;
}
/*
FEAT_IDX oldfeat = floor_ptr->grid_array[y][x].feat;
/* Get the new feat */
- FEAT_IDX newfeat = feat_state(oldfeat, action);
+ FEAT_IDX newfeat = feat_state(player_ptr, oldfeat, action);
/* No change */
if (newfeat == oldfeat) return;
* @param feat 地形ID
* @return 開いた地形である場合TRUEを返す / Return TRUE if the given feature is an open door
*/
-bool is_open(FEAT_IDX feat)
+bool is_open(player_type *player_ptr, FEAT_IDX feat)
{
- return have_flag(f_info[feat].flags, FF_CLOSE) && (feat != feat_state(feat, FF_CLOSE));
+ return have_flag(f_info[feat].flags, FF_CLOSE) && (feat != feat_state(player_ptr, feat, FF_CLOSE));
}
/*!
feature_type *f_ptr = &f_info[feat_wall_outer];
if (permanent_wall(f_ptr))
{
- g_ptr->feat = (s16b)feat_state(feat_wall_outer, FF_UNPERM);
+ g_ptr->feat = (s16b)feat_state(player_ptr, feat_wall_outer, FF_UNPERM);
}
else
{
case outer_noperm:
{
feature_type *_f_ptr = &f_info[feat_wall_outer];
- if (permanent_wall(_f_ptr)) set_cave_feat(floor_ptr, y, x, (s16b)feat_state(feat_wall_outer, FF_UNPERM));
+ if (permanent_wall(_f_ptr)) set_cave_feat(floor_ptr, y, x, (s16b)feat_state(player_ptr, feat_wall_outer, FF_UNPERM));
else set_cave_feat(floor_ptr, y, x, feat_wall_outer);
floor_ptr->grid_array[y][x].info &= ~(CAVE_MASK);
add_cave_info(floor_ptr, y, x, (CAVE_OUTER | CAVE_VAULT));
{
feature_type *f_ptr = &f_info[feat_wall_solid];
if ((floor_ptr->grid_array[y][x].info & CAVE_VAULT) && permanent_wall(f_ptr))
- set_cave_feat(floor_ptr, y, x, feat_state(feat_wall_solid, FF_UNPERM));
+ set_cave_feat(floor_ptr, y, x, feat_state(player_ptr, feat_wall_solid, FF_UNPERM));
else set_cave_feat(floor_ptr, y, x, feat_wall_solid);
floor_ptr->grid_array[y][x].info &= ~(CAVE_MASK);
add_cave_info(floor_ptr, y, x, CAVE_SOLID);
extern void place_bound_perm_wall(player_type *player_ptr, grid_type *g_ptr);
-extern bool is_known_trap(grid_type *g_ptr);
-extern bool is_hidden_door(grid_type *g_ptr);
+extern bool is_known_trap(player_type *player_ptr, grid_type *g_ptr);
+extern bool is_hidden_door(player_type *player_ptr, grid_type *g_ptr);
extern bool is_mirror_grid(grid_type *g_ptr);
extern bool is_glyph_grid(grid_type *g_ptr);
extern bool is_explosive_rune_grid(grid_type *g_ptr);
*/
#define feat_uses_special(F) (have_flag(f_info[(F)].flags, FF_SPECIAL))
-/* grids.c */
+/*!
+ * grids.c
+ * ここにfloor_type を引数として加えるとコンパイルエラー
+ */
extern POSITION distance(POSITION y1, POSITION x1, POSITION y2, POSITION x2);
extern void update_local_illumination(player_type *creature_ptr, POSITION y, POSITION x);
extern bool no_lite(player_type *creature_ptr);
extern void note_spot(player_type *player_ptr, POSITION y, POSITION x);
extern void lite_spot(player_type *player_ptr, POSITION y, POSITION x);
extern void update_flow(player_type *subject_ptr);
-extern FEAT_IDX feat_state(FEAT_IDX feat, int action);
+extern FEAT_IDX feat_state(player_type *player_ptr, FEAT_IDX feat, int action);
extern void cave_alter_feat(player_type *player_ptr, POSITION y, POSITION x, int action);
extern void remove_mirror(player_type *caster_ptr, POSITION y, POSITION x);
-extern bool is_open(FEAT_IDX feat);
+extern bool is_open(player_type *player_ptr, FEAT_IDX feat);
extern bool check_local_illumination(player_type *creature_ptr, POSITION y, POSITION x);
extern bool cave_monster_teleportable_bold(player_type *player_ptr, MONSTER_IDX m_idx, POSITION y, POSITION x, BIT_FLAGS mode);
py_attack(caster_ptr, y, x, 0);
- if (!player_can_enter(caster_ptr, caster_ptr->current_floor_ptr->grid_array[y][x].feat, 0) || is_trap(caster_ptr->current_floor_ptr->grid_array[y][x].feat))
+ if (!player_can_enter(caster_ptr, caster_ptr->current_floor_ptr->grid_array[y][x].feat, 0) || is_trap(caster_ptr, caster_ptr->current_floor_ptr->grid_array[y][x].feat))
break;
y += ddy[dir];
x += ddx[dir];
- if (player_can_enter(caster_ptr, caster_ptr->current_floor_ptr->grid_array[y][x].feat, 0) && !is_trap(caster_ptr->current_floor_ptr->grid_array[y][x].feat) && !caster_ptr->current_floor_ptr->grid_array[y][x].m_idx)
+ if (player_can_enter(caster_ptr, caster_ptr->current_floor_ptr->grid_array[y][x].feat, 0) && !is_trap(caster_ptr, caster_ptr->current_floor_ptr->grid_array[y][x].feat) && !caster_ptr->current_floor_ptr->grid_array[y][x].m_idx)
{
msg_print(NULL);
(void)move_player_effect(caster_ptr, y, x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP);
if (!(((r_ptr->flags2 & RF2_PASS_WALL) && ((m_idx != target_ptr->riding) || target_ptr->pass_wall)) || ((r_ptr->flags2 & RF2_KILL_WALL) && (m_idx != target_ptr->riding))))
{
if (cost == 0) continue;
- if (!can_open_door && is_closed_door(g_ptr->feat)) continue;
+ if (!can_open_door && is_closed_door(target_ptr, g_ptr->feat)) continue;
}
/* Hack -- for kill or pass wall monster.. */
}
/* Handle doors and secret doors */
- else if (is_closed_door(g_ptr->feat))
+ else if (is_closed_door(target_ptr, g_ptr->feat))
{
bool may_bash = TRUE;
if (did_open_door || did_bash_door)
{
/* Break down the door */
- if (did_bash_door && ((randint0(100) < 50) || (feat_state(g_ptr->feat, FF_OPEN) == g_ptr->feat) || have_flag(f_ptr->flags, FF_GLASS)))
+ if (did_bash_door && ((randint0(100) < 50) || (feat_state(target_ptr, g_ptr->feat, FF_OPEN) == g_ptr->feat) || have_flag(f_ptr->flags, FF_GLASS)))
{
cave_alter_feat(target_ptr, ny, nx, FF_BASH);
floor_type *floor_ptr = creature_ptr->current_floor_ptr;
g_ptr = &floor_ptr->grid_array[y][x];
- if (g_ptr->mimic && is_trap(g_ptr->feat))
+ if (g_ptr->mimic && is_trap(creature_ptr, g_ptr->feat))
{
disclose_grid(creature_ptr, y, x);
msg_print(_("トラップを発見した。", "You have found a trap."));
disturb(creature_ptr, FALSE, TRUE);
}
- if (is_hidden_door(g_ptr))
+ if (is_hidden_door(creature_ptr, g_ptr))
{
msg_print(_("隠しドアを発見した。", "You have found a secret door."));
disclose_grid(creature_ptr, y, x);
creature_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
/* Remove "unsafe" flag */
- if ((!creature_ptr->blind && !no_lite(creature_ptr)) || !is_trap(g_ptr->feat)) g_ptr->info &= ~(CAVE_UNSAFE);
+ if ((!creature_ptr->blind && !no_lite(creature_ptr)) || !is_trap(creature_ptr, g_ptr->feat)) g_ptr->info &= ~(CAVE_UNSAFE);
/* For get everything when requested hehe I'm *NASTY* */
if (floor_ptr->dun_level && (d_info[creature_ptr->dungeon_idx].flags1 & DF1_FORGET)) wiz_dark(creature_ptr);
else
{
/* Closed doors */
- if (easy_open && is_closed_door(feat) && easy_open_door(creature_ptr, y, x)) return;
+ if (easy_open && is_closed_door(creature_ptr, feat) && easy_open_door(creature_ptr, y, x)) return;
#ifdef JP
msg_format("%sが行く手をはばんでいる。", name);
g_ptr = &floor_ptr->grid_array[creature_ptr->y+ddy[new_dir]][creature_ptr->x+ddx[new_dir]];
/* Close door abort traveling */
- if (!easy_open && is_closed_door(g_ptr->feat)) return 0;
+ if (!easy_open && is_closed_door(creature_ptr, g_ptr->feat)) return 0;
/* Visible and unignorable trap abort tarveling */
if (!g_ptr->mimic && !trap_can_be_ignored(creature_ptr, g_ptr->feat)) return 0;
py_attack(caster_ptr, y, x, 0);
- if (!player_can_enter(caster_ptr, caster_ptr->current_floor_ptr->grid_array[y][x].feat, 0) || is_trap(caster_ptr->current_floor_ptr->grid_array[y][x].feat))
+ if (!player_can_enter(caster_ptr, caster_ptr->current_floor_ptr->grid_array[y][x].feat, 0) || is_trap(caster_ptr, caster_ptr->current_floor_ptr->grid_array[y][x].feat))
break;
y += ddy[dir];
x += ddx[dir];
- if (player_can_enter(caster_ptr, caster_ptr->current_floor_ptr->grid_array[y][x].feat, 0) && !is_trap(caster_ptr->current_floor_ptr->grid_array[y][x].feat) && !caster_ptr->current_floor_ptr->grid_array[y][x].m_idx)
+ if (player_can_enter(caster_ptr, caster_ptr->current_floor_ptr->grid_array[y][x].feat, 0) && !is_trap(caster_ptr, caster_ptr->current_floor_ptr->grid_array[y][x].feat) && !caster_ptr->current_floor_ptr->grid_array[y][x].m_idx)
{
msg_print(NULL);
(void)move_player_effect(caster_ptr, y, x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP);
x = xval + 2 * ddx_ddd[dir1];
place_secret_door(player_ptr, y, x, DOOR_GLASS_DOOR);
g_ptr = &floor_ptr->grid_array[y][x];
- if (is_closed_door(g_ptr->feat)) g_ptr->mimic = feat_glass_wall;
+ if (is_closed_door(player_ptr, g_ptr->feat)) g_ptr->mimic = feat_glass_wall;
/* Place a potion */
get_obj_num_hook = kind_is_potion;
/* Secret glass doors */
case '-':
place_secret_door(player_ptr, y, x, DOOR_GLASS_DOOR);
- if (is_closed_door(g_ptr->feat)) g_ptr->mimic = feat_glass_wall;
+ if (is_closed_door(player_ptr, g_ptr->feat)) g_ptr->mimic = feat_glass_wall;
break;
/* Curtains */
{
cave_set_feat(caster_ptr, caster_ptr->y, caster_ptr->x,
(dest_sf_ptr->last_visit && (dest_sf_ptr->dun_level <= floor_ptr->dun_level - 2)) ?
- feat_state(feat_up_stair, FF_SHAFT) : feat_up_stair);
+ feat_state(caster_ptr, feat_up_stair, FF_SHAFT) : feat_up_stair);
}
else
{
cave_set_feat(caster_ptr, caster_ptr->y, caster_ptr->x,
(dest_sf_ptr->last_visit && (dest_sf_ptr->dun_level >= floor_ptr->dun_level + 2)) ?
- feat_state(feat_down_stair, FF_SHAFT) : feat_down_stair);
+ feat_state(caster_ptr, feat_down_stair, FF_SHAFT) : feat_down_stair);
}
/* Connect this stairs to the destination */
case GF_KILL_TRAP:
{
/* Reveal secret doors */
- if (is_hidden_door(g_ptr))
+ if (is_hidden_door(caster_ptr, g_ptr))
{
/* Pick a door */
disclose_grid(caster_ptr, y, x);
}
/* Destroy traps */
- if (is_trap(g_ptr->feat))
+ if (is_trap(caster_ptr, g_ptr->feat))
{
/* Check line of sight */
if (known)
}
/* Locked doors are unlocked */
- if (is_closed_door(g_ptr->feat) && f_ptr->power && have_flag(f_ptr->flags, FF_OPEN))
+ if (is_closed_door(caster_ptr, g_ptr->feat) && f_ptr->power && have_flag(f_ptr->flags, FF_OPEN))
{
FEAT_IDX old_feat = g_ptr->feat;
case GF_KILL_DOOR:
{
/* Destroy all doors and traps */
- if (is_trap(g_ptr->feat) || have_flag(f_ptr->flags, FF_DOOR))
+ if (is_trap(caster_ptr, g_ptr->feat) || have_flag(f_ptr->flags, FF_DOOR))
{
/* Check line of sight */
if (known)
/* Set boundary mimic if needed */
if (g_ptr->mimic && have_flag(f_ptr->flags, FF_HURT_DISI))
{
- g_ptr->mimic = feat_state(g_ptr->mimic, FF_HURT_DISI);
+ g_ptr->mimic = feat_state(caster_ptr, g_ptr->mimic, FF_HURT_DISI);
/* Check for change to boring grid */
if (!have_flag(f_info[g_ptr->mimic].flags, FF_REMEMBER)) g_ptr->info &= ~(CAVE_MARK);
/* Set boundary mimic if needed */
if (g_ptr->mimic && have_flag(f_ptr->flags, FF_HURT_DISI))
{
- g_ptr->mimic = feat_state(g_ptr->mimic, FF_HURT_DISI);
+ g_ptr->mimic = feat_state(caster_ptr, g_ptr->mimic, FF_HURT_DISI);
/* Check for change to boring grid */
if (!have_flag(f_info[g_ptr->mimic].flags, FF_REMEMBER)) g_ptr->info &= ~(CAVE_MARK);
/* Set boundary mimic if needed */
if (g_ptr->mimic && have_flag(f_ptr->flags, FF_HURT_DISI))
{
- g_ptr->mimic = feat_state(g_ptr->mimic, FF_HURT_DISI);
+ g_ptr->mimic = feat_state(caster_ptr, g_ptr->mimic, FF_HURT_DISI);
/* Check for change to boring grid */
if (!have_flag(f_info[g_ptr->mimic].flags, FF_REMEMBER)) g_ptr->info &= ~(CAVE_MARK);
/* Set boundary mimic if needed */
if (g_ptr->mimic && have_flag(f_ptr->flags, FF_HURT_DISI))
{
- g_ptr->mimic = feat_state(g_ptr->mimic, FF_HURT_DISI);
+ g_ptr->mimic = feat_state(caster_ptr, g_ptr->mimic, FF_HURT_DISI);
/* Check for change to boring grid */
if (!have_flag(f_info[g_ptr->mimic].flags, FF_REMEMBER)) g_ptr->info &= ~(CAVE_MARK);
}
}
- if (break_trap && is_trap(g_ptr->feat))
+ if (break_trap && is_trap(trapped_ptr, g_ptr->feat))
{
cave_alter_feat(trapped_ptr, y, x, FF_DISARM);
msg_print(_("トラップを粉砕した。", "You destroyed the trap."));
else old_damage = old_damage / 2;
g_ptr = &creature_ptr->current_floor_ptr->grid_array[yy][xx];
- bool is_warning = (!easy_disarm && is_trap(g_ptr->feat)) || (g_ptr->mimic && is_trap(g_ptr->feat));
+ bool is_warning = (!easy_disarm && is_trap(creature_ptr, g_ptr->feat)) || (g_ptr->mimic && is_trap(creature_ptr, g_ptr->feat));
is_warning = !one_in_(13);
if (!is_warning) return TRUE;