#include "player/digestion-processor.h"
#include "avatar/avatar.h"
#include "core/disturbance.h"
-#include "core/player-redraw-types.h"
-#include "core/player-update-types.h"
#include "core/speed-table.h"
#include "core/stuff-handler.h"
#include "floor/wild.h"
#include "main/sound-of-music.h"
#include "object-enchant/trc-types.h"
#include "player-base/player-class.h"
+#include "player-info/monk-data-type.h"
#include "player-info/samurai-data-type.h"
#include "player/player-damage.h"
#include "player/player-status.h"
#include "player/special-defense-types.h"
#include "status/bad-status-setter.h"
#include "system/player-type-definition.h"
+#include "system/redrawing-flags-updater.h"
+#include "timed-effect/player-paralysis.h"
+#include "timed-effect/timed-effects.h"
#include "view/display-messages.h"
#include "world/world.h"
* @brief 10ゲームターンが進行するごとにプレイヤーの腹を減らす
* @param player_ptr プレイヤーへの参照ポインタ
*/
-void starve_player(player_type *player_ptr)
+void starve_player(PlayerType *player_ptr)
{
- if (player_ptr->phase_out)
+ if (player_ptr->phase_out) {
return;
+ }
if (player_ptr->food >= PY_FOOD_MAX) {
(void)set_food(player_ptr, player_ptr->food - 100);
} else if (!(w_ptr->game_turn % (TURNS_PER_TICK * 5))) {
- int digestion = SPEED_TO_ENERGY(player_ptr->pspeed);
- if (player_ptr->regenerate)
+ int digestion = speed_to_energy(player_ptr->pspeed);
+ if (player_ptr->regenerate) {
digestion += 20;
- if ((player_ptr->special_defense & (KAMAE_MASK)) || (PlayerClass(player_ptr).get_kata() != SamuraiKata::NONE))
+ }
+ PlayerClass pc(player_ptr);
+ if (!pc.monk_stance_is(MonkStanceType::NONE) || !pc.samurai_stance_is(SamuraiStanceType::NONE)) {
digestion += 20;
- if (player_ptr->cursed.has(TRC::FAST_DIGEST))
+ }
+ if (player_ptr->cursed.has(CurseTraitType::FAST_DIGEST)) {
digestion += 30;
+ }
- if (player_ptr->slow_digest)
+ if (player_ptr->slow_digest) {
digestion -= 5;
+ }
- if (digestion < 1)
+ if (digestion < 1) {
digestion = 1;
- if (digestion > 100)
+ }
+ if (digestion > 100) {
digestion = 100;
+ }
(void)set_food(player_ptr, player_ptr->food - digestion);
}
- if ((player_ptr->food >= PY_FOOD_FAINT))
+ if ((player_ptr->food >= PY_FOOD_FAINT)) {
return;
+ }
- if (!player_ptr->paralyzed && (randint0(100) < 10)) {
+ if (!player_ptr->effects()->paralysis()->is_paralyzed() && (randint0(100) < 10)) {
msg_print(_("あまりにも空腹で気絶してしまった。", "You faint from the lack of food."));
disturb(player_ptr, true, true);
(void)BadStatusSetter(player_ptr).mod_paralysis(1 + randint0(5));
}
if (player_ptr->food < PY_FOOD_STARVE) {
- HIT_POINT dam = (PY_FOOD_STARVE - player_ptr->food) / 10;
- if (!is_invuln(player_ptr))
+ int dam = (PY_FOOD_STARVE - player_ptr->food) / 10;
+ if (!is_invuln(player_ptr)) {
take_hit(player_ptr, DAMAGE_LOSELIFE, dam, _("空腹", "starvation"));
+ }
}
}
* game turns, or 500/(100/5) = 25 player turns (if nothing else is
* affecting the player speed).\n
*/
-bool set_food(player_type *player_ptr, TIME_EFFECT v)
+bool set_food(PlayerType *player_ptr, TIME_EFFECT v)
{
int old_aux, new_aux;
bool notice = false;
- v = (v > 20000) ? 20000 : (v < 0) ? 0 : v;
+ v = (v > 20000) ? 20000 : (v < 0) ? 0
+ : v;
if (player_ptr->food < PY_FOOD_FAINT) {
old_aux = 0;
} else if (player_ptr->food < PY_FOOD_WEAK) {
new_aux = 5;
}
- if (old_aux < 1 && new_aux > 0)
- chg_virtue(player_ptr, V_PATIENCE, 2);
- else if (old_aux < 3 && (old_aux != new_aux))
- chg_virtue(player_ptr, V_PATIENCE, 1);
- if (old_aux == 2)
- chg_virtue(player_ptr, V_TEMPERANCE, 1);
- if (old_aux == 0)
- chg_virtue(player_ptr, V_TEMPERANCE, -1);
+ if (old_aux < 1 && new_aux > 0) {
+ chg_virtue(player_ptr, Virtue::PATIENCE, 2);
+ } else if (old_aux < 3 && (old_aux != new_aux)) {
+ chg_virtue(player_ptr, Virtue::PATIENCE, 1);
+ }
+ if (old_aux == 2) {
+ chg_virtue(player_ptr, Virtue::TEMPERANCE, 1);
+ }
+ if (old_aux == 0) {
+ chg_virtue(player_ptr, Virtue::TEMPERANCE, -1);
+ }
if (new_aux > old_aux) {
switch (new_aux) {
case 5:
msg_print(_("食べ過ぎだ!", "You have gorged yourself!"));
- chg_virtue(player_ptr, V_HARMONY, -1);
- chg_virtue(player_ptr, V_PATIENCE, -1);
- chg_virtue(player_ptr, V_TEMPERANCE, -2);
+ chg_virtue(player_ptr, Virtue::HARMONY, -1);
+ chg_virtue(player_ptr, Virtue::PATIENCE, -1);
+ chg_virtue(player_ptr, Virtue::TEMPERANCE, -2);
break;
}
}
player_ptr->food = v;
- if (!notice)
+ if (!notice) {
return false;
+ }
- if (disturb_state)
+ if (disturb_state) {
disturb(player_ptr, false, false);
- player_ptr->update |= (PU_BONUS);
- player_ptr->redraw |= (PR_HUNGER);
+ }
+
+ auto &rfu = RedrawingFlagsUpdater::get_instance();
+ rfu.set_flag(StatusRedrawingFlag::BONUS);
+ rfu.set_flag(MainWindowRedrawingFlag::HUNGER);
handle_stuff(player_ptr);
return true;