\The [src] doesnt seem to be clogged at the moment...")
- return TRUE
-
- user.visible_message("[user] starts to pry open the maintenance hatch of \the [src], attempting to unclog it...")
- if(do_after(user, 30, TRUE, src))
- user.visible_message("[user] unclogs \the [src]!")
- unclog()
- return
- . = ..()
-
-/obj/structure/disposaloutlet/industrial_feeding_tube/welder_act(mob/living/user, obj/item/I)
- if(!I.tool_start_check(user, amount=0))
- return
- if(anchored)
- //var/turf/T = get_turf(src)
- if(!welded)
- if(!trunk) // If we're attaching it, we need to check for the pipe we're attaching to
- to_chat(user, "\The [src] needs to be welded to a trunk.")
- return TRUE
- to_chat(user, "You start welding \the [src] in place...")
- else
- if(clogged) // There's junk inside!
- to_chat(user, "There's junk inside \the [src]! Clean it out before trying to remove it!")
- return TRUE
- //Already welded, lets cut it free
- to_chat(user, "You start slicing the floorweld off \the [src]...")
-
- playsound(src, 'sound/items/welder2.ogg', 100, 1)
- if(I.use_tool(src, user, 20))
- update_icon()
- playsound(src, 'sound/items/welder.ogg', 100, 1)
- if(welded)
- to_chat(user, "You slice the floorweld off [src].")
- welded = FALSE
- trunk.linked = null
- return TRUE
- else
- to_chat(user, "You weld \the [src] to the floor.")
- welded = TRUE
- trunk.linked = src
- return TRUE
-
-
- else
- playsound(src, 'sound/items/welder2.ogg', 100, 1)
- to_chat(user, "You begin deconstructing \the [src]")
- if(I.use_tool(src, user, 30))
- playsound(src, 'sound/items/welder.ogg', 100, 1)
- deconstruct(TRUE)
- return TRUE
-
-// Someone got stuck inside after it got clogged!
-// Lets let them force their way out
-/obj/structure/disposaloutlet/industrial_feeding_tube/container_resist(mob/living/user)
- if(user.stat || !clogged) //If it's not clogged, they'll be ejected soon... One way or another.
- return
- playsound(src, 'sound/effects/clang.ogg', 50)
- visible_message("\The [src] loudly clongs as something inside tries to break free!")
- if(do_after(user, 100))
- unclog()
-
-/obj/structure/disposaloutlet/industrial_feeding_tube/proc/clog(list/clog_junk, loud = TRUE)
- clogged = TRUE
- for(var/atom/movable/AM in clog_junk)
- if(!(AM in pump_stuff))
- pump_stuff += AM
- AM.forceMove(src)
-
-
- update_icon()
- if(loud)
- playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 1)
-
-/obj/structure/disposaloutlet/industrial_feeding_tube/proc/unclog()
-
- spew(pump_stuff)
-
- clogged = FALSE
- update_icon()
-
-/obj/structure/disposaloutlet/industrial_feeding_tube/proc/spew(var/list/spew_stuff, playsound = FALSE)
- var/turf/T = get_turf(src)
-
- if(playsound)
- playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
- for(var/atom/movable/AM in spew_stuff)
- if(AM in pump_stuff)
- pump_stuff -= AM
- target = get_offset_target_turf(loc, rand(2)-rand(2), rand(2)-rand(2))
-
- AM.forceMove(T)
- AM.pipe_eject(dir)
- AM.throw_at(target, eject_range, 1)
-
-/obj/structure/disposaloutlet/industrial_feeding_tube/proc/face_atom(atom/A) //Literally stolen from /mob. Sue me.
- if(!A || !x || !y || !A.x || !A.y )
- return
- var/dx = A.x - x
- var/dy = A.y - y
- if(!dx && !dy) // Wall items are graphically shifted but on the floor
- if(A.pixel_y > 16)
- setDir(NORTH)
- else if(A.pixel_y < -16)
- setDir(SOUTH)
- else if(A.pixel_x > 16)
- setDir(EAST)
- else if(A.pixel_x < -16)
- setDir(WEST)
- return
-
- if(abs(dx) < abs(dy))
- if(dy > 0)
- setDir(NORTH)
- else
- setDir(SOUTH)
- else
- if(dx > 0)
- setDir(EAST)
- else
- setDir(WEST)
diff --git a/GainStation13/code/modules/clothing/under/jobs/modcivilian.dm b/GainStation13/code/modules/clothing/under/jobs/modcivilian.dm
index 19a0e1bf..bbb5b9dc 100644
--- a/GainStation13/code/modules/clothing/under/jobs/modcivilian.dm
+++ b/GainStation13/code/modules/clothing/under/jobs/modcivilian.dm
@@ -70,6 +70,7 @@
desc = "A tasteful grey jumpsuit that reminds you of the good old days. Now adjusts to the match the wearer's size!" //description same as above
var/icon_location = 'GainStation13/icons/mob/modclothes/graymodular.dmi' //specify the file path where the modular overlays for those clothes are located
+ var/icon_stuffed_location = 'GainStation13/icons/mob/modclothes/graymodular_stuffed.dmi'
var/mob/living/carbon/U //instance a variable for keeping track of the user
/obj/item/clothing/under/color/grey/modular/equipped(mob/user, slot) //whenever the clothes are in someone's inventory the clothes keep track of who that user is
@@ -93,16 +94,36 @@
for(O in U.internal_organs) //check the user for the organs they have
if(istype(O, /obj/item/organ/genital/belly)) //if that organ is a belly
G = O //treat that organ as a genital
- if(!adjusted) //check the style, if it needs to be the adjusted variants
- if(G.size <= 9) //check that the size is within accepted values, NOTE: these need to be removed later, better to cap organ sizes to begin with
- . += mutable_appearance(icon_location, "belly_[G.size]", GENITALS_UNDER_LAYER) //add, from the clothes' icon file the overlay corresponding to that genital at that size and draw it onto the layer
- else //if not an expected size value, bigger than the max, default to max size
- . += mutable_appearance(icon_location, "belly_9", GENITALS_UNDER_LAYER)
- else //use the alternative adjusted sprites
- if(G.size <= 9)
- . += mutable_appearance(icon_location, "belly_[G.size]_d", GENITALS_UNDER_LAYER)
- else
- . += mutable_appearance(icon_location, "belly_9_d", GENITALS_UNDER_LAYER)
+ // Change to visually update sprite depending on fullness.
+ if(ishuman(O.owner))
+ var/mob/living/carbon/human/H = O.owner
+ var/size = 0
+ var/used_icon_location = icon_location
+
+ switch(H.fullness)
+ if(-100 to FULLNESS_LEVEL_BLOATED) // Normal
+ size = G.size
+ if(FULLNESS_LEVEL_BLOATED to FULLNESS_LEVEL_BEEG) // Take the stuffed sprite of the same size
+ size = G.size
+ used_icon_location = icon_stuffed_location
+ if(FULLNESS_LEVEL_BEEG to FULLNESS_LEVEL_NOMOREPLZ) // Take the stuffed sprite of size + 1
+ size = G.size + 1
+ used_icon_location = icon_stuffed_location
+ if(FULLNESS_LEVEL_NOMOREPLZ to INFINITY)// Take the stuffed sprite of size + 2
+ size = G.size + 2
+ used_icon_location = icon_stuffed_location
+
+ if(!adjusted) //check the style, if it needs to be the adjusted variants
+ if(G.size <= 9+FULLNESS_STUFFED_EXTRA_SPRITE_SIZES) //check that the size is within accepted values, NOTE: these need to be removed later, better to cap organ sizes to begin with. Cap is 9 (max fat stage) + 2 (stuffed stages)
+ . += mutable_appearance(used_icon_location, "belly_[size]", GENITALS_UNDER_LAYER) //add, from the clothes' icon file the overlay corresponding to that genital at that size and draw it onto the layer
+ else //if not an expected size value, bigger than the max, default to max size
+ . += mutable_appearance(used_icon_location, "belly_11", GENITALS_UNDER_LAYER)
+ else //use the alternative adjusted sprites
+ if(G.size <= 9+FULLNESS_STUFFED_EXTRA_SPRITE_SIZES)
+ . += mutable_appearance(used_icon_location, "belly_[size]_d", GENITALS_UNDER_LAYER)
+ else
+ . += mutable_appearance(used_icon_location, "belly_11_d", GENITALS_UNDER_LAYER)
+
if(istype(O, /obj/item/organ/genital/anus)) //if that organ is the butt
G = O
if(suit_style == DIGITIGRADE_SUIT_STYLE) //check if the suit needs to use sprites for digitigrade characters
diff --git a/GainStation13/code/modules/food_and_drinks/stellar_piece.dm b/GainStation13/code/modules/food_and_drinks/stellar_piece.dm
new file mode 100644
index 00000000..2ea6954f
--- /dev/null
+++ b/GainStation13/code/modules/food_and_drinks/stellar_piece.dm
@@ -0,0 +1,51 @@
+// Starbits from Super Mario Galaxy! Had this idea while watching someone do a playthrough in a discord stream.
+// ~~Starbits~~ Stellar Pieces:tm: drop from meteor-like comets which leave a handful behind when they impact, while
+// also not actually dealing any damage to whatever they impact.
+
+/obj/item/reagent_containers/food/snacks/stellar_piece
+ name = "stellar piece" //PlzDontSueMeNintendo
+ desc = "A small bit of crystalized stellar sugar. They're a rare delicacy that sometimes form under particular conditions inside of comets"
+ // I had help creating these sprites because Im worthless at doing sprites from scratch.
+ // Special thanks to @foxtsra on discord!
+ // -Reo
+ icon = 'GainStation13/icons/obj/starbit.dmi'
+ icon_state = "bit"
+ bitesize = 4
+ list_reagents = list(/datum/reagent/consumable/sugar = 1, /datum/reagent/consumable/stellarsugar = 5)
+ tastes = list("nostalgia" = 3)
+ price = 10
+
+
+/obj/item/reagent_containers/food/snacks/stellar_piece/Initialize(mapload, var/bit_color)
+ . = ..()
+
+ if(!bit_color) // Color wasnt specified, lets become a random color.
+ bit_color = pick(list( // These are the colors starbits can be naturally in SMG.
+ "red", // so they're also the colors we can naturally be in spess.
+ "blue",
+ "purple",
+ "yellow",
+ "green",
+ "white",
+ ))
+ switch(bit_color)
+ if("red")
+ color = "#f22604" // Red / Orange. I think it's red, but it seems to be offically labled as orange..
+ if("blue")
+ color = "#097bf6" // Blue.
+ if("purple")
+ color = "#a210e0" // Purple.
+ if("yellow")
+ color = "#e0bf10" // Yellow.
+ if("green")
+ color = "#10e026" // Green.
+ if("white")
+ color = "#e0e0e0" // White... I was considering leaving it unmodified, but this makes it contrast a bit better.
+ else
+ color = bit_color // Some other color.
+ add_overlay("bit_glimmer")
+ return
+
+ desc += "\nThis one seems to be [bit_color]."
+ add_overlay("bit_glimmer")
+
diff --git a/GainStation13/code/modules/reagents/chemistry/reagents/consumable_reagents.dm b/GainStation13/code/modules/reagents/chemistry/reagents/consumable_reagents.dm
index 7b9c6510..981b1170 100644
--- a/GainStation13/code/modules/reagents/chemistry/reagents/consumable_reagents.dm
+++ b/GainStation13/code/modules/reagents/chemistry/reagents/consumable_reagents.dm
@@ -140,6 +140,36 @@
/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
+/datum/reagent/consumable/ethanol/hunchback //drink from goonstation, adapted for here. yay!!
+ name = "Hunchback"
+ description = "Better out than in."
+ reagent_state = LIQUID
+ color = "#5a00009f"
+ metabolization_rate = 0.75 * REAGENTS_METABOLISM
+ taste_description = "nausea"
+ boozepwr = 25
+ var/last_check_time = 0
+ glass_name = "glass of Hunchback"
+ glass_desc = "An alleged cocktail invented by a notorious scientist. Useful in a pinch as an impromptu purgative, or interrogation tool."
+ pH = 4.5
+ value = 1
+
+/datum/reagent/consumable/ethanol/hunchback/on_mob_life(mob/living/carbon/M)
+ if(last_check_time + 50 < world.time)
+ to_chat(M,"You feel yourself gag...")
+ if(M.disgust < 80)
+ M.adjust_disgust(20)
+ SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "gross_food", /datum/mood_event/disgusting_food)
+ last_check_time = world.time
+ for(var/A in M.reagents.reagent_list)
+ var/datum/reagent/R = A
+ if(R != src)
+ M.reagents.remove_reagent(R.type,5)
+ if(M.health > 10)
+ M.adjustToxLoss(4*REM, 0)
+ . = 1
+ ..()
+
// /obj/item/reagent_containers/food/snacks/meat/steak/troll
// name = "Troll steak"
// desc = "In its sliced state it remains dormant, but once the troll meat comes in contact with stomach acids, it begins a perpetual cycle of constant regrowth and digestion. You probably shouldn't eat this."
diff --git a/GainStation13/code/modules/reagents/chemistry/reagents/food_reagents_gs.dm b/GainStation13/code/modules/reagents/chemistry/reagents/food_reagents_gs.dm
new file mode 100644
index 00000000..1303a59e
--- /dev/null
+++ b/GainStation13/code/modules/reagents/chemistry/reagents/food_reagents_gs.dm
@@ -0,0 +1,12 @@
+// This file contains anything that'd go in food_reagents.dm but is unique to GainStation. For modularity's sake.
+
+/datum/reagent/consumable/stellarsugar //Starbit Essence.
+ name = "Stellar Sugar"
+ description = "An edible substance formed by rare peculiar and celestial events, ground into a powder. Delicious!"
+ reagent_state = SOLID
+ color = "#722be3"
+ taste_mult = 5 // It's rare... and has a pretty powerful (albeit positive) presence!
+ nutriment_factor = 10 * REAGENTS_METABOLISM
+ metabolization_rate = 2 * REAGENTS_METABOLISM
+ taste_description = "distant cosmos"
+ value = 7 // It's not easy to get a lot of this stuff... so it sells for about as much as meth.
diff --git a/GainStation13/code/modules/reagents/chemistry/recipes/drinks.dm b/GainStation13/code/modules/reagents/chemistry/recipes/drinks.dm
new file mode 100644
index 00000000..fa37a89c
--- /dev/null
+++ b/GainStation13/code/modules/reagents/chemistry/recipes/drinks.dm
@@ -0,0 +1,6 @@
+/datum/chemical_reaction/hunchback
+ name = "hunchback"
+ id = /datum/reagent/consumable/ethanol/hunchback
+ results = list(/datum/reagent/consumable/ethanol/hunchback = 3)
+ required_reagents = list(/datum/reagent/consumable/tomatojuice = 1, /datum/reagent/consumable/ethanol/whiskey_cola = 2)
+ mix_message = "The chunks of tomato paste hang in the bourbon and cola as an emulsion. It looks as horrible as that sounds."
diff --git a/GainStation13/code/modules/vending/mealdor.dm b/GainStation13/code/modules/vending/mealdor.dm
index a355f108..ff381931 100644
--- a/GainStation13/code/modules/vending/mealdor.dm
+++ b/GainStation13/code/modules/vending/mealdor.dm
@@ -7,40 +7,31 @@
vend_reply = "Enjoy your meal."
products = list(
- /obj/item/reagent_containers/food/snacks/store/cake/cheese = 10,
- /obj/item/reagent_containers/food/snacks/store/cake/pumpkinspice = 10,
- /obj/item/reagent_containers/food/snacks/store/cake/pound_cake = 8,
- /obj/item/reagent_containers/food/snacks/cakeslice/bsvc = 5,
- /obj/item/reagent_containers/food/snacks/cakeslice/bscc = 5,
-// /obj/item/reagent_containers/food/snacks/donut/purefat = 10,
- /obj/item/reagent_containers/food/snacks/fries = 10,
- /obj/item/reagent_containers/food/snacks/donut = 20,
- /obj/item/reagent_containers/food/snacks/candiedapple = 7,
- /obj/item/reagent_containers/food/snacks/burrito = 8,
- /obj/item/reagent_containers/food/snacks/enchiladas = 10,
- /obj/item/reagent_containers/food/snacks/spaghetti = 20,
- /obj/item/reagent_containers/food/snacks/kebab/rat = 7,
- /obj/item/reagent_containers/food/snacks/kebab/rat/double = 6,
- /obj/item/reagent_containers/food/snacks/meatballspaghetti = 10,
- /obj/item/reagent_containers/food/drinks/bottle/orangejuice = 10,
- /obj/item/reagent_containers/food/drinks/bottle/pineapplejuice = 10,
- /obj/item/reagent_containers/food/drinks/bottle/strawberryjuice = 10,
- /obj/item/reagent_containers/food/drinks/beer = 10,
- /obj/item/reagent_containers/food/drinks/soda_cans/cola = 10,
- /obj/item/reagent_containers/food/snacks/pizza/margherita = 10,
- /obj/item/reagent_containers/food/snacks/butterdog = 12,
- /obj/item/reagent_containers/food/snacks/burger/plain = 20,
- /obj/item/reagent_containers/food/snacks/burger/bearger = 10,
- /obj/item/reagent_containers/food/snacks/pie/plump_pie = 8,
- /obj/item/reagent_containers/food/snacks/dough = 20
+ /obj/item/reagent_containers/food/snacks/fries = 3,
+ /obj/item/reagent_containers/food/snacks/donut = 8,
+ /obj/item/reagent_containers/food/snacks/burrito = 4,
+ /obj/item/reagent_containers/food/snacks/spaghetti = 5,
+ /obj/item/reagent_containers/food/snacks/meatballspaghetti = 4,
+ /obj/item/reagent_containers/food/snacks/pizza/margherita = 3,
+ /obj/item/reagent_containers/food/snacks/butterdog = 6,
+ /obj/item/reagent_containers/food/snacks/burger/plain = 6,
+ /obj/item/reagent_containers/food/snacks/pie/plump_pie = 4,
+ /obj/item/reagent_containers/food/snacks/store/cake/cheese = 3,
+ /obj/item/reagent_containers/food/snacks/store/cake/pound_cake = 2,
+ /obj/item/reagent_containers/food/snacks/cakeslice/bsvc = 3,
+ /obj/item/reagent_containers/food/snacks/cakeslice/bscc = 3,
+ /obj/item/reagent_containers/food/snacks/dough = 5,
+ /obj/item/reagent_containers/food/drinks/bottle/orangejuice = 8,
+ /obj/item/reagent_containers/food/drinks/bottle/pineapplejuice = 8,
+ /obj/item/reagent_containers/food/drinks/bottle/strawberryjuice = 8
)
contraband = list(
/obj/item/clothing/mask/fakemoustache = 5,
/obj/item/clothing/head/chefhat = 5,
- /obj/item/reagent_containers/food/snacks/cookie = 10,
- /obj/item/reagent_containers/food/snacks/salad/fruit = 15,
- /obj/item/reagent_containers/food/snacks/salad = 20,
- /obj/item/reagent_containers/food/snacks/salad/hellcobb = 10,
+ /obj/item/reagent_containers/food/snacks/cookie = 5,
+ /obj/item/reagent_containers/food/snacks/salad/fruit = 5,
+ /obj/item/reagent_containers/food/snacks/salad = 5,
+ /obj/item/reagent_containers/food/snacks/salad/hellcobb = 5,
/obj/item/clothing/under/cowkini = 5,
/obj/item/reagent_containers/food/snacks/blueberry_gum = 5
)
diff --git a/GainStation13/icons/mob/modclothes/graymodular_stuffed.dmi b/GainStation13/icons/mob/modclothes/graymodular_stuffed.dmi
new file mode 100644
index 00000000..99b270ce
Binary files /dev/null and b/GainStation13/icons/mob/modclothes/graymodular_stuffed.dmi differ
diff --git a/GainStation13/icons/obj/feeding_tube_industrial.dmi b/GainStation13/icons/obj/feeding_tube_industrial.dmi
deleted file mode 100644
index 058e5f47..00000000
Binary files a/GainStation13/icons/obj/feeding_tube_industrial.dmi and /dev/null differ
diff --git a/GainStation13/icons/obj/starbit.dmi b/GainStation13/icons/obj/starbit.dmi
new file mode 100644
index 00000000..7281d2cb
Binary files /dev/null and b/GainStation13/icons/obj/starbit.dmi differ
diff --git a/GainStation13/sound/effects/star.wav b/GainStation13/sound/effects/star.wav
new file mode 100644
index 00000000..19081da9
Binary files /dev/null and b/GainStation13/sound/effects/star.wav differ
diff --git a/_maps/map_files/OmegaStation/job_changes.dm b/_maps/map_files/OmegaStation/job_changes.dm
index e1961809..b754aa5a 100644
--- a/_maps/map_files/OmegaStation/job_changes.dm
+++ b/_maps/map_files/OmegaStation/job_changes.dm
@@ -65,8 +65,8 @@
selection_color = "#ffffff"
total_positions = 3
spawn_positions = 3
- access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_GENETICS)
- minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_GENETICS)
+ access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_GENETICS, ACCESS_MAINT_TUNNELS)
+ minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_GENETICS, ACCESS_MAINT_TUNNELS)
//Engineering
@@ -96,8 +96,8 @@
MAP_JOB_CHECK
total_positions = 3
spawn_positions = 3
- access = list(ACCESS_ROBOTICS, ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY, ACCESS_MINERAL_STOREROOM, ACCESS_TECH_STORAGE)
- minimal_access = list(ACCESS_ROBOTICS, ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY, ACCESS_MINERAL_STOREROOM, ACCESS_TECH_STORAGE)
+ access = list(ACCESS_MAINT_TUNNELS, ACCESS_ROBOTICS, ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY, ACCESS_MINERAL_STOREROOM, ACCESS_TECH_STORAGE)
+ minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_ROBOTICS, ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY, ACCESS_MINERAL_STOREROOM, ACCESS_TECH_STORAGE)
//Cargo
@@ -126,14 +126,14 @@
/datum/job/bartender/New()
..()
MAP_JOB_CHECK
- access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_WEAPONS)
- minimal_access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_WEAPONS)
+ access = list(ACCESS_MAINT_TUNNELS, ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_WEAPONS)
+ minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_WEAPONS)
/datum/job/cook/New()
..()
MAP_JOB_CHECK
- access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_WEAPONS)
- minimal_access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_WEAPONS)
+ access = list(ACCESS_MAINT_TUNNELS, ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_WEAPONS)
+ minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_WEAPONS)
/datum/job/hydro/New()
..()
diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm
index a0d8cf94..e036ed8d 100644
--- a/code/__DEFINES/mobs.dm
+++ b/code/__DEFINES/mobs.dm
@@ -155,6 +155,7 @@
#define FULLNESS_LEVEL_FILLED 40
#define FULLNESS_LEVEL_HALF_FULL 20
#define FULLNESS_LEVEL_EMPTY 0
+#define FULLNESS_STUFFED_EXTRA_SPRITE_SIZES 2
//Fullness emote cooldown
#define FULLNESS_REDUCTION_COOLDOWN 50
diff --git a/code/datums/traits/neutral.dm b/code/datums/traits/neutral.dm
index 77b03dd8..3c1f24e6 100644
--- a/code/datums/traits/neutral.dm
+++ b/code/datums/traits/neutral.dm
@@ -191,10 +191,10 @@
medical_record_text = "Patient has been observed eating inedible garbage."
/datum/quirk/trashcan/add()
- add_verb(quirk_holder, /mob/living/proc/eat_trash)
+ quirk_holder.verbs += /mob/living/proc/eat_trash
/datum/quirk/trashcan/remove()
- remove_verb(quirk_holder, /mob/living/proc/eat_trash)
+ quirk_holder.verbs -= /mob/living/proc/eat_trash
/datum/quirk/universal_diet
name = "Universal diet"
diff --git a/code/modules/cargo/packs/service.dm b/code/modules/cargo/packs/service.dm
index 84fb47a5..2db1d631 100644
--- a/code/modules/cargo/packs/service.dm
+++ b/code/modules/cargo/packs/service.dm
@@ -346,6 +346,6 @@
/datum/supply_pack/service/vending/mealdor
name = "Meal Vendor Supply Crate"
desc = "Suprising one to order. If you need a refill for the meal vendor, someone's immobile somewhere. And since you managed to make it to cargo... Well it's not our job to say no!"
- cost = 10000
+ cost = 5000
contains = list(/obj/item/vending_refill/mealdor)
crate_name = "meal vendor supply crate"
diff --git a/code/modules/events/aurora_caelus.dm b/code/modules/events/aurora_caelus.dm
index 18a21eb4..ded65d8f 100644
--- a/code/modules/events/aurora_caelus.dm
+++ b/code/modules/events/aurora_caelus.dm
@@ -75,6 +75,10 @@
var/aurora_color = aurora_colors[aurora_progress]
for(var/turf/S in applicable_areas)
S.set_light(l_color = aurora_color)
+ //GS Add: Starbits rarely come durring caelus events!
+ if(prob(10))
+ spawn_meteors(rand(3,6), list(/obj/effect/meteor/stellar_cluster))
+ //GS Add end.
/datum/round_event/aurora_caelus/end()
priority_announce("The aurora caelus event is now ending. Starlight conditions will slowly return to normal. When this has concluded, please return to your workplace and continue work as normal. Have a pleasant shift, [station_name()], and thank you for watching with us.",
diff --git a/code/modules/food_and_drinks/recipes/drinks_recipes.dm b/code/modules/food_and_drinks/recipes/drinks_recipes.dm
index 3fd0e828..00cacf88 100644
--- a/code/modules/food_and_drinks/recipes/drinks_recipes.dm
+++ b/code/modules/food_and_drinks/recipes/drinks_recipes.dm
@@ -1001,4 +1001,8 @@
/datum/chemical_reaction/drink/cinderella
results = list(/datum/reagent/consumable/cinderella = 50)
- required_reagents = list(/datum/reagent/consumable/pineapplejuice = 10, /datum/reagent/consumable/orangejuice = 10, /datum/reagent/consumable/lemonjuice = 5, /datum/reagent/consumable/ice = 5, /datum/reagent/consumable/sol_dry = 20, /datum/reagent/consumable/ethanol/bitters = 2)
\ No newline at end of file
+ required_reagents = list(/datum/reagent/consumable/pineapplejuice = 10, /datum/reagent/consumable/orangejuice = 10, /datum/reagent/consumable/lemonjuice = 5, /datum/reagent/consumable/ice = 5, /datum/reagent/consumable/sol_dry = 20, /datum/reagent/consumable/ethanol/bitters = 2)
+
+/datum/chemical_reaction/drink/maui_sunrise
+ results = list(/datum/reagent/consumable/ethanol/maui_sunrise = 10)
+ required_reagents = list(/datum/reagent/consumable/ethanol/coconut_rum = 2, /datum/reagent/consumable/pineapplejuice = 2, /datum/reagent/consumable/ethanol/yuyake = 1, /datum/reagent/consumable/triple_citrus = 1, /datum/reagent/consumable/lemon_lime = 4)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index ca373f92..a47b40e9 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -1728,6 +1728,10 @@ GLOBAL_LIST_EMPTY(roundstart_races)
if(FULLNESS_LEVEL_NOMOREPLZ to INFINITY)
H.throw_alert("fullness", /obj/screen/alert/beegbelly)
+ // Update here for changing belly to match stuffed-ness
+ var/obj/item/organ/genital/belly/B= H.getorganslot("belly")
+ if(!isnull(B) && istype(B))
+ B.update()
switch(H.fatness)
if(FATNESS_LEVEL_BLOB to INFINITY)
diff --git a/code/modules/recycling/disposal/outlet.dm b/code/modules/recycling/disposal/outlet.dm
index 54d6b16f..cca78f84 100644
--- a/code/modules/recycling/disposal/outlet.dm
+++ b/code/modules/recycling/disposal/outlet.dm
@@ -16,10 +16,6 @@
/obj/structure/disposaloutlet/Initialize(mapload, obj/structure/disposalconstruct/make_from)
. = ..()
- //GS Add: Hacky Solution, but it works.
- if(type == /obj/structure/disposaloutlet/industrial_feeding_tube)
- return
- //GS Add End.
if(make_from)
setDir(make_from.dir)
make_from.forceMove(src)
diff --git a/code/modules/research/xenobiology/crossbreeding/_clothing.dm b/code/modules/research/xenobiology/crossbreeding/_clothing.dm
index 71bf2cdf..382a313b 100644
--- a/code/modules/research/xenobiology/crossbreeding/_clothing.dm
+++ b/code/modules/research/xenobiology/crossbreeding/_clothing.dm
@@ -139,7 +139,10 @@ Slimecrossing Armor
/obj/item/clothing/suit/armor/heavy/adamantine/equipped(mob/living/carbon/human/user, slot) //Gives you a trait to prevent increasing speed.
. = ..()
if(slot == SLOT_WEAR_SUIT)
- ADD_TRAIT(user, TRAIT_IMMUTABLE_SLOW, "immutableslow_[REF(src)]")
+ ADD_TRAIT(user, TRAIT_IMMUTABLE_SLOW, "immutableslow_[REF(src)]") //Adds trait to prevent increases in movespeed
+ user.unignore_slowdown("slimestatus") //Deletes the stable red trait on equip to prevent bypassing it
+ if(!(slot == SLOT_WEAR_SUIT))
+ REMOVE_TRAIT(user, TRAIT_IMMUTABLE_SLOW, "immutableslow_[REF(src)]")
/obj/structure/light_prism/spectral
name = "spectral light prism"
@@ -155,4 +158,4 @@ Slimecrossing Armor
. = ..()
color = newcolor
light_color = newcolor
- set_light(5)
\ No newline at end of file
+ set_light(5)
diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
index 8b0b6cc6..5d72fef4 100644
--- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
+++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
@@ -772,7 +772,8 @@ datum/status_effect/stabilized/blue/on_remove()
if(HAS_TRAIT(owner, TRAIT_IMMUTABLE_SLOW))
return ..()
else
- owner.ignore_slowdown("slimestatus")
+ owner.ignore_slowdown("slimestatus")
+ return ..()
/datum/status_effect/stabilized/red/on_remove()
owner.unignore_slowdown("slimestatus")
diff --git a/config/motd.txt b/config/motd.txt
index ea0c8ba0..90e94e49 100644
--- a/config/motd.txt
+++ b/config/motd.txt
@@ -1,2 +1,2 @@
-Welcome to Gain Station 13!
These are our rules kindly follow them:
1: This server contains Not Safe For Work (NSFW) content if you are a minor you'll be removed.
2: Talk in character while playing on the server if you got to ask something related to game mechanics or other, please keep it OOC (By pressing O).
3: Killing without a reason unless an antagonist shall be punished with a ban, it may vary at the severity of the situation.
4: Remember to be respectful to admins and players.
5: Knowing certain things that your character does not know (Ex. You get killed and know the antagonist and once you get cloned you say it in comms.) is considered to be Metagaming.
6: Offensive characters and racism will be punished.
7: Griefing the station or player-made stuff will not be approved and will result in a ban.
Thank you for reading these rules, now it's time for you to play!
\ No newline at end of file
+Welcome to Gain Station 13!
These are our rules kindly follow them:
1: This server is 18+. If you are below the age of 18, you may not participate in discord or the game server.
2: Be respectful to other players. Don't harass anyone or be hateful towards them.
3: Use OOC channel for OOC questions and don't acknowledge current ongoing round in OOC.
4: Don't metagame or powergame.
5: The server follows a medium roleplay (MRP) standard. Have your characters react in a plausible way and have their motives make sense. Don't use netspeak IC either.
6: No names that reference fictional media, OOC, or real world.
7: Don't kill other players without good IC justification for it.
8: Don't grief the station, players or equipment.
9: Don't play Command without good knowledge of the role.
10: The administration team reserves a right to impose any bans, warnings etc in case of any unstated violations or loopholes.
More details on these rules is found in our discord!
\ No newline at end of file
diff --git a/hyperstation/icons/obj/genitals/belly_stuffed.dmi b/hyperstation/icons/obj/genitals/belly_stuffed.dmi
new file mode 100644
index 00000000..23ea708b
Binary files /dev/null and b/hyperstation/icons/obj/genitals/belly_stuffed.dmi differ
diff --git a/icons/drinks.dmi b/icons/drinks.dmi
new file mode 100644
index 00000000..fdb4b820
Binary files /dev/null and b/icons/drinks.dmi differ
diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi
index 7ca51d78..33bdc55f 100644
Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ
diff --git a/icons/obj/recycling.dmi b/icons/obj/recycling.dmi
index b8d2aa97..58efedac 100644
Binary files a/icons/obj/recycling.dmi and b/icons/obj/recycling.dmi differ
diff --git a/modular_citadel/code/modules/arousal/organs/genitals.dm b/modular_citadel/code/modules/arousal/organs/genitals.dm
index 6e37beef..da28efd1 100644
--- a/modular_citadel/code/modules/arousal/organs/genitals.dm
+++ b/modular_citadel/code/modules/arousal/organs/genitals.dm
@@ -474,11 +474,25 @@
colourcode = S.color_src
if(G.slot == "belly") // GS13
- genital_overlay.icon = 'hyperstation/icons/obj/genitals/belly.dmi'
+
+ // Default settings
genital_overlay.icon_state = "belly_[size]"
genital_overlay.layer = -UNDER_BACK_LAYER
colourcode = "belly_color"
+ // Change belly sprite and size based on current fullness
+ switch(H.fullness)
+ if(-100 to FULLNESS_LEVEL_BLOATED)
+ genital_overlay.icon = 'hyperstation/icons/obj/genitals/belly.dmi'
+ if(FULLNESS_LEVEL_BLOATED to FULLNESS_LEVEL_BEEG)
+ genital_overlay.icon = 'hyperstation/icons/obj/genitals/belly_stuffed.dmi'
+ if(FULLNESS_LEVEL_BEEG to FULLNESS_LEVEL_NOMOREPLZ)
+ genital_overlay.icon = 'hyperstation/icons/obj/genitals/belly_stuffed.dmi'
+ genital_overlay.icon_state = "belly_[size+1]"
+ if(FULLNESS_LEVEL_NOMOREPLZ to INFINITY)
+ genital_overlay.icon = 'hyperstation/icons/obj/genitals/belly_stuffed.dmi'
+ genital_overlay.icon_state = "belly_[size+2]"
+
//sizecheck added to prevent rendering blank icons
if(G.slot == "anus" && G.size > 0) // GS13
genital_overlay.icon = 'hyperstation/icons/obj/genitals/butt.dmi'
diff --git a/tgstation.dme b/tgstation.dme
index cf903d3b..f1e1a7c2 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -3080,7 +3080,6 @@
#include "GainStation13\code\clothing\head.dm"
#include "GainStation13\code\clothing\suits.dm"
#include "GainStation13\code\datums\components\fattening_door.dm"
-#include "GainStation13\code\datums\components\crafting\recipes\recipes_misc_gs.dm"
#include "GainStation13\code\datums\diseases\advance\symptoms\berry.dm"
#include "GainStation13\code\datums\mutations\fatfang.dm"
#include "GainStation13\code\datums\mutations\radfat.dm"
@@ -3088,6 +3087,7 @@
#include "GainStation13\code\game\lore_papers.dm"
#include "GainStation13\code\game\sound.dm"
#include "GainStation13\code\game\area\ruins.dm"
+#include "GainStation13\code\game\gamemodes\meteor\meteors_gs.dm"
#include "GainStation13\code\game\objects\effects\spawners\choco_slime_delivery.dm"
#include "GainStation13\code\game\objects\items\docility_implant.dm"
#include "GainStation13\code\game\objects\items\RCD.dm"
@@ -3098,7 +3098,6 @@
#include "GainStation13\code\machinery\adipoelectric_transformer.dm"
#include "GainStation13\code\machinery\fattening_turret.dm"
#include "GainStation13\code\machinery\feeding_tube.dm"
-#include "GainStation13\code\machinery\feeding_tube_industrial.dm"
#include "GainStation13\code\machinery\supply_teleporter.dm"
#include "GainStation13\code\mechanics\fatness.dm"
#include "GainStation13\code\mechanics\fatrousal.dm"
@@ -3122,6 +3121,7 @@
#include "GainStation13\code\modules\food_and_drinks\drinks.dm"
#include "GainStation13\code\modules\food_and_drinks\food.dm"
#include "GainStation13\code\modules\food_and_drinks\recipes_bigpizza.dm"
+#include "GainStation13\code\modules\food_and_drinks\stellar_piece.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"
@@ -3139,6 +3139,8 @@
#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\reagents\food_reagents_gs.dm"
+#include "GainStation13\code\modules\reagents\chemistry\recipes\drinks.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"
diff --git a/tools/dmitool/.gradle/8.8/fileHashes/fileHashes.lock b/tools/dmitool/.gradle/8.8/fileHashes/fileHashes.lock
index 34990877..fc1d5c5b 100644
Binary files a/tools/dmitool/.gradle/8.8/fileHashes/fileHashes.lock and b/tools/dmitool/.gradle/8.8/fileHashes/fileHashes.lock differ
diff --git a/v_CHOMPstation2/sound/rakshasa/Corrosion3.ogg b/v_CHOMPstation2/sound/rakshasa/Corrosion3.ogg
deleted file mode 100644
index cef4bf5c..00000000
Binary files a/v_CHOMPstation2/sound/rakshasa/Corrosion3.ogg and /dev/null differ