*/
bool exe_mutation_power(PlayerType *player_ptr, PlayerMutationType power)
{
- DIRECTION dir = 0;
PLAYER_LEVEL lvl = player_ptr->lev;
auto &floor = *player_ptr->current_floor_ptr;
switch (power) {
- case PlayerMutationType::SPIT_ACID:
+ case PlayerMutationType::SPIT_ACID: {
+ auto dir = 0;
if (!get_aim_dir(player_ptr, &dir)) {
return false;
}
msg_print(_("酸を吐きかけた...", "You spit acid..."));
fire_ball(player_ptr, AttributeType::ACID, dir, lvl, 1 + (lvl / 30));
return true;
- case PlayerMutationType::BR_FIRE:
+ }
+ case PlayerMutationType::BR_FIRE: {
+ auto dir = 0;
if (!get_aim_dir(player_ptr, &dir)) {
return false;
}
msg_print(_("あなたは火炎のブレスを吐いた...", "You breathe fire..."));
fire_breath(player_ptr, AttributeType::FIRE, dir, lvl * 2, 1 + (lvl / 20));
return true;
- case PlayerMutationType::HYPN_GAZE:
+ }
+ case PlayerMutationType::HYPN_GAZE: {
+ auto dir = 0;
if (!get_aim_dir(player_ptr, &dir)) {
return false;
}
msg_print(_("あなたの目は幻惑的になった...", "Your eyes look mesmerizing..."));
(void)charm_monster(player_ptr, dir, lvl);
return true;
- case PlayerMutationType::TELEKINES:
+ }
+ case PlayerMutationType::TELEKINES: {
+ auto dir = 0;
if (!get_aim_dir(player_ptr, &dir)) {
return false;
}
msg_print(_("集中している...", "You concentrate..."));
fetch_item(player_ptr, dir, lvl * 10, true);
return true;
+ }
case PlayerMutationType::VTELEPORT:
msg_print(_("集中している...", "You concentrate..."));
teleport_player(player_ptr, 10 + 4 * lvl, TELEPORT_SPONTANEOUS);
return true;
- case PlayerMutationType::MIND_BLST:
+ case PlayerMutationType::MIND_BLST: {
+ auto dir = 0;
if (!get_aim_dir(player_ptr, &dir)) {
return false;
}
msg_print(_("集中している...", "You concentrate..."));
fire_bolt(player_ptr, AttributeType::PSI, dir, damroll(3 + ((lvl - 1) / 5), 3));
return true;
+ }
case PlayerMutationType::RADIATION:
msg_print(_("体から放射能が発生した!", "Radiation flows from your body!"));
fire_ball(player_ptr, AttributeType::NUKE, 0, (lvl * 2), 3 + (lvl / 20));
return true;
case PlayerMutationType::EAT_ROCK:
return eat_rock(player_ptr);
- case PlayerMutationType::SWAP_POS:
+ case PlayerMutationType::SWAP_POS: {
+ auto dir = 0;
project_length = -1;
if (!get_aim_dir(player_ptr, &dir)) {
project_length = 0;
(void)teleport_swap(player_ptr, dir);
project_length = 0;
return true;
+ }
case PlayerMutationType::SHRIEK:
stop_mouth(player_ptr);
(void)fire_ball(player_ptr, AttributeType::SOUND, 0, 2 * lvl, 8);
confuse_monsters(player_ptr, lvl * 4);
turn_monsters(player_ptr, lvl * 4);
return true;
- case PlayerMutationType::LASER_EYE:
+ case PlayerMutationType::LASER_EYE: {
+ auto dir = 0;
if (!get_aim_dir(player_ptr, &dir)) {
return false;
}
fire_beam(player_ptr, AttributeType::LITE, dir, 2 * lvl);
return true;
+ }
case PlayerMutationType::RECALL:
return recall_player(player_ptr, randint0(21) + 15);
case PlayerMutationType::BANISH: {
- if (!get_direction(player_ptr, &dir)) {
+ const auto dir = get_direction(player_ptr);
+ if (!dir) {
return false;
}
- const auto pos = player_ptr->get_neighbor(dir);
+ 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;
}
case PlayerMutationType::COLD_TOUCH: {
- if (!get_direction(player_ptr, &dir)) {
+ const auto dir = get_direction(player_ptr);
+ if (!dir) {
return false;
}
- const auto pos = player_ptr->get_neighbor(dir);
+ 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;
}
- fire_bolt(player_ptr, AttributeType::COLD, dir, 2 * lvl);
+ fire_bolt(player_ptr, AttributeType::COLD, *dir, 2 * lvl);
return true;
}
case PlayerMutationType::LAUNCHER:
bool desc = mode == SpellProcessType::DESCRIPTION;
bool cast = mode == SpellProcessType::CAST;
- DIRECTION dir;
PLAYER_LEVEL plev = player_ptr->lev;
switch (spell) {
if (cast) {
project_length = 2;
+ int dir;
if (!get_aim_dir(player_ptr, &dir)) {
return std::nullopt;
}
}
if (cast) {
- if (!get_direction(player_ptr, &dir)) {
- return std::nullopt;
- }
- if (dir == 5) {
+ const auto dir = get_direction(player_ptr);
+ if (!dir || (dir == 5)) {
return std::nullopt;
}
}
if (cast) {
- if (!get_direction(player_ptr, &dir)) {
- return std::nullopt;
- }
- if (dir == 5) {
+ const auto dir = get_direction(player_ptr);
+ if (!dir || (dir == 5)) {
return std::nullopt;
}
- const auto pos = player_ptr->get_neighbor(dir);
+ 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_FIRE);
} else {
}
if (cast) {
- if (!get_direction(player_ptr, &dir)) {
- return std::nullopt;
- }
- if (dir == 5) {
+ const auto dir = get_direction(player_ptr);
+ if (!dir || (dir == 5)) {
return std::nullopt;
}
- const auto pos = player_ptr->get_neighbor(dir);
+ 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_MINEUCHI);
} else {
return std::nullopt;
}
- if (!get_direction(player_ptr, &dir)) {
+ const auto dir = get_direction(player_ptr);
+ if (!dir || (dir == 5)) {
return std::nullopt;
}
- if (dir == 5) {
- return std::nullopt;
- }
-
- const auto pos_target = player_ptr->get_neighbor(dir);
+ const auto pos_target = player_ptr->get_neighbor(*dir);
const auto &floor = *player_ptr->current_floor_ptr;
const auto &grid_target = floor.get_grid(pos_target);
if (!grid_target.has_monster()) {
break;
}
- const Pos2D pos_opposite(pos_target.y + ddy[dir], pos_target.x + ddx[dir]);
+ const Pos2D pos_opposite(pos_target.y + ddy[*dir], pos_target.x + ddx[*dir]);
const auto &grid_opposite = floor.get_grid(pos_opposite);
if (player_can_enter(player_ptr, grid_opposite.feat, 0) && !is_trap(player_ptr, grid_opposite.feat) && !grid_opposite.m_idx) {
msg_print(nullptr);
}
if (cast) {
- if (!get_direction(player_ptr, &dir)) {
- return std::nullopt;
- }
-
- if (dir == 5) {
+ const auto dir = get_direction(player_ptr);
+ if (!dir || (dir == 5)) {
return std::nullopt;
}
- const auto pos = player_ptr->get_neighbor(dir);
+ const auto pos = player_ptr->get_neighbor(*dir);
const auto &floor = *player_ptr->current_floor_ptr;
if (floor.get_grid(pos).has_monster()) {
do_cmd_attack(player_ptr, pos.y, pos.x, HISSATSU_POISON);
}
if (cast) {
- if (!get_direction(player_ptr, &dir)) {
+ const auto dir = get_direction(player_ptr);
+ if (!dir || (dir == 5)) {
return std::nullopt;
}
- if (dir == 5) {
- return std::nullopt;
- }
-
- const auto pos = player_ptr->get_neighbor(dir);
+ const auto pos = player_ptr->get_neighbor(*dir);
const auto &floor = *player_ptr->current_floor_ptr;
if (floor.get_grid(pos).has_monster()) {
do_cmd_attack(player_ptr, pos.y, pos.x, HISSATSU_ZANMA);
}
if (cast) {
- if (!get_direction(player_ptr, &dir)) {
- return std::nullopt;
- }
-
- if (dir == 5) {
+ const auto dir = get_direction(player_ptr);
+ if (!dir || (dir == 5)) {
return std::nullopt;
}
- const auto pos = player_ptr->get_neighbor(dir);
+ const auto pos = player_ptr->get_neighbor(*dir);
auto &floor = *player_ptr->current_floor_ptr;
const auto &grid = floor.get_grid(pos);
if (grid.has_monster()) {
const auto m_name = monster_desc(player_ptr, &monster, 0);
Pos2D neighbor(pos.y, pos.x);
for (auto i = 0; i < 5; i++) {
- neighbor.y += ddy[dir];
- neighbor.x += ddx[dir];
+ neighbor.y += ddy[*dir];
+ neighbor.x += ddx[*dir];
if (is_cave_empty_bold(player_ptr, neighbor.y, neighbor.x)) {
target = Pos2D(neighbor.y, neighbor.x);
} else {
}
if (cast) {
- if (!get_direction(player_ptr, &dir)) {
- return std::nullopt;
- }
-
- if (dir == 5) {
+ const auto dir = get_direction(player_ptr);
+ if (!dir || (dir == 5)) {
return std::nullopt;
}
- const auto pos = player_ptr->get_neighbor(dir);
+ const auto pos = player_ptr->get_neighbor(*dir);
const auto &floor = *player_ptr->current_floor_ptr;
if (floor.get_grid(pos).has_monster()) {
do_cmd_attack(player_ptr, pos.y, pos.x, HISSATSU_HAGAN);
}
if (cast) {
- if (!get_direction(player_ptr, &dir)) {
- return std::nullopt;
- }
-
- if (dir == 5) {
+ const auto dir = get_direction(player_ptr);
+ if (!dir || (dir == 5)) {
return std::nullopt;
}
- const auto pos = player_ptr->get_neighbor(dir);
+ const auto pos = player_ptr->get_neighbor(*dir);
const auto &floor = *player_ptr->current_floor_ptr;
if (floor.get_grid(pos).has_monster()) {
do_cmd_attack(player_ptr, pos.y, pos.x, HISSATSU_COLD);
}
if (cast) {
- if (!get_direction(player_ptr, &dir)) {
+ const auto dir = get_direction(player_ptr);
+ if (!dir || (dir == 5)) {
return std::nullopt;
}
- if (dir == 5) {
- return std::nullopt;
- }
-
- const auto pos = player_ptr->get_neighbor(dir);
+ const auto pos = player_ptr->get_neighbor(*dir);
const auto &floor = *player_ptr->current_floor_ptr;
if (floor.get_grid(pos).has_monster()) {
do_cmd_attack(player_ptr, pos.y, pos.x, HISSATSU_KYUSHO);
}
if (cast) {
- if (!get_direction(player_ptr, &dir)) {
- return std::nullopt;
- }
-
- if (dir == 5) {
+ const auto dir = get_direction(player_ptr);
+ if (!dir || (dir == 5)) {
return std::nullopt;
}
- const auto pos = player_ptr->get_neighbor(dir);
+ const auto pos = player_ptr->get_neighbor(*dir);
const auto &floor = *player_ptr->current_floor_ptr;
if (floor.get_grid(pos).has_monster()) {
do_cmd_attack(player_ptr, pos.y, pos.x, HISSATSU_MAJIN);
}
if (cast) {
- if (!get_direction(player_ptr, &dir)) {
- return std::nullopt;
- }
-
- if (dir == 5) {
+ const auto dir = get_direction(player_ptr);
+ if (!dir || (dir == 5)) {
return std::nullopt;
}
- const auto pos = player_ptr->get_neighbor(dir);
+ const auto pos = player_ptr->get_neighbor(*dir);
const auto &floor = *player_ptr->current_floor_ptr;
if (floor.get_grid(pos).has_monster()) {
do_cmd_attack(player_ptr, pos.y, pos.x, HISSATSU_SUTEMI);
}
if (cast) {
- if (!get_direction(player_ptr, &dir)) {
- return std::nullopt;
- }
-
- if (dir == 5) {
+ const auto dir = get_direction(player_ptr);
+ if (!dir || (dir == 5)) {
return std::nullopt;
}
- const auto pos = player_ptr->get_neighbor(dir);
+ const auto pos = player_ptr->get_neighbor(*dir);
const auto &floor = *player_ptr->current_floor_ptr;
if (floor.get_grid(pos).has_monster()) {
do_cmd_attack(player_ptr, pos.y, pos.x, HISSATSU_ELEC);
short new_cut = current_cut < 300 ? current_cut + 300 : current_cut * 2;
(void)BadStatusSetter(player_ptr).set_cut(new_cut);
const auto &floor = *player_ptr->current_floor_ptr;
- for (dir = 0; dir < 8; dir++) {
+ for (auto dir = 0; dir < 8; dir++) {
const auto pos = player_ptr->get_position();
const Pos2D pos_ddd(pos.y + ddy_ddd[dir], pos.x + ddx_ddd[dir]);
const auto &grid = floor.get_grid(pos_ddd);
}
if (cast) {
- if (!get_direction(player_ptr, &dir)) {
- return std::nullopt;
- }
-
- if (dir == 5) {
+ const auto dir = get_direction(player_ptr);
+ if (!dir || (dir == 5)) {
return std::nullopt;
}
- const auto pos = player_ptr->get_neighbor(dir);
+ const auto pos = player_ptr->get_neighbor(*dir);
const auto &floor = *player_ptr->current_floor_ptr;
if (floor.get_grid(pos).has_monster()) {
do_cmd_attack(player_ptr, pos.y, pos.x, HISSATSU_QUAKE);
if (cast) {
int total_damage = 0, basedam, i;
ItemEntity *o_ptr;
+ int dir;
if (!get_aim_dir(player_ptr, &dir)) {
return std::nullopt;
}
}
if (cast) {
- if (!get_direction(player_ptr, &dir)) {
- return std::nullopt;
- }
- if (dir == 5) {
+ const auto dir = get_direction(player_ptr);
+ if (!dir || (dir == 5)) {
return std::nullopt;
}
auto &floor = *player_ptr->current_floor_ptr;
for (auto i = 0; i < 3; i++) {
- const Pos2D pos = player_ptr->get_neighbor(dir);
+ const Pos2D pos = player_ptr->get_neighbor(*dir);
auto &grid = floor.get_grid(pos);
if (grid.has_monster()) {
break;
}
- const Pos2D pos_new(pos.y + ddy[dir], pos.x + ddx[dir]);
+ const Pos2D pos_new(pos.y + ddy[*dir], pos.x + ddx[*dir]);
const auto m_idx = grid.m_idx;
auto &monster = floor.m_list[m_idx];
}
if (cast) {
- if (!get_direction(player_ptr, &dir)) {
+ const auto dir = get_direction(player_ptr);
+ if (!dir || (dir == 5)) {
return std::nullopt;
}
- if (dir == 5) {
- return std::nullopt;
- }
-
- const auto pos = player_ptr->get_neighbor(dir);
+ const auto pos = player_ptr->get_neighbor(*dir);
const auto &floor = *player_ptr->current_floor_ptr;
if (floor.get_grid(pos).has_monster()) {
do_cmd_attack(player_ptr, pos.y, pos.x, HISSATSU_DRAIN);
}
if (cast) {
+ int dir;
if (!get_rep_dir(player_ptr, &dir)) {
return std::nullopt;
}
}
if (cast) {
- if (!get_direction(player_ptr, &dir)) {
+ const auto dir = get_direction(player_ptr);
+ if (!dir || (dir == 5)) {
return std::nullopt;
}
- if (dir == 5) {
- return std::nullopt;
- }
-
- const auto pos = player_ptr->get_neighbor(dir);
+ const auto pos = player_ptr->get_neighbor(*dir);
const auto &floor = *player_ptr->current_floor_ptr;
if (floor.get_dungeon_definition().flags.has(DungeonFeatureType::NO_MELEE)) {
msg_print(_("なぜか攻撃することができない。", "Something prevents you from attacking."));
}
if (cast) {
- if (!get_direction(player_ptr, &dir)) {
+ const auto dir = get_direction(player_ptr);
+ if (!dir || (dir == 5)) {
return std::nullopt;
}
- if (dir == 5) {
- return std::nullopt;
- }
-
- const auto pos = player_ptr->get_neighbor(dir);
+ const auto pos = player_ptr->get_neighbor(*dir);
const auto &floor = *player_ptr->current_floor_ptr;
if (floor.get_grid(pos).has_monster()) {
do_cmd_attack(player_ptr, pos.y, pos.x, HISSATSU_UNDEAD);