diff --git a/GainStation13/code/datums/diseases/advance/symptoms/berry.dm b/GainStation13/code/datums/diseases/advance/symptoms/berry.dm new file mode 100644 index 00000000..59a232f3 --- /dev/null +++ b/GainStation13/code/datums/diseases/advance/symptoms/berry.dm @@ -0,0 +1,91 @@ +/datum/symptom/berry + name = "Berrification" + desc = "The virus causes the host's biology to overflow with a blue substance. Infection ends if the substance is completely removed from their body, besides ordinary cures." + stealth = -5 + resistance = -4 + stage_speed = 1 + transmittable = 6 + level = 7 + severity = 5 + base_message_chance = 100 + symptom_delay_min = 15 + symptom_delay_max = 45 + threshold_desc = list( + "Stage Speed" = "Increases the rate of liquid production.", + ) + var/datum/reagent/infection_reagent = /datum/reagent/berry_juice_infection + +/datum/symptom/berry/Start(datum/disease/advance/A) + if(!..()) + return + if(A.affected_mob?.client?.prefs?.blueberry_inflation) + A.affected_mob.reagents.add_reagent(infection_reagent, max(1, A.properties["stage_rate"]) * 10) + ..() + +/datum/symptom/berry/Activate(datum/disease/advance/A) + if(!..()) + return + var/mob/living/carbon/M = A.affected_mob + if(!(M?.client?.prefs?.blueberry_inflation)) + return + if(M.reagents.get_reagent_amount(infection_reagent) <= 0) + A.remove_disease() + switch(A.stage) + if(1, 2, 3, 4) + if(prob(base_message_chance)) + to_chat(M, "[pick("You feel oddly full...", "Your stomach churns...", "You hear a gurgle...", "You taste berries...")]") + else + to_chat(M, "[pick("A deep slosh comes from inside you...", "Your mind feels so light...", "You think blue really suits you...", "Your skin feels so tight...")]") + M.reagents.add_reagent(infection_reagent, max(A.properties["stage_rate"], 1)) + +/datum/reagent/berry_juice_infection + name = "Blueberry Juice" + description = "Totally infectious." + reagent_state = LIQUID + metabolization_rate = 0.25 * REAGENTS_METABOLISM + color = "#0004ff" + var/picked_color + var/list/random_color_list = list("#0058db","#5d00c7","#0004ff","#0057e7") + taste_description = "blueberry pie" + var/no_mob_color = FALSE + value = 10 //it sells. Make that berry factory + +/datum/reagent/berry_juice_infection/on_mob_add(mob/living/L, amount) + if(iscarbon(L)) + var/mob/living/carbon/affected_mob = L + if(!(affected_mob?.client?.prefs?.blueberry_inflation)) + affected_mob.reagents.remove_reagent(/datum/reagent/berry_juice_infection, volume) + return + picked_color = pick(random_color_list) + affected_mob.fat_hide(affected_mob.fatness_real + ((3 * (volume * volume))/50), src) + else + L.reagents.remove_reagent(/datum/reagent/berry_juice_infection, volume) + ..() + +/datum/reagent/berry_juice_infection/on_mob_life(mob/living/carbon/M) + if(!(M?.client?.prefs?.blueberry_inflation)) + M.reagents.remove_reagent(/datum/reagent/berry_juice_infection, volume) + return + if(!no_mob_color) + M.add_atom_colour(picked_color, WASHABLE_COLOUR_PRIORITY) + M.fat_hide(M.fatness_real + ((3 * (volume * volume))/50), src) + M.adjust_fatness(1, FATTENING_TYPE_CHEM) + ..() + +/datum/reagent/berry_juice_infection/on_mob_delete(mob/living/L) + if(!iscarbon(L)) + return + var/mob/living/carbon/C = L + C.fat_show() + +/obj/item/reagent_containers/glass/attack(mob/M, mob/user, obj/target) + if(M.reagents.get_reagent_amount(/datum/reagent/berry_juice_infection) > 0 && (reagents.total_volume + min(amount_per_transfer_from_this, 10)) <= volume) + reagents.add_reagent(/datum/reagent/berry_juice_infection, min(10, amount_per_transfer_from_this)) + M.reagents.remove_reagent(/datum/reagent/berry_juice_infection, min(10, amount_per_transfer_from_this)) + if(M != user) + to_chat(user, "You juice [M.name]...") + to_chat(M, "[user.name] juices you...") + else + to_chat(user, "You get some juice out of you...") + return + ..() diff --git a/GainStation13/code/modules/client/preferences/preferences.dm b/GainStation13/code/modules/client/preferences/preferences.dm index c104c18a..3a3e920c 100644 --- a/GainStation13/code/modules/client/preferences/preferences.dm +++ b/GainStation13/code/modules/client/preferences/preferences.dm @@ -13,6 +13,8 @@ var/weight_gain_magic = FALSE ///Weight gain from viruses var/weight_gain_viruses = FALSE + ///Blueberry Inflation + var/blueberry_inflation = FALSE ///Extreme weight gain var/weight_gain_extreme = FALSE ///stuckage diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index c94989ca..96e2798b 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -55,7 +55,7 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/vagina, GLOB.vagina_shapes_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/breasts, GLOB.breasts_shapes_list) GLOB.breasts_size_list = list ("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o") //We need the list to choose from initialized, but it's no longer a sprite_accessory thing. - GLOB.genital_fluids_list = list ("Milk", "Water", "Semen", "Femcum", "Honey", "Strawberry Milk", "Nutriment") + GLOB.genital_fluids_list = list ("Milk", "Water", "Semen", "Femcum", "Honey", "Strawberry Milk", "Nutriment", "Berry Juice") GLOB.gentlemans_organ_names = list("phallus", "willy", "dick", "prick", "member", "tool", "gentleman's organ", "cock", "wang", "knob", "dong", "joystick", "pecker", "johnson", "weenie", "tadger", "schlong", "thirsty ferret", "baloney pony", "schlanger") for(var/K in GLOB.breasts_shapes_list) var/datum/sprite_accessory/breasts/value = GLOB.breasts_shapes_list[K] diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index a04265a6..a33d2a3c 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -895,6 +895,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Honey" if(/datum/reagent/consumable/nutriment) dat += "Nutriment" + if(/datum/reagent/berry_juice_infection) + dat += "Berry Juice" else dat += "Nothing?" //This else is a safeguard for errors, and if it happened, they wouldn't be able to change this pref, @@ -944,6 +946,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Strawberry Milk" if(/datum/reagent/consumable/nutriment) dat += "Nutriment" + if(/datum/reagent/berry_juice_infection) + dat += "Berry Juice" else dat += "Nothing?" //This else is a safeguard for errors, and if it happened, they wouldn't be able to change this pref, @@ -1059,6 +1063,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Weight Gain - Weapons:[weight_gain_weapons == TRUE ? "Enabled" : "Disabled"]
" dat += "Weight Gain - Magic:[weight_gain_magic == TRUE ? "Enabled" : "Disabled"]
" dat += "Weight Gain - Viruses:[weight_gain_viruses == TRUE ? "Enabled" : "Disabled"]
" + dat += "Blueberry Inflation:[blueberry_inflation == TRUE ? "Enabled" : "Disabled"]
" dat += "

