diff --git a/GainStation13/code/mechanics/fatness.dm b/GainStation13/code/mechanics/fatness.dm index 69041e12..82c5dd31 100644 --- a/GainStation13/code/mechanics/fatness.dm +++ b/GainStation13/code/mechanics/fatness.dm @@ -11,6 +11,8 @@ GLOBAL_LIST_INIT(uncapped_resize_areas, list(/area/bridge, /area/crew_quarters, var/fat_hiders = list() //The actual value a mob is at. Is equal to fatness if fat_hider is FALSE. var/fatness_real = 0 + //Permanent fatness, which sticks around between rounds + var/fatness_perma = 0 ///At what rate does the parent mob gain weight? 1 = 100% var/weight_gain_rate = 1 //At what rate does the parent mob lose weight? 1 = 100% @@ -48,7 +50,9 @@ GLOBAL_LIST_INIT(uncapped_resize_areas, list(/area/bridge, /area/crew_quarters, fatness = fatness_real //Make their current fatness their real fatness - hiders_apply() //Check and apply hiders, XWG is there too + hiders_apply() //Check and apply hiders + perma_apply() //Check and apply for permanent fat + xwg_resize() //Apply XWG return TRUE @@ -134,24 +138,57 @@ GLOBAL_LIST_INIT(uncapped_resize_areas, list(/area/bridge, /area/crew_quarters, /mob/living/carbon/proc/hiders_apply() if(fat_hiders) //do we have any hiders active? var/fatness_over = hiders_calc() //calculate the sum of all hiders + fatness = fatness + fatness_over //Then, make their current fatness the sum of their real plus/minus the calculated amount if(client?.prefs?.max_weight) //Check their prefs - fatness_over = min(fatness_over, (client?.prefs?.max_weight - 1)) //And make sure it's not above their preferred max - fatness = fatness_real + fatness_over //Then, make their current fatness the sum of their real plus/minus the calculated amount - if(client?.prefs?.weight_gain_extreme && !normalized) - xwg_resize() + fatness = min(fatness, (client?.prefs?.max_weight - 1)) //And make sure it's not above their preferred max + +/mob/living/carbon/proc/perma_apply() + if(fatness_perma > 0) //Check if we need to make calcs at all + fatness = fatness + fatness_perma //Add permanent fat to fatness + if(client?.prefs?.max_weight) //Check for max weight prefs + fatness = min(fatness, (client?.prefs?.max_weight - 1)) //Apply max weight prefs + +/mob/living/carbon/proc/adjust_perma(adjustment_amount, type_of_fattening = FATTENING_TYPE_ITEM) + if(!client) + return FALSE + if(!client.prefs.weight_gain_permanent) + return FALSE + + if(!adjustment_amount || !type_of_fattening) + return FALSE + + if(!HAS_TRAIT(src, TRAIT_UNIVERSAL_GAINER) && client?.prefs) + if(!check_weight_prefs(type_of_fattening)) + return FALSE + var/amount_to_change = adjustment_amount + + if(adjustment_amount > 0) + amount_to_change = amount_to_change * weight_gain_rate + else + amount_to_change = amount_to_change * weight_loss_rate + + fatness_perma += amount_to_change + fatness_perma = max(fatness_perma, MINIMUM_FATNESS_LEVEL) + + if(client?.prefs?.max_weight) // GS13 + fatness_perma = min(fatness_perma, (client?.prefs?.max_weight - 1)) /mob/living/carbon/human/handle_breathing(times_fired) . = ..() + fatness = fatness_real hiders_apply() + perma_apply() + xwg_resize() /mob/living/carbon/proc/xwg_resize() - var/xwg_size = sqrt(fatness/FATNESS_LEVEL_BLOB) - xwg_size = min(xwg_size, RESIZE_MACRO) - xwg_size = max(xwg_size, custom_body_size*0.01) - if(xwg_size > RESIZE_BIG) //check if the size needs capping otherwise don't bother searching the list - if(!is_type_in_list(get_area(src), GLOB.uncapped_resize_areas)) //if the area is not int the uncapped whitelist and new size is over the cap - xwg_size = RESIZE_BIG - resize(xwg_size) + if(client?.prefs?.weight_gain_extreme && !normalized) + var/xwg_size = sqrt(fatness/FATNESS_LEVEL_BLOB) + xwg_size = min(xwg_size, RESIZE_MACRO) + xwg_size = max(xwg_size, custom_body_size*0.01) + if(xwg_size > RESIZE_BIG) //check if the size needs capping otherwise don't bother searching the list + if(!is_type_in_list(get_area(src), GLOB.uncapped_resize_areas)) //if the area is not int the uncapped whitelist and new size is over the cap + xwg_size = RESIZE_BIG + resize(xwg_size) /proc/get_fatness_level_name(fatness_amount) if(fatness_amount < FATNESS_LEVEL_FAT) diff --git a/GainStation13/code/mechanics/permanent_fat.dm b/GainStation13/code/mechanics/permanent_fat.dm new file mode 100644 index 00000000..74471024 --- /dev/null +++ b/GainStation13/code/mechanics/permanent_fat.dm @@ -0,0 +1,18 @@ +/datum/preferences/proc/perma_fat_save(character) + if(iscarbon(character)) + var/mob/living/carbon/C = character + if(!path) + return 0 + if(world.time < savecharcooldown) + if(istype(parent)) + to_chat(parent, "You're attempting to save your character a little too fast. Wait half a second, then try again.") + + return 0 + + savecharcooldown = world.time + PREF_SAVELOAD_COOLDOWN + var/savefile/S = new /savefile(path) + if(!S) + return 0 + S.cd = "/character[default_slot]" + + WRITE_FILE(S["permanent_fat"] , C.fatness_perma) diff --git a/GainStation13/code/modules/client/preferences/preferences.dm b/GainStation13/code/modules/client/preferences/preferences.dm index d7d2ce81..99a0f618 100644 --- a/GainStation13/code/modules/client/preferences/preferences.dm +++ b/GainStation13/code/modules/client/preferences/preferences.dm @@ -19,6 +19,8 @@ var/blueberry_inflation = FALSE ///Extreme weight gain var/weight_gain_extreme = FALSE + ///Permanent weight gain + var/weight_gain_permanent = FALSE /// At what weight will you start to get stuck in airlocks? var/stuckage = FALSE /// At what weight will you start to break chairs? diff --git a/GainStation13/code/modules/reagents/chemistry/reagents/fermi_fat.dm b/GainStation13/code/modules/reagents/chemistry/reagents/fermi_fat.dm new file mode 100644 index 00000000..93242535 --- /dev/null +++ b/GainStation13/code/modules/reagents/chemistry/reagents/fermi_fat.dm @@ -0,0 +1,186 @@ +///datum/reagent/sizechem + +//Reagent +/datum/reagent/fermi_fat + name = "Galbanic Compound" + description = "A chemical compound derived from lipoifier. Massively increases adipose mass and parts of it become impossible to shed through normal means." + color = "#E70C0C" + taste_description = "hunger" + pH = 7 + overdose_threshold = 50 + metabolization_rate = REAGENTS_METABOLISM / 4 + can_synth = FALSE //DO NOT MAKE THIS SNYTHESIZABLE, THESE CHEMS ARE SUPPOSED TO NOT BE USED COMMONLY + + overdose_threshold = 50 + addiction_threshold = 100 + addiction_stage1_end = 10 + addiction_stage2_end = 30 + addiction_stage3_end = 60 + addiction_stage4_end = 100 + + var/addiction_mults = 0 + +//Reaction +/datum/chemical_reaction/fermi_fat + name = "FermiFat" + id = /datum/reagent/fermi_fat + mix_message = "the reaction appears to swell!" + required_reagents = list(/datum/reagent/consumable/lipoifier = 0.1, /datum/reagent/medicine/pen_acid = 0.1, /datum/reagent/iron = 0.1) + results = list(/datum/reagent/fermi_fat = 0.2) + required_temp = 1 + OptimalTempMin = 700 // Lower area of bell curve for determining heat based rate reactions + OptimalTempMax = 740 // Upper end for above + ExplodeTemp = 755 // Temperature at which reaction explodes + OptimalpHMin = 2 // Lowest value of pH determining pH a 1 value for pH based rate reactions (Plateu phase) + OptimalpHMax = 3.5 // Higest value for above + ReactpHLim = 1 // How far out pH wil react, giving impurity place (Exponential phase) + CatalystFact = 0 // How much the catalyst affects the reaction (0 = no catalyst) + CurveSharpT = 4 // How sharp the temperature exponential curve is (to the power of value) + CurveSharppH = 4 // How sharp the pH exponential curve is (to the power of value) + ThermicConstant = -10 // Temperature change per 1u produced + HIonRelease = 0.02 // pH change per 1u reaction (inverse for some reason) + RateUpLim = 2 // Optimal/max rate possible if all conditions are perfect + FermiChem = TRUE // If the chemical uses the Fermichem reaction mechanics + FermiExplode = FALSE // If the chemical explodes in a special way + PurityMin = 0.1 + +//When added +/datum/reagent/fermi_fat/on_mob_add(mob/living/carbon/M) + . = ..() + if(iscarbon(M)) + log_game("[M] ckey: [M.key] has ingested fermifat.") + +//Effects +/datum/reagent/fermi_fat/on_mob_life(mob/living/carbon/M) + if(!iscarbon(M)) + return..() + M.adjust_fatness(30, FATTENING_TYPE_CHEM) + M.adjust_perma(1, FATTENING_TYPE_CHEM) + ..() + . = 1 + +//While overdosed +/datum/reagent/fermi_fat/overdose_process(mob/living/M) + if(!iscarbon(M)) + return..() + var/mob/living/carbon/C = M + C.adjust_fatness(20, FATTENING_TYPE_CHEM) + C.adjust_perma(1, FATTENING_TYPE_CHEM) + ..() + +/datum/reagent/fermi_fat/overdose_start(mob/living/M) + to_chat(M, "You took too much [name]! Your body is growing out of control!") + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[type]_overdose", /datum/mood_event/overdose, name) + return + +/datum/reagent/fermi_fat/addiction_act_stage1(mob/living/M) + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[type]_overdose", /datum/mood_event/withdrawal_light, name) + if(prob(30)) + var/add_text = pick("You feel pretty hungry.", "You think of [name].", "Your look around for food.", "[name] wasn't so bad.") + to_chat(M, "[add_text]") + if(iscarbon(M)) + var/mob/living/carbon/C = M + C.adjust_fatness(1, FATTENING_TYPE_CHEM) + C.fullness = max(0, C.fullness-1) + C.nutrition = max(0, C.nutrition-1) + if(addiction_mults == 0) + C.nutri_mult += 0.5 + C.weight_gain_rate += 0.25 + addiction_mults = 1 + return + +/datum/reagent/fermi_fat/addiction_act_stage2(mob/living/M) + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[type]_overdose", /datum/mood_event/withdrawal_medium, name) + if(prob(30)) + var/add_text = pick("You are very hungry.", "You could go for some [name].", "Your mouth waters.", "Is there any [name] around?") + to_chat(M, "[add_text]") + if(iscarbon(M)) + var/mob/living/carbon/C = M + C.adjust_fatness(2, FATTENING_TYPE_CHEM) + C.fullness = max(0, C.fullness-2) + C.nutrition = max(0, C.nutrition-2) + if(addiction_mults <= 1) + C.nutri_mult += 0.5 + C.weight_gain_rate += 0.25 + addiction_mults = 2 + return + +/datum/reagent/fermi_fat/addiction_act_stage3(mob/living/M) + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[type]_overdose", /datum/mood_event/withdrawal_severe, name) + if(prob(30)) + var/add_text = pick("You are starving!", "You need some [name]!", "Your stomach growls loudly!.", "You can't stop thinking about [name]") + to_chat(M, "[add_text]") + if(iscarbon(M)) + var/mob/living/carbon/C = M + C.adjust_fatness(3, FATTENING_TYPE_CHEM) + C.fullness = max(0, C.fullness-3) + C.nutrition = max(0, C.nutrition-3) + if(addiction_mults <= 2) + C.nutri_mult += 0.5 + C.weight_gain_rate += 0.25 + addiction_mults = 3 + return + +/datum/reagent/fermi_fat/addiction_act_stage4(mob/living/M) + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[type]_overdose", /datum/mood_event/withdrawal_critical, name) + if(prob(30)) + var/add_text = pick("You are ravenous!!", "You need [name] NOW!!", "You'd eat ANYTHING!!", "Where is the [name]?!", "Hungry, hungry, so HUNGRY!!", "More, you need more!!") + to_chat(M, "[add_text]") + if(iscarbon(M)) + var/mob/living/carbon/C = M + C.adjust_fatness(4, FATTENING_TYPE_CHEM) + C.fullness = max(0, C.fullness-4) + C.nutrition = max(0, C.nutrition-4) + if(addiction_mults <= 3) + C.nutri_mult += 0.5 + C.weight_gain_rate += 0.25 + addiction_mults = 4 + return + +/datum/reagent/fermi_fat/proc/addiction_remove(mob/living/carbon/C) + if(addiction_mults > 0) + C.nutri_mult = max(1, 0.5 * addiction_mults) + C.weight_gain_rate = max(0,11, 0.25 * addiction_mults) + return + +/datum/reagent/fermi_slim + name = "Macerinic Solution" + description = "A solution with unparalleled obesity-solving properties. One of the few things known to be capable of removing galbanic fat." + color = "#3b0ce7" + taste_description = "thinness" + pH = 7 + metabolization_rate = REAGENTS_METABOLISM / 4 + can_synth = FALSE + +//Reaction +/datum/chemical_reaction/fermi_slim + name = "FermiSlim" + id = /datum/reagent/fermi_slim + mix_message = "the reaction seems to become thinner!" + required_reagents = list(/datum/reagent/medicine/lipolicide = 0.1, /datum/reagent/ammonia = 0.1, /datum/reagent/oxygen = 0.1) + results = list(/datum/reagent/fermi_slim = 0.2) + required_temp = 1 + OptimalTempMin = 600 // Lower area of bell curve for determining heat based rate reactions + OptimalTempMax = 650 // Upper end for above + ExplodeTemp = 700 // Temperature at which reaction explodes + OptimalpHMin = 10 // Lowest value of pH determining pH a 1 value for pH based rate reactions (Plateu phase) + OptimalpHMax = 11.5 // Higest value for above + ReactpHLim = 1 // How far out pH wil react, giving impurity place (Exponential phase) + CatalystFact = 0 // How much the catalyst affects the reaction (0 = no catalyst) + CurveSharpT = 4 // How sharp the temperature exponential curve is (to the power of value) + CurveSharppH = 4 // How sharp the pH exponential curve is (to the power of value) + ThermicConstant = -10 // Temperature change per 1u produced + HIonRelease = -0.02 // pH change per 1u reaction (inverse for some reason) + RateUpLim = 2 // Optimal/max rate possible if all conditions are perfect + FermiChem = TRUE // If the chemical uses the Fermichem reaction mechanics + FermiExplode = FALSE // If the chemical explodes in a special way + PurityMin = 0.1 + +//Effects +/datum/reagent/fermi_slim/on_mob_life(mob/living/carbon/M) + if(!iscarbon(M)) + return..() + M.adjust_fatness(-50, FATTENING_TYPE_CHEM) + M.adjust_perma(-5, FATTENING_TYPE_CHEM) + ..() + . = 1 diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index 8887ae00..f3ca9244 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -3,6 +3,13 @@ #define POPCOUNT_SHUTTLE_ESCAPEES "shuttle_escapees" //Emergency shuttle only. /datum/controller/subsystem/ticker/proc/gather_roundend_feedback() + + //GS13 Process permanent fat + for(var/mob/m in GLOB.player_list) + if(m.client.prefs) + if(m.client.ckey) + m.client.prefs.perma_fat_save(m) + gather_antag_data() record_nuke_disk_location() var/json_file = file("[GLOB.log_directory]/round_end_data.json") diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index a3c41df0..8be93308 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -105,6 +105,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) //GS13 var/starting_weight = 0 //how thicc you wanna be at start + var/permanent_fat = 0 //If it isn't the consequences of your own actions var/wg_rate = 0.5 var/wl_rate = 0.5 var/voice = "human" @@ -1076,6 +1077,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "This preference functions similar to the one before but allows for items with more drastic effects. Do not enable this if you aren't okay with more drastic things happening to your character.
" dat += "Extreme Fatness Vulnerability:[extreme_fatness_vulnerable == TRUE ? "Enabled" : "Disabled"]
" dat += "Extreme Weight Gain (Sprite Size scales with weight):[weight_gain_extreme == TRUE ? "Enabled" : "Disabled"]
" + dat += "Weight Gain Permanent (special weight persists between rounds):[weight_gain_permanent == TRUE ? "Enabled" : "Disabled"]
" dat += "

GS13 Helplessness Preferences

" dat += "Please be careful when using these mechanics as not to use them in a way that negatively impacts those around you. If you are seriously needed for something, especially something station critical, do not use these as an excuse to ignore your duty.

" @@ -2665,6 +2667,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) weight_gain_nanites = !weight_gain_nanites if("weight_gain_extreme") weight_gain_extreme = !weight_gain_extreme + if("weight_gain_permanent") + weight_gain_permanent = !weight_gain_permanent if("noncon_weight_gain") noncon_weight_gain = !noncon_weight_gain if("bot_feeding") @@ -2997,6 +3001,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) //GS13 character.fatness = starting_weight character.fatness_real = starting_weight + character.fatness_perma = permanent_fat character.weight_gain_rate = wg_rate character.weight_loss_rate = wl_rate diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 1e4841ed..f669a2ea 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -146,36 +146,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["importantroles"] >> importantroles S["pins"] >> pins - //GS13 code - S["weight_gain_food"] >> weight_gain_food - S["weight_gain_chems"] >> weight_gain_chems - S["weight_gain_items"] >> weight_gain_items - S["weight_gain_magic"] >> weight_gain_magic - S["weight_gain_viruses"] >> weight_gain_viruses - S["weight_gain_nanites"] >> weight_gain_nanites - S["weight_gain_weapons"] >> weight_gain_weapons - S["weight_gain_extreme"] >> weight_gain_extreme - S["wg_rate"] >> wg_rate - S["wl_rate"] >> wl_rate - S["noncon_weight_gain"] >> noncon_weight_gain - S["bot_feeding"] >> bot_feeding - S["max_weight"] >> max_weight - S["helplessness_no_movement"] >> helplessness_no_movement - S["helplessness_clumsy"] >> helplessness_clumsy - S["helplessness_nearsighted"] >> helplessness_nearsighted - S["helplessness_hidden_face"] >> helplessness_hidden_face - S["helplessness_mute"] >> helplessness_mute - S["helplessness_immobile_arms"] >> helplessness_immobile_arms - S["helplessness_clothing_jumpsuit"] >> helplessness_clothing_jumpsuit - S["helplessness_clothing_misc"] >> helplessness_clothing_misc - S["helplessness_clothing_back"] >> helplessness_clothing_back - S["helplessness_no_buckle"] >> helplessness_no_buckle - S["stuckage"] >> stuckage - S["chair_breakage"] >> chair_breakage - S["fatness_vulnerable"] >> fatness_vulnerable - S["extreme_fatness_vulnerable"] >> extreme_fatness_vulnerable - S["blueberry_inflation"] >> blueberry_inflation - //try to fix any outdated data if necessfary if(needs_update >= 0) @@ -303,35 +273,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //Hyper WRITE_FILE(S["noncon"], noncon) WRITE_FILE(S["pins"], pins) - //GS13 - WRITE_FILE(S["weight_gain_food"], weight_gain_food) - WRITE_FILE(S["weight_gain_items"], weight_gain_items) - WRITE_FILE(S["weight_gain_magic"], weight_gain_magic) - WRITE_FILE(S["weight_gain_viruses"], weight_gain_viruses) - WRITE_FILE(S["weight_gain_nanites"], weight_gain_nanites) - WRITE_FILE(S["weight_gain_chems"], weight_gain_chems) - WRITE_FILE(S["weight_gain_weapons"], weight_gain_weapons) - WRITE_FILE(S["weight_gain_extreme"], weight_gain_extreme) - WRITE_FILE(S["wg_rate"], wg_rate) - WRITE_FILE(S["wl_rate"], wl_rate) - WRITE_FILE(S["noncon_weight_gain"], noncon_weight_gain) - WRITE_FILE(S["bot_feeding"], bot_feeding) - WRITE_FILE(S["max_weight"], max_weight) - WRITE_FILE(S["helplessness_no_movement"], helplessness_no_movement) - WRITE_FILE(S["helplessness_clumsy"], helplessness_clumsy) - WRITE_FILE(S["helplessness_nearsighted"], helplessness_nearsighted) - WRITE_FILE(S["helplessness_hidden_face"], helplessness_hidden_face) - WRITE_FILE(S["helplessness_mute"], helplessness_mute) - WRITE_FILE(S["helplessness_immobile_arms"], helplessness_immobile_arms) - WRITE_FILE(S["helplessness_clothing_jumpsuit"], helplessness_clothing_jumpsuit) - WRITE_FILE(S["helplessness_clothing_misc"], helplessness_clothing_misc) - WRITE_FILE(S["helplessness_clothing_back"], helplessness_clothing_back) - WRITE_FILE(S["helplessness_no_buckle"], helplessness_no_buckle) - WRITE_FILE(S["stuckage"], stuckage) - WRITE_FILE(S["chair_breakage"], chair_breakage) - WRITE_FILE(S["fatness_vulnerable"], fatness_vulnerable) - WRITE_FILE(S["extreme_fatness_vulnerable"], extreme_fatness_vulnerable) - WRITE_FILE(S["blueberry_inflation"], blueberry_inflation) return 1 @@ -392,6 +333,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["age"] >> age S["body_size"] >> body_size S["starting_weight"] >> starting_weight + S["permanent_fat"] >> permanent_fat S["wg_rate"] >> wg_rate S["wl_rate"] >> wl_rate S["hair_color"] >> hair_color @@ -544,6 +486,37 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car else S["feature_ooc_text"] >> features["ooc_text"] + //GS13 code preferences + S["weight_gain_food"] >> weight_gain_food + S["weight_gain_chems"] >> weight_gain_chems + S["weight_gain_items"] >> weight_gain_items + S["weight_gain_magic"] >> weight_gain_magic + S["weight_gain_viruses"] >> weight_gain_viruses + S["weight_gain_nanites"] >> weight_gain_nanites + S["weight_gain_weapons"] >> weight_gain_weapons + S["weight_gain_extreme"] >> weight_gain_extreme + S["weight_gain_permanent"] >> weight_gain_permanent + S["wg_rate"] >> wg_rate + S["wl_rate"] >> wl_rate + S["noncon_weight_gain"] >> noncon_weight_gain + S["bot_feeding"] >> bot_feeding + S["max_weight"] >> max_weight + S["helplessness_no_movement"] >> helplessness_no_movement + S["helplessness_clumsy"] >> helplessness_clumsy + S["helplessness_nearsighted"] >> helplessness_nearsighted + S["helplessness_hidden_face"] >> helplessness_hidden_face + S["helplessness_mute"] >> helplessness_mute + S["helplessness_immobile_arms"] >> helplessness_immobile_arms + S["helplessness_clothing_jumpsuit"] >> helplessness_clothing_jumpsuit + S["helplessness_clothing_misc"] >> helplessness_clothing_misc + S["helplessness_clothing_back"] >> helplessness_clothing_back + S["helplessness_no_buckle"] >> helplessness_no_buckle + S["stuckage"] >> stuckage + S["chair_breakage"] >> chair_breakage + S["fatness_vulnerable"] >> fatness_vulnerable + S["extreme_fatness_vulnerable"] >> extreme_fatness_vulnerable + S["blueberry_inflation"] >> blueberry_inflation + //try to fix any outdated data if necessary if(needs_update >= 0) update_character(needs_update, S) //needs_update == savefile_version if we need an update (positive integer) @@ -732,6 +705,37 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["hide_ckey"] , hide_ckey) WRITE_FILE(S["all_quirks"] , all_quirks) + //GS13 PREFS + WRITE_FILE(S["weight_gain_food"], weight_gain_food) + WRITE_FILE(S["weight_gain_items"], weight_gain_items) + WRITE_FILE(S["weight_gain_magic"], weight_gain_magic) + WRITE_FILE(S["weight_gain_viruses"], weight_gain_viruses) + WRITE_FILE(S["weight_gain_nanites"], weight_gain_nanites) + WRITE_FILE(S["weight_gain_chems"], weight_gain_chems) + WRITE_FILE(S["weight_gain_weapons"], weight_gain_weapons) + WRITE_FILE(S["weight_gain_extreme"], weight_gain_extreme) + WRITE_FILE(S["weight_gain_permanent"], weight_gain_permanent) + WRITE_FILE(S["wg_rate"], wg_rate) + WRITE_FILE(S["wl_rate"], wl_rate) + WRITE_FILE(S["noncon_weight_gain"], noncon_weight_gain) + WRITE_FILE(S["bot_feeding"], bot_feeding) + WRITE_FILE(S["max_weight"], max_weight) + WRITE_FILE(S["helplessness_no_movement"], helplessness_no_movement) + WRITE_FILE(S["helplessness_clumsy"], helplessness_clumsy) + WRITE_FILE(S["helplessness_nearsighted"], helplessness_nearsighted) + WRITE_FILE(S["helplessness_hidden_face"], helplessness_hidden_face) + WRITE_FILE(S["helplessness_mute"], helplessness_mute) + WRITE_FILE(S["helplessness_immobile_arms"], helplessness_immobile_arms) + WRITE_FILE(S["helplessness_clothing_jumpsuit"], helplessness_clothing_jumpsuit) + WRITE_FILE(S["helplessness_clothing_misc"], helplessness_clothing_misc) + WRITE_FILE(S["helplessness_clothing_back"], helplessness_clothing_back) + WRITE_FILE(S["helplessness_no_buckle"], helplessness_no_buckle) + WRITE_FILE(S["stuckage"], stuckage) + WRITE_FILE(S["chair_breakage"], chair_breakage) + WRITE_FILE(S["fatness_vulnerable"], fatness_vulnerable) + WRITE_FILE(S["extreme_fatness_vulnerable"], extreme_fatness_vulnerable) + WRITE_FILE(S["blueberry_inflation"], blueberry_inflation) + cit_character_pref_save(S) return 1 diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index f077adf2..50b5bfa4 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -321,6 +321,12 @@ else if(stage in R.addiction_stage4_end to INFINITY) to_chat(C, "You feel like you've gotten over your need for [R.name].") SEND_SIGNAL(C, COMSIG_CLEAR_MOOD_EVENT, "[R.type]_addiction") + + //GS13 on reagent addiction removal + if(istype(R, /datum/reagent/fermi_fat)) + var/datum/reagent/fermi_fat/F = R + F.addiction_remove(C) + cached_addictions.Remove(R) else SEND_SIGNAL(C, COMSIG_CLEAR_MOOD_EVENT, "[R.type]_overdose") diff --git a/modular_citadel/code/game/machinery/cryopod.dm b/modular_citadel/code/game/machinery/cryopod.dm index 3ee9a1f0..d2678424 100644 --- a/modular_citadel/code/game/machinery/cryopod.dm +++ b/modular_citadel/code/game/machinery/cryopod.dm @@ -248,6 +248,11 @@ /obj/machinery/cryopod/proc/despawn_occupant() var/mob/living/mob_occupant = occupant + //GS13 Process permanent fat + if(mob_occupant.client.prefs) + if(mob_occupant.client.ckey) + mob_occupant.client.prefs.perma_fat_save(mob_occupant) + //Update any existing objectives involving this mob. for(var/datum/objective/O in GLOB.objectives) // We don't want revs to get objectives that aren't for heads of staff. Letting diff --git a/tgstation.dme b/tgstation.dme index a22a194d..8cbd1ae5 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3104,6 +3104,7 @@ #include "GainStation13\code\mechanics\helplessness.dm" #include "GainStation13\code\mechanics\infestation.dm" #include "GainStation13\code\mechanics\metal_cruncher.dm" +#include "GainStation13\code\mechanics\permanent_fat.dm" #include "GainStation13\code\mechanics\spells.dm" #include "GainStation13\code\mechanics\wand.dm" #include "GainStation13\code\mechanics\water_sponge.dm" @@ -3134,6 +3135,7 @@ #include "GainStation13\code\modules\reagents\chemistry\reagents\consumable_reagents.dm" #include "GainStation13\code\modules\reagents\chemistry\reagents\dwarverndrinks.dm" #include "GainStation13\code\modules\reagents\chemistry\reagents\fatty_drinks.dm" +#include "GainStation13\code\modules\reagents\chemistry\reagents\fermi_fat.dm" #include "GainStation13\code\modules\reagents\chemistry\recipes\fatchem.dm" #include "GainStation13\code\modules\reagents\chemistry\recipes\fatdrinks.dm" #include "GainStation13\code\modules\reagents\chemistry\recipes\ROCKANDSTONEdrinks.dm"