Fitness rebalance and improvements - mood, fireman carry, and longer workouts (#79584)

## About The Pull Request
So after getting feedback on fitness I've decided to make some balance
changes:

- ~~Every level of fitness now increases max hp. At max legendary
fitness, all the hp bonuses combined results in a total of +25 max hp~~
- Fitness now decreases the time it takes to firemany carry by 0.33
seconds per level. (At max fitness, this means a decrease of 2 seconds)
- Exercise status effect triggers the exercise mood event and goes away
when the exercise status effect is gone
- The better your fitness level, the more happiness you gain from the
mood event
- Decreased the fitness timers and effects by half and tweaked a few
other values
- Increased the nutrition cost of working out
- Removed doubles metabolism exercise effect

I'd also like this test merged to see if anymore minor tweaks need to be
made.

## Why It's Good For The Game
Fitness effects on gameplay were pretty underwhelming. This was
deliberate since there is a concern about prisoners being able to abuse
it in quite a lot of scenarios. ~~Adding a small boost to max hp is nice
given that the downside is a bigger target.~~

Another problem was that the double metabolism rate resulted in a lot of
the diet effects being metabolised before you could convert them into
exercise gains. So this was removed.

People would also hit their bench max rather quickly and then spend a
long duration sleeping. Ideally I wanted people to spend more time
working out than sleeping, so I halved the duration values so it takes
them longer to achieve maxxing out.

## Changelog
🆑
balance: Fitness level decreases the time it takes to firemany carry
someone. Fitness level determines how much of a positive mood the
workout grants. Working out is now more difficult and requires more
nutrition.
balance: Exercise no longer triggers double metabolism.  
/🆑

---------

Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
This commit is contained in:
Tim
2023-12-14 02:21:27 +00:00
committed by GitHub
co-authored by Zephyr Ghom
parent d2e517103b
commit 536381d308
8 changed files with 79 additions and 43 deletions
@@ -51,8 +51,9 @@
if(istype(boxing_gloves))
stamina_exhaustion = 2
if(!iscarbon(user))
return
user.adjustStaminaLoss(stamina_exhaustion)
user.add_mood_event("exercise", /datum/mood_event/exercise)
user.mind?.adjust_experience(/datum/skill/fitness, 0.1)
user.apply_status_effect(/datum/status_effect/exercised)
@@ -1,5 +1,5 @@
#define WORKOUT_XP 5
#define EXERCISE_STATUS_DURATION 20 SECONDS
#define EXERCISE_STATUS_DURATION 15 SECONDS
#define SAFE_DRUNK_LEVEL 39
/obj/structure/weightmachine
@@ -22,6 +22,9 @@
///message when drunk user fails to use the machine
var/drunk_message = "You try for a new record and pull through! Through a muscle that is."
// the total reps you can do before you hit stamcrit based on fitness level
var/static/list/total_workout_reps = list(3, 4, 4, 5, 6, 6, 7)
///List of messages picked when using the machine.
var/static/list/more_weight = list(
"pushing it to the limit!",
@@ -127,12 +130,12 @@
else
user.balloon_alert(user, pick(finished_message))
user.adjust_nutrition(-3) // feel the burn
user.add_mood_event("exercise", /datum/mood_event/exercise)
user.adjust_nutrition(-5) // feel the burn
// remember the real xp gain is from sleeping after working out
user.mind.adjust_experience(/datum/skill/fitness, WORKOUT_XP)
user.apply_status_effect(/datum/status_effect/exercised, EXERCISE_STATUS_DURATION)
if(iscarbon(user))
// remember the real xp gain is from sleeping after working out
user.mind.adjust_experience(/datum/skill/fitness, WORKOUT_XP)
user.apply_status_effect(/datum/status_effect/exercised, EXERCISE_STATUS_DURATION)
end_workout()
@@ -141,6 +144,9 @@
STOP_PROCESSING(SSobj, src)
icon_state = initial(icon_state)
/// roughly 8 seconds for 1 workout rep
#define WORKOUT_LENGTH 8
/obj/structure/weightmachine/process(seconds_per_tick)
if(!has_buckled_mobs())
end_workout()
@@ -149,15 +155,22 @@
flick_overlay_view(workout, 0.8 SECONDS)
flick("[base_icon_state]-u", src)
var/mob/living/user = buckled_mobs[1]
animate(user, pixel_y = pixel_shift_y, time = 4)
animate(user, pixel_y = pixel_shift_y, time = WORKOUT_LENGTH * 0.5)
playsound(user, 'sound/machines/creak.ogg', 60, TRUE)
animate(pixel_y = user.base_pixel_y, time = 4)
animate(pixel_y = user.base_pixel_y, time = WORKOUT_LENGTH * 0.5)
var/stamina_exhaustion = 5 - (user.mind.get_skill_level(/datum/skill/fitness) * 0.5)
if(!iscarbon(user) || isnull(user.mind))
return TRUE
// the amount of workouts you can do before you hit stamcrit
var/workout_reps = total_workout_reps[user.mind.get_skill_level(/datum/skill/fitness)]
// total stamina drain of 1 workout calculated based on the workout length
var/stamina_exhaustion = FLOOR(user.maxHealth / workout_reps / WORKOUT_LENGTH, 0.1)
user.adjustStaminaLoss(stamina_exhaustion * seconds_per_tick)
return TRUE
#undef WORKOUT_LENGTH
/**
* Weight lifter subtype
*/