Merge remote-tracking branch 'upstream/master' into FactorioFeeding

This commit is contained in:
ReoDaProtovali
2024-10-06 12:31:40 -05:00
33 changed files with 275 additions and 542 deletions
+19
View File
@@ -221,3 +221,22 @@ tools/MapAtmosFixer/MapAtmosFixer/bin/*
!/config/title_screens/images/exclude
config/admins.txt
_maps/RandomRuins_SpaceRuins_TheDerelictProject.dmm
tools/dmitool/.gradle/nb-cache/trust/2018FCA27E9B9F1F5BEED454BF477F4B8A12F37DC9D4B9DA792466A05ED63656
tools/dmitool/.gradle/buildOutputCleanup/cache.properties
tools/dmitool/.gradle/buildOutputCleanup/buildOutputCleanup.lock
tools/dmitool/.gradle/8.9/gc.properties
tools/dmitool/.gradle/8.9/fileHashes/fileHashes.lock
tools/dmitool/.gradle/8.9/fileHashes/fileHashes.bin
tools/dmitool/.gradle/8.9/fileChanges/last-build.bin
tools/dmitool/.gradle/8.9/dependencies-accessors/gc.properties
tools/dmitool/.gradle/8.9/checksums/checksums.lock
tools/dmitool/.gradle/8.8/fileHashes/fileHashes.lock
tools/dmitool/.gradle/8.8/fileHashes/fileHashes.bin
tools/dmitool/.gradle/buildOutputCleanup/cache.properties
tools/dmitool/.gradle/buildOutputCleanup/buildOutputCleanup.lock
tools/dmitool/.gradle/8.8/fileHashes/fileHashes.lock
tools/dmitool/.gradle/8.8/fileHashes/fileHashes.bin
tools/dmitool/.gradle/buildOutputCleanup/cache.properties
tools/dmitool/.gradle/buildOutputCleanup/buildOutputCleanup.lock
tools/dmitool/.gradle/8.8/fileHashes/fileHashes.lock
tools/dmitool/.gradle/8.8/fileHashes/fileHashes.bin
@@ -1,17 +0,0 @@
// GS miscellaneous recipes
/datum/crafting_recipe/industrial_feeding_tube
name = "Industrial Feeding Tube"
reqs = list(
// /obj/machinery/iv_drip/feeding_tube = 1, //Removing this. Seems to be buggy with not-items used to craft
/obj/item/stack/sheet/metal = 5,
/obj/item/stack/sheet/plastic = 5,
/obj/item/pipe = 2,
/obj/item/stock_parts/matter_bin = 2
)
parts = list(
/obj/item/stock_parts/matter_bin = 2
)
result = /obj/structure/disposaloutlet/industrial_feeding_tube
tools = list(TOOL_WELDER, TOOL_WRENCH, TOOL_SCREWDRIVER)
category = CAT_MISC
@@ -0,0 +1,53 @@
///////////////////////
//Meteor types
///////////////////////
//Starbit reference
/obj/effect/meteor/stellar_cluster
name = "glittery comet"
desc = "A sparkling mass of crystalized spacedust. ...It looks oddly tasty?"
icon = 'GainStation13/icons/obj/starbit.dmi'
icon_state = "cluster"
hits = 1
hitpwr = 1
dropamt = 5
threat = 1
meteorsound = 'GainStation13/sound/effects/star.wav'
meteordrop = list(/obj/item/reagent_containers/food/snacks/stellar_piece)
/obj/effect/meteor/stellar_cluster/Initialize(mapload, target)
. = ..()
dropamt = rand(3,7) //Random amount of bits...
/obj/effect/meteor/stellar_cluster/Move()
. = ..()
if(.)
new /obj/effect/temp_visual/telekinesis(get_turf(src))
/obj/effect/meteor/stellar_cluster/Bump(atom/A)
if(!A)
return
ram_turf(get_turf(A))
playsound(src.loc, meteorsound, 40, 1)
get_hit()
/obj/effect/meteor/stellar_cluster/ram_turf(turf/T) //Sometimes it'll leave behind bits as it goes
if(isspaceturf(T))
return
if(dropamt <= 2)
return
if(prob(5))
dropamt--
var/thing_to_spawn = pick(meteordrop)
new thing_to_spawn(T)
/obj/effect/meteor/stellar_cluster/get_hit()
hits--
if(hits <= 0)
make_debris()
meteor_effect()
qdel(src)
@@ -1,462 +0,0 @@
/**
* Contains:
* Industrial Feeding Tube
*/
/obj/structure/disposaloutlet/industrial_feeding_tube
name = "\improper industrial feeding tube"
desc = "An imposing machine designed to pump an absurd amount of \"food\" down something's throat. It seems to connect to disposal pipes."
icon = 'GainStation13/icons/obj/feeding_tube_industrial.dmi'
icon_state = "base"
max_integrity = 500 //Durable...
anchored = FALSE
/// Is it welded down?
var/welded = FALSE
/// Who the tube is attached to
var/mob/living/attached
/// Where the tube tries to dump it's stuff into
var/output_dest
/// It's Glogged !
var/clogged = FALSE
/// Are we currently pumping?
var/pumping = FALSE
/// Stuff we're currently trying to pump out
var/list/pump_stuff = list()
/// How many items we can push per-pump.
var/pump_limit = 5
/obj/structure/disposaloutlet/industrial_feeding_tube/Initialize(mapload)
. = ..()
update_icon()
if(anchored) // So it can be mapped in, attached to something.
trunk = locate() in loc
if(!trunk)
return
trunk.linked = src // link the pipe trunk to self
anchored = TRUE
welded = TRUE //Make it functional
/obj/structure/disposaloutlet/industrial_feeding_tube/CheckParts(list/parts_list)
..()
pump_limit = 0
for(var/obj/item/stock_parts/matter_bin/mb in contents)
if(mb in pump_stuff) //stuff we're going to pump are not being used to build us.
continue
pump_limit += mb.rating * 2.5 // ~20 items per pump with 2 bluespace bins
pump_limit = ceil(pump_limit) //Only whole numbers
/obj/structure/disposaloutlet/industrial_feeding_tube/deconstruct(disassembled)
if(!(flags_1 & NODECONSTRUCT_1))
new /obj/item/stack/sheet/metal(loc, 5)
new /obj/item/stack/sheet/plastic(loc, 5)
new /obj/item/pipe/binary(loc, PIPE_STRAIGHT, NORTH)
new /obj/item/pipe/binary(loc, PIPE_STRAIGHT, NORTH)
if(contents) //Anything still glogged inside...
for(var/atom/movable/AM in src)
AM.forceMove(loc)
qdel(src)
/obj/structure/disposaloutlet/industrial_feeding_tube/Destroy()
if(attached)
attached = null
if(output_dest)
output_dest = null
if(LAZYLEN(contents)) // Just to be safe, lets dump everything out before it's deleted.
for(var/atom/movable/AM in contents)
if(istype(AM, /obj/item/stock_parts/matter_bin))
if(AM in pump_stuff) // Unless it's one of our component parts..
AM.forceMove(loc)
continue
qdel(AM)
return ..()
/obj/structure/disposaloutlet/industrial_feeding_tube/MouseDrop(mob/living/target)
. = ..()
if(!usr.canUseTopic(src, BE_CLOSE)) // iscarbon() so that xenos/wendigos(?) can do feeding stuff maybe. Maybe.
return
if(!welded)
to_chat(usr, "<span class='warning'>You need to weld down \the [src] before you can use it.</span>")
return
if(!isliving(target))
return
if(attached)
attached.visible_message("<span class='warning'>[attached] is detached from [src].</span>")
attached = null
update_icon()
return
if(iscarbon(target))
var/mob/living/carbon/feedee = target
if(HAS_TRAIT(feedee, TRAIT_TRASHCAN))
var/food_dump = input(usr, "Where do you shove the tube? (cancel for to just feed normally)", "Select belly") as null|anything in feedee.vore_organs
if(food_dump && isbelly(food_dump))
// Best to be safe with this thing. Since you can eat pretty much anythign with it...
// Including People, Intentionally or otherwise.
if(usr != feedee) // If someone is feeding themself, skip the prefcheck.
var/feedeePrefCheck = alert(feedee, "[usr] is attempting to shove \the [src]'s tube into your [food_dump]! Do you want this?", "THE TUBE", "Yes!!", "No!")
if(feedeePrefCheck != "Yes!!")
to_chat(usr, "[feedee] doesnt want to be fed by \the [src]...")
return
output_dest = food_dump //Attach to vorebelly
attached = feedee
update_icon()
START_PROCESSING(SSobj, src)
face_atom(feedee)
return
//Either we arn't attaching to vorebelly, or we arnt able to. Let's try to feed them normally!
if(usr != feedee) //
var/feedeePrefCheck = alert(feedee, "[usr] is attempting to shove \the [src]'s tube into your mouth! Do you want this?", "THE TUBE", "Yes!!", "No!")
if(feedeePrefCheck != "Yes!!")
to_chat(usr, "[feedee] doesnt want to be fed by \the [src]...")
return
output_dest = feedee //Attach normally
attached = feedee
update_icon()
START_PROCESSING(SSobj, src)
face_atom(feedee)
return
/obj/structure/disposaloutlet/industrial_feeding_tube/process()
if(!attached)
return PROCESS_KILL
if(!(get_dist(src, attached) <= 1 && isturf(attached.loc)))
to_chat(attached, "<span class='userdanger'>The feeding hose is yanked out of you!</span>")
attached = null
output_dest = null
update_icon()
return PROCESS_KILL
face_atom(attached)
/obj/structure/disposaloutlet/industrial_feeding_tube/update_overlays()
// A lot of this is temp. More likely than not you shouldnt see this comment as it'll be properly updated when reo PRs this.
// Or it wont because epic fail :333
. = ..()
cut_overlays()
var/mutable_appearance/tube_overlay = mutable_appearance('GainStation13/icons/obj/feeding_tube_industrial.dmi', "tube_idle")
if(pumping)
tube_overlay.icon_state = "tube-pump"
else
if(attached)
tube_overlay.icon_state = "tube-active"
else
tube_overlay.icon_state = "tube-idle"
if(welded) //if we're not welded, dont show our light on.
add_overlay("light-[clogged ? "r" : "g"]")
add_overlay(tube_overlay)
// expel the contents of the holder object, then delete it
// called when the holder exits the outlet
/obj/structure/disposaloutlet/industrial_feeding_tube/expel(obj/structure/disposalholder/H)
var/clunkVol = LAZYLEN(H.contents)
if(H.hasmob) //Uh oh-
clunkVol += 25
playsound(src, H.hasmob ? "clang" : "clangsmall", clamp(clunkVol, 5, H.hasmob ? 50 : 25))
H.active = FALSE
H.vent_gas(get_turf(src))
if(clogged)
clog(H.contents)
else
for(var/atom/movable/AM in H.contents)
pump_stuff += AM // Get ready to pump!
AM.forceMove(src)
if(!pumping) //Lets start a new pump cycle if we arnt pumping. Otherwise, it'll just be added to the queue.
pump()
qdel(H)
/obj/structure/disposaloutlet/industrial_feeding_tube/proc/pump(repeat = TRUE, unlimited = FALSE)
if(clogged)
return
var/list/this_pump = list() //What we're going to pump this cycle
var/item_count = 0
for(var/atom/movable/AM in pump_stuff)
this_pump += AM // Add to the stuff we're currently pumping
item_count++
if(item_count > pump_limit && !unlimited) //We're pumping as much as our parts allow!
break
if(!pumping)
pumping = TRUE
update_icon()
spawn(8)
pumping = FALSE
update_icon()
spawn(9) //Wait for the animation to finish
if(!output_dest || !attached) //We either arnt, or got disconnected by time stuff was about to splort out!
spew(this_pump, TRUE)
if(LAZYLEN(pump_stuff) && repeat)
pump()
return
var/fed_something = FALSE
// Feed Normally
if(isliving(output_dest))
var/list/not_food = list()
for(var/atom/movable/AM in this_pump)
if(istype(AM, /obj/item/reagent_containers/food/snacks))
var/obj/item/reagent_containers/food/snacks/food = AM
var/datum/reagents/food_reagents = food.reagents
if(food_reagents.total_volume)
var/food_size = food_reagents.total_volume //We're cramming the Whole Thing down your throat~
SEND_SIGNAL(food, COMSIG_FOOD_EATEN, attached)
food_reagents.reaction(attached, INGEST, food_size)
food_reagents.trans_to(attached, food_size)
food.checkLiked(food_size, attached) //...Hopefully you like the taste.
if(food.trash) //Lets make the trash the food's supposed to make, if it has any
var/obj/item/trash = food.generate_trash(src)
if(not_food)
not_food += trash // If it's already going to get clogged, clog it more with the trash
else
trash.forceMove(get_turf(src)) // Otherwise move it to the tile. For convinience
fed_something = TRUE
pump_stuff -= food
qdel(food) //Gulp...
continue
else
not_food += AM // That's not (traditionally) edible!
if(LAZYLEN(not_food))
clog(not_food) // Now you've gone and clogged us...
// Feed Voraciously
if(isbelly(output_dest))
var/list/inedible //Some things shouldnt be eaten...
for(var/atom/movable/AM in this_pump)
pump_stuff -= AM // We're putting this in. Remove it from the list.
if(isitem(AM))
var/obj/item/I = AM
if(is_type_in_list(I, item_vore_blacklist))
inedible += I
continue
if(isliving(AM))
var/mob/living/cutie = AM
if(cutie.devourable != TRUE) //Do not eat this QT...
inedible += cutie
continue
fed_something = TRUE
AM.forceMove(output_dest)
if(inedible)
clog(inedible)
// After everything, if we've pushed something, play the "rubber tube noise"
// It's technically an evil digestion sound from a snowflake shadekin, but it makes for a good tube sound. Thanks Verkie!
if(fed_something)
playsound(attached.loc, 'v_CHOMPstation2/sound/rakshasa/Corrosion3.ogg', rand(10,50), 1)
if(LAZYLEN(pump_stuff) && repeat)
pump()
else
pumping = FALSE
update_icon()
/obj/structure/disposaloutlet/industrial_feeding_tube/expel_holder(obj/structure/disposalholder/H, playsound=FALSE)
if(playsound)
playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
if(!H)
return
spew(H.contents)
H.vent_gas(get_turf(src))
qdel(H)
/obj/structure/disposaloutlet/industrial_feeding_tube/attack_hand(mob/user)
. = ..()
if(attached)
attached.visible_message("<span class='warning'>[attached] is detached from [src].</span>")
attached = null
output_dest = null
update_icon()
return
/obj/structure/disposaloutlet/industrial_feeding_tube/attackby(obj/item/I, mob/living/user, params)
if(user.a_intent != INTENT_HELP)
return ..()
switch(I.tool_behaviour)
if(TOOL_WRENCH)
if(welded)
to_chat(user, "<span class='warning'>\The [src] is firmly welded to the floor. Cut the floorwelds before trying to unwrench it!</span>")
return TRUE
var/turf/T = get_turf(src)
if(T.intact && isfloorturf(T))
to_chat(user, "<span class='warning'>You need to remove the floor tiles before [anchored ? "detaching" : "attaching"] \the [src]!</span>")
return TRUE
if(anchored)
I.play_tool_sound(src, 100)
anchored = FALSE
trunk.linked = null
trunk = null
attached = null
output_dest = null
user.visible_message("<span class='notice'>[user] detaches \the [src] from the floor!</span>")
return TRUE
else
var/found_trunk = FALSE
for(var/obj/structure/disposalpipe/P in T)
if(istype(P, /obj/structure/disposalpipe/trunk))
var/obj/structure/disposalpipe/trunk/newtrunk = P
if(newtrunk.linked) //Trunk is already linked to something
continue
found_trunk = TRUE
trunk = newtrunk
break
if(!found_trunk)
to_chat(user, "<span class='warning'>\The [src] requires a trunk underneath it in order to work!</span>")
return
to_chat(user, "<span class='notice'>You attach \the [src] to the trunk.</span>")
anchored = TRUE
I.play_tool_sound(src, 100)
update_icon()
return
if(TOOL_CROWBAR)
if(!clogged)
to_chat(user, "<span class='notice'>\The [src] doesnt seem to be clogged at the moment...")
return TRUE
user.visible_message("<span class='italics'>[user] starts to pry open the maintenance hatch of \the [src], attempting to unclog it...</span>")
if(do_after(user, 30, TRUE, src))
user.visible_message("<span class='notice'>[user] unclogs \the [src]!</span>")
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, "<span class='danger'>\The [src] needs to be welded to a trunk.</span>")
return TRUE
to_chat(user, "<span class='notice'>You start welding \the [src] in place...</span>")
else
if(clogged) // There's junk inside!
to_chat(user, "<span class='warning'>There's junk inside \the [src]! Clean it out before trying to remove it!</span>")
return TRUE
//Already welded, lets cut it free
to_chat(user, "<span class='notice'>You start slicing the floorweld off \the [src]...</span>")
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, "<span class='notice'>You slice the floorweld off [src].</span>")
welded = FALSE
trunk.linked = null
return TRUE
else
to_chat(user, "<span class='notice'>You weld \the [src] to the floor.</span>")
welded = TRUE
trunk.linked = src
return TRUE
else
playsound(src, 'sound/items/welder2.ogg', 100, 1)
to_chat(user, "<span class='notice'>You begin deconstructing \the [src]</span>")
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)
@@ -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
@@ -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")
@@ -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,"<span class='notice'>You feel yourself gag...</span>")
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."
@@ -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.
@@ -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."
+21 -30
View File
@@ -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
)
Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.
+8 -8
View File
@@ -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()
..()
+1
View File
@@ -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
+2 -2
View File
@@ -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"
+1 -1
View File
@@ -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"
+4
View File
@@ -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.",
@@ -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)
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)
@@ -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)
@@ -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)
@@ -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)
set_light(5)
@@ -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")
+1 -1
View File
@@ -1,2 +1,2 @@
<!-- Most valid html will work in here, excluding images. -->
<p style="text-align: center; padding-left: 80px;"><strong><span style="color: #000000;">Welcome to</span> <span style="color: #003366;">Gain Station 13</span><span style="color: #000000;">!</span><br /><br /><br /><span style="color: #000000;">These are our rules kindly follow them:</span></strong><br /><br /><span style="color: #000000;"><em><strong>1:</strong></em> This server contains Not Safe For Work (NSFW) content if you are a minor you'll be removed.</span><br /><br /><span style="color: #000000;"><em><strong>2:</strong></em> 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).</span><br /><br /><span style="color: #000000;"><em><strong>3: </strong></em>Killing without a reason unless an antagonist shall be punished with a ban, it may vary at the severity of the situation.</span><br /><br /><span style="color: #000000;"><em><strong>&nbsp;4:</strong> </em>Remember to be respectful to admins and players.</span><br /><br /><span style="color: #000000;"><em><strong>5:</strong></em> 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.</span><br /><br /><span style="color: #000000;"><em><strong>6:</strong></em> Offensive characters and racism will be punished.</span><br /><br /><span style="color: #000000;"><em><strong>7:</strong></em> Griefing the station or player-made stuff will not be approved and will result in a ban.</span><br /><br /><strong><span style="color: #000000;">Thank you for reading these rules, now it's time for you to play!</span><br /><br /><br /></strong></p>
<p style="text-align: center; padding-left: 80px;"><strong><span style="color: #5c1717;">Welcome to</span> <span style="color: #003366;">Gain Station 13</span><span style="color: #5c1717;">!</span><br /><br /><br /><span style="color: #5c1717;">These are our rules kindly follow them:</span></strong><br /><br /><span style="color: #5c1717;"><em><strong>1:</strong></em> This server is 18+. If you are below the age of 18, you may not participate in discord or the game server.</span><br /><br /><span style="color: #5c1717;"><em><strong>2:</strong></em> Be respectful to other players. Don't harass anyone or be hateful towards them. </span><br /><br /><span style="color: #5c1717;"><em><strong>3: </strong></em>Use OOC channel for OOC questions and don't acknowledge current ongoing round in OOC.</span><br /><br /><span style="color: #5c1717;"><em><strong>&nbsp;4:</strong> </em>Don't metagame or powergame.</span><br /><br /><span style="color: #5c1717;"><em><strong>5:</strong></em> 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.</span><br /><br /><span style="color: #5c1717;"><em><strong>6:</strong></em> No names that reference fictional media, OOC, or real world.</span><br /><br /><span style="color: #5c1717;"><em><strong>7:</strong></em> Don't kill other players without good IC justification for it.</span><br /><br /><span style="color: #5c1717;"><em><strong>8:</strong></em> Don't grief the station, players or equipment.</span><br /><br /><span style="color: #5c1717;"><em><strong>9:</strong></em> Don't play Command without good knowledge of the role.</span><br /><br /><span style="color: #5c1717;"><em><strong>10:</strong></em> The administration team reserves a right to impose any bans, warnings etc in case of any unstated violations or loopholes.</span><br /><br /><strong> <span style="color: #5c1717;">More details on these rules is found in our discord!</span><br /><br /><br /></strong></p>
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 58 KiB

@@ -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'
+4 -2
View File
@@ -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"
Binary file not shown.
Binary file not shown.