diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 2cc03c19..39ac55c5 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -1249,356 +1249,170 @@ GLOBAL_LIST_EMPTY(roundstart_races)
//LIFE//
////////
-///datum/species/proc/handle_digestion(mob/living/carbon/human/H)
-// if(HAS_TRAIT(src, TRAIT_NOHUNGER))
-// return //hunger is for BABIES
+/datum/species/proc/update_body_size(mob/living/carbon/human/H, size_change)
+ if (!H)
+ return
-/* //The fucking TRAIT_FAT mutation is the dumbest shit ever. It makes the code so difficult to work with
- if(HAS_TRAIT(H, TRAIT_FAT))//I share your pain, past coder.
- if(H.fatness < FATNESS_LEVEL_FAT)//this is a mess, indeed.
- to_chat(H, "You feel fit again!")//GS13 Added a whole bunch of new fatness traits. Truly I am a masochist
- REMOVE_TRAIT(H, TRAIT_FAT, OBESITY)
- H.update_body()
- H.update_inv_w_uniform()
- H.update_inv_wear_suit()
- else if(H.fatness >= FATNESS_LEVEL_OBESE)
- to_chat(H, "You feel even plumper!")
- REMOVE_TRAIT(H, TRAIT_FAT, OBESITY)
- ADD_TRAIT(H, TRAIT_OBESE, OBESITY)
- H.update_body()
- H.update_inv_w_uniform()
- H.update_inv_wear_suit()
- else if(HAS_TRAIT(H, TRAIT_OBESE))
- if(H.fatness < FATNESS_LEVEL_OBESE)
- to_chat(H, "You feel like you've lost weight!")
- REMOVE_TRAIT(H, TRAIT_OBESE, OBESITY)
- ADD_TRAIT(H, TRAIT_FAT, OBESITY)
- H.update_body()
- H.update_inv_w_uniform()
- H.update_inv_wear_suit()
- else if(H.fatness >= FATNESS_LEVEL_MORBIDLY_OBESE)
- to_chat(H, "You feel a lot fatter than before")
- REMOVE_TRAIT(H, TRAIT_OBESE, OBESITY)
- ADD_TRAIT(H, TRAIT_MORBIDLYOBESE, OBESITY)
- H.update_body()
- H.update_inv_w_uniform()
- H.update_inv_wear_suit()
- else if(HAS_TRAIT(H, TRAIT_MORBIDLYOBESE))
- if(H.fatness < FATNESS_LEVEL_MORBIDLY_OBESE)
- to_chat(H, "You feel a bit less fat!")
- REMOVE_TRAIT(H, TRAIT_MORBIDLYOBESE, OBESITY)
- ADD_TRAIT(H, TRAIT_OBESE, OBESITY)
- H.update_body()
- H.update_inv_w_uniform()
- H.update_inv_wear_suit()
- else if(H.fatness >= FATNESS_LEVEL_IMMOBILE)
- to_chat(H, "You feel your fat belly rubbing on the floor!")
- REMOVE_TRAIT(H, TRAIT_MORBIDLYOBESE, OBESITY)
- ADD_TRAIT(H, TRAIT_IMMOBILE, OBESITY)
- H.update_body()
- H.update_inv_w_uniform()
- H.update_inv_wear_suit()
- else if(HAS_TRAIT(H, TRAIT_IMMOBILE))
- if(H.fatness < FATNESS_LEVEL_IMMOBILE)
- to_chat(H, "You feel less restrained by your fat!")
- REMOVE_TRAIT(H, TRAIT_IMMOBILE, OBESITY)
- ADD_TRAIT(H, TRAIT_MORBIDLYOBESE, OBESITY)
- H.update_body()
- H.update_inv_w_uniform()
- H.update_inv_wear_suit()
- else if(H.fatness >= FATNESS_LEVEL_BLOB)
- to_chat(H, "You feel like you've become a mountain of fat!")
- REMOVE_TRAIT(H, TRAIT_IMMOBILE, OBESITY)
- ADD_TRAIT(H, TRAIT_BLOB, OBESITY)
- H.update_body()
- H.update_inv_w_uniform()
- H.update_inv_wear_suit()
- else if(HAS_TRAIT(H, TRAIT_BLOB))
- if(H.fatness < FATNESS_LEVEL_BLOB)
- to_chat(H, "You feel like you've regained some mobility!")
- REMOVE_TRAIT(H, TRAIT_BLOB, OBESITY)
- ADD_TRAIT(H, TRAIT_IMMOBILE, OBESITY)
- H.update_body()
- H.update_inv_w_uniform()
- H.update_inv_wear_suit()
+ var/obj/item/organ/genital/anus/anus = H.getorganslot("anus")
+ var/obj/item/organ/genital/belly/belly = H.getorganslot("belly")
+ var/obj/item/organ/genital/breasts/breasts = H.getorganslot("breasts")
+
+ update_genital_size(anus, size_change)
+ update_genital_size(belly, size_change)
+ update_breasts_size(breasts, size_change)
+
+ H.genital_override = TRUE
+ H.update_body()
+ H.update_inv_w_uniform()
+ H.update_inv_wear_suit()
+
+/datum/species/proc/update_genital_size(obj/item/organ/genital/G, size_change)
+ if (!G)
+ return
+
+ G.size = G.size + size_change
+ G.update()
+
+/datum/species/proc/update_breasts_size(obj/item/organ/genital/breasts/G, size_change)
+ if (!G)
+ return
+
+ G.cached_size = G.cached_size + size_change
+ G.update()
+
+/datum/species/proc/handle_fatness_trait(mob/living/carbon/human/H, trait, trait_lose, trait_gain, fatness_lose, fatness_gain, chat_lose, chat_gain)
+ if(H.fatness < fatness_lose)
+ if (chat_lose)
+ to_chat(H, chat_lose)
+ if (trait)
+ REMOVE_TRAIT(H, trait, OBESITY)
+ if (trait_lose)
+ ADD_TRAIT(H, trait_lose, OBESITY)
+ update_body_size(H, -1)
+ else if(H.fatness >= fatness_gain)
+ if (chat_gain)
+ to_chat(H, chat_gain)
+ if (trait)
+ REMOVE_TRAIT(H, trait, OBESITY)
+ if (trait_gain)
+ ADD_TRAIT(H, trait_gain, OBESITY)
+ update_body_size(H, 1)
+
+/datum/species/proc/handle_fatness(mob/living/carbon/human/H)
+ if(HAS_TRAIT(H, TRAIT_BLOB))
+ handle_fatness_trait(
+ H,
+ TRAIT_BLOB,
+ TRAIT_IMMOBILE,
+ null,
+ FATNESS_LEVEL_BLOB,
+ INFINITY,
+ "You feel like you've regained some mobility!",
+ null)
+ return
+ if(HAS_TRAIT(H, TRAIT_IMMOBILE))
+ handle_fatness_trait(
+ H,
+ TRAIT_IMMOBILE,
+ TRAIT_BARELYMOBILE,
+ TRAIT_BLOB,
+ FATNESS_LEVEL_IMMOBILE,
+ FATNESS_LEVEL_BLOB,
+ "You feel less restrained by your fat!",
+ "You feel like you've become a mountain of fat!")
+ return
+ if(HAS_TRAIT(H, TRAIT_BARELYMOBILE))
+ handle_fatness_trait(
+ H,
+ TRAIT_BARELYMOBILE,
+ TRAIT_EXTREMELYOBESE,
+ TRAIT_IMMOBILE,
+ FATNESS_LEVEL_BARELYMOBILE,
+ FATNESS_LEVEL_IMMOBILE,
+ "You feel less restrained by your fat!",
+ "You feel belly smush against the floor!")
+ return
+ if(HAS_TRAIT(H, TRAIT_EXTREMELYOBESE))
+ handle_fatness_trait(
+ H,
+ TRAIT_EXTREMELYOBESE,
+ TRAIT_MORBIDLYOBESE,
+ TRAIT_BARELYMOBILE,
+ FATNESS_LEVEL_EXTREMELY_OBESE,
+ FATNESS_LEVEL_BARELYMOBILE,
+ "You feel less restrained by your fat!",
+ "You feel like you can barely move!")
+ return
+ if(HAS_TRAIT(H, TRAIT_MORBIDLYOBESE))
+ handle_fatness_trait(
+ H,
+ TRAIT_MORBIDLYOBESE,
+ TRAIT_OBESE,
+ TRAIT_EXTREMELYOBESE,
+ FATNESS_LEVEL_MORBIDLY_OBESE,
+ FATNESS_LEVEL_EXTREMELY_OBESE,
+ "You feel a bit less fat!",
+ "You feel your belly rest heavily on your lap!")
+ return
+ if(HAS_TRAIT(H, TRAIT_OBESE))
+ handle_fatness_trait(
+ H,
+ TRAIT_OBESE,
+ TRAIT_VERYFAT,
+ TRAIT_MORBIDLYOBESE,
+ FATNESS_LEVEL_OBESE,
+ FATNESS_LEVEL_MORBIDLY_OBESE,
+ "You feel like you've lost weight!",
+ "Your thighs begin to rub against each other.")
+ return
+ if(HAS_TRAIT(H, TRAIT_VERYFAT))
+ handle_fatness_trait(
+ H,
+ TRAIT_VERYFAT,
+ TRAIT_FATTER,
+ TRAIT_OBESE,
+ FATNESS_LEVEL_VERYFAT,
+ FATNESS_LEVEL_OBESE,
+ "You feel like you've lost weight!",
+ "You feel like you're starting to get really heavy.")
+ return
+ if(HAS_TRAIT(H, TRAIT_FATTER))
+ handle_fatness_trait(
+ H,
+ TRAIT_FATTER,
+ TRAIT_FAT,
+ TRAIT_VERYFAT,
+ FATNESS_LEVEL_FATTER,
+ FATNESS_LEVEL_VERYFAT,
+ "You feel like you've lost weight!",
+ "Your clothes creak quietly!")
+ return
+ if(HAS_TRAIT(H, TRAIT_FAT))
+ handle_fatness_trait(
+ H,
+ TRAIT_FAT,
+ null,
+ TRAIT_FATTER,
+ FATNESS_LEVEL_FAT,
+ FATNESS_LEVEL_FATTER,
+ "You feel fit again!",
+ "You feel even plumper!")
else
- if(H.fatness >= FATNESS_LEVEL_FAT)
- to_chat(H, "You suddenly feel blubbery!")
- ADD_TRAIT(H, TRAIT_FAT, OBESITY)
- H.update_body()
- H.update_inv_w_uniform()
- H.update_inv_wear_suit()
-*/
+ handle_fatness_trait(
+ H,
+ null,
+ null,
+ TRAIT_FAT,
+ 0,
+ FATNESS_LEVEL_FAT,
+ null,
+ "You suddenly feel blubbery!")
+
/datum/species/proc/handle_digestion(mob/living/carbon/human/H)
- var/obj/item/organ/genital/anus/B = H.getorganslot("anus")
- var/obj/item/organ/genital/belly/C = H.getorganslot("belly")
- var/obj/item/organ/genital/breasts/D = H.getorganslot("breasts")
if(HAS_TRAIT(src, TRAIT_NOHUNGER))
return //hunger is for BABIES
- //The fucking TRAIT_FAT mutation is the dumbest shit ever. It makes the code so difficult to work with
- //gonna attempt to categorize these a bit to not make them a TINY bit less of an eyesore
- if(HAS_TRAIT(H, TRAIT_FAT))//I share your pain, past coder.
- if(H.fatness < FATNESS_LEVEL_FAT) //WEIGHT LOSS
- to_chat(H, "You feel fit again!")
- REMOVE_TRAIT(H, TRAIT_FAT, OBESITY)
- B.size = B.size - 1
- B.update()
- C.size = 0
- C.update()
- D.cached_size = D.cached_size - 1
- D.update()
- H.genital_override = TRUE
- H.update_body()
- H.update_inv_w_uniform()
- H.update_inv_wear_suit()
- else if(H.fatness >= FATNESS_LEVEL_FATTER) //WEIGHT GAIN
- to_chat(H, "You feel even plumper!")
- REMOVE_TRAIT(H, TRAIT_FAT, OBESITY)
- ADD_TRAIT(H, TRAIT_FATTER, OBESITY)
- B.size = B.size + 1
- B.update()
- C.size = C.size + 1
- C.update()
- D.cached_size = D.cached_size + 1
- D.update()
- H.genital_override = TRUE
- H.update_body()
- H.update_inv_w_uniform()
- H.update_inv_wear_suit()
- else if(HAS_TRAIT(H, TRAIT_FATTER)) //WEIGHT LOSS
- if(H.fatness < FATNESS_LEVEL_FATTER)
- to_chat(H, "You feel like you've lost weight!")
- REMOVE_TRAIT(H, TRAIT_FATTER, OBESITY)
- ADD_TRAIT(H, TRAIT_FAT, OBESITY)
- B.size = B.size - 1
- B.update()
- C.size = C.size - 1
- C.update()
- D.cached_size = D.cached_size - 1
- D.update()
- H.genital_override = TRUE
- H.update_body()
- H.update_inv_w_uniform()
- H.update_inv_wear_suit()
- else if(H.fatness >= FATNESS_LEVEL_VERYFAT) //WEIGHT GAIN
- to_chat(H, "Your clothes creak quietly!")
- REMOVE_TRAIT(H, TRAIT_FATTER, OBESITY)
- ADD_TRAIT(H, TRAIT_VERYFAT, OBESITY)
- B.size = B.size + 1
- B.update()
- C.size = C.size + 1
- C.update()
- D.cached_size = D.cached_size + 1
- D.update()
- H.genital_override = TRUE
- H.update_body()
- H.update_inv_w_uniform()
- H.update_inv_wear_suit()
- else if(HAS_TRAIT(H, TRAIT_VERYFAT)) //WEIGHT LOSS
- if(H.fatness < FATNESS_LEVEL_VERYFAT)
- to_chat(H, "You feel like you've lost weight!")
- REMOVE_TRAIT(H, TRAIT_VERYFAT, OBESITY)
- ADD_TRAIT(H, TRAIT_FATTER, OBESITY)
- B.size = B.size - 1
- B.update()
- C.size = C.size - 1
- C.update()
- D.cached_size = D.cached_size - 1
- D.update()
- H.genital_override = TRUE
- H.update_body()
- H.update_inv_w_uniform()
- H.update_inv_wear_suit()
- else if(H.fatness >= FATNESS_LEVEL_OBESE) //WEIGHT GAIN
- to_chat(H, "You feel like you're starting to get really heavy.")
- REMOVE_TRAIT(H, TRAIT_VERYFAT, OBESITY)
- ADD_TRAIT(H, TRAIT_OBESE, OBESITY)
- B.size = B.size + 1
- B.update()
- C.size = C.size + 1
- C.update()
- D.cached_size = D.cached_size + 1
- D.update()
- H.genital_override = TRUE
- H.update_body()
- H.update_inv_w_uniform()
- H.update_inv_wear_suit()
- else if(HAS_TRAIT(H, TRAIT_OBESE)) //WEIGHT LOSS
- if(H.fatness < FATNESS_LEVEL_OBESE)
- to_chat(H, "You feel like you've lost weight!")
- REMOVE_TRAIT(H, TRAIT_OBESE, OBESITY)
- ADD_TRAIT(H, TRAIT_VERYFAT, OBESITY)
- B.size = B.size - 1
- B.update()
- C.size = C.size - 1
- C.update()
- D.cached_size = D.cached_size - 1
- D.update()
- H.genital_override = TRUE
- H.update_body()
- H.update_inv_w_uniform()
- H.update_inv_wear_suit()
- else if(H.fatness >= FATNESS_LEVEL_MORBIDLY_OBESE) //WEIGHT GAIN
- to_chat(H, "Your thighs begin to rub against each other.")
- REMOVE_TRAIT(H, TRAIT_OBESE, OBESITY)
- ADD_TRAIT(H, TRAIT_MORBIDLYOBESE, OBESITY)
- B.size = B.size + 1
- B.update()
- C.size = C.size + 1
- C.update()
- D.cached_size = D.cached_size + 1
- D.update()
- H.genital_override = TRUE
- H.update_body()
- H.update_inv_w_uniform()
- H.update_inv_wear_suit()
- else if(HAS_TRAIT(H, TRAIT_MORBIDLYOBESE)) //WEIGHT LOSS
- if(H.fatness < FATNESS_LEVEL_MORBIDLY_OBESE)
- to_chat(H, "You feel a bit less fat!")
- REMOVE_TRAIT(H, TRAIT_MORBIDLYOBESE, OBESITY)
- ADD_TRAIT(H, TRAIT_OBESE, OBESITY)
- B.size = B.size - 1
- B.update()
- C.size = C.size - 1
- C.update()
- D.cached_size = D.cached_size - 1
- D.update()
- H.genital_override = TRUE
- H.update_body()
- H.update_inv_w_uniform()
- H.update_inv_wear_suit()
- else if(H.fatness >= FATNESS_LEVEL_EXTREMELY_OBESE) //WEIGHT GAIN
- to_chat(H, "You feel your belly rest heavily on your lap!")
- REMOVE_TRAIT(H, TRAIT_MORBIDLYOBESE, OBESITY)
- ADD_TRAIT(H, TRAIT_EXTREMELYOBESE, OBESITY)
- B.size = B.size + 1
- B.update()
- C.size = C.size + 1
- C.update()
- D.cached_size = D.cached_size + 1
- D.update()
- H.genital_override = TRUE
- H.update_body()
- H.update_inv_w_uniform()
- H.update_inv_wear_suit()
- else if(HAS_TRAIT(H, TRAIT_EXTREMELYOBESE)) //WEIGHT LOS
- if(H.fatness < FATNESS_LEVEL_EXTREMELY_OBESE)
- to_chat(H, "You feel less restrained by your fat!")
- REMOVE_TRAIT(H, TRAIT_EXTREMELYOBESE, OBESITY)
- ADD_TRAIT(H, TRAIT_MORBIDLYOBESE, OBESITY)
- B.size = B.size - 1
- B.update()
- C.size = C.size - 1
- C.update()
- D.cached_size = D.cached_size - 1
- D.update()
- H.genital_override = TRUE
- H.update_body()
- H.update_inv_w_uniform()
- H.update_inv_wear_suit()
- else if(H.fatness >= FATNESS_LEVEL_BARELYMOBILE) //WEIGHT GAIN
- to_chat(H, "You feel like you can barely move!")
- REMOVE_TRAIT(H, TRAIT_EXTREMELYOBESE, OBESITY)
- ADD_TRAIT(H, TRAIT_BARELYMOBILE, OBESITY)
- B.size = B.size + 1
- B.update()
- C.size = C.size + 1
- C.update()
- D.cached_size = D.cached_size + 1
- D.update()
- H.genital_override = TRUE
- H.update_body()
- H.update_inv_w_uniform()
- H.update_inv_wear_suit()
- else if(HAS_TRAIT(H, TRAIT_BARELYMOBILE)) //WEIGHT LOSS
- if(H.fatness < FATNESS_LEVEL_BARELYMOBILE)
- to_chat(H, "You feel less restrained by your fat!")
- REMOVE_TRAIT(H, TRAIT_BARELYMOBILE, OBESITY)
- ADD_TRAIT(H, TRAIT_EXTREMELYOBESE, OBESITY)
- B.size = B.size - 1
- B.update()
- C.size = C.size - 1
- C.update()
- D.cached_size = D.cached_size - 1
- D.update()
- H.genital_override = TRUE
- H.update_body()
- H.update_inv_w_uniform()
- H.update_inv_wear_suit()
- else if(H.fatness >= FATNESS_LEVEL_IMMOBILE) //WEIGHT GAIN
- to_chat(H, "You feel belly smush against the floor!")
- REMOVE_TRAIT(H, TRAIT_BARELYMOBILE, OBESITY)
- ADD_TRAIT(H, TRAIT_IMMOBILE, OBESITY)
- B.size = B.size + 1
- B.update()
- C.size = C.size + 1
- C.update()
- D.cached_size = D.cached_size + 1
- D.update()
- H.genital_override = TRUE
- H.update_body()
- H.update_inv_w_uniform()
- H.update_inv_wear_suit()
- else if(HAS_TRAIT(H, TRAIT_IMMOBILE)) //WEIGHT LOSS
- if(H.fatness < FATNESS_LEVEL_IMMOBILE)
- to_chat(H, "You feel less restrained by your fat!")
- REMOVE_TRAIT(H, TRAIT_IMMOBILE, OBESITY)
- ADD_TRAIT(H, TRAIT_BARELYMOBILE, OBESITY)
- B.size = B.size - 1
- B.update()
- C.size = C.size - 1
- C.update()
- D.cached_size = D.cached_size - 1
- D.update()
- H.genital_override = TRUE
- H.update_body()
- H.update_inv_w_uniform()
- H.update_inv_wear_suit()
- else if(H.fatness > FATNESS_LEVEL_BLOB) //WEIGHT GAIN
- to_chat(H, "You feel like you've become a mountain of fat!")
- REMOVE_TRAIT(H, TRAIT_IMMOBILE, OBESITY)
- ADD_TRAIT(H, TRAIT_BLOB, OBESITY)
- B.size = B.size + 1
- B.update()
- C.size = C.size + 1
- C.update()
- D.cached_size = D.cached_size + 1
- D.update()
- H.genital_override = TRUE
- H.update_body()
- H.update_inv_w_uniform()
- H.update_inv_wear_suit()
- else if(HAS_TRAIT(H, TRAIT_BLOB)) //WEIGHT LOSS
- if(H.fatness < FATNESS_LEVEL_BLOB)
- to_chat(H, "You feel like you've regained some mobility!")
- REMOVE_TRAIT(H, TRAIT_BLOB, OBESITY)
- ADD_TRAIT(H, TRAIT_IMMOBILE, OBESITY)
- B.size = B.size - 1
- B.update()
- C.size = C.size - 1
- C.update()
- D.cached_size = D.cached_size - 1
- D.update()
- H.genital_override = TRUE
- H.update_body()
- H.update_inv_w_uniform()
- H.update_inv_wear_suit()
- else
- if(H.fatness >= FATNESS_LEVEL_FAT) //WEIGHT GAIN
- to_chat(H, "You suddenly feel blubbery!")
- ADD_TRAIT(H, TRAIT_FAT, OBESITY)
- B.size = B.size + 1
- B.update()
- C.size = C.size + 1
- C.update()
- D.cached_size = D.cached_size + 1
- D.update()
- H.genital_override = TRUE
- H.update_body()
- H.update_inv_w_uniform()
- H.update_inv_wear_suit()
-
+ handle_fatness(H) // GS13
// nutrition decrease and satiety
if (H.nutrition > 0 && H.stat != DEAD && !HAS_TRAIT(H, TRAIT_NOHUNGER))