X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fspell%2Fspells-status.cpp;h=ad195413081d00dc12cb1bfee43785883f35d654;hb=6fc7f05fef3d6575f0c21bd4d75be3ff28e60aa9;hp=ec0d4188c38c07487f1ad9b6896733141ec82032;hpb=d3e5ed2e56b4316b684bf6d10d6d028da0ee9c7d;p=hengbandforosx%2Fhengbandosx.git diff --git a/src/spell/spells-status.cpp b/src/spell/spells-status.cpp index ec0d4188c..ad1954130 100644 --- a/src/spell/spells-status.cpp +++ b/src/spell/spells-status.cpp @@ -12,6 +12,7 @@ #include "core/player-update-types.h" #include "core/stuff-handler.h" #include "core/window-redrawer.h" +#include "effect/attribute-types.h" #include "effect/effect-characteristics.h" #include "flavor/flavor-describer.h" #include "flavor/object-flavor-types.h" @@ -27,7 +28,6 @@ #include "mind/mind-force-trainer.h" #include "monster/monster-describer.h" #include "object/object-kind-hook.h" -#include "object/object-kind.h" #include "player-base/player-class.h" #include "player-info/class-info.h" #include "player-info/magic-eater-data-type.h" @@ -36,7 +36,6 @@ #include "spell-kind/spells-launcher.h" #include "spell-kind/spells-teleport.h" #include "spell-kind/spells-world.h" -#include "effect/attribute-types.h" #include "status/action-setter.h" #include "status/bad-status-setter.h" #include "status/base-status.h" @@ -45,12 +44,14 @@ #include "status/experience.h" #include "status/shape-changer.h" #include "status/sight-setter.h" +#include "system/baseitem-info.h" #include "system/floor-type-definition.h" #include "system/grid-type-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/player-type-definition.h" #include "target/target-getter.h" +#include "timed-effect/player-acceleration.h" #include "timed-effect/player-cut.h" #include "timed-effect/timed-effects.h" #include "util/bit-flags-calculator.h" @@ -169,8 +170,9 @@ bool poly_monster(PlayerType *player_ptr, DIRECTION dir, int power) { BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE; bool tester = (project_hook(player_ptr, AttributeType::OLD_POLY, dir, power, flg)); - if (tester) - chg_virtue(player_ptr, V_CHANCE, 1); + if (tester) { + chg_virtue(player_ptr, Virtue::CHANCE, 1); + } return tester; } @@ -213,7 +215,7 @@ bool time_walk(PlayerType *player_ptr) player_ptr->energy_need -= 1000 + (100 + player_ptr->csp - 50) * TURNS_PER_TICK / 10; player_ptr->redraw |= (PR_MAP); - player_ptr->update |= (PU_MONSTERS); + player_ptr->update |= (PU_MONSTER_STATUSES); player_ptr->window_flags |= (PW_OVERHEAD | PW_DUNGEON); handle_stuff(player_ptr); return true; @@ -244,25 +246,27 @@ void roll_hitdice(PlayerType *player_ptr, spell_operation options) } /* Require "valid" hitpoints at highest level */ - if ((player_ptr->player_hp[PY_MAX_LEVEL - 1] >= min_value) && (player_ptr->player_hp[PY_MAX_LEVEL - 1] <= max_value)) + if ((player_ptr->player_hp[PY_MAX_LEVEL - 1] >= min_value) && (player_ptr->player_hp[PY_MAX_LEVEL - 1] <= max_value)) { break; + } } player_ptr->knowledge &= ~(KNOW_HPRATE); - PERCENTAGE percent - = (int)(((long)player_ptr->player_hp[PY_MAX_LEVEL - 1] * 200L) / (2 * player_ptr->hitdie + ((PY_MAX_LEVEL - 1 + 3) * (player_ptr->hitdie + 1)))); + auto percent = (player_ptr->player_hp[PY_MAX_LEVEL - 1] * 200) / (2 * player_ptr->hitdie + ((PY_MAX_LEVEL - 1 + 3) * (player_ptr->hitdie + 1))); /* Update and redraw hitpoints */ player_ptr->update |= (PU_HP); player_ptr->redraw |= (PR_HP); player_ptr->window_flags |= (PW_PLAYER); - if (!(options & SPOP_NO_UPDATE)) + if (!(options & SPOP_NO_UPDATE)) { handle_stuff(player_ptr); + } - if (!(options & SPOP_DISPLAY_MES)) + if (!(options & SPOP_DISPLAY_MES)) { return; + } if (options & SPOP_DEBUG) { msg_format(_("現在の体力ランクは %d/100 です。", "Your life rate is %d/100 now."), percent); @@ -276,8 +280,8 @@ void roll_hitdice(PlayerType *player_ptr, spell_operation options) bool life_stream(PlayerType *player_ptr, bool message, bool virtue_change) { if (virtue_change) { - chg_virtue(player_ptr, V_VITALITY, 1); - chg_virtue(player_ptr, V_UNLIFE, -5); + chg_virtue(player_ptr, Virtue::VITALITY, 1); + chg_virtue(player_ptr, Virtue::UNLIFE, -5); } if (message) { @@ -286,13 +290,13 @@ bool life_stream(PlayerType *player_ptr, bool message, bool virtue_change) restore_level(player_ptr); BadStatusSetter bss(player_ptr); - (void)bss.poison(0); - (void)bss.blindness(0); - (void)bss.confusion(0); + (void)bss.set_poison(0); + (void)bss.set_blindness(0); + (void)bss.set_confusion(0); (void)bss.hallucination(0); - (void)bss.stun(0); - (void)bss.cut(0); - (void)bss.paralysis(0); + (void)bss.set_stun(0); + (void)bss.set_cut(0); + (void)bss.set_paralysis(0); (void)restore_all_status(player_ptr); (void)set_shero(player_ptr, 0, true); handle_stuff(player_ptr); @@ -304,7 +308,7 @@ bool life_stream(PlayerType *player_ptr, bool message, bool virtue_change) bool heroism(PlayerType *player_ptr, int base) { auto ident = false; - if (BadStatusSetter(player_ptr).afraidness(0)) { + if (BadStatusSetter(player_ptr).set_fear(0)) { ident = true; } @@ -322,7 +326,7 @@ bool heroism(PlayerType *player_ptr, int base) bool berserk(PlayerType *player_ptr, int base) { auto ident = false; - if (BadStatusSetter(player_ptr).afraidness(0)) { + if (BadStatusSetter(player_ptr).set_fear(0)) { ident = true; } @@ -345,7 +349,7 @@ bool cure_light_wounds(PlayerType *player_ptr, DICE_NUMBER dice, DICE_SID sides) } BadStatusSetter bss(player_ptr); - if (bss.blindness(0)) { + if (bss.set_blindness(0)) { ident = true; } @@ -368,15 +372,15 @@ bool cure_serious_wounds(PlayerType *player_ptr, DICE_NUMBER dice, DICE_SID side } BadStatusSetter bss(player_ptr); - if (bss.blindness(0)) { + if (bss.set_blindness(0)) { ident = true; } - if (bss.confusion(0)) { + if (bss.set_confusion(0)) { ident = true; } - if (bss.cut((player_ptr->effects()->cut()->current() / 2) - 50)) { + if (bss.set_cut((player_ptr->effects()->cut()->current() / 2) - 50)) { ident = true; } @@ -395,23 +399,23 @@ bool cure_critical_wounds(PlayerType *player_ptr, int pow) } BadStatusSetter bss(player_ptr); - if (bss.blindness(0)) { + if (bss.set_blindness(0)) { ident = true; } - if (bss.confusion(0)) { + if (bss.set_confusion(0)) { ident = true; } - if (bss.poison(0)) { + if (bss.set_poison(0)) { ident = true; } - if (bss.stun(0)) { + if (bss.set_stun(0)) { ident = true; } - if (bss.cut(0)) { + if (bss.set_cut(0)) { ident = true; } @@ -430,23 +434,23 @@ bool true_healing(PlayerType *player_ptr, int pow) } BadStatusSetter bss(player_ptr); - if (bss.blindness(0)) { + if (bss.set_blindness(0)) { ident = true; } - if (bss.confusion(0)) { + if (bss.set_confusion(0)) { ident = true; } - if (bss.poison(0)) { + if (bss.set_poison(0)) { ident = true; } - if (bss.stun(0)) { + if (bss.set_stun(0)) { ident = true; } - if (bss.cut(0)) { + if (bss.set_cut(0)) { ident = true; } @@ -473,8 +477,8 @@ bool restore_mana(PlayerType *player_ptr, bool magic_eater) auto sval = 0; for (auto &item : magic_eater_data->get_item_group(ItemKindType::ROD)) { - KIND_OBJECT_IDX k_idx = lookup_kind(ItemKindType::ROD, sval); - item.charge -= ((item.count < 10) ? EATER_ROD_CHARGE * 3 : item.count * EATER_ROD_CHARGE / 3) * k_info[k_idx].pval; + const auto bi_id = lookup_baseitem_id({ ItemKindType::ROD, sval }); + item.charge -= ((item.count < 10) ? EATER_ROD_CHARGE * 3 : item.count * EATER_ROD_CHARGE / 3) * baseitems_info[bi_id].pval; item.charge = std::max(item.charge, 0); ++sval; } @@ -484,13 +488,14 @@ bool restore_mana(PlayerType *player_ptr, bool magic_eater) return true; } - if (player_ptr->csp >= player_ptr->msp) + if (player_ptr->csp >= player_ptr->msp) { return false; + } player_ptr->csp = player_ptr->msp; player_ptr->csp_frac = 0; msg_print(_("頭がハッキリとした。", "You feel your head clear.")); - player_ptr->redraw |= (PR_MANA); + player_ptr->redraw |= (PR_MP); player_ptr->window_flags |= (PW_PLAYER); player_ptr->window_flags |= (PW_SPELL); return true; @@ -499,44 +504,51 @@ bool restore_mana(PlayerType *player_ptr, bool magic_eater) bool restore_all_status(PlayerType *player_ptr) { bool ident = false; - if (do_res_stat(player_ptr, A_STR)) + if (do_res_stat(player_ptr, A_STR)) { ident = true; - if (do_res_stat(player_ptr, A_INT)) + } + if (do_res_stat(player_ptr, A_INT)) { ident = true; - if (do_res_stat(player_ptr, A_WIS)) + } + if (do_res_stat(player_ptr, A_WIS)) { ident = true; - if (do_res_stat(player_ptr, A_DEX)) + } + if (do_res_stat(player_ptr, A_DEX)) { ident = true; - if (do_res_stat(player_ptr, A_CON)) + } + if (do_res_stat(player_ptr, A_CON)) { ident = true; - if (do_res_stat(player_ptr, A_CHR)) + } + if (do_res_stat(player_ptr, A_CHR)) { ident = true; + } return ident; } bool fishing(PlayerType *player_ptr) { DIRECTION dir; - if (!get_direction(player_ptr, &dir, false, false)) + if (!get_direction(player_ptr, &dir, false, false)) { return false; + } POSITION y = player_ptr->y + ddy[dir]; POSITION x = player_ptr->x + ddx[dir]; player_ptr->fishing_dir = dir; - if (!cave_has_flag_bold(player_ptr->current_floor_ptr, y, x, FloorFeatureType::WATER)) { + auto *floor_ptr = player_ptr->current_floor_ptr; + if (!cave_has_flag_bold(floor_ptr, y, x, TerrainCharacteristics::WATER)) { msg_print(_("そこは水辺ではない。", "You can't fish here.")); return false; } - if (player_ptr->current_floor_ptr->grid_array[y][x].m_idx) { - GAME_TEXT m_name[MAX_NLEN]; - monster_desc(player_ptr, m_name, &player_ptr->current_floor_ptr->m_list[player_ptr->current_floor_ptr->grid_array[y][x].m_idx], 0); - msg_format(_("%sが邪魔だ!", "%^s is standing in your way."), m_name); + if (floor_ptr->grid_array[y][x].m_idx) { + const auto m_name = monster_desc(player_ptr, &floor_ptr->m_list[floor_ptr->grid_array[y][x].m_idx], 0); + msg_format(_("%sが邪魔だ!", "%s^ is standing in your way."), m_name.data()); PlayerEnergy(player_ptr).reset_player_turn(); return false; } set_action(player_ptr, ACTION_FISH); - player_ptr->redraw |= (PR_STATE); + player_ptr->redraw |= (PR_ACTION); return true; } @@ -548,21 +560,23 @@ bool fishing(PlayerType *player_ptr) * @details * 脱いで落とした装備にtimeoutを設定するために装備品のアドレスを返す。 */ -bool cosmic_cast_off(PlayerType *player_ptr, ObjectType **o_ptr_ptr) +bool cosmic_cast_off(PlayerType *player_ptr, ItemEntity **o_ptr_ptr) { auto *o_ptr = (*o_ptr_ptr); /* Cast off activated item */ INVENTORY_IDX slot; for (slot = INVEN_MAIN_HAND; slot <= INVEN_FEET; slot++) { - if (o_ptr == &player_ptr->inventory_list[slot]) + if (o_ptr == &player_ptr->inventory_list[slot]) { break; + } } - if (slot > INVEN_FEET) + if (slot > INVEN_FEET) { return false; + } - ObjectType forge; + ItemEntity forge; (&forge)->copy_from(o_ptr); inven_item_increase(player_ptr, slot, (0 - o_ptr->number)); inven_item_optimize(player_ptr, slot); @@ -570,9 +584,8 @@ bool cosmic_cast_off(PlayerType *player_ptr, ObjectType **o_ptr_ptr) OBJECT_IDX old_o_idx = drop_near(player_ptr, &forge, 0, player_ptr->y, player_ptr->x); *o_ptr_ptr = &player_ptr->current_floor_ptr->o_list[old_o_idx]; - GAME_TEXT o_name[MAX_NLEN]; - describe_flavor(player_ptr, o_name, &forge, OD_NAME_ONLY); - msg_format(_("%sを脱ぎ捨てた。", "You cast off %s."), o_name); + const auto item_name = describe_flavor(player_ptr, &forge, OD_NAME_ONLY); + msg_format(_("%sを脱ぎ捨てた。", "You cast off %s."), item_name.data()); sound(SOUND_TAKE_OFF); /* Get effects */ @@ -580,12 +593,12 @@ bool cosmic_cast_off(PlayerType *player_ptr, ObjectType **o_ptr_ptr) TIME_EFFECT t = 20 + randint1(20); BadStatusSetter bss(player_ptr); (void)bss.mod_blindness(t); - (void)bss.afraidness(0); + (void)bss.set_fear(0); (void)set_tim_esp(player_ptr, player_ptr->tim_esp + t, false); (void)set_tim_regen(player_ptr, player_ptr->tim_regen + t, false); (void)set_hero(player_ptr, player_ptr->hero + t, false); (void)set_blessed(player_ptr, player_ptr->blessed + t, false); - (void)set_fast(player_ptr, player_ptr->fast + t, false); + (void)mod_acceleration(player_ptr, t, false); (void)set_shero(player_ptr, player_ptr->shero + t, false); if (PlayerClass(player_ptr).equals(PlayerClassType::FORCETRAINER)) { set_current_ki(player_ptr, true, player_ptr->lev * 5 + 190); @@ -599,7 +612,7 @@ bool cosmic_cast_off(PlayerType *player_ptr, ObjectType **o_ptr_ptr) * @brief プレイヤーの因果混乱処理 / Apply Nexus * @param m_ptr 因果混乱をプレイヤーに与えたモンスターの情報参照ポインタ */ -void apply_nexus(monster_type *m_ptr, PlayerType *player_ptr) +void apply_nexus(MonsterEntity *m_ptr, PlayerType *player_ptr) { switch (randint1(7)) { case 1: @@ -649,13 +662,14 @@ void status_shuffle(PlayerType *player_ptr) int j; //!< @todo ここのループは一体何をしている? - for (j = i; j == i; j = randint0(A_MAX)) /* loop */ + for (j = i; j == i; j = randint0(A_MAX)) { /* loop */ ; + } - BASE_STATUS max1 = player_ptr->stat_max[i]; - BASE_STATUS cur1 = player_ptr->stat_cur[i]; - BASE_STATUS max2 = player_ptr->stat_max[j]; - BASE_STATUS cur2 = player_ptr->stat_cur[j]; + const auto max1 = player_ptr->stat_max[i]; + const auto cur1 = player_ptr->stat_cur[i]; + const auto max2 = player_ptr->stat_max[j]; + const auto cur2 = player_ptr->stat_cur[j]; player_ptr->stat_max[i] = max2; player_ptr->stat_cur[i] = cur2; @@ -663,10 +677,12 @@ void status_shuffle(PlayerType *player_ptr) player_ptr->stat_cur[j] = cur1; for (int k = 0; k < A_MAX; k++) { - if (player_ptr->stat_max[k] > player_ptr->stat_max_max[k]) + if (player_ptr->stat_max[k] > player_ptr->stat_max_max[k]) { player_ptr->stat_max[k] = player_ptr->stat_max_max[k]; - if (player_ptr->stat_cur[k] > player_ptr->stat_max_max[k]) + } + if (player_ptr->stat_cur[k] > player_ptr->stat_max_max[k]) { player_ptr->stat_cur[k] = player_ptr->stat_max_max[k]; + } } player_ptr->update |= PU_BONUS;