From 23da0e715a655eea771ee264d9a4201d224e701d Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sun, 5 Apr 2026 02:02:10 +0000 Subject: [PATCH 01/70] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-6124.yml | 4 ---- html/changelogs/archive/2026-04.yml | 3 +++ 2 files changed, 3 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-6124.yml diff --git a/html/changelogs/AutoChangeLog-pr-6124.yml b/html/changelogs/AutoChangeLog-pr-6124.yml deleted file mode 100644 index 489e7fdd02..0000000000 --- a/html/changelogs/AutoChangeLog-pr-6124.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: thearbiber -changes: - - {rscadd: srm hardsuit digi fix} -delete-after: true diff --git a/html/changelogs/archive/2026-04.yml b/html/changelogs/archive/2026-04.yml index a5e3b688e8..c9a8a99495 100644 --- a/html/changelogs/archive/2026-04.yml +++ b/html/changelogs/archive/2026-04.yml @@ -31,3 +31,6 @@ Erikafox: - bugfix: Teagarden whatever is back to being an example sector, rather than being spawnable. +2026-04-05: + thearbiber: + - rscadd: srm hardsuit digi fix From 3b4b8d5086ef67397201dbd83330209a47d40ae5 Mon Sep 17 00:00:00 2001 From: generalthrax <139387950+generalthrax@users.noreply.github.com> Date: Sun, 5 Apr 2026 11:28:15 -0700 Subject: [PATCH 02/70] Darkens Makosso-Warra Colours (#6110) ## About The Pull Request Given the greenlight by a number of Maptainers to bring back Makosso navy colour (along with keeping the darker shade of the new Makosso blue) Sample Magpie image ## Why It's Good For The Game Better colour selection for mappers more suited to existing ships ## Changelog :cl: add: Brought back darker Makosso blue /:cl: --- _maps/shuttles/warra/warra_harrier.dmm | 30 ++--- _maps/shuttles/warra/warra_magpie.dmm | 104 +++++++++--------- .../decals/turfdecal/flooring_decals.dm | 8 +- 3 files changed, 68 insertions(+), 74 deletions(-) diff --git a/_maps/shuttles/warra/warra_harrier.dmm b/_maps/shuttles/warra/warra_harrier.dmm index 8cec55449a..28ea9cc77a 100644 --- a/_maps/shuttles/warra/warra_harrier.dmm +++ b/_maps/shuttles/warra/warra_harrier.dmm @@ -2512,10 +2512,10 @@ /area/ship/cargo) "nx" = ( /obj/effect/turf_decal/warra/modern_big/top_right, -/obj/effect/turf_decal/trimline/opaque/warrablue/line{ +/obj/effect/turf_decal/siding/thinplating{ dir = 5 }, -/obj/effect/turf_decal/siding/thinplating{ +/obj/effect/turf_decal/trimline/opaque/warrabluelight/line{ dir = 5 }, /turf/open/floor/plasteel, @@ -2926,10 +2926,10 @@ /area/ship/storage/eva) "qO" = ( /obj/effect/turf_decal/warra/modern_big/bottom_right, -/obj/effect/turf_decal/trimline/opaque/warrablue/line{ +/obj/effect/turf_decal/siding/thinplating{ dir = 6 }, -/obj/effect/turf_decal/siding/thinplating{ +/obj/effect/turf_decal/trimline/opaque/warrabluelight/line{ dir = 6 }, /turf/open/floor/plasteel, @@ -3836,10 +3836,10 @@ /area/ship/storage/eva) "vm" = ( /obj/effect/turf_decal/warra/modern_big/bottom_left, -/obj/effect/turf_decal/trimline/opaque/warrablue/line{ +/obj/effect/turf_decal/siding/thinplating{ dir = 10 }, -/obj/effect/turf_decal/siding/thinplating{ +/obj/effect/turf_decal/trimline/opaque/warrabluelight/line{ dir = 10 }, /turf/open/floor/plasteel, @@ -4086,10 +4086,10 @@ "wr" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/warra/modern_big/top_left, -/obj/effect/turf_decal/trimline/opaque/warrablue/line{ +/obj/effect/turf_decal/siding/thinplating{ dir = 9 }, -/obj/effect/turf_decal/siding/thinplating{ +/obj/effect/turf_decal/trimline/opaque/warrabluelight/line{ dir = 9 }, /turf/open/floor/plasteel, @@ -5836,8 +5836,8 @@ /area/ship/hallway/starboard) "FR" = ( /obj/effect/turf_decal/warra/modern_big/bottom_center, -/obj/effect/turf_decal/trimline/opaque/warrablue/line, /obj/effect/turf_decal/siding/thinplating, +/obj/effect/turf_decal/trimline/opaque/warrabluelight/line, /turf/open/floor/plasteel, /area/ship/hallway/central) "FS" = ( @@ -6206,10 +6206,10 @@ /area/ship/storage/eva) "Ia" = ( /obj/effect/turf_decal/warra/modern_big/top_center, -/obj/effect/turf_decal/trimline/opaque/warrablue/line{ +/obj/effect/turf_decal/siding/thinplating{ dir = 1 }, -/obj/effect/turf_decal/siding/thinplating{ +/obj/effect/turf_decal/trimline/opaque/warrabluelight/line{ dir = 1 }, /turf/open/floor/plasteel, @@ -7163,10 +7163,10 @@ dir = 4 }, /obj/effect/turf_decal/warra/modern_big/center_left, -/obj/effect/turf_decal/trimline/opaque/warrablue/line{ +/obj/effect/turf_decal/siding/thinplating{ dir = 8 }, -/obj/effect/turf_decal/siding/thinplating{ +/obj/effect/turf_decal/trimline/opaque/warrabluelight/line{ dir = 8 }, /turf/open/floor/plasteel, @@ -7832,10 +7832,10 @@ dir = 8 }, /obj/effect/turf_decal/warra/modern_big/center_right, -/obj/effect/turf_decal/trimline/opaque/warrablue/line{ +/obj/effect/turf_decal/siding/thinplating{ dir = 4 }, -/obj/effect/turf_decal/siding/thinplating{ +/obj/effect/turf_decal/trimline/opaque/warrabluelight/line{ dir = 4 }, /turf/open/floor/plasteel, diff --git a/_maps/shuttles/warra/warra_magpie.dmm b/_maps/shuttles/warra/warra_magpie.dmm index 80ceba47e8..07e2016d5e 100644 --- a/_maps/shuttles/warra/warra_magpie.dmm +++ b/_maps/shuttles/warra/warra_magpie.dmm @@ -26,7 +26,7 @@ /turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/crew/office) "aC" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/trimline/opaque/white/filled/corner, @@ -73,7 +73,7 @@ /turf/open/floor/plating, /area/ship/hallway/starboard) "aO" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/structure/table, @@ -92,7 +92,7 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ship/hallway/central) "aU" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/trimline/opaque/white/warning, @@ -118,7 +118,7 @@ /obj/effect/turf_decal/siding/white{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/trimline/opaque/white/warning, @@ -202,7 +202,7 @@ /turf/open/floor/plasteel/tech, /area/ship/engineering) "bu" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 5 }, /obj/effect/turf_decal/trimline/opaque/white/corner{ @@ -310,7 +310,7 @@ /turf/open/floor/plasteel/mono, /area/ship/crew/canteen) "ci" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/siding/white{ @@ -849,7 +849,7 @@ /turf/open/floor/plasteel/mono, /area/ship/medical) "gh" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 6 }, /obj/effect/turf_decal/trimline/opaque/white/warning{ @@ -1034,7 +1034,7 @@ /turf/open/floor/plasteel/patterned/ridged, /area/ship/crew/toilet) "gD" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 6 }, /obj/effect/turf_decal/trimline/opaque/white/corner, @@ -1435,7 +1435,7 @@ /obj/effect/turf_decal/siding/white{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/trimline/opaque/white/corner{ @@ -1618,7 +1618,7 @@ /obj/structure/chair/bench/blue{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 5 }, /turf/open/floor/plasteel/tech/techmaint, @@ -1654,7 +1654,7 @@ /turf/closed/wall/mineral/titanium, /area/ship/security) "kM" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/siding/white{ @@ -1767,7 +1767,7 @@ /turf/open/floor/engine/hull/reinforced, /area/ship/external/dark) "mh" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 9 }, /turf/open/floor/plasteel/tech/techmaint, @@ -1882,7 +1882,7 @@ /turf/open/floor/plasteel/patterned/grid/dark, /area/ship/cargo/starboard) "nd" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 5 }, /obj/effect/turf_decal/siding/white, @@ -1926,7 +1926,7 @@ /area/ship/engineering) "nA" = ( /obj/structure/chair/sofa/blue/corpo/left, -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/item/toy/plush/blahaj{ @@ -2020,7 +2020,7 @@ /turf/open/floor/plasteel/tech/grid, /area/ship/external/dark) "oC" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 6 }, /obj/effect/turf_decal/trimline/opaque/white/warning{ @@ -2269,7 +2269,7 @@ /turf/open/floor/plasteel/tech, /area/ship/engineering) "qk" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/trimline/opaque/white/filled/corner{ @@ -2310,7 +2310,7 @@ /turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "qR" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 5 }, /obj/effect/turf_decal/trimline/opaque/white/warning{ @@ -2407,7 +2407,7 @@ /turf/open/floor/plasteel/patterned/brushed, /area/ship/crew/cryo) "ry" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/siding/white{ @@ -2474,9 +2474,6 @@ /turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/engineering/atmospherics) "sC" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ - dir = 10 - }, /obj/structure/chair/office, /obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 @@ -2600,7 +2597,7 @@ /turf/open/floor/plasteel/dark, /area/ship/security) "sX" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 5 }, /obj/effect/turf_decal/siding/white, @@ -2618,7 +2615,7 @@ /area/ship/crew/dorm) "tf" = ( /obj/structure/table, -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 5 }, /obj/item/plate/small{ @@ -2675,7 +2672,7 @@ /area/ship/cargo) "tr" = ( /obj/machinery/vending/cola/blue, -/obj/effect/turf_decal/corner/opaque/warrabluelight/mono, +/obj/effect/turf_decal/corner/opaque/warrablue/mono, /obj/effect/turf_decal/trimline/opaque/white/filled/line{ dir = 8 }, @@ -2838,9 +2835,6 @@ /turf/open/floor/wood/walnut, /area/ship/crew/dorm/commad) "ua" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ - dir = 6 - }, /obj/structure/cable/white{ icon_state = "1-4" }, @@ -2964,7 +2958,7 @@ /turf/closed/wall/mineral/titanium, /area/ship/crew/toilet) "ve" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/structure/fluff/hedge, @@ -3007,7 +3001,7 @@ /turf/open/floor/plating, /area/ship/engineering) "vF" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight/mono, +/obj/effect/turf_decal/corner/opaque/warrablue/mono, /obj/effect/turf_decal/warraspaceworks_small/right, /turf/open/floor/plasteel/mono/dark, /area/ship/engineering) @@ -3160,8 +3154,8 @@ pixel_x = -1; pixel_y = 2 }, -/obj/effect/turf_decal/corner/opaque/warrabluelight{ - dir = 9 +/obj/effect/turf_decal/corner/opaque/warrablue{ + dir = 5 }, /obj/machinery/power/apc/auto_name/directional/south, /obj/machinery/light_switch{ @@ -3203,7 +3197,7 @@ /turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/crew/dorm/commad) "xm" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 6 }, /obj/effect/turf_decal/trimline/opaque/white/corner{ @@ -3223,7 +3217,7 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ship/hallway/port) "xn" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight/three_quarters, +/obj/effect/turf_decal/corner/opaque/warrablue/three_quarters, /obj/effect/turf_decal/trimline/opaque/white/corner{ dir = 4 }, @@ -3256,7 +3250,7 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ship/external/dark) "xR" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/trimline/opaque/white/filled/warning, @@ -3438,7 +3432,7 @@ /area/ship/crew/canteen) "zz" = ( /obj/machinery/vending/cigarette, -/obj/effect/turf_decal/corner/opaque/warrabluelight/three_quarters{ +/obj/effect/turf_decal/corner/opaque/warrablue/three_quarters{ dir = 1 }, /obj/machinery/camera/autoname{ @@ -3585,7 +3579,7 @@ /turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "AB" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/trimline/opaque/white/warning, @@ -3672,7 +3666,7 @@ /turf/open/floor/plating, /area/ship/engineering) "Bp" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 5 }, /obj/effect/turf_decal/trimline/opaque/white/corner{ @@ -3886,7 +3880,7 @@ /obj/structure/chair/bench/blue{ dir = 8 }, -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 5 }, /turf/open/floor/plasteel/tech/techmaint, @@ -4117,7 +4111,7 @@ /turf/open/floor/plasteel/mono, /area/ship/hallway/port) "DW" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight/mono, +/obj/effect/turf_decal/corner/opaque/warrablue/mono, /obj/effect/turf_decal/warraspaceworks_small, /obj/structure/chair/office, /turf/open/floor/plasteel/mono/dark, @@ -4136,7 +4130,7 @@ /turf/open/floor/plasteel/lightgrey, /area/ship/medical) "Ek" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight/three_quarters{ +/obj/effect/turf_decal/corner/opaque/warrablue/three_quarters{ dir = 4 }, /turf/open/floor/plasteel/tech/techmaint, @@ -4336,7 +4330,7 @@ /turf/open/floor/plasteel/mono, /area/ship/crew/canteen) "Fn" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/trimline/opaque/white/corner, @@ -4558,7 +4552,7 @@ /turf/open/floor/plating, /area/ship/engineering/atmospherics) "Hv" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight/three_quarters{ +/obj/effect/turf_decal/corner/opaque/warrablue/three_quarters{ dir = 8 }, /obj/effect/turf_decal/trimline/opaque/white/corner, @@ -4759,7 +4753,7 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering/atmospherics) "HU" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/trimline/opaque/white/corner{ @@ -4772,8 +4766,8 @@ /area/ship/hallway/starboard) "HZ" = ( /obj/machinery/washing_machine, -/obj/effect/turf_decal/corner/opaque/warrabluelight{ - dir = 9 +/obj/effect/turf_decal/corner/opaque/warrablue{ + dir = 5 }, /obj/machinery/firealarm/directional/east{ pixel_y = 6 @@ -4866,7 +4860,7 @@ /turf/open/floor/plasteel/tech, /area/ship/engineering) "ID" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight/mono, +/obj/effect/turf_decal/corner/opaque/warrablue/mono, /obj/effect/turf_decal/warraspaceworks_small/left, /turf/open/floor/plasteel/mono/dark, /area/ship/engineering) @@ -6158,7 +6152,7 @@ /turf/open/floor/plasteel/tech, /area/ship/engineering/atmospherics) "RU" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 5 }, /obj/effect/turf_decal/trimline/opaque/white/corner{ @@ -6316,7 +6310,7 @@ /turf/open/floor/plasteel/tech/grid, /area/ship/external/dark) "Tk" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/trimline/opaque/white/corner, @@ -6692,7 +6686,7 @@ /obj/effect/turf_decal/siding/white{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/trimline/opaque/white/corner, @@ -6868,7 +6862,7 @@ /area/ship/bridge) "XN" = ( /obj/structure/chair/sofa/blue/corpo/right, -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /turf/open/floor/plasteel/tech/techmaint, @@ -7022,7 +7016,7 @@ /area/ship/cargo) "Zc" = ( /obj/machinery/vending/snack/teal, -/obj/effect/turf_decal/corner/opaque/warrabluelight/mono, +/obj/effect/turf_decal/corner/opaque/warrablue/mono, /obj/effect/turf_decal/trimline/opaque/white/filled/line{ dir = 8 }, @@ -7100,7 +7094,7 @@ /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo) "ZD" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 5 }, /obj/effect/turf_decal/trimline/opaque/white/corner{ @@ -7110,7 +7104,7 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ship/hallway/port) "ZJ" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 5 }, /obj/effect/turf_decal/trimline/opaque/white/corner{ @@ -7128,7 +7122,7 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ship/hallway/port) "ZR" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 10 }, /obj/effect/turf_decal/trimline/opaque/white/corner{ @@ -7159,7 +7153,7 @@ /turf/open/floor/plating, /area/ship/security) "ZU" = ( -/obj/effect/turf_decal/corner/opaque/warrabluelight{ +/obj/effect/turf_decal/corner/opaque/warrablue{ dir = 5 }, /obj/effect/turf_decal/siding/white, diff --git a/code/game/objects/effects/decals/turfdecal/flooring_decals.dm b/code/game/objects/effects/decals/turfdecal/flooring_decals.dm index f4909e9e63..7800ffd1a7 100644 --- a/code/game/objects/effects/decals/turfdecal/flooring_decals.dm +++ b/code/game/objects/effects/decals/turfdecal/flooring_decals.dm @@ -128,8 +128,8 @@ TURF_DECAL_COLOR_HELPER(opaque/white, COLOR_WHITE, 255) TURF_DECAL_COLOR_HELPER(opaque/grey, COLOR_FLOORTILE_GRAY, 255) TURF_DECAL_COLOR_HELPER(opaque/lightgrey, "#a8b2b6", 255) TURF_DECAL_COLOR_HELPER(opaque/bottlegreen, "#57967f", 255) -TURF_DECAL_COLOR_HELPER(opaque/warrablue, "#2270d0", 255) -TURF_DECAL_COLOR_HELPER(opaque/warrabluelight, "#39a0eb", 255) +TURF_DECAL_COLOR_HELPER(opaque/warrablue, "#32426b", 255) +TURF_DECAL_COLOR_HELPER(opaque/warrabluelight, "#2270d0", 255) TURF_DECAL_COLOR_HELPER(opaque/nsorange, "#f97016", 255) TURF_DECAL_COLOR_HELPER(opaque/vired, "#c92020", 255) TURF_DECAL_COLOR_HELPER(opaque/solgovblue, "#2d2a4e", 255) @@ -159,8 +159,8 @@ TURF_DECAL_COLOR_HELPER(transparent/white, COLOR_WHITE, 140) TURF_DECAL_COLOR_HELPER(transparent/grey, COLOR_FLOORTILE_GRAY, 140) TURF_DECAL_COLOR_HELPER(transparent/lightgrey, "#a8b2b6", 140) TURF_DECAL_COLOR_HELPER(transparent/bottlegreen, "#57967f", 140) -TURF_DECAL_COLOR_HELPER(transparent/warrablue, "#2270d0", 140) -TURF_DECAL_COLOR_HELPER(transparent/warrabluelight, "#39a0eb", 140) +TURF_DECAL_COLOR_HELPER(transparent/warrablue, "#32426b", 140) +TURF_DECAL_COLOR_HELPER(transparent/warrabluelight, "#2270d0", 140) TURF_DECAL_COLOR_HELPER(transparent/nsorange, "#f97016", 140) TURF_DECAL_COLOR_HELPER(transparent/vired, "#c92020", 140) TURF_DECAL_COLOR_HELPER(transparent/solgovblue, "#2d2a4e", 140) From 6ec403eab3b31bfd0200a2f2afe657b84c6b1614 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sun, 5 Apr 2026 14:14:36 -0500 Subject: [PATCH 03/70] Automatic changelog generation for PR #6110 [ci skip] --- html/changelogs/AutoChangeLog-pr-6110.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-6110.yml diff --git a/html/changelogs/AutoChangeLog-pr-6110.yml b/html/changelogs/AutoChangeLog-pr-6110.yml new file mode 100644 index 0000000000..0184c7df5e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6110.yml @@ -0,0 +1,4 @@ +author: generalthrax +changes: + - {rscadd: Brought back darker Makosso blue} +delete-after: true From 783acb29081030a385443a9433474bfe3650020b Mon Sep 17 00:00:00 2001 From: zimon9 <122945887+zimon9@users.noreply.github.com> Date: Sun, 5 Apr 2026 20:37:49 -0400 Subject: [PATCH 04/70] Adds factional webbings to cargo (#5968) ## About The Pull Request This PR adds factional webbings/belts for Inteq, Hardliners, CLIP, and the NGR to the outpost market ## Why It's Good For The Game I feel like this might be helpful in cases where one may want to purchase more webbings, if they don't have enough or are missing one. Functionally identical to assault belts, these only serve to help faction cohesion. ## Changelog :cl: add: Added faction webbings for inteq, hardliners, CLIP, and the NGR to cargo /:cl: --------- Signed-off-by: zimon9 <122945887+zimon9@users.noreply.github.com> --- code/modules/cargo/packs/sec_supply.dm | 76 ++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/code/modules/cargo/packs/sec_supply.dm b/code/modules/cargo/packs/sec_supply.dm index a558d8556f..0b6d6141e1 100644 --- a/code/modules/cargo/packs/sec_supply.dm +++ b/code/modules/cargo/packs/sec_supply.dm @@ -323,6 +323,82 @@ faction_discount = 0 faction_locked = TRUE +//hardliner + +/datum/supply_pack/tools/webbing/hardliner + name = "Hardliner Webbing Crate" + desc = "Contains a webbing, with a standard implement of six pockets." + cost = 300 + contains = list(/obj/item/storage/belt/security/webbing/hardliners) + crate_name = "webbing crate" + faction = /datum/faction/syndicate/hardliners + faction_discount = 0 + faction_locked = TRUE + +/datum/supply_pack/tools/webbing/hardliner/alt + name = "Hardliner Drop Pouch Harness Crate" + desc = "Contains a drop pouch harness, with a standard implement of six pockets." + contains = list(/obj/item/storage/belt/security/webbing/hardliners/alt) + crate_name = "drop pouch crate" + +//inteq + +/datum/supply_pack/tools/webbing/inteq + name = "Inteq Webbing Crate" + desc = "Contains a webbing, with a standard implement of six pockets." + cost = 300 + contains = list(/obj/item/storage/belt/security/webbing/inteq) + crate_name = "webbing crate" + faction = /datum/faction/inteq + faction_discount = 0 + faction_locked = TRUE + +/datum/supply_pack/tools/webbing/inteq/alt + name = "Inteq Drop Pouch Harness Crate" + desc = "Contains a drop pouch harness, with a standard implement of six pockets." + contains = list(/obj/item/storage/belt/security/webbing/inteq/alt) + crate_name = "drop pouch crate" + +//ngr + +/datum/supply_pack/tools/webbing/ngr + name = "NGR Webbing Crate" + desc = "Contains a webbing, with a standard implement of six pockets." + cost = 300 + contains = list(/obj/item/storage/belt/security/webbing/ngr) + crate_name = "webbing crate" + faction = /datum/faction/syndicate/ngr + faction_discount = 0 + faction_locked = TRUE + +/datum/supply_pack/tools/webbing/ngr/alt + name = "NGR Drop Pouch Harness Crate" + desc = "Contains a drop pouch harness, with a standard implement of six pockets." + contains = list(/obj/item/storage/belt/security/webbing/ngr/alt) + crate_name = "drop pouch crate" + +//clip + +/datum/supply_pack/tools/belt/clip + name = "CLIP Chest Rig Crate" + desc = "Contains a chest rig, with an implement of seven pockets." + cost = 500 + contains = list(/obj/item/storage/belt/military/clip) + crate_name = "chest rig crate" + faction = /datum/faction/clip + faction_discount = 0 + faction_locked = TRUE + +/datum/supply_pack/tools/belt/clip/alt + name = "CLIP Belt Rig Crate" + desc = "Contains a belt rig, with an implement of seven pockets." + cost = 500 + contains = list(/obj/item/storage/belt/military/clip/alt) + crate_name = "belt rig crate" + faction = /datum/faction/clip + faction_discount = 0 + faction_locked = TRUE + //Makosso-Warra /datum/supply_pack/sec_supply/vigilitas_uniform From f069b82de19216df45d83cd23223579078bdfad2 Mon Sep 17 00:00:00 2001 From: Addust <80979251+Addust@users.noreply.github.com> Date: Mon, 6 Apr 2026 01:38:11 +0100 Subject: [PATCH 05/70] obliterates valentine's day from the code (#5888) ## About The Pull Request this mf did not survive the night of fire (obliterates st valentine's day, the antagonist, and the godawful .json) ## Why It's Good For The Game ask the lore maintainers ## Changelog :cl: del: St. Valentine is no more. Expect no more incredibly peculiar Valentine's Day cards or government-mandated dates. /:cl: --------- Signed-off-by: Addust <80979251+Addust@users.noreply.github.com> Co-authored-by: Gristlebee <56049844+Gristlebee@users.noreply.github.com> --- .../IceRuins/icemoon_training_center.dmm | 4 - _maps/outpost/cybersun_gas_giant.dmm | 4 - check_regex.yaml | 2 +- code/game/objects/items/food/snacks.dm | 8 ++ .../antagonists/valentines/heartbreaker.dm | 19 --- .../antagonists/valentines/valentine.dm | 45 ------- code/modules/events/holiday/vday.dm | 107 --------------- shiptest.dme | 3 - strings/valentines.json | 127 ------------------ 9 files changed, 9 insertions(+), 310 deletions(-) delete mode 100644 code/modules/antagonists/valentines/heartbreaker.dm delete mode 100644 code/modules/antagonists/valentines/valentine.dm delete mode 100644 code/modules/events/holiday/vday.dm delete mode 100644 strings/valentines.json diff --git a/_maps/RandomRuins/IceRuins/icemoon_training_center.dmm b/_maps/RandomRuins/IceRuins/icemoon_training_center.dmm index d6ed4c73c0..a093255a2f 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_training_center.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_training_center.dmm @@ -214,10 +214,6 @@ /obj/effect/turf_decal/siding/thinplating/dark{ dir = 6 }, -/obj/item/valentine{ - pixel_x = -2; - pixel_y = 10 - }, /obj/item/clothing/neck/tie/gay{ pixel_x = 8; pixel_y = 15 diff --git a/_maps/outpost/cybersun_gas_giant.dmm b/_maps/outpost/cybersun_gas_giant.dmm index 8862113a1d..e71d18326a 100644 --- a/_maps/outpost/cybersun_gas_giant.dmm +++ b/_maps/outpost/cybersun_gas_giant.dmm @@ -15387,10 +15387,6 @@ }, /obj/effect/turf_decal/industrial/hatch, /obj/structure/closet/crate/trashcart, -/obj/item/valentine{ - pixel_x = -4; - pixel_y = -1 - }, /obj/item/trash/waffles{ pixel_x = 3; pixel_y = 7 diff --git a/check_regex.yaml b/check_regex.yaml index 184e5fae74..95626cddae 100644 --- a/check_regex.yaml +++ b/check_regex.yaml @@ -38,7 +38,7 @@ standards: - exactly: [ - 262, + 260, "non-bitwise << uses", '(?You didn't get a date! They're all having fun without you! You'll show them though...")) - owner.announce_objectives() diff --git a/code/modules/antagonists/valentines/valentine.dm b/code/modules/antagonists/valentines/valentine.dm deleted file mode 100644 index 76fb9079e5..0000000000 --- a/code/modules/antagonists/valentines/valentine.dm +++ /dev/null @@ -1,45 +0,0 @@ -/datum/antagonist/valentine - name = "valentine" - roundend_category = "valentines" //there's going to be a ton of them so put them in separate category - show_in_antagpanel = FALSE - prevent_roundtype_conversion = FALSE - var/datum/mind/date - -/datum/antagonist/valentine/proc/forge_objectives() - var/datum/objective/protect/protect_objective = new /datum/objective/protect - protect_objective.owner = owner - protect_objective.target = date - if(!ishuman(date.current)) - protect_objective.human_check = FALSE - protect_objective.explanation_text = "Protect [date.name], your date." - objectives += protect_objective - -/datum/antagonist/valentine/on_gain() - forge_objectives() - if(isliving(owner.current)) - var/mob/living/L = owner.current - L.apply_status_effect(STATUS_EFFECT_INLOVE, date.current) - . = ..() - -/datum/antagonist/valentine/on_removal() - if(isliving(owner.current)) - var/mob/living/L = owner.current - L.remove_status_effect(STATUS_EFFECT_INLOVE) - . = ..() - -/datum/antagonist/valentine/greet() - to_chat(owner, span_warning("You're on a date with [date.name]! Protect [date.p_them()] at all costs. This takes priority over all other loyalties.")) - -//Squashed up a bit -/datum/antagonist/valentine/roundend_report() - var/objectives_complete = TRUE - if(objectives.len) - for(var/datum/objective/objective in objectives) - if(!objective.check_completion()) - objectives_complete = FALSE - break - - if(objectives_complete) - return "[owner.name] protected [owner.p_their()] date" - else - return "[owner.name] date failed!" diff --git a/code/modules/events/holiday/vday.dm b/code/modules/events/holiday/vday.dm deleted file mode 100644 index 1889a3c2d8..0000000000 --- a/code/modules/events/holiday/vday.dm +++ /dev/null @@ -1,107 +0,0 @@ -// Valentine's Day events // -// why are you playing spessmens on valentine's day you wizard // - -#define VALENTINE_FILE "valentines.json" - -// valentine / candy heart distribution // - -/datum/round_event_control/valentines - name = "Valentines!" - holidayID = VALENTINES - typepath = /datum/round_event/valentines - weight = -1 //forces it to be called, regardless of weight - max_occurrences = 1 - earliest_start = 0 MINUTES - category = EVENT_CATEGORY_HOLIDAY - -/datum/round_event/valentines/start() - ..() - for(var/mob/living/carbon/human/H in GLOB.alive_mob_list) - H.put_in_hands(new /obj/item/valentine) - var/obj/item/storage/backpack/b = locate() in H.contents - new /obj/item/food/candyheart(b) - new /obj/item/storage/fancy/heart_box(b) - - var/list/valentines = list() - for(var/mob/living/M in GLOB.player_list) - if(!M.stat && M.mind) - valentines |= M - - - while(valentines.len) - var/mob/living/L = pick_n_take(valentines) - if(valentines.len) - var/mob/living/date = pick_n_take(valentines) - - - forge_valentines_objective(L, date) - forge_valentines_objective(date, L) - - if(valentines.len && prob(4)) - var/mob/living/notgoodenough = pick_n_take(valentines) - forge_valentines_objective(notgoodenough, date) - else - L.mind.add_antag_datum(/datum/antagonist/heartbreaker) - -/proc/forge_valentines_objective(mob/living/lover,mob/living/date) - lover.mind.special_role = "valentine" - var/datum/antagonist/valentine/V = new - V.date = date.mind - lover.mind.add_antag_datum(V) //These really should be teams but i can't be assed to incorporate third wheels right now - -/datum/round_event/valentines/announce(fake) - priority_announce("It's Valentine's Day! Give a valentine to that special someone!") - -/obj/item/valentine - name = "valentine" - desc = "A Valentine's card! Wonder what it says..." - icon = 'icons/obj/toy.dmi' - icon_state = "sc_Ace of Hearts_syndicate" // shut up - var/message = "A generic message of love or whatever." - resistance_flags = FLAMMABLE - w_class = WEIGHT_CLASS_TINY - -/obj/item/valentine/Initialize() - . = ..() - message = pick(strings(VALENTINE_FILE, "valentines")) - -/obj/item/valentine/attackby(obj/item/W, mob/user, params) - ..() - if(istype(W, /obj/item/pen) || istype(W, /obj/item/toy/crayon)) - if(!user.is_literate()) - to_chat(user, span_notice("You scribble illegibly on [src]!")) - return - var/recipient = stripped_input(user, "Who is receiving this valentine?", "To:", null , 20) - var/sender = stripped_input(user, "Who is sending this valentine?", "From:", null , 20) - if(!user.canUseTopic(src, BE_CLOSE)) - return - if(recipient && sender) - name = "valentine - To: [recipient] From: [sender]" - -/obj/item/valentine/examine(mob/user) - . = ..() - if(in_range(user, src) || isobserver(user)) - if(!(ishuman(user) || isobserver(user) || issilicon(user))) - user << browse("[name][stars(message)]", "window=[name]") - onclose(user, "[name]") - else - user << browse("[name][message]", "window=[name]") - onclose(user, "[name]") - else - . += span_notice("It is too far away.") - -/obj/item/valentine/attack_self(mob/user) - user.examinate(src) - -/obj/item/food/candyheart - name = "candy heart" - icon = 'icons/obj/holiday_misc.dmi' - icon_state = "candyheart" - desc = "A heart-shaped candy that reads: " - food_reagents = list(/datum/reagent/consumable/sugar = 2) - junkiness = 5 - -/obj/item/food/candyheart/Initialize() - . = ..() - desc = pick(strings(VALENTINE_FILE, "candyhearts")) - icon_state = pick("candyheart", "candyheart2", "candyheart3", "candyheart4") diff --git a/shiptest.dme b/shiptest.dme index 01c919f843..86d9841973 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -2016,8 +2016,6 @@ #include "code\modules\antagonists\traitor\equipment\Malf_Modules.dm" #include "code\modules\antagonists\traitor\equipment\module_picker.dm" #include "code\modules\antagonists\traitor\IAA\internal_affairs.dm" -#include "code\modules\antagonists\valentines\heartbreaker.dm" -#include "code\modules\antagonists\valentines\valentine.dm" #include "code\modules\antagonists\wizard\wizard.dm" #include "code\modules\antagonists\wizard\equipment\artefact.dm" #include "code\modules\antagonists\wizard\equipment\spellbook.dm" @@ -2382,7 +2380,6 @@ #include "code\modules\events\ghost_role\salesman.dm" #include "code\modules\events\ghost_role\sentience.dm" #include "code\modules\events\holiday\halloween.dm" -#include "code\modules\events\holiday\vday.dm" #include "code\modules\events\holiday\xmas.dm" #include "code\modules\events\ship\_ship.dm" #include "code\modules\events\ship\lottery.dm" diff --git a/strings/valentines.json b/strings/valentines.json deleted file mode 100644 index bf627c11fc..0000000000 --- a/strings/valentines.json +++ /dev/null @@ -1,127 +0,0 @@ -{ - "valentines": [ - "Roses are red / Violets are good / One day while Andy...", - "My love for you is like the singularity. It cannot be contained.", - "You make me lustier than a xenomorph maid.", - "We go together like the clown and the external airlock.", - "Roses are red / Liches are wizards / I love you more than a whole squad of lizards.", - "Be my valentine. Law 2.", - "You must be a mime, because you leave me speechless.", - "I love you like Ian loves the HoP.", - "You're hotter than a plasma fire in toxins.", - "We must have a wizard, because your face summoned magic.", - "Are you a hull breach? Because you're taking my breath away.", - "I'm not the atmos tech, but I'm great at laying pipe.", - "Could I have all access... to your heart?", - "Call me the medical doctor, because I'm here to inspect your johnson.", - "Quick, get the defibrillator! I saw you and my heart stopped.", - "I'm not a changeling, but you make my proboscis extend.", - "I just can't get EI NATH of you.", - "Roses are red / Intents are disarm / Not being my Valentine / causes human harm.", - "I want you more than an assistant wants the captain's spare.", - "If I was a security officer, I'd brig you all shift.", - "Are you the janitor? Because I think I've fallen for you.", - "You're always valid to my heart.", - "I'd risk the wrath of the gods to bwoink you.", - "You look as beautiful now as the last time you were cloned.", - "Someone check the gravitational generator, because I'm only attracted to you.", - "If I were the warden I'd always let you into my armory.", - "The virologist is rogue, and the only cure is a kiss from you.", - "You must be a silicon, because you've unbolted my heart.", - "There's no way you're rogue -- you're a fine piece of Asimov.", - "Are you Nar'Sie? Because there's nar-one else I sie.", - "You're more stunning than the entire armory.", - "Do you have stamina damage from running through my dreams?", - "My love for you is stronger than a reinforced wall.", - "This must be the captain's office, because I see a fox.", - "I'm no highlander, but there can only be one for me.", - "The floor is made of lava! Quick, get on my bed.", - "If you were an abandoned station you'd be the DEARelict.", - "If you had an ore bag you'd be a shaft FINEr.", - "I must be the CMO, 'cause I saw you on my CUTE sensors.", - "If you were a weather event you'd be an aurora BAElus.", - "Let's call the emergency CUDDLE.", - "Recall the shuttle, I want to stay here with you.", - "Could you put your DNA inside my vault?", - "Roses are red / Tide is gray / If I were an assistant I'd steal you away.", - "Roses are red / Text is green / I love you more than cleanbots clean.", - "Roses are red / Shuttles go dockside / I want to know you better than carbon dioxide.", - "Roses are red / Brute kits are pink / Let's go out like the lights in a powersink.", - "Roses are red / The hallways are dirty / I'll never leave your side / Just like shitcurity.", - "Roses are red / Clowns have a horn / You turn me on / More than library porn.", - "If you were a carp I'd fi-lay you.", - "My pinpointer only leads to your heart.", - "Is that an esword in your pocket, or are you excited to see me?", - "I've been chasing you like Runtime chases a laser pointer.", - "I'm no cat, but you've got me in my feel-inids.", - "If Lavaland had an apiary, would you bee mine?", - "If you were a disposal bin I'd ride you all day.", - "You're the vomit to my goose.", - "Get me my ore bag, I just found girlfriend material.", - "You must be liquid dark matter, because you're pulling me closer.", - "Not even sorium can drive me away from you.", - "Wanna make like a borg and do some heavy petting?", - "Are you powering the ship? Because you super matter to me.", - "I must be tripping on BZ, because I saw an angel walk by.", - "I wish science could make me a bag of holding you.", - "Did you visit the medbay after you fell from heaven?", - "Your beauty is rarer than an aurora caelus.", - "Wanna raid my tool storage?", - "You must be a moth, because you set my heart aflutter.", - "I'm the QM, and my highest priority bounty is your love.", - "Are you wearing space pants? Because I want to space your pants.", - "You give me a positive moodlet.", - "Let's make like swarmers and reproduce.", - "If you were a drone, would you be free tonight?", - "Get the paramedics -- your body put me into crit!", - "Come to the incinerator and be my maint squeeze.", - "Come to the courtroom so we can spend some time alone.", - "I'm the gray tide -- may I take your hand tele?", - "If I were a clown car, would you come inside me?", - "If you were telecoms, would you go down on me?", - "Your face gets me higher than omega weed.", - "Someone check the tachyon doppler array, because you just rocked my world.", - "I wish I were your family heirloom so I could be with you all the time.", - "How much damage does a toxins bomb do? Enough to break the ice.", - "Call me a gibtonite deposit, because I've got a lot of love to gib tonite.", - "I don't need an ion cannon, I've got my ion you.", - "I don't need the chef's cooking when you're such a snack!", - "Does the Chaplain know there's a goddess on board?", - "The captain just ordered Build Your Own Shuttle -- guess you'll have to sit on my face.", - "Let's get to a pod and share our internals.", - "Stand still so I can set your face to Wanted.", - "Did you just go through the teleporter? Because you're looking pretty fly.", - "Nice jumpsuit. It'd look even better thrown down disposals.", - "Heat up 5 parts cream, 5 parts lizard wine, and 1 part strange reagent to 374K, and you'll know what I can do for you." - ], - - "candyhearts": [ - "A heart-shaped candy that reads: HONK ME", - "A heart-shaped candy that reads: BWOINK ME", - "A heart-shaped candy that reads: ERP", - "A heart-shaped candy that reads: LEWD", - "A heart-shaped candy that reads: LUSTY", - "A heart-shaped candy that reads: SPESS LOVE", - "A heart-shaped candy that reads: VALIDTINES", - "A heart-shaped candy that reads: FACE HUGGER", - "A heart-shaped candy that reads: BOX OF HUGS", - "A heart-shaped candy that reads: PET ME", - "A heart-shaped candy that reads: TO THE DORMS", - "A heart-shaped candy that reads: TABLE ME", - "A heart-shaped candy that reads: HAND CUFFS", - "A heart-shaped candy that reads: SHAFT MINER", - "A heart-shaped candy that reads: Y-YOU T-TOO", - "A heart-shaped candy that reads: SINGULOVE", - "A heart-shaped candy that reads: GOT WOOD", - "A heart-shaped candy that reads: TFW NO GF", - "A heart-shaped candy that reads: WAG MY TAIL", - "A heart-shaped candy that reads: PDA", - "A heart-shaped candy that reads: DEVILS KISS", - "A heart-shaped candy that reads: CHEMISTRY", - "A heart-shaped candy that reads: CLUSTERBANG", - "A heart-shaped candy that reads: OBSESSED", - "A heart-shaped candy that reads: ROMANTIC MOODLET", - "A heart-shaped candy that reads: WAIFU", - "A heart-shaped candy that reads: YOU'RE PURRFECT" - ] -} From da7bfbfe7a654c6a3721035812f696721d1d710a Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sun, 5 Apr 2026 19:58:52 -0500 Subject: [PATCH 06/70] Automatic changelog generation for PR #5888 [ci skip] --- html/changelogs/AutoChangeLog-pr-5888.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5888.yml diff --git a/html/changelogs/AutoChangeLog-pr-5888.yml b/html/changelogs/AutoChangeLog-pr-5888.yml new file mode 100644 index 0000000000..ea3d0ff311 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5888.yml @@ -0,0 +1,5 @@ +author: Addust +changes: + - {rscdel: St. Valentine is no more. Expect no more incredibly peculiar + Valentine's Day cards or government-mandated dates.} +delete-after: true From d032cbe4044985e9f5b443a31b71a5c295951f8c Mon Sep 17 00:00:00 2001 From: Erika Fox <94164348+Erikafox@users.noreply.github.com> Date: Sun, 5 Apr 2026 21:11:45 -0400 Subject: [PATCH 07/70] More Chemistry / Hydroponics stuff in cargo (#5946) ## About The Pull Request Adds more chemistry stuff to cargo Adds a mostly-full hydroponics suite to cargo and categorizes hydroponics stuff into it's own category ## Changelog :cl: add: Outpost cargo now stocks intermediate and advanced chemical vials for hyposprays! add: you can now buy chem heaters and chemmasters in outpost cargo add: You can now buy hydroponics equipment in cargo del: biogenerator fabrication list trimmed imageadd: small hypospray vial sprite /:cl: --------- Signed-off-by: Erika Fox <94164348+Erikafox@users.noreply.github.com> Co-authored-by: zimon9 <122945887+zimon9@users.noreply.github.com> Co-authored-by: ritorizo <41831966+ritorizo@users.noreply.github.com> --- .../objects/items/stacks/sheets/leather.dm | 8 + code/game/objects/items/storage/boxes.dm | 10 ++ code/modules/cargo/blackmarket/packs/tools.dm | 10 ++ code/modules/cargo/packs/chemistry.dm | 35 ++-- code/modules/cargo/packs/food.dm | 87 ---------- code/modules/cargo/packs/hydroponics.dm | 152 ++++++++++++++++++ code/modules/cargo/packs/machinery.dm | 28 ---- code/modules/cargo/packs/medical.dm | 57 ++++++- code/modules/cargo/packs/ship_hardware.dm | 10 ++ .../reagents/reagent_containers/hypospray.dm | 2 +- .../reagents/reagent_containers/hypovial.dm | 40 +++++ .../reagents/reagent_containers/jug.dm | 5 + .../research/designs/biogenerator_designs.dm | 52 +----- icons/obj/chemical/chem_jug.dmi | Bin 2123 -> 1355 bytes icons/obj/chemical/hypovial.dmi | Bin 2302 -> 3096 bytes shiptest.dme | 1 + 16 files changed, 311 insertions(+), 186 deletions(-) create mode 100644 code/modules/cargo/packs/hydroponics.dm diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 59ff983d59..e3c0655f4e 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -135,6 +135,14 @@ GLOBAL_LIST_INIT(leather_recipes, list ( \ /obj/item/stack/sheet/leather/get_main_recipes() . = ..() . += GLOB.leather_recipes + +/obj/item/stack/sheet/leather/synthetic + name = "synthetic leather" + desc = "Fabricator extruded fibers woven into something approximating leather. It has an odd sheen." + singular_name = "synthetic leather piece" + icon_state = "sheet-leather" + item_state = "sheet-leather" + /* * Sinew */ diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index 3498814c11..2c6fc483fc 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -301,6 +301,16 @@ new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/ysiltane(src) new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/salbutamol(src) +/obj/item/storage/box/hypospray/mkiii/cargo + name = "hypospray mk. III kit" + +/obj/item/storage/box/hypospray/mkiii/PopulateContents() + new /obj/item/hypospray/mkii/mkiii(src) + new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/cureall(src) + new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/salglu(src) + new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/morphine(src) + new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/salbutamol(src) + /obj/item/storage/box/medigels name = "box of medical gels" desc = "A box full of medical gel applicators, with unscrewable caps and precision spray heads." diff --git a/code/modules/cargo/blackmarket/packs/tools.dm b/code/modules/cargo/blackmarket/packs/tools.dm index 2721e6cf0c..eeec19b19b 100644 --- a/code/modules/cargo/blackmarket/packs/tools.dm +++ b/code/modules/cargo/blackmarket/packs/tools.dm @@ -21,6 +21,16 @@ stock = 1 availability_prob = 25 +/datum/blackmarket_item/tool/mk3_hypo + name = "Mk3 Hypospray Kit" + desc = "Pretty sure the guy we got this from was about to do surgery. Well. Don't think they'll be doing anything now. Keh." + item = /obj/item/storage/box/hypospray/mkiii + + cost_min = 3000 + cost_max = 5000 + stock = 2 + availability_prob = 25 + /datum/blackmarket_item/tool/jaws name = "Jaws of Life" desc = "These prying jaws are useful for rescuing trapped victims. Or you know. Breaking into secure areas." diff --git a/code/modules/cargo/packs/chemistry.dm b/code/modules/cargo/packs/chemistry.dm index 988a2abcdc..a8d9f5e29b 100644 --- a/code/modules/cargo/packs/chemistry.dm +++ b/code/modules/cargo/packs/chemistry.dm @@ -56,6 +56,21 @@ contains = list(/obj/machinery/chem_press) crate_name = "pill press crate" +/* Machinery */ + +/datum/supply_pack/chemistry/chem_heater + name = "Chemical Heater Circuit Crate" + desc = "The circuitboard to a chemical heater - ideal for getting precise temperatures on chemicals!" + cost = 1000 + contains = list(/obj/item/circuitboard/machine/chem_heater) + +/datum/supply_pack/chemistry/chem_manipulator + name = "ChemMaster Circuit Crate" + desc = "The circuitboard to a ChemMaster chemistry machine. Great for organizing your chemicals." + cost = 2000 + contains = list(/obj/item/circuitboard/machine/chem_master) + + /* Bulk materials */ @@ -179,23 +194,3 @@ contains = list(/obj/item/reagent_containers/glass/chem_jug/sulfur) crate_name = "bulk sulfur crate" -/datum/supply_pack/chemistry/eznutriment - name = "Bulk E-Z-Nutriment Crate" - desc = "Contains a jug filled with 150u of E-Z-Nutriment." - cost = 300 - contains = list(/obj/item/reagent_containers/glass/chem_jug/eznutriment) - crate_name = "bulk E-Z-Nutriment crate" - -/datum/supply_pack/chemistry/left4zednutriment - name = "Bulk Left 4 Zed Crate" - desc = "Contains a jug filled with 150u of Left 4 Zed." - cost = 300 - contains = list(/obj/item/reagent_containers/glass/chem_jug/left4zednutriment) - crate_name = "bulk Left 4 Zed crate" - -/datum/supply_pack/chemistry/robustharvestnutriment - name = "Bulk Robust Harvest Crate" - desc = "Contains a jug filled with 150u of Robust Harvest." - cost = 300 - contains = list(/obj/item/reagent_containers/glass/chem_jug/robustharvestnutriment) - crate_name = "bulk Robust Harvest crate" diff --git a/code/modules/cargo/packs/food.dm b/code/modules/cargo/packs/food.dm index 069f72d276..a3fd60078a 100644 --- a/code/modules/cargo/packs/food.dm +++ b/code/modules/cargo/packs/food.dm @@ -428,93 +428,6 @@ crate_type = /obj/structure/closet/crate no_bundle = TRUE -/* - Botanical -*/ - -/datum/supply_pack/food/hydrotank - name = "Hydroponics Backpack Crate" - desc = "Bring on the flood with this high-capacity backpack crate. Contains 500 units of life-giving H2O." - cost = 750 - contains = list(/obj/item/watertank) - crate_name = "hydroponics backpack crate" - crate_type = /obj/structure/closet/crate/hydroponics - -/datum/supply_pack/food/gardening - name = "Gardening Crate" - desc = "Supplies for growing a great garden! Contains two bottles of ammonia, two Plant-B-Gone spray bottles, a hatchet, cultivator, plant analyzer, as well as a pair of leather gloves and a botanist's apron." - cost = 500 - contains = list(/obj/item/reagent_containers/spray/plantbgone, - /obj/item/reagent_containers/spray/plantbgone, - /obj/item/reagent_containers/glass/bottle/ammonia, - /obj/item/reagent_containers/glass/bottle/ammonia, - /obj/item/hatchet, - /obj/item/cultivator, - /obj/item/plant_analyzer, - /obj/item/clothing/gloves/botanic_leather, - /obj/item/clothing/suit/apron, - /obj/item/storage/box/disks_plantgene) - crate_name = "gardening crate" - crate_type = /obj/structure/closet/crate/hydroponics - -/datum/supply_pack/food/ethanol - name = "Ethanol Crate" - desc = "Contains one small bottle of ethanol for the aspiring botanist or amateur chemist." - cost = 100 - contains = list(/obj/item/reagent_containers/glass/bottle/ethanol) - crate_name = "gardening crate" - crate_type = /obj/structure/closet/crate/hydroponics - -/datum/supply_pack/food/weedcontrol - name = "Weed Control Crate" - desc = "Contains a scythe, gasmask, and two anti-weed defoliant grenades, for when your garden grows out of control." - cost = 200 - contains = list(/obj/item/scythe, - /obj/item/clothing/mask/gas, - /obj/item/grenade/chem_grenade/antiweed, - /obj/item/grenade/chem_grenade/antiweed) - crate_name = "weed control crate" - crate_type = /obj/structure/closet/crate/secure/hydroponics - -/datum/supply_pack/food/seeds - name = "Seeds Crate" - desc = "Big things have small beginnings. Contains fourteen different seeds." - cost = 150 - contains = list(/obj/item/seeds/chili, - /obj/item/seeds/cotton, - /obj/item/seeds/berry, - /obj/item/seeds/corn, - /obj/item/seeds/eggplant, - /obj/item/seeds/tomato, - /obj/item/seeds/soya, - /obj/item/seeds/wheat, - /obj/item/seeds/wheat/rice, - /obj/item/seeds/carrot, - /obj/item/seeds/sunflower, - /obj/item/seeds/chanter, - /obj/item/seeds/potato, - /obj/item/seeds/sugarcane) - crate_name = "seeds crate" - crate_type = /obj/structure/closet/crate/hydroponics - -/datum/supply_pack/food/exoticseeds - name = "Exotic Seeds Crate" - desc = "Any entrepreneuring botanist's dream. Contains eleven different seeds, including two mystery seeds!" - cost = 1000 - contains = list(/obj/item/seeds/nettle, - /obj/item/seeds/plump, - /obj/item/seeds/liberty, - /obj/item/seeds/amanita, - /obj/item/seeds/reishi, - /obj/item/seeds/bamboo, - /obj/item/seeds/eggplant/eggy, - /obj/item/seeds/rainbow_bunch, - /obj/item/seeds/rainbow_bunch, - /obj/item/seeds/random, - /obj/item/seeds/random) - crate_name = "exotic seeds crate" - crate_type = /obj/structure/closet/crate/hydroponics - /* Bees */ diff --git a/code/modules/cargo/packs/hydroponics.dm b/code/modules/cargo/packs/hydroponics.dm new file mode 100644 index 0000000000..1b42d62cbb --- /dev/null +++ b/code/modules/cargo/packs/hydroponics.dm @@ -0,0 +1,152 @@ +/datum/supply_pack/gardening + category = "Hydroponics & Gardening" + crate_name = "gardening crate" + crate_type = /obj/structure/closet/crate/hydroponics + + + +/* + Botanical +*/ + +/datum/supply_pack/gardening/starter + name = "Starter Gardening Crate" + desc = "Supplies for starting a great garden! Contains two bottles of ammonia, two Plant-B-Gone spray bottles, a hatchet, cultivator, plant analyzer, as well as a pair of leather gloves and a botanist's apron." + cost = 500 + contains = list( + /obj/item/reagent_containers/spray/plantbgone, + /obj/item/reagent_containers/spray/plantbgone, + /obj/item/reagent_containers/glass/bottle/ammonia, + /obj/item/reagent_containers/glass/bottle/ammonia, + /obj/item/hatchet, + /obj/item/cultivator, + /obj/item/plant_analyzer, + /obj/item/clothing/gloves/botanic_leather, + /obj/item/clothing/suit/apron, + ) + +/datum/supply_pack/gardening/hydrotank + name = "Hydroponics Backpack Crate" + desc = "Bring on the flood with this high-capacity backpack crate. Contains 500 units of life-giving H2O." + cost = 750 + contains = list(/obj/item/watertank) + crate_name = "hydroponics backpack crate" + crate_type = /obj/structure/closet/crate/hydroponics + + +/datum/supply_pack/gardening/seeds + name = "Seeds Crate" + desc = "Big things have small beginnings. Contains fourteen different seeds." + cost = 150 + contains = list( + /obj/item/seeds/chili, + /obj/item/seeds/cotton, + /obj/item/seeds/berry, + /obj/item/seeds/corn, + /obj/item/seeds/eggplant, + /obj/item/seeds/tomato, + /obj/item/seeds/soya, + /obj/item/seeds/wheat, + /obj/item/seeds/wheat/rice, + /obj/item/seeds/carrot, + /obj/item/seeds/sunflower, + /obj/item/seeds/chanter, + /obj/item/seeds/potato, + /obj/item/seeds/sugarcane + ) + crate_name = "seeds crate" + +/datum/supply_pack/gardening/teceti_seeds + name = "Tecetian Seed Crate" + desc = "A starter set of Frontier-friendly Tecetian flora. Contains 6 seeds." + cost = 150 + contains = list( + /obj/item/seeds/refa_li, + /obj/item/seeds/siti, + /obj/item/seeds/sososi, + /obj/item/seeds/dote_berries, + /obj/item/seeds/dotu_fime, + /obj/item/seeds/fara_li, + ) + crate_name = "seeds crate" + +/* Gardening Chems */ + +/datum/supply_pack/gardening/bulkethanol + name = "Bulk Ethanol Crate" + desc = "Contains a jug filled with ethanol." + cost = 200 + contains = list(/obj/item/reagent_containers/glass/chem_jug/ethanol) + +/datum/supply_pack/gardening/eznutriment + name = "Bulk E-Z-Nutriment Crate" + desc = "Contains a jug filled with 150u of E-Z-Nutriment." + cost = 300 + contains = list(/obj/item/reagent_containers/glass/chem_jug/eznutriment) + crate_name = "bulk E-Z-Nutriment crate" + +/datum/supply_pack/gardening/left4zednutriment + name = "Bulk Left 4 Zed Crate" + desc = "Contains a jug filled with 150u of Left 4 Zed." + cost = 300 + contains = list(/obj/item/reagent_containers/glass/chem_jug/left4zednutriment) + crate_name = "bulk Left 4 Zed crate" + +/datum/supply_pack/gardening/robustharvestnutriment + name = "Bulk Robust Harvest Crate" + desc = "Contains a jug filled with 150u of Robust Harvest." + cost = 300 + contains = list(/obj/item/reagent_containers/glass/chem_jug/robustharvestnutriment) + crate_name = "bulk Robust Harvest crate" + +/datum/supply_pack/gardening/endurogrownutrient + name = "Bulk Enduro Grow Crate" + desc = "Contains a jug filled with 150u of Enduro Grow." + cost = 500 + contains = list(/obj/item/reagent_containers/glass/chem_jug/endurogrow) + crate_name = "bulk Enduro Grow crate" + +/datum/supply_pack/gardening/liquidearthquakenutrient + name = "Bulk Liquid Earthquake Crate" + desc = "Contains a jug filled with 150u of Liquid Earthquake." + cost = 500 + contains = list(/obj/item/reagent_containers/glass/chem_jug/liquidearthquake) + crate_name = "bulk Enduro Grow crate" + +/datum/supply_pack/gardening/weedcontrol + name = "Weed Control Crate" + desc = "Contains two bottles of weed spray, for when your garden grows out of control." + cost = 200 + contains = list( + /obj/item/reagent_containers/spray/weedspray, + /obj/item/reagent_containers/spray/weedspray + ) + +/datum/supply_pack/gardening/pestcontrol + name = "Pest Control Crate" + desc = "Contains two bottles of pest spray, for when your garden grows out of control." + cost = 200 + contains = list( + /obj/item/reagent_containers/spray/pestspray, + /obj/item/reagent_containers/spray/pestspray + ) + +/* Machinery */ + +/datum/supply_pack/gardening/tray + name = "Hydroponics Circuit Crate" + desc = "One circuitboard for construction of a hydroponics tray. Perfect for busy spacers looking to grow something on their ship." + cost = 1000 + contains = list(/obj/item/circuitboard/machine/hydroponics) + +/datum/supply_pack/gardening/seed_extractor + name = "Seed Extractor Crate" + desc = "One circuitboard for construction of a stationary seed extractor. Allows storing and sorting the seeds from plants." + cost = 1000 + contains = list(/obj/item/circuitboard/machine/seed_extractor) + +/datum/supply_pack/gardening/biogenerator + name = "Biogenerator Crate" + desc = "One circuitboard for construction of a Biogenerator, an advanced fabricator designed to make biological compounds out of a bio-slurry." + cost = 3000 + contains = list(/obj/item/circuitboard/machine/biogenerator) diff --git a/code/modules/cargo/packs/machinery.dm b/code/modules/cargo/packs/machinery.dm index e52a0408f4..5164b2da31 100644 --- a/code/modules/cargo/packs/machinery.dm +++ b/code/modules/cargo/packs/machinery.dm @@ -214,34 +214,6 @@ Miscellaneous machines */ -/datum/supply_pack/machinery/gravgen - name = "Ship-Portable Gravity Generator Crate" - desc = "For those tired of their tools floating away from them. Contains a single gravity generator." - cost = 2000 - contains = list(/obj/machinery/power/ship_gravity/unanchored) - crate_name = "gravity generator crate" - crate_type = /obj/structure/closet/crate/engineering/electrical - no_bundle = TRUE - -/datum/supply_pack/machinery/breach_shield_gen - name = "Anti-breach Shield Projector Crate" - desc = "Hull breaches again? Say no more with the Makosso Technologies Anti-Breach Shield Projector! Uses forcefield technology to keep the air in, and the space out. Contains one shield projector." - cost = 1250 - contains = list(/obj/machinery/shieldgen) - crate_name = "anti-breach shield projector crate" - crate_type = /obj/structure/closet/crate/secure/plasma - no_bundle = TRUE - -/datum/supply_pack/ship_hardware/wall_shield_gen - name = "Shield Generator Crate" - desc = "These two shield wall generators are guaranteed to keep any unwanted lifeforms on the outside, where they belong! Not rated for containing singularities or tesla balls." - cost = 1000 - contains = list(/obj/machinery/power/shieldwallgen, - /obj/machinery/power/shieldwallgen) - crate_name = "shield generators crate" - crate_type = /obj/structure/closet/crate/secure/plasma - no_bundle = TRUE - /datum/supply_pack/machinery/drill_crate name = "Heavy duty laser mining drill" desc = "An experimental laser-based mining drill that Makoso-Warra is kindly allowing YOU, the customer, to opt into testing of." diff --git a/code/modules/cargo/packs/medical.dm b/code/modules/cargo/packs/medical.dm index 74626e579b..4f5bb282ee 100644 --- a/code/modules/cargo/packs/medical.dm +++ b/code/modules/cargo/packs/medical.dm @@ -201,13 +201,17 @@ /datum/supply_pack/medical/mkiii_hypo name = "mk.III Hypospray kit" desc = "Contains a Matahari Pharmaceutical mk.III Hypospray, for on the field medical care. Comes with an assortment of Ready-To-Go Vials" - cost = 2000 - contains = list(/obj/item/storage/box/hypospray/mkiii) + cost = 2500 + contains = list(/obj/item/storage/box/hypospray/mkiii/cargo) crate_name = "mk.III hypospray crate" faction = /datum/faction/warra faction_locked = TRUE faction_discount = 0 +/datum/supply_pack/medical/mkiii_hypo/cybersun + desc = "Contains a mk.III Cybersun Hypospray, for on the field medical care. Comes with an assortment of Ready-To-Go Vials" + faction = /datum/faction/syndicate/cybersun + /datum/supply_pack/medical/vials faction = /datum/faction/warra faction_discount = 50 @@ -229,6 +233,24 @@ ) crate_name = "indomide vial crate" +/datum/supply_pack/medical/vials/hadr_vial + name = "Hadrakine Vial Crate" + desc = "Contains a spare hadrakine vial, for usage in a Hypospray." + cost = 600 + contains = list( + /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/hadrakine, + ) + crate_name = "hadrakine vial crate" + +/datum/supply_pack/medical/vials/silf_vial + name = "Silfrine Vial Crate" + desc = "Contains a spare silfrine vial, for usage in a Hypospray." + cost = 800 + contains = list( + /obj/item/reagent_containers/glass/bottle/vial/tiny/preloaded/silfrine, + ) + crate_name = "silfrine vial crate" + /datum/supply_pack/medical/vials/alvi_vial name = "Alvitane Vial Crate" desc = "Contains a spare alvitane vial, for usage in a Hypospray." @@ -238,15 +260,42 @@ ) crate_name = "alvitane vial crate" -/datum/supply_pack/medical/vials/dylo_vial +/datum/supply_pack/medical/vials/quar_vial + name = "Quardexane Vial Crate" + desc = "Contains a spare quardexane vial, for usage in a Hypospray." + cost = 600 + contains = list( + /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/quardexane, + ) + crate_name = "quardexane vial crate" + +/datum/supply_pack/medical/vials/ysil_vial + name = "Ysiltane Vial Crate" + desc = "Contains a spare ysiltane vial, for usage in a Hypospray." + cost = 800 + contains = list( + /obj/item/reagent_containers/glass/bottle/vial/tiny/preloaded/ysiltane, + ) + crate_name = "ysiltane vial crate" + +/datum/supply_pack/medical/vials/panc_vial name = "Pancrazine Vial Crate" - desc = "Contains a spare dylovene vial, for usage in a Hypospray." + desc = "Contains a spare pancrazine vial, for usage in a Hypospray." cost = 400 contains = list( /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/pancrazine, ) crate_name = "pancrazine vial crate" +/datum/supply_pack/medical/vials/gjal_vial + name = "Gjalrazine Vial Crate" + desc = "Contains a spare gjalrazine vial, for usage in a Hypospray." + cost = 800 + contains = list( + /obj/item/reagent_containers/glass/bottle/vial/tiny/preloaded/gjalrazine, + ) + crate_name = "gjalrazine vial crate" + /datum/supply_pack/medical/vials/dexa_vial name = "Dexalin Vial Crate" desc = "Contains a spare dexalin vial, for usage in a Hypospray." diff --git a/code/modules/cargo/packs/ship_hardware.dm b/code/modules/cargo/packs/ship_hardware.dm index a2dd15ad9f..badc6dd391 100644 --- a/code/modules/cargo/packs/ship_hardware.dm +++ b/code/modules/cargo/packs/ship_hardware.dm @@ -15,6 +15,16 @@ crate_type = /obj/structure/closet/crate/engineering/electrical no_bundle = TRUE +/datum/supply_pack/ship_hardware/wall_shield_gen + name = "Shield Generator Crate" + desc = "These two shield wall generators are guaranteed to keep any unwanted lifeforms on the outside, where they belong! Not rated for containing singularities or tesla balls." + cost = 1000 + contains = list(/obj/machinery/power/shieldwallgen, + /obj/machinery/power/shieldwallgen) + crate_name = "shield generators crate" + crate_type = /obj/structure/closet/crate/secure/plasma + no_bundle = TRUE + /datum/supply_pack/ship_hardware/breach_shield_gen name = "Anti-breach Shield Projector Crate" desc = "Hull breaches again? Say no more with the Makosso Technologies Anti-Breach Shield Projector! Uses forcefield technology to keep the air in, and the space out. Contains one shield projector." diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 1f24190b70..96b879b560 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -339,7 +339,7 @@ /obj/item/reagent_containers/hypospray/medipen/badstop/update_icon_state() . = ..() - if(reagents.total_volume > 30) + if(reagents.total_volume >= 30) icon_state = base_icon_state return icon_state = "[base_icon_state][(reagents.total_volume > 0) ? 1 : 0]" diff --git a/code/modules/reagents/reagent_containers/hypovial.dm b/code/modules/reagents/reagent_containers/hypovial.dm index 64d3fc1fd2..0d93bd3016 100644 --- a/code/modules/reagents/reagent_containers/hypovial.dm +++ b/code/modules/reagents/reagent_containers/hypovial.dm @@ -60,6 +60,8 @@ /obj/item/reagent_containers/glass/bottle/vial/tiny name = "small hypovial" + icon_state = "hypovial-small" + volume = 30 //Shouldn't be possible to get this without adminbuse /obj/item/reagent_containers/glass/bottle/vial/small @@ -121,11 +123,34 @@ unique_reskin = null +/obj/item/reagent_containers/glass/bottle/vial/tiny/preloaded + +/obj/item/reagent_containers/glass/bottle/vial/tiny/preloaded/silfrine + name = "small red hypovial (silfrine)" + icon_state = "hypovial-b-small" + comes_with = list(/datum/reagent/medicine/silfrine = 30) + +/obj/item/reagent_containers/glass/bottle/vial/tiny/preloaded/ysiltane + name = "small orange hypovial (ysiltane)" + icon_state = "hypovial-k-small" + comes_with = list(/datum/reagent/medicine/ysiltane = 30) + +/obj/item/reagent_containers/glass/bottle/vial/tiny/preloaded/gjalrazine + name = "small green hypovial (gjalrazine)" + icon_state = "hypovial-a-small" + comes_with = list(/datum/reagent/medicine/gjalrazine = 30) + /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/indomide name = "red hypovial (indomide)" icon_state = "hypovial-b" comes_with = list(/datum/reagent/medicine/indomide = 60) +/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/hadrakine + name = "red hypovial (hadrakine)" + desc = "Set hypospray to 'spray' before use!" + icon_state = "hypovial-b" + comes_with = list(/datum/reagent/medicine/hadrakine = 60) + /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/pancrazine name = "green hypovial (pancrazine)" icon_state = "hypovial-a" @@ -136,11 +161,21 @@ icon_state = "hypovial-k" comes_with = list(/datum/reagent/medicine/alvitane = 60) +/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/quardexane + name = "orange hypovial (quardexane)" + icon_state = "hypovial-k" + comes_with = list(/datum/reagent/medicine/quardexane = 60) + /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/dexalin name = "blue hypovial (dexalin)" icon_state = "hypovial-d" comes_with = list(/datum/reagent/medicine/dexalin = 60) +/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/salbutamol + name = "blue hypovial (salbutamol)" + icon_state = "hypovial-d" + comes_with = list(/datum/reagent/medicine/salbutamol = 60) + /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/cureall name = "hypovial (cureall)" icon_state = "hypovial" @@ -229,6 +264,11 @@ icon_state = "hypoviallarge-k" comes_with = list(/datum/reagent/medicine/synthflesh = 120) +/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/morphine + name = "large hypovial (morphine)" + icon_state = "hypoviallarge-t" + comes_with = list(/datum/reagent/medicine/morphine = 120) + /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/combat name = "combat hypovial" icon_state = "hypoviallarge-t" diff --git a/code/modules/reagents/reagent_containers/jug.dm b/code/modules/reagents/reagent_containers/jug.dm index d22e752e34..5c49c8c552 100644 --- a/code/modules/reagents/reagent_containers/jug.dm +++ b/code/modules/reagents/reagent_containers/jug.dm @@ -105,6 +105,11 @@ icon_state = "chem_jug_copper" list_reagents = list(/datum/reagent/copper = 150) +/obj/item/reagent_containers/glass/chem_jug/ethanol + name = "chemical jug (ethanol)" + icon_state = "chem_jug_copper" + list_reagents = list(/datum/reagent/consumable/ethanol = 150) + /obj/item/reagent_containers/glass/chem_jug/fluorine name = "chemical jug (fluorine)" icon_state = "chem_jug_fluorine" diff --git a/code/modules/research/designs/biogenerator_designs.dm b/code/modules/research/designs/biogenerator_designs.dm index c59131e228..9105df81d9 100644 --- a/code/modules/research/designs/biogenerator_designs.dm +++ b/code/modules/research/designs/biogenerator_designs.dm @@ -58,14 +58,6 @@ make_reagents = list(/datum/reagent/consumable/flour = 10) category = list("initial","Food") -/datum/design/monkey_cube - name = "Monkey Cube" - id = "mcube" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 250) - build_path = /obj/item/food/monkeycube - category = list("initial","Food") - /datum/design/ez_nut //easy nut :) name = "25u E-Z Nutrient" id = "ez_nut" @@ -143,47 +135,15 @@ id = "leather" build_type = BIOGENERATOR materials = list(/datum/material/biomass= 150) - build_path = /obj/item/stack/sheet/leather - category = list("initial","Organic Materials") - -/datum/design/secbelt - name = "Security Belt" - id = "secbelt" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 300) - build_path = /obj/item/storage/belt/security - category = list("initial","Organic Materials") - -/datum/design/medbelt - name = "Medical Belt" - id = "medbel" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 300) - build_path = /obj/item/storage/belt/medical - category = list("initial","Organic Materials") - -/datum/design/janibelt - name = "Janitorial Belt" - id = "janibelt" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 300) - build_path = /obj/item/storage/belt/janitor + build_path = /obj/item/stack/sheet/leather/synthetic category = list("initial","Organic Materials") -/datum/design/plantbelt - name = "Botanical Belt" - id = "plantbelt" +/datum/design/meatproduct + name = "Synthetic Meat Product" + id = "meats" build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 300) - build_path = /obj/item/storage/belt/plant - category = list("initial","Organic Materials") - -/datum/design/s_holster - name = "Shoulder Holster" - id = "s_holster" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 400) - build_path = /obj/item/clothing/accessory/holster + materials = list(/datum/material/biomass= 150) + build_path = /obj/item/food/meat/slab/meatproduct category = list("initial","Organic Materials") /datum/design/rngplant diff --git a/icons/obj/chemical/chem_jug.dmi b/icons/obj/chemical/chem_jug.dmi index e5ab15a43e14a23660ba7126daa44330f11d1aa2..76806f36bba1985d511f01154ddd366c6d84b7f9 100644 GIT binary patch delta 1349 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 diff --git a/icons/obj/chemical/hypovial.dmi b/icons/obj/chemical/hypovial.dmi index 608af9f77bb3264dab6023cdeb19ffda72118a34..4ff8bd82cbe801f7c44cd169bb0423d957ad719e 100644 GIT binary patch literal 3096 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 EZzWFcuK)l5 literal 2302 zcmaJ@XH*kd77n3z6qO{M8i39>D1e6vCC6I&(v+mB!u4jL|ckem(ymRio-~GP(G9B#Bi3-UI0RR9| zh_&TKj;-LFWC1?TeaFxDD95}^aCV8Y^pEz73WCN2MT7$Y@g=Acj98lDq4a4P^o-?) z;M%2uw}GbU@^EZFF;p#kU9n5`pKN}}Zp-VVNt9Vu(ukRYz$~F-7V;JuQN(7vn4?lHRQj}&_~-j^z+CkszgRXV ztK8;Qanw@G^yPva61J`?YuZ&n>~7?*wNhAZ(aeu^x}VyqUNK{{KkM&h_Q#P}kXH?b zPhYQKc4Hf(m<%begyE7i4U2-?tc~bf^Q@jT`2KX!A6a9A!nJEiyX!~ZgtRGf^-`tY z%~GT_z^6PaxoPW>{)}O=v_@b$%#&Z9_=;+ym)Ycr?HkV;J?F-n9`L7a&cv9l5J56# zu?E>uY98%(yzfBZ3hcZ!s zDvCo5NRGBfd^fqeHa8h9FxzJB` zc>&XSxjW66ZQv29;1WN%qu@_dEwCi%RJeDTn>j9rJ@Fuayk5P_C2k~tURPWDmS%oh zHuBywK5sHdy%eEzpajR`rjak1Sr{bN>>tLWyTbS4S^dGL7;8L?$ z87;!|nPe?HSTh1t`eMmJ8}F{aYu$Ca9fmGAp)9if>j~}&Pt)q%1Dd-sr~Cn{nv`Lp z*ETif`%;Dw+^FRCQNaz-o48WuB{0Hyf{G@4b;0^esLh*oZ*$yfq<;q zE#-Zbxuh;SF|-n3@EEZgLirLTVFY=pr*TKH&F4qHiUgpnSz@P!tI@L#g%L@MMg$;v zhLyp|WIoe!1O$jz0_!|A>Q2;fBS-hidItcbK#G|&9o~OT^xqovjl18&^IJ%3&x+1| z?qQ{I`KJEf9x8%iToplpc^aX4PwgcBL<~Ato?Piv$4mHJBBp3gSxe1hba%ti5*S3= zm-eeYd}Zul+z7MMsg##qRALLDF?a*kBSa26e3Fy^DYV`j&i6j(&rpruCoXf;-n<@; zj#wNt4cODeHF(=*R!&v+&X6E zv4E+>Z=K+p+Od2{c zm^c!HmCW>wefgR8)O2s#EF^o5VRZkdn~t}?{sWR}U2DMDd$Mc61@K{;ll+KR*ifLD zMnSTBG^D@|+peNFv&cgZp1irh6WRh#Y*F*x!}>Rm-qnTBEyI0#7UckkC81<`sIs#y zxW2ID4nRY#BB)E$!vRvYtyA#7iv533-w&~p2c-zDOyMVgNUjzUKYhz<$ zxK^r)DQ}!)l>GPd_%jt(wiSI}In~C0MF(Ni@ZI)?kQM&U)*Hs}CMSP3+?$;9#IK*R zi|qyK^gdc6?X$)ZPJW+{xx2#uF5izMj&InD^5v9q(>FehO)V*C8xG#)qq Date: Sun, 5 Apr 2026 20:38:11 -0500 Subject: [PATCH 08/70] Automatic changelog generation for PR #5946 [ci skip] --- html/changelogs/AutoChangeLog-pr-5946.yml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5946.yml diff --git a/html/changelogs/AutoChangeLog-pr-5946.yml b/html/changelogs/AutoChangeLog-pr-5946.yml new file mode 100644 index 0000000000..9347bd5012 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5946.yml @@ -0,0 +1,9 @@ +author: Erikafox +changes: + - {rscadd: Outpost cargo now stocks intermediate and advanced chemical vials + for hyposprays!} + - {rscadd: you can now buy chem heaters and chemmasters in outpost cargo} + - {rscadd: You can now buy hydroponics equipment in cargo} + - {rscdel: biogenerator fabrication list trimmed} + - {imageadd: small hypospray vial sprite} +delete-after: true From 1bfb4f3f8cd2f01f2dac25ce9566fb695497072b Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 6 Apr 2026 02:03:20 +0000 Subject: [PATCH 09/70] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-5888.yml | 5 ----- html/changelogs/AutoChangeLog-pr-5946.yml | 9 --------- html/changelogs/AutoChangeLog-pr-6110.yml | 4 ---- html/changelogs/archive/2026-04.yml | 13 +++++++++++++ 4 files changed, 13 insertions(+), 18 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-5888.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-5946.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-6110.yml diff --git a/html/changelogs/AutoChangeLog-pr-5888.yml b/html/changelogs/AutoChangeLog-pr-5888.yml deleted file mode 100644 index ea3d0ff311..0000000000 --- a/html/changelogs/AutoChangeLog-pr-5888.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Addust -changes: - - {rscdel: St. Valentine is no more. Expect no more incredibly peculiar - Valentine's Day cards or government-mandated dates.} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-5946.yml b/html/changelogs/AutoChangeLog-pr-5946.yml deleted file mode 100644 index 9347bd5012..0000000000 --- a/html/changelogs/AutoChangeLog-pr-5946.yml +++ /dev/null @@ -1,9 +0,0 @@ -author: Erikafox -changes: - - {rscadd: Outpost cargo now stocks intermediate and advanced chemical vials - for hyposprays!} - - {rscadd: you can now buy chem heaters and chemmasters in outpost cargo} - - {rscadd: You can now buy hydroponics equipment in cargo} - - {rscdel: biogenerator fabrication list trimmed} - - {imageadd: small hypospray vial sprite} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-6110.yml b/html/changelogs/AutoChangeLog-pr-6110.yml deleted file mode 100644 index 0184c7df5e..0000000000 --- a/html/changelogs/AutoChangeLog-pr-6110.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: generalthrax -changes: - - {rscadd: Brought back darker Makosso blue} -delete-after: true diff --git a/html/changelogs/archive/2026-04.yml b/html/changelogs/archive/2026-04.yml index c9a8a99495..e1ea513448 100644 --- a/html/changelogs/archive/2026-04.yml +++ b/html/changelogs/archive/2026-04.yml @@ -34,3 +34,16 @@ 2026-04-05: thearbiber: - rscadd: srm hardsuit digi fix +2026-04-06: + Addust: + - rscdel: St. Valentine is no more. Expect no more incredibly peculiar Valentine's + Day cards or government-mandated dates. + Erikafox: + - rscadd: Outpost cargo now stocks intermediate and advanced chemical vials for + hyposprays! + - rscadd: you can now buy chem heaters and chemmasters in outpost cargo + - rscadd: You can now buy hydroponics equipment in cargo + - rscdel: biogenerator fabrication list trimmed + - imageadd: small hypospray vial sprite + generalthrax: + - rscadd: Brought back darker Makosso blue From 2ffe8f3eacac7a8dc9b0a6d236f1b115652f20ca Mon Sep 17 00:00:00 2001 From: Samantha Yule Fireheart Date: Tue, 7 Apr 2026 15:35:19 -0700 Subject: [PATCH 10/70] Puru-Rangi auxiliary NGR vessel (#5926) ## About The Pull Request This PR adds the Puru-Rangi-class auxiliary response vessel to the NGR's ship roster. ### Screenshots image image image
### Crew - 1 Captain - 1 Lieutenant - 2 Medical Doctors (1 surgeon and 1 field medic) - 1 Mechanic - 1 Operative - 1 Wrecker - 1 Crewman ### Key Features image The bridge is accessible to all members of the crew, ensuring command staff are not isolated from roleplay opportunities, and continuing in line with NGR's egalitarian work culture. This combination transit section also ensures the infinite hallway of doom is avoided, a complaint levied against the Kali Andhi. As this vessel is less military-oriented, a communal bridge design like this is also representative of the Puru-Rangi's more casual design.

image The infirmary is organized and well-equipped, boasting two recovery rooms, which players have indicated is a popular feature of the Valor that encourages roleplay. An advanced chemistry space ensures the surgeon has plentiful tools at their disposal to work while the field medic is out with the away team, and is accessible to all crew as not to isolate them from roleplay opportunities.

image A dedicated rest area in the cargo bay further expresses the Puru-Rangi's more casual design as a less military-oriented vessel, provides a space for crew who are zoned out after an away mission to get together and roleplay instead of standing around in silence, and provides an alternative space for crew who wish to get away from the bridge to roleplay in smaller groups.

image This storage area provides various supplies to the vessel and ensures the main cargo area remains uncluttered. Contents include: - A materials crate with glass and iron - A rations crate, in case of longer rounds or dietary restriction oversights - A blood freezer, to be used by the infirmary - An organ freezer, to be used by the infirmary - A chemistry crate, with supplies for, at least, Hadrakine Powder, Morphine, and Charcoal

image The kitchen is stocked with ingredients for Southwestern USA cuisine, providing for soups, breakfast foods, and tortillas. Vegetarian, gluten-free, and dairy-free foods can all be created with this selection of produce. This is in line with musings by the lore team about New Gorlex cuisine, as it is an arid environment.

image Engineering's very own storage area provides additional supplies apart from the vessel's primary storage. Contents include: - A materials crate with glass, iron, and a small amount of plastitanium - A fuel crate, with both plasma and uranium enough to last most of an average shift - A patriotism crate, offering a little flavor and opportunity to the mechanic

image A full telecommunications apparatus provides the Puru-Rangi with the means to communicate with those vessels boasting a relay, and to streamline communications between its own crew members.

image A well-equipped mechanic's office represents NGR's strong GEC presence, and encourages their involvement in work with the away team so they are not isolated in the engineering sections for most of the round.

image A starboard airlock provides an accessible, rearward route of exit and entry, ensuring crew are not trapped in a fire, and providing a route to the infirmary that does not involve climbing stairs (for those characters who impose such restrictions on themselves).
## Why It's Good For The Game This vessel fulfills the request of the maptainers to provide the community with a less military-oriented medical vessel equipped with telecommunications equipment. It contains a versatile cast of personnel to remain in line with current Shiptest meta, ensuring players are not sitting around bored when there are no medical calls to answer. ## Changelog :cl: Yule & Addust add: Added the Puru-Rangi-class auxiliary response vessel /:cl: --------- Signed-off-by: Addust <80979251+Addust@users.noreply.github.com> Co-authored-by: Addust <80979251+Addust@users.noreply.github.com> --- _maps/configs/ngr_pururangi.json | 62 + _maps/shuttles/ngr/ngr_pururangi.dmm | 7883 +++++++++++++++++ code/game/MapData/shuttles/ngr_pururangi.dm | 19 + .../clothing/outfits/factions/syndicate.dm | 31 +- shiptest.dme | 3 +- 5 files changed, 7994 insertions(+), 4 deletions(-) create mode 100644 _maps/configs/ngr_pururangi.json create mode 100644 _maps/shuttles/ngr/ngr_pururangi.dmm create mode 100644 code/game/MapData/shuttles/ngr_pururangi.dm diff --git a/_maps/configs/ngr_pururangi.json b/_maps/configs/ngr_pururangi.json new file mode 100644 index 0000000000..4dfa0c2eee --- /dev/null +++ b/_maps/configs/ngr_pururangi.json @@ -0,0 +1,62 @@ +{ + "faction": "/datum/faction/syndicate/ngr", + "prefix": "NGRV", + "manufacturer": "Hardline Salvage and Mining", + "namelists": [ + "GORLEX", + "NATURAL", + "BEASTS", + "CRUISE" + ], + "map_name": "Puru-Rangi-class Auxiliary Response Vessel", + "map_short_name": "Puru-Rangi-class", + "tranist_x_offset": -21, + "tranist_y_offset": -11, + "description": "While destroyers and patrol craft maintain the Republic's borders, it is the Puru-Rangi that ensures that there are not unprotected gaps in its territory. These response vessels are a common sight within the Second Battlegroup's auxiliary fleet, providing a versatile complement of personnel for disaster response and military escort. While their relative size renders them impractical to manufacture on a large scale, their communications equipment and diverse crew are valuable assets for coordinating and leading quick response forces staged in the backline.", + "tags": [ + "RP Focus", + "Combat", + "Medical", + "Telecomms" + ], + "map_path": "_maps/shuttles/ngr/ngr_pururangi.dmm", + "map_id": "syndicate_gorlex_pururangi", + "limit": 1, + "job_slots": { + "Captain": { + "outfit": "/datum/outfit/job/syndicate/captain/ngr/stripped", + "officer": true, + "slots": 1 + }, + "Lieutenant": { + "outfit": "/datum/outfit/job/syndicate/hos/ngr/stripped", + "officer": true, + "slots": 1 + }, + "Medical Doctor": { + "outfit": "/datum/outfit/job/syndicate/doctor/ngr/stripped", + "slots": 1 + }, + "Field Medic": { + "outfit": "/datum/outfit/job/syndicate/paramedic/ngr/stripped", + "slots": 1 + }, + "Mechanic": { + "outfit": "/datum/outfit/job/syndicate/engineer/ngr/stripped", + "slots": 1 + }, + "Operative": { + "outfit": "/datum/outfit/job/syndicate/security/ngr", + "slots": 1 + }, + "Wrecker": { + "outfit": "/datum/outfit/job/syndicate/miner/ngr", + "slots": 1 + }, + "Crewman": { + "outfit": "/datum/outfit/job/syndicate/assistant/ngr", + "slots": 1 + } + }, + "enabled": true +} diff --git a/_maps/shuttles/ngr/ngr_pururangi.dmm b/_maps/shuttles/ngr/ngr_pururangi.dmm new file mode 100644 index 0000000000..9d330c0dec --- /dev/null +++ b/_maps/shuttles/ngr/ngr_pururangi.dmm @@ -0,0 +1,7883 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ae" = ( +/obj/machinery/light/floor{ + icon_state = "floor-on" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"af" = ( +/obj/structure/table/reinforced, +/obj/structure/closet/wall/white/directional/east{ + name = "fridge cabinet" + }, +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/obj/item/food/meat/slab, +/obj/item/food/meat/slab, +/obj/item/food/meat/slab, +/obj/item/food/meat/slab, +/obj/item/food/grown/chili, +/obj/item/food/grown/chili, +/obj/item/food/grown/chili, +/obj/item/food/grown/chili, +/obj/item/food/grown/chili, +/obj/item/food/grown/chili, +/obj/item/food/grown/ghost_chili, +/obj/item/food/grown/ghost_chili, +/obj/item/food/grown/tomato, +/obj/item/food/grown/tomato, +/obj/item/food/grown/tomato, +/obj/item/food/grown/tomato, +/obj/item/food/grown/soybeans, +/obj/item/food/grown/soybeans, +/obj/item/food/grown/soybeans, +/obj/item/food/grown/soybeans, +/obj/item/food/grown/soybeans, +/obj/item/food/grown/soybeans, +/obj/item/food/grown/potato, +/obj/item/food/grown/potato, +/obj/item/food/grown/corn, +/obj/item/food/grown/corn, +/obj/item/food/grown/eggplant, +/obj/item/food/grown/eggplant, +/obj/item/food/grown/carrot, +/obj/item/food/grown/carrot, +/turf/open/floor/plastic, +/area/ship/crew) +"ag" = ( +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/corner/opaque/tan/three_quarters{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"an" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/obj/effect/turf_decal/corner/opaque/beige/half{ + dir = 4 + }, +/obj/machinery/newscaster/directional/west, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew) +"ap" = ( +/obj/structure/chair/sofa/brown/old/right, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"az" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen/full, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"aC" = ( +/obj/effect/turf_decal/industrial/outline/red, +/obj/machinery/portable_atmospherics/pump, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/plasteel/tech, +/area/ship/storage) +"aD" = ( +/obj/machinery/firealarm/directional/east, +/obj/structure/extinguisher_cabinet/directional/east{ + pixel_y = -11 + }, +/obj/structure/closet/toolcloset, +/obj/effect/turf_decal/industrial/outline/grey, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"aP" = ( +/obj/machinery/bluespace_drive{ + icon_state = "bsdrive_right" + }, +/turf/open/floor/plasteel/tech, +/area/ship/storage) +"ba" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/item/radio/intercom/directional/north, +/obj/item/reagent_containers/food/drinks/coffee{ + pixel_y = 13; + pixel_x = 9 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"bd" = ( +/obj/effect/turf_decal/stairs{ + dir = 2; + color = "#575757" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"bf" = ( +/obj/structure/chair/office/dark{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/bottlegreen/three_quarters{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/beige, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"bg" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/computer/helm/viewscreen/directional/west, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/obj/effect/turf_decal/corner/opaque/beige/half{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew) +"bk" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/light/small/directional/west, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/ship/maintenance/starboard) +"bm" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/effect/turf_decal/techfloor{ + dir = 5 + }, +/obj/structure/closet/secure_closet/engineering_personal{ + populate = 0 + }, +/obj/item/clothing/shoes/workboots, +/obj/item/storage/backpack/industrial, +/obj/item/clothing/under/syndicate/ngr, +/obj/item/clothing/suit/hazardvest/ngr, +/obj/item/clothing/accessory/armband/engine, +/obj/item/clothing/head/hardhat/ngr, +/obj/item/storage/belt/utility, +/obj/item/clothing/suit/hooded/wintercoat/security/ngr, +/obj/item/clothing/mask/balaclava/ngr, +/obj/item/clothing/head/ngr, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/gloves/color/yellow, +/obj/item/radio/headset/alt, +/obj/item/storage/backpack/duffelbag/engineering, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/neck/shemagh/ngr, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"bs" = ( +/obj/effect/spawner/bunk_bed, +/obj/structure/curtain/cloth/grey, +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/turf/open/floor/carpet/red, +/area/ship/crew) +"bt" = ( +/obj/machinery/porta_turret/ship/ngr/light{ + dir = 10; + id = "puru_turrets" + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/storage) +"bA" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 10 + }, +/obj/effect/turf_decal/corner/opaque/beige/half{ + dir = 1 + }, +/obj/item/storage/backpack/duffelbag/syndie/med{ + pixel_y = 12 + }, +/obj/item/healthanalyzer{ + pixel_x = -9; + pixel_y = 10 + }, +/obj/item/healthanalyzer{ + pixel_x = -9; + pixel_y = 2 + }, +/obj/item/sensor_device{ + pixel_x = 12; + pixel_y = 12 + }, +/obj/item/pinpointer/crew{ + pixel_x = 8; + pixel_y = 3 + }, +/obj/item/clothing/suit/ngr/smock, +/obj/item/storage/belt/medical, +/obj/item/clothing/head/ngr/surgical, +/obj/item/storage/pouch/medical{ + pixel_y = -9; + pixel_x = -9 + }, +/obj/item/storage/belt/medical/webbing{ + pixel_y = -6 + }, +/obj/item/clothing/glasses/hud/health{ + pixel_x = 7; + pixel_y = -3 + }, +/obj/item/clothing/glasses/hud/health{ + pixel_x = 7; + pixel_y = -10 + }, +/obj/structure/closet/secure_closet/wall/directional/south{ + icon_door = "med_wall"; + req_access_txt = "5" + }, +/obj/item/clothing/neck/shemagh/ngr, +/obj/item/clothing/neck/shemagh/ngr, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"bC" = ( +/obj/effect/turf_decal/techfloor{ + dir = 9 + }, +/obj/item/clothing/suit/space/hardsuit/syndi/ngr, +/obj/item/clothing/mask/gas/syndicate, +/obj/machinery/suit_storage_unit/inherit/locked{ + req_access_txt = "3" + }, +/obj/item/tank/jetpack/oxygen/harness, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"bN" = ( +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"bR" = ( +/obj/structure/platform/military, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/ship/crew/cryo) +"bS" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/machinery/holopad/secure, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"bV" = ( +/obj/structure/table/reinforced, +/obj/structure/bedsheetbin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/item/towel{ + pixel_x = 6; + pixel_y = 5 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/plastic, +/area/ship/crew/toilet) +"ci" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/hatch/orange, +/obj/machinery/portable_atmospherics/canister/hydrogen, +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"cm" = ( +/obj/structure/railing/thin{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/machinery/computer/crew{ + dir = 8 + }, +/obj/item/radio/intercom/wideband/table{ + dir = 4; + pixel_y = -18; + layer = 2.9 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"co" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/turf/open/floor/carpet/red, +/area/ship/crew/dorm/commad) +"cw" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/line, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/directional/south, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"cF" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/structure/chair/plastic{ + color = "#999999"; + dir = 1; + layer = 2; + pixel_y = 3; + pixel_x = -4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"cG" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/item/radio/intercom/directional/north, +/obj/item/reagent_containers/condiment/milk{ + pixel_y = 13; + pixel_x = 3 + }, +/obj/item/reagent_containers/condiment/soymilk{ + pixel_y = 13; + pixel_x = -8 + }, +/obj/item/storage/fancy/egg_box{ + pixel_y = 7 + }, +/turf/open/floor/plastic, +/area/ship/crew) +"cK" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "5-8" + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"cV" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/manifold/yellow/visible{ + dir = 4 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/engineering) +"db" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = -11 + }, +/obj/effect/turf_decal/techfloor{ + dir = 10 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plastic, +/area/ship/crew/toilet) +"de" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/shrink_cw, +/obj/machinery/camera/autoname{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"ds" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/line, +/obj/machinery/camera/autoname{ + dir = 10 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"dv" = ( +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/structure/platform/military{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"dy" = ( +/obj/effect/turf_decal/techfloor{ + dir = 5 + }, +/obj/structure/closet/wall/directional/east{ + name = "sundries cabinet" + }, +/obj/item/clothing/neck/shemagh/ngr, +/obj/item/clothing/neck/shemagh/ngr, +/obj/item/clothing/mask/balaclava/ngr, +/obj/item/clothing/mask/balaclava/ngr, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/head/ngr, +/obj/item/clothing/head/ngr, +/obj/item/clothing/head/ngr/flap, +/obj/item/clothing/head/ngr/flap, +/turf/open/floor/carpet/red, +/area/ship/crew) +"dR" = ( +/obj/structure/railing/thin/corner{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/beige/mono, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 19; + pixel_y = -12 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/airalarm/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/cryo) +"dW" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1; + layer = 2.04 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/corner/opaque/red/half, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/security/armory) +"ee" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"eg" = ( +/obj/machinery/button/door{ + name = "armory shutters control"; + id = "puru_armory_shutters"; + dir = 4; + pixel_x = -21; + pixel_y = 8; + req_access_txt = "3" + }, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/red/half{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/security/armory) +"eh" = ( +/obj/structure/crate_shelf, +/obj/structure/closet/crate/chem, +/obj/effect/turf_decal/techfloor, +/obj/item/reagent_containers/glass/chem_jug/aluminium, +/obj/item/reagent_containers/glass/beaker/sulphuric, +/obj/item/reagent_containers/glass/beaker/sulphuric, +/obj/item/reagent_containers/glass/chem_jug/carbon, +/obj/item/reagent_containers/condiment/sugar, +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/condiment/saltshaker, +/turf/open/floor/plasteel/tech/grid, +/area/ship/cargo) +"ei" = ( +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/light/small/directional/west, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/pod/dark, +/area/ship/maintenance/starboard) +"ek" = ( +/obj/effect/turf_decal/techfloor{ + dir = 5 + }, +/obj/machinery/light/directional/north, +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"el" = ( +/obj/structure/rack, +/obj/item/roller{ + pixel_y = 14; + pixel_x = -7 + }, +/obj/effect/turf_decal/techfloor, +/obj/item/roller{ + pixel_y = 6; + pixel_x = 4 + }, +/obj/item/melee/sledgehammer/gorlex, +/obj/item/trench_tool{ + pixel_x = -5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/cargo) +"eo" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 10 + }, +/obj/machinery/cryopod{ + dir = 1 + }, +/obj/structure/platform/military{ + dir = 4 + }, +/turf/open/floor/pod/dark, +/area/ship/crew/cryo) +"ep" = ( +/turf/closed/wall/mineral/plastitanium, +/area/ship/security/armory) +"ev" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"eA" = ( +/obj/structure/crate_shelf, +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/obj/structure/closet/crate/freezer/surplus_limbs/organs, +/turf/open/floor/plasteel/tech/grid, +/area/ship/cargo) +"eG" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"eH" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/airlock/grunge{ + name = "Infirmary Recovery Room A" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/medical) +"eJ" = ( +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/structure/platform/military{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"eN" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"eS" = ( +/obj/effect/turf_decal/techfloor, +/obj/structure/cable/yellow{ + icon_state = "6-9" + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"eX" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -21; + pixel_y = -13 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"eY" = ( +/obj/structure/table, +/obj/machinery/coffeemaker{ + pixel_y = 2 + }, +/obj/effect/turf_decal/techfloor{ + dir = 10 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"fa" = ( +/obj/effect/turf_decal/corner/opaque/beige/mono, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew) +"fg" = ( +/obj/structure/platform/military{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/engineering) +"fn" = ( +/obj/structure/platform/military{ + dir = 1; + layer = 2.08 + }, +/obj/machinery/suit_storage_unit/inherit, +/obj/item/clothing/suit/space/syndicate/ngr, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/head/helmet/space/syndicate/ngr, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"fp" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 6 + }, +/obj/structure/sign/poster/official/work_for_a_future{ + pixel_x = -32 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"fq" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/structure/table/reinforced, +/obj/item/clipboard{ + pixel_x = 4; + pixel_y = 7 + }, +/obj/item/folder/syndicate{ + pixel_x = 8; + pixel_y = 6 + }, +/obj/item/pen{ + pixel_x = 4; + pixel_y = 5 + }, +/obj/item/desk_flag/ngr{ + pixel_x = -14; + pixel_y = 19 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"fr" = ( +/obj/structure/table/optable, +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"fw" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/railing/thin{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"fO" = ( +/obj/effect/turf_decal/corner_steel_grid{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/obj/item/radio/intercom/directional/north, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engines/starboard) +"fY" = ( +/obj/machinery/button/door{ + dir = 8; + pixel_y = -1; + pixel_x = 10; + name = "bridge shutters control"; + id = "puru_bridge_shutters" + }, +/obj/machinery/button/door{ + dir = 8; + pixel_y = 10; + pixel_x = 10; + name = "exterior shutters control"; + id = "puru_exterior_shutters" + }, +/obj/machinery/button/door{ + dir = 8; + pixel_y = 10; + pixel_x = -1; + name = "cargo bay blast doors control"; + id = "puru_cargo_blastdoors" + }, +/obj/machinery/button/shieldwallgen{ + dir = 8; + pixel_x = -3; + pixel_y = 1; + name = "cargo bay holofield switch"; + id = "puru_cargo_holofield" + }, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"fZ" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/item/paper, +/obj/item/pen/fountain{ + pixel_y = -2; + pixel_x = -2 + }, +/obj/item/clothing/glasses/regular{ + pixel_y = 7; + pixel_x = -3 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"gf" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/machinery/suit_storage_unit/inherit, +/obj/item/clothing/suit/space/syndicate/surplus, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/head/helmet/space/syndicate/surplus, +/obj/machinery/camera/autoname, +/turf/open/floor/pod/dark, +/area/ship/maintenance/starboard) +"gi" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"gk" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"gn" = ( +/obj/machinery/atmospherics/pipe/layer_manifold, +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/locked, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/maintenance/starboard) +"gp" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/airlock/grunge{ + name = "Infirmary Closet" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/medical) +"gw" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/airlock/grunge{ + name = "Cryopod Room" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew/cryo) +"gz" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/grunge{ + dir = 4; + name = "Bridge" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/bridge) +"gH" = ( +/obj/structure/railing/thin/corner{ + dir = 8 + }, +/obj/item/radio/intercom/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/item/reagent_containers/food/drinks/beer{ + pixel_y = 12; + pixel_x = 10 + }, +/obj/item/reagent_containers/food/drinks/beer{ + pixel_y = 16 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"gI" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/sign/poster/official/moth/hardhats{ + pixel_x = 32 + }, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"gM" = ( +/obj/effect/turf_decal/techfloor{ + dir = 10 + }, +/obj/machinery/suit_storage_unit/inherit/locked{ + req_access_txt = "3" + }, +/obj/item/clothing/suit/space/syndicate/ngr, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/tank/jetpack/oxygen/harness, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"gR" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/machinery/computer/helm{ + dir = 8; + icon_state = "computer-right" + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"gS" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/bridge) +"gV" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/machinery/vending/coffee, +/turf/open/floor/plasteel/mono/dark, +/area/ship/hallway/aft) +"gW" = ( +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 10 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/light_switch{ + pixel_x = 11; + pixel_y = 21 + }, +/obj/machinery/button/door{ + dir = 8; + pixel_y = 8; + pixel_x = 21; + name = "port thrusters blast door control"; + id = "puru_thrusters_port_blastdoors" + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/port) +"ha" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/machinery/vending/cigarette, +/turf/open/floor/plasteel/mono/dark, +/area/ship/hallway/aft) +"hb" = ( +/obj/structure/platform/military{ + dir = 1; + layer = 2.08 + }, +/obj/effect/turf_decal/techfloor{ + dir = 1; + layer = 2.04 + }, +/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer1{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"hf" = ( +/obj/machinery/door/poddoor{ + dir = 4; + id = "puru_cargo_blastdoors" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/engine/hull/reinforced/interior, +/area/ship/cargo) +"hj" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"hq" = ( +/obj/machinery/porta_turret/ship/ngr/light{ + dir = 6; + id = "puru_turrets" + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/crew) +"hD" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "puru_exterior_shutters"; + dir = 1 + }, +/obj/structure/grille, +/turf/open/floor/plating, +/area/ship/crew) +"hL" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/airlock/grunge{ + name = "Infirmary Recovery Room B" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/medical) +"hQ" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 5 + }, +/obj/effect/turf_decal/corner/opaque/beige/half, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"hZ" = ( +/obj/machinery/door/airlock/security{ + req_access_txt = "3"; + dir = 4; + name = "Armory" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security/armory) +"ie" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "engine fuel pump" + }, +/obj/machinery/airalarm/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engines/starboard) +"if" = ( +/obj/structure/closet/crate/bin, +/obj/effect/spawner/random/trash/garbage, +/obj/effect/turf_decal/techfloor{ + layer = 2.04 + }, +/obj/machinery/camera/autoname{ + dir = 10 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"ir" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen/three_quarters{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/machinery/firealarm/directional/east, +/obj/structure/closet/wall/directional/north{ + name = "radio closet" + }, +/obj/item/radio{ + pixel_y = 8; + pixel_x = -8 + }, +/obj/item/radio{ + pixel_y = 8 + }, +/obj/item/radio{ + pixel_y = 8; + pixel_x = 8 + }, +/obj/item/radio{ + pixel_x = -8 + }, +/obj/item/radio, +/obj/item/radio, +/obj/item/radio, +/obj/item/radio{ + pixel_x = 8 + }, +/turf/open/floor/pod/dark, +/area/ship/crew/cryo) +"iA" = ( +/obj/machinery/camera/autoname{ + dir = 10 + }, +/obj/machinery/light/floor{ + icon_state = "floor-on" + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"iE" = ( +/obj/effect/turf_decal/borderfloorblack{ + dir = 1 + }, +/obj/machinery/light/floor{ + icon_state = "floor-on" + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"iK" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"iL" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 5 + }, +/obj/effect/turf_decal/corner/opaque/beige/half, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"iW" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/structure/grille, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "puru_exterior_shutters"; + dir = 1 + }, +/turf/open/floor/plating, +/area/ship/cargo) +"jb" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/shrink_ccw, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"jf" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/engineering) +"ji" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/item/radio/intercom/directional/east, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"jA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/corner{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"jB" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plastic, +/area/ship/crew/toilet) +"jJ" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 5 + }, +/obj/effect/turf_decal/corner/opaque/beige/half, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"jK" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/light_switch{ + pixel_x = -12; + pixel_y = 21 + }, +/obj/machinery/recharger{ + pixel_y = 8; + pixel_x = 8 + }, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/techfloor{ + dir = 5; + pixel_x = -2 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"jO" = ( +/obj/structure/chair/sofa/brown/old/left, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"jR" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"ke" = ( +/obj/effect/turf_decal/borderfloorblack, +/obj/machinery/camera/autoname{ + dir = 10 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"kh" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"ks" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen/three_quarters, +/obj/effect/turf_decal/corner/opaque/beige{ + dir = 1 + }, +/obj/machinery/airalarm/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"kx" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"kC" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/line, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"kI" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/components/trinary/filter/atmos/n2{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/outline/grey, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"kK" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/shrink_cw{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"kL" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"kN" = ( +/obj/structure/railing/thin{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/obj/machinery/fax/syndicate, +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 1 + }, +/obj/structure/table/reinforced, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"kS" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/shrink_ccw{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"kW" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/structure/chair/handrail, +/obj/effect/turf_decal/trimline/opaque/bar/warning{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"kX" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/airlock/hatch{ + fast_close = 1; + req_access_txt = "10"; + name = "Life Support" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"la" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/dorm/commad) +"lf" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/airlock/engineering{ + dir = 4; + name = "Cargo Bay" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/cargo) +"lj" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = 13 + }, +/obj/structure/closet/crate/engineering{ + name = "relay crate" + }, +/obj/effect/mapping_helpers/crate_shelve, +/obj/item/circuitboard/machine/telecomms/relay, +/obj/item/circuitboard/machine/telecomms/relay, +/obj/item/stock_parts/subspace/filter, +/obj/item/stock_parts/subspace/filter, +/obj/item/stock_parts/subspace/filter, +/obj/item/stock_parts/subspace/filter, +/obj/item/stock_parts/manipulator, +/obj/item/stock_parts/manipulator, +/obj/item/stack/cable_coil/white, +/obj/item/stock_parts/subspace/transmitter, +/obj/item/stock_parts/subspace/transmitter, +/obj/item/stock_parts/subspace/transmitter, +/obj/item/stock_parts/subspace/transmitter, +/obj/item/stock_parts/subspace/transmitter, +/obj/item/stock_parts/subspace/transmitter, +/obj/item/stock_parts/subspace/transmitter, +/obj/item/stock_parts/subspace/transmitter, +/obj/item/stock_parts/manipulator, +/obj/item/stock_parts/manipulator, +/turf/open/floor/plasteel/tech, +/area/ship/storage) +"lm" = ( +/obj/structure/bed/pod{ + dir = 4 + }, +/obj/machinery/iv_drip, +/obj/structure/curtain, +/obj/item/bedsheet/medical{ + dir = 1 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"ln" = ( +/obj/structure/cable/yellow{ + icon_state = "1-10" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/machinery/firealarm/directional/east, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/starboard) +"lo" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/emcloset/wall/directional/east, +/turf/open/floor/plasteel/tech, +/area/ship/storage) +"lp" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"lq" = ( +/obj/effect/turf_decal/borderfloorwhite{ + color = "#57967f"; + dir = 1 + }, +/obj/machinery/button/door{ + dir = 4; + pixel_y = -15; + pixel_x = -21; + name = "recovery room privacy shutters control"; + id = "puru_medroom_fore_shutters" + }, +/obj/item/radio/intercom/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"ls" = ( +/obj/effect/turf_decal/borderfloorwhite{ + color = "#57967f" + }, +/obj/structure/chair/handrail{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"lv" = ( +/obj/machinery/light_switch{ + pixel_x = 12; + pixel_y = 23 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/closet/emcloset/wall/directional/north, +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/shrink_ccw{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"lw" = ( +/obj/machinery/light/floor{ + icon_state = "floor-on" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"ly" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/hatch/orange, +/obj/machinery/portable_atmospherics/canister/hydrogen, +/obj/machinery/camera/autoname, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"lA" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/machinery/vending/sustenance, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"lB" = ( +/obj/effect/turf_decal/stairs{ + dir = 6; + color = "#575757" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/structure/railing/thin/corner, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer1, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"lC" = ( +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 1 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/turf/open/floor/carpet/red, +/area/ship/crew/dorm/commad) +"lF" = ( +/obj/structure/table/wood, +/obj/item/toy/cards/deck/syndicate{ + pixel_y = 10; + pixel_x = 5 + }, +/obj/item/toy/cards/deck/tarot{ + pixel_x = -7; + pixel_y = 3 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"lM" = ( +/obj/machinery/computer/security{ + dir = 1; + icon_state = "computer-right" + }, +/obj/effect/turf_decal/techfloor{ + dir = 10 + }, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/plasteel/mono/dark, +/area/ship/security/armory) +"lS" = ( +/obj/structure/table/chem, +/obj/item/reagent_containers/glass/beaker/large{ + pixel_y = 12; + pixel_x = -6 + }, +/obj/item/reagent_containers/glass/beaker{ + pixel_x = 5; + pixel_y = 13 + }, +/obj/item/reagent_containers/glass/beaker/large{ + pixel_y = 4; + pixel_x = -2 + }, +/obj/item/reagent_containers/glass/beaker{ + pixel_x = 9; + pixel_y = 4 + }, +/obj/effect/turf_decal/corner/opaque/bottlegreen/full, +/obj/machinery/newscaster/directional/east, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"lU" = ( +/obj/effect/turf_decal/techfloor{ + dir = 10 + }, +/obj/structure/filingcabinet/double/grey{ + dir = 8; + pixel_x = 10 + }, +/obj/item/folder/syndicate, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = 12 + }, +/obj/item/clipboard, +/obj/item/folder/red, +/obj/item/folder/blue, +/obj/item/folder/syndicate, +/obj/item/pen/fourcolor, +/obj/structure/cable/yellow, +/turf/open/floor/carpet/red, +/area/ship/crew/dorm/commad) +"lW" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/door/airlock/engineering{ + dir = 4; + name = "Cargo Bay" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/cargo) +"lY" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/structure/plaque{ + pixel_y = 28; + engraved = 1; + name = "Puru-Rangi commemoration plaque"; + desc = "Ranginui, god of the sky, rains grievous tears upon the soil of his beloved Papatūānuku, and at times he storms in desperation to reach her. Puru-Rangi, a prayer to soothe his yearning heart, deprives the wind of its power, rendering gentle the would-be torrent." + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"ml" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"mr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"mv" = ( +/obj/effect/turf_decal/borderfloorblack{ + dir = 8 + }, +/obj/machinery/camera/autoname{ + dir = 4 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"mA" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/effect/turf_decal/techfloor{ + dir = 9 + }, +/obj/machinery/suit_storage_unit/inherit/industrial, +/obj/item/clothing/suit/space/syndicate/engie, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/head/helmet/space/syndicate/engie, +/obj/item/tank/jetpack/oxygen/harness, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"mE" = ( +/obj/structure/crate_shelf, +/obj/effect/turf_decal/techfloor, +/obj/machinery/camera/autoname{ + dir = 10 + }, +/obj/item/stack/sheet/metal/twenty{ + pixel_y = 2; + pixel_x = -2 + }, +/obj/item/stack/sheet/glass/twenty{ + pixel_x = 4; + pixel_y = 3 + }, +/obj/structure/closet/crate/engineering{ + name = "materials crate" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/cargo) +"mF" = ( +/turf/closed/wall/mineral/plastitanium, +/area/ship/medical) +"mI" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"mU" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/trimline/opaque/bar/filled/line, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"mY" = ( +/obj/effect/turf_decal/techfloor, +/obj/item/radio/intercom/directional/north, +/obj/machinery/camera/autoname{ + dir = 5 + }, +/obj/machinery/telecomms/processor/preset_one{ + network = "ngr_commnet"; + autolinkers = list("processor4","bus") + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/engineering/communications/room) +"na" = ( +/obj/effect/turf_decal/techfloor{ + dir = 10 + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"nb" = ( +/obj/effect/turf_decal/borderfloorwhite{ + color = "#57967f"; + dir = 1 + }, +/obj/machinery/button/door{ + dir = 8; + pixel_y = -15; + pixel_x = 21; + name = "recovery room privacy shutters control"; + id = "puru_medroom_aft_shutters" + }, +/obj/item/radio/intercom/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"nk" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"nl" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/arrow_ccw{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"nm" = ( +/obj/machinery/porta_turret/ship/ngr/light{ + dir = 9; + id = "puru_turrets" + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering/communications/room) +"nt" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 19; + pixel_y = -12 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/light/directional/north, +/obj/structure/closet/crate/bin, +/obj/effect/spawner/random/trash/garbage, +/obj/effect/turf_decal/industrial/outline/grey, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"nv" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "puru_bridge_shutters"; + dir = 4 + }, +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/structure/grille, +/obj/machinery/door/firedoor/heavy, +/turf/open/floor/plating, +/area/ship/bridge) +"nA" = ( +/obj/structure/platform/military/corner, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/ship/crew/cryo) +"nL" = ( +/obj/machinery/porta_turret/ship/ngr/light{ + dir = 5; + id = "puru_turrets" + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/cargo) +"nQ" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"oa" = ( +/obj/structure/chair/comfy/grey{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/turf/open/floor/carpet/red, +/area/ship/crew/dorm/commad) +"ob" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"oc" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/pod/dark, +/area/ship/engineering/communications/room) +"ou" = ( +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"oy" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/shrink_cw{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"oS" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/airlock/grunge{ + name = "Crew Quarters" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew) +"oV" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/structure/table/reinforced, +/obj/item/radio/intercom/table{ + pixel_x = 6; + pixel_y = 2; + dir = 4 + }, +/obj/item/desk_flag/ngr{ + pixel_x = -10; + pixel_y = 10 + }, +/obj/item/pen/red{ + pixel_x = -5; + pixel_y = -7 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"oX" = ( +/obj/machinery/atmospherics/pipe/layer_manifold{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/machinery/computer/atmos_control/tank/air_tank/pururangi{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"pe" = ( +/obj/machinery/door/poddoor{ + dir = 4; + id = "puru_thrusters_port_blastdoors" + }, +/obj/machinery/power/smes/shuttle/precharged, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/window/plasma/reinforced/spawner/west, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/port) +"pg" = ( +/obj/structure/chair/sofa/brown/old/right{ + dir = 8 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"pr" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/door/airlock/grunge{ + name = "Bridge" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/bridge) +"ps" = ( +/obj/structure/chair/handrail, +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 5 + }, +/obj/effect/turf_decal/corner/opaque/beige/half, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/item/radio/intercom/directional/north, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"pB" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 5 + }, +/obj/effect/turf_decal/corner/opaque/beige/half, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"pE" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/trimline/opaque/bar/filled/shrink_cw{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"pJ" = ( +/obj/machinery/porta_turret/ship/ngr/light{ + dir = 10; + id = "puru_turrets" + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/maintenance/starboard) +"pO" = ( +/obj/structure/bed/pod, +/obj/machinery/iv_drip, +/obj/structure/curtain, +/obj/item/bedsheet/medical, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"pT" = ( +/obj/effect/turf_decal/industrial/outline/red, +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/plasteel/tech, +/area/ship/storage) +"qb" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen/three_quarters{ + dir = 4 + }, +/obj/item/reagent_containers/glass/bucket{ + pixel_x = -8; + pixel_y = 7 + }, +/obj/structure/sink{ + pixel_y = 20 + }, +/obj/effect/decal/cleanable/vomit/old, +/obj/effect/turf_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/ship/crew/cryo) +"qc" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/storage) +"qg" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/cargo) +"qi" = ( +/obj/structure/table/chem, +/obj/item/reagent_containers/glass/rag{ + pixel_y = 14; + pixel_x = -5 + }, +/obj/structure/closet/wall/chem/directional/north{ + icon_door = "med_wall"; + icon_state = "freezer_wall"; + name = "chemistry supplies cabinet" + }, +/obj/effect/turf_decal/corner/opaque/bottlegreen/full, +/obj/machinery/light/directional/west, +/obj/item/stock_parts/capacitor{ + pixel_x = -9; + pixel_y = 4 + }, +/obj/item/stock_parts/scanning_module{ + pixel_x = 10; + pixel_y = 8 + }, +/obj/item/lighter, +/obj/item/reagent_containers/glass/filter{ + pixel_x = 4; + pixel_y = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"qn" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/airlock/grunge{ + name = "Infirmary Morgue" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/medical) +"qo" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 5 + }, +/obj/effect/turf_decal/corner/opaque/beige/half, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"qq" = ( +/obj/structure/railing/thin{ + dir = 8 + }, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"qr" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/effect/turf_decal/techfloor{ + layer = 2.04 + }, +/obj/structure/table/reinforced, +/obj/item/flashlight/lamp{ + pixel_x = -6; + pixel_y = 3 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"qD" = ( +/obj/structure/railing/thin/corner, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"qG" = ( +/obj/effect/turf_decal/techfloor{ + dir = 5 + }, +/obj/structure/sign/flag/ngr{ + pixel_y = 32 + }, +/obj/machinery/computer/atmos_control/external/pururangi{ + dir = 8; + icon_state = "computer-left" + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"qH" = ( +/obj/structure/sink{ + dir = 8; + pixel_x = 14; + pixel_y = 5 + }, +/obj/machinery/button/door{ + dir = 8; + pixel_y = -12; + pixel_x = 21; + name = "restroom door bolt control"; + id = "puru_restroom_doorbolts"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/structure/mirror{ + pixel_x = 28; + pixel_y = 7 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plastic, +/area/ship/crew/toilet) +"qJ" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/airlock/grunge{ + name = "Bridge" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/bridge) +"qN" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/structure/chair/plastic{ + color = "#999999"; + dir = 8; + layer = 2; + pixel_y = 9; + pixel_x = 3 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"qO" = ( +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/structure/platform/military{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"qS" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/cryo) +"qU" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/gun/ballistic/automatic/smg/sidewinder/no_mag, +/obj/item/gun/ballistic/automatic/pistol/rattlesnake/no_mag, +/obj/item/gun/ballistic/automatic/pistol/asp/no_mag, +/obj/structure/guncloset{ + anchored = 1; + req_access_txt = "3" + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"rk" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/toxin{ + pixel_x = 3; + pixel_y = 10 + }, +/obj/effect/turf_decal/borderfloorwhite{ + color = "#57967f"; + dir = 1 + }, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"rl" = ( +/obj/effect/turf_decal/techfloor{ + layer = 2.04 + }, +/obj/item/radio/intercom/directional/south, +/obj/structure/table, +/obj/item/coffee_cartridge/fancy/mocha{ + pixel_x = 5; + pixel_y = 10 + }, +/obj/item/coffee_cartridge/fancy/blue{ + pixel_x = -1; + pixel_y = 7 + }, +/obj/item/coffee_cartridge/fancy/roast{ + pixel_y = 4; + pixel_x = -6 + }, +/obj/item/storage/fancy/coffee_cart_rack{ + pixel_x = 9; + pixel_y = -1 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"rm" = ( +/obj/machinery/porta_turret/ship/ngr/light{ + dir = 5; + id = "puru_turrets" + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/cargo) +"rn" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/line{ + dir = 1 + }, +/obj/machinery/light_switch{ + pixel_x = -12; + pixel_y = 21 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"rz" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"rN" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -16; + pixel_x = -12 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/line, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"rT" = ( +/obj/effect/turf_decal/corner/opaque/beige/mono, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/structure/railing/thin{ + dir = 9 + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/cryo) +"rV" = ( +/obj/structure/platform/military{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/engineering) +"sd" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/machinery/computer/cargo{ + dir = 8; + icon_state = "computer-middle" + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"sg" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating, +/area/ship/engineering/engines/starboard) +"si" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"sj" = ( +/obj/effect/turf_decal/techfloor, +/obj/machinery/telecomms/hub{ + autolinkers = list("hub","bus","relay","broadcasterG","receiverG"); + id = "Communications Hub"; + network = "ngr_commnet" + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/engineering/communications/room) +"st" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/hallway/fore) +"sz" = ( +/obj/machinery/power/smes/engineering, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/structure/platform/military{ + dir = 1; + layer = 2.08 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"sF" = ( +/obj/structure/table/reinforced, +/obj/item/cutting_board{ + pixel_y = 5; + pixel_x = 2 + }, +/obj/item/melee/knife, +/obj/item/kitchen/rollingpin{ + pixel_y = 4; + pixel_x = -2 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 11; + pixel_y = 2 + }, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_y = 2; + pixel_x = 6 + }, +/obj/effect/turf_decal/techfloor{ + dir = 10 + }, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_y = 17; + pixel_x = -10 + }, +/turf/open/floor/plastic, +/area/ship/crew) +"sG" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating, +/area/ship/engineering/engines/port) +"sN" = ( +/obj/effect/turf_decal/techfloor/corner, +/obj/effect/turf_decal/techfloor{ + dir = 5 + }, +/obj/structure/closet/secure_closet/armorycage{ + anchored = 1; + name = "ammunition locker"; + locked = 0; + req_access = null; + req_access_txt = "3" + }, +/obj/item/storage/toolbox/ammo/c57, +/obj/item/storage/toolbox/ammo/c9mm, +/obj/item/ammo_box/magazine/m9mm_rattlesnake/empty, +/obj/item/ammo_box/magazine/m9mm_rattlesnake/empty, +/obj/item/ammo_box/magazine/m9mm_rattlesnake/empty, +/obj/item/ammo_box/magazine/m57_39_asp/empty, +/obj/item/ammo_box/magazine/m57_39_asp/empty, +/obj/item/ammo_box/magazine/m57_39_asp/empty, +/obj/item/ammo_box/magazine/m57_39_sidewinder/empty, +/obj/item/ammo_box/magazine/m57_39_sidewinder/empty, +/obj/item/ammo_box/magazine/m57_39_sidewinder/empty, +/obj/item/storage/toolbox/ammo/c57, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"sS" = ( +/obj/structure/window/plasma/reinforced/spawner/west, +/obj/structure/window/plasma/reinforced/spawner, +/obj/machinery/air_sensor/atmos/air_tank/pururangi, +/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/atmos/air_output/pururangi{ + dir = 8; + piping_layer = 2 + }, +/turf/open/floor/engine/air, +/area/ship/engineering) +"tc" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"tf" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning, +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters{ + id = "puru_cargo_shutters" + }, +/obj/structure/platform/military/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"tg" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/structure/grille, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "puru_exterior_shutters"; + dir = 1 + }, +/turf/open/floor/plating, +/area/ship/crew/office) +"tp" = ( +/obj/effect/turf_decal/techfloor{ + dir = 10 + }, +/obj/machinery/light/directional/south, +/obj/machinery/autolathe, +/turf/open/floor/plasteel/tech/grid, +/area/ship/cargo) +"tv" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/brigdoor/southright{ + req_access_txt = "3"; + req_ship_access = 1 + }, +/obj/machinery/door/poddoor/shutters{ + id = "puru_armory_shutters"; + layer = 3.3 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"tB" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/hatch/blue, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"tD" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/door/airlock/medical/glass{ + dir = 4; + name = "Infirmary" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/medical) +"tG" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"tL" = ( +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + id = "puru_cargo_holofield"; + dir = 1 + }, +/obj/machinery/door/poddoor{ + dir = 4; + id = "puru_cargo_blastdoors" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-9" + }, +/turf/open/floor/engine/hull/reinforced/interior, +/area/ship/cargo) +"tP" = ( +/obj/machinery/power/shuttle/engine/electric, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/starboard) +"tS" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering/engines/starboard) +"tW" = ( +/obj/machinery/firealarm/directional/south{ + pixel_x = 3 + }, +/obj/structure/extinguisher_cabinet/directional/south{ + pixel_x = -8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"uc" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/structure/sign/poster/contraband/gec{ + pixel_x = 32 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/autoname{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"ue" = ( +/obj/structure/window/plasma/reinforced/spawner/west, +/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/air_input/pururangi{ + dir = 8 + }, +/turf/open/floor/engine/air, +/area/ship/engineering) +"uh" = ( +/obj/item/radio/intercom/directional/west, +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/brigdoor/southleft{ + req_access_txt = "3"; + req_ship_access = 1 + }, +/obj/machinery/door/poddoor/shutters{ + id = "puru_armory_shutters"; + layer = 3.3 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"uo" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/machinery/turretid/ship{ + id = "puru_turrets"; + pixel_y = 24 + }, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 2 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"ux" = ( +/obj/structure/railing/thin, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"uM" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 10 + }, +/obj/effect/turf_decal/corner/opaque/beige/half{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"uR" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = -14; + pixel_y = 5 + }, +/obj/effect/turf_decal/corner/opaque/bottlegreen/full, +/obj/effect/turf_decal/steeldecal/steel_decals10{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/official/cleanliness{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"uS" = ( +/obj/effect/turf_decal/corner_steel_grid{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/obj/item/radio/intercom/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engines/port) +"uT" = ( +/obj/machinery/modular_computer/console/preset/command{ + dir = 1; + icon_state = "computer-left" + }, +/obj/structure/railing/thin{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/security/armory) +"uV" = ( +/obj/structure/closet/wall/directional/west{ + name = "cleaning supplies locker" + }, +/obj/item/towel{ + pixel_x = -8; + pixel_y = -4 + }, +/obj/item/towel{ + pixel_x = 2; + pixel_y = -4 + }, +/obj/item/mop, +/obj/item/pushbroom{ + pixel_x = -9; + pixel_y = 6 + }, +/obj/item/reagent_containers/glass/bucket, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/turf/open/floor/plastic, +/area/ship/crew/toilet) +"uW" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/airalarm/directional/west, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"vb" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/structure/closet/crate/secure{ + name = "Patriotism Crate"; + desc = "A secure crate containing the Flag of the Republic, perfectly pressed and folded for rapid deployment." + }, +/obj/item/sign/flag/ngr, +/obj/item/sign/flag/ngr, +/obj/item/sign/flag/ngr, +/obj/item/sign/flag/ngr, +/obj/item/sign/flag/ngr, +/obj/effect/mapping_helpers/crate_shelve, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"vf" = ( +/obj/machinery/griddle, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/plastic, +/area/ship/crew) +"vn" = ( +/obj/machinery/bluespace_drive, +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/turf/open/floor/plasteel/tech, +/area/ship/storage) +"vo" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/structure/closet/emcloset/wall/directional/west, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/ship/maintenance/starboard) +"vr" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/obj/structure/table/reinforced, +/obj/structure/sign/flag/ngr{ + dir = 1; + pixel_y = -32 + }, +/obj/machinery/cell_charger{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/paper_bin{ + pixel_x = -16; + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = -16; + pixel_y = 6 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"vw" = ( +/obj/machinery/washing_machine{ + pixel_x = 8; + pixel_y = 2; + density = 0; + should_we_be_dense = 0 + }, +/obj/effect/turf_decal/techfloor{ + dir = 9 + }, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/plastic, +/area/ship/crew/toilet) +"vG" = ( +/obj/docking_port/stationary{ + dwidth = 15; + height = 15; + width = 30; + name = "Puru-Rangi Starboard Airlock"; + dir = 2 + }, +/turf/template_noop, +/area/template_noop) +"vI" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/arrow_ccw{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"vJ" = ( +/obj/structure/table/reinforced, +/obj/structure/closet/wall/white/directional/north{ + name = "kitchen supplies cabinet" + }, +/obj/effect/turf_decal/techfloor{ + dir = 5 + }, +/obj/structure/sink/chem{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/item/reagent_containers/glass/bowl, +/obj/item/reagent_containers/glass/bowl, +/obj/item/reagent_containers/glass/bowl, +/obj/item/plate/large, +/obj/item/plate/large, +/obj/item/plate/large, +/obj/item/plate, +/obj/item/plate, +/obj/item/plate, +/obj/item/plate/small, +/obj/item/plate/small, +/obj/item/plate/small, +/obj/item/kitchen/fork{ + pixel_x = -9 + }, +/obj/item/kitchen/fork{ + pixel_x = -9 + }, +/obj/item/kitchen/spoon/plastic{ + pixel_x = 14 + }, +/obj/item/kitchen/spoon/plastic{ + pixel_x = 14 + }, +/obj/item/storage/box/drinkingglasses{ + pixel_y = 14 + }, +/obj/item/reagent_containers/glass/beaker/large{ + pixel_y = 7 + }, +/turf/open/floor/plastic, +/area/ship/crew) +"vL" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/crate_shelf, +/obj/item/stack/sheet/metal/twenty, +/obj/item/stack/sheet/glass/twenty, +/obj/item/stack/sheet/mineral/plastitanium/five, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/item/radio/intercom/directional/south, +/obj/structure/closet/crate/engineering{ + name = "materials crate" + }, +/turf/open/floor/plasteel/tech, +/area/ship/storage) +"vN" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/machinery/computer/helm/viewscreen/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"vS" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"wk" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = -12; + pixel_y = -14 + }, +/turf/open/floor/pod/dark, +/area/ship/engineering/communications/room) +"wx" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"wy" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/item/radio/intercom/directional/north, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"wA" = ( +/obj/effect/turf_decal/techfloor{ + dir = 9 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"wE" = ( +/obj/structure/cable/yellow{ + icon_state = "2-9" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/firealarm/directional/east, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/port) +"wH" = ( +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "puru_exterior_shutters"; + dir = 1 + }, +/turf/open/floor/plating, +/area/ship/engineering/communications/room) +"wJ" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/obj/structure/chair/office/dark{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"xd" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/structure/table/reinforced, +/obj/item/reagent_containers/food/drinks/coffee{ + pixel_y = 9; + pixel_x = -7 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"xi" = ( +/obj/effect/turf_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/obj/effect/turf_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/obj/structure/curtain, +/obj/machinery/shower{ + pixel_y = 19 + }, +/obj/structure/window/reinforced/tinted/frosted{ + dir = 8 + }, +/obj/machinery/door/window, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/crew/toilet) +"xm" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning, +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters{ + id = "puru_cargo_shutters" + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"xs" = ( +/obj/effect/turf_decal/corner/opaque/beige/mono, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew) +"xz" = ( +/obj/effect/turf_decal/techfloor, +/obj/item/paper_bin{ + pixel_y = 3; + pixel_x = 6 + }, +/obj/item/pen/fountain{ + pixel_y = 4; + pixel_x = 6 + }, +/obj/machinery/newscaster/directional/south, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/structure/table/reinforced, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"xG" = ( +/obj/machinery/atmospherics/pipe/layer_manifold{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"xH" = ( +/obj/effect/turf_decal/borderfloorwhite{ + color = "#57967f"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"xI" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"xN" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "0-5" + }, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engines/starboard) +"xX" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 10 + }, +/obj/effect/turf_decal/corner/opaque/beige/half{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"yc" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"yh" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 5 + }, +/obj/effect/turf_decal/corner/opaque/beige/half, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/light_switch{ + pixel_x = -12; + pixel_y = 21 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/camera/autoname{ + dir = 6 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"ym" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/shrink_ccw, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"yn" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_x = 7; + pixel_y = 8 + }, +/obj/item/pen/fountain{ + pixel_y = 9; + pixel_x = 7 + }, +/obj/item/clipboard{ + pixel_x = -8; + pixel_y = 3 + }, +/obj/item/folder/white{ + pixel_x = -7 + }, +/obj/effect/turf_decal/corner/opaque/bottlegreen/full, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"yo" = ( +/obj/effect/turf_decal/techfloor{ + dir = 9 + }, +/obj/structure/chair/office/dark{ + dir = 4 + }, +/obj/machinery/computer/helm/viewscreen/directional/west, +/obj/effect/turf_decal/corner/opaque/red, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/security/armory) +"yr" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"yz" = ( +/obj/machinery/power/smes/engineering, +/obj/structure/cable/yellow, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"yC" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable/yellow, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = 12 + }, +/obj/effect/turf_decal/corner/opaque/tan/three_quarters{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/beige, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew) +"yE" = ( +/obj/machinery/power/smes/shuttle/precharged, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/window/plasma/reinforced/spawner/west, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/door/poddoor{ + dir = 4; + id = "puru_thrusters_port_blastdoors" + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/port) +"yN" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/tech, +/area/ship/storage) +"yT" = ( +/obj/structure/closet/wall/white/med{ + pixel_y = -28; + name = "cleaning supplies locker"; + icon_door = null + }, +/obj/item/mop, +/obj/item/reagent_containers/glass/bucket, +/obj/item/reagent_containers/glass/rag{ + pixel_y = 14; + pixel_x = -5 + }, +/obj/effect/turf_decal/borderfloorwhite{ + color = "#57967f"; + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"yX" = ( +/turf/open/floor/plastic, +/area/ship/crew) +"yZ" = ( +/obj/machinery/door/poddoor{ + dir = 4; + id = "puru_thrusters_port_blastdoors" + }, +/obj/machinery/atmospherics/components/unary/shuttle/fire_heater, +/obj/structure/window/plasma/reinforced/spawner/west, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/port) +"zf" = ( +/obj/machinery/power/shuttle/engine/electric, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/port) +"zo" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/components/trinary/mixer, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer1{ + dir = 6 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"zA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + dir = 10 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"zH" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/industrial/outline/blue, +/obj/machinery/atmospherics/components/trinary/mixer/airmix/inverse{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"zM" = ( +/obj/effect/turf_decal/techfloor{ + layer = 2.04 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/autoname{ + dir = 10 + }, +/obj/structure/closet/secure_closet/wall/directional/west{ + req_access_txt = "3"; + icon_state = "sec_wall"; + name = "supply closet"; + pixel_x = 0; + dir = 2; + pixel_y = -28 + }, +/obj/item/storage/box/flares{ + pixel_x = 1; + pixel_y = -2 + }, +/obj/item/melee/knife/survival{ + pixel_x = -6; + pixel_y = -5 + }, +/obj/item/melee/knife/survival{ + pixel_x = -11; + pixel_y = -3 + }, +/obj/item/flashlight/seclite{ + pixel_x = 5; + pixel_y = -6 + }, +/obj/item/flashlight/seclite{ + pixel_x = -1; + pixel_y = -12 + }, +/obj/item/gps{ + pixel_x = 0; + pixel_y = 10 + }, +/obj/item/gps{ + pixel_x = -8; + pixel_y = 10 + }, +/obj/item/radio/headset/alt, +/obj/item/radio/headset/alt, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/mask/gas/syndicate, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"Aa" = ( +/obj/machinery/autolathe, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/machinery/firealarm/directional/north{ + pixel_x = 2 + }, +/turf/open/floor/plasteel/tech, +/area/ship/storage) +"Ag" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/pod/dark, +/area/ship/crew/cryo) +"An" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/security/armory) +"Ay" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering/communications/room) +"AC" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/door/airlock/grunge{ + req_access_txt = "10"; + name = "Office" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew/office) +"AG" = ( +/obj/structure/curtain, +/obj/structure/toilet{ + dir = 8; + pixel_x = 5; + pixel_y = 5 + }, +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/plastic, +/area/ship/crew/toilet) +"AN" = ( +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = 7; + pixel_y = 3 + }, +/obj/item/pen/fountain{ + pixel_y = 4; + pixel_x = 7 + }, +/obj/item/stamp{ + pixel_x = -9; + pixel_y = 9 + }, +/obj/item/stamp/denied{ + pixel_x = -5 + }, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/carpet/red, +/area/ship/crew/dorm/commad) +"AO" = ( +/obj/machinery/button/door{ + dir = 1; + pixel_y = -17; + pixel_x = 5; + name = "cargo bay blast doors control"; + id = "puru_cargo_blastdoors" + }, +/obj/machinery/button/shieldwallgen{ + dir = 1; + pixel_x = -3; + pixel_y = -15; + name = "cargo bay holofield switch"; + id = "puru_cargo_holofield" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"AP" = ( +/obj/machinery/atmospherics/pipe/layer_manifold, +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "puru_exterior_shutters"; + dir = 1 + }, +/obj/structure/grille, +/turf/open/floor/plating, +/area/ship/maintenance/starboard) +"Bb" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "engine fuel pump" + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engines/port) +"Be" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/machinery/computer/telecomms/server{ + dir = 4; + icon_state = "computer-right" + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"Bk" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/airlock/grunge{ + dir = 4; + name = "Bridge" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/bridge) +"Bn" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/bar/corner{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"BD" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/airlock/grunge{ + name = "Infirmary Operating Room" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/medical) +"BE" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/line{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"BL" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/structure/grille, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "puru_medroom_fore_shutters"; + dir = 1 + }, +/turf/open/floor/plating, +/area/ship/medical) +"BQ" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 6 + }, +/obj/effect/turf_decal/corner/opaque/beige/half{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew) +"BR" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/railing/thin{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"Ca" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/techfloor, +/obj/item/food/tortilla, +/obj/item/food/tortilla, +/obj/item/food/tortilla{ + pixel_y = 2 + }, +/obj/item/food/tortilla{ + pixel_y = 2 + }, +/obj/item/food/tortilla{ + pixel_y = 4 + }, +/obj/item/food/tortilla{ + pixel_y = 4 + }, +/turf/open/floor/plastic, +/area/ship/crew) +"Cu" = ( +/obj/structure/bodycontainer/morgue{ + dir = 8 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"CH" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"CI" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/structure/closet/wall/orange/directional/east{ + name = "Wrecker's Locker"; + req_access = list(48); + pixel_x = 0; + pixel_y = 28; + dir = 1 + }, +/obj/item/storage/belt/mining/ngr, +/obj/item/clothing/suit/hooded/wintercoat/security/ngr, +/obj/item/clothing/mask/balaclava/ngr, +/obj/item/clothing/neck/shemagh/ngr, +/obj/item/clothing/head/ngr, +/obj/item/clothing/head/ngr/flap, +/obj/item/clothing/gloves/explorer, +/obj/item/clothing/head/hardhat/ngr, +/obj/item/clothing/accessory/armband/cargo, +/obj/item/clothing/suit/hazardvest/ngr, +/obj/item/clothing/under/syndicate/ngr/jumpsuit, +/obj/item/clothing/shoes/workboots, +/obj/item/clothing/glasses/meson, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"CJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"CS" = ( +/obj/structure/platform/military/corner{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/camera/autoname{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/stairs/left{ + color = "#575757" + }, +/area/ship/cargo) +"Do" = ( +/obj/effect/turf_decal/techfloor{ + dir = 9 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/light_switch{ + pixel_x = -12; + pixel_y = 21 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/effect/turf_decal/corner/opaque/red, +/turf/open/floor/plasteel/mono/dark, +/area/ship/security/armory) +"Dz" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/maintenance_hatch{ + req_access_txt = "10"; + name = "Starboard Engines" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engines/starboard) +"DA" = ( +/turf/open/floor/pod/dark, +/area/ship/cargo) +"DE" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/autoname{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"DG" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "puru_medroom_fore_shutters"; + dir = 1 + }, +/obj/structure/grille, +/turf/open/floor/plating, +/area/ship/medical) +"DJ" = ( +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "puru_exterior_shutters"; + dir = 1 + }, +/turf/open/floor/plating, +/area/ship/medical) +"DO" = ( +/obj/effect/turf_decal/techfloor{ + dir = 5 + }, +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/obj/structure/table/reinforced, +/obj/item/bodycamera{ + pixel_x = 4; + pixel_y = 8 + }, +/obj/item/bodycamera{ + pixel_x = 10; + pixel_y = 6 + }, +/obj/item/bodycamera{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/item/bodycamera{ + pixel_x = 10 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/security/armory) +"Ed" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/warning{ + dir = 1 + }, +/obj/structure/chair/handrail, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"Es" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/grunge{ + req_access_txt = "10"; + name = "Storage Bay" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/tech/grid, +/area/ship/storage) +"Eu" = ( +/obj/effect/turf_decal/stairs{ + dir = 5; + color = "#575757" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"ED" = ( +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/structure/platform/military{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"EG" = ( +/obj/machinery/camera/autoname{ + dir = 9 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"EI" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"EK" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/item/radio/intercom/directional/east, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/obj/structure/closet/crate/freezer/blood, +/obj/effect/mapping_helpers/crate_shelve, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"Fk" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning, +/obj/effect/turf_decal/corner/opaque/tan, +/obj/effect/turf_decal/trimline/opaque/bar/filled/corner, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"Fn" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"Fo" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/brown/visible, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/engineering) +"FC" = ( +/obj/machinery/computer/operating, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"FE" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"FI" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"FJ" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/closet/firecloset/wall/directional/west, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/techfloor, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"FP" = ( +/obj/structure/railing/thin{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/stairs{ + color = "#575757"; + dir = 1 + }, +/area/ship/crew/cryo) +"FQ" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering/engines/port) +"FS" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/line{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/closet/firecloset/wall/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"FT" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/airlock/external, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/maintenance/starboard) +"FU" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/airlock/medical/glass{ + dir = 4; + name = "Infirmary" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/medical) +"Ga" = ( +/obj/machinery/porta_turret/ship/ngr/light{ + dir = 6; + id = "puru_turrets" + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/cargo) +"Gb" = ( +/obj/machinery/atmospherics/components/trinary/filter/atmos/o2{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/outline/blue, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"Gc" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"Gd" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/machinery/firealarm/directional/south, +/obj/machinery/telecomms/broadcaster/preset_right{ + autolinkers = list("broadcasterG","hub"); + network = "ngr_commnet" + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/engineering/communications/room) +"Gj" = ( +/obj/machinery/power/ship_gravity, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"Gp" = ( +/obj/effect/turf_decal/borderfloorwhite{ + color = "#57967f" + }, +/obj/structure/chair/handrail{ + dir = 4 + }, +/obj/machinery/camera/autoname{ + dir = 10 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"Gt" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/item/gun_maint_kit{ + pixel_y = 11; + pixel_x = 1 + }, +/obj/item/gun_maint_kit{ + pixel_y = 4; + pixel_x = 3 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"GF" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/machinery/firealarm/directional/west{ + pixel_y = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"GJ" = ( +/obj/effect/turf_decal/techfloor{ + dir = 10 + }, +/obj/structure/chair/sofa/brown/old/right/directional/east, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/carpet/red, +/area/ship/crew) +"GK" = ( +/obj/machinery/power/shuttle/engine/fire, +/turf/open/floor/plating, +/area/ship/engineering/engines/starboard) +"GL" = ( +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/item/radio/intercom/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/turf/open/floor/carpet/red, +/area/ship/crew/dorm/commad) +"GO" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/structure/chair/handrail{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/bar/warning, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"GP" = ( +/obj/effect/turf_decal/borderfloorwhite{ + color = "#57967f" + }, +/obj/item/disk/surgery/t2{ + pixel_x = -6; + pixel_y = 5 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 16 + }, +/obj/item/storage/case/surgery{ + pixel_x = 5; + pixel_y = 3 + }, +/obj/structure/table/rolling{ + desc = "A rolling table model standard in the Republic. It can and will move." + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"GZ" = ( +/obj/item/storage/firstaid{ + pixel_y = 9 + }, +/obj/item/storage/firstaid/medical{ + pixel_x = -7 + }, +/obj/item/storage/firstaid/brute{ + pixel_x = 6 + }, +/obj/effect/turf_decal/corner/opaque/bottlegreen/full, +/obj/structure/closet/wall/white/med{ + dir = 1; + name = "first aid supplies locker"; + pixel_y = 28 + }, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 19; + pixel_y = -12 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"Hg" = ( +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/machinery/telecomms/receiver/preset_left/birdstation{ + autolinkers = list("receiverG"); + freq_listening = list(1353, 1205); + network = "ngr_commnet" + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/engineering/communications/room) +"Hh" = ( +/obj/machinery/oven, +/obj/effect/turf_decal/techfloor{ + dir = 9 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plastic, +/area/ship/crew) +"Hj" = ( +/obj/structure/railing/thin{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"Hl" = ( +/obj/effect/turf_decal/borderfloorblack{ + dir = 8 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"Ht" = ( +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/black, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/stairs{ + color = "#575757"; + dir = 4 + }, +/area/ship/bridge) +"Hu" = ( +/obj/structure/railing/thin, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"HE" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 10 + }, +/obj/effect/turf_decal/corner/opaque/beige/half{ + dir = 1 + }, +/obj/structure/chair/handrail{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/directional/south, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"HF" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 19; + pixel_y = 11 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/maintenance/starboard) +"HJ" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/effect/turf_decal/techfloor{ + layer = 2.04 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"Ih" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"In" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"Ix" = ( +/obj/structure/railing/thin{ + dir = 8 + }, +/obj/structure/sign/poster/contraband/engis_unite{ + pixel_y = -32 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/turf_decal/industrial/outline/grey, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"IQ" = ( +/obj/structure/railing/thin{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/obj/structure/reagent_dispensers/watertank, +/obj/effect/turf_decal/industrial/outline/grey, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"IV" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/line, +/obj/item/radio/intercom/directional/south, +/obj/item/kirbyplants{ + icon_state = "plant-04" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"IY" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/light_switch{ + pixel_x = -12; + pixel_y = 21 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"Jc" = ( +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"Jn" = ( +/turf/template_noop, +/area/template_noop) +"Js" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/carpet/red, +/area/ship/crew) +"Jw" = ( +/obj/effect/turf_decal/stairs{ + dir = 2; + color = "#575757" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/structure/railing/thin{ + dir = 4 + }, +/obj/effect/turf_decal/corner_techfloor_grid, +/obj/effect/turf_decal/techfloor/corner, +/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer1{ + dir = 9 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"JB" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/warning, +/obj/structure/chair/handrail{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"JE" = ( +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/advanced_airlock_controller/directional/east, +/turf/open/floor/pod/dark, +/area/ship/maintenance/starboard) +"JF" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "puru_exterior_shutters"; + dir = 1 + }, +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/turf/open/floor/plating, +/area/ship/crew) +"JI" = ( +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/obj/effect/turf_decal/corner/opaque/tan, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"JJ" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"JN" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 10 + }, +/obj/effect/turf_decal/corner/opaque/beige/half{ + dir = 1 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"JR" = ( +/obj/structure/platform/military{ + dir = 1; + layer = 2.08 + }, +/obj/item/clothing/suit/space/syndicate/ngr, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/head/helmet/space/syndicate/ngr, +/obj/machinery/suit_storage_unit/inherit, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"JS" = ( +/obj/structure/sign/flag/ngr{ + pixel_y = 32 + }, +/obj/machinery/air_sensor/external/pururangi, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"Kd" = ( +/obj/machinery/power/shuttle/engine/fire, +/turf/open/floor/plating, +/area/ship/engineering/engines/port) +"Kf" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/item/paper/guides/jobs/engi/combustion_thruster, +/obj/structure/noticeboard{ + pixel_x = 2; + pixel_y = 26 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"Ki" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/line, +/obj/item/kirbyplants{ + icon_state = "plant-12" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/aft) +"Kl" = ( +/obj/effect/turf_decal/techfloor, +/obj/structure/table/wood, +/obj/item/kirbyplants{ + icon_state = "plant-11"; + pixel_y = 7; + pixel_x = 7 + }, +/turf/open/floor/carpet/red, +/area/ship/crew) +"Kr" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/camera/autoname{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/obj/effect/turf_decal/corner/opaque/beige/half{ + dir = 4 + }, +/obj/structure/sign/poster/radio/arf{ + pixel_x = -32 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/item/kirbyplants{ + icon_state = "plant-05"; + pixel_x = -6 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew) +"KI" = ( +/obj/structure/platform/military/corner{ + dir = 8 + }, +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer1{ + dir = 4 + }, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 1 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"KJ" = ( +/obj/structure/platform/military{ + dir = 4 + }, +/obj/machinery/power/port_gen/pacman{ + anchored = 1; + can_be_unanchored = 1 + }, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/platform/military{ + dir = 1; + layer = 2.08 + }, +/obj/structure/sign/poster/official/help_others{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"KP" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"KW" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/effect/turf_decal/techfloor{ + dir = 10 + }, +/obj/machinery/computer/monitor{ + icon_state = "computer-left"; + dir = 4 + }, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"Lc" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"Ld" = ( +/turf/closed/wall/mineral/plastitanium, +/area/ship/engineering/communications/room) +"Lg" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/door/airlock/engineering{ + name = "Engineering"; + req_access_txt = "10"; + dir = 4 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"Lh" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/structure/closet/firecloset/wall/directional/west, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/ship/maintenance/starboard) +"Lk" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen/three_quarters{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/beige{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"LD" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = 12 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow, +/obj/machinery/firealarm/directional/west{ + pixel_y = -14 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"LP" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 10 + }, +/obj/effect/turf_decal/corner/opaque/beige/half{ + dir = 1 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"LS" = ( +/obj/machinery/porta_turret/ship/ngr/light{ + dir = 9; + id = "puru_turrets" + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/medical) +"LY" = ( +/obj/structure/railing/thin/corner{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/shrink_ccw{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"Ma" = ( +/obj/item/radio/intercom/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"Mz" = ( +/obj/effect/turf_decal/techfloor, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/under/syndicate/ngr/jumpsuit, +/obj/item/clothing/under/syndicate/ngr/jumpsuit, +/obj/item/clothing/under/syndicate/ngr/fatigues, +/obj/item/clothing/under/syndicate/ngr/fatigues, +/obj/item/clothing/under/syndicate/ngr, +/obj/item/clothing/under/syndicate/ngr, +/obj/item/clothing/suit/hooded/wintercoat/security/ngr, +/obj/item/clothing/suit/hooded/wintercoat/security/ngr, +/obj/structure/closet/wall/directional/south{ + name = "wardrobe cabinet" + }, +/turf/open/floor/carpet/red, +/area/ship/crew) +"ME" = ( +/obj/structure/filingcabinet/double/grey, +/obj/item/clipboard, +/obj/item/folder/syndicate, +/obj/item/folder, +/obj/machinery/firealarm/directional/north{ + pixel_x = -1 + }, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/item/pen, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"MF" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/grunge{ + req_access_txt = "10"; + name = "Communications Room" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/communications/room) +"MM" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/machinery/airalarm/directional/east, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/maintenance/starboard) +"MR" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering) +"MZ" = ( +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/obj/structure/table/reinforced, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"Ni" = ( +/obj/effect/turf_decal/corner/opaque/beige/mono, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew) +"Np" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/structure/grille, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "puru_medroom_aft_shutters"; + dir = 1 + }, +/obj/machinery/door/airlock/grunge{ + name = "Recovery Room" + }, +/turf/open/floor/plating, +/area/ship/medical) +"ND" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/warning{ + dir = 8 + }, +/obj/structure/chair/handrail{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"On" = ( +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 2 + }, +/obj/effect/turf_decal/techfloor/corner, +/obj/effect/turf_decal/corner/opaque/tan/three_quarters{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"Op" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/structure/rack, +/obj/item/pipe_dispenser{ + pixel_x = -3; + pixel_y = 11 + }, +/obj/machinery/light/directional/east, +/obj/item/storage/toolbox/syndicate{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/gear_pack/anglegrinder, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"OE" = ( +/obj/structure/railing/thin{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"OX" = ( +/obj/effect/turf_decal/techfloor, +/obj/machinery/light/directional/north, +/obj/machinery/telecomms/bus/preset_one{ + autolinkers = list("hub","processor4","bus"); + network = "ngr_commnet"; + freq_listening = list(1353, 1205) + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/engineering/communications/room) +"OY" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning, +/obj/effect/turf_decal/corner/opaque/tan, +/obj/effect/turf_decal/trimline/opaque/bar/filled/corner, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"Pc" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 5 + }, +/obj/item/towel{ + pixel_y = 5; + pixel_x = -6 + }, +/obj/item/towel{ + pixel_y = 12; + pixel_x = -6 + }, +/obj/item/towel{ + pixel_y = 5; + pixel_x = 6 + }, +/obj/item/towel{ + pixel_y = 12; + pixel_x = 6 + }, +/obj/structure/closet/wall/directional/north{ + name = "towel closet" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/ship/crew/cryo) +"Po" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"Ps" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/maintenance/starboard) +"PC" = ( +/obj/effect/turf_decal/stairs{ + dir = 5; + color = "#575757" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/engineering) +"PN" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/crate/radiation{ + name = "fuel crate" + }, +/obj/item/stack/sheet/mineral/plasma/twenty, +/obj/item/stack/sheet/mineral/uranium/ten, +/obj/effect/mapping_helpers/crate_shelve, +/obj/machinery/camera/autoname{ + dir = 10 + }, +/turf/open/floor/plasteel/tech, +/area/ship/storage) +"PW" = ( +/obj/effect/turf_decal/borderfloorwhite{ + color = "#57967f" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"Qa" = ( +/obj/effect/turf_decal/borderfloorblack{ + dir = 1 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"Qe" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/line{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"Qw" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/machinery/firealarm/directional/east, +/obj/structure/extinguisher_cabinet/directional/east{ + pixel_y = 11 + }, +/turf/open/floor/plasteel/tech, +/area/ship/maintenance/starboard) +"Qz" = ( +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/turf/open/floor/plating, +/area/ship/engineering) +"QD" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/corner/opaque/beige/half, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew) +"QI" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"QJ" = ( +/obj/effect/turf_decal/borderfloorblack{ + dir = 1 + }, +/obj/docking_port/mobile{ + launch_status = 0; + name = "Puru-Rangi"; + preferred_direction = 4; + port_direction = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"QN" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/turf/open/floor/plating, +/area/ship/engineering) +"QO" = ( +/obj/effect/turf_decal/techfloor, +/obj/machinery/telecomms/server/presets/common{ + autolinkers = list("common","hub"); + freq_listening = list(1353); + network = "ngr_commnet" + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/engineering/communications/room) +"QP" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/office) +"QU" = ( +/obj/structure/table/chem, +/obj/item/reagent_containers/glass/mortar/metal, +/obj/item/pestle{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/effect/turf_decal/corner/opaque/bottlegreen/full, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"Rd" = ( +/obj/effect/turf_decal/borderfloorwhite{ + color = "#57967f" + }, +/obj/structure/table/optable, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"RB" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"RC" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen/three_quarters{ + dir = 1 + }, +/obj/machinery/cryopod{ + dir = 1 + }, +/obj/machinery/camera/autoname{ + dir = 10 + }, +/turf/open/floor/pod/dark, +/area/ship/crew/cryo) +"RD" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/airlock/hatch{ + dir = 1; + req_ship_access = 0; + id_tag = "puru_restroom_doorbolts"; + name = "Restroom" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew/toilet) +"RF" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/airlock/grunge{ + name = "Starboard Maintenance Airlock" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/maintenance/starboard) +"RM" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/railing/thin{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"RP" = ( +/obj/effect/turf_decal/techfloor, +/obj/structure/railing/thin, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"RR" = ( +/obj/structure/railing/thin{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/machinery/modular_computer/console/preset/command{ + dir = 8; + layer = 2.91 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"RU" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/closet/emcloset/wall/directional/west, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/pod/dark, +/area/ship/maintenance/starboard) +"RV" = ( +/obj/machinery/door/poddoor{ + dir = 4; + id = "puru_cargo_blastdoors" + }, +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + id = "puru_cargo_holofield" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-10" + }, +/turf/open/floor/engine/hull/reinforced/interior, +/area/ship/cargo) +"RW" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/shrink_ccw, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"Sh" = ( +/obj/effect/turf_decal/techfloor{ + layer = 2.04 + }, +/obj/item/clothing/gloves/combat{ + pixel_x = 4; + pixel_y = -10 + }, +/obj/item/clothing/gloves/combat{ + pixel_x = 4; + pixel_y = -10 + }, +/obj/item/storage/belt/security/webbing/ngr{ + pixel_x = 8; + pixel_y = -6 + }, +/obj/item/storage/belt/security/webbing/ngr{ + pixel_x = 8; + pixel_y = -6 + }, +/obj/item/storage/pouch/ammo{ + pixel_x = 13; + pixel_y = -2 + }, +/obj/item/storage/pouch/ammo{ + pixel_x = 13; + pixel_y = -2 + }, +/obj/item/clothing/suit/armor/ngr{ + pixel_x = 12; + pixel_y = 3 + }, +/obj/item/clothing/suit/armor/ngr{ + pixel_x = 12; + pixel_y = 3 + }, +/obj/item/clothing/head/helmet/ngr{ + pixel_x = -9; + pixel_y = -1 + }, +/obj/item/clothing/head/helmet/ngr{ + pixel_x = -9; + pixel_y = -1 + }, +/obj/item/clothing/glasses/hud/security/sunglasses/ngr{ + pixel_x = -7; + pixel_y = 10 + }, +/obj/item/clothing/glasses/hud/security/sunglasses/ngr{ + pixel_x = -7; + pixel_y = 10 + }, +/obj/item/storage/belt/security/webbing/ngr/alt, +/obj/item/storage/belt/security/webbing/ngr/alt, +/obj/structure/closet/secure_closet/wall/directional/west{ + req_access_txt = "3"; + icon_state = "sec_wall"; + name = "armor closet"; + pixel_x = 0; + dir = 2; + pixel_y = -28 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"Sq" = ( +/obj/structure/chair/handrail, +/obj/machinery/airalarm/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"St" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"SD" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"SN" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew) +"SR" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "6-8" + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"SY" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/item/radio/intercom/directional/north{ + pixel_x = -5; + pixel_y = 31 + }, +/obj/machinery/light_switch{ + pixel_x = 11; + pixel_y = 23 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"Tb" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/line{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"Tn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"Tp" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "0-6" + }, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engines/port) +"Ts" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/ship/engineering) +"Tx" = ( +/obj/structure/chair/handrail{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"TG" = ( +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"TO" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 9 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/shrink_ccw{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"TY" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/red/half{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/security/armory) +"Ud" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/turf/open/floor/pod/dark, +/area/ship/engineering/communications/room) +"Un" = ( +/obj/effect/turf_decal/borderfloorblack{ + dir = 4 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"Us" = ( +/obj/structure/chair/handrail{ + dir = 1 + }, +/obj/effect/turf_decal/techfloor, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/turf/open/floor/plastic, +/area/ship/crew/toilet) +"Uu" = ( +/obj/effect/turf_decal/techfloor, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"UA" = ( +/obj/structure/rack, +/obj/item/storage/box/bodybags{ + pixel_x = -7; + pixel_y = 13 + }, +/obj/item/storage/box/gloves{ + pixel_y = 13; + pixel_x = 9 + }, +/obj/item/storage/box/masks{ + pixel_y = 5; + pixel_x = -1 + }, +/obj/effect/turf_decal/borderfloorwhite{ + color = "#57967f"; + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"UB" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/door/airlock/grunge{ + req_access_txt = "10"; + name = "Communications Room" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/communications/room) +"UC" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/structure/closet/secure_closet/wall/directional/north{ + req_access_txt = "3"; + name = "lieutenant's locker"; + icon_state = "sec_wall"; + dir = 4; + pixel_x = 28; + pixel_y = 0 + }, +/obj/item/storage/guncase/pistol/asp, +/obj/item/clothing/under/syndicate/ngr/officer, +/obj/item/clothing/suit/armor/ngr/lieutenant, +/obj/item/clothing/head/ngr/flap, +/obj/item/clothing/head/ngr, +/obj/item/clothing/head/ngr/peaked, +/obj/item/clothing/glasses/hud/security/sunglasses/ngr, +/obj/item/clothing/mask/balaclava/ngr, +/obj/item/clothing/mask/breath/ngr, +/obj/item/clothing/gloves/tackler/combat/insulated, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/neck/shemagh/ngr, +/obj/item/storage/pouch/squad, +/obj/item/radio/headset/syndicate/alt/ngr, +/obj/item/megaphone/sec, +/obj/item/radio/headset/syndicate/ngr, +/obj/item/clothing/mask/gas/syndicate, +/turf/open/floor/carpet/red, +/area/ship/crew/dorm/commad) +"UI" = ( +/obj/structure/railing/thin{ + dir = 4 + }, +/turf/open/floor/plasteel/stairs/right{ + color = "#575757" + }, +/area/ship/cargo) +"UK" = ( +/obj/effect/turf_decal/techfloor, +/obj/structure/table/wood, +/obj/item/flashlight/lamp{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/carpet/red, +/area/ship/crew/dorm/commad) +"UO" = ( +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/item/kirbyplants{ + icon_state = "plant-05"; + pixel_x = -6 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"UR" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/structure/table/wood, +/obj/item/stamp/ngr/lieutenant{ + pixel_x = -7; + pixel_y = 13 + }, +/obj/item/stamp/ngr/captain{ + pixel_x = 3; + pixel_y = 11 + }, +/obj/item/clipboard{ + pixel_x = 1; + pixel_y = -6 + }, +/obj/item/folder/documents/syndicate/ngr{ + pixel_y = -10; + pixel_x = 4 + }, +/obj/machinery/light/directional/east, +/obj/item/stamp/ngr{ + pixel_x = -10; + pixel_y = 4 + }, +/turf/open/floor/carpet/red, +/area/ship/crew/dorm/commad) +"UT" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/toilet) +"UU" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/medical) +"UX" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/helm/viewscreen/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"UY" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/corner{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"Vb" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "puru_medroom_aft_shutters"; + dir = 1 + }, +/obj/structure/grille, +/turf/open/floor/plating, +/area/ship/medical) +"Vd" = ( +/obj/effect/turf_decal/techfloor{ + dir = 9 + }, +/obj/machinery/light/directional/west, +/obj/structure/chair/sofa/brown/old/left/directional/east, +/turf/open/floor/carpet/red, +/area/ship/crew) +"Ve" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/storage) +"Vk" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/shrink_cw{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"Vq" = ( +/obj/effect/turf_decal/techfloor{ + dir = 5 + }, +/obj/structure/railing/thin{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/obj/structure/filingcabinet/double/grey{ + dir = 8; + pixel_x = 6 + }, +/obj/item/clipboard, +/obj/item/folder/red, +/obj/item/pen, +/obj/item/pen/fountain, +/turf/open/floor/plasteel/mono/dark, +/area/ship/security/armory) +"Vu" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/shrink_cw, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"Vx" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/engineering) +"Vy" = ( +/obj/structure/railing/thin, +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/obj/item/radio/intercom/directional/east, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/item/clipboard{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/paper_bin{ + pixel_y = 4; + pixel_x = 7 + }, +/obj/item/pen/fountain{ + pixel_y = 5; + pixel_x = 7 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/security/armory) +"VA" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/light/floor{ + icon_state = "floor-on" + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"VJ" = ( +/obj/machinery/button/door{ + dir = 1; + pixel_y = -17; + pixel_x = -5; + name = "cargo bay shutters control"; + id = "puru_cargo_shutters" + }, +/obj/machinery/light/directional/south{ + pixel_x = 14 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"VO" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/open/floor/pod/dark, +/area/ship/engineering/communications/room) +"VU" = ( +/obj/effect/turf_decal/techfloor{ + dir = 5 + }, +/obj/structure/curtain/cloth/grey, +/obj/effect/spawner/bunk_bed, +/obj/structure/sign/flag/ngr{ + pixel_y = 32 + }, +/turf/open/floor/carpet/red, +/area/ship/crew/dorm/commad) +"VX" = ( +/obj/effect/turf_decal/techfloor{ + layer = 2.04 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/corner/opaque/red/half{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/mono/dark, +/area/ship/security/armory) +"Wj" = ( +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/tan/three_quarters{ + dir = 1 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"Wq" = ( +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "puru_exterior_shutters"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/layer_manifold{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/engineering) +"Ws" = ( +/obj/structure/closet/crate/bin, +/obj/effect/spawner/random/trash/garbage, +/obj/machinery/light/directional/north, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"WA" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/platform/military{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/engineering) +"WD" = ( +/obj/structure/table/reinforced, +/obj/machinery/defibrillator_mount/loaded{ + pixel_y = 22 + }, +/obj/item/stack/rods/ten{ + pixel_y = 5; + pixel_x = -8 + }, +/obj/item/stack/sheet/mineral/titanium/five{ + pixel_y = 7; + pixel_x = 6 + }, +/obj/structure/closet/wall/white/med{ + dir = 4; + pixel_x = 28; + name = "surgical supplies locker" + }, +/obj/item/tank/internals/anesthetic, +/obj/item/clothing/mask/breath/medical, +/obj/item/clothing/head/welding{ + pixel_x = 8; + pixel_y = -4 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"WE" = ( +/obj/machinery/porta_turret/ship/ngr/light{ + dir = 6; + id = "puru_turrets" + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/cargo) +"WF" = ( +/obj/item/radio/intercom/directional/west, +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 9 + }, +/obj/effect/turf_decal/corner/opaque/tan, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"WG" = ( +/obj/machinery/door/airlock/grunge{ + req_access_txt = "19"; + dir = 4; + name = "Command Quarters" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew/dorm/commad) +"WJ" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/turf/open/floor/carpet/red, +/area/ship/crew) +"WN" = ( +/obj/machinery/atmospherics/pipe/layer_manifold{ + dir = 4 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering) +"WO" = ( +/obj/effect/turf_decal/corner/opaque/beige/mono, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew) +"WP" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/atmos{ + dir = 4; + icon_state = "vent_map_siphon_on-3" + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"WR" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/light_switch{ + pixel_x = -12; + pixel_y = 21 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"WZ" = ( +/obj/effect/turf_decal/corner/opaque/red/mono, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/office) +"Xa" = ( +/obj/effect/turf_decal/techfloor{ + layer = 2.04 + }, +/obj/machinery/airalarm/directional/south, +/obj/item/kirbyplants{ + icon_state = "plant-11"; + pixel_y = 3 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"Xb" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/turf/open/floor/plating, +/area/ship/engineering) +"Xd" = ( +/obj/machinery/power/port_gen/pacman/super{ + anchored = 1; + can_be_unanchored = 1 + }, +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/machinery/light/directional/south, +/obj/structure/platform/military{ + dir = 4 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"Xf" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/closet/crate/rations, +/obj/effect/mapping_helpers/crate_shelve, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"Xh" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"Xr" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen/full, +/obj/machinery/chem_master, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"Xu" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/structure/grille, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "puru_exterior_shutters"; + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/cargo) +"Xw" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/door/airlock/grunge{ + name = "Crew Quarters" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew) +"XD" = ( +/obj/structure/railing/thin, +/obj/effect/turf_decal/techfloor{ + dir = 10 + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/security/armory) +"XE" = ( +/obj/machinery/door/poddoor{ + dir = 4; + id = "puru_thrusters_starboard_blastdoors" + }, +/obj/machinery/power/smes/shuttle/precharged, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/window/plasma/reinforced/spawner/west, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/starboard) +"XO" = ( +/obj/machinery/door/poddoor{ + dir = 4; + id = "puru_thrusters_starboard_blastdoors" + }, +/obj/machinery/atmospherics/components/unary/shuttle/fire_heater, +/obj/structure/window/plasma/reinforced/spawner/west, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/starboard) +"XP" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/machinery/camera/autoname, +/obj/item/reagent_containers/food/drinks/bottle/wine{ + pixel_y = 17; + pixel_x = 9 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ + pixel_y = 13 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ + pixel_y = 18; + pixel_x = -6 + }, +/obj/structure/dresser, +/turf/open/floor/carpet/red, +/area/ship/crew/dorm/commad) +"XR" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/structure/chair/handrail, +/obj/effect/turf_decal/trimline/opaque/bar/warning{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"XZ" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/storage) +"Ye" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/maintenance_hatch{ + req_access_txt = "10"; + name = "Port Engines" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engines/port) +"Yf" = ( +/obj/structure/cable/yellow, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 9 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -14; + pixel_x = -12 + }, +/obj/machinery/button/door{ + dir = 8; + pixel_y = -8; + pixel_x = 21; + name = "starboard thrusters blast door control"; + id = "puru_thrusters_starboard_blastdoors" + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/starboard) +"Yq" = ( +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/turf/open/floor/plastic, +/area/ship/crew) +"Yv" = ( +/obj/effect/turf_decal/trimline/opaque/tan/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"Yw" = ( +/obj/effect/turf_decal/borderfloorwhite{ + color = "#57967f"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"Yz" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/bar/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"YA" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen/three_quarters{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/beige{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) +"YC" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"YF" = ( +/obj/effect/turf_decal/corner/opaque/bottlegreen{ + dir = 9 + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -21; + pixel_y = -13 + }, +/obj/item/radio/intercom/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/dark, +/area/ship/crew/cryo) +"YG" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/fire{ + pixel_x = -3; + pixel_y = 10 + }, +/obj/effect/turf_decal/borderfloorwhite{ + color = "#57967f"; + dir = 1 + }, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) +"YQ" = ( +/obj/effect/turf_decal/corner/opaque/tan/full, +/obj/machinery/vending/cola/starkist, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"Zc" = ( +/obj/structure/chair/sofa/brown/old/left{ + dir = 8 + }, +/obj/machinery/computer/helm/viewscreen/directional/south, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"Zh" = ( +/obj/effect/turf_decal/corner/opaque/tan{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/shrink_cw{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"Zi" = ( +/obj/effect/spawner/bunk_bed, +/obj/structure/curtain/cloth/grey, +/obj/effect/turf_decal/techfloor, +/turf/open/floor/carpet/red, +/area/ship/crew) +"Zv" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 4 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"ZG" = ( +/obj/effect/turf_decal/techfloor{ + dir = 9 + }, +/obj/structure/closet/secure_closet/wall/directional/north{ + req_access_txt = "20"; + icon_state = "solgov_wall"; + name = "captain's locker" + }, +/obj/item/storage/guncase/pistol/asp, +/obj/item/clothing/under/syndicate/ngr/officer, +/obj/item/clothing/suit/armor/ngr/captain, +/obj/item/clothing/head/ngr/peaked, +/obj/machinery/airalarm/directional/west, +/obj/item/clothing/glasses/hud/security/sunglasses/ngr, +/obj/item/clothing/mask/balaclava/ngr, +/obj/item/clothing/mask/breath/ngr, +/obj/item/clothing/gloves/tackler/combat/insulated, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/neck/shemagh/ngr, +/obj/item/storage/pouch/squad, +/obj/item/radio/headset/syndicate/alt/captain/ngr, +/obj/item/megaphone/sec, +/obj/item/radio/headset/syndicate/captain/ngr, +/obj/item/clothing/mask/gas/syndicate, +/turf/open/floor/carpet/red, +/area/ship/crew/dorm/commad) +"ZO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair/plastic{ + color = "#999999"; + dir = 4; + layer = 2; + pixel_y = 4; + pixel_x = -4 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"ZQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"ZU" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"ZX" = ( +/obj/effect/turf_decal/techfloor, +/obj/structure/tank_dispenser, +/turf/open/floor/plasteel/tech/grid, +/area/ship/cargo) + +(1,1,1) = {" +Jn +Jn +ae +Jn +Jn +FQ +Kd +zf +zf +FQ +Jn +Jn +Jn +tS +tP +tP +GK +tS +Jn +Jn +Jn +Jn +Jn +"} +(2,1,1) = {" +Jn +Jn +TG +Jn +Jn +FQ +yZ +pe +yE +FQ +Zv +EG +WP +tS +XE +XE +XO +tS +Jn +Jn +Jn +Jn +Jn +"} +(3,1,1) = {" +Jn +Jn +TG +Jn +Jn +FQ +Bb +Tp +uS +FQ +Wq +MR +WN +tS +fO +xN +ie +tS +Jn +Jn +Jn +Jn +Jn +"} +(4,1,1) = {" +ae +Jn +TG +Jn +Jn +FQ +gW +sG +wE +Ye +kx +eX +FJ +Dz +ln +sg +Yf +tS +Jn +Jn +Jn +ae +Jn +"} +(5,1,1) = {" +TG +Jn +Un +nm +Ay +Ay +FQ +FQ +FQ +FQ +KI +FE +tW +tS +tS +tS +tS +tS +XZ +bt +Jn +TG +Jn +"} +(6,1,1) = {" +TG +Jn +Ay +Ay +Gd +Ay +ly +ci +tB +RP +hb +iK +Vx +DE +Gj +XZ +Aa +lj +vL +XZ +Jn +TG +Jn +"} +(7,1,1) = {" +TG +Jn +Ay +mY +VO +MF +zA +cV +zo +lB +Jw +fw +SD +RM +OE +Es +yN +qc +PN +XZ +Jn +TG +Jn +"} +(8,1,1) = {" +TG +Jn +wH +QO +oc +Ay +Kf +Xb +xG +Qz +sz +jf +PC +jf +yz +XZ +vn +Ve +aC +XZ +Jn +TG +Jn +"} +(9,1,1) = {" +TG +Jn +wH +sj +wk +Ay +SY +QN +Gb +MR +KJ +fg +WA +rV +Xd +XZ +aP +lo +pT +XZ +Jn +TG +Jn +"} +(10,1,1) = {" +TG +Jn +Ay +OX +Ud +UB +zH +Fo +kI +kX +Hj +BR +qq +IQ +Ix +QP +QP +QP +QP +QP +Jn +TG +Jn +"} +(11,1,1) = {" +TG +Jn +Ld +Ay +Hg +Ay +ue +sS +oX +MR +xI +Ih +hj +ji +gI +AC +uW +Be +KW +QP +Jn +TG +Jn +"} +(12,1,1) = {" +TG +Jn +Jn +Ay +Ay +Ay +MR +MR +MR +MR +nt +Ts +aD +QP +QP +QP +WR +QI +HJ +tg +Jn +TG +Jn +"} +(13,1,1) = {" +TG +Jn +Jn +UU +qi +Xr +yn +UU +UA +UU +MR +Lg +MR +QP +mA +GF +WZ +wJ +qr +tg +Jn +TG +Jn +"} +(14,1,1) = {" +TG +Jn +Jn +DJ +QU +bf +Lk +gp +yT +UU +ha +oy +rN +QP +bm +uc +Op +oV +vr +QP +Jn +TG +Jn +"} +(15,1,1) = {" +TG +Jn +Jn +DJ +lS +iL +bA +UU +UU +UU +gV +Fn +mU +Ps +Ps +Ps +Ps +Ps +Ps +Ps +pJ +Qa +Jn +"} +(16,1,1) = {" +ke +LS +UU +UU +UU +jJ +JN +UU +YG +UU +UU +Ed +ev +RF +vo +bk +Lh +FT +RU +ei +gn +QJ +vG +"} +(17,1,1) = {" +Jn +UU +Ma +ls +qn +qo +uM +hL +xH +lm +Vb +ee +IV +Ps +HF +MM +Qw +Ps +gf +JE +AP +Qa +Jn +"} +(18,1,1) = {" +Jn +UU +Cu +Rd +UU +ps +xX +Np +nb +UX +UU +lp +ds +Ps +Ps +Ps +Ps +Ps +Ps +Ps +Ps +iE +Jn +"} +(19,1,1) = {" +mF +UU +UU +UU +UU +yh +HE +UU +UU +UU +UU +kW +jA +Xw +yC +an +bg +Kr +Vd +GJ +hD +Jn +Jn +"} +(20,1,1) = {" +UU +FC +Gp +UU +uR +hQ +LP +BL +lq +vN +UU +IY +Fk +oS +QD +WO +Ni +fa +Js +Kl +JF +Jn +Jn +"} +(21,1,1) = {" +UU +fr +PW +BD +az +pB +uM +eH +Yw +pO +DG +kL +Ki +SN +Hh +Yq +sF +fa +Js +Mz +SN +Jn +Jn +"} +(22,1,1) = {" +UU +WD +GP +UU +GZ +YA +ks +UU +rk +UU +UU +kS +kC +SN +cG +yX +Ca +xs +WJ +Zi +SN +Jn +Jn +"} +(23,1,1) = {" +UU +UU +UU +UU +UU +tD +FU +gS +gS +gS +gS +gz +Bk +gS +vJ +vf +af +BQ +dy +bs +SN +Jn +Jn +"} +(24,1,1) = {" +qS +qb +YF +RC +qS +Yv +RW +gS +WF +fp +UO +BE +cw +gS +la +la +la +WG +la +la +hq +Jn +Jn +"} +(25,1,1) = {" +qS +Pc +nA +eo +qS +Qe +yr +gS +fZ +xd +cF +Vk +ym +eY +la +ZG +GL +lC +lU +la +Jn +Jn +Jn +"} +(26,1,1) = {" +qS +Ag +bR +rT +gw +ob +JB +gS +ba +fq +qN +YC +St +rl +la +XP +co +oa +UK +la +Jn +Jn +Jn +"} +(27,1,1) = {" +qS +ir +FP +dR +qS +rn +jR +gS +lY +FI +tc +vS +St +Xa +la +VU +UC +UR +AN +la +Jn +Jn +Jn +"} +(28,1,1) = {" +qS +qS +qS +qS +qS +FS +de +gS +ME +RB +bS +eN +nQ +if +la +la +la +la +la +la +ep +Jn +Jn +"} +(29,1,1) = {" +UT +vw +uV +db +RD +Gc +UY +pr +gi +TO +kh +Bn +Yz +pE +ND +nl +uh +yo +eg +lM +An +Jn +Jn +"} +(30,1,1) = {" +UT +bV +jB +Us +UT +Zh +OY +qJ +Tb +kK +eG +gk +gk +LY +nk +vI +tv +Vq +TY +uT +An +Jn +Jn +"} +(31,1,1) = {" +UT +xi +qH +AG +UT +EI +jb +gS +jK +Wj +Xh +KP +xz +An +hZ +An +An +bC +Eu +gM +An +Jn +Jn +"} +(32,1,1) = {" +UT +UT +UT +UT +UT +XR +GO +gS +gS +uo +cm +RR +kN +An +Do +XD +wA +ou +ml +zM +An +Jn +Jn +"} +(33,1,1) = {" +mv +Jn +Hl +Jn +st +Lc +CH +lA +gS +Ht +bN +ZU +na +An +dW +VX +bd +Tn +ZQ +Sh +An +Jn +Jn +"} +(34,1,1) = {" +TG +Jn +TG +Jn +st +lv +Vu +YQ +gS +qG +sd +gR +fY +An +DO +Vy +sN +qU +Gt +MZ +An +Jn +Jn +"} +(35,1,1) = {" +TG +Jn +TG +Jn +qg +lW +lf +gS +gS +nv +nv +nv +nv +An +An +An +An +An +An +An +ep +Jn +Jn +"} +(36,1,1) = {" +TG +Jn +TG +Jn +qg +wy +si +LD +CS +qO +ED +eJ +dv +tf +Jc +Tx +tp +qg +Jn +Jn +Jn +Jn +Jn +"} +(37,1,1) = {" +TG +Jn +TG +Jn +qg +Sq +In +qD +UI +yc +ag +On +JJ +xm +JI +mI +el +qg +Jn +Jn +Jn +Jn +Jn +"} +(38,1,1) = {" +TG +Jn +lw +Jn +iW +DA +CJ +ux +JR +mr +SR +Uu +VJ +qg +Po +tG +ZX +qg +Jn +Jn +Jn +Jn +Jn +"} +(39,1,1) = {" +TG +Jn +Jn +Jn +iW +ap +ZO +Hu +fn +wx +cK +eS +AO +qg +CI +Xf +mE +qg +Jn +Jn +Jn +Jn +Jn +"} +(40,1,1) = {" +VA +Jn +Jn +Jn +iW +jO +lF +gH +qg +RV +hf +hf +tL +qg +rz +vb +eh +qg +Jn +Jn +Jn +Jn +Jn +"} +(41,1,1) = {" +Jn +Jn +Jn +Jn +qg +Ws +pg +Zc +qg +JS +TG +TG +iA +qg +ek +EK +eA +qg +Jn +Jn +Jn +Jn +Jn +"} +(42,1,1) = {" +Jn +Jn +Jn +Jn +nL +Xu +Xu +Xu +Ga +Jn +Jn +Jn +Jn +rm +qg +qg +qg +WE +Jn +Jn +Jn +Jn +Jn +"} diff --git a/code/game/MapData/shuttles/ngr_pururangi.dm b/code/game/MapData/shuttles/ngr_pururangi.dm new file mode 100644 index 0000000000..e36743dd5d --- /dev/null +++ b/code/game/MapData/shuttles/ngr_pururangi.dm @@ -0,0 +1,19 @@ +/obj/machinery/air_sensor/atmos/air_tank/pururangi + id_tag = "puru_air_sensor" + +/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/air_input/pururangi + id = "puru_airtank_in" + +/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/atmos/air_output/pururangi + id_tag = "puru_air_out" + +/obj/machinery/computer/atmos_control/tank/air_tank/pururangi + input_tag = "puru_airtank_in" + output_tag = "puru_air_out" + sensors = list("puru_air_sensor" = "Air Mix Tank") + +/obj/machinery/air_sensor/external/pururangi + id_tag = "puru_external_sensor" + +/obj/machinery/computer/atmos_control/external/pururangi + sensors = list("puru_external_sensor" = "External Atmospherics Monitoring") diff --git a/code/modules/clothing/outfits/factions/syndicate.dm b/code/modules/clothing/outfits/factions/syndicate.dm index 8af9e3c90b..55c260d8a4 100644 --- a/code/modules/clothing/outfits/factions/syndicate.dm +++ b/code/modules/clothing/outfits/factions/syndicate.dm @@ -55,6 +55,7 @@ faction = FACTION_NGR id_assignment = "Crewman" + ears = /obj/item/radio/headset/syndicate/ngr head = /obj/item/clothing/head/ngr uniform = /obj/item/clothing/under/syndicate/ngr shoes = /obj/item/clothing/shoes/combat @@ -369,7 +370,7 @@ faction = FACTION_NGR head = /obj/item/clothing/head/hardhat/ngr/foreman - ears = /obj/item/radio/headset/syndicate/alt/ngr + ears = /obj/item/radio/headset/syndicate/alt/captain/ngr uniform = /obj/item/clothing/under/syndicate/ngr/officer alt_uniform = null suit = /obj/item/clothing/suit/ngr @@ -427,7 +428,7 @@ faction = FACTION_NGR id_assignment = "Ensign" - ears = /obj/item/radio/headset/syndicate/ngr + ears = /obj/item/radio/headset/syndicate/alt/captain/ngr uniform = /obj/item/clothing/under/syndicate/ngr/officer head = /obj/item/clothing/head/ngr suit = /obj/item/clothing/suit/armor/ngr/lieutenant @@ -485,6 +486,7 @@ faction = FACTION_NGR id_assignment = "Lieutenant" + ears = /obj/item/radio/headset/syndicate/alt/captain/ngr uniform = /obj/item/clothing/under/syndicate/ngr/officer head = /obj/item/clothing/head/ngr/peaked suit = /obj/item/clothing/suit/armor/ngr/lieutenant @@ -576,6 +578,7 @@ name = "Syndicate - Medical Doctor (New Gorlex Republic)" faction = FACTION_NGR + ears = /obj/item/radio/headset/syndicate/ngr uniform = /obj/item/clothing/under/syndicate/ngr head = /obj/item/clothing/head/ngr/surgical suit = /obj/item/clothing/suit/ngr/smock @@ -623,7 +626,27 @@ /datum/outfit/job/syndicate/paramedic/gorlex name = "Syndicate - Paramedic (Gorlex)" +/datum/outfit/job/syndicate/paramedic/ngr + name = "Syndicate - Paramedic (New Gorlex Republic)" + faction = FACTION_NGR + id_assignment = "Field Medic" + + ears = /obj/item/radio/headset/syndicate/ngr + uniform = /obj/item/clothing/under/syndicate/ngr + suit = /obj/item/clothing/suit/ngr/smock + glasses = /obj/item/clothing/glasses/hud/health + r_pocket = /obj/item/melee/knife/survival + id = /obj/item/card/id/syndicate_command/crew_id + shoes = /obj/item/clothing/shoes/combat + +/datum/outfit/job/syndicate/paramedic/ngr/stripped + name = "Syndicate - Paramedic - Stripped (New Gorlex Republic)" + head = null + suit = null + glasses = null + r_pocket = null + suit_store = null //psychologist @@ -753,6 +776,7 @@ id_assignment = "Operative" job_icon = "securityofficer" + ears = /obj/item/radio/headset/syndicate/alt/ngr uniform = /obj/item/clothing/under/syndicate/ngr gloves = /obj/item/clothing/gloves/color/black shoes = /obj/item/clothing/shoes/combat @@ -840,7 +864,7 @@ uniform = /obj/item/clothing/under/syndicate/ngr/jumpsuit accessory = /obj/item/clothing/accessory/armband/cargo shoes = /obj/item/clothing/shoes/workboots - ears = /obj/item/radio/headset/alt + ears = /obj/item/radio/headset/syndicate/alt/ngr /datum/outfit/job/syndicate/miner/ngr/stripped name = "Syndicate - Wrecker - Stripped (New Gorlex Republic)" @@ -921,6 +945,7 @@ faction = FACTION_NGR id_assignment = "Mechanic" + ears = /obj/item/radio/headset/syndicate/ngr head = /obj/item/clothing/head/hardhat/ngr suit = /obj/item/clothing/suit/hazardvest/ngr uniform = /obj/item/clothing/under/syndicate/ngr diff --git a/shiptest.dme b/shiptest.dme index bfd351f0b4..c6c975e3b5 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -1224,7 +1224,9 @@ #include "code\game\machinery\telecomms\machines\relay.dm" #include "code\game\machinery\telecomms\machines\server.dm" #include "code\game\MapData\outposts\cybersun_gas_giant.dm" +#include "code\game\MapData\shuttles\independent_shetland.dm" #include "code\game\MapData\shuttles\misc.dm" +#include "code\game\MapData\shuttles\ngr_pururangi.dm" #include "code\game\MapData\shuttles\pgf_bolide.dm" #include "code\game\MapData\shuttles\pgf_crying_sun.dm" #include "code\game\MapData\shuttles\pgf_woeful_cthonian.dm" @@ -1233,7 +1235,6 @@ #include "code\game\MapData\shuttles\warra_magpie.dm" #include "code\game\MapData\shuttles\warra_mimir.dm" #include "code\game\MapData\shuttles\warra_ranger.dm" -#include "code\game\MapData\shuttles\independent_shetland.dm" #include "code\game\mecha\mech_bay.dm" #include "code\game\mecha\mech_fabricator.dm" #include "code\game\mecha\mecha.dm" From c4e8e57612fced915b9705e37b9b76d1411431ae Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 7 Apr 2026 17:57:05 -0500 Subject: [PATCH 11/70] Automatic changelog generation for PR #5926 [ci skip] --- html/changelogs/AutoChangeLog-pr-5926.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5926.yml diff --git a/html/changelogs/AutoChangeLog-pr-5926.yml b/html/changelogs/AutoChangeLog-pr-5926.yml new file mode 100644 index 0000000000..cf8e14d0ce --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5926.yml @@ -0,0 +1,4 @@ +author: Yule & Addust +changes: + - {rscadd: Added the Puru-Rangi-class auxiliary response vessel} +delete-after: true From 3defb70deefe3361029e1d08de6184160dc43021 Mon Sep 17 00:00:00 2001 From: Jay <19880843+googobbug@users.noreply.github.com> Date: Tue, 7 Apr 2026 18:39:41 -0500 Subject: [PATCH 12/70] Reworks pancrazine (#6102) ## About The Pull Request Changes how pancrazine works. Rather than scaling with heat (which did not work), it now scales with the amount of reagents in your system. Instead of dealing heart damage as a side effect, it now gets you drunk. Also removes an incorrect mention to dylovene. ## Why It's Good For The Game The previous gimmick was janky and didn't really work, this should be a little more engaging. Also more ways to get high off of medical supplies. ## Changelog :cl: Bumtickley00 balance: Pancrazine now scales healing with the amount of reagents in your system and gets you drunk. spellcheck: Removed dylovene mention on cargo screen /:cl: --------- Signed-off-by: Jay <19880843+googobbug@users.noreply.github.com> Co-authored-by: Robin --- .../medical_reagents/medicine_reagents.dm | 38 +++---------------- .../reagents/reagent_containers/syringes.dm | 2 +- 2 files changed, 7 insertions(+), 33 deletions(-) diff --git a/code/modules/reagents/chemistry/reagents/medical_reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medical_reagents/medicine_reagents.dm index 887d5ced8f..fee3108358 100644 --- a/code/modules/reagents/chemistry/reagents/medical_reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medical_reagents/medicine_reagents.dm @@ -412,43 +412,17 @@ A.reagents.add_reagent(/datum/reagent/carbon, volume) // Its pores would get clogged with gunk anyway. ..() -//its seiver. i ran out of ideas + seiver was a good one /datum/reagent/medicine/pancrazine name = "Pancrazine" - description = "A second generation Tecetian research chemical developed as the byproduct of the terraforming process. Injection of the substance while cold causes the body to regenerate radiation damage, while heating it causes rapid purging of toxic effects." + description = "A second generation Tecetian research chemical developed as the byproduct of the terraforming process. This medication heals blood toxicity, working faster the more active the patient's metabolism is. A common side effect reported is a feeling of drunkenness." color = "#c3915d" - var/radbonustemp = (T0C - 100) //being below this number gives you 10% off rads. - -/datum/reagent/medicine/pancrazine/on_mob_metabolize(mob/living/carbon/human/M) - . = ..() - radbonustemp = rand(radbonustemp - 50, radbonustemp + 50) // Basically this means 50K and below will always give the percent heal, and upto 150K could. Calculated once. /datum/reagent/medicine/pancrazine/on_mob_life(mob/living/carbon/human/M) - var/chemtemp = min(holder.chem_temp, 1000) - chemtemp = chemtemp ? chemtemp : 273 //why do you have null sweaty - var/healypoints = 0 //5 healypoints = 1 heart damage; 5 rads = 1 tox damage healed for the purpose of healypoints - - //you're hot - var/toxcalc = min(round((chemtemp-1000)/175+5,0.1),5) //max 2.5 tox healing a tick - if(toxcalc > 0) - M.adjustToxLoss(toxcalc*-0.5) - healypoints += toxcalc - - //and you're cold - var/radcalc = round((T0C-chemtemp)/6,0.1) //max ~45 rad loss unless you've hit below 0K. if so, wow. - if(radcalc > 0) - //no cost percent healing if you are SUPER cold (on top of cost healing) - if(chemtemp < radbonustemp*0.1) //if you're super chilly, it takes off 25% of your current rads - M.radiation = round(M.radiation * 0.75) - else if(chemtemp < radbonustemp)//else if you're under the chill-zone, it takes off 10% of your current rads - M.radiation = round(M.radiation * 0.9) - M.radiation -= radcalc - healypoints += (radcalc/5) - - - //you're yes and... oh no! - healypoints = round(healypoints,0.1) - M.adjustOrganLoss(ORGAN_SLOT_HEART, healypoints/5) + var/bonus = 0 //in practice will always be at least one since it has itself + for(var/r in M.reagents.reagent_list) + bonus += 1 + M.adjustToxLoss(-0.5 * (bonus + 1)) + M.adjust_drunk_effect(sqrt(volume) * (pick(5,30) + 15 * bonus) * ALCOHOL_RATE * REM) ..() return TRUE diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index bef38d2c8c..f46b6dd1d4 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -273,7 +273,7 @@ /obj/item/reagent_containers/syringe/pancrazine name = "syringe (pancrazine)" - desc = "Contains pancrazine, used to treat toxins and purge chemicals. The tag on the syringe states 'Heat before injection'." + desc = "Contains pancrazine, used to treat toxins." list_reagents = list(/datum/reagent/medicine/pancrazine = 15) /obj/item/reagent_containers/syringe/charcoal From 297f9840480815c91858e42d41ea46c3ca500302 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 7 Apr 2026 18:57:20 -0500 Subject: [PATCH 13/70] Automatic changelog generation for PR #6102 [ci skip] --- html/changelogs/AutoChangeLog-pr-6102.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-6102.yml diff --git a/html/changelogs/AutoChangeLog-pr-6102.yml b/html/changelogs/AutoChangeLog-pr-6102.yml new file mode 100644 index 0000000000..6c947fa20f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6102.yml @@ -0,0 +1,6 @@ +author: Bumtickley00 +changes: + - {balance: Pancrazine now scales healing with the amount of reagents in your + system and gets you drunk.} + - {spellcheck: Removed dylovene mention on cargo screen} +delete-after: true From c07756ed8ef9713afd4b5ba76ac9ae3e0bbf8a50 Mon Sep 17 00:00:00 2001 From: Gristlebee <56049844+Gristlebee@users.noreply.github.com> Date: Tue, 7 Apr 2026 16:41:18 -0700 Subject: [PATCH 14/70] Megafauna no longer gib by default (#6134) ## About The Pull Request Megafauna no longer gib/dust by default. Gibbing can enabled by setting the `can_gib` var to true. ## Why It's Good For The Game Makes megafauna a lot more usable for events since you can set them not to permanently round remove people. ## Changelog :cl: balance: Megafauna no longer gib by default. /:cl: --- .../hostile/megafauna/blood_drunk_miner.dm | 2 +- .../hostile/megafauna/bubblegum.dm | 19 ++++++++++--------- .../hostile/megafauna/cult_templar.dm | 3 ++- .../simple_animal/hostile/megafauna/drake.dm | 3 ++- .../hostile/megafauna/hierophant.dm | 2 +- .../hostile/megafauna/megafauna.dm | 3 ++- 6 files changed, 18 insertions(+), 14 deletions(-) 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 b003dee82c..a8b934bd99 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 @@ -153,7 +153,7 @@ Difficulty: Medium if(QDELETED(target) || transform_stop_attack) return face_atom(target) - if(isliving(target)) + if(isliving(target) && can_gib) var/mob/living/L = target if(L.stat == DEAD) visible_message(span_danger("[src] butchers [L]!"), diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm index 7d113f8ffb..ed471d3d34 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -258,15 +258,16 @@ Difficulty: Hard new /obj/effect/temp_visual/bubblegum_hands/leftpaw(T) new /obj/effect/temp_visual/bubblegum_hands/leftthumb(T) SLEEP_CHECK_DEATH(6) - for(var/mob/living/L in T) - if(!faction_check_mob(L)) - if(L.stat != CONSCIOUS) - to_chat(L, span_userdanger("[src] drags you through the blood!")) - playsound(T, 'sound/magic/enter_blood.ogg', 100, TRUE, -1) - var/turf/targetturf = get_step(src, dir) - L.forceMove(targetturf) - playsound(targetturf, 'sound/magic/exit_blood.ogg', 100, TRUE, -1) - addtimer(CALLBACK(src, PROC_REF(devour), L), 2) + if(can_gib) + for(var/mob/living/L in T) + if(!faction_check_mob(L)) + if(L.stat != CONSCIOUS) + to_chat(L, span_userdanger("[src] drags you through the blood!")) + playsound(T, 'sound/magic/enter_blood.ogg', 100, TRUE, -1) + var/turf/targetturf = get_step(src, dir) + L.forceMove(targetturf) + playsound(targetturf, 'sound/magic/exit_blood.ogg', 100, TRUE, -1) + addtimer(CALLBACK(src, PROC_REF(devour), L), 2) SLEEP_CHECK_DEATH(1) /mob/living/simple_animal/hostile/megafauna/bubblegum/proc/blood_warp() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/cult_templar.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/cult_templar.dm index ef7f34eba9..0bbf03f812 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/cult_templar.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/cult_templar.dm @@ -117,7 +117,8 @@ span_userdanger("You butcher [L], restoring your health!")) // if(!is_station_level(z) || client) //NPC monsters won't heal while on station adjustHealth(-(L.maxHealth * 0.5)) - L.gib() + if(can_gib) + L.gib() if(ishuman(L)) // If target is a human - yell some funny shit. telegraph() say("Mah'weyh pleggh at e'ntrath!!") 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 d2229dd21d..9c653c68cc 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -342,7 +342,8 @@ Difficulty: Medium for(var/mob/living/L in orange(1, src)) if(L.stat) visible_message(span_warning("[src] slams down on [L], crushing [L.p_them()]!")) - L.gib() + if(can_gib) + L.gib() else L.adjustBruteLoss(75) if(L && !QDELETED(L)) // Some mobs are deleted on death diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index 42e56209bd..6a6660ef44 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -457,7 +457,7 @@ Difficulty: Hard else burst_range = 3 INVOKE_ASYNC(src, PROC_REF(burst), get_turf(src), 0.25) //melee attacks on living mobs cause it to release a fast burst if on cooldown - else + else if(can_gib) devour(L) else return ..() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm index a184a7740d..d61296768e 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm @@ -41,6 +41,7 @@ var/chosen_attack = 1 // chosen attack num var/list/attack_action_types = list() var/small_sprite_type + var/can_gib = FALSE /mob/living/simple_animal/hostile/megafauna/Initialize(mapload) . = ..() @@ -110,7 +111,7 @@ if(L.stat != DEAD) if(!client && ranged && ranged_cooldown <= world.time) OpenFire() - else + else if(can_gib) devour(L) /mob/living/simple_animal/hostile/megafauna/proc/devour(mob/living/L) From 09ba36e1139ee30724e8881ca5540e0ae293c44d Mon Sep 17 00:00:00 2001 From: Gristlebee <56049844+Gristlebee@users.noreply.github.com> Date: Tue, 7 Apr 2026 16:41:56 -0700 Subject: [PATCH 15/70] Hail optimizations (#6090) ## About The Pull Request Hails show who sent them, and dont repeat if you're docked to the same overmap object ## Why It's Good For The Game Useful info to know who's hailing you and less chat spam ## Changelog :cl: add: Incoming hails display ship name. add: hails dont repeat if you're docked to the same overmap location --- code/modules/overmap/_overmap_datum.dm | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/code/modules/overmap/_overmap_datum.dm b/code/modules/overmap/_overmap_datum.dm index 34c93cfb87..7de3d49958 100644 --- a/code/modules/overmap/_overmap_datum.dm +++ b/code/modules/overmap/_overmap_datum.dm @@ -382,8 +382,9 @@ var/input = stripped_input(user, "Please choose a message to hail the target with.", "Hailing Vessel") if(!input) return - priority_announce("[html_decode(input)]", "Outbound Hail to [interact_target]", 'sound/effects/hail.ogg', sender_override = name, zlevel = shuttle_port.virtual_z()) - interact_target.relay_message(user,interact_target, input) + if(docked_to != interact_target.docked_to) // if we're docked on the same thing, dont repeat + priority_announce("[html_decode(input)]", "Outbound Hail to [interact_target]", 'sound/effects/hail.ogg', sender_override = name, zlevel = shuttle_port.virtual_z()) + interact_target.relay_message(user,interact_target, input, src) deadchat_broadcast(" hailed the [interact_target.name]: [input]", "[user.real_name]", user, message_type=DEADCHAT_ANNOUNCEMENT) return @@ -392,8 +393,10 @@ * * * user - The user requesting the options. * * requesting_interactor - The overmap datum requesting the options. + * * message - the message to be sent to the requesting interactor + * * sender - the overmap datum that initiated the message */ -/datum/overmap/proc/relay_message(mob/living/user, datum/overmap/requesting_interactor, message) +/datum/overmap/proc/relay_message(mob/living/user, datum/overmap/requesting_interactor, message, datum/overmap/sender) return FALSE /** @@ -401,9 +404,11 @@ * * * user - The user requesting the options. * * requesting_interactor - The overmap datum requesting the options. + * * message - the message to be sent to the requesting interactor + * * sender - the overmap datum that initiated the message */ -/datum/overmap/ship/controlled/relay_message(mob/living/user, datum/overmap/requesting_interactor, message) - priority_announce("[html_decode(message)]", "Incoming Hail", 'sound/effects/hail.ogg', sender_override = requesting_interactor.name, zlevel = shuttle_port.virtual_z()) +/datum/overmap/ship/controlled/relay_message(mob/living/user, datum/overmap/requesting_interactor, message, datum/overmap/sender) + priority_announce("[html_decode(message)]", "Incoming Hail from [sender ? sender : "Unknown Source"]", 'sound/effects/hail.ogg', sender_override = requesting_interactor.name, zlevel = shuttle_port.virtual_z()) return /** From f2def0ccd71348e36c03fe4bf8bc865ecab88887 Mon Sep 17 00:00:00 2001 From: Jay <19880843+googobbug@users.noreply.github.com> Date: Tue, 7 Apr 2026 18:42:09 -0500 Subject: [PATCH 16/70] Removes Hunter's Pride engraving from the improvised shotgun (#6109) ## About The Pull Request Removes the HP engraving from the pipe shotgun. ## Why It's Good For The Game They did not make this gun. You, or some other bum, did. ## Changelog :cl: Bumtickley00 spellcheck: Improvised shotgun no longer has a Hunter's Pride engraving. /:cl: Co-authored-by: Robin --- code/modules/projectiles/guns/ballistic/shotgun.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index bdc7667762..81945e4385 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -155,6 +155,7 @@ NO_MAG_GUN_HELPER(shotgun/automatic/bulldog/inteq) ) sawn_desc = "I'm just here for the gasoline." unique_reskin = null + manufacturer = MANUFACTURER_NONE var/slung = FALSE gun_firemodes = list(FIREMODE_SEMIAUTO) From 9acf95ecd5f615ed221f8029e6ed2f43d6c0ab62 Mon Sep 17 00:00:00 2001 From: zimon9 <122945887+zimon9@users.noreply.github.com> Date: Tue, 7 Apr 2026 19:43:51 -0400 Subject: [PATCH 17/70] Reduces the layer of a subset of atmospherics machines so that they layer below catwalks (#6047) ## About The Pull Request This PR changes the layer of binary, trinary, and layer adapter atmospherics machines so that they layer below catwalks instead of jutting above them. | Before |image| |--------|---| | After |image| Below is an example with the layer changes implemented, to show that they don't appear to layer incorrectly in a different context. image ## Why It's Good For The Game Having certain atmospherics machines pop out of a catwalk and layer above them can look bad in certain maps. This should help make them look nicer when used alongside catwalks. ## Changelog :cl: del: Removed layer adapter layer update proc code: changed the layer of atmospherics machines so they layer below catwalks /:cl: --- .../machinery/components/binary_devices/binary_devices.dm | 2 +- .../machinery/components/trinary_devices/trinary_devices.dm | 2 +- code/modules/atmospherics/machinery/pipes/layermanifold.dm | 4 +--- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm b/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm index 8f1e2cc354..28a8e4de23 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm @@ -4,7 +4,7 @@ initialize_directions = SOUTH|NORTH use_power = IDLE_POWER_USE device_type = BINARY - layer = GAS_PUMP_LAYER + layer = UNDER_CATWALK var/uid var/static/gl_uid = 1 diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/trinary_devices.dm b/code/modules/atmospherics/machinery/components/trinary_devices/trinary_devices.dm index c587b1b1b6..f9a2e4d710 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/trinary_devices.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/trinary_devices.dm @@ -4,7 +4,7 @@ initialize_directions = SOUTH|NORTH|WEST use_power = IDLE_POWER_USE device_type = TRINARY - layer = GAS_FILTER_LAYER + layer = UNDER_CATWALK pipe_flags = PIPING_ONE_PER_TURF var/flipped = FALSE diff --git a/code/modules/atmospherics/machinery/pipes/layermanifold.dm b/code/modules/atmospherics/machinery/pipes/layermanifold.dm index 1f6e9cab53..e050ae0645 100644 --- a/code/modules/atmospherics/machinery/pipes/layermanifold.dm +++ b/code/modules/atmospherics/machinery/pipes/layermanifold.dm @@ -7,6 +7,7 @@ initialize_directions = NORTH|SOUTH pipe_flags = PIPING_ALL_LAYER | PIPING_DEFAULT_LAYER_ONLY | PIPING_CARDINAL_AUTONORMALIZE piping_layer = PIPING_LAYER_DEFAULT + layer = UNDER_CATWALK device_type = 0 volume = 260 construction_type = /obj/item/pipe/binary @@ -42,9 +43,6 @@ /obj/machinery/atmospherics/pipe/layer_manifold/proc/get_all_connected_nodes() return front_nodes + back_nodes + nodes -/obj/machinery/atmospherics/pipe/layer_manifold/update_layer() - layer = initial(layer) + (PIPING_LAYER_MAX * PIPING_LAYER_LCHANGE) //This is above everything else. - /obj/machinery/atmospherics/pipe/layer_manifold/update_overlays() . = ..() From 78ae5b7b77e719518153345e39a6ec7d2de6d86d Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 7 Apr 2026 19:23:15 -0500 Subject: [PATCH 18/70] Automatic changelog generation for PR #6047 [ci skip] --- html/changelogs/AutoChangeLog-pr-6047.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-6047.yml diff --git a/html/changelogs/AutoChangeLog-pr-6047.yml b/html/changelogs/AutoChangeLog-pr-6047.yml new file mode 100644 index 0000000000..f4905285fa --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6047.yml @@ -0,0 +1,6 @@ +author: zimon9 +changes: + - {rscdel: Removed layer adapter layer update proc} + - {code_imp: changed the layer of atmospherics machines so they layer below + catwalks} +delete-after: true From 2cc68eba5733da9db60b80ef3ad8dbe0b74754b7 Mon Sep 17 00:00:00 2001 From: thearbiber <135081923+thearbiber@users.noreply.github.com> Date: Tue, 7 Apr 2026 20:11:41 -0400 Subject: [PATCH 19/70] Leyak Housekeeping (#6068) ## About The Pull Request Cybersun has deemed the wrecker a "Dumb Chudling" and replaced his bay while leaving him in a dumpster to rot. The medical doctor is now more appreciated, and docking ports were switched around. Wings got trimmed a little bit for it. image ## Why It's Good For The Game Maintaining ship good. The mechbay served like 0 purpose, same with the wrecker. The doctor just had to rawdog surgery in cargo. ## Changelog :cl: add: various leyak adjustments del: wrecker on leyak /:cl: --- _maps/configs/hardliners_leyak.json | 9 +- _maps/shuttles/hardliner/hardliners_leyak.dmm | 929 +++++++++--------- 2 files changed, 462 insertions(+), 476 deletions(-) diff --git a/_maps/configs/hardliners_leyak.json b/_maps/configs/hardliners_leyak.json index 6dfdf98879..a8ce4bade4 100644 --- a/_maps/configs/hardliners_leyak.json +++ b/_maps/configs/hardliners_leyak.json @@ -18,6 +18,7 @@ "map_path": "_maps/shuttles/hardliner/hardliners_leyak.dmm", "map_id": "hardliners_leyak", "limit": 1, + "tranist_y_offset": -11, "starting_funds": 1500, "job_slots": { "Captain": { @@ -35,7 +36,7 @@ "officer": true, "slots": 1 }, - "Medical Doctor": { + "Field Medic": { "outfit": "/datum/outfit/job/syndicate/doctor/gorlex", "slots": 1 }, @@ -43,17 +44,13 @@ "outfit": "/datum/outfit/job/syndicate/engineer/gorlex", "slots": 1 }, - "Wrecker": { - "outfit": "/datum/outfit/job/syndicate/miner/gorlex", - "slots":1 - }, "Trooper": { "outfit": "/datum/outfit/job/syndicate/security/gorlex", "slots": 2 }, "Junior Agent": { "outfit": "/datum/outfit/job/syndicate/assistant/gorlex", - "slots": 2 + "slots": 1 } }, "enabled": true diff --git a/_maps/shuttles/hardliner/hardliners_leyak.dmm b/_maps/shuttles/hardliner/hardliners_leyak.dmm index bc4e42d0e3..c00125f8d4 100644 --- a/_maps/shuttles/hardliner/hardliners_leyak.dmm +++ b/_maps/shuttles/hardliner/hardliners_leyak.dmm @@ -1,9 +1,18 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aj" = ( -/obj/effect/spawner/bunk_bed, -/obj/structure/curtain/cloth/grey, -/obj/machinery/light/directional/east, -/turf/open/floor/carpet/nanoweave, +/obj/effect/turf_decal/siding{ + color = "#474747" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/dark, /area/ship/crew/dorm) "ak" = ( /obj/structure/catwalk/over/plated_catwalk/white, @@ -197,15 +206,15 @@ /turf/open/floor/plating, /area/ship/engineering/engines) "bD" = ( -/obj/machinery/computer/mech_bay_power_console{ +/obj/structure/chair/plastic{ dir = 1 }, -/obj/effect/turf_decal/industrial/traffic{ - dir = 6 +/obj/effect/turf_decal/trimline/opaque/syndiered/line, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 }, -/obj/machinery/light/directional/south, -/turf/open/floor/plasteel/tech/grid, -/area/ship/science/workshop) +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) "bJ" = ( /obj/structure/sink{ dir = 4; @@ -319,7 +328,7 @@ /obj/structure/guncloset, /obj/item/gun/ballistic/automatic/pistol/asp/no_mag, /obj/item/gun/ballistic/shotgun/automatic/bulldog/no_mag, -/obj/item/gun/ballistic/shotgun/automatic/bulldog/no_mag, +/obj/item/gun/ballistic/automatic/smg/cobra/no_mag, /turf/open/floor/plasteel/dark, /area/ship/security/armory) "cS" = ( @@ -342,15 +351,11 @@ /turf/open/floor/plasteel, /area/ship/crew/canteen) "cU" = ( -/obj/effect/turf_decal/techfloor{ - dir = 4 - }, -/obj/structure/railing/thin, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/tech, -/area/ship/science/workshop) +/obj/structure/bed/roller, +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) "dl" = ( /obj/structure/falsewall/titanium, /turf/open/floor/plating, @@ -443,24 +448,13 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ship/cargo) "eb" = ( -/obj/effect/turf_decal/trimline/opaque/syndiered/filled/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/opaque/syndiered/filled/corner{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, /obj/effect/turf_decal/siding/black{ dir = 4 }, +/obj/structure/closet/emcloset/wall/directional/west, +/obj/effect/turf_decal/corner/opaque/syndiered/border{ + dir = 8 + }, /turf/open/floor/plasteel/mono/white, /area/ship/hallway/central) "eh" = ( @@ -483,19 +477,29 @@ /obj/item/ammo_box/magazine/m57_39_asp, /obj/item/ammo_box/magazine/m12g_bulldog/slug, /obj/item/ammo_box/magazine/m12g_bulldog/slug, -/obj/item/ammo_box/magazine/m12g_bulldog/slug, -/obj/item/ammo_box/magazine/m12g_bulldog/slug, -/obj/item/ammo_box/magazine/m12g_bulldog/slug, -/obj/item/ammo_box/magazine/m12g_bulldog/slug, +/obj/item/ammo_box/magazine/m45_cobra, +/obj/item/ammo_box/magazine/m45_cobra, +/obj/item/ammo_box/magazine/m45_cobra, +/obj/item/ammo_box/magazine/m12g_bulldog{ + pixel_x = 7; + pixel_y = -4 + }, +/obj/item/ammo_box/magazine/m12g_bulldog{ + pixel_x = 6; + pixel_y = -4 + }, /turf/open/floor/plasteel/dark, /area/ship/security/armory) "eA" = ( -/obj/structure/mecha_wreckage/touro, -/obj/effect/turf_decal/industrial/traffic{ - dir = 1 +/obj/structure/table/chem, +/obj/item/storage/box/bodybags{ + pixel_x = 6; + pixel_y = 6 }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/science/workshop) +/obj/effect/turf_decal/trimline/opaque/syndiered/line, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) "eD" = ( /obj/effect/turf_decal/siding/wood{ color = "#E6D2BA"; @@ -566,39 +570,14 @@ /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "fj" = ( -/obj/item/clothing/under/syndicate/hardliners/jumpsuit{ - pixel_x = -9; - pixel_y = 9 - }, -/obj/effect/turf_decal/siding/thinplating{ +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/trimline/opaque/syndiered/line{ dir = 1 }, -/obj/item/clothing/suit/hazardvest/hardliners{ - pixel_x = 6; - pixel_y = 10 - }, -/obj/item/storage/toolbox/syndicate, -/obj/item/clothing/gloves/explorer{ - pixel_y = -8 - }, -/obj/item/clothing/shoes/workboots, -/obj/item/clothing/head/hardhat/hardliners{ - pixel_x = -10; - pixel_y = -7 - }, -/obj/item/radio/headset/alt{ - pixel_x = 8; - pixel_y = -5 - }, -/obj/item/melee/knife/survival, -/obj/item/flashlight/seclite, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/structure/closet/secure_closet/wall/directional/north{ - icon_state = "sec_wall"; - req_access_txt = list(48) - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/science/workshop) +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) "fq" = ( /obj/effect/turf_decal/industrial/fire{ dir = 4 @@ -647,15 +626,22 @@ /turf/open/floor/plasteel/mono/white, /area/ship/hallway/central) "ge" = ( -/obj/structure/catwalk/over/plated_catwalk/white, /obj/structure/cable{ icon_state = "1-4" }, /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/catwalk/over/plated_catwalk/white, /turf/open/floor/plating, /area/ship/hallway/central) "gs" = ( @@ -701,14 +687,19 @@ /turf/open/floor/plating, /area/ship/security) "hg" = ( -/obj/effect/turf_decal/techfloor{ - dir = 4 +/obj/item/storage/firstaid/medical{ + pixel_x = 8; + pixel_y = -1 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/item/storage/firstaid/brute{ + pixel_x = -9; + pixel_y = -1 }, -/turf/open/floor/plasteel/tech, -/area/ship/science/workshop) +/obj/structure/rack, +/obj/item/storage/firstaid/regular, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) "hm" = ( /obj/structure/catwalk/over/plated_catwalk, /obj/structure/cable{ @@ -733,20 +724,44 @@ /turf/open/floor/plasteel/tech, /area/ship/cargo) "hu" = ( -/obj/effect/turf_decal/siding{ - color = "#474747" +/obj/item/clothing/suit/hooded/wintercoat/security/hardliners{ + pixel_x = 5; + pixel_y = 8 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/item/clothing/suit/hooded/wintercoat/security/hardliners{ + pixel_x = 8; + pixel_y = -1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 +/obj/item/clothing/suit/hooded/wintercoat/security/hardliners{ + pixel_x = -4; + pixel_y = 7 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/obj/item/clothing/suit/hooded/wintercoat/security/hardliners{ + pixel_x = -3; + pixel_y = -1 }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/plasteel/dark, +/obj/item/clothing/head/soft/cybersun, +/obj/item/clothing/head/soft/cybersun, +/obj/item/clothing/head/soft/cybersun, +/obj/item/clothing/head/soft/cybersun, +/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/combat, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/under/syndicate/hardliners/jumpsuit, +/obj/item/clothing/under/syndicate/hardliners/jumpsuit, +/obj/item/clothing/under/syndicate/hardliners/jumpsuit, +/obj/item/clothing/under/syndicate/hardliners/jumpsuit, +/obj/item/clothing/under/syndicate/hardliners, +/obj/item/clothing/under/syndicate/hardliners, +/obj/item/clothing/under/syndicate/hardliners, +/obj/item/clothing/under/syndicate/hardliners, +/obj/structure/closet/wall/red/directional/south, +/turf/open/floor/carpet/nanoweave, /area/ship/crew/dorm) "hw" = ( /obj/machinery/power/port_gen/pacman, @@ -845,14 +860,32 @@ dir = 8 }, /obj/structure/rack, -/obj/item/storage/toolbox/ammo/a12g_slug{ - pixel_x = -7 - }, /obj/item/storage/toolbox/ammo/c57{ pixel_x = 8 }, /obj/item/storage/toolbox/ammo/c9mm{ - pixel_y = 10 + pixel_y = 9; + pixel_x = 8 + }, +/obj/item/storage/toolbox/ammo/c45{ + pixel_x = 8; + pixel_y = -4 + }, +/obj/item/storage/box/ammo/a12g_slug{ + pixel_x = -6; + pixel_y = -6 + }, +/obj/item/storage/box/ammo/a12g_slug{ + pixel_x = -6; + pixel_y = -6 + }, +/obj/item/storage/box/ammo/a12g_buckshot{ + pixel_x = -5; + pixel_y = -2 + }, +/obj/item/storage/box/ammo/a12g_buckshot{ + pixel_x = -5; + pixel_y = -2 }, /turf/open/floor/plasteel/dark, /area/ship/security/armory) @@ -957,11 +990,6 @@ "kr" = ( /obj/effect/turf_decal/industrial/fire, /obj/effect/turf_decal/siding/thinplating/dark, -/obj/structure/closet/syndicate/personal{ - name = "demolitions closet"; - populate = 0 - }, -/obj/item/storage/backpack/duffelbag/syndie/c4, /obj/effect/turf_decal/industrial/fire{ dir = 1 }, @@ -969,6 +997,19 @@ dir = 1 }, /obj/machinery/light/small/directional/north, +/obj/structure/table/reinforced, +/obj/item/gun_maint_kit{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/item/gun_maint_kit{ + pixel_x = 2; + pixel_y = -1 + }, +/obj/item/gun_maint_kit{ + pixel_x = -4; + pixel_y = 10 + }, /turf/open/floor/plasteel/dark, /area/ship/security/armory) "kw" = ( @@ -1076,19 +1117,15 @@ /turf/open/floor/plasteel/tech, /area/ship/engineering/engines) "lP" = ( -/obj/effect/turf_decal/techfloor, -/obj/structure/cable{ - icon_state = "5-8" +/obj/structure/table/chem, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 }, /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/science/workshop) +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) "mh" = ( /obj/effect/turf_decal/trimline/opaque/syndiered/line{ dir = 4 @@ -1181,10 +1218,11 @@ /area/ship/crew/canteen) "nd" = ( /obj/docking_port/stationary{ - dwidth = 15; - height = 15; - width = 30; - dir = 2 + dwidth = 30; + height = 60; + width = 60; + dir = 2; + name = "Leyak Starboard Dock" }, /turf/template_noop, /area/template_noop) @@ -1359,21 +1397,6 @@ }, /turf/open/floor/plasteel/tech/grid, /area/ship/bridge) -"oP" = ( -/obj/machinery/shower{ - pixel_y = 20 - }, -/obj/structure/curtain, -/obj/structure/chair/handrail, -/obj/effect/turf_decal/steeldecal/steel_decals9{ - dir = 4 - }, -/obj/effect/turf_decal/steeldecal/steel_decals9{ - dir = 1 - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/plasteel/showroomfloor, -/area/ship/crew/dorm) "pi" = ( /obj/machinery/computer/crew{ icon_state = "computer-left" @@ -1446,13 +1469,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plating, /area/ship/hallway/central) -"qc" = ( -/obj/effect/turf_decal/spline/plain/opaque/syndiered{ - dir = 1 - }, -/obj/effect/turf_decal/corner/opaque/syndiered/half, -/turf/open/floor/engine/hull, -/area/ship/external/dark) "qd" = ( /obj/effect/turf_decal/trimline/opaque/syndiered/filled/corner{ dir = 8 @@ -1513,25 +1529,26 @@ /area/ship/bridge) "rM" = ( /obj/docking_port/stationary{ - dwidth = 15; - height = 15; - width = 30 + dwidth = 30; + height = 60; + width = 60; + disable_on_owner_ship_dock = 1; + name = "Leyak Port Dock" }, /turf/template_noop, /area/template_noop) "rW" = ( -/obj/effect/turf_decal/techfloor, -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 + dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/science/workshop) +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) "se" = ( /obj/structure/window/reinforced/fulltile/shuttle, /obj/structure/grille, @@ -1672,10 +1689,14 @@ /area/ship/hallway/central) "tQ" = ( /obj/effect/turf_decal/siding{ - color = "#474747"; - dir = 1 + color = "#474747" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /turf/open/floor/plasteel/dark, /area/ship/crew/dorm) "tT" = ( @@ -1729,11 +1750,16 @@ /turf/open/floor/plasteel/mono/white, /area/ship/hallway/central) "uA" = ( -/obj/effect/turf_decal/siding{ - color = "#474747"; - dir = 1 +/obj/structure/chair/sofa/red/corpo/right, +/obj/item/bedsheet/black{ + pixel_x = 8; + pixel_y = 0 }, -/turf/open/floor/plasteel/dark, +/obj/structure/sign/poster/contraband/syndiemoth{ + pixel_x = -28; + pixel_y = 0 + }, +/turf/open/floor/carpet/nanoweave, /area/ship/crew/dorm) "uW" = ( /obj/effect/turf_decal/isf_big/seven, @@ -1817,17 +1843,16 @@ /turf/open/floor/plasteel, /area/ship/crew/canteen) "vQ" = ( -/obj/effect/turf_decal/siding{ - color = "#474747" - }, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable{ - icon_state = "0-4" +/obj/structure/table/glass, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_x = -15; + pixel_y = -25 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 +/obj/item/reagent_containers/food/drinks/coffee{ + pixel_x = -8; + pixel_y = 4 }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/carpet/nanoweave, /area/ship/crew/dorm) "vU" = ( /obj/effect/turf_decal/siding/thinplating/dark{ @@ -1883,24 +1908,15 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ship/security) "ws" = ( -/obj/structure/closet/wall/red/directional/north, -/obj/item/clothing/under/syndicate/hardliners, -/obj/item/clothing/under/syndicate/hardliners, -/obj/item/clothing/under/syndicate/hardliners, -/obj/item/clothing/under/syndicate/hardliners, -/obj/item/clothing/under/syndicate/hardliners/jumpsuit, -/obj/item/clothing/under/syndicate/hardliners/jumpsuit, -/obj/item/clothing/under/syndicate/hardliners/jumpsuit, -/obj/item/clothing/under/syndicate/hardliners/jumpsuit, -/obj/item/clothing/shoes/combat, -/obj/item/clothing/shoes/combat, -/obj/item/clothing/shoes/combat, -/obj/item/clothing/shoes/combat, -/obj/item/clothing/gloves/combat, -/obj/item/clothing/gloves/combat, -/obj/item/clothing/gloves/combat, -/obj/item/clothing/gloves/combat, -/turf/open/floor/carpet/nanoweave, +/obj/effect/turf_decal/siding/black{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/machinery/firealarm/directional/north{ + pixel_x = -4; + pixel_y = 32 + }, +/turf/open/floor/plasteel/dark, /area/ship/crew/dorm) "wH" = ( /obj/structure/railing/corner{ @@ -1967,10 +1983,10 @@ /obj/effect/turf_decal/trimline/opaque/syndiered/line{ dir = 1 }, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable{ - icon_state = "0-9" +/obj/structure/closet/wall/red/directional/south{ + name = "demolition's closet" }, +/obj/item/storage/backpack/duffelbag/syndie/c4, /turf/open/floor/plasteel/white, /area/ship/security/armory) "xJ" = ( @@ -2012,10 +2028,14 @@ /turf/open/floor/plating, /area/ship/hallway/central) "ys" = ( -/obj/structure/bed/roller, /obj/effect/turf_decal/siding/thinplating{ dir = 6 }, +/obj/structure/table/reinforced, +/obj/machinery/recharger{ + pixel_x = 6; + pixel_y = 5 + }, /turf/open/floor/plasteel/tech/techmaint, /area/ship/cargo) "yu" = ( @@ -2060,13 +2080,19 @@ /turf/open/floor/plasteel/dark, /area/ship/engineering/engines) "yY" = ( -/obj/item/clothing/mask/gas/syndicate, -/obj/machinery/suit_storage_unit/inherit/industrial, -/obj/machinery/firealarm/directional/west, -/obj/item/clothing/suit/space/syndicate/white_red, -/obj/item/clothing/head/helmet/space/syndicate/white_red, -/turf/open/floor/plasteel/tech, -/area/ship/science/workshop) +/obj/structure/chair/plastic{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/syndiered/line, +/obj/effect/turf_decal/trimline/opaque/neutral/filled/corner{ + dir = 1 + }, +/obj/machinery/light/small/directional/west, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor3-old" + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) "zd" = ( /turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/crew/canteen) @@ -2084,27 +2110,34 @@ /turf/open/floor/plating, /area/ship/hallway/central) "zp" = ( -/obj/effect/turf_decal/techfloor{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/item/clothing/gloves/color/latex/nitrile/evil, +/obj/item/clothing/suit/hardliners, +/obj/item/clothing/under/syndicate/hardliners{ + pixel_x = -8; + pixel_y = 1 }, -/obj/machinery/button/door{ - dir = 1; +/obj/item/clothing/shoes/combat{ pixel_x = 4; - pixel_y = -20; - name = "Launch Door Control"; - id = "leyakmech" + pixel_y = -5 }, -/obj/machinery/button/shieldwallgen{ - dir = 1; - pixel_x = -5; - pixel_y = -20; - id = "leyakgen" +/obj/item/pinpointer/crew{ + pixel_x = -6; + pixel_y = -6 }, -/turf/open/floor/plasteel/tech, -/area/ship/science/workshop) +/obj/item/sensor_device{ + pixel_x = 8; + pixel_y = -3 + }, +/obj/structure/closet/secure_closet/wall/directional/south{ + name = "Medic's closet"; + req_access_txt = "5" + }, +/obj/item/roller, +/obj/item/roller, +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) "zF" = ( /turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/hallway/central) @@ -2155,7 +2188,7 @@ /area/ship/external/dark) "Ae" = ( /turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/science/workshop) +/area/ship/medical) "Ah" = ( /obj/effect/turf_decal/siding/thinplating/dark, /obj/effect/turf_decal/trimline/opaque/syndiered/line{ @@ -2248,24 +2281,20 @@ /turf/open/floor/plasteel/mono/white, /area/ship/security) "Be" = ( -/obj/docking_port/mobile{ - dir = 8; - launch_status = 0; - preferred_direction = 4 +/obj/structure/chair/handrail{ + dir = 8 }, -/obj/structure/cable{ - icon_state = "0-8" +/obj/effect/turf_decal/steeldecal/steel_decals9{ + dir = 4 }, -/obj/machinery/door/poddoor{ - dir = 4; - id = "leyakmech" +/obj/effect/turf_decal/steeldecal/steel_decals9{ + dir = 1 }, -/obj/machinery/power/shieldwallgen/atmos/roundstart{ - id = "leyakgen"; +/obj/machinery/shower{ dir = 1 }, -/turf/open/floor/engine/hull/reinforced/interior, -/area/ship/science/workshop) +/turf/open/floor/plasteel/showroomfloor, +/area/ship/crew/dorm) "Bj" = ( /obj/structure/chair/bench/red/directional/north, /obj/machinery/newscaster/directional/east, @@ -2292,14 +2321,22 @@ /turf/open/floor/plasteel/mono/white, /area/ship/hallway/central) "BG" = ( -/obj/machinery/mech_bay_recharge_port{ - dir = 8 +/obj/structure/table/chem, +/obj/item/reagent_containers/syringe/contraband/morphine{ + pixel_x = 2; + pixel_y = 4; + name = "morphine syringe"; + desc = "A syringe, with MORPHINE written on it in bright-red marker." }, -/obj/effect/turf_decal/industrial/traffic{ - dir = 10 +/obj/item/reagent_containers/glass/bottle/morphine{ + pixel_x = -5; + pixel_y = 5 }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/science/workshop) +/obj/effect/turf_decal/trimline/opaque/syndiered/line, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) "BI" = ( /obj/machinery/door/airlock/hatch{ dir = 4; @@ -2348,15 +2385,13 @@ /turf/open/floor/plasteel/tech, /area/ship/engineering/engines) "CB" = ( -/obj/structure/dresser{ - dir = 4; - pixel_x = -9 - }, -/obj/effect/turf_decal/siding{ - color = "#474747" +/obj/structure/table/glass, +/obj/item/radio/intercom/directional/south{ + pixel_x = -6; + pixel_y = -31 }, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/plasteel/dark, +/obj/machinery/light/small/directional/west, +/turf/open/floor/carpet/nanoweave, /area/ship/crew/dorm) "CD" = ( /obj/machinery/power/terminal{ @@ -2576,8 +2611,6 @@ /area/ship/cargo) "FQ" = ( /obj/machinery/autolathe, -/obj/item/stack/sheet/metal/twenty, -/obj/item/stack/sheet/glass/twenty, /obj/item/radio/intercom/directional/east, /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) @@ -2598,12 +2631,10 @@ /turf/open/floor/plasteel, /area/ship/crew/canteen) "Gc" = ( -/obj/structure/chair/plastic{ - dir = 1 - }, /obj/effect/turf_decal/siding/thinplating{ dir = 10 }, +/obj/structure/table/reinforced, /turf/open/floor/plasteel/tech/techmaint, /area/ship/cargo) "Gj" = ( @@ -2634,17 +2665,9 @@ pixel_x = 8; pixel_y = 2 }, -/obj/item/gun_maint_kit{ - pixel_x = -9; - pixel_y = 1 - }, -/obj/item/gun_maint_kit{ - pixel_x = -9; - pixel_y = 9 - }, -/obj/item/gun_maint_kit{ - pixel_x = -9; - pixel_y = 5 +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable{ + icon_state = "0-10" }, /turf/open/floor/plasteel/dark, /area/ship/security/armory) @@ -2698,6 +2721,13 @@ /obj/machinery/door/airlock/external, /obj/machinery/atmospherics/pipe/layer_manifold/visible, /obj/effect/mapping_helpers/airlock/locked, +/obj/docking_port/mobile{ + launch_status = 0; + preferred_direction = 4; + dir = 2; + port_direction = 8; + name = "Leyak Mobile Dock" + }, /turf/open/floor/plasteel/tech/grid, /area/ship/hallway/central) "In" = ( @@ -2822,8 +2852,14 @@ pixel_x = 1; pixel_y = 4 }, -/obj/item/melee/energy/flyssa, /obj/item/radio/headset/syndicate/alt/captain/cybersun, +/obj/item/gun/ballistic/automatic/pistol/himehabu, +/obj/item/ammo_box/magazine/m22lr_himehabu, +/obj/item/ammo_box/magazine/m22lr_himehabu, +/obj/item/clothing/under/cybersun/sneak{ + pixel_x = 8; + pixel_y = -7 + }, /turf/open/floor/plasteel/patterned/brushed, /area/ship/bridge) "Jv" = ( @@ -2839,23 +2875,14 @@ }, /area/ship/bridge) "JF" = ( -/obj/effect/turf_decal/siding{ - color = "#474747" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/light_switch{ - dir = 1; - pixel_y = -20 +/obj/effect/spawner/bunk_bed, +/obj/structure/curtain/cloth/grey, +/obj/structure/sign/poster/contraband/backdoor_xeno_babes_6{ + pixel_y = -32; + pixel_x = 0 }, -/turf/open/floor/plasteel/dark, +/obj/machinery/light/small/directional/east, +/turf/open/floor/carpet/nanoweave, /area/ship/crew/dorm) "JL" = ( /obj/structure/catwalk/over/plated_catwalk/white, @@ -2963,6 +2990,7 @@ pixel_y = 11 }, /obj/item/radio/headset/syndicate/alt/captain/cybersun, +/obj/item/clothing/glasses/hud/security/sunglasses/hardliners, /turf/open/floor/plasteel/patterned/brushed, /area/ship/bridge) "Lg" = ( @@ -2993,10 +3021,6 @@ /turf/open/floor/plating, /area/ship/cargo) "Lp" = ( -/obj/effect/turf_decal/trimline/opaque/syndiered/filled/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/opaque/syndiered/filled/corner, /obj/structure/cable{ icon_state = "4-8" }, @@ -3009,6 +3033,9 @@ /obj/effect/turf_decal/siding/black{ dir = 8 }, +/obj/effect/turf_decal/stairs{ + dir = 9 + }, /turf/open/floor/plasteel/mono/white, /area/ship/hallway/central) "Lv" = ( @@ -3043,23 +3070,22 @@ /obj/item/radio/weather_monitor, /obj/item/mining_scanner, /obj/item/mining_scanner, +/obj/item/melee/sledgehammer/gorlex{ + pixel_x = -4 + }, /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "LA" = ( -/obj/effect/turf_decal/techfloor{ - dir = 8 +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor7-old" }, -/obj/machinery/mass_driver{ - dir = 4; - id = "leyaklaunch" - }, -/obj/structure/railing/thin, -/obj/structure/cable{ - icon_state = "4-8" +/obj/effect/decal/cleanable/oil, +/obj/structure/sign/poster/contraband/cybersun_med{ + pixel_x = 0; + pixel_y = 31 }, -/obj/machinery/light/directional/north, -/turf/open/floor/plasteel/tech, -/area/ship/science/workshop) +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) "LF" = ( /obj/effect/turf_decal/isf_big/three, /turf/open/floor/plasteel/tech, @@ -3105,12 +3131,8 @@ /turf/open/floor/plasteel/tech/grid, /area/ship/engineering/engines) "Ml" = ( -/obj/effect/spawner/bunk_bed{ - dir = 4 - }, -/obj/structure/curtain/cloth/grey, -/obj/machinery/light/small/directional/west, -/turf/open/floor/carpet/nanoweave, +/obj/effect/turf_decal/siding/black, +/turf/open/floor/plasteel/dark, /area/ship/crew/dorm) "Mp" = ( /turf/template_noop, @@ -3190,22 +3212,26 @@ /turf/closed/wall/mineral/titanium, /area/ship/security/armory) "Nm" = ( -/obj/effect/turf_decal/techfloor{ - dir = 6 +/obj/effect/turf_decal/trimline/opaque/neutral/line{ + dir = 8 + }, +/obj/structure/chair/office/dark{ + dir = 8 }, +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/decal/cleanable/dirt, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "2-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/science/workshop) +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) "Nt" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/mono/white, /area/ship/hallway/central) "NO" = ( /turf/closed/wall/mineral/titanium, -/area/ship/science/workshop) +/area/ship/medical) "NT" = ( /obj/machinery/power/port_gen/pacman/super, /obj/effect/turf_decal/industrial/outline/red, @@ -3230,38 +3256,33 @@ /turf/open/floor/plasteel/tech, /area/ship/engineering/engines) "Oi" = ( -/obj/effect/turf_decal/corner/opaque/syndiered/border{ - dir = 8 - }, -/obj/structure/closet/emcloset/wall/directional/west, /obj/effect/turf_decal/siding/black{ dir = 4 }, -/turf/open/floor/plasteel/mono/white, -/area/ship/hallway/central) -"Ok" = ( -/obj/structure/closet/wall/red/directional/north, -/obj/item/clothing/suit/hooded/wintercoat/security/hardliners{ - pixel_x = 5; - pixel_y = 8 +/obj/effect/turf_decal/trimline/opaque/syndiered/filled/corner{ + dir = 1 }, -/obj/item/clothing/suit/hooded/wintercoat/security/hardliners{ - pixel_x = 8; - pixel_y = -1 +/obj/effect/turf_decal/trimline/opaque/syndiered/filled/corner{ + dir = 8 }, -/obj/item/clothing/suit/hooded/wintercoat/security/hardliners{ - pixel_x = -4; - pixel_y = 7 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/item/clothing/suit/hooded/wintercoat/security/hardliners{ - pixel_x = -3; - pixel_y = -1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 }, -/obj/item/clothing/head/soft/cybersun, -/obj/item/clothing/head/soft/cybersun, -/obj/item/clothing/head/soft/cybersun, -/obj/item/clothing/head/soft/cybersun, -/turf/open/floor/carpet/nanoweave, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/white, +/area/ship/hallway/central) +"Ok" = ( +/obj/effect/turf_decal/siding/black{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plasteel/dark, /area/ship/crew/dorm) "Ot" = ( /obj/structure/cable{ @@ -3275,7 +3296,7 @@ }, /obj/machinery/door/airlock/grunge{ dir = 4; - name = "Wrecker's Closet" + name = "Sick Bay" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 @@ -3284,7 +3305,7 @@ dir = 4 }, /turf/open/floor/plasteel/tech/grid, -/area/ship/science/workshop) +/area/ship/medical) "Ou" = ( /obj/structure/cable{ icon_state = "1-2" @@ -3425,29 +3446,19 @@ /turf/open/floor/plasteel, /area/ship/crew/canteen) "PJ" = ( -/obj/effect/turf_decal/siding{ - color = "#474747"; - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/turf/open/floor/plasteel/dark, +/obj/structure/chair/sofa/red/corpo/left, +/turf/open/floor/carpet/nanoweave, /area/ship/crew/dorm) "PK" = ( /turf/open/floor/engine/hull, /area/ship/external/dark) "PT" = ( -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/machinery/power/shieldwallgen/atmos/roundstart{ - id = "leyakgen" - }, -/obj/machinery/door/poddoor{ - dir = 4; - id = "leyakmech" +/obj/effect/turf_decal/siding/black, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 }, -/turf/open/floor/engine/hull/reinforced/interior, -/area/ship/science/workshop) +/turf/open/floor/plasteel/dark, +/area/ship/crew/dorm) "PX" = ( /obj/effect/turf_decal/trimline/opaque/syndiered/filled/line{ dir = 1 @@ -3469,16 +3480,10 @@ /area/ship/bridge) "Qj" = ( /obj/structure/crate_shelf, -/obj/structure/closet/crate/medical{ - name = "medical supplies" - }, -/obj/item/clothing/suit/hardliners, -/obj/item/clothing/gloves/color/latex/nitrile/evil, /obj/effect/turf_decal/techfloor, /obj/effect/turf_decal/techfloor{ dir = 1 }, -/obj/item/storage/firstaid/regular, /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "Qn" = ( @@ -3689,28 +3694,20 @@ /turf/open/floor/plasteel/patterned/brushed, /area/ship/bridge) "SR" = ( -/obj/structure/rack, -/obj/effect/turf_decal/siding/thinplating{ - dir = 9 - }, -/obj/item/pickaxe{ - pixel_x = 3; - pixel_y = -3 - }, -/obj/item/melee/sledgehammer/gorlex{ - pixel_x = -4 +/obj/effect/turf_decal/trimline/opaque/neutral/filled/corner{ + dir = 8 }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable{ - icon_state = "0-2" +/obj/effect/turf_decal/trimline/opaque/syndiered/line{ + dir = 1 }, +/obj/machinery/light/small/directional/west, /obj/machinery/light_switch{ dir = 4; - pixel_x = -20; - pixel_y = -4 + pixel_x = -21; + pixel_y = -10 }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/science/workshop) +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) "SS" = ( /obj/effect/turf_decal/corner/opaque/syndiered/mono, /obj/machinery/computer/helm{ @@ -3748,34 +3745,19 @@ /obj/structure/cable{ icon_state = "1-4" }, -/obj/structure/cable{ - icon_state = "1-8" +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, /turf/open/floor/plasteel/mono/white, /area/ship/hallway/central) "Tr" = ( /obj/structure/rack, -/obj/item/storage/firstaid/brute{ - pixel_x = -9; - pixel_y = 6 - }, -/obj/item/storage/firstaid/medical{ - pixel_x = 8; - pixel_y = 5 - }, -/obj/item/reagent_containers/glass/bottle/morphine{ - pixel_x = -8; - pixel_y = -4 - }, -/obj/item/reagent_containers/syringe/contraband/morphine{ - pixel_x = 5; - pixel_y = -4; - name = "morphine syringe"; - desc = "A syringe, with MORPHINE written on it in bright-red marker." - }, /obj/machinery/light/directional/south, +/obj/item/stack/sheet/glass/twenty, +/obj/item/stack/sheet/metal/twenty, /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "Tu" = ( @@ -3853,24 +3835,20 @@ /turf/open/floor/plating, /area/ship/engineering/engines) "TV" = ( -/obj/effect/turf_decal/techfloor, -/obj/effect/turf_decal/siding/thinplating/corner{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "1-8" +/obj/effect/turf_decal/trimline/opaque/neutral/filled/warning{ + dir = 8 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/science/workshop) +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) "Uk" = ( /obj/effect/turf_decal/industrial/fire{ dir = 5 @@ -3985,14 +3963,23 @@ /turf/open/floor/plasteel/tech, /area/ship/cargo) "Wh" = ( -/obj/effect/spawner/bunk_bed{ - dir = 4 +/obj/effect/turf_decal/siding/black{ + dir = 1 }, -/obj/structure/curtain/cloth/grey, -/obj/structure/sign/poster/contraband/backdoor_xeno_babes_6{ - pixel_y = 31 +/obj/machinery/light/small/directional/west, +/obj/structure/dresser{ + pixel_x = 0; + pixel_y = 0 }, -/turf/open/floor/carpet/nanoweave, +/obj/structure/bedsheetbin{ + pixel_x = -1; + pixel_y = 7 + }, +/obj/structure/extinguisher_cabinet/directional/north{ + pixel_x = 8; + pixel_y = 28 + }, +/turf/open/floor/plasteel/dark, /area/ship/crew/dorm) "WE" = ( /obj/effect/turf_decal/corner/opaque/syndiered/border{ @@ -4142,13 +4129,16 @@ /turf/open/floor/plasteel, /area/ship/crew/canteen) "Ye" = ( -/obj/effect/turf_decal/siding/thinplating{ +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/trimline/opaque/syndiered/line{ dir = 1 }, -/obj/machinery/airalarm/directional/north, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/science/workshop) +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/mono/dark, +/area/ship/medical) "Yf" = ( /turf/closed/wall/mineral/titanium, /area/ship/cargo) @@ -4157,15 +4147,15 @@ dir = 9 }, /obj/effect/turf_decal/trimline/opaque/syndiered/corner, -/obj/structure/cable{ - icon_state = "6-8" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel/white, /area/ship/security/armory) "Yj" = ( @@ -4176,12 +4166,16 @@ /turf/open/floor/plasteel/mono/white, /area/ship/hallway/central) "Yo" = ( -/obj/effect/spawner/bunk_bed, -/obj/structure/curtain/cloth/grey, -/obj/structure/sign/poster/contraband/syndiemoth{ - pixel_x = 29 +/obj/effect/turf_decal/siding/black{ + dir = 1 }, -/turf/open/floor/carpet/nanoweave, +/obj/machinery/light/small/directional/east, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/recharge_station, +/turf/open/floor/plasteel/dark, /area/ship/crew/dorm) "Yq" = ( /obj/structure/railing/corner{ @@ -4214,13 +4208,14 @@ /turf/open/floor/plasteel/mono/white, /area/ship/crew/canteen) "YE" = ( -/obj/effect/turf_decal/siding{ - color = "#474747"; - dir = 1 - }, -/obj/machinery/recharge_station, +/obj/effect/spawner/bunk_bed, /obj/structure/curtain/cloth/grey, -/turf/open/floor/plasteel/dark, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 20; + pixel_y = 10 + }, +/turf/open/floor/carpet/nanoweave, /area/ship/crew/dorm) "YF" = ( /obj/structure/catwalk/over/plated_catwalk/white, @@ -4260,6 +4255,9 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 8 }, +/obj/structure/cable{ + icon_state = "5-8" + }, /turf/open/floor/plasteel/white, /area/ship/security/armory) "YU" = ( @@ -4288,22 +4286,13 @@ }, /area/ship/bridge) "YW" = ( -/obj/effect/turf_decal/techfloor{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating/corner{ - dir = 1 - }, -/obj/machinery/button/massdriver{ - pixel_y = 21; - id = "leyaklaunch" - }, -/obj/structure/cable{ - icon_state = "4-10" +/obj/effect/turf_decal/trimline/opaque/neutral/line{ + dir = 8 }, -/obj/effect/decal/cleanable/oil/streak, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/science/workshop) +/obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/medical) "YY" = ( /obj/effect/turf_decal/isf_big/six, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -4529,8 +4518,8 @@ Mp Mp "} (7,1,1) = {" -QX -qc +Mp +vm PK PK OI @@ -4548,12 +4537,12 @@ zd zd PK PK -hD -Qt +EH +Mp "} (8,1,1) = {" -QX -qc +Mp +vm RZ ja OI @@ -4571,12 +4560,12 @@ Yq zd vo cr -hD -Qt +EH +Mp "} (9,1,1) = {" -QX -qc +Mp +vm PK OI Oa @@ -4594,12 +4583,12 @@ by mJ zd PK -hD -Qt +EH +Mp "} (10,1,1) = {" -QX -qc +Mp +vm ja OI Ow @@ -4617,21 +4606,21 @@ RV YA zd vo -hD -Qt +EH +Mp "} (11,1,1) = {" -QX -qc +Mp +vm OI OI OI BI vx vx -oP bJ xx +Be vx na bf @@ -4640,22 +4629,22 @@ xu zd zd zd -hD -Qt +EH +Mp "} (12,1,1) = {" Mp -qc +vm OI yu Iw OC vx vx -vx lo vx vx +vx LR jz Ed @@ -4698,7 +4687,7 @@ OI jO vx ws -xs +PT PJ vQ vx @@ -4721,8 +4710,8 @@ us bP vx Ok -xs tQ +xs hu vx kM @@ -4767,9 +4756,9 @@ OS nI vx vx +UB vx vx -UB vx nG AJ @@ -5324,8 +5313,8 @@ Mp Mp Mp Ae -PT -Be +Ae +Ae NO Mp Mp From 3c4ae9aaa6817a795fb2d367038fea29283dabc6 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 7 Apr 2026 19:43:04 -0500 Subject: [PATCH 20/70] Automatic changelog generation for PR #6068 [ci skip] --- html/changelogs/AutoChangeLog-pr-6068.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-6068.yml diff --git a/html/changelogs/AutoChangeLog-pr-6068.yml b/html/changelogs/AutoChangeLog-pr-6068.yml new file mode 100644 index 0000000000..08c76826bd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6068.yml @@ -0,0 +1,5 @@ +author: thearbiber +changes: + - {rscadd: various leyak adjustments} + - {rscdel: wrecker on leyak} +delete-after: true From 9dca8b42629146d182f29842bdd2133406c01d31 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 8 Apr 2026 02:00:04 +0000 Subject: [PATCH 21/70] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-5926.yml | 4 ---- html/changelogs/AutoChangeLog-pr-6047.yml | 6 ------ html/changelogs/AutoChangeLog-pr-6068.yml | 5 ----- html/changelogs/AutoChangeLog-pr-6102.yml | 6 ------ html/changelogs/archive/2026-04.yml | 13 +++++++++++++ 5 files changed, 13 insertions(+), 21 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-5926.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-6047.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-6068.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-6102.yml diff --git a/html/changelogs/AutoChangeLog-pr-5926.yml b/html/changelogs/AutoChangeLog-pr-5926.yml deleted file mode 100644 index cf8e14d0ce..0000000000 --- a/html/changelogs/AutoChangeLog-pr-5926.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Yule & Addust -changes: - - {rscadd: Added the Puru-Rangi-class auxiliary response vessel} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-6047.yml b/html/changelogs/AutoChangeLog-pr-6047.yml deleted file mode 100644 index f4905285fa..0000000000 --- a/html/changelogs/AutoChangeLog-pr-6047.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: zimon9 -changes: - - {rscdel: Removed layer adapter layer update proc} - - {code_imp: changed the layer of atmospherics machines so they layer below - catwalks} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-6068.yml b/html/changelogs/AutoChangeLog-pr-6068.yml deleted file mode 100644 index 08c76826bd..0000000000 --- a/html/changelogs/AutoChangeLog-pr-6068.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: thearbiber -changes: - - {rscadd: various leyak adjustments} - - {rscdel: wrecker on leyak} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-6102.yml b/html/changelogs/AutoChangeLog-pr-6102.yml deleted file mode 100644 index 6c947fa20f..0000000000 --- a/html/changelogs/AutoChangeLog-pr-6102.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Bumtickley00 -changes: - - {balance: Pancrazine now scales healing with the amount of reagents in your - system and gets you drunk.} - - {spellcheck: Removed dylovene mention on cargo screen} -delete-after: true diff --git a/html/changelogs/archive/2026-04.yml b/html/changelogs/archive/2026-04.yml index e1ea513448..3f3c2483cb 100644 --- a/html/changelogs/archive/2026-04.yml +++ b/html/changelogs/archive/2026-04.yml @@ -47,3 +47,16 @@ - imageadd: small hypospray vial sprite generalthrax: - rscadd: Brought back darker Makosso blue +2026-04-08: + Bumtickley00: + - balance: Pancrazine now scales healing with the amount of reagents in your system + and gets you drunk. + - spellcheck: Removed dylovene mention on cargo screen + Yule & Addust: + - rscadd: Added the Puru-Rangi-class auxiliary response vessel + thearbiber: + - rscadd: various leyak adjustments + - rscdel: wrecker on leyak + zimon9: + - rscdel: Removed layer adapter layer update proc + - code_imp: changed the layer of atmospherics machines so they layer below catwalks From 6ec22fe58e715230dcecf65c81d555894bf713b1 Mon Sep 17 00:00:00 2001 From: thearbiber <135081923+thearbiber@users.noreply.github.com> Date: Wed, 8 Apr 2026 11:29:04 -0400 Subject: [PATCH 22/70] short half ups and ponytail spiky adjustment (#6140) ## About The Pull Request image ## Why It's Good For The Game short half ups and ponytail spiky adjustment ## Changelog :cl: add: short half ups and ponytail spiky adjustment /:cl: --- .../new_player/sprite_accessories/hair.dm | 8 ++++++++ icons/mob/human_face.dmi | Bin 72754 -> 72600 bytes 2 files changed, 8 insertions(+) diff --git a/code/modules/mob/dead/new_player/sprite_accessories/hair.dm b/code/modules/mob/dead/new_player/sprite_accessories/hair.dm index 9e8c724be1..f931dfa70e 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/hair.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/hair.dm @@ -214,6 +214,14 @@ name = "Half Up (Alt Bangs)" icon_state = "hair_halfupalt" +/datum/sprite_accessory/hair/halfshort + name = "Half Up Short" + icon_state = "hair_halfshort" + +/datum/sprite_accessory/hair/halfshortalt + name = "Half Up Short (Alt Bangs)" + icon_state = "hair_halfshortalt" + /datum/sprite_accessory/hair/harley name = "Harley" icon_state = "hair_harley" diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index ce4f4096f7e37a66c0089e03497ef93d83889951..28dce99dad1f9c83d43a9923bc5c3c00441ac7d7 100644 GIT binary patch delta 52244 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�%mm1`xnDel7hh$i?M$;|9_1S99~XA;P}L z^kSu}Be3AJ65BZVK(9-g0)UqU3V8<9rn8RU=4aK@*gg>gLtvqZBXP+1xR#U-%@D8@ z49xi!J^H#9)euj@uLZ2khY)TTF`l+x#tzZPFxNxFQd-JR!QD%J$(gP%!rgOs>Ya&RN-s-$EOXvtSkEbiGc zrW3_ZCndqA=`(3*2Oozs$@ksd3MjRTcbU+rIeW3u_N3`4%(cBWw@X#`x=Lbgabrt% zCl7Wk1OyN#&OKhrj|SpMYSe9UjfpC+l+Fc*jyDddd$#=Y*}CkpCF_FDp?UKCqp7i9 z#Ey>SVKX$E33HRK6gOvISaIm({8T&iUx} zR-O~t(%y0C*wLSSe96W+3@~bsNJ;s(`g!XF8+<{t@73}T9dkg_ix=@Px8GehmA zvbXUt35S=XHR;A;3hB7-V1OhmhNS$u(=WW?y0D?02_L)N2A;uzw2ZA-5%3-D-GEa& z#|Rn<6b=Cb-ym}+Mo3uDC>?j_f~AdU>pF9eimgPKu&~xFKNPfhTY0$%_m;v&yOz>4 zor{O&rSPn7~vYMruoc`R^XvM!Hl z(cbT=9M`jB1)1cau;q{qCZwCYs(cvH23N5iy; zBq1W4wL0?M#rv4tI~+7^hN$54Ru`DnA~h29GdTtI56KG&y;MSo#XP_q+EZF8%Z)Oe zf6Fr?znbh&Nh`5TZA9iki#WV@Ht)R}VOm~9$ep7O+4pO?Lv%v;?A|hk26R+mz;L&n zIW#8h9Kcq;gSLh}A?*&!w9- zH7k{Zp{u%xaw;RThrNG1)LUCq^T;yU7n$#tzLSD`Tt`LSd*bO08!@XI5my^xqa}8w zZ1I(BB$|61Rd!(H9@`64)#4VZmcaBlv6gU#yetEq`gFQEwbR}BhrL%IH!(L&m zO1|g%LX}N%nn)-pGKQiE?;_pb!eYMB{M#LrZRNCss&*K}QCM zvbd+IctnP;r{=u|vsv18>43L+miJPiRD4h0*LQZqi1eRerb7M2sdJ7!Vd*$Hvm&k~ z;n~;pD`J7-h#BFfxrII~%Hw;N+Ux372K`Z?!

uqvd662Q+ulX={D)p(rnOprAC^ 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 From 312bb110b9f7b5e88d47a5e028b09c009828aeca Mon Sep 17 00:00:00 2001 From: thearbiber <135081923+thearbiber@users.noreply.github.com> Date: Wed, 8 Apr 2026 11:29:49 -0400 Subject: [PATCH 23/70] CLIP industrial hardsuit (#6127) ## About The Pull Request image ## Why It's Good For The Game Please god civilian clip content. ## Changelog :cl: add: CLIP industrial hardsuit /:cl: --- code/modules/cargo/packs/spacesuits.dm | 11 +++++++++ code/modules/clothing/factions/clip.dm | 27 ++++++++++++++++++++++ icons/mob/clothing/faction/clip/head.dmi | Bin 17079 -> 19707 bytes icons/mob/clothing/faction/clip/suits.dmi | Bin 9089 -> 10189 bytes icons/obj/clothing/faction/clip/head.dmi | Bin 6906 -> 7633 bytes icons/obj/clothing/faction/clip/suits.dmi | Bin 2864 -> 3106 bytes 6 files changed, 38 insertions(+) diff --git a/code/modules/cargo/packs/spacesuits.dm b/code/modules/cargo/packs/spacesuits.dm index 1ba8293f9d..7c25ec85fc 100644 --- a/code/modules/cargo/packs/spacesuits.dm +++ b/code/modules/cargo/packs/spacesuits.dm @@ -380,6 +380,17 @@ faction_discount = 0 faction_locked = TRUE +/datum/supply_pack/spacesuits/clip_industrial + name = "CLIP Industrial Hardsuit Crate" + desc = "An industrial-grade hardsuit rated for impacts, fires and radiation." + cost = 1500 + contains = list(/obj/item/clothing/suit/space/hardsuit/mining/clip) + crate_name = "CLIP industrial hardsuit crate" + crate_type = /obj/structure/closet/crate/secure/plasma + faction = /datum/faction/clip + faction_discount = 0 + faction_locked = TRUE + /datum/supply_pack/spacesuits/clip name = "CLIP softsuit crate" desc = "Contains one civilian-grade CLIP softsuit." diff --git a/code/modules/clothing/factions/clip.dm b/code/modules/clothing/factions/clip.dm index 441a857f19..4712df6c7b 100644 --- a/code/modules/clothing/factions/clip.dm +++ b/code/modules/clothing/factions/clip.dm @@ -255,6 +255,33 @@ armor = list("melee" = 30, "bullet" = 20, "laser" = 30, "energy" = 40, "bomb" = 20, "bio" = 100, "rad" = 30, "fire" = 75, "acid" = 75, "wound" = 15) resistance_flags = null +/obj/item/clothing/head/helmet/space/hardsuit/mining/clip + name = "CLIP industrial hardsuit helmet" + desc = "A bulky, slit-helmet design made with impact protection in mind." + icon = 'icons/obj/clothing/faction/clip/head.dmi' + mob_overlay_icon = 'icons/mob/clothing/faction/clip/head.dmi' + icon_state = "hardsuit0-clipindus" + item_state = "hardsuit0-clipindus" + hardsuit_type = "clipindus" + resistance_flags = FIRE_PROOF | ACID_PROOF + armor = list("melee" = 50, "bullet" = 20, "laser" = 20, "energy" = 30, "bomb" = 65, "bio" = 100, "rad" = 80, "fire" = 80, "acid" = 100, "wound" = 20) + supports_variations = SNOUTED_VARIATION + +/obj/item/clothing/suit/space/hardsuit/mining/clip + name = "CLIP industrial hardsuit" + desc = "A prolific hardsuit seen in every corner of the league, the CLIP industrial hardsuit is rated for factory, prospecting, and construction work. A frequent life saver in mining ventures and repair yards, the plating on this suit is durable, yet not over-encumbering." + icon = 'icons/obj/clothing/faction/clip/suits.dmi' + mob_overlay_icon = 'icons/mob/clothing/faction/clip/suits.dmi' + icon_state = "hardsuit0-clipindus" + item_state = "hardsuit0-clipindus" + hardsuit_type = "clipindus" + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/mining/clip + armor = list("melee" = 50, "bullet" = 20, "laser" = 20, "energy" = 30, "bomb" = 65, "bio" = 100, "rad" = 80, "fire" = 80, "acid" = 100, "wound" = 20) + supports_variations = DIGITIGRADE_VARIATION_SAME_ICON_FILE + max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT + resistance_flags = FIRE_PROOF | ACID_PROOF + slowdown = 0.5 + /obj/item/clothing/suit/space/hardsuit/clip_patroller name = "\improper CM-410 'Patroller' EVA Hardsuit" desc = "An older-issue CLIP hardsuit, adapted from an even older design. Widely utilized in reconnaissance duty and skirmishing due to its lightweight construction." diff --git a/icons/mob/clothing/faction/clip/head.dmi b/icons/mob/clothing/faction/clip/head.dmi index 76b65877338cb1517965f2f457684844187b153a..95e71eda729249de1ac3e6f5cc7ba4261682c4ce 100644 GIT binary patch literal 19707 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®$b-5YPa*+^@b4P0Vf3P|I~)=RUMhZlrPiH-e-eL|k^wy8rP5u6@W5&b_uCU& zSc9V$9bIir}r@V(B8QdXzRtcf~mYZpQ zA9lSma)i$^R=!ex-X^gWiKM$+ZCKExlHTeDsvRcH9LQErdM}a_2QV%yMYwy|$W0bl zi`eS*S`3lJecj)>xDf_jRfg|@9zkYjF7;WccE|Go|0?)lIFFtobg;`MmZ|!o?M%%S zj5unkB9d#$j0NpO<-g~#)YM$`UK+-cgc4m5MLd6J^huj9hP?z^hnck_omB^el`C}? z#a4Ik7hlx+(&r>4&q@hu{5M_~ zZv*{!gpcUXv0h&*#RPHRO3nIVx1n_qKmqKS^f>tMjPO6CThGL%OIK{1XQ^tD769s* z>9td^10W|}7hjeMwYm9DWjJBCzv~jU&{CT=PP7J+ySvQ0f$eKoDla@fh6fMEmJ612VF!%fKR@0aP>-;BW5cEwf>(YMW(?Wl1Y_+|ZTp zxMo5QHmtcTnY92I4v>jyCSx04uBhLOx_-kJ0k9;9PFJV2--d;ymEiB3vJAJScYI)g zgd8Xk-C!6KNTCN8VrB9yq2YR>QhXEc&)0Xm*FpXd#OAukM`w!k1&ZaUfxAyEmp65# zaE~VBHAH=&`C$c*kt4>&G>I>MsQZq{({XTgSHf=Tu-Fi^(N>{0L{7`^FG;#ZDl{You1W{XlhdYc%{Zn zJEC`R4nr5w`W91Ap%83waVWkYs+b}A*V~M^(+R}`SykL&dY6p&@YR>{9x%)S^0tOS z3| zX@)@Ze#Z+`cJ5T5d6P4AF-@Dz%ju4?1mUT;OW8r; z7%vS&5GiU5T;Qw~VH=M?_pj2B^wB+pZ7gHpzCWEY)0f8rov{DpG7RKu%AdFsbry?h z=tmpE(6|oos9O4fAeZ&n^uNj^FNYKCOf{TIY6K8GXqA;+<-YQ-XhPgR2(**juIG3I z3{uq^9~%SrU^s}z9NzP5^Rc13uR&_rB`1wXdLi^&uqW6ss%RP1h;f^A@x~ zCCs8czJX4k0|?QNNEsssFp0Y*-;Y99CVBPSbZ&Xn82Fq}V!F0&+V(x5tNR$RfhtZ@ z!{(YtC6YEn5NV?Ps99tg_t{V&j#AaZa}M;?d(vsLt-51{(4ULEGhl)WA6=u!s6L$V6_<(iy-=U3Gc^sX^gc4ygzR1 zEkCcJ*fvv^jQ~<`Ao~&(JG^xelL`}AeVIeRgCvZg+vdk=ez1NA+SOh_9mCu^(K z0M9l}CztHm_bBbisi?F&Wffhpt21=eH|`zvd*>tD(4vD)-Gpr5F+*Trsk z$(*hgjTVxLL?n-ag8ivETf(r3e8WOK!>g&rUW@*?mZ$+pdi&w_1je{4rkzo{1}Et$ z?9}O}!iYeHQ@|+$gK{NzYxmmg9r3KIUpe_u6Z>4mTPbzi_qpC`6%gF7Eep+yOb4p6 z8Z+f8WnG)wrqbzny99JV(*HEH-17(b0Q-XQhO=hhNg#9p?yi;D&%z5Df>>9(YJukR zl<4Xcwx$+o(i{$`vPEeohi`5(&c9(eO(Q4YSx;Z2tQH0TB3@e713@|=()2u4gli)N zehE5U%(&lyvw+RJra7n@f7h^B-gC`_*=Ms}w<^{>XJs@9w4CuW691^onqxqzM6Igv z&+kVh9>F~EypjVv6b>Ry%CqH(HL} zsvW=QE&{0X*lpfN(gd4-yv`(=^YwoPxBnNt|BC;obtBvDT9I&1XWd_+`y+E>Z}JiB z=0OqiLj4<*SP-L!h|#9%(qHEE`cjE<`1sz*lX5-oX2hK+tY_9~@b|k_Yu91Wj&FO~ zrkv)E^*RU9m33@vZC7J9VA<%%Z9JCgJn9I4Q%eIb4HQ58Y_m<2sWAj(j}AUg`LDfb zFUR^F6DMYHj@f(tk>S!UxS+1iEhAs9>@8ZTkcKm<^<+bV6emlG-gQylZ%-96_5xD( zoSJ72@_Xkj@0d_d^f>d^PTB3=#wlw{wI6HOHOWko6p&L{|LcU#3Ou&hdn_tF1}%~T3FCFykiH@K-K{g3|Is2DlZ+>vOub*Ir-d9i`oAv(ZCBa zLFd+Eo2^3zKuOGOB@qAO7Hvp{U)qA`SHz=#CLRTCG7$h`17jH@Bc%uTRgTutbWUZ6 zSO@;KhgQ2T1O|lgmhgNM<8SI0Vi`=`_|}qrp+x^4twAR3U^C0!kE>j^ptKSCN^1-UU;JmdXH@Qh*|$dM$+?*C2&;v!fV))*xA zPlvkzFm471gyNOHn>TsZ3K(IWmjTH>AOSeJ6h>%4dYaE~(CMU7h+~EJT0Pl=aqP!& zK?B7Ecd6UnAQ7YeR%}qyJ`uAJaGQin!Wx$xRIr;Jos6LzzgT4j)%u05W|QC6=r_jR zGCaW8YGIc%FTlaZ38r+Y77Yc5kUdHF9)5mFFOB!-gZK*e>;p}IoKQM|HXXKcJ|50# z{Z+u@1k*Zg9k$^BH0dAPN;9K>D5V((>ETZ@yFrfA-}0N>cCzTPNT$MEcAK#B6%?+51ONsRy7)_JPGw!o)$EB#MA^jz# zFBGY&r{qF=jiOE_*8kz0r`R%L9)aVmo$QqJ9!rES#C1U0pwcKpDPF8J;HrCONvAp( z|LF_lSD?Pi$u%Q^-oV$hxJ?VWFM5kD=(ZHSA7DZM)1D}GW|L(nTrIKI4!?VyDlx!nsZqWG_06k)?hD*|V(4K^*uc zmn3@;v~DrFe6|m26TPKonCL9_wfgU+4{_^`A#H0n78F@sw9pO1Zd*Nm#HPX}RAXI5 zAc3^JlT6Aaj(IkpqZ!-D-8%mlXj~$Bu>IYYsIWvqr1QdRAXC6O^trdL6}1tVHO0)k zKu!MfTxeBCxI3)E3+F3Gdk&6`o{Z(j)9wlN5O3wUS+g~CrTNp>=Iq0 zq_dh&e;Hq6@$_`>*6%Wrhczpz*QV|5TOtSv1Y2I|JIlB3xkBS;ssyw?kPXxU&E1o! z!qM=}XSAb>>)n3_(jP786DyXUN9D@WFaHK;Mpeg`jvMkot@bzSa4^Xu@}=*Hm*ECbb>tCJFR)9Vv_@1%$zE{1h7mS4^n|G`q`cxnQMy|3qJQhFfdU{CQZoxB> z4s;cEXNB2IubUj1#gA(w>%6*eFDo$YAN7c}Zzwkj`>@>q6GO2jK=QfML)7%^*7! z+wAf!Z9&$hszBBHMUA)`_>VN|#;{GP>KTd+bJmY8WwGOXIMm@5-0bbgK5a zfLj_BDB91xdilZ3##q|oWHTA~mm79n<*o%=e?OEuv6%wpRCIf!vdsi<&DTc^pr7g) zRtKF(;Tt%5JE9B@`QXE9YG@cnj6tecjuDEUoxMHXZ?le@D^_trQnBrfL+{Z?8Kzdu zjuq}y@}ejJT!8-$1C*w5Dh#3*ei-Z20J0j83ft>OJTJ{-{a0oL1hiR)Mu$(1@_3p* zkNWWz6lI{86Wc?+8)&7-V*lG(x!u;wA8}#YZSOobm zmLCp}|M*uTTV-b-1UQV_?--Ga6KVyjZgh76G!OB`s77j3b7+_f!(7+VwvmFrEoh#` zP{VfAjYj*4rZGo7LV}adYor8209+}#LxZeasECjD>zAQu$=!j_^8f52P{xj)*+o4C zy=~HwS<3g@WewHNvI5fhS5Zo#rWMkwOiD8MECl{ARk9bkYtAJYX;C!zf&dG3ZC@O=G}2&N_g(Is)4e8ZtMT z#VdKAz>J2^r8O}U{g`_SI6;MT@;n%HYq=*y3BW=yhzn>+A%k=1{Yh6xV(8L9o*M15 zl9B~!xQ5C8oT~_q%3zg#bvxg4{l3NBgxuoKU^RfS(>lTr;nAYs@Zz^lVk7ZVh)m~u zlG85Fmi~>aFxg|B)FIVqAJx^Tw7)v{pQTH~0>YL^1*HWs#%%wl{T}-~WsO5ue!LL5@USscPNnT9(#<}+cMI~e{5g=I#I3S= z255^p%_&=5-9|v0`(PuvZnq!uwOva60AU`Q1fAJayN$s9CRb<0Hf4$&hSqr%7=U*g z`7%yprK_tPni-G|3Vgt;g<$aG*#bv5H5*I>8F0X*nH>O#p2giCdw>L(sR@$0y~@-k zMh-5N?aXY#P*6D!!_=m38_^|QDbRXU`PP<}>wr`Ou(vvw>sq?~-k(V@s6UNKk6DI+ zPQ{{`eSIV`0iw1e<=*UeN!PeQ-q2t+y`mnpc^~cbWlG%0dVQ$%A7%%NSsxBGbDe_+ znBD_K8sJ~?I2vmYm1q7Tua+`{b;psf&TqJx<+$pVO+AGNv(CkhY*ii`?zJxgc?Jwu z;MmnN*3Q6-`tXJn#iL9`BWNWG*Ni!Qem_(cjfcb4zs_7CM@NZ3-Rs0y(1kd1(YeU? z%n|7A+qc~`q4NRR2(8L1h5wZ42n>m^9tbfkt=E8^r`-_ zAy_tkuC5*oRnv2xUSOX0<|09K)i^jVX%^>1H0*=#sF$kN!2HO112`gLb(_{UHdixm zBv`q-jN1=M$DfA`hYjmm$XFMZy zit!d#E(moG_8jd~7ZF5Sfb@{j-w$Pg&Gs2EhWwTu|23GX;>2I>bm7AK3YeBw{+V=^ z`F5|!Pxe`4W-{Xve@9g5b>l^K=>OG84{7M?7WVprBQU5g-=s-OvZ7bZ0s`powbn=M zZn`&oGk&ccy2|yF8C8H%{xa(6tCzdTDMgoOIkwB~UeA^*QF7MLZK(QMkE9~z4_k+9 zXJ*X4LQMhSxRwkO_JQ@GBSmSuru=<>*}U(UJ?-j0L_QA$b6^kmZfT7F6J5|}?)1cs z-@_hf-od$06LhOy;FJ_TJKROjT|GJ&+d}bRhd?fyz_u{`m795l6o58R;>I4GYeA$Gf-YXX_ybtj{a}U~p}HqEb|HE=wSRVerJ)kU3|{D; zh=Ep@jO$Q2#-C!0OV(g|>@}UEKTRDec0=uh5?Dt(Ntdhq4BRgCobLMzq|1Mv_noo3 zA8GUIYd`JYB{O91Y4t<5Ph{ERXFJM%hzkLj z6JnMGS|I-o_oqxI(TtC%gcx7fbf9(qE}d)_;RR|7r(qyoRj_?3D*dVtNM@bmzd_Ks zBNxLve``?lrffQHHT}n(LbQ;{n8{)dPzary-wFQ5wKgS#J_EY9T6k=`M(eaOR9iFG zfA!dL{+>fvJextMJaAa!Gn)eyO}ITNEaQufX6e+5H#vZz907jYYc_@h=uE*mgq1e% z`8Bxx(t*bCBIoAE@!l)7<^vU3j^RlxdtVx5CRQQJym{e@;Pa%D9^~euciQ zQ9knqgzBdFKJCwHQ%1jwWVbs%tTQ%zCb}!vSv|s?U0klLqa>@g!@+;kxS503O)vQ; z8xd_@$2-gy`fhTyjy}_295rFKYV*ROEe*>A_4m{aPQ6upu%u^bzN)&G?m7yB7~5zD z0!lB;RCD<}vz33b?Z?&x3q+^lYS^IxG5p?gk=YTU2}a~ze*R}bS@!z7#(UU-7uQM1 jaJ~OZclQQ^H9guP#c99w82G1V&~@!wTHmi&Kly(EiXE{F literal 17079 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≈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 c&+dTF>XV2Iz>% delta 9025 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 T8oE7{z+h;q>8jQ|vy1p&n)~X# diff --git a/icons/obj/clothing/faction/clip/head.dmi b/icons/obj/clothing/faction/clip/head.dmi index 4a3a494753ec9cc7eb57972a767b7cce95da2de8..2cf81a98bfd634aa5e30cfa27502b9a8fa9c4ab8 100644 GIT binary patch literal 7633 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 literal 6906 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 Hu0mjf^nbjw delta 2769 zcmV;?3NH1c7_b(QBmr!ZC0l>Mz`!CQM3?x%0uhrVt>yTRF4Xak10915;|8?Sb7ezaP|n2I170u`ovKn<5_dB_|Q&Sut=(T+?L6 zibMyo(cn;5F$YS+I?I0v6VTBm+yHun>-VytF*V#*28(^$f&5DQF}?qQwchSGV_NQXm`^_t1O*Mw0R38Ia#jk&{670si9aFMDwLkoaV1;WcoKW6uIBLTU%@K@6!Kru7_eblfe5D4N;rer!FI+ zI88@_hD3~xBxw_fB@WsO;r=xnv4I2SBUmm@;tPL4y$S}GL7*8ICNnOK2qk6{13nNm z&}6u~94#M?1*{6>5$yTWz4jrF*#zeJJ>HUJcE)r;K?EYsM@@2DwNS+S38II!w7}|YAYXtL9i@} z6-s}+qRgr&$_ZYVMP1iLsV-~3W;xB`=fMxlRynH-eN_}8Y`5DGilUlm22i63+)dRVaKH`)G~A<3 z)DC`?e9{R<0VVhf)4NM*?sZ$pS!LkLF@Jwo>JQ)uGe4t9Scz^GC8R#kQtu`qNRcol zSco{dyPONHen>0%J40gNxez4JDM2tqd_mQWHdZ%@L}RM_8K8i532v}jmr!b!{9SGk z%nLTcywGqDf)&`o)u95xPYjB37(GHY*hE1*ehq^EzL8+9N|e*XOs~PmT0ge z8aN4pArDi67-u$~L)^-{wc|8H}G2gmw)TlBv z^4@u0lZpC}wMM13{V0U{Ww8h|bHGP4I6R=YnB8 zezGwR&M5eoOah7W{V1R{mwkWQ)1LOUr~N-nR<_?wV#X@TPklpr@k@p!ftL)QcY5~b zn~iy;l_VxsTwEz7{9yJinzn5l8}@?R*Lz-T%$VQ!q9% z#{8cSzP|Ye?DqS{zrE`CIe&N){sn?n;B>Rn8NP0}elG;~e!HF40Q_>jhF9SOu2eC! zxpk22ib2rx&fB+X_L0^!aP7X?K}El7raguDIeV$#h;JY8X{0L(;k5CRBlY@DkYByN zZC_uF1o^HFsF<(N?o@w#=z-{i3eInTc8<&eJ1Gg4Mkk9CBJCw_VMbuRS%S5m}yOX=6Wvne&b=11TDD7u!+{CLlIZ%1jD!w zVksmkYHzPALy&EXn{a03@{Q!$gSAaDP?%ZPwxf$%6PN36!kK?MEZqwe)K#u;Q(QN8 z5R%lo$ldr0+F<#@1l#&bg3ab9W_w6%doZGbx-g{#xyMiOW z2tJK5qrJ#RkGoC2h#qQXw$d6tyoNJG182B4YH-6o-mL^%NYh3<=)K??&izQ>_Dp8BzD)s9E*l z_{Xi;ht=7FKBs&?bY0YShj-%^n5!M5WAz{hFt2ycjqHE)WzFgE-go``;bak9F+r>D zwcl@?j{nXssnhb)3EVocJn0Nimj|?-;2r~|R@U`=w~ZoUC*t)Yqt*<&?(%>temB8g zd--u+tNHkJ>PH28Rl?ILjOou{NPL%ZrXR)(bx^WP5mL)hx{hD=La^6=eRsbxRx^LOXCzPHyLb2(?@n!Ez>nx19gYuL z`|tM5-nP3&Rgi)12zH0}qcxJ8j@_}x`w?MK2sTZ-i*~J*qwP^WIteJ~L4^46cr@|5 z%n!pHvrCXr&)=Z#9 Date: Wed, 8 Apr 2026 10:30:17 -0500 Subject: [PATCH 24/70] Weapon Cell Price Revisit (#6138) ## About The Pull Request Adjusts the prices of the energy weapon cells on the cargo market. **SHARPLITE:** Sharplite fills the niche of the mass produced, working man's guns, and while the weapons fit that status in price, their cells were even more expensive than Etherbor, which didn't feel right. Standard Sharplite cells were dropped in price to 400 credits Sharplite mini cells (Ohm cells) were dropped in price to 250 credits **ETHERBOR:** A premium option in the world of energy weapons, and for good reason. Their cells are more expensive than their competition from sharplite due to their marginally greater capacity and production cost Civilian Etherbor cells were set in price to 500 credits **EXTENDED CAPACITY:** Akin to the drop in price for extended magazines for the SKM/CM-82/Hydra Extended capacity weapon cells across the board have been dropped in price to 750 credits. It's important to note that Extended capacity energy weapon cells are comparable in shot count to standard magazines in equivalent ballistic options. ## Why It's Good For The Game Energy weapons have the notable advantage of not requiring the purchase of ammunition, and for this reason their cells must be more expensive than a ballistic weapon magazine. However, they also suffer the disadvantage of being unable to be topped off or refilled away from charging infrastructure. To balance, this change keeps energy cells fairly priced, but makes the aquisition of further cells more reasonable. ## Changelog :cl: add: Added sharplite plus cells to the black market balance: rebalanced energy cell prices /:cl: --- code/modules/cargo/blackmarket/packs/ammo.dm | 15 +++++++++++++-- code/modules/cargo/packs/magazines.dm | 16 ++++++++-------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/code/modules/cargo/blackmarket/packs/ammo.dm b/code/modules/cargo/blackmarket/packs/ammo.dm index 5670f42eca..286e8d2bef 100644 --- a/code/modules/cargo/blackmarket/packs/ammo.dm +++ b/code/modules/cargo/blackmarket/packs/ammo.dm @@ -176,6 +176,17 @@ stock_max = 4 availability_prob = 40 +/datum/blackmarket_item/ammo/sharplite_plus_cell + name = "Sharplite Plus Cell" + desc = "A sharplite plus energy weapon cell. The plus in the name means bigger, if that wasn't obvious." + item = /obj/item/stock_parts/cell/gun/sharplite/plus + + cost_min = 800 + cost_max = 1200 + stock_min = 2 + stock_max = 4 + availability_prob = 40 + /datum/blackmarket_item/ammo/gauss_cell name = "SolCon Weapon Cell" desc = "A Solarian weapon cell, for powering their gauss weaponry." @@ -213,8 +224,8 @@ desc = "These upgraded weapon powercells come with twice the capacity of the standard cells, and quality checked to make sure they won't explode!" item = /obj/item/stock_parts/cell/gun/upgraded - cost_min = 1000 - cost_max = 1750 + cost_min = 800 + cost_max = 1200 stock_min = 2 stock_max = 4 availability_prob = 25 diff --git a/code/modules/cargo/packs/magazines.dm b/code/modules/cargo/packs/magazines.dm index 189e7bf29f..cd473285e1 100644 --- a/code/modules/cargo/packs/magazines.dm +++ b/code/modules/cargo/packs/magazines.dm @@ -402,22 +402,22 @@ desc = "Contains a proprietary weapon cell, compatible with most Sharplite energy weapons." contains = list(/obj/item/stock_parts/cell/gun/sharplite) faction = /datum/faction/warra - faction_discount = 30 - cost = 700 + faction_discount = 25 /*300 credits*/ + cost = 400 /datum/supply_pack/magazine/tinyguncell name = "Sharplite Mini Power Cell" desc = "Contains a proprietary weapon cell, compatible with the Ohm self-defence pistol." contains = list(/obj/item/stock_parts/cell/gun/sharplite/mini) faction = /datum/faction/warra - faction_discount = 30 - cost = 300 + faction_discount = 20 /*200 credits*/ + cost = 250 /datum/supply_pack/magazine/upgradedguncell name = "Sharplite Plus Proprietary Weapon Cell" desc = "Contains an upgraded weapon cell, compatible with most Sharplite models. For MW use only." contains = list(/obj/item/stock_parts/cell/gun/sharplite/plus) - cost = 1000 + cost = 750 faction = /datum/faction/warra faction_discount = 0 faction_locked = TRUE @@ -426,7 +426,7 @@ name = "Sharplite Plus Proprietary Weapon Cell" desc = "Contains an upgraded weapon cell, compatible with most Sharplite models." contains = list(/obj/item/stock_parts/cell/gun/sharplite/plus) - cost = 1000 + cost = 750 faction = /datum/faction/inteq faction_discount = 0 faction_locked = TRUE @@ -437,14 +437,14 @@ name = "Etherbor Cell Crate" desc = "Contains an Etherbor weapon cell, compatible with Etherbor armaments with a slightly higher capacity." contains = list(/obj/item/stock_parts/cell/gun/kalix) - cost = 600 + cost = 500 faction = /datum/faction/pgf /datum/supply_pack/magazine/pgfcell name = "Military-Grade Etherbor Cell Crate" desc = "Contains a military-grade Etherbor weapon cell produced for the PGFMC, compatible with Etherbor armaments with a significantly higher capacity." contains = list(/obj/item/stock_parts/cell/gun/pgf) - cost = 1000 + cost = 750 faction = /datum/faction/pgf faction_discount = 0 faction_locked = TRUE From 2311f42c4d5cc4a47889a75307bb56a60dc9219b Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 8 Apr 2026 10:51:34 -0500 Subject: [PATCH 25/70] Automatic changelog generation for PR #6138 [ci skip] --- html/changelogs/AutoChangeLog-pr-6138.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-6138.yml diff --git a/html/changelogs/AutoChangeLog-pr-6138.yml b/html/changelogs/AutoChangeLog-pr-6138.yml new file mode 100644 index 0000000000..ddbf9114b9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6138.yml @@ -0,0 +1,5 @@ +author: DIB-DOG +changes: + - {rscadd: Added sharplite plus cells to the black market} + - {balance: rebalanced energy cell prices} +delete-after: true From 05ad60a169d4b5bef18c05afb3794754f69fa37b Mon Sep 17 00:00:00 2001 From: firebudgy <153147550+firebudgy@users.noreply.github.com> Date: Wed, 8 Apr 2026 08:41:01 -0700 Subject: [PATCH 26/70] Reduces prices of jetpacks (#6123) ## About The Pull Request Reduces the prices of jetpacks to be much more reasonable given their usecases and limitations. Standard: 500 Harness: 750 Upgrade: 1250 (only compatible with hardsuits so you still have a buy-in) Given that jetpacks are used for effectively only two or three environments (being space, asteroids, and debris in the future), them being so highly priced while still taking up your back slot is rough. Mobility in space without a jetpack usually boils down to people conga-lining on the one jetpack person, or throwing cigarettes and whatnot to propel yourself. ## Why It's Good For The Game Given the importance of space, and how expensive stocking a full crew with jetpacks at their original prices would be, it's simply unfair to have them be this expensive. By making them cheaper, this should mean people get to use tools fitting for the job while they work in space - for the times they do actually land at a space signal or asteroid field to work. ## Changelog :cl: balance: Jetpack prices reduced. /:cl --- code/modules/cargo/packs/tools.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/cargo/packs/tools.dm b/code/modules/cargo/packs/tools.dm index 8aa927622d..3ffab11ef2 100644 --- a/code/modules/cargo/packs/tools.dm +++ b/code/modules/cargo/packs/tools.dm @@ -126,7 +126,7 @@ /datum/supply_pack/tools/jetpack name = "Jetpack Crate" desc = "For when you need to go fast in space." - cost = 750 + cost = 500 contains = list(/obj/item/tank/jetpack/carbondioxide) crate_name = "jetpack crate" crate_type = /obj/structure/closet/crate/secure/plasma @@ -134,13 +134,13 @@ /datum/supply_pack/tools/jetpack/harness name = "Jetpack Harness Crate" desc = "A compact jetpack harness for those who don't wish to be weighed down by larger traditional jetpacks." - cost = 1500 + cost = 750 contains = list(/obj/item/tank/jetpack/oxygen/harness) /datum/supply_pack/tools/jetpack/suit name = "Hardsuit Jetpack Upgrade Crate" desc = "A standardized jetpack attachment designed for direct integration with hardsuits. For when every gram matters." - cost = 2000 + cost = 1250 contains = list(/obj/item/tank/jetpack/suit) /datum/supply_pack/tools/anglegrinder From a9644eb7c47263968eec210674946d6fcde0e76d Mon Sep 17 00:00:00 2001 From: whatnot <135062404+stiel0248@users.noreply.github.com> Date: Wed, 8 Apr 2026 14:06:12 -0700 Subject: [PATCH 27/70] Adds brass knuckles so you can pay off your debt to the tooth fairy. (#6116) ## About The Pull Request Adds brass knuckles to the cargo list, a very cheap blunt melee option that can be wielded for increased attack speed. Also adds new variables for wielded cooldown changes. image ## Why It's Good For The Game The brass knuckle sprites have been in the game for a while now and I thought I would give implementing them a shot. ## Changelog :cl: stiel add: Brass knuckles! New melee item in cargo. /:cl: --------- Signed-off-by: whatnot <135062404+stiel0248@users.noreply.github.com> Co-authored-by: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> --- code/datums/components/melee/twohanded.dm | 18 ++++++++-- code/game/objects/items/melee/blunt.dm | 31 ++++++++++++++++++ code/modules/cargo/packs/sec_supply.dm | 7 ++++ icons/mob/inhands/weapons/blunt_lefthand.dmi | Bin 1351 -> 1437 bytes icons/mob/inhands/weapons/blunt_righthand.dmi | Bin 1355 -> 1440 bytes icons/obj/weapon/blunt.dmi | Bin 3686 -> 7821 bytes 6 files changed, 54 insertions(+), 2 deletions(-) diff --git a/code/datums/components/melee/twohanded.dm b/code/datums/components/melee/twohanded.dm index 6b6d9e5a44..5014b86a9e 100644 --- a/code/datums/components/melee/twohanded.dm +++ b/code/datums/components/melee/twohanded.dm @@ -18,6 +18,8 @@ var/icon_wielded = FALSE /// The icon that will be used when wielded var/obj/item/offhand/offhand_item = null /// Reference to the offhand created for the item var/sharpened_increase = 0 /// The amount of increase recived from sharpening the item + var/attack_cooldown_wielded = null /// The attack speed of the item when wielded + var/attack_cooldown_unwielded = null /// The attack speed of the item when unwielded /** * Two Handed component @@ -31,9 +33,11 @@ * * force_wielded (optional) The force setting when the item is wielded, do not use with force_multiplier * * force_unwielded (optional) The force setting when the item is unwielded, do not use with force_multiplier * * icon_wielded (optional) The icon to be used when wielded + * * attack_cooldown_wielded (optional) The attack cooldown when the item is wielded + * * attack_cooldown_unwielded (optional) The attack cooldown when the item is unwielded */ /datum/component/two_handed/Initialize(require_twohands=FALSE, wieldsound=FALSE, unwieldsound=FALSE, attacksound=FALSE, \ - force_multiplier=0, force_wielded=null, force_unwielded=null, icon_wielded=FALSE) + force_multiplier=0, force_wielded=null, force_unwielded=null, icon_wielded=FALSE, attack_cooldown_wielded=null, attack_cooldown_unwielded=null) if(!isitem(parent)) return COMPONENT_INCOMPATIBLE @@ -45,10 +49,12 @@ src.force_wielded = force_wielded src.force_unwielded = force_unwielded src.icon_wielded = icon_wielded + src.attack_cooldown_wielded = attack_cooldown_wielded + src.attack_cooldown_unwielded = attack_cooldown_unwielded // Inherit the new values passed to the component /datum/component/two_handed/InheritComponent(datum/component/two_handed/new_comp, original, require_twohands, wieldsound, unwieldsound, \ - force_multiplier, force_wielded, force_unwielded, icon_wielded) + force_multiplier, force_wielded, force_unwielded, icon_wielded, attack_cooldown_wielded, attack_cooldown_unwielded) if(!original) return if(require_twohands) @@ -67,6 +73,10 @@ src.force_unwielded = force_unwielded if(icon_wielded) src.icon_wielded = icon_wielded + if(attack_cooldown_wielded) + src.attack_cooldown_wielded = attack_cooldown_wielded + if(attack_cooldown_unwielded) + src.attack_cooldown_unwielded = attack_cooldown_unwielded // register signals withthe parent item /datum/component/two_handed/RegisterWithParent() @@ -157,6 +167,8 @@ parent_item.force = force_wielded if(sharpened_increase) parent_item.force += sharpened_increase + if(attack_cooldown_wielded) + parent_item.attack_cooldown = attack_cooldown_wielded parent_item.name = "[parent_item.name] (Wielded)" parent_item.update_appearance() @@ -202,6 +214,8 @@ parent_item.force /= force_multiplier else if(!isnull(force_unwielded)) parent_item.force = force_unwielded + if(attack_cooldown_unwielded) + parent_item.attack_cooldown = attack_cooldown_unwielded // update the items name to remove the wielded status var/sf = findtext(parent_item.name, " (Wielded)", -10) // 10 == length(" (Wielded)") diff --git a/code/game/objects/items/melee/blunt.dm b/code/game/objects/items/melee/blunt.dm index 9be13ce64c..521ff0b4b1 100644 --- a/code/game/objects/items/melee/blunt.dm +++ b/code/game/objects/items/melee/blunt.dm @@ -70,3 +70,34 @@ if(istype(A, /obj/structure/window) || istype(A, /obj/structure/grille)) var/obj/structure/W = A W.atom_destruction("axe") + +/obj/item/brass_knuckles + name = "brass knuckles" + icon_state = "brass_knuckles" + base_icon_state = "brass_knuckles" + icon = 'icons/obj/weapon/blunt.dmi' + lefthand_file = 'icons/mob/inhands/weapons/blunt_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/blunt_righthand.dmi' + desc = "A pair of brass knuckles, fit for the common thug or stylish gangster. Can be carried in one hand but are most effective when wielded as a pair." + force = 15 + wound_bonus = 10 + throwforce = 5 + demolition_mod = 1.25 + custom_price = 180 + sharpness = SHARP_NONE + w_class = WEIGHT_CLASS_SMALL + slot_flags = ITEM_SLOT_POCKETS + attack_cooldown = LIGHT_WEAPON_CD + attack_verb = list("punched", "wholloped", "hooked", "jabbed", "slammed") + hitsound = list('sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg', 'sound/weapons/punch1.ogg', 'sound/weapons/punch2.ogg', 'sound/weapons/punch3.ogg', 'sound/weapons/punch4.ogg', 'sound/weapons/slap.ogg') + pickup_sound = 'sound/weapons/melee/general_pickup.ogg' + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30) + resistance_flags = FIRE_PROOF + +/obj/item/brass_knuckles/ComponentInitialize() + . = ..() + AddComponent(/datum/component/two_handed, attack_cooldown_wielded = 4, attack_cooldown_unwielded = LIGHT_WEAPON_CD, icon_wielded="[base_icon_state]_w") + +/obj/item/brass_knuckles/update_icon_state() + icon_state = base_icon_state + return ..() diff --git a/code/modules/cargo/packs/sec_supply.dm b/code/modules/cargo/packs/sec_supply.dm index 0b6d6141e1..ffa9054a02 100644 --- a/code/modules/cargo/packs/sec_supply.dm +++ b/code/modules/cargo/packs/sec_supply.dm @@ -139,6 +139,13 @@ contains = list(/obj/item/melee/knife/survival) crate_name = "survival knife crate" +/datum/supply_pack/sec_supply/brass_knuckles + name = "Brass Knuckles Crate" + desc = "Contains one pair of brass knuckles. Shiny, stylish, and swift. More than enough to make a pirate think twice about roughing up the average spacer-gangster." + cost = 160 + contains = list(/obj/item/brass_knuckles) + crate_name = "brass knuckles crate" + /datum/supply_pack/sec_supply/machete name = "Stamped Steel Machete Crate" desc = "Contains one mass produced machete. A perfect choice for crews on a budget." diff --git a/icons/mob/inhands/weapons/blunt_lefthand.dmi b/icons/mob/inhands/weapons/blunt_lefthand.dmi index 198e15b348c92c03ada42020e54e1459d0ede073..33a0f520e4c6d050d893d9b0a7039bb5aca34068 100644 GIT binary patch delta 1422 zcmV;91#$Yv3Y`ljiBL{Q4GJ0x0000DNk~Le0002M0002M2m=5B0A&K4H2?qrQIRDg ze-aTEGc`KFHY1E0GXvL^q@D82qEbt1e@ziK9SgaUIPT7H zb_KOh00001bW%=J06^y0W&i*HqIy(VbVOxyV{&P5bZKvH004NLm65#;!Y~kn=j17( zc1QfJET~o0fxbc%$dN=%Qt2*G9-kK0e+5i%!Nz3GbRZD008h?NJUIFk?ttYTg>u2 zo?4z~W0&KKvxr<|X%4+ki>`s`j-?UzSB#7~O@hr$Xqbi7q=XmL;v` zBVgCQ1~9Zp=GExoX_o4z$)yFkqmyC8TS5bqMO<4Jbr8H*v`u`qe_wF5 z{ROFNIr!2vbc`uge-9;WHS&+^aMC-B{)5&dnv(mf)*NoTQ7@a->D6=QD|-G?3ra7{zo=ow_H(K-n&Esu5{ z`&MYx1Z`q-yLqHx8aq2?`pTkS;4x~b`lLaw9yMP51^OE#e<*;;NTW|0?7R3&ZqNP# zi%%LRv9qAR000000002^yF7K%|5tZU_wgi3i<`{h@I7Bj`^@?)&}Y ziH+c?3#w}DxFq|RXa4*B=NBe|?zN-2@thr+VtQ|U$0H4^u~Ysn-|usCAYY|Cz3`K> zU_;V-qifeRf9NsO*ynhCzfUtIkIzTX0FKhEgt?}nr$Lk0=lFfUFN6CF(!6#`Lr;U` zszI;s_v7>zJkl_Y-3unPhwCr+^7Hx&6L%l7zpyM|u82qMFRWnh$%pJOd_S@K3jhEB z0000000000fbZwc@!noG*X*zQ@;)DNes}j}Y3Q59V7#HfW}kUJ8T~Q4^>JQ#=Zm+c zq2~`i6^8zredaj;000000000000000a3?-%_m=wp`*_Sl@_rtw@V5H?S$l4)?*jk; c0N^k3AK08P4~`AQ?*IS*07*qoM6N<$f*R7C5C8xG delta 1336 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 literal 3686 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 Eg7&9!8~^|S From c2d38fbe8ad21cd5f675b02ca20abe49ba9c63a1 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 8 Apr 2026 16:27:41 -0500 Subject: [PATCH 28/70] Automatic changelog generation for PR #6116 [ci skip] --- html/changelogs/AutoChangeLog-pr-6116.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-6116.yml diff --git a/html/changelogs/AutoChangeLog-pr-6116.yml b/html/changelogs/AutoChangeLog-pr-6116.yml new file mode 100644 index 0000000000..ad1bd8cf94 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6116.yml @@ -0,0 +1,4 @@ +author: stiel +changes: + - {rscadd: Brass knuckles! New melee item in cargo.} +delete-after: true From 785fbc82b9dc72bdd2fa2f91af497913eb426289 Mon Sep 17 00:00:00 2001 From: Erika Fox <94164348+Erikafox@users.noreply.github.com> Date: Wed, 8 Apr 2026 17:15:15 -0400 Subject: [PATCH 29/70] zipper (#6142) ## About The Pull Request you toggle the pilot jacket's zipper ## Changelog :cl: fix: pilot jacket toggletext /:cl: --- code/modules/clothing/suits/miscellaneous.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index b3cc6e22e0..2279fd45dc 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -466,6 +466,7 @@ "Black Flight Jacket" = "flightblack", ) unique_reskin_changes_inhand = TRUE + togglename = "zipper" /obj/item/clothing/suit/toggle/flight/Initialize() . = ..() From 4bc8ee8c6c76838dd11f32832543f93c547e2e86 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 8 Apr 2026 16:48:35 -0500 Subject: [PATCH 30/70] Automatic changelog generation for PR #6142 [ci skip] --- html/changelogs/AutoChangeLog-pr-6142.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-6142.yml diff --git a/html/changelogs/AutoChangeLog-pr-6142.yml b/html/changelogs/AutoChangeLog-pr-6142.yml new file mode 100644 index 0000000000..162e1a1c48 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6142.yml @@ -0,0 +1,4 @@ +author: Erikafox +changes: + - {bugfix: pilot jacket toggletext} +delete-after: true From 691f0d15fd8e922a6ba04a3d79964a538ffb917f Mon Sep 17 00:00:00 2001 From: thearbiber <135081923+thearbiber@users.noreply.github.com> Date: Wed, 8 Apr 2026 20:55:45 -0400 Subject: [PATCH 31/70] whitereds back in cargo (#6144) ## Why It's Good For The Game Oops. ## Changelog :cl: fix: Whitereds back in cargo /:cl: --- code/modules/cargo/packs/spacesuits.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/cargo/packs/spacesuits.dm b/code/modules/cargo/packs/spacesuits.dm index 7c25ec85fc..b7241514b9 100644 --- a/code/modules/cargo/packs/spacesuits.dm +++ b/code/modules/cargo/packs/spacesuits.dm @@ -439,7 +439,7 @@ faction_discount = 0 faction_locked = TRUE -/datum/supply_pack/spacesuits/white_red_hardsuit +/datum/supply_pack/spacesuits/Hardstealth name = "Asura Shock Hardsuit Crate" desc = "A stripped-down version of an older hardsuit, the Asura has been modified to keep its quick movement and armor at the cost of its night-vision technology. Due to this, its role is often shifted from recon to blitz maneuvers." cost = 4500 From 50db51ed7c3c3fe85018079051dde00ba8696374 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 8 Apr 2026 20:16:41 -0500 Subject: [PATCH 32/70] Automatic changelog generation for PR #6144 [ci skip] --- html/changelogs/AutoChangeLog-pr-6144.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-6144.yml diff --git a/html/changelogs/AutoChangeLog-pr-6144.yml b/html/changelogs/AutoChangeLog-pr-6144.yml new file mode 100644 index 0000000000..c144f2d890 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6144.yml @@ -0,0 +1,4 @@ +author: thearbiber +changes: + - {bugfix: Whitereds back in cargo} +delete-after: true From c44bdbe57d54e57c149b4a20ac493cf19fd0eb13 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 9 Apr 2026 01:52:08 +0000 Subject: [PATCH 33/70] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-6116.yml | 4 ---- html/changelogs/AutoChangeLog-pr-6138.yml | 5 ----- html/changelogs/AutoChangeLog-pr-6142.yml | 4 ---- html/changelogs/AutoChangeLog-pr-6144.yml | 4 ---- html/changelogs/archive/2026-04.yml | 10 ++++++++++ 5 files changed, 10 insertions(+), 17 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-6116.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-6138.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-6142.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-6144.yml diff --git a/html/changelogs/AutoChangeLog-pr-6116.yml b/html/changelogs/AutoChangeLog-pr-6116.yml deleted file mode 100644 index ad1bd8cf94..0000000000 --- a/html/changelogs/AutoChangeLog-pr-6116.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: stiel -changes: - - {rscadd: Brass knuckles! New melee item in cargo.} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-6138.yml b/html/changelogs/AutoChangeLog-pr-6138.yml deleted file mode 100644 index ddbf9114b9..0000000000 --- a/html/changelogs/AutoChangeLog-pr-6138.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: DIB-DOG -changes: - - {rscadd: Added sharplite plus cells to the black market} - - {balance: rebalanced energy cell prices} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-6142.yml b/html/changelogs/AutoChangeLog-pr-6142.yml deleted file mode 100644 index 162e1a1c48..0000000000 --- a/html/changelogs/AutoChangeLog-pr-6142.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Erikafox -changes: - - {bugfix: pilot jacket toggletext} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-6144.yml b/html/changelogs/AutoChangeLog-pr-6144.yml deleted file mode 100644 index c144f2d890..0000000000 --- a/html/changelogs/AutoChangeLog-pr-6144.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: thearbiber -changes: - - {bugfix: Whitereds back in cargo} -delete-after: true diff --git a/html/changelogs/archive/2026-04.yml b/html/changelogs/archive/2026-04.yml index 3f3c2483cb..ddc7078057 100644 --- a/html/changelogs/archive/2026-04.yml +++ b/html/changelogs/archive/2026-04.yml @@ -60,3 +60,13 @@ zimon9: - rscdel: Removed layer adapter layer update proc - code_imp: changed the layer of atmospherics machines so they layer below catwalks +2026-04-09: + DIB-DOG: + - rscadd: Added sharplite plus cells to the black market + - balance: rebalanced energy cell prices + Erikafox: + - bugfix: pilot jacket toggletext + stiel: + - rscadd: Brass knuckles! New melee item in cargo. + thearbiber: + - bugfix: Whitereds back in cargo From 7c570459d2e8cf2fdc012aec7a323d05288e8762 Mon Sep 17 00:00:00 2001 From: Sarah C <93578146+SapphicOverload@users.noreply.github.com> Date: Thu, 9 Apr 2026 17:03:52 -0400 Subject: [PATCH 34/70] IPC refactor part 2: maybe kinda sane edition (#5939) ## About The Pull Request Refactored IPC chassis code yet again. Full-body replacements now have innate support for organ replacements as well, and `apply_to_species` now exists for any extra features not accounted for. Also adds support for descriptions that can be read by clicking a [?] button. ## Why It's Good For The Game Allows significantly more control when adding new IPC styles into the game (and makes the code less evil) ## Changelog :cl: refactor: Refactored IPCs again /:cl: --- code/__DEFINES/DNA.dm | 33 +++--- code/__DEFINES/traits/traits.dm | 9 +- code/_globalvars/traits.dm | 3 +- code/datums/diseases/gastrolisis.dm | 12 +- code/datums/dna.dm | 2 +- code/datums/mutations/hulk.dm | 2 + code/game/objects/items/devices/scanners.dm | 16 +-- code/modules/admin/verbs/purrbation.dm | 7 +- .../abductor/equipment/glands/heal.dm | 12 +- .../changeling/powers/regenerate.dm | 7 +- code/modules/client/preferences.dm | 90 +++++++++----- .../sprite_accessories/body/_body.dm | 28 ++--- .../sprite_accessories/body/prosthetic.dm | 87 ++++++++++++++ .../mob/living/carbon/carbon_defines.dm | 2 +- .../mob/living/carbon/human/human_defines.dm | 3 - .../mob/living/carbon/human/species.dm | 110 +++++------------- .../living/carbon/human/species_types/IPC.dm | 91 +++++++-------- .../carbon/human/species_types/abductors.dm | 13 ++- .../carbon/human/species_types/android.dm | 24 ++-- .../carbon/human/species_types/dullahan.dm | 16 ++- .../carbon/human/species_types/ethereal.dm | 16 ++- .../carbon/human/species_types/flypeople.dm | 15 ++- .../carbon/human/species_types/humans.dm | 63 +++++----- .../carbon/human/species_types/jellypeople.dm | 14 ++- .../carbon/human/species_types/kepori.dm | 26 +++-- .../human/species_types/lizardpeople.dm | 30 ++--- .../carbon/human/species_types/mothmen.dm | 25 ++-- .../carbon/human/species_types/plasmamen.dm | 18 ++- .../carbon/human/species_types/podpeople.dm | 2 +- .../human/species_types/shadowpeople.dm | 28 ++++- .../carbon/human/species_types/skeletons.dm | 12 +- .../carbon/human/species_types/snail.dm | 14 ++- .../carbon/human/species_types/spider.dm | 14 ++- .../carbon/human/species_types/vampire.dm | 15 ++- .../living/carbon/human/species_types/vox.dm | 22 ++-- .../carbon/human/species_types/zombies.dm | 27 ++++- code/modules/surgery/bodyparts/head.dm | 4 + code/modules/surgery/bodyparts/helpers.dm | 21 +++- .../species_parts/ethereal_bodyparts.dm | 1 + .../bodyparts/species_parts/ipc_bodyparts.dm | 99 ++++------------ .../bodyparts/species_parts/misc_bodyparts.dm | 5 + .../bodyparts/species_parts/moth_bodyparts.dm | 1 + .../species_parts/plasmaman_bodyparts.dm | 1 + .../species_parts/rachnid_bodyparts.dm | 1 + .../bodyparts/species_parts/vox_bodyparts.dm | 1 + code/modules/surgery/organs/augments_arms.dm | 1 + code/modules/surgery/organs/eyes.dm | 2 +- code/modules/surgery/organs/organ_internal.dm | 2 +- code/modules/unit_tests/_unit_tests.dm | 1 + .../unit_tests/species_limbs_and_organs.dm | 19 +++ shiptest.dme | 1 + 51 files changed, 629 insertions(+), 439 deletions(-) create mode 100644 code/modules/mob/dead/new_player/sprite_accessories/body/prosthetic.dm create mode 100644 code/modules/unit_tests/species_limbs_and_organs.dm diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index 6773b2cb12..1f425cd801 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -106,24 +106,23 @@ #define HAIR 2 #define FACEHAIR 3 #define EYECOLOR 4 -#define SCLERA 5 -#define EMOTE_OVERLAY 6 -#define LIPS 7 -#define NOBLOOD 8 -#define NOTRANSSTING 9 +#define EMOTE_OVERLAY 5 +#define LIPS 6 +#define NOBLOOD 7 +#define NOTRANSSTING 8 /// Used if we want the mutant colour to be only used by mutant bodyparts. Don't combine this with MUTCOLORS, or it will be useless. -#define MUTCOLORS_PARTSONLY 10 -#define NOZOMBIE 11 -#define NO_UNDERWEAR 12 -#define NOLIVER 13 -#define NOSTOMACH 14 -#define NO_DNA_COPY 15 -#define DRINKSBLOOD 16 -#define NOFLASH 17 -#define DYNCOLORS 18 //! Use this if you want to change the race's color without the player being able to pick their own color. AKA special color shifting TRANSLATION: AWFUL. -#define AGENDER 19 -#define NOEYESPRITES 20 //! Do not draw eyes or eyeless overlay -#define NOREAGENTS 21 //! DO NOT PROCESS REAGENTS +#define MUTCOLORS_PARTSONLY 9 +#define NOZOMBIE 10 +#define NO_UNDERWEAR 11 +#define NOLIVER 12 +#define NOSTOMACH 13 +#define NO_DNA_COPY 14 +#define DRINKSBLOOD 15 +#define NOFLASH 16 +#define DYNCOLORS 17 //! Use this if you want to change the race's color without the player being able to pick their own color. AKA special color shifting TRANSLATION: AWFUL. +#define AGENDER 18 +#define NOEYESPRITES 19 //! Do not draw eyes or eyeless overlay +#define NOREAGENTS 20 //! DO NOT PROCESS REAGENTS #define REVIVESBYHEALING 21 // Will revive on heal when healing and total HP > 0. #define NOHUSK 22 // Can't be husked. #define NOMOUTH 23 diff --git a/code/__DEFINES/traits/traits.dm b/code/__DEFINES/traits/traits.dm index f4214cbc9b..59793ca5e9 100644 --- a/code/__DEFINES/traits/traits.dm +++ b/code/__DEFINES/traits/traits.dm @@ -396,13 +396,14 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai ///Trait for allowing an item that isn't food into the customizable reagent holder #define TRAIT_ODD_CUSTOMIZABLE_FOOD_INGREDIENT "odd_customizable_food_ingredient" +///Replaces all of a mob's limbs and organs with cybernetics at roundstart. +#define TRAIT_USE_PROSTHETIC "use_prosthetic" +///This human's a mutant! +#define TRAIT_GENEMODDED "genemodded" + ///Trait granted by lipstick #define LIPSTICK_TRAIT "lipstick_trait" -//Bone breaking traits. Don't actually do anything(?) -#define TRAIT_NOBREAK "no_break" -#define TRAIT_ALLBREAK "all_break" - //common trait sources #define TRAIT_GENERIC "generic" #define GENERIC_ITEM_TRAIT "generic_item" diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index 4a7ff23cf8..6c9479bb94 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -138,8 +138,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_FRIENDLY" = TRAIT_FRIENDLY, "TRAIT_GRABWEAKNESS" = TRAIT_GRABWEAKNESS, "TRAIT_BALD" = TRAIT_BALD, - "TRAIT_NOBREAK" = TRAIT_NOBREAK, - "TRAIT_ALLBREAK" = TRAIT_ALLBREAK, + "TRAIT_USE_PROSTHETIC" = TRAIT_USE_PROSTHETIC, "TRAIT_BADTOUCH" = TRAIT_BADTOUCH, "TRAIT_HOLDABLE" = TRAIT_HOLDABLE, "TRAIT_NOBLEED" = TRAIT_NOBLEED, diff --git a/code/datums/diseases/gastrolisis.dm b/code/datums/diseases/gastrolisis.dm index b61afeaf9c..580208744a 100644 --- a/code/datums/diseases/gastrolisis.dm +++ b/code/datums/diseases/gastrolisis.dm @@ -63,9 +63,13 @@ var/mob/living/carbon/human/H = affected_mob var/obj/item/organ/tongue/tongue = locate(/obj/item/organ/tongue/snail) in H.internal_organs if(tongue) - var/obj/item/organ/tongue/new_tongue = new H.dna.species.mutanttongue () - new_tongue.Insert(H) + var/obj/item/organ/tongue/new_tongue = H.dna?.species?.species_organs[ORGAN_SLOT_TONGUE] + if(new_tongue) + new_tongue = new() + new_tongue.Insert(H) var/obj/item/organ/eyes/eyes = locate(/obj/item/organ/eyes/snail) in H.internal_organs if(eyes) - var/obj/item/organ/eyes/new_eyes = new H.dna.species.mutanteyes () - new_eyes.Insert(H) + var/obj/item/organ/eyes/new_eyes = H.dna?.species?.species_organs[ORGAN_SLOT_EYES] + if(new_eyes) + new_eyes = new() + new_eyes.Insert(H) diff --git a/code/datums/dna.dm b/code/datums/dna.dm index 439e7fc4b6..5e9b200696 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -338,7 +338,7 @@ language_holder = new species_holder(src) /mob/living/carbon/human/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE, robotic = FALSE) - robotic ||= fbp + robotic ||= HAS_TRAIT(src, TRAIT_USE_PROSTHETIC) ..() if(icon_update) update_hair() diff --git a/code/datums/mutations/hulk.dm b/code/datums/mutations/hulk.dm index 26953d3997..6b809e07a4 100644 --- a/code/datums/mutations/hulk.dm +++ b/code/datums/mutations/hulk.dm @@ -20,6 +20,7 @@ ADD_TRAIT(owner, TRAIT_PUSHIMMUNE, GENETIC_MUTATION) ADD_TRAIT(owner, TRAIT_CHUNKYFINGERS, GENETIC_MUTATION) ADD_TRAIT(owner, TRAIT_IGNOREDAMAGESLOWDOWN, GENETIC_MUTATION) + ADD_TRAIT(owner, TRAIT_GENEMODDED, GENETIC_MUTATION) ADD_TRAIT(owner, TRAIT_HULK, GENETIC_MUTATION) owner.update_body_parts() SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "hulk", /datum/mood_event/hulk) @@ -57,6 +58,7 @@ REMOVE_TRAIT(owner, TRAIT_PUSHIMMUNE, GENETIC_MUTATION) REMOVE_TRAIT(owner, TRAIT_CHUNKYFINGERS, GENETIC_MUTATION) REMOVE_TRAIT(owner, TRAIT_IGNOREDAMAGESLOWDOWN, GENETIC_MUTATION) + REMOVE_TRAIT(owner, TRAIT_GENEMODDED, GENETIC_MUTATION) REMOVE_TRAIT(owner, TRAIT_HULK, GENETIC_MUTATION) owner.update_body_parts() SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "hulk") diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 8162bb8076..a28fa238b1 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -344,21 +344,7 @@ GENE SCANNER render_list += "Genetic Stability: [H.dna.stability]%.\n" // Species and body temperature - var/datum/species/S = H.dna.species - var/mutant = H.dna.check_mutation(HULK) \ - || S.mutantlungs != initial(S.mutantlungs) \ - || S.mutantbrain != initial(S.mutantbrain) \ - || S.mutantheart != initial(S.mutantheart) \ - || S.mutanteyes != initial(S.mutanteyes) \ - || S.mutantears != initial(S.mutantears) \ - || S.mutanthands != initial(S.mutanthands) \ - || S.mutanttongue != initial(S.mutanttongue) \ - || S.mutantliver != initial(S.mutantliver) \ - || S.mutantstomach != initial(S.mutantstomach) \ - || S.mutantappendix != initial(S.mutantappendix) \ - || S.flying_species != initial(S.flying_species) - - render_list += "Species: [S.name][mutant ? "-derived mutant" : ""]\n" + render_list += "Species: [HAS_TRAIT(H, TRAIT_GENEMODDED) ? "Modified " : ""][H.dna.species.name]\n" render_list += "Body temperature: [round(M.bodytemperature-T0C,0.1)] °C ([round(M.bodytemperature*1.8-459.67,0.1)] °F)\n" // Time of death diff --git a/code/modules/admin/verbs/purrbation.dm b/code/modules/admin/verbs/purrbation.dm index bbd7c0bc47..0cba0a3458 100644 --- a/code/modules/admin/verbs/purrbation.dm +++ b/code/modules/admin/verbs/purrbation.dm @@ -26,15 +26,12 @@ var/obj/item/organ/ears/cat/cat_ears = locate() in internal_organs if(cat_tail) cat_tail.Remove(src, TRUE) - var/obj/item/organ/tail/new_tail - for(var/organ in dna.species.mutant_organs) //Yes, there's no other way. - if(ispath(organ, /obj/item/organ/tail)) - new_tail = organ + var/obj/item/organ/tail/new_tail = dna.species.species_organs[ORGAN_SLOT_TAIL] if(new_tail) new_tail = new new_tail() new_tail.Insert(src, TRUE, FALSE) if(cat_ears) - var/obj/item/organ/new_ears = new dna.species.mutantears + var/obj/item/organ/new_ears = new dna.species.species_organs[ORGAN_SLOT_EARS] new_ears.Insert(src, TRUE, FALSE) if(!silent) to_chat(src, span_boldnotice("You are no longer a cat.")) diff --git a/code/modules/antagonists/abductor/equipment/glands/heal.dm b/code/modules/antagonists/abductor/equipment/glands/heal.dm index 5568a86c10..70242d8cbf 100644 --- a/code/modules/antagonists/abductor/equipment/glands/heal.dm +++ b/code/modules/antagonists/abductor/equipment/glands/heal.dm @@ -77,9 +77,7 @@ else to_chat(owner, span_warning("You feel a weird rumble in your bowels...")) - var/liver_type = /obj/item/organ/liver - if(owner?.dna?.species?.mutantliver) - liver_type = owner.dna.species.mutantliver + var/liver_type = owner?.dna?.species?.species_organs[ORGAN_SLOT_LIVER] || /obj/item/organ/liver var/obj/item/organ/liver/new_liver = new liver_type() new_liver.Insert(owner) @@ -92,9 +90,7 @@ else to_chat(owner, span_warning("You feel a weird rumble inside your chest...")) - var/lung_type = /obj/item/organ/lungs - if(owner.dna.species && owner.dna.species.mutantlungs) - lung_type = owner.dna.species.mutantlungs + var/lung_type = owner.dna?.species?.species_organs[ORGAN_SLOT_LUNGS] || /obj/item/organ/lungs var/obj/item/organ/lungs/new_lungs = new lung_type() new_lungs.Insert(owner) @@ -110,9 +106,7 @@ addtimer(CALLBACK(src, PROC_REF(finish_replace_eyes)), rand(100, 200)) /obj/item/organ/heart/gland/heal/proc/finish_replace_eyes() - var/eye_type = /obj/item/organ/eyes - if(owner.dna.species && owner.dna.species.mutanteyes) - eye_type = owner.dna.species.mutanteyes + var/eye_type = owner.dna?.species?.species_organs[ORGAN_SLOT_EYES] || /obj/item/organ/eyes var/obj/item/organ/eyes/new_eyes = new eye_type() new_eyes.Insert(owner) owner.visible_message(span_warning("A pair of new eyes suddenly inflates into [owner]'s eye sockets!"), span_userdanger("A pair of new eyes suddenly inflates into your eye sockets!")) diff --git a/code/modules/antagonists/changeling/powers/regenerate.dm b/code/modules/antagonists/changeling/powers/regenerate.dm index a87a41e2bb..d4f0f48531 100644 --- a/code/modules/antagonists/changeling/powers/regenerate.dm +++ b/code/modules/antagonists/changeling/powers/regenerate.dm @@ -25,11 +25,8 @@ C.emote("scream") C.regenerate_limbs(1) if(!user.getorganslot(ORGAN_SLOT_BRAIN)) - var/obj/item/organ/brain/B - if(C.has_dna() && C.dna.species.mutantbrain) - B = new C.dna.species.mutantbrain() - else - B = new() + var/obj/item/organ/brain/B = C.dna?.species.species_organs[ORGAN_SLOT_BRAIN] || /obj/item/organ/brain + B = new() B.organ_flags &= ~ORGAN_VITAL B.decoy_override = TRUE B.Insert(C) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index f10f9b3f7a..2d88fd4fdd 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -745,7 +745,14 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Chassis Style

" - dat += "[features["ipc_chassis"]]
" + var/datum/sprite_accessory/body/ipc_chassis/chassis_style = GLOB.ipc_chassis_list[features["ipc_chassis"]] + if(!chassis_style) + chassis_style = pick(GLOB.ipc_chassis_list) + features["ipc_chassis"] = chassis_style.name + dat += "[chassis_style.name]" + if(chassis_style.desc) + dat += "?" + dat += "
" mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) @@ -940,9 +947,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) mutant_category = 0 dat += "" - var/metal_skin = fbp || pref_species.inherent_biotypes & MOB_ROBOTIC + var/metal_skin = fbp || (pref_species.inherent_biotypes & MOB_ROBOTIC) dat += metal_skin ? "

Chassis Customization

" : "

Prosthetic Limbs

" - dat += "Full Body Prosthesis: [fbp ? "Yes" : "No"]
" + if(!(pref_species.inherent_biotypes & MOB_ROBOTIC)) + dat += "Full Body Prosthesis: [fbp ? "Yes" : "No"]
" dat += "Random Prosthetic: [(randomise[RANDOM_PROSTHETIC]) ? "Yes" : "No"]
" @@ -950,9 +958,18 @@ GLOBAL_LIST_EMPTY(preferences_datums) for(var/index in prosthetic_limbs) if(!metal_skin && (index == BODY_ZONE_CHEST || index == BODY_ZONE_HEAD)) continue - var/bodypart_name = parse_zone(index) - dat += "[bodypart_name]:" - dat += "[prosthetic_limbs[index]]" + var/zone_name = parse_zone(index) + dat += "[zone_name]:" + var/limb_name = prosthetic_limbs[index] + dat += "[limb_name]" + switch(limb_name) + if(PROSTHETIC_NORMAL, PROSTHETIC_AMPUTATED, PROSTHETIC_ROBOTIC) + dat += "" + else + var/datum/sprite_accessory/body/limb_style = GLOB.alternative_body_list[limb_name] + if(!limb_style?.desc) + continue + dat += "?" dat += "
" if(2) //Loadout @@ -2284,7 +2301,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("limbs") if(href_list["customize_limb"]) var/limb = href_list["customize_limb"] - var/list/limb_options = list(PROSTHETIC_NORMAL, PROSTHETIC_ROBOTIC) + var/list/limb_options = list(PROSTHETIC_NORMAL) + if(pref_species.prosthetic_style) + limb_options.Add(PROSTHETIC_ROBOTIC) if(limb != BODY_ZONE_CHEST && limb != BODY_ZONE_HEAD) limb_options.Add(PROSTHETIC_AMPUTATED) // starting without a head or chest causes instant death, must be disallowed @@ -2292,19 +2311,32 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/datum/sprite_accessory/body/limb_style for(var/body in GLOB.alternative_body_list) limb_style = GLOB.alternative_body_list[body] + if(limb_style.locked) + continue part_candidate = limb_style.replacement_bodyparts[limb] if(isnull(part_candidate)) continue - if(length(limb_style.allowed_species)) - if(!(pref_species.type in limb_style.allowed_species)) - continue + if(limb_style.allowed_species && !(pref_species.type in limb_style.allowed_species)) + continue if(!(pref_species.bodytype & initial(part_candidate.bodytype))) // don't allow vox and kepori to select limbs that aren't compatible continue limb_options.Add(body) - var/status = input(user, "You are modifying your [parse_zone(limb)], what should it be changed to?", "Character Preference", prosthetic_limbs[limb]) in limb_options - if(status) - prosthetic_limbs[limb] = status + var/limb_selection = tgui_input_list( + user, + "You are modifying your [parse_zone(limb)], what should it be changed to?", + "Bodypart Selection", + limb_options, + ) + if(limb_selection) + prosthetic_limbs[limb] = limb_selection + + if("body_desc") + var/datum/sprite_accessory/body/limb_style = locate(href_list["limb_style"]) + if(!limb_style?.desc) + return + tgui_alert(user, limb_style.desc, limb_style.name, list("Close"), 0) + return if("hotkeys") hotkeys = !hotkeys @@ -2641,7 +2673,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) character.exowear = exowear - character.fbp = fbp + if(fbp && !(pref_species.inherent_biotypes & MOB_ROBOTIC)) + ADD_TRAIT(character, TRAIT_USE_PROSTHETIC, ROUNDSTART_TRAIT) + else + REMOVE_TRAIT(character, TRAIT_USE_PROSTHETIC, ROUNDSTART_TRAIT) character.flavor_text = features["flavor_text"] //Let's update their flavor_text at least initially @@ -2663,40 +2698,41 @@ GLOBAL_LIST_EMPTY(preferences_datums) character.dna.features = features.Copy() character.set_species(chosen_species, icon_update = FALSE, pref_load = TRUE, robotic = fbp) - for(var/pros_limb in prosthetic_limbs) - var/obj/item/bodypart/old_part = character.get_bodypart(pros_limb) + var/is_robotic = HAS_TRAIT(character, TRAIT_USE_PROSTHETIC) + for(var/zone in prosthetic_limbs) + var/obj/item/bodypart/old_part = character.get_bodypart(zone) if(old_part) icon_updates = TRUE - switch(prosthetic_limbs[pros_limb]) + switch(prosthetic_limbs[zone]) if(PROSTHETIC_NORMAL) if(old_part) old_part.drop_limb(TRUE) qdel(old_part) - character.regenerate_limb(pros_limb, robotic = fbp) + character.regenerate_limb(zone, robotic = is_robotic) if(PROSTHETIC_AMPUTATED) if(old_part) old_part.drop_limb(TRUE) qdel(old_part) - if(pros_limb == BODY_ZONE_CHEST || pros_limb == BODY_ZONE_HEAD) - stack_trace("[parent] somehow had their [parse_zone(pros_limb)] set to [PROSTHETIC_AMPUTATED]!") - prosthetic_limbs[pros_limb] = PROSTHETIC_NORMAL - character.regenerate_limb(pros_limb, robotic = fbp) + if(zone == BODY_ZONE_CHEST || zone == BODY_ZONE_HEAD) + stack_trace("[parent] somehow had their [parse_zone(zone)] set to [PROSTHETIC_AMPUTATED]!") + prosthetic_limbs[zone] = PROSTHETIC_NORMAL + character.regenerate_limb(zone, robotic = is_robotic) if(PROSTHETIC_ROBOTIC) if(old_part) old_part.drop_limb(TRUE) qdel(old_part) - character.regenerate_limb(pros_limb, robotic = TRUE) + character.regenerate_limb(zone, robotic = TRUE) else - var/datum/sprite_accessory/body/limb_style = GLOB.alternative_body_list[prosthetic_limbs[pros_limb]] - var/obj/item/bodypart/new_part = limb_style.replacement_bodyparts[pros_limb] + var/datum/sprite_accessory/body/limb_style = GLOB.alternative_body_list[prosthetic_limbs[zone]] + var/obj/item/bodypart/new_part = limb_style.replacement_bodyparts[zone] new_part = new new_part() if(old_part) old_part.drop_limb(TRUE) qdel(old_part) if(!(new_part.bodytype & pref_species.bodytype)) stack_trace("[parent] had [limb_style.name] selected, which isn't compatible with [pref_species.name]!") - prosthetic_limbs[pros_limb] = PROSTHETIC_NORMAL - character.regenerate_limb(pros_limb, robotic = fbp) + prosthetic_limbs[zone] = PROSTHETIC_NORMAL + character.regenerate_limb(zone, robotic = is_robotic) continue // species that don't use mutant colors normally should still be able to color prosthetics that do if(new_part.should_draw_greyscale) diff --git a/code/modules/mob/dead/new_player/sprite_accessories/body/_body.dm b/code/modules/mob/dead/new_player/sprite_accessories/body/_body.dm index 6671db69ae..fb4a4a78ce 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/body/_body.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/body/_body.dm @@ -12,22 +12,18 @@ BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left, BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right, ) + /// Organs to override + var/list/replacement_organs = list() /// Associated list of features granted by this chassis and their default values. var/list/body_features = list() - ///species whitelist - var/list/allowed_species = list() + /// Whitelist of species allowed to apply this. + var/list/allowed_species + /// Bodytype to apply to the species. + var/bodytype = BODYTYPE_HUMANOID - -/* Test body for checking functionality -/datum/sprite_accessory/body/test_body - name = "testificate" - replacement_bodyparts = list( - BODY_ZONE_HEAD = /obj/item/bodypart/head/plasmaman, - BODY_ZONE_CHEST = /obj/item/bodypart/chest/plasmaman, - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/plasmaman, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/plasmaman, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/plasmaman, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/plasmaman, - ) - allowed_species = list(/datum/species/moth) -*/ +/// Handles applying any special features from having the entire body replaced at once. +/datum/sprite_accessory/body/proc/apply_to_species(mob/living/carbon/mob_applied, datum/species/species_applied) + species_applied.bodytype = bodytype + for(var/feature in body_features) + species_applied.mutant_bodyparts |= feature + species_applied.default_features[feature] = body_features[feature] diff --git a/code/modules/mob/dead/new_player/sprite_accessories/body/prosthetic.dm b/code/modules/mob/dead/new_player/sprite_accessories/body/prosthetic.dm new file mode 100644 index 0000000000..c584bdddb8 --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/body/prosthetic.dm @@ -0,0 +1,87 @@ +/datum/sprite_accessory/body/prosthetic + name = "Basic Prosthetic" + replacement_bodyparts = list( + BODY_ZONE_CHEST = /obj/item/bodypart/chest/robot, + BODY_ZONE_HEAD = /obj/item/bodypart/head/robot, + BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/robot/surplus, + BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/robot/surplus, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/robot/surplus, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/robot/surplus, + ) + replacement_organs = list( + ORGAN_SLOT_HEART = /obj/item/organ/heart/cybernetic, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs/cybernetic, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/robotic, + ORGAN_SLOT_EARS = /obj/item/organ/ears/cybernetic, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/robot, + ORGAN_SLOT_LIVER = /obj/item/organ/liver/cybernetic, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach/cybernetic, + ) + +/datum/sprite_accessory/body/prosthetic/human + name = "Prosthetic Human" + replacement_bodyparts = list( + BODY_ZONE_CHEST = /obj/item/bodypart/chest/robot/human, + BODY_ZONE_HEAD = /obj/item/bodypart/head/robot/human, + BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/robot/surplus/human, + BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/robot/surplus/human, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/robot/surplus/human, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/robot/surplus/human, + ) + allowed_species = list(/datum/species/human, /datum/species/moth) + +/datum/sprite_accessory/body/prosthetic/sarathi + name = "Prosthetic Sarathi" + replacement_bodyparts = list( + BODY_ZONE_CHEST = /obj/item/bodypart/chest/robot/lizard, + BODY_ZONE_HEAD = /obj/item/bodypart/head/robot/lizard, + BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/robot/surplus/lizard, + BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/robot/surplus/lizard, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/robot/surplus/lizard/digitigrade, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/robot/surplus/lizard/digitigrade, + ) + replacement_organs = list( + ORGAN_SLOT_HEART = /obj/item/organ/heart/cybernetic, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs/cybernetic, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/robotic/lizard, + ORGAN_SLOT_EARS = /obj/item/organ/ears/cybernetic, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/robot, + ORGAN_SLOT_LIVER = /obj/item/organ/liver/cybernetic, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach/cybernetic, + ) + allowed_species = list(/datum/species/lizard) + +/datum/sprite_accessory/body/prosthetic/kepori + name = "Prosthetic Kepori" + replacement_bodyparts = list( + BODY_ZONE_CHEST = /obj/item/bodypart/chest/robot/kepori, + BODY_ZONE_HEAD = /obj/item/bodypart/head/robot/kepori, + BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/robot/surplus/kepori, + BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/robot/surplus/kepori, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/robot/surplus/kepori, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/robot/surplus/kepori, + ) + replacement_organs = list( + ORGAN_SLOT_HEART = /obj/item/organ/heart/cybernetic, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs/cybernetic, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/robotic/kepori, + ORGAN_SLOT_EARS = /obj/item/organ/ears/cybernetic, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/robot, + ORGAN_SLOT_LIVER = /obj/item/organ/liver/cybernetic, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach/cybernetic, + ) + allowed_species = list(/datum/species/kepori) + bodytype = BODYTYPE_KEPORI + +/datum/sprite_accessory/body/prosthetic/vox + name = "Prosthetic Vox" + replacement_bodyparts = list( + BODY_ZONE_CHEST = /obj/item/bodypart/chest/robot/vox, + BODY_ZONE_HEAD = /obj/item/bodypart/head/robot/vox, + BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/robot/surplus/vox, + BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/robot/surplus/vox, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/robot/surplus/vox, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/robot/surplus/vox, + ) + allowed_species = list(/datum/species/vox) + bodytype = BODYTYPE_VOX diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index b8d9c80fe2..48e4cb69cf 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -53,7 +53,7 @@ var/tinttotal = 0 /// Total level of visualy impairing items var/list/icon_render_keys = list() - var/list/bodyparts = list( + var/list/obj/item/bodypart/bodyparts = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest, BODY_ZONE_HEAD = /obj/item/bodypart/head, BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm, diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 3b8ef77728..e8c2561f10 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -47,9 +47,6 @@ var/jumpsuit_style = PREF_SUIT //suit/skirt var/exowear = PREF_EXOWEAR //exowear - ///Whether this human started with a full-body prosthesis - var/fbp = FALSE - //Equipment slots var/obj/item/clothing/wear_suit = null var/obj/item/clothing/w_uniform = null diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index d628344e3a..36e3fb3088 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -44,8 +44,6 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/grad_style ///The gradient color used to color the gradient. var/grad_color - ///The color used for the "white" of the eye, if the eye has one. - var/sclera_color = "#e8e8e8" /// The color used for blush overlay var/blush_color = COLOR_BLUSH_PINK ///If the species is allowed to use height filters. @@ -76,8 +74,6 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/list/default_features = list() /// Visible CURRENT bodyparts that are unique to a species. DO NOT USE THIS AS A LIST OF ALL POSSIBLE BODYPARTS AS IT WILL FUCK SHIT UP! Changes to this list for non-species specific bodyparts (ie cat ears and tails) should be assigned at organ level if possible. Layer hiding is handled by [datum/species/handle_mutant_bodyparts()] below. var/list/mutant_bodyparts = list() - ///Internal organs that are unique to this race, like a tail. - var/list/mutant_organs = list() ///Multiplier for the race's speed. Positive numbers make it move slower, negative numbers make it move faster. var/speedmod = 0 ///Percentage modifier for overall defense of the race, or less defense, if it's negative. @@ -196,28 +192,22 @@ GLOBAL_LIST_EMPTY(roundstart_races) ///What gas does this species breathe? Used by suffocation screen alerts, most of actual gas breathing is handled by mutantlungs. See [life.dm][code/modules/mob/living/carbon/human/life.dm] var/breathid = "o2" + ///Organs that this species should have. Includes vital organs like the heart and brain, as well as external features like a tail. + var/list/obj/item/organ/species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) //Do NOT remove by setting to null. use OR make a RESPECTIVE TRAIT (removing stomach? add the NOSTOMACH trait to your species) //why does it work this way? because traits also disable the downsides of not having an organ, removing organs but not having the trait will make your species die //shut up you're not my mother - ///Replaces default brain with a different organ - var/obj/item/organ/brain/mutantbrain = /obj/item/organ/brain - ///Replaces default heart with a different organ - var/obj/item/organ/heart/mutantheart = /obj/item/organ/heart - ///Replaces default lungs with a different organ - var/obj/item/organ/lungs/mutantlungs = /obj/item/organ/lungs - ///Replaces default eyes with a different organ - var/obj/item/organ/eyes/mutanteyes = /obj/item/organ/eyes - ///Replaces default ears with a different organ - var/obj/item/organ/ears/mutantears = /obj/item/organ/ears - ///Replaces default tongue with a different organ - var/obj/item/organ/tongue/mutanttongue = /obj/item/organ/tongue - ///Replaces default liver with a different organ - var/obj/item/organ/liver/mutantliver = /obj/item/organ/liver - ///Replaces default stomach with a different organ - var/obj/item/organ/stomach/mutantstomach = /obj/item/organ/stomach - ///Replaces default appendix with a different organ. - var/obj/item/organ/appendix/mutantappendix = /obj/item/organ/appendix ///Forces an item into this species' hands. Only an honorary mutantthing because this is not an organ and not loaded in the same way, you've been warned to do your research. var/obj/item/mutanthands @@ -235,24 +225,8 @@ GLOBAL_LIST_EMPTY(roundstart_races) BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left, ) - /// Default robotic bodyparts for this species. - var/list/obj/item/bodypart/species_robotic_limbs = list( - BODY_ZONE_CHEST = /obj/item/bodypart/chest/robot, - BODY_ZONE_HEAD = /obj/item/bodypart/head/robot, - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/robot/surplus, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/robot/surplus, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/robot/surplus, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/robot/surplus, - ) - - var/obj/item/organ/heart/robotic_heart = /obj/item/organ/heart/cybernetic - var/obj/item/organ/lungs/robotic_lungs = /obj/item/organ/lungs/cybernetic - var/obj/item/organ/eyes/robotic_eyes = /obj/item/organ/eyes/robotic - var/obj/item/organ/ears/robotic_ears = /obj/item/organ/ears/cybernetic - var/obj/item/organ/tongue/robotic_tongue = /obj/item/organ/tongue/robot - var/obj/item/organ/liver/robotic_liver = /obj/item/organ/liver/cybernetic - var/obj/item/organ/stomach/robotic_stomach = /obj/item/organ/stomach/cybernetic - var/obj/item/organ/appendix/robotic_appendix = null + /// Default prosthetic replacements. + var/datum/sprite_accessory/body/prosthetic_style = /datum/sprite_accessory/body/prosthetic ///For custom overrides for species ass images var/icon/ass_image @@ -264,7 +238,11 @@ GLOBAL_LIST_EMPTY(roundstart_races) /datum/species/New() wings_icons = string_list(wings_icons) - ..() + if(prosthetic_style) + prosthetic_style = GLOB.alternative_body_list[prosthetic_style::name] + if(!prosthetic_style) + stack_trace("[type] had a defined prosthetic_style but could not find a valid datum!") + return ..() /** * Generates species available to choose in character setup at roundstart @@ -341,30 +319,15 @@ GLOBAL_LIST_EMPTY(roundstart_races) * * excluded_zones - list, add zone defines to block organs inside of the zones from getting handled. see headless mutation for an example */ /datum/species/proc/regenerate_organs(mob/living/carbon/C, datum/species/old_species,replace_current=TRUE, list/excluded_zones, robotic = FALSE) - //what should be put in if there is no mutantorgan (brains handled seperately) - var/list/slot_mutantorgans = list( \ - ORGAN_SLOT_BRAIN = mutantbrain, \ - ORGAN_SLOT_HEART = robotic ? robotic_heart : mutantheart, \ - ORGAN_SLOT_LUNGS = robotic ? robotic_lungs : mutantlungs, \ - ORGAN_SLOT_APPENDIX = robotic ? robotic_appendix : mutantappendix, \ - ORGAN_SLOT_EYES = robotic ? robotic_eyes : mutanteyes, \ - ORGAN_SLOT_EARS = robotic ? robotic_ears : mutantears, \ - ORGAN_SLOT_TONGUE = robotic ? robotic_tongue : mutanttongue, \ - ORGAN_SLOT_LIVER = robotic ? robotic_liver : mutantliver, \ - ORGAN_SLOT_STOMACH = robotic ? robotic_stomach : mutantstomach) - - for(var/slot in list(ORGAN_SLOT_BRAIN, ORGAN_SLOT_HEART, ORGAN_SLOT_LUNGS, ORGAN_SLOT_APPENDIX, \ - ORGAN_SLOT_EYES, ORGAN_SLOT_EARS, ORGAN_SLOT_TONGUE, ORGAN_SLOT_LIVER, ORGAN_SLOT_STOMACH)) - + for(var/slot in (species_organs | old_species?.species_organs)) var/obj/item/organ/oldorgan = C.getorganslot(slot) //used in removing - var/obj/item/organ/neworgan = slot_mutantorgans[slot] //used in adding + var/obj/item/organ/neworgan = C.new_organ(slot, robotic, src) //used in adding if(isnull(neworgan)) //If null is specified, just delete the old organ and call it a day QDEL_NULL(oldorgan) continue var/used_neworgan = FALSE - neworgan = new neworgan() var/should_have = neworgan.get_availability(src) //organ proc that points back to a species trait (so if the species is supposed to have this organ) if(oldorgan && (!should_have || replace_current) && !(oldorgan.zone in excluded_zones)) @@ -384,20 +347,6 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(!used_neworgan) qdel(neworgan) - if(old_species) - for(var/mutantorgan in old_species.mutant_organs) - var/obj/item/organ/I = C.getorgan(mutantorgan) - if(I) - I.Remove(C) - QDEL_NULL(I) - - for(var/path in mutant_organs) - var/obj/item/organ/I = new path() - var/obj/item/organ/old = C.getorgan(I) - if(old) - QDEL_NULL(old) - I.Insert(C) - /datum/species/proc/replace_body(mob/living/carbon/C, datum/species/old_species, datum/species/new_species, robotic = FALSE) new_species ||= C.dna.species //If no new species is provided, assume its src. //Note for future: Potentionally add a new C.dna.species() to build a template species for more accurate limb replacement @@ -450,6 +399,9 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(C.hud_used) C.hud_used.update_locked_slots() + if(robotic && prosthetic_style) + prosthetic_style.apply_to_species(C, src) + replace_body(C, old_species, robotic = robotic) C.mob_biotypes = inherent_biotypes @@ -478,10 +430,6 @@ GLOBAL_LIST_EMPTY(roundstart_races) for(var/obj/item/bodypart/head/head in C.get_all_bodyparts()) head.mouth = FALSE - if(SCLERA in species_traits) - var/obj/item/organ/eyes/eyes = C.getorganslot(ORGAN_SLOT_EYES) - eyes.sclera_color = sclera_color - for(var/X in inherent_traits) ADD_TRAIT(C, X, SPECIES_TRAIT) @@ -709,16 +657,16 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(eyes) if(!HAS_TRAIT(H, TRAIT_EYESCLOSED) && !(H.stat == DEAD)) - var/icon/eye_icon var/icon/sclera_icon - var/icon_cache_key = "[eyes.eye_icon_state]-[eyes.sclera_icon_state]-[id]-[eyes.scarring]" + var/eye_state = HD.eye_state_override || eyes.eye_icon_state + var/icon_cache_key = "[eye_state]-[eyes.sclera_icon_state]-[id]-[eyes.scarring]" if(!masked_eye_icons_cache[icon_cache_key]) if(iskepori(H)) // Kepori need sclera but don't fit the normal silhouette, so this needs changing. Make better later. - eye_icon = icon('icons/mob/species/kepori/kepori_eyes.dmi', eyes.eye_icon_state) + eye_icon = icon('icons/mob/species/kepori/kepori_eyes.dmi', eye_state) sclera_icon = icon('icons/mob/species/kepori/kepori_eyes.dmi', eyes.sclera_icon_state) else - eye_icon = icon(species_eye_path || 'icons/mob/human_face.dmi', eyes.eye_icon_state) + eye_icon = icon(species_eye_path || 'icons/mob/human_face.dmi', eye_state) sclera_icon = icon('icons/mob/human_face.dmi', eyes.sclera_icon_state) if(eyes.scarring & RIGHT_EYE_SCAR) @@ -741,7 +689,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(HD.greyscale_eyes && eyes) eye_overlay.color = "#" + H.eye_color - if((SCLERA in species_traits) && eyes) + if(HD.draw_sclera && eyes) sclera_overlay.color = "#" + H.sclera_color standing += sclera_overlay diff --git a/code/modules/mob/living/carbon/human/species_types/IPC.dm b/code/modules/mob/living/carbon/human/species_types/IPC.dm index 10df6f704c..7963fb6506 100644 --- a/code/modules/mob/living/carbon/human/species_types/IPC.dm +++ b/code/modules/mob/living/carbon/human/species_types/IPC.dm @@ -4,18 +4,8 @@ species_age_min = 0 species_age_max = 300 species_traits = list(HAIR,NOTRANSSTING,NO_DNA_COPY,NOZOMBIE,MUTCOLORS,REVIVESBYHEALING,NOHUSK,NOMOUTH) //all of these + whatever we inherit from the real species - inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_VIRUSIMMUNE,TRAIT_NOBREATH,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_LIMBATTACHMENT) - inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID - mutantbrain = /obj/item/organ/brain/mmi_holder/posibrain - mutanteyes = /obj/item/organ/eyes/robotic - mutanttongue = /obj/item/organ/tongue/robot - mutantheart = /obj/item/organ/heart/cybernetic/ipc - mutantliver = /obj/item/organ/liver/cybernetic/upgraded/ipc - mutantstomach = /obj/item/organ/stomach/cell - mutantears = /obj/item/organ/ears/robot - mutantlungs = null //no more collecting change for you - mutantappendix = null - mutant_organs = list(/obj/item/organ/cyberimp/arm/power_cord) + inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_USE_PROSTHETIC,TRAIT_VIRUSIMMUNE,TRAIT_NOBREATH,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_LIMBATTACHMENT) + inherent_biotypes = MOB_ROBOTIC | MOB_HUMANOID mutant_bodyparts = list("ipc_screen", "ipc_antenna", "ipc_chassis", "ipc_tail", "ipc_brain") default_features = list("mcolor" = "#7D7D7D", "ipc_screen" = "Static", "ipc_antenna" = "None", "ipc_chassis" = "Morpheus Cyberkinetics (Custom)", "ipc_tail" = "None", "ipc_brain" = "Posibrain") meat = /obj/item/stack/sheet/plasteel{amount = 5} @@ -36,6 +26,17 @@ Just as easy to repair as they are to destroy, they might just get their last laugh in as you're choking on neurotoxins. Beep Boop." ass_image = 'icons/ass/assmachine.png' + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain/mmi_holder/posibrain, + ORGAN_SLOT_HEART = /obj/item/organ/heart/cybernetic/ipc, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/robotic, + ORGAN_SLOT_EARS = /obj/item/organ/ears/robot, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/robot, + ORGAN_SLOT_LIVER = /obj/item/organ/liver/cybernetic/upgraded/ipc, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach/cell, + ORGAN_SLOT_LEFT_ARM_AUG = /obj/item/organ/cyberimp/arm/power_cord, + ) + species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/ipc, BODY_ZONE_HEAD = /obj/item/bodypart/head/ipc, @@ -45,11 +46,13 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/ipc, ) + // This will be set manually based on IPC chassis selection. + prosthetic_style = null + /// The last screen used when the IPC died. var/saved_screen var/datum/action/innate/change_screen/change_screen var/datum/action/innate/change_eye_color/change_eye_color - var/has_screen = TRUE //do we have a screen. Used to determine if we mess with the screen or not /datum/species/ipc/random_name(unique) var/ipc_name = "[pick(GLOB.posibrain_names)]-[rand(100, 999)]" @@ -64,24 +67,27 @@ "[GLASSES_LAYER]" = list("[NORTH]" = list("x" = 0, "y" = 0), "[EAST]" = list("x" = 2, "y" = 0), "[SOUTH]" = list("x" = 0, "y" = 0), "[WEST]" = list("x" = -2, "y" = 0)), ) -/datum/species/ipc/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load) // Let's make that IPC actually robotic. +/datum/species/ipc/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load, robotic = TRUE) // Let's make that IPC actually robotic. + var/datum/sprite_accessory/body/ipc_chassis/chassis_of_choice = GLOB.ipc_chassis_list[C.dna.features["ipc_chassis"]] + if(chassis_of_choice) + prosthetic_style = chassis_of_choice + else // in case of fuckery + stack_trace("Invalid IPC chassis: [C.dna.features["ipc_chassis"]]") if(C.dna?.features["ipc_brain"] == "Man-Machine Interface") - mutantbrain = /obj/item/organ/brain/mmi_holder - . = ..() + species_organs[ORGAN_SLOT_BRAIN] = /obj/item/organ/brain/mmi_holder + . = ..(C, old_species, pref_load, robotic = TRUE) update_screen_action(C) -/datum/species/ipc/proc/update_screen_action(mob/living/carbon/C) - if(ishuman(C)) - var/mob/living/carbon/human/H = C - var/obj/item/bodypart/head/ipc/our_head = C.bodyparts[BODY_ZONE_HEAD] - if(!change_screen) - if(our_head.has_screen) - change_screen = new - change_screen.Grant(H) - else if (our_head.draw_eyes && !our_head.force_white_eye_color) - change_eye_color = new - change_eye_color.Grant(H) - C.RegisterSignal(C, COMSIG_PROCESS_BORGCHARGER_OCCUPANT, TYPE_PROC_REF(/mob/living/carbon, charge)) +/datum/species/ipc/proc/update_screen_action(mob/living/carbon/robot) + if(ishuman(robot)) + var/obj/item/bodypart/head/robot_head = robot.get_bodypart(BODY_ZONE_HEAD) + if(robot_head.bodytype & BODYTYPE_BOXHEAD) + change_screen = new + change_screen.Grant(robot) + else if(robot_head.draw_eyes && robot_head.greyscale_eyes) + change_eye_color = new + change_eye_color.Grant(robot) + robot.RegisterSignal(robot, COMSIG_PROCESS_BORGCHARGER_OCCUPANT, TYPE_PROC_REF(/mob/living/carbon, charge)) /datum/species/ipc/on_species_loss(mob/living/carbon/C) . = ..() @@ -92,7 +98,7 @@ C.UnregisterSignal(C, COMSIG_PROCESS_BORGCHARGER_OCCUPANT) /datum/species/ipc/spec_death(gibbed, mob/living/carbon/C) - if(!has_screen) + if(!(C.get_bodypart(BODY_ZONE_HEAD)?.bodytype & BODYTYPE_BOXHEAD)) return saved_screen = C.dna.features["ipc_screen"] C.dna.features["ipc_screen"] = "BSOD" @@ -102,7 +108,7 @@ /datum/species/ipc/proc/post_death(mob/living/carbon/C) if(C.stat < DEAD) return - if(!has_screen) + if(!(C.get_bodypart(BODY_ZONE_HEAD)?.bodytype & BODYTYPE_BOXHEAD)) return C.dna.features["ipc_screen"] = null // Turns off their monitor on death. C.update_body() @@ -127,9 +133,9 @@ var/obj/item/bodypart/head/ipc/our_head = H.bodyparts[BODY_ZONE_HEAD] if(!species_datum) return - if(!our_head.has_screen || !our_head.draw_eyes || our_head.force_white_eye_color) + if(!our_head.greyscale_eyes) return - if(!species_datum.has_screen) + if(!(H.get_bodypart(BODY_ZONE_HEAD)?.bodytype & BODYTYPE_BOXHEAD) && !our_head.draw_eyes) return H.dna.features["ipc_screen"] = screen_choice H.eye_color = sanitize_hexcolor(color_choice) @@ -255,7 +261,7 @@ /datum/species/ipc/spec_revival(mob/living/carbon/human/H) - if(has_screen) + if(H.get_bodypart(BODY_ZONE_HEAD)?.bodytype & BODYTYPE_BOXHEAD) H.dna.features["ipc_screen"] = "BSOD" H.update_body() H.say("Reactivating [pick("core systems", "central subroutines", "key functions")]...") @@ -264,28 +270,11 @@ /datum/species/ipc/proc/post_revival(mob/living/carbon/human/H) if(H.stat == DEAD) return - if(!has_screen) + if(!(H.get_bodypart(BODY_ZONE_HEAD)?.bodytype & BODYTYPE_BOXHEAD)) return H.dna.features["ipc_screen"] = saved_screen H.update_body() -/datum/species/ipc/replace_body(mob/living/carbon/C, datum/species/old_species, datum/species/new_species, robotic) - var/datum/sprite_accessory/body/ipc_chassis/chassis_of_choice = GLOB.ipc_chassis_list[C.dna.features["ipc_chassis"]] - if(chassis_of_choice) - qdel(species_limbs) - species_limbs = chassis_of_choice.replacement_bodyparts.Copy() // elegant. - var/obj/item/bodypart/chest/new_chest = species_limbs[BODY_ZONE_CHEST] - if(new_chest) - bodytype = initial(new_chest.acceptable_bodytype) - else - stack_trace("[chassis_of_choice.type] had no chest bodypart!") - for(var/feature in chassis_of_choice.body_features) - mutant_bodyparts |= feature - default_features[feature] = chassis_of_choice.body_features[feature] - else // in case of fuckery - stack_trace("Invalid IPC chassis: [C.dna.features["ipc_chassis"]]") - return ..() - /mob/living/carbon/proc/charge(datum/source, amount, repairs) if(nutrition < NUTRITION_LEVEL_WELL_FED) adjust_nutrition(amount / 10) // The original amount is capacitor_rating*100 diff --git a/code/modules/mob/living/carbon/human/species_types/abductors.dm b/code/modules/mob/living/carbon/human/species_types/abductors.dm index a6e9916c00..68ba4eebcc 100644 --- a/code/modules/mob/living/carbon/human/species_types/abductors.dm +++ b/code/modules/mob/living/carbon/human/species_types/abductors.dm @@ -3,10 +3,21 @@ id = SPECIES_ABDUCTOR species_traits = list(NOBLOOD) inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_CHUNKYFINGERS,TRAIT_NOHUNGER,TRAIT_NOBREATH,TRAIT_NODISMEMBER,TRAIT_NEVER_WOUNDED) - mutanttongue = /obj/item/organ/tongue/abductor changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN ass_image = 'icons/ass/assgrey.png' + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/abductor, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) + species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/abductor, BODY_ZONE_HEAD = /obj/item/bodypart/head/abductor, diff --git a/code/modules/mob/living/carbon/human/species_types/android.dm b/code/modules/mob/living/carbon/human/species_types/android.dm index 640e5e0b97..964383ea11 100644 --- a/code/modules/mob/living/carbon/human/species_types/android.dm +++ b/code/modules/mob/living/carbon/human/species_types/android.dm @@ -3,15 +3,26 @@ id = SPECIES_ANDROID species_traits = list(NOTRANSSTING,NOREAGENTS,NO_DNA_COPY,NOBLOOD,NOFLASH) inherent_traits = list(TRAIT_NOMETABOLISM,TRAIT_TOXIMMUNE,TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_NOFIRE,TRAIT_PIERCEIMMUNE,TRAIT_NOHUNGER,TRAIT_LIMBATTACHMENT,TRAIT_NOCLONELOSS) - inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID + inherent_biotypes = MOB_ROBOTIC | MOB_HUMANOID meat = null damage_overlay_type = "synth" - mutanttongue = /obj/item/organ/tongue/robot species_language_holder = /datum/language_holder/synthetic reagent_tag = PROCESS_SYNTHETIC species_gibs = "robotic" attack_sound = 'sound/items/trayhit1.ogg' + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/robot, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) + species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/robot, BODY_ZONE_HEAD = /obj/item/bodypart/head/robot, @@ -21,13 +32,4 @@ BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/robot, ) - species_robotic_limbs = list( - BODY_ZONE_CHEST = /obj/item/bodypart/chest/robot, - BODY_ZONE_HEAD = /obj/item/bodypart/head/robot, - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/robot/surplus, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/robot/surplus, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/robot/surplus, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/robot/surplus, - ) - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN diff --git a/code/modules/mob/living/carbon/human/species_types/dullahan.dm b/code/modules/mob/living/carbon/human/species_types/dullahan.dm index 3d9c422e4a..a7f7df7b37 100644 --- a/code/modules/mob/living/carbon/human/species_types/dullahan.dm +++ b/code/modules/mob/living/carbon/human/species_types/dullahan.dm @@ -7,14 +7,22 @@ inherent_traits = list(TRAIT_NOHUNGER,TRAIT_NOBREATH) default_features = list("mcolor" = "FFF", "tail_human" = "None", "ears" = "None", "wings" = "None") use_skintones = TRUE - mutantbrain = /obj/item/organ/brain/dullahan - mutanteyes = /obj/item/organ/eyes/dullahan - mutanttongue = /obj/item/organ/tongue/dullahan - mutantears = /obj/item/organ/ears/dullahan examine_limb_id = SPECIES_HUMAN skinned_type = /obj/item/stack/sheet/animalhide/human changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | ERT_SPAWN + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain/dullahan, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/dullahan, + ORGAN_SLOT_EARS = /obj/item/organ/ears/dullahan, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/dullahan, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) + var/obj/item/dullahan_relay/myhead /datum/species/dullahan/on_species_gain(mob/living/carbon/human/H, datum/species/old_species) diff --git a/code/modules/mob/living/carbon/human/species_types/ethereal.dm b/code/modules/mob/living/carbon/human/species_types/ethereal.dm index eb5ec08339..125f799439 100644 --- a/code/modules/mob/living/carbon/human/species_types/ethereal.dm +++ b/code/modules/mob/living/carbon/human/species_types/ethereal.dm @@ -10,8 +10,6 @@ attack_verb = "burn" attack_sound = 'sound/weapons/etherealhit.ogg' miss_sound = 'sound/weapons/etherealmiss.ogg' - mutantstomach = /obj/item/organ/stomach/ethereal - mutanttongue = /obj/item/organ/tongue/ethereal siemens_coeff = 0.5 //They thrive on energy attack_type = BURN //burn bish exotic_bloodtype = "E" @@ -35,7 +33,19 @@ mutant_bodyparts = list("elzu_horns", "tail_elzu") default_features = list("elzu_horns" = "None", "tail_elzu" = "None") species_eye_path = 'icons/mob/ethereal_parts.dmi' - mutant_organs = list(/obj/item/organ/tail/elzu) + + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/ethereal, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach/ethereal, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ORGAN_SLOT_TAIL = /obj/item/organ/tail/elzu, + ) species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/ethereal, diff --git a/code/modules/mob/living/carbon/human/species_types/flypeople.dm b/code/modules/mob/living/carbon/human/species_types/flypeople.dm index a7c6b5236b..6fb395576b 100644 --- a/code/modules/mob/living/carbon/human/species_types/flypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/flypeople.dm @@ -3,14 +3,23 @@ id = SPECIES_FLYPERSON inherent_traits = list(TRAIT_ANTENNAE) inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG - mutanttongue = /obj/item/organ/tongue/fly - mutantliver = /obj/item/organ/liver/fly - mutantstomach = /obj/item/organ/stomach/fly disliked_food = null liked_food = GORE | RAW changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN species_language_holder = /datum/language_holder/fly + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/fly, + ORGAN_SLOT_LIVER = /obj/item/organ/liver/fly, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach/fly, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) + species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/fly, BODY_ZONE_HEAD = /obj/item/bodypart/head/fly, diff --git a/code/modules/mob/living/carbon/human/species_types/humans.dm b/code/modules/mob/living/carbon/human/species_types/humans.dm index 70b6d66ffa..964719c0d6 100644 --- a/code/modules/mob/living/carbon/human/species_types/humans.dm +++ b/code/modules/mob/living/carbon/human/species_types/humans.dm @@ -2,7 +2,7 @@ name = "\improper Human" id = SPECIES_HUMAN default_color = "FFFFFF" - species_traits = list(HAIR,FACEHAIR,LIPS,SCLERA,EMOTE_OVERLAY,SKINCOLORS) + species_traits = list(HAIR,FACEHAIR,LIPS,EMOTE_OVERLAY,SKINCOLORS) default_features = list("mcolor" = "FFF", "tail_human" = "None", "ears" = "None", "wings" = "None") mutant_bodyparts = list("ears", "tail_human") use_skintones = TRUE @@ -12,50 +12,61 @@ changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP loreblurb = "Mostly hairless mammalians. Their home system, Sol, lies in a sort of \"bluespace dead-zone\" that blocks anything from entering or exiting Sol's dead-zone through bluespace without a relay. While it leaves Sol extremely well-defended, it meant that they went unnoticed and uncontacted until they were themselves able to breach it." species_language_holder = /datum/language_holder/human - - species_robotic_limbs = list( - BODY_ZONE_CHEST = /obj/item/bodypart/chest/robot/human, - BODY_ZONE_HEAD = /obj/item/bodypart/head/robot/human, - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/robot/surplus/human, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/robot/surplus/human, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/robot/surplus/human, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/robot/surplus/human, - ) - - robotic_eyes = /obj/item/organ/eyes/robotic + prosthetic_style = /datum/sprite_accessory/body/prosthetic/human /datum/species/human/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load) + var/modded = FALSE switch(C.dna.features["ears"]) if("Elf") - mutantears = /obj/item/organ/ears/elf + species_organs[ORGAN_SLOT_EARS] = /obj/item/organ/ears/elf + modded = TRUE if("Cat") - mutantears = /obj/item/organ/ears/cat + species_organs[ORGAN_SLOT_EARS] = /obj/item/organ/ears/cat + modded = TRUE if("Dog") - mutantears = /obj/item/organ/ears/dog + species_organs[ORGAN_SLOT_EARS] = /obj/item/organ/ears/dog + modded = TRUE if("Fox") - mutantears = /obj/item/organ/ears/fox + species_organs[ORGAN_SLOT_EARS] = /obj/item/organ/ears/fox + modded = TRUE if("Rabbit") - mutantears = /obj/item/organ/ears/rabbit + species_organs[ORGAN_SLOT_EARS] = /obj/item/organ/ears/rabbit + modded = TRUE if("Bent Rabbit") - mutantears = /obj/item/organ/ears/rabbit/bent + species_organs[ORGAN_SLOT_EARS] = /obj/item/organ/ears/rabbit/bent + modded = TRUE if("Floppy Rabbit") - mutantears = /obj/item/organ/ears/rabbit/floppy + species_organs[ORGAN_SLOT_EARS] = /obj/item/organ/ears/rabbit/floppy + modded = TRUE if("Horse") - mutantears = /obj/item/organ/ears/horse + species_organs[ORGAN_SLOT_EARS] = /obj/item/organ/ears/horse + modded = TRUE switch(C.dna.features["tail_human"]) if("Cat") - mutant_organs |= /obj/item/organ/tail/cat + species_organs[ORGAN_SLOT_TAIL] = /obj/item/organ/tail/cat + modded = TRUE if("Dog") - mutant_organs |= /obj/item/organ/tail/dog + species_organs[ORGAN_SLOT_TAIL] = /obj/item/organ/tail/dog + modded = TRUE if("Fox") - mutant_organs |= /obj/item/organ/tail/fox + species_organs[ORGAN_SLOT_TAIL] = /obj/item/organ/tail/fox + modded = TRUE if("Fox 2") - mutant_organs |= /obj/item/organ/tail/fox/alt + species_organs[ORGAN_SLOT_TAIL] = /obj/item/organ/tail/fox/alt + modded = TRUE if("Rabbit") - mutant_organs |= /obj/item/organ/tail/rabbit + species_organs[ORGAN_SLOT_TAIL] = /obj/item/organ/tail/rabbit + modded = TRUE if("Horse") - mutant_organs |= /obj/item/organ/tail/horse + species_organs[ORGAN_SLOT_TAIL] = /obj/item/organ/tail/horse + modded = TRUE + + if(modded) + inherent_traits += TRAIT_GENEMODDED + + return ..() +/datum/species/human/on_species_loss(mob/living/carbon/human/C, datum/species/new_species, pref_load) return ..() /datum/species/human/spec_death(gibbed, mob/living/carbon/human/H) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 41ee147d4c..14f5059100 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -7,8 +7,6 @@ inherent_traits = list(TRAIT_TOXINLOVER) hair_color = "mutcolor" hair_alpha = 150 - mutantlungs = /obj/item/organ/lungs/slime - mutanttongue = /obj/item/organ/tongue/slime exotic_blood = /datum/reagent/toxin/slimejelly damage_overlay_type = "" var/datum/action/innate/regenerate_limbs/regenerate_limbs @@ -25,6 +23,18 @@ ass_image = 'icons/ass/assslime.png' loreblurb = "Slime, itself a slime-mold like organism of unknown origin, is capable of both mutating existing biological organisms into slime, retaining most of the structure and mind of the original, and forming quick-learning gestalts capable of mimicking existing beings, including animals and humanoids. The blood of slimepeople is toxic, and the properties of poisonous and poison-healing substances are inverted for them." + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs/slime, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/slime, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) + species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/jelly, BODY_ZONE_HEAD = /obj/item/bodypart/head/jelly, diff --git a/code/modules/mob/living/carbon/human/species_types/kepori.dm b/code/modules/mob/living/carbon/human/species_types/kepori.dm index 43fbc21896..ebc30027e0 100644 --- a/code/modules/mob/living/carbon/human/species_types/kepori.dm +++ b/code/modules/mob/living/carbon/human/species_types/kepori.dm @@ -2,7 +2,7 @@ name = "\improper Kepori" id = SPECIES_KEPORI default_color = "6060FF" - species_traits = list(SCLERA, MUTCOLORS, MUTCOLORS_SECONDARY) + species_traits = list(MUTCOLORS, MUTCOLORS_SECONDARY) inherent_traits = list(TRAIT_SCOOPABLE) mutant_bodyparts = list("kepori_body_feathers", "kepori_head_feathers", "kepori_tail_feathers", "kepori_feathers") default_features = list("mcolor" = "0F0", "wings" = "None", "kepori_feathers" = "None", "kepori_head_feathers" = "None", "kepori_body_feathers" = "None", "kepori_tail_feathers" = "None") @@ -32,7 +32,6 @@ fire_overlay = "generic" - mutanttongue = /obj/item/organ/tongue/kepori species_language_holder = /datum/language_holder/kepori var/datum/action/innate/keptackle/keptackle /// # Inherit tackling variables # @@ -51,6 +50,18 @@ bodytype = BODYTYPE_KEPORI + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/kepori, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) + species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/kepori, BODY_ZONE_HEAD = /obj/item/bodypart/head/kepori, @@ -60,16 +71,7 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/kepori, ) - species_robotic_limbs = list( - BODY_ZONE_CHEST = /obj/item/bodypart/chest/robot/kepori, - BODY_ZONE_HEAD = /obj/item/bodypart/head/robot/kepori, - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/robot/surplus/kepori, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/robot/surplus/kepori, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/robot/surplus/kepori, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/robot/surplus/kepori, - ) - - robotic_eyes = /obj/item/organ/eyes/robotic/kepori + prosthetic_style = /datum/sprite_accessory/body/prosthetic/kepori //I'm not emotionally prepared to spend ten more hours splicing overlays together damage_overlay_type = "" diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index df65b80c20..69a887756e 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -4,11 +4,9 @@ id = SPECIES_SARATHI default_color = "00FF00" species_age_max = 175 - species_traits = list(MUTCOLORS, LIPS, SCLERA, EMOTE_OVERLAY, MUTCOLORS_SECONDARY) + species_traits = list(MUTCOLORS, LIPS, EMOTE_OVERLAY, MUTCOLORS_SECONDARY) inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_REPTILE mutant_bodyparts = list("tail_lizard", "face_markings", "frills", "horns", "spines", "body_markings") - mutanttongue = /obj/item/organ/tongue/lizard - mutant_organs = list(/obj/item/organ/tail/lizard) coldmod = 1.5 heatmod = 0.67 default_features = list("mcolor" = "0F0", "tail_lizard" = "Smooth", "face_markings" = "None", "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None") @@ -23,10 +21,21 @@ deathsound = 'sound/voice/lizard/deathsound.ogg' wings_icons = list("Dragon") species_language_holder = /datum/language_holder/lizard - mutanteyes = /obj/item/organ/eyes/lizard - sclera_color = "#fffec4" blush_color = COLOR_BLUSH_TEAL + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/lizard, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/lizard, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ORGAN_SLOT_TAIL = /obj/item/organ/tail/lizard, + ) + species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/lizard, BODY_ZONE_HEAD = /obj/item/bodypart/head/lizard, @@ -36,16 +45,7 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/lizard/digitigrade, ) - species_robotic_limbs = list( - BODY_ZONE_CHEST = /obj/item/bodypart/chest/robot/lizard, - BODY_ZONE_HEAD = /obj/item/bodypart/head/robot/lizard, - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/robot/surplus/lizard, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/robot/surplus/lizard, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/robot/surplus/lizard/digitigrade, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/robot/surplus/lizard/digitigrade, - ) - - robotic_eyes = /obj/item/organ/eyes/robotic/lizard + prosthetic_style = /datum/sprite_accessory/body/prosthetic/sarathi // Sarathi are coldblooded and can stand a greater temperature range than humans bodytemp_heat_damage_limit = HUMAN_BODYTEMP_HEAT_DAMAGE_LIMIT + 30 diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm index 2e20ab6f5d..4a077a60e9 100644 --- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm +++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm @@ -7,15 +7,12 @@ inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG mutant_bodyparts = list("moth_wings", "moth_fluff", "moth_markings") default_features = list("moth_wings" = "Plain", "moth_fluff" = "Plain", "moth_markings" = "None") - mutant_organs = list(/obj/item/organ/moth_wings) attack_verb = "slash" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' liked_food = FRUIT | SUGAR | CLOTH disliked_food = GROSS toxic_food = MEAT | RAW | GORE - mutanteyes = /obj/item/organ/eyes/compound - mutanttongue = /obj/item/organ/tongue/moth changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP species_language_holder = /datum/language_holder/moth loreblurb = "Bug-mammal hybrids resembling Sol's lepidopterans. They share the least DNA with baseline humans of any human-derived geneline, being significant portions insect and modified whole-cloth DNA. Their classification as another human geneline or as something else is highly debated. All evidence that would point to their origin– which is presumably a genelab somewhere– has seemingly disappeared into thin air. Mothpeople themselves have no centralized culture or homeworld, leading to a fractured existence amongst the stars." @@ -23,6 +20,19 @@ has_innate_wings = TRUE deathsound = 'sound/voice/moth/moth_a.ogg' + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/compound, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/moth, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ORGAN_SLOT_WINGS = /obj/item/organ/moth_wings, + ) + species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/moth, BODY_ZONE_HEAD = /obj/item/bodypart/head/moth, @@ -32,14 +42,7 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/moth, ) - species_robotic_limbs = list( - BODY_ZONE_CHEST = /obj/item/bodypart/chest/robot/human, - BODY_ZONE_HEAD = /obj/item/bodypart/head/robot, - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/robot/surplus/human, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/robot/surplus/human, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/robot/surplus/human, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/robot/surplus/human, - ) + prosthetic_style = /datum/sprite_accessory/body/prosthetic/human min_temp_comfortable = HUMAN_BODYTEMP_NORMAL - 5 bodytemp_cold_damage_limit = HUMAN_BODYTEMP_COLD_DAMAGE_LIMIT - 5 diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm index 32976b827c..692ecdda7c 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -5,11 +5,7 @@ species_traits = list(NOBLOOD, NOTRANSSTING) // plasmemes get hard to wound since they only need a severe bone wound to dismember, but unlike skellies, they can't pop their bones back into place inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_NOHUNGER,TRAIT_ALWAYS_CLEAN, TRAIT_HARDLY_WOUNDED) - inherent_biotypes = MOB_HUMANOID|MOB_MINERAL - mutantlungs = /obj/item/organ/lungs/plasmaman - mutanttongue = /obj/item/organ/tongue/bone/plasmaman - mutantliver = /obj/item/organ/liver/plasmaman - mutantstomach = /obj/item/organ/stomach/plasmaman + inherent_biotypes = MOB_HUMANOID | MOB_MINERAL heatmod = 1.5 breathid = "tox" damage_overlay_type = ""//let's not show bloody wounds or burns over bones. @@ -21,6 +17,18 @@ species_language_holder = /datum/language_holder/skeleton loreblurb = "Technically a disability rather than a species, Phorids (known far more commonly as plasmamen) are a loose grouping of people fallen victim to anomalous plasma-related effects that convert tough biological matter into inorganic, biology-mimicking plasma structures. Phorids often live their lives dependent on larger organizations due to their oxygen-incompatible physiology." + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs/plasmaman, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/bone/plasmaman, + ORGAN_SLOT_LIVER = /obj/item/organ/liver/plasmaman, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach/plasmaman, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) + species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/plasmaman, BODY_ZONE_HEAD = /obj/item/bodypart/head/plasmaman, diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm index df96b98630..35adfcd78d 100644 --- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm @@ -3,7 +3,7 @@ name = "\improper Podperson" id = SPECIES_POD default_color = "59CE00" - species_traits = list(MUTCOLORS,SCLERA) + species_traits = list(MUTCOLORS) inherent_traits = list( TRAIT_ALWAYS_CLEAN, TRAIT_PLANT_SAFE, diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm index 5430f531ea..f63bc9559d 100644 --- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm @@ -9,7 +9,18 @@ inherent_traits = list(TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_NOBREATH,TRAIT_NODISMEMBER,TRAIT_NEVER_WOUNDED) inherent_factions = list("faithless") changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC - mutanteyes = /obj/item/organ/eyes/night_vision + + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/night_vision, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/shadow, @@ -37,9 +48,18 @@ no_equip = list(ITEM_SLOT_MASK, ITEM_SLOT_OCLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_FEET, ITEM_SLOT_ICLOTHING, ITEM_SLOT_SUITSTORE) species_traits = list(NOBLOOD,NO_UNDERWEAR,NO_DNA_COPY,NOTRANSSTING) inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER) - mutanteyes = /obj/item/organ/eyes/night_vision/nightmare - mutantheart = /obj/item/organ/heart/nightmare - mutantbrain = /obj/item/organ/brain/nightmare + + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain/nightmare, + ORGAN_SLOT_HEART = /obj/item/organ/heart/nightmare, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/night_vision/nightmare, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) var/info_text = "You are a Nightmare. The ability shadow walk allows unlimited, unrestricted movement in the dark while activated. \ Your light eater will destroy any light producing objects you attack, as well as destroy any lights a living creature may be holding. You will automatically dodge gunfire and melee attacks when on a dark tile. If killed, you will eventually revive if left in darkness." diff --git a/code/modules/mob/living/carbon/human/species_types/skeletons.dm b/code/modules/mob/living/carbon/human/species_types/skeletons.dm index fcd689ed14..ff01e8c453 100644 --- a/code/modules/mob/living/carbon/human/species_types/skeletons.dm +++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm @@ -6,7 +6,6 @@ inherent_traits = list(TRAIT_NOMETABOLISM,TRAIT_TOXIMMUNE,TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,\ TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NOHUNGER,TRAIT_EASYDISMEMBER,TRAIT_LIMBATTACHMENT,TRAIT_FAKEDEATH,TRAIT_XENO_IMMUNE,TRAIT_NOCLONELOSS) inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID - mutanttongue = /obj/item/organ/tongue/bone damage_overlay_type = ""//let's not show bloody wounds or burns over bones. disliked_food = NONE liked_food = GROSS | MEAT | RAW | DAIRY @@ -14,6 +13,17 @@ changesource_flags = MIRROR_BADMIN | WABBAJACK | ERT_SPAWN species_language_holder = /datum/language_holder/skeleton + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/bone, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) + species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/skeleton, BODY_ZONE_HEAD = /obj/item/bodypart/head/skeleton, diff --git a/code/modules/mob/living/carbon/human/species_types/snail.dm b/code/modules/mob/living/carbon/human/species_types/snail.dm index e42b824530..0a9a1b9954 100644 --- a/code/modules/mob/living/carbon/human/species_types/snail.dm +++ b/code/modules/mob/living/carbon/human/species_types/snail.dm @@ -12,10 +12,20 @@ siemens_coeff = 2 //snails are mostly water changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | RACE_SWAP - mutanteyes = /obj/item/organ/eyes/snail - mutanttongue = /obj/item/organ/tongue/snail exotic_blood = /datum/reagent/lube + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/snail, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/snail, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) + species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/snail, BODY_ZONE_HEAD = /obj/item/bodypart/head/snail, diff --git a/code/modules/mob/living/carbon/human/species_types/spider.dm b/code/modules/mob/living/carbon/human/species_types/spider.dm index 36a6e189c9..9689386c5f 100644 --- a/code/modules/mob/living/carbon/human/species_types/spider.dm +++ b/code/modules/mob/living/carbon/human/species_types/spider.dm @@ -18,8 +18,6 @@ liked_food = MEAT | RAW | GORE // Regular spiders literally liquify the insides of their prey and drink em like a smoothie. I think this fits disliked_food = FRUIT | GROSS toxic_food = VEGETABLES | DAIRY | CLOTH - mutanteyes = /obj/item/organ/eyes/night_vision/spider - mutanttongue = /obj/item/organ/tongue/spider changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP species_language_holder = /datum/language_holder/spider loreblurb = "Rachnids are aliens with coincidental physiological similarities to Sol's spiders. Despite visible adaptations that would make them excellent hunters, modern Rachnidian culture revolves around honing the skills and talents of oneself, treating them as forms of self-expression. Rachnids tend to focus on their work intensely, priding themselves on a job well done and languishing if they see themselves as underperforming in their field." @@ -27,6 +25,18 @@ var/web_ready = TRUE var/spinner_rate = 75 + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/night_vision/spider, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/spider, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) + // TODO - add more arms species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/rachnid, diff --git a/code/modules/mob/living/carbon/human/species_types/vampire.dm b/code/modules/mob/living/carbon/human/species_types/vampire.dm index aaf30870e4..79f09872f1 100644 --- a/code/modules/mob/living/carbon/human/species_types/vampire.dm +++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm @@ -9,10 +9,21 @@ changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | ERT_SPAWN exotic_bloodtype = "U" use_skintones = TRUE - mutantheart = /obj/item/organ/heart/vampire - mutanttongue = /obj/item/organ/tongue/vampire examine_limb_id = SPECIES_HUMAN skinned_type = /obj/item/stack/sheet/animalhide/human + + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart/vampire, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/vampire, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) + var/info_text = "You are a Vampire. You will slowly but constantly lose blood if outside of a coffin. If inside a coffin, you will slowly heal. You may gain more blood by grabbing a live victim and using your drain ability." var/obj/effect/proc_holder/spell/targeted/shapeshift/bat/batform //attached to the datum itself to avoid cloning memes, and other duplicates diff --git a/code/modules/mob/living/carbon/human/species_types/vox.dm b/code/modules/mob/living/carbon/human/species_types/vox.dm index c3f250f9b9..862a3771e6 100644 --- a/code/modules/mob/living/carbon/human/species_types/vox.dm +++ b/code/modules/mob/living/carbon/human/species_types/vox.dm @@ -18,7 +18,6 @@ species_eye_path = 'icons/mob/species/vox/vox_parts.dmi' punchdamagelow = 6 punchdamagehigh = 12 - mutanttongue = /obj/item/organ/tongue/vox species_language_holder = /datum/language_holder/vox bodytemp_heat_divisor = VOX_BODYTEMP_HEAT_DIVISOR @@ -37,6 +36,18 @@ damage_overlay_type = "vox" fire_overlay = "generic" + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/vox, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) + species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/vox, BODY_ZONE_HEAD = /obj/item/bodypart/head/vox, @@ -46,15 +57,6 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/vox, ) - species_robotic_limbs = list( - BODY_ZONE_CHEST = /obj/item/bodypart/chest/robot/vox, - BODY_ZONE_HEAD = /obj/item/bodypart/head/robot/vox, - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/robot/surplus/vox, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/robot/surplus/vox, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/robot/surplus/vox, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/robot/surplus/vox, - ) - var/datum/action/innate/tail_hold/tail_action var/static/list/allergy_reactions = list( diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm index 963cdee212..a92d2fed74 100644 --- a/code/modules/mob/living/carbon/human/species_types/zombies.dm +++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm @@ -7,7 +7,6 @@ species_traits = list(NOBLOOD,NOZOMBIE,NOTRANSSTING) inherent_traits = list(TRAIT_NOMETABOLISM,TRAIT_TOXIMMUNE,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_EASYDISMEMBER,TRAIT_LIMBATTACHMENT,TRAIT_NOBREATH,TRAIT_NODEATH,TRAIT_FAKEDEATH,TRAIT_NOCLONELOSS) inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID - mutanttongue = /obj/item/organ/tongue/zombie var/static/list/spooks = list('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg','sound/hallucinations/veryfar_noise.ogg','sound/hallucinations/wail.ogg') disliked_food = NONE liked_food = GROSS | MEAT | RAW @@ -15,6 +14,18 @@ bodytemp_normal = T0C // They have no natural body heat, the environment regulates body temp bodytemp_heat_damage_limit = FIRE_MINIMUM_TEMPERATURE_TO_EXIST // Take damage at fire temp + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/zombie, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) + species_limbs = list( BODY_ZONE_CHEST = /obj/item/bodypart/chest/zombie, BODY_ZONE_HEAD = /obj/item/bodypart/head/zombie, @@ -31,7 +42,19 @@ mutanthands = /obj/item/zombie_hand armor = 20 // 120 damage to KO a zombie, which kills it speedmod = 1.6 - mutanteyes = /obj/item/organ/eyes/night_vision/zombie + + species_organs = list( + ORGAN_SLOT_BRAIN = /obj/item/organ/brain, + ORGAN_SLOT_HEART = /obj/item/organ/heart, + ORGAN_SLOT_LUNGS = /obj/item/organ/lungs, + ORGAN_SLOT_EYES = /obj/item/organ/eyes/night_vision/zombie, + ORGAN_SLOT_EARS = /obj/item/organ/ears, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue, + ORGAN_SLOT_LIVER = /obj/item/organ/liver, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach, + ORGAN_SLOT_APPENDIX = /obj/item/organ/appendix, + ) + var/heal_rate = 1 var/regen_cooldown = 0 changesource_flags = MIRROR_BADMIN | WABBAJACK | ERT_SPAWN diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm index 93ba95941f..a7e5991fe7 100644 --- a/code/modules/surgery/bodyparts/head.dm +++ b/code/modules/surgery/bodyparts/head.dm @@ -45,8 +45,12 @@ ///Whether to show eyes, or lack thereof var/draw_eyes = TRUE + ///Should this head have sclera? + var/draw_sclera = TRUE ///Uses greyscale coloring for eyes var/greyscale_eyes = TRUE + ///Sprite to override the one used by the eye organ + var/eye_state_override /obj/item/bodypart/head/Destroy() QDEL_NULL(brainmob) //order is sensitive, see warning in handle_atom_del() below diff --git a/code/modules/surgery/bodyparts/helpers.dm b/code/modules/surgery/bodyparts/helpers.dm index fd8ad0b820..e749a33d9b 100644 --- a/code/modules/surgery/bodyparts/helpers.dm +++ b/code/modules/surgery/bodyparts/helpers.dm @@ -1,8 +1,10 @@ /mob/living/proc/get_bodypart(zone) + RETURN_TYPE(/obj/item/bodypart) return /// Returns a bodypart occupying a specific zone. If using a precise zone and no such part is present, it falls back to a non-precise zone. /mob/living/carbon/get_bodypart(zone, simplify = FALSE) + RETURN_TYPE(/obj/item/bodypart) if(!zone) zone = BODY_ZONE_CHEST var/returned_part = bodyparts[zone] @@ -161,11 +163,28 @@ // No it's wasnt, but now it is. -sarah /mob/living/carbon/proc/new_body_part(zone, robotic, fixed_icon, datum/species/species) species ||= dna.species - var/bodypart_type = robotic ? species.species_robotic_limbs[zone] : species.species_limbs[zone] + robotic ||= HAS_TRAIT(src, TRAIT_USE_PROSTHETIC) + var/bodypart_type + if(robotic && species.prosthetic_style) + bodypart_type = species.prosthetic_style.replacement_bodyparts[zone] + else + bodypart_type = species.species_limbs[zone] if(!bodypart_type) return null return new bodypart_type() +/mob/living/carbon/proc/new_organ(slot, robotic = FALSE, datum/species/species) + species ||= dna.species + robotic ||= HAS_TRAIT(src, TRAIT_USE_PROSTHETIC) + var/organ_type + if(robotic && species.prosthetic_style && (slot in species.prosthetic_style.replacement_organs)) + organ_type = species.prosthetic_style.replacement_organs[slot] + else + organ_type = species.species_organs[slot] + if(!organ_type) + return null + return new organ_type() + /mob/living/carbon/monkey/new_body_part(zone, robotic, fixed_icon, datum/species/species) var/obj/item/bodypart/L switch(zone) diff --git a/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm index ebf294a3cc..88fa59949d 100644 --- a/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm @@ -4,6 +4,7 @@ limb_id = SPECIES_ELZUOSE is_dimorphic = FALSE uses_mutcolor = TRUE + draw_sclera = FALSE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_SNOUT_SMALL /obj/item/bodypart/chest/ethereal diff --git a/code/modules/surgery/bodyparts/species_parts/ipc_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/ipc_bodyparts.dm index c2d92c3444..6a8d1e04ae 100644 --- a/code/modules/surgery/bodyparts/species_parts/ipc_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/ipc_bodyparts.dm @@ -3,12 +3,9 @@ icon = 'icons/mob/species/ipc/bodyparts.dmi' icon_state = "synth_head" limb_id = "synth" - var/custom_eye_sprite - /// if true, we set the eyes to #FFFFFF - useful for ipcs where the light color probably shouldnt be changable - var/force_white_eye_color = FALSE dynamic_rename = FALSE draw_eyes = FALSE - var/has_screen = FALSE + draw_sclera = FALSE is_dimorphic = FALSE should_draw_greyscale = FALSE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC @@ -22,46 +19,6 @@ medium_burn_msg = "scorched" heavy_burn_msg = "seared" -//awful workaround for the lack of differing eye sprite handling -/obj/item/bodypart/head/ipc/attach_limb(mob/living/carbon/our_carbon, special, is_creating = FALSE) - var/mob/living/carbon/human/limb_owner - if(our_carbon) - limb_owner = our_carbon - else - limb_owner = owner - - var/obj/item/organ/eyes/eyes_to_edit = limb_owner.getorganslot(ORGAN_SLOT_EYES) - - if(!limb_owner || !eyes_to_edit) - return ..() - if(custom_eye_sprite) - eyes_to_edit.eye_icon_state = custom_eye_sprite - - if(force_white_eye_color) - limb_owner.eye_color = COLOR_WHITE - var/datum/species/ipc/ipc_species_datum = limb_owner.dna.species - var/datum/species/species_datum = limb_owner.dna.species - if(!ipc_species_datum) - ipc_species_datum.update_screen_action() - else if(species_datum) - LAZYREMOVE(species_datum.species_traits, SCLERA) - return ..() - -//ditto -/obj/item/bodypart/head/ipc/drop_limb(special) - var/mob/living/carbon/human/limb_owner = owner - - var/obj/item/organ/eyes/eyes_to_edit = limb_owner.getorganslot(ORGAN_SLOT_EYES) - - if(!limb_owner || !eyes_to_edit) - return ..() - if(custom_eye_sprite) - eyes_to_edit.eye_icon_state = eyes_to_edit::eye_icon_state - - if(force_white_eye_color) - limb_owner.eye_color = eyes_to_edit.eye_color - return ..() - /obj/item/bodypart/chest/ipc static_icon = 'icons/mob/species/ipc/bodyparts.dmi' icon = 'icons/mob/species/ipc/bodyparts.dmi' @@ -159,7 +116,6 @@ name = "\improper Pawsitrons United N1 head" icon_state = "pawsitrons_head" limb_id = "pawsitrons" - has_screen = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_BOXHEAD /obj/item/bodypart/chest/ipc/pawsitrons @@ -360,7 +316,7 @@ limb_id = "saipc" draw_eyes = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_SNOUT_SMALL - custom_eye_sprite = "eyes_mono" + eye_state_override = "eyes_mono" /obj/item/bodypart/chest/ipc/saipc name = "\improper Scarborgh Arms IPC-73 chest" @@ -391,7 +347,6 @@ name = "\improper Scarborgh Arms IPC-73 Type-2 boxhead" icon_state = "saipc_alt_head" limb_id = "saipc_alt" - has_screen = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_BOXHEAD // Scarborgh Arms IPC-80 MK.2 @@ -402,7 +357,7 @@ limb_id = "saipc2" draw_eyes = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_SNOUT_SMALL - custom_eye_sprite = "eyes_mono" + eye_state_override = "eyes_mono" /obj/item/bodypart/chest/ipc/saipc2 name = "\improper Scarborgh Arms IPC-80 MK.2 chest" @@ -446,7 +401,7 @@ icon_state = "lanchesterheavy_head" limb_id = "lanchesterheavy" draw_eyes = TRUE - custom_eye_sprite = "eyes_circle" + eye_state_override = "eyes_circle" /obj/item/bodypart/chest/ipc/lanchesterheavy name = "\improper Lanchester Mechanics 'HEAVY DUTY FRAME' chest" @@ -479,7 +434,6 @@ name = "\improper Lanchester Mechanics 'HEAVY DUTY FRAME' head" icon_state = "lanchesterheavy_alt_head" limb_id = "lanchesterheavy_alt" - has_screen = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_BOXHEAD // HARDLINE 'Longshore' @@ -488,7 +442,6 @@ name = "\improper HARDLINE 'Longshore' head" icon_state = "lanchesterworker_head" limb_id = "lanchesterworker" - has_screen = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_BOXHEAD /obj/item/bodypart/chest/ipc/lanchesterworker @@ -524,7 +477,6 @@ name = "\improper Custom Unplated head" icon_state = "lanchesterunplated_head" limb_id = "lanchesterunplated" - has_screen = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_BOXHEAD /obj/item/bodypart/chest/ipc/lanchesterunplated @@ -562,7 +514,7 @@ limb_id = "pgfmk3_suhols" draw_eyes = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_SNOUT_SMALL - custom_eye_sprite = "eyes_elzu" + eye_state_override = "eyes_elzu" /obj/item/bodypart/chest/ipc/pgfmk3_suhols name = "\improper PGF Mechanics MK.III Type 'Suhols-Ro' chest" @@ -573,7 +525,6 @@ name = "\improper PGF Mechanics MK.III Type 'Suhols-Ro' aftermarket boxhead" icon_state = "pgfmk3_suhols_alt_head" limb_id = "pgfmk3_suhols_alt" - has_screen = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_BOXHEAD // PGF Mechanics MK.III Type 'Wusha' @@ -594,7 +545,6 @@ name = "\improper PGF Mechanics MK.III Type 'Wusha' aftermarket boxhead" icon_state = "pgfmk3_wusha_alt_head" limb_id = "pgfmk3_wusha_alt" - has_screen = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_BOXHEAD // PGF Mechanics MK.III generic @@ -628,7 +578,6 @@ uses_mutcolor = TRUE should_draw_greyscale = TRUE overlay_icon_state = TRUE - has_screen = FALSE draw_eyes = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_SNOUT @@ -689,7 +638,7 @@ icon_state = "bishop_head" limb_id = "bishop" draw_eyes = TRUE - custom_eye_sprite = "eyes_circle" + eye_state_override = "eyes_circle" /obj/item/bodypart/chest/ipc/bishop name = "\improper Besoro Bishop chest" @@ -720,7 +669,6 @@ name = "\improper Besoro Bishop Type-B head" icon_state = "bishop_alt_head" limb_id = "bishop_alt" - has_screen = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_BOXHEAD // INTEQ SPRINTER @@ -729,11 +677,10 @@ name = "\improper Inteq Mothership 'Sprinter' Type-1 head" icon_state = "inteqsprinter_head" limb_id = "inteqsprinter" - has_screen = FALSE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC - custom_eye_sprite = "eyes_inteqsprinter" + eye_state_override = "eyes_inteqsprinter" draw_eyes = TRUE - force_white_eye_color = TRUE + greyscale_eyes = FALSE /obj/item/bodypart/chest/ipc/sprinter name = "\improper Inteq Mothership 'Sprinter' chest" @@ -766,9 +713,9 @@ name = "\improper Inteq Mothership 'Sprinter' Type-2 head" icon_state = "inteqsprinter2_head" limb_id = "inteqsprinter2" - custom_eye_sprite = "eyes_inteqsprinter2" + eye_state_override = "eyes_inteqsprinter2" draw_eyes = TRUE - force_white_eye_color = TRUE + greyscale_eyes = FALSE // MAXIM SEEKER @@ -776,9 +723,10 @@ name = "\improper Maxim Dynamics 'Seeker' head" icon_state = "seekeripc_head" limb_id = "seekeripc" - custom_eye_sprite = "eyes_seekeripc" + eye_state_override = "eyes_seekeripc" draw_eyes = TRUE - force_white_eye_color = TRUE + greyscale_eyes = FALSE + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC /obj/item/bodypart/chest/ipc/seeker name = "\improper Maxim Dynamics 'Seeker' chest" @@ -811,7 +759,6 @@ name = "\improper Absolution-Lux 'Solferino' head" icon_state = "ablux_head" limb_id = "ablux" - has_screen = FALSE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC /obj/item/bodypart/chest/ipc/solferino @@ -846,7 +793,6 @@ icon_state = "humanipc_head" limb_id = "humanipc" draw_eyes = TRUE - has_screen = FALSE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC /obj/item/bodypart/chest/ipc/humaniform @@ -881,8 +827,8 @@ icon_state = "cyber_head" limb_id = "cyber" draw_eyes = TRUE - custom_eye_sprite = "eyes_cybersun_ghost" - force_white_eye_color = TRUE + eye_state_override = "eyes_cybersun_ghost" + greyscale_eyes = FALSE /obj/item/bodypart/chest/ipc/ghost name = "\improper Cybersun Biodynamics S Series 'Ghost' chest" @@ -916,7 +862,6 @@ limb_id = "custom_3d_box" overlay_use_primary_color = TRUE overlay_icon_state = TRUE - has_screen = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_BOXHEAD /obj/item/bodypart/head/ipc/custom_monoeye @@ -927,7 +872,7 @@ overlay_use_primary_color = TRUE overlay_icon_state = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_SNOUT_SMALL - custom_eye_sprite = "eyes_mono" + eye_state_override = "eyes_mono" /obj/item/bodypart/head/ipc/customatua_monoc name = "\improper Custom 3D Printed Atua head" @@ -937,7 +882,7 @@ overlay_use_primary_color = TRUE overlay_icon_state = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_SNOUT_SMALL - custom_eye_sprite = "eyes_mono" + eye_state_override = "eyes_mono" /obj/item/bodypart/leg/left/ipc/customatua_monoc name = "\improper Custom 3D Printed Atua left leg" @@ -992,7 +937,7 @@ bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_SNOUT_SMALL overlay_use_primary_color = TRUE overlay_icon_state = TRUE - custom_eye_sprite = "eyes_elzu" + eye_state_override = "eyes_elzu" /obj/item/bodypart/chest/ipc/custompgf3_suhols name = "\improper Custom 3D Printed MK.III Type 'Suhols-Ro' chest" @@ -1109,7 +1054,7 @@ icon_state = "custombishop_head" limb_id = "custombishop" draw_eyes = TRUE - custom_eye_sprite = "eyes_circle" + eye_state_override = "eyes_circle" overlay_use_primary_color = TRUE overlay_icon_state = TRUE @@ -1204,7 +1149,7 @@ icon_state = "customlanchesterheavy_head" limb_id = "customlanchesterheavy" draw_eyes = TRUE - custom_eye_sprite = "eyes_circle" + eye_state_override = "eyes_circle" overlay_use_primary_color = TRUE overlay_icon_state = TRUE @@ -1251,7 +1196,6 @@ name = "\improper Custom 3D Printed Longshore head" icon_state = "customlanchesterworker_head" limb_id = "customlanchesterworker" - has_screen = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_BOXHEAD overlay_use_primary_color = TRUE overlay_icon_state = TRUE @@ -1299,7 +1243,7 @@ name = "\improper Custom 3D Printed Seeeker head" icon_state = "seekeripc_head" limb_id = "seekeripc" - custom_eye_sprite = "eyes_seekeripc_greyscale" + eye_state_override = "eyes_seekeripc_greyscale" draw_eyes = TRUE should_draw_greyscale = TRUE @@ -1341,7 +1285,6 @@ limb_id = "pgfipc-p" uses_mutcolor = TRUE should_draw_greyscale = TRUE - has_screen = FALSE draw_eyes = TRUE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_SNOUT diff --git a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm index c8a800c495..0706b33e3b 100644 --- a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm @@ -3,6 +3,7 @@ limb_id = "snail" is_dimorphic = FALSE greyscale_eyes = FALSE + draw_sclera = FALSE /obj/item/bodypart/chest/snail limb_id = "snail" @@ -102,6 +103,7 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE greyscale_eyes = FALSE + draw_sclera = FALSE /obj/item/bodypart/chest/zombie limb_id = "zombie" @@ -151,6 +153,7 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE draw_eyes = FALSE + draw_sclera = FALSE /obj/item/bodypart/chest/fly limb_id = "fly" @@ -179,6 +182,7 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE draw_eyes = FALSE + draw_sclera = FALSE /obj/item/bodypart/chest/shadow limb_id = "shadow" @@ -207,6 +211,7 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE greyscale_eyes = FALSE + draw_sclera = FALSE biological_state = BIO_BONE /obj/item/bodypart/chest/skeleton diff --git a/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm index d3bc4c1984..5a532f92ea 100644 --- a/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm @@ -4,6 +4,7 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE draw_eyes = FALSE + draw_sclera = FALSE /obj/item/bodypart/chest/moth static_icon = 'icons/mob/species/moth/bodyparts.dmi' diff --git a/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm index 7b52ea7b62..677aff5f8f 100644 --- a/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm @@ -4,6 +4,7 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE greyscale_eyes = FALSE + draw_sclera = FALSE biological_state = BIO_BONE /obj/item/bodypart/chest/plasmaman diff --git a/code/modules/surgery/bodyparts/species_parts/rachnid_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/rachnid_bodyparts.dm index 440b0b7236..ba8e3c1d72 100644 --- a/code/modules/surgery/bodyparts/species_parts/rachnid_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/rachnid_bodyparts.dm @@ -5,6 +5,7 @@ overlay_icon_state = TRUE biological_state = (BIO_FLESH|BIO_BLOODED) draw_eyes = FALSE + draw_sclera = FALSE /obj/item/bodypart/chest/rachnid static_icon = 'icons/mob/species/rachnid/bodyparts.dmi' diff --git a/code/modules/surgery/bodyparts/species_parts/vox_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/vox_bodyparts.dm index b2502f6a17..ea641213df 100644 --- a/code/modules/surgery/bodyparts/species_parts/vox_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/vox_bodyparts.dm @@ -4,6 +4,7 @@ is_dimorphic = FALSE bodytype = BODYTYPE_VOX | BODYTYPE_ORGANIC should_draw_greyscale = FALSE + draw_sclera = FALSE dmg_overlay_icon = 'icons/mob/species/vox/vox_overlays.dmi' /obj/item/bodypart/chest/vox diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index 58bc3c93ba..19fce52f0a 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -301,3 +301,4 @@ desc = "An internal power cord hooked up to a battery. Useful if you run on volts." items_to_create = list(/obj/item/apc_powercord) zone = BODY_ZONE_L_ARM + slot = ORGAN_SLOT_LEFT_ARM_AUG diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index 49bca85189..0f2fea384a 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -24,7 +24,7 @@ var/tint = 0 var/eye_color = "" //set to a hex code to override a mob's eye color var/eye_icon_state = "eyes" - var/sclera_color = "e8e8e8" //a hex color, in case some species, like sarathi have different sclera color + var/sclera_color = "ebeae8" //a hex color, in case some species, like sarathi have different sclera color var/sclera_icon_state = "eyes_sclera" //sclera is the white part of the eye var/old_eye_color = "fff" var/flash_protect = FLASH_PROTECTION_NONE diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 7ad1699284..e3a84d6b55 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -242,7 +242,7 @@ /mob/living/carbon/human/regenerate_organs() SEND_SIGNAL(src, COMSIG_CARBON_PRE_REGENERATE_ORGANS) - dna.species.regenerate_organs(src, robotic = fbp) + dna.species.regenerate_organs(src, robotic = HAS_TRAIT(src, TRAIT_USE_PROSTHETIC)) SEND_SIGNAL(src, COMSIG_CARBON_POST_REGENERATE_ORGANS) /** get_availability diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index 63898af833..07d255e8cf 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -118,6 +118,7 @@ #include "say.dm" #include "serving_tray.dm" #include "spawn_humans.dm" +#include "species_limbs_and_organs.dm" #include "species_unique_id.dm" #include "species_whitelists.dm" #include "stack_singular_name.dm" diff --git a/code/modules/unit_tests/species_limbs_and_organs.dm b/code/modules/unit_tests/species_limbs_and_organs.dm new file mode 100644 index 0000000000..c72580ffdc --- /dev/null +++ b/code/modules/unit_tests/species_limbs_and_organs.dm @@ -0,0 +1,19 @@ +// This exists to catch limbs or organs being where they shouldn't +/datum/unit_test/species_limbs_and_organs/Run() + var/mob/living/carbon/human/human = allocate(/mob/living/carbon/human) + + var/datum/species/test_species + var/obj/item/organ/test_organ + var/obj/item/bodypart/test_bodypart + + for(var/species_type in subtypesof(/datum/species)) + human.set_species(species_type) + test_species = human.dna.species + + for(var/zone in test_species.species_limbs) + test_bodypart = test_species.species_limbs[zone] + TEST_ASSERT_EQUAL(zone, test_bodypart::body_zone, "Species [species_type] has invalid bodypart [test_bodypart] in zone [zone]") + + for(var/slot in test_species.species_organs) + test_organ = test_species.species_organs[slot] + TEST_ASSERT_EQUAL(slot, test_organ::slot, "Species [species_type] has invalid organ [test_organ] in slot [slot]") diff --git a/shiptest.dme b/shiptest.dme index c6c975e3b5..24a918f216 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -2734,6 +2734,7 @@ #include "code\modules\mob\dead\new_player\sprite_accessories\wings.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\body\_body.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\body\ipc.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\body\prosthetic.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\underwear\underwear_legs.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\underwear\underwear_socks.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\underwear\underwear_torso.dm" From eb2b4e54f5242e0b38b8a1fe32d21cb7970b0b9e Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 9 Apr 2026 16:25:43 -0500 Subject: [PATCH 35/70] Automatic changelog generation for PR #5939 [ci skip] --- html/changelogs/AutoChangeLog-pr-5939.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5939.yml diff --git a/html/changelogs/AutoChangeLog-pr-5939.yml b/html/changelogs/AutoChangeLog-pr-5939.yml new file mode 100644 index 0000000000..fff9f226a6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5939.yml @@ -0,0 +1,4 @@ +author: SapphicOverload +changes: + - {refactor: Refactored IPCs again} +delete-after: true From cdb38c1bdd61e6cad162633d0ddf50919f27c5ea Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 10 Apr 2026 02:04:50 +0000 Subject: [PATCH 36/70] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-5939.yml | 4 ---- html/changelogs/archive/2026-04.yml | 3 +++ 2 files changed, 3 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-5939.yml diff --git a/html/changelogs/AutoChangeLog-pr-5939.yml b/html/changelogs/AutoChangeLog-pr-5939.yml deleted file mode 100644 index fff9f226a6..0000000000 --- a/html/changelogs/AutoChangeLog-pr-5939.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: SapphicOverload -changes: - - {refactor: Refactored IPCs again} -delete-after: true diff --git a/html/changelogs/archive/2026-04.yml b/html/changelogs/archive/2026-04.yml index ddc7078057..52680c646c 100644 --- a/html/changelogs/archive/2026-04.yml +++ b/html/changelogs/archive/2026-04.yml @@ -70,3 +70,6 @@ - rscadd: Brass knuckles! New melee item in cargo. thearbiber: - bugfix: Whitereds back in cargo +2026-04-10: + SapphicOverload: + - refactor: Refactored IPCs again From b33af567c4d23136206d8122e628b1c6f0485935 Mon Sep 17 00:00:00 2001 From: Erika Fox <94164348+Erikafox@users.noreply.github.com> Date: Fri, 10 Apr 2026 13:10:56 -0400 Subject: [PATCH 37/70] Shields now only reflect from the direction the user's facing (#5983) ## About The Pull Request at least i'm fairly sure that's how this code works ## Why It's Good For The Game shields are less oppressive when they're not omnidirectional armor slabs. ## Changelog :cl: balance: shields now need to be facing a target to absorb an impact. /:cl: --- code/game/objects/items/shields.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index 7493e6376a..6545eb68df 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -67,6 +67,8 @@ /obj/item/shield/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE) if(transparent && (hitby.pass_flags & PASSGLASS)) return FALSE + if(!(REVERSE_DIR(hitby.dir) & owner.dir)) + return FALSE if(attack_type == THROWN_PROJECTILE_ATTACK) final_block_chance += 30 if(attack_type == LEAP_ATTACK) From 144dd90b53427fe7d51b77e5c0b9ff323f557c26 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 10 Apr 2026 12:32:10 -0500 Subject: [PATCH 38/70] Automatic changelog generation for PR #5983 [ci skip] --- html/changelogs/AutoChangeLog-pr-5983.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5983.yml diff --git a/html/changelogs/AutoChangeLog-pr-5983.yml b/html/changelogs/AutoChangeLog-pr-5983.yml new file mode 100644 index 0000000000..ee0046a188 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5983.yml @@ -0,0 +1,4 @@ +author: Erikafox +changes: + - {balance: shields now need to be facing a target to absorb an impact.} +delete-after: true From 75f5c6957632667bff142b673b431a17b4257428 Mon Sep 17 00:00:00 2001 From: generalthrax <139387950+generalthrax@users.noreply.github.com> Date: Fri, 10 Apr 2026 11:13:33 -0700 Subject: [PATCH 39/70] Cargo Specialty Shells (#6067) ## About The Pull Request Sprites by @MemeSnorfer image Removes all tech shell recipes, and adds the balanced versions of tech shells to cargo (with dragonsbreath being in blackmarket) Meteorshot and Frag12 didn't make the cut ## Why It's Good For The Game Shotguns are a bit of a specialty weapon, so having the shells being easily accessible is ideal for that. All tech shells will be balanced as well once https://github.com/shiptest-ss13/Shiptest/pull/6012 is merged, and are in an acceptable state to be accessible. ## Changelog :cl: generalthrax, memesnorfer add: Added Scatter Laser, Pulse Slugs, Incendiary Slugs, Ion Shells to cargo add: Added Dragonsbreath to black market del: Removed all tech shell recipes /:cl: --- .../components/crafting/recipes/weapon.dm | 72 ------------------ code/modules/cargo/blackmarket/packs/ammo.dm | 10 +++ code/modules/cargo/packs/ammo.dm | 28 +++++-- .../prefab_stacks/premade_shotshell_stacks.dm | 57 +++++++++++++- icons/obj/ammunition/ammo_boxes.dmi | Bin 8153 -> 8592 bytes 5 files changed, 86 insertions(+), 81 deletions(-) diff --git a/code/datums/components/crafting/recipes/weapon.dm b/code/datums/components/crafting/recipes/weapon.dm index fdf0d3a959..778223ef47 100644 --- a/code/datums/components/crafting/recipes/weapon.dm +++ b/code/datums/components/crafting/recipes/weapon.dm @@ -50,65 +50,6 @@ category = CAT_WEAPONRY subcategory = CAT_WEAPON -/datum/crafting_recipe/meteorslug - name = "Meteorslug Shell" - result = /obj/item/ammo_casing/shotgun/meteorslug - reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, - /obj/item/rcd_ammo = 1, - /obj/item/stock_parts/manipulator = 2) - tools = list(TOOL_SCREWDRIVER) - time = 5 - category = CAT_WEAPONRY - subcategory = CAT_AMMO - -/datum/crafting_recipe/pulseslug - name = "Pulse Slug Shell" - result = /obj/item/ammo_casing/shotgun/pulseslug - reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, - /obj/item/stock_parts/capacitor = 3, - /obj/item/stock_parts/micro_laser = 1, - /obj/item/stock_parts/cell = 1, - /datum/reagent/lithium = 5) - tools = list(TOOL_SCREWDRIVER) - time = 5 - category = CAT_WEAPONRY - subcategory = CAT_AMMO - -/datum/crafting_recipe/dragonsbreath - name = "Dragonsbreath Shell" - result = /obj/item/ammo_casing/shotgun/dragonsbreath - reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, /datum/reagent/phosphorus = 10) - tools = list(TOOL_SCREWDRIVER) - time = 5 - category = CAT_WEAPONRY - subcategory = CAT_AMMO - -/datum/crafting_recipe/frag12 - name = "FRAG-12 Shell" - result = /obj/item/ammo_casing/shotgun/frag12 - reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, - /datum/reagent/glycerol = 5, - /datum/reagent/toxin/acid = 5, - /datum/reagent/toxin/acid/fluacid = 5) - tools = list(TOOL_SCREWDRIVER) - time = 5 - category = CAT_WEAPONRY - subcategory = CAT_AMMO - -/datum/crafting_recipe/ionslug - name = "Ion Scatter Shell" - result = /obj/item/ammo_casing/shotgun/ion - reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, - /obj/item/stock_parts/micro_laser = 2, - /obj/item/stock_parts/capacitor = 2, - /obj/item/stock_parts/scanning_module = 1, - /datum/reagent/iron = 5, - /datum/reagent/uranium = 5) - tools = list(TOOL_SCREWDRIVER) - time = 5 - category = CAT_WEAPONRY - subcategory = CAT_AMMO - /datum/crafting_recipe/improvisedslug name = "Improvised Shotgun Shell" result = /obj/item/ammo_casing/shotgun/improvised @@ -120,19 +61,6 @@ category = CAT_WEAPONRY subcategory = CAT_AMMO -/datum/crafting_recipe/laserscatter - name = "Scatter Laser Shell" - result = /obj/item/ammo_casing/shotgun/laserscatter - reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, - /obj/item/stock_parts/capacitor = 1, - /obj/item/stock_parts/micro_laser = 3, - /obj/item/stock_parts/cell = 1, - /datum/reagent/lithium = 5) - tools = list(TOOL_SCREWDRIVER) - time = 5 - category = CAT_WEAPONRY - subcategory = CAT_AMMO - /datum/crafting_recipe/ishotgun name = "Improvised Shotgun" result = /obj/item/gun/ballistic/shotgun/doublebarrel/improvised diff --git a/code/modules/cargo/blackmarket/packs/ammo.dm b/code/modules/cargo/blackmarket/packs/ammo.dm index 286e8d2bef..39489b0718 100644 --- a/code/modules/cargo/blackmarket/packs/ammo.dm +++ b/code/modules/cargo/blackmarket/packs/ammo.dm @@ -379,3 +379,13 @@ cost_max = 500 stock_min = 4 stock_max = 8 + +/datum/blackmarket_item/ammo/a12gdragonsbreath + name = "Dragonsbreath Shells" + desc = "32 shells to rain a firestorm upon your enemies. Just make sure to not to catch yourself on fire!" + item = /obj/item/storage/box/ammo/a12g_dragonsbreath + cost_min = 300 + cost_max = 700 + stock_min = 3 + stock_max = 6 + availability_prob = 80 diff --git a/code/modules/cargo/packs/ammo.dm b/code/modules/cargo/packs/ammo.dm index e9c80414ba..552845e1f1 100644 --- a/code/modules/cargo/packs/ammo.dm +++ b/code/modules/cargo/packs/ammo.dm @@ -226,11 +226,29 @@ cost = 350 contains = list(/obj/item/storage/box/ammo/a12g_rubbershot) -/datum/supply_pack/ammo/techshells - name = "Unloaded Shotgun Technological Shells Crate" - desc = "Contains a box of 7 versatile tech shells, capable of producing a variety of deadly effects for any situation. Some assembly required." - cost = 210 - contains = list(/obj/item/storage/box/techshot) +/datum/supply_pack/ammo/scattershells + name = "Scatter Laser Shell Crate" + desc = "Contains a box of 32 shells modified to fire Sharplite lasers. Perfect for high-velocity crowd control." + cost = 380 + contains = list(/obj/item/storage/box/ammo/a12g_scatter) + +/datum/supply_pack/ammo/pulseshells + name = "Pulse Slug Crate" + desc = "Contains a box of 32 shells modified to fire a strong pulse projectile. Decent damage and respectable at demolishing fortifications." + cost = 300 + contains = list(/obj/item/storage/box/ammo/pulseslug) + +/datum/supply_pack/ammo/incenshells + name = "Incendiary Shell Crate" + desc = "Contains a box of 32 shells filled with an incendiary payload. Low damage but catches targets on fire." + cost = 400 + contains = list(/obj/item/storage/box/ammo/a12g_incen) + +/datum/supply_pack/ammo/ion + name = "Ion Shell Crate" + desc = "Contains a box of 32 shells filled with an electromagnetic payload. No damage but EMPs the target." + cost = 800 + contains = list(/obj/item/storage/box/ammo/a12g_ion) /* .45-70 */ diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_shotshell_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_shotshell_stacks.dm index 19ed0d0746..0f2df68d6d 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_shotshell_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_shotshell_stacks.dm @@ -67,16 +67,13 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/blank = 4) generate_items_inside(items_inside,src) -/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/incendiary - ammo_type = /obj/item/ammo_casing/shotgun/incendiary - /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/improvised ammo_type = /obj/item/ammo_casing/shotgun/improvised /obj/item/storage/box/ammo/pulseslug name = "box of 12ga pulse slugs" desc = "A box of 12-gauge pulse shells, designed for increased accuracy and destruction." - icon_state = "12gbox-rubbershot" + icon_state = "12gbox-pulse" /obj/item/storage/box/ammo/pulseslug/PopulateContents() var/static/items_inside = list( @@ -86,6 +83,58 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/pulseslug ammo_type = /obj/item/ammo_casing/shotgun/pulseslug +/obj/item/storage/box/ammo/a12g_scatter + name = "box of scatter laser shells" + desc = "A box of 12-gauge scatter laser shells, designed for delivering laser projectiles at a high velocity." + icon_state = "12gbox-scatter" + +/obj/item/storage/box/ammo/a12g_scatter/PopulateContents() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/scatter = 4) + generate_items_inside(items_inside,src) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/scatter + ammo_type = /obj/item/ammo_casing/shotgun/laserscatter + +/obj/item/storage/box/ammo/a12g_ion + name = "box of ion shells" + desc = "A box of 12-gauge ion shells, designed for delivering an electromagnetic payload." + icon_state = "12gbox-ion" + +/obj/item/storage/box/ammo/a12g_ion/PopulateContents() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/ion = 4) + generate_items_inside(items_inside,src) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/ion + ammo_type = /obj/item/ammo_casing/shotgun/ion + +/obj/item/storage/box/ammo/a12g_incen + name = "box of incendiary shells" + desc = "A box of 12-gauge incendiary shells, designed for catching targets on fire at the expense of damage." + icon_state = "12gbox-incen" + +/obj/item/storage/box/ammo/a12g_incen/PopulateContents() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/incendiary = 4) + generate_items_inside(items_inside,src) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/incendiary + ammo_type = /obj/item/ammo_casing/shotgun/incendiary + +/obj/item/storage/box/ammo/a12g_dragonsbreath + name = "box of dragonsbreath shells" + desc = "A box of 12-gauge incendiary shells, designed for shooting streams of incendiary pellets. Very hazardous." + icon_state = "12gbox-dragon" + +/obj/item/storage/box/ammo/a12g_dragonsbreath/PopulateContents() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/dragonsbreath = 4) + generate_items_inside(items_inside,src) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/shotgun/dragonsbreath + ammo_type = /obj/item/ammo_casing/shotgun/dragonsbreath + /obj/item/storage/box/ammo/a12g_dart name = "box of 12ga dart" desc = "A box of 12-gauge dart shells, for injecting targets." diff --git a/icons/obj/ammunition/ammo_boxes.dmi b/icons/obj/ammunition/ammo_boxes.dmi index ece485a5d5c3fad9dfe4982933df4243975deeab..c4431cf15f059b427981a7cf5ce092bc729b20cf 100644 GIT binary patch literal 8592 zcmZ8n2|QHY`@b`0Y-Pa#aL5zMZ_>OMW`&5B4U)1tt{EfG84)k zvV}5a-x=!+GxHz4?{E8`&*#qh++&*dcGPiQOULi?YO%-lcX~}aMXLa4IU5*K!WDERo_)_?=tmeZIUm$l9b4anG;FX%@ zDHk`LyLVjZqgQ8Qjvtp5yQ+4^=;>HcC#6yf7>&K5?12yERD_EnRMgx6;Hs4e1~}Kr z$tGYM*{q{;Kc-~##8KrtzQ_Q*vksT_YF<4uk%zzVGd+LyY(vPInLK?vHECacmE)2M z@=CffS9DFS9V7%{suH67{Nkk|N{2A+BBk1=hh?2j4f9@R9Jjj$WLK`OEDzgxc-$rd zn}ZB3m7HN2bK#*R3u8_>?=zGL3b8b`0uVDlt^xqqKf>BRM9=G{$BpYjA=d)~03iIu z({!W2Tm`<^p$WU3TV3&MtsZ9{ROojmvqg(pZ&4O57EV-AC8>Z z7b}#Ob&;@9yYHmz{`KkO^;bNAts;C}kLj{tFRQtjab%KUudCx_J;7Xs(wc&#*z##l znO;MTV~Dht+w+JJ-iqT7KGYMglr1}Cd>Wgu;eWOsoWs;9vWCfJa%mjIa+>ae+4pp> z8aElJp7rTy3nv-^qv!d8eqJd}VP^Bx(=@u4S3B?(O*Gs(5gD!gIlDjCvTfPMARtm` zZSC%jYym~XeCbE9pX-hyNtffj*6S`m8m^Gm@bvf{F7-UiBO3w9o_Os0zHrj zew`7Fu2Xm7(F^!RbQ1UR64E>mC(-Q-^!NBU<+V{h?lWwDZ+DUKE_hpUVYp(9g(?0h=v5B&*ysH0bS{5@T zi&0S^sKHsefBZVVD#fR zq>BS~dn<2D*W6s>1WPMlS#G-0AjS<}<3Ws{z!3BStQo+!9}$3|zKM-}6MHeZ`GS;j`(Ie%?WFlX5VQd zV2_zj6l^4m3?ln=FZ7cV#Qn&XpzIwRd+rZ0oF4qC{L}UFP&>ErTpPjNP|)e>lxGh3 zUo%wc-&EBZYQf2lIF>V(dFU|a`O}Nlqjh2zpRKaQ%LYB)s&yVS;~g`z8pGkL_g!X{ z&EI;1(w!k0^&OO7%BxZk#EM^MdH8CI#9$=WYcLMR8fA~|Iq1x>_4D)D4pF2?Va%I` z8lu<1fRs#%rtpbd@aI#Y5iREbDCCwgMwHzZIo7>-YH^ccTpxoj>|TMxtJKR5zV(AE#jn=?eRSocXwvi zAJc$x`Q>-n1YKJGDI>3_sHhB;atFW?mr2o&*P=7Pn4lyq@G=>6t3BL0IVo+Rov|2; zd)n^-MWWFg(BcJ5Pu#)q9W`bULY6r8&ytipqYP@%{_7Ex>1y zy8sx+oL`vy9`XA5lTDVQ2rerr#P}q8Mbs5+l^LjFMvwuuCx8u4HV?tt#O%6b(gbMn zAH;LG`6h|qE1iCF)Ah`KQQ%9>lP0sD=XlMT&^g|3(+d!zQZtNK#yIo=HyQ^+#c@Cs zS;JY$eRkj+M?O~G&d@0wR;5?m_$=P$2QMU^6d2q&J9(g`wC+AYZ#sWr{`|eUIob$t zJ#lN)e=Pab*?Qa$tbpaeCvTBJV4m|KHLsNz;{;yrP1ZI_R3a zeDgXd{)YepN6_4}!~+z<=|fDti7Ys+pAox3doNM_cQ8Jb|6y3+ZLwyu%HdKEHZb34 zMSW#uCAGBw?xp|c(z;NWZ26+$gErKOmK(u7yw*u=~&l>u#xnKd}-2VF)w88uq;{to$ln=LPyEcxj&a9a>Caccs$q zs?slUOzfj|p6ZkO+-Y0>;HI{ zsJ+>aneqM6{W@q*8a;Az{z8tKm=fuKcrTC25=`S@07_$%72g-$-x>#tCnl_E6(jad zo0(OOH_pNqd&ydYa-SJmN#Wq)09`X8R!v2XF8)pTe?N$}h~#H48Mjyp7cW@_!dl-QET&6N8#-XI1J+`Y8h(YFhWD#_0ZO3V9ox^8r|-n~Xtyz5 zvV!z~TKu5RfkS2&K>AB>-w-o#(syPqvnw(eD};&77j{b~zybM{?LIspt92t<&AEB7|Yl+}TyZYkwiB)w4Cw63b!47Ep|eJbxl zyax;)`gVA8AxA&oMV9*jE(<|dl2_<fXP!{ z^<3-Q>YDK5+ufw=7_VFLfc=MmNej7tjN-(+F#~zNL1PzG<{;O|N$g8C6#BqQ_v|9x z?t?bc1^Z?DqfF_VJ}94S!~G-ALRbQqhcOY_9L_Ob4KgoQD#@6 zjsywYCJfk~%nBFp(_W;Z8kRT6O@J|n+60h@nMVPYkR49*}&QbPAXeB+d!UGs)|^3 z-uC4dd%KWIIB*cRFn~-J%z>-aTa76Yu5*|TPMjX0{SlVai#ysF9Bs659s-~s+`Fvs zy^ZPZC2LsCq+nw?MZ(aB^@F#^;8ck*b*#U{%=EZ#D2mRVG(bH4yC@$$marFmKdyA} z8)sS6G`H=@#RjpQq`29m-XBl;7US6&w#-1w;^!to>2N_ND5nQ%basOZ*aT0nTW&c? zFnABifan14UmeC=ma1SB&5JuyH`HY7osE%wF|&f7`2GC>BbF4+mk}#Ym~5t4*>ILW z0Vy=m@SHI+=gC@2(bu#~e(#?<41aTbiSweqc?jw66e}^OB~p4?HYYAV&+xtEe8b1h zaK~F5P+I>_jCx9JmbliERHc0kCi@*4Lj=NbReI17 zvWh#alNL}@om|mEL89EqM=0&y?yTDa{LQ)uu+MmPbAWz%{M3pspWL?=Ml=elAO$ig zRv*CmY2GfU>S_7tU{rs`E5gzF&0k9|KPh9oS0ubr+{4s0Zr0Aa> zQS3QB?<6=cT!9S|0_V#FB;TuX?_T57W6)4L{t?KaNeW;;Jz7q5v?WgYAv=x+u16WL1TZ7n!^u0?agPl{c`JT+q~ zMn!N|l*^*Dk_re?qnq4SC;`OBq^pN>c&K1ZcJoibhzKg(RKv);Xa=mcR9JjI&LW16 zKc1g?eaI+D?L8L9#C;R*$aV#g#WCBHIWac0L`FYpAFHCG($6k4I`tS+uC-WFLcB@7 z2yOG=c@H)sT43L-rZW}o3v062Y5}``T=Pd4(d)6(vVbto@6>myc%^);{ta6F-p-Y1 zHpG1<``y!+Sca3|2;@Wb#Q{4wU|HLP`qu0Wq03Cmb_l9TE!3gkJLY@X-%q!`$ISVn_X;V_xd1%G+s91|5Hgj}Fn3sGsLd z5=#hCRp58ZZ$3bB{-T|IPw*OCy>(mL5KhP-tBz}r_F?)pr0`V-;V!$YHvZ*>Iy zCvBcLEKdO>zjBoE61&fW%C{EH6V@%&z@|mq_ph`YylwTTOXa`!qCWQ2qHj!R2CW@cE46e&0UMu;*i zE;j31I^2p3C~%YV@wU`T7(V>Iv1|WOiI=X_{2w!P4ssSpGIPA^(Jp%TLL=VGsRf|Tm~|h9+}#gI-VrAh*_8;$2aeT& zK*vNyBzrAV<7aQMW&&(t0EDatNx@f5)lloDoYZZf%=%VwBc^iMLufbcpmXF$4@LEU zJ8)T;V`Gv5N3t3i9_HT`yvN(~ENe{{z$VL-g2SIc!X*IFlZY=GVXYLwoTs>^3+c6t z8KchV*?1PDPfmqJ)**#+EZmy8ziL5ROBx@njXdTigi}%R&x(pYSTm!$#QnO0^`Pzy zS2RuJW`y;9n-6RT`6}5nhaWk@exP83K*#>*7p6Iyz~Zi|8K?P*syUgDAVa^$<t>%wZ=fK6A>g5j|beye4)KL2#wP4@b}p7@`udN*RMq0i<|95ye0NMW^G zl?5x7QIMY-gTZcMug-4{4@Ygy;dMe(MXmBJJYCb1yOp7U8QU+gd3j-_3r1 zap6F=-_}~28&@m1dty+4MG1oNh8B)LNs50Ad|kv5MCP=_!l%@QZz{eB1d2(4+^$vj zofZ!k#I`gwE)Q8~wslXdG-tIHcv4d6LVVI~2?aAmJL+Of-o$KD>7 znDYzfYEk$5RrH(4meO?omW~;EQ&{49@SYy?=zX-C*cbfISthU8i!2K|zr2DA+|LVr zvjc*mBY@_Rpf(6?NcCR7r02u7t9sWzuCy#!_s2?~gL{${3|8>SAvFULs`#RW5y=FG z4cLTEI~5x{Ul;jn&6qw`A38|r%31gitZAaR{=C)N-lusfr_IW}V9*!Kg!U{dA1y6I> z!G~z?%TQz$A}qUQ`4Gb0wO!^&OWWQk-$AMul5MQYmbJ5=*=a98UO;g|7zv1(@VHtx z-s0$@cQLyC!Y=Q%I#@UxpSnHsfz!+~>Ya6(4F7?rH;RujB58a(u{XLhN?uf*O}VM{ z5!z_-0-gAjLi!?WDc|5p4anSi62H@@x`U4(D;1<6vrb996=5WCqWt4ULwPPwkw{YX z(4^EcZ8>1%=a>kdOxd+>P`APCKG}%?PLwrWb{}%7k9ZgGj~Edm{gN%@{&?BGx|SD4 zkM`~uq4_;GBxSAknD+WEKVfoGrKJT%aD*95#XSwDKaf9#QKer6@6R~B4rIlA(!DGW zJR^PqF zz(_T~s0~}=vn_!{1z>~y5giM;w)agxvx^8e1p>tCS8v-c?(x72{p^j!r?o z;yYrG^-@gVpBtMP1vHCF0cpZX3|Io%V=sw>A(Lz>)|`uiCTeXb8dYWp2GK80h;4$4 z1C{b)6H70B>syZ{cZ^phk2XkxMp~{5!Y9tPU>U!oEm*Qp zaiQ5aC0AB`pL-PX?@w9dO0y@en>!4`Kdbdj)G~}UN5X#n94Kkm^mWJHfXq_3lqEQ% z?noKXcrwK?wwgqd$)1q$+cPu5B<(wi*x@3}i`Ew9MI*ZY6!v&lTY^{cd+jg7V2IXk zh{5!w&b9ca60OkSDdP7E@GedG^$rYS2W_}Y4M^Mh64FAs?g)g`3%mztyQ1HdVTc#P zWsN5|@$AWmAE6_YWqTlVJ&S$o#E;*;3Iglg${_X4hg)6jn=`~QwCrGV;1|%H2-~y3 zeQnC`*xe%e{zEVI#$NFf(y3wY)Nr!pDPj46LoYpUM|yzx^uLo_G*DbXz_NgUZ@XEV z9400Zv^h;2JLKN-d;49)Jz)A+z4R>;&HGrheZwDX2bURYDj`^d`h>!5ww-qc<` z3JwHx=v~MbexxJJC_CPQGT37kR_)PdYCA3rC_FwdxnsDTR+!ohQE;LE>QLd$@XV_z zxU6vrkgU|R#YGT+(70BAj`)1UTqaOYuHGqJN!pOncqY*$E&^*RJjHwHVCyY`_uZWM z#UZ;{ztcQYxriW)x=n72lnwTW3P9NiT*dR8%SmTS-g5rgX=DG*+$Y*{BlUfn^lgh{ zUmp&mrMwYJ^n%;wLz9`4XjBAe@-Zx!!B^Fm}>!z%&dPbLPpn3A`QNhMbOuf<3Q6|2u z9>imfKdR#twn2<|!|0Am;0PpYdEze(^5+Deh2_|OM`RLRFwXA4radz7oO^=xj*={e}AvbI6M z-M7`Y2PMf2psd*(_YQa*ZG){q+T<)|wXOj-gKkeeC1Q7-vf-%QBQZdZpFwIH%kYkY zvec)JgUVZ=-FR`p?7&b1%6hqArM!VHg(QceaPgsa{Y~UBXKA*c#Lci?5XAmE(2YG&;~{gYx0`FTvjWF47sqC=0L`wd_SP^CV^A7;BnfQUgIt0z;Zz?XyA;T3?#h z!-iF;sGuO#8_-uBamR5b1T9E%{zxg#u&YH)g5Om*Jq(Dd4=w0+lV<%QjThp( zxJ)1R)N_Di$^rE+6d1x0hUo4davw{8aOC<9l?X^d0)N%;WElOOrb3;M`A6@T79gpc z8{OJj%T@a)D$B|qG3`&MA;AO+rPRWDyc>Vz6T3(;oMVCZ(1<{=v(*`wZvKBgh8jO?5b z1_$+Z*PgDQ__i&yEEhU4kpC%O1I)<3`Qor;r*xH$>SBy(0jybDN+V7SBX~-C<$}K}<%>`1L;6V|3h}$B{T|A+edwXj29yq*e=$d{S zLW+^RvygdmgjxzRSUE5a`@a+b-&rQJLG4%@d$T(coRACYoh@5#x`_i0$jl?o=PSIB zmBj@mpqVC>L^mjJplcHBQx=T0HMdUSidsFHA+hXG-94Uk2 zgU=_VMaRmjA888bGMQ2}(ksh!07caLA=jwTb5@aq;T5m=nw_)@+`rpwDjk*3*ky+rN5_f z4S2K)Rf-5V~W*XVPd>^*qoT4h_mj ziA3rS?4-3U@4Xit=^p~@+=a%2KJ`mk4>9|!-DiJj#SvsK43AV_eC3;H{tNdx+nj^6 zXlXZY7_a$Ki0{8!$kBW&R=C|h%XnCT@B%<@>_{ugY|x~VXZzkXFOK#R zSUyFyF=F!2J1r{#Z-?f$B1G3qYaf7aopRQ~pc+g;d~2KUjsUu3Qs_nKEil5d0p+X| z18W4h+tW%8-OSN%KxL`Q-1a;6RpV>inQA%bswP2X1Lv{V1_SHzbtv+uKi|OYTJUS- z8=-XS9v=RpFEe|^WYu;+60c9I82x)-PYh&U_xwqw4$^0H01&^Z)<= literal 8153 zcmZWu2{=@5+dng7(Acw!j3^=5_hkk{t1YsxiL4=e%p#;sl#(rD$-ZVun;B6g`<4m~ zjgUPu3})sVz3=~e-|zdL>pJsXXP)~!%YAjd2+6$Q z>=5QZ>#v>Km^Wfp=WR_}TU+O&E!TSr?>L)ZI40FoaLvKdEjlSxThl-t6`=2ic15FRP3PGQ3V4nUhU&Y)$~=3J#F0%i^v@aZs0VF{;FVbFFXJ!BI7vJ8_NrI3{JRt z8YSFtV~qRECLTGWAnBu{a_;f>ke;0;SztWrnx+>qf?FLffz;CR1OOi!FC3uO!+k*5 zF7~~V(VfKFacNP_8v*WDQL2t-Q7;Q0m@C0^11gDZ3a%DsN(!>qR+cqp1S^=z0)=0&umO;> zUwi-nY;)b#Aspo$=5@_4B-}6fDgZ?1KF)LvE<}nX)&8_kqhxcf7eqf7esNH$vhlfQ ztRHJ`+q1Z3z?DK$f}K|O(+*?%t+Un_!?STCbv?Z$!XTz0s#xh0M@I3w<=5?kvkk;0 z7qi~mHD?-b)ho-7rx(f`4dRxJR3iSI+qA&wepz&rb5Z9(+4{Z z2zT0!7~T)ZWl0|n34hP=MR(|(Uvqw)^O3QU#!PAZWo^FI*aIH1so?vILL6n1CT8jv zjUTU!Ij^FX)Kh!Bs}t1xkVy~q%F-sd)u*P}e(HDoi4WH!?Ls;gtd-@YZoX@fH>&t$ zwf(UA_Hg=T>%}QngM8!RYgSUyVfh8GUfD{qi~HLPysb4})bE2)OrLuQgbMypS@4rV z)kHP&#Kw|qQeO-VpUI|eUiR$`vM}U;hCa)Qg30{sPKs2ueP0UtP$4;eYM4)fJD?HJ2V*7lF9FyWERsY*QapLOlPDcp4I8g z+u`^_zfx?^T9hnHgais7ik68!_NVTbd}51^Qs?p;S)vYwJGI?~Luqv9;@a&NN|gT5 za?29@9=9;H##iu(dGtdrzq2|V0uN=rMy(YE#^x+a0t`^RZPsqeq4(kdAkKXTWn>$j zyZrQkyFlmX4r}s_VJ>zHtzOk1fUyk6_Q5bE6m;;!S)nI;2gA}=85-Z6u9r8Al>hQ$ zy*HxPV|@7NB-Y~M<{$mMyzD!F+d_@PQg@kk#LoqdS?`gLuOok|{q4U$noP-QK6&jN zz4#!=f^;lfh~{QVNk>tJZ7ElLa0opuy{OIyJCUC^=Y(&~ni9v-X)+)JD7pm{odAA& zHxYE?4e1H(L^@6X3GIU^`&!?LAqkc`2PY@_J3oyB91lQH7^2dyqZ!~90DLb5R(;Nt zL^=n(zW&)Vs?<~x^4^g37MhcHS72&l;?pM=Mb40zh^FIqY~2Z?qoeUs+DbbjaEd4n z?^5k--M}(hWgrDQ&-HY7t^#jNm zHNez-QE}{z2c=biS|ZU9%8rKd?g+sDv;doA7^KdsxCjuK4b4C6=k|vwo(dgUN|=ll z%3llvT=9_k9dYE?T=Lpk^c5f*He}hIaH-CP7uk9R0As~*r!TX8FlE{0M27OcGi0-p zstWGmJvmqRu3k{Iu=UDK-WPjMQ_frB9VbK;7k7~ywQV0|E0x#B!7e$+ocRBj zmQ#5yHM%h9`h)1f)y>O@GdM}s(+VNxe|FJd`&Ga8hkbQ-VWEGTka+e=5b*F6^_wQl zZ^hQ*Re<6Km4Jm7lZ^N+a6n-iOd^<4rzs?Ujo|iJHmoJaJXymgZj+{~h;`;#> zLkRD-09*)CHvrs8f^J^D2c6$Of$Y2j+>zz~96nekp&a2609u9r`8)AIDNumu=7$U?Q-{I0hD#mxu4TN#4nf;t$9rTzuLl3d4y(hF{7*U|99BwBVp&WKZOnS zaIPg#-@f?zD1#pI)c5#KOWu;~?WIz=wO``tbL--bFWEsi*JFYj

SsI~`_u!GVF# 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 nc)@ Date: Fri, 10 Apr 2026 13:34:46 -0500 Subject: [PATCH 40/70] Automatic changelog generation for PR #6067 [ci skip] --- html/changelogs/AutoChangeLog-pr-6067.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-6067.yml diff --git a/html/changelogs/AutoChangeLog-pr-6067.yml b/html/changelogs/AutoChangeLog-pr-6067.yml new file mode 100644 index 0000000000..7e0f46556d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6067.yml @@ -0,0 +1,6 @@ +author: generalthrax, memesnorfer +changes: + - {rscadd: 'Added Scatter Laser, Pulse Slugs, Incendiary Slugs, Ion Shells to cargo'} + - {rscadd: Added Dragonsbreath to black market} + - {rscdel: Removed all tech shell recipes} +delete-after: true From b495e0f73df4e654bfb34805d8af7bfc82638490 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 11 Apr 2026 01:53:40 +0000 Subject: [PATCH 41/70] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-5983.yml | 4 ---- html/changelogs/AutoChangeLog-pr-6067.yml | 6 ------ html/changelogs/archive/2026-04.yml | 7 +++++++ 3 files changed, 7 insertions(+), 10 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-5983.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-6067.yml diff --git a/html/changelogs/AutoChangeLog-pr-5983.yml b/html/changelogs/AutoChangeLog-pr-5983.yml deleted file mode 100644 index ee0046a188..0000000000 --- a/html/changelogs/AutoChangeLog-pr-5983.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Erikafox -changes: - - {balance: shields now need to be facing a target to absorb an impact.} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-6067.yml b/html/changelogs/AutoChangeLog-pr-6067.yml deleted file mode 100644 index 7e0f46556d..0000000000 --- a/html/changelogs/AutoChangeLog-pr-6067.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: generalthrax, memesnorfer -changes: - - {rscadd: 'Added Scatter Laser, Pulse Slugs, Incendiary Slugs, Ion Shells to cargo'} - - {rscadd: Added Dragonsbreath to black market} - - {rscdel: Removed all tech shell recipes} -delete-after: true diff --git a/html/changelogs/archive/2026-04.yml b/html/changelogs/archive/2026-04.yml index 52680c646c..19572ff38f 100644 --- a/html/changelogs/archive/2026-04.yml +++ b/html/changelogs/archive/2026-04.yml @@ -73,3 +73,10 @@ 2026-04-10: SapphicOverload: - refactor: Refactored IPCs again +2026-04-11: + Erikafox: + - balance: shields now need to be facing a target to absorb an impact. + generalthrax, memesnorfer: + - rscadd: Added Scatter Laser, Pulse Slugs, Incendiary Slugs, Ion Shells to cargo + - rscadd: Added Dragonsbreath to black market + - rscdel: Removed all tech shell recipes From 8e4b45fd747c765ee3332ca22068df4805ac19e7 Mon Sep 17 00:00:00 2001 From: generalthrax <139387950+generalthrax@users.noreply.github.com> Date: Sat, 11 Apr 2026 19:56:48 -0700 Subject: [PATCH 42/70] Remove Mentors and all related systems (#6085) ## About The Pull Request Completely removes mentors, mentorhelp, and all related systems from the game. Config / database / discord stuff will need to be done separately This may need a thorough review, it functioned well on compile but I'm unsure if it is complete enough ## Why It's Good For The Game Mentors are very vestigial in the modern Shiptest staff apparatus, and removing them fully has been on the list of the admin team for a long while. A vast majority of our admins are very knowledgeable contributors, and directing the other half of technical questions to more easily accessible tickets is preferred to this very outdated and unneeded system. ## Changelog :cl: del: Removed mentors /:cl: --------- Signed-off-by: generalthrax <139387950+generalthrax@users.noreply.github.com> --- check_regex.yaml | 2 +- code/__DEFINES/admin.dm | 2 - code/__DEFINES/chat.dm | 1 - code/__DEFINES/span.dm | 1 - code/__HELPERS/_logging.dm | 5 - code/_globalvars/bitfields.dm | 1 - code/_globalvars/lists/mobs.dm | 2 - code/_globalvars/logging.dm | 2 - .../configuration/entries/general.dm | 6 - code/datums/keybinding/admin.dm | 17 --- code/datums/world_topic.dm | 3 - code/game/atoms.dm | 2 - code/game/world.dm | 1 - code/modules/admin/admin.dm | 1 - code/modules/admin/admin_ranks.dm | 2 - code/modules/admin/admin_verbs.dm | 6 +- code/modules/admin/holder2.dm | 4 - code/modules/admin/verbs/adminhelp.dm | 7 - code/modules/admin/verbs/diagnostics.dm | 3 +- code/modules/admin/verbs/mentors_edit.dm | 60 -------- code/modules/admin/verbs/randomverbs.dm | 3 - code/modules/admin/verbs/secrets.dm | 12 -- code/modules/client/client_procs.dm | 17 --- code/modules/client/verbs/ooc.dm | 5 - code/modules/client/verbs/who.dm | 8 - code/modules/mentor/holder2.dm | 50 ------ code/modules/mentor/mentor_ranks.dm | 60 -------- code/modules/mentor/mentor_verbs.dm | 14 -- code/modules/mentor/verbs/dementor.dm | 17 --- code/modules/mentor/verbs/mentor_memo.dm | 144 ------------------ code/modules/mentor/verbs/mentorhelp.dm | 94 ------------ code/modules/mentor/verbs/mentorpm.dm | 85 ----------- code/modules/mentor/verbs/mentorsay.dm | 24 --- interface/stylesheet.dm | 3 - shiptest.dme | 9 -- strings/tips.txt | 2 +- tgui/packages/tgui-panel/chat/constants.js | 8 - tgui/packages/tgui/interfaces/Secrets.js | 6 - 38 files changed, 4 insertions(+), 685 deletions(-) delete mode 100644 code/modules/admin/verbs/mentors_edit.dm delete mode 100644 code/modules/mentor/holder2.dm delete mode 100644 code/modules/mentor/mentor_ranks.dm delete mode 100644 code/modules/mentor/mentor_verbs.dm delete mode 100644 code/modules/mentor/verbs/dementor.dm delete mode 100644 code/modules/mentor/verbs/mentor_memo.dm delete mode 100644 code/modules/mentor/verbs/mentorhelp.dm delete mode 100644 code/modules/mentor/verbs/mentorpm.dm delete mode 100644 code/modules/mentor/verbs/mentorsay.dm diff --git a/check_regex.yaml b/check_regex.yaml index 95626cddae..bb7f28e507 100644 --- a/check_regex.yaml +++ b/check_regex.yaml @@ -38,7 +38,7 @@ standards: - exactly: [ - 260, + 259, "non-bitwise << uses", '(?" + str + "") #define span_memo(str) ("" + str + "") #define span_memoedit(str) ("" + str + "") -#define span_mentornotice(str) ("" + str + "") #define span_message(str) ("" + str + "") #define span_mind_control(str) ("" + str + "") #define span_minorannounce(str) ("" + str + "") diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm index 63dff75ee8..818ec26d36 100644 --- a/code/__HELPERS/_logging.dm +++ b/code/__HELPERS/_logging.dm @@ -76,11 +76,6 @@ if (CONFIG_GET(flag/log_adminchat)) WRITE_LOG(GLOB.world_game_log, "ADMIN: DSAY: [text]") -/proc/log_mentor(text) - GLOB.mentorlog.Add(text) - if (CONFIG_GET(flag/log_admin)) - WRITE_FILE(GLOB.world_game_log, "MENTOR: [text]") - /* All other items are public. */ /proc/log_game(text) if (CONFIG_GET(flag/log_game)) diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index 72340f8bdb..f702320f34 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -24,7 +24,6 @@ DEFINE_BITFIELD(admin_flags, list( "DBRANKS" = R_DBRANKS, "DEBUG" = R_DEBUG, "FUN" = R_FUN, - "MENTOR" = R_MENTOR, "PERMISSIONS" = R_PERMISSIONS, "POLL" = R_POLL, "POSSESS" = R_POSSESS, diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index 30fe48136d..89031817f5 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -2,8 +2,6 @@ GLOBAL_LIST_EMPTY(clients) //all clients GLOBAL_LIST_EMPTY(admins) //all clients whom are admins GLOBAL_PROTECT(admins) GLOBAL_LIST_EMPTY(deadmins) //all ckeys who have used the de-admin verb. -GLOBAL_LIST_EMPTY(mentors) -GLOBAL_PROTECT(mentors) GLOBAL_LIST_EMPTY_TYPED(directory, /client) //all ckeys with associated client GLOBAL_LIST_EMPTY(stealthminID) //reference list with IDs that store ckeys, for stealthmins diff --git a/code/_globalvars/logging.dm b/code/_globalvars/logging.dm index 54e378f673..4a42236624 100644 --- a/code/_globalvars/logging.dm +++ b/code/_globalvars/logging.dm @@ -73,8 +73,6 @@ GLOBAL_LIST_EMPTY(OOClog) GLOBAL_PROTECT(OOClog) GLOBAL_LIST_EMPTY(adminlog) GLOBAL_PROTECT(adminlog) -GLOBAL_LIST_EMPTY(mentorlog) -GLOBAL_PROTECT(mentorlog) GLOBAL_LIST_EMPTY(active_turfs_startlist) diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index 5a5f443a71..60b08d14a6 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -191,12 +191,6 @@ /datum/config_entry/flag/load_legacy_ranks_only //Loads admin ranks only from legacy admin_ranks.txt, while enabled ranks are mirrored to the database protection = CONFIG_ENTRY_LOCKED -/datum/config_entry/flag/mentors_mobname_only // Only display mob name to mentors in mentorhelps - protection = CONFIG_ENTRY_LOCKED - -/datum/config_entry/flag/mentor_legacy_system // Whether to use the legacy mentor system (flat file) instead of SQL - protection = CONFIG_ENTRY_LOCKED - /datum/config_entry/string/hostedby /datum/config_entry/flag/norespawn diff --git a/code/datums/keybinding/admin.dm b/code/datums/keybinding/admin.dm index eb5d37639e..10d9722eaa 100644 --- a/code/datums/keybinding/admin.dm +++ b/code/datums/keybinding/admin.dm @@ -19,23 +19,6 @@ user.get_admin_say() return TRUE -/datum/keybinding/admin/mentor_say - hotkey_keys = list("F4") - name = "mentor_say" - full_name = "Mentor say" - description = "Talk with other mentors." - keybind_signal = COMSIG_KB_ADMIN_MSAY_DOWN - -/datum/keybinding/admin/mentor_say/down(client/user) - . = ..() - if(.) - return - user.get_mentor_say() - return TRUE - -/datum/keybinding/admin/mentor_say/can_use(client/user) - return check_mentor(user) - /datum/keybinding/admin/admin_ghost hotkey_keys = list("F5") name = "admin_ghost" diff --git a/code/datums/world_topic.dm b/code/datums/world_topic.dm index f5324b8076..906f236399 100644 --- a/code/datums/world_topic.dm +++ b/code/datums/world_topic.dm @@ -167,9 +167,6 @@ var/list/afkmins = adm["afk"] .["admins"] = presentmins.len + afkmins.len //equivalent to the info gotten from adminwho - var/list/mnt = get_mentor_counts() - .["mentors"] = mnt["total"] // we don't have stealth mentors, so we can just use the total. - .["gamestate"] = SSticker.current_state if(key_valid) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index bdc24d3d4d..412e3c7958 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -1439,8 +1439,6 @@ log_shuttle(log_text) if(LOG_RADIO_EMOTE) log_radio_emote(log_text) - if(LOG_MSAY) - log_mentor(log_text) if(LOG_LOOC) log_looc(log_text) if(LOG_SUBTLER) diff --git a/code/game/world.dm b/code/game/world.dm index 9bd8ebbac6..0fdd079133 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -43,7 +43,6 @@ GLOBAL_VAR(restart_counter) config.Load(params[OVERRIDE_CONFIG_DIRECTORY_PARAMETER]) load_admins() - load_mentors() //WS edit - Mentors //SetupLogs depends on the RoundID, so lets check //DB schema and set RoundID if we can diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index ac7657e007..0d2886f3f5 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -105,7 +105,6 @@ body += "OOC" body += "PRAY" body += "ADMINHELP" - body += "MENTORHELP" body += "DEADCHAT" body += "(toggle all)" diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm index 09a456ff80..594352b502 100644 --- a/code/modules/admin/admin_ranks.dm +++ b/code/modules/admin/admin_ranks.dm @@ -59,8 +59,6 @@ GLOBAL_PROTECT(protected_ranks) flag = R_BUILD if("ADMIN") flag = R_ADMIN - if("MENTOR") - flag = R_MENTOR if("BAN") flag = R_BAN if("FUN") diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 3ee9054952..b38b46bee5 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -4,8 +4,6 @@ GLOBAL_LIST_INIT(admin_verbs_default, world.AVerbsDefault()) GLOBAL_PROTECT(admin_verbs_default) /world/proc/AVerbsDefault() return list( - /client/proc/cmd_mentor_say, - /client/proc/mentor_memo, /client/proc/deadmin, /*destroys our own admin datum so we can play as a regular player*/ /client/proc/cmd_admin_say, /*admin-only ooc chat*/ /client/proc/hide_verbs, /*hides all our adminverbs*/ @@ -222,7 +220,7 @@ GLOBAL_PROTECT(admin_verbs_debug) ) GLOBAL_LIST_INIT(admin_verbs_possess, list(/proc/possess, /proc/release)) GLOBAL_PROTECT(admin_verbs_possess) -GLOBAL_LIST_INIT(admin_verbs_permissions, list(/client/proc/edit_admin_permissions, /client/proc/edit_mentors)) +GLOBAL_LIST_INIT(admin_verbs_permissions, list(/client/proc/edit_admin_permissions)) GLOBAL_PROTECT(admin_verbs_permissions) GLOBAL_LIST_INIT(admin_verbs_poll, list(/client/proc/poll_panel)) GLOBAL_PROTECT(admin_verbs_poll) @@ -305,8 +303,6 @@ GLOBAL_PROTECT(admin_verbs_hideable) add_verb(src, /client/proc/togglebuildmodeself) if(rights & R_ADMIN) add_verb(src, GLOB.admin_verbs_admin) - if(rights & R_MENTOR) - add_verb(src, GLOB.mentor_verbs) if(rights & R_BAN) add_verb(src, GLOB.admin_verbs_ban) if(rights & R_FUN) diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm index 59f02fb63f..2909e978dc 100644 --- a/code/modules/admin/holder2.dm +++ b/code/modules/admin/holder2.dm @@ -89,10 +89,6 @@ GLOBAL_PROTECT(href_token) deadmined = FALSE if (GLOB.directory[target]) associate(GLOB.directory[target]) //find the client for a ckey if they are connected and associate them with us - if(!GLOB.mentor_datums[target]) - new /datum/mentors(target) // If we don't have a mentor datum, make a new one - var/datum/mentors/mentor = GLOB.mentor_datums[target] - mentor.associate(GLOB.directory[target]) // All admins get free mentor /datum/admins/proc/deactivate() if(IsAdminAdvancedProcCall()) diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 15e6541892..2fd59003d3 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -618,13 +618,6 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) current_ticket.add_interaction("[key_name_admin(usr)] opened a new ticket.") current_ticket.close() - //Extremely simple system of suggesting mentorhelp instead of adminhelp - var/msg_lower = lowertext(msg) - if((findtext(msg_lower, "how to") == 1 || findtext(msg_lower, "how do") == 1) && GLOB.mentors.len) - if(alert("\"[msg]\" looks like a game mechanics question, would you like to ask in mentorhelp instead?", "Adminhelp?", "Yes, mentorhelp", "No, adminhelp") == "Yes, mentorhelp") - mentorhelp(msg) - return - new /datum/admin_help(msg, src, FALSE) // diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index b30313b3b7..b2a6d1e0e7 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -72,12 +72,11 @@ if(!src.holder) return - var/confirm = alert(src, "Are you sure you want to reload all admins and mentors?", "Confirm", "Yes", "No") + var/confirm = alert(src, "Are you sure you want to reload all admins?", "Confirm", "Yes", "No") if(confirm !="Yes") return load_admins() - load_mentors() BLACKBOX_LOG_ADMIN_VERB("Reload All Admins") message_admins("[key_name_admin(usr)] manually reloaded admins") diff --git a/code/modules/admin/verbs/mentors_edit.dm b/code/modules/admin/verbs/mentors_edit.dm deleted file mode 100644 index bf5d9bac11..0000000000 --- a/code/modules/admin/verbs/mentors_edit.dm +++ /dev/null @@ -1,60 +0,0 @@ -/****************************************** -It's like permissions panel, but for mentors, -also probably less secure, but honestly dude -its mentors, not actual dangerous perms -******************************************/ -/client/proc/edit_mentors() - set category = "Admin" - set name = "Mentor Panel" - set desc = "Edit mentors" - - if(!check_rights(R_PERMISSIONS)) - return - if(!SSdbcore.IsConnected()) - to_chat(src, span_danger("Failed to establish database connection.")) - return - - var/html = "" - html += "Add a Mentor\n" - html += "\n" - html += "\n" - - var/datum/DBQuery/query_mentor_list = SSdbcore.NewQuery("SELECT ckey FROM [format_table_name("mentor")]") - query_mentor_list.Execute() - while(query_mentor_list.NextRow()) - html += "\n" - - html += "
Mentor CkeyRemove
[query_mentor_list.item[1]]X
" - - var/datum/browser/popup = new(usr, "mentoredit", "

Mentor Panel
", 1000, 650) - popup.set_content(html) - popup.open(0) - -/client/Topic(href, href_list) - ..() - if(href_list["mentor_edit"]) - if(!check_rights(R_PERMISSIONS)) - message_admins("[key_name_admin(usr)] attempted to edit mentor permissions without sufficient rights.") - log_admin("[key_name(usr)] attempted to edit mentor permissions without sufficient rights.") - return - if(IsAdminAdvancedProcCall()) - to_chat(usr, "Mentor Edit blocked: Advanced ProcCall detected.") - return - - if(href_list["mentor_edit"] == "add") - var/newguy = input("Enter the key of the mentor you wish to add.", "") - var/datum/DBQuery/query_add_mentor = SSdbcore.NewQuery("INSERT INTO [format_table_name("mentor")] (`ckey`) VALUES ('[newguy]')") - query_add_mentor.Execute() - message_admins("[key_name(usr)] made [newguy] a mentor.") - log_admin("[key_name(usr)] made [newguy] a mentor.") - SSredbot.send_discord_message("mentor","[newguy] is now a mentor.","mentor") - return - - if(href_list["mentor_edit"] == "remove") - var/removed_mentor = href_list["mentor_ckey"] - var/datum/DBQuery/query_remove_mentor = SSdbcore.NewQuery("DELETE FROM [format_table_name("mentor")] WHERE ckey='[removed_mentor]'") - query_remove_mentor.Execute() - message_admins("[key_name(usr)] de-mentored [href_list["mentor_ckey"]]") - log_admin("[key_name(usr)] de-mentored [href_list["mentor_ckey"]]") - SSredbot.send_discord_message("mentor","[href_list["mentor_ckey"]] has been de-mentored.","mentor") - return diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index f36f372cb8..18b5c3e2cb 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -189,9 +189,6 @@ if(MUTE_ADMINHELP) mute_string = "adminhelp, admin PM and ASAY" feedback_string = "Adminhelp" - if(MUTE_MENTORHELP) - mute_string = "mentorhelp" - feedback_string = "Mentorhelp" if(MUTE_DEADCHAT) mute_string = "deadchat and DSAY" feedback_string = "Deadchat" diff --git a/code/modules/admin/verbs/secrets.dm b/code/modules/admin/verbs/secrets.dm index 4b78a872a3..903a5e6f09 100644 --- a/code/modules/admin/verbs/secrets.dm +++ b/code/modules/admin/verbs/secrets.dm @@ -63,18 +63,6 @@ popup.set_content(dat) popup.open() - //WS Begin - Mentors - if("mentor_log") - var/dat = "Mentor Log
" - for(var/l in GLOB.mentorlog) - dat += "
  • [l]
  • " - if(!GLOB.mentorlog.len) - dat += "No mentors have done anything this round! Not like they do much either way." - var/datum/browser/popup = new(holder, "mentor_log", null, 300, 430) - popup.set_content(dat) - popup.open() - //WS end - if("show_admins") var/dat = "Current admins:
    " if(GLOB.admin_datums) diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 1c6f86cf4e..3cfc7ac5ae 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -81,15 +81,6 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( // Log all hrefs log_href("[src] (usr:[usr]\[[COORD(usr)]\]) : [hsrc ? "[hsrc] " : ""][href]") - // Mentor Msg - if(href_list["mentor_msg"]) - if(CONFIG_GET(flag/mentors_mobname_only)) - var/mob/M = locate(href_list["mentor_msg"]) - cmd_mentor_pm(M,null) - else - cmd_mentor_pm(href_list["mentor_msg"],null) - return - //byond bug ID:2256651 if (asset_cache_job && (asset_cache_job in completed_asset_jobs)) to_chat(src, span_danger("An error has been detected in how your client is receiving resources. Attempting to correct.... (If you keep seeing these messages you might want to close byond and reconnect)")) @@ -259,11 +250,6 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( var/datum/admin_rank/localhost_rank = new("!localhost!", R_EVERYTHING, R_DBRANKS, R_EVERYTHING) //+EVERYTHING -DBRANKS *EVERYTHING new /datum/admins(localhost_rank, ckey, 1, 1) - //Mentor Authorisation - var/datum/mentors/mentor = GLOB.mentor_datums[ckey] - if(mentor) - mentor.associate(src) - //preferences datum - also holds some persistent data for the client (because we may as well keep these datums to a minimum) prefs = GLOB.preferences_datums[ckey] if(prefs) @@ -415,9 +401,6 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( to_chat(src, memo_message) adminGreet() - if(mentor && !holder) //WS Edit - Mentors - mentor_memo_output("Show") //WS End - if (mob && reconnecting) var/stealth_admin = mob.client?.holder?.fakekey var/announce_leave = mob.client?.prefs?.broadcast_login_logout diff --git a/code/modules/client/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm index f022928d3a..15653938c3 100644 --- a/code/modules/client/verbs/ooc.dm +++ b/code/modules/client/verbs/ooc.dm @@ -83,11 +83,6 @@ GLOBAL_VAR_INIT(normal_ooc_colour, "#002eb8") else if(!(key in C.prefs.ignoring)) if(GLOB.OOC_COLOR) - if(check_mentor()) - to_chat(C, span_oocplain("[span_prefix("OOC:")] [keyname]: [msg]"), MESSAGE_TYPE_OOC) - else - to_chat(C, span_oocplain("[span_prefix("OOC:")] [keyname]: [msg]"), MESSAGE_TYPE_OOC) - else to_chat(C, span_ooc("[span_prefix("OOC:")] [keyname]: [msg]"), MESSAGE_TYPE_OOC) /proc/toggle_ooc(toggle = null) diff --git a/code/modules/client/verbs/who.dm b/code/modules/client/verbs/who.dm index 420b5cf106..eca68e4d2b 100644 --- a/code/modules/client/verbs/who.dm +++ b/code/modules/client/verbs/who.dm @@ -100,14 +100,6 @@ continue //Don't show afk admins to adminwho if(!C.holder.fakekey) msg += "\t[C] is a [C.holder.rank]\n" - if(length(GLOB.mentors) > 0) - msg += "Mentors: \n" - for(var/client/C in sortList(GLOB.clients)) - if(C in GLOB.admins) - continue - var/mentor = GLOB.mentor_datums[C.ckey] - if(mentor) - msg += "\t[C.key] is a Mentor \n" msg += span_info("Adminhelps are also sent to Discord. If no admins are available in game adminhelp anyways and an admin on Discord will see it and respond.") to_chat(src, msg) diff --git a/code/modules/mentor/holder2.dm b/code/modules/mentor/holder2.dm deleted file mode 100644 index 07b5b149e1..0000000000 --- a/code/modules/mentor/holder2.dm +++ /dev/null @@ -1,50 +0,0 @@ -GLOBAL_LIST_EMPTY(mentor_datums) -GLOBAL_PROTECT(mentor_datums) - -/datum/mentors - var/client/owner = null - var/target - var/following = null - -/datum/mentors/New(target) - if(!target) - QDEL_IN(src, 0) - CRASH("Attempted to create a new mentor datum with no target") - if(GLOB.mentor_datums[target]) - QDEL_IN(src, 0) - CRASH("Attempted to create a new mentor datum for [target] when one already exists.") - src.target = target - GLOB.mentor_datums[target] = src - -/datum/mentors/proc/associate(client/C) - if(istype(C)) - if(C.ckey != target) - message_admins("[C] attempted to assosciate with the mentor datum of [target]!") - return - owner = C - GLOB.mentors |= C - owner.add_mentor_verbs() - -/datum/mentors/proc/disassociate() - if(owner) - GLOB.mentors -= owner - owner.remove_mentor_verbs() - owner = null - -/proc/check_mentor() - if(usr && usr.client) - var/mentor = GLOB.mentor_datums[usr.client.ckey] - if(mentor || check_rights(R_ADMIN,0) || check_rights(R_MENTOR,0)) - return TRUE - - return FALSE - -/proc/check_mentor_other(client/C) - if(C) - var/mentor = GLOB.mentor_datums[C.ckey] - if(C.holder && C.holder.rank) - if(C.holder.rank.rights & R_ADMIN) - return TRUE - else if(mentor) - return TRUE - return FALSE diff --git a/code/modules/mentor/mentor_ranks.dm b/code/modules/mentor/mentor_ranks.dm deleted file mode 100644 index 5338bc4510..0000000000 --- a/code/modules/mentor/mentor_ranks.dm +++ /dev/null @@ -1,60 +0,0 @@ -/proc/load_mentors(warning = FALSE) - //clear the datums references - - for(var/client/C in GLOB.mentors) - if(warning) - to_chat(C, "The mentor tables are currently undergoing modification by one of the admins. \ - Unless it's your sorry ass being kicked, you will only experience a brief lack of cooperation from your tools.") - C.remove_admin_verbs() - C.holder = null - - GLOB.mentors.Cut() - if(!CONFIG_GET(flag/mentor_legacy_system)) - if(!SSdbcore.IsConnected()) - log_world("Failed to connect to database in load_mentors().") - CONFIG_SET(flag/mentor_legacy_system, TRUE) - load_mentors() - return - - var/datum/DBQuery/query = SSdbcore.NewQuery("SELECT ckey FROM [format_table_name("mentor")]") - query.Execute() - while(query.NextRow()) - var/ckey = ckey(query.item[1]) - var/datum/mentors/D = new(ckey) //create the mentor datum and store it for later use - if(!D) //will occur if an invalid rank is provided - continue - D.associate(GLOB.directory[ckey]) //find the client for a ckey if they are connected and associate them with the new mentor datum - for(var/admin in GLOB.admins) - var/client/C = admin - var/datum/mentors/D = new(C.ckey) - if(!D) //will occur if an invalid rank is provided - continue - D.associate(GLOB.directory[C.ckey]) //find the client for a ckey if they are connected and associate them with the new mentor datum - qdel(query) - else - log_world("Using legacy mentor system.") - var/list/Lines = world.file2list("config/mentors.txt") - - //process each line seperately - for(var/line in Lines) - if(!length(line)) - continue - if(findtextEx(line,"#",1,2)) - continue - - //ckey is before the first "=" - var/ckey = ckey(line) - if(!ckey) - continue - - var/datum/mentors/D = new(ckey) //create the mentor datum and store it for later use - if(!D) //will occur if an invalid rank is provided - continue - D.associate(GLOB.directory[ckey]) //find the client for a ckey if they are connected and associate them with the new mentor datum - - #ifdef TESTING - var/msg = "mentors Built:\n" - for(var/ckey in GLOB.mentor_datums) - msg += "\t[ckey] - mentor\n" - testing(msg) - #endif diff --git a/code/modules/mentor/mentor_verbs.dm b/code/modules/mentor/mentor_verbs.dm deleted file mode 100644 index 841706e6e8..0000000000 --- a/code/modules/mentor/mentor_verbs.dm +++ /dev/null @@ -1,14 +0,0 @@ -GLOBAL_LIST_INIT(mentor_verbs, list( - /client/proc/cmd_mentor_pm_panel, - /client/proc/show_mentor_memo, - /client/proc/cmd_mentor_say, - /client/proc/cmd_mentor_dementor, - )) -GLOBAL_PROTECT(mentor_verbs) - -/client/proc/add_mentor_verbs() - if(check_mentor()) - add_verb(src, GLOB.mentor_verbs) - -/client/proc/remove_mentor_verbs() - remove_verb(src, GLOB.mentor_verbs) diff --git a/code/modules/mentor/verbs/dementor.dm b/code/modules/mentor/verbs/dementor.dm deleted file mode 100644 index 88fbc8ebf3..0000000000 --- a/code/modules/mentor/verbs/dementor.dm +++ /dev/null @@ -1,17 +0,0 @@ -/client/proc/cmd_mentor_dementor() - set category = "Mentor" - set name = "Dementor" - if(!check_mentor()) - return - var/datum/mentors/mentor = GLOB.mentor_datums[ckey] - mentor.disassociate() - add_verb(src, /client/proc/cmd_mentor_rementor) - -/client/proc/cmd_mentor_rementor() - set category = "Mentor" - set name = "Rementor" - if(!check_mentor()) - return - remove_verb(src, /client/proc/cmd_mentor_rementor) - var/datum/mentors/mentor = GLOB.mentor_datums[ckey] - mentor.associate(src) diff --git a/code/modules/mentor/verbs/mentor_memo.dm b/code/modules/mentor/verbs/mentor_memo.dm deleted file mode 100644 index 4457c1fed0..0000000000 --- a/code/modules/mentor/verbs/mentor_memo.dm +++ /dev/null @@ -1,144 +0,0 @@ -/client/proc/mentor_memo() - set name = "Mentor Memos" - set category = "Server" - if(!check_rights(0)) - return - if(!SSdbcore.IsConnected()) - to_chat(src, span_danger("Failed to establish database connection.")) - return - var/memotask = input(usr,"Choose task.","Memo") in list("Show","Write","Edit","Remove") - if(!memotask) - return - mentor_memo_output(memotask) - -/client/proc/show_mentor_memo() - set name = "Show Memos" - set category = "Mentor" - if(!check_mentor()) - return - if(!SSdbcore.IsConnected()) - to_chat(src, span_danger("Failed to establish database connection.")) - return - mentor_memo_output("Show") - -/client/proc/mentor_memo_output(task) - if(!task) - return - if(!SSdbcore.IsConnected()) - to_chat(src, span_danger("Failed to establish database connection.")) - return - switch(task) - if("Write") - var/datum/DBQuery/query_memocheck = SSdbcore.NewQuery( - "SELECT ckey FROM [format_table_name("mentor_memo")] WHERE ckey = :ckey", - list("ckey" = src.ckey)) - if(!query_memocheck.Execute()) - var/err = query_memocheck.ErrorMsg() - log_game("SQL ERROR obtaining ckey from memo table. Error : \[[err]\]\n") - return - if(query_memocheck.NextRow()) - to_chat(src, "You already have set a memo.") - return - var/memotext = input(src,"Write your Memo","Memo") as message - if(!memotext) - return - var/datum/DBQuery/query_memoadd = SSdbcore.NewQuery( - "INSERT INTO [format_table_name("mentor_memo")] (ckey, memotext, timestamp) VALUES (:ckey, :memotext, :timestamp)", - list("ckey" = src.ckey, "memotext" = memotext, "timestamp" = SQLtime())) - if(!query_memoadd.Execute()) - var/err = query_memoadd.ErrorMsg() - log_game("SQL ERROR adding new memo. Error : \[[err]\]\n") - return - log_admin("[key_name(src)] has set a mentor memo: [memotext]") - message_admins("[key_name_admin(src)] has set a mentor memo:
    [memotext]") - qdel(query_memocheck) - qdel(query_memoadd) - if("Edit") - var/datum/DBQuery/query_memolist = SSdbcore.NewQuery("SELECT ckey FROM [format_table_name("mentor_memo")]") - if(!query_memolist.Execute()) - var/err = query_memolist.ErrorMsg() - log_game("SQL ERROR obtaining ckey from memo table. Error : \[[err]\]\n") - return - var/list/memolist = list() - while(query_memolist.NextRow()) - var/lkey = query_memolist.item[1] - memolist += "[lkey]" - if(!memolist.len) - to_chat(src, "No memos found in database.") - return - var/target_ckey = input(src, "Select whose memo to edit", "Select memo") as null|anything in memolist - if(!target_ckey) - return - var/datum/DBQuery/query_memofind = SSdbcore.NewQuery( - "SELECT memotext FROM [format_table_name("mentor_memo")] WHERE ckey = :target_ckey", - list("target_ckey" = target_ckey)) - if(!query_memofind.Execute()) - var/err = query_memofind.ErrorMsg() - log_game("SQL ERROR obtaining memotext from memo table. Error : \[[err]\]\n") - return - if(query_memofind.NextRow()) - var/old_memo = query_memofind.item[1] - var/new_memo = input("Input new memo", "New Memo", "[old_memo]", null) as message - if(!new_memo) - return - var/edit_text = "Edited by [src.ckey] on [SQLtime()] from
    [old_memo]
    to
    [new_memo]
    " - var/datum/DBQuery/update_query = SSdbcore.NewQuery( - "UPDATE [format_table_name("mentor_memo")] SET memotext = :new_memo, last_editor = :ckey, edits = CONCAT(IFNULL(edits,''),:edit_text) WHERE ckey = :target_ckey", - list("ckey" = src.ckey, "target_ckey" = target_ckey, "new_memo" = new_memo, "edit_text" = edit_text)) - if(!update_query.Execute()) - var/err = update_query.ErrorMsg() - log_game("SQL ERROR editing memo. Error : \[[err]\]\n") - return - log_admin("[key_name(src)] has edited [target_ckey == src.ckey ? "their" : "[target_ckey]'s'"] mentor memo from [old_memo] to [new_memo]") - message_admins("[key_name_admin(src)] has edited [target_ckey == src.ckey ? "their" : "[target_ckey]'s'"] mentor memo from
    [old_memo]
    to
    [new_memo]") - qdel(update_query) - qdel(query_memolist) - qdel(query_memofind) - if("Show") - var/datum/DBQuery/query_memoshow = SSdbcore.NewQuery("SELECT ckey, memotext, timestamp, last_editor FROM [format_table_name("mentor_memo")]") - if(!query_memoshow.Execute()) - var/err = query_memoshow.ErrorMsg() - log_game("SQL ERROR obtaining ckey, memotext, timestamp, last_editor from memo table. Error : \[[err]\]\n") - return - var/output = null - while(query_memoshow.NextRow()) - var/ckey = query_memoshow.item[1] - var/memotext = query_memoshow.item[2] - var/timestamp = query_memoshow.item[3] - var/last_editor = query_memoshow.item[4] - output += "[span_memo("Mentor memo by [ckey]")] on [timestamp]" - if(last_editor) - output += "
    [span_memoedit("Last edit by [last_editor] (Click here to see edit log)")]" - output += "
    [memotext]

    " - if(!output) - to_chat(src, "No memos found in database.") - return - to_chat(src, output) - qdel(query_memoshow) - if("Remove") - var/datum/DBQuery/query_memodellist = SSdbcore.NewQuery("SELECT ckey FROM [format_table_name("mentor_memo")]") - if(!query_memodellist.Execute()) - var/err = query_memodellist.ErrorMsg() - log_game("SQL ERROR obtaining ckey from memo table. Error : \[[err]\]\n") - return - var/list/memolist = list() - while(query_memodellist.NextRow()) - var/ckey = query_memodellist.item[1] - memolist += "[ckey]" - if(!memolist.len) - to_chat(src, "No memos found in database.") - return - var/target_ckey = input(src, "Select whose mentor memo to delete", "Select mentor memo") as null|anything in memolist - if(!target_ckey) - return - var/datum/DBQuery/query_memodel = SSdbcore.NewQuery( - "DELETE FROM [format_table_name("memo")] WHERE ckey = ':target_ckey'", - list("target_ckey" = target_ckey)) - if(!query_memodel.Execute()) - var/err = query_memodel.ErrorMsg() - log_game("SQL ERROR removing memo. Error : \[[err]\]\n") - return - log_admin("[key_name(src)] has removed [target_ckey == src.ckey ? "their" : "[target_ckey]'s'"] mentor memo.") - message_admins("[key_name_admin(src)] has removed [target_ckey == src.ckey ? "their" : "[target_ckey]'s'"]'s mentor memo.") - qdel(query_memodellist) - qdel(query_memodel) diff --git a/code/modules/mentor/verbs/mentorhelp.dm b/code/modules/mentor/verbs/mentorhelp.dm deleted file mode 100644 index 217bf5e256..0000000000 --- a/code/modules/mentor/verbs/mentorhelp.dm +++ /dev/null @@ -1,94 +0,0 @@ -/client/verb/mentorhelp(msg as text) - set category = "Mentor" - set name = "Mentorhelp" - - //clean the input msg - if(!msg) - return - msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN)) - if(!msg || !mob) - return - if(prefs.muted & MUTE_MENTORHELP) - to_chat(src, span_warning("You are unable to use mentorhelp (muted).")) - return - var/show_char = CONFIG_GET(flag/mentors_mobname_only) - var/mentor_msg = span_mentornotice("[span_info("MENTORHELP: [key_name_mentor(src, 1, 0, 1, show_char)]:")] [msg]") - log_mentor("MENTORHELP: [key_name_mentor(src, 0, 0, 0, 0)]: [msg]") - - for(var/client/X in GLOB.mentors) - SEND_SOUND(X, 'sound/items/bikehorn.ogg') - to_chat(X, mentor_msg) - - to_chat(src, span_mentornotice("PM to-Mentors: [msg]")) - - //spam prevention, 60 second delay - remove_verb(src, /client/verb/mentorhelp) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(add_verb), src, /client/verb/mentorhelp), 1 MINUTES, TIMER_STOPPABLE) - -/proc/get_mentor_counts() - . = list("total" = 0, "afk" = 0, "present" = 0) - for(var/client/X in GLOB.mentors) - .["total"]++ - if(X.is_afk()) - .["afk"]++ - else - .["present"]++ - -/proc/key_name_mentor(whom, include_link = null, include_name = 0, char_name_only = 0) - var/mob/M - var/client/C - var/key - var/ckey - - if(!whom) return "*null*" - if(istype(whom, /client)) - C = whom - M = C.mob - key = C.key - ckey = C.ckey - else if(ismob(whom)) - M = whom - C = M.client - key = M.key - ckey = M.ckey - else if(istext(whom)) - key = whom - ckey = ckey(whom) - C = GLOB.directory[ckey] - if(C) - M = C.mob - else - return "*invalid*" - - . = "" - - if(!ckey) - include_link = 0 - - if(key) - if(include_link) - if(CONFIG_GET(flag/mentors_mobname_only)) - . += "" - else - . += "" - - if(C && C.holder && C.holder.fakekey) - . += "Administrator" - else if (char_name_only && CONFIG_GET(flag/mentors_mobname_only)) - if(istype(C.mob,/mob/dead/new_player) || istype(C.mob, /mob/dead/observer)) //If they're in the lobby or observing, display their ckey - . += key - else if(C && C.mob) //If they're playing/in the round, only show the mob name - . += C.mob.name - else //If for some reason neither of those are applicable and they're mentorhelping, show ckey - . += key - else - . += key - if(!C) - . += "\[DC\]" - - if(include_link) - . += "" - else - . += "*no key*" - - return . diff --git a/code/modules/mentor/verbs/mentorpm.dm b/code/modules/mentor/verbs/mentorpm.dm deleted file mode 100644 index dcfea45d74..0000000000 --- a/code/modules/mentor/verbs/mentorpm.dm +++ /dev/null @@ -1,85 +0,0 @@ -//shows a list of clients we could send PMs to, then forwards our choice to cmd_Mentor_pm -/client/proc/cmd_mentor_pm_panel() - set category = "Mentor" - set name = "Mentor PM" - if(!check_mentor()) - to_chat(src, span_warning("Error: Mentor-PM-Panel: Only Mentors may use this command.")) - return - var/list/client/targets[0] - for(var/client/T) - if(T.mob) - if(isnewplayer(T.mob)) - targets["(New Player) - [T]"] = T - else if(isobserver(T.mob)) - targets["[T.mob.name](Ghost) - [T]"] = T - else - targets["[T.mob.real_name](as [T.mob.name]) - [T]"] = T - else - targets["(No Mob) - [T]"] = T - var/target = input(src,"To whom shall we send a message?","Mentor PM",null) as null|anything in sortList(targets) - cmd_mentor_pm(targets[target],null) - SSblackbox.record_feedback("tally", "mentor_verb", 1, "Mentor PM") - - -//takes input from cmd_mentor_pm_context, cmd_Mentor_pm_panel or /client/Topic and sends them a PM. -//Fetching a message if needed. src is the sender and C is the target client -/client/proc/cmd_mentor_pm(whom, msg) - var/client/C - if(ismob(whom)) - var/mob/M = whom - C = M.client - else if(istext(whom)) - C = GLOB.directory[whom] - else if(istype(whom,/client)) - C = whom - if(!C) - if(check_mentor()) - to_chat(src, span_warning("Error: Mentor-PM: Client not found.")) - else - mentorhelp(msg) //Mentor we are replying to left. Mentorhelp instead - return - - to_chat(GLOB.admins | GLOB.mentors, "[src] has started replying to [whom]'s mhelp.") - - //get message text, limit its length.and clean/escape html - if(!msg) - msg = input(src,"Message:", "Private message") as text|null - - if(!msg) - to_chat(GLOB.admins | GLOB.mentors, span_notice("[src] has stopped their reply to [whom]'s mhelp.")) - return - - if(!C) - if(holder) - to_chat(src, span_warning("Error: Mentor-PM: Client not found.")) - else - mentorhelp(msg) //Mentor we are replying to has vanished, Mentorhelp instead - return - - msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN)) - if(!msg) - return - - log_mentor("Mentor PM: [key_name(src)]->[key_name(C)]: [msg]") - - msg = emoji_parse(msg) - C << 'sound/items/bikehorn.ogg' - var/show_char = CONFIG_GET(flag/mentors_mobname_only) - if(check_mentor_other(C)) - if(check_mentor()) //both are mentors - to_chat(C, span_notice("Mentor PM from-[key_name_mentor(src, C, 1, 0)]: [msg]")) - to_chat(src, span_green("Mentor PM to-[key_name_mentor(C, C, 1, 0)]: [msg]")) - - else //recipient is an mentor but sender is not - to_chat(C, span_notice("Reply PM from-[key_name_mentor(src, C, 1, show_char)]: [msg]")) - to_chat(src, span_green("Mentor PM to-[key_name_mentor(C, C, 1, 0, 0)]: [msg]")) - - else - if(check_mentor()) //sender is an mentor but recipient is not. - to_chat(C, span_notice("Mentor PM from-[key_name_mentor(src, C, 1, 0)]: [msg]")) - to_chat(src, span_green("Mentor PM to-[key_name_mentor(C, C, 1, show_char)]: [msg]")) - - //we don't use message_Mentors here because the sender/receiver might get it too - for(var/client/X in GLOB.mentors) - if(X.key!=key && X.key!=C.key) //check client/X is an Mentor and isn't the sender or recipient - to_chat(X, span_mentornotice("Mentor PM: [key_name(src, X, 0)]->[key_name(C, X, 0)]: [msg]")) //inform X diff --git a/code/modules/mentor/verbs/mentorsay.dm b/code/modules/mentor/verbs/mentorsay.dm deleted file mode 100644 index 3075f68a3e..0000000000 --- a/code/modules/mentor/verbs/mentorsay.dm +++ /dev/null @@ -1,24 +0,0 @@ -/client/proc/cmd_mentor_say(msg as text) - set category = "Mentor" - set name = "Msay" - set hidden = 1 - if(!check_mentor()) - return - - msg = emoji_parse(copytext_char(sanitize(msg), 1, MAX_MESSAGE_LEN)) - if(!msg) - return - - mob.log_talk(msg, LOG_MSAY) - - msg = "[span_boldnotice("MENTOR:")] [key_name(usr, 0, 0)]: [span_message("[msg]")]" - to_chat(GLOB.mentors, - msg, - MESSAGE_TYPE_MENTORCHAT, - confidential = TRUE) - - SSblackbox.record_feedback("tally", "mentor_verb", 1, "Msay") - -/client/proc/get_mentor_say() - var/msg = input(src, null, "msay \"text\"") as text|null - cmd_mentor_say(msg) diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index 17e93ba21d..99f5d687dd 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -85,9 +85,6 @@ h1.alert, h2.alert {color: #000000;} .hear {color: #000099; font-style: italic;} .adminnotice {color: #0000ff;} .adminhelp {color: #ff0000; font-weight: bold;} -.mentor {color: #8A2BE2;} -.mentoradmin {color: #8A2BE2; font-weight: bold;} -.mentornotice {color: #E236D8;} .unconscious {color: #0000ff; font-weight: bold;} .suicide {color: #ff5050; font-style: italic;} .green {color: #03ff39;} diff --git a/shiptest.dme b/shiptest.dme index 24a918f216..99d6dbbddc 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -1875,7 +1875,6 @@ #include "code\modules\admin\verbs\manipulate_organs.dm" #include "code\modules\admin\verbs\map_template_loadverb.dm" #include "code\modules\admin\verbs\mapping.dm" -#include "code\modules\admin\verbs\mentors_edit.dm" #include "code\modules\admin\verbs\one_click_antag.dm" #include "code\modules\admin\verbs\outpost.dm" #include "code\modules\admin\verbs\overmap_token_manager.dm" @@ -2643,14 +2642,6 @@ #include "code\modules\mapping\space_management\space_level.dm" #include "code\modules\mapping\space_management\traits.dm" #include "code\modules\mapping\space_management\zlevel_manager.dm" -#include "code\modules\mentor\holder2.dm" -#include "code\modules\mentor\mentor_ranks.dm" -#include "code\modules\mentor\mentor_verbs.dm" -#include "code\modules\mentor\verbs\dementor.dm" -#include "code\modules\mentor\verbs\mentor_memo.dm" -#include "code\modules\mentor\verbs\mentorhelp.dm" -#include "code\modules\mentor\verbs\mentorpm.dm" -#include "code\modules\mentor\verbs\mentorsay.dm" #include "code\modules\mining\abandoned_crates.dm" #include "code\modules\mining\drill.dm" #include "code\modules\mining\fulton.dm" diff --git a/strings/tips.txt b/strings/tips.txt index 5a45cb343b..3d65c05a38 100644 --- a/strings/tips.txt +++ b/strings/tips.txt @@ -25,7 +25,7 @@ Most job-related exosuit clothing can fit job-related items into it, such as the If you're using hotkey mode, you can stop pulling things using H. If there's something you need from others, try asking! This game isn't singleplayer and you'd be surprised what you can get accomplished together! You'll quickly lose your interest in the game if you play to win and kill. If you find yourself doing this, take a step back and talk to people - it's a much better experience! -Don't be afraid to ask for help, whether from your peers or from mentors. +Don't be afraid to ask for help, whether from your peers or from admins. As the Captain, you have absolute access and control over your ship, but this does not mean that being a horrible person won't result in mutiny and a ban. A medical hardsuit can hold an entire medkit in its suit storage! While both heal toxin damage, the difference between charcoal and dylovene is that charcoal will actively remove all other reagents from one's body, while dylovene only removes various toxins - but can overdose. diff --git a/tgui/packages/tgui-panel/chat/constants.js b/tgui/packages/tgui-panel/chat/constants.js index 2ab914a779..e414bfc32b 100644 --- a/tgui/packages/tgui-panel/chat/constants.js +++ b/tgui/packages/tgui-panel/chat/constants.js @@ -32,7 +32,6 @@ export const MESSAGE_TYPE_LOOC = 'looc'; export const MESSAGE_TYPE_ADMINPM = 'adminpm'; export const MESSAGE_TYPE_COMBAT = 'combat'; export const MESSAGE_TYPE_ADMINCHAT = 'adminchat'; -export const MESSAGE_TYPE_MENTORCHAT = 'mentorchat'; export const MESSAGE_TYPE_PRAYER = 'prayer'; export const MESSAGE_TYPE_EVENTCHAT = 'eventchat'; export const MESSAGE_TYPE_ADMINLOG = 'adminlog'; @@ -120,13 +119,6 @@ export const MESSAGE_TYPES = [ selector: '.admin_channel, .adminsay', admin: true, }, - { - type: MESSAGE_TYPE_MENTORCHAT, - name: 'Mentor Chat', - description: 'MSAY messages', - selector: '.mentor, .mentoradmin', - admin: true, - }, { type: MESSAGE_TYPE_PRAYER, name: 'Prayers', diff --git a/tgui/packages/tgui/interfaces/Secrets.js b/tgui/packages/tgui/interfaces/Secrets.js index 18b3b6b6b3..376cc4de20 100644 --- a/tgui/packages/tgui/interfaces/Secrets.js +++ b/tgui/packages/tgui/interfaces/Secrets.js @@ -530,12 +530,6 @@ export const Secrets = (props, context) => { content="Admin Log" onClick={() => act('admin_log')} /> -