diff --git a/GainStation13/code/datums/mutations/fatfang.dm b/GainStation13/code/datums/mutations/fatfang.dm
index 0303b090..718345c1 100644
--- a/GainStation13/code/datums/mutations/fatfang.dm
+++ b/GainStation13/code/datums/mutations/fatfang.dm
@@ -9,6 +9,9 @@
instability = 10
energy_coeff = 1
power_coeff = 1
+ ///Which chem is added (lipo default) and how much?
+ var/chem_to_add = /datum/reagent/consumable/lipoifier
+ var/chem_amount = 5
/obj/effect/proc_holder/spell/targeted/touch/fatfang
name = "The Nibble"
@@ -27,16 +30,14 @@
catchphrase = null
icon = 'icons/mob/actions/bloodsucker.dmi'
icon_state = "power_feed"
- ///How much weight is added?
- var/chem_to_add = 5
var/starttime = 0
/obj/item/melee/touch_attack/fatfang/afterattack(atom/target, mob/living/carbon/user, proximity)
- if(!proximity || !iscarbon(target) || target == user)
+ if(!proximity || !iscarbon(target))
return FALSE
- if(!target || !chem_to_add)
+ if(!target || !user.dna.get_mutation(FATFANG).chem_to_add || !user.dna.get_mutation(FATFANG).chem_amount)
return FALSE
target.visible_message("[user] nibbles [target]!","[user] nibbles you!")
if(target == user.pulling && ishuman(user.pulling))
@@ -44,13 +45,12 @@
user.dna.get_mutation(FATFANG).power.charge_max = 600 * GET_MUTATION_ENERGY(user.dna.get_mutation(FATFANG))
while(starttime + 300 > world.time && in_range(user, target))
if(do_mob(user, target, 10, 0, 1))
- target.reagents.add_reagent(/datum/reagent/consumable/lipoifier, (chem_to_add * GET_MUTATION_POWER(user.dna.get_mutation(FATFANG))/2))
+ target.reagents.add_reagent(user.dna.get_mutation(FATFANG).chem_to_add, (user.dna.get_mutation(FATFANG).chem_amount * GET_MUTATION_POWER(user.dna.get_mutation(FATFANG))/2))
target.visible_message("[user] pumps some venom in [target]!","[user] pumps some venom in you!")
else
user.dna.get_mutation(FATFANG).power.charge_max = 50 * GET_MUTATION_ENERGY(user.dna.get_mutation(FATFANG))
- target.reagents.add_reagent(/datum/reagent/consumable/lipoifier, chem_to_add * GET_MUTATION_POWER(user.dna.get_mutation(FATFANG)))
-
- return ..()
+ target.reagents.add_reagent(user.dna.get_mutation(FATFANG).chem_to_add, user.dna.get_mutation(FATFANG).chem_amount * GET_MUTATION_POWER(user.dna.get_mutation(FATFANG)))
+ user.changeNext_move(50)
/obj/item/dnainjector/antifang
name = "\improper DNA injector (Anti-The Nibble)"
diff --git a/GainStation13/code/mechanics/fatness.dm b/GainStation13/code/mechanics/fatness.dm
index 82c5dd31..7be44561 100644
--- a/GainStation13/code/mechanics/fatness.dm
+++ b/GainStation13/code/mechanics/fatness.dm
@@ -56,7 +56,6 @@ GLOBAL_LIST_INIT(uncapped_resize_areas, list(/area/bridge, /area/crew_quarters,
return TRUE
-
/mob/living/carbon/fully_heal(admin_revive)
fatness = 0
fatness_real = 0
diff --git a/GainStation13/code/mechanics/permanent_fat.dm b/GainStation13/code/mechanics/permanent_fat.dm
index 74471024..e07ec8f9 100644
--- a/GainStation13/code/mechanics/permanent_fat.dm
+++ b/GainStation13/code/mechanics/permanent_fat.dm
@@ -1,6 +1,37 @@
+/mob/living/carbon
+ var/savekey
+ var/ckeyslot
+
+/mob/living/carbon/proc/perma_fat_save(mob/living/carbon/character)
+ var/key = savekey
+ if(!key)
+ return FALSE
+ var/filename = "preferences.sav"
+ var/path = "data/player_saves/[key[1]]/[key]/[filename]"
+
+ var/savefile/S = new /savefile(path)
+ if(!path)
+ return FALSE
+
+ if(character.ckeyslot)
+ var/slot = character.ckeyslot
+ S.cd = "/character[slot]"
+
+ var/persi
+ S["weight_gain_persistent"] >> persi
+ if(persi)
+ WRITE_FILE(S["starting_weight"] , character.fatness_real)
+ var/perma
+ S["weight_gain_permanent"] >> perma
+ if(S["weight_gain_permanent"])
+ WRITE_FILE(S["permanent_fat"] , character.fatness_perma)
+
+/*
/datum/preferences/proc/perma_fat_save(character)
if(iscarbon(character))
var/mob/living/carbon/C = character
+ if(!C.client.prefs.weight_gain_permanent && !C.client.prefs.weight_gain_persistent)
+ return FALSE
if(!path)
return 0
if(world.time < savecharcooldown)
@@ -15,4 +46,8 @@
return 0
S.cd = "/character[default_slot]"
- WRITE_FILE(S["permanent_fat"] , C.fatness_perma)
+ if(C.client.prefs.weight_gain_persistent)
+ WRITE_FILE(S["starting_weight"] , C.fatness_real)
+ if(C.client.prefs.weight_gain_permanent)
+ 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 99a0f618..d6bfb035 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
+ ///Persistant fatness
+ var/weight_gain_persistent = FALSE
///Permanent weight gain
var/weight_gain_permanent = FALSE
/// At what weight will you start to get stuck in airlocks?
diff --git a/GainStation13/code/modules/reagents/chemistry/reagents/fermi_fat.dm b/GainStation13/code/modules/reagents/chemistry/reagents/fermi_fat.dm
index 93242535..2e496875 100644
--- a/GainStation13/code/modules/reagents/chemistry/reagents/fermi_fat.dm
+++ b/GainStation13/code/modules/reagents/chemistry/reagents/fermi_fat.dm
@@ -1,5 +1,3 @@
-///datum/reagent/sizechem
-
//Reagent
/datum/reagent/fermi_fat
name = "Galbanic Compound"
@@ -83,7 +81,7 @@
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)
+ if(addiction_mults < 1)
C.nutri_mult += 0.5
C.weight_gain_rate += 0.25
addiction_mults = 1
@@ -99,7 +97,7 @@
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)
+ if(addiction_mults < 2)
C.nutri_mult += 0.5
C.weight_gain_rate += 0.25
addiction_mults = 2
@@ -115,7 +113,7 @@
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)
+ if(addiction_mults < 3)
C.nutri_mult += 0.5
C.weight_gain_rate += 0.25
addiction_mults = 3
@@ -131,7 +129,7 @@
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)
+ if(addiction_mults < 4)
C.nutri_mult += 0.5
C.weight_gain_rate += 0.25
addiction_mults = 4
@@ -143,6 +141,7 @@
C.weight_gain_rate = max(0,11, 0.25 * addiction_mults)
return
+//Reagent
/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."
@@ -152,6 +151,8 @@
metabolization_rate = REAGENTS_METABOLISM / 4
can_synth = FALSE
+ overdose_threshold = 50
+
//Reaction
/datum/chemical_reaction/fermi_slim
name = "FermiSlim"
@@ -180,7 +181,16 @@
/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)
+ M.adjust_fatness(-50, FATTENING_TYPE_WEIGHT_LOSS)
+ M.adjust_perma(-5, FATTENING_TYPE_WEIGHT_LOSS)
..()
. = 1
+
+/datum/reagent/fermi_slim/overdose_process(mob/living/M)
+ if(!iscarbon(M))
+ return..()
+ var/mob/living/carbon/C = M
+ C.fullness = max(0, C.fullness-5)
+ C.nutrition = max(0, C.nutrition-5)
+ C.weight_loss_rate = min(5, C.weight_loss_rate+0.01)
+ ..()
diff --git a/code/__DEFINES/pool.dm b/code/__DEFINES/pool.dm
index 1e66109d..c97fadb1 100644
--- a/code/__DEFINES/pool.dm
+++ b/code/__DEFINES/pool.dm
@@ -9,5 +9,6 @@ GLOBAL_LIST_INIT(blacklisted_pool_reagents, list(
/datum/reagent/toxin/plasma, /datum/reagent/oxygen, /datum/reagent/nitrous_oxide, /datum/reagent/nitrogen, //gases
/datum/reagent/fermi, //blanket fermichem ban sorry. this also covers mkultra, genital enlargers, etc etc.
/datum/reagent/drug/aphrodisiac, /datum/reagent/drug/anaphrodisiac, /datum/reagent/drug/aphrodisiacplus, /datum/reagent/drug/anaphrodisiacplus, //literally asking for prefbreaks
- /datum/reagent/consumable/femcum, /datum/reagent/consumable/semen //NO.
+ /datum/reagent/consumable/femcum, /datum/reagent/consumable/semen, //NO.
+ /datum/reagent/fermi_fat, /datum/reagent/fermi_slim //GS13 fermi fat chems
))
diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm
index f3ca9244..9be186b8 100644
--- a/code/__HELPERS/roundend.dm
+++ b/code/__HELPERS/roundend.dm
@@ -6,10 +6,11 @@
//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)
-
+ if(iscarbon(m))
+ var/mob/living/carbon/C = m
+ if(C)
+ C.perma_fat_save(C)
+
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 8be93308..e7d9d311 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -109,6 +109,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/wg_rate = 0.5
var/wl_rate = 0.5
var/voice = "human"
+ var/ckeyslot
//HS13 jobs
var/sillyroles = TRUE //for clown and mime
@@ -1077,7 +1078,8 @@ 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 += "Persistent Fat (endround/cryo weight becomes your new start weight):[weight_gain_persistent == TRUE ? "Enabled" : "Disabled"]
"
+ dat += "Permanent Weight (hard to remove and persistent weight):[weight_gain_permanent == TRUE ? "Enabled" : "Disabled"]
"
dat += "