1 #include "status/experience.h"
2 #include "player-base/player-race.h"
3 #include "player/player-status.h"
4 #include "system/player-type-definition.h"
5 #include "view/display-messages.h"
10 void gain_exp_64(PlayerType *player_ptr, int32_t amount, uint32_t amount_frac)
12 if (player_ptr->is_dead) {
15 if (PlayerRace(player_ptr).equals(PlayerRaceType::ANDROID)) {
19 s64b_add(&(player_ptr->exp), &(player_ptr->exp_frac), amount, amount_frac);
21 if (player_ptr->exp < player_ptr->max_exp) {
22 player_ptr->max_exp += amount / 5;
25 check_experience(player_ptr);
31 void gain_exp(PlayerType *player_ptr, int32_t amount)
33 gain_exp_64(player_ptr, amount, 0L);
39 void lose_exp(PlayerType *player_ptr, int32_t amount)
41 if (PlayerRace(player_ptr).equals(PlayerRaceType::ANDROID)) {
44 if (amount > player_ptr->exp) {
45 amount = player_ptr->exp;
48 player_ptr->exp -= amount;
50 check_experience(player_ptr);
54 * Restores any drained experience
56 bool restore_level(PlayerType *player_ptr)
58 if (player_ptr->exp < player_ptr->max_exp) {
59 msg_print(_("経験値が戻ってきた気がする。", "You feel your experience returning."));
60 player_ptr->exp = player_ptr->max_exp;
61 check_experience(player_ptr);
70 * If resisted to draining, return FALSE
72 bool drain_exp(PlayerType *player_ptr, int32_t drain, int32_t slip, int hold_exp_prob)
74 if (PlayerRace(player_ptr).equals(PlayerRaceType::ANDROID)) {
78 if (player_ptr->hold_exp && (randint0(100) < hold_exp_prob)) {
79 msg_print(_("しかし自己の経験値を守りきった!", "You keep hold of your experience!"));
83 if (player_ptr->hold_exp) {
84 msg_print(_("経験値を少し吸い取られた気がする!", "You feel your experience slipping away!"));
85 lose_exp(player_ptr, slip);
87 msg_print(_("経験値が体から吸い取られた気がする!", "You feel your experience draining away!"));
88 lose_exp(player_ptr, drain);