[MIRROR] Nutrition fix (#11001)

Co-authored-by: Cameron Lennox <killer65311@gmail.com>
Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
CHOMPStation2StaffMirrorBot
2025-06-03 10:20:10 +02:00
committed by GitHub
co-authored by Cameron Lennox Kashargul
parent c0112761bd
commit 991f558472
3 changed files with 29 additions and 16 deletions
@@ -1,6 +1,9 @@
#define GROWMODE_SHRINK 1
#define GROWMODE_GROW 2
#define GROW_MULTIPLIER 5
#define SHRINK_MULTIPLIER 0.3
/datum/component/nutrition_size_change
var/mob/living/owner
var/grow_mode = 0 // Don't use base component
@@ -28,24 +31,18 @@
owner.nutrition = 0.1
if(owner.nutrition <= 0)
return
// Species controls hunger rate for humans, otherwise use defaults
var/nutrition_reduction = DEFAULT_HUNGER_FACTOR
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
nutrition_reduction = H.species.hunger_factor
// Modifiers can increase or decrease nutrition cost
for(var/datum/modifier/mod in owner.modifiers)
if(!isnull(mod.metabolism_percent))
nutrition_reduction *= mod.metabolism_percent
// Time to change size!
if(owner.nutrition > 1000 && grow_mode == GROWMODE_GROW) //Removing the strict check against normal max/min size to support dorms/VR oversizing
nutrition_reduction *= 5
var/nutrition_multiplier = get_nutrition_multiplier()
if(nutrition_multiplier == GROW_MULTIPLIER) //Removing the strict check against normal max/min size to support dorms/VR oversizing
owner.resize(owner.size_multiplier+0.01, animate = FALSE, uncapped = owner.has_large_resize_bounds()) //Bringing this code in line with micro and macro shrooms
if(owner.nutrition < 50 && grow_mode == GROWMODE_SHRINK)
nutrition_reduction *= 0.3
if(nutrition_multiplier == SHRINK_MULTIPLIER)
owner.resize(owner.size_multiplier-0.01, animate = FALSE, uncapped = owner.has_large_resize_bounds()) //Bringing this code in line with micro and macro shrooms
// Apply hunger costs
owner.adjust_nutrition(-nutrition_reduction)
/datum/component/nutrition_size_change/proc/get_nutrition_multiplier()
if(owner.nutrition > 1000 && grow_mode == GROWMODE_GROW) //Removing the strict check against normal max/min size to support dorms/VR oversizing
return GROW_MULTIPLIER
else if(owner.nutrition < 50 && grow_mode == GROWMODE_SHRINK)
return SHRINK_MULTIPLIER
/datum/component/nutrition_size_change/Destroy(force = FALSE)
UnregisterSignal(owner, COMSIG_LIVING_LIFE)
@@ -54,3 +51,6 @@
#undef GROWMODE_SHRINK
#undef GROWMODE_GROW
#undef GROW_MULTIPLIER
#undef SHRINK_MULTIPLIER