… | |
… | |
767 | int stat_sum [NUM_STATS]; |
767 | int stat_sum [NUM_STATS]; |
768 | |
768 | |
769 | /* First task is to clear all the values back to their original values */ |
769 | /* First task is to clear all the values back to their original values */ |
770 | if (type == PLAYER) |
770 | if (type == PLAYER) |
771 | { |
771 | { |
|
|
772 | contr->delayed_update = false; |
|
|
773 | |
772 | for (int i = 0; i < NUM_STATS; i++) |
774 | for (int i = 0; i < NUM_STATS; i++) |
773 | stat_sum [i] = contr->orig_stats.stat (i); |
775 | stat_sum [i] = contr->orig_stats.stat (i); |
774 | |
776 | |
775 | if (settings.spell_encumbrance == TRUE) |
777 | if (settings.spell_encumbrance == TRUE) |
776 | contr->encumbrance = 0; |
778 | contr->encumbrance = 0; |
… | |
… | |
909 | && !tmp->flag [FLAG_CURSED] |
911 | && !tmp->flag [FLAG_CURSED] |
910 | && !tmp->flag [FLAG_DAMNED]) |
912 | && !tmp->flag [FLAG_DAMNED]) |
911 | continue; |
913 | continue; |
912 | |
914 | |
913 | for (int i = 0; i < NUM_STATS; i++) |
915 | for (int i = 0; i < NUM_STATS; i++) |
914 | stat_sum [i] = stat_sum [i] + tmp->stats.stat (i); |
916 | stat_sum [i] += tmp->stats.stat (i); |
915 | |
917 | |
916 | if (digest_types [tmp->type]) |
918 | if (digest_types [tmp->type]) |
917 | { |
919 | { |
918 | contr->digestion += tmp->stats.food; |
920 | contr->digestion += tmp->stats.food; |
919 | contr->gen_hp += tmp->stats.hp; |
921 | contr->gen_hp += tmp->stats.hp; |
… | |
… | |
1172 | |
1174 | |
1173 | if (type == PLAYER) |
1175 | if (type == PLAYER) |
1174 | { |
1176 | { |
1175 | // clamp various player stats |
1177 | // clamp various player stats |
1176 | for (int i = 0; i < NUM_STATS; ++i) |
1178 | for (int i = 0; i < NUM_STATS; ++i) |
1177 | stats.stat (i) = clamp (stat_sum [i], MIN_STAT, MAX_STAT); |
1179 | stats.stat (i) = stat_sum [i]; |
|
|
1180 | |
|
|
1181 | check_stat_bounds (&stats); |
1178 | |
1182 | |
1179 | contr->digestion = clamp (contr->digestion, MIN_DIGESTION, MAX_DIGESTION); |
1183 | contr->digestion = clamp (contr->digestion, MIN_DIGESTION, MAX_DIGESTION); |
1180 | |
1184 | |
1181 | /* Figure out the players sp/mana/hp totals. */ |
1185 | /* Figure out the players sp/mana/hp totals. */ |
1182 | int pl_level; |
1186 | int pl_level; |
1183 | |
1187 | |
1184 | check_stat_bounds (&(stats)); |
|
|
1185 | pl_level = level; |
|
|
1186 | |
|
|
1187 | if (pl_level < 1) |
|
|
1188 | pl_level = 1; /* safety, we should always get 1 levels worth of hp! */ |
1188 | pl_level = max (1, level); /* safety, we should always get 1 levels worth of hp! */ |
1189 | |
1189 | |
1190 | /* You basically get half a con bonus/level. But we do take into account rounding, |
1190 | /* You basically get half a con bonus/level. But we do take into account rounding, |
1191 | * so if your bonus is 7, you still get 7 worth of bonus every 2 levels. |
1191 | * so if your bonus is 7, you still get 7 worth of bonus every 2 levels. |
1192 | */ |
1192 | */ |
1193 | stats.maxhp = 0; |
1193 | stats.maxhp = 0; |