GS13 Gameplay Preferences

" dat += "Stuckage (weight results in getting stuck in doors):[stuckage == TRUE ? "Enabled" : "Disabled"]
" @@ -2391,6 +2396,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) features["balls_fluid"] = /datum/reagent/consumable/pinkmilk if("Nutriment") features["balls_fluid"] = /datum/reagent/consumable/nutriment + if("Berry Juice") + features["balls_fluid"] = /datum/reagent/berry_juice_infection if("egg_size") var/new_size @@ -2438,6 +2445,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) features["breasts_fluid"] = /datum/reagent/consumable/pinkmilk if("Nutriment") features["breasts_fluid"] = /datum/reagent/consumable/nutriment + if("Berry Juice") + features["breasts_fluid"] = /datum/reagent/berry_juice_infection if("breasts_color") var/new_breasts_color = input(user, "Breast Color:", "Character Preference", "#"+features["breasts_color"]) as color|null @@ -2633,6 +2642,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) noncon_weight_gain = !noncon_weight_gain if("stuckage") stuckage = !stuckage + if("blueberry_inflation") + blueberry_inflation = !blueberry_inflation if("max_fatness") var/pickedweight = input(user, "Choose your max fatness level, your weight will not go beyond this. None will let you gain without a limit", diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 22fea851..4e272785 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -159,6 +159,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["noncon_weight_gain"] >> noncon_weight_gain S["max_weight"] >> max_weight S["stuckage"] >> stuckage + S["blueberry_inflation"] >> blueberry_inflation //try to fix any outdated data if necessfary @@ -300,7 +301,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["noncon_weight_gain"], noncon_weight_gain) WRITE_FILE(S["max_weight"], max_weight) WRITE_FILE(S["stuckage"], stuckage) - + WRITE_FILE(S["blueberry_inflation"], blueberry_inflation) return 1 diff --git a/tgstation.dme b/tgstation.dme index 2afaf1a7..750db68f 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3077,6 +3077,7 @@ #include "GainStation13\code\clothing\head.dm" #include "GainStation13\code\clothing\suits.dm" #include "GainStation13\code\datums\components\fattening_door.dm" +#include "GainStation13\code\datums\diseases\advance\symptoms\berry.dm" #include "GainStation13\code\datums\mutations\fatfang.dm" #include "GainStation13\code\datums\status_effects\fatstun.dm" #include "GainStation13\code\game\lore_papers.dm"