From 357c62b6d71fde98c42fa89699e0a2169f4d6f37 Mon Sep 17 00:00:00 2001 From: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com> Date: Wed, 1 Nov 2023 16:05:27 -0400 Subject: [PATCH] Ports hitscan from TG, adds it to *SELECT* things (#22754) * this was just going to be a plasma cutter change but no had to make it look good, whats next, ai sat turrets (yes) * ai turret * Coca cola, don't forget the ice. Or the pulse * almost done, pull master than map edit * we ball * ah, chasms. * it's for the best. Fuck should not sleep checker though * hitscan reflection limiting system * Apply suggestions from code review Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * c-c-c-changes --------- Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> Co-authored-by: S34N <12197162+S34NW@users.noreply.github.com> --- _maps/map_files/Delta/delta.dmm | 10 +- _maps/map_files/MetaStation/MetaStation.dmm | 20 +- _maps/map_files/cerestation/cerestation.dmm | 2502 ++++++++--------- _maps/map_files/cyberiad/cyberiad.dmm | 294 +- code/__DEFINES/layers.dm | 1 + code/__HELPERS/game.dm | 2 +- code/__HELPERS/unsorted.dm | 76 +- .../datums/spell_targeting/spell_targeting.dm | 2 +- .../gamemodes/malfunction/Malf_Modules.dm | 4 +- .../pulsedemon/pulsedemon_abilities.dm | 2 +- code/game/machinery/portable_turret.dm | 17 +- code/game/mecha/equipment/weapons/weapons.dm | 7 +- .../temporary_visuals/projectile/impact.dm | 54 + .../temporary_visuals/projectile/muzzle.dm | 48 + .../projectile/projectile_effects.dm | 66 + .../temporary_visuals/projectile/tracer.dm | 99 + .../objects/items/weapons/flamethrower.dm | 2 +- code/game/turfs/simulated/floor/chasm.dm | 2 + .../vampire_powers/hemomancer_powers.dm | 2 +- code/modules/crafting/recipes.dm | 2 +- .../simple_animal/hostile/floorcluwne.dm | 2 +- .../living/simple_animal/hostile/hostile.dm | 2 +- .../hostile/megafauna/blood_drunk_miner.dm | 2 +- .../simple_animal/hostile/megafauna/drake.dm | 2 +- .../simple_animal/hostile/megafauna/legion.dm | 2 +- .../hostile/retaliate/combat_drone.dm | 2 +- .../simple_animal/hostile/venus_human_trap.dm | 4 +- code/modules/mob/mob_movement.dm | 2 +- .../power/engines/singularity/emitter.dm | 2 +- .../projectiles/ammunition/ammo_casings.dm | 2 +- .../projectiles/ammunition/energy_lens.dm | 6 +- .../projectiles/guns/energy/special_eguns.dm | 39 +- code/modules/projectiles/guns/medbeam.dm | 2 +- code/modules/projectiles/projectile/beams.dm | 85 + .../projectile/magic_projectiles.dm | 15 +- .../projectile/special_projectiles.dm | 15 +- code/modules/projectiles/projectile_base.dm | 152 +- code/modules/station_goals/bsa.dm | 2 +- code/modules/station_goals/shield.dm | 2 +- icons/obj/projectiles_impact.dmi | Bin 0 -> 24976 bytes icons/obj/projectiles_muzzle.dmi | Bin 0 -> 26074 bytes icons/obj/projectiles_tracer.dmi | Bin 0 -> 5522 bytes paradise.dme | 4 + 43 files changed, 1946 insertions(+), 1610 deletions(-) create mode 100644 code/game/objects/effects/temporary_visuals/projectile/impact.dm create mode 100644 code/game/objects/effects/temporary_visuals/projectile/muzzle.dm create mode 100644 code/game/objects/effects/temporary_visuals/projectile/projectile_effects.dm create mode 100644 code/game/objects/effects/temporary_visuals/projectile/tracer.dm create mode 100644 icons/obj/projectiles_impact.dmi create mode 100644 icons/obj/projectiles_muzzle.dmi create mode 100644 icons/obj/projectiles_tracer.dmi diff --git a/_maps/map_files/Delta/delta.dmm b/_maps/map_files/Delta/delta.dmm index 25e22cf696d..5fbfeeb5ba3 100644 --- a/_maps/map_files/Delta/delta.dmm +++ b/_maps/map_files/Delta/delta.dmm @@ -26340,7 +26340,7 @@ /turf/simulated/floor/plasteel/dark, /area/station/turret_protected/ai) "bwG" = ( -/obj/machinery/porta_turret, +/obj/machinery/porta_turret/ai_turret, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -31977,7 +31977,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, -/obj/machinery/porta_turret, +/obj/machinery/porta_turret/ai_turret, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -34279,7 +34279,7 @@ /turf/simulated/floor/plating, /area/station/turret_protected/aisat) "bPI" = ( -/obj/machinery/porta_turret, +/obj/machinery/porta_turret/ai_turret, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -37501,7 +37501,7 @@ }, /area/station/turret_protected/aisat) "bXL" = ( -/obj/machinery/porta_turret, +/obj/machinery/porta_turret/ai_turret, /obj/machinery/firealarm{ dir = 4; name = "east bump"; @@ -40268,7 +40268,7 @@ }, /area/station/maintenance/electrical) "ceP" = ( -/obj/machinery/porta_turret, +/obj/machinery/porta_turret/ai_turret, /turf/simulated/floor/bluegrid, /area/station/telecomms/chamber) "ceQ" = ( diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 868ae93f7c8..d22b7612e43 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -3724,9 +3724,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/auxsolarstarboard) "avN" = ( -/obj/machinery/porta_turret{ - dir = 8 - }, +/obj/machinery/porta_turret/ai_turret, /obj/machinery/computer/security/telescreen/minisat{ dir = 4; pixel_x = -29 @@ -12338,9 +12336,7 @@ }, /area/station/engineering/atmos/distribution) "aXK" = ( -/obj/machinery/porta_turret{ - dir = 8 - }, +/obj/machinery/porta_turret/ai_turret, /obj/machinery/computer/security/telescreen/minisat{ dir = 8; pixel_x = 29 @@ -18397,9 +18393,7 @@ }, /area/station/maintenance/fsmaint) "bmT" = ( -/obj/machinery/porta_turret{ - dir = 8 - }, +/obj/machinery/porta_turret/ai_turret, /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, @@ -19049,9 +19043,7 @@ }, /area/station/command/bridge) "boH" = ( -/obj/machinery/porta_turret{ - dir = 8 - }, +/obj/machinery/porta_turret/ai_turret, /obj/machinery/flasher{ id = "AI"; pixel_y = 21 @@ -77251,9 +77243,7 @@ }, /area/station/engineering/tech_storage) "qfR" = ( -/obj/machinery/porta_turret{ - dir = 8 - }, +/obj/machinery/porta_turret/ai_turret, /turf/simulated/floor/plasteel{ icon_state = "dark" }, diff --git a/_maps/map_files/cerestation/cerestation.dmm b/_maps/map_files/cerestation/cerestation.dmm index 7502f1e6a27..633ab64862e 100644 --- a/_maps/map_files/cerestation/cerestation.dmm +++ b/_maps/map_files/cerestation/cerestation.dmm @@ -875,25 +875,6 @@ "afd" = ( /turf/simulated/wall/r_wall, /area/station/security/permabrig) -"afg" = ( -/obj/machinery/door/airlock/security/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, -/obj/machinery/door/firedoor, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/mapping_helpers/airlock/polarized{ - id = "Interrogation" - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/security/interrogation) "afn" = ( /obj/structure/cable{ d1 = 4; @@ -1371,6 +1352,34 @@ icon_state = "asteroidplating" }, /area/station/security/permabrig) +"aiY" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/window/classic/normal{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/windoor/autoname/desk{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/genetics{ + dir = 1 + }, +/obj/machinery/door/window/classic/normal{ + name = "Chemistry Desk" + }, +/obj/item/desk_bell{ + pixel_x = 7; + pixel_y = 7; + anchored = 1 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/chemistry, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/station/medical/chemistry) "aja" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel, @@ -1610,25 +1619,6 @@ icon_state = "bcircuit" }, /area/station/turret_protected/ai) -"aks" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/porta_turret{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "bcircuit" - }, -/area/station/turret_protected/ai) "akt" = ( /obj/structure/cable{ d1 = 2; @@ -1650,20 +1640,6 @@ icon_state = "bcircuit" }, /area/station/turret_protected/ai) -"aku" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/porta_turret{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "bcircuit" - }, -/area/station/turret_protected/ai) "akv" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -1748,11 +1724,6 @@ icon_state = "dark" }, /area/station/security/execution) -"akG" = ( -/obj/machinery/door/airlock/public/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/turf/simulated/floor/plasteel, -/area/station/public/fitness) "akK" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -1932,14 +1903,6 @@ icon_state = "cafeteria" }, /area/station/command/office/rd) -"alJ" = ( -/obj/machinery/porta_turret{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "bcircuit" - }, -/area/station/turret_protected/ai) "alM" = ( /obj/structure/disposalpipe/sortjunction/reversed{ dir = 8; @@ -2151,6 +2114,25 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/disposal/north) +"ang" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/classic/normal{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/windoor/autoname{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/hydroponics{ + dir = 4 + }, +/obj/item/desk_bell{ + pixel_x = 7; + pixel_y = 7; + anchored = 1 + }, +/turf/simulated/floor/plating, +/area/station/service/hydroponics) "anm" = ( /obj/structure/disposalpipe/junction{ dir = 8 @@ -2478,6 +2460,19 @@ }, /turf/simulated/floor/plasteel, /area/station/security/prisonlockers) +"apf" = ( +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/security/prisonlockers) "apg" = ( /obj/structure/chair/office/dark, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -2607,22 +2602,6 @@ }, /turf/simulated/floor/plating, /area/station/turret_protected/aisat/interior/secondary) -"aqc" = ( -/obj/machinery/porta_turret{ - dir = 4; - installation = /obj/item/gun/energy/gun; - name = "hallway turret" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "bcircuit" - }, -/area/station/turret_protected/aisat/interior/secondary) "aqd" = ( /obj/machinery/door/airlock/maintenance{ name = "Disposals Maintenance" @@ -2742,6 +2721,18 @@ /obj/effect/spawner/random_spawners/wall_rusted_always, /turf/simulated/wall, /area/station/maintenance/disposal/northeast) +"aqY" = ( +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/security/doors, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel, +/area/station/security/prisonlockers) "ara" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -2900,6 +2891,19 @@ /obj/item/clothing/under/color/orange/prison, /turf/simulated/floor/plasteel, /area/station/security/prisonlockers) +"asc" = ( +/obj/machinery/door/airlock/security/glass{ + security_level = 1 + }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/security/permabrig) "asd" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'HIGH VOLTAGE'"; @@ -3444,6 +3448,22 @@ /obj/machinery/ai_status_display, /turf/simulated/wall/r_wall, /area/station/telecomms/computer) +"avr" = ( +/obj/machinery/door/airlock/hatch, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/science/minisat, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/turret_protected/aisat/interior/secondary) "avu" = ( /obj/effect/turf_decal/stripes/corner{ dir = 2 @@ -5085,6 +5105,17 @@ icon_state = "red" }, /area/station/security/processing) +"aGL" = ( +/obj/machinery/door/airlock/security/glass{ + id_tag = "Brig" + }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/security/doors, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/security/processing) "aGP" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel{ @@ -5231,6 +5262,20 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/station/public/locker) +"aIv" = ( +/obj/machinery/door/window/classic/reversed{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/windoor/autoname/desk{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/general{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "rampbottom" + }, +/area/station/command/bridge) "aIx" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, @@ -5410,19 +5455,6 @@ icon_state = "dark" }, /area/station/security/evidence) -"aJF" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/public/quantum/cargo) "aJG" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/landmark/start/shaft_miner, @@ -6699,6 +6731,12 @@ /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel, /area/station/public/locker) +"aRj" = ( +/obj/machinery/porta_turret/ai_turret/disable, +/turf/simulated/floor/plasteel{ + icon_state = "bcircuit" + }, +/area/station/turret_protected/aisat/interior/secondary) "aRn" = ( /obj/machinery/power/apc{ dir = 8; @@ -7139,20 +7177,6 @@ }, /turf/simulated/floor/plasteel/freezer, /area/station/public/locker) -"aUd" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/classic/normal{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/windoor/autoname{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/service/hydroponics{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/station/service/hydroponics) "aUe" = ( /obj/structure/cable/orange{ d1 = 1; @@ -7598,6 +7622,16 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/fore) +"aWw" = ( +/obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/service/janitor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel, +/area/station/service/janitor) "aWx" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ @@ -7770,6 +7804,33 @@ /obj/structure/lattice/catwalk, /turf/space, /area/station/engineering/solar/auxport) +"aXd" = ( +/obj/machinery/door/airlock/hatch, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/command/teleporter, +/obj/effect/mapping_helpers/airlock/access/any/science/minisat, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/turret_protected/aisat/interior) +"aXe" = ( +/obj/machinery/door/airlock/hatch, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/command/teleporter, +/obj/effect/mapping_helpers/airlock/access/any/science/minisat, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/turret_protected/aisat/interior) "aXi" = ( /obj/machinery/power/tracker, /obj/structure/lattice/catwalk, @@ -8455,6 +8516,21 @@ icon_state = "whiteblue" }, /area/station/medical/cloning) +"baE" = ( +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel, +/area/station/security/range) "baF" = ( /turf/simulated/wall, /area/station/service/kitchen) @@ -11159,6 +11235,25 @@ icon_state = "dark" }, /area/station/security/evidence) +"bnx" = ( +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/security/doors, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/polarized{ + id = "Interrogation" + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/security/interrogation) "bnz" = ( /obj/effect/spawner/window/reinforced/polarized{ id = "Interrogation" @@ -11320,6 +11415,12 @@ }, /turf/simulated/floor/plasteel, /area/station/public/locker) +"boy" = ( +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, +/turf/simulated/floor/carpet/arcade, +/area/station/public/arcade) "boC" = ( /obj/item/clothing/head/cone, /obj/item/pickaxe/mini, @@ -12962,6 +13063,21 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/maintcentral) +"bvr" = ( +/obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/command/captain, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/carpet/black, +/area/station/command/office/captain) "bvt" = ( /turf/simulated/floor/plasteel{ icon_state = "neutralfull" @@ -13532,6 +13648,20 @@ icon_state = "white" }, /area/station/medical/reception) +"bxQ" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/classic/normal{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/windoor/autoname{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/hydroponics{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/station/service/hydroponics) "bxR" = ( /obj/structure/table/glass, /obj/item/reagent_containers/glass/bottle/epinephrine, @@ -16588,6 +16718,29 @@ icon_state = "dark" }, /area/station/engineering/gravitygenerator) +"bKV" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/reinforced/normal{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/windoor/autoname{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/armory{ + dir = 4 + }, +/obj/machinery/door/window/reinforced/normal{ + dir = 8; + name = "Secure Armory" + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/general{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/security/armory/secure) "bKZ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -17114,6 +17267,20 @@ }, /turf/simulated/floor/carpet/black, /area/station/command/bridge) +"bNj" = ( +/obj/machinery/door/window/classic/normal{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/windoor/autoname/desk{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/general{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "rampbottom" + }, +/area/station/command/bridge) "bNl" = ( /turf/simulated/floor/engine{ name = "n2 floor"; @@ -18801,22 +18968,6 @@ "bUc" = ( /turf/simulated/floor/plasteel/freezer, /area/station/public/toilet) -"bUg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/public/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "barber" - }, -/area/station/service/barber) "bUj" = ( /turf/simulated/floor/engine{ name = "air floor"; @@ -20184,6 +20335,22 @@ }, /turf/simulated/floor/plating, /area/station/supply/miningdock) +"cbN" = ( +/obj/machinery/door/airlock/mining, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/supply/mining, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/supply/miningdock) "cbP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -22408,6 +22575,21 @@ /obj/machinery/ai_status_display, /turf/simulated/wall, /area/station/command/bridge) +"cpk" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/poddoor/preopen{ + id_tag = "bridge"; + layer = 2.6; + name = "Emergency Blast Door" + }, +/obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/command/bridge) "cpm" = ( /obj/structure/railing{ dir = 4 @@ -22494,29 +22676,6 @@ icon_state = "asteroidplating" }, /area/station/maintenance/fsmaint) -"cpD" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/reinforced/normal{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/windoor/autoname{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/security/armory{ - dir = 4 - }, -/obj/machinery/door/window/reinforced/normal{ - dir = 8; - name = "Secure Armory" - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/security/general{ - dir = 8 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/security/armory/secure) "cpF" = ( /obj/machinery/alarm{ dir = 8; @@ -23501,30 +23660,6 @@ /mob/living/simple_animal/slime, /turf/simulated/floor/engine, /area/station/science/xenobiology) -"cwa" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id_tag = "atmodesk" - }, -/obj/machinery/door/window/classic/reversed{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/windoor/autoname/desk{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/atmos{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel{ - icon_state = "darkyellowfull" - }, -/area/station/engineering/atmos) "cwh" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -26443,24 +26578,6 @@ /obj/structure/sign/barsign, /turf/simulated/wall, /area/station/maintenance/gambling_den) -"cMD" = ( -/obj/machinery/porta_turret{ - dir = 4; - installation = /obj/item/gun/energy/gun; - name = "hallway turret" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "bcircuit" - }, -/area/station/turret_protected/aisat/interior/secondary) "cME" = ( /obj/structure/cable/orange{ d1 = 2; @@ -29483,13 +29600,6 @@ icon_state = "neutralfull" }, /area/station/hallway/secondary/entry/south) -"dbh" = ( -/obj/machinery/door/airlock/mining, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining, -/obj/effect/spawner/random_spawners/dirt_frequent, -/turf/simulated/floor/plating, -/area/station/supply/miningdock) "dby" = ( /obj/effect/spawner/window/reinforced/polarized{ id = "IAA" @@ -29498,19 +29608,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, /area/station/legal/lawoffice) -"dbK" = ( -/obj/machinery/door/airlock/glass{ - id_tag = "magistrateofficedoor" - }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/command/magistrate, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/polarized{ - id = "Magistrate" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/wood, -/area/station/legal/magistrate) "dcv" = ( /obj/effect/landmark/spawner/carp, /turf/space, @@ -29600,6 +29697,15 @@ /obj/structure/lattice/catwalk, /turf/space, /area/station/engineering/solar/auxstarboard) +"dcW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/turf/simulated/floor/plasteel, +/area/station/public/storage/tools) "dda" = ( /obj/machinery/chem_dispenser/soda{ dir = 4 @@ -30305,6 +30411,16 @@ "dgg" = ( /turf/simulated/floor/wood, /area/station/service/clown) +"dgl" = ( +/obj/machinery/door/airlock/mining/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/supply/mail_sorting, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "darkbrownfull" + }, +/area/station/supply/office) "dgr" = ( /obj/machinery/alarm{ dir = 4; @@ -31158,12 +31274,25 @@ /obj/structure/sign/pods, /turf/simulated/mineral/ancient, /area/station/maintenance/fore2) +"dlL" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel, +/area/station/public/locker) "dlT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/spawner/window/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, /area/station/public/locker) +"dmb" = ( +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel, +/area/station/public/locker) "dmd" = ( /obj/machinery/economy/vending/cigarette, /turf/simulated/floor/plasteel, @@ -31427,6 +31556,19 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, /area/station/public/quantum/cargo) +"dob" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/public/quantum/cargo) "dod" = ( /obj/machinery/status_display{ layer = 4 @@ -32733,6 +32875,13 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/carpet/green, /area/station/service/library) +"dvt" = ( +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/security/doors, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel, +/area/station/security/main) "dvD" = ( /obj/structure/cable/orange{ d1 = 1; @@ -33875,6 +34024,19 @@ icon_state = "whiteblue" }, /area/station/medical/cloning) +"dBn" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluefull" + }, +/area/station/medical/medbay) "dBq" = ( /obj/machinery/power/apc{ dir = 1; @@ -34747,6 +34909,20 @@ icon_state = "darkblue" }, /area/station/command/bridge) +"dMd" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/bananium, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/service/theatre, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood, +/area/station/service/clown) "dMk" = ( /obj/structure/cable{ d2 = 8; @@ -35563,6 +35739,23 @@ icon_state = "wood-broken" }, /area/station/maintenance/gambling_den) +"dXT" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/classic/normal, +/obj/effect/mapping_helpers/airlock/windoor/autoname, +/obj/machinery/door/window/classic/normal{ + name = "Kitchen"; + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/hydroponics, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/service/hydroponics) "dXV" = ( /turf/simulated/wall/r_wall, /area/station/hallway/primary/aft/east) @@ -35686,21 +35879,6 @@ icon_state = "neutralfull" }, /area/station/hallway/primary/aft/west) -"ebQ" = ( -/obj/machinery/door/airlock/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/public/quantum/docking) "ebV" = ( /obj/structure/cable{ d1 = 1; @@ -35848,18 +36026,6 @@ icon_state = "neutralfull" }, /area/station/hallway/primary/fore/east) -"eeO" = ( -/obj/machinery/door/airlock/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, -/obj/effect/mapping_helpers/airlock/polarized{ - id = "Courtroom" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/turf/simulated/floor/wood, -/area/station/legal/courtroom) "eeZ" = ( /obj/structure/closet/crate, /obj/effect/decal/cleanable/dirt, @@ -35919,20 +36085,6 @@ icon_state = "dark" }, /area/station/public/fitness) -"ege" = ( -/obj/machinery/door/airlock/medical/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/machinery/door/firedoor, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/medbay) "egm" = ( /turf/simulated/wall/r_wall, /area/mine/unexplored/cere/medical) @@ -36279,6 +36431,28 @@ /obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/station/maintenance/fore2) +"enw" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/classic/normal{ + name = "Kitchen"; + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen{ + dir = 1 + }, +/obj/machinery/door/window/classic/normal, +/obj/effect/mapping_helpers/airlock/windoor/autoname, +/obj/machinery/door/firedoor, +/obj/item/desk_bell{ + pixel_x = 7; + pixel_y = 7; + anchored = 1 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/hydroponics, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/service/hydroponics) "enx" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -36631,24 +36805,6 @@ /obj/structure/closet/emcloset, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/maintcentral) -"euH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/public/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id_tag = "kitchen1" - }, -/turf/simulated/floor/plasteel{ - icon_state = "cafeteria" - }, -/area/station/service/kitchen) "euP" = ( /obj/structure/railing, /turf/space, @@ -36789,20 +36945,6 @@ icon_state = "neutralfull" }, /area/station/hallway/primary/fore/west) -"exB" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 1; - id_tag = "kitchen2" - }, -/obj/machinery/door/window/classic/reversed, -/obj/effect/mapping_helpers/airlock/windoor/autoname, -/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen, -/turf/simulated/floor/plasteel{ - icon_state = "cafeteria" - }, -/area/station/service/kitchen) "exK" = ( /turf/simulated/wall, /area/station/security/processing) @@ -36815,16 +36957,6 @@ /obj/item/wrench, /turf/simulated/floor/plating, /area/station/maintenance/disposal/east) -"eyo" = ( -/obj/machinery/door/airlock/security/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/armory, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/security/warden) "eyx" = ( /obj/effect/spawner/random_spawners/wall_rusted_always, /turf/simulated/wall, @@ -36950,21 +37082,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/fore2) -"eAR" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/poddoor/preopen{ - id_tag = "bridge"; - layer = 2.6; - name = "Emergency Blast Door" - }, -/obj/machinery/door/airlock/command/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/command/general, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/command/bridge) "eAS" = ( /turf/simulated/floor/plating{ icon_state = "asteroidplating" @@ -37367,20 +37484,6 @@ slowdown = -0.3 }, /area/station/hallway/spacebridge/dockmed) -"eIn" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/bananium, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/service/theatre, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/wood, -/area/station/service/clown) "eIs" = ( /obj/machinery/firealarm{ dir = 1; @@ -38332,31 +38435,6 @@ icon_state = "darkblue" }, /area/station/command/bridge) -"fcI" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id_tag = "kitchen1" - }, -/obj/item/desk_bell{ - pixel_x = 7; - pixel_y = 7; - anchored = 1 - }, -/obj/machinery/door/window/classic/normal{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/windoor/autoname{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "cafeteria" - }, -/area/station/service/kitchen) "fcO" = ( /obj/machinery/light{ dir = 4 @@ -38561,16 +38639,6 @@ icon_state = "dark" }, /area/station/security/armory/secure) -"fho" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/station/public/vacant_office) "fhu" = ( /obj/structure/cable{ d1 = 1; @@ -38647,31 +38715,6 @@ /obj/structure/lattice, /turf/space, /area/space/nearstation) -"fjH" = ( -/obj/machinery/door/airlock/medical, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/morgue, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor{ - density = 0; - icon_state = "open"; - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown"; - opacity = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/medical/morgue) "fka" = ( /obj/structure/cable{ d1 = 2; @@ -40308,6 +40351,22 @@ /obj/structure/lattice/catwalk, /turf/space, /area/station/engineering/solar/auxstarboard) +"fRS" = ( +/obj/machinery/door/airlock/security/glass{ + security_level = 1 + }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/security/permabrig) "fRZ" = ( /obj/structure/cable/orange{ d1 = 1; @@ -40658,6 +40717,32 @@ icon_state = "darkpurplecorners" }, /area/station/science/robotics) +"fXS" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + id_tag = "blueshieldofficedoor" + }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/command/blueshield, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/wood, +/area/station/command/office/blueshield) "fYb" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -40911,6 +40996,18 @@ "gch" = ( /turf/simulated/wall, /area/station/command/office/ntrep) +"gck" = ( +/obj/machinery/door/airlock/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/security/doors, +/obj/effect/mapping_helpers/airlock/polarized{ + id = "Courtroom" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/turf/simulated/floor/wood, +/area/station/legal/courtroom) "gcN" = ( /obj/machinery/hydroponics/constructable{ desc = "These are connected with an irrigation tube. You see a little pipe connecting the trays."; @@ -41793,23 +41890,6 @@ icon_state = "wood-broken" }, /area/station/maintenance/starboard) -"gvL" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/classic/normal, -/obj/effect/mapping_helpers/airlock/windoor/autoname, -/obj/machinery/door/window/classic/normal{ - name = "Kitchen"; - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen{ - dir = 1 - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/windoor/access/any/service/hydroponics, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/service/hydroponics) "gvO" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/cable{ @@ -42249,19 +42329,6 @@ icon_state = "escape" }, /area/station/hallway/primary/port/south) -"gCD" = ( -/obj/machinery/door/airlock/public/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel, -/area/station/public/fitness) "gCG" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -42840,6 +42907,24 @@ icon_state = "dark" }, /area/station/security/armory/secure) +"gLY" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id_tag = "kitchen1" + }, +/obj/machinery/door/window/classic/normal{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/windoor/autoname{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/station/service/kitchen) "gMb" = ( /obj/effect/spawner/window/reinforced, /obj/structure/sign/securearea{ @@ -43951,6 +44036,19 @@ }, /turf/simulated/wall, /area/station/maintenance/maintcentral) +"hhc" = ( +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel, +/area/station/public/fitness) "hhs" = ( /obj/structure/fence{ dir = 4 @@ -44461,21 +44559,6 @@ /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel, /area/station/science/storage) -"hrm" = ( -/obj/machinery/door/poddoor/preopen{ - id_tag = "bridge"; - layer = 2.6; - name = "Emergency Blast Door" - }, -/obj/machinery/door/airlock/command/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/command/general, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/command/bridge) "hrn" = ( /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel{ @@ -44595,15 +44678,6 @@ /obj/effect/spawner/random_spawners/wall_rusted_always, /turf/simulated/wall, /area/station/maintenance/apmaint) -"hte" = ( -/obj/machinery/door/airlock/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/station/public/storage/tools) "htf" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -44825,32 +44899,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/disposal/external/southwest) -"hwH" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command{ - id_tag = "blueshieldofficedoor" - }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/command/blueshield, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/wood, -/area/station/command/office/blueshield) "hwM" = ( /obj/structure/girder, /obj/structure/grille, @@ -45336,6 +45384,21 @@ icon_state = "asteroidplating" }, /area/station/hallway/primary/fore/west) +"hGp" = ( +/obj/machinery/door/airlock/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/public/quantum/security) "hGq" = ( /obj/structure/reagent_dispensers/watertank, /turf/simulated/floor/plating{ @@ -45718,22 +45781,6 @@ /obj/machinery/light, /turf/simulated/floor/wood, /area/station/maintenance/starboard) -"hMu" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/porta_turret{ - dir = 4 - }, -/obj/machinery/camera/motion{ - c_tag = "AI Core North"; - dir = 6; - start_active = 1 - }, -/turf/simulated/floor/plasteel{ - icon_state = "bcircuit" - }, -/area/station/turret_protected/ai) "hMY" = ( /obj/structure/closet/secure_closet/RD, /obj/item/cartridge/signal/toxins, @@ -46488,6 +46535,11 @@ }, /turf/simulated/floor/plating, /area/station/turret_protected/aisat/interior/secondary) +"hZp" = ( +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/turf/simulated/floor/plasteel, +/area/station/public/fitness) "hZq" = ( /obj/machinery/light_switch{ dir = 8; @@ -47225,20 +47277,6 @@ }, /turf/space, /area/space) -"ilS" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 1; - id_tag = "kitchen2" - }, -/obj/machinery/door/window/classic/normal, -/obj/effect/mapping_helpers/airlock/windoor/autoname, -/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen, -/turf/simulated/floor/plasteel{ - icon_state = "cafeteria" - }, -/area/station/service/kitchen) "ilV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -49232,6 +49270,16 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/starboard) +"iTd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluefull" + }, +/area/station/medical/medbay) "iTn" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -50132,6 +50180,18 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/storage) +"jhe" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/porta_turret/ai_turret, +/turf/simulated/floor/plasteel{ + icon_state = "bcircuit" + }, +/area/station/turret_protected/ai) "jhj" = ( /obj/structure/sink{ dir = 4; @@ -50488,6 +50548,18 @@ }, /turf/simulated/wall, /area/station/hallway/secondary/entry/north) +"jnZ" = ( +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/security/doors, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "red" + }, +/area/station/security/main) "joj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -50557,6 +50629,30 @@ }, /turf/simulated/wall, /area/station/hallway/secondary/exit) +"jps" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id_tag = "atmodesk" + }, +/obj/machinery/door/window/classic/reversed{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/windoor/autoname/desk{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/atmos{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkyellowfull" + }, +/area/station/engineering/atmos) "jpz" = ( /obj/machinery/light, /obj/structure/chair/comfy/corp{ @@ -51265,6 +51361,16 @@ icon_state = "asteroidplating" }, /area/station/maintenance/port) +"jAr" = ( +/obj/machinery/door/airlock/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/security/doors, +/obj/effect/mapping_helpers/airlock/polarized{ + id = "Courtroom" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/wood, +/area/station/legal/courtroom) "jAy" = ( /obj/machinery/door_control{ id = "researchlockdown"; @@ -51644,24 +51750,6 @@ icon_state = "whitepurple" }, /area/station/science/hallway) -"jFv" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id_tag = "kitchen1" - }, -/obj/machinery/door/window/classic/normal{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/windoor/autoname{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen{ - dir = 4 - }, -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/station/service/kitchen) "jFG" = ( /obj/structure/closet/secure_closet/blueshield, /turf/simulated/floor/wood, @@ -52119,21 +52207,6 @@ icon_state = "neutralfull" }, /area/station/hallway/primary/central) -"jMI" = ( -/obj/machinery/door/airlock/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/public/quantum/security) "jNk" = ( /obj/structure/sign/chinese{ pixel_x = -32; @@ -53297,16 +53370,6 @@ /obj/machinery/ai_status_display, /turf/simulated/mineral/ancient, /area/station/hallway/primary/starboard/north) -"khD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/medical/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/medbay) "khM" = ( /obj/structure/cable{ d1 = 1; @@ -53600,25 +53663,6 @@ icon_state = "neutralcorner" }, /area/station/hallway/primary/port/east) -"klI" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/classic/normal{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/windoor/autoname{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/service/hydroponics{ - dir = 4 - }, -/obj/item/desk_bell{ - pixel_x = 7; - pixel_y = 7; - anchored = 1 - }, -/turf/simulated/floor/plating, -/area/station/service/hydroponics) "klJ" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /obj/effect/spawner/random_spawners/dirt_frequent, @@ -53636,6 +53680,14 @@ }, /turf/simulated/floor/plating, /area/station/hallway/primary/fore/east) +"kmk" = ( +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/service/chapel) "kmp" = ( /obj/structure/cable/orange{ d1 = 4; @@ -54470,19 +54522,6 @@ "kzq" = ( /turf/simulated/floor/wood, /area/station/maintenance/asmaint) -"kzu" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/medical/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/medbay) "kzI" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -55149,6 +55188,21 @@ /obj/item/storage/fancy/cigarettes/cigpack_robustgold, /turf/simulated/floor/wood, /area/station/command/office/ntrep) +"kLh" = ( +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/service/theatre) "kLk" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -55298,6 +55352,46 @@ icon_state = "neutralcorner" }, /area/station/hallway/spacebridge/sercom) +"kMC" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/science/tox, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitepurplefull" + }, +/area/station/science/toxins/mixing) +"kMH" = ( +/obj/machinery/door/airlock/tranquillite, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/service/theatre, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + icon_regular_floor = "yellowsiding"; + icon_state = "tranquillite" + }, +/area/station/service/mime) "kMZ" = ( /obj/structure/cable/orange{ d1 = 2; @@ -58615,27 +58709,6 @@ icon_state = "whitegreen" }, /area/station/medical/virology) -"lOb" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/poddoor/preopen{ - id_tag = "engineeringlockdown"; - layer = 2.6; - name = "Emergency Lockdown Blastdoor" - }, -/obj/machinery/door/airlock/engineering, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "darkyellowfull" - }, -/area/station/engineering/break_room) "lOc" = ( /obj/structure/disposalpipe/segment/corner, /obj/machinery/atmospherics/unary/vent_scrubber/on, @@ -59023,6 +59096,23 @@ icon_state = "white" }, /area/station/science/misc_lab) +"lTy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/porta_turret/ai_turret, +/turf/simulated/floor/plasteel{ + icon_state = "bcircuit" + }, +/area/station/turret_protected/ai) "lTH" = ( /obj/structure/closet/emcloset, /turf/simulated/floor/plasteel, @@ -59121,21 +59211,6 @@ icon_state = "dark" }, /area/station/command/bridge) -"lVl" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "darkgreenfull" - }, -/area/station/service/hydroponics) "lVq" = ( /obj/structure/cable, /obj/structure/cable{ @@ -59146,6 +59221,25 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/engineering/tech_storage) +"lVs" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id_tag = "kitchen2" + }, +/obj/item/desk_bell{ + pixel_x = 7; + pixel_y = 7; + anchored = 1 + }, +/obj/machinery/door/window/classic/reversed, +/obj/effect/mapping_helpers/airlock/windoor/autoname, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen, +/turf/simulated/floor/plasteel{ + icon_state = "cafeteria" + }, +/area/station/service/kitchen) "lVB" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -59518,6 +59612,27 @@ }, /turf/simulated/floor/plating, /area/station/hallway/primary/starboard/south) +"mbZ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/poddoor/preopen{ + id_tag = "engineeringlockdown"; + layer = 2.6; + name = "Emergency Lockdown Blastdoor" + }, +/obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "darkyellowfull" + }, +/area/station/engineering/break_room) "mco" = ( /obj/machinery/conveyor/auto{ dir = 8 @@ -59724,6 +59839,20 @@ /obj/item/trash/candle, /turf/simulated/floor/wood, /area/station/maintenance/starboard) +"mgI" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id_tag = "kitchen2" + }, +/obj/machinery/door/window/classic/normal, +/obj/effect/mapping_helpers/airlock/windoor/autoname, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen, +/turf/simulated/floor/plasteel{ + icon_state = "cafeteria" + }, +/area/station/service/kitchen) "mgO" = ( /obj/machinery/door/poddoor/shutters{ dir = 8; @@ -60136,22 +60265,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/fore2) -"moU" = ( -/obj/machinery/door/airlock/security/glass{ - security_level = 1 - }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/obj/machinery/door/firedoor, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/security/permabrig) "moY" = ( /obj/structure/closet/secure_closet/medical3, /obj/machinery/light, @@ -60570,6 +60683,18 @@ icon_state = "darkyellow" }, /area/station/engineering/break_room) +"mwF" = ( +/obj/machinery/porta_turret/ai_turret/disable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "bcircuit" + }, +/area/station/turret_protected/aisat/interior/secondary) "mxd" = ( /obj/machinery/door/airlock/maintenance{ name = "Docking Asteroid SMES Access" @@ -60864,6 +60989,31 @@ }, /turf/simulated/floor/plating, /area/station/science/explab/chamber) +"mCe" = ( +/obj/machinery/door/airlock/medical, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/medical/morgue, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor{ + density = 0; + icon_state = "open"; + id_tag = "Biohazard_medi"; + name = "Quarantine Lockdown"; + opacity = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/medical/morgue) "mCg" = ( /obj/effect/spawner/random_spawners/fungus_maybe, /turf/simulated/wall/r_wall, @@ -61388,6 +61538,18 @@ /obj/structure/lattice/catwalk, /turf/space, /area/station/engineering/solar/starboard) +"mNc" = ( +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/science/robotics, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + icon_state = "darkpurplefull" + }, +/area/station/science/robotics) "mNd" = ( /obj/machinery/constructable_frame/machine_frame, /turf/simulated/floor/plating, @@ -61610,6 +61772,21 @@ slowdown = -0.3 }, /area/station/hallway/spacebridge/sercom) +"mQN" = ( +/obj/machinery/door/airlock/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/public/quantum/docking) "mQU" = ( /obj/structure/cable{ d1 = 1; @@ -62314,16 +62491,6 @@ icon_state = "dark" }, /area/station/maintenance/port2) -"nbN" = ( -/obj/machinery/door/airlock/mining/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/supply/mail_sorting, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plasteel{ - icon_state = "darkbrownfull" - }, -/area/station/supply/office) "nbT" = ( /obj/machinery/door/airlock/maintenance{ name = "Medical Asteroid Solars" @@ -62950,6 +63117,20 @@ icon_state = "asteroidplating" }, /area/station/maintenance/port) +"nlZ" = ( +/obj/machinery/porta_turret/ai_turret/disable, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "bcircuit" + }, +/area/station/turret_protected/aisat/interior/secondary) "nmk" = ( /obj/structure/cable/orange{ d2 = 8; @@ -63159,19 +63340,6 @@ icon_state = "whiteblue" }, /area/station/medical/medbay) -"nqJ" = ( -/obj/machinery/door/airlock/security/glass{ - security_level = 1 - }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/security/permabrig) "nqK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -64507,26 +64675,6 @@ /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel/white, /area/station/science/robotics) -"nNW" = ( -/obj/machinery/door/airlock/engineering, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/machinery/door/firedoor, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/engineering/gravitygenerator) "nNY" = ( /obj/structure/railing/corner{ dir = 8 @@ -65449,20 +65597,6 @@ /obj/structure/closet/emcloset, /turf/simulated/floor/plating, /area/station/maintenance/disposal/east) -"ohm" = ( -/obj/machinery/door/airlock/command, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/rd, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel/dark/telecomms, -/area/station/science/server) "ohr" = ( /turf/simulated/floor/plasteel{ dir = 8; @@ -66141,6 +66275,20 @@ icon_state = "escape" }, /area/station/hallway/secondary/entry) +"opm" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/porta_turret/ai_turret, +/obj/machinery/camera/motion{ + c_tag = "AI Core North"; + dir = 6; + start_active = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "bcircuit" + }, +/area/station/turret_protected/ai) "opo" = ( /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry/south) @@ -66165,20 +66313,6 @@ /obj/effect/decal/cleanable/blood/gibs/old, /turf/simulated/floor/plasteel/freezer, /area/station/service/kitchen) -"opU" = ( -/obj/machinery/door/window/classic/reversed{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/windoor/autoname/desk{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/command/general{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - icon_state = "rampbottom" - }, -/area/station/command/bridge) "oqc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -66188,15 +66322,6 @@ }, /turf/simulated/floor/carpet/black, /area/station/service/chapel) -"oqj" = ( -/obj/machinery/door/airlock/security/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/armory, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/security/warden) "oql" = ( /obj/structure/lattice, /obj/machinery/camera{ @@ -66706,21 +66831,6 @@ icon_state = "cafeteria" }, /area/station/service/kitchen) -"oAb" = ( -/obj/machinery/door/airlock/security/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/general, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plasteel, -/area/station/security/range) "oAs" = ( /obj/effect/decal/cleanable/blood/old, /turf/simulated/floor/plasteel/freezer, @@ -66977,12 +67087,6 @@ }, /turf/simulated/floor/carpet, /area/station/medical/psych) -"oFx" = ( -/obj/machinery/door/airlock/public/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/machinery/door/firedoor, -/turf/simulated/floor/carpet/arcade, -/area/station/public/arcade) "oFB" = ( /obj/machinery/power/solar_control{ name = "Medical Asteroid Solar Control" @@ -67103,21 +67207,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/starboardsolar) -"oId" = ( -/obj/machinery/door/airlock/command, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/command/captain, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/carpet/black, -/area/station/command/office/captain) "oIu" = ( /obj/structure/cable{ d1 = 1; @@ -67372,6 +67461,22 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/port) +"oMr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + icon_state = "barber" + }, +/area/station/service/barber) "oMs" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -67985,6 +68090,16 @@ icon_state = "darkredcorners" }, /area/station/security/prison/cell_block/A) +"oVj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/station/public/vacant_office) "oVA" = ( /obj/structure/bed, /obj/item/bedsheet/medical, @@ -68163,16 +68278,6 @@ icon_state = "asteroidplating" }, /area/station/maintenance/starboard) -"oXJ" = ( -/obj/machinery/door/airlock/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, -/obj/effect/mapping_helpers/airlock/polarized{ - id = "Courtroom" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/wood, -/area/station/legal/courtroom) "oXX" = ( /obj/structure/showcase{ density = 0; @@ -68267,6 +68372,15 @@ /obj/effect/turf_decal/delivery/white/hollow, /turf/simulated/floor/plasteel, /area/station/maintenance/electrical_shop) +"oZD" = ( +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/security/armory, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/security/warden) "oZE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 @@ -68502,18 +68616,6 @@ icon_state = "dark" }, /area/station/service/library) -"pdI" = ( -/obj/machinery/door/airlock/hatch, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/any/command/teleporter, -/obj/effect/mapping_helpers/airlock/access/any/science/minisat, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/turret_protected/aisat/interior) "ped" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ @@ -68845,6 +68947,16 @@ icon_state = "neutralfull" }, /area/station/hallway/primary/port/east) +"pkp" = ( +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/security/armory, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/security/warden) "pkt" = ( /obj/effect/spawner/window/shuttle, /turf/simulated/floor/plating, @@ -68906,28 +69018,6 @@ /obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/station/maintenance/starboard) -"pkS" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/classic/normal{ - name = "Kitchen"; - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen{ - dir = 1 - }, -/obj/machinery/door/window/classic/normal, -/obj/effect/mapping_helpers/airlock/windoor/autoname, -/obj/machinery/door/firedoor, -/obj/item/desk_bell{ - pixel_x = 7; - pixel_y = 7; - anchored = 1 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/service/hydroponics, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/service/hydroponics) "pli" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -70073,21 +70163,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/disposal/southwest) -"pEE" = ( -/obj/machinery/door/airlock/public/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/station/service/theatre) "pEH" = ( /obj/structure/girder, /turf/simulated/floor/plating/asteroid/ancient, @@ -70379,13 +70454,6 @@ }, /turf/simulated/floor/plasteel, /area/station/supply/qm) -"pJy" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/public/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plasteel, -/area/station/public/locker) "pJG" = ( /obj/machinery/door/airlock/security/glass{ id_tag = "BrigEast"; @@ -70715,6 +70783,21 @@ icon_state = "barber" }, /area/station/service/barber) +"pOl" = ( +/obj/machinery/door/poddoor/preopen{ + id_tag = "bridge"; + layer = 2.6; + name = "Emergency Blast Door" + }, +/obj/machinery/door/airlock/command/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/command/bridge) "pOG" = ( /obj/structure/lattice/catwalk, /obj/structure/cable/orange{ @@ -70915,6 +70998,15 @@ icon_state = "dark" }, /area/station/engineering/atmos) +"pRF" = ( +/obj/machinery/door/airlock/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/public/storage/tools) "pRR" = ( /obj/structure/disposalpipe/segment, /obj/structure/girder, @@ -70951,15 +71043,6 @@ icon_state = "dark" }, /area/station/service/chapel/office) -"pSc" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/multi_tile/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/machinery/door/firedoor, -/turf/simulated/floor/carpet, -/area/station/service/bar) "pSr" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel, @@ -71335,13 +71418,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/disposal/north) -"pYj" = ( -/obj/machinery/door/airlock/security/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plasteel, -/area/station/security/main) "pYs" = ( /obj/structure/window{ dir = 4 @@ -71521,6 +71597,37 @@ /obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/station/hallway/primary/central) +"qba" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 2; + id_tag = "chemisttop"; + name = "Chemistry Lobby Shutters" + }, +/obj/machinery/door/window/classic/normal, +/obj/effect/mapping_helpers/airlock/windoor/autoname/desk, +/obj/item/folder/yellow, +/obj/machinery/door/window/classic/normal{ + name = "Chemistry Desk"; + dir = 1 + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/poddoor{ + density = 0; + icon_state = "open"; + id_tag = "Biohazard_medi"; + name = "Quarantine Lockdown"; + opacity = 0 + }, +/obj/item/desk_bell{ + pixel_x = 7; + pixel_y = 7; + anchored = 1 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/chemistry, +/turf/simulated/floor/plasteel, +/area/station/medical/chemistry) "qbb" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, @@ -71651,34 +71758,6 @@ icon_state = "neutralfull" }, /area/station/hallway/primary/starboard/south) -"qcU" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/machinery/door/window/classic/normal{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/windoor/autoname/desk{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/genetics{ - dir = 1 - }, -/obj/machinery/door/window/classic/normal{ - name = "Chemistry Desk" - }, -/obj/item/desk_bell{ - pixel_x = 7; - pixel_y = 7; - anchored = 1 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/chemistry, -/turf/simulated/floor/plasteel{ - icon_state = "white" - }, -/area/station/medical/chemistry) "qdf" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -71766,6 +71845,26 @@ }, /turf/simulated/wall, /area/station/hallway/primary/starboard/south) +"qeR" = ( +/obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/engineering/gravitygenerator) "qeX" = ( /obj/item/reagent_containers/food/drinks/bottle/patron, /obj/structure/table/wood, @@ -73691,15 +73790,6 @@ icon_state = "asteroidplating" }, /area/station/maintenance/starboard) -"qIX" = ( -/obj/machinery/door/airlock/security{ - security_level = 1 - }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/general, -/obj/effect/spawner/random_spawners/dirt_frequent, -/turf/simulated/floor/plating, -/area/station/security/range) "qJm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -74911,12 +75001,6 @@ icon_state = "neutralcorner" }, /area/station/hallway/primary/port/north) -"rhX" = ( -/obj/machinery/door/airlock/public/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plasteel, -/area/station/public/locker) "ril" = ( /obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel, @@ -75119,37 +75203,6 @@ icon_state = "neutralcorner" }, /area/station/turret_protected/aisat/interior) -"rlO" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 2; - id_tag = "chemisttop"; - name = "Chemistry Lobby Shutters" - }, -/obj/machinery/door/window/classic/normal, -/obj/effect/mapping_helpers/airlock/windoor/autoname/desk, -/obj/item/folder/yellow, -/obj/machinery/door/window/classic/normal{ - name = "Chemistry Desk"; - dir = 1 - }, -/obj/effect/turf_decal/delivery, -/obj/machinery/door/poddoor{ - density = 0; - icon_state = "open"; - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown"; - opacity = 0 - }, -/obj/item/desk_bell{ - pixel_x = 7; - pixel_y = 7; - anchored = 1 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/chemistry, -/turf/simulated/floor/plasteel, -/area/station/medical/chemistry) "rlX" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ dir = 8; @@ -75793,15 +75846,6 @@ /obj/effect/spawner/window/reinforced/plasma/grilled, /turf/simulated/floor/plating, /area/station/turret_protected/aisat/interior/secondary) -"ryb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/turf/simulated/floor/plasteel, -/area/station/public/storage/tools) "ryn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -76265,22 +76309,6 @@ }, /turf/simulated/floor/wood, /area/station/service/theatre) -"rGj" = ( -/obj/machinery/door/airlock/mining, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/station/supply/miningdock) "rGm" = ( /obj/item/kirbyplants{ icon_state = "plant-22" @@ -76314,18 +76342,6 @@ icon_state = "asteroidplating" }, /area/station/maintenance/gambling_den) -"rGC" = ( -/obj/machinery/door/airlock/security/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "red" - }, -/area/station/security/main) "rGY" = ( /obj/item/radio/intercom{ pixel_x = -28; @@ -76536,18 +76552,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/fore2) -"rJS" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 1; - id_tag = "kitchen2" - }, -/obj/machinery/door/airlock/public/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, -/turf/simulated/floor/plasteel{ - icon_state = "cafeteria" - }, -/area/station/service/kitchen) "rKr" = ( /obj/structure/table/wood, /turf/simulated/floor/plating, @@ -76566,6 +76570,31 @@ }, /turf/simulated/floor/plasteel, /area/station/security/lobby) +"rKE" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id_tag = "kitchen1" + }, +/obj/item/desk_bell{ + pixel_x = 7; + pixel_y = 7; + anchored = 1 + }, +/obj/machinery/door/window/classic/normal{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/windoor/autoname{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "cafeteria" + }, +/area/station/service/kitchen) "rLb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/alarm{ @@ -76995,16 +77024,6 @@ slowdown = -0.3 }, /area/station/hallway/spacebridge/servsci) -"rRy" = ( -/obj/machinery/door/airlock, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/service/janitor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plasteel, -/area/station/service/janitor) "rRD" = ( /obj/machinery/atmospherics/pipe/simple/visible/red, /turf/simulated/floor/plasteel{ @@ -77761,26 +77780,6 @@ icon_state = "bluecorner" }, /area/station/hallway/primary/starboard/south) -"sfc" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id_tag = "kitchen1" - }, -/obj/machinery/door/window/classic/reversed{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/windoor/autoname{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "cafeteria" - }, -/area/station/service/kitchen) "sfi" = ( /obj/structure/chair{ dir = 8 @@ -78281,23 +78280,6 @@ icon_state = "cafeteria" }, /area/station/science/hallway) -"smx" = ( -/obj/machinery/door/airlock/tranquillite, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/service/theatre, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - icon_regular_floor = "yellowsiding"; - icon_state = "tranquillite" - }, -/area/station/service/mime) "smz" = ( /obj/effect/decal/cleanable/cobweb, /obj/structure/closet/emcloset, @@ -78492,6 +78474,15 @@ icon_state = "dark" }, /area/station/engineering/control) +"srt" = ( +/obj/machinery/door/airlock/security{ + security_level = 1 + }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/effect/spawner/random_spawners/dirt_frequent, +/turf/simulated/floor/plating, +/area/station/security/range) "srw" = ( /obj/structure/closet/firecloset/full, /turf/simulated/floor/plating, @@ -79137,6 +79128,24 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/engine, /area/station/science/test_chamber) +"sAH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id_tag = "kitchen1" + }, +/turf/simulated/floor/plasteel{ + icon_state = "cafeteria" + }, +/area/station/service/kitchen) "sAI" = ( /obj/structure/sign/security{ pixel_x = 32 @@ -79486,21 +79495,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/disposal/external/east) -"sGS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/medical/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/medical/paramedic, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/paramedic) "sGY" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -79663,17 +79657,6 @@ icon_state = "asteroidplating" }, /area/station/maintenance/apmaint) -"sKT" = ( -/obj/machinery/door/airlock/public/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/service/chapel) "sLb" = ( /obj/machinery/navbeacon{ codes_txt = "delivery"; @@ -79850,6 +79833,18 @@ icon_state = "asteroidplating" }, /area/station/maintenance/port) +"sNy" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id_tag = "kitchen2" + }, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/turf/simulated/floor/plasteel{ + icon_state = "cafeteria" + }, +/area/station/service/kitchen) "sNz" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -80025,6 +80020,20 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/science/rnd) +"sPL" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id_tag = "kitchen2" + }, +/obj/machinery/door/window/classic/reversed, +/obj/effect/mapping_helpers/airlock/windoor/autoname, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen, +/turf/simulated/floor/plasteel{ + icon_state = "cafeteria" + }, +/area/station/service/kitchen) "sQc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -81237,20 +81246,6 @@ icon_state = "dark" }, /area/station/security/prison/cell_block/A) -"tkW" = ( -/obj/machinery/door/window/classic/normal{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/windoor/autoname/desk{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/command/general{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - icon_state = "rampbottom" - }, -/area/station/command/bridge) "tla" = ( /obj/structure/lattice, /obj/item/storage/toolbox/electrical, @@ -81738,6 +81733,21 @@ icon_state = "dark" }, /area/station/security/execution) +"ttV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/medical/paramedic, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluefull" + }, +/area/station/medical/paramedic) "tug" = ( /obj/structure/cable{ d1 = 4; @@ -82801,6 +82811,15 @@ icon_state = "dark" }, /area/station/engineering/control) +"tPw" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/turf/simulated/floor/plasteel{ + icon_state = "darkgreenfull" + }, +/area/station/service/hydroponics) "tPV" = ( /obj/machinery/door/airlock{ name = "Bathroom" @@ -82897,6 +82916,20 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/disposal/external/southeast) +"tRV" = ( +/obj/machinery/door/airlock/medical/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluefull" + }, +/area/station/medical/medbay) "tSt" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -83619,6 +83652,26 @@ "udk" = ( /turf/simulated/wall, /area/station/medical/patients_rooms) +"udq" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id_tag = "kitchen1" + }, +/obj/machinery/door/window/classic/reversed{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/windoor/autoname{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "cafeteria" + }, +/area/station/service/kitchen) "uep" = ( /obj/machinery/economy/vending/snack, /turf/simulated/floor/plating, @@ -84919,18 +84972,6 @@ icon_state = "rampbottom" }, /area/station/public/fitness) -"uzq" = ( -/obj/machinery/door/airlock/security/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, -/obj/machinery/door/firedoor, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel, -/area/station/security/prisonlockers) "uzy" = ( /obj/structure/table, /turf/simulated/floor/plasteel, @@ -85481,14 +85522,6 @@ icon_state = "whitegreen" }, /area/station/medical/virology) -"uKh" = ( -/obj/machinery/door/airlock/public/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/service/chapel) "uKs" = ( /obj/machinery/computer/mech_bay_power_console{ dir = 4 @@ -85587,25 +85620,6 @@ icon_state = "bcircuit" }, /area/station/science/server/coldroom) -"uLV" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 1; - id_tag = "kitchen2" - }, -/obj/item/desk_bell{ - pixel_x = 7; - pixel_y = 7; - anchored = 1 - }, -/obj/machinery/door/window/classic/reversed, -/obj/effect/mapping_helpers/airlock/windoor/autoname, -/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen, -/turf/simulated/floor/plasteel{ - icon_state = "cafeteria" - }, -/area/station/service/kitchen) "uMe" = ( /obj/effect/spawner/random_spawners/blood_maybe, /obj/item/toy/plushie/robo_corgi, @@ -86185,15 +86199,6 @@ icon_state = "whiteyellow" }, /area/station/science/robotics/chargebay) -"uTF" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, -/turf/simulated/floor/plasteel{ - icon_state = "darkgreenfull" - }, -/area/station/service/hydroponics) "uTR" = ( /obj/machinery/door/airlock/command{ name = "Teleport Access" @@ -86398,21 +86403,6 @@ icon_state = "asteroidplating" }, /area/station/maintenance/port) -"uVT" = ( -/obj/machinery/door/airlock/hatch, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/any/command/teleporter, -/obj/effect/mapping_helpers/airlock/access/any/science/minisat, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/turret_protected/aisat/interior) "uWc" = ( /obj/machinery/light/small{ dir = 8 @@ -87094,18 +87084,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/fore2) -"viW" = ( -/obj/machinery/door/airlock/research, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/robotics, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "darkpurplefull" - }, -/area/station/science/robotics) "viX" = ( /obj/effect/spawner/random_spawners/wall_rusted_always, /turf/simulated/wall, @@ -87625,6 +87603,19 @@ icon_state = "darkyellowfull" }, /area/station/public/quantum/docking) +"vqN" = ( +/obj/machinery/door/airlock/glass{ + id_tag = "magistrateofficedoor" + }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/command/magistrate, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/polarized{ + id = "Magistrate" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood, +/area/station/legal/magistrate) "vrf" = ( /obj/structure/cable/orange{ d1 = 4; @@ -87823,6 +87814,15 @@ icon_state = "neutralcorner" }, /area/station/hallway/primary/starboard/south) +"vtG" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/multi_tile/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, +/turf/simulated/floor/carpet, +/area/station/service/bar) "vtO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 @@ -88216,6 +88216,17 @@ /obj/machinery/light, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry/south) +"vAx" = ( +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/service/chapel) "vBa" = ( /obj/structure/chair/sofa/pew/left{ dir = 8 @@ -88979,6 +88990,13 @@ }, /turf/simulated/floor/plasteel, /area/station/science/toxins/launch) +"vLi" = ( +/obj/machinery/door/airlock/mining, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/supply/mining, +/obj/effect/spawner/random_spawners/dirt_frequent, +/turf/simulated/floor/plating, +/area/station/supply/miningdock) "vLm" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, @@ -89397,6 +89415,20 @@ slowdown = -0.3 }, /area/station/hallway/spacebridge/medcargo) +"vSg" = ( +/obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/science/rd, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel/dark/telecomms, +/area/station/science/server) "vSk" = ( /obj/machinery/atmospherics/pipe/simple/hidden/yellow{ dir = 6 @@ -92894,6 +92926,21 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/public/vacant_office) +"wSh" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkgreenfull" + }, +/area/station/service/hydroponics) "wSk" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/carpet, @@ -93110,16 +93157,6 @@ }, /turf/simulated/floor/engine, /area/station/science/test_chamber) -"wWf" = ( -/obj/machinery/porta_turret{ - dir = 4; - installation = /obj/item/gun/energy/gun; - name = "hallway turret" - }, -/turf/simulated/floor/plasteel{ - icon_state = "bcircuit" - }, -/area/station/turret_protected/aisat/interior/secondary) "wWm" = ( /obj/structure/cable{ d1 = 4; @@ -93508,19 +93545,6 @@ icon_state = "whiteyellow" }, /area/station/medical/reception) -"xbz" = ( -/obj/machinery/door/airlock/security/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/station/security/prisonlockers) "xbJ" = ( /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/arrival/station) @@ -94271,29 +94295,6 @@ /obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/station/maintenance/maintcentral) -"xqh" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/airlock/research, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/tox, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitepurplefull" - }, -/area/station/science/toxins/mixing) "xqt" = ( /obj/structure/cable{ d1 = 4; @@ -94420,17 +94421,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/gambling_den) -"xsg" = ( -/obj/machinery/door/airlock/security/glass{ - id_tag = "Brig" - }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/security/processing) "xsS" = ( /turf/simulated/floor/plasteel{ icon_state = "neutralfull" @@ -95647,22 +95637,6 @@ icon_state = "dark" }, /area/station/science/robotics) -"xNM" = ( -/obj/machinery/door/airlock/hatch, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/any/science/minisat, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/turret_protected/aisat/interior/secondary) "xNT" = ( /obj/structure/cable/orange{ d1 = 4; @@ -95875,6 +95849,12 @@ icon_state = "purple" }, /area/station/hallway/primary/aft/west) +"xRp" = ( +/obj/machinery/porta_turret/ai_turret, +/turf/simulated/floor/plasteel{ + icon_state = "bcircuit" + }, +/area/station/turret_protected/ai) "xRy" = ( /obj/machinery/atmospherics/binary/valve{ dir = 4 @@ -109237,7 +109217,7 @@ xhk xhk xhk cch -oXJ +jAr uTo yaN yaN @@ -109494,7 +109474,7 @@ dxE dxE dxE oPb -eeO +gck lyS jMr dyS @@ -110527,7 +110507,7 @@ qGR rKD yaN tsf -dbK +vqN sOm ude cKY @@ -111132,7 +111112,7 @@ oeN rNT wjk aXq -smx +kMH vnV adb ceV @@ -111790,7 +111770,7 @@ drz mCL xQS xQS -uzq +aqY xQS xQS aum @@ -111903,7 +111883,7 @@ mfk qdP ped oxo -eIn +dMd oRH odg wqN @@ -112057,7 +112037,7 @@ xrZ aAy pnf bdy -afg +bnx aFw pjD loa @@ -112451,7 +112431,7 @@ cpz wbT cxg oGS -xqh +kMC dCc xnA llN @@ -112667,7 +112647,7 @@ uZZ bVS glz uNH -uKh +kmk btg fNK jQF @@ -112710,7 +112690,7 @@ coy pOU ssD buE -ohm +vSg emA jvJ tlj @@ -112830,10 +112810,10 @@ vRQ dvH exK exK -xsg +aGL dUb uSW -xsg +aGL exK tYz nZi @@ -112924,7 +112904,7 @@ uUT tKJ pvH kSB -sKT +vAx kQX mLe xnH @@ -113137,7 +113117,7 @@ uSv ezi cMT lVP -pEE +kLh lVP cMT wFq @@ -113145,7 +113125,7 @@ mWM eiB bkU eMc -hte +pRF bkU vUJ bkU @@ -113153,7 +113133,7 @@ iLL bkU vUJ bkU -ryb +dcW bkU nQA uDy @@ -113845,7 +113825,7 @@ afd afd afd xQS -xbz +apf xQS xQS xQS @@ -114205,11 +114185,11 @@ ohY fAD btd lJR -uTF -lVl +tPw +wSh lJR -aUd -klI +bxQ +ang lJR uQa hVt @@ -114451,11 +114431,11 @@ jXC baF baF dBV -euH -jFv -sfc -fcI -sfc +sAH +gLY +udq +rKE +udq baF nYB tOx @@ -114650,7 +114630,7 @@ xla dru dMN pZt -jMI +hGp nla mmY hYD @@ -114875,7 +114855,7 @@ qpk duG hdv bkA -nqJ +asc pqs auG uii @@ -114947,7 +114927,7 @@ wSt boQ aap iiV -bUg +oMr lBA xhr uSS @@ -115132,7 +115112,7 @@ aPx vLd gBX drA -moU +fRS dsy shH cHH @@ -115653,7 +115633,7 @@ dtr uqz uqz rCG -pYj +dvt rCG uqz tNT @@ -115662,7 +115642,7 @@ tNT hcb qHa rJj -oqj +oZD lgu nto rJj @@ -116001,7 +115981,7 @@ idv mrt mrt mrt -pkS +enw prN biB biB @@ -116258,7 +116238,7 @@ eBQ mrt mrt mrt -gvL +dXT prN biB biB @@ -116935,7 +116915,7 @@ wvl yfX dnd cMx -rGC +jnZ duu aAI eFw @@ -116999,7 +116979,7 @@ ggt pQe hTf qNe -gCD +hhc xfm pkc iqL @@ -117020,7 +117000,7 @@ idC uIG bjr bjr -rJS +sNy mrt juY hpJ @@ -117277,7 +117257,7 @@ vaT qoN onO bjr -ilS +mgI mrt juY mrt @@ -117513,13 +117493,13 @@ cFF cFF cFF cFF -akG +hZp boJ tzW abq tHP sIP -pSc +vtG xWa cLl nMe @@ -117534,7 +117514,7 @@ nMe rAG bjr bjr -exB +sPL mrt juY mOA @@ -117791,7 +117771,7 @@ ukS jPM qQJ uGY -ilS +mgI pFC ptP lRt @@ -117835,7 +117815,7 @@ uQE jWb fAm sYa -viW +mNc fZs ovQ jTe @@ -117974,12 +117954,12 @@ bAl fEL iZY dti -eyo +pkp pIR fjm xzK aOI -oqj +oZD eWZ ddk aEn @@ -118048,7 +118028,7 @@ chb jLS gaf fqu -uLV +lVs mrt eBV lpZ @@ -118480,12 +118460,12 @@ evh azW azu uJY -oAb +baE hmc azu azu qQO -cpD +bKV mgO jnu qQO @@ -120794,7 +120774,7 @@ fqh swq swq swq -qIX +srt sLb swq uXj @@ -123388,7 +123368,7 @@ aqC xas tSt vpK -rRy +aWw gML hOn iAF @@ -124393,7 +124373,7 @@ tXQ tXQ tXQ bhy -oFx +boy buw bBB aKW @@ -124412,7 +124392,7 @@ cGn cPA cTD cGn -pJy +dlL hRA oTb mcK @@ -124926,7 +124906,7 @@ cLN cPI qSK qSK -rhX +dmb dtF dPq mcK @@ -127551,7 +127531,7 @@ kmt nxa bDR bFf -cwa +jps cQl cQl bKE @@ -128056,7 +128036,7 @@ hZy brW eob buP -lOb +mbZ bxu bDX bDX @@ -130050,7 +130030,7 @@ aEU aEU eTm bDy -opU +aIv bRp bYj tpA @@ -130570,7 +130550,7 @@ imn xLP hor chM -eAR +cpk chM cyO cBp @@ -130819,7 +130799,7 @@ aCg aCg bjh cLr -oId +bvr lnf lGj plu @@ -131084,7 +131064,7 @@ fxL xLP rMM chM -hrm +pOl chM vvZ txk @@ -131592,7 +131572,7 @@ uER hzs eTm aHm -tkW +bNj isr bYO tpA @@ -133668,7 +133648,7 @@ dmA dyC dWE gDe -hwH +fXS hab hXC iKW @@ -135826,7 +135806,7 @@ pQS cfG qlJ rAB -ebQ +mQN aIb ebV nDe @@ -139276,7 +139256,7 @@ vBu acO sYg adt -alJ +xRp peQ sYg sYg @@ -140054,7 +140034,7 @@ akr sYg ajS okP -wWf +aRj jzg oyx buv @@ -140307,7 +140287,7 @@ vTo vTo aiO vTo -aks +lTy sYg jEQ okP @@ -140316,7 +140296,7 @@ jzg oyx buv jzg -aqc +mwF jzg asE oyx @@ -140324,7 +140304,7 @@ okP kVY aCy gcR -uVT +aXd bcr bkj cXU @@ -140556,7 +140536,7 @@ aaf aaf vBu vBu -hMu +opm xxt kDE agQ @@ -140577,7 +140557,7 @@ aZL kTL btr atK -xNM +avr axP aDi aPA @@ -140821,7 +140801,7 @@ vTo vTo aiQ vTo -aku +jhe sYg dBu okP @@ -140830,7 +140810,7 @@ jzg oyx asE jzg -cMD +nlZ jzg buv oyx @@ -140838,7 +140818,7 @@ okP dgb aDl aPB -pdI +aXe bcG bkl cXB @@ -141082,7 +141062,7 @@ akv sYg ajS okP -wWf +aRj jzg oyx asE @@ -141686,7 +141666,7 @@ wZv rMf wZv wZv -sGS +ttV hfR eCB vXn @@ -141725,7 +141705,7 @@ gzv gzv gzv gzv -nNW +qeR gzv gzv gzv @@ -141846,7 +141826,7 @@ vBu qRI sYg adu -alJ +xRp sYg sYg sYg @@ -143225,7 +143205,7 @@ sBp bzK bBc xby -rlO +qba rfM wlV xTL @@ -144201,7 +144181,7 @@ cMV cSs cWZ dkH -aJF +dob dBI fmI oRs @@ -144310,7 +144290,7 @@ ljv dmP wRM vmb -fho +oVj mjG lqQ jPk @@ -145018,13 +144998,13 @@ whm wVF gxG uTX -ege +tRV qyk dqL vOe sfu bEC -qcU +aiY bDj bFH dBL @@ -147024,7 +147004,7 @@ cAb aRE aSj wnI -nbN +dgl cSC aov aov @@ -148102,7 +148082,7 @@ tWy qFq kpn uYZ -kzu +dBn nNN kpn kpn @@ -148359,7 +148339,7 @@ tKm uyp bFU vaY -khD +iTd vKQ ttB bFU @@ -149902,7 +149882,7 @@ oiL nZp biN biN -fjH +mCe biN biN biN @@ -151126,7 +151106,7 @@ uKL hWG nlE lEr -rGj +cbN uKL uKL any @@ -151642,7 +151622,7 @@ uoi aIB cbP mdl -dbh +vLi tKI cpC dgV diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index be2ad7f6b47..70019065609 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -168,9 +168,7 @@ /turf/simulated/floor/plasteel, /area/station/security/range) "acj" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -1594,9 +1592,7 @@ }, /area/station/security/armory/secure) "ahU" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/corner, /obj/effect/turf_decal/stripes/corner{ dir = 1 }, @@ -1605,9 +1601,7 @@ }, /area/station/security/armory/secure) "ahV" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=Armory_North"; location = "Armory_South" @@ -2155,9 +2149,7 @@ }, /area/station/security/brig) "ajn" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/corner, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -12112,9 +12104,7 @@ dir = 1 }, /obj/machinery/atmospherics/portable/canister/air, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry) "aMC" = ( @@ -12127,9 +12117,7 @@ layer = 4; pixel_y = -32 }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry) "aME" = ( @@ -13572,18 +13560,14 @@ /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry) "aRd" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/corner, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry) "aRe" = ( /obj/structure/sign/vacuum/external{ pixel_y = -32 }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry) "aRf" = ( @@ -13888,9 +13872,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry) "aRU" = ( @@ -14715,9 +14697,7 @@ /area/station/maintenance/electrical) "aUk" = ( /obj/structure/closet/emcloset, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry) "aUl" = ( @@ -14740,9 +14720,7 @@ dir = 1 }, /obj/effect/landmark/start/assistant, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry) "aUo" = ( @@ -15807,9 +15785,7 @@ name = "Chapel Mass Driver"; pixel_x = 25 }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel{ icon_state = "darkblue" }, @@ -16577,9 +16553,7 @@ }, /area/station/service/chapel) "aZm" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel{ icon_state = "darkblue" }, @@ -16723,9 +16697,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/corner, /turf/simulated/floor/plasteel{ icon_state = "darkbluecorners" }, @@ -18259,9 +18231,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/turf_decal/stripes/corner{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/corner, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, @@ -18329,9 +18299,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -18350,9 +18318,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, @@ -18384,9 +18350,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -30740,30 +30704,22 @@ /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry) "bLZ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry) "bMa" = ( /obj/effect/landmark/start/assistant, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry) "bMb" = ( /obj/machinery/light, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry) "bMc" = ( /obj/machinery/hologram/holopad, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry) "bMd" = ( @@ -34717,9 +34673,7 @@ /turf/simulated/floor/plasteel, /area/station/supply/office) "bXl" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, /area/station/command/teleporter) "bXm" = ( @@ -48535,9 +48489,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -48750,9 +48702,7 @@ dir = 4 }, /obj/machinery/atmospherics/meter, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/engine, /area/station/engineering/control) "cRh" = ( @@ -50117,9 +50067,7 @@ dir = 4 }, /obj/machinery/light, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/engine, /area/station/engineering/control) "cVy" = ( @@ -50131,9 +50079,7 @@ /obj/structure/disaster_counter/supermatter{ pixel_y = -32 }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/engine, /area/station/engineering/control) "cVB" = ( @@ -50728,9 +50674,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plating, /area/station/engineering/secure_storage) "cXQ" = ( @@ -51426,9 +51370,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -52579,9 +52521,7 @@ d2 = 4; icon_state = "1-4" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -52610,9 +52550,7 @@ name = "south bump"; pixel_y = -24 }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/engine, /area/station/engineering/control) "deB" = ( @@ -52625,9 +52563,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/engine, /area/station/engineering/control) "deD" = ( @@ -54656,9 +54592,7 @@ }, /area/station/turret_protected/aisat/interior) "dlu" = ( -/obj/machinery/porta_turret{ - dir = 1 - }, +/obj/machinery/porta_turret/ai_turret, /obj/structure/sign/securearea{ pixel_x = 32 }, @@ -55872,9 +55806,7 @@ /turf/simulated/wall, /area/station/aisat/hall) "dqq" = ( -/obj/machinery/porta_turret{ - dir = 4 - }, +/obj/machinery/porta_turret/ai_turret, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -55888,9 +55820,7 @@ /turf/simulated/floor/plating, /area/station/aisat/hall) "dqx" = ( -/obj/machinery/porta_turret{ - dir = 1 - }, +/obj/machinery/porta_turret/ai_turret, /obj/item/radio/intercom/locked/ai_private{ broadcasting = 1; listening = 0; @@ -55914,18 +55844,6 @@ /obj/structure/reagent_dispensers/fueltank, /turf/simulated/floor/plating, /area/station/aisat/hall) -"dqE" = ( -/obj/machinery/porta_turret{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "vault" - }, -/area/station/aisat/service) "dqL" = ( /obj/structure/lattice, /obj/machinery/camera{ @@ -55939,22 +55857,14 @@ /obj/machinery/light{ dir = 8 }, -/obj/machinery/porta_turret{ - dir = 4; - installation = /obj/item/gun/energy/gun; - name = "hallway turret" - }, +/obj/machinery/porta_turret/ai_turret/disable, /turf/simulated/floor/bluegrid, /area/station/aisat/hall) "dqO" = ( /obj/machinery/light{ dir = 4 }, -/obj/machinery/porta_turret{ - dir = 8; - installation = /obj/item/gun/energy/gun; - name = "hallway turret" - }, +/obj/machinery/porta_turret/ai_turret/disable, /turf/simulated/floor/bluegrid, /area/station/aisat/hall) "dqQ" = ( @@ -56082,9 +55992,7 @@ /turf/simulated/floor/bluegrid, /area/station/turret_protected/ai) "drI" = ( -/obj/machinery/porta_turret{ - dir = 4 - }, +/obj/machinery/porta_turret/ai_turret, /turf/simulated/floor/bluegrid, /area/station/turret_protected/ai) "drK" = ( @@ -56095,12 +56003,6 @@ icon_state = "dark" }, /area/station/turret_protected/ai) -"drM" = ( -/obj/machinery/porta_turret{ - dir = 8 - }, -/turf/simulated/floor/bluegrid, -/area/station/turret_protected/ai) "drN" = ( /turf/simulated/wall, /area/station/turret_protected/ai) @@ -56537,9 +56439,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plating, /area/station/engineering/secure_storage) "dtt" = ( @@ -56556,9 +56456,7 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/landmark/spawner/nukedisc_respawn, /turf/simulated/floor/plating, /area/station/engineering/secure_storage) @@ -57562,9 +57460,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/turf_decal/stripes/corner{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/corner, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkred" @@ -58457,9 +58353,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/visible/red{ dir = 4 @@ -61685,9 +61579,7 @@ }, /area/station/public/toilet) "fXt" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/binary/valve{ dir = 4; name = "Output to Waste" @@ -62059,9 +61951,7 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/turf_decal/stripes/corner{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/corner, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -65354,9 +65244,7 @@ /obj/machinery/atmospherics/pipe/manifold/visible/cyan{ dir = 1 }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/engine, /area/station/engineering/control) "hRq" = ( @@ -65750,9 +65638,7 @@ dir = 8; filter_type = -1 }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/engine, /area/station/engineering/control) "iek" = ( @@ -66904,9 +66790,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/electrical) "iOY" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/machinery/camera{ c_tag = "Disposals"; dir = 1 @@ -69247,9 +69131,7 @@ /turf/simulated/floor/plating, /area/station/science/xenobiology) "khB" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/machinery/door_control{ id = "teleshutter"; name = "Teleporter Shutters Access Control"; @@ -70627,9 +70509,7 @@ /turf/simulated/floor/plasteel, /area/station/maintenance/assembly_line) "kSn" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plasteel, @@ -71586,9 +71466,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/universal{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/engine, /area/station/engineering/control) "lqu" = ( @@ -72331,6 +72209,16 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/port) +"lKI" = ( +/obj/machinery/porta_turret/ai_turret, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "vault" + }, +/area/station/aisat/service) "lKP" = ( /obj/structure/reflector/single{ anchored = 1; @@ -72643,9 +72531,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel{ icon_state = "redfull" }, @@ -73575,9 +73461,7 @@ }, /area/station/medical/virology) "muD" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/disposal) @@ -74596,9 +74480,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/green{ dir = 6 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/corner, /turf/simulated/floor/engine, /area/station/engineering/control) "mZf" = ( @@ -77291,9 +77173,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/red{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/engine, /area/station/engineering/control) "oBf" = ( @@ -78201,9 +78081,7 @@ /turf/simulated/floor/plasteel, /area/station/engineering/atmos) "oYC" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/decal/cleanable/dirt, /obj/machinery/power/apc{ name = "south bump"; @@ -81448,9 +81326,7 @@ /obj/machinery/atmospherics/unary/tank/air{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plating, /area/station/maintenance/apmaint2) "qGT" = ( @@ -83445,9 +83321,7 @@ pixel_y = -24; req_access_txt = "10" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/engine, /area/station/engineering/control) "rQp" = ( @@ -85794,9 +85668,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "tlR" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -86677,9 +86549,7 @@ /turf/simulated/floor/engine, /area/station/science/misc_lab) "tMs" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/spawner/random_spawners/blood_often, /obj/random/mech, /turf/simulated/floor/plating, @@ -88147,9 +88017,7 @@ "uBJ" = ( /obj/machinery/atmospherics/pipe/manifold/visible/red, /obj/machinery/atmospherics/meter, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/engine, /area/station/engineering/control) "uBQ" = ( @@ -89512,9 +89380,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel{ icon_state = "redfull" }, @@ -91119,9 +90985,7 @@ /turf/simulated/floor/plasteel, /area/station/public/dorms) "why" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/corner, /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small, /turf/simulated/floor/plating, @@ -91169,9 +91033,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plating, /area/station/security/permabrig) "wjQ" = ( @@ -94685,9 +94547,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, @@ -132483,10 +132343,10 @@ drf drf dry drO -drM +drI dry drE -drM +drI drO dry drf @@ -132980,7 +132840,7 @@ dpq dpA dkK dlo -dqE +lKI dqp dqA dqD diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm index 96206c5f551..9e475ab6e9e 100644 --- a/code/__DEFINES/layers.dm +++ b/code/__DEFINES/layers.dm @@ -75,6 +75,7 @@ #define LYING_MOB_LAYER 3.8 //#define MOB_LAYER 4 //For easy recordkeeping; this is a byond define #define ABOVE_MOB_LAYER 4.1 +#define HITSCAN_LAYER 4.2 #define WALL_OBJ_LAYER 4.25 #define EDGED_TURF_LAYER 4.3 #define ON_EDGED_TURF_LAYER 4.35 diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 31d8c66207d..ce60b238e61 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -95,7 +95,7 @@ var/BT = get_turf(B) if(AT == BT) return 1 - var/list/line = getline(A, B) + var/list/line = get_line(A, B) for(var/turf/T in line) if(T == AT || T == BT) break diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 22cc060d2f2..b2400d0f7aa 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -173,43 +173,49 @@ Turf and target are seperate in case you want to teleport some distance from a t ///////////////////////////////////////////////////////////////////////// /** - * Gets the turfs which are between the two given atoms. Including their positions - * Only works for atoms on the same Z level which is not 0. So an atom located in a non turf won't work - * Arguments: - * * M - The source atom - * * N - The target atom + * Get a list of turfs in a line from `starting_atom` to `ending_atom`. + * + * Uses the ultra-fast [Bresenham Line-Drawing Algorithm](https://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm). */ -/proc/getline(atom/M, atom/N)//Ultra-Fast Bresenham Line-Drawing Algorithm - if(!M.z || M.z != N.z) // Same Z level and not 0. Else all below breaks - return list() - var/px=M.x //starting x - var/py=M.y - var/line[] = list(locate(px,py,M.z)) - var/dx=N.x-px //x distance - var/dy=N.y-py - var/dxabs=abs(dx)//Absolute value of x distance - var/dyabs=abs(dy) - var/sdx=SIGN(dx) //Sign of x distance (+ or -) - var/sdy=SIGN(dy) - var/x=dxabs>>1 //Counters for steps taken, setting to distance/2 - var/y=dyabs>>1 //Bit-shifting makes me l33t. It also makes getline() unnessecarrily fast. - var/j //Generic integer for counting - if(dxabs>=dyabs) //x distance is greater than y - for(j=0;j=dxabs) //Every dyabs steps, step once in y direction - y-=dxabs - py+=sdy - px+=sdx //Step on in x direction - line+=locate(px,py,M.z)//Add the turf to the list +/proc/get_line(atom/starting_atom, atom/ending_atom) + var/current_x_step = starting_atom.x//start at x and y, then add 1 or -1 to these to get every turf from starting_atom to ending_atom + var/current_y_step = starting_atom.y + var/starting_z = starting_atom.z + + var/list/line = list(get_step(starting_atom, 0))//get_turf(atom) is faster than locate(x, y, z) //Get turf isn't defined yet so we use get step + + var/x_distance = ending_atom.x - current_x_step //x distance + var/y_distance = ending_atom.y - current_y_step + + var/abs_x_distance = abs(x_distance)//Absolute value of x distance + var/abs_y_distance = abs(y_distance) + + var/x_distance_sign = SIGN(x_distance) //Sign of x distance (+ or -) + var/y_distance_sign = SIGN(y_distance) + + var/x = abs_x_distance >> 1 //Counters for steps taken, setting to distance/2 + var/y = abs_y_distance >> 1 //Bit-shifting makes me l33t. It also makes get_line() unnessecarrily fast. + + if(abs_x_distance >= abs_y_distance) //x distance is greater than y + for(var/distance_counter in 0 to (abs_x_distance - 1))//It'll take abs_x_distance steps to get there + y += abs_y_distance + + if(y >= abs_x_distance) //Every abs_y_distance steps, step once in y direction + y -= abs_x_distance + current_y_step += y_distance_sign + + current_x_step += x_distance_sign //Step on in x direction + line += locate(current_x_step, current_y_step, starting_z)//Add the turf to the list else - for(j=0;j=dyabs) - x-=dyabs - px+=sdx - py+=sdy - line+=locate(px,py,M.z) + for(var/distance_counter in 0 to (abs_y_distance - 1)) + x += abs_x_distance + + if(x >= abs_y_distance) + x -= abs_y_distance + current_x_step += x_distance_sign + + current_y_step += y_distance_sign + line += locate(current_x_step, current_y_step, starting_z) return line //Same as the thing below just for density and without support for atoms. diff --git a/code/datums/spell_targeting/spell_targeting.dm b/code/datums/spell_targeting/spell_targeting.dm index ff656f493f9..37a379a8acb 100644 --- a/code/datums/spell_targeting/spell_targeting.dm +++ b/code/datums/spell_targeting/spell_targeting.dm @@ -96,7 +96,7 @@ //Checks for obstacles from A to B var/obj/dummy = new(source.loc) dummy.pass_flags |= PASSTABLE - for(var/turf/turf as anything in getline(source, target)) + for(var/turf/turf as anything in get_line(source, target)) for(var/atom/movable/AM in turf) if(!AM.CanPass(dummy, turf, 1)) qdel(dummy) diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index 24bf862a9da..37db37cd824 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -335,11 +335,11 @@ unlock_sound = 'sound/items/rped.ogg' /datum/AI_Module/upgrade_turrets/upgrade(mob/living/silicon/ai/AI) - for(var/obj/machinery/porta_turret/turret in GLOB.machines) + for(var/obj/machinery/porta_turret/ai_turret/turret in GLOB.machines) var/turf/T = get_turf(turret) if(is_station_level(T.z)) turret.health += 30 - turret.eprojectile = /obj/item/projectile/beam/laser/heavylaser //Once you see it, you will know what it means to FEAR. + turret.eprojectile = /obj/item/projectile/beam/laser/ai_turret/heavylaser //Once you see it, you will know what it means to FEAR. turret.eshot_sound = 'sound/weapons/lasercannonfire.ogg' //Hostile Station Lockdown: Locks, bolts, and electrifies every airlock on the station. After 90 seconds, the doors reset. diff --git a/code/game/gamemodes/miniantags/pulsedemon/pulsedemon_abilities.dm b/code/game/gamemodes/miniantags/pulsedemon/pulsedemon_abilities.dm index d3fcfe40ca6..07a7735affa 100644 --- a/code/game/gamemodes/miniantags/pulsedemon/pulsedemon_abilities.dm +++ b/code/game/gamemodes/miniantags/pulsedemon/pulsedemon_abilities.dm @@ -137,7 +137,7 @@ return FALSE playsound(T, 'sound/magic/lightningshock.ogg', 50, TRUE) O.Beam(target, icon_state = "lightning[rand(1, 12)]", icon = 'icons/effects/effects.dmi', time = 1 SECONDS) - for(var/turf/working in getline(O, T)) + for(var/turf/working in get_line(O, T)) for(var/mob/living/L in working) if(!electrocute_mob(L, C.powernet, user)) // give a little bit of non-lethal counterplay against insuls L.Jitter(5 SECONDS) diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index e892a9cef44..6e913b03149 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -67,6 +67,10 @@ var/has_cover = TRUE //Hides the cover /// Deployment override to allow turret popup on/under dense turfs/objects, for admin/CC turrets var/deployment_override = FALSE + /// What lethal mode projectile with the turret start with? + var/initial_eprojectile = null + /// What non-lethal mode projectile with the turret start with? + var/initial_projectile = null /obj/machinery/porta_turret/Initialize(mapload) @@ -142,8 +146,12 @@ egun = 1 if(/obj/item/gun/energy/pulse/turret) - eprojectile = /obj/item/projectile/beam/pulse + eprojectile = /obj/item/projectile/beam/pulse/hitscan eshot_sound = 'sound/weapons/pulse.ogg' + if(initial_eprojectile) + eprojectile = initial_eprojectile + if(initial_projectile) + projectile = initial_projectile GLOBAL_LIST_EMPTY(turret_icons) /obj/machinery/porta_turret/update_icon_state() @@ -761,6 +769,13 @@ GLOBAL_LIST_EMPTY(turret_icons) A.throw_at(target, scan_range, 1) return A +/obj/machinery/porta_turret/ai_turret + initial_eprojectile = /obj/item/projectile/beam/laser/ai_turret + +/obj/machinery/porta_turret/ai_turret/disable + name = "hallway turret" + initial_projectile = /obj/item/projectile/beam/disabler + /obj/machinery/porta_turret/centcom name = "\improper Centcomm turret" enabled = FALSE diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 5afaeadb9d8..675f127937d 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -156,17 +156,18 @@ icon_state = "mecha_pulse" energy_drain = 120 origin_tech = "materials=3;combat=6;powerstorage=4" - projectile = /obj/item/projectile/beam/pulse/heavy + projectile = /obj/item/projectile/beam/pulse/hitscan/heavy fire_sound = 'sound/weapons/marauder.ogg' harmful = TRUE -/obj/item/projectile/beam/pulse/heavy +/obj/item/projectile/beam/pulse/hitscan/heavy name = "heavy pulse laser" icon_state = "pulse1_bl" var/life = 20 -/obj/item/projectile/beam/pulse/heavy/Bump(atom/A) + +/obj/item/projectile/beam/pulse/hitscan/heavy/Bump(atom/A) A.bullet_act(src, def_zone) life -= 10 if(ismob(A)) diff --git a/code/game/objects/effects/temporary_visuals/projectile/impact.dm b/code/game/objects/effects/temporary_visuals/projectile/impact.dm new file mode 100644 index 00000000000..b4ab549f620 --- /dev/null +++ b/code/game/objects/effects/temporary_visuals/projectile/impact.dm @@ -0,0 +1,54 @@ +//These are directional impact effects used by hitscan projectiles. Unlike current impact effect, they rotate to face the point the hitscan beam came from. + +/obj/effect/projectile/impact + name = "beam impact" + icon = 'icons/obj/projectiles_impact.dmi' + +/obj/effect/projectile/impact/laser + name = "laser impact" + icon_state = "impact_laser" + +/obj/effect/projectile/impact/laser/blue + name = "laser impact" + icon_state = "impact_blue" + +/obj/effect/projectile/impact/disabler + name = "disabler impact" + icon_state = "impact_omni" + +/obj/effect/projectile/impact/xray + name = "\improper X-ray impact" + icon_state = "impact_xray" + +/obj/effect/projectile/impact/pulse + name = "pulse impact" + icon_state = "impact_u_laser" + +/obj/effect/projectile/impact/plasma_cutter + name = "plasma impact" + icon_state = "impact_plasmacutter" + +/obj/effect/projectile/impact/stun + name = "stun impact" + icon_state = "impact_stun" + +/obj/effect/projectile/impact/heavy_laser + name = "heavy laser impact" + icon_state = "impact_beam_heavy" + +/obj/effect/projectile/impact/wormhole + icon_state = "wormhole_g" + +/obj/effect/projectile/impact/laser/emitter + name = "emitter impact" + icon_state = "impact_emitter" + +/obj/effect/projectile/impact/solar + name = "solar impact" + icon_state = "impact_solar" + +/obj/effect/projectile/impact/sniper + icon_state = "sniper" + +/obj/effect/projectile/impact/death + icon_state = "impact_hcult" diff --git a/code/game/objects/effects/temporary_visuals/projectile/muzzle.dm b/code/game/objects/effects/temporary_visuals/projectile/muzzle.dm new file mode 100644 index 00000000000..2a04276658e --- /dev/null +++ b/code/game/objects/effects/temporary_visuals/projectile/muzzle.dm @@ -0,0 +1,48 @@ +//These are directional muzzle effects used by hitscan projectiles. Unlike current muzzle effect, they rotate to face the point the hitscan beam came from. + +/obj/effect/projectile/muzzle + name = "muzzle flash" + icon = 'icons/obj/projectiles_muzzle.dmi' + +/obj/effect/projectile/muzzle/laser + icon_state = "muzzle_laser" + +/obj/effect/projectile/muzzle/laser/blue + icon_state = "muzzle_blue" + +/obj/effect/projectile/muzzle/disabler + icon_state = "muzzle_omni" + +/obj/effect/projectile/muzzle/xray + icon_state = "muzzle_xray" + +/obj/effect/projectile/muzzle/pulse + icon_state = "muzzle_u_laser" + +/obj/effect/projectile/muzzle/plasma_cutter + icon_state = "muzzle_plasmacutter" + +/obj/effect/projectile/muzzle/stun + icon_state = "muzzle_stun" + +/obj/effect/projectile/muzzle/heavy_laser + icon_state = "muzzle_beam_heavy" + +/obj/effect/projectile/muzzle/wormhole + icon_state = "wormhole_g" + +/obj/effect/projectile/muzzle/laser/emitter + name = "emitter flash" + icon_state = "muzzle_emitter" + +/obj/effect/projectile/muzzle/solar + icon_state = "muzzle_solar" + +/obj/effect/projectile/muzzle/sniper + icon_state = "sniper" + +/obj/effect/projectile/muzzle/bullet + icon_state = "muzzle_bullet" + +/obj/effect/projectile/muzzle/death + icon_state = "muzzle_hcult" diff --git a/code/game/objects/effects/temporary_visuals/projectile/projectile_effects.dm b/code/game/objects/effects/temporary_visuals/projectile/projectile_effects.dm new file mode 100644 index 00000000000..5ced8280dba --- /dev/null +++ b/code/game/objects/effects/temporary_visuals/projectile/projectile_effects.dm @@ -0,0 +1,66 @@ +//This is the parent of all projectile effects, impact muzzle and tracer. + +/obj/effect/projectile + name = "pew" + icon = 'icons/obj/projectiles.dmi' + icon_state = "nothing" + layer = HITSCAN_LAYER + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + appearance_flags = LONG_GLIDE + +/obj/effect/projectile/singularity_pull() + return + +/obj/effect/projectile/singularity_act() + return + +/obj/effect/projectile/proc/scale_to(nx,ny,override=TRUE) + var/matrix/M + if(!override) + M = transform + else + M = new + M.Scale(nx, ny) + transform = M + +/obj/effect/projectile/proc/turn_to(angle,override=TRUE) + var/matrix/M + if(!override) + M = transform + else + M = new + M.Turn(angle) + transform = M + +/obj/effect/projectile/New(angle_override, p_x, p_y, color_override, scaling = 1) + if(angle_override && p_x && p_y && color_override && scaling) + apply_vars(angle_override, p_x, p_y, color_override, scaling) + return ..() + +/obj/effect/projectile/proc/apply_vars(angle_override, p_x = 0, p_y = 0, color_override, scaling = 1, new_loc, increment = 0) + var/mutable_appearance/look = new(src) + look.appearance_flags = RESET_COLOR | RESET_ALPHA + look.pixel_x = p_x + look.pixel_y = p_y + if(color_override) + look.color = color_override + look.appearance_flags = RESET_ALPHA + else + look.appearance_flags = RESET_COLOR | RESET_ALPHA + icon_state = null + add_overlay(look) + scale_to(1, scaling, FALSE) + turn_to(angle_override, FALSE) + if(!isnull(new_loc)) //If you want to null it just delete it... + forceMove(new_loc) + for(var/i in 1 to increment) + pixel_x += round((sin(angle_override) + 16 * sin(angle_override) * 2), 1) + pixel_y += round((cos(angle_override) + 16 * cos(angle_override) * 2), 1) + +/obj/effect/projectile_lighting + var/owner + +/obj/effect/projectile_lighting/Initialize(mapload, color, range, intensity, owner_key) + . = ..() + set_light(range, intensity, color) + owner = owner_key diff --git a/code/game/objects/effects/temporary_visuals/projectile/tracer.dm b/code/game/objects/effects/temporary_visuals/projectile/tracer.dm new file mode 100644 index 00000000000..079fbf6c6c2 --- /dev/null +++ b/code/game/objects/effects/temporary_visuals/projectile/tracer.dm @@ -0,0 +1,99 @@ +//These are the visual tracers, the beams you see with hitscan effects. This is the proc that generates said tracer + +/proc/generate_tracer_between_points(datum/position/starting, datum/position/ending, beam_type, color, qdel_in = 5, light_range = 2, light_color_override, light_intensity = 1, instance_key) //Do not pass z-crossing points as that will not be properly (and likely will never be properly until it's absolutely needed) supported! + if(isnull(starting)) + return + if(isnull(ending)) + return + if(isnull(beam_type)) + return + var/datum/position/midpoint = point_midpoint_points(starting, ending) + var/performance_counter + for(var/obj/effect/projectile/tracer/counter in midpoint.return_turf()) + performance_counter++ + if(performance_counter >= 3) + return //Damage still happens, this should stop engineers with looping emitters doing shenanigins that makes the server cry + + var/obj/effect/projectile/tracer/PB = new beam_type + if(isnull(light_color_override)) + light_color_override = color + PB.apply_vars(angle_between_points(starting, ending), midpoint.return_px(), midpoint.return_py(), color, pixel_length_between_points(starting, ending) / world.icon_size, midpoint.return_turf(), 0) + . = PB + if(light_range > 0 && light_intensity > 0) + var/list/turf/line = get_line(starting.return_turf(), ending.return_turf()) + tracing_line: + for(var/i in line) + var/turf/T = i + for(var/obj/effect/projectile_lighting/PL in T) + if(PL.owner == locateUID(instance_key)) + continue tracing_line + QDEL_IN(new /obj/effect/projectile_lighting(T, light_color_override, light_range, light_intensity, instance_key), qdel_in > 0? qdel_in : 5) + line = null + if(qdel_in) + QDEL_IN(PB, qdel_in) + +/obj/effect/projectile/tracer + name = "beam" + icon = 'icons/obj/projectiles_tracer.dmi' + +/obj/effect/projectile/tracer/laser + name = "laser" + icon_state = "beam" + +/obj/effect/projectile/tracer/laser/blue + icon_state = "beam_blue" + +/obj/effect/projectile/tracer/disabler + name = "disabler" + icon_state = "beam_omni" + +/obj/effect/projectile/tracer/xray + name = "\improper X-ray laser" + icon_state = "xray" + +/obj/effect/projectile/tracer/pulse + name = "pulse laser" + icon_state = "u_laser" + +/obj/effect/projectile/tracer/plasma_cutter + name = "plasma blast" + icon_state = "plasmacutter" + +/obj/effect/projectile/tracer/stun + name = "stun beam" + icon_state = "stun" + +/obj/effect/projectile/tracer/heavy_laser + name = "heavy laser" + icon_state = "beam_heavy" + +/obj/effect/projectile/tracer/solar + name = "solar beam" + icon_state = "solar" + +/obj/effect/projectile/tracer/solar/thin + icon_state = "solar_thin" + +/obj/effect/projectile/tracer/solar/thinnest + icon_state = "solar_thinnest" + +//BEAM RIFLE +/obj/effect/projectile/tracer/tracer/beam_rifle + icon_state = "tracer_beam" + +/obj/effect/projectile/tracer/tracer/aiming + icon_state = "pixelbeam_greyscale" + plane = ABOVE_LIGHTING_PLANE + +/obj/effect/projectile/tracer/wormhole + icon_state = "wormhole_g" + +/obj/effect/projectile/tracer/laser/emitter + name = "emitter beam" + icon_state = "emitter" + +/obj/effect/projectile/tracer/sniper + icon_state = "sniper" + +/obj/effect/projectile/tracer/death + icon_state = "hcult" diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 6dd9c5813f2..ac626199b33 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -89,7 +89,7 @@ if(user.get_active_hand() == src) // Make sure our user is still holding us var/turf/target_turf = get_turf(target) if(target_turf) - var/turflist = getline(user, target_turf) + var/turflist = get_line(user, target_turf) add_attack_logs(user, target, "Flamethrowered at [target.x],[target.y],[target.z]") flame_turf(turflist) diff --git a/code/game/turfs/simulated/floor/chasm.dm b/code/game/turfs/simulated/floor/chasm.dm index 8b73f6610cc..c4c6928ab72 100644 --- a/code/game/turfs/simulated/floor/chasm.dm +++ b/code/game/turfs/simulated/floor/chasm.dm @@ -30,6 +30,8 @@ /obj/effect/spawner, /obj/structure/railing, /obj/machinery/atmospherics/pipe/simple, + /obj/effect/projectile, + /obj/effect/projectile_lighting, /mob/living/simple_animal/hostile/megafauna //failsafe )) var/drop_x = 1 diff --git a/code/modules/antagonists/vampire/vampire_powers/hemomancer_powers.dm b/code/modules/antagonists/vampire/vampire_powers/hemomancer_powers.dm index 9bde4fb3a18..4051c4c039f 100644 --- a/code/modules/antagonists/vampire/vampire_powers/hemomancer_powers.dm +++ b/code/modules/antagonists/vampire/vampire_powers/hemomancer_powers.dm @@ -195,7 +195,7 @@ should_recharge_after_cast = TRUE return var/wall_count - for(var/turf/T in getline(target_turf, start_turf)) + for(var/turf/T in get_line(target_turf, start_turf)) if(max_walls <= wall_count) break new /obj/structure/blood_barrier(T) diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index f461f00e5f5..b61d7eabd93 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -368,7 +368,7 @@ alert_admins_on_craft = TRUE /datum/crafting_recipe/pulseslug - name = "Pulse Slug Shell" + name = "Proto Pulse Slug Shell" result = list(/obj/item/ammo_casing/shotgun/pulseslug) reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, /obj/item/stock_parts/capacitor/adv = 2, diff --git a/code/modules/mob/living/simple_animal/hostile/floorcluwne.dm b/code/modules/mob/living/simple_animal/hostile/floorcluwne.dm index e3fcbc1080a..1da49658b65 100644 --- a/code/modules/mob/living/simple_animal/hostile/floorcluwne.dm +++ b/code/modules/mob/living/simple_animal/hostile/floorcluwne.dm @@ -305,7 +305,7 @@ if(STAGE_ATTACK) if(!eating) - for(var/I in getline(src, get_turf(H))) + for(var/I in get_line(src, get_turf(H))) var/turf/T = I for(var/obj/structure/O in T) if(istype(O, /obj/structure/closet)) diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 54685786b5f..e57f21ab13e 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -370,7 +370,7 @@ /mob/living/simple_animal/hostile/proc/CheckFriendlyFire(atom/A) if(check_friendly_fire) - for(var/turf/T in getline(src,A)) // Not 100% reliable but this is faster than simulating actual trajectory + for(var/turf/T in get_line(src,A)) // Not 100% reliable but this is faster than simulating actual trajectory for(var/mob/living/L in T) if(L == src || L == A) continue diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm index 903fec945d9..3515e72c788 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm @@ -239,7 +239,7 @@ Difficulty: Medium turf_dist_to_target += get_dist(dash_target, O) if(get_dist(src, O) >= MINER_DASH_RANGE && turf_dist_to_target <= self_dist_to_target && !islava(O) && !ischasm(O)) var/valid = TRUE - for(var/turf/T in getline(own_turf, O)) + for(var/turf/T in get_line(own_turf, O)) if(is_blocked_turf(T, TRUE)) valid = FALSE continue diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm index 13f26c9e8da..a848cad5d24 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -267,7 +267,7 @@ Difficulty: Medium if(!check) break T = check - return (getline(src, T) - get_turf(src)) + return (get_line(src, T) - get_turf(src)) /mob/living/simple_animal/hostile/megafauna/dragon/proc/fire_line(list/turfs) SLEEP_CHECK_DEATH(0) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm index e64b128c812..e31d3b1e61a 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm @@ -168,7 +168,7 @@ Difficulty: Medium /mob/living/simple_animal/hostile/megafauna/legion/proc/fire_disintegration_laser(location) playsound(loc, 'sound/weapons/marauder.ogg', 200, TRUE) Beam(location, icon_state = "death_laser", time = 2 SECONDS, maxdistance = INFINITY, beam_type = /obj/effect/ebeam/disintegration) - for(var/turf/t in getline(src, location)) + for(var/turf/t in get_line(src, location)) if(ismineralturf(t)) var/turf/simulated/mineral/M = t M.gets_drilled(src) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/combat_drone.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/combat_drone.dm index ac8f0cb7531..38e012c6fc8 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/combat_drone.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/combat_drone.dm @@ -23,7 +23,7 @@ health = 200 maxHealth = 200 speed = 8 - projectiletype = /obj/item/projectile/beam/immolator/weak + projectiletype = /obj/item/projectile/beam/immolator/weak/hitscan projectilesound = 'sound/weapons/laser3.ogg' atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm index 9c8e33e5a94..764244207c3 100644 --- a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm +++ b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm @@ -94,7 +94,7 @@ for(var/mob/living/L in view(grasp_range, src)) if(L == src || faction_check_mob(L) || (L in grasping) || L == target) continue - for(var/t in getline(src,L)) + for(var/t in get_line(src,L)) for(var/a in t) var/atom/A = a if(A.density && A != L) @@ -107,7 +107,7 @@ /mob/living/simple_animal/hostile/venus_human_trap/OpenFire(atom/the_target) - for(var/turf/T in getline(src,target)) + for(var/turf/T in get_line(src,target)) if (T.density) return for(var/obj/O in T) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 206c93a1fbe..84f98dc5701 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -282,7 +282,7 @@ L.forceMove(locate(locx,locy,mobloc.z)) spawn(0) var/limit = 2//For only two trailing shadows. - for(var/turf/T in getline(mobloc, L.loc)) + for(var/turf/T in get_line(mobloc, L.loc)) new /obj/effect/temp_visual/dir_setting/ninja/shadow(T, L.dir) limit-- if(limit<=0) diff --git a/code/modules/power/engines/singularity/emitter.dm b/code/modules/power/engines/singularity/emitter.dm index eea4120f2b9..f3a35d0d969 100644 --- a/code/modules/power/engines/singularity/emitter.dm +++ b/code/modules/power/engines/singularity/emitter.dm @@ -34,7 +34,7 @@ /// Locked by an ID card var/locked = FALSE - var/projectile_type = /obj/item/projectile/beam/emitter + var/projectile_type = /obj/item/projectile/beam/emitter/hitscan var/projectile_sound = 'sound/weapons/emitter.ogg' var/datum/effect_system/spark_spread/sparks diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index 1875458d1c0..4c29c02f3d4 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -209,7 +209,7 @@ projectile_type = /obj/item/projectile/bullet/meteorshot /obj/item/ammo_casing/shotgun/pulseslug - name = "pulse slug" + name = "proto pulse slug" desc = "A delicate device which can be loaded into a shotgun. The primer acts as a button which triggers the gain medium and fires a powerful \ energy blast. While the heat and power drain limit it to one use, it can still allow an operator to engage targets that ballistic ammunition \ would have difficulty with." diff --git a/code/modules/projectiles/ammunition/energy_lens.dm b/code/modules/projectiles/ammunition/energy_lens.dm index 93f700959ae..2e1e28853aa 100644 --- a/code/modules/projectiles/ammunition/energy_lens.dm +++ b/code/modules/projectiles/ammunition/energy_lens.dm @@ -42,14 +42,14 @@ fire_sound = 'sound/weapons/lasercannonfire.ogg' /obj/item/ammo_casing/energy/laser/pulse - projectile_type = /obj/item/projectile/beam/pulse + projectile_type = /obj/item/projectile/beam/pulse/hitscan muzzle_flash_color = LIGHT_COLOR_DARKBLUE e_cost = 200 select_name = "DESTROY" fire_sound = 'sound/weapons/pulse.ogg' /obj/item/ammo_casing/energy/laser/scatter/pulse - projectile_type = /obj/item/projectile/beam/pulse + projectile_type = /obj/item/projectile/beam/pulse/hitscan e_cost = 200 select_name = "ANNIHILATE" fire_sound = 'sound/weapons/pulse.ogg' @@ -286,7 +286,7 @@ select_name = "clown" /obj/item/ammo_casing/energy/emitter - projectile_type = /obj/item/projectile/beam/emitter + projectile_type = /obj/item/projectile/beam/emitter/hitscan muzzle_flash_color = LIGHT_COLOR_GREEN fire_sound = 'sound/weapons/emitter.ogg' e_cost = 100 diff --git a/code/modules/projectiles/guns/energy/special_eguns.dm b/code/modules/projectiles/guns/energy/special_eguns.dm index de148915581..b43f8efb62d 100644 --- a/code/modules/projectiles/guns/energy/special_eguns.dm +++ b/code/modules/projectiles/guns/energy/special_eguns.dm @@ -417,42 +417,11 @@ reset_overloaded() do_sparks(2, 1, src) update_icon() - if(prob(25)) - visible_message("[src] vents heated plasma!") - var/turf/simulated/T = get_turf(src) - if(istype(T)) - T.atmos_spawn_air(LINDA_SPAWN_TOXINS|LINDA_SPAWN_20C,15) - return - if(prob(50)) - var/list/mob_targets = list() - for(var/mob/living/M in oview(get_turf(src), 7)) - mob_targets += M - if(length(mob_targets)) - var/mob/living/target = pick(mob_targets) - shootAt(target) - visible_message("[src] discharges a plasma bolt!") - return + visible_message("[src] vents heated plasma!") + var/turf/simulated/T = get_turf(src) + if(istype(T)) + T.atmos_spawn_air(LINDA_SPAWN_HEAT | LINDA_SPAWN_TOXINS|LINDA_SPAWN_20C, 20) - visible_message("[src] discharges a plasma bolt!") - var/list/turf_targets = list() - for(var/turf/T in orange(get_turf(src), 7)) - turf_targets += T - if(length(turf_targets)) - var/turf/target = pick(turf_targets) - shootAt(target) - - -/obj/item/gun/energy/plasma_pistol/proc/shootAt(atom/movable/target) - var/turf/T = get_turf(src) - var/turf/U = get_turf(target) - if(!T || !U) - return - var/obj/item/projectile/energy/charged_plasma/O = new /obj/item/projectile/energy/charged_plasma(T) - playsound(get_turf(src), 'sound/weapons/marauder.ogg', 75, 1) - O.current = T - O.yo = U.y - T.y - O.xo = U.x - T.x - O.fire() /obj/item/gun/energy/bsg name = "\improper B.S.G" diff --git a/code/modules/projectiles/guns/medbeam.dm b/code/modules/projectiles/guns/medbeam.dm index 94af166ade4..a61932cafdf 100644 --- a/code/modules/projectiles/guns/medbeam.dm +++ b/code/modules/projectiles/guns/medbeam.dm @@ -88,7 +88,7 @@ return FALSE var/obj/dummy = new(user_turf) dummy.pass_flags |= PASSTABLE | PASSGLASS | PASSGRILLE | PASSFENCE //Grille/Glass so it can be used through common windows - for(var/turf/turf in getline(user_turf,target)) + for(var/turf/turf in get_line(user_turf,target)) if(turf.density) qdel(dummy) return FALSE diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 5328cd1d8a3..86464da459a 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -33,6 +33,39 @@ icon_state = "heavylaser" damage = 40 +/obj/item/projectile/beam/laser/ai_turret + damage = 17.5 //Slight loss in damage because hitscan + forcedodge = 1 + hitscan = TRUE + muzzle_type = /obj/effect/projectile/muzzle/laser + tracer_type = /obj/effect/projectile/tracer/laser + impact_type = /obj/effect/projectile/impact/laser + impact_effect_type = null + hitscan_light_intensity = 3 + hitscan_light_range = 0.75 + hitscan_light_color_override = LIGHT_COLOR_DARKRED + muzzle_flash_intensity = 6 + muzzle_flash_range = 2 + muzzle_flash_color_override = LIGHT_COLOR_DARKRED + impact_light_intensity = 7 + impact_light_range = 2.5 + impact_light_color_override = LIGHT_COLOR_DARKRED + +/obj/item/projectile/beam/laser/ai_turret/prehit(atom/target) + if(isAI(target)) + damage = 0 //cheater cheater I don't want AI to die to stupid placement eater + nodamage = 1 + if(isliving(target)) + forcedodge = 0 //no peircing after hitting a mob to avoid rooms destroying itself. If someone does monkey chair on AI sat though, I swear to god + ..() + +/obj/item/projectile/beam/laser/ai_turret/heavylaser + damage = 35 + muzzle_type = /obj/effect/projectile/muzzle/heavy_laser + tracer_type = /obj/effect/projectile/tracer/heavy_laser + impact_type = /obj/effect/projectile/impact/heavy_laser + + /obj/item/projectile/beam/practice name = "practice laser" damage = 0 @@ -73,12 +106,31 @@ impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser light_color = LIGHT_COLOR_DARKBLUE +/obj/item/projectile/beam/pulse/hitscan + impact_effect_type = null + light_color = null + hitscan = TRUE + muzzle_type = /obj/effect/projectile/muzzle/pulse + tracer_type = /obj/effect/projectile/tracer/pulse + impact_type = /obj/effect/projectile/impact/pulse + impact_effect_type = null + hitscan_light_intensity = 3 + hitscan_light_range = 0.75 + hitscan_light_color_override = LIGHT_COLOR_DARKBLUE + muzzle_flash_intensity = 6 + muzzle_flash_range = 2 + muzzle_flash_color_override = LIGHT_COLOR_DARKBLUE + impact_light_intensity = 7 + impact_light_range = 2.5 + impact_light_color_override = LIGHT_COLOR_DARKBLUE + /obj/item/projectile/beam/pulse/on_hit(atom/target, blocked = 0) if(isturf(target) || isstructure(target) || ismachinery(target)) target.ex_act(2) ..() /obj/item/projectile/beam/pulse/shot + name = "proto pulse" damage = 40 /obj/item/projectile/beam/emitter @@ -88,6 +140,22 @@ impact_effect_type = /obj/effect/temp_visual/impact_effect/green_laser light_color = LIGHT_COLOR_GREEN +/obj/item/projectile/beam/emitter/hitscan + hitscan = TRUE + muzzle_type = /obj/effect/projectile/muzzle/laser/emitter + tracer_type = /obj/effect/projectile/tracer/laser/emitter + impact_type = /obj/effect/projectile/impact/laser/emitter + impact_effect_type = null + hitscan_light_intensity = 3 + hitscan_light_range = 0.75 + hitscan_light_color_override = LIGHT_COLOR_GREEN + muzzle_flash_intensity = 6 + muzzle_flash_range = 2 + muzzle_flash_color_override = LIGHT_COLOR_GREEN + impact_light_intensity = 7 + impact_light_range = 2.5 + impact_light_color_override = LIGHT_COLOR_GREEN + /obj/item/projectile/beam/emitter/singularity_pull() return //don't want the emitters to miss @@ -141,6 +209,23 @@ damage = 8 icon_state = "scatterlaser" +/obj/item/projectile/beam/immolator/weak/hitscan + color = LIGHT_COLOR_FIRE + hitscan = TRUE + muzzle_type = /obj/effect/projectile/muzzle/laser + tracer_type = /obj/effect/projectile/tracer/laser + impact_type = /obj/effect/projectile/impact/laser + impact_effect_type = null + hitscan_light_intensity = 3 + hitscan_light_range = 0.75 + hitscan_light_color_override = LIGHT_COLOR_FIRE + muzzle_flash_intensity = 6 + muzzle_flash_range = 2 + muzzle_flash_color_override = LIGHT_COLOR_FIRE + impact_light_intensity = 7 + impact_light_range = 2.5 + impact_light_color_override = LIGHT_COLOR_FIRE + /obj/item/projectile/beam/immolator/on_hit(atom/target, blocked = 0) . = ..() if(isliving(target)) diff --git a/code/modules/projectiles/projectile/magic_projectiles.dm b/code/modules/projectiles/projectile/magic_projectiles.dm index 127f8a10fd4..ae210e6a014 100644 --- a/code/modules/projectiles/projectile/magic_projectiles.dm +++ b/code/modules/projectiles/projectile/magic_projectiles.dm @@ -9,7 +9,20 @@ /obj/item/projectile/magic/death name = "bolt of death" - icon_state = "pulse1_bl" + icon_state = null + hitscan = TRUE + muzzle_type = /obj/effect/projectile/muzzle/death + tracer_type = /obj/effect/projectile/tracer/death + impact_type = /obj/effect/projectile/impact/death + hitscan_light_intensity = 3 + hitscan_light_range = 0.75 + hitscan_light_color_override = LIGHT_COLOR_PURPLE + muzzle_flash_intensity = 6 + muzzle_flash_range = 2 + muzzle_flash_color_override = LIGHT_COLOR_PURPLE + impact_light_intensity = 7 + impact_light_range = 2.5 + impact_light_color_override = LIGHT_COLOR_PURPLE /obj/item/projectile/magic/fireball name = "bolt of fireball" diff --git a/code/modules/projectiles/projectile/special_projectiles.dm b/code/modules/projectiles/projectile/special_projectiles.dm index a2b5d607a6f..fe9be67164c 100644 --- a/code/modules/projectiles/projectile/special_projectiles.dm +++ b/code/modules/projectiles/projectile/special_projectiles.dm @@ -240,7 +240,20 @@ range = 3 dismemberment = 20 sharp = TRUE - impact_effect_type = /obj/effect/temp_visual/impact_effect/purple_laser + hitscan = TRUE + muzzle_type = /obj/effect/projectile/muzzle/plasma_cutter + tracer_type = /obj/effect/projectile/tracer/plasma_cutter + impact_type = /obj/effect/projectile/impact/plasma_cutter + impact_effect_type = null + hitscan_light_intensity = 3 + hitscan_light_range = 0.75 + hitscan_light_color_override = LIGHT_COLOR_CYAN + muzzle_flash_intensity = 6 + muzzle_flash_range = 2 + muzzle_flash_color_override = LIGHT_COLOR_CYAN + impact_light_intensity = 7 + impact_light_range = 2.5 + impact_light_color_override = LIGHT_COLOR_CYAN /obj/item/projectile/plasma/prehit(atom/target) . = ..() diff --git a/code/modules/projectiles/projectile_base.dm b/code/modules/projectiles/projectile_base.dm index ac0d0e905e2..ddbe7edc5ef 100644 --- a/code/modules/projectiles/projectile_base.dm +++ b/code/modules/projectiles/projectile_base.dm @@ -1,3 +1,8 @@ +/// Is this a hitscan projectile or not, if so move like one +#define MOVES_HITSCAN -1 +/// How many pixels to move the muzzle flash up so your character doesn't look like they're shitting out lasers. +#define MUZZLE_EFFECT_PIXEL_INCREMENT 17 + /obj/item/projectile name = "projectile" icon = 'icons/obj/projectiles.dmi' @@ -26,6 +31,7 @@ var/p_y = 16 // the pixel location of the tile that the player clicked. Default is the center var/speed = 1 //Amount of deciseconds it takes for projectile to travel var/Angle = null + var/original_angle = null //Angle at firing var/spread = 0 //amount (in degrees) of projectile spread animate_movement = 0 @@ -80,6 +86,32 @@ var/shield_buster = FALSE var/forced_accuracy = FALSE + ///Has the projectile been fired? + var/has_been_fired = FALSE + + //Hitscan + var/hitscan = FALSE //Whether this is hitscan. If it is, speed is basically ignored. + var/list/beam_segments //assoc list of datum/point_precise or datum/point_precise/vector, start = end. Used for hitscan effect generation. + /// Last turf an angle was changed in for hitscan projectiles. + var/turf/last_angle_set_hitscan_store + var/datum/point_precise/beam_index + var/turf/hitscan_last //last turf touched during hitscanning. + var/tracer_type + var/muzzle_type + var/impact_type + + //Fancy hitscan lighting effects! + var/hitscan_light_intensity = 1.5 + var/hitscan_light_range = 0.75 + var/hitscan_light_color_override + var/muzzle_flash_intensity = 3 + var/muzzle_flash_range = 1.5 + var/muzzle_flash_color_override + var/impact_light_intensity = 3 + var/impact_light_range = 2 + var/impact_light_color_override + var/hitscan_duration = 0.3 SECONDS + /obj/item/projectile/New() return ..() @@ -112,7 +144,7 @@ hity = target.pixel_y + rand(-8, 8) if(!nodamage && (damage_type == BRUTE || damage_type == BURN) && iswallturf(target_loca) && prob(75)) var/turf/simulated/wall/W = target_loca - if(impact_effect_type) + if(impact_effect_type && !hitscan) new impact_effect_type(target_loca, hitx, hity) W.add_dent(WALL_DENT_SHOT, hitx, hity) @@ -120,7 +152,7 @@ if(alwayslog) add_attack_logs(firer, target, "Shot with a [type]") if(!isliving(target)) - if(impact_effect_type) + if(impact_effect_type && !hitscan) new impact_effect_type(target_loca, hitx, hity) return 0 var/mob/living/L = target @@ -152,7 +184,7 @@ M.bloody_hands(H) /* Uncomment when bloody_body stops randomly not transferring blood colour. M.bloody_body(H) */ - else if(impact_effect_type) + else if(impact_effect_type && !hitscan) new impact_effect_type(target_loca, hitx, hity) var/organ_hit_text = "" if(L.has_limbs) @@ -199,11 +231,18 @@ else return 50 //if the projectile doesn't do damage, play its hitsound at 50% volume +/obj/item/projectile/proc/store_hitscan_collision(datum/point_precise/point_cache) + beam_segments[beam_index] = point_cache + beam_index = point_cache + beam_segments[beam_index] = null + /obj/item/projectile/Bump(atom/A, yes) if(!yes) //prevents double bumps. return if(check_ricochet(A) && check_ricochet_flag(A) && ricochets < ricochets_max && is_reflectable(REFLECTABILITY_PHYSICAL)) + if(hitscan && ricochets_max > 10) + ricochets_max = 10 //I do not want a chucklefuck editing this higher, sorry. ricochets++ if(A.handle_ricochet(src)) on_ricochet(A) @@ -265,7 +304,9 @@ return var/elapsed_time_deciseconds = (world.time - last_projectile_move) + time_offset time_offset = 0 - var/required_moves = FLOOR(elapsed_time_deciseconds / speed, 1) + var/required_moves = hitscan ? MOVES_HITSCAN : FLOOR(elapsed_time_deciseconds / speed, 1) + if(required_moves == MOVES_HITSCAN) + required_moves = SSprojectiles.global_max_tick_moves if(required_moves > SSprojectiles.global_max_tick_moves) var/overrun = required_moves - SSprojectiles.global_max_tick_moves required_moves = SSprojectiles.global_max_tick_moves @@ -275,14 +316,15 @@ for(var/i in 1 to required_moves) pixel_move(1) -/obj/item/projectile/proc/pixel_move(trajectory_multiplier) +/obj/item/projectile/proc/pixel_move(trajectory_multiplier, hitscanning = FALSE) if(!loc || !trajectory) return last_projectile_move = world.time // Keep on course - var/matrix/M = new - M.Turn(Angle) - transform = M + if(!hitscanning) + var/matrix/M = new + M.Turn(Angle) + transform = M // Iterate var/forcemoved = FALSE for(var/i in 1 to SSprojectiles.global_iterations_per_move) @@ -297,17 +339,20 @@ trajectory_ignore_forcemove = TRUE forceMove(T) trajectory_ignore_forcemove = FALSE - pixel_x = trajectory.return_px() - pixel_y = trajectory.return_py() + if(!hitscanning) + pixel_x = trajectory.return_px() + pixel_y = trajectory.return_py() forcemoved = TRUE + hitscan_last = loc else if(T != loc) step_towards(src, T) + hitscan_last = loc if(original && (original.layer >= PROJECTILE_HIT_THRESHHOLD_LAYER || ismob(original))) if(loc == get_turf(original) && !(original in permutated)) Bump(original, TRUE) if(QDELETED(src)) //deleted on last move return - if(!forcemoved) + if(!hitscanning && !forcemoved) pixel_x = trajectory.return_px() - trajectory.mpx * trajectory_multiplier * SSprojectiles.global_iterations_per_move pixel_y = trajectory.return_py() - trajectory.mpy * trajectory_multiplier * SSprojectiles.global_iterations_per_move animate(src, pixel_x = trajectory.return_px(), pixel_y = trajectory.return_py(), time = 1, flags = ANIMATION_END_NOW) @@ -320,6 +365,7 @@ current = locate(clamp(x + xo, 1, world.maxx), clamp(y + yo, 1, world.maxy), z) if(isnull(Angle)) Angle = round(get_angle(src, current)) + original_angle = Angle if(spread) Angle += (rand() - 0.5) * spread // Turn right away @@ -329,6 +375,9 @@ // Start flying trajectory = new(x, y, z, pixel_x, pixel_y, Angle, SSprojectiles.global_pixel_speed) last_projectile_move = world.time + has_been_fired = TRUE + if(hitscan) + process_hitscan() START_PROCESSING(SSprojectiles, src) pixel_move(1, FALSE) @@ -358,6 +407,8 @@ Bump(AM, 1) /obj/item/projectile/Destroy() + if(hitscan) + finalize_hitscan_and_generate_tracers() STOP_PROCESSING(SSprojectiles, src) ammo_casing = null firer_source_atom = null @@ -386,11 +437,22 @@ ..() Angle = new_angle trajectory.set_angle(new_angle) + if(has_been_fired && hitscan && isloc(loc) && (loc != last_angle_set_hitscan_store)) + last_angle_set_hitscan_store = loc + var/datum/point/point_cache = new (src) + point_cache = trajectory.copy_to() + store_hitscan_collision(point_cache) /obj/item/projectile/proc/set_angle_centered(new_angle) set_angle(new_angle) var/list/coordinates = trajectory.return_coordinates() trajectory.set_location(coordinates[1], coordinates[2], coordinates[3]) // Sets the trajectory to the center of the tile it bounced at + if(has_been_fired && hitscan && isloc(loc))// Handles hitscan projectiles + last_angle_set_hitscan_store = loc + var/datum/point_precise/point_cache = new (src) + point_cache.initialize_location(coordinates[1], coordinates[2], coordinates[3]) // Take the center of the hitscan collision tile + store_hitscan_collision(point_cache) + return TRUE /obj/item/projectile/experience_pressure_difference() return @@ -400,7 +462,11 @@ if(QDELETED(src)) // we coulda bumped something return if(trajectory && !trajectory_ignore_forcemove && isturf(target)) + if(hitscan) + finalize_hitscan_and_generate_tracers(FALSE) trajectory.initialize_location(target.x, target.y, target.z, 0, 0) + if(hitscan) + record_hitscan_start(RETURN_PRECISE_POINT(src)) /obj/item/projectile/proc/is_reflectable(desired_reflectability_level) if(reflectability == REFLECTABILITY_NEVER) //You'd trust coders not to try and override never reflectable things, but heaven help us I do not @@ -408,3 +474,67 @@ if(reflectability < desired_reflectability_level) return FALSE return TRUE + +/obj/item/projectile/proc/record_hitscan_start(datum/point_precise/point_cache) + if(point_cache) + beam_segments = list() + beam_index = point_cache + beam_segments[beam_index] = null //record start. + +/obj/item/projectile/proc/process_hitscan() + //Safety here is to make hitscan stop if something goes wrong. Why is it equal to range * 10, when range is the maximum amount of tiles it can go? No clue. + var/safety = range * 10 + record_hitscan_start(RETURN_POINT_VECTOR_INCREMENT(src, Angle, MUZZLE_EFFECT_PIXEL_INCREMENT, 1)) + while(loc && !QDELETED(src)) + if(paused) + stoplag(1) + continue + if(safety-- <= 0) + if(loc) + Bump(loc) + if(!QDELETED(src)) + qdel(src) + return //Kill! + pixel_move(1, TRUE) + +/obj/item/projectile/proc/finalize_hitscan_and_generate_tracers(impacting = TRUE) + if(trajectory && beam_index) + var/datum/point_precise/point_cache = trajectory.copy_to() + beam_segments[beam_index] = point_cache + generate_hitscan_tracers(null, hitscan_duration, impacting) + +/obj/item/projectile/proc/generate_hitscan_tracers(cleanup = TRUE, duration = 3, impacting = TRUE) + if(!length(beam_segments)) + return + if(tracer_type) + var/tempuid = UID() + for(var/datum/point_precise/p in beam_segments) + generate_tracer_between_points(p, beam_segments[p], tracer_type, color, duration, hitscan_light_range, hitscan_light_color_override, hitscan_light_intensity, tempuid) + if(muzzle_type && duration > 0) + var/datum/point_precise/p = beam_segments[1] + var/atom/movable/thing = new muzzle_type + p.move_atom_to_src(thing) + var/matrix/matrix = new + matrix.Turn(original_angle) + thing.transform = matrix + thing.color = color + thing.set_light(muzzle_flash_range, muzzle_flash_intensity, muzzle_flash_color_override? muzzle_flash_color_override : color) + QDEL_IN(thing, duration) + if(impacting && impact_type && duration > 0) + var/datum/point_precise/p = beam_segments[beam_segments[beam_segments.len]] + var/atom/movable/thing = new impact_type + p.move_atom_to_src(thing) + var/matrix/matrix = new + matrix.Turn(Angle) + thing.transform = matrix + thing.color = color + thing.set_light(impact_light_range, impact_light_intensity, impact_light_color_override? impact_light_color_override : color) + QDEL_IN(thing, duration) + if(cleanup) + cleanup_beam_segments() + +/obj/item/projectile/proc/cleanup_beam_segments() + QDEL_LIST_ASSOC(beam_segments) + +#undef MOVES_HITSCAN +#undef MUZZLE_EFFECT_PIXEL_INCREMENT diff --git a/code/modules/station_goals/bsa.dm b/code/modules/station_goals/bsa.dm index 041e9bbacfb..0b4bcd81114 100644 --- a/code/modules/station_goals/bsa.dm +++ b/code/modules/station_goals/bsa.dm @@ -214,7 +214,7 @@ /obj/machinery/bsa/full/proc/fire(mob/user, turf/bullseye, target) var/turf/point = get_front_turf() - for(var/turf/T in getline(get_step(point,dir),get_target_turf())) + for(var/turf/T in get_line(get_step(point,dir),get_target_turf())) T.ex_act(1) for(var/atom/A in T) A.ex_act(1) diff --git a/code/modules/station_goals/shield.dm b/code/modules/station_goals/shield.dm index 62b4ce1e37f..729fef7a1b6 100644 --- a/code/modules/station_goals/shield.dm +++ b/code/modules/station_goals/shield.dm @@ -154,7 +154,7 @@ var/kill_range = 14 /obj/machinery/satellite/meteor_shield/proc/space_los(meteor) - for(var/turf/T in getline(src,meteor)) + for(var/turf/T in get_line(src,meteor)) if(!isspaceturf(T)) return FALSE return TRUE diff --git a/icons/obj/projectiles_impact.dmi b/icons/obj/projectiles_impact.dmi new file mode 100644 index 0000000000000000000000000000000000000000..710507d4c85ac71ff2d1478441aea1348e117511 GIT binary patch literal 24976 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

iNAI^~Nm(s(hU2h)0^x`O=z=c= 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 MX%(qj3De;J0z0X-CIA2c literal 0 HcmV?d00001 diff --git a/icons/obj/projectiles_muzzle.dmi b/icons/obj/projectiles_muzzle.dmi new file mode 100644 index 0000000000000000000000000000000000000000..9bf78ba4a5397e721efb2535c457c2664178d927 GIT binary patch literal 26074 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 literal 0 HcmV?d00001 diff --git a/icons/obj/projectiles_tracer.dmi b/icons/obj/projectiles_tracer.dmi new file mode 100644 index 0000000000000000000000000000000000000000..ba3bd1f937767908b4bb3ae85a9e161bf2b33832 GIT binary patch literal 5522 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