diff --git a/_maps/RandomZLevels/away_mission/TheBeach.dmm b/_maps/RandomZLevels/away_mission/TheBeach.dmm index 6877eb4b35..80a649bcc8 100644 --- a/_maps/RandomZLevels/away_mission/TheBeach.dmm +++ b/_maps/RandomZLevels/away_mission/TheBeach.dmm @@ -1001,6 +1001,20 @@ /obj/item/clothing/glasses/heat, /turf/open/floor/plating/beach/sand, /area/awaymission/beach) +"np" = ( +/obj/machinery/shower{ + dir = 8 + }, +/obj/effect/turf_decal/sand, +/turf/open/floor/plasteel/white, +/area/awaymission/beach) +"Vi" = ( +/obj/machinery/shower{ + dir = 4 + }, +/obj/effect/turf_decal/sand, +/turf/open/floor/plasteel/white, +/area/awaymission/beach) (1,1,1) = {" aa @@ -7892,10 +7906,10 @@ ak ak ak ak -ak -ak -ak -ak +Vi +Vi +Vi +Vi ak ba ba @@ -8213,10 +8227,10 @@ ak ak ak ak -ak -ak -ak -ak +np +np +np +np ak ba ba diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index b2478c540c..92f9ff0c53 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -1648,19 +1648,12 @@ /turf/open/floor/plating, /area/maintenance/starboard) "acx" = ( -/obj/effect/decal/cleanable/blood/old, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, -/obj/effect/landmark/xeno_spawn, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/freezer, +/area/commons/toilet/restrooms) "acy" = ( /obj/machinery/door/airlock/external{ name = "External Airlock"; @@ -5799,9 +5792,6 @@ /turf/open/floor/plating, /area/security/brig) "ajd" = ( -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -5812,6 +5802,7 @@ /obj/effect/turf_decal/tile/red{ dir = 1 }, +/obj/structure/closet/crate/bin, /turf/open/floor/plasteel, /area/hallway/primary/port/fore) "aje" = ( @@ -6470,12 +6461,10 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, -/obj/structure/cable/white{ - icon_state = "2-8" - }, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/chair, /turf/open/floor/plasteel{ heat_capacity = 1e+006 }, @@ -6491,6 +6480,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/chair, /turf/open/floor/plasteel{ heat_capacity = 1e+006 }, @@ -6506,6 +6496,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/cable/white{ + icon_state = "2-8" + }, /turf/open/floor/plasteel{ heat_capacity = 1e+006 }, @@ -7140,26 +7133,17 @@ "ald" = ( /obj/structure/sign/nanotrasen, /turf/closed/wall, -/area/commons/toilet/restrooms) +/area/service/lawoffice) "ale" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Primary Restroom" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/freezer, -/area/commons/toilet/restrooms) +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/service/lawoffice) "alf" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall, -/area/commons/toilet/restrooms) +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/service/lawoffice) "alg" = ( /turf/closed/wall/r_wall, /area/command/teleporter) @@ -7616,35 +7600,29 @@ /turf/open/floor/plasteel, /area/hallway/primary/port/fore) "alT" = ( -/obj/structure/table, -/obj/item/storage/firstaid/regular, /obj/structure/extinguisher_cabinet{ pixel_x = -26 }, +/obj/item/kirbyplants{ + icon_state = "plant-22" + }, /obj/machinery/newscaster{ pixel_y = 32 }, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel/freezer, -/area/commons/toilet/restrooms) +/turf/open/floor/wood, +/area/service/lawoffice) "alU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/delivery, -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/freezer, -/area/commons/toilet/restrooms) +/turf/open/floor/wood, +/area/service/lawoffice) "alV" = ( -/obj/structure/urinal{ - pixel_y = 28 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel/freezer, -/area/commons/toilet/restrooms) +/obj/structure/window/reinforced/spawner/east, +/obj/structure/chair, +/turf/open/floor/wood, +/area/service/lawoffice) "alW" = ( /obj/structure/urinal{ pixel_y = 28 @@ -7652,12 +7630,9 @@ /turf/open/floor/plasteel/freezer, /area/commons/toilet/restrooms) "alX" = ( -/obj/structure/closet/crate/bin, -/obj/machinery/light_switch{ - pixel_y = 24 - }, -/turf/open/floor/plasteel/freezer, -/area/commons/toilet/restrooms) +/obj/machinery/vending/wardrobe/law_wardrobe, +/turf/open/floor/wood, +/area/service/lawoffice) "alY" = ( /obj/machinery/shieldwallgen, /obj/machinery/button/door{ @@ -8145,50 +8120,31 @@ /turf/open/floor/plasteel, /area/security/brig) "amO" = ( -/obj/structure/mirror{ - pixel_x = -26 - }, -/obj/structure/sink{ - dir = 8; - pixel_x = -12 - }, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel/freezer, -/area/commons/toilet/restrooms) +/turf/open/floor/wood, +/area/service/lawoffice) "amP" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -26 - }, -/obj/machinery/light/small, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, +/turf/open/floor/wood, +/area/service/lawoffice) +"amQ" = ( +/obj/structure/table/wood, +/obj/structure/window/reinforced/spawner/east, +/obj/structure/window/reinforced/spawner, +/obj/item/clipboard, +/obj/item/folder/red, +/turf/open/floor/wood, +/area/service/lawoffice) +"amR" = ( /obj/structure/cable/white{ icon_state = "1-4" }, -/turf/open/floor/plasteel/freezer, -/area/commons/toilet/restrooms) -"amQ" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/freezer, -/area/commons/toilet/restrooms) -"amR" = ( -/obj/machinery/airalarm{ - dir = 1; - pixel_y = -22 - }, -/obj/machinery/light/small, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/freezer, -/area/commons/toilet/restrooms) +/turf/open/floor/wood, +/area/service/lawoffice) "amS" = ( /obj/machinery/camera{ - c_tag = "Locker Room Toilets"; + c_tag = "Law Office"; dir = 8 }, /obj/machinery/power/apc{ @@ -8200,8 +8156,11 @@ /obj/structure/cable/white{ icon_state = "0-8" }, -/turf/open/floor/plasteel/freezer, -/area/commons/toilet/restrooms) +/obj/structure/rack, +/obj/item/storage/briefcase, +/obj/item/storage/briefcase, +/turf/open/floor/wood, +/area/service/lawoffice) "amT" = ( /obj/structure/table/reinforced, /obj/item/stack/cable_coil/white, @@ -8667,15 +8626,15 @@ /turf/open/floor/plasteel, /area/hallway/primary/port/fore) "anJ" = ( -/obj/machinery/door/airlock{ - name = "Toilet Unit" +/obj/structure/chair{ + dir = 4 }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/machinery/firealarm{ + dir = 4; + pixel_x = -24 }, -/turf/open/floor/plasteel/freezer, -/area/commons/toilet/restrooms) +/turf/open/floor/wood, +/area/service/lawoffice) "anK" = ( /obj/structure/closet/secure_closet/engineering_chief, /obj/effect/turf_decal/tile/neutral{ @@ -9244,40 +9203,30 @@ /turf/open/floor/plasteel, /area/hallway/primary/port) "aoC" = ( -/obj/effect/decal/cleanable/vomit/old, -/obj/structure/toilet{ - dir = 8 +/obj/structure/chair{ + dir = 4 }, -/obj/machinery/newscaster{ - pixel_x = -32 - }, -/obj/machinery/light/small, -/turf/open/floor/plasteel/freezer, -/area/commons/toilet/restrooms) +/turf/open/floor/wood, +/area/service/lawoffice) "aoD" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/machinery/newscaster{ - pixel_x = -32 - }, /obj/machinery/light/small, -/obj/effect/landmark/blobstart, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel/freezer, -/area/commons/toilet/restrooms) +/obj/structure/table/wood, +/obj/structure/window/reinforced/spawner/west, +/obj/item/folder/blue, +/turf/open/floor/carpet/green/airless, +/area/service/lawoffice) "aoE" = ( -/obj/structure/toilet{ - dir = 8 +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -22 }, -/obj/machinery/newscaster{ - pixel_x = -32 +/obj/structure/filingcabinet/employment, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = 24 }, -/obj/machinery/light/small, -/obj/effect/landmark/start/assistant, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel/freezer, -/area/commons/toilet/restrooms) +/turf/open/floor/wood, +/area/service/lawoffice) "aoF" = ( /obj/structure/table/reinforced, /obj/item/stock_parts/cell/high, @@ -12446,8 +12395,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/white/corner, /area/hallway/primary/starboard/fore) "atq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -13151,8 +13099,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/white/corner, /area/hallway/primary/starboard/fore) "auq" = ( /obj/machinery/atmospherics/pipe/manifold/general/visible, @@ -13814,23 +13761,23 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/white/corner, /area/hallway/primary/starboard/fore) "avv" = ( -/obj/machinery/shieldgen, -/obj/effect/turf_decal/stripes/line{ - dir = 9 +/obj/structure/sink{ + dir = 8; + pixel_x = -12; + pixel_y = 2 }, -/turf/open/floor/plasteel, -/area/maintenance/starboard) -"avw" = ( -/obj/machinery/shieldgen, -/obj/effect/turf_decal/stripes/line{ - dir = 5 +/obj/structure/mirror{ + pixel_x = -26 }, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/obj/machinery/airalarm{ + pixel_y = 23 + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/freezer, +/area/commons/toilet/restrooms) "avx" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible, /obj/machinery/computer/atmos_control/tank/oxygen_tank{ @@ -14542,11 +14489,9 @@ }, /area/hallway/primary/starboard/fore) "awz" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/freezer, +/area/commons/toilet/restrooms) "awA" = ( /turf/open/floor/engine/o2, /area/engineering/atmos) @@ -14918,21 +14863,37 @@ /turf/open/floor/plating, /area/maintenance/starboard/central) "axf" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 +/obj/structure/table, +/obj/effect/turf_decal/bot, +/obj/structure/bedsheetbin/towel, +/obj/structure/sign/poster/official/cleanliness{ + pixel_y = -32 }, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/obj/machinery/newscaster{ + pixel_x = -32 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_x = -26; + pixel_y = -26 + }, +/turf/open/floor/plasteel/freezer, +/area/commons/toilet/restrooms) "axg" = ( -/obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance, -/obj/effect/turf_decal/stripes/line{ - dir = 6 +/obj/machinery/light/small, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 }, -/obj/item/wrench, -/obj/item/wirecutters, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/obj/effect/turf_decal/bot, +/obj/machinery/light_switch{ + pixel_x = 8; + pixel_y = -24 + }, +/turf/open/floor/plasteel/freezer, +/area/commons/toilet/restrooms) "axh" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance{ @@ -25739,7 +25700,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/structure/rack, +/obj/machinery/shieldgen, /turf/open/floor/plasteel, /area/maintenance/port/aft) "aOu" = ( @@ -25925,6 +25886,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, +/obj/structure/cable/white{ + icon_state = "1-2" + }, /turf/open/floor/plating, /area/maintenance/port/aft) "aOJ" = ( @@ -27992,6 +27956,7 @@ /obj/machinery/light/small{ dir = 8 }, +/obj/machinery/shieldgen, /turf/open/floor/plasteel, /area/maintenance/port/aft) "aSg" = ( @@ -30048,7 +30013,6 @@ /turf/open/floor/plasteel, /area/maintenance/port/aft) "aVS" = ( -/obj/structure/bookcase/random/fiction, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -30059,6 +30023,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/bookcase/random/nonfiction, /turf/open/floor/plasteel/dark, /area/service/library) "aVT" = ( @@ -30068,7 +30033,6 @@ /turf/open/floor/plasteel/dark, /area/service/library) "aVU" = ( -/obj/structure/bookcase/random/adult, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -30079,10 +30043,11 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/bookcase/random/reference, /turf/open/floor/plasteel/dark, /area/service/library) "aVV" = ( -/obj/structure/bookcase/random/adult, +/obj/structure/bookcase/random/religion, /turf/open/floor/plasteel/dark, /area/service/library) "aVW" = ( @@ -30814,11 +30779,12 @@ /turf/closed/wall, /area/service/library) "aXg" = ( -/obj/structure/bookcase/random/nonfiction, +/obj/structure/sign/painting{ + pixel_y = -32 + }, /turf/open/floor/plasteel/dark, /area/service/library) "aXh" = ( -/obj/structure/bookcase/random/nonfiction, /obj/machinery/light, /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -30847,7 +30813,6 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "aXj" = ( -/obj/structure/bookcase/random/reference, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -30858,10 +30823,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/turf/open/floor/plasteel/dark, -/area/service/library) -"aXk" = ( -/obj/structure/bookcase/random/reference, +/obj/structure/sign/painting{ + pixel_y = -32 + }, /turf/open/floor/plasteel/dark, /area/service/library) "aXl" = ( @@ -32195,7 +32159,8 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, -/obj/structure/bookcase{ +/obj/structure/bookcase/random/adult{ + desc = "Oh whoa, what's this?"; name = "Forbidden Knowledge" }, /turf/open/floor/wood, @@ -36129,6 +36094,7 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/maintenance/starboard/aft) "bfs" = ( @@ -36910,74 +36876,24 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/sand, +/obj/structure/cable/white{ + icon_state = "1-2" + }, /turf/open/floor/plasteel/dark, /area/maintenance/starboard/aft) "bgv" = ( -/obj/machinery/biogenerator, -/obj/item/wrench, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, /obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/weather, +/obj/effect/turf_decal/weather, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/maintenance/starboard/aft) -"bgw" = ( -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, -/obj/machinery/airalarm{ - pixel_y = 24 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/maintenance/starboard/aft) -"bgx" = ( -/obj/machinery/hydroponics/soil, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/seeds/tea, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/maintenance/starboard/aft) -"bgy" = ( -/obj/item/kirbyplants{ - icon_state = "plant-21"; - pixel_x = -3; - pixel_y = 3 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/maintenance/starboard/aft) -"bgz" = ( -/obj/machinery/seed_extractor, -/obj/item/reagent_containers/glass/bucket, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/maintenance/starboard/aft) -"bgA" = ( -/obj/machinery/hydroponics/soil, -/obj/item/seeds/poppy, -/obj/item/reagent_containers/food/snacks/grown/cherries, -/obj/item/shovel/spade, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, +/obj/structure/bedsheetbin/towel, +/obj/structure/table/wood/poker, /turf/open/floor/plasteel/dark, /area/maintenance/starboard/aft) "bgB" = ( @@ -37329,32 +37245,26 @@ /turf/open/floor/plasteel/dark, /area/science/xenobiology) "bhj" = ( +/obj/effect/turf_decal/sand/plating, /obj/structure/sink{ dir = 8; pixel_x = -12; pixel_y = 2 }, -/obj/structure/sign/warning/nosmoking{ +/obj/structure/sign/poster/ripped{ pixel_x = -32 }, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"bhk" = ( -/turf/open/floor/plating, -/area/maintenance/starboard) "bhm" = ( -/obj/effect/landmark/xeno_spawn, -/turf/open/floor/plating, +/turf/open/floor/plasteel/yellowsiding, /area/maintenance/starboard/aft) "bhn" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = 11 +/obj/machinery/light/floor, +/turf/open/floor/plasteel/yellowsiding/corner{ + dir = 8; + icon_state = "yellowcornersiding" }, -/obj/structure/sign/departments/botany{ - pixel_x = 32 - }, -/turf/open/floor/plating, /area/maintenance/starboard/aft) "bho" = ( /obj/machinery/door/airlock/silver{ @@ -37724,77 +37634,11 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) -"bhT" = ( -/obj/machinery/hydroponics/soil, -/obj/item/seeds/harebell, -/obj/item/reagent_containers/food/snacks/grown/watermelon, -/obj/item/cultivator, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/maintenance/starboard/aft) -"bhU" = ( -/obj/item/kirbyplants{ - icon_state = "plant-21"; - pixel_x = -3; - pixel_y = 3 - }, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/maintenance/starboard/aft) -"bhV" = ( -/obj/machinery/hydroponics/soil, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/glass/bottle/nutrient/ez, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/maintenance/starboard/aft) -"bhW" = ( -/obj/machinery/light/small, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "bhX" = ( -/obj/machinery/hydroponics/soil, -/obj/item/reagent_containers/food/snacks/grown/tea, -/obj/item/hatchet, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 +/obj/machinery/pool/filter{ + pixel_y = 16 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/maintenance/starboard/aft) -"bhY" = ( -/obj/machinery/hydroponics/soil, -/obj/item/seeds/tower, -/obj/item/reagent_containers/glass/bottle/nutrient/rh, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, +/turf/open/pool, /area/maintenance/starboard/aft) "bhZ" = ( /obj/machinery/light_switch{ @@ -39501,6 +39345,12 @@ }, /turf/open/floor/plasteel/dark, /area/hallway/secondary/exit) +"boD" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall, +/area/commons/toilet/restrooms) "boE" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/dark/visible{ @@ -39537,6 +39387,9 @@ /obj/machinery/meter/atmos, /turf/open/floor/plasteel, /area/engineering/atmos) +"bsq" = ( +/turf/closed/mineral/random/labormineral, +/area/maintenance/starboard/aft) "bsv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable/white{ @@ -40477,6 +40330,7 @@ /obj/structure/cable/white{ icon_state = "0-8" }, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating{ icon_state = "panelscorched" }, @@ -40557,6 +40411,15 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/science/mixing) +"bRf" = ( +/obj/structure/sign/warning/securearea, +/turf/closed/wall, +/area/command/gateway) +"bVs" = ( +/obj/structure/girder, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/maintenance/port/aft) "bYE" = ( /obj/structure/sign/warning/fire, /obj/machinery/atmospherics/pipe/simple/general/visible{ @@ -40576,6 +40439,13 @@ dir = 1 }, /area/engineering/atmos) +"caJ" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plating, +/area/maintenance/starboard) "ccy" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -40695,6 +40565,10 @@ }, /turf/open/floor/engine/vacuum, /area/maintenance/disposal/incinerator) +"cGA" = ( +/obj/machinery/pool/controller, +/turf/open/floor/wood, +/area/maintenance/starboard/aft) "cRz" = ( /obj/machinery/button/door{ id = "supplybridge"; @@ -40719,6 +40593,18 @@ }, /turf/open/floor/plating, /area/maintenance/starboard) +"cUd" = ( +/obj/structure/cable/white{ + icon_state = "0-8" + }, +/obj/machinery/power/apc/highcap/ten_k{ + areastring = "/area/command/gateway"; + dir = 1; + name = "Gateway APC"; + pixel_y = 23 + }, +/turf/open/floor/plasteel, +/area/command/gateway) "cWv" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/closed/wall/r_wall, @@ -40824,6 +40710,10 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) +"dvB" = ( +/obj/structure/sink/puddle, +/turf/open/floor/plating/asteroid, +/area/maintenance/port/aft) "dFV" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 @@ -40852,6 +40742,20 @@ }, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) +"dMx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/turf/open/floor/plasteel, +/area/command/gateway) +"dQg" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/hallway/secondary/exit) "dQC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -40869,6 +40773,12 @@ }, /turf/open/floor/plasteel, /area/service/bar/atrium) +"dSq" = ( +/turf/open/floor/plasteel/yellowsiding{ + dir = 4; + icon_state = "yellowsiding" + }, +/area/maintenance/starboard/aft) "dXv" = ( /obj/item/transfer_valve{ pixel_x = -5 @@ -40910,6 +40820,11 @@ }, /turf/open/floor/plasteel, /area/engineering/atmos) +"ekG" = ( +/turf/open/floor/wood{ + icon_state = "wood-broken" + }, +/area/maintenance/starboard/aft) "emA" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -40918,6 +40833,11 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable/white{ + icon_state = "2-8" + }, /turf/open/floor/plating, /area/maintenance/starboard/aft) "eva" = ( @@ -41034,6 +40954,20 @@ }, /turf/open/floor/plasteel/dark, /area/engineering/atmos) +"eOg" = ( +/obj/structure/closet/crate{ + icon_state = "crateopen" + }, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 2; + name = "2maintenance loot spawner" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/item/storage/box, +/turf/open/floor/plasteel, +/area/maintenance/starboard) "eOs" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 4 @@ -41135,6 +41069,11 @@ /obj/machinery/status_display/ai, /turf/closed/wall, /area/commons/lounge) +"fgZ" = ( +/obj/structure/girder/reinforced, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating/airless, +/area/asteroid/nearstation) "fjs" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 @@ -41168,6 +41107,12 @@ }, /turf/open/floor/plasteel, /area/science/mixing) +"fmq" = ( +/obj/structure/table/wood, +/obj/structure/window/reinforced/spawner/west, +/obj/item/flashlight/lamp/green, +/turf/open/floor/carpet/green/airless, +/area/service/lawoffice) "fnp" = ( /obj/machinery/air_sensor/atmos/nitrous_tank, /turf/open/floor/engine/n2o, @@ -41177,6 +41122,19 @@ /obj/item/wrench, /turf/open/space, /area/space/nearstation) +"foP" = ( +/obj/structure/chair/stool/bar, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken" + }, +/area/maintenance/starboard/aft) +"fpH" = ( +/obj/item/seeds/harebell, +/turf/open/space/basic, +/area/space) "fsl" = ( /obj/docking_port/stationary{ dir = 2; @@ -41279,6 +41237,22 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) +"fNN" = ( +/obj/machinery/hydroponics/soil, +/obj/item/seeds/tea, +/obj/machinery/light/small, +/turf/open/floor/plating/asteroid, +/area/maintenance/port/aft) +"fRe" = ( +/turf/open/floor/plating/airless{ + icon_state = "platingdmg3" + }, +/area/asteroid/nearstation) +"fWh" = ( +/turf/open/floor/wood{ + icon_state = "wood-broken5" + }, +/area/maintenance/starboard/aft) "fWz" = ( /obj/machinery/door/airlock/external{ name = "External Docking Port"; @@ -41404,6 +41378,22 @@ }, /turf/open/floor/plating, /area/science/mixing) +"gIT" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Maintenance Hatch"; + req_access_txt = "12" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/maintenance/port/aft) "gLD" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 @@ -41424,8 +41414,13 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/plasteel, +/obj/structure/sign/departments/restroom{ + pixel_x = 32 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white/corner, /area/hallway/primary/starboard/fore) "gNH" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ @@ -41447,6 +41442,18 @@ }, /turf/open/floor/plasteel, /area/service/bar/atrium) +"gRe" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/command/gateway) +"gSu" = ( +/turf/open/floor/plasteel/yellowsiding{ + dir = 8; + icon_state = "yellowsiding" + }, +/area/maintenance/starboard/aft) "gSv" = ( /obj/structure/cable{ icon_state = "4-8" @@ -41484,6 +41491,15 @@ }, /turf/open/floor/plasteel/dark, /area/engineering/atmos) +"gWt" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/broken{ + dir = 1; + icon_state = "tube-broken" + }, +/turf/open/floor/carpet/green/airless, +/area/maintenance/starboard/aft) "gZk" = ( /obj/machinery/atmospherics/pipe/simple/dark/visible{ dir = 10 @@ -41503,11 +41519,13 @@ /turf/closed/mineral/random/labormineral, /area/science/test_area) "hiR" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 - }, -/turf/open/floor/plating, +/obj/machinery/light/floor, +/turf/open/floor/plasteel/yellowsiding/corner, /area/maintenance/starboard/aft) +"hkI" = ( +/obj/machinery/gateway/centerstation, +/turf/open/floor/plasteel/dark, +/area/command/gateway) "hpr" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=3.2-AtriumSW"; @@ -41538,6 +41556,11 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall, /area/maintenance/starboard/aft) +"hsR" = ( +/obj/machinery/door/airlock/shuttle/glass, +/obj/machinery/door/firedoor/closed, +/turf/open/floor/wood, +/area/maintenance/starboard/aft) "hsV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -41581,6 +41604,14 @@ }, /turf/open/floor/plasteel, /area/service/bar/atrium) +"hGN" = ( +/obj/machinery/light, +/obj/structure/closet/secure_closet/exile, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/plasteel/dark, +/area/command/gateway) "hIu" = ( /obj/structure/cable/white{ icon_state = "4-8" @@ -41694,6 +41725,15 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/engineering/atmos) +"hYy" = ( +/obj/structure/lattice, +/turf/open/floor/plating/asteroid, +/area/maintenance/starboard/aft) +"hZH" = ( +/turf/open/floor/plating/airless{ + icon_state = "platingdmg2" + }, +/area/asteroid/nearstation) "iaa" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/navbeacon{ @@ -41760,6 +41800,11 @@ /obj/machinery/air_sensor/atmos/carbon_tank, /turf/open/floor/engine/co2, /area/engineering/atmos) +"isT" = ( +/turf/open/floor/wood{ + icon_state = "wood-broken2" + }, +/area/maintenance/starboard/aft) "ixk" = ( /obj/machinery/atmospherics/pipe/simple/green/visible, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -41773,6 +41818,9 @@ }, /turf/open/floor/engine/vacuum, /area/maintenance/disposal/incinerator) +"iGT" = ( +/turf/closed/wall, +/area/service/lawoffice) "iIj" = ( /obj/machinery/atmospherics/components/trinary/mixer/airmix/flipped{ dir = 4 @@ -41827,14 +41875,43 @@ /obj/structure/lattice/catwalk, /turf/open/space/basic, /area/space/nearstation) +"iSq" = ( +/turf/open/floor/plating/asteroid/airless, +/area/maintenance/starboard/aft) +"iSy" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/item/toy/poolnoodle/red, +/turf/open/floor/wood, +/area/maintenance/starboard/aft) "iUq" = ( /obj/machinery/status_display, /turf/closed/wall, /area/service/library) +"iUJ" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/command/gateway) "iUO" = ( /obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_toxmix, /turf/open/floor/engine, /area/science/mixing) +"iVs" = ( +/obj/machinery/computer/gateway_control{ + dir = 4; + icon_state = "computer" + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/camera{ + c_tag = "Gateway"; + dir = 4 + }, +/turf/open/floor/plasteel, +/area/command/gateway) "iVw" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ @@ -41856,6 +41933,11 @@ /obj/machinery/atmospherics/pipe/simple/supply/visible, /turf/open/floor/plasteel, /area/engineering/atmos) +"iYt" = ( +/obj/structure/chair/office/dark, +/obj/effect/landmark/start/lawyer, +/turf/open/floor/carpet/green/airless, +/area/service/lawoffice) "iZQ" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/carbon_input, /turf/open/floor/engine/co2, @@ -41910,6 +41992,18 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/science/xenobiology) +"jeI" = ( +/turf/open/floor/plasteel/yellowsiding{ + dir = 1; + icon_state = "yellowsiding" + }, +/area/maintenance/starboard/aft) +"jkc" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/airless{ + icon_state = "wood-broken7" + }, +/area/asteroid/nearstation) "jkl" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 @@ -41966,6 +42060,10 @@ }, /turf/open/floor/plasteel/dark, /area/hallway/primary/starboard) +"jrd" = ( +/obj/machinery/pool/drain, +/turf/open/pool, +/area/maintenance/starboard/aft) "jsD" = ( /obj/effect/mapping_helpers/airlock/locked, /obj/machinery/door/airlock/research/glass/incinerator/toxmix_exterior, @@ -41985,6 +42083,10 @@ }, /turf/open/floor/plasteel, /area/engineering/atmos) +"juY" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/wood, +/area/maintenance/starboard/aft) "jwi" = ( /obj/structure/sign/directions/engineering{ dir = 8; @@ -42097,6 +42199,31 @@ }, /turf/open/floor/plasteel, /area/science/mixing) +"jMP" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken2" + }, +/area/maintenance/starboard/aft) +"jOJ" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/cable/white{ + icon_state = "0-2" + }, +/turf/open/floor/plasteel/dark, +/area/command/gateway) "jRe" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -42139,12 +42266,26 @@ }, /turf/open/floor/plasteel/cafeteria, /area/engineering/atmos) +"kbe" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = 24 + }, +/turf/open/floor/plasteel, +/area/command/gateway) "kcN" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/junction{ dir = 4 }, /turf/open/floor/plating/asteroid/airless, /area/asteroid/nearstation) +"kdd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable/white{ + icon_state = "1-8" + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) "kit" = ( /obj/machinery/portable_atmospherics/canister/toxins, /obj/machinery/light/small{ @@ -42179,6 +42320,13 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/science/mixing) +"krX" = ( +/obj/machinery/light/floor, +/turf/open/floor/plasteel/yellowsiding/corner{ + dir = 4; + icon_state = "yellowcornersiding" + }, +/area/maintenance/starboard/aft) "kwF" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 @@ -42201,6 +42349,18 @@ }, /turf/open/floor/plasteel/dark, /area/engineering/atmos) +"kyS" = ( +/obj/structure/chair/stool/bar, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/open/floor/wood, +/area/maintenance/starboard/aft) +"kAD" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks/beer, +/turf/open/floor/wood, +/area/maintenance/starboard/aft) "kCG" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 9 @@ -42235,6 +42395,10 @@ }, /turf/open/floor/plasteel/dark, /area/engineering/atmos) +"kIL" = ( +/obj/structure/grille/broken, +/turf/open/floor/plating/airless, +/area/asteroid/nearstation) "kKd" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/external{ @@ -42252,6 +42416,10 @@ }, /turf/open/floor/plasteel, /area/cargo/miningdock) +"kKr" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/airless, +/area/asteroid/nearstation) "kPi" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -42267,9 +42435,14 @@ }, /turf/open/floor/plasteel, /area/science/mixing) +"kQz" = ( +/turf/open/floor/plasteel, +/area/command/gateway) "kRV" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 5 +/obj/effect/turf_decal/sand/plating, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/white{ + icon_state = "2-8" }, /turf/open/floor/plating, /area/maintenance/starboard/aft) @@ -42280,6 +42453,13 @@ }, /turf/open/floor/plasteel, /area/engineering/atmos) +"kUu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/wood, +/area/maintenance/starboard/aft) +"lcW" = ( +/turf/open/floor/wood, +/area/maintenance/starboard/aft) "lmq" = ( /obj/machinery/portable_atmospherics/canister/nitrous_oxide, /turf/open/floor/plating, @@ -42290,6 +42470,22 @@ }, /turf/closed/wall/r_wall, /area/science/mixing) +"loB" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/machinery/light_switch{ + pixel_x = 32; + pixel_y = 24 + }, +/obj/effect/landmark/start/lawyer, +/turf/open/floor/wood, +/area/service/lawoffice) +"loX" = ( +/obj/structure/table/wood, +/obj/item/storage/fancy/cigarettes/cigars/havana, +/turf/open/floor/wood, +/area/maintenance/starboard/aft) "lqz" = ( /obj/machinery/atmospherics/pipe/manifold/yellow/visible, /obj/effect/decal/cleanable/dirt, @@ -42301,6 +42497,10 @@ dir = 1 }, /area/engineering/atmos) +"lqJ" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/service/lawoffice) "lrg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 4 @@ -42480,6 +42680,23 @@ }, /turf/open/floor/plasteel, /area/science/mixing) +"mia" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/command/gateway) "mkF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 4 @@ -42506,6 +42723,9 @@ }, /turf/open/floor/engine/vacuum, /area/maintenance/disposal/incinerator) +"msl" = ( +/turf/closed/wall/rust, +/area/command/gateway) "msG" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -42524,6 +42744,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/science/mixing) +"myQ" = ( +/turf/closed/wall/mineral/titanium, +/area/maintenance/starboard/aft) "mDx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -42592,6 +42815,15 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) +"mZm" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white/corner{ + dir = 1 + }, +/area/hallway/secondary/exit) "nbT" = ( /obj/machinery/atmospherics/components/binary/pump/on{ dir = 1; @@ -42602,6 +42834,16 @@ }, /turf/open/floor/plasteel, /area/science/mixing) +"ncG" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance, +/obj/item/wrench, +/obj/item/wirecutters, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/maintenance/starboard) "ndg" = ( /obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel, @@ -42625,6 +42867,20 @@ }, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) +"nio" = ( +/obj/structure/pool/ladder{ + dir = 1; + icon_state = "ladder"; + pixel_y = -24 + }, +/turf/open/pool, +/area/maintenance/starboard/aft) +"nqr" = ( +/obj/item/kirbyplants{ + icon_state = "plant-22" + }, +/turf/open/space/basic, +/area/space) "nty" = ( /obj/machinery/button/massdriver{ id = "toxinsdriver"; @@ -42636,10 +42892,21 @@ }, /turf/open/floor/plasteel, /area/science/mixing) +"nvk" = ( +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/maintenance/starboard/aft) "nwY" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/hallway/primary/starboard/fore) +"nBu" = ( +/obj/structure/chair/stool/bar, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/wood, +/area/maintenance/starboard/aft) "nFG" = ( /obj/machinery/atmospherics/pipe/manifold/yellow/visible{ dir = 8 @@ -42647,6 +42914,10 @@ /obj/machinery/meter, /turf/open/floor/plasteel, /area/engineering/atmos) +"nIf" = ( +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "nKi" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch"; @@ -42719,6 +42990,12 @@ /obj/machinery/atmospherics/pipe/simple/yellow/visible, /turf/closed/wall/r_wall, /area/engineering/atmos) +"ogx" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood{ + icon_state = "wood-broken" + }, +/area/asteroid/nearstation) "ogL" = ( /obj/structure/sign/warning/vacuum/external{ pixel_y = -32 @@ -42742,6 +43019,9 @@ dir = 1 }, /area/engineering/atmos) +"omB" = ( +/turf/closed/wall, +/area/asteroid/nearstation) "ooX" = ( /obj/machinery/smartfridge/organ/preloaded{ pixel_y = 2 @@ -42849,6 +43129,13 @@ }, /turf/open/floor/plasteel, /area/engineering/atmos) +"oIA" = ( +/obj/machinery/light/floor, +/turf/open/floor/plasteel/yellowsiding/corner{ + dir = 1; + icon_state = "yellowcornersiding" + }, +/area/maintenance/starboard/aft) "oIG" = ( /obj/structure/sign/warning/fire, /turf/closed/wall/r_wall, @@ -42899,12 +43186,36 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel, /area/hallway/primary/starboard) +"oXj" = ( +/obj/structure/toilet{ + dir = 8 + }, +/obj/machinery/door/window/westright, +/obj/effect/decal/cleanable/egg_smudge, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/freezer, +/area/commons/toilet/restrooms) "oXz" = ( /obj/machinery/atmospherics/pipe/simple/dark/visible{ dir = 5 }, /turf/open/floor/plasteel, /area/science/mixing) +"par" = ( +/obj/structure/cable/white{ + icon_state = "1-8" + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/structure/cable/white{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/command/gateway) "pbT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 @@ -42925,6 +43236,20 @@ /obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/mix_output, /turf/open/floor/engine/vacuum, /area/engineering/atmos) +"pcD" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/command/gateway) "pdX" = ( /obj/machinery/portable_atmospherics/canister, /obj/item/radio/intercom{ @@ -42937,6 +43262,15 @@ }, /turf/open/floor/plasteel/dark, /area/science/mixing) +"pix" = ( +/turf/open/floor/wood{ + icon_state = "wood-broken7" + }, +/area/maintenance/starboard/aft) +"pjh" = ( +/obj/machinery/vending/boozeomat/pubby_maint, +/turf/open/floor/wood, +/area/maintenance/starboard/aft) "pjU" = ( /obj/structure/grille, /obj/machinery/atmospherics/pipe/simple/yellow/hidden{ @@ -42968,6 +43302,13 @@ }, /turf/open/floor/plasteel, /area/science/xenobiology) +"pmx" = ( +/obj/effect/turf_decal/sand/plating, +/obj/structure/cable/white{ + icon_state = "1-4" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "pmK" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 8 @@ -43016,6 +43357,10 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"puc" = ( +/obj/structure/bed, +/turf/open/floor/wood, +/area/maintenance/starboard/aft) "pvX" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/orange/visible, @@ -43048,7 +43393,6 @@ /turf/open/floor/plasteel/white, /area/science/mixing) "pEt" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/power/apc{ areastring = "/area/hallway/primary/starboard/fore"; dir = 8; @@ -43062,6 +43406,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, /turf/open/floor/plasteel{ heat_capacity = 1e+006 }, @@ -43107,6 +43454,25 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/science/mixing) +"pML" = ( +/obj/machinery/shower{ + dir = 1 + }, +/obj/structure/curtain, +/obj/structure/window/spawner/north, +/obj/structure/sign/poster/official/no_erp{ + pixel_x = 32 + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/freezer, +/area/commons/toilet/restrooms) +"pMQ" = ( +/obj/structure/cable/white{ + icon_state = "1-4" + }, +/obj/item/reagent_containers/glass/bottle/nutrient/rh, +/turf/open/floor/plating/asteroid/airless, +/area/maintenance/port/aft) "pNE" = ( /obj/structure/grille, /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ @@ -43119,6 +43485,12 @@ /obj/structure/grille, /turf/open/space/basic, /area/space/nearstation) +"qab" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/airless{ + icon_state = "wood-broken5" + }, +/area/asteroid/nearstation) "qcg" = ( /obj/structure/window/reinforced{ dir = 4 @@ -43167,6 +43539,28 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/hallway/primary/fore) +"qeO" = ( +/obj/machinery/door/airlock/command{ + name = "Gateway"; + req_access_txt = "62" + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel, +/area/command/gateway) +"qgg" = ( +/obj/machinery/seed_extractor, +/obj/structure/cable/white{ + icon_state = "0-8" + }, +/obj/structure/cable/white{ + icon_state = "0-2" + }, +/turf/open/floor/plating/asteroid/airless, +/area/maintenance/port/aft) "qgC" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/incinerator_input{ dir = 4 @@ -43181,6 +43575,11 @@ /obj/effect/turf_decal/stripes/corner, /turf/open/floor/plasteel, /area/science/mixing) +"qjS" = ( +/obj/structure/table/reinforced, +/obj/machinery/light, +/turf/open/floor/wood, +/area/maintenance/starboard/aft) "qnA" = ( /turf/open/floor/plating, /area/science/mixing) @@ -43225,6 +43624,13 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/engineering/atmos) +"qFj" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) "qFw" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 @@ -43273,6 +43679,13 @@ /obj/machinery/meter, /turf/open/floor/plasteel, /area/engineering/atmos) +"qRz" = ( +/obj/machinery/newscaster{ + pixel_x = 32 + }, +/obj/machinery/photocopier, +/turf/open/floor/wood, +/area/service/lawoffice) "qTa" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 @@ -43282,6 +43695,13 @@ }, /turf/open/floor/plasteel, /area/engineering/atmos) +"qUQ" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/food/drinks/shaker, +/turf/open/floor/wood{ + icon_state = "wood-broken6" + }, +/area/maintenance/starboard/aft) "qUW" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 @@ -43295,6 +43715,27 @@ }, /turf/open/floor/plasteel, /area/engineering/atmos) +"ria" = ( +/obj/effect/turf_decal/bot_white/right, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/command/gateway) +"rih" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/white/corner, +/area/hallway/primary/starboard/fore) "rjQ" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/plasteel, @@ -43311,6 +43752,15 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) +"rmZ" = ( +/obj/structure/chair/stool/bar, +/turf/open/floor/wood{ + icon_state = "wood-broken5" + }, +/area/maintenance/starboard/aft) +"rwH" = ( +/turf/closed/wall/mineral/titanium, +/area/asteroid/nearstation) "rzn" = ( /obj/machinery/status_display, /turf/closed/wall, @@ -43370,6 +43820,13 @@ /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/mix_input, /turf/open/floor/engine/vacuum, /area/engineering/atmos) +"rVP" = ( +/obj/machinery/airalarm{ + pixel_y = 23 + }, +/obj/item/extinguisher, +/turf/open/floor/plasteel, +/area/command/gateway) "sak" = ( /obj/effect/landmark/event_spawn, /obj/effect/turf_decal/tile/blue{ @@ -43390,19 +43847,42 @@ /mob/living/simple_animal/opossum, /turf/open/floor/plating, /area/maintenance/starboard) +"sdk" = ( +/obj/structure/table/wood, +/obj/item/lighter, +/turf/open/floor/wood, +/area/maintenance/starboard/aft) "sdL" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/hydroponics/soil, /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/weather, +/obj/effect/turf_decal/weather, /turf/open/floor/plasteel/dark, /area/maintenance/starboard/aft) "sdX" = ( /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) +"sjr" = ( +/obj/item/reagent_containers/food/snacks/grown/wheat, +/turf/open/space/basic, +/area/space) +"slf" = ( +/obj/machinery/door/poddoor/shutters{ + id = "stationawaygate"; + name = "Gateway Access Shutters" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel, +/area/command/gateway) "soC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -43537,8 +44017,16 @@ /turf/closed/wall/rust, /area/cargo/miningdock) "syS" = ( -/turf/closed/wall/rust, -/area/commons/toilet/restrooms) +/obj/structure/table/wood, +/obj/item/paper_bin, +/obj/item/pen/fountain, +/obj/machinery/requests_console{ + department = "Law office"; + name = "Lawyer RC"; + pixel_y = -30 + }, +/turf/open/floor/carpet/green/airless, +/area/service/lawoffice) "syT" = ( /turf/closed/wall/r_wall/rust, /area/ai_monitored/command/storage/eva) @@ -43555,6 +44043,8 @@ /turf/closed/wall/rust, /area/service/bar/atrium) "sAY" = ( +/obj/structure/easel, +/obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/plating{ icon_state = "panelscorched" }, @@ -43594,10 +44084,6 @@ }, /turf/open/floor/plasteel, /area/maintenance/starboard) -"sBW" = ( -/obj/structure/sign/warning/vacuum, -/turf/closed/wall/rust, -/area/maintenance/starboard) "sCr" = ( /obj/structure/cable/white{ icon_state = "1-2" @@ -43607,30 +44093,6 @@ icon_state = "platingdmg2" }, /area/maintenance/port/central) -"sCt" = ( -/obj/structure/easel, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/maintenance/starboard) -"sCQ" = ( -/obj/structure/closet/crate{ - icon_state = "crateopen" - }, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 2; - name = "2maintenance loot spawner" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/sign/poster/contraband/random{ - pixel_x = 32 - }, -/obj/item/storage/box, -/turf/open/floor/plasteel, -/area/maintenance/starboard) "sDl" = ( /turf/closed/wall/rust, /area/commons/dorms) @@ -43668,19 +44130,20 @@ }, /turf/open/floor/plating, /area/maintenance/starboard) -"sEm" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +"sEn" = ( /obj/structure/cable/white{ icon_state = "1-8" }, -/turf/open/floor/plating, -/area/maintenance/starboard) -"sEn" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/cable/white{ + icon_state = "4-8" }, /turf/open/floor/plating, /area/maintenance/starboard) +"sEq" = ( +/obj/item/reagent_containers/glass/bottle/nutrient/ez, +/turf/open/floor/plating/asteroid/airless, +/area/asteroid/nearstation) "sEG" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -43746,9 +44209,13 @@ /turf/open/floor/plasteel/dark, /area/maintenance/starboard) "sEQ" = ( -/obj/structure/sign/warning/securearea, -/turf/closed/wall, -/area/maintenance/starboard) +/obj/structure/rack, +/obj/item/radio, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/command/gateway) "sFn" = ( /obj/effect/turf_decal/bot, /obj/effect/turf_decal/stripes/line{ @@ -43903,43 +44370,23 @@ /turf/open/floor/plasteel/dark, /area/maintenance/starboard) "sFX" = ( -/obj/structure/table, /obj/machinery/light/small{ dir = 8 }, -/obj/item/clothing/suit/hazardvest{ - desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; - name = "emergency lifejacket" - }, -/obj/item/clothing/suit/hazardvest{ - desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; - name = "emergency lifejacket" - }, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/tile/neutral{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel, /area/hallway/secondary/exit) "sFY" = ( -/obj/structure/table, -/obj/effect/turf_decal/stripes/line, -/obj/item/crowbar, -/obj/item/crowbar, -/obj/item/tank/internals/emergency_oxygen, -/obj/item/tank/internals/emergency_oxygen, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ +/obj/effect/turf_decal/tile/blue{ dir = 4 }, -/turf/open/floor/plasteel/dark, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/open/floor/plasteel, /area/hallway/secondary/exit) "sGy" = ( /obj/machinery/door/firedoor, @@ -43985,6 +44432,7 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/white/corner{ dir = 1 }, @@ -44046,10 +44494,12 @@ /turf/open/floor/plating, /area/maintenance/starboard) "sHf" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = -24 - }, +/obj/structure/table, +/obj/item/crowbar, +/obj/item/crowbar, +/obj/item/tank/internals/emergency_oxygen, +/obj/item/tank/internals/emergency_oxygen, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/hallway/secondary/exit) "sHz" = ( @@ -44188,15 +44638,13 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit) "sIy" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/structure/cable/white{ icon_state = "4-8" }, /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel, /area/hallway/secondary/exit) "sIB" = ( @@ -44242,6 +44690,17 @@ /turf/open/floor/plasteel/dark, /area/hallway/secondary/exit) "sIR" = ( +/obj/structure/table, +/obj/item/clothing/suit/hazardvest{ + desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; + name = "emergency lifejacket" + }, +/obj/item/clothing/suit/hazardvest{ + desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; + name = "emergency lifejacket" + }, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, /obj/structure/cable/white{ icon_state = "1-2" }, @@ -44573,19 +45032,6 @@ "sLf" = ( /turf/closed/wall/rust, /area/service/chapel/main) -"sLg" = ( -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/maintenance/starboard/aft) "sLm" = ( /turf/closed/wall/rust, /area/hallway/secondary/entry) @@ -46010,18 +46456,18 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/door/airlock/maintenance_hatch{ - name = "Maintenance Hatch"; - req_access_txt = "12" - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/obj/machinery/door/airlock{ + name = "Primary Restroom" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/freezer, +/area/commons/toilet/restrooms) "sOL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -46141,9 +46587,6 @@ icon_state = "panelscorched" }, /area/maintenance/starboard/aft) -"sPY" = ( -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "sSy" = ( /obj/structure/window/reinforced{ dir = 4 @@ -46151,9 +46594,24 @@ /obj/structure/flora/ausbushes/ppflowers, /turf/open/floor/grass, /area/hallway/secondary/entry) +"sTH" = ( +/obj/machinery/hydroponics/soil, +/obj/item/seeds/tower, +/turf/open/floor/plating/asteroid, +/area/maintenance/port/aft) "sVt" = ( /turf/closed/wall/r_wall, /area/science/mixing) +"sYi" = ( +/obj/structure/table/reinforced, +/turf/open/floor/wood{ + icon_state = "wood-broken5" + }, +/area/maintenance/starboard/aft) +"sZH" = ( +/obj/item/reagent_containers/glass/bucket, +/turf/open/floor/plating/asteroid, +/area/maintenance/port/aft) "tac" = ( /obj/structure/grille, /obj/machinery/meter, @@ -46170,6 +46628,12 @@ }, /turf/open/floor/plasteel, /area/engineering/atmos) +"tfP" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/airless{ + icon_state = "wood-broken" + }, +/area/asteroid/nearstation) "tgm" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; @@ -46189,6 +46653,24 @@ "tin" = ( /turf/open/floor/engine/vacuum, /area/science/mixing) +"tjk" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/carpet/green/airless, +/area/asteroid/nearstation) +"tkH" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Courtroom" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel, +/area/service/lawoffice) "ttp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ @@ -46217,6 +46699,16 @@ dir = 1 }, /area/engineering/atmos) +"twy" = ( +/obj/structure/table/reinforced, +/obj/machinery/chem_dispenser/drinks{ + dir = 1; + icon_state = "soda_dispenser" + }, +/turf/open/floor/wood{ + icon_state = "wood-broken6" + }, +/area/maintenance/starboard/aft) "tFk" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -46397,6 +46889,12 @@ heat_capacity = 1e+006 }, /area/hallway/primary/starboard) +"uqZ" = ( +/obj/structure/table/wood, +/turf/open/floor/wood{ + icon_state = "wood-broken2" + }, +/area/maintenance/starboard/aft) "uuj" = ( /obj/machinery/plantgenes{ pixel_y = 6 @@ -46491,12 +46989,21 @@ }, /turf/open/floor/plasteel/dark, /area/engineering/gravity_generator) +"uCY" = ( +/turf/open/pool, +/area/maintenance/starboard/aft) "uDp" = ( /obj/machinery/atmospherics/pipe/simple/dark/visible{ dir = 5 }, /turf/open/floor/plating/asteroid/airless, /area/asteroid/nearstation) +"uDz" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/wood, +/area/maintenance/starboard/aft) "uEu" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 6 @@ -46511,6 +47018,35 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port) +"uIq" = ( +/obj/effect/turf_decal/bot_white/left, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/command/gateway) +"uMi" = ( +/obj/machinery/door/airlock/security{ + name = "Law Office"; + req_access_txt = "38" + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/service/lawoffice) "uSs" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible, /obj/machinery/atmospherics/pipe/simple/green/visible{ @@ -46632,6 +47168,17 @@ }, /turf/open/floor/plasteel/dark, /area/engineering/atmos) +"vmV" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/white, +/turf/open/floor/wood{ + icon_state = "wood-broken4" + }, +/area/maintenance/starboard/aft) +"vna" = ( +/obj/item/wrench, +/turf/open/space/basic, +/area/space) "voi" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -46727,6 +47274,18 @@ }, /turf/open/floor/engine/vacuum, /area/science/mixing) +"vDy" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "2-4" + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) "vGQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -46782,6 +47341,10 @@ }, /turf/open/floor/plasteel, /area/science/mixing) +"vTk" = ( +/obj/item/hatchet, +/turf/open/space/basic, +/area/space) "vVA" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 @@ -46835,13 +47398,15 @@ /area/science/mixing) "wbV" = ( /obj/effect/turf_decal/delivery, -/obj/machinery/hydroponics/soil, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, /obj/effect/turf_decal/tile/neutral{ dir = 4 }, +/obj/effect/turf_decal/weather, +/obj/effect/turf_decal/weather, +/obj/structure/closet/athletic_mixed, /turf/open/floor/plasteel/dark, /area/maintenance/starboard/aft) "wdt" = ( @@ -46860,6 +47425,12 @@ }, /turf/open/floor/plasteel/dark, /area/hallway/primary/aft) +"wkn" = ( +/obj/machinery/hydroponics/soil, +/obj/item/shovel/spade, +/obj/item/cultivator, +/turf/open/floor/plating/asteroid, +/area/maintenance/port/aft) "wkG" = ( /obj/structure/lattice/catwalk, /turf/open/floor/plating/airless, @@ -46883,17 +47454,36 @@ }, /turf/open/floor/plasteel, /area/engineering/atmos) +"wtA" = ( +/obj/structure/fluff/broken_flooring{ + dir = 8; + icon_state = "plating" + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "wvy" = ( /obj/machinery/atmospherics/pipe/manifold/general/visible, /obj/machinery/meter, /turf/open/floor/plasteel, /area/science/mixing) +"wvA" = ( +/obj/machinery/biogenerator, +/obj/structure/cable/white{ + icon_state = "0-4" + }, +/turf/open/floor/plating/asteroid, +/area/maintenance/port/aft) "wwT" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 5 }, /turf/open/floor/plasteel, /area/science/mixing) +"wDb" = ( +/obj/structure/lattice, +/turf/open/space/basic, +/area/space) "wOe" = ( /obj/machinery/door/firedoor/heavy, /obj/machinery/door/airlock/research{ @@ -46977,10 +47567,13 @@ /turf/open/floor/plasteel/dark, /area/engineering/atmos) "xdr" = ( -/obj/structure/barricade/wooden, +/obj/effect/turf_decal/sand/plating, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, +/obj/structure/cable/white{ + icon_state = "1-2" + }, /turf/open/floor/plating, /area/maintenance/starboard/aft) "xej" = ( @@ -47004,6 +47597,16 @@ }, /turf/open/floor/plasteel, /area/science/mixing) +"xpX" = ( +/obj/structure/toilet{ + dir = 8 + }, +/obj/structure/window/spawner/north, +/obj/machinery/door/window/westright, +/obj/effect/turf_decal/bot, +/obj/effect/landmark/blobstart, +/turf/open/floor/plasteel/freezer, +/area/commons/toilet/restrooms) "xrf" = ( /obj/machinery/light{ dir = 8 @@ -47143,12 +47746,46 @@ /obj/structure/grille, /turf/closed/wall/r_wall, /area/engineering/atmos) +"xMv" = ( +/obj/structure/lattice, +/obj/structure/fluff/broken_flooring{ + dir = 8; + icon_state = "plating" + }, +/turf/open/space/basic, +/area/space/nearstation) +"xMZ" = ( +/turf/closed/wall, +/area/command/gateway) "xPz" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 9 }, /turf/open/floor/plating/asteroid/airless, /area/asteroid/nearstation) +"xTs" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/machinery/power/apc{ + areastring = "/area/commons/toilet/restrooms"; + dir = 8; + name = "Restrooms APC"; + pixel_x = -25; + pixel_y = 3 + }, +/obj/structure/cable/white{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/maintenance/starboard) +"xWb" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/command/gateway) "xZO" = ( /obj/effect/mapping_helpers/airlock/locked, /obj/machinery/door/airlock/public/glass{ @@ -47234,6 +47871,19 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port/aft) +"ygB" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Maintenance Hatch"; + req_access_txt = "12" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/starboard) "ygE" = ( /obj/structure/cable/white{ icon_state = "1-2" @@ -47260,6 +47910,16 @@ }, /turf/open/floor/plasteel, /area/engineering/atmos) +"yin" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plating/asteroid, +/area/maintenance/port/aft) +"ykL" = ( +/obj/structure/chair/stool/bar, +/turf/open/floor/wood, +/area/maintenance/starboard/aft) "ylr" = ( /obj/machinery/door/airlock/external{ name = "External Airlock"; @@ -78265,9 +78925,9 @@ aqo aqo bbd aKm -aad -aad -aad +wvA +bVs +wkn aad aad aad @@ -78521,12 +79181,12 @@ ylr aSG jXc aME -aKm -aad -aad -aad -aad -aad +aLv +yin +dvB +sZH +sTH +bVs aad aad aad @@ -78779,9 +79439,9 @@ aqo aqo bbd aKm -aac -aac -aad +qgg +pMQ +fNN aKm aKm aKm @@ -79037,8 +79697,8 @@ ghr jBh aKm aKm -aKm -aKm +gIT +aLv aKm aOs aSf @@ -79291,10 +79951,10 @@ aUQ bvg aKm jlZ -atE +vDy aOI -aPQ -aPQ +qFj +kdd aPQ aPQ aPQ @@ -83399,7 +84059,7 @@ aBn aDf aVV aVQ -aXk +aXg ajG aOZ bey @@ -84132,10 +84792,10 @@ aqy ajf ake ald -oyD -syS -oyD -oyD +iGT +tkH +iGT +lqJ apI apI arP @@ -84388,7 +85048,7 @@ aid aqw ajg akf -oyD +iGT alT amO anJ @@ -84648,8 +85308,8 @@ akg ale alU amP -oyD -oyD +aoC +aoC sAc aqU arR @@ -84905,7 +85565,7 @@ akh alf alV amQ -anJ +fmq aoD apI aqV @@ -85159,10 +85819,10 @@ ahG aix ajj aki -oyD -alW +uMi +loB amR -oyD +iYt syS apI aqW @@ -85416,10 +86076,10 @@ swC abw ajk akj -oyD +iGT alX amS -anJ +qRz aoE apI aqX @@ -92882,7 +93542,7 @@ aup avu atp gMe -arj +rih arj sEJ aBa @@ -93135,11 +93795,11 @@ nwY sOF sOG atq -aRz -aRz +oyD +oyD sOK -aRz -aRz +boD +oyD bli azU aBb @@ -93392,11 +94052,11 @@ aqj aRz asr bfp -aRz +oyD avv acx axf -aRz +oyD aRz sEK sJN @@ -93649,11 +94309,11 @@ aqk aRz ass aTR -sJN -avw +oyD +alW awz axg -aRz +oyD sEl sEL aXb @@ -93906,11 +94566,11 @@ aql aRz ast bfo -aRz -aRz -aRz -sJN -aRz +oyD +oXj +xpX +pML +oyD bfp aSD aRz @@ -93952,20 +94612,20 @@ sdL bhj wbV sOM -aad -aad -aad +bsq +iSq +bsq bfP bfP bjc bfP bfP -aad -aad -aad -aad -aad -aad +myQ +rwH +fgZ +aac +aac +aac aaa aaa aaa @@ -94162,13 +94822,13 @@ ape aqm sJN sAY -acw -aXJ -aSC -aXJ -bai -aXb -sEm +caJ +oyD +oyD +oyD +oyD +oyD +sGY aRz sFn sFR @@ -94206,22 +94866,22 @@ beQ emA xdr bgu -sPY -bhT -sOM -aad +pmx +myQ +aRy +aRy +aRy +aRy +aRy +hYy +nIf +nIf +lcW +myQ +ogx bvg +aKo aac -aad -aac -aac -aac -aad -aad -aac -aac -aac -aad aaa aaa aaa @@ -94419,12 +95079,12 @@ apf aqn aRz abO -bfp -aSD -sCt -sCQ -sDq -aSD +acw +aXJ +aXJ +xTs +aXJ +aXJ sEn sEN sFo @@ -94464,20 +95124,20 @@ bfr hso bgv kRV -bhU -aRy -bvg -aac -aaa -aaa -aaa -aaa -aac -aad -aad -aad -aad -aac +vmV +kUu +iSy +kUu +kUu +kUu +jMP +lcW +fWh +lcW +hsR +kKr +tfP +kKr aac aaa aaa @@ -94678,11 +95338,11 @@ aRz abN acy aRz -sJN -aRz -aRz -aRz +ncG +eOg +sDq aRz +bfp aRz sFp sFT @@ -94719,23 +95379,23 @@ aRy aRy aRy mgV -bgw +myQ hiR -bhV -aRy -bvg -aaa -aaa -aaa -aaa -aaa -aaa -aac -aad -aad -aac -aac -aaa +dSq +dSq +dSq +dSq +krX +ekG +nBu +nvk +lcW +twy +myQ +tjk +tjk +tjk +sdX aaa aaa aaa @@ -94934,13 +95594,13 @@ aqp aRz bvh sBx +xMZ +xMZ +xMZ +bRf +xMZ +ygB aRz -aad -aad -aah -aad -aad -aSD sFq sFU aRz @@ -94976,23 +95636,23 @@ bes bes bes mgV -bgx +aRy bhm -bhW -sON -aac -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +uCY +uCY +uCY +uCY +jeI +lcW +foP +uqZ +lcW +qUQ +myQ +tjk +tjk +tjk +sdX aaa aaa aaa @@ -95191,14 +95851,14 @@ amD amC amC sBy -sBW -aad -aac -bvg -aad -aad -sJN -aRz +xMZ +ria +pcD +uIq +iVs +iUJ +xMZ +xMZ aRz aSD sHd @@ -95233,22 +95893,22 @@ bet bet bet lMu -bgy -sPY -bhX aRy -bvg -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bhm +bhX +jrd +uCY +nio +jeI +juY +kyS +kAD +pix +qjS +myQ +gWt +tjk +tjk aaa aaa aaa @@ -95448,15 +96108,15 @@ aqq ark amC sOJ -bvg -aac -aac -aae -aac -aad -aRz +xMZ +mia +hkI +jOJ +gRe +par +hGN +xMZ aXK -bhk sGA sHe aRz @@ -95490,22 +96150,22 @@ vCu tin tin vxf -bgz -sPY -sLg aRy -bvg -aac -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bhm +uCY +uCY +uCY +uCY +jeI +lcW +rmZ +sdk +lcW +sYi +myQ +tjk +tjk +wtA aaa aaa aaa @@ -95705,15 +96365,15 @@ aqr arl amC bvg -aac -aac -aaa -aae -aac -aac +xMZ +uIq +pcD +ria +kQz +xWb sEQ +bRf aRz -sJN atq aRz aRz @@ -95747,27 +96407,27 @@ fDZ hNT bkf lMu -bgA +myQ bhn -bhY -sON -aad -aac -aac +gSu +gSu +gSu +gSu +oIA +lcW +ykL +loX +lcW +pjh +myQ +tjk +hZH +aaa aaa aaa aaa aaa aaa -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP jFP jFP jFP @@ -95962,19 +96622,19 @@ aqs arm syD aac -aaa -aaa -aaa -aae -aaa -aac -bvg -sFs +xMZ +xMZ +xMZ +xMZ +xMZ +cUd +dMx +slf sFX sGC sHf -sHB -blM +mZm +dQg sIy blZ sHB @@ -96005,26 +96665,26 @@ jsD low lMu sON -sOM -sOM -sOM -aad -aad -aad -aad +myQ +cGA +puc +puc +puc +lcW +lcW +lcW +lcW +isT +lcW +hsR +jkc +fRe +aaa +aaa aaa aaa aaa aaa -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP jFP jFP jFP @@ -96223,10 +96883,10 @@ aaa aaa aaa aae -aae -bvg -bvg -sFs +xMZ +rVP +kbe +qeO sFY sGD bsS @@ -96262,26 +96922,26 @@ iUO svX eWo aad -aad -aad -aad -aad -aad -aad -aac -aac -aac +omB +myQ +aRy +aRy +aRy +aRy +aRy +lcW +lcW +uDz +lcW +myQ +kKr +qab +sdX +aaa +aaa +aaa aaa aaa -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP jFP jFP jFP @@ -96480,10 +97140,10 @@ aaf aaf aae aae -axW -sDP -azb -axW +xMZ +msl +xMZ +xMZ axW axW azb @@ -96521,24 +97181,24 @@ jRe aad aad aad +sEq +aac aad aad -aad -aad -aad -aad -aad +aRy +myQ +aRy +myQ +aRy +myQ +rwH +rwH +kIL +xMv +aaa +aaa aaa aaa -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP jFP jFP jFP @@ -96782,20 +97442,20 @@ aad aad aad aad -aad +omB aad aaa aaa aaa -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa uXD jFP jFP @@ -97044,15 +97704,15 @@ aac aaa aaa aaa -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP +aaa +aaa +wDb +aaa +aaa +aaa +aaa +aaa +aaa jFP jFP jFP @@ -97300,16 +97960,16 @@ aad aaa aaa aaa +wDb +aaa +sjr +aaa +aaa +aaa +vna +aaa +aaa aaa -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP jFP jFP jFP @@ -97554,19 +98214,19 @@ aad aad aad aaa +vTk +aaa +aaa +aaa +aaa +aaa +aaa +fpH +aaa aaa aaa aaa aaa -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP jFP jFP jFP @@ -97812,18 +98472,18 @@ aaa aaa aaa aaa +wDb +aaa +aaa +nqr +aaa +aaa +aaa +aaa +aaa aaa aaa aaa -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP jFP jFP jFP @@ -98072,15 +98732,15 @@ aaa aaa aaa aaa -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa jFP jFP jFP @@ -98329,15 +98989,15 @@ aaa aaa aaa aaa -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa jFP jFP jFP @@ -98586,15 +99246,15 @@ aaa aaa aaa aaa -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa jFP jFP jFP diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index 0972252bf6..536d5f4aa3 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -40675,6 +40675,7 @@ /obj/machinery/light/small{ dir = 1 }, +/obj/machinery/space_heater, /turf/open/floor/plating{ icon_state = "platingdmg3" }, @@ -45447,15 +45448,15 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, /obj/effect/turf_decal/tile/yellow{ dir = 1 }, /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, /turf/open/floor/plasteel, /area/engineering/main) "bYS" = ( @@ -45468,15 +45469,15 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, /obj/effect/turf_decal/tile/yellow{ dir = 1 }, /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plasteel, /area/engineering/main) "bYT" = ( @@ -45492,15 +45493,15 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, /obj/effect/turf_decal/tile/yellow{ dir = 1 }, /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /obj/structure/cable{ icon_state = "1-2" }, @@ -45520,15 +45521,15 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, /obj/effect/turf_decal/tile/yellow{ dir = 1 }, /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plasteel, /area/engineering/main) "bYV" = ( @@ -45539,6 +45540,12 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -45551,15 +45558,15 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, /obj/effect/turf_decal/tile/yellow{ dir = 1 }, /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -45578,15 +45585,15 @@ /obj/machinery/firealarm{ pixel_y = 29 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, /obj/effect/turf_decal/tile/yellow{ dir = 1 }, /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engineering/main) "bYY" = ( @@ -47272,6 +47279,10 @@ dir = 4; light_color = "#e8eaff" }, +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 22 + }, /turf/open/floor/plasteel/dark, /area/engineering/main) "cfk" = ( @@ -53466,10 +53477,6 @@ }, /area/maintenance/department/engine) "dEy" = ( -/obj/machinery/airalarm{ - dir = 1; - pixel_y = -22 - }, /obj/structure/reflector/double/anchored{ dir = 9 }, @@ -55355,6 +55362,10 @@ /obj/machinery/power/rad_collector/anchored, /turf/open/floor/engine, /area/engineering/supermatter) +"hKX" = ( +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/maintenance/department/security/brig) "hMx" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible, /turf/open/floor/plating{ @@ -60884,6 +60895,10 @@ /obj/item/pen, /turf/open/floor/plasteel/dark, /area/science/explab) +"tCJ" = ( +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/maintenance/department/crew_quarters/bar) "tCP" = ( /obj/docking_port/stationary/public_mining_dock, /turf/open/floor/plating, @@ -80222,7 +80237,7 @@ aiu xuv aoe ajD -ajD +hKX aiu apB aiu @@ -91030,7 +91045,7 @@ aKT aLH aNf aKT -aLL +tCJ aQO aRO aSH @@ -99781,7 +99796,7 @@ aPY bau aLf aFi -aFi +aMA beI beI bgD @@ -107236,7 +107251,7 @@ aaa aEl aTx aFi -aFi +aMA aEj bhz lEn diff --git a/auxmos.dll b/auxmos.dll index 54fb0c6c98..be117d82da 100644 Binary files a/auxmos.dll and b/auxmos.dll differ diff --git a/auxmos.pdb b/auxmos.pdb index 031e66d103..2552298fdd 100644 Binary files a/auxmos.pdb and b/auxmos.pdb differ diff --git a/code/__DEFINES/_flags/obj_flags.dm b/code/__DEFINES/_flags/obj_flags.dm index e48146a1d0..ac772c6e8e 100644 --- a/code/__DEFINES/_flags/obj_flags.dm +++ b/code/__DEFINES/_flags/obj_flags.dm @@ -15,6 +15,7 @@ #define BLOCK_Z_IN_UP (1<<12) // Should this object block z uprise from below? #define SHOVABLE_ONTO (1<<13)//called on turf.shove_act() to consider whether an object should have a niche effect (defined in their own shove_act()) when someone is pushed onto it, or do a sanity CanPass() check. #define EXAMINE_SKIP (1<<14) /// Makes the Examine proc not read out this item. +#define IN_STORAGE (1<<15) //is this item in the storage item, such as backpack? used for tooltips /// Integrity defines for clothing (not flags but close enough) #define CLOTHING_PRISTINE 0 // We have no damage on the clothing diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index 67d16e6687..1c6b7c21d4 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -155,10 +155,10 @@ //LAVALAND #define LAVALAND_EQUIPMENT_EFFECT_PRESSURE 50 //what pressure you have to be under to increase the effect of equipment meant for lavaland -#define LAVALAND_DEFAULT_ATMOS "o2=14;n2=23;TEMP=300" +#define LAVALAND_DEFAULT_ATMOS "LAVALAND_ATMOS" //SNOSTATION -#define ICEMOON_DEFAULT_ATMOS "o2=17;n2=63;TEMP=180" +#define ICEMOON_DEFAULT_ATMOS "ICEMOON_ATMOS" //ATMOSIA GAS MONITOR TAGS #define ATMOS_GAS_MONITOR_INPUT_O2 "o2_in" diff --git a/code/__DEFINES/footsteps.dm b/code/__DEFINES/footsteps.dm index 215e287adf..cc0c6547b0 100644 --- a/code/__DEFINES/footsteps.dm +++ b/code/__DEFINES/footsteps.dm @@ -8,6 +8,7 @@ #define FOOTSTEP_LAVA "lava" #define FOOTSTEP_MEAT "meat" #define FOOTSTEP_RUST "rust" +#define FOOTSTEP_CATWALK "catwalk" //barefoot sounds #define FOOTSTEP_WOOD_BAREFOOT "woodbarefoot" @@ -94,6 +95,12 @@ GLOBAL_LIST_INIT(footstep, list( 'sound/effects/footstep/lava3.ogg'), 100, 0), FOOTSTEP_MEAT = list(list( 'sound/effects/meatslap.ogg'), 100, 0), + FOOTSTEP_CATWALK = list(list( + 'sound/effects/footstep/catwalk1.ogg', + 'sound/effects/footstep/catwalk2.ogg', + 'sound/effects/footstep/catwalk3.ogg', + 'sound/effects/footstep/catwalk4.ogg', + 'sound/effects/footstep/catwalk5.ogg'), 100, 1), FOOTSTEP_RUST = list(list( 'sound/effects/footstep/rustystep1.ogg'), 100, 0) )) diff --git a/code/__DEFINES/layers_planes.dm b/code/__DEFINES/layers_planes.dm index ea7b1b2e0a..c7be89721e 100644 --- a/code/__DEFINES/layers_planes.dm +++ b/code/__DEFINES/layers_planes.dm @@ -64,8 +64,9 @@ #define GAS_PIPE_VISIBLE_LAYER 2.47 #define GAS_FILTER_LAYER 2.48 #define GAS_PUMP_LAYER 2.49 - #define LOW_OBJ_LAYER 2.5 +///catwalk overlay of /turf/open/floor/plating/plating_catwalk +#define CATWALK_LAYER 2.51 #define LOW_SIGIL_LAYER 2.52 #define SIGIL_LAYER 2.54 #define HIGH_SIGIL_LAYER 2.56 diff --git a/code/__DEFINES/loadout.dm b/code/__DEFINES/loadout.dm index c900a33d06..f9b4c36c9c 100644 --- a/code/__DEFINES/loadout.dm +++ b/code/__DEFINES/loadout.dm @@ -59,7 +59,7 @@ #define LOADOUT_CATEGORY_UNLOCKABLE "Unlockable" //how many prosthetics can we have -#define MAXIMUM_LOADOUT_PROSTHETICS 2 +#define MAXIMUM_LOADOUT_PROSTHETICS 4 //what limbs can be amputated or be prosthetic #define LOADOUT_ALLOWED_LIMB_TARGETS list(BODY_ZONE_L_ARM,BODY_ZONE_R_ARM,BODY_ZONE_L_LEG,BODY_ZONE_R_LEG) diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 850a2b0f39..6a63ced634 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -347,3 +347,7 @@ // / Breathing types. Lungs can access either by these or by a string, which will be considered a gas ID. #define BREATH_OXY /datum/breathing_class/oxygen #define BREATH_PLASMA /datum/breathing_class/plasma + +//Gremlins +#define NPC_TAMPER_ACT_FORGET 1 //Don't try to tamper with this again +#define NPC_TAMPER_ACT_NOMSG 2 //Don't produce a visible message diff --git a/code/__HELPERS/markov.dm b/code/__HELPERS/markov.dm new file mode 100644 index 0000000000..7e195f8b9c --- /dev/null +++ b/code/__HELPERS/markov.dm @@ -0,0 +1,61 @@ +#define MAXIMUM_MARKOV_LENGTH 25000 + +/proc/markov_chain(var/text, var/order = 4, var/length = 250) + if(!text || order < 0 || order > 20 || length < 1 || length > MAXIMUM_MARKOV_LENGTH) + return + + var/table = markov_table(text, order) + var/markov = markov_text(length, table, order) + return markov + +/proc/markov_table(var/text, var/look_forward = 4) + if(!text) + return + var/list/table = list() + + for(var/i = 1, i <= length(text), i++) + var/char = copytext(text, i, look_forward+i) + if(!table[char]) + table[char] = list() + + for(var/i = 1, i <= (length(text) - look_forward), i++) + var/char_index = copytext(text, i, look_forward+i) + var/char_count = copytext(text, i+look_forward, (look_forward*2)+i) + + if(table[char_index][char_count]) + table[char_index][char_count]++ + else + table[char_index][char_count] = 1 + + return table + +/proc/markov_text(var/length = 250, var/table, var/look_forward = 4) + if(!table) + return + var/char = pick(table) + var/o = char + + for(var/i = 0, i <= (length / look_forward), i++) + var/newchar = markov_weighted_char(table[char]) + + if(newchar) + char = newchar + o += "[newchar]" + else + char = pick(table) + + return o + +/proc/markov_weighted_char(var/list/array) + if(!array || !array.len) + return + + var/total = 0 + for(var/i in array) + total += array[i] + var/r = rand(1, total) + for(var/i in array) + var/weight = array[i] + if(r <= weight) + return i + r -= weight diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index 781fa38b94..c8e5b72f26 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -71,6 +71,7 @@ GLOBAL_LIST_INIT(bitfields, list( "DROPDEL" = DROPDEL, "NOBLUDGEON" = NOBLUDGEON, "ABSTRACT" = ABSTRACT, + "IN_STORAGE" = IN_STORAGE, "ITEM_CAN_BLOCK" = ITEM_CAN_BLOCK, "ITEM_CAN_PARRY" = ITEM_CAN_PARRY ), diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index daa4f5879d..b41b7356a8 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -112,7 +112,6 @@ GLOBAL_LIST_INIT(maintenance_loot, list( /obj/item/storage/box/marshmallow = 2, /obj/item/clothing/gloves/tackler/offbrand = 1, /obj/item/stack/sticky_tape = 1, - /obj/effect/spawner/lootdrop/grille_or_trash = 15, "" = 3 )) diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index bfbdce41fd..56db868a21 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -141,11 +141,29 @@ /atom/movable/screen/inventory/MouseEntered() ..() add_overlays() + //Apply the outline affect + add_stored_outline() /atom/movable/screen/inventory/MouseExited() ..() cut_overlay(object_overlays) object_overlays.Cut() + remove_stored_outline() + +/atom/movable/screen/inventory/proc/add_stored_outline() + if(hud?.mymob && slot_id) + var/obj/item/inv_item = hud.mymob.get_item_by_slot(slot_id) + if(inv_item) + if(hud?.mymob.incapacitated()) + inv_item.apply_outline(COLOR_RED_GRAY) + else + inv_item.apply_outline() + +/atom/movable/screen/inventory/proc/remove_stored_outline() + if(hud?.mymob && slot_id) + var/obj/item/inv_item = hud.mymob.get_item_by_slot(slot_id) + if(inv_item) + inv_item.remove_outline() /atom/movable/screen/inventory/update_icon_state() if(!icon_empty) diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 583cf98259..260a4c1b29 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -37,7 +37,8 @@ SUBSYSTEM_DEF(air) //atmos singletons var/list/gas_reactions = list() - + var/list/atmos_gen + var/list/planetary = list() //auxmos already caches static planetary mixes but could be convenient to do so here too //Special functions lists var/list/turf/open/high_pressure_delta = list() @@ -61,6 +62,8 @@ SUBSYSTEM_DEF(air) var/share_max_steps = 3 // Excited group processing will try to equalize groups with total pressure difference less than this amount. var/excited_group_pressure_goal = 1 + // If this is set to 0, monstermos won't process planet atmos + var/planet_equalize_enabled = 0 /datum/controller/subsystem/air/stat_entry(msg) msg += "C:{" @@ -473,6 +476,20 @@ SUBSYSTEM_DEF(air) return pipe_init_dirs_cache[type]["[dir]"] +/datum/controller/subsystem/air/proc/generate_atmos() + atmos_gen = list() + for(var/T in subtypesof(/datum/atmosphere)) + var/datum/atmosphere/atmostype = T + atmos_gen[initial(atmostype.id)] = new atmostype + +/datum/controller/subsystem/air/proc/preprocess_gas_string(gas_string) + if(!atmos_gen) + generate_atmos() + if(!atmos_gen[gas_string]) + return gas_string + var/datum/atmosphere/mix = atmos_gen[gas_string] + return mix.gas_string + #undef SSAIR_PIPENETS #undef SSAIR_ATMOSMACHINERY #undef SSAIR_EXCITEDGROUPS diff --git a/code/datums/atmosphere/_atmosphere.dm b/code/datums/atmosphere/_atmosphere.dm new file mode 100644 index 0000000000..5323b070cd --- /dev/null +++ b/code/datums/atmosphere/_atmosphere.dm @@ -0,0 +1,60 @@ +/datum/atmosphere + var/gas_string + var/id + + var/list/base_gases // A list of gases to always have + var/list/normal_gases // A list of allowed gases:base_amount + var/list/restricted_gases // A list of allowed gases like normal_gases but each can only be selected a maximum of one time + var/restricted_chance = 10 // Chance per iteration to take from restricted gases + + var/minimum_pressure + var/maximum_pressure + + var/minimum_temp + var/maximum_temp + +/datum/atmosphere/New() + generate_gas_string() + +/datum/atmosphere/proc/generate_gas_string() + var/list/spicy_gas = restricted_gases.Copy() + var/target_pressure = rand(minimum_pressure, maximum_pressure) + var/pressure_scale = target_pressure / maximum_pressure + + // First let's set up the gasmix and base gases for this template + // We make the string from a gasmix in this proc because gases need to calculate their pressure + var/datum/gas_mixture/gasmix = new + gasmix.set_temperature(rand(minimum_temp, maximum_temp)) + for(var/i in base_gases) + gasmix.set_moles(i, base_gases[i]) + + // Now let the random choices begin + var/gastype + var/amount + while(gasmix.return_pressure() < target_pressure) + if(!prob(restricted_chance) || !length(spicy_gas)) + gastype = pick(normal_gases) + amount = normal_gases[gastype] + else + gastype = pick(spicy_gas) + amount = spicy_gas[gastype] + spicy_gas -= gastype //You can only pick each restricted gas once + + amount *= rand(50, 200) / 100 // Randomly modifes the amount from half to double the base for some variety + amount *= pressure_scale // If we pick a really small target pressure we want roughly the same mix but less of it all + amount = CEILING(amount, 0.1) + + gasmix.adjust_moles(gastype, amount) + + // That last one put us over the limit, remove some of it + if(gasmix.return_pressure() > target_pressure) + var/moles_to_remove = (1 - target_pressure / gasmix.return_pressure()) * gasmix.total_moles() + gasmix.adjust_moles(gastype, -moles_to_remove) + gasmix.set_moles(gastype, FLOOR(gasmix.get_moles(gastype), 0.1)) + + // Now finally lets make that string + var/list/gas_string_builder = list() + for(var/id in gasmix.get_gases()) + gas_string_builder += "[id]=[gasmix.get_moles(id)]" + gas_string_builder += "TEMP=[gasmix.return_temperature()]" + gas_string = gas_string_builder.Join(";") diff --git a/code/datums/atmosphere/planetary.dm b/code/datums/atmosphere/planetary.dm new file mode 100644 index 0000000000..248873562f --- /dev/null +++ b/code/datums/atmosphere/planetary.dm @@ -0,0 +1,52 @@ +// Atmos types used for planetary airs +/datum/atmosphere/lavaland + id = LAVALAND_DEFAULT_ATMOS + + base_gases = list( + GAS_O2=5, + GAS_N2=10, + ) + normal_gases = list( + GAS_O2=10, + GAS_N2=10, + GAS_CO2=10, + ) + restricted_gases = list( + GAS_PLASMA=0.1, + GAS_BZ=1.2, + GAS_METHANE=1.0, + GAS_METHYL_BROMIDE=0.1, + ) + restricted_chance = 30 + + minimum_pressure = HAZARD_LOW_PRESSURE + 10 + maximum_pressure = LAVALAND_EQUIPMENT_EFFECT_PRESSURE - 1 + + minimum_temp = BODYTEMP_COLD_DAMAGE_LIMIT + 1 + maximum_temp = 350 + +/datum/atmosphere/icemoon + id = ICEMOON_DEFAULT_ATMOS + + base_gases = list( + GAS_O2=5, + GAS_N2=10, + ) + normal_gases = list( + GAS_O2=10, + GAS_N2=10, + GAS_CO2=10, + ) + restricted_gases = list( + GAS_PLASMA=0.1, + GAS_METHANE=1.0, + GAS_METHYL_BROMIDE=0.1, + ) + restricted_chance = 10 + + minimum_pressure = HAZARD_LOW_PRESSURE + 10 + maximum_pressure = LAVALAND_EQUIPMENT_EFFECT_PRESSURE - 1 + + minimum_temp = 180 + maximum_temp = 180 + diff --git a/code/datums/components/crafting/glassware/glassware.dm b/code/datums/components/crafting/glassware/glassware.dm index 88f52d6b01..50137733ee 100644 --- a/code/datums/components/crafting/glassware/glassware.dm +++ b/code/datums/components/crafting/glassware/glassware.dm @@ -1,8 +1,8 @@ //This file is for glass working types of things! /obj/item/glasswork - name = "This is a bug report it!" - desc = "Failer to code. Contact your local bug remover..." + name = "this is a bug!" + desc = "Uh oh, the coders did a fucky wucky! Contact your local code monkey and tell them about this!" icon = 'icons/obj/glassworks.dmi' w_class = WEIGHT_CLASS_SMALL force = 1 @@ -11,45 +11,45 @@ tool_behaviour = null /obj/item/glasswork/glasskit - name = "Glass working tools" - desc = "A lovely belt of most the tools you will need to shape, mold, and refine glass into more advanced shapes." + name = "glasswork tools" + desc = "A set of most the tools you will need to shape, mold, and refine glass into more advanced shapes." icon_state = "glass_tools" tool_behaviour = TOOL_GLASS_CUT //Cutting takes 20 ticks /obj/item/glasswork/blowing_rod - name = "Glass working blow rod" - desc = "A hollow metal stick made for glass blowing." + name = "glassblowing rod" + desc = "A hollow metal rod made for blowing glass." icon_state = "blowing_rods_unused" tool_behaviour = TOOL_BLOW //Rods take 5 ticks /obj/item/glasswork/glass_base //Welding takes 30 ticks - name = "Glass fodder sheet" - desc = "A sheet of glass set aside for glass working" + name = "glass fodder sheet" + desc = "A sheet of glass set aside for glass working." icon_state = "glass_base" var/next_step = null var/rod = /obj/item/glasswork/blowing_rod /obj/item/tea_plate - name = "Tea Plate" + name = "tea saucer" desc = "A polished plate for a tea cup. How fancy!" icon = 'icons/obj/glass_ware.dmi' icon_state = "tea_plate" /obj/item/tea_cup - name = "Tea Cup" - desc = "A glass cup made for fake tea!" + name = "tea cup" + desc = "A glass cup made for sipping tea!" icon = 'icons/obj/glass_ware.dmi' icon_state = "tea_plate" //////////////////////Chem Disk///////////////////// //Two Steps // //Sells for 300 cr, takes 10 glass shets // -//Usefull for chem spliting // +//Useful for chem spliting // //////////////////////////////////////////////////// /obj/item/glasswork/glass_base/dish - name = "Glass fodder sheet" - desc = "A set of glass sheets set aside for glass working, this one is ideal for a small glass dish. Needs to be cut with some tools." + name = "glass fodder sheet (dish)" + desc = "A set of glass sheets set aside for glass working. This one is ideal for a small glass dish. It needs to be cut with some glassworking tools." next_step = /obj/item/glasswork/glass_base/dish_part1 /obj/item/glasswork/glass_base/dish/attackby(obj/item/I, mob/user, params) @@ -60,8 +60,8 @@ qdel(src) /obj/item/glasswork/glass_base/dish_part1 - name = "Half chem dish sheet" - desc = "A sheet of glass cut in half, looks like it still needs some more cutting down" + name = "half glass fodder sheet (dish)" + desc = "A sheet of glass cut in half. It looks like it still needs some more cutting down." icon_state = "glass_base_half" next_step = /obj/item/reagent_containers/glass/beaker/glass_dish @@ -75,12 +75,12 @@ //////////////////////Lens////////////////////////// //Six Steps // //Sells for 1600 cr, takes 15 glass shets // -//Usefull for selling and later crafting // +//Useful for selling and later crafting // //////////////////////////////////////////////////// /obj/item/glasswork/glass_base/glass_lens - name = "Glass fodder sheet" - desc = "A set of glass sheets set aside for glass working, this one is ideal for a small glass lens. Needs to be cut with some tools." + name = "glass fodder sheet (lens)" + desc = "A set of glass sheets set aside for glass working. This one is ideal for a glass lens. It needs to be cut with some glassworking tools." next_step = /obj/item/glasswork/glass_base/glass_lens_part1 /obj/item/glasswork/glass_base/glass_lens/attackby(obj/item/I, mob/user, params) @@ -91,8 +91,8 @@ qdel(src) /obj/item/glasswork/glass_base/glass_lens_part1 - name = "Glass fodder sheet" - desc = "Cut glass ready to be heated. Needs to be heated with some tools." + name = "half glass fodder sheet (lens)" + desc = "Cut glass ready to be heated with something very hot." icon_state = "glass_base_half" next_step = /obj/item/glasswork/glass_base/glass_lens_part2 @@ -104,8 +104,8 @@ qdel(src) /obj/item/glasswork/glass_base/glass_lens_part2 - name = "Glass fodder sheet" - desc = "Cut glass that has been heated. Needs to be heated more with some tools." + name = "heated half glass fodder sheet (lens)" + desc = "Cut glass that has been heated once already and is ready to be heated again." icon_state = "glass_base_heat" next_step = /obj/item/glasswork/glass_base/glass_lens_part3 @@ -117,8 +117,8 @@ qdel(src) /obj/item/glasswork/glass_base/glass_lens_part3 - name = "Glass fodder sheet" - desc = "Cut glass that has been heated into a blob of hot glass. Needs to be placed onto a blow tube." + name = "heated glass blob (lens)" + desc = "Cut glass that has been heated into a blob. It needs to be attached to a glassblowing rod." icon_state = "glass_base_molding" next_step = /obj/item/glasswork/glass_base/glass_lens_part4 @@ -131,8 +131,8 @@ qdel(I) /obj/item/glasswork/glass_base/glass_lens_part4 - name = "Glass fodder sheet" - desc = "Cut glass that has been heated into a blob of hot glass. Needs to be cut off onto a blow tube." + name = "glassblowing rod (lens)" + desc = "A hollow metal rod made for blowing glass. There is a blob of shapen glass at the end of it that needs to be cut off with some glassworking tools." icon_state = "blowing_rods_inuse" next_step = /obj/item/glasswork/glass_base/glass_lens_part5 @@ -145,8 +145,8 @@ qdel(src) /obj/item/glasswork/glass_base/glass_lens_part5 - name = "Unpolished glass lens" - desc = "A small unpolished glass lens. Could be polished with some cloth." + name = "unpolished glass lens" + desc = "An unpolished glass lens. It needs to be polished with some dry cloth." icon = 'icons/obj/glass_ware.dmi' icon_state = "glass_optics" next_step = /obj/item/glasswork/glass_base/glass_lens_part6 @@ -159,8 +159,8 @@ qdel(src) /obj/item/glasswork/glass_base/glass_lens_part6 - name = "Unrefined glass lens" - desc = "A small polished glass lens. Just needs to be refined with some sandstone." + name = "unrefined glass lens" + desc = "A polished glass lens. It needs to be refined with some sandstone." icon = 'icons/obj/glass_ware.dmi' icon_state = "glass_optics" next_step = /obj/item/glasswork/glass_base/lens @@ -174,12 +174,12 @@ //////////////////////Spouty Flask////////////////// //Four Steps // //Sells for 1200 cr, takes 20 glass shets // -//Usefull for selling and chemical things // +//Useful for selling and chemical things // //////////////////////////////////////////////////// /obj/item/glasswork/glass_base/spouty - name = "Glass fodder sheet" - desc = "A set of glass sheets set aside for glass working, this one is ideal for a spout beaker. Needs to be cut with some tools." + name = "Glass fodder sheet (spout)" + desc = "A set of glass sheets set aside for glass working. This one is ideal for a spouty flask. It needs to heated with something very hot." next_step = /obj/item/glasswork/glass_base/spouty_part2 /obj/item/glasswork/glass_base/spouty/attackby(obj/item/I, mob/user, params) @@ -190,8 +190,8 @@ qdel(src) /obj/item/glasswork/glass_base/spouty_part2 - name = "Glass fodder sheet" - desc = "Cut glass that has been heated. Needs to be heated with some tools." + name = "glass fodder sheet (spout)" + desc = "Cut glass ready to be heated with something very hot." icon_state = "glass_base_half" next_step = /obj/item/glasswork/glass_base/spouty_part3 @@ -203,8 +203,8 @@ qdel(src) /obj/item/glasswork/glass_base/spouty_part3 - name = "Glass fodder sheet" - desc = "Cut glass that has been heated into a blob of hot glass. Needs to be placed onto a blow tube." + name = "heated glass blob (spout)" + desc = "Cut glass that has been heated into a blob. It needs to be attached to a glassblowing rod." icon_state = "glass_base_molding" next_step = /obj/item/glasswork/glass_base/spouty_part4 @@ -217,8 +217,8 @@ qdel(I) /obj/item/glasswork/glass_base/spouty_part4 - name = "Glass fodder sheet" - desc = "Cut glass that has been heated into a blob of hot glass. Needs to be cut off onto a blow tube." + name = "glassblowing rod (spout)" + desc = "A hollow metal rod made for blowing glass. There is a blob of shapen glass at the end of it that needs to be cut off with some glassworking tools." icon_state = "blowing_rods_inuse" next_step = /obj/item/reagent_containers/glass/beaker/flask/spouty @@ -233,12 +233,12 @@ //////////////////////Small Bulb Flask////////////// //Two Steps // //Sells for 600 cr, takes 5 glass shets // -//Usefull for selling and chemical things // +//Useful for selling and chemical things // //////////////////////////////////////////////////// /obj/item/glasswork/glass_base/flask_small - name = "Glass fodder sheet" - desc = "A set of glass sheets set aside for glass working, this one is ideal for a small flask. Needs to be heated with some tools." + name = "glass fodder sheet (small flask)" + desc = "A set of glass sheets set aside for glass working. This one is ideal for a small flask. It needs to heated with something very hot." next_step = /obj/item/glasswork/glass_base/flask_small_part1 /obj/item/glasswork/glass_base/flask_small/attackby(obj/item/I, mob/user, params) @@ -249,8 +249,8 @@ qdel(src) /obj/item/glasswork/glass_base/flask_small_part1 - name = "Metled glass" - desc = "A blob of metled glass, this one is ideal for a small flask. Needs to be blown with some tools." + name = "heated glass blob (small flask)" + desc = "Glass that has been heated into a blob. It needs to be attached to a glassblowing rod." icon_state = "glass_base_molding" next_step = /obj/item/glasswork/glass_base/flask_small_part2 @@ -263,8 +263,8 @@ qdel(I) /obj/item/glasswork/glass_base/flask_small_part2 - name = "Metled glass" - desc = "A blob of metled glass on the end of a blowing rod. Needs to be cut off with some tools." + name = "glassblowing rod (small flask)" + desc = "A hollow metal rod made for blowing glass. There is a blob of shapen glass at the end of it that needs to be cut off with some glassworking tools." icon_state = "blowing_rods_inuse" next_step = /obj/item/reagent_containers/glass/beaker/flask @@ -279,12 +279,12 @@ //////////////////////Large Bulb Flask////////////// //Two Steps // //Sells for 1000 cr, takes 15 glass shets // -//Usefull for selling and chemical things // +//Useful for selling and chemical things // //////////////////////////////////////////////////// /obj/item/glasswork/glass_base/flask_large - name = "Glass fodder sheet" - desc = "A set of glass sheets set aside for glass working, this one is ideal for a large flask. Needs to be heated with some tools." + name = "glass fodder sheet (large flask)" + desc = "A set of glass sheets set aside for glass working. This one is ideal for a large flask. It needs to heated with something very hot." next_step = /obj/item/glasswork/glass_base/flask_large_part1 /obj/item/glasswork/glass_base/flask_large/attackby(obj/item/I, mob/user, params) @@ -295,8 +295,8 @@ qdel(src) /obj/item/glasswork/glass_base/flask_large_part1 - name = "Metled glass" - desc = "A blob of metled glass, this one is ideal for a large flask. Needs to be blown with some tools." + name = "heated glass blob (large flask)" + desc = "Glass that has been heated into a blob. It needs to be attached to a glassblowing rod." icon_state = "glass_base_molding" next_step = /obj/item/glasswork/glass_base/flask_large_part2 @@ -309,8 +309,8 @@ qdel(I) /obj/item/glasswork/glass_base/flask_large_part2 - name = "Metled glass" - desc = "A blob of metled glass on the end of a blowing rod. Needs to be cut off with some tools." + name = "glassblowing rod (small flask)" + desc = "A hollow metal rod made for blowing glass. There is a blob of shapen glass at the end of it that needs to be cut off with some glassworking tools." icon_state = "blowing_rods_inuse" next_step = /obj/item/reagent_containers/glass/beaker/flask/large @@ -325,12 +325,12 @@ //////////////////////Tea Plates//////////////////// //Three Steps // //Sells for 1000 cr, takes 5 glass shets // -//Usefull for selling and chemical things // +//Useful for selling and chemical things // //////////////////////////////////////////////////// /obj/item/glasswork/glass_base/tea_plate - name = "Glass fodder sheet" - desc = "A set of glass sheets set aside for glass working, this one is ideal for a tea plate, how fancy! Needs to be heated with some tools." + name = "glass fodder sheet (tea saucer)" + desc = "A set of glass sheets set aside for glass working. This one is ideal for a tea saucer. It needs to heated with something very hot." next_step = /obj/item/glasswork/glass_base/tea_plate1 /obj/item/glasswork/glass_base/tea_plate/attackby(obj/item/I, mob/user, params) @@ -341,8 +341,8 @@ qdel(src) /obj/item/glasswork/glass_base/tea_plate1 - name = "Metled glass" - desc = "A blob of metled glass, this one is ideal for a tea plate. Needs to be blown with some tools." + name = "heated glass blob (tea saucer)" + desc = "Glass that has been heated into a blob. It needs to be attached to a glassblowing rod." icon_state = "glass_base_molding" next_step = /obj/item/glasswork/glass_base/tea_plate2 @@ -355,8 +355,8 @@ qdel(I) /obj/item/glasswork/glass_base/tea_plate2 - name = "Metled glass" - desc = "A blob of metled glass on the end of a blowing rod. Needs to be cut off with some tools." + name = "glassblowing rod (tea saucer)" + desc = "A hollow metal rod made for blowing glass. There is a blob of shapen glass at the end of it that needs to be cut off with some glassworking tools." icon_state = "blowing_rods_inuse" next_step = /obj/item/glasswork/glass_base/tea_plate3 @@ -369,8 +369,8 @@ qdel(src) /obj/item/glasswork/glass_base/tea_plate3 - name = "Disk of glass" - desc = "A disk of glass that can be cant be used for much. Needs to be polished with some cloth." + name = "unpolished glass saucer (tea saucer)" + desc = "An unpolished glass saucer. It needs to be polished with some dry cloth." icon_state = "glass_base_half" next_step = /obj/item/tea_plate @@ -384,12 +384,12 @@ //////////////////////Tea Cup/////////////////////// //Four Steps // //Sells for 1600 cr, takes 6 glass shets // -//Usefull for selling and chemical things // +//Useful for selling and chemical things // //////////////////////////////////////////////////// /obj/item/glasswork/glass_base/tea_cup - name = "Glass fodder sheet" - desc = "A set of glass sheets set aside for glass working, this one is ideal for a tea cup, how fancy! Needs to be heated with some tools." + name = "glass fodder sheet (tea cup)" + desc = "A set of glass sheets set aside for glass working. This one is ideal for a tea cup. It needs to heated with something very hot." next_step = /obj/item/glasswork/glass_base/tea_cup1 /obj/item/glasswork/glass_base/tea_cup/attackby(obj/item/I, mob/user, params) @@ -400,8 +400,8 @@ qdel(src) /obj/item/glasswork/glass_base/tea_cup1 - name = "Metled glass" - desc = "A blob of metled glass, this one is ideal for a tea cup. Needs to be blown with some tools." + name = "heated glass blob (tea cup)" + desc = "Glass that has been heated into a blob. It needs to be attached to a glassblowing rod." icon_state = "glass_base_molding" next_step = /obj/item/glasswork/glass_base/tea_cup2 @@ -414,8 +414,8 @@ qdel(I) /obj/item/glasswork/glass_base/tea_cupe2 - name = "Metled glass" - desc = "A blob of metled glass on the end of a blowing rod. Needs to be cut off with some tools." + name = "glassblowing rod (tea cup)" + desc = "A hollow metal rod made for blowing glass. There is a blob of shapen glass at the end of it that needs to be cut off with some glassworking tools." icon_state = "blowing_rods_inuse" next_step = /obj/item/glasswork/glass_base/tea_cup3 @@ -428,8 +428,8 @@ qdel(src) /obj/item/glasswork/glass_base/tea_cup3 - name = "Disk of glass" - desc = "A bowl of glass that can be cant be used for much. Needs to be polished with some cloth." + name = "unpolished glass cup (tea cup)" + desc = "An unpolished glass cup. It needs to be polished with some dry cloth." icon_state = "glass_base_half" next_step = /obj/item/glasswork/glass_base/tea_cup4 @@ -441,8 +441,8 @@ qdel(src) /obj/item/glasswork/glass_base/tea_cup4 - name = "Disk of glass" - desc = "A bowl of polished glass that can be cant be used for much. Needs some more glass to make a handle." + name = "polished glass cup (tea cup)" + desc = "A polished glass cup. It needs some extra glass to form a handle." icon_state = "glass_base_half" next_step = /obj/item/tea_cup diff --git a/code/datums/components/crafting/glassware/lens_crafting.dm b/code/datums/components/crafting/glassware/lens_crafting.dm index 8907522946..7b650989a8 100644 --- a/code/datums/components/crafting/glassware/lens_crafting.dm +++ b/code/datums/components/crafting/glassware/lens_crafting.dm @@ -1,15 +1,15 @@ //This file is for crafting using a lens! /obj/item/glasswork/glass_base/lens - name = "Optical lens" - desc = "Good for selling or crafting, by itself its useless" + name = "optical lens" + desc = "A glass lens. Useless by itself, but may prove useful in making something with a focus." icon = 'icons/obj/glass_ware.dmi' icon_state = "glass_optics" //Laser pointers - 2600 /obj/item/glasswork/glass_base/laserpointer_shell - name = "Laser pointer assembly" - desc = "Good for selling or crafting, by itself its useless. Needs a power capactor." + name = "laser pointer assembly" + desc = "An empty hull of a laser pointer. It's missing a capacitor." icon_state = "laser_case" icon = 'icons/obj/glass_ware.dmi' next_step = /obj/item/glasswork/glass_base/laserpointer_shell_1 @@ -21,8 +21,8 @@ qdel(src) /obj/item/glasswork/glass_base/laserpointer_shell_1 - name = "Laser pointer assembly" - desc = "Good for selling or crafting, by itself its useless. Needs a glass lens." + name = "powered laser pointer assembly" + desc = "A laser pointer hull with a capacitor inside of it. It's missing a lens." icon_state = "laser_wire" icon_state = "laser_case" next_step = /obj/item/glasswork/glass_base/laserpointer_shell_2 @@ -34,8 +34,8 @@ qdel(src) /obj/item/glasswork/glass_base/laserpointer_shell_2 - name = "Laser pointer assembly" - desc = "Good for selling or crafting, by itself its useless. Needs to be screwed together." + name = "near-complete laser pointer assembly" + desc = "A laser pointer hull with a capacitor and a lens inside of it. It needs to be screwed together." icon_state = "laser_wire" icon_state = "laser_case" next_step = /obj/item/laser_pointer/blue/handmade @@ -50,8 +50,8 @@ //NERD SHIT - 5000 /obj/item/glasswork/glass_base/glasses_frame - name = "Glasses Frame" - desc = "Good for crafting a pare of glasses, by itself its useless. Just add a pare of lens." + name = "glasses frame" + desc = "A pair of glasses without the lenses. You could probably add them yourself, though." icon = 'icons/obj/glass_ware.dmi' icon_state = "frames" next_step = /obj/item/glasswork/glass_base/glasses_frame_1 @@ -64,8 +64,8 @@ qdel(src) /obj/item/glasswork/glass_base/glasses_frame_1 - name = "Glasses Frame" - desc = "Good for crafting a pare of glasses, by itself its useless. Just add a the other lens." + name = "glasses frame" + desc = "A pair of shoddily-assembled glasses with only one lens. You could probably add the second one yourself, though." icon = 'icons/obj/glass_ware.dmi' icon_state = "frames_1" next_step = /obj/item/glasswork/glass_base/glasses_frame_2 @@ -78,8 +78,8 @@ qdel(src) /obj/item/glasswork/glass_base/glasses_frame_2 - name = "Glasses Frame" - desc = "Good for crafting a pare of glasses, by itself its useless. Just adjust the pices into the frame with a screwdriver." + name = "glasses frame" + desc = "A pair of hastily-assembled unfitted glasses with both lenses intact. Use a screwdriver to fit them." icon = 'icons/obj/glass_ware.dmi' icon_state = "frames_2" next_step = /obj/item/glasswork/glasses @@ -92,7 +92,7 @@ qdel(src) /obj/item/glasswork/glasses - name = "Handmade Glasses" - desc = "Handmade glasses that have not been polished at all making them useless. Selling them could still be worth a few credits." + name = "handmade glasses" + desc = "A pair of poorly-assembled glasses clearly produced by someone with no qualifications in making glasses. They're smudged, ugly, and don't even fit you. They might be worth some money, though." icon = 'icons/obj/glass_ware.dmi' icon_state = "frames_2" diff --git a/code/datums/components/storage/concrete/_concrete.dm b/code/datums/components/storage/concrete/_concrete.dm index 55c3e1d083..bb226bbfdf 100644 --- a/code/datums/components/storage/concrete/_concrete.dm +++ b/code/datums/components/storage/concrete/_concrete.dm @@ -135,6 +135,8 @@ var/obj/item/I = AM var/mob/M = parent.loc I.dropped(M) + I.item_flags &= ~IN_STORAGE + I.remove_outline() if(new_location) AM.forceMove(new_location) // exited comsig will handle removal reset. //We don't want to call this if the item is being destroyed @@ -180,6 +182,7 @@ I.forceMove(parent.drop_location()) return FALSE I.on_enter_storage(master) + I.item_flags |= IN_STORAGE refresh_mob_views() I.mouse_opacity = MOUSE_OPACITY_OPAQUE //So you can click on the area around the item to equip it, instead of having to pixel hunt if(M) diff --git a/code/datums/components/storage/storage.dm b/code/datums/components/storage/storage.dm index 752fafe6bd..97d6748dc7 100644 --- a/code/datums/components/storage/storage.dm +++ b/code/datums/components/storage/storage.dm @@ -423,6 +423,9 @@ var/atom/A = parent if(ismob(M)) //all the check for item manipulation are in other places, you can safely open any storages as anything and its not buggy, i checked A.add_fingerprint(M) + if(istype(A, /obj/item)) + var/obj/item/I = A + I.remove_outline() //Removes the outline when we drag if(!over_object) return FALSE if(ismecha(M.loc)) // stops inventory actions in a mech diff --git a/code/datums/wires/_wires.dm b/code/datums/wires/_wires.dm index 81f99cfa69..abee5ada06 100644 --- a/code/datums/wires/_wires.dm +++ b/code/datums/wires/_wires.dm @@ -329,3 +329,15 @@ to_chat(L, "You need an attachable assembly!") #undef MAXIMUM_EMP_WIRES + +//gremlins +/datum/wires/proc/npc_tamper(mob/living/L) + if(!wires.len) + return + + var/wire_to_screw = pick(wires) + + if(is_color_cut(wire_to_screw) || prob(50)) //CutWireColour() proc handles both cutting and mending wires. If the wire is already cut, always mend it back. Otherwise, 50% to cut it and 50% to pulse it + cut(wire_to_screw) + else + pulse(wire_to_screw, L) diff --git a/code/game/machinery/computer/arcade/minesweeper.dm b/code/game/machinery/computer/arcade/minesweeper.dm index dbd9890c81..cd6ff2359c 100644 --- a/code/game/machinery/computer/arcade/minesweeper.dm +++ b/code/game/machinery/computer/arcade/minesweeper.dm @@ -191,6 +191,7 @@ var/x2 = x1 work_squares(y2, x2) //Work squares while in this loop so there's less load reset_board = FALSE + CHECK_TICK web += "
| [MINESWEEPERIMG(7)] | " if(19) web += "[MINESWEEPERIMG(8)] | " + CHECK_TICK web += "" web += "
"
dat += "General Settings" dat += "UI Style: [UI_style]" + dat += "Outline: [outline_enabled ? "Enabled" : "Disabled"] " + dat += "Outline Color: Change " dat += "tgui Monitors: [(tgui_lock) ? "Primary" : "All"] " dat += "tgui Style: [(tgui_fancy) ? "Fancy" : "No Frills"] " dat += "Show Runechat Chat Bubbles: [chat_on_map ? "Enabled" : "Disabled"] " @@ -2706,6 +2710,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) buttons_locked = !buttons_locked if("tgui_fancy") tgui_fancy = !tgui_fancy + if("outline_enabled") + outline_enabled = !outline_enabled + if("outline_color") + var/pickedOutlineColor = input(user, "Choose your outline color.", "General Preference", outline_color) as color|null + if(pickedOutlineColor) + outline_color = pickedOutlineColor if("tgui_lock") tgui_lock = !tgui_lock if("winflash") diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index d4d13dc40f..4d62bb149d 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -45,6 +45,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car if(current_version < 46) //If you remove this, remove force_reset_keybindings() too. force_reset_keybindings_direct(TRUE) addtimer(CALLBACK(src, .proc/force_reset_keybindings), 30) //No mob available when this is run, timer allows user choice. + if(current_version < 30) + outline_enabled = TRUE + outline_color = COLOR_BLUE_GRAY /datum/preferences/proc/update_character(current_version, savefile/S) if(current_version < 19) @@ -377,6 +380,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["ooccolor"] >> ooccolor S["lastchangelog"] >> lastchangelog S["UI_style"] >> UI_style + S["outline_color"] >> outline_color + S["outline_enabled"] >> outline_enabled S["hotkeys"] >> hotkeys S["chat_on_map"] >> chat_on_map S["max_chat_length"] >> max_chat_length @@ -555,6 +560,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["ooccolor"], ooccolor) WRITE_FILE(S["lastchangelog"], lastchangelog) WRITE_FILE(S["UI_style"], UI_style) + WRITE_FILE(S["outline_enabled"], outline_enabled) + WRITE_FILE(S["outline_color"], outline_color) WRITE_FILE(S["hotkeys"], hotkeys) WRITE_FILE(S["chat_on_map"], chat_on_map) WRITE_FILE(S["max_chat_length"], max_chat_length) diff --git a/code/modules/events/supermatter_surge.dm b/code/modules/events/supermatter_surge.dm index 6b0a093440..78b5c9e70c 100644 --- a/code/modules/events/supermatter_surge.dm +++ b/code/modules/events/supermatter_surge.dm @@ -27,13 +27,27 @@ if(prob(low_threat_perc)) severity = "low; the supermatter should return to normal operation shortly." else - severity = "medium; the supermatter should return to normal operation, but check NT CIMS to ensure this." + severity = "medium; the supermatter should return to normal operation, but regardless, check if the emitters may need to be turned off temporarily." else - severity = "high; if the supermatter's cooling is not fortified, coolant may need to be added." + severity = "high; the emitters likely need to be turned off, and if the supermatter's cooling loop is not fortified, pre-cooled gas may need to be added." if(100000 to INFINITY) - severity = "extreme; emergency action is likely to be required even if coolant loop is fine." + severity = "extreme; emergency action is likely to be required even if coolant loop is fine. Turn off the emitters and make sure the loop is properly cooling gases." if(power > 20000 || prob(round(power/200))) priority_announce("Supermatter surge detected. Estimated severity is [severity]", "Anomaly Alert") /datum/round_event/supermatter_surge/start() - GLOB.main_supermatter_engine.matter_power += power + var/obj/machinery/power/supermatter_crystal/supermatter = GLOB.main_supermatter_engine + var/power_proportion = supermatter.powerloss_inhibitor/2 // what % of the power goes into matter power, at most 50% + // we reduce the proportion that goes into actual matter power based on powerloss inhibitor + // primarily so the supermatter doesn't tesla the instant these happen + supermatter.matter_power += power * power_proportion + var/datum/gas_mixture/methane_puff = new + var/selected_gas = pick(4;GAS_CO2, 10;GAS_METHANE, 4;GAS_H2O, 1;GAS_BZ, 1;GAS_METHYL_BROMIDE) + methane_puff.set_moles(selected_gas, 500) + methane_puff.set_temperature(500) + var/energy_ratio = (power * 500 * (1-power_proportion)) / methane_puff.thermal_energy() + if(energy_ratio < 1) // energy output we want is lower than current energy, reduce the amount of gas we puff out + methane_puff.set_moles(GAS_METHANE, energy_ratio * 500) + else // energy output we want is higher than current energy, increase its actual heat + methane_puff.set_temperature(energy_ratio * 500) + supermatter.assume_air(methane_puff) diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index 7377913c15..f650a935ea 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -497,6 +497,72 @@ /obj/item/reagent_containers/food/drinks/bottle/grenadine/empty list_reagents = null +/obj/item/reagent_containers/food/drinks/bottle/blank //Don't let players print these from a lathe, bottles should be obtained in mass from the bar only. + name = "glass bottle" + desc = "This blank bottle is unyieldingly anonymous, offering no clues to it's contents." + icon_state = "glassbottle" + volume = 90 + spillable = TRUE + obj_flags = UNIQUE_RENAME + +/obj/item/reagent_containers/food/drinks/bottle/blank/update_icon() + ..() + add_overlay("[initial(icon_state)]shine") + +/obj/item/reagent_containers/food/drinks/bottle/blank/Initialize() + . = ..() + update_icon() + +/obj/item/reagent_containers/food/drinks/bottle/blank/get_part_rating() + return reagents.maximum_volume + +/obj/item/reagent_containers/food/drinks/bottle/blank/on_reagent_change(changetype) + update_icon() + +/obj/item/reagent_containers/food/drinks/bottle/blank/update_overlays() + . = ..() + if(!cached_icon) + cached_icon = icon_state + + if(reagents.total_volume) + var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "[cached_icon]10", color = mix_color_from_reagents(reagents.reagent_list)) + + var/percent = round((reagents.total_volume / volume) * 100) + switch(percent) + if(0 to 9) + filling.icon_state = "[cached_icon]0" + if(10 to 19) + filling.icon_state = "[cached_icon]10" + if(20 to 29) + filling.icon_state = "[cached_icon]20" + if(30 to 39) + filling.icon_state = "[cached_icon]30" + if(40 to 49) + filling.icon_state = "[cached_icon]40" + if(50 to 59) + filling.icon_state = "[cached_icon]50" + if(60 to 69) + filling.icon_state = "[cached_icon]60" + if(70 to 79) + filling.icon_state = "[cached_icon]70" + if(80 to 89) + filling.icon_state = "[cached_icon]80" + if(90 to INFINITY) + filling.icon_state = "[cached_icon]90" + . += filling + +/obj/item/reagent_containers/food/drinks/bottle/blank/small + name = "small glass bottle" + desc = "This small bottle is unyieldingly anonymous, offering no clues to it's contents." + icon_state = "glassbottlesmall" + volume = 60 + +/obj/item/reagent_containers/food/drinks/bottle/blank/pitcher + name = "glass pitcher" + desc = "This is a pitcher for large amounts of liquid of any kind." + icon_state = "unipitcher" + volume = 120 + ////////////////////////// MOLOTOV /////////////////////// /obj/item/reagent_containers/food/drinks/bottle/molotov name = "molotov cocktail" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/tails.dm b/code/modules/mob/dead/new_player/sprite_accessories/tails.dm index 3834eb9231..64a3c1a24c 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/tails.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/tails.dm @@ -436,13 +436,27 @@ /datum/sprite_accessory/tails/human/shark name = "Shark" - icon_state = "shark" + icon_state = "carp" color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' matrixed_sections = MATRIX_RED /datum/sprite_accessory/tails_animated/human/shark name = "Shark" + icon_state = "carp" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + matrixed_sections = MATRIX_RED + +/datum/sprite_accessory/tails/human/sharkalt + name = "Shark (alt)" + icon_state = "shark" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + matrixed_sections = MATRIX_RED + +/datum/sprite_accessory/tails_animated/human/sharkalt + name = "Shark (alt)" icon_state = "shark" color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' @@ -528,6 +542,20 @@ icon = 'modular_citadel/icons/mob/mam_tails.dmi' matrixed_sections = MATRIX_RED_GREEN +/datum/sprite_accessory/tails/human/takahiro_kitsune + name = "Takahiro Kitsune Tails" //takahiro had five tails i just wanted to follow the 'T' naming convention vs. tamamo and triple + icon_state = "7sune" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + matrixed_sections = MATRIX_RED_GREEN + +/datum/sprite_accessory/tails_animated/human/takahiro_kitsune + name = "Takahiro Kitsune Tails" + icon_state = "7sune" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + matrixed_sections = MATRIX_RED_GREEN + /datum/sprite_accessory/tails/human/tentacle name = "Tentacle" icon_state = "tentacle" @@ -897,11 +925,21 @@ /datum/sprite_accessory/tails/mam_tails/shark name = "Shark" - icon_state = "shark" + icon_state = "carp" matrixed_sections = MATRIX_RED /datum/sprite_accessory/tails_animated/mam_tails_animated/shark name = "Shark" + icon_state = "carp" + matrixed_sections = MATRIX_RED + +/datum/sprite_accessory/tails/mam_tails/sharkalt + name = "Shark (alt)" + icon_state = "shark" + matrixed_sections = MATRIX_RED + +/datum/sprite_accessory/tails_animated/mam_tails_animated/sharkalt + name = "Shark (alt)" icon_state = "shark" matrixed_sections = MATRIX_RED diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 8348af43fa..340d2e5598 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -98,6 +98,16 @@ qdel(bigcheese) evolve() return + for(var/obj/item/trash/garbage in range(1, src)) + if(prob(2)) + qdel(garbage) + evolve_plague() + return + for(var/obj/effect/decal/cleanable/blood/gibs/leftovers in range(1, src)) + if(prob(2)) + qdel(leftovers) + evolve_plague() + return /** *Checks the mouse cap, if it's above the cap, doesn't spawn a mouse. If below, spawns a mouse and adds it to cheeserats. @@ -123,6 +133,13 @@ mind.transfer_to(regalrat) qdel(src) +/mob/living/simple_animal/mouse/proc/evolve_plague() + var/mob/living/simple_animal/hostile/plaguerat = new /mob/living/simple_animal/hostile/plaguerat(loc) + visible_message("[src] devours the food! He rots into something worse!") + if(mind) + mind.transfer_to(plaguerat) + qdel(src) + /* * Mouse types */ @@ -169,3 +186,16 @@ GLOBAL_VAR(tom_existed) /obj/item/reagent_containers/food/snacks/deadmouse/on_grind() reagents.clear_reagents() +/mob/living/simple_animal/mouse/proc/miasma(datum/gas_mixture/environment, check_temp = FALSE) + if(isturf(src.loc) && isopenturf(src.loc)) + var/turf/open/ST = src.loc + var/miasma_moles = ST.air.get_moles(GAS_MIASMA) + if(prob(5) && miasma_moles >= 5) + evolve_plague() + else if(miasma_moles >= 20) + evolve_plague() + return + +/mob/living/simple_animal/mouse/handle_environment(datum/gas_mixture/environment) + . = ..() + miasma() diff --git a/code/modules/mob/living/simple_animal/gremlin/gremlin.dm b/code/modules/mob/living/simple_animal/gremlin/gremlin.dm new file mode 100644 index 0000000000..003afad4f2 --- /dev/null +++ b/code/modules/mob/living/simple_animal/gremlin/gremlin.dm @@ -0,0 +1,253 @@ +#define GREMLIN_VENT_CHANCE 1.75 + +//Gremlins +//Small monsters that don't attack humans or other animals. Instead they mess with electronics, computers and machinery + +//List of objects that gremlins can't tamper with (because nobody coded an interaction for it) +//List starts out empty. Whenever a gremlin finds a machine that it couldn't tamper with, the machine's type is added here, and all machines of such type are ignored from then on (NOT SUBTYPES) +GLOBAL_LIST(bad_gremlin_items) + +/mob/living/simple_animal/hostile/gremlin + name = "gremlin" + desc = "This tiny creature finds great joy in discovering and using technology. Nothing excites it more than pushing random buttons on a computer to see what it might do." + icon = 'icons/mob/mob.dmi' + icon_state = "gremlin" + icon_living = "gremlin" + icon_dead = "gremlin_dead" + + var/in_vent = FALSE + + health = 20 + maxHealth = 20 + search_objects = 3 //Completely ignore mobs + + //Tampering is handled by the 'npc_tamper()' obj proc + wanted_objects = list( + /obj/machinery, + /obj/item/reagent_containers/food, + /obj/structure/sink + ) + + var/obj/machinery/atmospherics/components/unary/vent_pump/entry_vent + var/obj/machinery/atmospherics/components/unary/vent_pump/exit_vent + + dextrous = TRUE + possible_a_intents = list(INTENT_HELP, INTENT_GRAB, INTENT_DISARM, INTENT_HARM) + faction = list("meme", "gremlin") + speed = 0.5 + gold_core_spawnable = 2 + unique_name = TRUE + + //Ensure gremlins don't attack other mobs + melee_damage_upper = 0 + melee_damage_lower = 0 + attack_sound = null + obj_damage = 0 + environment_smash = ENVIRONMENT_SMASH_NONE + + //List of objects that we don't even want to try to tamper with + //Subtypes of these are calculated too + var/list/unwanted_objects = list(/obj/machinery/atmospherics/pipe, /turf, /obj/structure) //ensure gremlins dont try to fuck with walls / normal pipes / glass / etc + + var/min_next_vent = 0 + + //Amount of ticks spent pathing to the target. If it gets above a certain amount, assume that the target is unreachable and stop + var/time_chasing_target = 0 + + //If you're going to make gremlins slower, increase this value - otherwise gremlins will abandon their targets too early + var/max_time_chasing_target = 2 + + var/next_eat = 0 + + //Last 20 heard messages are remembered by gremlins, and will be used to generate messages for comms console tampering, etc... + var/list/hear_memory = list() + var/const/max_hear_memory = 20 + +/mob/living/simple_animal/hostile/gremlin/Initialize() + . = ..() + AddElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_ALWAYS) + access_card = new /obj/item/card/id(src) + var/datum/job/captain/C = new /datum/job/captain + access_card.access = C.get_access() + +/mob/living/simple_animal/hostile/gremlin/AttackingTarget() + var/is_hungry = world.time >= next_eat || prob(25) + if(istype(target, /obj/item/reagent_containers/food) && is_hungry) //eat food if we're hungry or bored + visible_message("[src] hungrily devours [target]!") + playsound(src, 'sound/items/eatfood.ogg', 50, 1) + qdel(target) + LoseTarget() + next_eat = world.time + rand(700, 3000) //anywhere from 70 seconds to 5 minutes until the gremlin is hungry again + return + if(istype(target, /obj)) + var/obj/M = target + tamper(M) + if(prob(50)) //50% chance to move to the next machine + LoseTarget() + +/mob/living/simple_animal/hostile/gremlin/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans, message_mode) + . = ..() + if(message) + hear_memory.Insert(1, raw_message) + if(hear_memory.len > max_hear_memory) + hear_memory.Cut(hear_memory.len) + +/mob/living/simple_animal/hostile/gremlin/proc/generate_markov_input() + var/result = "" + + for(var/memory in hear_memory) + result += memory + " " + + return result + +/mob/living/simple_animal/hostile/gremlin/proc/generate_markov_chain() + return markov_chain(generate_markov_input(), rand(2,5), rand(100,700)) //The numbers are chosen arbitarily + +/mob/living/simple_animal/hostile/gremlin/proc/tamper(obj/M) + switch(M.npc_tamper_act(src)) + if(NPC_TAMPER_ACT_FORGET) + visible_message(pick( + "\The [src] plays around with \the [M], but finds it rather boring.", + "\The [src] tries to think of some more ways to screw \the [M] up, but fails miserably.", + "\The [src] decides to ignore \the [M], and starts looking for something more fun.")) + + LAZYADD(GLOB.bad_gremlin_items,M.type) + return FALSE + if(NPC_TAMPER_ACT_NOMSG) + //Don't create a visible message + return TRUE + + else + visible_message(pick( + "\The [src]'s eyes light up as \he tampers with \the [M].", + "\The [src] twists some knobs around on \the [M] and bursts into laughter!", + "\The [src] presses a few buttons on \the [M] and giggles mischievously.", + "\The [src] rubs its hands devilishly and starts messing with \the [M].", + "\The [src] turns a small valve on \the [M].")) + + //Add a clue for detectives to find. The clue is only added if no such clue already existed on that machine + return TRUE + +/mob/living/simple_animal/hostile/gremlin/CanAttack(atom/new_target) + if(LAZYFIND(GLOB.bad_gremlin_items,new_target.type)) + return FALSE + if(is_type_in_list(new_target, unwanted_objects)) + return FALSE + if(istype(new_target, /obj/machinery)) + var/obj/machinery/M = new_target + if(M.stat) //Unpowered or broken + return FALSE + else if(istype(new_target, /obj/machinery/door/firedoor)) + var/obj/machinery/door/firedoor/F = new_target + //Only tamper with firelocks that are closed, opening them! + if(!F.density) + return FALSE + + return ..() + +/mob/living/simple_animal/hostile/gremlin/death(gibbed) + walk(src,0) + return ..() + +/mob/living/simple_animal/hostile/gremlin/Life() + . = ..() + if(!health || stat == DEAD) + return + //Don't try to path to one target for too long. If it takes longer than a certain amount of time, assume it can't be reached and find a new one + if(!client) //don't do this shit if there's a client, they're capable of ventcrawling manually + if(in_vent) + target = null + if(entry_vent && get_dist(src, entry_vent) <= 1) + var/list/vents = list() + var/datum/pipeline/entry_vent_parent = entry_vent.parents[1] + for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in entry_vent_parent.other_atmosmch) + vents += temp_vent + if(!vents.len) + entry_vent = null + in_vent = FALSE + return + exit_vent = pick(vents) + visible_message("[src] crawls into the ventilation ducts!") + + loc = exit_vent + var/travel_time = round(get_dist(loc, exit_vent.loc) / 2) + addtimer(CALLBACK(src, .proc/exit_vents), travel_time) //come out at exit vent in 2 to 20 seconds + + + if(world.time > min_next_vent && !entry_vent && !in_vent && prob(GREMLIN_VENT_CHANCE)) //small chance to go into a vent + for(var/obj/machinery/atmospherics/components/unary/vent_pump/v in view(7,src)) + if(!v.welded) + entry_vent = v + in_vent = TRUE + walk_to(src, entry_vent) + break + if(!target) + time_chasing_target = 0 + else + if(++time_chasing_target > max_time_chasing_target) + LoseTarget() + time_chasing_target = 0 + . = ..() + +/mob/living/simple_animal/hostile/gremlin/EscapeConfinement() + if(istype(loc, /obj) && CanAttack(loc)) //If we're inside a machine, screw with it + var/obj/M = loc + tamper(M) + + return ..() + +/mob/living/simple_animal/hostile/gremlin/proc/exit_vents() + if(!exit_vent || exit_vent.welded) + loc = entry_vent + entry_vent = null + return + loc = exit_vent.loc + entry_vent = null + exit_vent = null + in_vent = FALSE + var/area/new_area = get_area(loc) + message_admins("[src] came out at [new_area][ADMIN_JMP(loc)]!") + if(new_area) + new_area.Entered(src) + visible_message("[src] climbs out of the ventilation ducts!") + min_next_vent = world.time + 900 //90 seconds between ventcrawls + +//This allows player-controlled gremlins to tamper with machinery +/mob/living/simple_animal/hostile/gremlin/UnarmedAttack(var/atom/A) + if(istype(A, /obj/machinery) || istype(A, /obj/structure)) + tamper(A) + if(istype(target, /obj/item/reagent_containers/food)) //eat food + visible_message("[src] hungrily devours [target]!", "You hungrily devour [target]!") + playsound(src, 'sound/items/eatfood.ogg', 50, 1) + qdel(target) + LoseTarget() + next_eat = world.time + rand(700, 3000) //anywhere from 70 seconds to 5 minutes until the gremlin is hungry again + + return ..() + +/mob/living/simple_animal/hostile/gremlin/IsAdvancedToolUser() + return 1 + +/mob/living/simple_animal/hostile/gremlin/proc/divide() + //Health is halved and then reduced by 2. A new gremlin is spawned with the same health as the parent + //Need to have at least 6 health for this, otherwise resulting health would be less than 1 + if(health < 7.5) + return + + visible_message("\The [src] splits into two!") + var/mob/living/simple_animal/hostile/gremlin/G = new /mob/living/simple_animal/hostile/gremlin(get_turf(src)) + + if(mind) + mind.transfer_to(G) + + health = round(health * 0.5) - 2 + maxHealth = health + resize *= 0.9 + + G.health = health + G.maxHealth = maxHealth + +/mob/living/simple_animal/hostile/gremlin/traitor + health = 85 + maxHealth = 85 + gold_core_spawnable = 0 diff --git a/code/modules/mob/living/simple_animal/gremlin/gremlin_act.dm b/code/modules/mob/living/simple_animal/gremlin/gremlin_act.dm new file mode 100644 index 0000000000..ff0eb13dc7 --- /dev/null +++ b/code/modules/mob/living/simple_animal/gremlin/gremlin_act.dm @@ -0,0 +1,214 @@ +/obj/proc/npc_tamper_act(mob/living/L) + return NPC_TAMPER_ACT_FORGET + +/obj/machinery/atmospherics/components/binary/passive_gate/npc_tamper_act(mob/living/L) + if(prob(50)) //Turn on/off + on = !on + investigate_log("was turned [on ? "on" : "off"] by [key_name(L)]", INVESTIGATE_ATMOS) + else //Change pressure + target_pressure = rand(0, MAX_OUTPUT_PRESSURE) + investigate_log("was set to [target_pressure] kPa by [key_name(L)]", INVESTIGATE_ATMOS) + update_icon() + +/obj/machinery/atmospherics/components/binary/pump/npc_tamper_act(mob/living/L) + if(prob(50)) //Turn on/off + on = !on + investigate_log("was turned [on ? "on" : "off"] by [key_name(L)]", INVESTIGATE_ATMOS) + else //Change pressure + target_pressure = rand(0, MAX_OUTPUT_PRESSURE) + investigate_log("was set to [target_pressure] kPa by [key_name(L)]", INVESTIGATE_ATMOS) + update_icon() + +/obj/machinery/atmospherics/components/binary/volume_pump/npc_tamper_act(mob/living/L) + if(prob(50)) //Turn on/off + on = !on + investigate_log("was turned [on ? "on" : "off"] by [key_name(L)]", INVESTIGATE_ATMOS) + else //Change pressure + transfer_rate = rand(0, MAX_TRANSFER_RATE) + investigate_log("was set to [transfer_rate] L/s by [key_name(L)]", INVESTIGATE_ATMOS) + update_icon() + +/obj/machinery/atmospherics/components/binary/valve/npc_tamper_act(mob/living/L) + attack_hand(L) + +/obj/machinery/space_heater/npc_tamper_act(mob/living/L) + var/list/choose_modes = list("standby", "heat", "cool") + if(prob(50)) + choose_modes -= mode + mode = pick(choose_modes) + else + on = !on + update_icon() + +/obj/machinery/shield_gen/npc_tamper_act(mob/living/L) + attack_hand(L) + +/obj/machinery/firealarm/npc_tamper_act(mob/living/L) + alarm() + +/obj/machinery/airalarm/npc_tamper_act(mob/living/L) + if(panel_open) + wires.npc_tamper(L) + else + panel_open = !panel_open + +/obj/machinery/ignition_switch/npc_tamper_act(mob/living/L) + attack_hand(L) + +/obj/machinery/flasher_button/npc_tamper_act(mob/living/L) + attack_hand(L) + +/obj/machinery/crema_switch/npc_tamper_act(mob/living/L) + attack_hand(L) + +/obj/machinery/camera/npc_tamper_act(mob/living/L) + if(!panel_open) + panel_open = !panel_open + if(wires) + wires.npc_tamper(L) + +/obj/machinery/atmospherics/components/unary/cryo_cell/npc_tamper_act(mob/living/L) + if(prob(50)) + if(beaker) + beaker.forceMove(loc) + beaker = null + else + if(occupant) + if(state_open) + if (close_machine() == usr) + on = TRUE + else + open_machine() + +/obj/machinery/door_control/npc_tamper_act(mob/living/L) + attack_hand(L) + +/obj/machinery/door/airlock/npc_tamper_act(mob/living/L) + //Open the firelocks as well, otherwise they block the way for our gremlin which isn't fun + for(var/obj/machinery/door/firedoor/F in get_turf(src)) + if(F.density) + F.npc_tamper_act(L) + + if(prob(40)) //40% - mess with wires + if(!panel_open) + panel_open = !panel_open + if(wires) + wires.npc_tamper(L) + else //60% - just open it + open() + +/obj/machinery/gibber/npc_tamper_act(mob/living/L) + attack_hand(L) + +/obj/machinery/light_switch/npc_tamper_act(mob/living/L) + attack_hand(L) + +/obj/machinery/turretid/npc_tamper_act(mob/living/L) + enabled = rand(0, 1) + lethal = rand(0, 1) + updateTurrets() + +/obj/machinery/vending/npc_tamper_act(mob/living/L) + if(!panel_open) + panel_open = !panel_open + if(wires) + wires.npc_tamper(L) + +/obj/machinery/shower/npc_tamper_act(mob/living/L) + attack_hand(L) + + +/obj/machinery/deepfryer/npc_tamper_act(mob/living/L) + //Deepfry a random nearby item + var/list/pickable_items = list() + + for(var/obj/item/I in range(1, L)) + pickable_items.Add(I) + + if(!pickable_items.len) + return + + var/obj/item/I = pick(pickable_items) + + attackby(I, L) //shove the item in, even if it can't be deepfried normally + +/obj/machinery/power/apc/npc_tamper_act(mob/living/L) + if(!panel_open) + panel_open = !panel_open + if(wires) + wires.npc_tamper(L) + +/obj/machinery/power/rad_collector/npc_tamper_act(mob/living/L) + attack_hand(L) + +/obj/machinery/power/emitter/npc_tamper_act(mob/living/L) + attack_hand(L) + +/obj/machinery/particle_accelerator/control_box/npc_tamper_act(mob/living/L) + if(!panel_open) + panel_open = !panel_open + if(wires) + wires.npc_tamper(L) + +/obj/machinery/computer/communications/npc_tamper_act(mob/living/user) + if(!authenticated) + if(prob(20)) //20% chance to log in + authenticated = TRUE + + else //Already logged in + if(prob(50)) //50% chance to log off + authenticated = FALSE + else if(istype(user, /mob/living/simple_animal/hostile/gremlin)) //make a hilarious public message + var/mob/living/simple_animal/hostile/gremlin/G = user + var/result = G.generate_markov_chain() + + if(result) + if(prob(85)) + SScommunications.make_announcement(G, FALSE, result) + var/turf/T = get_turf(G) + log_say("[key_name(usr)] ([ADMIN_JMP(T)]) has made a captain announcement: [result]") + message_admins("[key_name_admin(G)] has made a captain announcement.", 1) + else + if(SSshuttle.emergency.mode == SHUTTLE_IDLE) + SSshuttle.requestEvac(G, result) + else if(SSshuttle.emergency.mode == SHUTTLE_ESCAPE) + SSshuttle.cancelEvac(G) + +/obj/machinery/button/door/npc_tamper_act(mob/living/L) + attack_hand(L) + +/obj/machinery/sleeper/npc_tamper_act(mob/living/L) + if(prob(75)) + inject_chem(pick(available_chems)) + else + if(state_open) + close_machine() + else + open_machine() + +/obj/machinery/power/smes/npc_tamper_act(mob/living/L) + if(prob(50)) //mess with input + input_level = rand(0, input_level_max) + else //mess with output + output_level = rand(0, output_level_max) + +/obj/machinery/syndicatebomb/npc_tamper_act(mob/living/L) //suicide bomber gremlins + if(!open_panel) + open_panel = !open_panel + if(wires) + wires.npc_tamper(L) + +/obj/machinery/computer/bank_machine/npc_tamper_act(mob/living/L) + siphoning = !siphoning + +/obj/machinery/computer/slot_machine/npc_tamper_act(mob/living/L) + spin(L) + +/obj/structure/sink/npc_tamper_act(mob/living/L) + if(istype(L, /mob/living/simple_animal/hostile/gremlin)) + visible_message("\The [L] climbs into \the [src] and turns the faucet on!") + + var/mob/living/simple_animal/hostile/gremlin/G = L + G.divide() + + return NPC_TAMPER_ACT_NOMSG diff --git a/code/modules/mob/living/simple_animal/gremlin/gremlin_event.dm b/code/modules/mob/living/simple_animal/gremlin/gremlin_event.dm new file mode 100644 index 0000000000..6f5f0e3dba --- /dev/null +++ b/code/modules/mob/living/simple_animal/gremlin/gremlin_event.dm @@ -0,0 +1,44 @@ +/datum/round_event_control/gremlin + name = "Spawn Gremlins" + typepath = /datum/round_event/gremlin + weight = 15 + max_occurrences = 2 + earliest_start = 20 MINUTES + min_players = 5 + + + +/datum/round_event/gremlin + var/static/list/acceptable_spawns = list("xeno_spawn", "generic event spawn", "blobstart", "Assistant") + +/datum/round_event/gremlin/announce() + priority_announce("Bioscans indicate that some gremlins entered through the vents. Deal with them!", "Gremlin Alert", 'sound/announcer/classic/attention.ogg') + +/datum/round_event/gremlin/start() + + var/list/spawn_locs = list() + + for(var/obj/effect/landmark/L in GLOB.landmarks_list) + if(isturf(L.loc) && !isspaceturf(L.loc)) + if(L.name in acceptable_spawns) + spawn_locs += L.loc + if(!spawn_locs.len) //If we can't find any gremlin spawns, try the xeno spawns + for(var/obj/effect/landmark/L in GLOB.landmarks_list) + if(isturf(L.loc)) + switch(L.name) + if("Assistant") + spawn_locs += L.loc + if(!spawn_locs.len) //If we can't find THAT, then just give up and cry + return MAP_ERROR + + var/gremlins_to_spawn = rand(2,5) + var/list/gremlin_areas = list() + for(var/i = 0, i <= gremlins_to_spawn, i++) + var/spawnat = pick(spawn_locs) + spawn_locs -= spawnat + gremlin_areas += get_area(spawnat) + new /mob/living/simple_animal/hostile/gremlin(spawnat) + var/grems = gremlin_areas.Join(", ") + message_admins("Gremlins have been spawned at the areas: [grems]") + log_game("Gremlins have been spawned at the areas: [grems]") + return SUCCESSFUL_SPAWN diff --git a/code/modules/mob/living/simple_animal/hostile/plaguerat.dm b/code/modules/mob/living/simple_animal/hostile/plaguerat.dm new file mode 100644 index 0000000000..331dc1eb75 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/plaguerat.dm @@ -0,0 +1,131 @@ +/mob/living/simple_animal/hostile/plaguerat + name = "plague rat" + desc = "A large decaying rat. It spreads its filth and emits a putrid odor to create more of its kind." + icon_state = "plaguerat" + icon_living = "plaguerat" + icon_dead = "plaguerat_dead" + speak = list("Skree!","SKREEE!","Squeak?") + speak_emote = list("squeaks") + emote_hear = list("Hisses.") + emote_see = list("runs in a circle.", "stands on its hind legs.") + gender = NEUTER + speak_chance = 1 + turns_per_move = 5 + maxHealth = 15 + health = 15 + see_in_dark = 6 + obj_damage = 10 + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 1) + response_help_continuous = "glares at" + response_help_simple = "glare at" + response_disarm_continuous = "skoffs at" + response_disarm_simple = "skoff at" + response_harm_continuous = "slashes" + response_harm_simple = "slash" + melee_damage_lower = 5 + melee_damage_upper = 7 + attack_verb_continuous = "slashes" + attack_verb_simple = "slash" + attack_sound = 'sound/weapons/punch1.ogg' + faction = list("rat") + density = FALSE + pass_flags = PASSTABLE | PASSGRILLE | PASSMOB + mob_size = MOB_SIZE_TINY + mob_biotypes = MOB_ORGANIC|MOB_BEAST + var/datum/action/cooldown/scavenge + var/last_spawn_time = 0 + ///Number assigned to rats and mice, checked when determining infighting. + +/mob/living/simple_animal/hostile/plaguerat/Initialize() + . = ..() + SSmobs.cheeserats += src + AddComponent(/datum/component/swarming) + AddElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_ALWAYS) + scavenge = new /datum/action/cooldown/scavenge + scavenge.Grant(src) + +/mob/living/simple_animal/hostile/plaguerat/Destroy() + SSmobs.cheeserats -= src + return ..() + +/mob/living/simple_animal/hostile/plaguerat/BiologicalLife(seconds, times_fired) + if(!(. = ..())) + return + if(isopenturf(loc)) + var/turf/open/T = src.loc + if(T.air) + T.atmos_spawn_air("miasma=5;TEMP=293.15") + if(prob(40)) + scavenge.Trigger() + if(prob(50)) + var/turf/open/floor/F = get_turf(src) + if(istype(F) && !F.intact) + var/obj/structure/cable/C = locate() in F + if(C && C.avail()) + visible_message("[src] chews through the [C]. It looks unharmed!") + playsound(src, 'sound/effects/sparks2.ogg', 100, TRUE) + C.deconstruct() + for(var/obj/O in range(1,src)) + if(istype(O, /obj/item/trash) || istype(O, /obj/effect/decal/cleanable/blood/gibs)) + qdel(O) + be_fruitful() + +/mob/living/simple_animal/hostile/plaguerat/CanAttack(atom/the_target) + if(istype(the_target,/mob/living/simple_animal)) + var/mob/living/A = the_target + if(istype(the_target, /mob/living/simple_animal/hostile/plaguerat) && A.stat == CONSCIOUS) + var/mob/living/simple_animal/hostile/plaguerat/R = the_target + if(R.faction_check_mob(src, TRUE)) + return FALSE + else + return TRUE + return ..() + +/** + *Checks the mouse cap, if it's above the cap, doesn't spawn a mouse. If below, spawns a mouse and adds it to cheeserats. + */ + +/mob/living/simple_animal/hostile/plaguerat/proc/be_fruitful() + var/cap = CONFIG_GET(number/ratcap) + if(LAZYLEN(SSmobs.cheeserats) >= cap) + visible_message("[src] gnaws into its food, [cap] rats are now on the station!") + return + var/mob/living/newmouse = new /mob/living/simple_animal/hostile/plaguerat(loc) + SSmobs.cheeserats += newmouse + visible_message("[src] gnaws into its food, attracting another rat!") + +/** + *Creates a chance to spawn more trash or gibs to repopulate. Otherwise, spawns a corpse or dirt. + */ + +/datum/action/cooldown/scavenge + name = "Scavenge" + desc = "Spread the plague, scavenge for trash and fresh meat to reproduce." + icon_icon = 'icons/mob/actions/actions_animal.dmi' + background_icon_state = "bg_clock" + button_icon_state = "coffer" + cooldown_time = 50 + +/datum/action/cooldown/scavenge/Trigger() + . = ..() + if(!.) + return + var/turf/T = get_turf(owner) + var/loot = rand(1,100) + switch(loot) + if(1 to 3) + var/pickedtrash = pick(GLOB.ratking_trash) + to_chat(owner, "Excellent, you find more trash to spread your filth!") + new /obj/effect/decal/cleanable/dirt(T) + new pickedtrash(T) + if(4 to 6) + to_chat(owner, "You find blood and gibs to feed your young!") + new /obj/effect/decal/cleanable/blood/gibs(T) + new /obj/effect/decal/cleanable/blood/(T) + if(7 to 18) + to_chat(owner, "A corpse rises from the ground. Best to leave it alone.") + new /obj/effect/mob_spawn/human/corpse/assistant(T) + if(19 to 100) + to_chat(owner, "Drat. Nothing.") + new /obj/effect/decal/cleanable/dirt(T) + StartCooldown() diff --git a/code/modules/mob/living/simple_animal/hostile/space_dragon.dm b/code/modules/mob/living/simple_animal/hostile/space_dragon.dm index 5722cfda07..39e9e84ed2 100644 --- a/code/modules/mob/living/simple_animal/hostile/space_dragon.dm +++ b/code/modules/mob/living/simple_animal/hostile/space_dragon.dm @@ -109,7 +109,7 @@ continue playsound(src, 'sound/effects/splat.ogg', 50, TRUE) visible_message("[src] vomits up [consumed_mob]!") - consumed_mob.forceMove(loc) + consumed_mob.forceMove(get_turf(src)) consumed_mob.Paralyze(50) if((rifts_charged == 3 || (SSshuttle.emergency.mode == SHUTTLE_DOCKED && rifts_charged > 0)) && !objective_complete) victory() @@ -123,6 +123,7 @@ to_chat(src, "You've failed to summon the rift in a timely manner! You're being pulled back from whence you came!") destroy_rifts() playsound(src, 'sound/magic/demon_dies.ogg', 100, TRUE) + empty_contents() QDEL_NULL(src) /mob/living/simple_animal/hostile/space_dragon/AttackingTarget() @@ -351,7 +352,7 @@ */ /mob/living/simple_animal/hostile/space_dragon/proc/empty_contents() for(var/atom/movable/AM in src) - AM.forceMove(loc) + AM.forceMove(get_turf(src)) if(prob(90)) step(AM, pick(GLOB.alldirs)) @@ -529,7 +530,7 @@ /obj/structure/carp_rift name = "carp rift" desc = "A rift akin to the ones space carp use to travel long distances." - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 100) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) max_integrity = 300 icon = 'icons/obj/carp_rift.dmi' icon_state = "carp_rift_carpspawn" @@ -636,7 +637,7 @@ icon_state = "carp_rift_charged" light_color = LIGHT_COLOR_YELLOW update_light() - armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100) + armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) resistance_flags = INDESTRUCTIBLE dragon.rifts_charged += 1 if(dragon.rifts_charged != 3 && !dragon.objective_complete) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index efb4512bca..5ba4769f99 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -238,6 +238,7 @@ if(istype(W)) if(equip_to_slot_if_possible(W, slot, FALSE, FALSE, FALSE, FALSE, TRUE)) + W.apply_outline() return TRUE if(!W) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index b460cfea51..148535af76 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -39,7 +39,8 @@ #define DAMAGE_INCREASE_MULTIPLIER 0.25 -#define THERMAL_RELEASE_MODIFIER 5 //Higher == less heat released during reaction, not to be confused with the above values +#define THERMAL_RELEASE_MODIFIER 350 //Higher == more heat released during reaction, not to be confused with the above values +#define THERMAL_RELEASE_CAP_MODIFIER 250 //Higher == lower cap on how much heat can be released per tick--currently 1.3x old value #define PLASMA_RELEASE_MODIFIER 750 //Higher == less plasma released by reaction #define OXYGEN_RELEASE_MODIFIER 325 //Higher == less oxygen released at high temperature/power @@ -500,7 +501,8 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) powerloss_dynamic_scaling = clamp(powerloss_dynamic_scaling + clamp(powerloss_inhibition_gas - powerloss_dynamic_scaling, -0.02, 0.02), 0, 1) else powerloss_dynamic_scaling = clamp(powerloss_dynamic_scaling - 0.05, 0, 1) - //Ranges from 0 to 1(1-(value between 0 and 1 * ranges from 1 to 1.5(mol / 500))) + //Ranges from 0 to 1 (1-(value between 0 and 1 * ranges from 1 to 1.5(mol / 500))) + //0 means full inhibition, 1 means no inhibition //We take the mol count, and scale it to be our inhibitor powerloss_inhibitor = clamp(1-(powerloss_dynamic_scaling * clamp(combined_gas/POWERLOSS_INHIBITION_MOLE_BOOST_THRESHOLD, 1, 1.5)), 0, 1) @@ -536,15 +538,19 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) //Power * 0.55 * a value between 1 and 0.8 var/device_energy = power * REACTION_POWER_MODIFIER - removed.set_temperature(removed.return_temperature() + ((device_energy * dynamic_heat_modifier) / THERMAL_RELEASE_MODIFIER)) - //We don't want our output to be too hot - removed.set_temperature(max(0, min(removed.return_temperature(), 2500 * dynamic_heat_modifier))) + var/effective_temperature = min(removed.return_temperature(), 2500 * dynamic_heat_modifier) + var/max_temp_increase = effective_temperature + ((device_energy * dynamic_heat_modifier) / THERMAL_RELEASE_CAP_MODIFIER) //Calculate how much gas to release //Varies based on power and gas content removed.adjust_moles(GAS_PLASMA, max((device_energy * dynamic_heat_modifier) / PLASMA_RELEASE_MODIFIER, 0)) //Varies based on power, gas content, and heat - removed.adjust_moles(GAS_O2, max(((device_energy + removed.return_temperature() * dynamic_heat_modifier) - T0C) / OXYGEN_RELEASE_MODIFIER, 0)) + removed.adjust_moles(GAS_O2, max(((device_energy + effective_temperature * dynamic_heat_modifier) - T0C) / OXYGEN_RELEASE_MODIFIER, 0)) + + if(removed.return_temperature() < max_temp_increase) + removed.adjust_heat(device_energy * dynamic_heat_modifier * THERMAL_RELEASE_MODIFIER) + removed.set_temperature(min(removed.return_temperature(), max_temp_increase)) + if(produces_gas) env.merge(removed) diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm index 7dfe19f635..630a3629cf 100644 --- a/code/modules/research/designs/misc_designs.dm +++ b/code/modules/research/designs/misc_designs.dm @@ -245,6 +245,36 @@ category = list("Equipment") departmental_flags = DEPARTMENTAL_FLAG_SERVICE +/datum/design/emptybottle + name = "Glass Bottle" + desc = "A small, empty bottle for storing liquids." + id = "emptyglassbottle" + build_type = PROTOLATHE + materials = list(/datum/material/glass = 400) + build_path = /obj/item/reagent_containers/food/drinks/bottle/blank/small + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_SERVICE + +/datum/design/largeemptybottle + name = "Large Glass Bottle" + desc = "A large, empty bottle for storing liquids." + id = "largeemptyglassbottle" + build_type = PROTOLATHE + materials = list(/datum/material/glass = 2000) + build_path = /obj/item/reagent_containers/food/drinks/bottle/blank + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_SERVICE + +/datum/design/emptypitcher + name = "Pitcher" + desc = "A large Pitcher to hold vast amounts of liquid." + id = "emptypitcher" + build_type = PROTOLATHE + materials = list(/datum/material/glass = 3600) + build_path = /obj/item/reagent_containers/food/drinks/bottle/blank/pitcher + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_SERVICE + /datum/design/air_horn name = "Air Horn" desc = "Damn son, where'd you find this?" diff --git a/code/modules/research/techweb/nodes/export_nodes.dm b/code/modules/research/techweb/nodes/export_nodes.dm index cbdedef113..5259fc1bfa 100644 --- a/code/modules/research/techweb/nodes/export_nodes.dm +++ b/code/modules/research/techweb/nodes/export_nodes.dm @@ -14,8 +14,8 @@ /datum/techweb_node/bottle_exports id = "bottle_exports" - display_name = "Legal Bottling" + display_name = "Advanced Bottling" prereq_ids = list("blueprinted_bottles") - description = "New bottles for printing and selling." - design_ids = list("minikeg", "blooddrop", "slim_gold", "white_bloodmoon", "greenroad") + description = "New bottles for printing, storage and selling." + design_ids = list("minikeg", "blooddrop", "slim_gold", "white_bloodmoon", "greenroad", "emptyglassbottle", "largeemptyglassbottle", "emptypitcher") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 250) diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index 93f88192e5..e10b05822b 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -54,7 +54,8 @@ var/SA_para_min = 1 //nitrous values var/SA_sleep_min = 5 - var/BZ_trip_balls_min = 1 //BZ gas + var/BZ_trip_balls_min = 0.1 //BZ gas + var/BZ_brain_damage_min = 1 var/gas_stimulation_min = 0.002 //Nitryl and Stimulum var/cold_message = "your face freezing and an icicle forming" @@ -269,13 +270,13 @@ // BZ var/bz_pp = PP(breath, GAS_BZ) - if(bz_pp > BZ_trip_balls_min) + if(bz_pp > BZ_brain_damage_min) H.hallucination += 10 H.reagents.add_reagent(/datum/reagent/bz_metabolites,5) if(prob(33)) H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3, 150) - else if(bz_pp > 0.01) + else if(bz_pp > BZ_trip_balls_min) H.hallucination += 5 H.reagents.add_reagent(/datum/reagent/bz_metabolites,1) @@ -476,7 +477,7 @@ ) SA_para_min = 30 SA_sleep_min = 50 - BZ_trip_balls_min = 30 + BZ_brain_damage_min = 30 emp_vulnerability = 3 cold_level_1_threshold = 200 @@ -509,8 +510,29 @@ heat_level_2_threshold = 600 // up 200 from level 1, 1000 is silly but w/e for level 3 /obj/item/organ/lungs/ashwalker/populate_gas_info() + // humans usually breathe 21 but require 16/17, so 80% - 1, which is more lenient but it's fine + #define SAFE_THRESHOLD_RATIO 0.8 + var/datum/gas_mixture/breath = SSair.planetary[LAVALAND_DEFAULT_ATMOS] // y'all know + var/pressure = breath.return_pressure() + var/total_moles = breath.total_moles() + for(var/id in breath.get_gases()) + var/this_pressure = PP(breath, id) + var/req_pressure = (this_pressure * SAFE_THRESHOLD_RATIO) - 1 + if(req_pressure > 0) + gas_min[id] = req_pressure + if(id in gas_max) + gas_max[id] += this_pressure + var/bz = breath.get_moles(GAS_BZ) + if(bz) + BZ_trip_balls_min += bz + BZ_brain_damage_min += bz + + gas_max[GAS_N2] = PP(breath, GAS_N2) + 5 + var/o2_pp = PP(breath, GAS_O2) + safe_breath_min = 0.3 * o2_pp + safe_breath_max = 1.3 * o2_pp ..() - gas_max[GAS_N2] = 28 + #undef SAFE_THRESHOLD_RATIO /obj/item/organ/lungs/slime name = "vacuole" diff --git a/code/modules/vending/boozeomat.dm b/code/modules/vending/boozeomat.dm index 5ec0987111..87f2a0940b 100644 --- a/code/modules/vending/boozeomat.dm +++ b/code/modules/vending/boozeomat.dm @@ -5,6 +5,9 @@ icon_deny = "boozeomat-deny" products = list(/obj/item/reagent_containers/food/drinks/drinkingglass = 30, /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass = 12, + /obj/item/reagent_containers/food/drinks/bottle/blank = 5, + /obj/item/reagent_containers/food/drinks/bottle/blank/small = 10, + /obj/item/reagent_containers/food/drinks/bottle/blank/pitcher = 2, /obj/item/reagent_containers/food/drinks/bottle/gin = 5, /obj/item/reagent_containers/food/drinks/bottle/whiskey = 5, /obj/item/reagent_containers/food/drinks/bottle/tequila = 5, diff --git a/html/changelog.html b/html/changelog.html index 14b498a3a7..4b63384ba2 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,100 @@ -->
+ 28 August 2021+DeltaFire15 updated:+
Putnam3145 updated:+
keronshb updated:+
zeroisthebiggay updated:+
26 August 2021+keronshb updated:+
24 August 2021+BlueWildrose updated:+
23 August 2021+zeroisthebiggay updated:+
22 August 2021+zeroisthebiggay updated:+
20 August 2021+EmeraldSundisk updated:+
Putnam3145 updated:+
TripleShades updated:+
WanderingFox95 updated:+
18 August 2021+timothyteakettle updated:+
16 August 2021+BlueWildrose updated:+
bunny232 updated:+
13 August 2021Putnam3145 updated:
|