From b0d6c82c79675c69aec53c353fecfad6f613b2ae Mon Sep 17 00:00:00 2001 From: psq95 Date: Sat, 13 May 2023 23:49:50 +0100 Subject: [PATCH] Add procs to handle fatness Fix bug where belly would not change without butt enabled --- .../mob/living/carbon/human/species.dm | 502 ++++++------------ 1 file changed, 158 insertions(+), 344 deletions(-) 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))