#include "cmd-item/cmd-magiceat.h"
#include "combat/attack-power-table.h"
#include "core/asking-player.h"
-#include "core/player-redraw-types.h"
-#include "core/player-update-types.h"
#include "core/stuff-handler.h"
#include "core/window-redrawer.h"
#include "dungeon/dungeon-flag-types.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 "term/screen-processor.h"
#include "timed-effect/player-acceleration.h"
ItemEntity *o_ptr;
for (int i = 0; i < INVEN_TOTAL; i++) {
o_ptr = &player_ptr->inventory_list[i];
- if (!o_ptr->bi_id) {
+ if (!o_ptr->is_valid()) {
continue;
}
weight += o_ptr->weight * o_ptr->number;
update_ability_scores(player_ptr);
o_ptr = &player_ptr->inventory_list[INVEN_BOW];
- if (o_ptr->bi_id) {
+ if (o_ptr->is_valid()) {
player_ptr->tval_ammo = o_ptr->get_arrow_kind();
player_ptr->num_fire = calc_num_fire(player_ptr, o_ptr);
}
player_ptr->dis_to_a = calc_to_ac(player_ptr, false);
if (old_mighty_throw != player_ptr->mighty_throw) {
- player_ptr->window_flags |= PW_INVEN;
+ player_ptr->window_flags |= PW_INVENTORY;
}
if (player_ptr->telepathy != old_telepathy) {
- set_bits(player_ptr->update, PU_MONSTERS);
+ RedrawingFlagsUpdater::get_instance().set_flag(StatusRedrawingFlag::MONSTER_STATUSES);
}
auto is_esp_updated = player_ptr->esp_animal != old_esp_animal;
is_esp_updated |= player_ptr->esp_good != old_esp_good;
is_esp_updated |= player_ptr->esp_nonliving != old_esp_nonliving;
is_esp_updated |= player_ptr->esp_unique != old_esp_unique;
+ auto &rfu = RedrawingFlagsUpdater::get_instance();
if (is_esp_updated) {
- set_bits(player_ptr->update, PU_MONSTERS);
+ rfu.set_flag(StatusRedrawingFlag::MONSTER_STATUSES);
}
if (player_ptr->see_inv != old_see_inv) {
- set_bits(player_ptr->update, PU_MONSTERS);
+ rfu.set_flag(StatusRedrawingFlag::MONSTER_STATUSES);
}
if (player_ptr->pspeed != old_speed) {
- set_bits(player_ptr->redraw, PR_SPEED);
+ rfu.set_flag(MainWindowRedrawingFlag::SPEED);
}
if ((player_ptr->dis_ac != old_dis_ac) || (player_ptr->dis_to_a != old_dis_to_a)) {
- set_bits(player_ptr->redraw, PR_ARMOR);
+ rfu.set_flag(MainWindowRedrawingFlag::AC);
set_bits(player_ptr->window_flags, PW_PLAYER);
}
#endif
player_ptr->mhp = mhp;
- player_ptr->redraw |= PR_HP;
+ auto &rfu = RedrawingFlagsUpdater::get_instance();
+ rfu.set_flag(MainWindowRedrawingFlag::HP);
player_ptr->window_flags |= PW_PLAYER;
}
}
player_ptr->old_spells = player_ptr->new_spells;
- set_bits(player_ptr->redraw, PR_STUDY);
- set_bits(player_ptr->window_flags, PW_OBJECT);
+ auto &rfu = RedrawingFlagsUpdater::get_instance();
+ rfu.set_flag(MainWindowRedrawingFlag::STUDY);
+ set_bits(player_ptr->window_flags, PW_ITEM_KNOWLEDGTE);
}
/*!
} else {
if (mp_ptr->spell_first > player_ptr->lev) {
player_ptr->msp = 0;
- set_bits(player_ptr->redraw, PR_MANA);
+ RedrawingFlagsUpdater::get_instance().set_flag(MainWindowRedrawingFlag::MP);
return;
}
if (any_bits(mp_ptr->spell_xtra, extra_magic_glove_reduce_mana)) {
player_ptr->cumber_glove = false;
auto *o_ptr = &player_ptr->inventory_list[INVEN_ARMS];
- auto flgs = object_flags(o_ptr);
- auto should_mp_decrease = o_ptr->bi_id != 0;
- should_mp_decrease &= flgs.has_not(TR_FREE_ACT);
- should_mp_decrease &= flgs.has_not(TR_DEC_MANA);
- should_mp_decrease &= flgs.has_not(TR_EASY_SPELL);
- should_mp_decrease &= flgs.has_not(TR_MAGIC_MASTERY) || (o_ptr->pval <= 0);
- should_mp_decrease &= flgs.has_not(TR_DEX) || (o_ptr->pval <= 0);
+ auto flags = object_flags(o_ptr);
+ auto should_mp_decrease = o_ptr->is_valid();
+ should_mp_decrease &= flags.has_not(TR_FREE_ACT);
+ should_mp_decrease &= flags.has_not(TR_DEC_MANA);
+ should_mp_decrease &= flags.has_not(TR_EASY_SPELL);
+ should_mp_decrease &= flags.has_not(TR_MAGIC_MASTERY) || (o_ptr->pval <= 0);
+ should_mp_decrease &= flags.has_not(TR_DEX) || (o_ptr->pval <= 0);
if (should_mp_decrease) {
player_ptr->cumber_glove = true;
msp = (3 * msp) / 4;
}
#endif
player_ptr->msp = msp;
- set_bits(player_ptr->redraw, PR_MANA);
+ auto &rfu = RedrawingFlagsUpdater::get_instance();
+ rfu.set_flag(MainWindowRedrawingFlag::MP);
set_bits(player_ptr->window_flags, (PW_PLAYER | PW_SPELL));
}
for (int i = INVEN_MAIN_HAND; i < INVEN_TOTAL; i++) {
ItemEntity *q_ptr;
q_ptr = &player_ptr->inventory_list[i];
- if (!q_ptr->bi_id) {
+ if (!q_ptr->is_valid()) {
continue;
}
continue;
}
- auto flgs = object_flags(q_ptr);
- if (flgs.has(TR_XTRA_SHOTS)) {
+ auto flags = object_flags(q_ptr);
+ if (flags.has(TR_XTRA_SHOTS)) {
extra_shots++;
}
}
- auto flgs = object_flags(o_ptr);
- if (flgs.has(TR_XTRA_SHOTS)) {
+ auto flags = object_flags(o_ptr);
+ if (flags.has(TR_XTRA_SHOTS)) {
extra_shots++;
}
int num = 0;
- if (o_ptr->bi_id == 0) {
+ if (!o_ptr->is_valid()) {
return (int16_t)num;
}
for (int i = INVEN_MAIN_HAND; i < INVEN_TOTAL; i++) {
ItemEntity *o_ptr;
o_ptr = &player_ptr->inventory_list[i];
- if (!o_ptr->bi_id) {
+ if (!o_ptr->is_valid()) {
continue;
}
- auto flgs = object_flags(o_ptr);
- if (flgs.has(TR_MAGIC_MASTERY)) {
+ auto flags = object_flags(o_ptr);
+ if (flags.has(TR_MAGIC_MASTERY)) {
pow += 8 * o_ptr->pval;
}
}
for (int i = INVEN_MAIN_HAND; i < INVEN_TOTAL; i++) {
ItemEntity *o_ptr;
o_ptr = &player_ptr->inventory_list[i];
- if (!o_ptr->bi_id) {
+ if (!o_ptr->is_valid()) {
continue;
}
- auto flgs = object_flags(o_ptr);
- if (flgs.has(TR_SEARCH)) {
+ auto flags = object_flags(o_ptr);
+ if (flags.has(TR_SEARCH)) {
pow += (o_ptr->pval * 5);
}
}
for (int i = INVEN_MAIN_HAND; i < INVEN_TOTAL; i++) {
ItemEntity *o_ptr;
o_ptr = &player_ptr->inventory_list[i];
- if (!o_ptr->bi_id) {
+ if (!o_ptr->is_valid()) {
continue;
}
- auto flgs = object_flags(o_ptr);
- if (flgs.has(TR_SEARCH)) {
+ auto flags = object_flags(o_ptr);
+ if (flags.has(TR_SEARCH)) {
pow += (o_ptr->pval * 5);
}
}
pow = 0;
- if (PlayerRace(player_ptr).equals(PlayerRaceType::ENT) && !player_ptr->inventory_list[INVEN_MAIN_HAND].bi_id) {
+ if (PlayerRace(player_ptr).equals(PlayerRaceType::ENT) && !player_ptr->inventory_list[INVEN_MAIN_HAND].is_valid()) {
pow += player_ptr->lev * 10;
}
for (int i = INVEN_MAIN_HAND; i < INVEN_TOTAL; i++) {
o_ptr = &player_ptr->inventory_list[i];
- if (!o_ptr->bi_id) {
+ if (!o_ptr->is_valid()) {
continue;
}
- auto flgs = object_flags(o_ptr);
- if (flgs.has(TR_TUNNEL)) {
+ auto flags = object_flags(o_ptr);
+ if (flags.has(TR_TUNNEL)) {
pow += (o_ptr->pval * 20);
}
}
int16_t num_blow = 1;
o_ptr = &player_ptr->inventory_list[INVEN_MAIN_HAND + i];
- auto flgs = object_flags(o_ptr);
+ auto flags = object_flags(o_ptr);
PlayerClass pc(player_ptr);
if (has_melee_weapon(player_ptr, INVEN_MAIN_HAND + i)) {
- if (o_ptr->bi_id && !player_ptr->heavy_wield[i]) {
+ if (o_ptr->is_valid() && !player_ptr->heavy_wield[i]) {
int str_index, dex_index;
int num = 0, wgt = 0, mul = 0, div = 0;
wgt = info.wgt;
mul = info.mul;
- if (pc.equals(PlayerClassType::CAVALRY) && player_ptr->riding && flgs.has(TR_RIDING)) {
+ if (pc.equals(PlayerClassType::CAVALRY) && player_ptr->riding && flags.has(TR_RIDING)) {
num = 5;
wgt = 70;
mul = 4;
num_blow = 1;
}
+ if (has_not_ninja_weapon(player_ptr, i)) {
+ num_blow /= 2;
+ }
+
if (num_blow < 1) {
num_blow = 1;
}
num_blow += 1 + player_ptr->extra_blows[0];
}
- if (has_not_ninja_weapon(player_ptr, i)) {
- num_blow /= 2;
- if (num_blow < 1) {
- num_blow = 1;
- }
- }
-
return num_blow;
}
for (int i = INVEN_MAIN_HAND; i < INVEN_TOTAL; i++) {
ItemEntity *o_ptr;
o_ptr = &player_ptr->inventory_list[i];
- if (!o_ptr->bi_id) {
+ if (!o_ptr->is_valid()) {
continue;
}
for (int i = INVEN_MAIN_HAND; i < INVEN_TOTAL; i++) {
ItemEntity *o_ptr;
o_ptr = &player_ptr->inventory_list[i];
- if (!o_ptr->bi_id) {
+ if (!o_ptr->is_valid()) {
continue;
}
ac += o_ptr->ac;
ItemEntity *o_ptr;
o_ptr = &player_ptr->inventory_list[i];
auto flags = object_flags(o_ptr);
- if (!o_ptr->bi_id) {
+ if (!o_ptr->is_valid()) {
continue;
}
if (is_real_value || o_ptr->is_known()) {
}
if (pc.is_martial_arts_pro() && !heavy_armor(player_ptr)) {
- if (!(player_ptr->inventory_list[INVEN_BODY].bi_id)) {
+ if (!player_ptr->inventory_list[INVEN_BODY].is_valid()) {
ac += (player_ptr->lev * 3) / 2;
}
- if (!(player_ptr->inventory_list[INVEN_OUTER].bi_id) && (player_ptr->lev > 15)) {
+ if (!player_ptr->inventory_list[INVEN_OUTER].is_valid() && (player_ptr->lev > 15)) {
ac += ((player_ptr->lev - 13) / 3);
}
- if (!(player_ptr->inventory_list[INVEN_SUB_HAND].bi_id) && (player_ptr->lev > 10)) {
+ if (!player_ptr->inventory_list[INVEN_SUB_HAND].is_valid() && (player_ptr->lev > 10)) {
ac += ((player_ptr->lev - 8) / 3);
}
- if (!(player_ptr->inventory_list[INVEN_HEAD].bi_id) && (player_ptr->lev > 4)) {
+ if (!player_ptr->inventory_list[INVEN_HEAD].is_valid() && (player_ptr->lev > 4)) {
ac += (player_ptr->lev - 2) / 3;
}
- if (!(player_ptr->inventory_list[INVEN_ARMS].bi_id)) {
+ if (!player_ptr->inventory_list[INVEN_ARMS].is_valid()) {
ac += (player_ptr->lev / 2);
}
- if (!(player_ptr->inventory_list[INVEN_FEET].bi_id)) {
+ if (!player_ptr->inventory_list[INVEN_FEET].is_valid()) {
ac += (player_ptr->lev / 3);
}
}
for (int i = INVEN_MAIN_HAND; i <= INVEN_FEET; i++) {
auto *o_ptr = &player_ptr->inventory_list[i];
- if (!o_ptr->bi_id) {
+ if (!o_ptr->is_valid()) {
continue;
}
if (!o_ptr->is_protector()) {
if (player_ptr->old_heavy_shoot != heavy_shoot) {
if (heavy_shoot) {
msg_print(_("こんな重い弓を装備しているのは大変だ。", "You have trouble wielding such a heavy bow."));
- } else if (player_ptr->inventory_list[INVEN_BOW].bi_id) {
+ } else if (player_ptr->inventory_list[INVEN_BOW].is_valid()) {
msg_print(_("この弓なら装備していても辛くない。", "You have no trouble wielding your bow."));
} else {
msg_print(_("重い弓を装備からはずして体が楽になった。", "You feel relieved to put down your heavy bow."));
if (player_ptr->is_icky_wield[i]) {
msg_print(_("今の装備はどうも自分にふさわしくない気がする。", "You do not feel comfortable with your weapon."));
if (w_ptr->is_loading_now) {
- chg_virtue(player_ptr, V_FAITH, -1);
+ chg_virtue(player_ptr, Virtue::FAITH, -1);
}
} else if (has_melee_weapon(player_ptr, INVEN_MAIN_HAND + i)) {
msg_print(_("今の装備は自分にふさわしい気がする。", "You feel comfortable with your weapon."));
if (heavy_armor(player_ptr)) {
msg_print(_("装備が重くてバランスを取れない。", "The weight of your armor disrupts your balance."));
if (w_ptr->is_loading_now) {
- chg_virtue(player_ptr, V_HARMONY, -1);
+ chg_virtue(player_ptr, Virtue::HARMONY, -1);
}
} else {
msg_print(_("バランスがとれるようになった。", "You regain your balance."));
}
}
+static bool is_bare_knuckle(PlayerType *player_ptr)
+{
+ auto bare_knuckle = is_martial_arts_mode(player_ptr);
+ bare_knuckle &= empty_hands(player_ptr, false) == (EMPTY_HAND_MAIN | EMPTY_HAND_SUB);
+ return bare_knuckle;
+}
+
static short calc_to_damage(PlayerType *player_ptr, INVENTORY_IDX slot, bool is_real_value)
{
auto *o_ptr = &player_ptr->inventory_list[slot];
- auto flgs = object_flags(o_ptr);
+ auto flags = object_flags(o_ptr);
player_hand calc_hand = PLAYER_HAND_OTHER;
if (slot == INVEN_MAIN_HAND) {
damage -= player_stun->get_damage_penalty();
PlayerClass pc(player_ptr);
const auto tval = o_ptr->bi_key.tval();
- if (pc.equals(PlayerClassType::PRIEST) && (flgs.has_not(TR_BLESSED)) && ((tval == ItemKindType::SWORD) || (tval == ItemKindType::POLEARM))) {
+ if (pc.equals(PlayerClassType::PRIEST) && (flags.has_not(TR_BLESSED)) && ((tval == ItemKindType::SWORD) || (tval == ItemKindType::POLEARM))) {
damage -= 2;
} else if (pc.equals(PlayerClassType::BERSERKER)) {
damage += player_ptr->lev / 6;
int bonus_to_d = 0;
o_ptr = &player_ptr->inventory_list[i];
const auto has_melee = has_melee_weapon(player_ptr, i);
- if ((o_ptr->bi_id == 0) || (o_ptr->bi_key.tval() == ItemKindType::CAPTURE) || ((i == INVEN_MAIN_HAND) && has_melee) || ((i == INVEN_SUB_HAND) && has_melee) || (i == INVEN_BOW)) {
+ if (!o_ptr->is_valid() || (o_ptr->bi_key.tval() == ItemKindType::CAPTURE)) {
+ continue;
+ }
+
+ if (((i == INVEN_MAIN_HAND) && has_melee) || ((i == INVEN_SUB_HAND) && has_melee) || (i == INVEN_BOW)) {
continue;
}
}
if (main_attack_hand(player_ptr) == calc_hand) {
- if ((is_martial_arts_mode(player_ptr) && empty_hands(player_ptr, false) == (EMPTY_HAND_MAIN | EMPTY_HAND_SUB)) || !has_disable_two_handed_bonus(player_ptr, calc_hand)) {
+ if (is_bare_knuckle(player_ptr) || !has_disable_two_handed_bonus(player_ptr, calc_hand)) {
int bonus_to_d = 0;
bonus_to_d = ((int)(adj_str_td[player_ptr->stat_index[A_STR]]) - 128) / 2;
damage += std::max<int>(bonus_to_d, 1);
break;
}
- if ((is_martial_arts_mode(player_ptr) && empty_hands(player_ptr, false) == (EMPTY_HAND_MAIN | EMPTY_HAND_SUB)) || !has_disable_two_handed_bonus(player_ptr, calc_hand)) {
+ if (is_bare_knuckle(player_ptr) || !has_disable_two_handed_bonus(player_ptr, calc_hand)) {
int bonus_to_h = 0;
bonus_to_h = ((int)(adj_str_th[player_ptr->stat_index[A_STR]]) - 128) + ((int)(adj_dex_th[player_ptr->stat_index[A_DEX]]) - 128);
hit += std::max<int>(bonus_to_h, 1);
PlayerClass pc(player_ptr);
if (has_melee_weapon(player_ptr, slot)) {
auto *o_ptr = &player_ptr->inventory_list[slot];
- auto flgs = object_flags(o_ptr);
+ auto flags = object_flags(o_ptr);
/* Traind bonuses */
const auto tval = o_ptr->bi_key.tval();
if (player_ptr->riding > 0) {
if (o_ptr->is_lance()) {
hit += 15;
- } else if (flgs.has_not(TR_RIDING)) {
+ } else if (flags.has_not(TR_RIDING)) {
short penalty;
if (PlayerClass(player_ptr).is_tamer()) {
penalty = 5;
}
/* Class penalties */
- if (pc.equals(PlayerClassType::PRIEST) && (flgs.has_not(TR_BLESSED)) && ((tval == ItemKindType::SWORD) || (tval == ItemKindType::POLEARM))) {
+ if (pc.equals(PlayerClassType::PRIEST) && (flags.has_not(TR_BLESSED)) && ((tval == ItemKindType::SWORD) || (tval == ItemKindType::POLEARM))) {
hit -= 2;
} else if (pc.equals(PlayerClassType::BERSERKER)) {
hit += player_ptr->lev / 5;
/* Ignore empty hands, handed weapons, bows and capture balls */
const auto has_melee = has_melee_weapon(player_ptr, i);
- if (!o_ptr->bi_id || o_ptr->bi_key.tval() == ItemKindType::CAPTURE || (i == INVEN_MAIN_HAND && has_melee) || (i == INVEN_SUB_HAND && has_melee) || i == INVEN_BOW) {
+ if (!o_ptr->is_valid() || o_ptr->bi_key.tval() == ItemKindType::CAPTURE) {
+ continue;
+ }
+
+ if (((i == INVEN_MAIN_HAND) && has_melee) || ((i == INVEN_SUB_HAND) && has_melee) || (i == INVEN_BOW)) {
continue;
}
{
ItemEntity *o_ptr;
o_ptr = &player_ptr->inventory_list[INVEN_BOW];
- if (o_ptr->bi_id) {
+ if (o_ptr->is_valid()) {
if (o_ptr->curse_flags.has(CurseTraitType::LOW_MELEE)) {
if (o_ptr->curse_flags.has(CurseTraitType::HEAVY_CURSE)) {
pow -= 15;
pow += 2 * (calc_bow_weight_limit(player_ptr) - o_ptr->weight / 10);
}
- if (o_ptr->bi_id) {
- if (o_ptr->bi_id && !is_heavy_shoot(player_ptr, &player_ptr->inventory_list[INVEN_BOW])) {
+ if (o_ptr->is_valid()) {
+ if (!is_heavy_shoot(player_ptr, &player_ptr->inventory_list[INVEN_BOW])) {
if (PlayerClass(player_ptr).equals(PlayerClassType::SNIPER) && (player_ptr->tval_ammo == ItemKindType::BOLT)) {
pow += (10 + (player_ptr->lev / 5));
}
int bonus_to_h;
o_ptr = &player_ptr->inventory_list[i];
const auto has_melee = has_melee_weapon(player_ptr, i);
- if ((o_ptr->bi_id == 0) || (o_ptr->bi_key.tval() == ItemKindType::CAPTURE) || ((i == INVEN_MAIN_HAND) && has_melee) || ((i == INVEN_SUB_HAND) && has_melee) || i == INVEN_BOW) {
+ if (!o_ptr->is_valid() || (o_ptr->bi_key.tval() == ItemKindType::CAPTURE)) {
+ continue;
+ }
+
+ if (((i == INVEN_MAIN_HAND) && has_melee) || ((i == INVEN_SUB_HAND) && has_melee) || (i == INVEN_BOW)) {
continue;
}
for (int i = INVEN_MAIN_HAND; i < INVEN_TOTAL; i++) {
o_ptr = &player_ptr->inventory_list[i];
- if (!o_ptr->bi_id) {
+ if (!o_ptr->is_valid()) {
continue;
}
for (int i = INVEN_MAIN_HAND; i < INVEN_TOTAL; i++) {
o_ptr = &player_ptr->inventory_list[i];
- if (!o_ptr->bi_id) {
+ if (!o_ptr->is_valid()) {
continue;
}
*/
void update_creature(PlayerType *player_ptr)
{
- if (!player_ptr->update) {
+ auto &rfu = RedrawingFlagsUpdater::get_instance();
+ if (!rfu.any_stats()) {
return;
}
auto *floor_ptr = player_ptr->current_floor_ptr;
- if (any_bits(player_ptr->update, (PU_AUTODESTROY))) {
- reset_bits(player_ptr->update, PU_AUTODESTROY);
+ if (rfu.has(StatusRedrawingFlag::AUTO_DESTRUCTION)) {
+ rfu.reset_flag(StatusRedrawingFlag::AUTO_DESTRUCTION);
autopick_delayed_alter(player_ptr);
}
- if (any_bits(player_ptr->update, (PU_COMBINE))) {
- reset_bits(player_ptr->update, PU_COMBINE);
+ if (rfu.has(StatusRedrawingFlag::COMBINATION)) {
+ rfu.reset_flag(StatusRedrawingFlag::COMBINATION);
combine_pack(player_ptr);
}
- if (any_bits(player_ptr->update, (PU_REORDER))) {
- reset_bits(player_ptr->update, PU_REORDER);
+ if (rfu.has(StatusRedrawingFlag::REORDER)) {
+ rfu.reset_flag(StatusRedrawingFlag::REORDER);
reorder_pack(player_ptr);
}
- if (any_bits(player_ptr->update, (PU_BONUS))) {
- reset_bits(player_ptr->update, PU_BONUS);
+ if (rfu.has(StatusRedrawingFlag::BONUS)) {
+ rfu.reset_flag(StatusRedrawingFlag::BONUS);
PlayerAlignment(player_ptr).update_alignment();
PlayerSkill ps(player_ptr);
ps.apply_special_weapon_skill_max_values();
update_bonuses(player_ptr);
}
- if (any_bits(player_ptr->update, (PU_TORCH))) {
- reset_bits(player_ptr->update, PU_TORCH);
+ if (rfu.has(StatusRedrawingFlag::TORCH)) {
+ rfu.reset_flag(StatusRedrawingFlag::TORCH);
update_lite_radius(player_ptr);
}
- if (any_bits(player_ptr->update, (PU_HP))) {
- reset_bits(player_ptr->update, PU_HP);
+ if (rfu.has(StatusRedrawingFlag::HP)) {
+ rfu.reset_flag(StatusRedrawingFlag::HP);
update_max_hitpoints(player_ptr);
}
- if (any_bits(player_ptr->update, (PU_MANA))) {
- reset_bits(player_ptr->update, PU_MANA);
+ if (rfu.has(StatusRedrawingFlag::MP)) {
+ rfu.reset_flag(StatusRedrawingFlag::MP);
update_max_mana(player_ptr);
}
- if (any_bits(player_ptr->update, (PU_SPELLS))) {
- reset_bits(player_ptr->update, PU_SPELLS);
+ if (rfu.has(StatusRedrawingFlag::SPELLS)) {
+ rfu.reset_flag(StatusRedrawingFlag::SPELLS);
update_num_of_spells(player_ptr);
}
- if (!w_ptr->character_generated) {
- return;
- }
- if (w_ptr->character_icky_depth > 0) {
+ if (!w_ptr->character_generated || (w_ptr->character_icky_depth > 0)) {
return;
}
- if (any_bits(player_ptr->update, (PU_UN_LITE))) {
- reset_bits(player_ptr->update, PU_UN_LITE);
+
+ if (rfu.has(StatusRedrawingFlag::UN_LITE)) {
+ rfu.reset_flag(StatusRedrawingFlag::UN_LITE);
forget_lite(floor_ptr);
}
- if (any_bits(player_ptr->update, (PU_UN_VIEW))) {
- reset_bits(player_ptr->update, PU_UN_VIEW);
+ if (rfu.has(StatusRedrawingFlag::UN_VIEW)) {
+ rfu.reset_flag(StatusRedrawingFlag::UN_VIEW);
forget_view(floor_ptr);
}
- if (any_bits(player_ptr->update, (PU_VIEW))) {
- reset_bits(player_ptr->update, PU_VIEW);
+ if (rfu.has(StatusRedrawingFlag::VIEW)) {
+ rfu.reset_flag(StatusRedrawingFlag::VIEW);
update_view(player_ptr);
}
- if (any_bits(player_ptr->update, (PU_LITE))) {
- reset_bits(player_ptr->update, PU_LITE);
+ if (rfu.has(StatusRedrawingFlag::LITE)) {
+ rfu.reset_flag(StatusRedrawingFlag::LITE);
update_lite(player_ptr);
}
- if (any_bits(player_ptr->update, (PU_FLOW))) {
- reset_bits(player_ptr->update, PU_FLOW);
+ if (rfu.has(StatusRedrawingFlag::FLOW)) {
+ rfu.reset_flag(StatusRedrawingFlag::FLOW);
update_flow(player_ptr);
}
- if (any_bits(player_ptr->update, (PU_DISTANCE))) {
- reset_bits(player_ptr->update, PU_DISTANCE);
-
+ if (rfu.has(StatusRedrawingFlag::DISTANCE)) {
+ rfu.reset_flag(StatusRedrawingFlag::DISTANCE);
update_monsters(player_ptr, true);
}
- if (any_bits(player_ptr->update, (PU_MON_LITE))) {
- reset_bits(player_ptr->update, PU_MON_LITE);
+ if (rfu.has(StatusRedrawingFlag::MONSTER_LITE)) {
+ rfu.reset_flag(StatusRedrawingFlag::MONSTER_LITE);
update_mon_lite(player_ptr);
}
- if (any_bits(player_ptr->update, (PU_DELAY_VIS))) {
- reset_bits(player_ptr->update, PU_DELAY_VIS);
+ if (rfu.has(StatusRedrawingFlag::DELAY_VISIBILITY)) {
+ rfu.reset_flag(StatusRedrawingFlag::DELAY_VISIBILITY);
delayed_visual_update(player_ptr);
}
- if (any_bits(player_ptr->update, (PU_MONSTERS))) {
- reset_bits(player_ptr->update, PU_MONSTERS);
+ if (rfu.has(StatusRedrawingFlag::MONSTER_STATUSES)) {
+ rfu.reset_flag(StatusRedrawingFlag::MONSTER_STATUSES);
update_monsters(player_ptr, false);
}
}
ItemEntity *o_ptr;
for (int i = 0; i < INVEN_PACK; i++) {
o_ptr = &player_ptr->inventory_list[i];
- if (o_ptr->bi_id && check_book_realm(player_ptr, o_ptr->bi_key)) {
+ if (o_ptr->is_valid() && check_book_realm(player_ptr, o_ptr->bi_key)) {
return false;
}
}
auto *floor_ptr = player_ptr->current_floor_ptr;
for (const auto this_o_idx : floor_ptr->grid_array[player_ptr->y][player_ptr->x].o_idx_list) {
o_ptr = &floor_ptr->o_list[this_o_idx];
- if (o_ptr->bi_id && o_ptr->marked.has(OmType::FOUND) && check_book_realm(player_ptr, o_ptr->bi_key)) {
+ if (o_ptr->is_valid() && o_ptr->marked.has(OmType::FOUND) && check_book_realm(player_ptr, o_ptr->bi_key)) {
return false;
}
}
player_ptr->max_max_exp = player_ptr->max_exp;
}
- set_bits(player_ptr->redraw, PR_EXP);
+ auto &rfu = RedrawingFlagsUpdater::get_instance();
+ rfu.set_flag(MainWindowRedrawingFlag::EXP);
handle_stuff(player_ptr);
PlayerRace pr(player_ptr);
bool android = pr.equals(PlayerRaceType::ANDROID);
PLAYER_LEVEL old_lev = player_ptr->lev;
+ const auto flags_srf = {
+ StatusRedrawingFlag::BONUS,
+ StatusRedrawingFlag::HP,
+ StatusRedrawingFlag::MP,
+ StatusRedrawingFlag::SPELLS,
+ };
while ((player_ptr->lev > 1) && (player_ptr->exp < ((android ? player_exp_a : player_exp)[player_ptr->lev - 2] * player_ptr->expfact / 100L))) {
player_ptr->lev--;
- set_bits(player_ptr->update, PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
- set_bits(player_ptr->redraw, PR_LEV | PR_TITLE);
+ rfu.set_flags(flags_srf);
+ const auto flags_mwrf = {
+ MainWindowRedrawingFlag::LEVEL,
+ MainWindowRedrawingFlag::TITLE,
+ };
+ rfu.set_flags(flags_mwrf);
set_bits(player_ptr->window_flags, PW_PLAYER);
handle_stuff(player_ptr);
}
sound(SOUND_LEVEL);
msg_format(_("レベル %d にようこそ。", "Welcome to level %d."), player_ptr->lev);
- set_bits(player_ptr->update, (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS));
- set_bits(player_ptr->redraw, (PR_LEV | PR_TITLE | PR_EXP));
- set_bits(player_ptr->window_flags, (PW_PLAYER | PW_SPELL | PW_INVEN));
+ rfu.set_flags(flags_srf);
+ const auto flags_mwrf_levelup = {
+ MainWindowRedrawingFlag::LEVEL,
+ MainWindowRedrawingFlag::TITLE,
+ MainWindowRedrawingFlag::EXP,
+ };
+ rfu.set_flags(flags_mwrf_levelup);
+ set_bits(player_ptr->window_flags, (PW_PLAYER | PW_SPELL | PW_INVENTORY));
player_ptr->level_up_message = true;
handle_stuff(player_ptr);
level_reward = false;
}
- set_bits(player_ptr->update, PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
- set_bits(player_ptr->redraw, (PR_LEV | PR_TITLE));
+ rfu.set_flags(flags_srf);
+ const auto flags_mwrf = {
+ MainWindowRedrawingFlag::LEVEL,
+ MainWindowRedrawingFlag::TITLE,
+ };
+ rfu.set_flags(flags_mwrf);
set_bits(player_ptr->window_flags, (PW_PLAYER | PW_SPELL));
handle_stuff(player_ptr);
}