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

Welcome to Gain Station 13!


These are our rules kindly follow them:


1: This server contains Not Safe For Work (NSFW) content if you are a minor you'll be removed.

2: Talk in character while playing on the server if you got to ask something related to game mechanics or other, please keep it OOC (By pressing O).

3: Killing without a reason unless an antagonist shall be punished with a ban, it may vary at the severity of the situation.

 4: Remember to be respectful to admins and players.

5: Knowing certain things that your character does not know (Ex. You get killed and know the antagonist and once you get cloned you say it in comms.) is considered to be Metagaming.

6: Offensive characters and racism will be punished.

7: Griefing the station or player-made stuff will not be approved and will result in a ban.

Thank you for reading these rules, now it's time for you to play!


\ No newline at end of file +

Welcome to Gain Station 13!


These are our rules kindly follow them:


1: This server is 18+. If you are below the age of 18, you may not participate in discord or the game server.

2: Be respectful to other players. Don't harass anyone or be hateful towards them.

3: Use OOC channel for OOC questions and don't acknowledge current ongoing round in OOC.

 4: Don't metagame or powergame.

5: The server follows a medium roleplay (MRP) standard. Have your characters react in a plausible way and have their motives make sense. Don't use netspeak IC either.

6: No names that reference fictional media, OOC, or real world.

7: Don't kill other players without good IC justification for it.

8: Don't grief the station, players or equipment.

9: Don't play Command without good knowledge of the role.

10: The administration team reserves a right to impose any bans, warnings etc in case of any unstated violations or loopholes.

More details on these rules is found in our discord!


