From 744b6e3a616ff07728d7c37dfe50e07205b937d6 Mon Sep 17 00:00:00 2001 From: Luc <89928798+lewcc@users.noreply.github.com> Date: Tue, 17 Oct 2023 14:42:42 -0400 Subject: [PATCH] Refactors transit tubes (#22452) * Rework transit tube pods to not use timers * please work * yes * henri review * Fix mapping mishaps * fix icon mishaps * re-adds missing intercomm --- _maps/map_files/Delta/delta.dmm | 222 ++++------- _maps/map_files/MetaStation/MetaStation.dmm | 163 ++------- _maps/map_files/cyberiad/cyberiad.dmm | 26 +- .../subsystem/processing/transittube.dm | 6 + .../structures/transit_tubes/station.dm | 175 +++++++-- .../structures/transit_tubes/transit_tube.dm | 346 ++++++++---------- .../transit_tubes/transit_tube_pod.dm | 200 +++++++--- icons/obj/pipes/transit_tube.dmi | Bin 8818 -> 14133 bytes icons/obj/pipes/transit_tube_pod.dmi | Bin 4938 -> 8560 bytes icons/obj/pipes/transit_tube_station.dmi | Bin 5503 -> 42718 bytes paradise.dme | 1 + 11 files changed, 563 insertions(+), 576 deletions(-) create mode 100644 code/controllers/subsystem/processing/transittube.dm diff --git a/_maps/map_files/Delta/delta.dmm b/_maps/map_files/Delta/delta.dmm index 9b4782887a0..cc39089960d 100644 --- a/_maps/map_files/Delta/delta.dmm +++ b/_maps/map_files/Delta/delta.dmm @@ -33688,37 +33688,22 @@ "bPS" = ( /turf/simulated/wall, /area/space/nearstation) -"bPT" = ( -/obj/structure/lattice, -/obj/structure/window/reinforced, -/obj/structure/transit_tube{ - icon_state = "D-SE" - }, -/turf/space, -/area/space/nearstation) "bPU" = ( /obj/structure/lattice, -/obj/structure/transit_tube{ - icon_state = "E-SW" +/obj/structure/transit_tube/curved/flipped{ + dir = 4 }, /turf/space, /area/space/nearstation) "bPV" = ( /obj/structure/lattice, -/obj/structure/transit_tube, +/obj/structure/transit_tube/horizontal, /turf/space, /area/space/nearstation) "bPW" = ( /obj/structure/lattice, -/obj/structure/transit_tube{ - icon_state = "W-SE" - }, -/turf/space, -/area/space/nearstation) -"bPX" = ( -/obj/structure/lattice, -/obj/structure/transit_tube{ - icon_state = "D-SW" +/obj/structure/transit_tube/curved{ + dir = 8 }, /turf/space, /area/space/nearstation) @@ -34397,37 +34382,12 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/structure/transit_tube{ - icon_state = "S-NE" - }, +/obj/structure/transit_tube/curved, /turf/simulated/floor/plasteel/dark, /area/station/aisat) -"bRO" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/transit_tube{ - icon_state = "D-NW" - }, -/turf/space, -/area/space/nearstation) -"bRP" = ( -/obj/structure/transit_tube{ - icon_state = "D-NE" - }, -/turf/space, -/area/space/nearstation) "bRQ" = ( /obj/structure/lattice, -/obj/structure/transit_tube{ - icon_state = "NW-SE" - }, -/turf/space, -/area/space/nearstation) -"bRR" = ( -/obj/structure/transit_tube{ - icon_state = "D-SW" - }, +/obj/structure/transit_tube/diagonal/topleft, /turf/space, /area/space/nearstation) "bRS" = ( @@ -35347,16 +35307,16 @@ /turf/simulated/floor/plasteel/dark, /area/station/aisat) "bTQ" = ( -/obj/item/radio/beacon, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/item/radio/beacon, /turf/simulated/floor/plasteel/dark, /area/station/aisat) "bTR" = ( @@ -36330,58 +36290,31 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/structure/transit_tube{ - icon_state = "N-SE" +/obj/structure/transit_tube/curved/flipped{ + dir = 1 }, /turf/simulated/floor/plasteel/dark, /area/station/aisat) -"bVZ" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/transit_tube{ - icon_state = "D-SW" - }, -/turf/space, -/area/space/nearstation) "bWa" = ( -/obj/structure/transit_tube{ - icon_state = "D-SE" - }, /turf/space, /area/space/nearstation) "bWb" = ( /obj/structure/lattice, -/obj/structure/transit_tube{ - icon_state = "NE-SW" - }, -/turf/space, -/area/space/nearstation) -"bWc" = ( -/obj/structure/transit_tube{ - icon_state = "D-NW" - }, -/turf/space, -/area/space/nearstation) -"bWd" = ( -/obj/structure/lattice, -/obj/structure/transit_tube{ - icon_state = "D-NE" - }, +/obj/structure/transit_tube/diagonal, /turf/space, /area/space/nearstation) "bWf" = ( -/obj/structure/transit_tube, /obj/structure/window/reinforced{ dir = 8 }, +/obj/structure/transit_tube/horizontal, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" }, /area/station/engineering/break_room) "bWg" = ( -/obj/structure/transit_tube, +/obj/structure/transit_tube/horizontal, /turf/simulated/floor/plasteel/dark, /area/station/engineering/break_room) "bWh" = ( @@ -36401,15 +36334,14 @@ }, /area/station/security/warden) "bWi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/transit_tube/cap{ + dir = 8 + }, /obj/item/radio/intercom{ name = "south bump"; pixel_y = -28 }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/transit_tube{ - dir = 8; - icon_state = "Block" - }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -37008,35 +36940,17 @@ icon_state = "vault" }, /area/station/turret_protected/aisat) -"bXQ" = ( -/obj/structure/lattice, -/obj/structure/window/reinforced{ - dir = 1; - layer = 2.9 - }, -/obj/structure/transit_tube{ - icon_state = "D-NE" - }, -/turf/space, -/area/space/nearstation) "bXR" = ( /obj/structure/lattice, -/obj/structure/transit_tube{ - icon_state = "E-NW" +/obj/structure/transit_tube/curved{ + dir = 4 }, /turf/space, /area/space/nearstation) "bXS" = ( /obj/structure/lattice, -/obj/structure/transit_tube{ - icon_state = "W-NE" - }, -/turf/space, -/area/space/nearstation) -"bXT" = ( -/obj/structure/lattice, -/obj/structure/transit_tube{ - icon_state = "D-NW" +/obj/structure/transit_tube/curved/flipped{ + dir = 8 }, /turf/space, /area/space/nearstation) @@ -40312,15 +40226,15 @@ }, /area/station/hallway/primary/port) "cgD" = ( -/obj/structure/transit_tube/station/reverse{ - dir = 1 - }, /obj/structure/transit_tube_pod{ dir = 8 }, /obj/machinery/ai_status_display{ pixel_y = -32 }, +/obj/structure/transit_tube/station{ + dir = 1 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -41236,22 +41150,6 @@ icon_state = "neutralfull" }, /area/station/public/locker) -"cjl" = ( -/obj/structure/transit_tube{ - icon_state = "D-NE" - }, -/obj/structure/transit_tube{ - icon_state = "D-SE" - }, -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/space, -/area/space/nearstation) "cjm" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance/two, @@ -42989,9 +42887,6 @@ /turf/simulated/floor/plating, /area/station/command/teleporter) "cnH" = ( -/obj/structure/transit_tube{ - icon_state = "E-SW-NW" - }, /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -42999,6 +42894,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/transit_tube/junction{ + dir = 4 + }, /turf/space, /area/space/nearstation) "cnJ" = ( @@ -43171,9 +43069,6 @@ /turf/simulated/floor/plasteel, /area/station/engineering/control) "coi" = ( -/obj/structure/transit_tube{ - icon_state = "E-W-Pass" - }, /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -43181,6 +43076,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/transit_tube/crossing{ + dir = 8 + }, /turf/space, /area/space/nearstation) "coj" = ( @@ -44927,7 +44825,6 @@ /turf/simulated/floor/plating, /area/station/engineering/control) "csr" = ( -/obj/structure/transit_tube, /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -44935,6 +44832,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/transit_tube/horizontal, /turf/space, /area/space/nearstation) "css" = ( @@ -44992,9 +44890,6 @@ /turf/simulated/floor/plating, /area/station/engineering/equipmentstorage) "csy" = ( -/obj/structure/transit_tube{ - icon_state = "W-SE" - }, /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -45002,6 +44897,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/transit_tube/curved{ + dir = 8 + }, /turf/space, /area/space/nearstation) "csz" = ( @@ -45467,9 +45365,6 @@ /turf/simulated/floor/plasteel/dark, /area/station/service/library) "ctI" = ( -/obj/structure/transit_tube{ - icon_state = "D-SW" - }, /obj/structure/window/reinforced{ dir = 4 }, @@ -45483,13 +45378,13 @@ /turf/space, /area/space/nearstation) "ctJ" = ( -/obj/structure/transit_tube{ - icon_state = "E-NW" +/obj/structure/lattice/catwalk, +/obj/structure/transit_tube/curved{ + dir = 4 }, /obj/structure/window/reinforced{ dir = 4 }, -/obj/structure/lattice/catwalk, /turf/space, /area/space/nearstation) "ctK" = ( @@ -86554,6 +86449,17 @@ /obj/structure/lattice, /turf/space, /area/space/nearstation) +"orM" = ( +/obj/structure/transit_tube/horizontal, +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/space, +/area/space/nearstation) "orY" = ( /obj/structure/barricade/wooden, /obj/machinery/door/airlock/command/glass{ @@ -112044,11 +111950,11 @@ aaa aaa bUJ aaa -bPT +bku bRN bTU bVY -bXQ +brr aaa aaa aaa @@ -112302,9 +112208,9 @@ aaa bUJ aaa bPU -bRO +bms bZw -bVZ +bms bXR aaa aaa @@ -112816,7 +112722,7 @@ aaa bUJ aaa bPW -bRP +bWa chw bWa bXS @@ -113072,11 +112978,11 @@ aaa aaa bUJ aaa -bPX +abj bRQ -cjl +chw bWb -bXT +abj aaa aaa aaa @@ -113330,9 +113236,9 @@ aaa bUJ aaa abj -bRR +bWa cnH -bWc +bWa abj aaa aaa @@ -119242,7 +119148,7 @@ dVS abj abj abj -csr +orM abj bXU bZk @@ -119500,7 +119406,7 @@ byl byl abj csy -bWd +abj bXU bZl cbb diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 72783ce8cd9..fed42864121 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -4737,15 +4737,6 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) -"azv" = ( -/obj/structure/transit_tube{ - icon_state = "D-NW" - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/space, -/area/space/nearstation) "azy" = ( /obj/structure/reagent_dispensers/fueltank, /turf/simulated/floor/plating, @@ -5056,15 +5047,13 @@ }, /area/station/legal/courtroom) "aAO" = ( -/obj/structure/transit_tube{ - icon_state = "S-NW" - }, /obj/structure/window/reinforced{ dir = 8 }, /obj/structure/window/reinforced{ dir = 1 }, +/obj/structure/transit_tube/curved/flipped, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkbluecorners" @@ -18284,8 +18273,8 @@ /area/station/maintenance/fpmaint) "bmj" = ( /obj/structure/lattice/catwalk, -/obj/structure/transit_tube{ - icon_state = "E-W-Pass" +/obj/structure/transit_tube/crossing{ + dir = 8 }, /turf/space, /area/space/nearstation) @@ -20138,12 +20127,6 @@ icon_state = "dark" }, /area/station/turret_protected/ai) -"bqY" = ( -/obj/structure/transit_tube{ - icon_state = "D-SE" - }, -/turf/space, -/area/space/nearstation) "bqZ" = ( /obj/machinery/ai_slipper, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -20180,13 +20163,6 @@ icon_state = "cult" }, /area/station/legal/lawoffice) -"brd" = ( -/obj/structure/transit_tube{ - icon_state = "D-SW" - }, -/obj/structure/window/reinforced, -/turf/space, -/area/space/nearstation) "bre" = ( /turf/simulated/wall/r_wall, /area/space/nearstation) @@ -20783,7 +20759,7 @@ }, /area/station/engineering/break_room) "bsJ" = ( -/obj/structure/transit_tube, +/obj/structure/transit_tube/horizontal, /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 8 @@ -20793,22 +20769,16 @@ "bsK" = ( /turf/simulated/wall/mineral/titanium, /area/shuttle/pod_4) -"bsL" = ( -/obj/structure/transit_tube{ - icon_state = "D-SW" - }, -/turf/space, -/area/space/nearstation) "bsP" = ( /obj/structure/lattice/catwalk, -/obj/structure/transit_tube{ - icon_state = "W-NE-SE" +/obj/structure/transit_tube/junction{ + dir = 8 }, /turf/space, /area/space/nearstation) "bsS" = ( -/obj/structure/transit_tube{ - icon_state = "W-SE" +/obj/structure/transit_tube/curved{ + dir = 8 }, /turf/space, /area/space/nearstation) @@ -21273,9 +21243,7 @@ }, /area/station/command/bridge) "bud" = ( -/obj/structure/transit_tube{ - icon_state = "NE-SW" - }, +/obj/structure/transit_tube/diagonal, /turf/space, /area/space/nearstation) "bue" = ( @@ -21515,12 +21483,6 @@ }, /turf/simulated/floor/plating, /area/station/public/storage/emergency) -"buM" = ( -/obj/structure/transit_tube{ - icon_state = "D-NW" - }, -/turf/space, -/area/space/nearstation) "buN" = ( /obj/structure/transit_tube_pod, /obj/structure/window/reinforced{ @@ -21534,15 +21496,6 @@ icon_state = "vault" }, /area/station/aisat) -"buO" = ( -/obj/structure/transit_tube{ - icon_state = "D-NE" - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/space, -/area/space/nearstation) "buP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -21606,7 +21559,7 @@ }, /area/station/hallway/primary/starboard) "buW" = ( -/obj/structure/transit_tube, +/obj/structure/transit_tube/horizontal, /obj/structure/lattice/catwalk, /turf/space, /area/space/nearstation) @@ -21821,9 +21774,8 @@ }, /area/station/engineering/controlroom) "bvv" = ( -/obj/structure/transit_tube{ - dir = 4; - icon_state = "Block" +/obj/structure/transit_tube/cap{ + dir = 4 }, /obj/machinery/status_display{ layer = 4; @@ -22552,16 +22504,6 @@ icon_state = "darkbluecorners" }, /area/station/aisat) -"bwX" = ( -/obj/structure/transit_tube{ - icon_state = "D-SW" - }, -/obj/structure/transit_tube{ - icon_state = "D-NW" - }, -/obj/structure/lattice/catwalk, -/turf/space, -/area/space/nearstation) "bxb" = ( /obj/structure/table/wood, /obj/machinery/light/small{ @@ -22618,12 +22560,6 @@ }, /turf/simulated/floor/bluegrid/telecomms, /area/station/science/xenobiology) -"bxk" = ( -/obj/structure/transit_tube{ - icon_state = "D-NE" - }, -/turf/space, -/area/space/nearstation) "bxl" = ( /obj/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -23406,8 +23342,8 @@ }, /area/station/engineering/control) "bzc" = ( -/obj/structure/transit_tube{ - icon_state = "E-SW" +/obj/structure/transit_tube/curved/flipped{ + dir = 4 }, /turf/space, /area/space/nearstation) @@ -23562,19 +23498,17 @@ /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry) "bzt" = ( -/obj/structure/transit_tube{ - icon_state = "NW-SE" - }, +/obj/structure/transit_tube/diagonal/topleft, /turf/space, /area/space/nearstation) "bzu" = ( -/obj/structure/transit_tube{ - icon_state = "N-SW" - }, /obj/structure/window/reinforced{ dir = 8 }, /obj/structure/window/reinforced, +/obj/structure/transit_tube/curved{ + dir = 1 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkbluecorners" @@ -24088,16 +24022,7 @@ /turf/simulated/floor/plasteel, /area/station/supply/storage) "bBa" = ( -/obj/structure/transit_tube{ - icon_state = "E-NW" - }, -/turf/space, -/area/space/nearstation) -"bBb" = ( -/obj/structure/transit_tube{ - icon_state = "D-SE" - }, -/obj/structure/window/reinforced{ +/obj/structure/transit_tube/curved{ dir = 4 }, /turf/space, @@ -25539,8 +25464,8 @@ }, /area/station/telecomms/computer) "bFk" = ( -/obj/structure/transit_tube{ - icon_state = "E-W-Pass" +/obj/structure/transit_tube/crossing{ + dir = 8 }, /obj/structure/lattice, /turf/space, @@ -25952,8 +25877,8 @@ }, /area/station/aisat) "bGN" = ( -/obj/structure/transit_tube{ - icon_state = "W-NE" +/obj/structure/transit_tube/curved/flipped{ + dir = 8 }, /turf/space, /area/space/nearstation) @@ -29261,7 +29186,7 @@ /turf/space, /area/space/nearstation) "bRq" = ( -/obj/structure/transit_tube, +/obj/structure/transit_tube/horizontal, /obj/structure/window/reinforced{ dir = 4 }, @@ -81187,13 +81112,6 @@ icon_state = "whitepurple" }, /area/station/science/research) -"sil" = ( -/obj/structure/transit_tube{ - icon_state = "D-NE" - }, -/obj/structure/lattice, -/turf/space, -/area/space/nearstation) "sjx" = ( /obj/structure/chair{ dir = 1 @@ -87248,7 +87166,7 @@ /area/station/security/prison/cell_block/A) "vbU" = ( /obj/structure/lattice/catwalk, -/obj/structure/transit_tube, +/obj/structure/transit_tube/horizontal, /turf/space, /area/space/nearstation) "vbV" = ( @@ -91247,13 +91165,6 @@ icon_state = "dark" }, /area/station/security/interrogation) -"xhd" = ( -/obj/structure/transit_tube{ - icon_state = "D-SE" - }, -/obj/structure/lattice, -/turf/space, -/area/space/nearstation) "xhh" = ( /obj/effect/spawner/window/reinforced/polarized/grilled{ id = "CMO" @@ -93360,7 +93271,7 @@ }, /area/station/science/toxins/launch) "yeg" = ( -/obj/structure/transit_tube, +/obj/structure/transit_tube/horizontal, /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/visible/yellow, /turf/space, @@ -143942,9 +143853,9 @@ abq abq abq abq -xhd +abq bsP -sil +abq abq abq aef @@ -144198,11 +144109,11 @@ aaa aaa aaa aaa -bqY +bwM bud -bwX +aef bzt -bxk +bwM aaa aef aaa @@ -144456,9 +144367,9 @@ aaa aaa aaa bzc -buM +bwM aef -bsL +bwM bBa aaa aef @@ -144970,9 +144881,9 @@ efR efR aXL bsS -buO +aXH bDg -bBb +aXH bGN aaa aaa @@ -145226,11 +145137,11 @@ aUU blE dkq aXL -brd +aUU aAO buN bzu -azv +aQF aaa aaa aaa diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index bc1fa2a43d1..02968dfbfd1 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -52663,9 +52663,8 @@ name = "north bump"; pixel_y = 24 }, -/obj/structure/transit_tube{ - dir = 4; - icon_state = "Block" +/obj/structure/transit_tube/cap{ + dir = 4 }, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -52692,7 +52691,7 @@ }, /obj/structure/transit_tube/station, /obj/structure/transit_tube_pod{ - dir = 8 + dir = 4 }, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -53091,8 +53090,8 @@ /turf/simulated/floor/wood, /area/station/public/mrchangs) "dhr" = ( -/obj/structure/transit_tube, /obj/effect/spawner/window/reinforced/grilled, +/obj/structure/transit_tube/horizontal, /turf/simulated/floor/plating, /area/station/maintenance/storage) "dhv" = ( @@ -54745,24 +54744,22 @@ }, /area/station/aisat/hall) "dmW" = ( -/obj/structure/transit_tube, +/obj/structure/transit_tube/horizontal, /turf/space, /area/space/nearstation) "dmX" = ( -/obj/structure/transit_tube{ - icon_state = "E-W-Pass" - }, /obj/structure/lattice, +/obj/structure/transit_tube/crossing/horizontal, /turf/space, /area/space/nearstation) "dna" = ( -/obj/structure/transit_tube, +/obj/structure/transit_tube/horizontal, /turf/simulated/floor/plating, /area/station/turret_protected/aisat/interior) "dnb" = ( /obj/structure/transit_tube/station, /obj/structure/transit_tube_pod{ - dir = 4 + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/visible/yellow, /turf/simulated/floor/plating, @@ -54857,9 +54854,8 @@ }, /area/station/turret_protected/ai) "dno" = ( -/obj/structure/transit_tube{ - dir = 8; - icon_state = "Block" +/obj/structure/transit_tube/cap{ + dir = 8 }, /turf/simulated/floor/plating, /area/station/turret_protected/aisat/interior) @@ -73588,8 +73584,8 @@ /turf/simulated/floor/plating, /area/station/maintenance/apmaint2) "mHY" = ( -/obj/structure/transit_tube, /obj/effect/spawner/window/reinforced/grilled, +/obj/structure/transit_tube/horizontal, /turf/simulated/floor/plating, /area/station/turret_protected/aisat/interior) "mIu" = ( diff --git a/code/controllers/subsystem/processing/transittube.dm b/code/controllers/subsystem/processing/transittube.dm new file mode 100644 index 00000000000..2d77bcf8c42 --- /dev/null +++ b/code/controllers/subsystem/processing/transittube.dm @@ -0,0 +1,6 @@ +PROCESSING_SUBSYSTEM_DEF(transit_tube) + name = "Transit Tubes" + wait = 1 + flags = SS_NO_INIT|SS_BACKGROUND + offline_implications = "Transit tubes will no longer function. Admin intervention recommended, but shuttle call not required." + cpu_display = SS_CPUDISPLAY_HIGH diff --git a/code/game/objects/structures/transit_tubes/station.dm b/code/game/objects/structures/transit_tubes/station.dm index 889a22eae95..2552b7c896d 100644 --- a/code/game/objects/structures/transit_tubes/station.dm +++ b/code/game/objects/structures/transit_tubes/station.dm @@ -8,8 +8,10 @@ // one. /obj/structure/transit_tube/station name = "station tube station" + desc = "The lynchpin of the transit system." icon = 'icons/obj/pipes/transit_tube_station.dmi' - icon_state = "closed" + icon_state = "closed_station0" + base_icon_state = "station0" exit_delay = 1 enter_delay = 2 var/pod_moving = FALSE @@ -18,6 +20,8 @@ var/hatch_state = TRANSIT_TUBE_CLOSED var/list/disallowed_mobs = list(/mob/living/silicon/ai) + /// Direction by which you can board the tube + var/boarding_dir /obj/structure/transit_tube/station/Initialize(mapload) . = ..() @@ -27,24 +31,32 @@ STOP_PROCESSING(SSobj, src) return ..() -// Stations which will send the tube in the opposite direction after their stop. -/obj/structure/transit_tube/station/reverse - reverse_launch = TRUE +/obj/structure/transit_tube/station/init_tube_dirs() + // Tube station directions are simply 90 to either side of + // the exit. + switch(dir) + if(NORTH) + tube_dirs = list(EAST, WEST) + if(SOUTH) + tube_dirs = list(EAST, WEST) + if(EAST) + tube_dirs = list(NORTH, SOUTH) + if(WEST) + tube_dirs = list(NORTH, SOUTH) + boarding_dir = reverse_direction(dir) /obj/structure/transit_tube/station/should_stop_pod(pod, from_dir) return TRUE /obj/structure/transit_tube/station/Bumped(mob/living/L) - if(!pod_moving && hatch_state == TRANSIT_TUBE_OPEN && isliving(L) && !is_type_in_list(L, disallowed_mobs)) - var/failed = FALSE + if(!pod_moving && L.dir == boarding_dir && hatch_state == TRANSIT_TUBE_OPEN && isliving(L) && !is_type_in_list(L, disallowed_mobs)) for(var/obj/structure/transit_tube_pod/pod in loc) - if(pod.contents.len) - failed = TRUE - else if(!pod.moving && (pod.dir in directions())) + if(length(pod.contents)) + to_chat(L, "The pod is already occupied.") + return + if(!pod.moving && ((pod.dir in directions()) || (reverse_launch && (turn(pod.dir, 180) in directions())))) pod.move_into(L) return - if(failed) - to_chat(L, "The pod is already occupied.") @@ -88,31 +100,36 @@ /obj/structure/transit_tube/station/proc/open_hatch() if(hatch_state == TRANSIT_TUBE_CLOSED) - icon_state = "opening" + icon_state = "opening_[base_icon_state]" hatch_state = TRANSIT_TUBE_OPENING - addtimer(CALLBACK(src, PROC_REF(open_hatch_callback)), OPEN_DURATION) - -/obj/structure/transit_tube/station/proc/open_hatch_callback() - if(hatch_state == TRANSIT_TUBE_OPENING) - icon_state = "open" - hatch_state = TRANSIT_TUBE_OPEN - - + addtimer(CALLBACK(src, PROC_REF(finish_animation)), OPEN_DURATION) /obj/structure/transit_tube/station/proc/close_hatch() if(hatch_state == TRANSIT_TUBE_OPEN) - icon_state = "closing" + icon_state = "closing_[base_icon_state]" hatch_state = TRANSIT_TUBE_CLOSING - addtimer(CALLBACK(src, PROC_REF(close_hatch_calllback)), CLOSE_DURATION) + addtimer(CALLBACK(src, PROC_REF(finish_animation)), CLOSE_DURATION) -/obj/structure/transit_tube/station/proc/close_hatch_calllback() - if(hatch_state == TRANSIT_TUBE_CLOSING) - icon_state = "closed" - hatch_state = TRANSIT_TUBE_CLOSED +/obj/structure/transit_tube/station/proc/finish_animation() + switch(hatch_state) + if(TRANSIT_TUBE_OPENING) + icon_state = "open_[base_icon_state]" + hatch_state = TRANSIT_TUBE_OPEN + for(var/obj/structure/transit_tube_pod/pod in loc) + for(var/thing in pod) + if(ismob(thing)) + var/mob/mob_content = thing + if(mob_content.client && mob_content.stat < UNCONSCIOUS) + continue // Let the mobs with clients decide what they want to do themselves. + var/atom/movable/movable_content = thing + movable_content.forceMove(loc) //Everything else is moved out of. + if(TRANSIT_TUBE_CLOSING) + icon_state = "closed_[base_icon_state]" + hatch_state = TRANSIT_TUBE_CLOSED /obj/structure/transit_tube/station/proc/launch_pod() for(var/obj/structure/transit_tube_pod/pod in loc) - if(!pod.moving && (pod.dir in directions())) + if(!pod.moving && ((pod.dir in directions()) || (reverse_launch && (turn(pod.dir, 180) in directions())))) addtimer(CALLBACK(src, PROC_REF(launch_pod_callback), pod), 5) return @@ -131,7 +148,7 @@ if(!nexttube) pod.dir = turn(pod.dir, 180) - if(hatch_state == TRANSIT_TUBE_CLOSED && pod) + if(hatch_state == TRANSIT_TUBE_CLOSED && pod && pod.loc == loc) pod.follow_tube() pod_moving = FALSE @@ -142,6 +159,7 @@ /obj/structure/transit_tube/station/pod_stopped(obj/structure/transit_tube_pod/pod, from_dir) pod_moving = TRUE + pod.stop_following() addtimer(CALLBACK(src, PROC_REF(pod_stopped_callback), pod), 5) /obj/structure/transit_tube/station/proc/pod_stopped_callback(obj/structure/transit_tube_pod/pod) @@ -152,10 +170,103 @@ pod_moving = FALSE pod.mix_air() -// Tube station directions are simply 90 to either side of -// the exit. -/obj/structure/transit_tube/station/init_dirs() - tube_dirs = list(turn(dir, 90), turn(dir, -90)) +/obj/structure/transit_tube/station/flipped + icon_state = "closed_station1" + base_icon_state = "station1" + +/obj/structure/transit_tube/station/flipped/init_tube_dirs() + ..() + boarding_dir = dir + +// Stations which will send the tube in the opposite direction after their stop. +/obj/structure/transit_tube/station/reverse + icon_state = "closed_terminus0" + base_icon_state = "terminus0" + reverse_launch = TRUE + +/obj/structure/transit_tube/station/reverse/init_tube_dirs() + tube_dirs = list(turn(dir, -90)) + boarding_dir = reverse_direction(dir) + +/obj/structure/transit_tube/station/reverse/flipped + icon_state = "closed_terminus1" + base_icon_state = "terminus1" + +/obj/structure/transit_tube/station/reverse/flipped/init_tube_dirs() + ..() + boarding_dir = dir + +//special dispenser station, it creates a pod for you to enter when you bump into it. + +/obj/structure/transit_tube/station/dispenser + name = "station tube pod dispenser" + icon_state = "open_dispenser0" + desc = "The lynchpin of a GOOD transit system." + enter_delay = 1 + base_icon_state = "dispenser0" + hatch_state = TRANSIT_TUBE_OPEN + +/obj/structure/transit_tube/station/dispenser/examine(mob/user) + . = ..() + . += "This station will create a pod for you to ride, no need to wait for one." + . += "Any pods arriving at this station will be reclaimed." + +/obj/structure/transit_tube/station/dispenser/close_hatch() + . = ..() + return + +/obj/structure/transit_tube/station/dispenser/launch_pod() + for(var/obj/structure/transit_tube_pod/pod in loc) + if(!pod.moving) + pod_moving = TRUE + pod.follow_tube() + pod_moving = FALSE + return TRUE + return FALSE + +/obj/structure/transit_tube/station/dispenser/Bumped(atom/movable/AM) + if(!(istype(AM) && AM.dir == boarding_dir) || AM.anchored) + return + var/obj/structure/transit_tube_pod/dispensed/pod = new(loc) + AM.visible_message("[pod] forms around [AM].", "[pod] materializes around you.") + playsound(src, 'sound/weapons/emitter2.ogg', 50, TRUE) + pod.dir = turn(dir, -90) + pod.move_into(AM) + launch_pod() + +/obj/structure/transit_tube/station/dispenser/pod_stopped(obj/structure/transit_tube_pod/pod) + playsound(src, 'sound/machines/ding.ogg', 50, TRUE) + qdel(pod) + + + +/obj/structure/transit_tube/station/dispenser/flipped + icon_state = "open_dispenser1" + base_icon_state = "dispenser1" + +/obj/structure/transit_tube/station/dispenser/flipped/init_tube_dirs() + ..() + boarding_dir = dir + + +/obj/structure/transit_tube/station/dispenser/reverse + reverse_launch = TRUE + icon_state = "open_terminusdispenser0" + base_icon_state = "terminusdispenser0" + +/obj/structure/transit_tube/station/dispenser/reverse/init_tube_dirs() + tube_dirs = list(turn(dir, 90)) + boarding_dir = reverse_direction(dir) + +/obj/structure/transit_tube/station/dispenser/reverse/flipped + icon_state = "open_terminusdispenser1" + base_icon_state = "terminusdispenser1" + +/obj/structure/transit_tube/station/dispenser/reverse/flipped/init_tube_dirs() + ..() + boarding_dir = dir + + #undef CLOSE_DURATION #undef OPEN_DURATION diff --git a/code/game/objects/structures/transit_tubes/transit_tube.dm b/code/game/objects/structures/transit_tubes/transit_tube.dm index 7b09c3d567a..7173194cc6f 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube.dm @@ -4,8 +4,10 @@ // Mappers: you can use "Generate Instances from Icon-states" // to get the different pieces. /obj/structure/transit_tube + name = "transit tube" + desc = "A pneumatic tube that brings you from here to there." icon = 'icons/obj/pipes/transit_tube.dmi' - icon_state = "E-W" + icon_state = "straight" density = TRUE layer = 3.1 anchored = TRUE @@ -13,29 +15,39 @@ var/exit_delay = 1 var/enter_delay = 0 - // alldirs in global.dm is the same list of directions, but since - // the specific order matters to get a usable icon_state, it is - // copied here so that, in the unlikely case that alldirs is changed, - // this continues to work. - var/global/list/tube_dir_list = list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST) +/obj/structure/transit_tube/Initialize(mapload, new_direction) + . = ..() + if(new_direction) + setDir(new_direction) + // set up our appearance after the initialize in case someone's setting our direction afterwards + // (especially for things like admin spawning) + addtimer(CALLBACK(src, PROC_REF(setup_appearance)), 1) +/obj/structure/transit_tube/proc/setup_appearance() + init_tube_dirs() + update_appearance() + +/obj/structure/transit_tube/Destroy() + for(var/obj/structure/transit_tube_pod/P in loc) + P.empty_pod() + return ..() /obj/structure/transit_tube/CanPass(atom/movable/mover, turf/target) if(istype(mover) && mover.checkpass(PASSGLASS)) - return 1 + return TRUE return !density // When destroyed by explosions, properly handle contents. /obj/structure/transit_tube/ex_act(severity) switch(severity) - if(1.0) + if(EXPLODE_DEVASTATE) for(var/atom/movable/AM in contents) AM.loc = loc AM.ex_act(severity++) qdel(src) return - if(2.0) + if(EXPLODE_HEAVY) if(prob(50)) for(var/atom/movable/AM in contents) AM.loc = loc @@ -43,20 +55,12 @@ qdel(src) return - if(3.0) + if(EXPLODE_LIGHT) return - -/obj/structure/transit_tube/New(loc) - ..(loc) - - if(tube_dirs == null) - init_dirs() - - // Called to check if a pod should stop upon entering this tube. /obj/structure/transit_tube/proc/should_stop_pod(pod, from_dir) - return 0 + return FALSE // Called when a pod stops in this tube section. /obj/structure/transit_tube/proc/pod_stopped(pod, from_dir) @@ -76,18 +80,18 @@ for(var/direction in directions()) if(direction == from_dir) - return 1 + return TRUE - return 0 + return FALSE /obj/structure/transit_tube/proc/has_exit(in_dir) for(var/direction in directions()) if(direction == in_dir) - return 1 + return TRUE - return 0 + return FALSE @@ -122,191 +126,157 @@ /obj/structure/transit_tube/proc/enter_delay(pod, to_dir) return enter_delay +/obj/structure/transit_tube/proc/init_tube_dirs() + switch(dir) + if(NORTH, SOUTH) + tube_dirs = list(NORTH, SOUTH) + if(EAST, WEST) + tube_dirs = list(EAST, WEST) -// Parse the icon_state into a list of directions. -// This means that mappers can use Dream Maker's built in -// "Generate Instances from Icon-states" option to get all -// variations. Additionally, as a separate proc, sub-types -// can handle it more intelligently. -/obj/structure/transit_tube/proc/init_dirs() - if(icon_state == "auto") - // Additional delay, for map loading. - spawn(1) - init_dirs_automatic() +/obj/structure/transit_tube/update_overlays() + . = ..() + for(var/direction in directions()) + if(!IS_DIR_DIAGONAL(direction)) + . += create_tube_overlay(direction) + continue + if(!(direction & NORTH)) + continue + . += create_tube_overlay(direction ^ (NORTH|SOUTH), NORTH) + if(direction & EAST) + . += create_tube_overlay(direction ^ (EAST|WEST), EAST) + else + . += create_tube_overlay(direction ^ (EAST|WEST), WEST) + + +/obj/structure/transit_tube/proc/create_tube_overlay(direction, shift_dir) + // We use image() because a mutable appearance will have its dir mirror the parent which sort of fucks up what we're doing here + var/image/tube_overlay = image(icon, dir = direction) + if(shift_dir) + tube_overlay.icon_state = "decorative_diag" + switch(shift_dir) + if(NORTH) + tube_overlay.pixel_y = 32 + if(SOUTH) + tube_overlay.pixel_y = -32 + if(EAST) + tube_overlay.pixel_x = 32 + if(WEST) + tube_overlay.pixel_x = -32 else - tube_dirs = parse_dirs(icon_state) + tube_overlay.icon_state = "decorative" - if(copytext(icon_state, 1, 3) == "D-" || findtextEx(icon_state, "Pass")) - density = FALSE + tube_overlay.overlays += emissive_blocker(icon, tube_overlay.icon_state, src) + return tube_overlay + +//Some of these are mostly for mapping use +/obj/structure/transit_tube/horizontal + dir = WEST +/obj/structure/transit_tube/diagonal + icon_state = "diagonal" + +/obj/structure/transit_tube/diagonal/init_tube_dirs() + switch(dir) + if(NORTH) + tube_dirs = list(NORTHEAST, SOUTHWEST) + if(SOUTH) + tube_dirs = list(NORTHEAST, SOUTHWEST) + if(EAST) + tube_dirs = list(NORTHWEST, SOUTHEAST) + if(WEST) + tube_dirs = list(NORTHWEST, SOUTHEAST) + +//mostly for mapping use +/obj/structure/transit_tube/diagonal/topleft + dir = WEST + +/obj/structure/transit_tube/diagonal/crossing + density = FALSE + icon_state = "diagonal_crossing" + +//mostly for mapping use +/obj/structure/transit_tube/diagonal/crossing/topleft + dir = WEST -// Initialize dirs by searching for tubes that do/might connect -// on nearby turfs. Create corner pieces if nessecary. -// Pick two directions, preferring tubes that already connect -// to loc, or other auto tubes if there aren't enough connections. -/obj/structure/transit_tube/proc/init_dirs_automatic() - var/list/connected = list() - var/list/connected_auto = list() +/obj/structure/transit_tube/curved + icon_state = "curved0" - for(var/direction in tube_dir_list) - var/location = get_step(loc, direction) - for(var/obj/structure/transit_tube/tube in location) - if(tube.directions() == null && tube.icon_state == "auto") - connected_auto += direction - break +/obj/structure/transit_tube/curved/init_tube_dirs() + switch(dir) + if(NORTH) + tube_dirs = list(NORTH, SOUTHWEST) + if(SOUTH) + tube_dirs = list(SOUTH, NORTHEAST) + if(EAST) + tube_dirs = list(EAST, NORTHWEST) + if(WEST) + tube_dirs = list(SOUTHEAST, WEST) - else if(turn(direction, 180) in tube.directions()) - connected += direction - break +/obj/structure/transit_tube/curved/flipped + icon_state = "curved1" - connected += connected_auto - - tube_dirs = select_automatic_dirs(connected) - - if(length(tube_dirs) == 2 && tube_dir_list.Find(tube_dirs[1]) > tube_dir_list.Find(tube_dirs[2])) - tube_dirs.Swap(1, 2) - - generate_automatic_corners(tube_dirs) - select_automatic_icon_state(tube_dirs) +/obj/structure/transit_tube/curved/flipped/init_tube_dirs() + switch(dir) + if(NORTH) + tube_dirs = list(NORTH, SOUTHEAST) + if(SOUTH) + tube_dirs = list(SOUTH, NORTHWEST) + if(EAST) + tube_dirs = list(EAST, SOUTHWEST) + if(WEST) + tube_dirs = list(NORTHEAST, WEST) +/obj/structure/transit_tube/junction + icon_state = "junction0" -// Given a list of directions, look a pair that forms a 180 or -// 135 degree angle, and return a list containing the pair. -// If none exist, return list(connected[1], turn(connected[1], 180) -/obj/structure/transit_tube/proc/select_automatic_dirs(connected) - if(length(connected) < 1) - return list() +/obj/structure/transit_tube/junction/init_tube_dirs() + switch(dir) + if(NORTH) + tube_dirs = list(NORTH, SOUTHEAST, SOUTHWEST)//ending with the prefered direction + if(SOUTH) + tube_dirs = list(SOUTH, NORTHWEST, NORTHEAST) + if(EAST) + tube_dirs = list(EAST, SOUTHWEST, NORTHWEST) + if(WEST) + tube_dirs = list(WEST, NORTHEAST, SOUTHEAST) - for(var/i = 1, i <= length(connected), i++) - for(var/j = i + 1, j <= length(connected), j++) - var/d1 = connected[i] - var/d2 = connected[j] +/obj/structure/transit_tube/junction/flipped + icon_state = "junction1" - if(d1 == turn(d2, 135) || d1 == turn(d2, 180) || d1 == turn(d2, 225)) - return list(d1, d2) - - return list(connected[1], turn(connected[1], 180)) +/obj/structure/transit_tube/junction/flipped/init_tube_dirs() + switch(dir) + if(NORTH) + tube_dirs = list(NORTH, SOUTHWEST, SOUTHEAST)//ending with the prefered direction + if(SOUTH) + tube_dirs = list(SOUTH, NORTHEAST, NORTHWEST) + if(EAST) + tube_dirs = list(EAST, NORTHWEST, SOUTHWEST) + if(WEST) + tube_dirs = list(WEST, SOUTHEAST, NORTHEAST) +/obj/structure/transit_tube/crossing + icon_state = "crossing" + density = FALSE -/obj/structure/transit_tube/proc/select_automatic_icon_state(directions) - if(length(directions) == 2) - icon_state = "[dir2text_short(directions[1])]-[dir2text_short(directions[2])]" +//mostly for mapping use +/obj/structure/transit_tube/crossing/horizontal + dir = WEST +// cosmetic "cap" for tubes. Note that tubes can't enter this. +/obj/structure/transit_tube/cap + icon_state = "cap" +/obj/structure/transit_tube/cap/init_tube_dirs() + tube_dirs = list(turn(dir, 180)) // back the way we came -// Look for diagonal directions, generate the decorative corners in each. -/obj/structure/transit_tube/proc/generate_automatic_corners(directions) - for(var/direction in directions) - if(direction == 5 || direction == 6 || direction == 9 || direction == 10) - if(direction & NORTH) - create_automatic_decorative_corner(get_step(loc, NORTH), direction ^ 3) - - else - create_automatic_decorative_corner(get_step(loc, SOUTH), direction ^ 3) - - if(direction & EAST) - create_automatic_decorative_corner(get_step(loc, EAST), direction ^ 12) - - else - create_automatic_decorative_corner(get_step(loc, WEST), direction ^ 12) - - - -// Generate a corner, if one doesn't exist for the direction on the turf. -/obj/structure/transit_tube/proc/create_automatic_decorative_corner(location, direction) - var/state = "D-[dir2text_short(direction)]" - - for(var/obj/structure/transit_tube/tube in location) - if(tube.icon_state == state) - return - - var/obj/structure/transit_tube/tube = new(location) - tube.icon_state = state - tube.init_dirs() - - - -// Uses a list() to cache return values. Since they should -// never be edited directly, all tubes with a certain -// icon_state can just reference the same list. In theory, -// reduces memory usage, and improves CPU cache usage. -// In reality, I don't know if that is quite how BYOND works, -// but it is probably safer to assume the existence of, and -// rely on, a sufficiently smart compiler/optimizer. -/obj/structure/transit_tube/proc/parse_dirs(text) - var/global/list/direction_table = list() - - if(text in direction_table) - return direction_table[text] - - var/list/split_text = splittext(text, "-") - - // If the first token is D, the icon_state represents - // a purely decorative tube, and doesn't actually - // connect to anything. - if(split_text[1] == "D") - direction_table[text] = list() - return null - - var/list/directions = list() - - for(var/text_part in split_text) - var/direction = text2dir_extended(text_part) - - if(direction > 0) - directions += direction - - direction_table[text] = directions - return directions - - - -// A copy of text2dir, extended to accept one and two letter -// directions, and to clearly return 0 otherwise. -/obj/structure/transit_tube/proc/text2dir_extended(direction) - switch(uppertext(direction)) - if("NORTH", "N") - return 1 - if("SOUTH", "S") - return 2 - if("EAST", "E") - return 4 - if("WEST", "W") - return 8 - if("NORTHEAST", "NE") - return 5 - if("NORTHWEST", "NW") - return 9 - if("SOUTHEAST", "SE") - return 6 - if("SOUTHWEST", "SW") - return 10 - - - -// A copy of dir2text, which returns the short one or two letter -// directions used in tube icon states. -/obj/structure/transit_tube/proc/dir2text_short(direction) - switch(direction) - if(1) - return "N" - if(2) - return "S" - if(4) - return "E" - if(8) - return "W" - if(5) - return "NE" - if(6) - return "SE" - if(9) - return "NW" - if(10) - return "SW" +/obj/structure/transit_tube/cap/has_entrance(from_dir) + return FALSE +/obj/structure/transit_tube/cap/create_tube_overlay() + // cap sprites already have overlays + return diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm index 12f187df28e..a08dd320650 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm @@ -1,3 +1,6 @@ +#define MOVE_ANIMATION_STAGE_ONE 1 +#define MOVE_ANIMATION_STAGE_TWO 2 + /obj/structure/transit_tube_pod icon = 'icons/obj/pipes/transit_tube_pod.dmi' icon_state = "pod" @@ -6,9 +9,25 @@ density = TRUE var/moving = FALSE var/datum/gas_mixture/air_contents = new() + /// The tube we're currently traveling through + var/obj/structure/transit_tube/current_tube = null + /// The direction of our next transit from pipe to pipe. Stored between process calls here. + var/next_dir + /// The location of our next target tube. Stored same as above + var/next_loc + /// How long to wait when entering a new tube + var/enter_delay = 0 + /// How long to wait when exiting a new tube + var/exit_delay + /// The next time we'll be moving + COOLDOWN_DECLARE(move_cooldown) + /// The move animation mode for the next processing tick + var/current_move_anim_mode = MOVE_ANIMATION_STAGE_ONE + /// Icon state in use while we're occupied + var/occupied_icon_state = "pod_occupied" -/obj/structure/transit_tube_pod/New(loc) - ..(loc) +/obj/structure/transit_tube_pod/Initialize(mapload) + . = ..() air_contents.oxygen = MOLES_O2STANDARD * 2 air_contents.nitrogen = MOLES_N2STANDARD @@ -18,9 +37,16 @@ spawn(5) follow_tube() +/obj/structure/transit_tube_pod/update_icon_state() + . = ..() + icon_state = length(contents) ? occupied_icon_state : initial(icon_state) + +/obj/structure/transit_tube_pod/proc/stop_following() + STOP_PROCESSING(SStransit_tube, src) + /obj/structure/transit_tube_pod/Destroy() - for(var/atom/movable/AM in contents) - AM.forceMove(get_turf(src)) + empty_pod() + stop_following() return ..() /obj/structure/transit_tube_pod/Process_Spacemove() @@ -28,66 +54,111 @@ return TRUE else return ..() +/obj/structure/transit_tube_pod/proc/empty_pod(atom/location) + if(!location) + location = get_turf(src) + for(var/atom/movable/M in contents) + M.forceMove(location) + update_appearance() + +/obj/structure/transit_tube_pod/crowbar_act(mob/living/user, obj/item/I) + . = ..() + if(moving) + return + + if(length(contents)) + I.play_tool_sound(src) + user.visible_message("[user] pries [src] open.") + empty_pod() + +/obj/structure/transit_tube_pod/process() + ..() + + if(!COOLDOWN_FINISHED(src, move_cooldown)) + return + + var/move_result = move_animation(current_move_anim_mode) + if(isnull(move_result)) + if(isnull(current_tube) || (!(dir in current_tube.directions()) && !(reverse_direction(dir) in current_tube.directions()))) + outside_tube() + return PROCESS_KILL + + current_move_anim_mode = move_result + +/obj/structure/transit_tube_pod/proc/outside_tube() + var/list/savedcontents = contents.Copy() + var/saveddir = dir + var/turf/destination = get_edge_target_turf(src, saveddir) + visible_message("[src] ejects its insides out!") + for(var/i in savedcontents) + var/atom/movable/AM = i + AM.throw_at(destination, rand(1, 3), 5) + + +/obj/structure/transit_tube_pod/proc/move_animation(stage = MOVE_ANIMATION_STAGE_ONE) + if(stage == MOVE_ANIMATION_STAGE_ONE) + next_dir = current_tube.get_exit(dir) + + if(!next_dir) + moving = FALSE + density = TRUE + return + exit_delay = current_tube.exit_delay + next_loc = get_step(src, next_dir) + current_tube = null + for(var/obj/structure/transit_tube/tube in next_loc) + if(tube.has_entrance(next_dir)) + current_tube = tube + break + + if(isnull(current_tube)) + setDir(next_dir) + Move(get_step(loc, dir), dir) // Allow collisions when leaving the tubes. + moving = FALSE + density = TRUE + return + + enter_delay = current_tube.enter_delay(src, next_dir) + if(enter_delay > 0) + COOLDOWN_START(src, move_cooldown, enter_delay) + return MOVE_ANIMATION_STAGE_TWO + + stage = MOVE_ANIMATION_STAGE_TWO + + if(stage == MOVE_ANIMATION_STAGE_TWO) + setDir(next_dir) + forceMove(next_loc) // When moving from one tube to another, skip collision and such. + density = current_tube.density + + if(current_tube?.should_stop_pod(src, next_dir)) + current_tube.pod_stopped(src, dir) + else + COOLDOWN_START(src, move_cooldown, exit_delay) + return MOVE_ANIMATION_STAGE_ONE + + density = TRUE + moving = FALSE + + return MOVE_ANIMATION_STAGE_ONE + + /obj/structure/transit_tube_pod/proc/follow_tube(reverse_launch) if(moving) return moving = TRUE - spawn() - var/obj/structure/transit_tube/current_tube = null - var/next_dir - var/next_loc - var/last_delay = 0 - var/exit_delay - - if(reverse_launch) - dir = turn(dir, 180) // Back it up - - for(var/obj/structure/transit_tube/tube in loc) - if(tube.has_exit(dir)) - current_tube = tube - break - - while(current_tube) - next_dir = current_tube.get_exit(dir) - - if(!next_dir) - break - - exit_delay = current_tube.exit_delay(src, dir) - last_delay += exit_delay - - sleep(exit_delay) - - next_loc = get_step(loc, next_dir) - - current_tube = null - for(var/obj/structure/transit_tube/tube in next_loc) - if(tube.has_entrance(next_dir)) - current_tube = tube - break - - if(current_tube == null) - setDir(next_dir) - Move(get_step(loc, dir), dir) // Allow collisions when leaving the tubes. - break - - last_delay = current_tube.enter_delay(src, next_dir) - sleep(last_delay) - setDir(next_dir) - forceMove(next_loc) // When moving from one tube to another, skip collision and such. - density = current_tube.density - - if(current_tube && current_tube.should_stop_pod(src, next_dir)) - current_tube.pod_stopped(src, dir) - break - - density = TRUE + for(var/obj/structure/transit_tube/tube in loc) + if(tube.has_exit(dir)) + current_tube = tube + break + if(!isnull(current_tube)) + START_PROCESSING(SStransit_tube, src) + // move_animation(MOVE_ANIMATION_STAGE_ONE) + else moving = FALSE - // Should I return a copy here? If the caller edits or qdel()s the returned // datum, there might be problems if I don't... /obj/structure/transit_tube_pod/return_air() @@ -174,8 +245,8 @@ return /obj/structure/transit_tube_pod/proc/move_into(atom/movable/A) - icon_state = "pod_occupied" A.forceMove(src) + update_appearance() /obj/structure/transit_tube_pod/proc/eject_mindless(direction) for(var/atom/movable/A in contents) @@ -188,9 +259,24 @@ /obj/structure/transit_tube_pod/proc/eject(atom/movable/A, direction) - icon_state = "pod" A.forceMove(loc) + update_appearance() A.Move(get_step(loc, direction), direction) if(ismob(A)) var/mob/M = A M.reset_perspective(null) + + +/obj/structure/transit_tube_pod/dispensed + name = "temporary transit tube pod" + desc = "Gets you from here to there, and no further." + icon_state = "temppod" + occupied_icon_state = "temppod_occupied" + + +/obj/structure/transit_tube_pod/dispensed/outside_tube() + if(!QDELETED(src)) + qdel(src) + +#undef MOVE_ANIMATION_STAGE_TWO +#undef MOVE_ANIMATION_STAGE_ONE diff --git a/icons/obj/pipes/transit_tube.dmi b/icons/obj/pipes/transit_tube.dmi index bdb1608a313bf3def61520a1193604a32d564dba..aca65d502fdc7c2bbc074c81a3b510af1b6741a6 100644 GIT binary patch literal 14133 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 z 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 P9N>|*p;m>4L*)Mh%FPXD literal 8818 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 diff --git a/icons/obj/pipes/transit_tube_pod.dmi b/icons/obj/pipes/transit_tube_pod.dmi index 86070b8ce59a49e316d8aac44362ba5fc18c6242..a0bdb36ec222217403d1403ec331c7a642f171c4 100644 GIT binary patch delta 8530 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 Td0IgFKLVt$ZK749;TrWn4*`B3 delta 4879 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 diff --git a/paradise.dme b/paradise.dme index 72e63aaad85..cb295360d31 100644 --- a/paradise.dme +++ b/paradise.dme @@ -312,6 +312,7 @@ #include "code\controllers\subsystem\processing\obj.dm" #include "code\controllers\subsystem\processing\processing.dm" #include "code\controllers\subsystem\processing\projectiles.dm" +#include "code\controllers\subsystem\processing\transittube.dm" #include "code\controllers\subsystem\tickets\mentor_tickets.dm" #include "code\controllers\subsystem\tickets\tickets.dm" #include "code\datums\action.dm"