/* No teleporting into vaults and such */
if (!(p_ptr->inside_quest || p_ptr->inside_arena))
- if (cave[ny][nx].info & CAVE_ICKY) continue;
+ if (grid_array[ny][nx].info & CAVE_ICKY) continue;
/* This grid looks good */
look = FALSE;
sound(SOUND_TPOTHER);
/* Update the old location */
- cave[oy][ox].m_idx = 0;
+ grid_array[oy][ox].m_idx = 0;
/* Update the new location */
- cave[ny][nx].m_idx = m_idx;
+ grid_array[ny][nx].m_idx = m_idx;
/* Move the monster */
m_ptr->fy = ny;
if (!cave_monster_teleportable_bold(m_idx, ny, nx, mode)) continue;
/* No teleporting into vaults and such */
- /* if (cave[ny][nx].info & (CAVE_ICKY)) continue; */
+ /* if (grid_array[ny][nx].info & (CAVE_ICKY)) continue; */
/* This grid looks good */
look = FALSE;
sound(SOUND_TPOTHER);
/* Update the old location */
- cave[oy][ox].m_idx = 0;
+ grid_array[oy][ox].m_idx = 0;
/* Update the new location */
- cave[ny][nx].m_idx = m_idx;
+ grid_array[ny][nx].m_idx = m_idx;
/* Move the monster */
m_ptr->fy = ny;
{
for (yy = -1; yy < 2; yy++)
{
- MONSTER_IDX tmp_m_idx = cave[oy+yy][ox+xx].m_idx;
+ MONSTER_IDX tmp_m_idx = grid_array[oy+yy][ox+xx].m_idx;
/* A monster except your mount may follow */
if (tmp_m_idx && (p_ptr->riding != tmp_m_idx))
{
for (yy = -1; yy < 2; yy++)
{
- IDX tmp_m_idx = cave[oy+yy][ox+xx].m_idx;
+ MONSTER_IDX tmp_m_idx = grid_array[oy+yy][ox+xx].m_idx;
/* A monster except your mount or caster may follow */
if (tmp_m_idx && (p_ptr->riding != tmp_m_idx) && (m_idx != tmp_m_idx))
}
/* Accept any grid when wizard mode */
- if (p_ptr->wizard && !(mode & TELEPORT_PASSIVE) && (!cave[y][x].m_idx || (cave[y][x].m_idx == p_ptr->riding))) break;
+ if (p_ptr->wizard && !(mode & TELEPORT_PASSIVE) && (!grid_array[y][x].m_idx || (grid_array[y][x].m_idx == p_ptr->riding))) break;
/* Accept teleportable floor grids */
if (cave_player_teleportable_bold(y, x, mode)) break;
}
+bool teleport_level_other(player_type *creature_ptr)
+{
+ MONSTER_IDX target_m_idx;
+ monster_type *m_ptr;
+ monster_race *r_ptr;
+ GAME_TEXT m_name[MAX_NLEN];
+
+ if (!target_set(TARGET_KILL)) return FALSE;
+ target_m_idx = grid_array[target_row][target_col].m_idx;
+ if (!target_m_idx) return TRUE;
+ if (!player_has_los_bold(target_row, target_col)) return TRUE;
+ if (!projectable(creature_ptr->y, creature_ptr->x, target_row, target_col)) return TRUE;
+ m_ptr = &m_list[target_m_idx];
+ r_ptr = &r_info[m_ptr->r_idx];
+ monster_desc(m_name, m_ptr, 0);
+ msg_format(_("%^sの足を指さした。", "You gesture at %^s's feet."), m_name);
+
+ if ((r_ptr->flagsr & (RFR_EFF_RES_NEXU_MASK | RFR_RES_TELE)) ||
+ (r_ptr->flags1 & RF1_QUESTOR) || (r_ptr->level + randint1(50) > creature_ptr->lev + randint1(60)))
+ {
+ msg_format(_("しかし効果がなかった!", "%^s is unaffected!"), m_name);
+ }
+ else teleport_level(target_m_idx);
+ return TRUE;
+}
+
/*!
* @brief プレイヤー及びモンスターをレベルテレポートさせる /
* Teleport the player one level up or down (random when legal)
}
/* Down only */
- if ((ironman_downward && (m_idx <= 0)) || (dun_level <= d_info[dungeon_type].mindepth))
+ if ((ironman_downward && (m_idx <= 0)) || (dun_level <= d_info[p_ptr->dungeon_idx].mindepth))
{
#ifdef JP
if (see_m) msg_format("%^sは床を突き破って沈んでいく。", m_name);
{
if (!dun_level)
{
- dungeon_type = ironman_downward ? DUNGEON_ANGBAND : p_ptr->recall_dungeon;
+ p_ptr->dungeon_idx = ironman_downward ? DUNGEON_ANGBAND : p_ptr->recall_dungeon;
p_ptr->oldpy = p_ptr->y;
p_ptr->oldpx = p_ptr->x;
}
if (!dun_level)
{
- dun_level = d_info[dungeon_type].mindepth;
+ dun_level = d_info[p_ptr->dungeon_idx].mindepth;
prepare_change_floor_mode(CFM_RAND_PLACE);
}
else
}
/* Up only */
- else if (quest_number(dun_level) || (dun_level >= d_info[dungeon_type].maxdepth))
+ else if (quest_number(dun_level) || (dun_level >= d_info[p_ptr->dungeon_idx].maxdepth))
{
#ifdef JP
if (see_m) msg_format("%^sは天井を突き破って宙へ浮いていく。", m_name);
if (m_idx <= 0) /* To player */
{
/* Never reach this code on the surface */
- /* if (!dun_level) dungeon_type = p_ptr->recall_dungeon; */
+ /* if (!dun_level) p_ptr->dungeon_idx = p_ptr->recall_dungeon; */
if (record_stair) do_cmd_write_nikki(NIKKI_TELE_LEV, 1, NULL);
}
/* Allocate the "dun" array */
- C_MAKE(dun, max_d_idx, s16b);
+ C_MAKE(dun, max_d_idx, DUNGEON_IDX);
screen_save();
for(i = 1; i < max_d_idx; i++)
if ((i == ESCAPE) || !num)
{
/* Free the "dun" array */
- C_KILL(dun, max_d_idx, s16b);
+ C_KILL(dun, max_d_idx, DUNGEON_IDX);
screen_load();
return 0;
screen_load();
/* Free the "dun" array */
- C_KILL(dun, max_d_idx, s16b);
+ C_KILL(dun, max_d_idx, DUNGEON_IDX);
return select_dungeon;
}
return TRUE;
}
- if (dun_level && (max_dlv[dungeon_type] > dun_level) && !creature_ptr->inside_quest && !creature_ptr->word_recall)
+ if (dun_level && (max_dlv[p_ptr->dungeon_idx] > dun_level) && !creature_ptr->inside_quest && !creature_ptr->word_recall)
{
if (get_check(_("ここは最深到達階より浅い階です。この階に戻って来ますか? ", "Reset recall depth? ")))
{
- max_dlv[dungeon_type] = dun_level;
+ max_dlv[p_ptr->dungeon_idx] = dun_level;
if (record_maxdepth)
- do_cmd_write_nikki(NIKKI_TRUMP, dungeon_type, _("帰還のときに", "when recall from dungeon"));
+ do_cmd_write_nikki(NIKKI_TRUMP, p_ptr->dungeon_idx, _("帰還のときに", "when recall from dungeon"));
}
}
int ii, jj, i;
/* Pick a pair of stats */
- ii = randint0(6);
- for (jj = ii; jj == ii; jj = randint0(6)) /* loop */;
+ ii = randint0(A_MAX);
+ for (jj = ii; jj == ii; jj = randint0(A_MAX)) /* loop */;
max1 = p_ptr->stat_max[ii];
cur1 = p_ptr->stat_cur[ii];
p_ptr->stat_max[jj] = max1;
p_ptr->stat_cur[jj] = cur1;
- for (i=0;i<6;i++)
+ for (i = 0; i < A_MAX; i++)
{
if(p_ptr->stat_max[i] > p_ptr->stat_max_max[i]) p_ptr->stat_max[i] = p_ptr->stat_max_max[i];
if(p_ptr->stat_cur[i] > p_ptr->stat_max_max[i]) p_ptr->stat_cur[i] = p_ptr->stat_max_max[i];
static bool vanish_dungeon(void)
{
POSITION y, x;
- cave_type *c_ptr;
+ grid_type *g_ptr;
feature_type *f_ptr;
monster_type *m_ptr;
GAME_TEXT m_name[MAX_NLEN];
{
for (x = 1; x < cur_wid - 1; x++)
{
- c_ptr = &cave[y][x];
+ g_ptr = &grid_array[y][x];
/* Seeing true feature code (ignore mimic) */
- f_ptr = &f_info[c_ptr->feat];
+ f_ptr = &f_info[g_ptr->feat];
/* Lose room and vault */
- c_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY);
+ g_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY);
- m_ptr = &m_list[c_ptr->m_idx];
+ m_ptr = &m_list[g_ptr->m_idx];
/* Awake monster */
- if (c_ptr->m_idx && MON_CSLEEP(m_ptr))
+ if (g_ptr->m_idx && MON_CSLEEP(m_ptr))
{
/* Reset sleep counter */
- (void)set_monster_csleep(c_ptr->m_idx, 0);
+ (void)set_monster_csleep(g_ptr->m_idx, 0);
/* Notice the "waking up" */
if (m_ptr->ml)
/* Special boundary walls -- Top and bottom */
for (x = 0; x < cur_wid; x++)
{
- c_ptr = &cave[0][x];
- f_ptr = &f_info[c_ptr->mimic];
+ g_ptr = &grid_array[0][x];
+ f_ptr = &f_info[g_ptr->mimic];
/* Lose room and vault */
- c_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY);
+ g_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY);
/* Set boundary mimic if needed */
- if (c_ptr->mimic && have_flag(f_ptr->flags, FF_HURT_DISI))
+ if (g_ptr->mimic && have_flag(f_ptr->flags, FF_HURT_DISI))
{
- c_ptr->mimic = feat_state(c_ptr->mimic, FF_HURT_DISI);
+ g_ptr->mimic = feat_state(g_ptr->mimic, FF_HURT_DISI);
/* Check for change to boring grid */
- if (!have_flag(f_info[c_ptr->mimic].flags, FF_REMEMBER)) c_ptr->info &= ~(CAVE_MARK);
+ if (!have_flag(f_info[g_ptr->mimic].flags, FF_REMEMBER)) g_ptr->info &= ~(CAVE_MARK);
}
- c_ptr = &cave[cur_hgt - 1][x];
- f_ptr = &f_info[c_ptr->mimic];
+ g_ptr = &grid_array[cur_hgt - 1][x];
+ f_ptr = &f_info[g_ptr->mimic];
/* Lose room and vault */
- c_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY);
+ g_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY);
/* Set boundary mimic if needed */
- if (c_ptr->mimic && have_flag(f_ptr->flags, FF_HURT_DISI))
+ if (g_ptr->mimic && have_flag(f_ptr->flags, FF_HURT_DISI))
{
- c_ptr->mimic = feat_state(c_ptr->mimic, FF_HURT_DISI);
+ g_ptr->mimic = feat_state(g_ptr->mimic, FF_HURT_DISI);
/* Check for change to boring grid */
- if (!have_flag(f_info[c_ptr->mimic].flags, FF_REMEMBER)) c_ptr->info &= ~(CAVE_MARK);
+ if (!have_flag(f_info[g_ptr->mimic].flags, FF_REMEMBER)) g_ptr->info &= ~(CAVE_MARK);
}
}
/* Special boundary walls -- Left and right */
for (y = 1; y < (cur_hgt - 1); y++)
{
- c_ptr = &cave[y][0];
- f_ptr = &f_info[c_ptr->mimic];
+ g_ptr = &grid_array[y][0];
+ f_ptr = &f_info[g_ptr->mimic];
/* Lose room and vault */
- c_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY);
+ g_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY);
/* Set boundary mimic if needed */
- if (c_ptr->mimic && have_flag(f_ptr->flags, FF_HURT_DISI))
+ if (g_ptr->mimic && have_flag(f_ptr->flags, FF_HURT_DISI))
{
- c_ptr->mimic = feat_state(c_ptr->mimic, FF_HURT_DISI);
+ g_ptr->mimic = feat_state(g_ptr->mimic, FF_HURT_DISI);
/* Check for change to boring grid */
- if (!have_flag(f_info[c_ptr->mimic].flags, FF_REMEMBER)) c_ptr->info &= ~(CAVE_MARK);
+ if (!have_flag(f_info[g_ptr->mimic].flags, FF_REMEMBER)) g_ptr->info &= ~(CAVE_MARK);
}
- c_ptr = &cave[y][cur_wid - 1];
- f_ptr = &f_info[c_ptr->mimic];
+ g_ptr = &grid_array[y][cur_wid - 1];
+ f_ptr = &f_info[g_ptr->mimic];
/* Lose room and vault */
- c_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY);
+ g_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY);
/* Set boundary mimic if needed */
- if (c_ptr->mimic && have_flag(f_ptr->flags, FF_HURT_DISI))
+ if (g_ptr->mimic && have_flag(f_ptr->flags, FF_HURT_DISI))
{
- c_ptr->mimic = feat_state(c_ptr->mimic, FF_HURT_DISI);
+ g_ptr->mimic = feat_state(g_ptr->mimic, FF_HURT_DISI);
/* Check for change to boring grid */
- if (!have_flag(f_info[c_ptr->mimic].flags, FF_REMEMBER)) c_ptr->info &= ~(CAVE_MARK);
+ if (!have_flag(f_info[g_ptr->mimic].flags, FF_REMEMBER)) g_ptr->info &= ~(CAVE_MARK);
}
}
void call_the_(void)
{
int i;
- cave_type *c_ptr;
+ grid_type *g_ptr;
bool do_call = TRUE;
for (i = 0; i < 9; i++)
{
- c_ptr = &cave[p_ptr->y + ddy_ddd[i]][p_ptr->x + ddx_ddd[i]];
+ g_ptr = &grid_array[p_ptr->y + ddy_ddd[i]][p_ptr->x + ddx_ddd[i]];
- if (!cave_have_flag_grid(c_ptr, FF_PROJECT))
+ if (!cave_have_flag_grid(g_ptr, FF_PROJECT))
{
- if (!c_ptr->mimic || !have_flag(f_info[c_ptr->mimic].flags, FF_PROJECT) ||
- !permanent_wall(&f_info[c_ptr->feat]))
+ if (!g_ptr->mimic || !have_flag(f_info[g_ptr->mimic].flags, FF_PROJECT) ||
+ !permanent_wall(&f_info[g_ptr->feat]))
{
do_call = FALSE;
break;
{
POSITION ty, tx;
OBJECT_IDX i;
- cave_type *c_ptr;
+ grid_type *g_ptr;
object_type *o_ptr;
GAME_TEXT o_name[MAX_NLEN];
/* Check to see if an object is already there */
- if (cave[p_ptr->y][p_ptr->x].o_idx)
+ if (grid_array[p_ptr->y][p_ptr->x].o_idx)
{
msg_print(_("自分の足の下にある物は取れません。", "You can't fetch when you're already standing on something."));
return;
return;
}
- c_ptr = &cave[ty][tx];
+ g_ptr = &grid_array[ty][tx];
/* We need an item to fetch */
- if (!c_ptr->o_idx)
+ if (!g_ptr->o_idx)
{
msg_print(_("そこには何もありません。", "There is no object at this place."));
return;
}
/* No fetching from vault */
- if (c_ptr->info & CAVE_ICKY)
+ if (g_ptr->info & CAVE_ICKY)
{
msg_print(_("アイテムがコントロールを外れて落ちた。", "The item slips from your control."));
return;
{
ty += ddy[dir];
tx += ddx[dir];
- c_ptr = &cave[ty][tx];
+ g_ptr = &grid_array[ty][tx];
if ((distance(p_ptr->y, p_ptr->x, ty, tx) > MAX_RANGE) ||
!cave_have_flag_bold(ty, tx, FF_PROJECT)) return;
}
- while (!c_ptr->o_idx);
+ while (!g_ptr->o_idx);
}
- o_ptr = &o_list[c_ptr->o_idx];
+ o_ptr = &o_list[g_ptr->o_idx];
if (o_ptr->weight > wgt)
{
return;
}
- i = c_ptr->o_idx;
- c_ptr->o_idx = o_ptr->next_o_idx;
- cave[p_ptr->y][p_ptr->x].o_idx = i; /* 'move' it */
+ i = g_ptr->o_idx;
+ g_ptr->o_idx = o_ptr->next_o_idx;
+ grid_array[p_ptr->y][p_ptr->x].o_idx = i; /* 'move' it */
o_ptr->next_o_idx = 0;
o_ptr->iy = p_ptr->y;
}
/* Create a glyph */
- cave[p_ptr->y][p_ptr->x].info |= CAVE_OBJECT;
- cave[p_ptr->y][p_ptr->x].mimic = feat_glyph;
+ grid_array[p_ptr->y][p_ptr->x].info |= CAVE_OBJECT;
+ grid_array[p_ptr->y][p_ptr->x].mimic = feat_glyph;
note_spot(p_ptr->y, p_ptr->x);
lite_spot(p_ptr->y, p_ptr->x);
}
/* Create a mirror */
- cave[p_ptr->y][p_ptr->x].info |= CAVE_OBJECT;
- cave[p_ptr->y][p_ptr->x].mimic = feat_mirror;
+ grid_array[p_ptr->y][p_ptr->x].info |= CAVE_OBJECT;
+ grid_array[p_ptr->y][p_ptr->x].mimic = feat_mirror;
/* Turn on the light */
- cave[p_ptr->y][p_ptr->x].info |= CAVE_GLOW;
+ grid_array[p_ptr->y][p_ptr->x].info |= CAVE_GLOW;
note_spot(p_ptr->y, p_ptr->x);
lite_spot(p_ptr->y, p_ptr->x);
}
/* Create a glyph */
- cave[p_ptr->y][p_ptr->x].info |= CAVE_OBJECT;
- cave[p_ptr->y][p_ptr->x].mimic = feat_explosive_rune;
+ grid_array[p_ptr->y][p_ptr->x].info |= CAVE_OBJECT;
+ grid_array[p_ptr->y][p_ptr->x].mimic = feat_explosive_rune;
note_spot(p_ptr->y, p_ptr->x);
lite_spot(p_ptr->y, p_ptr->x);
*/
bool polymorph_monster(POSITION y, POSITION x)
{
- cave_type *c_ptr = &cave[y][x];
- monster_type *m_ptr = &m_list[c_ptr->m_idx];
+ grid_type *g_ptr = &grid_array[y][x];
+ monster_type *m_ptr = &m_list[g_ptr->m_idx];
bool polymorphed = FALSE;
MONRACE_IDX new_r_idx;
MONRACE_IDX old_r_idx = m_ptr->r_idx;
- bool targeted = (target_who == c_ptr->m_idx) ? TRUE : FALSE;
- bool health_tracked = (p_ptr->health_who == c_ptr->m_idx) ? TRUE : FALSE;
+ bool targeted = (target_who == g_ptr->m_idx) ? TRUE : FALSE;
+ bool health_tracked = (p_ptr->health_who == g_ptr->m_idx) ? TRUE : FALSE;
monster_type back_m;
if (p_ptr->inside_arena || p_ptr->inside_battle) return (FALSE);
- if ((p_ptr->riding == c_ptr->m_idx) || (m_ptr->mflag2 & MFLAG2_KAGE)) return (FALSE);
+ if ((p_ptr->riding == g_ptr->m_idx) || (m_ptr->mflag2 & MFLAG2_KAGE)) return (FALSE);
/* Memorize the monster before polymorphing */
back_m = *m_ptr;
m_ptr->hold_o_idx = 0;
/* "Kill" the "old" monster */
- delete_monster_idx(c_ptr->m_idx);
+ delete_monster_idx(g_ptr->m_idx);
/* Create a new monster (no groups) */
if (place_monster_aux(0, y, x, new_r_idx, mode))
p_ptr->csp = p_ptr->msp;
}
- /* Redraw mana and hp */
p_ptr->redraw |= (PR_MANA);
-
p_ptr->update |= (PU_COMBINE | PU_REORDER);
p_ptr->window |= (PW_INVEN);
void massacre(void)
{
POSITION x, y;
- cave_type *c_ptr;
+ grid_type *g_ptr;
monster_type *m_ptr;
DIRECTION dir;
{
y = p_ptr->y + ddy_ddd[dir];
x = p_ptr->x + ddx_ddd[dir];
- c_ptr = &cave[y][x];
- m_ptr = &m_list[c_ptr->m_idx];
+ g_ptr = &grid_array[y][x];
+ m_ptr = &m_list[g_ptr->m_idx];
/* Hack -- attack monsters */
- if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))
+ if (g_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))
py_attack(y, x, 0);
}
}
bool eat_lock(void)
{
POSITION x, y;
- cave_type *c_ptr;
+ grid_type *g_ptr;
feature_type *f_ptr, *mimic_f_ptr;
DIRECTION dir;
if (!get_direction(&dir, FALSE, FALSE)) return FALSE;
y = p_ptr->y + ddy[dir];
x = p_ptr->x + ddx[dir];
- c_ptr = &cave[y][x];
- f_ptr = &f_info[c_ptr->feat];
- mimic_f_ptr = &f_info[get_feat_mimic(c_ptr)];
+ g_ptr = &grid_array[y][x];
+ f_ptr = &f_info[g_ptr->feat];
+ mimic_f_ptr = &f_info[get_feat_mimic(g_ptr)];
stop_mouth();
{
msg_format(_("いてっ!この%sはあなたの歯より硬い!", "Ouch! This %s is harder than your teeth!"), f_name + mimic_f_ptr->name);
}
- else if (c_ptr->m_idx)
+ else if (g_ptr->m_idx)
{
- monster_type *m_ptr = &m_list[c_ptr->m_idx];
+ monster_type *m_ptr = &m_list[g_ptr->m_idx];
msg_print(_("何かが邪魔しています!", "There's something in the way!"));
if (!m_ptr->ml || !is_pet(m_ptr)) py_attack(y, x, 0);
x = p_ptr->x + ddx[dir];
dam = damroll(8 + ((plev - 5) / 4) + boost / 12, 8);
fire_beam(GF_MISSILE, dir, dam);
- if (cave[y][x].m_idx)
+ if (grid_array[y][x].m_idx)
{
int i;
- int ty = y, tx = x;
- int oy = y, ox = x;
- MONSTER_IDX m_idx = cave[y][x].m_idx;
+ POSITION ty = y, tx = x;
+ POSITION oy = y, ox = x;
+ MONSTER_IDX m_idx = grid_array[y][x].m_idx;
monster_type *m_ptr = &m_list[m_idx];
monster_race *r_ptr = &r_info[m_ptr->r_idx];
GAME_TEXT m_name[MAX_NLEN];
if ((ty != oy) || (tx != ox))
{
msg_format(_("%sを吹き飛ばした!", "You blow %s away!"), m_name);
- cave[oy][ox].m_idx = 0;
- cave[ty][tx].m_idx = (s16b)m_idx;
- m_ptr->fy = (byte_hack)ty;
- m_ptr->fx = (byte_hack)tx;
+ grid_array[oy][ox].m_idx = 0;
+ grid_array[ty][tx].m_idx = m_idx;
+ m_ptr->fy = ty;
+ m_ptr->fx = tx;
update_monster(m_idx, TRUE);
lite_spot(oy, ox);