\ No newline at end of file diff --git a/hyperstation/icons/obj/genitals/belly_stuffed.dmi b/hyperstation/icons/obj/genitals/belly_stuffed.dmi new file mode 100644 index 00000000..23ea708b Binary files /dev/null and b/hyperstation/icons/obj/genitals/belly_stuffed.dmi differ diff --git a/icons/drinks.dmi b/icons/drinks.dmi new file mode 100644 index 00000000..fdb4b820 Binary files /dev/null and b/icons/drinks.dmi differ diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi index 7ca51d78..33bdc55f 100644 Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ diff --git a/icons/obj/recycling.dmi b/icons/obj/recycling.dmi index b8d2aa97..58efedac 100644 Binary files a/icons/obj/recycling.dmi and b/icons/obj/recycling.dmi differ diff --git a/modular_citadel/code/modules/arousal/organs/genitals.dm b/modular_citadel/code/modules/arousal/organs/genitals.dm index 6e37beef..da28efd1 100644 --- a/modular_citadel/code/modules/arousal/organs/genitals.dm +++ b/modular_citadel/code/modules/arousal/organs/genitals.dm @@ -474,11 +474,25 @@ colourcode = S.color_src if(G.slot == "belly") // GS13 - genital_overlay.icon = 'hyperstation/icons/obj/genitals/belly.dmi' + + // Default settings genital_overlay.icon_state = "belly_[size]" genital_overlay.layer = -UNDER_BACK_LAYER colourcode = "belly_color" + // Change belly sprite and size based on current fullness + switch(H.fullness) + if(-100 to FULLNESS_LEVEL_BLOATED) + genital_overlay.icon = 'hyperstation/icons/obj/genitals/belly.dmi' + if(FULLNESS_LEVEL_BLOATED to FULLNESS_LEVEL_BEEG) + genital_overlay.icon = 'hyperstation/icons/obj/genitals/belly_stuffed.dmi' + if(FULLNESS_LEVEL_BEEG to FULLNESS_LEVEL_NOMOREPLZ) + genital_overlay.icon = 'hyperstation/icons/obj/genitals/belly_stuffed.dmi' + genital_overlay.icon_state = "belly_[size+1]" + if(FULLNESS_LEVEL_NOMOREPLZ to INFINITY) + genital_overlay.icon = 'hyperstation/icons/obj/genitals/belly_stuffed.dmi' + genital_overlay.icon_state = "belly_[size+2]" + //sizecheck added to prevent rendering blank icons if(G.slot == "anus" && G.size > 0) // GS13 genital_overlay.icon = 'hyperstation/icons/obj/genitals/butt.dmi' diff --git a/tgstation.dme b/tgstation.dme index cf903d3b..f1e1a7c2 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3080,7 +3080,6 @@ #include "GainStation13\code\clothing\head.dm" #include "GainStation13\code\clothing\suits.dm" #include "GainStation13\code\datums\components\fattening_door.dm" -#include "GainStation13\code\datums\components\crafting\recipes\recipes_misc_gs.dm" #include "GainStation13\code\datums\diseases\advance\symptoms\berry.dm" #include "GainStation13\code\datums\mutations\fatfang.dm" #include "GainStation13\code\datums\mutations\radfat.dm" @@ -3088,6 +3087,7 @@ #include "GainStation13\code\game\lore_papers.dm" #include "GainStation13\code\game\sound.dm" #include "GainStation13\code\game\area\ruins.dm" +#include "GainStation13\code\game\gamemodes\meteor\meteors_gs.dm" #include "GainStation13\code\game\objects\effects\spawners\choco_slime_delivery.dm" #include "GainStation13\code\game\objects\items\docility_implant.dm" #include "GainStation13\code\game\objects\items\RCD.dm" @@ -3098,7 +3098,6 @@ #include "GainStation13\code\machinery\adipoelectric_transformer.dm" #include "GainStation13\code\machinery\fattening_turret.dm" #include "GainStation13\code\machinery\feeding_tube.dm" -#include "GainStation13\code\machinery\feeding_tube_industrial.dm" #include "GainStation13\code\machinery\supply_teleporter.dm" #include "GainStation13\code\mechanics\fatness.dm" #include "GainStation13\code\mechanics\fatrousal.dm" @@ -3122,6 +3121,7 @@ #include "GainStation13\code\modules\food_and_drinks\drinks.dm" #include "GainStation13\code\modules\food_and_drinks\food.dm" #include "GainStation13\code\modules\food_and_drinks\recipes_bigpizza.dm" +#include "GainStation13\code\modules\food_and_drinks\stellar_piece.dm" #include "GainStation13\code\modules\food_and_drinks\objects\candy_flora.dm" #include "GainStation13\code\modules\food_and_drinks\recipes\recipes_ported.dm" #include "GainStation13\code\modules\gym\gym.dm" @@ -3139,6 +3139,8 @@ #include "GainStation13\code\modules\reagents\chemistry\reagents\dwarverndrinks.dm" #include "GainStation13\code\modules\reagents\chemistry\reagents\fatty_drinks.dm" #include "GainStation13\code\modules\reagents\chemistry\reagents\fermi_fat.dm" +#include "GainStation13\code\modules\reagents\chemistry\reagents\food_reagents_gs.dm" +#include "GainStation13\code\modules\reagents\chemistry\recipes\drinks.dm" #include "GainStation13\code\modules\reagents\chemistry\recipes\fatchem.dm" #include "GainStation13\code\modules\reagents\chemistry\recipes\fatdrinks.dm" #include "GainStation13\code\modules\reagents\chemistry\recipes\ROCKANDSTONEdrinks.dm" diff --git a/tools/dmitool/.gradle/8.8/fileHashes/fileHashes.lock b/tools/dmitool/.gradle/8.8/fileHashes/fileHashes.lock index 34990877..fc1d5c5b 100644 Binary files a/tools/dmitool/.gradle/8.8/fileHashes/fileHashes.lock and b/tools/dmitool/.gradle/8.8/fileHashes/fileHashes.lock differ diff --git a/v_CHOMPstation2/sound/rakshasa/Corrosion3.ogg b/v_CHOMPstation2/sound/rakshasa/Corrosion3.ogg deleted file mode 100644 index cef4bf5c..00000000 Binary files a/v_CHOMPstation2/sound/rakshasa/Corrosion3.ogg and /dev/null differ