Merge remote-tracking branch 'upstream/master' into FactorioFeeding
@@ -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."
|
||||
@@ -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
|
||||
)
|
||||
|
||||
|
After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 5.5 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
@@ -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()
|
||||
..()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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,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> 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> 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>
|
||||
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 137 KiB |
|
Before Width: | Height: | Size: 137 KiB After Width: | Height: | Size: 137 KiB |
|
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'
|
||||
|
||||
@@ -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"
|
||||
|
||||