return false;
}
- const auto y = player_ptr->y + ddy[dir];
- const auto x = player_ptr->x + ddx[dir];
- const auto &grid = floor.grid_array[y][x];
+ const auto pos = player_ptr->get_neighbor(dir);
+ const auto &grid = floor.get_grid(pos);
if (!grid.has_monster()) {
msg_print(_("邪悪な存在を感じとれません!", "You sense no evil there!"));
return true;
return false;
}
- const auto y = player_ptr->y + ddy[dir];
- const auto x = player_ptr->x + ddx[dir];
- auto &grid = floor.grid_array[y][x];
+ const auto pos = player_ptr->get_neighbor(dir);
+ const auto &grid = floor.get_grid(pos);
if (!grid.has_monster()) {
msg_print(_("あなたは何もない場所で手を振った。", "You wave your hands in the air."));
return true;
return false;
}
- const Pos2D pos(player_ptr->y + ddy[dir], player_ptr->x + ddx[dir]);
+ const auto pos = player_ptr->get_neighbor(dir);
auto &grid = player_ptr->current_floor_ptr->get_grid(pos);
PlayerClass(player_ptr).break_samurai_stance({ SamuraiStanceType::MUSOU });
*/
bool cast_berserk_spell(PlayerType *player_ptr, MindBerserkerType spell)
{
- POSITION y, x;
- DIRECTION dir;
switch (spell) {
case MindBerserkerType::DETECT_MANACE:
detect_monsters_mind(player_ptr, DETECT_RAD_DEFAULT);
return false;
}
+ DIRECTION dir;
if (!get_direction(player_ptr, &dir) || (dir == 5)) {
return false;
}
- y = player_ptr->y + ddy[dir];
- x = player_ptr->x + ddx[dir];
- if (!player_ptr->current_floor_ptr->grid_array[y][x].has_monster()) {
+ const auto pos = player_ptr->get_neighbor(dir);
+ const auto &floor = *player_ptr->current_floor_ptr;
+ const auto &grid = floor.get_grid(pos);
+ if (!grid.has_monster()) {
msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
return false;
}
- do_cmd_attack(player_ptr, y, x, HISSATSU_NONE);
- if (!player_can_enter(player_ptr, player_ptr->current_floor_ptr->grid_array[y][x].feat, 0) || is_trap(player_ptr, player_ptr->current_floor_ptr->grid_array[y][x].feat)) {
+ do_cmd_attack(player_ptr, pos.y, pos.x, HISSATSU_NONE);
+ if (!player_can_enter(player_ptr, grid.feat, 0) || is_trap(player_ptr, grid.feat)) {
return true;
}
- y += ddy[dir];
- x += ddx[dir];
- if (player_can_enter(player_ptr, player_ptr->current_floor_ptr->grid_array[y][x].feat, 0) && !is_trap(player_ptr, player_ptr->current_floor_ptr->grid_array[y][x].feat) && !player_ptr->current_floor_ptr->grid_array[y][x].has_monster()) {
+ const Pos2D pos_new(pos.y + ddy[dir], pos.x + ddx[dir]);
+ const auto &grid_new = floor.get_grid(pos_new);
+ if (player_can_enter(player_ptr, grid_new.feat, 0) && !is_trap(player_ptr, grid_new.feat) && !grid_new.has_monster()) {
msg_print(nullptr);
- (void)move_player_effect(player_ptr, y, x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP);
+ (void)move_player_effect(player_ptr, pos_new.y, pos_new.x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP);
}
return true;
}
case MindBerserkerType::SMASH_TRAP: {
+ DIRECTION dir;
if (!get_direction(player_ptr, &dir)) {
return false;
}
if (!get_direction(player_ptr, &dir)) {
return false;
}
- POSITION y = player_ptr->y + ddy[dir];
- POSITION x = player_ptr->x + ddx[dir];
- if (player_ptr->current_floor_ptr->grid_array[y][x].has_monster()) {
- do_cmd_attack(player_ptr, y, x, HISSATSU_NONE);
+
+ const auto pos = player_ptr->get_neighbor(dir);
+ if (player_ptr->current_floor_ptr->get_grid(pos).has_monster()) {
+ do_cmd_attack(player_ptr, pos.y, pos.x, HISSATSU_NONE);
if (randint0(player_ptr->skill_dis) < 7) {
msg_print(_("うまく逃げられなかった。", "You failed to run away."));
} else {
*/
bool sword_dancing(PlayerType *player_ptr)
{
- DIRECTION dir;
- POSITION y = 0, x = 0;
- Grid *g_ptr;
- for (int i = 0; i < 6; i++) {
- dir = randint0(8);
- y = player_ptr->y + ddy_ddd[dir];
- x = player_ptr->x + ddx_ddd[dir];
- g_ptr = &player_ptr->current_floor_ptr->grid_array[y][x];
-
- /* Hack -- attack monsters */
- if (g_ptr->has_monster()) {
- do_cmd_attack(player_ptr, y, x, HISSATSU_NONE);
+ for (auto i = 0; i < 6; i++) {
+ const auto dir = randint0(8);
+ const Pos2D pos(player_ptr->y + ddy_ddd[dir], player_ptr->x + ddx_ddd[dir]);
+ const auto &grid = player_ptr->current_floor_ptr->get_grid(pos);
+ if (grid.has_monster()) {
+ do_cmd_attack(player_ptr, pos.y, pos.x, HISSATSU_NONE);
} else {
msg_print(_("攻撃が空をきった。", "You attack the empty air."));
}
return false;
}
- const Pos2D pos(player_ptr->y + ddy[dir], player_ptr->x + ddx[dir]);
+ const auto pos = player_ptr->get_neighbor(dir);
const auto &grid = player_ptr->current_floor_ptr->get_grid(pos);
const auto &terrain = grid.get_terrain();
const auto &terrain_mimic = grid.get_terrain_mimic();
return false;
}
- POSITION y = player_ptr->y + ddy[dir];
- POSITION x = player_ptr->x + ddx[dir];
- const auto *g_ptr = &floor.grid_array[y][x];
+ const auto pos = player_ptr->get_neighbor(dir);
+ const auto &grid = floor.get_grid(pos);
stop_mouth(player_ptr);
- if (!g_ptr->has_monster()) {
+ if (!grid.has_monster()) {
msg_print(_("何もない場所に噛みついた!", "You bite into thin air!"));
return false;
}
if (!get_direction(player_ptr, &dir)) {
return false;
}
- POSITION y = player_ptr->y + ddy[dir];
- POSITION x = player_ptr->x + ddx[dir];
+
+ const auto pos = player_ptr->get_neighbor(dir);
player_ptr->fishing_dir = dir;
- auto *floor_ptr = player_ptr->current_floor_ptr;
- if (!cave_has_flag_bold(floor_ptr, y, x, TerrainCharacteristics::WATER)) {
+ const auto &floor = *player_ptr->current_floor_ptr;
+ if (!cave_has_flag_bold(&floor, pos.y, pos.x, TerrainCharacteristics::WATER)) {
msg_print(_("そこは水辺ではない。", "You can't fish here."));
return false;
}
- if (floor_ptr->grid_array[y][x].has_monster()) {
- const auto m_name = monster_desc(player_ptr, &floor_ptr->m_list[floor_ptr->grid_array[y][x].m_idx], 0);
+ const auto &grid = floor.get_grid(pos);
+ if (grid.has_monster()) {
+ const auto m_name = monster_desc(player_ptr, &floor.m_list[grid.m_idx], 0);
msg_format(_("%sが邪魔だ!", "%s^ is standing in your way."), m_name.data());
PlayerEnergy(player_ptr).reset_player_turn();
return false;