#include "cmd-item/cmd-throw.h"
#include "combat/combat-options-type.h"
#include "core/disturbance.h"
-#include "core/player-redraw-types.h"
#include "effect/attribute-types.h"
#include "effect/effect-characteristics.h"
#include "effect/effect-processor.h"
#include "floor/floor-util.h"
#include "floor/geometry.h"
#include "game-option/disturbance-options.h"
-#include "grid/feature.h"
#include "grid/grid.h"
#include "inventory/inventory-slot-types.h"
#include "mind/mind-mirror-master.h"
#include "status/body-improvement.h"
#include "status/element-resistance.h"
#include "status/temporary-resistance.h"
+#include "system/baseitem-info.h"
#include "system/floor-type-definition.h"
#include "system/grid-type-definition.h"
-#include "system/monster-race-definition.h"
-#include "system/monster-type-definition.h"
-#include "system/object-type-definition.h"
+#include "system/item-entity.h"
+#include "system/monster-entity.h"
+#include "system/monster-race-info.h"
#include "system/player-type-definition.h"
+#include "system/redrawing-flags-updater.h"
+#include "system/terrain-type-definition.h"
#include "target/projection-path-calculator.h"
#include "target/target-checker.h"
#include "target/target-getter.h"
+#include "timed-effect/player-blindness.h"
#include "timed-effect/player-confusion.h"
+#include "timed-effect/player-hallucination.h"
+#include "timed-effect/player-paralysis.h"
#include "timed-effect/player-stun.h"
#include "timed-effect/timed-effects.h"
#include "util/bit-flags-calculator.h"
return false;
}
- ObjectType forge;
+ ItemEntity forge;
auto *q_ptr = &forge;
if (player_ptr->is_dead) {
return false;
}
- auto effects = player_ptr->effects();
- auto is_confused = effects->confusion()->is_confused();
- if (is_confused || player_ptr->blind || player_ptr->paralyzed || player_ptr->hallucinated) {
+ const auto effects = player_ptr->effects();
+ const auto is_confused = effects->confusion()->is_confused();
+ const auto is_blind = effects->blindness()->is_blind();
+ const auto is_hallucinated = effects->hallucination()->is_hallucinated();
+ const auto is_paralyzed = effects->paralysis()->is_paralyzed();
+ if (is_confused || is_blind || is_paralyzed || is_hallucinated) {
return false;
}
return false;
}
+ auto &rfu = RedrawingFlagsUpdater::get_instance();
if (!success && one_in_(3)) {
msg_print(_("変わり身失敗!逃げられなかった。", "Kawarimi failed! You couldn't run away."));
ninja_data->kawarimi = false;
- player_ptr->redraw |= (PR_STATUS);
+ rfu.set_flag(MainWindowRedrawingFlag::TIMED_EFFECT);
return false;
}
teleport_player(player_ptr, 10 + randint1(90), TELEPORT_SPONTANEOUS);
q_ptr->wipe();
- const int SV_WOODEN_STATUE = 0;
- q_ptr->prep(lookup_kind(ItemKindType::STATUE, SV_WOODEN_STATUE));
+ const int sv_wooden_statue = 0;
+ q_ptr->prep(lookup_baseitem_id({ ItemKindType::STATUE, sv_wooden_statue }));
- q_ptr->pval = MON_NINJA;
+ q_ptr->pval = enum2i(MonsterRaceId::NINJA);
(void)drop_near(player_ptr, q_ptr, -1, y, x);
if (success) {
}
ninja_data->kawarimi = false;
- player_ptr->redraw |= (PR_STATUS);
+ rfu.set_flag(MainWindowRedrawingFlag::TIMED_EFFECT);
return true;
}
tm_idx = floor_ptr->grid_array[ty][tx].m_idx;
}
- uint16_t path_g[32];
- int path_n = projection_path(player_ptr, path_g, project_length, player_ptr->y, player_ptr->x, ty, tx, PROJECT_STOP | PROJECT_KILL);
+ projection_path path_g(player_ptr, project_length, player_ptr->y, player_ptr->x, ty, tx, PROJECT_STOP | PROJECT_KILL);
project_length = 0;
- if (!path_n) {
+ if (path_g.path_num() == 0) {
return true;
}
tx = player_ptr->x;
bool tmp_mdeath = false;
bool moved = false;
- for (int i = 0; i < path_n; i++) {
- monster_type *m_ptr;
-
- int ny = get_grid_y(path_g[i]);
- int nx = get_grid_x(path_g[i]);
+ for (const auto &[ny, nx] : path_g) {
+ MonsterEntity *m_ptr;
if (is_cave_empty_bold(player_ptr, ny, nx) && player_can_enter(player_ptr, floor_ptr->grid_array[ny][nx].feat, 0)) {
ty = ny;
msg_format("There is %s in the way!", m_ptr->ml ? (tm_idx ? "another monster" : "a monster") : "someone");
#endif
} else if (!player_bold(player_ptr, ty, tx)) {
- GAME_TEXT m_name[MAX_NLEN];
- monster_desc(player_ptr, m_name, m_ptr, 0);
- msg_format(_("素早く%sの懐に入り込んだ!", "You quickly jump in and attack %s!"), m_name);
+ const auto m_name = monster_desc(player_ptr, m_ptr, 0);
+ msg_format(_("素早く%sの懐に入り込んだ!", "You quickly jump in and attack %s!"), m_name.data());
}
if (!player_bold(player_ptr, ty, tx)) {
*/
void process_surprise_attack(PlayerType *player_ptr, player_attack_type *pa_ptr)
{
- auto *r_ptr = &r_info[pa_ptr->m_ptr->r_idx];
- if (!has_melee_weapon(player_ptr, INVEN_MAIN_HAND + pa_ptr->hand) || player_ptr->is_icky_wield[pa_ptr->hand]) {
+ auto *r_ptr = &monraces_info[pa_ptr->m_ptr->r_idx];
+ if (!has_melee_weapon(player_ptr, enum2i(INVEN_MAIN_HAND) + pa_ptr->hand) || player_ptr->is_icky_wield[pa_ptr->hand]) {
return;
}
}
auto ninja_data = PlayerClass(player_ptr).get_specific_data<ninja_data_type>();
- if (monster_csleep_remaining(pa_ptr->m_ptr) && pa_ptr->m_ptr->ml) {
+ if (pa_ptr->m_ptr->is_asleep() && pa_ptr->m_ptr->ml) {
/* Can't backstab creatures that we can't see, right? */
pa_ptr->backstab = true;
} else if ((ninja_data && ninja_data->s_stealth) && (randint0(tmp) > (r_ptr->level + 20)) &&
pa_ptr->m_ptr->ml && !r_ptr->resistance_flags.has(MonsterResistanceType::RESIST_ALL)) {
pa_ptr->surprise_attack = true;
- } else if (monster_fear_remaining(pa_ptr->m_ptr) && pa_ptr->m_ptr->ml) {
+ } else if (pa_ptr->m_ptr->is_fearful() && pa_ptr->m_ptr->ml) {
pa_ptr->stab_fleeing = true;
}
}
}
auto *g_ptr = &player_ptr->current_floor_ptr->grid_array[player_ptr->y][player_ptr->x];
- auto *f_ptr = &f_info[g_ptr->feat];
+ auto *f_ptr = &terrains_info[g_ptr->feat];
- if (f_ptr->flags.has_not(FloorFeatureType::PROJECT) || (!player_ptr->levitation && f_ptr->flags.has(FloorFeatureType::DEEP))) {
+ if (f_ptr->flags.has_not(TerrainCharacteristics::PROJECT) || (!player_ptr->levitation && f_ptr->flags.has(TerrainCharacteristics::DEEP))) {
msg_print(_("ここでは素早く動けない。", "You cannot run in here."));
} else {
set_action(player_ptr, ACTION_HAYAGAKE);
if (!notice) {
return false;
}
- player_ptr->redraw |= (PR_STATUS);
+ RedrawingFlagsUpdater::get_instance().set_flag(MainWindowRedrawingFlag::TIMED_EFFECT);
if (disturb_state) {
disturb(player_ptr, false, false);
}
+
return true;
}
* @param spell 発動する特殊技能のID
* @return 処理を実行したらTRUE、キャンセルした場合FALSEを返す。
*/
-bool cast_ninja_spell(PlayerType *player_ptr, mind_ninja_type spell)
+bool cast_ninja_spell(PlayerType *player_ptr, MindNinjaType spell)
{
POSITION x = 0, y = 0;
DIRECTION dir;
PLAYER_LEVEL plev = player_ptr->lev;
auto ninja_data = PlayerClass(player_ptr).get_specific_data<ninja_data_type>();
switch (spell) {
- case DARKNESS_CREATION:
+ case MindNinjaType::DARKNESS_CREATION:
(void)unlite_area(player_ptr, 0, 3);
break;
- case DETECT_NEAR:
+ case MindNinjaType::DETECT_NEAR:
if (plev > 44) {
wiz_lite(player_ptr, true);
}
}
break;
- case HIDE_LEAVES:
+ case MindNinjaType::HIDE_LEAVES:
teleport_player(player_ptr, 10, TELEPORT_SPONTANEOUS);
break;
- case KAWARIMI:
+ case MindNinjaType::KAWARIMI:
if (ninja_data && !ninja_data->kawarimi) {
msg_print(_("敵の攻撃に対して敏感になった。", "You are now prepared to evade any attacks."));
ninja_data->kawarimi = true;
- player_ptr->redraw |= (PR_STATUS);
+ RedrawingFlagsUpdater::get_instance().set_flag(MainWindowRedrawingFlag::TIMED_EFFECT);
}
break;
- case ABSCONDING:
+ case MindNinjaType::ABSCONDING:
teleport_player(player_ptr, player_ptr->lev * 5, TELEPORT_SPONTANEOUS);
break;
- case HIT_AND_AWAY:
+ case MindNinjaType::HIT_AND_AWAY:
if (!hit_and_away(player_ptr)) {
return false;
}
break;
- case BIND_MONSTER:
+ case MindNinjaType::BIND_MONSTER:
if (!get_aim_dir(player_ptr, &dir)) {
return false;
}
(void)stasis_monster(player_ptr, dir);
break;
- case ANCIENT_KNOWLEDGE:
+ case MindNinjaType::ANCIENT_KNOWLEDGE:
return ident_spell(player_ptr, false);
- case FLOATING:
+ case MindNinjaType::FLOATING:
set_tim_levitation(player_ptr, randint1(20) + 20, false);
break;
- case HIDE_FLAMES:
+ case MindNinjaType::HIDE_FLAMES:
fire_ball(player_ptr, AttributeType::FIRE, 0, 50 + plev, plev / 10 + 2);
teleport_player(player_ptr, 30, TELEPORT_SPONTANEOUS);
set_oppose_fire(player_ptr, (TIME_EFFECT)plev, false);
break;
- case NYUSIN:
+ case MindNinjaType::NYUSIN:
return rush_attack(player_ptr, nullptr);
- case SYURIKEN_SPREADING: {
+ case MindNinjaType::SYURIKEN_SPREADING: {
for (int i = 0; i < 8; i++) {
OBJECT_IDX slot;
for (slot = 0; slot < INVEN_PACK; slot++) {
- if (player_ptr->inventory_list[slot].tval == ItemKindType::SPIKE) {
+ if (player_ptr->inventory_list[slot].bi_key.tval() == ItemKindType::SPIKE) {
break;
}
}
break;
}
- case CHAIN_HOOK:
+ case MindNinjaType::CHAIN_HOOK:
(void)fetch_monster(player_ptr);
break;
- case SMOKE_BALL:
+ case MindNinjaType::SMOKE_BALL:
if (!get_aim_dir(player_ptr, &dir)) {
return false;
}
fire_ball(player_ptr, AttributeType::OLD_CONF, dir, plev * 3, 3);
break;
- case SWAP_POSITION:
+ case MindNinjaType::SWAP_POSITION:
project_length = -1;
if (!get_aim_dir(player_ptr, &dir)) {
project_length = 0;
project_length = 0;
(void)teleport_swap(player_ptr, dir);
break;
- case EXPLOSIVE_RUNE:
+ case MindNinjaType::EXPLOSIVE_RUNE:
create_rune_explosion(player_ptr, player_ptr->y, player_ptr->x);
break;
- case HIDE_MUD:
+ case MindNinjaType::HIDE_MUD:
(void)set_pass_wall(player_ptr, randint1(plev / 2) + plev / 2, false);
set_oppose_acid(player_ptr, (TIME_EFFECT)plev, false);
break;
- case HIDE_MIST:
+ case MindNinjaType::HIDE_MIST:
fire_ball(player_ptr, AttributeType::POIS, 0, 75 + plev * 2 / 3, plev / 5 + 2);
fire_ball(player_ptr, AttributeType::HYPODYNAMIA, 0, 75 + plev * 2 / 3, plev / 5 + 2);
fire_ball(player_ptr, AttributeType::CONFUSION, 0, 75 + plev * 2 / 3, plev / 5 + 2);
teleport_player(player_ptr, 30, TELEPORT_SPONTANEOUS);
break;
- case PURGATORY_FLAME: {
+ case MindNinjaType::PURGATORY_FLAME: {
int num = damroll(3, 9);
for (int k = 0; k < num; k++) {
AttributeType typ = one_in_(2) ? AttributeType::FIRE : one_in_(3) ? AttributeType::NETHER
break;
}
- case ALTER_EGO:
+ case MindNinjaType::ALTER_EGO:
set_multishadow(player_ptr, 6 + randint1(6), false);
break;
default: