diff --git a/GainStation13/code/datums/diseases/advance/symptoms/berry.dm b/GainStation13/code/datums/diseases/advance/symptoms/berry.dm index dbe43e20..bd70484c 100644 --- a/GainStation13/code/datums/diseases/advance/symptoms/berry.dm +++ b/GainStation13/code/datums/diseases/advance/symptoms/berry.dm @@ -13,7 +13,7 @@ threshold_desc = list( "Stage Speed" = "Increases the rate of liquid production.", ) - var/datum/reagent/infection_reagent = /datum/reagent/berry_juice_infection + var/datum/reagent/infection_reagent = /datum/reagent/blueberry_juice /datum/symptom/berry/Start(datum/disease/advance/A) if(!..()) @@ -35,52 +35,13 @@ 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...")]") + to_chat(M, "[pick("A deep slosh comes from inside you...", "Your mind feels light...", "You think blue really suits you...", "Your skin feels so tight...")]") M.reagents.add_reagent(infection_reagent, max(A.totalStageSpeed(), 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 && !(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.hider_add(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 && !(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.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.hider_remove(src) - /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.reagents.get_reagent_amount(/datum/reagent/blueberry_juice) > 0 && (reagents.total_volume + min(amount_per_transfer_from_this, 10)) <= volume) + reagents.add_reagent(/datum/reagent/blueberry_juice, min(10, amount_per_transfer_from_this)) + M.reagents.remove_reagent(/datum/reagent/blueberry_juice, min(10, amount_per_transfer_from_this)) if(M != user) to_chat(user, "You juice [M.name]...") to_chat(M, "[user.name] juices you...") @@ -88,10 +49,22 @@ to_chat(user, "You get some juice out of you...") return ..() + +/obj/effect/decal/cleanable/juice + name = "berry juice" + desc = "It's blue and smells enticingly sweet." + icon = 'GainStation13/icons/turf/berry_decal.dmi' + icon_state = "floor1" + random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7") + blood_state = BLOOD_STATE_JUICE + bloodiness = BLOOD_AMOUNT_PER_DECAL -/datum/reagent/berry_juice_infection/proc/fat_hide() - return (3 * (volume * volume))/50 +/obj/effect/decal/cleanable/juice/Initialize() + . = ..() + reagents.add_reagent(/datum/reagent/blueberry_juice = 5) +/obj/effect/decal/cleanable/juice/streak + random_icon_states = list("streak1", "streak2", "streak3", "streak4", "streak5") //extreme variant, for admin or item purposes /datum/symptom/berry/extreme diff --git a/GainStation13/code/mechanics/fatness.dm b/GainStation13/code/mechanics/fatness.dm index 0a844455..42c2fefa 100644 --- a/GainStation13/code/mechanics/fatness.dm +++ b/GainStation13/code/mechanics/fatness.dm @@ -1,3 +1,5 @@ +GLOBAL_LIST_INIT(uncapped_resize_areas, list(/area/bridge, /area/crew_quarters)) + /mob/living/carbon //Due to the changes needed to create the system to hide fatness, here's some notes: // -If you are making a mob simply gain or lose weight, use adjust_fatness. Try to not touch the variables directly unless you know 'em well @@ -44,10 +46,7 @@ fatness = fatness_real //Make their current fatness their real fatness - hiders_apply() //Check and apply hiders - - if(client?.prefs?.weight_gain_extreme) - xwg_resize() + hiders_apply() //Check and apply hiders, XWG is there too return TRUE @@ -136,13 +135,20 @@ 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) - xwg_resize() + if(client?.prefs?.weight_gain_extreme) + xwg_resize() + +/mob/living/carbon/human/handle_breathing(times_fired) + . = ..() + hiders_apply() /mob/living/carbon/proc/xwg_resize() var/xwg_size = sqrt(fatness/FATNESS_LEVEL_BLOB) - xwg_size = min(xwg_size, RESIZE_HUGE) + 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) @@ -166,7 +172,3 @@ return "Immobile" return "Blob" - -/mob/living/carbon/human/handle_breathing(times_fired) - . = ..() - hiders_apply() diff --git a/GainStation13/code/mechanics/water_sponge.dm b/GainStation13/code/mechanics/water_sponge.dm index 0b966ad2..73f815ab 100644 --- a/GainStation13/code/mechanics/water_sponge.dm +++ b/GainStation13/code/mechanics/water_sponge.dm @@ -42,12 +42,13 @@ L.reagents.add_reagent(/datum/reagent/water, 3) /mob/living/carbon/proc/water_check(datum/gas_mixture/breath) - var/breath_gases = breath.gases - if(breath_gases[/datum/gas/water_vapor]) - if(HAS_TRAIT(src, TRAIT_WATER_SPONGE)) - var/H2O_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/water_vapor]) - reagents.add_reagent(/datum/reagent/water, H2O_pp/10) - breath_gases[/datum/gas/water_vapor] -= H2O_pp + if(HAS_TRAIT(src, TRAIT_WATER_SPONGE)) + if(breath.gases) + var/breath_gases = breath.gases + if(breath_gases[/datum/gas/water_vapor]) + var/H2O_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/water_vapor]) + reagents.add_reagent(/datum/reagent/water, H2O_pp/10) + breath_gases[/datum/gas/water_vapor] -= H2O_pp /obj/structure/sink var/mob/living/attached @@ -82,3 +83,10 @@ visible_message("[attached] is detached from [src]") attached = null return + +/obj/machinery/pool/controller/process_reagents() + for(var/turf/open/pool/W in linked_turfs) + for(var/mob/living/carbon/human/swimee in W) + if(HAS_TRAIT(swimee, TRAIT_WATER_SPONGE)) + swimee.reagents.add_reagent(/datum/reagent/water, 5) + ..() diff --git a/GainStation13/code/modules/gym/gym.dm b/GainStation13/code/modules/gym/gym.dm new file mode 100644 index 00000000..33fbcefc --- /dev/null +++ b/GainStation13/code/modules/gym/gym.dm @@ -0,0 +1,115 @@ +/obj/item/dumbbell + desc = "A weighty dumbbell, perfect for arm exercise!" + name = "dumbbell" + icon = 'GainStation13/icons/obj/dumbbell.dmi' + icon_state = "pen" + item_state = "pen" + throwforce = 20 + w_class = WEIGHT_CLASS_BULKY + throw_speed = 2 + throw_range = 3 + materials = list(MAT_METAL=10) + pressure_resistance = 2 + var/reps = 0 + var/using = FALSE + +/obj/item/dumbbell/dropped(mob/user, silent) + reps = 0 + . = ..() + +/obj/item/dumbbell/attack_self(mob/user) + . = ..() + if(!using) + using = TRUE + visible_message("[user] does a rep with the [src]. YEEEEEAH!!!") + if(do_after(usr, CLICK_CD_RESIST-reps, 0, usr, 1)) + if(iscarbon(user)) + var/mob/living/carbon/U = user + U.adjust_fatness(-10, FATTENING_TYPE_WEIGHT_LOSS) + if(reps < 16) + reps += 0.4 + else + visible_message("[user] couldn't complete the rep. YOU'LL GET IT NEXT TIME CHAMP!!!") + using = FALSE + +/obj/machinery/conveyor/treadmill + name = "treadmill" + desc = "A treadmil, for losing weight!" + +/obj/machinery/conveyor/treadmill/convey(list/affecting) + var/turf/T = get_step(src, movedir) + if(length(T.contents) > 150) + return + for(var/atom/movable/A in affecting) + if((A.loc == loc) && A.has_gravity()) + A.ConveyorMove(movedir) + if(iscarbon(A)) + var/mob/living/carbon/C = A + C.adjust_fatness(-10, FATTENING_TYPE_WEIGHT_LOSS) + +/obj/machinery/conveyor/treadmill/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/crowbar)) + user.visible_message("[user] struggles to pry up \the [src] with \the [I].", \ + "You struggle to pry up \the [src] with \the [I].") + if(I.use_tool(src, user, 40, volume=40)) + if(!(stat & BROKEN)) + var/obj/item/conveyor_construct/treadmill/C = new/obj/item/conveyor_construct/treadmill(src.loc) + C.id = id + transfer_fingerprints_to(C) + to_chat(user, "You remove the conveyor belt.") + qdel(src) + + else if(istype(I, /obj/item/wrench)) + if(!(stat & BROKEN)) + I.play_tool_sound(src) + setDir(turn(dir,-45)) + update_move_direction() + to_chat(user, "You rotate [src].") + + else if(istype(I, /obj/item/screwdriver)) + if(!(stat & BROKEN)) + verted = verted * -1 + update_move_direction() + to_chat(user, "You reverse [src]'s direction.") + + else if(user.a_intent != INTENT_HARM) + user.transferItemToLoc(I, drop_location()) + else + return ..() + +/obj/item/conveyor_construct/treadmill + icon = 'icons/obj/recycling.dmi' + icon_state = "conveyor_construct" + name = "treadmill assembly" + desc = "A treadmill assembly." + w_class = WEIGHT_CLASS_BULKY + id = "" //inherited by the belt + +/obj/item/conveyor_construct/afterattack(atom/A, mob/user, proximity, click_parameters) + SEND_SIGNAL(src, COMSIG_ITEM_AFTERATTACK, A, user, proximity, click_parameters) + SEND_SIGNAL(user, COMSIG_MOB_ITEM_AFTERATTACK, A, user, proximity, click_parameters) + if(!proximity || user.stat || !isfloorturf(A) || istype(A, /area/shuttle)) + return + var/cdir = get_dir(A, user) + if(A == user.loc) + to_chat(user, "You cannot place a conveyor belt under yourself.") + return + var/obj/machinery/conveyor/treadmill/C = new/obj/machinery/conveyor/treadmill(A, cdir, id) + transfer_fingerprints_to(C) + qdel(src) + +/datum/design/dumbbell + name = "Dumbbell" + id = "dumbbell" + build_type = AUTOLATHE + materials = list(MAT_METAL = 2000) + build_path = /obj/item/dumbbell + category = list("initial", "Tools") + +/datum/design/treadmill + name = "Treadmill" + id = "treadmill" + build_type = AUTOLATHE + materials = list(MAT_METAL = 5000) + build_path = /obj/item/conveyor_construct/treadmill + category = list("initial", "Construction") diff --git a/GainStation13/code/modules/hydroponics/grown/berries.dm b/GainStation13/code/modules/hydroponics/grown/berries.dm new file mode 100644 index 00000000..26326263 --- /dev/null +++ b/GainStation13/code/modules/hydroponics/grown/berries.dm @@ -0,0 +1,25 @@ +/obj/item/seeds/berry/blueberry + name = "pack of blueberry seeds" + desc = "These seeds grow into blueberry bushes." + icon_state = "seed-blueberry" + species = "blueberry" + plantname = "Blueberry Bush" + product = /obj/item/reagent_containers/food/snacks/grown/berries/blueberry + mutatelist = list() + reagents_add = list(/datum/reagent/blueberry_juice = 0.1) + potency = 1 + yield = 1 + production = 10 + rarity = 30 + +/obj/item/reagent_containers/food/snacks/grown/berries/blueberry + seed = /obj/item/seeds/berry/blueberry + name = "bunch of blueberries" + desc = "Taste so good, you might turn blue!" + icon_state = "blueberrypile" + filling_color = "#5d00c7" + foodtype = FRUIT + juice_results = list(/datum/reagent/blueberry_juice = 20) + tastes = list("blueberry" = 1) + distill_reagent = null + wine_power = 50 diff --git a/GainStation13/code/modules/reagents/chemistry/reagents/consumable_reagents.dm b/GainStation13/code/modules/reagents/chemistry/reagents/consumable_reagents.dm index 02d1f2c9..3d1ce29f 100644 --- a/GainStation13/code/modules/reagents/chemistry/reagents/consumable_reagents.dm +++ b/GainStation13/code/modules/reagents/chemistry/reagents/consumable_reagents.dm @@ -99,18 +99,48 @@ /datum/reagent/blueberry_juice name = "Blueberry Juice" - description = "Non-infectious. Hopefully." + 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/blueberry_juice/on_mob_life(mob/living/carbon/M) + if(M?.client && !(M?.client?.prefs?.blueberry_inflation)) + M.reagents.remove_reagent(/datum/reagent/blueberry_juice, volume) + return if(!no_mob_color) - M.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY) + M.add_atom_colour(picked_color, WASHABLE_COLOUR_PRIORITY) + M.adjust_fatness(1, FATTENING_TYPE_CHEM) + if(prob(2)) + new /obj/effect/decal/cleanable/juice(M.loc) + playsound(M.loc, 'sound/effects/splat.ogg',rand(10,50), 1) ..() +/datum/reagent/blueberry_juice/on_mob_add(mob/living/L, amount) + if(iscarbon(L)) + var/mob/living/carbon/affected_mob = L + if(affected_mob?.client && !(affected_mob?.client?.prefs?.blueberry_inflation)) + affected_mob.reagents.remove_reagent(/datum/reagent/blueberry_juice, volume) + return + picked_color = pick(random_color_list) + affected_mob.hider_add(src) + else + L.reagents.remove_reagent(/datum/reagent/blueberry_juice, volume) + ..() + +/datum/reagent/blueberry_juice/on_mob_delete(mob/living/L) + if(!iscarbon(L)) + return + var/mob/living/carbon/C = L + C.hider_remove(src) + +/datum/reagent/blueberry_juice/proc/fat_hide() + return (124 * (volume * volume))/1000 //123'840 600% size, about 56'000 400% size, calc was: (3 * (volume * volume))/50 // /obj/item/reagent_containers/food/snacks/meat/steak/troll // name = "Troll steak" diff --git a/GainStation13/code/obj/items/minor_items.dm b/GainStation13/code/obj/items/minor_items.dm index c9910f5c..df0c0894 100644 --- a/GainStation13/code/obj/items/minor_items.dm +++ b/GainStation13/code/obj/items/minor_items.dm @@ -46,7 +46,8 @@ icon_state = "gum_wrapped" desc = "Doesn't cause anything more than some discoloration... probably." trash = /obj/item/trash/blueberry_gum - list_reagents = list(/datum/reagent/blueberry_juice = 0.5) + list_reagents = list(/datum/reagent/blueberry_juice = 50) + bitesize = 5 filling_color = "#001aff" tastes = list("blueberry gum" = 1) foodtype = FRUIT diff --git a/GainStation13/icons/obj/dumbbell.dmi b/GainStation13/icons/obj/dumbbell.dmi new file mode 100644 index 00000000..696bbfca Binary files /dev/null and b/GainStation13/icons/obj/dumbbell.dmi differ diff --git a/GainStation13/icons/turf/berry_decal.dmi b/GainStation13/icons/turf/berry_decal.dmi new file mode 100644 index 00000000..8af70867 Binary files /dev/null and b/GainStation13/icons/turf/berry_decal.dmi differ diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 5ea0dada..81d03577 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -161,6 +161,7 @@ GLOBAL_LIST_EMPTY(bloody_footprints_cache) #define BLOOD_STATE_OIL "oil" #define BLOOD_STATE_NOT_BLOODY "no blood whatsoever" #define BLOOD_AMOUNT_PER_DECAL 20 +#define BLOOD_STATE_JUICE "juice" //Blood Decal Colors #define BLOOD_COLOR_HUMAN "#dc0000" @@ -171,6 +172,7 @@ GLOBAL_LIST_EMPTY(bloody_footprints_cache) #define BLOOD_COLOR_LIZARD "#db004D" #define BLOOD_COLOR_UNIVERSAL "#db3300" #define BLOOD_COLOR_BUG "#a37c0f" +#define BLOOD_COLOR_JUICE "#0004ff" //suit sensors: sensor_mode defines diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm index ef9e1d1a..9d7edd86 100644 --- a/code/game/objects/effects/decals/cleanable/humans.dm +++ b/code/game/objects/effects/decals/cleanable/humans.dm @@ -24,6 +24,8 @@ /obj/effect/decal/cleanable/blood/update_icon() color = blood_DNA_to_color() + if(blood_state == BLOOD_STATE_JUICE) + color = BLOOD_COLOR_JUICE /obj/effect/decal/cleanable/blood/old name = "dried blood" diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index b2e83199..34c654aa 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -895,7 +895,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Honey" if(/datum/reagent/consumable/nutriment) dat += "Nutriment" - if(/datum/reagent/berry_juice_infection) + if(/datum/reagent/blueberry_juice) dat += "Berry Juice" else dat += "Nothing?" @@ -946,7 +946,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Strawberry Milk" if(/datum/reagent/consumable/nutriment) dat += "Nutriment" - if(/datum/reagent/berry_juice_infection) + if(/datum/reagent/blueberry_juice) dat += "Berry Juice" else dat += "Nothing?" @@ -2398,7 +2398,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("Nutriment") features["balls_fluid"] = /datum/reagent/consumable/nutriment if("Berry Juice") - features["balls_fluid"] = /datum/reagent/berry_juice_infection + features["balls_fluid"] = /datum/reagent/blueberry_juice if("egg_size") var/new_size @@ -2447,7 +2447,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("Nutriment") features["breasts_fluid"] = /datum/reagent/consumable/nutriment if("Berry Juice") - features["breasts_fluid"] = /datum/reagent/berry_juice_infection + features["breasts_fluid"] = /datum/reagent/blueberry_juice if("breasts_color") var/new_breasts_color = input(user, "Breast Color:", "Character Preference", "#"+features["breasts_color"]) as color|null diff --git a/code/modules/hydroponics/grown/berries.dm b/code/modules/hydroponics/grown/berries.dm index 80792538..d0caf71b 100644 --- a/code/modules/hydroponics/grown/berries.dm +++ b/code/modules/hydroponics/grown/berries.dm @@ -14,7 +14,7 @@ icon_grow = "berry-grow" // Uses one growth icons set for all the subtypes icon_dead = "berry-dead" // Same for the dead icon genes = list(/datum/plant_gene/trait/repeated_harvest) - mutatelist = list(/obj/item/seeds/berry/glow, /obj/item/seeds/berry/poison) + mutatelist = list(/obj/item/seeds/berry/glow, /obj/item/seeds/berry/poison, /obj/item/seeds/berry/blueberry) reagents_add = list(/datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.1) /obj/item/reagent_containers/food/snacks/grown/berries diff --git a/icons/effects/footprints.dmi b/icons/effects/footprints.dmi index 69207097..d2db6d0a 100644 Binary files a/icons/effects/footprints.dmi and b/icons/effects/footprints.dmi differ diff --git a/icons/obj/hydroponics/growing_fruits.dmi b/icons/obj/hydroponics/growing_fruits.dmi index ba076103..65ff027e 100644 Binary files a/icons/obj/hydroponics/growing_fruits.dmi and b/icons/obj/hydroponics/growing_fruits.dmi differ diff --git a/icons/obj/hydroponics/harvest.dmi b/icons/obj/hydroponics/harvest.dmi index 32cb2022..13081d25 100644 Binary files a/icons/obj/hydroponics/harvest.dmi and b/icons/obj/hydroponics/harvest.dmi differ diff --git a/icons/obj/hydroponics/seeds.dmi b/icons/obj/hydroponics/seeds.dmi index 4191f9a5..3bc523e6 100644 Binary files a/icons/obj/hydroponics/seeds.dmi and b/icons/obj/hydroponics/seeds.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 80b2bf8f..e83232b4 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3112,6 +3112,8 @@ #include "GainStation13\code\modules\food_and_drinks\recipes_bigpizza.dm" #include "GainStation13\code\modules\food_and_drinks\objects\candy_flora.dm" #include "GainStation13\code\modules\food_and_drinks\recipes\recipes_ported.dm" +#include "GainStation13\code\modules\gym\gym.dm" +#include "GainStation13\code\modules\hydroponics\grown\berries.dm" #include "GainStation13\code\modules\mob\living\emote.dm" #include "GainStation13\code\modules\mob\living\emote_modular.dm" #include "GainStation13\code\modules\mob\living\emote_ported.dm"