diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_mining_site.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_mining_site.dmm index c5074528f1..6161bd8b86 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_mining_site.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_mining_site.dmm @@ -54,7 +54,10 @@ /area/ruin/lavaland/unpowered) "m" = ( /obj/structure/mineral_door/wood, -/obj/effect/decal/cleanable/trail_holder, +/obj/effect/decal/cleanable/trail_holder{ + color = "#dc0000"; + dir = 8 + }, /turf/open/floor/wood, /area/ruin/lavaland/unpowered) "n" = ( @@ -68,7 +71,10 @@ /obj/machinery/light/broken{ dir = 4 }, -/obj/effect/decal/cleanable/trail_holder, +/obj/effect/decal/cleanable/trail_holder{ + color = "#dc0000"; + dir = 6 + }, /turf/open/floor/wood, /area/ruin/lavaland/unpowered) "q" = ( @@ -93,13 +99,33 @@ /turf/open/floor/wood, /area/ruin/lavaland/unpowered) "s" = ( -/obj/effect/decal/cleanable/trail_holder, +/obj/effect/decal/cleanable/trail_holder{ + color = "#dc0000"; + dir = 9 + }, +/turf/open/floor/wood, +/area/ruin/lavaland/unpowered) +"x" = ( +/obj/effect/decal/cleanable/trail_holder{ + color = "#dc0000"; + dir = 8 + }, /turf/open/floor/wood, /area/ruin/lavaland/unpowered) "N" = ( -/obj/effect/decal/cleanable/trail_holder, +/obj/effect/decal/cleanable/trail_holder{ + color = "#dc0000"; + dir = 8 + }, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) +"Q" = ( +/obj/effect/decal/cleanable/trail_holder{ + color = "#dc0000"; + dir = 6 + }, +/turf/open/floor/wood, +/area/ruin/lavaland/unpowered) (1,1,1) = {" i @@ -440,7 +466,7 @@ f f f f -s +x b b i @@ -467,7 +493,7 @@ g f f f -s +x b b i @@ -494,7 +520,7 @@ f f f f -s +x b b i @@ -521,7 +547,7 @@ j f f f -s +x b b i @@ -548,7 +574,7 @@ k f f f -s +x b b i @@ -575,7 +601,7 @@ l f f s -s +Q b b i @@ -627,7 +653,7 @@ i b b b -s +x b b b @@ -654,7 +680,7 @@ i i i b -s +x b i i @@ -681,7 +707,7 @@ i i i b -s +x b i i @@ -708,7 +734,7 @@ i i i b -s +x b i i diff --git a/_maps/map_files/FestiveBall/FestiveStation.dmm b/_maps/map_files/FestiveBall/FestiveStation.dmm index 8f11493862..dda657c782 100644 --- a/_maps/map_files/FestiveBall/FestiveStation.dmm +++ b/_maps/map_files/FestiveBall/FestiveStation.dmm @@ -811,14 +811,14 @@ id = "parkcomm"; name = "Command Parking" }, -/turf/open/floor/festive/cobblestone, +/turf/open/floor/festive/cobblestone/safe, /area/edina/street) "ack" = ( /obj/machinery/light/small{ dir = 1; light_color = "#ffc1c1" }, -/turf/open/floor/festive/cobblestone, +/turf/open/floor/festive/cobblestone/safe, /area/edina/street) "acl" = ( /obj/structure/table/reinforced, @@ -1064,7 +1064,7 @@ dir = 4; light_color = "#c1caff" }, -/turf/open/floor/festive/cobblestone, +/turf/open/floor/festive/cobblestone/safe, /area/edina/street) "acY" = ( /obj/machinery/light/floor, @@ -1163,7 +1163,7 @@ /area/command/heads_quarters/hop/private) "adr" = ( /obj/effect/festive/street/streetlinenm, -/turf/open/floor/festive/cobblestone, +/turf/open/floor/festive/cobblestone/safe, /area/edina/street) "ads" = ( /obj/machinery/light{ @@ -1292,10 +1292,9 @@ /turf/open/floor/wood, /area/command/heads_quarters/hop/private) "adQ" = ( -/obj/structure/bed, -/obj/item/bedsheet/hop, /obj/effect/decal/festive/red_stockings, -/obj/effect/landmark/start/head_of_personnel, +/obj/structure/bed/double, +/obj/item/bedsheet/hop/double, /turf/open/floor/wood, /area/command/heads_quarters/hop/private) "adR" = ( @@ -1303,7 +1302,7 @@ /obj/vehicle/sealed/vectorcraft/auto{ dir = 8 }, -/turf/open/floor/festive/cobblestone, +/turf/open/floor/festive/cobblestone/safe, /area/edina/street) "adS" = ( /obj/machinery/airalarm/directional/west, @@ -1396,12 +1395,13 @@ dir = 4; light_color = "#c1caff" }, +/obj/effect/landmark/start/head_of_personnel, /turf/open/floor/wood, /area/command/heads_quarters/hop/private) "aeh" = ( /obj/effect/festive/street/streetlinenm, /obj/effect/festive/street/streetlinesm, -/turf/open/floor/festive/cobblestone, +/turf/open/floor/festive/cobblestone/safe, /area/edina/street) "aei" = ( /obj/structure/table/wood/fancy/black, @@ -1508,11 +1508,11 @@ /obj/vehicle/sealed/vectorcraft/hop{ dir = 1 }, -/turf/open/floor/festive/cobblestone, +/turf/open/floor/festive/cobblestone/safe, /area/edina/street) "aev" = ( /obj/effect/turf_decal/delivery/white, -/turf/open/floor/festive/cobblestone, +/turf/open/floor/festive/cobblestone/safe, /area/edina/street) "aew" = ( /obj/structure/reagent_dispensers/water_cooler, @@ -2057,57 +2057,6 @@ }, /turf/open/floor/plasteel/dark, /area/command/gateway) -"afE" = ( -/obj/machinery/gateway{ - dir = 9 - }, -/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) -"afF" = ( -/obj/machinery/gateway{ - dir = 1 - }, -/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) -"afG" = ( -/obj/machinery/gateway{ - dir = 5 - }, -/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) "afH" = ( /obj/machinery/light{ dir = 4 @@ -2322,31 +2271,11 @@ "age" = ( /turf/open/floor/plasteel/dark, /area/command/gateway) -"agf" = ( -/obj/machinery/gateway{ - dir = 8 - }, -/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) "agg" = ( -/obj/machinery/gateway/centerstation, +/obj/machinery/gateway, /turf/open/floor/plasteel/dark, /area/command/gateway) "agh" = ( -/obj/machinery/gateway{ - dir = 4 - }, /obj/effect/turf_decal/bot_white, /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -2588,9 +2517,6 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/command/storage/eva) "agH" = ( -/obj/machinery/gateway{ - dir = 10 - }, /obj/effect/turf_decal/bot_white/left, /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -2605,7 +2531,6 @@ /turf/open/floor/plasteel/dark, /area/command/gateway) "agI" = ( -/obj/machinery/gateway, /obj/structure/cable{ icon_state = "0-2" }, @@ -2623,9 +2548,6 @@ /turf/open/floor/plasteel/dark, /area/command/gateway) "agJ" = ( -/obj/machinery/gateway{ - dir = 6 - }, /obj/effect/turf_decal/bot_white/right, /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -3112,8 +3034,7 @@ /turf/open/floor/plasteel, /area/command/gateway) "ahL" = ( -/obj/structure/table, -/obj/item/paper/pamphlet/gateway, +/obj/machinery/computer/gateway_control, /turf/open/floor/plasteel, /area/command/gateway) "ahM" = ( @@ -3198,8 +3119,12 @@ /turf/open/floor/festive/wooden/wooden1, /area/command/corporate_showroom) "ahV" = ( -/obj/structure/bed, -/obj/item/bedsheet/captain, +/obj/item/bedsheet/captain/double{ + dir = 1 + }, +/obj/structure/bed/double{ + dir = 1 + }, /turf/open/floor/wood, /area/command/heads_quarters/captain/private) "ahW" = ( @@ -3355,6 +3280,8 @@ name = "Station Intercom (General)"; pixel_x = -30 }, +/obj/item/paper/pamphlet/gateway, +/obj/structure/table, /turf/open/floor/plasteel, /area/command/gateway) "ail" = ( @@ -3959,13 +3886,6 @@ /turf/open/floor/festive/cobblestone, /area/edina/street/secondary/command) "ajN" = ( -/obj/machinery/button/door{ - id = "parkcomm"; - name = "Command Parking"; - pixel_x = 28; - pixel_y = 7; - req_one_access_txt = "2;19" - }, /obj/machinery/light/small{ dir = 4; light_color = "#d8b1b1" @@ -4644,9 +4564,7 @@ color = "#FFFFFE"; dir = 9 }, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "alL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -4667,9 +4585,7 @@ color = "#FFFFFE"; dir = 5 }, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "alO" = ( /obj/effect/spawner/structure/window/plasma/reinforced, @@ -4706,7 +4622,7 @@ /turf/open/floor/wood, /area/maintenance/starboard/fore) "alT" = ( -/turf/open/floor/festive/cobblestone, +/turf/open/floor/festive/cobblestone/safe, /area/edina/street) "alU" = ( /obj/effect/turf_decal/weather/snow/corner{ @@ -4790,16 +4706,16 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "ami" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/light/small{ +/obj/machinery/light{ dir = 1 }, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "amj" = ( /obj/structure/cable/yellow{ @@ -4808,17 +4724,17 @@ /obj/structure/cable/yellow{ icon_state = "2-4" }, -/obj/machinery/light/small{ +/obj/machinery/light{ dir = 1 }, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "amk" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/machinery/door/airlock/security/glass, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "aml" = ( /obj/structure/cable/yellow{ @@ -4827,20 +4743,20 @@ /obj/structure/cable/yellow{ icon_state = "1-8" }, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "amm" = ( -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "amn" = ( /obj/machinery/door/airlock/security/glass, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "amo" = ( -/obj/machinery/light/small{ +/obj/machinery/light{ dir = 1 }, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "amp" = ( /obj/effect/festive/street/sidewalkw, @@ -4852,9 +4768,7 @@ dir = 4 }, /obj/structure/festive/trainplatform/secorner, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "amr" = ( /obj/effect/turf_decal/stripes/line{ @@ -4867,9 +4781,7 @@ /area/ai_monitored/command/storage/eva) "ams" = ( /obj/structure/festive/trainplatform/edge_west, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "amt" = ( /turf/open/floor/festive/stairs/stairseast, @@ -5014,12 +4926,12 @@ /obj/effect/spawner/lootdrop/maintenance, /obj/structure/table, /obj/item/poster/random_official, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "amM" = ( /obj/effect/spawner/lootdrop/maintenance, /obj/structure/closet/wardrobe/mixed, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "amN" = ( /obj/structure/cable/yellow{ @@ -5028,7 +4940,7 @@ /obj/effect/spawner/lootdrop/maintenance, /obj/structure/table, /obj/item/poster/random_official, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "amO" = ( /obj/structure/cable/yellow{ @@ -5039,7 +4951,7 @@ }, /obj/effect/spawner/lootdrop/maintenance, /obj/structure/closet/emcloset, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "amP" = ( /obj/structure/cable/yellow{ @@ -5051,7 +4963,7 @@ /obj/effect/spawner/lootdrop/maintenance, /obj/structure/table, /obj/item/poster/random_official, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "amQ" = ( /obj/structure/cable/yellow{ @@ -5062,7 +4974,7 @@ }, /obj/effect/spawner/lootdrop/maintenance, /obj/structure/closet/wardrobe/mixed, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "amR" = ( /obj/structure/cable/yellow{ @@ -5075,7 +4987,7 @@ /obj/structure/closet/crate{ icon_state = "crateopen" }, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "amS" = ( /obj/structure/cable/yellow{ @@ -5083,13 +4995,13 @@ }, /obj/effect/spawner/lootdrop/maintenance, /obj/structure/closet/wardrobe/mixed, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "amT" = ( /obj/machinery/light/small{ dir = 4 }, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "amU" = ( /obj/structure/cable/yellow, @@ -5099,43 +5011,39 @@ name = "Starboard Bow Maintenance APC"; pixel_y = -24 }, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "amV" = ( /obj/machinery/light/small{ dir = 8 }, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "amW" = ( /obj/effect/spawner/lootdrop/maintenance, /obj/structure/rack, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "amX" = ( /obj/machinery/space_heater, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "amY" = ( /obj/effect/spawner/lootdrop/maintenance, /obj/structure/closet/firecloset, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "amZ" = ( /obj/effect/spawner/lootdrop/maintenance, /obj/structure/closet/emcloset, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "ana" = ( /obj/structure/reagent_dispensers/watertank, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "anb" = ( -/obj/machinery/suit_storage_unit/ce, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/command/heads_quarters/ce) "anc" = ( /obj/machinery/button/door{ @@ -5147,16 +5055,6 @@ /obj/machinery/light{ dir = 1 }, -/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/heads_quarters/ce) "and" = ( @@ -5167,30 +5065,10 @@ }, /obj/item/stock_parts/cell/high/plus, /obj/item/reagent_containers/pill/patch/silver_sulf, -/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/heads_quarters/ce) "ane" = ( /obj/structure/filingcabinet/chestdrawer, -/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 - }, /mob/living/simple_animal/parrot/Poly, /turf/open/floor/plasteel/dark, /area/command/heads_quarters/ce) @@ -5208,16 +5086,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/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/atmospherics/components/unary/vent_scrubber/on, /obj/item/key/CE, /turf/open/floor/plasteel/dark, @@ -5248,7 +5116,7 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "anl" = ( /turf/closed/wall/mineral/iron, @@ -5635,13 +5503,16 @@ /obj/machinery/newscaster/security_unit{ pixel_y = 32 }, +/obj/item/storage/fancy/donut_box{ + pixel_y = 8 + }, /turf/open/floor/carpet/red, /area/command/heads_quarters/hos) "aod" = ( /obj/structure/sign/poster/contraband/donut_corp{ pixel_y = -32 }, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "aoe" = ( /turf/closed/wall/mineral/iron, @@ -5669,7 +5540,7 @@ "aoh" = ( /obj/effect/spawner/lootdrop/maintenance, /obj/structure/rack, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/service/bar/atrium) "aoi" = ( /obj/structure/closet/secure_closet/detective, @@ -6127,16 +5998,16 @@ /obj/structure/cable/yellow{ icon_state = "1-4" }, -/obj/machinery/light/small{ +/obj/machinery/light{ dir = 8 }, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "app" = ( /obj/structure/cable/yellow{ icon_state = "2-8" }, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "apq" = ( /obj/machinery/light{ @@ -6249,9 +6120,7 @@ /obj/structure/fence{ dir = 4 }, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "apJ" = ( /obj/effect/turf_decal/weather/snow/corner{ @@ -6260,9 +6129,7 @@ /obj/structure/fence{ dir = 4 }, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "apK" = ( /obj/machinery/door/airlock/command{ @@ -6458,7 +6325,7 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "aqj" = ( /obj/effect/spawner/structure/window/reinforced, @@ -7055,7 +6922,7 @@ name = "8maintenance loot spawner" }, /obj/structure/table, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "arx" = ( /obj/structure/weightmachine/weightlifter, @@ -7109,13 +6976,11 @@ /turf/open/floor/wood, /area/security/warden) "arF" = ( -/obj/item/bedsheet/hos, -/obj/structure/bed, -/obj/effect/landmark/start/head_of_security, -/obj/item/storage/fancy/donut_box, +/obj/structure/bed/double, /obj/structure/sign/poster/official/nt_storm_officer{ pixel_y = 32 }, +/obj/item/bedsheet/hos/double, /turf/open/floor/carpet/red, /area/command/heads_quarters/hos) "arG" = ( @@ -7563,8 +7428,7 @@ "asL" = ( /obj/structure/fence, /obj/structure/streetdecor/lampfestive{ - pixel_x = 16; - pixel_y = 10 + pixel_x = 16 }, /turf/open/floor/grass/snow/edina, /area/edina) @@ -7905,7 +7769,7 @@ icon_state = "1-2" }, /obj/structure/closet/toolcloset, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "atD" = ( /obj/machinery/washing_machine, @@ -8205,17 +8069,17 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/light/small{ +/obj/machinery/light{ dir = 8 }, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "aus" = ( /obj/structure/cable/yellow{ icon_state = "1-4" }, /obj/structure/closet/toolcloset, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "aut" = ( /obj/effect/turf_decal/tile/green, @@ -8658,8 +8522,7 @@ "avz" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible/layer1, /obj/machinery/atmospherics/components/unary/portables_connector/layer3{ - dir = 1; - pixel_x = 10 + dir = 1 }, /obj/machinery/atmospherics/pipe/simple/yellow/visible, /turf/open/floor/plasteel, @@ -8779,7 +8642,7 @@ "avQ" = ( /obj/effect/spawner/lootdrop/maintenance, /obj/structure/table, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "avR" = ( /obj/effect/turf_decal/tile/green{ @@ -9102,11 +8965,12 @@ /turf/open/floor/wood, /area/security/processing) "awA" = ( -/obj/machinery/door/airlock/external{ - name = "Gulag Shuttle Airlock" +/obj/effect/decal/festive/fairylights, +/obj/structure/chair/sofa/corner{ + dir = 4 }, /turf/open/floor/wood, -/area/security/processing) +/area/command/heads_quarters/ce) "awB" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible/layer1, /obj/machinery/atmospherics/components/binary/pump, @@ -9381,9 +9245,7 @@ dir = 8; node1_concentration = 0.21; node2_concentration = 0.79; - piping_layer = 1; - pixel_x = -5; - pixel_y = -5 + piping_layer = 1 }, /obj/machinery/atmospherics/pipe/simple/yellow{ dir = 5 @@ -9673,7 +9535,7 @@ }, /obj/effect/spawner/lootdrop/maintenance, /obj/structure/rack, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "ayb" = ( /obj/structure/cable/yellow{ @@ -9686,7 +9548,7 @@ /obj/structure/closet/wardrobe/mixed, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "ayc" = ( /obj/structure/cable/yellow{ @@ -9697,7 +9559,7 @@ }, /obj/effect/spawner/lootdrop/maintenance, /obj/structure/closet/cardboard, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "ayd" = ( /obj/structure/cable/yellow{ @@ -9706,7 +9568,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "aye" = ( /obj/structure/cable/yellow{ @@ -9717,7 +9579,7 @@ }, /obj/structure/table, /obj/item/flashlight/lamp, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "ayf" = ( /obj/structure/cable/yellow{ @@ -9729,7 +9591,7 @@ /obj/structure/table, /obj/item/folder/white, /obj/item/pen, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "ayg" = ( /obj/structure/cable/yellow{ @@ -9741,7 +9603,7 @@ pixel_y = 5 }, /obj/item/storage/fancy/donut_box, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "ayh" = ( /obj/effect/spawner/lootdrop/maintenance, @@ -9750,32 +9612,32 @@ lootcount = 8; name = "8maintenance loot spawner" }, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "ayi" = ( /obj/effect/spawner/lootdrop/maintenance, /obj/structure/closet/wardrobe/mixed, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "ayj" = ( /obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "ayk" = ( /obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "ayl" = ( -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/security/brig) "aym" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/security/brig) "ayn" = ( /obj/structure/closet/secure_closet/brig{ @@ -9924,14 +9786,14 @@ /obj/structure/cable/yellow{ icon_state = "1-8" }, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "ayJ" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/light/small, -/turf/open/floor/festive/alleyway, +/obj/machinery/light, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "ayK" = ( /obj/structure/cable/yellow{ @@ -9940,33 +9802,28 @@ /obj/structure/chair/office/dark{ dir = 1 }, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "ayL" = ( -/obj/docking_port/stationary{ - dir = 4; - dwidth = 2; - height = 5; - id = "laborcamp_home"; - name = "fore bay 1"; - roundstart_template = /datum/map_template/shuttle/labour/delta; - width = 9 +/obj/machinery/door/airlock/external{ + name = "Gulag Shuttle Airlock"; + req_access_txt = "63" }, -/turf/open/floor/grass/snow/edina, -/area/edina) +/turf/open/floor/wood, +/area/security/processing) "ayM" = ( /obj/machinery/door/airlock/security/glass, /obj/machinery/door/firedoor, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/maintenance/starboard/fore) "ayN" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/security/brig) "ayO" = ( /obj/structure/cable/yellow{ @@ -9979,7 +9836,7 @@ dir = 4 }, /obj/structure/disposalpipe/segment, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/security/brig) "ayP" = ( /obj/item/radio/intercom{ @@ -10037,12 +9894,10 @@ /turf/open/floor/wood, /area/security/processing) "ayY" = ( -/obj/machinery/door/airlock/external{ - name = "Gulag Shuttle Airlock"; - req_access_txt = "63" - }, +/obj/effect/decal/festive/fairylights, +/obj/structure/chair/sofa/left, /turf/open/floor/wood, -/area/security/processing) +/area/command/heads_quarters/ce) "ayZ" = ( /obj/effect/decal/festive/fairylights, /turf/open/floor/engine/plasma, @@ -10385,8 +10240,7 @@ /area/engineering/atmos) "azX" = ( /obj/machinery/atmospherics/components/unary/portables_connector/layer3{ - dir = 8; - pixel_y = 10 + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/yellow/visible{ dir = 8 @@ -10420,7 +10274,7 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/security/brig) "aAb" = ( /obj/machinery/door/poddoor/preopen{ @@ -10442,7 +10296,7 @@ name = "Labor Shuttle"; req_access_txt = "63" }, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/security/processing) "aAd" = ( /obj/effect/turf_decal/delivery, @@ -10526,7 +10380,7 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/security/processing) "aAp" = ( /obj/effect/turf_decal/delivery, @@ -10585,7 +10439,7 @@ /turf/open/floor/festive/cobblestone, /area/science/robotics/mechbay) "aAy" = ( -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/security/processing) "aAz" = ( /obj/machinery/light, @@ -10618,7 +10472,7 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/service/bar/atrium) "aAF" = ( /obj/effect/festive/street/streetlinenorth, @@ -10667,7 +10521,7 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/security/processing) "aAL" = ( /obj/effect/spawner/structure/window/reinforced, @@ -10750,7 +10604,7 @@ /obj/item/radio/intercom{ pixel_x = -26 }, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/security/processing) "aBb" = ( /obj/machinery/light, @@ -10950,13 +10804,12 @@ /turf/open/floor/plasteel, /area/engineering/atmos) "aBM" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/layer3{ - dir = 4; - pixel_y = 10 - }, /obj/machinery/atmospherics/pipe/simple/yellow/visible{ dir = 8 }, +/obj/machinery/atmospherics/components/unary/portables_connector/layer3{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engineering/atmos) "aBN" = ( @@ -11053,7 +10906,7 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/security/office) "aCa" = ( /turf/open/floor/engine/n2o, @@ -11199,7 +11052,7 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/service/bar/atrium) "aCx" = ( /obj/machinery/door/airlock/security/glass, @@ -11727,7 +11580,7 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/service/bar/atrium) "aEn" = ( /obj/structure/disposalpipe/segment{ @@ -11754,7 +11607,7 @@ /area/edina/street/secondary/command) "aEr" = ( /obj/effect/festive/street/sidewalknsm, -/turf/open/floor/festive/cobblestone, +/turf/open/floor/festive/cobblestone/safe, /area/edina/street) "aEs" = ( /obj/structure/chair/stool, @@ -13223,16 +13076,15 @@ /turf/open/floor/engine/vacuum, /area/engineering/atmos) "aIc" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/layer3{ - dir = 8; - pixel_y = 10 - }, /obj/machinery/atmospherics/pipe/simple/yellow/visible{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/cyan/visible/layer1{ dir = 10 }, +/obj/machinery/atmospherics/components/unary/portables_connector/layer3{ + dir = 8 + }, /turf/open/floor/plasteel, /area/engineering/atmos) "aId" = ( @@ -13841,7 +13693,7 @@ /turf/open/floor/festive/sidewalk, /area/edina/street/primary/perimeter) "aJr" = ( -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/service/bar/atrium) "aJs" = ( /obj/structure/table/wood, @@ -14104,7 +13956,7 @@ /obj/effect/spawner/lootdrop/maintenance, /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/service/bar/atrium) "aJZ" = ( /obj/structure/table/wood, @@ -14364,7 +14216,7 @@ /obj/effect/spawner/lootdrop/maintenance, /obj/structure/closet/wardrobe/mixed, /obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/service/bar/atrium) "aKK" = ( /obj/machinery/chem_dispenser/drinks, @@ -14423,14 +14275,14 @@ /turf/open/floor/wood, /area/maintenance/bar) "aKW" = ( -/obj/machinery/light/small{ - dir = 8 - }, /obj/structure/cable/yellow{ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/turf/open/floor/festive/alleyway, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/festive/alleyway/safe, /area/service/bar/atrium) "aKX" = ( /obj/machinery/chem_dispenser/drinks/beer, @@ -14673,7 +14525,7 @@ /obj/effect/spawner/lootdrop/maintenance, /obj/effect/spawner/lootdrop/maintenance, /obj/structure/rack, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/service/bar/atrium) "aLG" = ( /obj/structure/streetdecor/lampfestive{ @@ -15064,10 +14916,9 @@ /turf/closed/festive/whitebrick, /area/science/lab) "aMH" = ( -/obj/structure/grille, -/obj/structure/festive/whitebrick/windowNSRightEnd, -/turf/open/floor/plasteel, -/area/science/lab) +/obj/effect/decal/festive/fairylights, +/turf/open/floor/wood, +/area/command/heads_quarters/ce) "aMI" = ( /obj/structure/grille, /obj/structure/festive/whitebrick/windowNSMiddle, @@ -15814,12 +15665,12 @@ "aOy" = ( /obj/effect/spawner/lootdrop/maintenance, /obj/structure/table, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/service/bar/atrium) "aOz" = ( /obj/effect/spawner/lootdrop/maintenance, /obj/structure/closet/firecloset, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/service/bar/atrium) "aOA" = ( /obj/effect/festive/street/streetliftedtile2, @@ -15827,7 +15678,7 @@ /area/edina/street/intersection/princessperimeter/north) "aOB" = ( /obj/structure/reagent_dispensers/watertank, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/service/bar/atrium) "aOC" = ( /obj/effect/spawner/lootdrop/maintenance, @@ -15836,16 +15687,16 @@ lootcount = 8; name = "8maintenance loot spawner" }, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/service/bar/atrium) "aOD" = ( /obj/machinery/portable_atmospherics/canister/air, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/service/bar/atrium) "aOE" = ( /obj/effect/spawner/lootdrop/maintenance, /obj/structure/closet/wardrobe/mixed, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/service/bar/atrium) "aOF" = ( /obj/structure/cable/yellow{ @@ -16144,14 +15995,14 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/service/bar/atrium) "aPt" = ( -/obj/machinery/light/small, /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/festive/alleyway, +/obj/machinery/light, +/turf/open/floor/festive/alleyway/safe, /area/service/bar/atrium) "aPu" = ( /obj/machinery/door/airlock/security/glass{ @@ -16162,7 +16013,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/festive/alleyway, +/turf/open/floor/festive/alleyway/safe, /area/service/bar/atrium) "aPv" = ( /obj/effect/festive/street/streetlinene, @@ -17532,6 +17383,7 @@ pixel_y = 32 }, /obj/item/storage/box/donkpockets, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, /turf/open/floor/wood, /area/science) "aSF" = ( @@ -17853,9 +17705,9 @@ /turf/open/floor/festive/cobblestone, /area/edina/street/intersection/princessperimeter/north) "aTy" = ( -/obj/effect/festive/street/sidewalkn, -/turf/open/floor/festive/cobblestone, -/area/edina/street/primary/perimeter) +/obj/machinery/door/airlock/wood/glass, +/turf/open/floor/wood, +/area/commons/dorms) "aTz" = ( /turf/closed/festive/greybrick, /area/commons/dorms) @@ -18302,7 +18154,6 @@ pixel_y = -32 }, /obj/machinery/vending/cola/random, -/obj/machinery/light, /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 4 }, @@ -18574,7 +18425,9 @@ /area/science/explab) "aVy" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple, -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 8 + }, /turf/open/floor/carpet/red, /area/science/robotics) "aVz" = ( @@ -19455,9 +19308,6 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, -/obj/machinery/light/small{ - dir = 1 - }, /turf/open/indestructible/hotelwood, /area/service/chapel/office) "aXM" = ( @@ -19962,7 +19812,7 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/festive/trainplatform, +/turf/open/floor/festive/trainplatform/safe, /area/maintenance/bar) "aZi" = ( /turf/closed/festive/whitebrick, @@ -20130,7 +19980,7 @@ /turf/open/floor/festive/alleyway, /area/medical/medbay/aft) "aZC" = ( -/obj/machinery/light/small, +/obj/machinery/light, /turf/open/indestructible/hotelwood, /area/service/chapel/office) "aZD" = ( @@ -21129,7 +20979,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/festive/trainplatform, +/turf/open/floor/festive/trainplatform/safe, /area/maintenance/bar) "bcD" = ( /obj/machinery/chem_master/condimaster, @@ -21434,7 +21284,7 @@ /obj/structure/cable/yellow{ icon_state = "1-8" }, -/turf/open/floor/festive/trainplatform, +/turf/open/floor/festive/trainplatform/safe, /area/maintenance/bar) "bdv" = ( /obj/machinery/light{ @@ -21767,11 +21617,11 @@ /obj/machinery/light{ dir = 4 }, -/obj/structure/bed, -/obj/item/bedsheet/rd, /obj/machinery/status_display{ pixel_x = 32 }, +/obj/item/bedsheet/rd/double, +/obj/structure/bed/double, /turf/open/floor/holofloor/wood, /area/command/heads_quarters/rd/private) "bet" = ( @@ -22833,7 +22683,7 @@ /turf/open/indestructible/hotelwood, /area/service/chapel/main) "bgY" = ( -/turf/open/floor/festive/cobblestone, +/turf/open/floor/festive/cobblestone/safe, /area/cargo) "bgZ" = ( /obj/machinery/light/small{ @@ -23807,9 +23657,7 @@ /obj/structure/fence{ dir = 4 }, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "bjT" = ( /obj/effect/festive/street/streetlineeast, @@ -27241,17 +27089,13 @@ /obj/structure/fence{ dir = 4 }, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "brL" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 1 }, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "brM" = ( /obj/effect/festive/trainrails/north{ @@ -27260,9 +27104,7 @@ /obj/structure/fence{ dir = 4 }, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "brN" = ( /obj/structure/chair/wood/normal, @@ -27441,8 +27283,8 @@ }, /area/service/chapel/main/monastery) "bsn" = ( -/obj/structure/bed, -/obj/item/bedsheet/black, +/obj/item/bedsheet/chaplain/double, +/obj/structure/bed/double, /turf/open/floor/carpet{ icon_state = "carpetsymbol" }, @@ -28149,7 +27991,6 @@ /area/cargo/miningoffice) "btM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/landmark/start/shaft_miner, /turf/open/floor/plasteel, /area/cargo/miningoffice) "btN" = ( @@ -28227,10 +28068,6 @@ /obj/structure/extinguisher_cabinet{ pixel_y = 32 }, -/obj/machinery/light/small{ - dir = 1; - light_color = "#ffc1c1" - }, /turf/open/indestructible/hotelwood, /area/service/chapel/main/monastery) "btX" = ( @@ -28261,13 +28098,12 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/light/small{ - dir = 1; - light_color = "#ffc1c1" - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 }, +/obj/machinery/light{ + dir = 1 + }, /turf/open/indestructible/hotelwood, /area/service/chapel/main/monastery) "bua" = ( @@ -29208,7 +29044,7 @@ /turf/open/floor/plasteel/cafeteria, /area/service/kitchen) "bwk" = ( -/turf/open/floor/festive/cobblestone, +/turf/open/floor/festive/cobblestone/safe, /area/cargo/qm) "bwl" = ( /obj/machinery/door/airlock/mining/glass{ @@ -29317,9 +29153,9 @@ /turf/open/floor/carpet/green, /area/service/chapel/main/monastery) "bww" = ( -/obj/machinery/light/small, -/turf/open/floor/carpet/green, -/area/service/chapel/main/monastery) +/obj/structure/mineral_door/wood, +/turf/open/floor/wood, +/area/command/heads_quarters/ce) "bwx" = ( /obj/structure/cable/yellow{ icon_state = "1-4" @@ -29612,16 +29448,16 @@ /turf/open/floor/plasteel/dark, /area/medical/medbay/aft) "bxn" = ( -/obj/structure/chair/wood/normal, /obj/effect/decal/festive/christmas_ivy_string, +/obj/structure/chair/pew/left, /turf/open/floor/carpet/green, /area/medical/surgery) "bxo" = ( -/obj/structure/chair/wood/normal, /obj/machinery/light{ dir = 1 }, /obj/effect/decal/festive/christmas_ivy_string, +/obj/structure/chair/pew, /turf/open/floor/carpet/green, /area/medical/surgery) "bxp" = ( @@ -29783,9 +29619,7 @@ /area/command/heads_quarters/cmo) "bxO" = ( /obj/structure/festive/trainplatform/edge_east, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "bxP" = ( /obj/effect/turf_decal/tile/blue{ @@ -29860,7 +29694,7 @@ id = "QMgarage"; name = "QM's Garage" }, -/turf/open/floor/festive/cobblestone, +/turf/open/floor/festive/cobblestone/safe, /area/cargo/qm) "bxZ" = ( /obj/effect/festive/street/streetlinenw, @@ -29955,7 +29789,7 @@ /turf/open/floor/plasteel/dark, /area/medical/medbay/aft) "byk" = ( -/obj/structure/chair/wood/normal, +/obj/structure/chair/pew/left, /turf/open/floor/carpet/green, /area/medical/surgery) "byl" = ( @@ -30522,42 +30356,34 @@ /turf/open/floor/plasteel/white, /area/medical/genetics/cloning) "bzN" = ( -/obj/machinery/computer/operating, /obj/structure/sign/warning/nosmoking{ pixel_x = -28 }, +/obj/structure/table, +/obj/item/book/manual/wiki/surgery, +/obj/item/razor{ + pixel_y = 5 + }, /turf/open/floor/plasteel, /area/medical/surgery) "bzO" = ( -/obj/structure/table, -/obj/item/hemostat, -/obj/item/surgicaldrill, /obj/effect/decal/festive/fairylights, +/obj/structure/table/optable, /turf/open/floor/plasteel/white/side, /area/medical/surgery) "bzP" = ( -/obj/structure/table, -/obj/item/cautery{ - pixel_x = 4 - }, -/obj/item/razor{ - pixel_y = 5 - }, -/obj/item/scalpel{ - pixel_y = 12 - }, /obj/effect/decal/festive/fairylights, +/obj/machinery/computer/operating, /turf/open/floor/plasteel/white/side, /area/medical/surgery) "bzQ" = ( /obj/structure/table, -/obj/item/retractor, -/obj/item/circular_saw, /obj/structure/window/reinforced{ dir = 4; layer = 2.9 }, /obj/effect/decal/festive/fairylights, +/obj/item/storage/backpack/duffelbag/med/surgery, /turf/open/floor/plasteel, /area/medical/surgery) "bzR" = ( @@ -30566,10 +30392,9 @@ /area/medical/surgery) "bzS" = ( /obj/structure/table, -/obj/item/clothing/gloves/color/latex, -/obj/item/clothing/mask/surgical, -/obj/item/clothing/suit/apron/surgical, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/open/floor/plasteel/white, /area/medical/surgery) "bzT" = ( @@ -30749,15 +30574,35 @@ /obj/machinery/light{ dir = 8 }, +/obj/machinery/light_switch{ + pixel_x = -28; + pixel_y = 17 + }, /turf/open/floor/plasteel/white/side{ dir = 4 }, /area/medical/surgery) "bAv" = ( /obj/effect/landmark/start/medical_doctor, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, /turf/open/floor/plasteel/white, /area/medical/surgery) "bAw" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, /turf/open/floor/plasteel/white, /area/medical/surgery) "bAx" = ( @@ -30765,12 +30610,13 @@ icon_state = "0-2" }, /obj/structure/table, -/obj/item/surgical_drapes, /obj/structure/window/reinforced{ dir = 4; layer = 2.9 }, -/obj/item/book/manual/wiki/surgery, +/obj/item/clothing/gloves/color/latex, +/obj/item/clothing/mask/surgical, +/obj/item/clothing/suit/apron/surgical, /turf/open/floor/plasteel/white/side{ dir = 8 }, @@ -31069,7 +30915,7 @@ name = "Cargo Loading dock" }, /obj/machinery/door/firedoor, -/turf/open/floor/festive/cobblestone, +/turf/open/floor/festive/cobblestone/safe, /area/cargo) "bAY" = ( /obj/effect/turf_decal/loading_area{ @@ -31211,25 +31057,17 @@ pixel_x = -12; pixel_y = 2 }, +/obj/structure/mirror{ + pixel_x = -24 + }, /turf/open/floor/plasteel/white, /area/medical/surgery) "bBo" = ( -/obj/structure/table/optable, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/structure/chair/sofa/right{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/medical/surgery) +/turf/open/floor/wood, +/area/command/heads_quarters/ce) "bBp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -31725,17 +31563,9 @@ /turf/open/floor/plasteel/white, /area/medical/surgery) "bCe" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, -/obj/machinery/light_switch{ - pixel_x = -28 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -32310,7 +32140,7 @@ pixel_x = 6; pixel_y = 16 }, -/turf/open/floor/festive/cobblestone, +/turf/open/floor/festive/cobblestone/safe, /area/cargo) "bCO" = ( /obj/machinery/light{ @@ -32545,6 +32375,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plasteel, /area/medical/surgery) "bDi" = ( @@ -33817,20 +33650,14 @@ /area/commons/dorms) "bGo" = ( /obj/machinery/button/door{ - id = "rdgarage"; - name = "Director's Garage Door"; - pixel_x = -7; - pixel_y = 26; - req_access_txt = "30" + id = "parkcomm"; + name = "Command Parking"; + pixel_x = -4; + pixel_y = 7; + req_one_access_txt = "2;19" }, -/obj/effect/turf_decal/weather/snow/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 8 - }, -/turf/open/floor/festive/alleyway, -/area/edina/backstreet/med) +/turf/closed/festive/whitebrick, +/area/edina/street) "bGp" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 1 @@ -33843,9 +33670,7 @@ /obj/structure/fence{ dir = 4 }, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "bGr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -34745,27 +34570,21 @@ width = 20 }, /obj/structure/festive/trainplatform/edge_west, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "bIe" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 4 }, /obj/structure/festive/trainplatform/necorner, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "bIf" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 1 }, /obj/structure/fence, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "bIg" = ( /obj/effect/festive/street/sidewalkwem, @@ -35688,9 +35507,7 @@ roundstart_template = /datum/map_template/shuttle/mining/delta; width = 7 }, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "bKg" = ( /obj/structure/festive/greybrick/windowWELeftEnd, @@ -36092,16 +35909,12 @@ /obj/effect/turf_decal/weather/snow/corner{ dir = 5 }, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "bKY" = ( /obj/effect/festive/trainrails/north, /obj/structure/fence, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "bKZ" = ( /obj/effect/festive/street/sidewalke, @@ -36319,17 +36132,15 @@ }, /area/commons/locker) "bLv" = ( -/obj/machinery/button/door{ - id = "idquarters"; - name = "Privacy Control"; - pixel_x = -26; - pixel_y = -26; - req_access_txt = "30" - }, /obj/machinery/light/small, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, +/obj/machinery/button/door{ + id = "patientA"; + name = "Privacy Shutters"; + pixel_y = -25 + }, /turf/open/floor/carpet/purple, /area/medical/storage) "bLw" = ( @@ -36520,9 +36331,7 @@ dir = 4 }, /obj/structure/festive/trainplatform/edge_west, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "bLR" = ( /obj/structure/table/wood, @@ -36697,9 +36506,7 @@ "bMl" = ( /obj/effect/festive/trainrails/south, /obj/structure/fence, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "bMm" = ( /obj/structure/closet/cardboard, @@ -37029,9 +36836,7 @@ "bMR" = ( /obj/effect/turf_decal/weather/snow/corner, /obj/structure/fence, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "bMS" = ( /obj/structure/table/wood, @@ -37491,7 +37296,7 @@ "bNT" = ( /obj/effect/spawner/structure/window, /obj/machinery/door/poddoor/shutters/preopen{ - id = "loungeshutters"; + id = "patientB"; name = "privacy shutters" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -37889,6 +37694,9 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/indestructible, /area/cargo/warehouse) "bOP" = ( @@ -37952,9 +37760,7 @@ /obj/effect/turf_decal/weather/snow/corner{ dir = 1 }, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "bOZ" = ( /obj/effect/turf_decal/weather/snow/corner{ @@ -38042,6 +37848,13 @@ "bPj" = ( /obj/effect/festive/street/streetlineem, /obj/effect/festive/street/streetlinewm, +/obj/machinery/button/door{ + id = "chemistry_shutters"; + name = "chemical factory garage"; + pixel_x = 24; + pixel_y = 7; + req_access_txt = "5; 33" + }, /turf/open/floor/plasteel, /area/medical/chemistry) "bPk" = ( @@ -39075,6 +38888,7 @@ }, /obj/effect/turf_decal/tile/yellow, /obj/machinery/power/apc/auto_name{ + dir = 4; pixel_x = 30 }, /obj/structure/cable/yellow{ @@ -39486,7 +39300,6 @@ }, /obj/machinery/power/apc{ areastring = "/area/medical/chemistry"; - dir = 1; name = "Chemistry Lab APC"; pixel_y = -24 }, @@ -39991,20 +39804,15 @@ /turf/open/floor/festive/alleyway, /area/edina/backstreet/med) "bTk" = ( -/obj/effect/turf_decal/weather/snow/corner{ - dir = 1 - }, /obj/machinery/button/door{ - id = "weewoo"; - name = "Ambulance Garage button"; - pixel_y = 28; - req_access_txt = "5" + id = "rdgarage"; + name = "Director's Garage Door"; + pixel_x = -7; + pixel_y = -6; + req_access_txt = "30" }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/open/floor/festive/alleyway, -/area/medical/cryo) +/turf/closed/festive/whitebrick, +/area/command/heads_quarters/rd) "bTl" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 1 @@ -40357,9 +40165,7 @@ name = "Cargo Bay"; width = 12 }, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "bTZ" = ( /obj/structure/toilet/secret/low_loot, @@ -40486,16 +40292,12 @@ /area/commons/dorms) "bUs" = ( /obj/machinery/button/door{ - id = "qm_warehouse"; - name = "Warehouse Door Control"; - pixel_y = 24; - req_access_txt = "31" + id = "QMgarage"; + name = "Garage door button"; + pixel_y = -4 }, -/obj/effect/turf_decal/weather/snow/corner{ - dir = 1 - }, -/turf/open/floor/festive/alleyway, -/area/edina/backstreet/supply) +/turf/closed/festive/greybrick, +/area/service/kitchen) "bUt" = ( /obj/structure/grille, /obj/structure/festive/whitebrick/windowWELeftEnd, @@ -40601,6 +40403,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 5 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/festive/white_alleyway{ color = "#967832" }, @@ -40892,13 +40695,14 @@ /turf/closed/festive/greybrick, /area/service/janitor) "bVp" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/open/floor/festive/white_alleyway{ - color = "#967832" +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 }, -/area/edina/backstreet/supply) +/turf/open/floor/festive/sidewalk, +/area/edina/street/primary/perimeter) "bVq" = ( /obj/effect/festive/street/streetlinesw, /turf/open/floor/festive/cobblestone, @@ -41007,6 +40811,7 @@ "bVF" = ( /obj/structure/grille, /obj/structure/festive/redbrick/windowNSRightEnd, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/festive/redbrick, /area/security/checkpoint/supply) "bVG" = ( @@ -41798,9 +41603,8 @@ /turf/open/floor/plasteel/white, /area/medical/genetics) "bXA" = ( -/obj/structure/bed, -/obj/item/bedsheet/cmo, -/obj/effect/landmark/start/chief_medical_officer, +/obj/structure/bed/double, +/obj/item/bedsheet/cmo/double, /turf/open/floor/carpet/royalblack, /area/command/heads_quarters/cmo) "bXB" = ( @@ -43127,12 +42931,9 @@ /turf/open/floor/festive/alleyway, /area/edina/backstreet/supply) "caz" = ( -/obj/structure/streetdecor/lampfestive{ - pixel_x = -8; - pixel_y = -5 - }, -/turf/open/floor/festive/sidewalk, -/area/edina/street/primary/perimeter) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/festive/alleyway, +/area/science) "caA" = ( /obj/machinery/door/airlock/public/glass{ name = "Hydroponics"; @@ -43803,9 +43604,7 @@ /obj/effect/turf_decal/weather/snow/corner{ dir = 8 }, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "cbK" = ( /obj/structure/grille, @@ -44358,9 +44157,7 @@ dir = 1 }, /obj/structure/festive/trainplatform/nwcorner, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "cdo" = ( /obj/effect/turf_decal/weather/snow/corner, @@ -45105,8 +44902,8 @@ /turf/open/floor/festive/cobblestone, /area/edina/street/primary/perimeter) "ceU" = ( -/obj/structure/bed, -/obj/item/bedsheet/qm, +/obj/item/bedsheet/qm/double, +/obj/structure/bed/double, /turf/open/floor/carpet/orange, /area/cargo/qm) "ceV" = ( @@ -45378,9 +45175,7 @@ /obj/effect/turf_decal/weather/snow/corner{ dir = 1 }, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "cfF" = ( /obj/structure/sign/poster/official/walk{ @@ -46102,22 +45897,16 @@ /turf/open/floor/festive/sidewalk, /area/edina/street/primary/servitor) "cho" = ( -/obj/effect/turf_decal/weather/snow/corner{ - dir = 1 - }, /obj/machinery/button/door{ - id = "QMgarage"; - name = "Garage door button"; - pixel_y = 28 + id = "qm_warehouse"; + name = "Warehouse Door Control"; + pixel_y = -8; + req_access_txt = "31" }, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/turf/closed/festive/whitebrick{ + color = "#967832" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/festive/sidewalk, -/area/edina/street/primary/servitor) +/area/cargo/warehouse) "chp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -46152,9 +45941,7 @@ color = "#FFFFFF"; dir = 4 }, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "cht" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -46169,7 +45956,7 @@ pixel_x = -28 }, /obj/effect/festive/street/streetlinenm, -/turf/open/floor/festive/cobblestone, +/turf/open/floor/festive/cobblestone/safe, /area/cargo/qm) "chv" = ( /obj/effect/turf_decal/weather/snow/corner{ @@ -46654,7 +46441,7 @@ /obj/vehicle/sealed/vectorcraft/auto{ dir = 8 }, -/turf/open/floor/festive/cobblestone, +/turf/open/floor/festive/cobblestone/safe, /area/cargo/qm) "ciI" = ( /obj/structure/window/reinforced{ @@ -46995,6 +46782,9 @@ /area/edina/street/primary/servitor) "cjv" = ( /obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/festive/white_alleyway{ color = "#967832" }, @@ -47264,13 +47054,13 @@ /turf/open/floor/carpet/blue, /area/commons/cryopod) "cjT" = ( -/obj/structure/streetdecor/lampfestive{ - pixel_x = -8; - pixel_y = -5 - }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, +/obj/structure/streetdecor/lampfestive{ + pixel_x = -8; + pixel_y = 25 + }, /turf/open/floor/festive/sidewalk, /area/edina/street/primary/perimeter) "cjU" = ( @@ -49038,22 +48828,17 @@ /turf/open/floor/festive/sidewalk, /area/edina/street/primary/perimeter) "cnS" = ( -/obj/effect/turf_decal/weather/snow/corner{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, /obj/machinery/button/door{ - id = "clowngarage"; - name = "Garage Door"; - pixel_y = 28 + id = "chemistry_shutters"; + name = "chemical factory garage"; + pixel_x = -8; + pixel_y = -6; + req_access_txt = "5; 33" }, -/turf/open/floor/festive/sidewalk, -/area/edina/street/primary/perimeter) +/turf/closed/festive/whitebrick{ + color = "#ffe6a8" + }, +/area/medical/chemistry) "cnT" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -49377,17 +49162,15 @@ /turf/open/floor/festive/sidewalk, /area/edina/street/intersection/servsuppaux) "coI" = ( -/obj/structure/streetdecor/lampfestive{ - pixel_x = 8 - }, -/turf/open/floor/festive/sidewalk, -/area/edina/street/primary/perimeter) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/festive/alleyway, +/area/edina/backstreet/med) "coJ" = ( -/obj/structure/streetdecor/lampfestive{ - pixel_x = -8 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, -/turf/open/floor/festive/sidewalk, -/area/edina/street/primary/perimeter) +/turf/open/floor/festive/alleyway, +/area/edina/backstreet/med) "coK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -49510,6 +49293,9 @@ /obj/structure/streetdecor/lampfestive{ pixel_x = 8 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/festive/sidewalk, /area/edina/street/intersection/servsuppaux) "cpb" = ( @@ -49517,6 +49303,9 @@ /obj/effect/turf_decal/arrows/white{ dir = 1 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/festive/cobblestone, /area/edina/street/intersection/servsuppaux) "cpc" = ( @@ -49692,6 +49481,9 @@ /area/edina/street/primary/perimeter) "cpJ" = ( /obj/effect/festive/street/streetlineeast, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/festive/cobblestone, /area/edina/street/intersection/servsuppaux) "cpK" = ( @@ -49844,6 +49636,9 @@ /obj/structure/streetdecor/lampfestive{ pixel_x = -8 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/festive/sidewalk, /area/edina/street/intersection/servsuppaux) "cqk" = ( @@ -50165,6 +49960,9 @@ /area/edina/street/primary/servitor) "crd" = ( /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/festive/sidewalk, /area/edina/street/intersection/servsuppaux) "cre" = ( @@ -50570,6 +50368,9 @@ pixel_x = -8; pixel_y = 20 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/festive/sidewalk, /area/edina/street/intersection/princessservitor) "csk" = ( @@ -51105,16 +50906,25 @@ pixel_x = 8; pixel_y = 16 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/festive/sidewalk, /area/edina/street/intersection/servsuppaux) "ctL" = ( /obj/effect/festive/street/streetlinewest, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/festive/cobblestone, /area/edina/street/intersection/servsuppaux) "ctM" = ( /obj/effect/festive/street/streetlineeast, /obj/effect/turf_decal/arrows/white, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/festive/cobblestone, /area/edina/street/intersection/servsuppaux) "ctN" = ( @@ -51122,6 +50932,9 @@ pixel_x = -8; pixel_y = 16 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/festive/sidewalk, /area/edina/street/intersection/servsuppaux) "ctO" = ( @@ -51137,18 +50950,14 @@ /area/edina/street/intersection/servsuppaux) "ctQ" = ( /obj/effect/turf_decal/weather/snow/corner, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "ctR" = ( /obj/effect/turf_decal/weather/snow/corner, /obj/effect/turf_decal/weather/snow/corner{ dir = 4 }, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "ctS" = ( /obj/effect/festive/street/sidewalkwem, @@ -51958,9 +51767,11 @@ /turf/closed/wall/mineral/wood/nonmetal, /area/maintenance/bar) "cvT" = ( -/obj/effect/festive/street/sidewalkn, -/turf/open/floor/festive/cobblestone, -/area/edina/street/intersection/princessperimeter/south) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/festive/alleyway, +/area/edina/backstreet/med) "cvU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/wood, @@ -52186,6 +51997,9 @@ /obj/effect/turf_decal/stripes/corner{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, /turf/open/floor/plasteel, /area/cargo/storage) "cwA" = ( @@ -52206,7 +52020,7 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/festive/trainplatform, +/turf/open/floor/festive/trainplatform/safe, /area/maintenance/bar) "cwD" = ( /turf/open/floor/plating/beach/sand, @@ -52244,17 +52058,17 @@ dir = 1 }, /obj/effect/decal/festive/christmas_ivy_string, -/turf/open/floor/festive/trainplatform, +/turf/open/floor/festive/trainplatform/safe, /area/maintenance/bar) "cwK" = ( -/turf/open/floor/festive/trainplatform, +/turf/open/floor/festive/trainplatform/safe, /area/maintenance/bar) "cwL" = ( /obj/machinery/light{ dir = 1 }, /obj/effect/decal/festive/christmas_ivy_string, -/turf/open/floor/festive/trainplatform, +/turf/open/floor/festive/trainplatform/safe, /area/maintenance/bar) "cwM" = ( /obj/structure/festive/trainplatform/edge_east, @@ -52317,6 +52131,9 @@ /obj/effect/turf_decal/arrows/white{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/festive/cobblestone, /area/edina/street/intersection/princessperimeter/south) "cwU" = ( @@ -52325,11 +52142,14 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/festive/cobblestone, /area/edina/street/primary/perimeter) "cwV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/festive/trainplatform, +/turf/open/floor/festive/trainplatform/safe, /area/maintenance/bar) "cwW" = ( /obj/structure/festive/trainplatform/edge_east, @@ -52362,7 +52182,7 @@ /area/maintenance/bar) "cxb" = ( /obj/effect/festive/street/streetlineem, -/turf/open/floor/festive/cobblestone, +/turf/open/floor/festive/cobblestone/safe, /area/edina/street) "cxc" = ( /obj/effect/festive/street/sidewalknsm, @@ -52511,10 +52331,11 @@ /turf/open/floor/festive/wooden/wooden1, /area/maintenance/bar/cafe) "cxF" = ( -/obj/machinery/door/airlock/wood, -/obj/effect/decal/festive/christmas_reef, -/turf/open/floor/wood, -/area/maintenance/bar) +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/festive/cobblestone, +/area/edina/street/intersection/servsuppaux) "cxG" = ( /obj/machinery/light{ dir = 8; @@ -52524,7 +52345,7 @@ /area/maintenance/bar) "cxH" = ( /obj/effect/landmark/start/assistant, -/turf/open/floor/festive/trainplatform, +/turf/open/floor/festive/trainplatform/safe, /area/maintenance/bar) "cxI" = ( /obj/structure/grille, @@ -52732,47 +52553,46 @@ /turf/open/floor/wood, /area/maintenance/bar) "cyr" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/festive/sidewalk, +/area/edina/street/intersection/servsuppaux) +"cys" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/decal/festive/fairylights, /obj/structure/chair/sofa/left{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/decal/festive/fairylights, -/turf/open/floor/wood, -/area/maintenance/bar) -"cys" = ( -/obj/structure/table/glass, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/decal/festive/fairylights, /turf/open/floor/wood, /area/maintenance/bar) "cyt" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 + dir = 10 }, -/obj/machinery/airalarm/directional/north, -/obj/effect/decal/festive/fairylights, -/turf/open/floor/wood, -/area/maintenance/bar) +/turf/open/floor/festive/sidewalk, +/area/edina/street/primary/servitor) "cyu" = ( -/obj/structure/table/glass, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, /obj/effect/decal/festive/fairylights, +/obj/machinery/vending/boozeomat{ + pixel_y = 31 + }, /turf/open/floor/wood, /area/maintenance/bar) "cyv" = ( -/obj/structure/chair/sofa/right{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/effect/decal/festive/fairylights, +/obj/structure/table/glass, /turf/open/floor/wood, /area/maintenance/bar) "cyw" = ( @@ -52782,11 +52602,8 @@ /turf/open/floor/wood, /area/maintenance/bar) "cyx" = ( -/obj/structure/floodlight_frame{ - density = 0; - name = "dancing pole" - }, -/turf/open/floor/festive/trainplatform, +/obj/effect/landmark/xmastree/rdrod, +/turf/open/floor/festive/trainplatform/safe, /area/maintenance/bar) "cyA" = ( /obj/structure/grille, @@ -52909,20 +52726,19 @@ /turf/open/floor/wood, /area/maintenance/bar) "cyW" = ( -/obj/structure/table/glass, -/turf/open/floor/wood, -/area/maintenance/bar) +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/indestructible, +/area/cargo/storage) "cyX" = ( -/obj/structure/table/glass, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, /turf/open/floor/wood, /area/maintenance/bar) "cyY" = ( -/obj/structure/chair/sofa{ - dir = 8 - }, +/obj/structure/table/glass, /turf/open/floor/wood, /area/maintenance/bar) "cyZ" = ( @@ -53009,13 +52825,11 @@ /turf/open/floor/light, /area/maintenance/bar) "czq" = ( -/obj/structure/festive/trainplatform/edge_south, /obj/structure/chair/stool/bar, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/light, /area/maintenance/bar) "czr" = ( -/obj/structure/festive/trainplatform/edge_south, /obj/structure/chair/stool/bar, /turf/open/floor/light, /area/maintenance/bar) @@ -53160,19 +52974,18 @@ /turf/open/floor/wood, /area/maintenance/bar) "czP" = ( -/obj/structure/chair/sofa{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/wood, -/area/maintenance/bar) +/turf/open/indestructible, +/area/cargo/storage) "czQ" = ( -/obj/structure/table/glass, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/structure/chair/sofa/right{ + dir = 4 + }, /turf/open/floor/wood, /area/maintenance/bar) "czR" = ( @@ -53180,15 +52993,16 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, +/obj/machinery/chem_dispenser/drinks/fullupgrade{ + dir = 1 + }, /turf/open/floor/wood, /area/maintenance/bar) "czS" = ( -/obj/structure/chair/sofa{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/structure/table/glass, /turf/open/floor/wood, /area/maintenance/bar) "czT" = ( @@ -53287,37 +53101,33 @@ /turf/open/floor/wood, /area/maintenance/bar) "cAr" = ( -/obj/structure/chair/sofa/right{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/wood, -/area/maintenance/bar) +/turf/open/indestructible, +/area/cargo/storage) "cAs" = ( -/obj/structure/table/glass, -/obj/machinery/chem_dispenser/drinks/beer/fullupgrade, /obj/machinery/light{ light_color = "#c9d3e8" }, /turf/open/floor/wood, /area/maintenance/bar) "cAu" = ( -/obj/structure/table/glass, -/obj/machinery/chem_dispenser/drinks/fullupgrade, -/turf/open/floor/wood, -/area/maintenance/bar) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/indestructible, +/area/cargo/storage) "cAv" = ( -/obj/structure/table/glass, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, /turf/open/floor/wood, /area/maintenance/bar) "cAw" = ( -/obj/structure/chair/sofa/left{ - dir = 8 - }, -/turf/open/floor/wood, -/area/maintenance/bar) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/indestructible, +/area/cargo/storage) "cAx" = ( /turf/closed/festive/greybrick/greybrickcornersw, /area/edina/street/primary/perimeter) @@ -53384,24 +53194,18 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "cAI" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 1 }, /obj/structure/festive/trainplatform/necorner, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "cAJ" = ( /obj/structure/festive/trainplatform/edge_south, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "cAL" = ( /obj/structure/fluff/lightpost/light, @@ -53409,65 +53213,49 @@ /area/maintenance/bar) "cAM" = ( /obj/effect/festive/trainrails/north, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "cAN" = ( /obj/effect/festive/trainrails/north, /obj/effect/festive/trainrails/north, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "cAO" = ( /obj/effect/festive/trainrails/north, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "cAP" = ( /obj/effect/festive/trainrails/north{ icon_state = "trainrails_turn_int" }, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "cAQ" = ( /obj/effect/festive/trainrails/south, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "cAR" = ( /obj/effect/festive/trainrails/south, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "cAS" = ( /obj/effect/festive/trainrails/north{ icon_state = "trainrails_turn_ext" }, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "cAT" = ( /obj/effect/turf_decal/weather/snow/corner, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "cAV" = ( /obj/structure/cable{ @@ -53593,6 +53381,18 @@ }, /turf/open/floor/plasteel, /area/engineering/main) +"cDt" = ( +/obj/effect/turf_decal/weather/snow/corner{ + color = "#FFFFFF"; + dir = 4 + }, +/obj/effect/turf_decal/weather/snow/corner{ + color = "#FFFFFE"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/festive/alleyway, +/area/edina/backstreet/supply) "cGh" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 4 @@ -53615,6 +53415,13 @@ dir = 1 }, /area/commons/dorms) +"cIQ" = ( +/obj/structure/streetdecor/lampfestive{ + pixel_x = 8; + pixel_y = 16 + }, +/turf/open/floor/festive/sidewalk, +/area/edina/street/intersection/princessperimeter/south) "cKl" = ( /obj/machinery/light/small, /obj/structure/closet/crate, @@ -53649,6 +53456,12 @@ }, /turf/open/floor/wood, /area/maintenance/bar) +"cTr" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/wood, +/area/science) "cUs" = ( /obj/structure/flora/ausbushes/ppflowers, /turf/open/floor/grass, @@ -53679,10 +53492,21 @@ /obj/item/reagent_containers/rag/towel, /turf/open/floor/plasteel/cafeteria, /area/maintenance/bar/cafe) +"dgn" = ( +/obj/effect/festive/trainrails/north{ + icon_state = "trainrails_east" + }, +/turf/open/floor/plating/dirt/space, +/area/edina) "dgB" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, /area/edina) +"dhz" = ( +/obj/machinery/door/airlock/wood, +/obj/effect/decal/festive/christmas_reef, +/turf/open/floor/wood, +/area/maintenance/bar) "dkq" = ( /obj/item/reagent_containers/food/snacks/cheesewedge, /turf/open/floor/festive/wooden/wooden2, @@ -53775,11 +53599,32 @@ /obj/item/chair/wood, /turf/open/floor/wood, /area/commons/dorms) +"ejZ" = ( +/obj/structure/bookcase/random/reference, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/festive/wooden/wooden1, +/area/commons/lounge) "emA" = ( /turf/open/floor/wood{ icon_state = "wood-broken4" }, /area/commons/dorms) +"enm" = ( +/obj/effect/turf_decal/weather/snow/corner{ + color = "#FFFFFF"; + dir = 4 + }, +/obj/effect/turf_decal/weather/snow/corner{ + color = "#FFFFFE"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/festive/alleyway, +/area/edina/backstreet/supply) "eoy" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -53974,6 +53819,10 @@ }, /turf/open/floor/wood, /area/maintenance/bar) +"ftC" = ( +/obj/structure/flora/tree/dead, +/turf/open/floor/grass, +/area/edina) "fwK" = ( /turf/open/floor/plasteel/white, /area/commons/dorms) @@ -53986,14 +53835,33 @@ }, /turf/open/floor/festive/alleyway, /area/edina) +"fyx" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp, +/turf/open/floor/wood, +/area/command/heads_quarters/ce) "fBZ" = ( /mob/living/simple_animal/crab, /turf/open/floor/holofloor/beach, /area/edina/crew_quarters/store/pet) +"fCo" = ( +/obj/effect/festive/street/streetlinenorth, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/festive/cobblestone, +/area/edina/street/primary/perimeter) "fCF" = ( /obj/effect/decal/festive/christmas_ivy_string, /turf/open/floor/carpet/blue, /area/commons/cryopod) +"fGL" = ( +/obj/machinery/suit_storage_unit/ce, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/plasteel/white, +/area/command/heads_quarters/ce) "fIm" = ( /obj/structure/fence, /obj/structure/cable{ @@ -54023,6 +53891,10 @@ /mob/living/simple_animal/crab/kreb, /turf/open/floor/holofloor/beach, /area/edina/crew_quarters/store/pet) +"fUG" = ( +/obj/structure/table/wood, +/turf/open/floor/carpet/orange, +/area/command/heads_quarters/ce) "fVP" = ( /obj/structure/streetdecor/lampfestive{ pixel_x = 16; @@ -54036,6 +53908,12 @@ /obj/item/clothing/head/festive, /turf/open/floor/carpet/orange, /area/maintenance/bar) +"fXg" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/turf/open/floor/plating/dirt/space, +/area/edina) "fZm" = ( /obj/structure/chair/sofa/left{ dir = 1; @@ -54072,6 +53950,12 @@ }, /turf/open/floor/festive/alleyway, /area/edina/street/secondary/castle) +"gnR" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/turf/open/floor/plating/dirt/space, +/area/edina) "gpj" = ( /obj/structure/bed/dogbed, /mob/living/simple_animal/pet/fox, @@ -54146,6 +54030,15 @@ }, /turf/open/floor/wood, /area/commons/dorms) +"hgb" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/portables_connector/layer3{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/engineering/atmos) "hie" = ( /obj/structure/bookcase/random/adult, /turf/open/floor/wood, @@ -54161,6 +54054,16 @@ /mob/living/simple_animal/mouse/gray, /turf/open/floor/festive/wooden/wooden2, /area/edina/crew_quarters/store/pet) +"hkj" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/decal/festive/fairylights, +/obj/structure/chair/sofa/right{ + dir = 8 + }, +/turf/open/floor/wood, +/area/maintenance/bar) "hlu" = ( /obj/machinery/seed_extractor, /obj/effect/turf_decal/tile/green, @@ -54228,6 +54131,10 @@ }, /turf/open/floor/festive/wooden/wooden1, /area/edina/crew_quarters/store/pet) +"hBk" = ( +/obj/effect/landmark/start/chief_engineer, +/turf/open/floor/carpet/orange, +/area/command/heads_quarters/ce) "hER" = ( /obj/machinery/rnd/production/circuit_imprinter, /obj/effect/decal/festive/christmas_ivy_string, @@ -54242,6 +54149,22 @@ /obj/item/hatchet, /turf/open/floor/carpet/orange, /area/commons/storage/tools) +"hKj" = ( +/obj/docking_port/stationary{ + dir = 4; + dwidth = 2; + height = 5; + id = "laborcamp_home"; + name = "fore bay 1"; + roundstart_template = /datum/map_template/shuttle/labour/delta; + width = 9 + }, +/turf/open/floor/grass/snow/edina, +/area/edina) +"hLe" = ( +/obj/structure/chair/pew, +/turf/open/floor/carpet/green, +/area/medical/surgery) "hMn" = ( /obj/structure/streetdecor/lampfestive{ pixel_x = 16; @@ -54319,6 +54242,15 @@ /obj/effect/decal/festive/holly, /turf/closed/indestructible/riveted/boss, /area/science) +"inO" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/festive/sidewalk, +/area/edina/street/primary/perimeter) "ior" = ( /obj/machinery/light/floor{ alpha = 0; @@ -54375,6 +54307,15 @@ }, /turf/open/indestructible/airblock, /area/science) +"iCT" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/chair/sofa/left{ + dir = 8 + }, +/turf/open/floor/wood, +/area/maintenance/bar) "iFP" = ( /mob/living/simple_animal/jacq/car_spawner, /turf/open/floor/grass/snow/edina, @@ -54418,6 +54359,14 @@ }, /turf/open/floor/plasteel/cafeteria, /area/maintenance/bar/cafe) +"iQh" = ( +/obj/structure/table/wood/fancy/blue, +/obj/item/flashlight/lamp{ + pixel_x = 4; + pixel_y = 8 + }, +/turf/open/floor/carpet/blue, +/area/commons/cryopod) "jdx" = ( /obj/machinery/door/airlock/wood/glass{ name = "Hotel" @@ -54511,6 +54460,10 @@ /obj/effect/decal/festive/christmas_ivy_string, /turf/open/floor/circuit/off, /area/science) +"jSU" = ( +/obj/structure/flora/grass/green, +/turf/open/floor/grass, +/area/edina) "jUo" = ( /obj/structure/table/plasmaglass, /turf/open/floor/circuit/off, @@ -54525,6 +54478,11 @@ }, /turf/open/floor/wood, /area/commons/dorms) +"kaF" = ( +/obj/effect/decal/festive/christmas_ivy_string, +/obj/structure/chair/pew, +/turf/open/floor/carpet/green, +/area/medical/surgery) "kda" = ( /obj/structure/window/reinforced{ dir = 8 @@ -54553,6 +54511,9 @@ /obj/effect/decal/festive/holly, /turf/open/indestructible/airblock, /area/science) +"kld" = ( +/turf/open/floor/plating/dirt/space, +/area/edina) "klL" = ( /obj/structure/bed, /obj/item/bedsheet, @@ -54598,6 +54559,25 @@ }, /turf/open/floor/festive/alleyway, /area/edina/street/secondary/castle) +"kBi" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/table/glass, +/obj/machinery/chem_dispenser/drinks/beer/fullupgrade{ + dir = 1 + }, +/turf/open/floor/wood, +/area/maintenance/bar) +"kJH" = ( +/obj/machinery/button/door{ + id = "weewoo"; + name = "Ambulance Garage button"; + pixel_y = -5; + req_access_txt = "5" + }, +/turf/closed/festive/whitebrick, +/area/medical/cryo) "kSC" = ( /obj/structure/toilet{ dir = 4 @@ -54631,6 +54611,12 @@ }, /turf/open/floor/wood, /area/maintenance/bar) +"kYC" = ( +/obj/structure/festive/trainplatform/edge_north{ + pixel_y = -7 + }, +/turf/open/floor/festive/trainplatform/safe, +/area/maintenance/bar) "kZN" = ( /obj/machinery/light, /turf/open/floor/plasteel/white/side{ @@ -54825,6 +54811,13 @@ /obj/structure/chair/wood/normal, /turf/open/floor/carpet/orange, /area/maintenance/bar) +"mtg" = ( +/obj/effect/turf_decal/weather/snow/corner, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/festive/alleyway, +/area/edina/backstreet/supply) "mua" = ( /turf/open/floor/carpet/royalblack, /area/maintenance/bar) @@ -54850,6 +54843,13 @@ /obj/effect/decal/festive/christmas_ivy_string, /turf/open/floor/circuit/off, /area/science) +"mRs" = ( +/obj/structure/bookcase/random/religion, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/festive/wooden/wooden1, +/area/commons/lounge) "mRx" = ( /obj/machinery/light/floor{ alpha = 0; @@ -54873,6 +54873,10 @@ /obj/item/stock_parts/cell/hyper, /turf/open/floor/circuit/off, /area/science) +"mTB" = ( +/obj/structure/flora/grass/both, +/turf/open/floor/grass, +/area/edina) "mUg" = ( /obj/structure/closet/secure_closet/freezer/fridge, /obj/machinery/light{ @@ -54942,6 +54946,16 @@ /obj/machinery/chem_dispenser/drinks/beer/fullupgrade, /turf/open/floor/wood, /area/maintenance/bar) +"nxe" = ( +/obj/machinery/button/door{ + id = "clowngarage"; + name = "Garage Door"; + pixel_y = -4 + }, +/turf/closed/festive/whitebrick{ + color = "#fff200" + }, +/area/service/theater) "nzc" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -54993,6 +55007,10 @@ }, /turf/open/floor/holofloor/beach, /area/edina/crew_quarters/store/pet) +"nXv" = ( +/obj/structure/flora/grass/brown, +/turf/open/floor/grass, +/area/edina) "nZW" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 8 @@ -55033,6 +55051,11 @@ /obj/item/coin/iron, /turf/open/floor/wood, /area/commons/dorms) +"okc" = ( +/obj/effect/decal/festive/christmas_ivy_string, +/obj/structure/chair/pew/right, +/turf/open/floor/carpet/green, +/area/medical/surgery) "olL" = ( /obj/structure/fireplace, /turf/open/floor/wood, @@ -55115,6 +55138,13 @@ /mob/living/simple_animal/jacq/car_spawner, /turf/open/floor/festive/sidewalk, /area/edina/street/primary/servitor) +"oWb" = ( +/obj/machinery/light/small{ + brightness = 3; + dir = 4 + }, +/turf/open/floor/plasteel, +/area/commons/fitness/recreation) "oWw" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 1 @@ -55218,6 +55248,15 @@ /obj/item/phone, /turf/open/floor/wood, /area/maintenance/bar) +"pyF" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 8 + }, +/obj/structure/streetdecor/lampfestive{ + pixel_y = 16 + }, +/turf/open/floor/festive/sidewalk, +/area/edina/street/primary/perimeter) "pBd" = ( /mob/living/simple_animal/jacq/car_spawner, /turf/open/floor/festive/alleyway, @@ -55261,6 +55300,13 @@ /obj/effect/decal/festive/green_stockings, /turf/closed/indestructible/riveted/boss, /area/science) +"pNf" = ( +/obj/effect/turf_decal/weather/snow/corner{ + color = "#FFFFFE"; + dir = 8 + }, +/turf/open/floor/plating/dirt/space, +/area/edina) "pOy" = ( /obj/effect/turf_decal/bot, /obj/machinery/hydroponics/constructable, @@ -55278,6 +55324,10 @@ color = "#967832" }, /area/edina/backstreet/supply) +"pRa" = ( +/obj/structure/chair/pew/right, +/turf/open/floor/carpet/green, +/area/medical/surgery) "pRU" = ( /obj/structure/table/plasmaglass, /obj/item/integrated_electronics/analyzer, @@ -55328,6 +55378,13 @@ }, /turf/open/floor/circuit/off, /area/science) +"qcq" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/table/glass, +/turf/open/floor/wood, +/area/maintenance/bar) "qkz" = ( /obj/effect/decal/festive/fairylights, /turf/open/floor/carpet/royalblue, @@ -55363,6 +55420,12 @@ }, /turf/open/floor/circuit/off, /area/science) +"qzx" = ( +/obj/structure/chair/sofa{ + dir = 8 + }, +/turf/open/floor/wood, +/area/maintenance/bar) "qzA" = ( /obj/structure/table/glass, /obj/item/stack/sheet/bone, @@ -55388,6 +55451,10 @@ /obj/structure/closet/secure_closet/freezer/kitchen/maintenance, /turf/open/floor/wood, /area/maintenance/bar) +"qUP" = ( +/obj/structure/dresser, +/turf/open/floor/wood, +/area/command/heads_quarters/ce) "qVq" = ( /obj/effect/decal/festive/red_stockings, /turf/closed/indestructible/riveted/boss, @@ -55425,6 +55492,13 @@ /obj/item/gun/magic/staff/healing, /turf/open/floor/circuit/off, /area/science) +"rgc" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/festive/trainplatform/edge_north{ + pixel_y = -7 + }, +/turf/open/floor/festive/trainplatform/safe, +/area/maintenance/bar) "rgC" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 1 @@ -55539,6 +55613,9 @@ }, /turf/open/floor/festive/alleyway, /area/science) +"rGH" = ( +/turf/open/floor/wood, +/area/command/heads_quarters/ce) "rKc" = ( /obj/structure/sign/poster/contraband/lusty_xenomorph{ pixel_x = 32 @@ -55657,6 +55734,18 @@ /obj/effect/decal/festive/christmas_reef, /turf/open/floor/wood, /area/service/cafeteria/lunchroom) +"szb" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/table/glass, +/obj/item/reagent_containers/food/drinks/shaker{ + pixel_x = -9; + pixel_y = 7 + }, +/obj/item/reagent_containers/rag, +/turf/open/floor/wood, +/area/maintenance/bar) "sEK" = ( /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -55678,6 +55767,17 @@ /obj/effect/decal/festive/fairylights, /turf/open/indestructible, /area/cargo) +"sOG" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/decal/festive/fairylights, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/wood, +/area/maintenance/bar) "sQo" = ( /turf/open/floor/plasteel/white/side{ dir = 4 @@ -55765,6 +55865,15 @@ /obj/structure/table, /turf/open/floor/plasteel/white, /area/commons/dorms) +"toY" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/layer3{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/engineering/atmos) "twg" = ( /obj/structure/fence{ dir = 4 @@ -55775,6 +55884,13 @@ /obj/effect/decal/festive/green_stockings, /turf/closed/indestructible/riveted/hierophant, /area/science) +"txb" = ( +/obj/effect/turf_decal/weather/snow/corner, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/festive/alleyway, +/area/edina/backstreet/supply) "tyL" = ( /obj/structure/streetdecor/lampfestive{ pixel_x = 8 @@ -55819,6 +55935,13 @@ /obj/item/bedsheet/random, /turf/open/floor/festive/wooden/wooden1, /area/maintenance/bar) +"tRh" = ( +/obj/structure/flora/tree/pine/xmas{ + pixel_x = 2; + pixel_y = 14 + }, +/turf/open/floor/carpet, +/area/commons/dorms) "tRk" = ( /obj/machinery/nanite_programmer, /turf/open/floor/circuit/off, @@ -55827,6 +55950,16 @@ /obj/structure/chair/wood/wings, /turf/open/floor/carpet/royalblack, /area/maintenance/bar) +"tTe" = ( +/obj/effect/turf_decal/weather/snow/corner{ + color = "#FFFFFF"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/festive/alleyway, +/area/edina/backstreet/supply) "tTL" = ( /obj/machinery/door/window/westleft, /turf/open/floor/carpet/royalblue, @@ -55835,11 +55968,27 @@ /mob/living/simple_animal/kiwi, /turf/open/floor/grass, /area/edina) +"tWU" = ( +/obj/effect/festive/street/streetlinenorth, +/obj/effect/turf_decal/arrows/white{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/festive/cobblestone, +/area/edina/street/primary/perimeter) "tXg" = ( /obj/structure/table/glass, /obj/item/toy/fluff/tennis_poly/tri/squeak/rainbow, /turf/open/floor/carpet/royalblue, /area/edina/crew_quarters/store/pet) +"ucp" = ( +/obj/effect/festive/trainrails/north{ + icon_state = "trainrails_west" + }, +/turf/open/floor/plating/dirt/space, +/area/edina) "udo" = ( /obj/structure/chair, /turf/open/floor/plating/beach/sand, @@ -55869,6 +56018,10 @@ /mob/living/simple_animal/mouse/white, /turf/open/floor/festive/wooden/wooden2, /area/edina/crew_quarters/store/pet) +"ulj" = ( +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/command/heads_quarters/ce) "uma" = ( /obj/structure/bonfire, /turf/open/floor/wood, @@ -55886,9 +56039,17 @@ /obj/effect/decal/festive/fairylights, /turf/open/indestructible/airblock, /area/science) +"uyg" = ( +/obj/effect/landmark/start/head_of_security, +/turf/open/floor/carpet/red, +/area/command/heads_quarters/hos) "uAY" = ( /turf/closed/festive/redbrick/redbrickcornersw, /area/commons/dorms) +"uBp" = ( +/obj/structure/flora/rock/pile/icy, +/turf/open/floor/grass, +/area/edina) "uBB" = ( /obj/structure/closet/crate/freezer{ desc = "A small crate with a cooling system, keeps fresh produce chilled."; @@ -55962,6 +56123,9 @@ "uZS" = ( /turf/open/indestructible/cobble, /area/edina) +"vdN" = ( +/turf/open/floor/carpet/orange, +/area/command/heads_quarters/ce) "vgD" = ( /obj/structure/sign/directions/cells, /turf/closed/wall/mineral/iron, @@ -56012,9 +56176,7 @@ /area/edina) "vAa" = ( /obj/structure/fluff/lightpost/light, -/turf/open/floor/plating/dirt{ - initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293.15" - }, +/turf/open/floor/plating/dirt/space, /area/edina) "vBV" = ( /obj/structure/window/reinforced{ @@ -56284,6 +56446,16 @@ }, /turf/open/floor/festive/alleyway, /area/edina) +"xcA" = ( +/obj/effect/festive/street/streetlinewest, +/obj/effect/turf_decal/arrows/white{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/festive/cobblestone, +/area/edina/street/primary/perimeter) "xkz" = ( /obj/effect/festive/street/streetlineem, /mob/living/simple_animal/jacq/car_spawner, @@ -56329,11 +56501,22 @@ }, /turf/open/floor/plating/beach/sand, /area/edina) +"xyb" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/festive/whitebrick{ + color = "#967832" + }, +/area/cargo/storage) "xyu" = ( /obj/effect/decal/festive/fairylights, /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/indestructible, /area/cargo/warehouse) "xzs" = ( @@ -56352,6 +56535,15 @@ /obj/item/phone, /turf/open/floor/wood, /area/maintenance/bar) +"xFf" = ( +/obj/structure/bed/double{ + dir = 1 + }, +/obj/item/bedsheet/ce/double{ + dir = 1 + }, +/turf/open/floor/wood, +/area/command/heads_quarters/ce) "xGM" = ( /obj/structure/table/wood/fancy/red, /obj/item/reagent_containers/food/snacks/waffles, @@ -56428,6 +56620,29 @@ /obj/item/phone, /turf/open/floor/carpet/red, /area/maintenance/bar) +"yiY" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/food/drinks/bottle/patron{ + pixel_x = -6; + pixel_y = 16 + }, +/obj/item/reagent_containers/food/drinks/bottle/absinthe/premium{ + pixel_x = 7; + pixel_y = 14 + }, +/obj/item/reagent_containers/food/drinks/bottle/fernet{ + pixel_y = 11 + }, +/obj/item/reagent_containers/food/drinks/bottle/gin{ + pixel_x = -7; + pixel_y = 3 + }, +/obj/item/reagent_containers/food/drinks/bottle/whiskey{ + pixel_x = 7; + pixel_y = 4 + }, +/turf/open/floor/wood, +/area/maintenance/bar) "yjk" = ( /obj/structure/table, /obj/item/reagent_containers/food/condiment/saltshaker{ @@ -60281,7 +60496,7 @@ aad aad aac aZu -btg +kld cAM cAQ aac @@ -60538,10 +60753,10 @@ aad aad aac aZu -btg +kld cAM cAQ -btg +kld aZu aac aac @@ -60795,10 +61010,10 @@ aad aad aac aZu -btg +kld cAM cAQ -btg +kld aZu aac aac @@ -61052,10 +61267,10 @@ aad aad aac aZu -btg +kld cAM cAQ -btg +kld aZu aac aac @@ -61309,10 +61524,10 @@ aal aad aad aZu -btg +kld cAM cAQ -btg +kld aZu aac aac @@ -64542,13 +64757,13 @@ aoQ aoQ azc aoQ -azX +hgb aoQ aoQ aoQ azc aoQ -azX +hgb aoQ aoQ aoQ @@ -65544,12 +65759,12 @@ aal aal aad aad -aad -aad -aad -aad -aad -aad +amu +amu +amu +amu +amu +amu akI aoQ atB @@ -65801,12 +66016,12 @@ aal aal aad aad -aad -aad -aad -aad -aad -aad +amu +awA +bBo +rGH +xFf +fyx akI aoQ atA @@ -66058,12 +66273,12 @@ aal aal aad aad -aad -aad -aad -aad -aad -aad +amu +ayY +fUG +vdN +vdN +ulj akI asK aoQ @@ -66141,7 +66356,7 @@ bqC bqA btZ bvn -bww +bwv bqA aal aal @@ -66315,12 +66530,12 @@ aal aal aad aad -aad -aad -aad -aad -aad -aad +amu +aMH +vdN +hBk +vdN +qUP ajK ajK ajK @@ -66572,12 +66787,12 @@ aal aal aal aad -aad -aad -aad -aad -aad -aad +amu +aMH +rGH +rGH +rGH +fGL ajK arf arS @@ -66830,7 +67045,7 @@ aal aal aad amu -amu +bww amu amu amu @@ -67687,54 +67902,54 @@ bqA bqA aal alK -btf -btf -btf +pNf +pNf +pNf bjS +pNf +pNf +pNf +pNf +pNf +pNf +pNf +pNf +pNf +pNf +pNf +pNf +pNf +pNf +pNf +pNf +pNf btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btf -btg +pNf +pNf +pNf +pNf +pNf +pNf +pNf +pNf +pNf +pNf +pNf +pNf +pNf +pNf +pNf +pNf +pNf +pNf +pNf +pNf +pNf +pNf +pNf +pNf +pNf +kld cAM cAQ ctQ @@ -67944,54 +68159,54 @@ bqA aal aal brL -aaf -aaf -aaf +ucp +ucp +ucp brK -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp cAM cAQ ctQ @@ -68201,54 +68416,54 @@ bqH aal aal brL -aag -aag -aag +dgn +dgn +dgn brM +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn cAM cAQ ctQ @@ -68407,7 +68622,7 @@ aCM aoQ aoQ aoQ -aBM +toY aoQ aIf aoQ @@ -68501,11 +68716,11 @@ ams ams ams bIe -aah -aah -aah -aah -btg +gnR +gnR +gnR +gnR +kld cAM cAQ ctQ @@ -70770,7 +70985,10 @@ aIz aGl aGl aGl -ckP +aGl +aGl +aGl +aIz aGl aGl aGl @@ -70788,9 +71006,6 @@ aGl aGl aGl aGl -aGl -aGl -aGl ckP aGl aGl @@ -72512,7 +72727,7 @@ aVf aZr aTU bco -aJq +bVp bfl bkl brV @@ -72524,8 +72739,8 @@ bkl bkl brV bkl -aGl -aGl +bkl +bkl bkl bkl bkl @@ -72543,7 +72758,7 @@ bkl bkl bkl bkl -caz +brV bkl bkl bkl @@ -72554,7 +72769,7 @@ brV bkl bkl bkl -aGl +bkl cfb cgD cjT @@ -72608,7 +72823,7 @@ aWt aRT aFK aVo -ckP +aGl biS chD chP @@ -73122,7 +73337,7 @@ aVo aZH aFK bdM -aGl +ckP aGl acQ acQ @@ -74921,7 +75136,7 @@ aVo aQG aFK aVo -ckP +aGl cpE chJ chU @@ -75435,7 +75650,7 @@ aVo aQG aUY aVo -aGl +ckP cpE chK bdI @@ -75911,10 +76126,10 @@ bjY bdd bdd bdd +oWb bdd bdd -bdd -bdd +oWb bdd bdd bdd @@ -75928,7 +76143,7 @@ bIi bIi bIi bIi -bIi +cnS cjY bHZ bUJ @@ -76153,7 +76368,7 @@ bel bfC aVv bFs -bFu +coJ bNb bNb bNb @@ -76410,7 +76625,7 @@ bem bfC aVv bFs -bFu +coJ bNt bNt bNt @@ -76667,7 +76882,7 @@ aYd bfD aVv bFs -bHZ +bHQ bNu bkF blD @@ -76924,7 +77139,7 @@ aYd bfE aVv bFs -bHZ +bHQ bNw bkG blE @@ -77181,7 +77396,7 @@ ben bfF aVv bFs -bHZ +bHQ bNu bkH blF @@ -77438,7 +77653,7 @@ beo bfG aVv bFs -bHZ +bHQ bNu bkI blG @@ -77695,7 +77910,7 @@ bep bfH aVv bFs -bHZ +bHQ bNu bkJ blH @@ -77952,7 +78167,7 @@ aYe bfI aVv bFs -bHZ +bHQ bNu bkG blI @@ -78209,7 +78424,7 @@ bbw aVv aVv bFs -bHZ +bHQ bNu bkF blJ @@ -78409,11 +78624,11 @@ amF amF amF amF -amF asL amF amF amF +amF adw aFq aLG @@ -78460,13 +78675,13 @@ cdw cdw cdw cdw -ezS -aKT -ezS +cdw +caz cdw cdw -bFu -bFu +cdw +coI +cvT bNb bkK blK @@ -79250,11 +79465,11 @@ aTt aUh bwE bxo -byk +hLe bzd bzO bAv -bBo +bBp bCf bDe bbR @@ -79269,8 +79484,8 @@ bFw bNM bPs bRk -bnJ -bTk +kJH +bTl akc cub aGl @@ -79478,7 +79693,7 @@ aPL aMb aSD aTf -aSG +cTr aUe aUH aMb @@ -79506,8 +79721,8 @@ aVt aTt aUh bwE -bxn -byk +kaF +hLe bzd bzP bAw @@ -79732,10 +79947,10 @@ aOP aOP aOP aOP -aMb +aRW aSE -aTg -aTg +aUf +aUf aUf aUI beI @@ -79763,8 +79978,8 @@ aVt aTt aUh bwD -bxn -byk +okc +pRa bze bzQ bAx @@ -80432,8 +80647,8 @@ aal aal aal aeY -afE -agf +agJ +agh agH ahn ahL @@ -80689,7 +80904,7 @@ aal acZ aal aeY -afF +agh agg agI aho @@ -80946,7 +81161,7 @@ aal aal aal aeY -afG +agH agh agJ ahn @@ -81291,8 +81506,8 @@ aYf aVO aVO aVO -aVO -bGo +bTk +bFZ bHZ bjZ bkO @@ -82879,8 +83094,8 @@ bUd ecw bUd ecw -bUd -cnS +nxe +cnO bdS coU aFK @@ -82993,7 +83208,7 @@ aal aba acj acj -aba +bGo aba aba aeG @@ -83645,10 +83860,10 @@ bUf bUR bUS bWT -bXO +mRs bXO bWT -caa +ejZ caa bUf cnO @@ -88977,7 +89192,7 @@ aKo aMv aKT aws -aMH +aRF aNw aOm aPj @@ -89886,7 +90101,7 @@ alv aTz apa apa -apa +aTy apa apa apa @@ -91514,7 +91729,7 @@ aEA aEA aEA aEA -aEW +aEA aEA aEA aEA @@ -91626,7 +91841,7 @@ ctv ctz cts ctF -ctH +cIQ pVt wQO bvU @@ -91942,7 +92157,7 @@ alv aTz apa apa -apa +aTy apa apa apa @@ -93314,7 +93529,7 @@ aCT aCT aCT aCT -aFa +aCT aCT aCT aCT @@ -93650,7 +93865,7 @@ cra cpr crE crS -clh +bke csC clt clt @@ -93675,8 +93890,8 @@ clt clt clt cvN -ctH -cvT +cvQ +cvR ctu cty ctu @@ -93829,7 +94044,7 @@ aED aED aED aED -aED +aEG alo akz akQ @@ -93932,8 +94147,8 @@ csP ccV csW cnO -aGl -aQG +bdS +coU aFK aVo aZH @@ -94189,8 +94404,8 @@ cde cde csX cnO -aGl -aQG +bdS +coU aFK cpq aQG @@ -94447,7 +94662,7 @@ cde ctf cnO bdS -aQG +coU aFK aVo aQG @@ -94697,14 +94912,14 @@ ccV ccV ccV rxL -cdh +iQh cjR cde cde ccV cnH bdS -aQG +coU aFK aVo aQG @@ -94960,8 +95175,8 @@ cdf cdf ctg cvO -aGl -aQG +bdS +coU aUm aVo aQG @@ -95217,8 +95432,8 @@ cdi cdi cto bgn -aGl -aQG +bdS +coU aFK aVo aQG @@ -95474,14 +95689,14 @@ cde cde ccV cnO -aGl -aQG +cow +coU aFK aVo aQG aFK aVo -aGl +bfc cpF aal aal @@ -95732,7 +95947,7 @@ cde csX cnO bdS -aQG +coU aFK aVo aQG @@ -95747,7 +95962,7 @@ bAd bAd bAd byv -btg +kld cAM cAQ ctQ @@ -95780,7 +95995,7 @@ aTz aTz bKC cbh -apa +aTy alv cgU ciL @@ -95956,7 +96171,7 @@ cdy cdy cdy clw -coH +cre crf cpc crW @@ -95989,7 +96204,7 @@ cde ctp cnO bdS -aQG +coU aFK aVo aQG @@ -96004,7 +96219,7 @@ cxA cxA cxA aSx -btg +kld cAM cAQ ctQ @@ -96245,14 +96460,14 @@ cde cde ctf cnO -coI -aQG +bdS +coU aFK aVo aQG aFK bdM -bfc +aGl cpF cxA cyb @@ -96261,7 +96476,7 @@ czg cyc cxA aSx -btg +kld cAM cAQ ctQ @@ -96502,8 +96717,8 @@ evB evB ccV cnO -aGl -aQG +bdS +coU aFK aVo aQG @@ -96518,7 +96733,7 @@ cyc cyc cxA aSx -btg +kld cAM cAQ ctQ @@ -96727,7 +96942,7 @@ ceL ceL ceL clL -cpc +cxF cpc cpc cpc @@ -96760,7 +96975,7 @@ ccV ccV cnO bdS -aSB +tWU aFK aWt aQG @@ -96775,7 +96990,7 @@ cyd cyd cxC aSx -btg +kld cAM cAQ ctQ @@ -96991,7 +97206,7 @@ cpc cpc cpc crW -coH +cre coH clv cmk @@ -97016,7 +97231,7 @@ clv clv clv cvP -aHh +inO cwU cwZ cwZ @@ -97032,7 +97247,7 @@ cye cye cxD aSx -btg +kld cAM cAQ ctQ @@ -97273,8 +97488,8 @@ clz clz clz bgn -coI -aQG +cow +coU aFK aVo aZH @@ -97289,7 +97504,7 @@ czh czh cxD aSx -btg +kld cAM cAQ ctQ @@ -97530,8 +97745,8 @@ cmB cmB cmB coh -aMl -aSw +xcA +coY aFK aYV aSw @@ -97546,7 +97761,7 @@ cyc cyc cxE aSx -btg +kld cAM cAQ ctQ @@ -97762,7 +97977,7 @@ cpc cpc cpc cpc -cpc +cxF ctS cmg cmg @@ -97787,14 +98002,14 @@ cmg cmg cmg cnM -aFK -aFK +cht +ceP aFK aFK aFK aFK aVo -beB +pyF cpF cxA cxA @@ -97803,7 +98018,7 @@ czi czi cAk aSx -btg +kld cAM cAQ ctQ @@ -98044,8 +98259,8 @@ cmh cmh cnF cnN -aIO -aPv +cox +coZ aFK aVe aPv @@ -98060,7 +98275,7 @@ cyM cyM cxA aSx -btg +kld cAM cAQ ctQ @@ -98301,14 +98516,14 @@ clz clz clz bgn -coJ -aSB +coy +tWU aFK aWt aQG aFK aVo -cxs +beB cpF cnB cxA @@ -98317,7 +98532,7 @@ czj cyM cxA aSx -btg +kld cAM cAQ ctQ @@ -98533,7 +98748,7 @@ cuI cuJ cuH cuK -cuF +cyr cuL cuM aZa @@ -98558,8 +98773,8 @@ cmi cmi cmi coi -aGl -aTy +bdS +coX cpo aTV aTV @@ -98574,7 +98789,7 @@ cyM cyM cxA aSx -btg +kld cAM cAQ ctQ @@ -98831,7 +99046,7 @@ czk cxA cxA aSx -btg +kld cAM cAQ ctQ @@ -99088,7 +99303,7 @@ cyM czG cxA cAE -btg +kld cAM cAQ ctQ @@ -99345,7 +99560,7 @@ czl czl cxA cAF -btg +kld cAM cAQ ctQ @@ -99602,7 +99817,7 @@ cxA cxA cxA cAG -btg +kld cAM cAQ ctQ @@ -99844,7 +100059,7 @@ cat ceZ cok coK -aQG +coW aFK aVo aQG @@ -101360,7 +101575,7 @@ crb cmv bQG crb -ckO +cyt csN ciz cuN @@ -101608,8 +101823,8 @@ bWs bWs bwz bWs -bWs -cho +bUs +ccr ckO cmv bQG @@ -102659,7 +102874,7 @@ bSv bSR bTv bDN -bQO +mtg bVF cej cer @@ -102916,7 +103131,7 @@ bSv bSR bTw bDN -bQO +txb bVG cek ces @@ -103173,7 +103388,7 @@ cjL cjN bOM bDN -bQO +txb bVG cel cet @@ -103430,7 +103645,7 @@ cbC cjv bDB bEP -bQO +txb bVI cem ceu @@ -103687,7 +103902,7 @@ cbC cjv bEP bEP -bQO +txb bVJ bVJ bVJ @@ -103699,7 +103914,7 @@ cwP cwP cwQ cwS -aQG +fCo aFK aVo aQG @@ -103708,11 +103923,11 @@ aVo aGl cpF cvS -cyr -cyQ -cyQ -czP -cAr +cym +cwl +cwl +czM +cwl cvS brL cAM @@ -103944,9 +104159,9 @@ cbC cjv bEV bEV -bEV -cqC -cqC +tTe +cDt +enm cqC cqC cqC @@ -103966,10 +104181,10 @@ aGl cpF cvS cys -cyW -cyW +cyQ +cyQ czQ -cyW +cwl cvS brL cAM @@ -104097,7 +104312,7 @@ amm amX ano arF -apb +uyg apb aqB ard @@ -104203,7 +104418,7 @@ bTz bTQ bUt bDF -bDF +xyb bDF bDF bDF @@ -104221,11 +104436,11 @@ aFK aVo aGl aGl -cxF -cyl -cwl -cwl -czM +cvS +qcq +cyY +cyY +czS cAs cvS brL @@ -104455,7 +104670,7 @@ ciJ bDF cjJ cck -bQQ +cAr bQQ bQQ bQQ @@ -104478,12 +104693,12 @@ aFK aVo aGl cpF -cvS -cyt +dhz +cym cwl cwl -czM -cyW +kBi +cwl cvS brL cAM @@ -104712,7 +104927,7 @@ bDF bDF cjK ccM -bQQ +cAr bQQ bQQ bQQ @@ -104736,11 +104951,11 @@ aVo bfd cpF cvS -cyn +sOG +yiY cwl +szb cwl -czM -cAu cvS brL cAM @@ -104968,12 +105183,12 @@ cbb cjw cjx bOQ -bQQ -bQQ -bQQ -bQQ -bQQ -bQQ +cyW +cAu +cAw +cAw +cAw +cAw bWK bXE bYs @@ -104995,7 +105210,7 @@ cpF cvS cyu cyX -cyW +cwl czR cAv cvS @@ -105254,7 +105469,7 @@ cyv cyY cyY czS -cAw +cwl cvS brL cAM @@ -105469,8 +105684,8 @@ byT byT byT byT -byT -bUs +cho +bDN bUE bUH bUC @@ -105482,7 +105697,7 @@ ceX bDF cjz bQQ -bQQ +cyW bQQ bOR bQQ @@ -105507,10 +105722,10 @@ coO coO cpM cvS -cym -cwl -cwl -czM +hkj +qzx +qzx +iCT cwl cvS brL @@ -105739,7 +105954,7 @@ bVL bNy bOQ bQQ -bQQ +cyW bQQ bQQ bQQ @@ -105986,7 +106201,7 @@ bBN bCQ bSt bUG -bVp +bSu bSu bSu bSu @@ -105996,7 +106211,7 @@ bSu bSU bTx caD -bQQ +czP bQQ bOR bQQ @@ -106485,7 +106700,7 @@ bSl bSl bnY bpb -bqw +btL bqw bqw bqw @@ -106786,14 +107001,14 @@ aal cvS bSj ccO -cwl +czT cwq cwB cwJ bcC cwV cwV -cwV +rgc czq czT cAq @@ -107050,7 +107265,7 @@ aZh bdu cxH cyx -cwK +kYC czr cwl cAn @@ -107307,7 +107522,7 @@ cwL cwK cwK cwK -cwK +kYC czr cwl cwl @@ -107448,11 +107663,11 @@ amz amz amz amd -awA +awz amd amd amd -ayY +awz amd amd amd @@ -107704,13 +107919,13 @@ aal aal aal aal -aal +amd ayL +amd aal -aal -aal -aal -aal +amd +ayL +amd aal aal aal @@ -107794,19 +108009,19 @@ aal aal aal bOY -aae -aae -aae -aae +fXg +fXg +fXg +fXg bTY -aae -aae -aae -aae -aae -aae -aae -aae +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg cbJ aal aal @@ -107933,9 +108148,9 @@ aac aac aac aac -btg -btg -btg +kld +kld +kld ctQ aal aal @@ -107962,7 +108177,7 @@ aal aal aal aal -aal +hKj aal aal aal @@ -108051,19 +108266,19 @@ aal aal aal brL -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld ctQ aal aal @@ -108166,38 +108381,38 @@ aad aad aac aZu -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld aac -btg -btg -btg -btg -aae -aae -aae -aae +kld +kld +kld +kld +fXg +fXg +fXg +fXg bxO bxO bxO @@ -108205,142 +108420,142 @@ bxO bxO bxO bxO -aae -aae -aae +fXg +fXg +fXg apI -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg apI -aae -aae -aae -aae -aae -aae -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae +fXg +fXg +fXg +fXg +fXg +fXg +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg apI -aae -aae -btg +fXg +fXg +kld bKf -btg -aae -aae -aae +kld +fXg +fXg +fXg apI -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg apI -aae -aae -aae -aae -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -btg +fXg +fXg +fXg +fXg +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +fXg +kld cAM cAQ ctQ @@ -108423,181 +108638,181 @@ aad aad aac aZu -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp +ucp cAP cAQ ctQ @@ -108680,182 +108895,182 @@ aad aad aac aZu -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn +dgn cAS ctQ aal @@ -108937,38 +109152,38 @@ aad aad aac aZu -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld aac -btg -btg -btg -btg -aah -aah -aah -aah +kld +kld +kld +kld +gnR +gnR +gnR +gnR bLQ bLQ bLQ @@ -108976,144 +109191,144 @@ bLQ bLQ bLQ bLQ -aah -aah -aah +gnR +gnR +gnR apJ -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR apJ -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR apJ -aah -aah -aah -aah -aah -aah -aah -aah +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR apJ -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR apJ -aah -aah -aah -aah -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -aah -btg -btg -btg +gnR +gnR +gnR +gnR +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +gnR +kld +kld +kld ctQ aad aad @@ -109219,8 +109434,8 @@ aac aac aac aac -btg -btg +kld +kld ctQ aal aal @@ -109336,19 +109551,19 @@ aal aal aal brL -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg -btg +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld +kld ctQ aal aal @@ -109369,8 +109584,8 @@ aad aad aad brL -btg -btg +kld +kld ctQ aad aad @@ -109627,7 +109842,7 @@ aad aad brL vAa -btg +kld ctQ aad aad @@ -109883,8 +110098,8 @@ aad aad aad brL -btg -btg +kld +kld ctQ aad aad @@ -110140,8 +110355,8 @@ aad aad aad brL -btg -btg +kld +kld ctQ aad aad @@ -110397,8 +110612,8 @@ aad aad aad brL -btg -btg +kld +kld ctQ aad aad @@ -111149,7 +111364,7 @@ cqD aEQ aTz cpt -cpt +jSU aad aad aad @@ -111407,7 +111622,7 @@ crJ aTz cpt cpt -cpt +uBp aad aad aad @@ -111663,7 +111878,7 @@ aER crK aTz cpt -cpt +rKC cpt aad aad @@ -112175,7 +112390,7 @@ apa apa adO apa -apa +aTy cpt cpt cpt @@ -112691,7 +112906,7 @@ cqH aDn aTz cpt -cpt +ftC cpt aad aad @@ -112941,7 +113156,7 @@ aad aad aTz cnl -cnl +tRh apa cqf aDn @@ -113461,7 +113676,7 @@ aTz aTz aTz aTz -cpt +nXv cpt aad aad @@ -113713,7 +113928,7 @@ aad aad aad aad -cpt +mTB cpt cpt cpt diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 32e03957f5..48054115e6 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -19429,6 +19429,10 @@ /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 4 }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = 24 + }, /turf/open/floor/plasteel/dark/corner, /area/hallway/primary/starboard) "bzi" = ( @@ -21200,10 +21204,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = 24 - }, /obj/effect/turf_decal/tile/yellow{ dir = 4 }, @@ -24661,14 +24661,14 @@ /turf/closed/wall, /area/maintenance/disposal/incinerator) "bZD" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Incinerator Access"; - req_access_txt = "12" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/yellow{ icon_state = "1-2" }, +/obj/machinery/door/airlock/atmos{ + name = "Turbine Access"; + req_access_txt = "32" + }, /turf/open/floor/plating, /area/maintenance/disposal/incinerator) "bZE" = ( @@ -25285,7 +25285,10 @@ icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, /area/maintenance/disposal/incinerator) "caZ" = ( /obj/structure/cable/yellow{ @@ -25300,7 +25303,7 @@ c_tag = "Atmospherics - Incinerator"; name = "atmospherics camera" }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/disposal/incinerator) "cba" = ( /obj/machinery/power/smes{ @@ -25310,7 +25313,7 @@ /obj/structure/cable/yellow{ icon_state = "0-8" }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/disposal/incinerator) "cbp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -25905,7 +25908,7 @@ /obj/machinery/atmospherics/pipe/simple/dark/visible{ dir = 6 }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/disposal/incinerator) "ccU" = ( /obj/structure/table/wood/poker, @@ -44716,9 +44719,6 @@ /turf/open/floor/plasteel/dark, /area/hallway/primary/central) "cVp" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/tile/yellow{ dir = 4 }, @@ -44812,12 +44812,8 @@ /turf/open/floor/carpet, /area/service/theater) "cWn" = ( -/obj/machinery/door/airlock/atmos/glass{ - name = "Atmospherics Monitoring"; - req_access_txt = "24" - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/structure/disposalpipe/segment{ + dir = 6 }, /turf/open/floor/plasteel, /area/engineering/atmos) @@ -47801,24 +47797,11 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/aisat/exterior) "dtk" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, /obj/effect/turf_decal/tile/yellow{ dir = 4 }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/machinery/button/door{ - id = "atmos"; - name = "Atmospherics Lockdown"; - pixel_x = 26; - pixel_y = -26; - req_access_txt = "24" - }, -/turf/open/floor/plasteel, +/obj/machinery/suit_storage_unit/atmos, +/turf/open/floor/plasteel/dark/corner, /area/engineering/atmos) "dtl" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -49353,12 +49336,8 @@ /area/maintenance/port) "dRb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/atmos/glass{ - name = "Atmospherics Monitoring"; - req_access_txt = "24" +/obj/structure/cable/yellow{ + icon_state = "2-8" }, /turf/open/floor/plasteel, /area/engineering/atmos) @@ -50247,13 +50226,6 @@ }, /turf/open/floor/plasteel/dark, /area/engineering/main) -"erz" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel, -/area/engineering/atmos) "erD" = ( /obj/machinery/reagentgrinder, /obj/structure/table/glass, @@ -52060,7 +52032,9 @@ dir = 8 }, /obj/machinery/pipedispenser/disposal, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engineering/atmos) "fpr" = ( @@ -52546,12 +52520,8 @@ /turf/open/floor/plasteel/white, /area/science/circuit) "fFR" = ( -/obj/structure/closet/crate, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/camera{ - c_tag = "Atmospherics - Entrance" - }, -/turf/open/floor/plasteel, +/turf/closed/wall, /area/engineering/atmos) "fFY" = ( /obj/structure/cable, @@ -52799,7 +52769,12 @@ /obj/structure/cable/yellow{ icon_state = "2-4" }, -/obj/machinery/light/small, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engineering/atmos) "fNh" = ( @@ -52807,6 +52782,9 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/camera{ + c_tag = "Atmospherics - Entrance" + }, /turf/open/floor/plasteel, /area/engineering/atmos) "fNk" = ( @@ -53119,6 +53097,12 @@ }, /turf/open/floor/plasteel, /area/service/hydroponics) +"fYL" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/engineering/atmos) "fZR" = ( /obj/machinery/seed_extractor, /obj/effect/turf_decal/stripes/line{ @@ -53158,9 +53142,6 @@ /obj/machinery/firealarm{ pixel_y = 24 }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /obj/machinery/pipedispenser, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/camera{ @@ -53170,6 +53151,9 @@ /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 4 }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, /turf/open/floor/plasteel, /area/engineering/atmos) "gbt" = ( @@ -53738,7 +53722,7 @@ dir = 6 }, /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "2-4" }, /turf/open/floor/plasteel, /area/engineering/atmos) @@ -54301,14 +54285,20 @@ /turf/open/floor/plasteel, /area/commons/dorms) "gGc" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 }, -/obj/structure/cable/yellow{ - icon_state = "1-8" +/obj/effect/turf_decal/tile/yellow{ + dir = 4 }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel, +/obj/machinery/button/door{ + id = "atmos"; + name = "Atmospherics Lockdown"; + pixel_x = 26; + req_access_txt = "24" + }, +/turf/open/floor/plasteel/dark/corner, /area/engineering/atmos) "gGH" = ( /obj/structure/cable/yellow{ @@ -54897,8 +54887,11 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, /obj/machinery/suit_storage_unit/atmos, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark/corner, /area/engineering/atmos) "hdR" = ( /obj/structure/chair/stool{ @@ -55730,6 +55723,12 @@ /area/ai_monitored/aisat/exterior) "hAI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engineering/atmos) "hAL" = ( @@ -56917,6 +56916,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/light/small, /turf/open/floor/plasteel, /area/engineering/atmos) "iiE" = ( @@ -57457,11 +57457,11 @@ /turf/open/floor/plating, /area/service/chapel/main) "ixJ" = ( -/obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/yellow/visible, /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, +/obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/engineering/atmos) "ixL" = ( @@ -60777,7 +60777,12 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, -/turf/closed/wall, +/obj/machinery/door/airlock/atmos/glass{ + name = "Atmospherics Monitoring"; + req_access_txt = "24" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel, /area/engineering/atmos) "kuk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -61962,12 +61967,13 @@ /area/command/bridge) "kWW" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/machinery/light/small{ + dir = 8 }, -/turf/closed/wall, +/obj/structure/closet/crate, +/turf/open/floor/plasteel, /area/engineering/atmos) "kXd" = ( /obj/machinery/power/terminal, @@ -63117,14 +63123,13 @@ /turf/open/floor/plasteel, /area/commons/locker) "lFH" = ( -/obj/machinery/light/small{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/suit_storage_unit/atmos, -/turf/open/floor/plasteel, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/plasteel/dark/corner, /area/engineering/atmos) "lFQ" = ( /obj/structure/chair/office/dark{ @@ -63624,10 +63629,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 10 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 4 - }, -/turf/closed/wall, +/obj/machinery/pipedispenser/disposal/transit_tube, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, /area/engineering/atmos) "lUv" = ( /obj/structure/noticeboard{ @@ -63765,10 +63769,7 @@ /area/commons/fitness/recreation) "lXt" = ( /obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 + icon_state = "1-8" }, /turf/open/floor/plasteel, /area/engineering/atmos) @@ -65448,6 +65449,10 @@ /obj/structure/cable/yellow{ icon_state = "1-8" }, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engineering/atmos) "mSL" = ( @@ -67276,10 +67281,6 @@ /obj/machinery/light_switch{ pixel_x = -26 }, -/obj/machinery/pipedispenser/disposal/transit_tube, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 4 }, @@ -67738,6 +67739,13 @@ name = "Atmospherics Monitoring"; req_access_txt = "24" }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor, /turf/open/floor/plasteel, /area/engineering/atmos) "olW" = ( @@ -68249,9 +68257,6 @@ /turf/open/floor/plasteel, /area/service/bar) "oBF" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/engineering/atmos) @@ -68954,10 +68959,16 @@ /turf/open/floor/plasteel, /area/commons/dorms) "oWF" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/airlock/atmos/glass{ + name = "Atmospherics Monitoring"; + req_access_txt = "24" }, -/turf/closed/wall, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel, /area/engineering/atmos) "oWR" = ( /obj/effect/spawner/lootdrop/maintenance, @@ -72841,6 +72852,12 @@ /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plasteel/dark/corner, /area/engineering/atmos) "qXd" = ( @@ -73117,12 +73134,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 4 }, -/obj/machinery/door/airlock/atmos/glass{ - name = "Distribution Loop"; - req_access_txt = "24" - }, /obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plasteel, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, /area/engineering/atmos) "rdv" = ( /obj/effect/turf_decal/stripes/line, @@ -77268,6 +77282,13 @@ /obj/structure/lattice/catwalk, /turf/open/space, /area/solars/starboard/fore) +"tzt" = ( +/obj/machinery/power/floodlight, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/engineering/atmos) "tAp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 @@ -77390,6 +77411,9 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, /turf/open/floor/plasteel, /area/engineering/atmos) "tFJ" = ( @@ -77416,6 +77440,16 @@ }, /turf/open/floor/plasteel/dark, /area/security/office) +"tGd" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/dark/visible, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel, +/area/engineering/atmos) "tGD" = ( /obj/structure/closet/crate, /obj/structure/extinguisher_cabinet{ @@ -78818,8 +78852,11 @@ /turf/open/floor/plasteel/dark, /area/cargo/office) "usM" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 + dir = 4 }, /turf/open/floor/plasteel, /area/engineering/atmos) @@ -79128,11 +79165,14 @@ /turf/open/floor/wood, /area/commons/vacant_room/office) "uED" = ( -/obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/manifold/cyan/visible{ dir = 1 }, -/turf/open/floor/plating, +/obj/machinery/door/airlock/atmos/glass{ + name = "Atmospherics Monitoring"; + req_access_txt = "24" + }, +/turf/open/floor/plasteel, /area/engineering/atmos) "uFM" = ( /obj/machinery/power/emitter, @@ -80575,6 +80615,12 @@ dir = 4 }, /obj/effect/landmark/start/atmospheric_technician, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engineering/atmos) "vzs" = ( @@ -82840,7 +82886,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, -/turf/closed/wall, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, /area/engineering/atmos) "wKo" = ( /obj/effect/turf_decal/stripes/line, @@ -84685,9 +84732,8 @@ /turf/open/floor/plasteel, /area/science/mixing) "xHm" = ( -/obj/machinery/holopad, -/obj/structure/cable/yellow{ - icon_state = "1-4" +/obj/structure/disposalpipe/segment{ + dir = 9 }, /turf/open/floor/plasteel, /area/engineering/atmos) @@ -126368,7 +126414,7 @@ qxd jJw usM lXt -xHm +lzQ tyC kLr kdi @@ -126625,7 +126671,7 @@ odq ipm hAI oBF -erz +oBF jxI kLr qDJ @@ -126881,9 +126927,9 @@ bvh qxd oNX vzb -iix -woN -tyC +mMn +cWn +xHm kLr iix sKv @@ -127139,7 +127185,7 @@ qxd wtG qWR cVp -woN +gGc dtk lFH hdJ @@ -127395,8 +127441,8 @@ iLe qxd oBX olw -oWF -cWn +sKv +sKv uKL ktV wKg @@ -127653,7 +127699,7 @@ sKv oay fNf kWW -gGc +uKL grX hop ldI @@ -127663,7 +127709,7 @@ ooB ibJ ibJ ibJ -ibJ +tGd ibJ ibJ omb @@ -127910,7 +127956,7 @@ hZe mZD mSB dRb -hAI +oWF tFH tfk sfM @@ -127920,7 +127966,7 @@ eCZ mMn mMn mMn -mMn +fYL mMn mMn eWY @@ -128177,7 +128223,7 @@ pcs mMn mMn mMn -mMn +fYL mMn mMn mMn @@ -128424,7 +128470,7 @@ uhB jiZ mHn mHn -fGc +mHn rdg fGc lHN @@ -128434,7 +128480,7 @@ mMn mMn mMn mMn -mMn +fYL mMn mMn mMn @@ -128691,7 +128737,7 @@ mMn mMn mMn mMn -mMn +tzt mMn mMn mMn diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index 92f9ff0c53..cef539c3b6 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -1282,14 +1282,14 @@ /obj/structure/cable/white{ icon_state = "0-2" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 6 - }, /obj/effect/spawner/structure/window/plasma/reinforced, /obj/machinery/door/poddoor/shutters/radiation/preopen{ id = "engsm"; name = "Radiation Chamber Shutters" }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, /turf/open/floor/plating, /area/engineering/gravity_generator) "abR" = ( @@ -1709,6 +1709,9 @@ id = "engsm"; name = "Radiation Chamber Shutters" }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plating, /area/engineering/main) "acC" = ( @@ -6352,10 +6355,9 @@ /turf/open/floor/plasteel, /area/security/brig) "ajX" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/sand/plating, +/obj/machinery/atmospherics/pipe/simple/orange/visible, /turf/open/floor/plating, -/area/asteroid/nearstation) +/area/engineering/atmos) "ajY" = ( /obj/structure/cable/white{ icon_state = "4-8" @@ -6941,10 +6943,11 @@ /turf/open/floor/plasteel, /area/cargo/storage) "akM" = ( +/obj/item/chair, /obj/item/stack/ore/silver, /obj/item/stack/ore/iron, -/turf/open/floor/plating/asteroid, -/area/asteroid/nearstation) +/turf/open/floor/plating, +/area/engineering/atmos) "akN" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 8 @@ -6952,9 +6955,12 @@ /turf/closed/wall/r_wall, /area/command/heads_quarters/ce) "akO" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/command/heads_quarters/ce) +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 4 + }, +/obj/structure/lattice, +/turf/open/floor/plating/asteroid/airless, +/area/asteroid/nearstation) "akP" = ( /obj/machinery/photocopier, /obj/effect/turf_decal/tile/brown{ @@ -7612,15 +7618,18 @@ /turf/open/floor/wood, /area/service/lawoffice) "alU" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, /turf/open/floor/wood, /area/service/lawoffice) "alV" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 - }, /obj/structure/window/reinforced/spawner/east, /obj/structure/chair, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/wood, /area/service/lawoffice) "alW" = ( @@ -8134,6 +8143,7 @@ /obj/structure/window/reinforced/spawner, /obj/item/clipboard, /obj/item/folder/red, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/wood, /area/service/lawoffice) "amR" = ( @@ -8439,18 +8449,10 @@ /turf/open/floor/plating, /area/cargo/miningdock) "anu" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command/glass{ - name = "Chief Engineer"; - req_access_txt = "56" - }, -/obj/effect/turf_decal/stripes/line{ +/obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel, +/turf/closed/wall/r_wall, /area/command/heads_quarters/ce) "anv" = ( /obj/effect/turf_decal/stripes/end{ @@ -8460,6 +8462,9 @@ dir = 1 }, /obj/effect/turf_decal/tile/yellow, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 10 + }, /turf/open/floor/plasteel, /area/command/heads_quarters/ce) "anw" = ( @@ -8652,6 +8657,8 @@ pixel_x = -26 }, /obj/item/rcl/pre_loaded, +/obj/item/clothing/glasses/meson/gar, +/obj/machinery/atmospherics/pipe/simple/orange/visible, /turf/open/floor/plasteel/dark, /area/command/heads_quarters/ce) "anL" = ( @@ -9033,6 +9040,9 @@ dir = 4; pixel_x = -23 }, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 5 + }, /turf/open/floor/plasteel/dark, /area/command/heads_quarters/ce) "aop" = ( @@ -9054,6 +9064,9 @@ dir = 1; pixel_y = -24 }, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, /turf/open/floor/plasteel, /area/command/heads_quarters/ce) "aoq" = ( @@ -9662,9 +9675,6 @@ /obj/structure/cable/white{ icon_state = "1-4" }, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -9672,6 +9682,9 @@ dir = 1 }, /obj/effect/turf_decal/tile/yellow, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, /turf/open/floor/plasteel, /area/command/heads_quarters/ce) "app" = ( @@ -9690,9 +9703,6 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -9708,6 +9718,10 @@ pixel_x = 8; pixel_y = 32 }, +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, /turf/open/floor/plasteel/dark, /area/command/heads_quarters/ce) "apr" = ( @@ -9726,7 +9740,7 @@ name = "Chief Engineer"; req_access_txt = "56" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ +/obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 }, /turf/open/floor/plasteel, @@ -9747,8 +9761,8 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 }, /turf/open/floor/engine, /area/engineering/main) @@ -12490,9 +12504,6 @@ /turf/open/floor/engine/n2, /area/engineering/atmos) "aty" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 4 - }, /obj/machinery/atmospherics/components/binary/pump{ dir = 1; name = "Oxygen to Pure" @@ -13149,11 +13160,14 @@ /turf/open/floor/wood, /area/security/detectives_office) "auv" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 10 +/obj/structure/chair{ + dir = 4 }, -/turf/open/floor/plasteel, -/area/engineering/atmos) +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/open/floor/wood, +/area/service/lawoffice) "auw" = ( /obj/machinery/atmospherics/components/binary/pump{ name = "Pure to Port" @@ -14576,11 +14590,11 @@ /turf/open/floor/plasteel, /area/maintenance/port/aft) "awH" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ +/obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 1 }, -/turf/closed/wall/r_wall, -/area/maintenance/port/aft) +/turf/open/floor/plasteel, +/area/engineering/atmos) "awI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 5 @@ -14608,15 +14622,12 @@ /turf/open/floor/plasteel/dark/corner, /area/engineering/atmos) "awL" = ( -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ dir = 4 }, -/turf/open/floor/plating, -/area/maintenance/port/aft) +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/open/floor/plasteel, +/area/engineering/atmos) "awM" = ( /obj/structure/cable/white{ icon_state = "1-2" @@ -14900,9 +14911,6 @@ lootcount = 3; name = "3maintenance loot spawner" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -14926,17 +14934,13 @@ /turf/open/floor/wood, /area/service/library) "axk" = ( -/obj/structure/girder, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 6 }, -/turf/open/floor/plating, -/area/maintenance/port/aft) +/turf/open/floor/plasteel, +/area/engineering/atmos) "axl" = ( /obj/structure/closet/firecloset, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -14952,9 +14956,6 @@ /obj/item/reagent_containers/food/drinks/bottle/whiskey, /obj/effect/spawner/lootdrop/maintenance, /obj/machinery/light/small, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -15214,6 +15215,9 @@ /obj/machinery/computer/security/telescreen/entertainment{ pixel_y = 32 }, +/obj/machinery/newscaster{ + pixel_x = 32 + }, /turf/open/floor/plasteel/grimy, /area/commons/dorms) "axJ" = ( @@ -15238,6 +15242,9 @@ /obj/machinery/computer/security/telescreen/entertainment{ pixel_y = 32 }, +/obj/machinery/newscaster{ + pixel_x = 32 + }, /turf/open/floor/carpet, /area/commons/dorms) "axL" = ( @@ -15246,9 +15253,6 @@ lootcount = 2; name = "2maintenance loot spawner" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -15404,11 +15408,11 @@ /turf/open/floor/plasteel/dark, /area/service/bar/atrium) "axU" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 }, -/turf/closed/wall, -/area/maintenance/port/aft) +/turf/open/floor/plasteel, +/area/engineering/atmos) "axV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/newscaster{ @@ -15425,9 +15429,12 @@ /turf/closed/wall, /area/hallway/secondary/exit) "axX" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall/r_wall/rust, -/area/maintenance/port/aft) +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engineering/atmos) "axY" = ( /obj/structure/cable/white{ icon_state = "1-2" @@ -15682,10 +15689,14 @@ /area/commons/dorms) "ayA" = ( /obj/structure/bed, -/obj/machinery/newscaster{ - pixel_x = 32 - }, /obj/item/bedsheet/blue, +/obj/machinery/button/door{ + id = "Dorm1"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 25; + specialfunctions = 4 + }, /turf/open/floor/plasteel/grimy, /area/commons/dorms) "ayB" = ( @@ -15693,10 +15704,14 @@ /area/commons/dorms) "ayC" = ( /obj/structure/bed, -/obj/machinery/newscaster{ - pixel_x = 32 - }, /obj/item/bedsheet/red, +/obj/machinery/button/door{ + id = "Dorm2"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 25; + specialfunctions = 4 + }, /turf/open/floor/carpet, /area/commons/dorms) "ayD" = ( @@ -16339,13 +16354,14 @@ /area/commons/dorms) "azD" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Bar Back Room" - }, /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/door/airlock{ + id_tag = "Dorm1"; + name = "Dorm 1" + }, /turf/open/floor/plasteel, /area/commons/dorms) "azE" = ( @@ -16704,10 +16720,10 @@ /turf/open/floor/plasteel, /area/security/prison) "aAn" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 6 +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Mix to Engine" }, -/obj/machinery/meter, /turf/open/floor/plasteel, /area/engineering/atmos) "aAo" = ( @@ -16717,6 +16733,10 @@ /turf/open/floor/plasteel, /area/security/prison) "aAp" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, @@ -16973,6 +16993,14 @@ dir = 4 }, /obj/structure/bedsheetbin/color, +/obj/structure/sign/warning/fire{ + desc = "A sign that states the labeled room's number."; + dir = 1; + icon_state = "roomnum"; + name = "Room Number 2"; + pixel_x = -1; + pixel_y = 26 + }, /turf/open/floor/plasteel/white/corner, /area/commons/dorms) "aAK" = ( @@ -17705,6 +17733,14 @@ /obj/effect/turf_decal/tile/blue{ dir = 4 }, +/obj/structure/sign/warning/fire{ + desc = "A sign that states the labeled room's number."; + dir = 8; + icon_state = "roomnum"; + name = "Room Number 4"; + pixel_x = -1; + pixel_y = -24 + }, /turf/open/floor/plasteel/white/corner, /area/commons/dorms) "aBU" = ( @@ -18776,18 +18812,26 @@ /area/commons/dorms) "aDH" = ( /obj/structure/bed, -/obj/machinery/newscaster{ - pixel_x = 32 - }, /obj/item/bedsheet/brown, +/obj/machinery/button/door{ + id = "Dorm3"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 25; + specialfunctions = 4 + }, /turf/open/floor/wood, /area/commons/dorms) "aDI" = ( /obj/structure/bed, -/obj/machinery/newscaster{ - pixel_x = 32 - }, /obj/item/bedsheet/black, +/obj/machinery/button/door{ + id = "Dorm4"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 25; + specialfunctions = 4 + }, /turf/open/floor/plasteel/grimy, /area/commons/dorms) "aDJ" = ( @@ -19073,9 +19117,15 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit) "aEg" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall/r_wall, -/area/maintenance/port/aft) +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/components/trinary/mixer/airmix/flipped{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engineering/atmos) "aEh" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -19561,6 +19611,9 @@ /obj/machinery/computer/security/telescreen/entertainment{ pixel_y = -32 }, +/obj/machinery/newscaster{ + pixel_x = 32 + }, /turf/open/floor/wood{ icon_state = "wood-broken7" }, @@ -19583,6 +19636,9 @@ /obj/machinery/computer/security/telescreen/entertainment{ pixel_y = -32 }, +/obj/machinery/newscaster{ + pixel_x = 32 + }, /turf/open/floor/plasteel/grimy, /area/commons/dorms) "aES" = ( @@ -19995,9 +20051,6 @@ pixel_x = 26 }, /obj/effect/turf_decal/bot, -/obj/item/areaeditor/blueprints, -/obj/item/tank/jetpack/suit, -/obj/item/clothing/shoes/magboots/advance, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -21234,24 +21287,25 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /obj/effect/turf_decal/stripes/corner{ dir = 4 }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Mix to Engine" + }, /turf/open/floor/engine, /area/engineering/main) "aHk" = ( /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /obj/effect/turf_decal/stripes/corner{ dir = 8 }, +/obj/machinery/atmospherics/pipe/manifold/green/visible{ + dir = 1 + }, /turf/open/floor/engine, /area/engineering/main) "aHl" = ( @@ -21273,13 +21327,15 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, /turf/open/floor/engine, /area/engineering/main) "aHn" = ( @@ -21289,9 +21345,6 @@ /obj/structure/sign/warning/electricshock{ pixel_y = 32 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -21300,6 +21353,9 @@ network = list("ss13","engine"); pixel_x = 23 }, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 10 + }, /turf/open/floor/engine, /area/engineering/main) "aHo" = ( @@ -21309,10 +21365,12 @@ /obj/structure/cable/white{ icon_state = "1-8" }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, /turf/open/floor/engine, /area/engineering/main) "aHp" = ( @@ -21842,7 +21900,6 @@ pixel_x = -32 }, /obj/effect/turf_decal/bot_white, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -21885,10 +21942,12 @@ /obj/structure/sign/warning/nosmoking{ pixel_x = -32 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 6 + }, /turf/open/floor/engine, /area/engineering/main) "aIg" = ( @@ -21897,9 +21956,8 @@ }, /obj/effect/turf_decal/stripes/corner, /obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 6 + dir = 4 }, -/obj/machinery/meter, /turf/open/floor/engine, /area/engineering/main) "aIh" = ( @@ -21908,7 +21966,7 @@ }, /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 + dir = 9 }, /turf/open/floor/engine, /area/engineering/main) @@ -21917,8 +21975,8 @@ icon_state = "4-8" }, /obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ - dir = 4 +/obj/machinery/atmospherics/components/binary/pump{ + name = "Gas to Chamber" }, /turf/open/floor/engine, /area/engineering/main) @@ -21926,13 +21984,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 - }, /turf/open/floor/engine, /area/engineering/main) "aIk" = ( @@ -21945,7 +21997,7 @@ }, /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/manifold/green/visible{ - dir = 1 + dir = 8 }, /turf/open/floor/engine, /area/engineering/main) @@ -22491,7 +22543,6 @@ dir = 8 }, /obj/effect/turf_decal/bot_white/left, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -22598,6 +22649,7 @@ /obj/structure/cable{ icon_state = "0-2" }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/engineering/gravity_generator) "aJo" = ( @@ -22621,8 +22673,8 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 9 +/obj/machinery/atmospherics/pipe/manifold/green/visible{ + dir = 8 }, /turf/open/floor/engine, /area/engineering/main) @@ -22633,23 +22685,26 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Gas to Mix" + }, /turf/open/floor/engine, /area/engineering/main) "aJr" = ( -/obj/item/wrench, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 6 - }, /obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 1 + }, +/obj/item/wrench, /turf/open/floor/plasteel/dark, /area/engineering/main) "aJs" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 4 }, -/obj/machinery/meter, -/obj/effect/turf_decal/delivery, +/obj/machinery/meter/atmos, /turf/open/floor/plasteel/dark, /area/engineering/main) "aJt" = ( @@ -23245,9 +23300,6 @@ dir = 4; pixel_x = -23 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 5 - }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -23258,6 +23310,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/plasteel/dark, /area/engineering/gravity_generator) "aKq" = ( @@ -23363,6 +23418,7 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/engineering/gravity_generator) "aKx" = ( @@ -23405,17 +23461,15 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/simple/green/visible, /turf/open/floor/engine, /area/engineering/main) "aKz" = ( -/obj/machinery/portable_atmospherics/scrubber, +/obj/effect/turf_decal/bot, /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 }, -/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, /turf/open/floor/plasteel/dark, /area/engineering/main) "aKA" = ( @@ -23529,9 +23583,6 @@ }, /obj/item/clothing/gloves/color/yellow, /obj/item/reagent_containers/food/drinks/soda_cans/thirteenloko, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 - }, /obj/item/clothing/gloves/color/yellow, /obj/item/clothing/gloves/color/yellow, /obj/effect/turf_decal/tile/yellow{ @@ -23544,6 +23595,9 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, /turf/open/floor/plasteel, /area/engineering/main) "aKL" = ( @@ -24167,14 +24221,12 @@ dir = 1; pixel_y = -22 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /obj/effect/turf_decal/bot, /obj/structure/cable{ icon_state = "1-8" }, /obj/item/clothing/glasses/meson/engine, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel, /area/engineering/gravity_generator) "aLL" = ( @@ -24277,6 +24329,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, /turf/open/floor/engine, /area/engineering/main) "aLX" = ( @@ -24291,6 +24346,9 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engineering/main) "aLZ" = ( @@ -24304,6 +24362,9 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engineering/main) "aMa" = ( @@ -24689,11 +24750,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit) -"aMD" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/sign/poster/contraband/random, -/turf/closed/wall, -/area/maintenance/port/aft) "aME" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -25526,6 +25582,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/engine, /area/engineering/main) "aOe" = ( @@ -25701,6 +25758,8 @@ dir = 4 }, /obj/machinery/shieldgen, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/cobweb, /turf/open/floor/plasteel, /area/maintenance/port/aft) "aOu" = ( @@ -25867,6 +25926,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/engine, /area/engineering/main) "aOH" = ( @@ -25882,15 +25942,6 @@ }, /turf/open/space/basic, /area/solars/port/aft) -"aOI" = ( -/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" = ( /obj/structure/cable/white{ icon_state = "4-8" @@ -25937,9 +25988,6 @@ "aOL" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /turf/open/floor/plating, /area/maintenance/port/aft) "aOM" = ( @@ -25947,9 +25995,6 @@ /obj/item/paper_bin, /obj/item/pen, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /turf/open/floor/plasteel/dark, /area/maintenance/port/aft) "aON" = ( @@ -25963,9 +26008,6 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /turf/open/floor/plasteel/dark, /area/maintenance/port/aft) "aOO" = ( @@ -26034,11 +26076,16 @@ /turf/open/floor/plasteel/white, /area/medical/genetics) "aOS" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ +/obj/machinery/atmospherics/pipe/simple/yellow/visible, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, -/turf/closed/wall, -/area/maintenance/port/aft) +/turf/open/floor/plasteel, +/area/engineering/atmos) "aOT" = ( /obj/structure/cable/white{ icon_state = "1-4" @@ -26516,10 +26563,6 @@ pixel_x = -3; pixel_y = -3 }, -/obj/machinery/airalarm{ - dir = 1; - pixel_y = -22 - }, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/medical/medbay/zone3) @@ -26673,7 +26716,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 + dir = 9 }, /turf/open/floor/engine, /area/engineering/main) @@ -26700,9 +26743,15 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "aPQ" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating, -/area/maintenance/port/aft) +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/engineering/atmos) "aPR" = ( /turf/open/floor/wood{ icon_state = "wood-broken5" @@ -26721,20 +26770,23 @@ }, /area/maintenance/port/aft) "aPU" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, -/turf/closed/wall, -/area/maintenance/port/aft) +/obj/machinery/door/airlock{ + id_tag = "Dorm2"; + name = "Dorm 2" + }, +/turf/open/floor/plasteel, +/area/commons/dorms) "aPV" = ( /obj/structure/barricade/wooden, /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch"; req_access_txt = "12" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -26747,9 +26799,6 @@ dir = 4; pixel_x = -24 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/bot, /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -26767,9 +26816,6 @@ /obj/item/kirbyplants{ icon_state = "plant-21" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/machinery/camera{ c_tag = "Central Primary Hallway South-West"; dir = 1 @@ -26782,7 +26828,6 @@ }, /area/hallway/primary/port/aft) "aPY" = ( -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=9.2-EnteringEngi"; location = "9.1-Library" @@ -26790,6 +26835,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 }, @@ -27116,9 +27164,6 @@ /turf/open/floor/plasteel/dark, /area/hallway/primary/starboard) "aQB" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/structure/sign/poster/contraband/random, /turf/closed/wall, /area/maintenance/port/aft) @@ -27170,11 +27215,18 @@ /turf/open/floor/plating/asteroid, /area/command/heads_quarters/rd) "aQF" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/turf/closed/wall/rust, -/area/maintenance/port/aft) +/obj/structure/sign/warning/fire{ + desc = "A sign that states the labeled room's number."; + icon_state = "roomnum"; + name = "Room Number 1"; + pixel_x = -1; + pixel_y = 26 + }, +/turf/open/floor/plasteel, +/area/commons/dorms) "aQG" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 6 @@ -27240,8 +27292,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Loop to Freezer" }, /turf/open/floor/engine, /area/engineering/main) @@ -27260,18 +27313,12 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/atmospherics/components/trinary/filter/critical{ - dir = 4 - }, /turf/open/floor/engine, /area/engineering/main) "aQN" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, /turf/open/floor/engine, /area/engineering/main) "aQO" = ( @@ -27280,9 +27327,6 @@ network = list("ss13","engine"); pixel_x = 23 }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, /obj/effect/turf_decal/loading_area{ dir = 1 }, @@ -27292,26 +27336,19 @@ /obj/effect/turf_decal/stripes/line{ dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, /turf/open/floor/engine, /area/engineering/main) "aQQ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/barricade/wooden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /turf/open/floor/plating, /area/maintenance/port/aft) "aQR" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/manifold/orange/visible{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 6 }, /turf/open/floor/engine, /area/engineering/main) @@ -27416,9 +27453,20 @@ /turf/open/floor/wood, /area/maintenance/port/aft) "aRe" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall/r_wall, -/area/medical/virology) +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/sign/warning/fire{ + desc = "A sign that states the labeled room's number."; + dir = 4; + icon_state = "roomnum"; + name = "Room Number 3"; + pixel_x = -1; + pixel_y = -24 + }, +/turf/open/floor/plasteel, +/area/commons/dorms) "aRf" = ( /turf/closed/wall, /area/medical/chemistry) @@ -27694,21 +27742,10 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/components/binary/pump/on{ - name = "Gas to Cooling Loop" - }, +/obj/machinery/atmospherics/pipe/simple/general/visible, /turf/open/floor/engine, /area/engineering/main) "aRH" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/engine, -/area/engineering/main) -"aRI" = ( /obj/structure/cable/white{ icon_state = "4-8" }, @@ -27717,12 +27754,22 @@ }, /turf/open/floor/engine, /area/engineering/main) +"aRI" = ( +/obj/structure/cable/white{ + dir = 5; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 5 + }, +/turf/open/floor/engine, +/area/engineering/main) "aRJ" = ( /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 5 +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 }, /turf/open/floor/engine, /area/engineering/main) @@ -27746,6 +27793,7 @@ dir = 4 }, /obj/effect/turf_decal/bot, +/obj/machinery/meter, /turf/open/floor/plasteel/dark, /area/engineering/main) "aRM" = ( @@ -27758,9 +27806,8 @@ /turf/open/floor/engine, /area/engineering/main) "aRN" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "Freezer to Gas" +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 }, /turf/open/floor/engine, /area/engineering/main) @@ -27777,10 +27824,7 @@ /turf/open/floor/engine, /area/engineering/main) "aRQ" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 1; - name = "Gas to Cooling Loop" - }, +/obj/machinery/atmospherics/pipe/simple/general/visible, /turf/open/floor/engine, /area/engineering/main) "aRR" = ( @@ -27957,12 +28001,10 @@ dir = 8 }, /obj/machinery/shieldgen, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel, /area/maintenance/port/aft) "aSg" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/item/cigbutt, /turf/open/floor/plating, /area/maintenance/port/aft) @@ -28021,6 +28063,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/dark, /area/maintenance/port/aft) "aSn" = ( @@ -28071,9 +28114,6 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "aSr" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -28300,9 +28340,6 @@ /turf/open/floor/engine, /area/engineering/main) "aSQ" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch"; req_access_txt = "12" @@ -28345,12 +28382,12 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/atmospherics/components/unary/thermomachine/heater/on{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 9 }, +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ + dir = 1 + }, /turf/open/floor/engine, /area/engineering/main) "aSV" = ( @@ -28496,9 +28533,6 @@ /turf/open/floor/plasteel/dark, /area/service/library) "aTj" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -28902,6 +28936,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, /turf/open/floor/plasteel/dark, /area/maintenance/port/aft) "aTW" = ( @@ -28988,6 +29025,9 @@ /obj/structure/cable/white{ icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plasteel/dark, /area/maintenance/port/aft) "aUc" = ( @@ -29146,6 +29186,7 @@ /obj/structure/cable/white{ icon_state = "0-4" }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/port/aft) "aUr" = ( @@ -29372,6 +29413,9 @@ req_access_txt = "39" }, /obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/medical/virology) "aUL" = ( @@ -29893,31 +29937,40 @@ /turf/closed/wall/r_wall, /area/science/research) "aVF" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 - }, -/turf/open/floor/plating, -/area/maintenance/port/aft) -"aVG" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/maintenance/port/aft) -"aVH" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plating, -/area/maintenance/port/aft) -"aVI" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 +/obj/machinery/door/airlock{ + id_tag = "Dorm3"; + name = "Dorm 3" }, +/turf/open/floor/plasteel, +/area/commons/dorms) +"aVG" = ( +/turf/open/floor/plating{ + icon_state = "platingdmg2" + }, +/area/maintenance/port/aft) +"aVH" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock{ + id_tag = "Dorm4"; + name = "Room Four" + }, +/turf/open/floor/plasteel, +/area/commons/dorms) +"aVI" = ( /obj/effect/turf_decal/trimline/green/line{ dir = 9; icon_state = "trimline" }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/port/aft) "aVJ" = ( @@ -30530,6 +30583,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 9 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plasteel/white, /area/medical/virology) "aWJ" = ( @@ -30537,15 +30593,15 @@ dir = 1 }, /obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 - }, /obj/structure/cable/white{ icon_state = "4-8" }, /obj/effect/turf_decal/stripes/line{ dir = 5 }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, /turf/open/floor/plasteel/white, /area/medical/virology) "aWK" = ( @@ -32815,9 +32871,6 @@ /turf/open/floor/plating, /area/maintenance/solars/port/aft) "bap" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch"; req_access_txt = "12" @@ -32831,6 +32884,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plating, /area/maintenance/solars/port/aft) "baq" = ( @@ -33393,7 +33447,6 @@ name = "Maintenance Hatch"; req_access_txt = "12" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -36306,9 +36359,6 @@ /area/medical/medbay/zone3) "bfH" = ( /obj/effect/landmark/start/virologist, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 4 - }, /obj/machinery/power/apc/highcap/five_k{ areastring = "/area/medical/virology"; dir = 1; @@ -36322,6 +36372,9 @@ c_tag = "Virology"; network = list("ss13","medbay") }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, /turf/open/floor/plasteel, /area/medical/virology) "bfI" = ( @@ -36415,6 +36468,9 @@ dir = 1; network = list("ss13","medbay") }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, /turf/open/floor/plasteel/white, /area/medical/virology) "bfN" = ( @@ -37470,16 +37526,15 @@ /turf/open/floor/plasteel, /area/hallway/secondary/entry) "bhE" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, /turf/open/floor/plasteel/white/corner, /area/hallway/secondary/entry) "bhF" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/structure/cable/white{ icon_state = "1-2" }, @@ -37494,18 +37549,12 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/tile/blue{ dir = 8 }, /turf/open/floor/plasteel/white/corner, /area/hallway/secondary/entry) "bhH" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -37514,20 +37563,15 @@ /area/hallway/secondary/entry) "bhI" = ( /obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/hallway/secondary/entry) "bhJ" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/hallway/secondary/entry) "bhK" = ( @@ -39034,6 +39078,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/engine, /area/engineering/main) "blo" = ( @@ -40002,8 +40047,8 @@ /turf/open/floor/engine, /area/engineering/main) "bwW" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 5 +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 }, /turf/closed/wall/r_wall/rust, /area/tcommsat/server) @@ -40024,9 +40069,6 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 9 - }, /turf/open/floor/engine, /area/engineering/main) "bxc" = ( @@ -40067,8 +40109,10 @@ /turf/closed/wall/r_wall, /area/tcommsat/server) "bxu" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible, /obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/components/binary/pump/on{ + name = "Gas to Cooling Loop" + }, /turf/open/floor/engine, /area/engineering/main) "bxv" = ( @@ -40404,6 +40448,15 @@ dir = 1 }, /area/engineering/atmos) +"bOy" = ( +/obj/item/stack/ore/iron, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/engineering/atmos) "bOJ" = ( /obj/machinery/atmospherics/components/unary/thermomachine/heater{ dir = 8 @@ -40523,6 +40576,9 @@ }, /turf/open/floor/plasteel, /area/service/hydroponics) +"cpn" = ( +/turf/closed/wall, +/area/space/station_ruins) "csX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ @@ -40676,6 +40732,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/orange/visible, /turf/open/floor/plasteel, /area/engineering/atmos) "die" = ( @@ -41052,6 +41109,15 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/engine, /area/science/mixing) +"fey" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 10 + }, +/turf/open/floor/engine, +/area/engineering/main) "fff" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ @@ -41101,6 +41167,22 @@ }, /turf/open/floor/plasteel, /area/science/mixing) +"fkE" = ( +/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/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel/dark, +/area/maintenance/port/aft) "flE" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -41111,6 +41193,7 @@ /obj/structure/table/wood, /obj/structure/window/reinforced/spawner/west, /obj/item/flashlight/lamp/green, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/carpet/green/airless, /area/service/lawoffice) "fnp" = ( @@ -41248,6 +41331,10 @@ icon_state = "platingdmg3" }, /area/asteroid/nearstation) +"fTp" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall/r_wall/rust, +/area/engineering/gravity_generator) "fWh" = ( /turf/open/floor/wood{ icon_state = "wood-broken5" @@ -41270,8 +41357,8 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/light, /obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/orange/visible, /turf/open/floor/plasteel, /area/engineering/atmos) "gap" = ( @@ -41338,10 +41425,13 @@ "glC" = ( /turf/closed/wall/r_wall, /area/maintenance/starboard/aft) -"guM" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 +"gre" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 }, +/turf/closed/wall/r_wall, +/area/engineering/gravity_generator) +"guM" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible, /obj/structure/cable{ icon_state = "1-2" @@ -41423,11 +41513,18 @@ /turf/open/floor/plasteel/white/corner, /area/hallway/primary/starboard/fore) "gNH" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 }, -/turf/open/floor/plating/asteroid/airless, -/area/asteroid/nearstation) +/obj/machinery/door/airlock/external{ + name = "External Access"; + req_access_txt = "13" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/plating, +/area/engineering/atmos) "gPY" = ( /obj/machinery/vr_sleeper, /obj/effect/turf_decal/tile/red{ @@ -41625,6 +41722,9 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"hIF" = ( +/turf/closed/wall, +/area/space) "hNO" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 5 @@ -41709,6 +41809,9 @@ /area/engineering/atmos) "hUL" = ( /obj/effect/landmark/start/atmospheric_technician, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 10 + }, /turf/open/floor/plasteel, /area/engineering/atmos) "hVE" = ( @@ -41806,9 +41909,11 @@ }, /area/maintenance/starboard/aft) "ixk" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 5 }, /turf/open/floor/plasteel, /area/engineering/atmos) @@ -41822,10 +41927,12 @@ /turf/closed/wall, /area/service/lawoffice) "iIj" = ( -/obj/machinery/atmospherics/components/trinary/mixer/airmix/flipped{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/obj/machinery/door/airlock/maintenance{ + name = "Atmospherics Maintenance"; + req_access_txt = "24" }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/engineering/atmos) "iJz" = ( /obj/structure/window/reinforced{ @@ -41835,21 +41942,21 @@ /turf/open/floor/grass, /area/hallway/secondary/entry) "iJY" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible, /obj/structure/cable{ icon_state = "4-8" }, /obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 6 + }, +/obj/machinery/meter, /turf/open/floor/plasteel, /area/engineering/atmos) "iKp" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 5 - }, /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/meter/atmos, +/obj/machinery/atmospherics/pipe/simple/orange/visible, /turf/open/floor/plasteel, /area/engineering/atmos) "iML" = ( @@ -41936,6 +42043,9 @@ "iYt" = ( /obj/structure/chair/office/dark, /obj/effect/landmark/start/lawyer, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, /turf/open/floor/carpet/green/airless, /area/service/lawoffice) "iZQ" = ( @@ -42021,6 +42131,7 @@ /obj/machinery/light/small{ dir = 1 }, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel, /area/maintenance/port/aft) "jnK" = ( @@ -42087,6 +42198,13 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/wood, /area/maintenance/starboard/aft) +"jvx" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall/r_wall, +/area/engineering/gravity_generator) "jwi" = ( /obj/structure/sign/directions/engineering{ dir = 8; @@ -42140,9 +42258,6 @@ /turf/open/floor/plasteel/white, /area/science/xenobiology) "jCi" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 - }, /obj/machinery/light, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/neutral{ @@ -42155,6 +42270,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 5 + }, /turf/open/floor/plasteel/dark, /area/engineering/atmos) "jDd" = ( @@ -42255,6 +42373,9 @@ /obj/structure/lattice/catwalk, /turf/open/space/basic, /area/space/nearstation) +"kas" = ( +/turf/closed/wall, +/area/engineering/atmos) "kaA" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 @@ -42280,7 +42401,6 @@ /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" }, @@ -42304,6 +42424,22 @@ }, /turf/open/floor/plasteel, /area/engineering/atmos) +"koL" = ( +/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/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/engineering/main) "kpi" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple, /obj/structure/lattice/catwalk, @@ -42447,10 +42583,10 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "kTz" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible, /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/orange/visible, /turf/open/floor/plasteel, /area/engineering/atmos) "kUu" = ( @@ -42479,6 +42615,9 @@ pixel_y = 24 }, /obj/effect/landmark/start/lawyer, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, /turf/open/floor/wood, /area/service/lawoffice) "loX" = ( @@ -42582,6 +42721,14 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/hallway/primary/starboard) +"lFj" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/barricade/wooden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) "lFm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -42861,6 +43008,23 @@ }, /turf/open/floor/plasteel, /area/science/mixing) +"nhL" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -22 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/zone3) "nhU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -42914,6 +43078,15 @@ /obj/machinery/meter, /turf/open/floor/plasteel, /area/engineering/atmos) +"nHD" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating, +/area/engineering/atmos) "nIf" = ( /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating, @@ -43048,6 +43221,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/closet/radiation, /turf/open/floor/plasteel/dark, /area/engineering/atmos) "orV" = ( @@ -43121,6 +43295,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/closet/radiation, /turf/open/floor/plasteel/dark, /area/engineering/atmos) "oGc" = ( @@ -43491,6 +43666,18 @@ icon_state = "wood-broken5" }, /area/asteroid/nearstation) +"qaX" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/green/visible{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engineering/main) "qcg" = ( /obj/structure/window/reinforced{ dir = 4 @@ -43539,6 +43726,14 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/hallway/primary/fore) +"qdY" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/obj/item/broken_bottle, +/obj/item/pickaxe, +/turf/open/floor/plating, +/area/engineering/atmos) "qeO" = ( /obj/machinery/door/airlock/command{ name = "Gateway"; @@ -43591,9 +43786,13 @@ /turf/open/floor/plasteel, /area/engineering/atmos) "qpG" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/closed/wall/r_wall/rust, -/area/engineering/gravity_generator) +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 5 + }, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/engineering/atmos) "qsc" = ( /obj/machinery/air_sensor/atmos/air_tank, /turf/open/floor/engine/air, @@ -43625,7 +43824,6 @@ /turf/open/floor/plasteel, /area/engineering/atmos) "qFj" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable/white{ icon_state = "1-2" }, @@ -43703,9 +43901,7 @@ }, /area/maintenance/starboard/aft) "qUW" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall, /area/engineering/atmos) "rae" = ( @@ -43713,6 +43909,9 @@ dir = 1; name = "Air to Pure" }, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engineering/atmos) "ria" = ( @@ -43808,6 +44007,7 @@ icon_state = "4-8" }, /obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/green/visible, /turf/open/floor/plasteel, /area/engineering/atmos) "rVj" = ( @@ -44007,6 +44207,13 @@ "swZ" = ( /turf/closed/wall/r_wall/rust, /area/security/brig) +"sxy" = ( +/obj/structure/girder, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) "sxC" = ( /turf/closed/wall/r_wall/rust, /area/ai_monitored/turret_protected/ai) @@ -45148,7 +45355,7 @@ "sLL" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ - id = "AI Core shutters"; + id = "aicorewindow"; name = "AI core shutters" }, /turf/open/floor/plating, @@ -46648,6 +46855,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/orange/visible, /turf/open/floor/plasteel, /area/engineering/atmos) "tin" = ( @@ -46699,6 +46907,17 @@ dir = 1 }, /area/engineering/atmos) +"twh" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + name = "External Access"; + req_access_txt = "13" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/engineering/atmos) "twy" = ( /obj/structure/table/reinforced, /obj/machinery/chem_dispenser/drinks{ @@ -46975,20 +47194,11 @@ /turf/open/floor/plasteel, /area/engineering/atmos) "uBJ" = ( -/obj/effect/turf_decal/bot_white/right, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ +/obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/engineering/gravity_generator) +/turf/open/floor/plating, +/area/engineering/atmos) "uCY" = ( /turf/open/pool, /area/maintenance/starboard/aft) @@ -47075,8 +47285,8 @@ /area/science/mixing) "uVJ" = ( /obj/effect/decal/cleanable/oil, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 }, /turf/open/floor/plasteel, /area/engineering/atmos) @@ -47425,6 +47635,18 @@ }, /turf/open/floor/plasteel/dark, /area/hallway/primary/aft) +"wdK" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 1; + name = "Gas to Cooling Loop" + }, +/turf/open/floor/engine, +/area/engineering/main) +"wiJ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall, +/area/engineering/atmos) "wkn" = ( /obj/machinery/hydroponics/soil, /obj/item/shovel/spade, @@ -47481,9 +47703,9 @@ /turf/open/floor/plasteel, /area/science/mixing) "wDb" = ( -/obj/structure/lattice, -/turf/open/space/basic, -/area/space) +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall/r_wall, +/area/engineering/gravity_generator) "wOe" = ( /obj/machinery/door/firedoor/heavy, /obj/machinery/door/airlock/research{ @@ -47514,6 +47736,11 @@ /obj/structure/window/reinforced/spawner/west, /turf/open/floor/plasteel/white, /area/science/mixing) +"wQj" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/components/unary/thermomachine/freezer, +/turf/open/floor/plasteel/dark, +/area/engineering/main) "wRY" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 4 @@ -47585,6 +47812,7 @@ dir = 4 }, /obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/simple/general/visible, /turf/open/floor/plasteel, /area/engineering/atmos) "xiZ" = ( @@ -47661,11 +47889,6 @@ /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 9 }, -/obj/machinery/airalarm{ - dir = 1; - pixel_x = -32; - pixel_y = -22 - }, /obj/effect/turf_decal/tile/yellow{ dir = 8 }, @@ -47688,6 +47911,11 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/shower{ + dir = 8; + name = "emergency shower" + }, +/obj/effect/turf_decal/vg_decals/radiation, /turf/open/floor/plasteel/dark, /area/engineering/atmos) "xAj" = ( @@ -47746,6 +47974,13 @@ /obj/structure/grille, /turf/closed/wall/r_wall, /area/engineering/atmos) +"xKp" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Engineering Maintenance"; + req_access_txt = "10" + }, +/turf/open/floor/plating, +/area/engineering/gravity_generator) "xMv" = ( /obj/structure/lattice, /obj/structure/fluff/broken_flooring{ @@ -47758,11 +47993,21 @@ /turf/closed/wall, /area/command/gateway) "xPz" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ +/obj/structure/sign/warning/vacuum/external{ + pixel_y = -32 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 9 }, -/turf/open/floor/plating/asteroid/airless, -/area/asteroid/nearstation) +/turf/open/floor/plating, +/area/engineering/atmos) +"xPL" = ( +/obj/structure/girder, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) "xTs" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ @@ -72223,7 +72468,7 @@ aaa aaa aaa aaa -jFP +cpn jFP jFP jFP @@ -72480,7 +72725,7 @@ aaa aaa aaa aaa -aaa +hIF aaa jFP jFP @@ -72737,7 +72982,7 @@ aaa aaa aaa aaa -aaa +hIF aaa jFP jFP @@ -72994,7 +73239,7 @@ aaa aaa aaa aaa -aaa +hIF aaa aaa aaa @@ -73754,7 +73999,7 @@ aac aac aac aac -sdX +aKo uhz iye mJP @@ -74017,8 +74262,8 @@ bpn eYe bYE uhz -lrg -aad +akO +aac aad aac aac @@ -74276,8 +74521,8 @@ eyu uvg lFw aad -aac -aac +aad +aad aad aad aad @@ -74532,7 +74777,7 @@ xZO dMl uhz gNH -aad +kas aad aad aad @@ -74788,8 +75033,8 @@ pvX gSv xtL uhz -gNH -aad +nHD +kas aad aad aad @@ -75046,7 +75291,7 @@ kiw nUk ezP xPz -aad +kas aad aad aad @@ -75302,13 +75547,13 @@ jkl eew bgh qUW -aqz -aqz -aGe -sIu -aGe -aGe -aGe +twh +wiJ +wDb +fTp +wDb +wDb +gre sIu bwY abi @@ -75552,17 +75797,17 @@ tdN oql oql ixk -oql +axk kTz iKp tgp dgV fYx -aCG -ajX +iIj ajX qpG -uBJ +sIu +aHe aIb aJh aKp @@ -75809,16 +76054,16 @@ kCU rzq awI uVJ -diG +axU mTv guM oCy orI xyo hNO -aaW -abu -aGe +bOy +uBJ +xKp aId aIc aJi @@ -76066,7 +76311,7 @@ mTT tgm vjN hUL -diG +axX rEx jCi anx @@ -76074,7 +76319,7 @@ anx anx uok akM -abu +qdY aGe aHg aId @@ -76330,7 +76575,7 @@ xIm rVj aAg akN -akO +alI anu aGe aGe @@ -76352,7 +76597,7 @@ buO sKn aMJ bak -bat +aLC aLC aLC aLC @@ -76580,7 +76825,7 @@ fIN auq hqX wqL -diG +aAn yba eva aqA @@ -76609,7 +76854,7 @@ sKj buR aMJ bal -bau +aLC bbf bbo aLC @@ -76834,10 +77079,10 @@ tac xEQ bKQ fvd -mae +awH xeu -wqL -aAn +awL +fLr iJY uSs xIm @@ -77094,8 +77339,8 @@ fvd mae mkF wqL +diG aAp -yba vVA anx anx @@ -77351,8 +77596,8 @@ fFw auq hXn wqL -iIj -iJY +diG +aEg dFV aAh aBp @@ -77362,7 +77607,7 @@ akS alI alI apq -bwY +jvx aJn aKw aLK @@ -77609,7 +77854,7 @@ fEt mnD asx aty -eaf +aOS avx aAi axi @@ -77629,13 +77874,13 @@ sJD aMN bxt bwW -aMJ -aMJ -aMJ -sJV -aMJ -aMJ -sJV +aMN +aMN +aMN +sJD +aMN +aMN +sJD bap bau bat @@ -77865,8 +78110,8 @@ fFw auq qEl wqL +diG aAp -yba avy aAj blk @@ -77892,7 +78137,7 @@ bvo aad bvo aad -aKm +aqo baq bbb aKm @@ -78122,8 +78367,8 @@ qIp mae eOs wqL +diG aAp -yba fjs anx anx @@ -78149,7 +78394,7 @@ aUQ aVK aUQ aXc -aKm +aqo aqo bbc aLv @@ -78379,8 +78624,8 @@ jxc mae hqX wqL -auv -iJY +diG +aPQ kwF aAh aBr @@ -78646,16 +78891,16 @@ uok aEr aFu aGi -aHl +qaX aIi aJs -aKz +wQj buW aMR aMX aMX sJG -aQK +fey aRI aSS aPL @@ -79940,7 +80185,7 @@ aMW aMW aOD buW -aQK +aQM aRN aSX aPL @@ -79952,13 +80197,13 @@ bvg aKm jlZ vDy -aOI +qFj qFj kdd -aPQ -aPQ -aPQ -aVF +aSG +aSG +aVi +aSG aKV aLn aRA @@ -80209,13 +80454,13 @@ bvo aqo aKm bbj -axU +aKm aKm aMG aMG aUi aKm -aVG +aSG aKV aSe aSJ @@ -80472,7 +80717,7 @@ aQV aSq aUk aUi -aVG +aSG aKV aTk aSK @@ -80713,7 +80958,7 @@ aOF aPM aQS aRQ -bxu +wdK aUa aUU aUU @@ -80986,8 +81231,8 @@ aRd aRc aUm aKm -aVH -aRe +aSG +aKV bfH aWL aZB @@ -81224,21 +81469,21 @@ acB aEt aEt aqo -awH -axX -aEg -aEg -axX -axX -aEg -aEg -axX -aEg -aEg -aMD +aqo +aLs +aqo +aqo +aLs +aLs +aqo +aqo +aLs +aqo +aqo +aQB bbm -aOS -aPU +aKm +aKm aRj aSG aUo @@ -81481,7 +81726,7 @@ aLY aNa aEt aqx -awL +aFM axY aEj aFM @@ -81991,11 +82236,11 @@ aHh aIu aJD aKK -aMa +koL aNc aEt atE -axk +aMG aQW aRT aRU @@ -82009,7 +82254,7 @@ aYw aZu aQW awB -aQF +aUi aRC aTb aUp @@ -82266,11 +82511,11 @@ aYx aZv aQW aOV -axU +aKm aKm aTU aKm -aMG +sxy aVI aWw aXd @@ -82527,7 +82772,7 @@ aQQ aRS aTV aUq -aMG +xPL aVJ aWx aXe @@ -83023,7 +83268,7 @@ aMd aNg aEt awG -axU +aKm aQW aRX aTf @@ -83037,9 +83282,9 @@ aLy aFM aFM aPP -aQQ -aSm +lFj aSm +fkE aUJ aKm aVR @@ -84577,7 +84822,7 @@ aXl aSh aOg aGC -aGC +nhL aPA aJx aQD @@ -85308,7 +85553,7 @@ akg ale alU amP -aoC +auv aoC sAc aqU @@ -85580,7 +85825,7 @@ ayz azD aAH aBQ -azD +aVF aDG aEO sDl @@ -85835,8 +86080,8 @@ awQ axI ayA awQ -aAH -aBQ +aQF +aRe awQ aDH aEP @@ -86348,10 +86593,10 @@ apI awQ axJ ayB -azD +aPU aAH aBS -azD +aVH ayz aEQ sDl @@ -97706,7 +97951,7 @@ aaa aaa aaa aaa -wDb +sdX aaa aaa aaa @@ -97960,7 +98205,7 @@ aad aaa aaa aaa -wDb +sdX aaa sjr aaa @@ -98472,7 +98717,7 @@ aaa aaa aaa aaa -wDb +sdX aaa aaa nqr diff --git a/auxmos.dll b/auxmos.dll index d16063c4e4..a5fc480d10 100644 Binary files a/auxmos.dll and b/auxmos.dll differ diff --git a/auxmos.pdb b/auxmos.pdb index 86b751346e..12fb921360 100644 Binary files a/auxmos.pdb and b/auxmos.pdb differ diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index 1c6b7c21d4..1eafe07b13 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -128,6 +128,7 @@ #define TANK_MAX_RELEASE_PRESSURE (ONE_ATMOSPHERE*3) #define TANK_MIN_RELEASE_PRESSURE 0 #define TANK_DEFAULT_RELEASE_PRESSURE 17 +#define TANK_POST_FRAGMENT_REACTIONS 5 //CANATMOSPASS #define ATMOS_PASS_YES 1 @@ -160,6 +161,9 @@ //SNOSTATION #define ICEMOON_DEFAULT_ATMOS "ICEMOON_ATMOS" +//FESTIVESTATION +#define FESTIVE_ATMOS "o2=22;n2=82;TEMP=266" //this goes here right putnam?? + //ATMOSIA GAS MONITOR TAGS #define ATMOS_GAS_MONITOR_INPUT_O2 "o2_in" #define ATMOS_GAS_MONITOR_OUTPUT_O2 "o2_out" @@ -257,6 +261,7 @@ #define GAS_HYPERNOB "nob" #define GAS_NITROUS "n2o" #define GAS_NITRYL "no2" +#define GAS_HYDROGEN "hydrogen" #define GAS_TRITIUM "tritium" #define GAS_BZ "bz" #define GAS_STIMULUM "stim" @@ -264,9 +269,16 @@ #define GAS_MIASMA "miasma" #define GAS_METHANE "methane" #define GAS_METHYL_BROMIDE "methyl_bromide" +#define GAS_BROMINE "bromine" +#define GAS_AMMONIA "ammonia" +#define GAS_FLUORINE "fluorine" +#define GAS_ETHANOL "ethanol" + +#define GAS_GROUP_CHEMICALS "Chemicals" #define GAS_FLAG_DANGEROUS (1<<0) #define GAS_FLAG_BREATH_PROC (1<<1) +#define GAS_FLAG_CHEMICAL (1<<2) //SUPERMATTER DEFINES #define HEAT_PENALTY "heat penalties" diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index dbf5490985..ea527d19ab 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -31,6 +31,9 @@ #define COMSIG_WEATHER_WINDDOWN(event_type) "!weather_winddown [event_type]" #define COMSIG_WEATHER_END(event_type) "!weather_end [event_type]" +/// called by auxgm add_gas: (gas_id) +#define COMSIG_GLOB_NEW_GAS "!new_gas" + // signals from globally accessible objects /// from SSsun when the sun changes position : (primary_sun, suns) #define COMSIG_SUN_MOVED "sun_moved" diff --git a/code/__DEFINES/logging.dm b/code/__DEFINES/logging.dm index ecb58f1291..bde3189272 100644 --- a/code/__DEFINES/logging.dm +++ b/code/__DEFINES/logging.dm @@ -40,15 +40,16 @@ #define LOG_ASAY (1 << 15) #define LOG_VIRUS (1 << 16) #define LOG_SHUTTLE (1 << 18) +#define LOG_VICTIM (1 << 19) //Individual logging panel pages -#define INDIVIDUAL_ATTACK_LOG (LOG_ATTACK) +#define INDIVIDUAL_ATTACK_LOG (LOG_ATTACK | LOG_VICTIM) #define INDIVIDUAL_SAY_LOG (LOG_SAY | LOG_WHISPER | LOG_DSAY) #define INDIVIDUAL_EMOTE_LOG (LOG_EMOTE | LOG_SUBTLER) #define INDIVIDUAL_COMMS_LOG (LOG_PDA | LOG_CHAT | LOG_COMMENT | LOG_TELECOMMS) #define INDIVIDUAL_OOC_LOG (LOG_OOC | LOG_ADMIN) #define INDIVIDUAL_OWNERSHIP_LOG (LOG_OWNERSHIP) -#define INDIVIDUAL_SHOW_ALL_LOG (LOG_ATTACK | LOG_SAY | LOG_WHISPER | LOG_EMOTE | LOG_DSAY | LOG_PDA | LOG_CHAT | LOG_COMMENT | LOG_TELECOMMS | LOG_OOC | LOG_ADMIN | LOG_OWNERSHIP | LOG_GAME) +#define INDIVIDUAL_SHOW_ALL_LOG (LOG_ATTACK | LOG_SAY | LOG_WHISPER | LOG_EMOTE | LOG_DSAY | LOG_PDA | LOG_CHAT | LOG_COMMENT | LOG_TELECOMMS | LOG_OOC | LOG_ADMIN | LOG_OWNERSHIP | LOG_GAME | LOG_VICTIM) #define LOGSRC_CLIENT "Client" #define LOGSRC_MOB "Mob" diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index bac40e3202..3ce91f4332 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -295,7 +295,7 @@ #define APPRENTICE_AGE_MIN 29 // youngest an apprentice can be #define SHOES_SLOWDOWN 0 // How much shoes slow you down by default. Negative values speed you up #define SHOES_SPEED_SLIGHT SHOES_SLOWDOWN - 1 // slightest speed boost to movement -#define POCKET_STRIP_DELAY 40 // time taken (in deciseconds) to search somebody's pockets +#define POCKET_STRIP_DELAY (4 SECONDS) //time taken to search somebody's pockets #define DOOR_CRUSH_DAMAGE 15 // the amount of damage that airlocks deal when they crush you #define HUNGER_FACTOR 0.1 // factor at which mob nutrition decreases diff --git a/code/__DEFINES/reactions.dm b/code/__DEFINES/reactions.dm index b5d322a091..fad53e4830 100644 --- a/code/__DEFINES/reactions.dm +++ b/code/__DEFINES/reactions.dm @@ -13,7 +13,7 @@ #define NITRYL_FORMATION_ENERGY 100000 #define TRITIUM_BURN_OXY_FACTOR 100 #define TRITIUM_BURN_TRIT_FACTOR 10 -#define TRITIUM_BURN_RADIOACTIVITY_FACTOR 50000 //The neutrons gotta go somewhere. Completely arbitrary number. +#define TRITIUM_BURN_RADIOACTIVITY_FACTOR 5000 //The neutrons gotta go somewhere. Completely arbitrary number. #define TRITIUM_MINIMUM_RADIATION_ENERGY 0.1 //minimum 0.01 moles trit or 10 moles oxygen to start producing rads #define SUPER_SATURATION_THRESHOLD 96 #define STIMULUM_HEAT_SCALE 100000 diff --git a/code/__DEFINES/research.dm b/code/__DEFINES/research.dm index 60effc7265..4b8b2c797e 100644 --- a/code/__DEFINES/research.dm +++ b/code/__DEFINES/research.dm @@ -73,4 +73,6 @@ TECHWEB_POINT_TYPE_GENERIC = "General Research"\ ) -#define TECHWEB_BOMB_POINTCAP 50000 //Adjust as needed; Stops toxins from nullifying RND progression mechanics. Current Value Cap Radius: 100 +#define BOMB_TARGET_POINTS 50000 //Adjust as needed. Actual hard cap is double this, but will never be reached due to hyperbolic curve. +#define BOMB_TARGET_SIZE 200 // The shockwave radius required for a bomb to get TECHWEB_BOMB_MIDPOINT points. +#define BOMB_SUB_TARGET_EXPONENT 2 // The power of the points curve below the target size. Higher = less points for worse bombs, below target. diff --git a/code/__DEFINES/strippable.dm b/code/__DEFINES/strippable.dm new file mode 100644 index 0000000000..a660e82784 --- /dev/null +++ b/code/__DEFINES/strippable.dm @@ -0,0 +1,31 @@ +// All of these must be matched in StripMenu.js. +#define STRIPPABLE_ITEM_HEAD "head" +#define STRIPPABLE_ITEM_BACK "back" +#define STRIPPABLE_ITEM_MASK "mask" +#define STRIPPABLE_ITEM_NECK "neck" +#define STRIPPABLE_ITEM_EYES "eyes" +#define STRIPPABLE_ITEM_EARS "ears" +#define STRIPPABLE_ITEM_JUMPSUIT "jumpsuit" +#define STRIPPABLE_ITEM_SUIT "suit" +#define STRIPPABLE_ITEM_GLOVES "gloves" +#define STRIPPABLE_ITEM_FEET "shoes" +#define STRIPPABLE_ITEM_SUIT_STORAGE "suit_storage" +#define STRIPPABLE_ITEM_ID "id" +#define STRIPPABLE_ITEM_BELT "belt" +#define STRIPPABLE_ITEM_LPOCKET "left_pocket" +#define STRIPPABLE_ITEM_RPOCKET "right_pocket" +#define STRIPPABLE_ITEM_LHAND "left_hand" +#define STRIPPABLE_ITEM_RHAND "right_hand" +#define STRIPPABLE_ITEM_HANDCUFFS "handcuffs" +#define STRIPPABLE_ITEM_LEGCUFFS "legcuffs" +#define STRIPPABLE_ITEM_CORGI_COLLAR "corgi_collar" +#define STRIPPABLE_ITEM_PARROT_HEADSET "parrot_headset" + +/// This slot is not obscured. +#define STRIPPABLE_OBSCURING_NONE 0 + +/// This slot is completely obscured, and cannot be accessed. +#define STRIPPABLE_OBSCURING_COMPLETELY 1 + +/// This slot can't be seen, but can be accessed. +#define STRIPPABLE_OBSCURING_HIDDEN 2 diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index f045b5e9aa..f448936356 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -35,6 +35,12 @@ #define SANITIZE_LIST(L) ( islist(L) ? L : list() ) #define reverseList(L) reverseRange(L.Copy()) +/// Performs an insertion on the given lazy list with the given key and value. If the value already exists, a new one will not be made. +#define LAZYORASSOCLIST(lazy_list, key, value) \ + LAZYINITLIST(lazy_list); \ + LAZYINITLIST(lazy_list[key]); \ + lazy_list[key] |= value; + /// Performs an insertion on the given lazy list with the given key and value. If the value already exists, a new one will not be made. #define LAZYORASSOCLIST(lazy_list, key, value) \ LAZYINITLIST(lazy_list); \ diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 4693041f18..a26905f7b3 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -458,6 +458,18 @@ GLOBAL_LIST_EMPTY(species_datums) if(!HAS_TRAIT(L, TRAIT_PASSTABLE)) L.pass_flags &= ~PASSTABLE +/proc/dance_rotate(atom/movable/AM, datum/callback/callperrotate, set_original_dir=FALSE) + set waitfor = FALSE + var/originaldir = AM.dir + for(var/i in list(NORTH,SOUTH,EAST,WEST,EAST,SOUTH,NORTH,SOUTH,EAST,WEST,EAST,SOUTH)) + if(!AM) + return + AM.setDir(i) + callperrotate?.Invoke() + sleep(1) + if(set_original_dir) + AM.setDir(originaldir) + /// Gets the client of the mob, allowing for mocking of the client. /// You only need to use this if you know you're going to be mocking clients somewhere else. #define GET_CLIENT(mob) (##mob.client || ##mob.mock_client) diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index 57c933edc5..2fe020d544 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -347,3 +347,5 @@ default = FALSE /datum/config_entry/flag/dynamic_config_enabled + +/datum/config_entry/flag/station_name_needs_approval diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index c79f9523c0..7329dd653f 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -116,6 +116,11 @@ SUBSYSTEM_DEF(air) /datum/controller/subsystem/air/proc/auxtools_update_reactions() +/datum/controller/subsystem/air/proc/add_reaction(datum/gas_reaction/r) + gas_reactions += r + sortTim(gas_reactions, /proc/cmp_gas_reaction) + auxtools_update_reactions() + /proc/reset_all_air() SSair.can_fire = 0 message_admins("Air reset begun.") @@ -405,7 +410,7 @@ SUBSYSTEM_DEF(air) eq_cooldown += (1-delay_threshold) * (cost_equalize / total_thread_time) * 2 if(eq_cooldown > 0.5) equalize_enabled = FALSE - excited_group_pressure_goal = max(0,excited_group_pressure_goal_target * (1 - delay_threshold)) + excited_group_pressure_goal = max(0,excited_group_pressure_goal_target * delay_threshold) /datum/controller/subsystem/air/proc/process_turfs(resumed = 0) diff --git a/code/datums/elements/mob_holder.dm b/code/datums/elements/mob_holder.dm index 6633ee3a47..0a56095437 100644 --- a/code/datums/elements/mob_holder.dm +++ b/code/datums/elements/mob_holder.dm @@ -168,7 +168,7 @@ L.visible_message("[held_mob] escapes from [L]!", "[held_mob] escapes your grip!") release() -/obj/item/clothing/head/mob_holder/mob_can_equip(mob/living/M, mob/living/equipper, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE) +/obj/item/clothing/head/mob_holder/mob_can_equip(M, equipper, slot, disable_warning, bypass_equip_delay_self) if(M == held_mob || !ishuman(M)) //monkeys holding monkeys holding monkeys... return FALSE return ..() diff --git a/code/datums/elements/strippable.dm b/code/datums/elements/strippable.dm new file mode 100644 index 0000000000..e67120f254 --- /dev/null +++ b/code/datums/elements/strippable.dm @@ -0,0 +1,517 @@ +/// An element for atoms that, when dragged and dropped onto a mob, opens a strip panel. +/datum/element/strippable + element_flags = ELEMENT_BESPOKE | ELEMENT_DETACH + id_arg_index = 2 + + /// An assoc list of keys to /datum/strippable_item + var/list/items + + /// A proc path that returns TRUE/FALSE if we should show the strip panel for this entity. + /// If it does not exist, the strip menu will always show. + /// Will be called with (mob/user). + var/should_strip_proc_path + + /// An existing strip menus + var/list/strip_menus + +/datum/element/strippable/Attach(datum/target, list/items, should_strip_proc_path) + . = ..() + if (!isatom(target)) + return ELEMENT_INCOMPATIBLE + + RegisterSignal(target, COMSIG_MOUSEDROP_ONTO, .proc/mouse_drop_onto) + + src.items = items + src.should_strip_proc_path = should_strip_proc_path + +/datum/element/strippable/Detach(datum/source) + . = ..() + + UnregisterSignal(source, COMSIG_MOUSEDROP_ONTO) + + if (!isnull(strip_menus)) + qdel(strip_menus[source]) + strip_menus -= source + +/datum/element/strippable/proc/mouse_drop_onto(datum/source, atom/over, mob/user) + SIGNAL_HANDLER + + if (user == source) + return + + if (over != user) + return + + // Cyborgs buckle people by dragging them onto them, unless in combat mode. + if (iscyborg(user)) + var/mob/living/silicon/robot/cyborg_user = user + if (cyborg_user.a_intent == INTENT_HARM) + return + + if (!isnull(should_strip_proc_path) && !call(source, should_strip_proc_path)(user)) + return + + var/datum/strip_menu/strip_menu + + if (isnull(strip_menu)) + strip_menu = new(source, src) + LAZYSET(strip_menus, source, strip_menu) + + INVOKE_ASYNC(strip_menu, /datum/.proc/ui_interact, user) + +/// A representation of an item that can be stripped down +/datum/strippable_item + /// The STRIPPABLE_ITEM_* key + var/key + + /// Should we warn about dangerous clothing? + var/warn_dangerous_clothing = TRUE + +/// Gets the item from the given source. +/datum/strippable_item/proc/get_item(atom/source) + +/// Tries to equip the item onto the given source. +/// Returns TRUE/FALSE depending on if it is allowed. +/// This should be used for checking if an item CAN be equipped. +/// It should not perform the equipping itself. +/datum/strippable_item/proc/try_equip(atom/source, obj/item/equipping, mob/user) + if (HAS_TRAIT(equipping, TRAIT_NODROP)) + to_chat(user, span_warning("You can't put [equipping] on [source], it's stuck to your hand!")) + return FALSE + + return TRUE + +/// Start the equipping process. This is the proc you should yield in. +/// Returns TRUE/FALSE depending on if it is allowed. +/datum/strippable_item/proc/start_equip(atom/source, obj/item/equipping, mob/user) + if (warn_dangerous_clothing && isclothing(source)) + source.visible_message( + span_notice("[user] tries to put [equipping] on [source]."), + span_notice("[user] tries to put [equipping] on you."), + ignored_mobs = user, + ) + + if(ishuman(source)) + var/mob/living/carbon/human/victim_human = source + if(victim_human.key && !victim_human.client) // AKA braindead + if(victim_human.stat <= SOFT_CRIT && LAZYLEN(victim_human.afk_thefts) <= AFK_THEFT_MAX_MESSAGES) + var/list/new_entry = list(list(user.name, "tried equipping you with [equipping]", world.time)) + LAZYADD(victim_human.afk_thefts, new_entry) + + to_chat(user, span_notice("You try to put [equipping] on [source]...")) + + var/log = "[key_name(source)] is having [equipping] put on them by [key_name(user)]" + user.log_message(log, LOG_ATTACK, color="red") + source.log_message(log, LOG_VICTIM, color="red", log_globally=FALSE) + + return TRUE + +/// The proc that places the item on the source. This should not yield. +/datum/strippable_item/proc/finish_equip(atom/source, obj/item/equipping, mob/user) + SHOULD_NOT_SLEEP(TRUE) + return TRUE + +/// Tries to unequip the item from the given source. +/// Returns TRUE/FALSE depending on if it is allowed. +/// This should be used for checking if it CAN be unequipped. +/// It should not perform the unequipping itself. +/datum/strippable_item/proc/try_unequip(atom/source, mob/user) + SHOULD_NOT_SLEEP(TRUE) + + var/obj/item/item = get_item(source) + if (isnull(item)) + return FALSE + + if (ismob(source)) + var/mob/mob_source = source + if (!item.canStrip(user, mob_source)) + return FALSE + + return TRUE + +/// Start the unequipping process. This is the proc you should yield in. +/// Returns TRUE/FALSE depending on if it is allowed. +/datum/strippable_item/proc/start_unequip(atom/source, mob/user) + var/obj/item/item = get_item(source) + if (isnull(item)) + return FALSE + + source.visible_message( + span_warning("[user] tries to remove [source]'s [item.name]."), + span_userdanger("[user] tries to remove your [item.name]."), + ignored_mobs = user, + ) + + to_chat(user, span_danger("You try to remove [source]'s [item]...")) + user.log_message("[key_name(source)] is being stripped of [item] by [key_name(user)]", LOG_ATTACK, color="red") + source.log_message("[key_name(source)] is being stripped of [item] by [key_name(user)]", LOG_VICTIM, color="red", log_globally=FALSE) + item.add_fingerprint(source) + + if(ishuman(source)) + var/mob/living/carbon/human/victim_human = source + if(victim_human.key && !victim_human.client) // AKA braindead + if(victim_human.stat <= SOFT_CRIT && LAZYLEN(victim_human.afk_thefts) <= AFK_THEFT_MAX_MESSAGES) + var/list/new_entry = list(list(user.name, "tried unequipping your [item.name]", world.time)) + LAZYADD(victim_human.afk_thefts, new_entry) + + return TRUE + +/// The proc that unequips the item from the source. This should not yield. +/datum/strippable_item/proc/finish_unequip(atom/source, mob/user) + +/// Returns a STRIPPABLE_OBSCURING_* define to report on whether or not this is obscured. +/datum/strippable_item/proc/get_obscuring(atom/source) + SHOULD_NOT_SLEEP(TRUE) + return STRIPPABLE_OBSCURING_NONE + +/// Returns the ID of this item's strippable action. +/// Return `null` if there is no alternate action. +/// Any return value of this must be in StripMenu. +/datum/strippable_item/proc/get_alternate_action(atom/source, mob/user) + if(get_obscuring(source) == STRIPPABLE_OBSCURING_COMPLETELY) + return FALSE + return null + +/// Performs an alternative action on this strippable_item. +/// `has_alternate_action` needs to be TRUE. +/datum/strippable_item/proc/alternate_action(atom/source, mob/user) + if(get_obscuring(source) == STRIPPABLE_OBSCURING_COMPLETELY) + return null + return TRUE + +/// Returns whether or not this item should show. +/datum/strippable_item/proc/should_show(atom/source, mob/user) + return TRUE + +/// A preset for equipping items onto mob slots +/datum/strippable_item/mob_item_slot + /// The ITEM_SLOT_* to equip to. + var/item_slot + +/datum/strippable_item/mob_item_slot/get_item(atom/source) + if (!ismob(source)) + return null + + var/mob/mob_source = source + return mob_source.get_item_by_slot(item_slot) + +/datum/strippable_item/mob_item_slot/try_equip(atom/source, obj/item/equipping, mob/user) + . = ..() + if (!.) + return + + if (!ismob(source)) + return FALSE + + if (!equipping.mob_can_equip( + source, + user, + item_slot, + disable_warning = TRUE, + bypass_equip_delay_self = TRUE, + )) + to_chat(user, span_warning("\The [equipping] doesn't fit in that place!")) + return FALSE + + return TRUE + +/datum/strippable_item/mob_item_slot/start_equip(atom/source, obj/item/equipping, mob/user) + . = ..() + if (!.) + return + + if (!ismob(source)) + return FALSE + + if (!do_mob(user, source, get_equip_delay(equipping))) + return FALSE + + if(get_obscuring(source) == STRIPPABLE_OBSCURING_COMPLETELY) + return FALSE + + if (!equipping.mob_can_equip( + source, + user, + item_slot, + disable_warning = TRUE, + bypass_equip_delay_self = TRUE, + )) + return FALSE + + if (!user.temporarilyRemoveItemFromInventory(equipping)) + return FALSE + + return TRUE + +/datum/strippable_item/mob_item_slot/finish_equip(atom/source, obj/item/equipping, mob/user) + if(!..()) + return FALSE + if (!ismob(source)) + return FALSE + + var/mob/mob_source = source + mob_source.equip_to_slot(equipping, item_slot) + +/datum/strippable_item/mob_item_slot/get_obscuring(atom/source) + if (iscarbon(source)) + var/mob/living/carbon/carbon_source = source + return (item_slot in carbon_source.check_obscured_slots()) \ + ? STRIPPABLE_OBSCURING_COMPLETELY \ + : STRIPPABLE_OBSCURING_NONE + + return FALSE + +/datum/strippable_item/mob_item_slot/start_unequip(atom/source, mob/user) + . = ..() + if (!.) + return + + return start_unequip_mob(get_item(source), source, user) + +/datum/strippable_item/mob_item_slot/finish_unequip(atom/source, mob/user) + var/obj/item/item = get_item(source) + if (isnull(item)) + return FALSE + + if (!ismob(source)) + return FALSE + + return finish_unequip_mob(item, source, user) + +/// Returns the delay of equipping this item to a mob +/datum/strippable_item/mob_item_slot/proc/get_equip_delay(obj/item/equipping) + return equipping.equip_delay_other + +/// A utility function for `/datum/strippable_item`s to start unequipping an item from a mob. +/proc/start_unequip_mob(obj/item/item, mob/source, mob/user, strip_delay) + if (!do_mob(user, source, strip_delay || item.strip_delay, ignorehelditem = TRUE)) + return FALSE + + return TRUE + +/// A utility function for `/datum/strippable_item`s to finish unequipping an item from a mob. +/proc/finish_unequip_mob(obj/item/item, mob/source, mob/user) + if (!item.doStrip(user, source)) + return FALSE + + user.log_message("[key_name(source)] has been stripped of [item] by [key_name(user)]", LOG_ATTACK, color="red") + source.log_message("[key_name(source)] has been stripped of [item] by [key_name(user)]", LOG_VICTIM, color="red", log_globally=FALSE) + + // Updates speed in case stripped speed affecting item + source.update_equipment_speed_mods() + +/// A representation of the stripping UI +/datum/strip_menu + /// The owner who has the element /datum/element/strippable + var/atom/movable/owner + + /// The strippable element itself + var/datum/element/strippable/strippable + + /// A lazy list of user mobs to a list of strip menu keys that they're interacting with + var/list/interactions + +/datum/strip_menu/New(atom/movable/owner, datum/element/strippable/strippable) + . = ..() + src.owner = owner + src.strippable = strippable + +/datum/strip_menu/Destroy() + owner = null + strippable = null + + return ..() + +/datum/strip_menu/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if (!ui) + ui = new(user, src, "StripMenu") + ui.open() + +/datum/strip_menu/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/simple/inventory), + ) + +/datum/strip_menu/ui_data(mob/user) + var/list/data = list() + + var/list/items = list() + + for (var/strippable_key in strippable.items) + var/datum/strippable_item/item_data = strippable.items[strippable_key] + + if (!item_data.should_show(owner, user)) + continue + + var/list/result + + if(strippable_key in LAZYACCESS(interactions, user)) + LAZYSET(result, "interacting", TRUE) + + var/obscuring = item_data.get_obscuring(owner) + if (obscuring != STRIPPABLE_OBSCURING_NONE) + LAZYSET(result, "obscured", obscuring) + items[strippable_key] = result + continue + + var/obj/item/item = item_data.get_item(owner) + if (isnull(item)) + items[strippable_key] = result + continue + + LAZYINITLIST(result) + + result["icon"] = icon2base64(icon(item.icon, item.icon_state, SOUTH, 1)) + result["name"] = item.name + result["alternate"] = item_data.get_alternate_action(owner, user) + + items[strippable_key] = result + + data["items"] = items + + // While most `\the`s are implicit, this one is not. + // In this case, `\The` would otherwise be used. + // This doesn't match with what it's used for, which is to say "Stripping the alien drone", + // as opposed to "Stripping The alien drone". + // Human names will still show without "the", as they are proper nouns. + data["name"] = "\the [owner]" + + /// Customize the strip menu + data["long_strip_menu"] = user.client.prefs.long_strip_menu + + return data + +/datum/strip_menu/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if (.) + return + + . = TRUE + + var/mob/user = usr + + switch (action) + if ("use") + var/key = params["key"] + var/datum/strippable_item/strippable_item = strippable.items[key] + + if (isnull(strippable_item)) + return + + if (!strippable_item.should_show(owner, user)) + return + + if (strippable_item.get_obscuring(owner) == STRIPPABLE_OBSCURING_COMPLETELY) + return + + var/item = strippable_item.get_item(owner) + if (isnull(item)) + var/obj/item/held_item = user.get_active_held_item() + if (isnull(held_item)) + return + + if (strippable_item.try_equip(owner, held_item, user)) + LAZYORASSOCLIST(interactions, user, key) + + // Yielding call + var/should_finish = strippable_item.start_equip(owner, held_item, user) + + LAZYREMOVEASSOC(interactions, user, key) + + if (!should_finish) + return + + if (QDELETED(src) || QDELETED(owner)) + return + + // They equipped an item in the meantime + if (!isnull(strippable_item.get_item(owner))) + return + + if (!user.Adjacent(owner)) + return + + strippable_item.finish_equip(owner, held_item, user) + else if (strippable_item.try_unequip(owner, user)) + LAZYORASSOCLIST(interactions, user, key) + + var/should_unequip = strippable_item.start_unequip(owner, user) + + LAZYREMOVEASSOC(interactions, user, key) + + // Yielding call + if (!should_unequip) + return + + if (QDELETED(src) || QDELETED(owner)) + return + + // They changed the item in the meantime + if (strippable_item.get_item(owner) != item) + return + + if (!user.Adjacent(owner)) + return + + strippable_item.finish_unequip(owner, user) + if ("alt") + var/key = params["key"] + var/datum/strippable_item/strippable_item = strippable.items[key] + + if (isnull(strippable_item)) + return + + if (!strippable_item.should_show(owner, user)) + return + + if (strippable_item.get_obscuring(owner) == STRIPPABLE_OBSCURING_COMPLETELY) + return + + var/item = strippable_item.get_item(owner) + if (isnull(item)) + return + + if (isnull(strippable_item.get_alternate_action(owner, user))) + return + + LAZYORASSOCLIST(interactions, user, key) + + // Potentially yielding + strippable_item.alternate_action(owner, user) + + LAZYREMOVEASSOC(interactions, user, key) + +/datum/strip_menu/ui_host(mob/user) + return owner + +/datum/strip_menu/ui_state(mob/user) + return GLOB.always_state + +/datum/strip_menu/ui_status(mob/user, datum/ui_state/state) + . = ..() + + if(isliving(user)) + var/mob/living/living_user = user + + if ( + living_user.stat == CONSCIOUS \ + && living_user.Adjacent(owner) + ) + return UI_INTERACTIVE + if(IsAdminGhost(user)) + return UI_INTERACTIVE + if(user.Adjacent(owner)) + return UI_UPDATE + else + return UI_DISABLED + +/// Creates an assoc list of keys to /datum/strippable_item +/proc/create_strippable_list(types) + var/list/strippable_items = list() + + for (var/strippable_type in types) + var/datum/strippable_item/strippable_item = new strippable_type + strippable_items[strippable_item.key] = strippable_item + + return strippable_items diff --git a/code/datums/wounds/bones.dm b/code/datums/wounds/bones.dm index 128c860a6d..bf5c0f55d2 100644 --- a/code/datums/wounds/bones.dm +++ b/code/datums/wounds/bones.dm @@ -119,12 +119,20 @@ victim.bleed(blood_bled, TRUE) if(14 to 19) victim.visible_message("[victim] spits out a string of blood from the blow to [victim.p_their()] chest!", "You spit out a string of blood from the blow to your chest!", vision_distance=COMBAT_MESSAGE_RANGE) - new /obj/effect/temp_visual/dir_setting/bloodsplatter(victim.loc, victim.dir) + if(ishuman(victim)) + var/mob/living/carbon/human/H = victim + new /obj/effect/temp_visual/dir_setting/bloodsplatter(victim.loc, victim.dir, H.dna.species.exotic_blood_color) + else + new /obj/effect/temp_visual/dir_setting/bloodsplatter(victim.loc, victim.dir) victim.bleed(blood_bled) if(20 to INFINITY) victim.visible_message("[victim] chokes up a spray of blood from the blow to [victim.p_their()] chest!", "You choke up on a spray of blood from the blow to your chest!", vision_distance=COMBAT_MESSAGE_RANGE) victim.bleed(blood_bled) - new /obj/effect/temp_visual/dir_setting/bloodsplatter(victim.loc, victim.dir) + if(ishuman(victim)) + var/mob/living/carbon/human/H = victim + new /obj/effect/temp_visual/dir_setting/bloodsplatter(victim.loc, victim.dir, H.dna.species.exotic_blood_color) + else + new /obj/effect/temp_visual/dir_setting/bloodsplatter(victim.loc, victim.dir) victim.add_splatter_floor(get_step(victim.loc, victim.dir)) diff --git a/code/datums/wounds/pierce.dm b/code/datums/wounds/pierce.dm index b26728c377..434a711109 100644 --- a/code/datums/wounds/pierce.dm +++ b/code/datums/wounds/pierce.dm @@ -39,12 +39,20 @@ victim.bleed(blood_bled, TRUE) if(14 to 19) victim.visible_message("A small stream of blood spurts from the hole in [victim]'s [limb.name]!", "You spit out a string of blood from the blow to your [limb.name]!", vision_distance=COMBAT_MESSAGE_RANGE) - new /obj/effect/temp_visual/dir_setting/bloodsplatter(victim.loc, victim.dir) + if(ishuman(victim)) + var/mob/living/carbon/human/H = victim + new /obj/effect/temp_visual/dir_setting/bloodsplatter(victim.loc, victim.dir, H.dna.species.exotic_blood_color) + else + new /obj/effect/temp_visual/dir_setting/bloodsplatter(victim.loc, victim.dir) victim.bleed(blood_bled) if(20 to INFINITY) victim.visible_message("A spray of blood streams from the gash in [victim]'s [limb.name]!", "You choke up on a spray of blood from the blow to your [limb.name]!", vision_distance=COMBAT_MESSAGE_RANGE) victim.bleed(blood_bled) - new /obj/effect/temp_visual/dir_setting/bloodsplatter(victim.loc, victim.dir) + if(ishuman(victim)) + var/mob/living/carbon/human/H = victim + new /obj/effect/temp_visual/dir_setting/bloodsplatter(victim.loc, victim.dir, H.dna.species.exotic_blood_color) + else + new /obj/effect/temp_visual/dir_setting/bloodsplatter(victim.loc, victim.dir) victim.add_splatter_floor(get_step(victim.loc, victim.dir)) /datum/wound/pierce/handle_process() diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm index 3ff75495e6..27b591d374 100644 --- a/code/game/machinery/doppler_array.dm +++ b/code/game/machinery/doppler_array.dm @@ -194,22 +194,19 @@ GLOBAL_LIST_EMPTY(doppler_arrays) /*****The Point Calculator*****/ - if(orig_light < 10) + if(orig_light < 5) say("Explosion not large enough for research calculations.") return - else - point_gain = (100000 * orig_light) / (orig_light + 5000) + else if(orig_light < BOMB_TARGET_SIZE) // we want to give fewer points if below the target; this curve does that + point_gain = (BOMB_TARGET_POINTS * orig_light ** BOMB_SUB_TARGET_EXPONENT) / (BOMB_TARGET_SIZE**BOMB_SUB_TARGET_EXPONENT) + else // once we're at the target, switch to a hyperbolic function so we can't go too far above it, but bigger bombs always get more points + point_gain = (BOMB_TARGET_POINTS * 2 * orig_light) / (orig_light + BOMB_TARGET_SIZE) /*****The Point Capper*****/ if(point_gain > linked_techweb.largest_bomb_value) - if(point_gain <= TECHWEB_BOMB_POINTCAP || linked_techweb.largest_bomb_value < TECHWEB_BOMB_POINTCAP) - var/old_tech_largest_bomb_value = linked_techweb.largest_bomb_value //held so we can pull old before we do math - linked_techweb.largest_bomb_value = point_gain - point_gain -= old_tech_largest_bomb_value - point_gain = min(point_gain,TECHWEB_BOMB_POINTCAP) - else - linked_techweb.largest_bomb_value = TECHWEB_BOMB_POINTCAP - point_gain = 1000 + var/old_tech_largest_bomb_value = linked_techweb.largest_bomb_value //held so we can pull old before we do math + linked_techweb.largest_bomb_value = point_gain + point_gain -= old_tech_largest_bomb_value var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_SCI) if(D) D.adjust_money(point_gain) diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index 5b30105409..8a084353e4 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -45,7 +45,8 @@ Buildable meters if(make_from) make_from_existing(make_from) else - pipe_type = _pipe_type + if(!initial(src.pipe_type)) + pipe_type = _pipe_type setDir(_dir) update() diff --git a/code/game/mecha/equipment/tools/mining_tools.dm b/code/game/mecha/equipment/tools/mining_tools.dm index 06e4208d71..47820d1e27 100644 --- a/code/game/mecha/equipment/tools/mining_tools.dm +++ b/code/game/mecha/equipment/tools/mining_tools.dm @@ -130,7 +130,11 @@ if(isalien(target)) new /obj/effect/temp_visual/dir_setting/bloodsplatter/xenosplatter(target.drop_location(), splatter_dir) else - new /obj/effect/temp_visual/dir_setting/bloodsplatter(target.drop_location(), splatter_dir) + if(ishuman(target)) + var/mob/living/carbon/human/H = target + new /obj/effect/temp_visual/dir_setting/bloodsplatter(target.drop_location(), splatter_dir, H.dna.species.exotic_blood_color) + else + new /obj/effect/temp_visual/dir_setting/bloodsplatter(target.drop_location(), splatter_dir) //organs go everywhere if(target_part && prob(10 * drill_level)) diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index d7eeb2789b..543bad1fb8 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -4,6 +4,7 @@ duration = 5 randomdir = FALSE layer = BELOW_MOB_LAYER + color = BLOOD_COLOR_HUMAN // set it to red by default because the actual icons are white var/splatter_type = "splatter" /obj/effect/temp_visual/dir_setting/bloodsplatter/Initialize(mapload, set_dir, new_color) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index d8c3b0655f..094b1ae0ab 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -1091,6 +1091,19 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb . = ..() if(var_name == NAMEOF(src, slowdown)) set_slowdown(var_value) //don't care if it's a duplicate edit as slowdown'll be set, do it anyways to force normal behavior. + +/obj/item/proc/canStrip(mob/stripper, mob/owner) + SHOULD_BE_PURE(TRUE) + return !HAS_TRAIT(src, TRAIT_NODROP) && !(item_flags & ABSTRACT) + +/obj/item/proc/doStrip(mob/stripper, mob/owner) + if(owner.dropItemToGround(src)) + if(stripper.can_hold_items()) + stripper.put_in_hands(src) + return TRUE + else + return FALSE + /** * Does the current embedding var meet the criteria for being harmless? Namely, does it explicitly define the pain multiplier and jostle pain mult to be 0? If so, return true. * diff --git a/code/game/objects/items/charter.dm b/code/game/objects/items/charter.dm index 3f5296a1ef..e9c3842619 100644 --- a/code/game/objects/items/charter.dm +++ b/code/game/objects/items/charter.dm @@ -14,6 +14,7 @@ var/response_timer_id = null var/approval_time = 600 var/allow_unicode = FALSE + var/admin_approved = FALSE var/static/regex/standard_station_regex @@ -62,8 +63,32 @@ to_chat(user, "Your name has been sent to your employers for approval.") // Autoapproves after a certain time - response_timer_id = addtimer(CALLBACK(src, .proc/rename_station, new_name, user.name, user.real_name, key_name(user)), approval_time, TIMER_STOPPABLE) - to_chat(GLOB.admins, "CUSTOM STATION RENAME:[ADMIN_LOOKUPFLW(user)] proposes to rename the [name_type] to [html_encode(new_name)] (will autoapprove in [DisplayTimeText(approval_time)]). [ADMIN_SMITE(user)] (REJECT) [ADMIN_CENTCOM_REPLY(user)]") + var/requires_approval = CONFIG_GET(flag/station_name_needs_approval) + response_timer_id = addtimer(CALLBACK(src, .proc/check_state, new_name, user.name, user.real_name, key_name(user)), approval_time, TIMER_STOPPABLE) + to_chat(GLOB.admins, "CUSTOM STATION RENAME:[ADMIN_LOOKUPFLW(user)] proposes to rename the [name_type] to [html_encode(new_name)] ([requires_approval ? "REQUIRES ADMIN APPROVAL and will autodeny" : "will autoapprove"] in [DisplayTimeText(approval_time)]). [ADMIN_SMITE(user)] (REJECT)[requires_approval ? " (APPROVE)" : ""] [ADMIN_CENTCOM_REPLY(user)]") + +/obj/item/station_charter/proc/check_state(designation, uname, ureal_name, ukey) + var/requires_approval = CONFIG_GET(flag/station_name_needs_approval) + if(requires_approval && !admin_approved) + var/turf/T = get_turf(src) + T.visible_message("A note appears on [src], stating this sector requires central command approval for its station names, which was not performed in time for this request. Looks like the change has been auto-rejected.") + var/m = "Station rename has been autorejected due to config requiring admin approval." + message_admins(m) + log_admin(m) + else + rename_station(designation, uname, ureal_name, ukey) + response_timer_id = null + admin_approved = FALSE + +/obj/item/station_charter/proc/allow_pass(user) + if(!user) + return + if(!response_timer_id) + return + admin_approved = TRUE + var/m = "[key_name(user)] has approved the proposed station name. It can still be denied prior to the timer expiring." + message_admins(m) + log_admin(m) /obj/item/station_charter/proc/reject_proposed(user) if(!user) @@ -80,6 +105,7 @@ deltimer(response_timer_id) response_timer_id = null + admin_approved = FALSE /obj/item/station_charter/proc/rename_station(designation, uname, ureal_name, ukey) set_station_name(designation) diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index 275536d370..dd176f6d54 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -193,7 +193,7 @@ /obj/item/melee/transforming/energy/sword/saber possible_colors = list("red" = LIGHT_COLOR_RED, "blue" = LIGHT_COLOR_LIGHT_CYAN, "green" = LIGHT_COLOR_GREEN, "purple" = LIGHT_COLOR_LAVENDER) - unique_reskin = list("Sword" = "sword0", "saber" = "esaber0") + unique_reskin = list("Sword" = "sword0", "Saber" = "esaber0") var/hacked = FALSE var/saber = FALSE diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm index b77e4a8ba0..ef798ae631 100644 --- a/code/game/objects/items/tanks/tanks.dm +++ b/code/game/objects/items/tanks/tanks.dm @@ -291,8 +291,8 @@ message_admins("Explosive tank rupture! Last key to touch the tank was [src.fingerprintslast].") log_game("Explosive tank rupture! Last key to touch the tank was [src.fingerprintslast].") //Give the gas a chance to build up more pressure through reacting - air_contents.react(src) - air_contents.react(src) + for(var/i in 1 to TANK_POST_FRAGMENT_REACTIONS) + air_contents.react(src) pressure = air_contents.return_pressure() var/range = (pressure-TANK_FRAGMENT_PRESSURE)/TANK_FRAGMENT_SCALE diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index c32bf81ecf..ce2acdbdf7 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -397,7 +397,7 @@ data["owner_name"] = payments_acc.account_holder if(showpiece) data["product_name"] = capitalize(showpiece.name) - var/base64 = icon2base64(icon(showpiece.icon, showpiece.icon_state)) + var/base64 = icon2base64(icon(showpiece.icon, showpiece.icon_state, SOUTH, 1)) data["product_icon"] = base64 data["registered"] = register data["product_cost"] = sale_price diff --git a/code/game/turfs/simulated/floor/plating/dirt.dm b/code/game/turfs/simulated/floor/plating/dirt.dm index b9bcc0937b..f7f4633254 100644 --- a/code/game/turfs/simulated/floor/plating/dirt.dm +++ b/code/game/turfs/simulated/floor/plating/dirt.dm @@ -19,3 +19,11 @@ /turf/open/floor/plating/dirt/try_replace_tile(obj/item/stack/tile/T, mob/user, params) return + +/turf/open/floor/plating/dirt/space + baseturfs = /turf/baseturf_bottom + planetary_atmos = FALSE + desc = "Upon closer examination there's plating beneath the dirt." + +/turf/open/floor/plating/dirt/space/airless + initial_gas_mix = AIRLESS_ATMOS diff --git a/code/modules/admin/outfit_editor.dm b/code/modules/admin/outfit_editor.dm index 9a99d8b20e..aa53aade13 100644 --- a/code/modules/admin/outfit_editor.dm +++ b/code/modules/admin/outfit_editor.dm @@ -55,7 +55,7 @@ "name" = initial(item.name), "desc" = initial(item.desc), // at this point initializing the item is probably faster tbh - "sprite" = icon2base64(icon(initial(item.icon), initial(item.icon_state))), + "sprite" = icon2base64(icon(initial(item.icon), initial(item.icon_state), SOUTH, 1)), ) return data diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index a8a7e51611..11270e0d96 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2038,6 +2038,12 @@ var/obj/item/station_charter/charter = locate(href_list["reject_custom_name"]) if(istype(charter)) charter.reject_proposed(usr) + else if(href_list["approve_custom_name"]) + if(!check_rights(R_ADMIN)) + return + var/obj/item/station_charter/charter = locate(href_list["approve_custom_name"]) + if(istype(charter)) + charter.allow_pass(usr) else if(href_list["jumpto"]) if(!isobserver(usr) && !check_rights(R_ADMIN)) return diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index 498355f7c3..51299a17bd 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -242,7 +242,7 @@ var/selectors_used = FALSE var/list/combined_refs = list() do - CHECK_TICK + stoplag(2) finished = TRUE for(var/i in running) var/datum/SDQL2_query/query = i diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm index d08caa39d7..ad507adcec 100644 --- a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm +++ b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm @@ -53,7 +53,7 @@ user.adjustOrganLoss(ORGAN_SLOT_BRAIN, 30) addtimer(CALLBACK(user, /mob/living.proc/dropItemToGround, src, TRUE), 1) //equipped happens before putting stuff on(but not before picking items up), 1). thus, we need to wait for it to be on before forcing it off. -/obj/item/clothing/head/helmet/clockwork/mob_can_equip(mob/M, mob/equipper, slot, disable_warning = 0) +/obj/item/clothing/head/helmet/clockwork/mob_can_equip(M, equipper, slot, disable_warning, bypass_equip_delay_self) if(equipper && !is_servant_of_ratvar(equipper)) return 0 return ..() @@ -98,7 +98,7 @@ max_heat_protection_temperature = initial(max_heat_protection_temperature) min_cold_protection_temperature = initial(min_cold_protection_temperature) -/obj/item/clothing/suit/armor/clockwork/mob_can_equip(mob/M, mob/equipper, slot, disable_warning = 0) +/obj/item/clothing/suit/armor/clockwork/mob_can_equip(M, equipper, slot, disable_warning, bypass_equip_delay_self) if(equipper && !is_servant_of_ratvar(equipper)) return 0 return ..() @@ -158,7 +158,7 @@ max_heat_protection_temperature = initial(max_heat_protection_temperature) min_cold_protection_temperature = initial(min_cold_protection_temperature) -/obj/item/clothing/gloves/clockwork/mob_can_equip(mob/M, mob/equipper, slot, disable_warning = 0) +/obj/item/clothing/gloves/clockwork/mob_can_equip(M, equipper, slot, disable_warning, bypass_equip_delay_self) if(equipper && !is_servant_of_ratvar(equipper)) return 0 return ..() @@ -208,7 +208,7 @@ else clothing_flags &= ~NOSLIP -/obj/item/clothing/shoes/clockwork/mob_can_equip(mob/M, mob/equipper, slot, disable_warning = 0) +/obj/item/clothing/shoes/clockwork/mob_can_equip(M, equipper, slot, disable_warning, bypass_equip_delay_self) if(equipper && !is_servant_of_ratvar(equipper)) return 0 return ..() diff --git a/code/modules/atmospherics/auxgm/gas_types.dm b/code/modules/atmospherics/auxgm/gas_types.dm index 6faa3d55d6..8c9b1495c6 100644 --- a/code/modules/atmospherics/auxgm/gas_types.dm +++ b/code/modules/atmospherics/auxgm/gas_types.dm @@ -43,6 +43,7 @@ ) ) fusion_power = 3 + enthalpy = -393500 /datum/gas/plasma id = GAS_PLASMA @@ -54,7 +55,10 @@ heat_penalty = 15 transmit_modifier = 4 powermix = 1 - // no fire info cause it has its own bespoke reaction for trit generation reasons + fire_burn_rate = OXYGEN_BURN_RATE_BASE // named when plasma fires were the only fires, surely + fire_temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST + fire_products = "plasma_fire" + enthalpy = FIRE_PLASMA_ENERGY_RELEASED // 3000000, 3 megajoules, 3000 kj /datum/gas/water_vapor id = GAS_H2O @@ -64,6 +68,7 @@ moles_visible = MOLES_GAS_VISIBLE fusion_power = 8 heat_penalty = 8 + enthalpy = -241800 // FIRE_HYDROGEN_ENERGY_RELEASED is actually what this was supposed to be powermix = 1 breath_reagent = /datum/reagent/water @@ -84,6 +89,7 @@ fire_products = list(GAS_N2 = 1) oxidation_rate = 0.5 oxidation_temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST + 100 + enthalpy = 81600 heat_resistance = 6 /datum/gas/nitryl @@ -95,8 +101,22 @@ flags = GAS_FLAG_DANGEROUS fusion_power = 15 fire_products = list(GAS_N2 = 0.5) + enthalpy = 33200 oxidation_temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST - 50 +/datum/gas/hydrogen + id = GAS_HYDROGEN + specific_heat = 10 + name = "Hydrogen" + flags = GAS_FLAG_DANGEROUS + fusion_power = 0 + powermix = 1 + heat_penalty = 3 + transmit_modifier = 10 + fire_products = list(GAS_H2O = 2) + fire_burn_rate = 2 + fire_temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST - 50 + /datum/gas/tritium id = GAS_TRITIUM specific_heat = 10 @@ -108,13 +128,10 @@ powermix = 1 heat_penalty = 10 transmit_modifier = 30 - /* - these are for when we add hydrogen, trit gets to keep its hardcoded fire for legacy reasons - fire_provides = list(GAS_H2O = 2) + fire_products = list(GAS_H2O = 2) fire_burn_rate = 2 - fire_energy_released = FIRE_HYDROGEN_ENERGY_RELEASED + fire_radiation_released = 50 // arbitrary number, basically 60 moles of trit burning will just barely start to harm you fire_temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST - 50 - */ /datum/gas/bz id = GAS_BZ @@ -124,6 +141,7 @@ fusion_power = 8 powermix = 1 heat_penalty = 5 + enthalpy = FIRE_CARBON_ENERGY_RELEASED // it is a mystery transmit_modifier = -2 radioactivity_modifier = 5 @@ -139,7 +157,8 @@ name = "Pluoxium" fusion_power = 10 oxidation_temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST * 1000 // it is VERY stable - oxidation_rate = 8 + oxidation_rate = 8 // when it can oxidize, it can oxidize a LOT + enthalpy = -50000 // but it reduces the heat output a bit powermix = -1 heat_penalty = -1 transmit_modifier = -5 @@ -172,7 +191,7 @@ alert_type = /atom/movable/screen/alert/too_much_ch4 ) ) - fire_energy_released = FIRE_CARBON_ENERGY_RELEASED + enthalpy = -74600 fire_temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST /datum/gas/methyl_bromide @@ -192,7 +211,28 @@ alert_type = /atom/movable/screen/alert/too_much_ch3br ) ) - fire_products = list(GAS_CO2 = 1, GAS_H2O = 1.5, GAS_BZ = 0.5) - fire_energy_released = FIRE_CARBON_ENERGY_RELEASED - fire_burn_rate = 0.5 + fire_products = list(GAS_CO2 = 1, GAS_H2O = 1.5, GAS_BROMINE = 0.5) + enthalpy = -35400 + fire_burn_rate = 4 / 7 // oh no fire_temperature = 808 // its autoignition, it apparently doesn't spark readily, so i don't put it lower + +/datum/gas/bromine + id = GAS_BROMINE + specific_heat = 76 + name = "Bromine" + flags = GAS_FLAG_DANGEROUS + group = GAS_GROUP_CHEMICALS + enthalpy = 193 // yeah it's small but it's good to include it + breath_reagent = /datum/reagent/bromine + +/datum/gas/ammonia + id = GAS_AMMONIA + specific_heat = 35 + name = "Ammonia" + flags = GAS_FLAG_DANGEROUS + group = GAS_GROUP_CHEMICALS + enthalpy = -45900 + breath_reagent = /datum/reagent/ammonia + fire_products = list(GAS_H2O = 1.5, GAS_N2 = 0.5) + fire_burn_rate = 4/3 + fire_temperature = 924 diff --git a/code/modules/atmospherics/gasmixtures/auxgm.dm b/code/modules/atmospherics/gasmixtures/auxgm.dm index 4aa68aa710..2e5dd716ed 100644 --- a/code/modules/atmospherics/gasmixtures/auxgm.dm +++ b/code/modules/atmospherics/gasmixtures/auxgm.dm @@ -15,6 +15,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(GAS_O2, GAS_N2, GAS_CO2, GA /proc/_auxtools_register_gas(datum/gas/gas) // makes sure auxtools knows stuff about this gas /datum/auxgm + var/done_initializing = FALSE var/list/datums = list() var/list/specific_heats = list() var/list/names = list() @@ -32,30 +33,34 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(GAS_O2, GAS_N2, GAS_CO2, GA var/list/oxidation_temperatures = list() var/list/oxidation_rates = list() var/list/fire_temperatures = list() - var/list/fire_enthalpies = list() + var/list/enthalpies = list() var/list/fire_products = list() var/list/fire_burn_rates = list() var/list/supermatter = list() - + var/list/groups_by_gas = list() + var/list/groups = list() /datum/gas var/id = "" var/specific_heat = 0 var/name = "" var/gas_overlay = "" //icon_state in icons/effects/atmospherics.dmi + var/color = "#ffff" var/moles_visible = null var/flags = NONE //currently used by canisters + var/group = null // groups for scrubber/filter listing var/fusion_power = 0 // How much the gas destabilizes a fusion reaction var/breath_results = GAS_CO2 // what breathing this breathes out - var/breath_reagent = null // what breathing this adds to your reagents - var/breath_reagent_dangerous = null // what breathing this adds to your reagents IF it's above a danger threshold + var/datum/reagent/breath_reagent = null // what breathing this adds to your reagents + var/datum/reagent/breath_reagent_dangerous = null // what breathing this adds to your reagents IF it's above a danger threshold var/list/breath_alert_info = null // list for alerts that pop up when you have too much/not enough of something var/oxidation_temperature = null // temperature above which this gas is an oxidizer; null for none var/oxidation_rate = 1 // how many moles of this can oxidize how many moles of material var/fire_temperature = null // temperature above which gas may catch fire; null for none var/list/fire_products = null // what results when this gas is burned (oxidizer or fuel); null for none - var/fire_energy_released = 0 // how much energy is released per mole of fuel burned + var/enthalpy = 0 // Standard enthalpy of formation in joules, used for fires var/fire_burn_rate = 1 // how many moles are burned per product released + var/fire_radiation_released = 0 // How much radiation is released when this gas burns var/powermix = 0 // how much this gas contributes to the supermatter's powermix ratio var/heat_penalty = 0 // heat and waste penalty from having the supermatter crystal surrounded by this gas; negative numbers reduce var/transmit_modifier = 0 // bonus to supermatter power generation (multiplicative, since it's % based, and divided by 10) @@ -94,21 +99,31 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(GAS_O2, GAS_N2, GAS_CO2, GA breath_reagents[g] = gas.breath_reagent if(gas.breath_reagent_dangerous) breath_reagents_dangerous[g] = gas.breath_reagent_dangerous - if(gas.oxidation_temperature) oxidation_temperatures[g] = gas.oxidation_temperature oxidation_rates[g] = gas.oxidation_rate if(gas.fire_products) fire_products[g] = gas.fire_products - fire_enthalpies[g] = gas.fire_energy_released + enthalpies[g] = gas.enthalpy else if(gas.fire_temperature) fire_temperatures[g] = gas.fire_temperature fire_burn_rates[g] = gas.fire_burn_rate if(gas.fire_products) fire_products[g] = gas.fire_products - fire_enthalpies[g] = gas.fire_energy_released + enthalpies[g] = gas.enthalpy + if(gas.group) + if(!(gas.group in groups)) + groups[gas.group] = list() + groups[gas.group] += gas + groups_by_gas[g] = gas.group add_supermatter_properties(gas) _auxtools_register_gas(gas) + if(done_initializing) + for(var/r in SSair.gas_reactions) + var/datum/gas_reaction/R = r + R.init_reqs() + SSair.auxtools_update_reactions() + SEND_GLOBAL_SIGNAL(COMSIG_GLOB_NEW_GAS, g) /proc/finalize_gas_refs() @@ -127,6 +142,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(GAS_O2, GAS_N2, GAS_CO2, GA for(var/breathing_class_path in subtypesof(/datum/breathing_class)) var/datum/breathing_class/class = new breathing_class_path breathing_classes[breathing_class_path] = class + done_initializing = TRUE finalize_gas_refs() diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm index 19cd865bd0..a6429a0754 100644 --- a/code/modules/atmospherics/gasmixtures/reactions.dm +++ b/code/modules/atmospherics/gasmixtures/reactions.dm @@ -53,23 +53,68 @@ id = "vapor" /datum/gas_reaction/water_vapor/init_reqs() - min_requirements = list(GAS_H2O = MOLES_GAS_VISIBLE) + min_requirements = list( + GAS_H2O = MOLES_GAS_VISIBLE, + "MAX_TEMP" = T0C + 40 + ) /datum/gas_reaction/water_vapor/react(datum/gas_mixture/air, datum/holder) - var/turf/open/location = isturf(holder) ? holder : null - . = NO_REACTION + var/turf/open/location = holder + if(!istype(location)) + return NO_REACTION if (air.return_temperature() <= WATER_VAPOR_FREEZE) if(location && location.freon_gas_act()) - . = REACTING + return REACTING else if(location && location.water_vapor_gas_act()) air.adjust_moles(GAS_H2O,-MOLES_GAS_VISIBLE) - . = REACTING + return REACTING // no test cause it's entirely based on location +/datum/gas_reaction/condensation + priority = 0 + name = "Condensation" + id = "condense" + exclude = TRUE + var/datum/reagent/condensing_reagent + +/datum/gas_reaction/condensation/New(datum/reagent/R) + . = ..() + if(!istype(R)) + return + min_requirements = list( + "MAX_TEMP" = initial(R.boiling_point) + ) + min_requirements[R.get_gas()] = MOLES_GAS_VISIBLE + name = "[R.name] condensation" + id = "[R.type] condensation" + condensing_reagent = R + exclude = FALSE + +/datum/gas_reaction/condensation/react(datum/gas_mixture/air, datum/holder) + . = NO_REACTION + var/turf/open/location = holder + if(!istype(location)) + return + var/temperature = air.return_temperature() + var/static/datum/reagents/reagents_holder = new + reagents_holder.clear_reagents() + reagents_holder.chem_temp = temperature + var/G = condensing_reagent.get_gas() + var/amt = air.get_moles(G) + air.adjust_moles(G, -min(initial(condensing_reagent.condensation_amount), amt)) + reagents_holder.add_reagent(condensing_reagent, amt) + . = REACTING + for(var/atom/movable/AM in location) + if(location.intact && AM.level == 1) + continue + reagents_holder.reaction(AM, TOUCH) + reagents_holder.reaction(location, TOUCH) + //tritium combustion: combustion of oxygen and tritium (treated as hydrocarbons). creates hotspots. exothermic /datum/gas_reaction/tritfire priority = -1 //fire should ALWAYS be last, but tritium fires happen before plasma fires + exclude = TRUE // generic fire now takes care of this name = "Tritium Combustion" id = "tritfire" @@ -88,9 +133,9 @@ item.temperature_expose(air, temperature, CELL_VOLUME) location.temperature_expose(air, temperature, CELL_VOLUME) -/proc/radiation_burn(turf/open/location, energy_released) +/proc/radiation_burn(turf/open/location, rad_power) if(istype(location) && prob(10)) - radiation_pulse(location, energy_released/TRITIUM_BURN_RADIOACTIVITY_FACTOR) + radiation_pulse(location, rad_power) /datum/gas_reaction/tritfire/react(datum/gas_mixture/air, datum/holder) var/energy_released = 0 @@ -151,6 +196,7 @@ /datum/gas_reaction/plasmafire priority = -2 //fire should ALWAYS be last, but plasma fires happen after tritium fires name = "Plasma Combustion" + exclude = TRUE // generic fire now takes care of this id = "plasmafire" /datum/gas_reaction/plasmafire/init_reqs() @@ -300,7 +346,7 @@ fuels[fuel] *= oxidation_ratio fuels += oxidizers var/list/fire_products = GLOB.gas_data.fire_products - var/list/fire_enthalpies = GLOB.gas_data.fire_enthalpies + var/list/fire_enthalpies = GLOB.gas_data.enthalpies for(var/fuel in fuels + oxidizers) var/amt = fuels[fuel] if(!burn_results[fuel]) diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index 2313d9c71d..5ea4be80cb 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -535,7 +535,7 @@ for(var/device_id in A.air_scrub_names) send_signal(device_id, list( "power" = 1, - "set_filters" = list(GAS_CO2, GAS_MIASMA), + "set_filters" = list(GAS_CO2, GAS_MIASMA, GAS_GROUP_CHEMICALS), "scrubbing" = 1, "widenet" = 0, )) @@ -554,6 +554,7 @@ GAS_MIASMA, GAS_PLASMA, GAS_H2O, + GAS_HYDROGEN, GAS_HYPERNOB, GAS_NITROUS, GAS_NITRYL, @@ -562,7 +563,8 @@ GAS_STIMULUM, GAS_PLUOXIUM, GAS_METHANE, - GAS_METHYL_BROMIDE + GAS_METHYL_BROMIDE, + GAS_GROUP_CHEMICALS ), "scrubbing" = 1, "widenet" = 1, @@ -582,9 +584,16 @@ )) for(var/device_id in A.air_vent_names) send_signal(device_id, list( + "is_pressurizing" = 1, "power" = 1, "checks" = 1, - "set_external_pressure" = ONE_ATMOSPHERE*2 + "set_external_pressure" = ONE_ATMOSPHERE*1.4 + )) + send_signal(device_id, list( + "is_siphoning" = 1, + "power" = 1, + "checks" = 1, + "set_external_pressure" = ONE_ATMOSPHERE/1.4 )) if(AALARM_MODE_REFILL) for(var/device_id in A.air_scrub_names) @@ -596,10 +605,15 @@ )) for(var/device_id in A.air_vent_names) send_signal(device_id, list( + "is_pressurizing" = 1, "power" = 1, "checks" = 1, "set_external_pressure" = ONE_ATMOSPHERE * 3 )) + send_signal(device_id, list( + "is_siphoning" = 1, + "power" = 0, + )) if(AALARM_MODE_PANIC, AALARM_MODE_REPLACEMENT) for(var/device_id in A.air_scrub_names) @@ -610,8 +624,14 @@ )) for(var/device_id in A.air_vent_names) send_signal(device_id, list( + "is_pressurizing" = 1, "power" = 0 )) + send_signal(device_id, list( + "is_siphoning" = 1, + "power" = 1, + "checks" = 0 + )) if(AALARM_MODE_SIPHON) for(var/device_id in A.air_scrub_names) send_signal(device_id, list( @@ -621,9 +641,14 @@ )) for(var/device_id in A.air_vent_names) send_signal(device_id, list( + "is_pressurizing" = 1, "power" = 0 )) - + send_signal(device_id, list( + "is_siphoning" = 1, + "power" = 1, + "checks" = 0 + )) if(AALARM_MODE_OFF) for(var/device_id in A.air_scrub_names) send_signal(device_id, list( @@ -641,8 +666,12 @@ for(var/device_id in A.air_vent_names) send_signal(device_id, list( "power" = 1, - "checks" = 2, - "set_internal_pressure" = 0 + "checks" = 0, + "is_pressurizing" = 1 + )) + send_signal(device_id, list( + "power" = 0, + "is_siphoning" = 1 )) /obj/machinery/airalarm/update_icon_state() diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm index 0814b46993..fd89e26792 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm @@ -94,7 +94,10 @@ if(transfer_ratio > 0) if(filter_type && air2.return_pressure() <= 9000) - air1.scrub_into(air2, transfer_ratio, list(filter_type)) + if(filter_type in GLOB.gas_data.groups) + air1.scrub_into(air2, transfer_ratio, GLOB.gas_data.groups[filter_type]) + else + air1.scrub_into(air2, transfer_ratio, list(filter_type)) if(air3.return_pressure() <= 9000) air1.transfer_ratio_to(air3, transfer_ratio) @@ -119,8 +122,10 @@ data["filter_types"] = list() data["filter_types"] += list(list("name" = "Nothing", "id" = "", "selected" = !filter_type)) for(var/id in GLOB.gas_data.ids) - data["filter_types"] += list(list("name" = GLOB.gas_data.names[id], "id" = id, "selected" = (id == filter_type))) - + if(!(id in GLOB.gas_data.groups_by_gas)) + data["filter_types"] += list(list("name" = GLOB.gas_data.names[id], "id" = id, "selected" = (id == filter_type))) + for(var/group in GLOB.gas_data.groups) + data["filter_types"] += list(list("name" = group, "id" = group, "selected" = (group == filter_type))) return data /obj/machinery/atmospherics/components/trinary/filter/ui_act(action, params) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index a3644ed084..deafe7a9f0 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -178,6 +178,9 @@ var/mob/signal_sender = signal.data["user"] + if((("is_siphoning" in signal.data) && pump_direction == RELEASING) || (("is_pressurizing" in signal.data) && pump_direction == SIPHONING)) + return + if("purge" in signal.data) pressure_checks &= ~EXT_BOUND pump_direction = SIPHONING diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm index 90d5f077a5..098618bc65 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -18,7 +18,8 @@ var/id_tag = null var/scrubbing = SCRUBBING //0 = siphoning, 1 = scrubbing - var/filter_types = list(GAS_CO2) + var/filter_types = list(GAS_CO2, GAS_MIASMA, GAS_GROUP_CHEMICALS) + var/list/clean_filter_types = null var/volume_rate = 200 var/widenet = 0 //is this scrubber acting on the 3x3 area around it. var/list/turf/adjacent_turfs = list() @@ -34,6 +35,16 @@ ..() if(!id_tag) id_tag = assign_uid_vents() + generate_clean_filter_types() + RegisterSignal(SSdcs,COMSIG_GLOB_NEW_GAS,.proc/generate_clean_filter_types) + +/obj/machinery/atmospherics/components/unary/vent_scrubber/proc/generate_clean_filter_types() + clean_filter_types = list() + for(var/id in filter_types) + if(id in GLOB.gas_data.groups) + clean_filter_types += GLOB.gas_data.groups[id] + else + clean_filter_types += id /obj/machinery/atmospherics/components/unary/vent_scrubber/Destroy() var/area/A = get_base_area(src) @@ -95,7 +106,11 @@ var/list/f_types = list() for(var/id in GLOB.gas_data.ids) - f_types += list(list("gas_id" = id, "gas_name" = GLOB.gas_data.names[id], "enabled" = (id in filter_types))) + if(!(id in GLOB.gas_data.groups_by_gas)) + f_types += list(list("gas_id" = id, "gas_name" = GLOB.gas_data.names[id], "enabled" = (id in filter_types))) + + for(var/group in GLOB.gas_data.groups) + f_types += list(list("gas_id" = group, "gas_name" = group, "enabled" = (group in filter_types))) var/datum/signal/signal = new(list( "tag" = id_tag, @@ -147,11 +162,11 @@ var/datum/gas_mixture/environment = tile.return_air() var/datum/gas_mixture/air_contents = airs[1] - if(air_contents.return_pressure() >= 50*ONE_ATMOSPHERE || !islist(filter_types)) + if(air_contents.return_pressure() >= 50*ONE_ATMOSPHERE || !islist(clean_filter_types)) return FALSE if(scrubbing & SCRUBBING) - environment.scrub_into(air_contents, volume_rate/environment.return_volume(), filter_types) + environment.scrub_into(air_contents, volume_rate/environment.return_volume(), clean_filter_types) tile.air_update_turf() @@ -205,11 +220,13 @@ if("toggle_filter" in signal.data) filter_types ^= signal.data["toggle_filter"] + generate_clean_filter_types() if("set_filters" in signal.data) filter_types = list() for(var/gas in signal.data["set_filters"]) filter_types += gas + generate_clean_filter_types() if("init" in signal.data) name = signal.data["init"] diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index effbaae28f..952a11338a 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -171,6 +171,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/auto_fit_viewport = FALSE ///Should we be in the widescreen mode set by the config? var/widescreenpref = TRUE + ///Strip menu style + var/long_strip_menu = FALSE ///What size should pixels be displayed as? 0 is strech to fit var/pixel_size = 0 ///What scaling method should we use? @@ -829,6 +831,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat +="" dat += "

Citadel Preferences

" //Because fuck me if preferences can't be fucking modularized and expected to update in a reasonable timeframe. dat += "Widescreen: [widescreenpref ? "Enabled ([CONFIG_GET(string/default_view)])" : "Disabled (15x15)"]
" + dat += "Long strip menu: [long_strip_menu ? "Enabled" : "Disabled"]
" dat += "Auto stand: [autostand ? "Enabled" : "Disabled"]
" dat += "Auto OOC: [auto_ooc ? "Enabled" : "Disabled"]
" dat += "Force Slot Storage HUD: [no_tetris_storage ? "Enabled" : "Disabled"]
" @@ -2591,6 +2594,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("widescreenpref") widescreenpref = !widescreenpref user.client.view_size.setDefault(getScreenSize(widescreenpref)) + if("long_strip_menu") + long_strip_menu = !long_strip_menu if("pixel_size") switch(pixel_size) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 141775de16..f683ba0ee3 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -410,6 +410,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["ambientocclusion"] >> ambientocclusion S["auto_fit_viewport"] >> auto_fit_viewport S["widescreenpref"] >> widescreenpref + S["long_strip_menu"] >> long_strip_menu S["pixel_size"] >> pixel_size S["scaling_method"] >> scaling_method S["hud_toggle_flash"] >> hud_toggle_flash @@ -472,6 +473,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car ambientocclusion = sanitize_integer(ambientocclusion, 0, 1, initial(ambientocclusion)) auto_fit_viewport = sanitize_integer(auto_fit_viewport, 0, 1, initial(auto_fit_viewport)) widescreenpref = sanitize_integer(widescreenpref, 0, 1, initial(widescreenpref)) + long_strip_menu = sanitize_integer(long_strip_menu, 0, 1, initial(long_strip_menu)) pixel_size = sanitize_integer(pixel_size, PIXEL_SCALING_AUTO, PIXEL_SCALING_3X, initial(pixel_size)) scaling_method = sanitize_text(scaling_method, initial(scaling_method)) hud_toggle_flash = sanitize_integer(hud_toggle_flash, 0, 1, initial(hud_toggle_flash)) @@ -604,6 +606,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["damagescreenshake"], damagescreenshake) WRITE_FILE(S["arousable"], arousable) WRITE_FILE(S["widescreenpref"], widescreenpref) + WRITE_FILE(S["long_strip_menu"], long_strip_menu) WRITE_FILE(S["autostand"], autostand) WRITE_FILE(S["cit_toggles"], cit_toggles) WRITE_FILE(S["preferred_chaos"], preferred_chaos) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 3beeef91d3..1a7c220550 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -443,7 +443,7 @@ BLIND // can't see anything ..() //Species-restricted clothing check. - Thanks Oraclestation, BS13, /vg/station etc. -/obj/item/clothing/mob_can_equip(mob/M, slot, disable_warning = TRUE) +/obj/item/clothing/mob_can_equip(M, equipper, slot, disable_warning = TRUE, bypass_equip_delay_self) //if we can't equip the item anyway, don't bother with species_restricted (also cuts down on spam) if(!..()) diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 6858de59df..8978ad7307 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -267,9 +267,15 @@ desc = "A specialized pair of combat boots with a built-in propulsion system for rapid foward movement." icon_state = "jetboots" resistance_flags = FIRE_PROOF + cold_protection = FEET|LEGS + min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT + heat_protection = FEET|LEGS + max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes actions_types = list(/datum/action/item_action/bhop) permeability_coefficient = 0.05 + unique_reskin = list("Explorer" = "miningjet", + "Jackboot" = "jetboots") var/jumpdistance = 5 //-1 from to see the actual distance, e.g 4 goes over 3 tiles var/jumpspeed = 3 var/recharging_rate = 60 //default 6 seconds between each dash diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index a7f1e1db0b..18138bf4b6 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -637,7 +637,7 @@ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/clown mutantrace_variation = STYLE_DIGITIGRADE -/obj/item/clothing/suit/space/hardsuit/clown/mob_can_equip(mob/M, slot) +/obj/item/clothing/suit/space/hardsuit/clown/mob_can_equip(mob/M, equipper, slot, disable_warning, bypass_equip_delay_self) if(!..() || !ishuman(M)) return FALSE if(M.mind && HAS_TRAIT(M.mind, TRAIT_CLOWN_MENTALITY)) diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index 91078bb135..409cdb825b 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -245,6 +245,8 @@ those who wish to spit in the eyes of God. Sacrifices outright damage for \ a reliance on backstabs and the ability to give fauna concussions on a parry." attack_verb = list("pummeled", "punched", "jabbed", "hammer-fisted", "uppercut", "slammed") + hitsound = 'sound/weapons/resonator_blast.ogg' + sharpness = SHARP_NONE // use your survival dagger or smth icon_state = "crusher-hands" item_state = "crusher0-fist" unique_reskin = list("Gauntlets" = "crusher-hands", diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 0d2a1c0c59..343b95f05d 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -6,8 +6,6 @@ possible_a_intents = list(INTENT_HELP, INTENT_DISARM, INTENT_GRAB, INTENT_HARM) limb_destroyer = 1 hud_type = /datum/hud/alien - var/obj/item/r_store = null - var/obj/item/l_store = null var/caste = "" var/alt_icon = 'icons/mob/alienleap.dmi' //used to switch between the two alien icon files. var/leap_on_click = 0 @@ -22,41 +20,26 @@ can_ventcrawl = TRUE +GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list( + /datum/strippable_item/hand/left, + /datum/strippable_item/hand/right, + /datum/strippable_item/mob_item_slot/handcuffs, + /datum/strippable_item/mob_item_slot/legcuffs, +))) //This is fine right now, if we're adding organ specific damage this needs to be updated /mob/living/carbon/alien/humanoid/Initialize() AddAbility(new/obj/effect/proc_holder/alien/regurgitate(null)) . = ..() + +/mob/living/carbon/alien/humanoid/ComponentInitialize() + . = ..() AddComponent(/datum/component/footstep, FOOTSTEP_MOB_CLAW, 0.5, -3) + AddElement(/datum/element/strippable, GLOB.strippable_alien_humanoid_items) /mob/living/carbon/alien/humanoid/restrained(ignore_grab) return handcuffed -/mob/living/carbon/alien/humanoid/show_inv(mob/user) - user.set_machine(src) - var/list/dat = list() - dat += {" -
- [name] -
"} - for(var/i in 1 to held_items.len) - var/obj/item/I = get_item_for_held_index(i) - dat += "
[get_held_index_name(i)]:[(I && !(I.item_flags & ABSTRACT)) ? I : "Empty"]" - dat += "
Empty Pouches" - - if(handcuffed) - dat += "
Handcuffed" - if(legcuffed) - dat += "
Legcuffed" - - dat += {" -
-
Close - "} - user << browse(dat.Join(), "window=mob[REF(src)];size=325x500") - onclose(user, "mob[REF(src)]") - - /mob/living/carbon/alien/humanoid/Topic(href, href_list) ..() //strip panel & embeds @@ -70,12 +53,6 @@ return SEND_SIGNAL(src, COMSIG_CARBON_EMBED_RIP, I, L) return - if(href_list["pouches"]) - visible_message("[usr] tries to empty [src]'s pouches.", \ - "[usr] tries to empty [src]'s pouches.") - if(do_mob(usr, src, POCKET_STRIP_DELAY * 0.5)) - dropItemToGround(r_store) - dropItemToGround(l_store) /mob/living/carbon/alien/humanoid/cuff_resist(obj/item/I) playsound(src, 'sound/voice/hiss5.ogg', 40, 1, 1) //Alien roars when starting to break free diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index 77c9a8c579..7a610ac421 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -51,10 +51,6 @@ // new damage icon system // now constructs damage icon for each organ from mask * damage field - -/mob/living/carbon/alien/larva/show_inv(mob/user) - return - /mob/living/carbon/alien/larva/toggle_throw_mode() return diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 0700cba2ea..6acd604ca5 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -229,61 +229,8 @@ /mob/living/carbon/proc/canBeHandcuffed() return 0 - -/mob/living/carbon/show_inv(mob/user) - user.set_machine(src) - var/dat = {" -
- [name] -
-
Head: [(head && !(head.item_flags & ABSTRACT)) ? head : "Nothing"] -
Mask: [(wear_mask && !(wear_mask.item_flags & ABSTRACT)) ? wear_mask : "Nothing"] -
Neck: [(wear_neck && !(wear_neck.item_flags & ABSTRACT)) ? wear_neck : "Nothing"]"} - - for(var/i in 1 to held_items.len) - var/obj/item/I = get_item_for_held_index(i) - dat += "
[get_held_index_name(i)]:[(I && !(I.item_flags & ABSTRACT)) ? I : "Nothing"]" - - dat += "
Back: [back ? back : "Nothing"]" - - if(!HAS_TRAIT(src, TRAIT_NO_INTERNALS) && istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/tank)) - dat += "
[internal ? "Disable Internals" : "Set Internals"]" - - if(handcuffed) - dat += "
Handcuffed" - if(legcuffed) - dat += "
Legcuffed" - - dat += {" -
-
Close - "} - user << browse(dat, "window=mob[REF(src)];size=325x500") - onclose(user, "mob[REF(src)]") - /mob/living/carbon/Topic(href, href_list) ..() - //strip panel - if(usr.canUseTopic(src, BE_CLOSE)) - if(href_list["internal"] && !HAS_TRAIT(src, TRAIT_NO_INTERNALS)) - var/slot = text2num(href_list["internal"]) - var/obj/item/ITEM = get_item_by_slot(slot) - if(ITEM && istype(ITEM, /obj/item/tank) && wear_mask && (wear_mask.clothing_flags & ALLOWINTERNALS)) - visible_message("[usr] tries to [internal ? "close" : "open"] the valve on [src]'s [ITEM.name].", \ - "[usr] tries to [internal ? "close" : "open"] the valve on your [ITEM.name].", \ - target = usr, target_message = "You try to [internal ? "close" : "open"] the valve on [src]'s [ITEM.name].") - if(do_mob(usr, src, POCKET_STRIP_DELAY)) - if(internal) - internal = null - update_internals_hud_icon(0) - else if(ITEM && istype(ITEM, /obj/item/tank)) - if((wear_mask && (wear_mask.clothing_flags & ALLOWINTERNALS)) || getorganslot(ORGAN_SLOT_BREATHING_TUBE)) - internal = ITEM - update_internals_hud_icon(1) - - visible_message("[usr] [internal ? "opens" : "closes"] the valve on [src]'s [ITEM.name].", \ - "[usr] [internal ? "opens" : "closes"] the valve on your [ITEM.name].", \ - target = usr, target_message = "You [internal ? "opens" : "closes"] the valve on [src]'s [ITEM.name].") if(href_list["embedded_object"] && usr.canUseTopic(src, BE_CLOSE)) var/obj/item/bodypart/L = locate(href_list["embedded_limb"]) in bodyparts if(!L) diff --git a/code/modules/mob/living/carbon/carbon_stripping.dm b/code/modules/mob/living/carbon/carbon_stripping.dm new file mode 100644 index 0000000000..45ff02f0d5 --- /dev/null +++ b/code/modules/mob/living/carbon/carbon_stripping.dm @@ -0,0 +1,145 @@ +/datum/strippable_item/mob_item_slot/head + key = STRIPPABLE_ITEM_HEAD + item_slot = SLOT_HEAD + +/datum/strippable_item/mob_item_slot/back + key = STRIPPABLE_ITEM_BACK + item_slot = SLOT_BACK + +/datum/strippable_item/mob_item_slot/back/get_alternate_action(atom/source, mob/user) + if(..() == FALSE) + return null + return get_strippable_alternate_action_internals(get_item(source), source) + +/datum/strippable_item/mob_item_slot/back/alternate_action(atom/source, mob/user) + if (!..()) + return null + return strippable_alternate_action_internals(get_item(source), source, user) + +/datum/strippable_item/mob_item_slot/mask + key = STRIPPABLE_ITEM_MASK + item_slot = SLOT_WEAR_MASK + +/datum/strippable_item/mob_item_slot/neck + key = STRIPPABLE_ITEM_NECK + item_slot = SLOT_NECK + +/datum/strippable_item/mob_item_slot/handcuffs + key = STRIPPABLE_ITEM_HANDCUFFS + item_slot = SLOT_HANDCUFFED + +/datum/strippable_item/mob_item_slot/handcuffs/should_show(atom/source, mob/user) + if (!iscarbon(source)) + return FALSE + + var/mob/living/carbon/carbon_source = source + return !isnull(carbon_source.handcuffed) + +// You shouldn't be able to equip things to handcuff slots. +/datum/strippable_item/mob_item_slot/handcuffs/try_equip(atom/source, obj/item/equipping, mob/user) + return FALSE + +/datum/strippable_item/mob_item_slot/legcuffs + key = STRIPPABLE_ITEM_LEGCUFFS + item_slot = SLOT_LEGCUFFED + +/datum/strippable_item/mob_item_slot/legcuffs/should_show(atom/source, mob/user) + if (!iscarbon(source)) + return FALSE + + var/mob/living/carbon/carbon_source = source + return !isnull(carbon_source.legcuffed) + +// You shouldn't be able to equip things to legcuff slots. +/datum/strippable_item/mob_item_slot/legcuffs/try_equip(atom/source, obj/item/equipping, mob/user) + return FALSE + +/// A strippable item for a hand +/datum/strippable_item/hand + // Putting dangerous clothing in our hand is fine. + warn_dangerous_clothing = FALSE + + /// Which hand? + var/hand_index + +/datum/strippable_item/hand/get_item(atom/source) + if (!ismob(source)) + return null + + var/mob/mob_source = source + return mob_source.get_item_for_held_index(hand_index) + +/datum/strippable_item/hand/try_equip(atom/source, obj/item/equipping, mob/user) + . = ..() + if (!.) + return FALSE + + if (!ismob(source)) + return FALSE + + var/mob/mob_source = source + + if (!mob_source.can_put_in_hand(equipping, hand_index)) + to_chat(src, "\The [equipping] doesn't fit in that place!") + return FALSE + + return TRUE + +/datum/strippable_item/hand/start_equip(atom/source, obj/item/equipping, mob/user) + . = ..() + if (!.) + return + + if (!ismob(source)) + return FALSE + + var/mob/mob_source = source + + if (!do_mob(user, source, equipping.equip_delay_other)) + return FALSE + + if(get_obscuring(source) == STRIPPABLE_OBSCURING_COMPLETELY) + return FALSE + + if (!mob_source.can_put_in_hand(equipping, hand_index)) + return FALSE + + if (!user.temporarilyRemoveItemFromInventory(equipping)) + return FALSE + + return TRUE + +/datum/strippable_item/hand/finish_equip(atom/source, obj/item/equipping, mob/user) + if(!..()) + return FALSE + if (!iscarbon(source)) + return FALSE + + var/mob/mob_source = source + mob_source.put_in_hand(equipping, hand_index) + +/datum/strippable_item/hand/start_unequip(atom/source, mob/user) + . = ..() + if (!.) + return + + return start_unequip_mob(get_item(source), source, user) + +/datum/strippable_item/hand/finish_unequip(atom/source, mob/user) + ..() + var/obj/item/item = get_item(source) + if (isnull(item)) + return FALSE + + if (!ismob(source)) + return FALSE + + return finish_unequip_mob(item, source, user) + +/datum/strippable_item/hand/left + key = STRIPPABLE_ITEM_LHAND + hand_index = 1 + +/datum/strippable_item/hand/right + key = STRIPPABLE_ITEM_RHAND + hand_index = 2 diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 8669a1458a..4fc60cc6ac 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -47,6 +47,7 @@ AddElement(/datum/element/flavor_text/carbon, _name = "Flavor Text", _save_key = "flavor_text") AddElement(/datum/element/flavor_text/carbon/temporary, "", "Set Pose (Temporary Flavor Text)", "This should be used only for things pertaining to the current round!", _save_key = null) AddElement(/datum/element/flavor_text, _name = "OOC Notes", _addendum = "Put information on ERP/vore/lewd-related preferences here. THIS SHOULD NOT CONTAIN REGULAR FLAVORTEXT!!", _always_show = TRUE, _save_key = "ooc_notes", _examine_no_preview = TRUE) + AddElement(/datum/element/strippable, GLOB.strippable_human_items, /mob/living/carbon/human/.proc/should_strip) /mob/living/carbon/human/Destroy() QDEL_NULL(physiology) @@ -110,106 +111,6 @@ var/datum/disease/D = thing . += "* [D.name], Type: [D.spread_text], Stage: [D.stage]/[D.max_stages], Possible Cure: [D.cure_text]" -/mob/living/carbon/human/show_inv(mob/user) - user.set_machine(src) - var/has_breathable_mask = istype(wear_mask, /obj/item/clothing/mask) - var/list/obscured = check_obscured_slots() - var/list/dat = list() - - dat += "" - for(var/i in 1 to held_items.len) - var/obj/item/I = get_item_for_held_index(i) - dat += "" - dat += "" - - dat += "" - - dat += "" - - if(SLOT_WEAR_MASK in obscured) - dat += "" - else - dat += "" - - if(SLOT_NECK in obscured) - dat += "" - else - dat += "" - - if(SLOT_GLASSES in obscured) - dat += "" - else - dat += "" - - if(SLOT_EARS in obscured) - dat += "" - else - dat += "" - - dat += "" - - dat += "" - dat += "" - else - dat += "" - - if(SLOT_SHOES in obscured) - dat += "" - else - dat += "" - - if(SLOT_GLOVES in obscured) - dat += "" - else - dat += "" - - if(SLOT_W_UNIFORM in obscured) - dat += "" - else - dat += "" - - if((w_uniform == null && !(dna && dna.species.nojumpsuit)) || (SLOT_W_UNIFORM in obscured)) - dat += "" - dat += "" - dat += "" - else - dat += "" - dat += "" - dat += "" - - if(handcuffed) - dat += "" - if(legcuffed) - dat += "" - - dat += {"
[get_held_index_name(i)]:[(I && !(I.item_flags & ABSTRACT)) ? I : "Empty"]
 
Back:[(back && !(back.item_flags & ABSTRACT)) ? back : "Empty"]" - if(has_breathable_mask && istype(back, /obj/item/tank)) - dat += " [internal ? "Disable Internals" : "Set Internals"]" - - dat += "
 
Head:[(head && !(head.item_flags & ABSTRACT)) ? head : "Empty"]
Mask:Obscured
Mask:[(wear_mask && !(wear_mask.item_flags & ABSTRACT)) ? wear_mask : "Empty"]
Neck:Obscured
Neck:[(wear_neck && !(wear_neck.item_flags & ABSTRACT)) ? wear_neck : "Empty"]
Eyes:Obscured
Eyes:[(glasses && !(glasses.item_flags & ABSTRACT)) ? glasses : "Empty"]
Ears:Obscured
Ears:[(ears && !(ears.item_flags & ABSTRACT)) ? ears : "Empty"]
 
Exosuit:[(wear_suit && !(wear_suit.item_flags & ABSTRACT)) ? wear_suit : "Empty"]" - if(wear_suit) - if(istype(wear_suit, /obj/item/clothing/suit/space/hardsuit)) - var/hardsuit_head = head && istype(head, /obj/item/clothing/head/helmet/space/hardsuit) - dat += " [hardsuit_head ? "Retract Helmet" : "Extend Helmet"]" - dat += "
 ↳Suit Storage:[(s_store && !(s_store.item_flags & ABSTRACT)) ? s_store : "Empty"]" - if(has_breathable_mask && istype(s_store, /obj/item/tank)) - dat += " [internal ? "Disable Internals" : "Set Internals"]" - dat += "
 ↳Suit Storage:
Shoes:Obscured
Shoes:[(shoes && !(shoes.item_flags & ABSTRACT)) ? shoes : "Empty"]" - if(shoes && shoes.can_be_tied && shoes.tied != SHOES_KNOTTED) - dat += " [shoes.tied ? "Untie shoes" : "Knot shoes"]" - - dat += "
Gloves:Obscured
Gloves:[(gloves && !(gloves.item_flags & ABSTRACT)) ? gloves : "Empty"]
Uniform:Obscured
Uniform:[(w_uniform && !(w_uniform.item_flags & ABSTRACT)) ? w_uniform : "Empty"]
 ↳Pockets:
 ↳ID:
 ↳Belt:
 ↳Belt:[(belt && !(belt.item_flags & ABSTRACT)) ? belt : "Empty"]" - if(has_breathable_mask && istype(belt, /obj/item/tank)) - dat += " [internal ? "Disable Internals" : "Set Internals"]" - dat += "
 ↳Pockets:[(l_store && !(l_store.item_flags & ABSTRACT)) ? "Left (Full)" : "Left (Empty)"]" - dat += " [(r_store && !(r_store.item_flags & ABSTRACT)) ? "Right (Full)" : "Right (Empty)"]
 ↳ID:[(wear_id && !(wear_id.item_flags & ABSTRACT)) ? wear_id : "Empty"]
Handcuffed: Remove
Legcuffed
- Close - "} - - var/datum/browser/popup = new(user, "mob[REF(src)]", "[src]", 440, 510) - popup.set_content(dat.Join()) - popup.open() - // called when something steps onto a human // this could be made more general, but for now just handle mulebot /mob/living/carbon/human/Crossed(atom/movable/AM) @@ -231,83 +132,6 @@ return SEND_SIGNAL(src, COMSIG_CARBON_EMBED_RIP, I, L) return - if(href_list["toggle_helmet"]) - if(!istype(head, /obj/item/clothing/head/helmet/space/hardsuit)) - return - var/obj/item/clothing/head/helmet/space/hardsuit/hardsuit_head = head - visible_message("[usr] tries to [hardsuit_head ? "retract" : "extend"] [src]'s helmet.", \ - "[usr] tries to [hardsuit_head ? "retract" : "extend"] [src]'s helmet.", \ - target = usr, target_message = "You try to [hardsuit_head ? "retract" : "extend"] [src]'s helmet.") - if(!do_mob(usr, src, hardsuit_head ? head.strip_delay : POCKET_STRIP_DELAY)) - return - if(!istype(wear_suit, /obj/item/clothing/suit/space/hardsuit) || (hardsuit_head ? (!head || head != hardsuit_head) : head)) - return - var/obj/item/clothing/suit/space/hardsuit/hardsuit = wear_suit //This should be an hardsuit given all our checks - if(hardsuit.ToggleHelmet(FALSE)) - visible_message("[usr] [hardsuit_head ? "retract" : "extend"] [src]'s helmet", \ - "[usr] [hardsuit_head ? "retract" : "extend"] [src]'s helmet", \ - target = usr, target_message = "You [hardsuit_head ? "retract" : "extend"] [src]'s helmet.") - return - if(href_list["item"]) - var/slot = text2num(href_list["item"]) - if(slot in check_obscured_slots()) - to_chat(usr, "You can't reach that! Something is covering it.") - return - if(href_list["pockets"]) - var/strip_mod = 1 - var/strip_silence = FALSE - var/obj/item/clothing/gloves/G = gloves - if(istype(G)) - strip_mod = G.strip_mod - strip_silence = G.strip_silence - var/pocket_side = href_list["pockets"] - var/pocket_id = (pocket_side == "right" ? SLOT_R_STORE : SLOT_L_STORE) - var/obj/item/pocket_item = (pocket_id == SLOT_R_STORE ? r_store : l_store) - var/obj/item/place_item = usr.get_active_held_item() // Item to place in the pocket, if it's empty - - var/delay_denominator = 1 - if(pocket_item && !(pocket_item.item_flags & ABSTRACT)) - if(HAS_TRAIT(pocket_item, TRAIT_NODROP)) - to_chat(usr, "You try to empty [src]'s [pocket_side] pocket, it seems to be stuck!") - to_chat(usr, "You try to empty [src]'s [pocket_side] pocket.") - else if(place_item && place_item.mob_can_equip(src, usr, pocket_id, 1) && !(place_item.item_flags & ABSTRACT)) - to_chat(usr, "You try to place [place_item] into [src]'s [pocket_side] pocket.") - delay_denominator = 4 - else - return - - if(do_mob(usr, src, max(round(POCKET_STRIP_DELAY/(delay_denominator*strip_mod)),1), ignorehelditem = TRUE)) //placing an item into the pocket is 4 times faster (and the strip_mod too) - if(pocket_item) - if(pocket_item == (pocket_id == SLOT_R_STORE ? r_store : l_store)) //item still in the pocket we search - dropItemToGround(pocket_item) - if(!usr.can_hold_items() || !usr.put_in_hands(pocket_item)) - pocket_item.forceMove(drop_location()) - log_combat(usr, src, "pickpocketed of item: [pocket_item]") - else - if(place_item) - if(place_item.mob_can_equip(src, usr, pocket_id, FALSE, TRUE)) - usr.temporarilyRemoveItemFromInventory(place_item, TRUE) - equip_to_slot(place_item, pocket_id, TRUE) - log_combat(usr, src, "placed item [place_item] onto") - //do nothing otherwise - - // Update strip window - if(usr.machine == src && in_range(src, usr)) - show_inv(usr) - else - // Display a warning if the user mocks up - if(!strip_silence) - to_chat(src, "You feel your [pocket_side] pocket being fumbled with!") - log_combat(usr, src, "failed to [pocket_item ? "pickpocket item [pocket_item] from" : "place item [place_item] onto "]") - - if(usr.canUseTopic(src, BE_CLOSE, NO_DEXTERY, null, FALSE)) - // separate from first canusetopic - var/mob/living/user = usr - if(istype(user) && href_list["shoes"] && (user.mobility_flags & MOBILITY_USE)) // we need to be on the ground, so we'll be a bit looser - shoes.handle_tying(usr) - - ..() //CITADEL CHANGE - removes a tab from behind this ..() so that flavortext can actually be examined - ///////HUDs/////// if(href_list["hud"]) diff --git a/code/modules/mob/living/carbon/human/human_stripping.dm b/code/modules/mob/living/carbon/human/human_stripping.dm new file mode 100644 index 0000000000..6197241ef3 --- /dev/null +++ b/code/modules/mob/living/carbon/human/human_stripping.dm @@ -0,0 +1,306 @@ +#define INTERNALS_TOGGLE_DELAY (4 SECONDS) +#define POCKET_EQUIP_DELAY (1 SECONDS) + +GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list( + /datum/strippable_item/mob_item_slot/head, + /datum/strippable_item/mob_item_slot/back, + /datum/strippable_item/mob_item_slot/mask, + /datum/strippable_item/mob_item_slot/neck, + /datum/strippable_item/mob_item_slot/eyes, + /datum/strippable_item/mob_item_slot/ears, + /datum/strippable_item/mob_item_slot/jumpsuit, + /datum/strippable_item/mob_item_slot/suit, + /datum/strippable_item/mob_item_slot/gloves, + /datum/strippable_item/mob_item_slot/feet, + /datum/strippable_item/mob_item_slot/suit_storage, + /datum/strippable_item/mob_item_slot/id, + /datum/strippable_item/mob_item_slot/belt, + /datum/strippable_item/mob_item_slot/pocket/left, + /datum/strippable_item/mob_item_slot/pocket/right, + /datum/strippable_item/hand/left, + /datum/strippable_item/hand/right, + /datum/strippable_item/mob_item_slot/handcuffs, + /datum/strippable_item/mob_item_slot/legcuffs, +))) + +/mob/living/carbon/human/proc/should_strip(mob/user) + if (user.pulling != src || user.grab_state != GRAB_AGGRESSIVE) + return TRUE + + if (ishuman(user)) + var/mob/living/carbon/human/human_user = user + return !human_user.can_be_firemanned(src) + + return TRUE + +/datum/strippable_item/mob_item_slot/eyes + key = STRIPPABLE_ITEM_EYES + item_slot = SLOT_GLASSES + +/datum/strippable_item/mob_item_slot/ears + key = STRIPPABLE_ITEM_EARS + item_slot = SLOT_EARS + +/datum/strippable_item/mob_item_slot/jumpsuit + key = STRIPPABLE_ITEM_JUMPSUIT + item_slot = SLOT_W_UNIFORM + +/datum/strippable_item/mob_item_slot/jumpsuit/get_alternate_action(atom/source, mob/user) + if(..() == FALSE) + return null + var/obj/item/clothing/under/jumpsuit = get_item(source) + if (!istype(jumpsuit)) + return null + return jumpsuit?.can_adjust ? "adjust_jumpsuit" : null + +/datum/strippable_item/mob_item_slot/jumpsuit/alternate_action(atom/source, mob/user) + if (!..()) + return null + var/obj/item/clothing/under/jumpsuit = get_item(source) + if (!istype(jumpsuit)) + return null + to_chat(source, "[user] is trying to adjust your [jumpsuit.name].") + if (!do_mob(user, source, jumpsuit.strip_delay * 0.5, ignorehelditem = TRUE)) + return + to_chat(source, "[user] successfully adjusted your [jumpsuit.name].") + jumpsuit.toggle_jumpsuit_adjust() + + if (!ismob(source)) + return null + + var/mob/mob_source = source + mob_source.update_inv_w_uniform() + mob_source.update_body() + return TRUE + +/datum/strippable_item/mob_item_slot/suit + key = STRIPPABLE_ITEM_SUIT + item_slot = SLOT_WEAR_SUIT + +/datum/strippable_item/mob_item_slot/suit/get_alternate_action(atom/source, mob/user) + if(..() == FALSE) + return null + var/obj/item/clothing/suit/space/hardsuit/suit = get_item(source) + if(istype(suit)) + if(!suit.helmettype) + return null + return suit?.suittoggled ? "disable_helmet" : "enable_helmet" + return null + +/datum/strippable_item/mob_item_slot/suit/alternate_action(mob/living/carbon/human/source, mob/user) + if(!..()) + return null + if(ishuman(source)) + var/obj/item/clothing/suit/space/hardsuit/hardsuit = get_item(source) + var/obj/item/clothing/head/helmet/space/hardsuit/hardsuit_head = hardsuit.helmet + source.visible_message("[user] tries to [hardsuit.suittoggled ? "retract" : "extend"] [source]'s helmet.", \ + "[user] tries to [hardsuit.suittoggled ? "retract" : "extend"] [source]'s helmet.", \ + target = user, target_message = "You try to [hardsuit.suittoggled ? "retract" : "extend"] [source]'s helmet.") + if(!do_mob(user, source, hardsuit_head ? hardsuit_head.strip_delay : POCKET_STRIP_DELAY, ignorehelditem = TRUE)) + return null + if((source.head != hardsuit_head) && source.head) + return null + if(hardsuit.ToggleHelmet(FALSE)) + source.visible_message("[user] [hardsuit_head ? "retract" : "extend"] [source]'s helmet", \ + "[user] [hardsuit_head ? "retract" : "extend"] [source]'s helmet", \ + target = user, target_message = "You [hardsuit_head ? "retract" : "extend"] [source]'s helmet.") + return TRUE + +/datum/strippable_item/mob_item_slot/gloves + key = STRIPPABLE_ITEM_GLOVES + item_slot = SLOT_GLOVES + +/datum/strippable_item/mob_item_slot/feet + key = STRIPPABLE_ITEM_FEET + item_slot = SLOT_SHOES + +/datum/strippable_item/mob_item_slot/feet/get_alternate_action(atom/source, mob/user) + if(..() == FALSE) + return null + var/obj/item/clothing/shoes/shoes = get_item(source) + if (!istype(shoes) || !shoes.can_be_tied) + return null + + switch (shoes.tied) + if (SHOES_UNTIED) + return "knot" + if (SHOES_TIED) + return "untie" + if (SHOES_KNOTTED) + return "unknot" + +/datum/strippable_item/mob_item_slot/feet/alternate_action(atom/source, mob/user) + if(!..()) + return null + var/obj/item/clothing/shoes/shoes = get_item(source) + if (!istype(shoes)) + return null + + shoes.handle_tying(user) + return TRUE + +/datum/strippable_item/mob_item_slot/suit_storage + key = STRIPPABLE_ITEM_SUIT_STORAGE + item_slot = SLOT_S_STORE + +/datum/strippable_item/mob_item_slot/suit_storage/get_alternate_action(atom/source, mob/user) + if(..() == FALSE) + return null + return get_strippable_alternate_action_internals(get_item(source), source) + +/datum/strippable_item/mob_item_slot/suit_storage/alternate_action(atom/source, mob/user) + if (!..()) + return null + return strippable_alternate_action_internals(get_item(source), source, user) + +/datum/strippable_item/mob_item_slot/id + key = STRIPPABLE_ITEM_ID + item_slot = SLOT_WEAR_ID + +/datum/strippable_item/mob_item_slot/belt + key = STRIPPABLE_ITEM_BELT + item_slot = SLOT_BELT + +/datum/strippable_item/mob_item_slot/belt/get_alternate_action(atom/source, mob/user) + if(..() == FALSE) + return null + return get_strippable_alternate_action_internals(get_item(source), source) + +/datum/strippable_item/mob_item_slot/belt/alternate_action(atom/source, mob/user) + if (!..()) + return null + return strippable_alternate_action_internals(get_item(source), source, user) + +/datum/strippable_item/mob_item_slot/pocket + /// Which pocket we're referencing. Used for visible text. + var/pocket_side + +/datum/strippable_item/mob_item_slot/pocket/get_obscuring(atom/source) + return isnull(get_item(source)) \ + ? STRIPPABLE_OBSCURING_NONE \ + : STRIPPABLE_OBSCURING_HIDDEN + +/datum/strippable_item/mob_item_slot/pocket/get_equip_delay(obj/item/equipping) + return POCKET_EQUIP_DELAY + +/datum/strippable_item/mob_item_slot/pocket/start_equip(atom/source, obj/item/equipping, mob/user) + . = ..() + if (!.) + warn_owner(source) + +/datum/strippable_item/mob_item_slot/pocket/start_unequip(atom/source, mob/user) + var/obj/item/item = get_item(source) + if (isnull(item)) + return FALSE + + to_chat(user, span_notice("You try to empty [source]'s [pocket_side] pocket.")) + + var/log_message = "[key_name(source)] is being pickpocketed of [item] by [key_name(user)] ([pocket_side])" + user.log_message(log_message, LOG_ATTACK, color="red") + source.log_message(log_message, LOG_VICTIM, color="red", log_globally=FALSE) + item.add_fingerprint(source) + + var/result = start_unequip_mob(item, source, user, POCKET_STRIP_DELAY) + + if (!result) + warn_owner(source) + + return result + +/datum/strippable_item/mob_item_slot/pocket/proc/warn_owner(atom/owner) + to_chat(owner, span_warning("You feel your [pocket_side] pocket being fumbled with!")) + +/datum/strippable_item/mob_item_slot/pocket/left + key = STRIPPABLE_ITEM_LPOCKET + item_slot = SLOT_L_STORE + pocket_side = "left" + +/datum/strippable_item/mob_item_slot/pocket/right + key = STRIPPABLE_ITEM_RPOCKET + item_slot = SLOT_R_STORE + pocket_side = "right" + +/proc/get_strippable_alternate_action_internals(obj/item/item, atom/source) + if (!iscarbon(source)) + return null + + var/mob/living/carbon/carbon_source = source + var/obj/item/clothing/mask + var/internals = FALSE + + for(mask in GET_INTERNAL_SLOTS(carbon_source)) + if(istype(mask, /obj/item/clothing/mask)) + var/obj/item/clothing/mask/M = mask + if(M.mask_adjusted) + if(M.adjustmask(carbon_source)) + internals = TRUE + else + internals = TRUE + if((mask.clothing_flags & ALLOWINTERNALS)) + internals = TRUE + + if(carbon_source.getorganslot(ORGAN_SLOT_BREATHING_TUBE)) + internals = TRUE + + if (internals && istype(item, /obj/item/tank)) + return isnull(carbon_source.internal) ? "enable_internals" : "disable_internals" + +/proc/strippable_alternate_action_internals(obj/item/item, atom/source, mob/user) + var/obj/item/tank/tank = item + if (!istype(tank)) + return null + + var/mob/living/carbon/carbon_source = source + if (!istype(carbon_source)) + return null + + var/obj/item/clothing/mask + var/internals = FALSE + + for(mask in GET_INTERNAL_SLOTS(carbon_source)) + if(istype(mask, /obj/item/clothing/mask)) + var/obj/item/clothing/mask/M = mask + if(M.mask_adjusted) + if(M.adjustmask(carbon_source)) + internals = TRUE + else + internals = TRUE + if((mask.clothing_flags & ALLOWINTERNALS)) + internals = TRUE + + if(!internals) + return null + + carbon_source.visible_message( + span_danger("[user] tries to [isnull(carbon_source.internal) ? "open": "close"] the valve on [source]'s [item.name]."), + span_userdanger("[user] tries to [isnull(carbon_source.internal) ? "open": "close"] the valve on your [item.name]."), + ignored_mobs = user, + ) + + to_chat(user, span_notice("You try to [isnull(carbon_source.internal) ? "open": "close"] the valve on [source]'s [item.name]...")) + + if(!do_mob(user, carbon_source, INTERNALS_TOGGLE_DELAY, ignorehelditem = TRUE)) + return null + + if(carbon_source.internal) + carbon_source.internal = null + + // This isn't meant to be FALSE, it correlates to the icon's name. + carbon_source.update_internals_hud_icon(0) + else if (!QDELETED(item)) + if(internals || carbon_source.getorganslot(ORGAN_SLOT_BREATHING_TUBE)) + carbon_source.internal = item + carbon_source.update_internals_hud_icon(1) + + carbon_source.visible_message( + span_danger("[user] [isnull(carbon_source.internal) ? "closes": "opens"] the valve on [source]'s [item.name]."), + span_userdanger("[user] [isnull(carbon_source.internal) ? "closes": "opens"] the valve on your [item.name]."), + ignored_mobs = user, + ) + + to_chat(user, span_notice("You [isnull(carbon_source.internal) ? "close" : "open"] the valve on [source]'s [item.name].")) + + return TRUE + +#undef INTERNALS_TOGGLE_DELAY +#undef POCKET_EQUIP_DELAY diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 196c5ff654..28c5ca5334 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -573,9 +573,6 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put if(druggy) adjust_drugginess(-1) - if(drunkenness) - drunkenness = max(drunkenness-1,0) - if(silent) silent = max(silent-1, 0) @@ -583,7 +580,7 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put handle_hallucinations() if(drunkenness) - drunkenness = max(drunkenness - (drunkenness * 0.04), 0) + drunkenness *= 0.96 if(drunkenness >= 6) SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "drunk", /datum/mood_event/drunk) if(prob(25)) @@ -598,6 +595,7 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "drunk") clear_alert("drunk") sound_environment_override = SOUND_ENVIRONMENT_NONE + drunkenness = max(drunkenness - 0.2, 0) if(mind && (mind.assigned_role == "Scientist" || mind.assigned_role == "Research Director")) if(SSresearch.science_tech) diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 4ab24c31dd..f8ac8c6716 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -16,6 +16,17 @@ /obj/item/bodypart/r_arm/monkey, /obj/item/bodypart/r_leg/monkey, /obj/item/bodypart/l_leg/monkey) hud_type = /datum/hud/monkey +GLOBAL_LIST_INIT(strippable_monkey_items, create_strippable_list(list( + /datum/strippable_item/mob_item_slot/head, + /datum/strippable_item/mob_item_slot/back, + /datum/strippable_item/mob_item_slot/mask, + /datum/strippable_item/mob_item_slot/neck, + /datum/strippable_item/hand/left, + /datum/strippable_item/hand/right, + /datum/strippable_item/mob_item_slot/handcuffs, + /datum/strippable_item/mob_item_slot/legcuffs, +))) + /mob/living/carbon/monkey/Initialize(mapload, cubespawned=FALSE, mob/spawner) add_verb(src, /mob/living/proc/mob_sleep) add_verb(src, /mob/living/proc/lay_down) @@ -47,6 +58,7 @@ . = ..() AddElement(/datum/element/mob_holder, worn_state = "monkey", inv_slots = ITEM_SLOT_HEAD) AddComponent(/datum/component/footstep, FOOTSTEP_MOB_BAREFOOT, 1, 2) + AddElement(/datum/element/strippable, GLOB.strippable_monkey_items) /mob/living/carbon/monkey/Destroy() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 2488fe5127..28fd4e0451 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -935,13 +935,6 @@ what.forceMove(drop_location()) log_combat(src, who, "stripped [what] off") - if(Adjacent(who)) //update inventory window - who.show_inv(src) - else - src << browse(null,"window=mob[REF(who)]") - - who.update_equipment_speed_mods() // Updates speed in case stripped speed affecting item - // The src mob is trying to place an item on someone // Override if a certain mob should be behave differently when placing items (can't, for example) /mob/living/stripPanelEquip(obj/item/what, mob/who, where) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 1a925e8eaf..3aeabd1d51 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -297,7 +297,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list( AM.Hear(rendered, src, message_language, message, null, spans, message_mode, source) SEND_GLOBAL_SIGNAL(COMSIG_GLOB_LIVING_SAY_SPECIAL, src, message) - if(!eavesdrop_range && say_test(message) == "2") // Yell hook + if(client && !eavesdrop_range && say_test(message) == "2") // Yell hook process_yelling(listening, rendered, src, message_language, message, spans, message_mode, source) //speech bubble diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index fb3d009a72..e8c29e6d55 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -24,6 +24,7 @@ . = ..() AddElement(/datum/element/wuv, "yaps happily!", EMOTE_AUDIBLE, /datum/mood_event/pet_animal, "growls!", EMOTE_AUDIBLE) AddElement(/datum/element/mob_holder, held_icon) + AddElement(/datum/element/strippable, GLOB.strippable_corgi_items) //Corgis and pugs are now under one dog subtype @@ -104,18 +105,175 @@ ..(gibbed) regenerate_icons() -/mob/living/simple_animal/pet/dog/corgi/show_inv(mob/user) - if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) +GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list( + /datum/strippable_item/corgi_head, + /datum/strippable_item/corgi_back, + /datum/strippable_item/corgi_collar, + /datum/strippable_item/corgi_id, +))) + +/datum/strippable_item/corgi_head + key = STRIPPABLE_ITEM_HEAD + +/datum/strippable_item/corgi_head/get_item(atom/source) + var/mob/living/simple_animal/pet/dog/corgi/corgi_source = source + if (!istype(corgi_source)) return - user.set_machine(src) - var/dat = "
Inventory of [name]

" - dat += "
Head: [inventory_head]" : "add_inv=head'>Nothing"]" - dat += "
Back: [inventory_back]" : "add_inv=back'>Nothing"]" - dat += "
Collar: [pcollar]" : "add_inv=collar'>Nothing"]" + return corgi_source.inventory_head - user << browse(dat, "window=mob[REF(src)];size=325x500") - onclose(user, "mob[REF(src)]") +/datum/strippable_item/corgi_head/finish_equip(atom/source, obj/item/equipping, mob/user) + if(!..()) + return FALSE + var/mob/living/simple_animal/pet/dog/corgi/corgi_source = source + if (!istype(corgi_source)) + return FALSE + + corgi_source.place_on_head(equipping, user) + +/datum/strippable_item/corgi_head/finish_unequip(atom/source, mob/user) + ..() + var/mob/living/simple_animal/pet/dog/corgi/corgi_source = source + if (!istype(corgi_source)) + return + + finish_unequip_mob(corgi_source.inventory_head, corgi_source, user) + corgi_source.inventory_head = null + corgi_source.update_corgi_fluff() + corgi_source.regenerate_icons() + +/datum/strippable_item/corgi_back + key = STRIPPABLE_ITEM_BACK + +/datum/strippable_item/corgi_back/get_item(atom/source) + var/mob/living/simple_animal/pet/dog/corgi/corgi_source = source + if (!istype(corgi_source)) + return + + return corgi_source.inventory_back + +/datum/strippable_item/corgi_back/try_equip(atom/source, obj/item/equipping, mob/user) + . = ..() + if (!.) + return FALSE + + if (!ispath(equipping.dog_fashion, /datum/dog_fashion/back)) + to_chat(user, "You set [equipping] on [source]'s back, but it falls off!") + equipping.forceMove(source.drop_location()) + if (prob(25)) + step_rand(equipping) + dance_rotate(source, set_original_dir = TRUE) + + return FALSE + + return TRUE + +/datum/strippable_item/corgi_back/finish_equip(atom/source, obj/item/equipping, mob/user) + if(!..()) + return FALSE + var/mob/living/simple_animal/pet/dog/corgi/corgi_source = source + if (!istype(corgi_source)) + return FALSE + + equipping.forceMove(corgi_source) + corgi_source.inventory_back = equipping + corgi_source.update_corgi_fluff() + corgi_source.regenerate_icons() + +/datum/strippable_item/corgi_back/finish_unequip(atom/source, mob/user) + ..() + var/mob/living/simple_animal/pet/dog/corgi/corgi_source = source + if (!istype(corgi_source)) + return + + finish_unequip_mob(corgi_source.inventory_back, corgi_source, user) + corgi_source.inventory_back = null + corgi_source.update_corgi_fluff() + corgi_source.regenerate_icons() + +/datum/strippable_item/corgi_collar + key = STRIPPABLE_ITEM_CORGI_COLLAR + +/datum/strippable_item/corgi_collar/get_item(atom/source) + var/mob/living/simple_animal/pet/dog/corgi/corgi_source = source + if (!istype(corgi_source)) + return + + return corgi_source.pcollar + +/datum/strippable_item/corgi_collar/try_equip(atom/source, obj/item/equipping, mob/user) + . = ..() + if (!.) + return FALSE + + if (!istype(equipping, /obj/item/clothing/neck/petcollar)) + to_chat(user, "That's not a collar.") + return FALSE + + return TRUE + +/datum/strippable_item/corgi_collar/finish_equip(atom/source, obj/item/equipping, mob/user) + if(!..()) + return FALSE + var/mob/living/simple_animal/pet/dog/corgi/corgi_source = source + if (!istype(corgi_source)) + return FALSE + + corgi_source.add_collar(equipping, user) + corgi_source.update_corgi_fluff() + +/datum/strippable_item/corgi_collar/finish_unequip(atom/source, mob/user) + ..() + var/mob/living/simple_animal/pet/dog/corgi/corgi_source = source + if (!istype(corgi_source)) + return + + finish_unequip_mob(corgi_source.pcollar, corgi_source, user) + corgi_source.pcollar = null + corgi_source.update_corgi_fluff() + corgi_source.regenerate_icons() + +/datum/strippable_item/corgi_id + key = STRIPPABLE_ITEM_ID + +/datum/strippable_item/corgi_id/get_item(atom/source) + var/mob/living/simple_animal/pet/dog/corgi/corgi_source = source + if (!istype(corgi_source)) + return + + return corgi_source.access_card + +/datum/strippable_item/corgi_id/try_equip(atom/source, obj/item/equipping, mob/user) + . = ..() + if (!.) + return FALSE + + if (!istype(equipping, /obj/item/card/id)) + to_chat(user, "You can't pin [equipping] to [source]!") + return FALSE + + return TRUE + +/datum/strippable_item/corgi_id/finish_equip(atom/source, obj/item/equipping, mob/user) + if(!..()) + return FALSE + var/mob/living/simple_animal/pet/dog/corgi/corgi_source = source + if (!istype(corgi_source)) + return FALSE + + equipping.forceMove(source) + corgi_source.access_card = equipping + +/datum/strippable_item/corgi_id/finish_unequip(atom/source, mob/user) + ..() + var/mob/living/simple_animal/pet/dog/corgi/corgi_source = source + if (!istype(corgi_source)) + return + + finish_unequip_mob(corgi_source.access_card, corgi_source, user) + corgi_source.access_card = null + corgi_source.update_corgi_fluff() + corgi_source.regenerate_icons() /mob/living/simple_animal/pet/dog/corgi/getarmor(def_zone, type) var/armorval = 0 @@ -158,114 +316,12 @@ ..() update_corgi_fluff() -/mob/living/simple_animal/pet/dog/corgi/Topic(href, href_list) - if(!(iscarbon(usr) || iscyborg(usr)) || !usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) - usr << browse(null, "window=mob[REF(src)]") - usr.unset_machine() - return - - //Removing from inventory - if(href_list["remove_inv"]) - var/remove_from = href_list["remove_inv"] - switch(remove_from) - if(BODY_ZONE_HEAD) - if(inventory_head) - usr.put_in_hands(inventory_head) - inventory_head = null - update_corgi_fluff() - regenerate_icons() - else - to_chat(usr, "There is nothing to remove from its [remove_from].") - return - if("back") - if(inventory_back) - usr.put_in_hands(inventory_back) - inventory_back = null - update_corgi_fluff() - regenerate_icons() - else - to_chat(usr, "There is nothing to remove from its [remove_from].") - return - if("collar") - if(pcollar) - usr.put_in_hands(pcollar) - pcollar = null - update_corgi_fluff() - regenerate_icons() - - show_inv(usr) - - //Adding things to inventory - else if(href_list["add_inv"]) - - var/add_to = href_list["add_inv"] - - switch(add_to) - if("collar") - var/obj/item/clothing/neck/petcollar/P = usr.get_active_held_item() - if(!istype(P)) - to_chat(usr,"That's not a collar.") - return - add_collar(P, usr) - update_corgi_fluff() - - if(BODY_ZONE_HEAD) - place_on_head(usr.get_active_held_item(),usr) - - if("back") - if(inventory_back) - to_chat(usr, "It's already wearing something!") - return - else - var/obj/item/item_to_add = usr.get_active_held_item() - - if(!item_to_add) - usr.visible_message("[usr] pets [src].","You rest your hand on [src]'s back for a moment.") - return - - if(!usr.temporarilyRemoveItemFromInventory(item_to_add)) - to_chat(usr, "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s back!") - return - - if(istype(item_to_add, /obj/item/grenade/plastic)) // last thing he ever wears, I guess - item_to_add.afterattack(src,usr,1) - return - - //The objects that corgis can wear on their backs. - var/allowed = FALSE - if(ispath(item_to_add.dog_fashion, /datum/dog_fashion/back)) - allowed = TRUE - - if(!allowed) - to_chat(usr, "You set [item_to_add] on [src]'s back, but it falls off!") - item_to_add.forceMove(drop_location()) - if(prob(25)) - step_rand(item_to_add) - for(var/i in list(1,2,4,8,4,8,4,dir)) - setDir(i) - sleep(1) - return - - item_to_add.forceMove(src) - src.inventory_back = item_to_add - update_corgi_fluff() - regenerate_icons() - - show_inv(usr) - else - return ..() - //Corgis are supposed to be simpler, so only a select few objects can actually be put //to be compatible with them. The objects are below. //Many hats added, Some will probably be removed, just want to see which ones are popular. // > some will probably be removed /mob/living/simple_animal/pet/dog/corgi/proc/place_on_head(obj/item/item_to_add, mob/user) - - if(istype(item_to_add, /obj/item/grenade/plastic)) // last thing he ever wears, I guess - INVOKE_ASYNC(item_to_add, /obj/item.proc/afterattack, src, user, 1) - return - if(inventory_head) if(user) to_chat(user, "You can't put more than one hat on [src]!") @@ -303,9 +359,7 @@ item_to_add.forceMove(drop_location()) if(prob(25)) step_rand(item_to_add) - for(var/i in list(1,2,4,8,4,8,4,dir)) - setDir(i) - sleep(1) + dance_rotate(src, set_original_dir = TRUE) return valid diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index bd45c482a2..7c7a684cf3 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -124,6 +124,9 @@ /mob/living/simple_animal/parrot/proc/toggle_mode, /mob/living/simple_animal/parrot/proc/perch_mob_player)) +/mob/living/simple_animal/parrot/ComponentInitialize() + . = ..() + AddElement(/datum/element/strippable, GLOB.strippable_parrot_items) /mob/living/simple_animal/parrot/examine(mob/user) . = ..() @@ -183,91 +186,101 @@ return 0 -/* - * Inventory - */ -/mob/living/simple_animal/parrot/show_inv(mob/user) - user.set_machine(src) +GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list( + /datum/strippable_item/parrot_headset, +))) - var/dat = "

Inventory of [name]

" - dat += "
Headset: [ears]" : "add_inv=ears'>Nothing"]" +/datum/strippable_item/parrot_headset + key = STRIPPABLE_ITEM_PARROT_HEADSET - user << browse(dat, "window=mob[REF(src)];size=325x500") - onclose(user, "window=mob[REF(src)]") +/datum/strippable_item/parrot_headset/get_item(atom/source) + var/mob/living/simple_animal/parrot/parrot_source = source + return istype(parrot_source) ? parrot_source.ears : null +/datum/strippable_item/parrot_headset/try_equip(atom/source, obj/item/equipping, mob/user) + . = ..() + if (!.) + return FALSE -/mob/living/simple_animal/parrot/Topic(href, href_list) - if(!(iscarbon(usr) || iscyborg(usr)) || !usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) - usr << browse(null, "window=mob[REF(src)]") - usr.unset_machine() + if (!istype(equipping, /obj/item/radio/headset)) + to_chat(user, "[equipping] won't fit!") + return FALSE + + return TRUE + +// There is no delay for putting a headset on a parrot. +/datum/strippable_item/parrot_headset/start_equip(atom/source, obj/item/equipping, mob/user) + if(get_obscuring(source) == STRIPPABLE_OBSCURING_COMPLETELY) + return FALSE + return TRUE + +/datum/strippable_item/parrot_headset/finish_equip(atom/source, obj/item/equipping, mob/user) + if(!..()) + return FALSE + var/obj/item/radio/headset/radio = equipping + if (!istype(radio)) + return FALSE + + var/mob/living/simple_animal/parrot/parrot_source = source + if (!istype(parrot_source)) + return FALSE + + if (!user.transferItemToLoc(radio, source)) + return FALSE + + parrot_source.ears = radio + + to_chat(user, "You fit [radio] onto [source].") + + parrot_source.available_channels.Cut() + + for (var/channel in radio.channels) + var/channel_to_add + + switch (channel) + if (RADIO_CHANNEL_ENGINEERING) + channel_to_add = RADIO_TOKEN_ENGINEERING + if (RADIO_CHANNEL_COMMAND) + channel_to_add = RADIO_TOKEN_COMMAND + if (RADIO_CHANNEL_SECURITY) + channel_to_add = RADIO_TOKEN_SECURITY + if (RADIO_CHANNEL_SCIENCE) + channel_to_add = RADIO_TOKEN_SCIENCE + if (RADIO_CHANNEL_MEDICAL) + channel_to_add = RADIO_TOKEN_MEDICAL + if (RADIO_CHANNEL_SUPPLY) + channel_to_add = RADIO_TOKEN_SUPPLY + if (RADIO_CHANNEL_SERVICE) + channel_to_add = RADIO_TOKEN_SERVICE + + if (channel_to_add) + parrot_source.available_channels += channel_to_add + + if (radio.translate_binary) + parrot_source.available_channels.Add(MODE_TOKEN_BINARY) + +/datum/strippable_item/parrot_headset/start_unequip(atom/source, mob/user) + . = ..() + if (!.) + return FALSE + + var/mob/living/simple_animal/parrot/parrot_source = source + if (!istype(parrot_source)) return - //Removing from inventory - if(href_list["remove_inv"]) - var/remove_from = href_list["remove_inv"] - switch(remove_from) - if("ears") - if(!ears) - to_chat(usr, "There is nothing to remove from its [remove_from]!") - return - if(!stat) - say("[available_channels.len ? "[pick(available_channels)] " : null]BAWWWWWK LEAVE THE HEADSET BAWKKKKK!") - ears.forceMove(drop_location()) - ears = null - for(var/possible_phrase in speak) - if(copytext_char(possible_phrase, 2, 3) in GLOB.department_radio_keys) - possible_phrase = copytext_char(possible_phrase, 3) + if (!parrot_source.stat) + parrot_source.say("[parrot_source.available_channels.len ? "[pick(parrot_source.available_channels)] " : null]BAWWWWWK LEAVE THE HEADSET BAWKKKKK!") - //Adding things to inventory - else if(href_list["add_inv"]) - var/add_to = href_list["add_inv"] - if(!usr.get_active_held_item()) - to_chat(usr, "You have nothing in your hand to put on its [add_to]!") - return - switch(add_to) - if("ears") - if(ears) - to_chat(usr, "It's already wearing something!") - return - else - var/obj/item/item_to_add = usr.get_active_held_item() - if(!item_to_add) - return + return TRUE - if( !istype(item_to_add, /obj/item/radio/headset) ) - to_chat(usr, "This object won't fit!") - return - - var/obj/item/radio/headset/headset_to_add = item_to_add - - if(!usr.transferItemToLoc(headset_to_add, src)) - return - ears = headset_to_add - to_chat(usr, "You fit the headset onto [src].") - - clearlist(available_channels) - for(var/ch in headset_to_add.channels) - switch(ch) - if(RADIO_CHANNEL_ENGINEERING) - available_channels.Add(RADIO_TOKEN_ENGINEERING) - if(RADIO_CHANNEL_COMMAND) - available_channels.Add(RADIO_TOKEN_COMMAND) - if(RADIO_CHANNEL_SECURITY) - available_channels.Add(RADIO_TOKEN_SECURITY) - if(RADIO_CHANNEL_SCIENCE) - available_channels.Add(RADIO_TOKEN_SCIENCE) - if(RADIO_CHANNEL_MEDICAL) - available_channels.Add(RADIO_TOKEN_MEDICAL) - if(RADIO_CHANNEL_SUPPLY) - available_channels.Add(RADIO_TOKEN_SUPPLY) - if(RADIO_CHANNEL_SERVICE) - available_channels.Add(RADIO_TOKEN_SERVICE) - - if(headset_to_add.translate_binary) - available_channels.Add(MODE_TOKEN_BINARY) - else - return ..() +/datum/strippable_item/parrot_headset/finish_unequip(atom/source, mob/user) + ..() + var/mob/living/simple_animal/parrot/parrot_source = source + if (!istype(parrot_source)) + return + finish_unequip_mob(parrot_source.ears, parrot_source, user) + parrot_source.ears = null /* * Attack responces diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 8a71bb72c4..d240f97a23 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -289,9 +289,6 @@ SEND_SIGNAL(src, COMSIG_MOB_RESET_PERSPECTIVE, A) return TRUE -/mob/proc/show_inv(mob/user) - return - //view() but with a signal, to allow blacklisting some of the otherwise visible atoms. /mob/proc/fov_view(dist = world.view) . = view(dist, src) @@ -508,10 +505,6 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0) unset_machine() src << browse(null, t1) - if(href_list["refresh"]) - if(machine && in_range(src, usr)) - show_inv(machine) - if(usr.canUseTopic(src, BE_CLOSE, NO_DEXTERY)) if(href_list["item"]) var/slot = text2num(href_list["item"]) @@ -528,12 +521,6 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0) else usr.stripPanelEquip(what,src,slot) - if(usr.machine == src) - if(Adjacent(usr)) - show_inv(usr) - else - usr << browse(null,"window=mob[REF(src)]") - // The src mob is trying to strip an item from someone // Defined in living.dm /mob/proc/stripPanelUnequip(obj/item/what, mob/who) @@ -555,12 +542,6 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0) if(isAI(M)) return -/mob/MouseDrop_T(atom/dropping, atom/user) - . = ..() - if(ismob(dropping) && dropping != user) - var/mob/M = dropping - M.show_inv(user) - /mob/proc/is_muzzled() return FALSE diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 7c563b3cb1..2899f0ca11 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -825,7 +825,7 @@ pH = REAGENT_NORMAL_PH return 0 -/datum/reagents/proc/reaction(atom/A, method = TOUCH, volume_modifier = 1, show_message = 1) +/datum/reagents/proc/reaction(atom/A, method = TOUCH, volume_modifier = 1, show_message = 1, from_gas = 0) var/react_type if(isliving(A)) react_type = "LIVING" @@ -849,7 +849,7 @@ touch_protection = L.get_permeability_protection() R.reaction_mob(A, method, R.volume * volume_modifier, show_message, touch_protection) if("TURF") - R.reaction_turf(A, R.volume * volume_modifier, show_message) + R.reaction_turf(A, R.volume * volume_modifier, show_message, from_gas) if("OBJ") R.reaction_obj(A, R.volume * volume_modifier, show_message) @@ -859,17 +859,16 @@ return FALSE //Returns the average specific heat for all reagents currently in this holder. -/datum/reagents/proc/specific_heat() +/datum/reagents/proc/heat_capacity() . = 0 - var/cached_amount = total_volume //cache amount var/list/cached_reagents = reagent_list //cache reagents for(var/I in cached_reagents) var/datum/reagent/R = I - . += R.specific_heat * (R.volume / cached_amount) + . += R.specific_heat * R.volume /datum/reagents/proc/adjust_thermal_energy(J, min_temp = 2.7, max_temp = 1000) - var/S = specific_heat() - chem_temp = clamp(chem_temp + (J / (S * total_volume)), min_temp, max_temp) + var/S = heat_capacity() + chem_temp = clamp(chem_temp + (J / S), min_temp, max_temp) if(istype(my_atom, /obj/item/reagent_containers)) var/obj/item/reagent_containers/RC = my_atom RC.temp_check() diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index b2978f3066..128c4ed3cb 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -390,11 +390,11 @@ var/datum/reagent/R = GLOB.chemical_reagents_list[reagent] if(R) var/state = "Unknown" - if(initial(R.reagent_state) == 1) + if(initial(R.reagent_state) == SOLID) state = "Solid" - else if(initial(R.reagent_state) == 2) + else if(initial(R.reagent_state) == LIQUID) state = "Liquid" - else if(initial(R.reagent_state) == 3) + else if(initial(R.reagent_state) == GAS) state = "Gas" var/const/P = 3 //The number of seconds between life ticks var/T = initial(R.metabolization_rate) * (60 / P) diff --git a/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm b/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm index 489f9dd179..ae87d7714c 100644 --- a/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm +++ b/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm @@ -53,10 +53,10 @@ return beaker = new /obj/item/reagent_containers/glass/beaker/bluespace(src) visible_message("[src] dispenses a bluespace beaker.") - if("amount") - var/input = text2num(params["amount"]) + if("synth_amount") + var/input = text2num(params["synth_amount"]) if(input) - amount = input + amount = max(input, 0) update_icon() /obj/machinery/chem_dispenser/chem_synthesizer/proc/find_reagent(input) diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index fecb9e3dbf..9845903e21 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -53,6 +53,10 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent()) var/chemical_flags = REAGENT_ORGANIC_PROCESS // See fermi/readme.dm REAGENT_DEAD_PROCESS, REAGENT_DONOTSPLIT, REAGENT_ONLYINVERSE, REAGENT_ONMOBMERGE, REAGENT_INVISIBLE, REAGENT_FORCEONNEW, REAGENT_SNEAKYNAME, REAGENT_ORGANIC_PROCESS, REAGENT_ROBOTIC_PROCESS var/value = REAGENT_VALUE_NONE //How much does it sell for in cargo? var/datum/material/material //are we made of material? + var/gas = null //do we have an associated gas? (expects a string, not a datum typepath!) + var/boiling_point = null // point at which this gas boils; if null, will never boil (and thus not become a gas) + var/condensation_amount = 1 + var/molarity = 5 // How many units per mole of this reagent. Technically this is INVERSE molarity, but hey. /datum/reagent/New() . = ..() @@ -77,10 +81,23 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent()) return 1 /datum/reagent/proc/reaction_obj(obj/O, volume) - return + if(O && volume && boiling_point) + var/temp = holder ? holder.chem_temp : T20C + if(temp > boiling_point) + O.atmos_spawn_air("[get_gas()]=[volume/molarity];TEMP=[temp]") -/datum/reagent/proc/reaction_turf(turf/T, volume) - return +/datum/reagent/proc/reaction_turf(turf/T, volume, show_message, from_gas) + if(!from_gas && boiling_point) + var/temp = holder?.chem_temp + if(!temp) + if(isopenturf(T)) + var/turf/open/O = T + var/datum/gas_mixture/air = O.return_air() + temp = air.return_temperature() + else + temp = T20C + if(temp > boiling_point) + T.atmos_spawn_air("[get_gas()]=[volume/molarity];TEMP=[temp]") /datum/reagent/proc/on_mob_life(mob/living/carbon/M) current_cycle++ @@ -235,6 +252,44 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent()) return rs.Join(" | ") +/datum/reagent/proc/define_gas() + if(reagent_state == SOLID) + return null // doesn't make that much sense + var/list/cached_reactions = GLOB.chemical_reactions_list + for(var/reaction in cached_reactions[src.type]) + var/datum/chemical_reaction/C = reaction + if(!istype(C)) + continue + if(C.required_reagents.len < 2) // no reagents that react on their own + return null + var/datum/gas/G = new + G.id = "[src.type]" + G.name = name + G.specific_heat = specific_heat / 10 + G.color = color + G.breath_reagent = src.type + G.group = GAS_GROUP_CHEMICALS + return G + +/datum/reagent/proc/create_gas() + var/datum/gas/G = define_gas() + if(istype(G)) // if this reagent should never be a gas, define_gas may return null + GLOB.gas_data.add_gas(G) + var/datum/gas_reaction/condensation/condensation_reaction = new(src) // did you know? you can totally just add new reactions at runtime. it's allowed + SSair.add_reaction(condensation_reaction) + return G + + +/datum/reagent/proc/get_gas() + if(gas) + return gas + else + var/datum/auxgm/cached_gas_data = GLOB.gas_data + . = "[src.type]" + if(!(. in cached_gas_data.ids)) + create_gas() + + //For easy bloodsucker disgusting and blood removal /datum/reagent/proc/disgust_bloodsucker(mob/living/carbon/C, disgust, blood_change, blood_puke = TRUE, force) if(AmBloodsucker(C)) diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 2f8ab6b8e6..04dc8a0d26 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -14,6 +14,7 @@ taste_description = "alcohol" var/boozepwr = 65 //Higher numbers equal higher hardness, higher hardness equals more intense alcohol poisoning pH = 7.33 + boiling_point = 351.38 value = REAGENT_VALUE_VERY_COMMON //don't bother tweaking all drinks values, way too many can easily be done roundstart or with an upgraded dispenser. /* @@ -85,6 +86,31 @@ All effects don't start immediately, but rather get worse over time; the rate is // +10% success propability on each step, useful while operating in less-than-perfect conditions return ..() +/datum/reagent/consumable/ethanol/define_gas() // So that all alcohols have the same gas, i.e. "ethanol" + var/datum/gas/G = new + G.id = GAS_ETHANOL + G.name = "Ethanol" + G.enthalpy = -234800 + G.specific_heat = 38 + G.fire_products = list(GAS_CO2 = 1, GAS_H2O = 1.5) + G.fire_burn_rate = 1 / 3 + G.fire_temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST + G.color = "#404030" + G.breath_reagent = /datum/reagent/consumable/ethanol + G.group = GAS_GROUP_CHEMICALS + return G + +/datum/reagent/consumable/ethanol/get_gas() + var/datum/auxgm/cached_gas_data = GLOB.gas_data + . = GAS_ETHANOL + if(!(. in cached_gas_data.ids)) + var/datum/gas/G = define_gas() + if(istype(G)) + cached_gas_data.add_gas(G) + else // this codepath should probably not happen at all, since we never use get_gas() on anything with no boiling point + return null + + /datum/reagent/consumable/ethanol/beer name = "Beer" description = "An alcoholic beverage brewed since ancient times on Old Earth. Still popular today." diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 26d248169a..ec628255fa 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -909,20 +909,11 @@ description = "A colorless, odorless gas. Grows on trees but is still pretty valuable." reagent_state = GAS color = "#808080" // rgb: 128, 128, 128 + gas = GAS_O2 + boiling_point = 90.188 taste_mult = 0 // oderless and tasteless pH = 9.2//It's acutally a huge range and very dependant on the chemistry but pH is basically a made up var in it's implementation anyways - -/datum/reagent/oxygen/reaction_obj(obj/O, reac_volume) - if((!O) || (!reac_volume)) - return 0 - var/temp = holder ? holder.chem_temp : T20C - O.atmos_spawn_air("o2=[reac_volume/2];TEMP=[temp]") - -/datum/reagent/oxygen/reaction_turf(turf/open/T, reac_volume) - if(istype(T)) - var/temp = holder ? holder.chem_temp : T20C - T.atmos_spawn_air("o2=[reac_volume/2];TEMP=[temp]") - return + molarity = 2 /datum/reagent/copper name = "Copper" @@ -943,26 +934,18 @@ name = "Nitrogen" description = "A colorless, odorless, tasteless gas. A simple asphyxiant that can silently displace vital oxygen." reagent_state = GAS + gas = GAS_N2 + boiling_point = 77.355 color = "#808080" // rgb: 128, 128, 128 taste_mult = 0 - - -/datum/reagent/nitrogen/reaction_obj(obj/O, reac_volume) - if((!O) || (!reac_volume)) - return 0 - var/temp = holder ? holder.chem_temp : T20C - O.atmos_spawn_air("n2=[reac_volume/2];TEMP=[temp]") - -/datum/reagent/nitrogen/reaction_turf(turf/open/T, reac_volume) - if(istype(T)) - var/temp = holder ? holder.chem_temp : T20C - T.atmos_spawn_air("n2=[reac_volume/2];TEMP=[temp]") - return + molarity = 2 /datum/reagent/hydrogen name = "Hydrogen" description = "A colorless, odorless, nonmetallic, tasteless, highly combustible diatomic gas." reagent_state = GAS + gas = GAS_HYDROGEN + boiling_point = 20.271 color = "#808080" // rgb: 128, 128, 128 taste_mult = 0 pH = 0.1//Now I'm stuck in a trap of my own design. Maybe I should make -ve pHes? (not 0 so I don't get div/0 errors) @@ -1015,9 +998,10 @@ name = "Chlorine" description = "A pale yellow gas that's well known as an oxidizer. While it forms many harmless molecules in its elemental form it is far from harmless." reagent_state = GAS - color = "#808080" // rgb: 128, 128, 128 + color = "#c0c0a0" // rgb: 192, 192, 160 taste_description = "chlorine" pH = 7.4 + boiling_point = 239.11 // You're an idiot for thinking that one of the most corrosive and deadly gasses would be beneficial /datum/reagent/chlorine/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) @@ -1291,7 +1275,15 @@ glass_name = "glass of welder fuel" glass_desc = "Unless you're an industrial tool, this is probably not safe for consumption." pH = 4 + boiling_point = 400 +/datum/reagent/fuel/define_gas() + var/datum/gas/G = ..() + G.enthalpy = 227400 + G.fire_burn_rate = 2 / 5 + G.fire_products = list(GAS_CO2 = 2, GAS_H2O = 1) + G.fire_temperature = T0C+300 + return G /datum/reagent/fuel/reaction_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with welding fuel to make them easy to ignite! if(method == TOUCH || method == VAPOR) @@ -1309,6 +1301,7 @@ description = "A compound used to clean things. Now with 50% more sodium hypochlorite!" color = "#A5F0EE" // rgb: 165, 240, 238 taste_description = "sourness" + boiling_point = T0C+50 pH = 5.5 /datum/reagent/space_cleaner/reaction_obj(obj/O, reac_volume) @@ -1321,6 +1314,7 @@ O.clean_blood() /datum/reagent/space_cleaner/reaction_turf(turf/T, reac_volume) + ..() if(reac_volume >= 1) T.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) SEND_SIGNAL(T, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) @@ -1488,6 +1482,7 @@ name = "Ammonia" description = "A caustic substance commonly used in fertilizer or household cleaners." reagent_state = GAS + gas = GAS_AMMONIA color = "#404030" // rgb: 64, 64, 48 taste_description = "mordant" pH = 11.6 @@ -1506,8 +1501,17 @@ description = "A secondary amine, mildly corrosive." color = "#604030" // rgb: 96, 64, 48 taste_description = "iron" + boiling_point = 328 pH = 12 +/datum/reagent/diethylamine/define_gas() + var/datum/gas/G = ..() + G.fire_burn_rate = 1 / 6 + G.fire_products = list(GAS_H2O = 4, GAS_AMMONIA = 1, GAS_CO2 = 4) + G.enthalpy = -131000 + G.fire_temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST + return G + // This is more bad ass, and pests get hurt by the corrosive nature of it, not the plant. The new trade off is it culls stability. /datum/reagent/diethylamine/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) . = ..() @@ -1524,40 +1528,23 @@ description = "A gas commonly produced by burning carbon fuels. You're constantly producing this in your lungs." color = "#B0B0B0" // rgb : 192, 192, 192 taste_description = "something unknowable" + boiling_point = 195.68 // technically sublimation, not boiling, but same deal + molarity = 5 + gas = GAS_CO2 pH = 6 -/datum/reagent/carbondioxide/reaction_obj(obj/O, reac_volume) - if((!O) || (!reac_volume)) - return 0 - var/temp = holder ? holder.chem_temp : T20C - O.atmos_spawn_air("co2=[reac_volume/5];TEMP=[temp]") - -/datum/reagent/carbondioxide/reaction_turf(turf/open/T, reac_volume) - if(istype(T)) - var/temp = holder ? holder.chem_temp : T20C - T.atmos_spawn_air("co2=[reac_volume/5];TEMP=[temp]") - return - /datum/reagent/nitrous_oxide name = "Nitrous Oxide" description = "A potent oxidizer used as fuel in rockets and as an anaesthetic during surgery." reagent_state = LIQUID metabolization_rate = 1.5 * REAGENTS_METABOLISM color = "#808080" + boiling_point = 184.67 + molarity = 5 + gas = GAS_NITROUS taste_description = "sweetness" pH = 5.8 -/datum/reagent/nitrous_oxide/reaction_obj(obj/O, reac_volume) - if((!O) || (!reac_volume)) - return 0 - var/temp = holder ? holder.chem_temp : T20C - O.atmos_spawn_air("n2o=[reac_volume/5];TEMP=[temp]") - -/datum/reagent/nitrous_oxide/reaction_turf(turf/open/T, reac_volume) - if(istype(T)) - var/temp = holder ? holder.chem_temp : T20C - T.atmos_spawn_air("n2o=[reac_volume/5];TEMP=[temp]") - /datum/reagent/nitrous_oxide/reaction_mob(mob/living/M, method=TOUCH, reac_volume) if(method == VAPOR) M.drowsyness += max(round(reac_volume, 1), 2) @@ -1576,9 +1563,11 @@ name = "Stimulum" description = "An unstable experimental gas that greatly increases the energy of those that inhale it" reagent_state = GAS + gas = GAS_STIMULUM metabolization_rate = 1.5 * REAGENTS_METABOLISM chemical_flags = REAGENT_ALL_PROCESS color = "E1A116" + boiling_point = 150 taste_description = "sourness" value = REAGENT_VALUE_EXCEPTIONAL @@ -1602,9 +1591,11 @@ name = "Nitryl" description = "A highly reactive gas that makes you feel faster" reagent_state = GAS + gas = GAS_NITRYL metabolization_rate = REAGENTS_METABOLISM - color = "90560B" + color = "#90560B" taste_description = "burning" + boiling_point = 294.3 pH = 2 value = REAGENT_VALUE_VERY_RARE @@ -1811,6 +1802,8 @@ reagent_state = LIQUID color = "#b37740" taste_description = "chemicals" + gas = GAS_BROMINE + boiling_point = 332 pH = 7.8 /datum/reagent/phenol @@ -2482,6 +2475,7 @@ var/decal_path = /obj/effect/decal/cleanable/semen /datum/reagent/consumable/semen/reaction_turf(turf/T, reac_volume) + ..() if(!istype(T)) return if(reac_volume < 10) diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm index 94b83bdeca..f2157a619e 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm @@ -47,6 +47,10 @@ metabolization_rate = 4 chemical_flags = REAGENT_ALL_PROCESS taste_description = "burning" + /* no gaseous CLF3 until i can think of a good way to get it to burn that doesn't destroy matter in mysterious ways + boiling_point = 289.4 + */ + condensation_amount = 2 value = REAGENT_VALUE_COMMON /datum/reagent/clf3/on_mob_life(mob/living/carbon/M) @@ -84,6 +88,12 @@ if(!locate(/obj/effect/hotspot) in M.loc) new /obj/effect/hotspot(M.loc) +/datum/reagent/clf3/define_gas() + var/datum/gas/G = ..() + G.enthalpy = -163200 + G.oxidation_temperature = T0C - 50 + return G + /datum/reagent/sorium name = "Sorium" description = "Sends everything flying from the detonation point." @@ -152,8 +162,17 @@ reagent_state = LIQUID color = "#FA00AF" taste_description = "burning" + boiling_point = T20C-10 value = REAGENT_VALUE_UNCOMMON +/datum/reagent/phlogiston/define_gas() + var/datum/gas/G = ..() + G.enthalpy = FIRE_PLASMA_ENERGY_RELEASED / 100 + G.fire_products = list(GAS_O2 = 0.25, GAS_METHANE = 0.75) // meanwhile this is just magic + G.fire_burn_rate = 1 + G.fire_temperature = T20C+1 + return G + /datum/reagent/phlogiston/reaction_mob(mob/living/M, method=TOUCH, reac_volume) M.adjust_fire_stacks(1) var/burndmg = max(0.3*M.fire_stacks, 0.3) @@ -288,6 +307,9 @@ taste_description = "the inside of a fire extinguisher" value = REAGENT_VALUE_UNCOMMON +/datum/reagent/firefighting_foam/define_gas() + return null + /datum/reagent/firefighting_foam/reaction_turf(turf/open/T, reac_volume) if (!istype(T)) return diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index 2b212bd224..cbb46242c3 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -248,7 +248,7 @@ for(var/gas in breath.get_gases()) if(gas in breath_reagents) var/datum/reagent/R = breath_reagents[gas] - H.reagents.add_reagent(R, PP(breath,gas)) + H.reagents.add_reagent(R, breath.get_moles(gas) * initial(R.molarity)) mole_adjustments[gas] = (gas in mole_adjustments) ? mole_adjustments[gas] - breath.get_moles(gas) : -breath.get_moles(gas) for(var/gas in mole_adjustments) diff --git a/code/modules/unit_tests/reactions.dm b/code/modules/unit_tests/reactions.dm index 66d9b49099..c2b62f6fdc 100644 --- a/code/modules/unit_tests/reactions.dm +++ b/code/modules/unit_tests/reactions.dm @@ -1,6 +1,7 @@ /datum/unit_test/reactions/Run() for(var/datum/gas_reaction/G in SSair.gas_reactions) - var/test_info = G.test() - if(!test_info["success"]) - var/message = test_info["message"] - Fail("Gas reaction [G.name] is failing its unit test with the following message: [message]") + if(!G.exclude) + var/test_info = G.test() + if(!test_info["success"]) + var/message = test_info["message"] + Fail("Gas reaction [G.name] is failing its unit test with the following message: [message]") diff --git a/config/entries/general.txt b/config/entries/general.txt index 5fc3512c60..7fef691006 100644 --- a/config/entries/general.txt +++ b/config/entries/general.txt @@ -503,3 +503,6 @@ PAI_CUSTOM_HOLOFORMS ## Enables monstermos/"equalization" step in atmos. # ATMOS_EQUALIZATION_ENABLED + +## Do station renames from the station charter require admin approval to pass, as opposed to autoapproving if not denied. +STATION_NAME_NEEDS_APPROVAL diff --git a/dependencies.sh b/dependencies.sh index aca82a3a05..4474cc8736 100644 --- a/dependencies.sh +++ b/dependencies.sh @@ -21,7 +21,7 @@ export SPACEMAN_DMM_VERSION=suite-1.7 export PYTHON_VERSION=3.6.8 # Auxmos git tag -export AUXMOS_VERSION=v0.2.3 +export AUXMOS_VERSION=v0.3.0 # Extools git tag export EXTOOLS_VERSION=v0.0.7 diff --git a/html/changelog.html b/html/changelog.html index a19bed4578..da0ba48e8b 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,92 @@ -->

+

10 January 2022

+

Linzolle updated:

+
    +
  • bloodsplatter effects no longer white in certain cases
  • +
  • the blood in the BDM ruin is no longer white
  • +
+

Putnam3145 updated:

+
    +
  • Alcohol works again
  • +
+ +

07 January 2022

+

MrJWhit updated:

+
    +
  • Adds an airlock between atmos and engineering on omega.
  • +
+ +

04 January 2022

+

Hatterhat updated:

+
    +
  • Jumpboots now have a mining sprite. Alt-click, as usual, to change 'em.
  • +
+

MrJWhit updated:

+
    +
  • Adds pipes to the SM to make omega better
  • +
  • Various omega fixes
  • +
+

Putnam3145 updated:

+
    +
  • Hydrogen gas (no way to get yet)
  • +
  • Gas groups, such as...
  • +
  • Chemical gases, starting with ethanol, bromine, diethylamine, ammonia, phlogiston
  • +
  • Bromine gas (can make it by tossing hot bromine on the ground OR by burning methyl bromide)
  • +
  • Ammonia gas (toss hot ammonia on the ground OR burn diethylamine)
  • +
  • Snowflake trit/plasma fires fires tweak: Generic fires are now more accurate energy-wise tweak: Water vapor condensation no longer happens below 40 C tweak: Methyl bromide now burns properly
  • +
  • Massive fusion nerf
  • +
  • Due to the removal of snowflake trit fires, trit fires are much, much less hot
  • +
  • Due to the previous, bombs are now easier to reach 50,000 points on (2 : 1 plasma : oxy at 160 kelvins cold side should be fine)
  • +
+ +

03 January 2022

+

TripleShades updated:

+
    +
  • (Meta) Floodlight to Atmospherics tweak: (Meta) Atmospherics Entryway layout change tweak: (Meta) Atmospherics Monitoring room layout tweak tweak: (Meta) Atmospherics Supply Line room airlock location change
  • +
  • (Meta) Incinerator Access airlock now has the correct access
  • +
+ +

02 January 2022

+

DeltaFire15 updated:

+
    +
  • Station names now require admin approval instead of autoaccepting.
  • +
+

Putnam3145 updated:

+
    +
  • Bluespace pipes
  • +
+ +

31 December 2021

+

SandPoot updated:

+
    +
  • You also no longer get every animation sprite and direction sprite of items on the menus.
  • +
+ +

29 December 2021

+

TripleShades updated:

+
    +
  • (Festive Station) Fixes
  • +
  • Readds the cold to Festive Station tweak: (Festive Station) Fixes
  • +
  • (Pubby) Cautery??? I think this is leftover but nobody has touched Pubby since me so it's fine probably
  • +
+ +

23 December 2021

+

Putnam3145 updated:

+
    +
  • Atmos group processing heuristic no longer does opposite of intent
  • +
+ +

21 December 2021

+

ShizCalev updated:

+
    +
  • Fixed an issue where you were able to remove flashlights/bayonets that were supposed to be permanently attached to a gun.
  • +
  • Fixed an issue where you were unable to remove flashlights & bayonets from certain weapons.
  • +
  • Fixed a potential issue where adding a flashlight to your helmet would've caused you to lose other action buttons.
  • +
  • Fixed a issue where guns with multiple action buttons would break all but one of those action buttons. tweak: If you have both a bayonet and a flashlight attached to your gun, you'll now be given a prompt on which you'd like to remove when using a screwdriver on it. tweak: Hacking a firing pin out of a gun is no longer done via a crafting menu - you can now do it by simply holding the gun in your hand and clicking it with a welder/screwdriver/wirecutters.
  • +
+

17 December 2021

DeltaFire15 updated:

    @@ -320,106 +406,6 @@
    • Crayon precision mode.
    - -

    08 November 2021

    -

    timothyteakettle updated:

    -
      -
    • fixes party pod sprite
    • -
    • fixes red panda head marking
    • -
    - -

    06 November 2021

    -

    Putnam3145 updated:

    -
      -
    • Ashwalkers should no longer suffocate on lavaland (and hypothetical other future problems)
    • -
    • A gas mix with 0 oxygen should now properly suffocate you (or 0 plasma, for ashwalkers)
    • -
    - -

    05 November 2021

    -

    keronshb updated:

    -
      -
    • removes required enemies
    • -
    • Lowers assassination threat threshold
    • -
    - -

    31 October 2021

    -

    DeltaFire15 updated:

    -
      -
    • You can now drag things over prone people again.
    • -
    -

    DrPainis updated:

    -
      -
    • Walking no longer makes you fat.
    • -
    -

    keronshb updated:

    -
      -
    • Christmas trees are now indestructible
    • -
    - -

    30 October 2021

    -

    keronshb updated:

    -
      -
    • Jacq can't burn in the cremator anymore
    • -
    • Jacq also can't be cheesed off station
    • -
    • Barth also cannot be destroyed
    • -
    - -

    28 October 2021

    -

    Hatterhat updated:

    -
      -
    • Proto-kinetic gauntlets! Less straight damage, extra damage on backstabs, slows Lavaland fauna on counterhit. tweak: The glaive kit has been renamed to the premium kinetic melee kit, and now has a voucher for either a glaive or gauntlets.
    • -
    • NanoTrasen is rolling out a prototype Autoloom, hidden behind Botanical Engineering. It only processes cotton and logs. Despite its visual similarity to the recycler, it is entirely tamperproof.
    • -
    -

    Linzolle updated:

    -
      -
    • plasmamen now spawn in their proper outfit in the ghostcafe
    • -
    -

    Putnam3145 updated:

    -
      -
    • Removed minesweeper
    • -
    -

    keronshb updated:

    -
      -
    • -40 wound bonus for DSword
    • -
    • -20 Wound bonus for Hyper Eu
    • -
    • Fixes hyper eu's slowdown when it's not wielded
    • -
    - -

    26 October 2021

    -

    WanderingFox95 updated:

    -
      -
    • bone anvils and bone ingots
    • -
    • bone anvil sprites
    • -
    - -

    25 October 2021

    -

    Putnam3145 updated:

    -
      -
    • Vent pumps can now be set to siphoning via the air alarm UI
    • -
    -

    keronshb updated:

    -
      -
    • 10k pirate spending money
    • -
    - -

    22 October 2021

    -

    Putnam3145 updated:

    -
      -
    • Ashwalker lungs more aggressively attempt to be safe on lavaland
    • -
    -

    WanderingFox95 updated:

    -
      -
    • fixed the wielded sprites not showing up properly.
    • -
    • fixed a runtime in the bark box vendor
    • -
    • added a missing tennis ball sprite
    • -
    - -

    20 October 2021

    -

    Putnam3145 updated:

    -
      -
    • Removed a panic from auxmos
    • -
    • Properly implemented hysteresis on heat exchanger processing
    • -
GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 0c24ab2b14..b58c419ceb 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -30403,3 +30403,72 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - bugfix: The time for admins to cancel events is 30 seconds again. SandPoot: - bugfix: Fixes assembly holders. +2021-12-21: + ShizCalev: + - bugfix: Fixed an issue where you were able to remove flashlights/bayonets that + were supposed to be permanently attached to a gun. + - bugfix: Fixed an issue where you were unable to remove flashlights & bayonets + from certain weapons. + - bugfix: Fixed a potential issue where adding a flashlight to your helmet would've + caused you to lose other action buttons. + - bugfix: 'Fixed a issue where guns with multiple action buttons would break all + but one of those action buttons. tweak: If you have both a bayonet and a flashlight + attached to your gun, you''ll now be given a prompt on which you''d like to + remove when using a screwdriver on it. tweak: Hacking a firing pin out of a + gun is no longer done via a crafting menu - you can now do it by simply holding + the gun in your hand and clicking it with a welder/screwdriver/wirecutters.' +2021-12-23: + Putnam3145: + - bugfix: Atmos group processing heuristic no longer does opposite of intent +2021-12-29: + TripleShades: + - rscadd: (Festive Station) Fixes + - rscadd: 'Readds the cold to Festive Station tweak: (Festive Station) Fixes' + - rscadd: (Pubby) Cautery??? I think this is leftover but nobody has touched Pubby + since me so it's fine probably +2021-12-31: + SandPoot: + - bugfix: You also no longer get every animation sprite and direction sprite of + items on the menus. +2022-01-02: + DeltaFire15: + - admin: Station names now require admin approval instead of autoaccepting. + Putnam3145: + - bugfix: Bluespace pipes +2022-01-03: + TripleShades: + - rscadd: '(Meta) Floodlight to Atmospherics tweak: (Meta) Atmospherics Entryway + layout change tweak: (Meta) Atmospherics Monitoring room layout tweak tweak: + (Meta) Atmospherics Supply Line room airlock location change' + - bugfix: (Meta) Incinerator Access airlock now has the correct access +2022-01-04: + Hatterhat: + - imageadd: Jumpboots now have a mining sprite. Alt-click, as usual, to change 'em. + MrJWhit: + - rscadd: Adds pipes to the SM to make omega better + - bugfix: Various omega fixes + Putnam3145: + - rscadd: Hydrogen gas (no way to get yet) + - rscadd: Gas groups, such as... + - rscadd: Chemical gases, starting with ethanol, bromine, diethylamine, ammonia, + phlogiston + - rscadd: Bromine gas (can make it by tossing hot bromine on the ground OR by burning + methyl bromide) + - rscadd: Ammonia gas (toss hot ammonia on the ground OR burn diethylamine) + - rscdel: 'Snowflake trit/plasma fires fires tweak: Generic fires are now more accurate + energy-wise tweak: Water vapor condensation no longer happens below 40 C tweak: + Methyl bromide now burns properly' + - balance: Massive fusion nerf + - balance: Due to the removal of snowflake trit fires, trit fires are much, much + less hot + - balance: 'Due to the previous, bombs are now easier to reach 50,000 points on + (2 : 1 plasma : oxy at 160 kelvins cold side should be fine)' +2022-01-07: + MrJWhit: + - rscadd: Adds an airlock between atmos and engineering on omega. +2022-01-10: + Linzolle: + - bugfix: bloodsplatter effects no longer white in certain cases + - bugfix: the blood in the BDM ruin is no longer white + Putnam3145: + - bugfix: Alcohol works again diff --git a/html/changelogs/AutoChangeLog-pr-15402.yml b/html/changelogs/AutoChangeLog-pr-15402.yml deleted file mode 100644 index 6081ecbd33..0000000000 --- a/html/changelogs/AutoChangeLog-pr-15402.yml +++ /dev/null @@ -1,9 +0,0 @@ -author: "ShizCalev" -delete-after: True -changes: - - bugfix: "Fixed an issue where you were able to remove flashlights/bayonets that were supposed to be permanently attached to a gun." - - bugfix: "Fixed an issue where you were unable to remove flashlights & bayonets from certain weapons." - - bugfix: "Fixed a potential issue where adding a flashlight to your helmet would've caused you to lose other action buttons." - - bugfix: "Fixed a issue where guns with multiple action buttons would break all but one of those action buttons. -tweak: If you have both a bayonet and a flashlight attached to your gun, you'll now be given a prompt on which you'd like to remove when using a screwdriver on it. -tweak: Hacking a firing pin out of a gun is no longer done via a crafting menu - you can now do it by simply holding the gun in your hand and clicking it with a welder/screwdriver/wirecutters." diff --git a/icons/mob/clothing/feet.dmi b/icons/mob/clothing/feet.dmi index 4b732f13fe..42faf6cf98 100644 Binary files a/icons/mob/clothing/feet.dmi and b/icons/mob/clothing/feet.dmi differ diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi index bde07bd54d..f87eaefa98 100644 Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ diff --git a/modular_citadel/code/modules/festive/turfs.dm b/modular_citadel/code/modules/festive/turfs.dm index baf33cc696..dd119a25e7 100644 --- a/modular_citadel/code/modules/festive/turfs.dm +++ b/modular_citadel/code/modules/festive/turfs.dm @@ -9,7 +9,9 @@ light_color = "#00111a" //The light can technically cycle on a timer worldwide, but no daynight cycle. baseturfs = /turf/open/floor/grass/snow/edina //If we explode or die somehow, we just make more! Ahahaha!!! tiled_dirt = 0 //NO TILESMOOTHING DIRT/DIRT SPAWNS OR SOME SHIT - initial_gas_mix = OPENTURF_DEFAULT_ATMOS //DO NOT FREEZE EVERYONE TO DEATH ON CHRISTMAS + //initial_gas_mix = OPENTURF_DEFAULT_ATMOS //DO NOT FREEZE EVERYONE TO DEATH ON CHRISTMAS + initial_gas_mix = FESTIVE_ATMOS + planetary_atmos = 1 //Uses new!!! planetmos wow!!! maybe? //lets people build /turf/open/floor/grass/snow/edina/attackby(obj/item/C, mob/user, params) @@ -38,6 +40,13 @@ icon_state = "unsmooth" smooth = SMOOTH_MORE | SMOOTH_BORDER canSmoothWith = list(/turf/open/floor/festive/cobblestone) + initial_gas_mix = FESTIVE_ATMOS + planetary_atmos = 1 + +/turf/open/floor/festive/cobblestone/safe //this is literally cobblestone but safe for inside use because I don't want to fuck with aesthetics + baseturfs = /turf/open/floor/festive/cobblestone/safe + initial_gas_mix = OPENTURF_DEFAULT_ATMOS + planetary_atmos = FALSE /turf/open/floor/festive/sidewalk name = "sidewalk" @@ -46,6 +55,8 @@ icon_state = "unsmooth" smooth = SMOOTH_MORE | SMOOTH_BORDER canSmoothWith = list(/turf/open/floor/festive/sidewalk) + initial_gas_mix = FESTIVE_ATMOS + planetary_atmos = 1 /turf/open/floor/festive/alleyway name = "alleyway bricks" @@ -54,6 +65,13 @@ icon_state = "unsmooth" smooth = SMOOTH_MORE | SMOOTH_BORDER canSmoothWith = list(/turf/open/floor/festive/alleyway, /turf/open/floor/festive/white_alleyway) + initial_gas_mix = FESTIVE_ATMOS + planetary_atmos = 1 + +/turf/open/floor/festive/alleyway/safe //this is literally alleyway but safe for inside use because I don't want to fuck with aesthetics + baseturfs = /turf/open/floor/festive/alleyway/safe + initial_gas_mix = OPENTURF_DEFAULT_ATMOS + planetary_atmos = FALSE /turf/open/floor/festive/white_alleyway name = "alleyway bricks" @@ -62,6 +80,8 @@ icon_state = "unsmooth" smooth = SMOOTH_MORE | SMOOTH_BORDER canSmoothWith = list(/turf/open/floor/festive/alleyway, /turf/open/floor/festive/white_alleyway) + initial_gas_mix = FESTIVE_ATMOS + planetary_atmos = 1 /turf/open/floor/festive/trainplatform name = "trainplatform" @@ -70,6 +90,13 @@ icon_state = "unsmooth" smooth = SMOOTH_MORE | SMOOTH_BORDER canSmoothWith = list(/turf/open/floor/festive/trainplatform) + initial_gas_mix = FESTIVE_ATMOS + planetary_atmos = 1 + +/turf/open/floor/festive/trainplatform/safe //this is literally train platform but safe for inside use because I don't want to remap the strip club + baseturfs = /turf/open/floor/festive/trainplatform/safe + initial_gas_mix = OPENTURF_DEFAULT_ATMOS + planetary_atmos = FALSE /turf/open/floor/festive/stairs/stairsnorth name = "stairs north" diff --git a/tgstation.dme b/tgstation.dme index 60edaea992..c32573670b 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -117,6 +117,7 @@ #include "code\__DEFINES\stat.dm" #include "code\__DEFINES\stat_tracking.dm" #include "code\__DEFINES\status_effects.dm" +#include "code\__DEFINES\strippable.dm" #include "code\__DEFINES\subsystems.dm" #include "code\__DEFINES\text.dm" #include "code\__DEFINES\tgs.config.dm" @@ -662,6 +663,7 @@ #include "code\datums\elements\snail_crawl.dm" #include "code\datums\elements\spellcasting.dm" #include "code\datums\elements\squish.dm" +#include "code\datums\elements\strippable.dm" #include "code\datums\elements\swimming.dm" #include "code\datums\elements\sword_point.dm" #include "code\datums\elements\tactical.dm" @@ -2618,6 +2620,7 @@ #include "code\modules\mob\living\carbon\carbon_defines.dm" #include "code\modules\mob\living\carbon\carbon_movement.dm" #include "code\modules\mob\living\carbon\carbon_sprint.dm" +#include "code\modules\mob\living\carbon\carbon_stripping.dm" #include "code\modules\mob\living\carbon\damage_procs.dm" #include "code\modules\mob\living\carbon\death.dm" #include "code\modules\mob\living\carbon\emote.dm" @@ -2673,6 +2676,7 @@ #include "code\modules\mob\living\carbon\human\human_helpers.dm" #include "code\modules\mob\living\carbon\human\human_mobility.dm" #include "code\modules\mob\living\carbon\human\human_movement.dm" +#include "code\modules\mob\living\carbon\human\human_stripping.dm" #include "code\modules\mob\living\carbon\human\inventory.dm" #include "code\modules\mob\living\carbon\human\life.dm" #include "code\modules\mob\living\carbon\human\login.dm" diff --git a/tgui/packages/tgfont/icons/air-tank-slash.svg b/tgui/packages/tgfont/icons/air-tank-slash.svg index 37ffcb5b88..80f143cf24 100644 --- a/tgui/packages/tgfont/icons/air-tank-slash.svg +++ b/tgui/packages/tgfont/icons/air-tank-slash.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/tgui/packages/tgui/interfaces/ChemDebugSynthesizer.js b/tgui/packages/tgui/interfaces/ChemDebugSynthesizer.js index 0e073ba885..b82c793703 100644 --- a/tgui/packages/tgui/interfaces/ChemDebugSynthesizer.js +++ b/tgui/packages/tgui/interfaces/ChemDebugSynthesizer.js @@ -33,8 +33,8 @@ export const ChemDebugSynthesizer = (props, context) => { maxValue={beakerMaxVolume} step={1} stepPixelSize={2} - onChange={(e, value) => act('amount', { - amount: value, + onChange={(e, value) => act('synth_amount', { + synth_amount: value, })} />