diff --git a/GainStation13/code/modules/mob/living/species.dm b/GainStation13/code/modules/mob/living/species.dm index 10af3bf2ed..ca3e099e30 100644 --- a/GainStation13/code/modules/mob/living/species.dm +++ b/GainStation13/code/modules/mob/living/species.dm @@ -216,9 +216,31 @@ if(HAS_TRAIT_FROM(fatty, TRAIT_NO_BUCKLE, HELPLESSNESS_TRAIT)) REMOVE_TRAIT(fatty, TRAIT_NO_BUCKLE, HELPLESSNESS_TRAIT) +/datum/movespeed_modifier/fatness + id = "fat" + variable = TRUE /datum/species/proc/handle_fatness(mob/living/carbon/human/H) handle_helplessness(H) + + // update movement speed + var/fatness_delay = 0 + if(H.fatness && !HAS_TRAIT(H, TRAIT_NO_FAT_SLOWDOWN)) + fatness_delay = (H.fatness / FATNESS_DIVISOR) + fatness_delay = min(fatness_delay, FATNESS_MAX_MOVE_PENALTY) + + if(HAS_TRAIT(H, TRAIT_STRONGLEGS)) + fatness_delay = fatness_delay * FATNESS_STRONGLEGS_MODIFIER + + if(HAS_TRAIT(H, TRAIT_WEAKLEGS)) + if(H.fatness <= FATNESS_LEVEL_IMMOBILE) + fatness_delay += fatness_delay * FATNESS_WEAKLEGS_MODIFIER / 100 + if(H.fatness > FATNESS_LEVEL_IMMOBILE) + fatness_delay += (H.fatness / FATNESS_LEVEL_IMMOBILE) * FATNESS_WEAKLEGS_MODIFIER + fatness_delay = min(fatness_delay, 60) + + H.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/fatness, TRUE, fatness_delay) + if(HAS_TRAIT(H, TRAIT_BLOB)) handle_fatness_trait( H, diff --git a/code/__DEFINES/citadel_defines.dm b/code/__DEFINES/citadel_defines.dm index 245c39f367..d558b4bdcf 100644 --- a/code/__DEFINES/citadel_defines.dm +++ b/code/__DEFINES/citadel_defines.dm @@ -64,7 +64,7 @@ #define MILK_EFFICIENCY 1 #define BUTT_SIZE_DEF 1 -#define BUTT_SIZE_MAX 5 //butt genitals are special in that they have caps. if there's the event there's even bigger butt sprites, raise this number. +#define BUTT_SIZE_MAX 10 //butt genitals are special in that they have caps. if there's the event there's even bigger butt sprites, raise this number. #define BELLY_SIZE_DEF 0 #define BELLY_SIZE_MAX 10 diff --git a/code/datums/components/edible.dm b/code/datums/components/edible.dm index 3b4d8d7611..95ca5eaef6 100644 --- a/code/datums/components/edible.dm +++ b/code/datums/components/edible.dm @@ -99,10 +99,16 @@ Behavior that's still missing from this component that original food items had t return if(!CanConsume(eater, feeder)) return + var/fullness = eater.nutrition + 10 //The theoretical fullness of the person eating if they were to eat this for(var/datum/reagent/consumable/C in eater.reagents.reagent_list) //we add the nutrition value of what we're currently digesting fullness += C.nutriment_factor * C.volume / C.metabolization_rate + //GS13 Edit + var/mob/living/carbon/human/human_eater = eater + if(istype(human_eater)) + fullness = human_eater.fullness + . = COMPONENT_ITEM_NO_ATTACK //Point of no return I suppose if(eater == feeder)//If you're eating it yourself. @@ -112,15 +118,15 @@ Behavior that's still missing from this component that original food items had t if(junkiness && eater.satiety < -150 && eater.nutrition > NUTRITION_LEVEL_STARVING + 50 && !HAS_TRAIT(eater, TRAIT_VORACIOUS)) to_chat(eater, "You don't feel like eating any more junk food at the moment!") return - else if(fullness <= 50) + else if(fullness <= FULLNESS_LEVEL_HALF_FULL) eater.visible_message("[eater] hungrily [eatverb]s \the [parent], gobbling it down!", "You hungrily [eatverb] \the [parent], gobbling it down!") - else if(fullness > 50 && fullness < 150) + else if(fullness > FULLNESS_LEVEL_HALF_FULL && fullness < FULLNESS_LEVEL_FILLED) eater.visible_message("[eater] hungrily [eatverb]s \the [parent].", "You hungrily [eatverb] \the [parent].") - else if(fullness > 150 && fullness < 500) + else if(fullness > FULLNESS_LEVEL_FILLED && fullness < FULLNESS_LEVEL_BLOATED) eater.visible_message("[eater] [eatverb]s \the [parent].", "You [eatverb] \the [parent].") - else if(fullness > 500 && fullness < 600) + else if(fullness > FULLNESS_LEVEL_BLOATED && fullness < FULLNESS_LEVEL_BEEG) eater.visible_message("[eater] unwillingly [eatverb]s a bit of \the [parent].", "You unwillingly [eatverb] a bit of \the [parent].") - else if(fullness > (600 * (1 + eater.overeatduration / 2000))) // The more you eat - the more you can eat + else if(fullness > (FULLNESS_LEVEL_BEEG * (1 + eater.overeatduration / 2000))) // The more you eat - the more you can eat eater.visible_message("[eater] cannot force any more of \the [parent] to go down [eater.p_their()] throat!", "You cannot force any more of \the [parent] to go down your throat!") return else //If you're feeding it to someone else. @@ -153,6 +159,13 @@ Behavior that's still missing from this component that original food items had t if(eater.satiety > -200) eater.satiety -= junkiness playsound(eater.loc,'sound/items/eatfood.ogg', rand(10,50), TRUE) + var/mob/living/carbon/human/human_eater = eater + if(istype(human_eater)) + var/bitevolume = 1 + if(HAS_TRAIT(human_eater, TRAIT_VORACIOUS)) + bitevolume = bitevolume * 0.67 + human_eater.fullness += bitevolume; + if(owner.reagents.total_volume) SEND_SIGNAL(parent, COMSIG_FOOD_EATEN, eater, feeder) var/fraction = min(bite_consumption / owner.reagents.total_volume, 1) diff --git a/code/modules/arousal/genitals_sprite_accessories.dm b/code/modules/arousal/genitals_sprite_accessories.dm index d72c59f9af..33709f6e9e 100644 --- a/code/modules/arousal/genitals_sprite_accessories.dm +++ b/code/modules/arousal/genitals_sprite_accessories.dm @@ -126,7 +126,8 @@ //BUTT BE HERE /datum/sprite_accessory/butt - icon = 'icons/obj/genitals/butt_onmob.dmi' + //icon = 'icons/obj/genitals/butt_onmob.dmi' GS13 EDIT - ASS SPRITES + icon = 'hyperstation/icons/obj/genitals/butt.dmi' icon_state = "butt" name = "butt" color_src = "butt_color" diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index a39d374f5e..48b1d65b5a 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -113,9 +113,14 @@ All foods are distributed among various categories. Use common sense. if(!canconsume(M, user)) return FALSE + //GS13 EDIT, FULNESS var/fullness = M.nutrition + 10 - for(var/datum/reagent/consumable/C in M.reagents.reagent_list) //we add the nutrition value of what we're currently digesting - fullness += C.nutriment_factor * C.volume / C.metabolization_rate + //for(var/datum/reagent/consumable/C in M.reagents.reagent_list) //we add the nutrition value of what we're currently digesting + // fullness += C.nutriment_factor * C.volume / C.metabolization_rate + //GS13 Edit + var/mob/living/carbon/human/human_eater = M + if(istype(human_eater)) + fullness = human_eater.fullness if(M == user) //If you're eating it yourself. if(junkiness && M.satiety < -150 && M.nutrition > NUTRITION_LEVEL_STARVING + 50 ) @@ -123,18 +128,18 @@ All foods are distributed among various categories. Use common sense. return FALSE else if(fullness <= 50) user.visible_message("[user] hungrily takes a [eatverb] from \the [src], gobbling it down!", "You hungrily take a [eatverb] from \the [src], gobbling it down!") - else if(fullness > 50 && fullness < 150) + else if(fullness > FULLNESS_LEVEL_HALF_FULL && fullness < FULLNESS_LEVEL_FILLED) user.visible_message("[user] hungrily takes a [eatverb] from \the [src].", "You hungrily take a [eatverb] from \the [src].") - else if(fullness > 150 && fullness < 500) + else if(fullness > FULLNESS_LEVEL_FILLED && fullness < FULLNESS_LEVEL_BLOATED) user.visible_message("[user] takes a [eatverb] from \the [src].", "You take a [eatverb] from \the [src].") - else if(fullness > 500 && fullness < 600) + else if(fullness > FULLNESS_LEVEL_BLOATED && fullness < FULLNESS_LEVEL_BEEG) user.visible_message("[user] unwillingly takes a [eatverb] of a bit of \the [src].", "You unwillingly take a [eatverb] of a bit of \the [src].") - else if(fullness > (600 * (1 + M.overeatduration / 2000))) // The more you eat - the more you can eat + else if(fullness > (FULLNESS_LEVEL_BEEG * (1 + M.overeatduration / 2000))) // The more you eat - the more you can eat user.visible_message("[user] cannot force any more of \the [src] to go down [user.p_their()] throat!", "You cannot force any more of \the [src] to go down your throat!") return FALSE else if(!isbrain(M)) //If you're feeding it to someone else. - if(fullness <= (600 * (1 + M.overeatduration / 1000))) + if(fullness <= (FULLNESS_LEVEL_BEEG * (1 + M.overeatduration / 1000))) M.visible_message("[user] attempts to feed [M] [src].", \ "[user] attempts to feed [M] [src].") else @@ -156,6 +161,12 @@ All foods are distributed among various categories. Use common sense. if(M.satiety > -200) M.satiety -= junkiness playsound(M.loc,'sound/items/eatfood.ogg', rand(10,50), 1) + var/bitevolume = 1 + if(HAS_TRAIT(M, TRAIT_VORACIOUS)) + bitevolume = bitevolume * 0.67 + if(istype(human_eater)) + human_eater.fullness += bitevolume; + if(reagents.total_volume) SEND_SIGNAL(src, COMSIG_FOOD_EATEN, M, user) var/fraction = min(bitesize / reagents.total_volume, 1) diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm index 958a8b599a..fa724556dd 100644 --- a/code/modules/mob/living/carbon/examine.dm +++ b/code/modules/mob/living/carbon/examine.dm @@ -118,6 +118,42 @@ if(7 to INFINITY) msg += "[t_He] [t_is] just absolutely fucked up, you can look again to take a closer look...\n" + //GS13 EDIT FAT EXAMINE + switch(fullness) + if(FULLNESS_LEVEL_BLOATED to FULLNESS_LEVEL_BEEG) + msg += "[t_He] look[p_s()] like [t_He] ate a bit too much.\n" + if(FULLNESS_LEVEL_BEEG to FULLNESS_LEVEL_NOMOREPLZ) + msg += "[t_His] stomach looks very round and very full.\n" + if(FULLNESS_LEVEL_NOMOREPLZ to INFINITY) + msg += "[t_His] stomach has been stretched to enormous proportions.\n" + + if(nutrition < NUTRITION_LEVEL_STARVING - 50) + msg += "[t_He] [t_is] severely malnourished.\n" + + if(fatness >= FATNESS_LEVEL_BLOB) + msg += "[t_He] [t_is] completely engulfed in rolls upon rolls of flab. [t_His] head is poking out on top of [t_His] body, akin to a marble on top of a hill.\n" + + else if(fatness >= FATNESS_LEVEL_IMMOBILE) + msg += "[t_His] body is buried in an overflowing surplus of adipose, and [t_His] legs are completely buried beneath layers of meaty, obese flesh.\n" + + else if(fatness >= FATNESS_LEVEL_BARELYMOBILE) + msg += "[t_He] [t_is] as wide as [t_He] [t_is] tall, barely able to move [t_His] masssive body that seems to be overtaken with piles of flab.\n" + + else if(fatness >= FATNESS_LEVEL_EXTREMELY_OBESE) + msg += "[t_He] [t_is] ripe with numerous rolls of fat, almost all of [t_His] body layered with adipose.\n" + + else if(fatness >= FATNESS_LEVEL_MORBIDLY_OBESE) + msg += "[t_He] [t_is] utterly stuffed with abundant lard, [t_He] doesn't seem to be able to move much.\n" + + else if(fatness >= FATNESS_LEVEL_OBESE) + msg += "[t_He] [t_is] engorged with fat, [t_His] body laden in rolls of fattened flesh.\n" + + else if(fatness >= FATNESS_LEVEL_VERYFAT) + msg += "[t_He] [t_is] pleasantly plushy, [t_His] body gently wobbling whenever they move. \n" + + else if(fatness >= FATNESS_LEVEL_FATTER) + msg += "[t_He] [t_is] soft and curvy, [t_His] belly looking like a small pillow.\n" + if(msg.len) . += "[msg.Join("")]" diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 68d68f3d92..465b6d768d 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1545,13 +1545,31 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) hunger_rate *= H.physiology.hunger_mod H.adjust_nutrition(-hunger_rate) - +/* if (H.nutrition > NUTRITION_LEVEL_FULL) if(H.overeatduration < 600) //capped so people don't take forever to unfat H.overeatduration++ else if(H.overeatduration > 1) H.overeatduration -= 2 //doubled the unfat rate +*/ + if (H.nutrition > NUTRITION_LEVEL_FULL) + // fatConversionRate is functionally useless. It seems under normal curcumstances, each tick only processes, at most, 1 nutrition anyway. reducing the value has no effect. + var/fatConversionRate = 100 //GS13 what percentage of the excess nutrition should go to fat (total nutrition to transfer can't be under 1) + var/nutritionThatBecomesFat = max((H.nutrition - NUTRITION_LEVEL_FULL)*(fatConversionRate / 100),1) + H.nutrition -= nutritionThatBecomesFat + H.adjust_fatness(nutritionThatBecomesFat, FATTENING_TYPE_FOOD) + if(H.fullness > FULLNESS_LEVEL_EMPTY)//GS13 stomach-emptying routine + var/ticksToEmptyStomach = 20 // GS13 how many ticks it takes to decrease the fullness by 1 + if(HAS_TRAIT(H, TRAIT_VORACIOUS)) + ticksToEmptyStomach = ticksToEmptyStomach * 0.5 + H.fullness -= 1/ticksToEmptyStomach + if (H.fullness > FULLNESS_LEVEL_BLOATED) //GS13 overeating depends on fullness now + if(H.overeatduration < 5000) //capped so people don't take forever to unfat + H.overeatduration++ + else + if(H.overeatduration > 1) + H.overeatduration -= 1 //doubled the unfat rate -- GS13 Nah, put it back //metabolism change if(H.nutrition > NUTRITION_LEVEL_FAT) diff --git a/config/entries/fetish_content.txt b/config/entries/fetish_content.txt index 1bc9ebe968..b3448b3b30 100644 --- a/config/entries/fetish_content.txt +++ b/config/entries/fetish_content.txt @@ -14,7 +14,7 @@ PENIS_MAX_INCHES_PREFS 24 ## Minimum and maximum limits for butt size from the character creation menu. If there's bigger butt sizes out there, change the max accordingly. BUTT_MIN_SIZE_PREFS 1 -BUTT_MAX_SIZE_PREFS 5 +BUTT_MAX_SIZE_PREFS 10 ## Body size configs, the feature will be disabled if both min and max have the same value. BODY_SIZE_MIN 0.9 diff --git a/hyperstation/icons/obj/genitals/butt.dmi b/hyperstation/icons/obj/genitals/butt.dmi index 713c0e1804..8f1a153761 100644 Binary files a/hyperstation/icons/obj/genitals/butt.dmi and b/hyperstation/icons/obj/genitals/butt.dmi differ diff --git a/icons/obj/genitals/butt.dmi b/icons/obj/genitals/butt.dmi index 304a8424bb..b4726bf8c2 100644 Binary files a/icons/obj/genitals/butt.dmi and b/icons/obj/genitals/butt.dmi differ diff --git a/tools/build/build.js b/tools/build/build.js index f8d3a9a7dd..c75a65327a 100755 --- a/tools/build/build.js +++ b/tools/build/build.js @@ -61,6 +61,9 @@ export const DmTarget = new Juke.Target({ 'html/**', 'icons/**', 'interface/**', + 'modular_citadel/**', // GS13 EDIT + 'hyperstation/**', // GS13 EDIT + 'GainStation13/**', // GS13 EDIT `${DME_NAME}.dme`, ], outputs: [