diff --git a/.github/actions/restore_or_install_byond/action.yml b/.github/actions/restore_or_install_byond/action.yml index 02e264b374d7..5a8d970d8441 100644 --- a/.github/actions/restore_or_install_byond/action.yml +++ b/.github/actions/restore_or_install_byond/action.yml @@ -29,7 +29,15 @@ runs: echo "BYOND_MAJOR=$BYOND_MAJOR" >> $GITHUB_ENV echo "BYOND_MINOR=$BYOND_MINOR" >> $GITHUB_ENV + - name: Find fastest APT mirror + if: env.BYOND_MAJOR >= 516 && env.BYOND_MINOR >= 1664 + uses: vegardit/fast-apt-mirror.sh@v1 + with: + sample-size: 8192 + sample-time: 5 - name: Install 32-bit libcurl + # Only required in 516.1664+ + if: env.BYOND_MAJOR >= 516 && env.BYOND_MINOR >= 1664 shell: bash run: | sudo dpkg --add-architecture i386 diff --git a/.github/workflows/run_linters.yml b/.github/workflows/run_linters.yml index 31949d7fcede..51cb5c8b478d 100644 --- a/.github/workflows/run_linters.yml +++ b/.github/workflows/run_linters.yml @@ -95,16 +95,25 @@ jobs: id: map-filter uses: dorny/paths-filter@v4 with: + list-files: shell filters: | - run_maps: - - '**.dmm' + tool_edits: - 'tools/maplint/**' - 'tools/mapmerge2/**' + map_edits: + - '**.dmm' + - name: Run Map Checks - if: steps.linter-setup.conclusion == 'success' && !cancelled() && steps.map-filter.outputs.run_maps == 'true' + if: steps.linter-setup.conclusion == 'success' && !cancelled() && (steps.map-filter.outputs.tool_edits == 'true' || steps.map-filter.outputs.map_edits == 'true') run: | - tools/bootstrap/python -m mapmerge2.dmm_test - tools/bootstrap/python -m tools.maplint.source + if [ "${{ steps.map-filter.outputs.tool_edits }}" = "true" ]; then + MAPS=$(find . -type f -name "*.dmm") + else + MAPS="${{ steps.map-filter.outputs.map_edits_files }}" + fi + + tools/bootstrap/python -m mapmerge2.dmm_test $MAPS + tools/bootstrap/python -m tools.maplint.source $MAPS - name: Check Cutter if: steps.linter-setup.conclusion == 'success' && !cancelled() run: tools/bootstrap/python -m tools.icon_cutter.check diff --git a/.vscode/tasks.json b/.vscode/tasks.json index e0b41e4482f0..b23299970ec5 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -1,16 +1,6 @@ { "version": "2.0.0", "tasks": [ - { - "type": "shell", - "command": "tools/bootstrap/python tools/build_bt.py", - "windows": { - "command": ".\\tools\\bootstrap\\python.bat tools/build_bt.py" - }, - "group": "build", - "presentation": { "reveal": "silent", "panel": "shared" }, - "label": "Compile BT Trees" - }, { "type": "process", "command": "tools/build/build.sh", @@ -27,7 +17,7 @@ "kind": "build", "isDefault": true }, - "dependsOn": ["dm: reparse", "Compile BT Trees"], + "dependsOn": "dm: reparse", "label": "Build All" }, { diff --git a/SpacemanDMM.toml b/SpacemanDMM.toml index 5ed9edb2f5ce..c0e275716020 100644 --- a/SpacemanDMM.toml +++ b/SpacemanDMM.toml @@ -12,3 +12,7 @@ use_typepath_names = true [debugger] engine = "auxtools" + +[map_renderer.render_passes] +icon-smoothing = false +icon-smoothing-2025 = true diff --git a/_maps/RandomRuins/AnywhereRuins/golem_ship.dmm b/_maps/RandomRuins/AnywhereRuins/golem_ship.dmm index 91b8ea9bc116..75b16b116c23 100644 --- a/_maps/RandomRuins/AnywhereRuins/golem_ship.dmm +++ b/_maps/RandomRuins/AnywhereRuins/golem_ship.dmm @@ -8,6 +8,12 @@ /obj/item/pen/blue{ pixel_x = -5 }, +/obj/machinery/button/door{ + pixel_y = 7; + id = "golemship"; + name = "shutter button"; + desc = "The shutter control switch for the main research vessel." + }, /turf/open/floor/mineral/titanium/purple, /area/ruin/powered/golem_ship) "aU" = ( @@ -139,6 +145,13 @@ /obj/machinery/reagentgrinder, /turf/open/floor/mineral/titanium/purple, /area/ruin/powered/golem_ship) +"ge" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/machinery/door/poddoor/preopen{ + id = "golemship_bedroom" + }, +/turf/open/floor/plating, +/area/ruin/powered/golem_ship) "gv" = ( /obj/structure/closet, /obj/item/storage/bag/ore, @@ -185,6 +198,9 @@ /area/ruin/powered/golem_ship) "lF" = ( /obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/machinery/door/poddoor/preopen{ + id = "golemship" + }, /turf/open/floor/plating, /area/ruin/powered/golem_ship) "lH" = ( @@ -195,6 +211,9 @@ pixel_x = 4; pixel_y = -8 }, +/obj/machinery/button/door/directional/south{ + id = "golemship_bedroom" + }, /turf/open/floor/wood, /area/ruin/powered/golem_ship) "mU" = ( @@ -630,6 +649,7 @@ /obj/item/fishing_rod, /obj/item/fishing_rod, /obj/item/fishing_rod, +/obj/item/storage/box/lights/tubes, /turf/open/floor/mineral/titanium/purple, /area/ruin/powered/golem_ship) "LN" = ( @@ -818,8 +838,8 @@ (1,1,1) = {" wN Df -lF -lF +ge +ge Df wN wN @@ -838,7 +858,7 @@ Df Df WL Ro -lF +ge wN wN lF @@ -856,7 +876,7 @@ Df bu ET tY -lF +ge wN wN Df @@ -870,13 +890,13 @@ Df wN "} (4,1,1) = {" -lF +ge cp cN lH Df -lF -lF +ge +ge Df WM sS @@ -888,7 +908,7 @@ lF wN "} (5,1,1) = {" -lF +ge Pe fk fk @@ -911,8 +931,8 @@ gz aU Pa Df -lF -lF +ge +ge Df LN sS @@ -944,7 +964,7 @@ wN (8,1,1) = {" Df Df -lF +ge Df Df wN diff --git a/_maps/RandomZLevels/Academy.dmm b/_maps/RandomZLevels/Academy.dmm index 745c71a50476..801abed1233d 100644 --- a/_maps/RandomZLevels/Academy.dmm +++ b/_maps/RandomZLevels/Academy.dmm @@ -1743,7 +1743,8 @@ /area/awaymission/caves/academy) "lK" = ( /obj/effect/immovablerod{ - dir = 4 + dir = 4; + should_augury = 0 }, /obj/effect/mapping_helpers/no_tele_turf, /turf/open/floor/plating, diff --git a/_maps/RandomZLevels/heretic.dmm b/_maps/RandomZLevels/heretic.dmm index c64a0abbb0e7..a341d6e28ddb 100644 --- a/_maps/RandomZLevels/heretic.dmm +++ b/_maps/RandomZLevels/heretic.dmm @@ -1106,8 +1106,7 @@ /obj/structure/transport/linear/tram, /obj/structure/thermoplastic/light, /obj/machinery/computer/tram_controls/heretic_tram_computer{ - icon_state = "tram_alt_controls"; - dir = 8 + dir = 4 }, /turf/open/floor/engine, /area/awaymission/caves/heretic_laboratory) diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index b964ab1b2183..04e8f9adf255 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -90,15 +90,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"aaV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Chapel Hallway" - }, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) "abg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/blood/old, @@ -117,14 +108,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/office) -"abq" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, -/obj/machinery/meter, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "abB" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ @@ -178,6 +161,18 @@ }, /turf/open/floor/engine, /area/station/ai/satellite/chamber) +"abU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/tile/purple, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/station/science) "aca" = ( /obj/structure/disposalpipe/trunk, /obj/structure/disposaloutlet{ @@ -187,6 +182,11 @@ /obj/effect/turf_decal/stripes/box, /turf/open/floor/plating/airless, /area/space/nearstation) +"ach" = ( +/obj/machinery/light/small/directional/west, +/obj/structure/sign/warning/directional/west, +/turf/open/misc/asteroid/airless, +/area/space/nearstation) "acj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/hydroponics/constructable, @@ -216,6 +216,7 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/cable, /obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/structure/tank_holder, /turf/open/floor/plating, /area/station/maintenance/aft) "acu" = ( @@ -254,10 +255,6 @@ /obj/machinery/disposal/bin/tagger, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) -"acF" = ( -/obj/structure/sign/warning/radiation, -/turf/closed/wall/rust, -/area/station/engineering/atmos) "acJ" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -278,13 +275,6 @@ /obj/structure/grille, /turf/open/floor/plating/airless, /area/space/nearstation) -"acT" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ - dir = 5 - }, -/turf/open/space/basic, -/area/space/nearstation) "acW" = ( /obj/structure/flora/bush/lavendergrass/style_random, /obj/structure/flora/bush/sparsegrass/style_random, @@ -342,6 +332,12 @@ /obj/structure/cable/layer3, /turf/open/floor/engine, /area/station/ai/satellite/foyer) +"adM" = ( +/obj/item/kirbyplants/organic/plant21, +/obj/machinery/airalarm/directional/east, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, +/turf/open/floor/iron/dark/corner, +/area/station/hallway/primary/central/fore) "adR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes/line, @@ -424,10 +420,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) -"aeL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, -/turf/closed/wall/rust, -/area/station/engineering/atmos) "aeS" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -490,18 +482,18 @@ /obj/machinery/computer/security/telescreen/minisat/directional/west, /turf/open/floor/engine, /area/station/ai/satellite/foyer) -"afY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/purple{ - dir = 1 +"afV" = ( +/obj/machinery/door/airlock/atmos/glass{ + name = "Auxiliary Chamber" }, -/obj/effect/turf_decal/tile/purple/half/contrasted{ +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/light/floor, -/turf/open/floor/iron/showroomfloor, -/area/station/science/lobby) +/turf/open/floor/engine, +/area/station/engineering/atmos) "agt" = ( /turf/closed/wall/rust, /area/space/nearstation) @@ -540,6 +532,21 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/science/xenobiology) +"agI" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, +/turf/open/space/basic, +/area/space/nearstation) +"ahl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron, +/area/station/security/processing) "ahz" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/yellow/half/contrasted{ @@ -551,6 +558,13 @@ }, /turf/open/floor/iron, /area/station/commons/storage/primary) +"ahG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "ahJ" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -582,12 +596,45 @@ }, /turf/open/floor/wood, /area/station/service/lawoffice) +"aic" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "aig" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/caution/stand_clear, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/hallway/primary/aft) +"aim" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"ain" = ( +/obj/machinery/power/turbine/turbine_outlet, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) "aiB" = ( /obj/structure/window/spawner/directional/east, /obj/structure/window/spawner/directional/north, @@ -621,14 +668,6 @@ }, /turf/open/floor/iron, /area/station/security/office) -"aiR" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/status_display/evac/directional/north, -/obj/machinery/light/warm/directional/north, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "ajb" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 4 @@ -643,14 +682,6 @@ /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating/airless, /area/space/nearstation) -"ajo" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 6 - }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "ajs" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/old, @@ -689,14 +720,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/ordnance/office) -"ajv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos) "ajw" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/white/line{ @@ -704,25 +727,18 @@ }, /turf/open/floor/iron, /area/station/security/prison) -"ajH" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 9 +"ajL" = ( +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 8 }, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) -"ajR" = ( -/obj/structure/table/wood/fancy/blue, -/obj/effect/turf_decal/siding/wood{ +/obj/effect/turf_decal/tile/purple{ dir = 8 }, -/obj/item/reagent_containers/cup/glass/trophy/bronze_cup, -/obj/machinery/camera/autoname/directional/west, -/obj/machinery/light/warm/dim/directional/west, -/turf/open/floor/carpet/royalblue, -/area/station/service/chapel/office) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/warm/directional/west, +/turf/open/floor/iron/showroomfloor, +/area/station/science/auxlab) "ajZ" = ( /obj/structure/flora/tree/jungle/small, /turf/open/floor/grass, @@ -743,6 +759,12 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/science/auxlab) +"akm" = ( +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden) "akC" = ( /obj/effect/turf_decal/bot, /obj/effect/turf_decal/tile/neutral/half/contrasted, @@ -776,6 +798,14 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/ordnance/storage) +"akS" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Security Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/maintenance/aft) "akV" = ( /obj/structure/sign/departments/security, /turf/closed/wall/rust, @@ -828,10 +858,38 @@ /obj/structure/cable/layer3, /turf/open/floor/engine, /area/station/ai/satellite/chamber) +"alA" = ( +/obj/structure/closet/secure_closet/brig, +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron, +/area/station/security/execution/transfer) +"alJ" = ( +/obj/structure/table/wood/fancy, +/obj/effect/turf_decal/siding/wideplating/dark/corner{ + dir = 4 + }, +/obj/item/food/grown/flower/harebell, +/obj/item/food/grown/flower/harebell{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/food/grown/flower/harebell{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/machinery/wall_healer/directional/south, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "alL" = ( /obj/effect/decal/cleanable/dirt, +/obj/structure/ore_box, +/obj/effect/turf_decal/bot, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"alO" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless, +/area/space/nearstation) "alQ" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -856,19 +914,18 @@ /area/station/commons/locker) "amq" = ( /obj/effect/turf_decal/stripes/corner, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/machinery/camera/directional/west{ name = "engineering camera"; network = list("ss13","engine"); c_tag = "SMES Room" }, /obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/tile/red/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/engineering/supermatter/room) "amr" = ( @@ -914,6 +971,15 @@ }, /turf/open/floor/plating, /area/station/science/robotics/lab) +"amC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/main) "amG" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/structure/girder, @@ -939,33 +1005,27 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/starboard) +"anf" = ( +/obj/machinery/status_display/evac/directional/south, +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/obj/machinery/light/warm/dim/directional/south, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"anq" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/atmospherics/components/tank/air/layer4{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/aft) "anr" = ( /obj/machinery/power/tracker, /obj/effect/turf_decal/box, /obj/structure/cable, /turf/open/floor/iron/solarpanel/airless, /area/space/nearstation) -"anw" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "Plasma to Incinerator" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/hidden{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "anz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -976,24 +1036,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/lockers) -"anE" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/holopad/secure, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/engine, -/area/station/ai/upload/chamber) -"anF" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 5 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron, -/area/station/engineering/atmos) "anG" = ( /obj/structure/sign/nanotrasen, /turf/closed/wall/r_wall/rust, @@ -1007,6 +1049,13 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"anT" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/floor, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "aoe" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating/airless, @@ -1047,6 +1096,14 @@ /obj/effect/decal/cleanable/blood/old, /turf/open/misc/asteroid/lowpressure, /area/space/nearstation) +"aoD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/box, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "aoE" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -1059,6 +1116,18 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron/dark, /area/station/service/chapel/funeral) +"apd" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/shieldgen, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/directional/west{ + c_tag = "Secure Storage"; + name = "engineering camera"; + network = list("ss13","engine") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) "api" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/window/reinforced/spawner/directional/north, @@ -1120,6 +1189,19 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"apH" = ( +/obj/structure/sign/poster/official/anniversary_vintage_reprint/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Chemistry North"; + network = list("ss13","medbay") + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/chemistry) "apL" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -1151,17 +1233,6 @@ /obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, /turf/open/floor/iron/dark, /area/station/maintenance/port/greater) -"aqu" = ( -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/duct, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/pharmacy) "aqv" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -1172,29 +1243,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"aqx" = ( -/obj/item/radio/intercom/directional/west, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) -"aqE" = ( -/obj/machinery/requests_console/directional/south{ - department = "Janitorial"; - name = "Janitorial Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/effect/turf_decal/stripes/corner, -/obj/structure/cable, -/obj/effect/turf_decal/tile/purple/half/contrasted, -/obj/effect/turf_decal/tile/blue, -/obj/machinery/light/warm/directional/south, -/turf/open/floor/iron, -/area/station/service/janitor) "aqQ" = ( /obj/effect/turf_decal/sand/plating, /obj/item/stack/sheet/glass, @@ -1245,29 +1293,12 @@ /obj/item/tank/internals/emergency_oxygen/empty, /turf/open/misc/asteroid/lowpressure, /area/space/nearstation) -"arU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "arX" = ( /obj/structure/table, /obj/item/reagent_containers/cup/glass/drinkingglass, /obj/structure/cable, /turf/open/floor/iron/white, /area/station/security/prison/mess) -"asc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "asj" = ( /turf/closed/wall/rust, /area/station/maintenance/department/electrical) @@ -1390,22 +1421,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) -"avl" = ( -/obj/machinery/button/flasher{ - id = "visitorflash"; - pixel_x = -6; - pixel_y = 24; - req_access = list("brig") - }, -/obj/machinery/button/door/directional/north{ - id = "visitation"; - name = "Visitation Shutters"; - pixel_x = 8; - req_access = list("brig") - }, -/obj/machinery/light/dim/directional/north, -/turf/open/floor/iron/showroomfloor, -/area/station/security/execution/transfer) "avo" = ( /obj/structure/sign/warning/biohazard, /turf/closed/wall/rust, @@ -1422,10 +1437,20 @@ /turf/open/floor/plating, /area/station/security/prison) "avx" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/end, -/turf/open/floor/engine, -/area/station/ai/upload/chamber) +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "avy" = ( /obj/structure/table/wood, /obj/effect/turf_decal/siding/wood{ @@ -1498,6 +1523,14 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/security/prison/mess) +"awz" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron, +/area/station/security/courtroom) "awG" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ dir = 4 @@ -1629,11 +1662,33 @@ /obj/effect/turf_decal/tile/neutral/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/maintenance/department/crew_quarters/bar) +"ayx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 4; + name = "killroom vent" + }, +/turf/open/floor/circuit/telecomms, +/area/station/science/xenobiology) "ayC" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/iron/dark, /area/station/medical/treatment_center) +"ayK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron, +/area/station/engineering/lobby) "ayY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -1663,6 +1718,15 @@ /obj/machinery/telecomms/broadcaster/preset_right, /turf/open/floor/circuit/green/telecomms/mainframe, /area/station/tcommsat/server) +"azE" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "aAg" = ( /turf/closed/wall/r_wall/rust, /area/station/ai/satellite/chamber) @@ -1685,21 +1749,6 @@ /obj/structure/sign/poster/official/safety_eye_protection/directional/east, /turf/open/floor/iron/showroomfloor, /area/station/medical/chemistry) -"aAQ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 9 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) "aAR" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, @@ -1713,6 +1762,24 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/dark, /area/station/maintenance/port/greater) +"aAS" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmos) "aAT" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/warning/pods/directional/north, @@ -1726,27 +1793,26 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"aBi" = ( +"aBl" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 10 }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/engineering/atmos) -"aBk" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 }, -/obj/effect/turf_decal/tile/purple/half/contrasted, -/obj/effect/turf_decal/tile/purple, -/obj/structure/sign/poster/contraband/lusty_xenomorph/directional/north, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, /obj/machinery/duct, -/turf/open/floor/iron/showroomfloor, -/area/station/science) +/turf/open/floor/iron, +/area/station/engineering/atmos) "aBB" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/gibs/robot_debris, @@ -1769,13 +1835,15 @@ /obj/effect/landmark/navigate_destination/dorms, /turf/open/floor/iron/dark, /area/station/commons/locker) -"aCg" = ( +"aBH" = ( +/obj/structure/chair/sofa/left/brown{ + dir = 1 + }, /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/purple/half/contrasted, -/obj/effect/turf_decal/tile/purple, -/obj/machinery/light/warm/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/station/science/auxlab) +/obj/structure/sign/poster/contraband/the_big_gas_giant_truth/directional/west, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/cargo/miningoffice) "aCi" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ @@ -1815,20 +1883,6 @@ /obj/structure/marker_beacon/burgundy, /turf/open/floor/plating/airless, /area/space/nearstation) -"aCN" = ( -/obj/machinery/computer/shuttle/labor{ - dir = 1 - }, -/obj/structure/sign/warning/vacuum/external/directional/south, -/obj/machinery/camera/directional/south{ - c_tag = "Transferring Centre Dock" - }, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/red/half/contrasted, -/obj/effect/turf_decal/tile/neutral, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/processing) "aDF" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -1917,10 +1971,6 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) -"aEg" = ( -/obj/structure/girder, -/turf/open/floor/plating/airless, -/area/space/nearstation) "aEi" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 10 @@ -1993,6 +2043,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 10 }, +/obj/structure/sign/warning/directional/west, /turf/open/floor/plating/airless, /area/space/nearstation) "aEt" = ( @@ -2016,8 +2067,19 @@ /obj/effect/turf_decal/stripes/line{ dir = 6 }, +/obj/structure/sign/warning/directional/east, /turf/open/floor/plating/airless, /area/space/nearstation) +"aEw" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 4; + name = "Air to External Air Ports" + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/storage) "aEC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -2050,42 +2112,41 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"aFh" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 1 - }, -/obj/machinery/iv_drip, -/obj/machinery/airalarm/directional/north, -/obj/effect/turf_decal/loading_area{ +"aEV" = ( +/obj/machinery/recharge_station, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 8 }, +/obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron/showroomfloor, -/area/station/medical/treatment_center) -"aFj" = ( -/obj/effect/turf_decal/tile/brown/half/contrasted, -/obj/effect/turf_decal/tile/yellow, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/box, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) +/area/station/medical/paramedic) "aFn" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/tcommsat/computer) -"aGd" = ( +"aFA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) +"aFD" = ( /obj/structure/table, -/obj/machinery/camera/directional/west{ - c_tag = "Incinerator Construction Area"; - name = "atmospherics camera"; - network = list("ss13","engine") +/obj/item/stack/medical/mesh, +/obj/item/stack/medical/suture, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 }, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) +/obj/machinery/wall_healer/directional/north, +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/dark, +/area/station/medical/medbay/lobby) "aGn" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, @@ -2093,11 +2154,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/disposal) -"aGs" = ( -/obj/machinery/atmospherics/pipe/smart/simple/green/visible, -/obj/machinery/meter, -/turf/closed/wall/r_wall/rust, -/area/station/engineering/atmos) "aGu" = ( /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -2114,14 +2170,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) -"aGM" = ( -/obj/structure/chair/stool/directional/south, -/obj/effect/landmark/start/atmospheric_technician, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/engineering/atmos) "aGQ" = ( /obj/effect/turf_decal/loading_area{ dir = 1 @@ -2130,18 +2178,15 @@ dir = 1; name = "External Gas to Loop" }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron/dark/textured_large, /area/station/engineering/supermatter/room) -"aGR" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 +"aGU" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/stripes/corner, -/obj/machinery/duct, -/turf/open/floor/engine, -/area/station/engineering/main) +/turf/open/floor/iron, +/area/station/hallway/primary/fore) "aGZ" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -2153,6 +2198,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/security/courtroom) +"aHy" = ( +/obj/structure/table, +/obj/item/storage/box/bodybags{ + pixel_x = 6 + }, +/obj/item/storage/box/gloves{ + pixel_x = -5 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) "aHz" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/decal/cleanable/dirt, @@ -2178,23 +2233,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/office) -"aHM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/item/kirbyplants/organic/plant21, -/obj/structure/extinguisher_cabinet/directional/north, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "aHQ" = ( /obj/effect/turf_decal/delivery, /obj/structure/closet/secure_closet/chief_medical, @@ -2206,6 +2244,27 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) +"aId" = ( +/obj/machinery/computer/security/mining{ + dir = 8 + }, +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/status_display/evac/directional/east, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/cargo/miningdock) +"aIe" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/entry) "aIl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -2234,6 +2293,14 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/security/office) +"aIE" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos/pumproom) "aII" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/vending/wardrobe/cargo_wardrobe, @@ -2283,27 +2350,6 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/showroomfloor, /area/station/security/lockers) -"aJH" = ( -/obj/structure/plasticflaps/opaque, -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=8"; - location = "Atmospherics"; - name = "navigation beacon (Atmospherics Delivery)" - }, -/obj/machinery/door/window/left/directional/west{ - name = "Atmospherics Delivery Access"; - req_access = list("atmospherics") - }, -/obj/machinery/door/poddoor/preopen{ - id = "atmos"; - name = "Atmospherics Blast Door" - }, -/obj/effect/turf_decal/delivery, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/storage/gas) "aJM" = ( /obj/machinery/hydroponics/soil, /obj/item/shovel/spade, @@ -2324,6 +2370,13 @@ }, /turf/open/floor/plating, /area/ruin/space/has_grav/abandoned_warehouse) +"aKk" = ( +/obj/machinery/airalarm/directional/north, +/obj/machinery/computer/cargo, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/turf/open/floor/iron/dark, +/area/station/cargo/sorting) "aKr" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -2349,17 +2402,6 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/ai/satellite/interior) -"aKU" = ( -/obj/machinery/door/airlock/external{ - name = "Prison External Airlock" - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "kilo-maint-1" - }, -/obj/effect/mapping_helpers/airlock/access/any/security/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/port/lesser) "aKY" = ( /obj/structure/sign/warning/electric_shock, /turf/closed/wall/r_wall, @@ -2400,18 +2442,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/cargo/miningoffice) -"aLJ" = ( -/obj/machinery/computer/security/mining{ - dir = 8 - }, -/obj/effect/turf_decal/bot, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/status_display/evac/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/miningdock) "aLK" = ( /obj/structure/closet/crate, /obj/item/hand_labeler, @@ -2419,12 +2449,6 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating, /area/station/maintenance/fore) -"aLP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/engineering/atmos) "aMa" = ( /turf/open/floor/iron, /area/station/hallway/primary/central) @@ -2466,6 +2490,14 @@ /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"aMz" = ( +/obj/machinery/newscaster/directional/east, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/light/warm/dim/directional/east, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) "aMJ" = ( /obj/structure/plasticflaps/opaque, /obj/machinery/navbeacon{ @@ -2506,6 +2538,14 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science) +"aMT" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/bookcase/random, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron/dark, +/area/station/service/library) "aMU" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 1 @@ -2521,6 +2561,13 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/genetics) +"aMY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/xmastree, +/obj/effect/landmark/event_spawn, +/obj/machinery/light/floor, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "aNa" = ( /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ dir = 8 @@ -2640,6 +2687,36 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/command/gateway) +"aOM" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/computer/atmos_alert, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) +"aON" = ( +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/table, +/obj/item/storage/box/disks{ + pixel_x = 5; + pixel_y = 9 + }, +/obj/item/storage/box/bodybags{ + pixel_x = -8; + pixel_y = 9 + }, +/obj/item/storage/box/gloves{ + pixel_x = 6; + pixel_y = 1 + }, +/obj/item/flesh_shears{ + pixel_x = -10; + pixel_y = -5 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/science/genetics) "aPg" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, @@ -2674,6 +2751,13 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central) +"aPB" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) "aPF" = ( /obj/machinery/door/firedoor, /obj/machinery/light/small/directional/east, @@ -2756,13 +2840,6 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/command/bridge) -"aRy" = ( -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/layer_manifold/cyan/hidden{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "aRB" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -2820,15 +2897,6 @@ dir = 4 }, /area/station/service/chapel) -"aSv" = ( -/obj/effect/landmark/start/atmospheric_technician, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos) "aSX" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -2909,6 +2977,10 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/recharge_floor, /area/station/science/robotics/mechbay) +"aUi" = ( +/obj/effect/turf_decal/box/white, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "aUn" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -2928,17 +3000,19 @@ /obj/structure/flora/rock/pile/style_random, /turf/open/misc/asteroid/airless, /area/space/nearstation) -"aUE" = ( -/obj/machinery/newscaster/directional/south, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/table/wood/fancy/red, -/obj/structure/sign/painting/large/library{ - dir = 8; - pixel_x = -29 +"aUG" = ( +/obj/effect/spawner/random/structure/chair_flipped, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"aUI" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/atmos/glass{ + name = "Distribution Loop" }, -/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /turf/open/floor/iron/dark, -/area/station/service/library) +/area/station/engineering/atmos/pumproom) "aUU" = ( /obj/structure/table, /obj/machinery/light/small/directional/west, @@ -3042,34 +3116,12 @@ }, /turf/open/floor/iron, /area/station/security/office) -"aWw" = ( -/obj/structure/table, -/obj/item/clipboard, -/obj/item/airlock_painter{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/airlock_painter, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/hallway) -"aWD" = ( -/turf/closed/wall/r_wall, -/area/station/engineering/atmos/storage/gas) -"aWF" = ( -/obj/machinery/door/airlock/external{ - name = "Atmospherics External Airlock" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/obj/effect/mapping_helpers/burnt_floor, +"aWi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) +/obj/effect/turf_decal/tile/neutral, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/processing) "aWI" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -3116,6 +3168,15 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics) +"aXS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 6 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "aYd" = ( /obj/effect/turf_decal/bot, /obj/effect/spawner/random/structure/crate, @@ -3143,18 +3204,24 @@ /obj/machinery/newscaster/directional/north, /turf/open/floor/iron/dark, /area/station/service/chapel/monastery) +"aYG" = ( +/obj/machinery/computer/shuttle/mining{ + dir = 8; + req_access = null + }, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron/dark, +/area/station/cargo/miningdock) "aYI" = ( /obj/effect/turf_decal/delivery, /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard) -"aYN" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/pumproom) "aYU" = ( /obj/machinery/rnd/production/techfab/department/security, /obj/effect/turf_decal/stripes/box, @@ -3163,27 +3230,27 @@ }, /turf/open/floor/iron/dark, /area/station/security/office) -"aYW" = ( -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) -"aZe" = ( +"aZb" = ( /obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ +/obj/machinery/atmospherics/components/trinary/filter/atmos/co2, +/obj/effect/turf_decal/tile/dark/opposingcorners{ dir = 4 }, -/obj/effect/turf_decal/tile/red/fourcorners, -/obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/showroomfloor, /area/station/engineering/atmos) +"aZf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/item/radio/intercom/directional/south, +/obj/structure/closet/emcloset/anchored, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "aZh" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/food/pie_smudge, @@ -3210,6 +3277,23 @@ /obj/machinery/duct, /turf/open/floor/wood, /area/station/service/bar/atrium) +"bak" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Engineering Security Post" + }, +/obj/effect/turf_decal/siding/red/corner{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) "bax" = ( /turf/closed/wall, /area/station/commons/storage/primary) @@ -3222,17 +3306,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"baC" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/camera/directional/north{ - c_tag = "Atmospherics Lockers"; - name = "atmospherics camera"; - network = list("ss13","engine") - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/structure/closet/secure_closet/atmospherics, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "baE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -3287,6 +3360,14 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/fore) +"bby" = ( +/obj/effect/landmark/event_spawn, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/medbay/central) "bbA" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, @@ -3301,14 +3382,37 @@ "bbO" = ( /turf/closed/wall/r_wall, /area/station/service/chapel/storage) -"bcm" = ( -/obj/structure/girder, +"bbQ" = ( +/obj/structure/sign/warning/directional/north, +/turf/open/space/basic, +/area/space/nearstation) +"bbR" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /turf/open/floor/plating, -/area/station/maintenance/port/lesser) +/area/station/hallway/secondary/entry) +"bbY" = ( +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron/smooth_half{ + dir = 4 + }, +/area/station/engineering/atmos) "bcs" = ( /obj/structure/sign/warning/explosives, /turf/closed/wall/r_wall, /area/station/science/ordnance/bomb) +"bcP" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) "bcY" = ( /obj/structure/table, /obj/machinery/reagentgrinder, @@ -3317,6 +3421,9 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron/showroomfloor, /area/station/medical/chemistry) +"bda" = ( +/turf/closed/wall/r_wall/rust, +/area/station/maintenance/disposal/incinerator) "bdk" = ( /obj/machinery/modular_computer/preset/curator{ dir = 8 @@ -3365,16 +3472,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/medical) -"bdU" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner, -/turf/open/floor/iron, -/area/station/engineering/atmos) "bdX" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -3429,72 +3526,40 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"bfh" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command{ - name = "Chief Engineer's Office" - }, -/obj/effect/turf_decal/siding/yellow/corner{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/ce, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) -"bfA" = ( -/obj/effect/turf_decal/stripes/line, +"bfy" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/aft) +"bfC" = ( +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) -"bfQ" = ( -/obj/effect/turf_decal/tile/red/half/contrasted{ +/obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 1 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /obj/structure/cable, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/box, /turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) -"bgj" = ( -/obj/structure/table, -/obj/structure/extinguisher_cabinet/directional/east, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/item/clothing/glasses/hud/security/sunglasses/gars{ - pixel_x = 3; - pixel_y = -2 - }, -/obj/item/clothing/glasses/hud/security/sunglasses/gars{ - pixel_x = 3; - pixel_y = 2 +/area/station/security/processing) +"bgd" = ( +/obj/machinery/light/directional/south, +/obj/machinery/computer/turbine_computer{ + dir = 1; + mapping_id = "main_turbine" }, -/obj/item/clothing/glasses/hud/security/sunglasses{ - pixel_x = -3; - pixel_y = 2 +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{ + dir = 9 }, -/obj/item/clothing/glasses/hud/security/sunglasses{ - pixel_x = -3; - pixel_y = -2 +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden/layer4{ + dir = 9 }, -/obj/machinery/light/small/red/directional/south, -/turf/open/floor/iron/dark, -/area/station/security/armory) +/obj/structure/cable, +/obj/item/radio/intercom/directional/east, +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/smooth_large, +/area/station/maintenance/disposal/incinerator) "bgl" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/hop) @@ -3585,6 +3650,29 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/storage) +"bim" = ( +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/miningdock) +"bip" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) "biq" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron/dark, @@ -3611,8 +3699,8 @@ /area/station/security/execution/transfer) "bjb" = ( /obj/effect/turf_decal/delivery, -/obj/structure/closet/secure_closet/engineering_electrical, /obj/structure/sign/warning/radiation/directional/east, +/obj/structure/reagent_dispensers/fueltank, /turf/open/floor/iron/dark, /area/station/engineering/main) "bjz" = ( @@ -3626,11 +3714,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"bjJ" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "bjN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -3651,23 +3734,19 @@ /area/space/nearstation) "bkn" = ( /obj/effect/turf_decal/delivery, -/obj/structure/closet/secure_closet/engineering_welding, +/obj/structure/rack, +/obj/item/weldingtool/largetank, +/obj/item/weldingtool/largetank, +/obj/item/clothing/head/utility/welding, +/obj/item/clothing/head/utility/welding, /turf/open/floor/iron/dark, /area/station/engineering/main) -"bks" = ( -/obj/effect/turf_decal/loading_area{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ +"bkI" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/plasma_input{ dir = 4 }, -/obj/machinery/atmospherics/pipe/bridge_pipe/purple/visible, -/obj/effect/turf_decal/tile/green/anticorner/contrasted, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/engineering/atmos/pumproom) +/turf/open/floor/engine/plasma, +/area/station/engineering/atmos) "bkK" = ( /obj/machinery/rnd/server/master, /turf/open/floor/circuit/green/telecomms/mainframe, @@ -3699,15 +3778,17 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/robotics/lab) -"blm" = ( -/obj/effect/landmark/blobstart, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +"ble" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/turf/open/floor/iron/dark/telecomms, -/area/station/science/server) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/corner{ + dir = 4 + }, +/area/station/hallway/primary/fore) "bln" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -3728,13 +3809,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/starboard) -"blw" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, -/obj/effect/turf_decal/stripes/line, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron, -/area/station/engineering/atmos) "blx" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -3743,16 +3817,6 @@ /obj/effect/landmark/navigate_destination/dockarrival, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) -"bly" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/plating, -/area/station/hallway/secondary/entry) "blA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -3773,10 +3837,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/medical/medbay/central) -"blX" = ( -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, -/turf/closed/wall, -/area/station/engineering/atmos) "blZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -3817,6 +3877,22 @@ }, /turf/open/floor/iron, /area/station/cargo/drone_bay) +"bna" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/caution/stand_clear, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/processing) +"bnf" = ( +/obj/item/wrench, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmos) "bnl" = ( /obj/machinery/disposal/bin/tagger, /obj/effect/turf_decal/bot, @@ -3840,6 +3916,12 @@ dir = 1 }, /area/station/service/chapel) +"bnr" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/aft) "bnB" = ( /obj/structure/frame/computer, /obj/effect/turf_decal/siding/thinplating/dark, @@ -3847,14 +3929,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/service/chapel/storage) -"bnS" = ( -/obj/machinery/teleport/station, -/obj/machinery/status_display/evac/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/ai/satellite/foyer) "bnT" = ( /obj/effect/turf_decal/stripes/end{ dir = 1 @@ -3862,6 +3936,7 @@ /obj/machinery/light/small/directional/north, /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/structure/sign/warning/secure_area/directional/north, /turf/open/floor/engine, /area/station/engineering/gravity_generator) "bnY" = ( @@ -3878,16 +3953,13 @@ /obj/structure/cable, /turf/open/space/basic, /area/space/nearstation) -"boj" = ( -/obj/item/clothing/head/helmet/toggleable/justice/escape{ - name = "justice helmet" - }, -/obj/structure/sign/poster/official/the_owl/directional/north, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/obj/item/clothing/suit/costume/justice, -/turf/open/floor/plating, -/area/station/maintenance/aft) +"bol" = ( +/obj/machinery/portable_atmospherics/canister, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/effect/turf_decal/box, +/obj/machinery/status_display/evac/directional/north, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "boo" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, /obj/machinery/door/window/left/directional/north{ @@ -3914,13 +3986,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"boG" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "boO" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/brown/half/contrasted{ @@ -3932,6 +3997,15 @@ /obj/effect/turf_decal/loading_area, /turf/open/floor/iron, /area/station/cargo/warehouse) +"boW" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/yellow/visible{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "bpg" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 8 @@ -3944,6 +4018,13 @@ /obj/effect/turf_decal/tile/neutral/anticorner/contrasted, /turf/open/floor/iron/dark/corner, /area/station/hallway/primary/central/fore) +"bpk" = ( +/obj/machinery/light/warm/directional/west, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 6 + }, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "bpn" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining/glass{ @@ -4028,6 +4109,12 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/science) +"bqc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/station/commons/vacant_room/commissary) "bqd" = ( /obj/structure/chair/sofa/bench/left{ dir = 1 @@ -4095,29 +4182,6 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron, /area/station/construction/mining/aux_base) -"brE" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 5 - }, -/obj/machinery/meter, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/maintenance/disposal/incinerator) -"brG" = ( -/obj/structure/cable, -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/machinery/light/directional/north, -/turf/open/floor/catwalk_floor/iron_smooth, -/area/station/maintenance/department/chapel/monastery) "bsa" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/broken_floor, @@ -4215,6 +4279,11 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/engineering/storage_shared) +"bsW" = ( +/obj/effect/landmark/start/medical_doctor, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/medbay/central) "bsZ" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -4286,29 +4355,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/fore) -"btQ" = ( -/obj/effect/decal/cleanable/blood/oil, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, -/obj/machinery/light/small/broken/directional/south, -/turf/open/floor/iron/dark, -/area/station/service/chapel/storage) -"buf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/spawner/xmastree, -/obj/effect/landmark/event_spawn, -/obj/machinery/light/floor, -/turf/open/floor/iron/dark, -/area/station/service/chapel) -"buk" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Atmospherics Tank - O2"; - name = "atmospherics camera"; - network = list("ss13","engine") - }, -/turf/open/floor/engine/o2, -/area/station/engineering/atmos) "bum" = ( /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ dir = 4 @@ -4317,24 +4363,35 @@ /area/station/security/processing) "buq" = ( /obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, /turf/open/floor/iron/showroomfloor, /area/station/medical/treatment_center) -"buu" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/turf/open/floor/iron/showroomfloor, -/area/station/engineering/atmos) "buJ" = ( /obj/structure/bed/dogbed/runtime, /mob/living/basic/pet/cat/runtime, /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) +"buO" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmos) "bvA" = ( /obj/structure/chair/comfy/brown{ color = "#c45c57"; @@ -4390,21 +4447,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/brig) -"bwF" = ( -/obj/machinery/newscaster/directional/north, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/science/lobby) -"bwN" = ( -/obj/effect/turf_decal/box/white, -/obj/effect/turf_decal/arrows/white{ - color = "#0000FF"; - pixel_y = 15 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "bwW" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/unres/delayed{ @@ -4434,59 +4476,20 @@ /obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/engine/telecomms, /area/station/tcommsat/server) -"bxE" = ( -/obj/machinery/portable_atmospherics/pump, -/obj/effect/turf_decal/box, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2{ - dir = 1 - }, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/engineering/hallway) "bxG" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/contraband/random/directional/south, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/fore) -"bya" = ( -/obj/item/kirbyplants/organic/plant2{ - pixel_y = 3 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/machinery/firealarm/directional/north, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/security/processing) "byb" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/cargo) -"byd" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/vending/cigarette, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/aft) +"byi" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating/airless, +/area/station/engineering/supermatter/room) "bys" = ( /obj/effect/turf_decal/siding/blue{ dir = 5 @@ -4569,20 +4572,29 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark, /area/station/service/chapel/dock) -"bAc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ - dir = 4 - }, +"bzK" = ( +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) +"bzQ" = ( +/obj/effect/decal/cleanable/dirt, /obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) +/obj/machinery/light/small/directional/east, +/turf/open/floor/wood, +/area/station/commons/vacant_room/commissary) "bAi" = ( /obj/structure/sign/departments/security, /turf/closed/wall, /area/station/maintenance/fore) +"bAq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/central) "bAS" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/firealarm/directional/west, @@ -4603,11 +4615,19 @@ /obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, /turf/open/floor/iron/dark, /area/station/maintenance/port/greater) -"bBb" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/light/floor, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) +"bBa" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Air to Mix" + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/atmos) "bBe" = ( /obj/machinery/airalarm/directional/south, /obj/effect/turf_decal/bot, @@ -4615,6 +4635,21 @@ /obj/effect/mapping_helpers/airalarm/tlv_cold_room, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/medical/coldroom) +"bBn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/medbay/central) "bBr" = ( /obj/machinery/door/airlock/engineering{ name = "Emergency Storage" @@ -4627,16 +4662,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/iron/dark, /area/station/hallway/primary/aft) -"bBE" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/engineering/atmos) "bBF" = ( /turf/closed/wall/r_wall, /area/station/science/robotics/lab) @@ -4663,22 +4688,12 @@ /obj/item/seeds/watermelon, /turf/open/floor/grass, /area/station/security/prison/garden) -"bCe" = ( -/obj/structure/table, -/obj/item/hfr_box/core, -/obj/item/hfr_box/corner, -/obj/item/hfr_box/corner, -/obj/item/hfr_box/corner, -/obj/item/hfr_box/corner, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) +"bCa" = ( +/obj/structure/bookcase/random/fiction, +/obj/item/radio/intercom/directional/north, +/obj/machinery/light/warm/dim/directional/north, +/turf/open/floor/wood, +/area/station/service/library) "bCz" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -4699,6 +4714,38 @@ }, /turf/open/floor/iron, /area/station/cargo/sorting) +"bCE" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) +"bCH" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 9 + }, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/office) +"bCL" = ( +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/duct, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/pharmacy) "bCO" = ( /obj/item/paper_bin{ pixel_x = -4; @@ -4762,36 +4809,6 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/dark, /area/station/service/library) -"bDP" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/portable_atmospherics/scrubber/huge, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) -"bDQ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/fireaxecabinet/directional/north, -/obj/machinery/camera/directional/north{ - c_tag = "Atmospherics Scrubbers"; - name = "atmospherics camera"; - network = list("ss13","engine") - }, -/obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) "bDV" = ( /obj/structure/sink/directional/south, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -4804,14 +4821,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/commons/toilet/restrooms) -"bEa" = ( -/obj/machinery/atmospherics/pipe/bridge_pipe/purple/visible, -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/bridge_pipe/orange/visible{ - dir = 4 - }, -/turf/open/space/basic, -/area/space/nearstation) "bEd" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; @@ -4834,6 +4843,21 @@ }, /turf/open/floor/plating/rust, /area/station/maintenance/department/crew_quarters/bar) +"bEf" = ( +/obj/structure/urinal/directional/north, +/obj/machinery/duct, +/turf/open/floor/plating/rust, +/area/station/security/prison/shower) +"bEk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Mix to Ports" + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible, +/turf/open/floor/iron, +/area/station/engineering/atmos) "bFm" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -4847,15 +4871,6 @@ /obj/structure/cable, /turf/closed/wall/rust, /area/station/maintenance/department/electrical) -"bFv" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/machinery/duct, -/turf/open/floor/iron/dark, -/area/station/engineering/storage_shared) "bFw" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -4867,49 +4882,46 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron/showroomfloor, /area/station/service/bar/atrium) -"bFI" = ( -/obj/effect/turf_decal/sand/plating, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plating/airless, -/area/space/nearstation) -"bGa" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/conveyor{ - dir = 1; - id = "QMLoad"; - name = "off ramp" - }, -/obj/machinery/camera/directional/east{ - c_tag = "Cargo Ramps"; - name = "cargo camera"; - network = list("ss13","qm") - }, +"bFA" = ( +/obj/structure/table, +/obj/item/clipboard, +/obj/item/flashlight/seclite, +/obj/item/flashlight/seclite, +/obj/item/flashlight/seclite, +/obj/effect/decal/cleanable/dirt, +/obj/item/toy/figure/secofficer, +/obj/structure/extinguisher_cabinet/directional/east, /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 8 }, -/obj/machinery/light/directional/east, /turf/open/floor/iron/dark, -/area/station/cargo/storage) -"bGj" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ +/area/station/security/lockers) +"bFB" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/station/hallway/secondary/entry) +"bFE" = ( +/obj/item/kirbyplants/organic/applebush, +/obj/effect/turf_decal/stripes/corner{ dir = 8 }, +/obj/machinery/airalarm/directional/west, +/obj/machinery/status_display/ai/directional/north, /obj/effect/turf_decal/tile/red{ dir = 1 }, -/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, -/area/station/engineering/supermatter/room) +/area/station/hallway/secondary/entry) +"bFI" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "bGx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, /obj/effect/decal/cleanable/dirt, @@ -4929,14 +4941,21 @@ /obj/structure/cable/layer3, /turf/open/floor/engine, /area/station/ai/satellite/chamber) -"bGK" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell, -/obj/machinery/light/small/broken/directional/south, +"bGN" = ( +/obj/machinery/light/warm/dim/directional/west, /turf/open/floor/iron/dark, -/area/station/service/chapel/storage) +/area/station/service/chapel/funeral) +"bHh" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Port Mix to East Ports" + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/station/engineering/atmos) "bHj" = ( /obj/structure/table, /obj/item/paper_bin/construction{ @@ -4981,6 +5000,16 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"bHD" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/disposal/bin/tagger, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/disposalpipe/trunk, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, +/obj/machinery/light/warm/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) "bHK" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -5004,13 +5033,6 @@ /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron, /area/station/cargo/drone_bay) -"bHT" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 4 - }, -/obj/machinery/computer/security/telescreen/entertainment/directional/east, -/turf/open/floor/iron/white, -/area/station/security/prison/mess) "bId" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -5020,6 +5042,13 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"bIi" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/noticeboard/directional/east, +/turf/open/floor/wood, +/area/station/commons/vacant_room/commissary) "bIm" = ( /obj/structure/table, /obj/item/transfer_valve{ @@ -5049,30 +5078,18 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/security/execution/transfer) -"bIx" = ( -/obj/effect/landmark/event_spawn, -/obj/machinery/holopad, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/showroomfloor, -/area/station/security/execution/transfer) +"bIE" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) "bIR" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"bJi" = ( -/obj/machinery/door/airlock/external{ - name = "Engineering External Airlock" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/turf/open/floor/iron/dark, -/area/station/engineering/supermatter/room) "bJm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -5082,6 +5099,17 @@ }, /turf/open/floor/iron, /area/station/security/brig) +"bJo" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/virology) "bJv" = ( /turf/open/floor/engine{ name = "Holodeck Projector Floor" @@ -5114,6 +5142,44 @@ /obj/effect/spawner/structure/window/bronze, /turf/open/floor/plating, /area/station/maintenance/department/chapel) +"bJX" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"bJY" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/turf/open/space/basic, +/area/space/nearstation) +"bKa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron/showroomfloor, +/area/station/science/lobby) "bKc" = ( /turf/closed/wall, /area/station/maintenance/department/medical/central) @@ -5126,19 +5192,31 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/medical/virology) -"bKH" = ( -/obj/structure/table, -/obj/item/storage/toolbox/electrical{ - pixel_x = -4; - pixel_y = 4 +"bKR" = ( +/obj/machinery/status_display/ai/directional/south, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/obj/item/storage/toolbox/electrical, -/obj/machinery/firealarm/directional/west, /obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 + dir = 1 }, +/obj/structure/frame/computer{ + anchored = 1; + dir = 1 + }, +/obj/machinery/light/small/directional/south, /turf/open/floor/iron/dark, -/area/station/commons/storage/primary) +/area/station/cargo/drone_bay) +"bKS" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Mix Outlet Pump" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/green/fourcorners, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/atmos) "bKU" = ( /obj/effect/turf_decal/bot, /obj/machinery/airalarm/directional/north, @@ -5154,14 +5232,17 @@ /obj/effect/turf_decal/tile/purple/opposingcorners, /turf/open/floor/iron/showroomfloor, /area/station/science/robotics/lab) -"bLu" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Security Maintenance" +"bLo" = ( +/obj/structure/table, +/obj/item/aicard, +/obj/item/assembly/flash/handheld, +/obj/item/assembly/flash/handheld, +/obj/machinery/airalarm/directional/east, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/security/general, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, -/area/station/maintenance/aft) +/area/station/engineering/storage/tech) "bLF" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/disposalpipe/segment{ @@ -5200,18 +5281,6 @@ /obj/item/toy/basketball, /turf/open/floor/iron, /area/station/security/prison) -"bMD" = ( -/obj/machinery/atmospherics/components/binary/tank_compressor{ - dir = 8 - }, -/obj/effect/turf_decal/delivery, -/obj/structure/sign/poster/random/directional/north, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 1 - }, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/showroomfloor, -/area/station/science/ordnance) "bMH" = ( /obj/structure/extinguisher_cabinet/directional/south, /obj/effect/turf_decal/delivery, @@ -5236,11 +5305,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"bNg" = ( -/obj/structure/flora/bush/flowers_br/style_random, -/obj/effect/turf_decal/siding/thinplating/dark, -/turf/open/floor/grass, -/area/station/service/chapel) "bNl" = ( /obj/docking_port/stationary/escape_pod{ dir = 4 @@ -5267,32 +5331,13 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison/safe) -"bOm" = ( -/obj/item/storage/fancy/cigarettes/cigars{ - pixel_x = 2; - pixel_y = 6 - }, -/obj/item/storage/fancy/cigarettes/cigars/havana{ - pixel_x = 2; - pixel_y = 8 - }, -/obj/item/storage/fancy/cigarettes/cigars/cohiba{ - pixel_x = 2; - pixel_y = 10 - }, -/obj/item/holosign_creator/robot_seat/bar, -/obj/machinery/status_display/evac/directional/west, -/obj/structure/table, -/obj/machinery/camera/directional/west{ - c_tag = "Bar"; - name = "bar camera" - }, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 4 +"bOw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/obj/machinery/light/warm/directional/west, -/turf/open/floor/iron/dark, -/area/station/service/bar) +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "bOD" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -5301,6 +5346,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard) +"bOO" = ( +/obj/machinery/door/poddoor/shutters{ + id = "secmechbay"; + name = "Security Mech Bay Shutters"; + dir = 1 + }, +/turf/open/floor/plating, +/area/station/security/mechbay) "bOR" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -5310,6 +5363,24 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/science/xenobiology) +"bPr" = ( +/obj/item/storage/toolbox/mechanical, +/obj/item/crowbar, +/obj/item/flashlight, +/obj/item/flashlight, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/structure/rack, +/obj/effect/turf_decal/bot, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) +"bPD" = ( +/obj/effect/turf_decal/bot/left, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "bPH" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -5336,6 +5407,11 @@ /obj/effect/decal/cleanable/dirt, /turf/open/misc/asteroid/airless, /area/station/hallway/secondary/entry) +"bPT" = ( +/obj/structure/lattice, +/obj/structure/transit_tube/crossing/horizontal, +/turf/open/space/basic, +/area/space/nearstation) "bPX" = ( /obj/effect/turf_decal/stripes/line, /turf/open/misc/asteroid/airless, @@ -5403,6 +5479,18 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/plating, /area/station/maintenance/department/bridge) +"bRk" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/small/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "bRo" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -5452,16 +5540,6 @@ /obj/machinery/chem_dispenser, /turf/open/floor/iron/dark, /area/station/medical/chemistry) -"bSg" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, -/obj/machinery/door/airlock/atmos/glass{ - name = "Distribution Loop" - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/pumproom) "bSi" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -5501,23 +5579,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"bST" = ( -/obj/machinery/ai_slipper{ - uses = 10 - }, -/obj/effect/turf_decal/box, -/obj/machinery/flasher/directional/north{ - id = "AI"; - name = "Meatbag Pacifier"; - pixel_x = 26 - }, -/obj/machinery/camera/directional/south{ - c_tag = "AI Chamber Core"; - name = "core camera"; - network = list("aicore") - }, -/turf/open/floor/engine, -/area/station/ai/satellite/chamber) "bSX" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -5528,31 +5589,13 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"bTC" = ( -/obj/machinery/airalarm/directional/south, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/green/half/contrasted, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/virology) -"bTF" = ( -/obj/effect/turf_decal/bot, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/machinery/computer/operating{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/machinery/vitals_reader/directional/south, -/turf/open/floor/iron/dark, -/area/station/medical/surgery/theatre) +"bTO" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/engineering/atmos/pumproom) "bUd" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -5588,6 +5631,21 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/execution/education) +"bUo" = ( +/obj/machinery/firealarm/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Arrivals Dock"; + name = "shuttle camera" + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/structure/closet/firecloset, +/turf/open/floor/iron, +/area/station/hallway/secondary/entry) "bUp" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -5678,6 +5736,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/courtroom) +"bVl" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/carpet/royalblue, +/area/station/service/chapel/office) "bVp" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -5698,25 +5763,18 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/hallway/primary/central) -"bWx" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "Air to Mix" +"bWu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/blue/opposingcorners{ +/obj/structure/cable, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/components/unary/airlock_pump/unbolt_only{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/turf/open/floor/iron/showroomfloor, -/area/station/engineering/atmos) -"bWE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/closed/wall/r_wall, -/area/station/engineering/supermatter/room) +/turf/open/floor/plating, +/area/station/maintenance/disposal) "bWZ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -5792,6 +5850,16 @@ /obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/iron/dark, /area/station/command/bridge) +"bXx" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "bXz" = ( /turf/closed/wall, /area/station/service/kitchen/coldroom) @@ -5813,6 +5881,15 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/medbay/lobby) +"bXB" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/disposal/bin/tagger, +/obj/item/radio/intercom/directional/east, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hos) "bXX" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -5827,20 +5904,12 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plating/airless, /area/station/hallway/secondary/entry) -"bYg" = ( -/obj/machinery/firealarm/directional/west, -/obj/machinery/computer/atmos_control/ordnancemix{ - dir = 4 +"bYh" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 }, -/turf/open/floor/iron/showroomfloor, -/area/station/science/ordnance) -"bYT" = ( -/obj/effect/turf_decal/bot, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/power/shieldwallgen, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron/dark, -/area/station/command/teleporter) +/turf/open/floor/engine, +/area/station/ai/upload/chamber) "bZg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -5880,16 +5949,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel/funeral) -"bZS" = ( -/obj/structure/rack, -/obj/effect/spawner/random/techstorage/rnd_secure_all, -/obj/machinery/status_display/shuttle{ - pixel_y = -32 - }, -/turf/open/floor/circuit/green{ - luminosity = 2 - }, -/area/station/engineering/storage/tech) "bZY" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/structure/crate, @@ -6026,60 +6085,42 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/ai/satellite/interior) -"ccw" = ( -/obj/structure/closet/secure_closet/security/engine, -/obj/effect/turf_decal/delivery, -/obj/structure/reagent_dispensers/wall/peppertank/directional/south, -/obj/item/crowbar, -/obj/item/book/manual/wiki/security_space_law, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/engineering) "ccz" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/old, /obj/structure/grille/broken, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"ccQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible, -/obj/machinery/meter, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 +"ccP" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/blue{ + dir = 1 }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 +/obj/effect/turf_decal/tile/neutral{ + dir = 8 }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/engineering/atmos) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "ccR" = ( -/obj/structure/sign/warning/engine_safety/directional/north, /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 }, /obj/effect/turf_decal/tile/red{ dir = 1 }, +/obj/structure/table, +/obj/item/storage/box{ + pixel_y = 3; + pixel_x = -3 + }, +/obj/item/stack/package_wrap, +/obj/item/hand_labeler, +/obj/machinery/incident_display/delam/directional/north, /turf/open/floor/iron, /area/station/engineering/main) -"ccS" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/light/small/directional/south, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/components/unary/airlock_pump/unbolt_only{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/solars/starboard/fore) "ccW" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -6190,6 +6231,13 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/ruin/space/has_grav/abandoned_warehouse) +"cdP" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/unres/delayed, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/turf/open/floor/iron/dark, +/area/station/maintenance/aft) "cdV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/circuit/green{ @@ -6213,15 +6261,6 @@ "cdZ" = ( /turf/closed/wall/rust, /area/station/ai/satellite/chamber) -"cec" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1; - name = "East Ports to West Ports" - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/engineering/atmos) "cee" = ( /obj/structure/sign/poster/contraband/revolver, /turf/closed/wall, @@ -6258,6 +6297,12 @@ /obj/effect/turf_decal/tile/blue/opposingcorners, /turf/open/floor/iron/showroomfloor, /area/station/medical/medbay/lobby) +"cem" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "ceq" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -6266,6 +6311,14 @@ }, /turf/open/floor/plating, /area/station/ai/satellite/chamber) +"ceu" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "cev" = ( /obj/structure/transit_tube/diagonal/topleft, /obj/structure/lattice, @@ -6302,15 +6355,6 @@ "ceG" = ( /turf/closed/wall/r_wall/rust, /area/station/ai/satellite/atmos) -"ceO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/plating, -/area/station/hallway/secondary/entry) "ceT" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 @@ -6319,29 +6363,14 @@ /turf/open/floor/iron/showroomfloor, /area/station/science/ordnance/storage) "ceW" = ( -/obj/effect/turf_decal/delivery, /obj/effect/turf_decal/stripes/corner, /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 1 }, /obj/machinery/recharge_station, +/obj/effect/turf_decal/bot_red, /turf/open/floor/iron/dark, /area/station/engineering/storage_shared) -"ceY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron/showroomfloor, -/area/station/science) "cfm" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/girder/displaced, @@ -6398,6 +6427,13 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/hop) +"cgg" = ( +/obj/machinery/biogenerator, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/prison/garden) "cgj" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/duct, @@ -6414,15 +6450,6 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/ai/satellite/interior) -"cgr" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/airalarm/directional/north, -/obj/machinery/light/warm/directional/north, -/turf/open/floor/iron, -/area/station/security/prison/garden) "cgH" = ( /obj/item/storage/medkit/regular{ pixel_x = 3; @@ -6455,6 +6482,14 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/ai/satellite/interior) +"cgO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmos) "cgT" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -6587,26 +6622,28 @@ }, /turf/open/floor/engine, /area/station/ai/satellite/foyer) +"cik" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/mechpad{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/button/door/directional/south{ + id = "Skynet_launch"; + name = "Mech Bay Door Control" + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/science/robotics/mechbay) "cio" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, /turf/open/floor/engine, /area/station/ai/satellite/foyer) -"cir" = ( -/obj/structure/cable, -/obj/machinery/wall_healer/directional/north, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "cit" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -6757,16 +6794,6 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) -"ckg" = ( -/obj/machinery/door/airlock/external{ - name = "Atmospherics External Airlock" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "atmos_end_big_lad" - }, -/turf/open/floor/plating/airless, -/area/station/maintenance/disposal/incinerator) "ckm" = ( /mob/living/carbon/human/species/monkey, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -6792,10 +6819,6 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/science/auxlab) -"ckr" = ( -/obj/structure/grille/broken, -/turf/open/floor/plating/airless, -/area/space/nearstation) "ckA" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/dirt, @@ -6812,6 +6835,13 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"ckU" = ( +/obj/machinery/portable_atmospherics/canister, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/effect/turf_decal/box, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "cld" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -6836,55 +6866,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/ai/satellite/foyer) -"clo" = ( -/obj/structure/extinguisher_cabinet/directional/south, -/obj/structure/table, -/obj/item/stock_parts/micro_laser{ - pixel_x = -7; - pixel_y = -3 - }, -/obj/item/stock_parts/micro_laser{ - pixel_x = -1; - pixel_y = 3 - }, -/obj/item/stock_parts/micro_laser{ - pixel_x = -5; - pixel_y = 4 - }, -/obj/item/stock_parts/micro_laser{ - pixel_x = -3; - pixel_y = -2 - }, -/obj/item/stock_parts/scanning_module{ - pixel_x = 12; - pixel_y = -1 - }, -/obj/item/stock_parts/scanning_module{ - pixel_x = 10; - pixel_y = 1 - }, -/obj/item/stock_parts/scanning_module{ - pixel_x = 13; - pixel_y = 4 - }, -/obj/item/stock_parts/scanning_module{ - pixel_x = 8; - pixel_y = -1 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/dark, -/area/station/cargo/drone_bay) -"clt" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos/pumproom) "clw" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ dir = 9 @@ -6904,33 +6885,6 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) -"clL" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/meter, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) -"clM" = ( -/obj/item/kirbyplants/organic/plant5, -/obj/structure/noticeboard/directional/east, -/obj/item/paper/monitorkey, -/obj/machinery/camera/directional/east{ - c_tag = "Chief Engineer's Office"; - name = "engineering camera"; - network = list("ss13","engine") - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "clN" = ( /obj/structure/chair/office{ dir = 1 @@ -6973,15 +6927,6 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) -"clY" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 5 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plating/airless, -/area/space/nearstation) "cml" = ( /turf/closed/wall/rust, /area/station/service/library) @@ -6998,19 +6943,37 @@ }, /turf/open/floor/iron/dark, /area/station/service/bar/atrium) +"cmM" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible, +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 4; + name = "O2 to Airmix" + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "cmQ" = ( /turf/open/floor/cult, /area/station/service/chapel/office) -"cmR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "cmU" = ( /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating/airless, /area/space/nearstation) +"cmZ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/button/door/directional/south{ + id = "engsm"; + name = "Radiation Shutters Toggle"; + req_access = list("engineering"); + pixel_y = -26 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "cnc" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/purple/half/contrasted, @@ -7046,6 +7009,15 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plating, /area/ruin/space/has_grav/abandoned_warehouse) +"cnu" = ( +/obj/structure/grille, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/sign/warning/directional/west, +/turf/open/floor/plating/airless, +/area/space/nearstation) "cnM" = ( /obj/structure/flora/bush/lavendergrass/style_random, /obj/effect/turf_decal/sand/plating, @@ -7074,9 +7046,13 @@ /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating, /area/space/nearstation) -"cok" = ( -/turf/closed/wall/r_wall, -/area/space/nearstation) +"con" = ( +/obj/machinery/rnd/production/techfab/department/medical, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/box, +/obj/machinery/light/cold/directional/east, +/turf/open/floor/iron/dark, +/area/station/medical/storage) "cop" = ( /obj/structure/railing{ dir = 8 @@ -7100,10 +7076,6 @@ }, /turf/open/floor/plating/airless, /area/station/hallway/secondary/entry) -"cow" = ( -/obj/structure/grille, -/turf/closed/wall/r_wall, -/area/space/nearstation) "cox" = ( /mob/living/basic/sloth/citrus, /obj/effect/turf_decal/tile/brown/half/contrasted{ @@ -7128,6 +7100,18 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"coS" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 9 + }, +/obj/structure/sign/warning/gas_mask/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/item/kirbyplants/organic/plant3, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "cpC" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -7140,18 +7124,6 @@ /obj/machinery/status_display/evac/directional/south, /turf/open/floor/plating, /area/station/maintenance/solars/port/aft) -"cpW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/mapping_helpers/apc/cell_10k, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/engineering/supermatter/room) -"cpY" = ( -/obj/item/pickaxe, -/turf/open/floor/plating/airless, -/area/space/nearstation) "cpZ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -7163,6 +7135,15 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"cqh" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Pure to Incinerator" + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/purple/visible, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/station/engineering/atmos) "cqm" = ( /obj/structure/table, /obj/item/clipboard, @@ -7190,23 +7171,6 @@ "cqr" = ( /turf/closed/wall/r_wall/rust, /area/station/science/ordnance/storage) -"cqA" = ( -/obj/machinery/atmospherics/components/tank/plasma{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark, -/area/station/maintenance/disposal/incinerator) -"cqD" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 4 - }, -/obj/machinery/duct, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/security/prison/garden) "cqE" = ( /obj/structure/flora/bush/fullgrass/style_random, /turf/open/floor/grass, @@ -7242,6 +7206,13 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison/garden) +"cqR" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) "cqT" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/dirt, @@ -7256,15 +7227,6 @@ /obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron, /area/station/cargo/warehouse) -"cre" = ( -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/engineering/atmos) "crh" = ( /obj/structure/cable, /obj/machinery/holopad/secure, @@ -7279,11 +7241,6 @@ "cry" = ( /turf/open/space/basic, /area/space/nearstation) -"crz" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "crG" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/lattice/catwalk, @@ -7330,15 +7287,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) -"csk" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/aft) "cso" = ( /obj/structure/table, /obj/item/kitchen/fork/plastic, @@ -7381,6 +7329,15 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) +"ctp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/portables_connector/layer4, +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/effect/turf_decal/box, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/iron/dark, +/area/station/maintenance/aft) "ctt" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -7432,18 +7389,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/armory) -"cuB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/camera/directional/north{ - c_tag = "Head of Security's Office" - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/machinery/photocopier, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/machinery/light/warm/directional/north, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/hos) "cuD" = ( /obj/structure/sign/departments/security/directional/south, /obj/structure/flora/grass/jungle/b/style_random, @@ -7486,6 +7431,18 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"cva" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "CO2 to Pure" + }, +/obj/effect/turf_decal/tile/dark/opposingcorners{ + dir = 4 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/atmos) "cvi" = ( /obj/effect/turf_decal/siding/thinplating/light{ dir = 1 @@ -7565,23 +7522,6 @@ /obj/structure/girder, /turf/open/floor/plating, /area/station/maintenance/department/security) -"cxa" = ( -/obj/machinery/computer/records/security{ - dir = 1 - }, -/obj/effect/turf_decal/bot, -/obj/machinery/airalarm/directional/south, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/medical) -"cxB" = ( -/obj/machinery/computer/station_alert, -/obj/effect/turf_decal/bot, -/obj/machinery/newscaster/directional/north, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "cxO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -7619,6 +7559,19 @@ /obj/structure/displaycase/trophy, /turf/open/floor/wood, /area/station/service/library) +"cyJ" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 4 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron/showroomfloor, +/area/station/science/lobby) "cyP" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -7639,6 +7592,18 @@ /obj/item/seeds/ambrosia, /turf/open/floor/grass, /area/station/security/prison/garden) +"czf" = ( +/obj/machinery/door/airlock/external{ + name = "Prison External Airlock" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/any/security/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/maintenance/port/lesser) "czj" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ @@ -7647,6 +7612,14 @@ /obj/effect/mapping_helpers/airlock/access/all/command/eva, /turf/open/floor/iron/dark, /area/station/command/eva) +"czu" = ( +/obj/structure/grille/broken, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/aft) "czv" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -7692,19 +7665,11 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard) -"czR" = ( -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/tile/blue{ +"czO" = ( +/turf/open/floor/iron/smooth_half{ dir = 8 }, -/obj/structure/table/glass, -/obj/machinery/microwave{ - pixel_y = 5 - }, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/break_room) +/area/station/engineering/atmos) "czT" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -7722,31 +7687,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"cAk" = ( -/obj/structure/table, -/obj/item/stack/sheet/plasteel/fifty{ - amount = 10; - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/stack/sheet/rglass{ - amount = 50 - }, -/obj/item/stack/sheet/rglass{ - amount = 50 - }, -/obj/item/clothing/shoes/magboots{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/clothing/shoes/magboots, -/obj/machinery/airalarm/directional/south, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/machinery/light/cold/dim/directional/south, -/turf/open/floor/iron/dark, -/area/station/command/eva) "cAl" = ( /obj/effect/landmark/start/scientist, /obj/effect/turf_decal/tile/purple/anticorner/contrasted{ @@ -7791,6 +7731,32 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"cBk" = ( +/obj/machinery/flasher/directional/west{ + id = "AI"; + name = "Meatbag Pacifier" + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/ai/upload/chamber) +"cBo" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/iron, +/area/station/engineering/atmos/office) "cBD" = ( /obj/structure/flora/grass/jungle/a/style_random, /obj/effect/turf_decal/sand/plating, @@ -7826,23 +7792,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/command/bridge) -"cCe" = ( -/obj/structure/sign/warning/fire, -/obj/structure/grille, -/turf/closed/wall/r_wall, -/area/station/engineering/atmos) -"cCJ" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "Port Mix to East Ports" - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos) "cCS" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -7850,6 +7799,7 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, +/obj/machinery/holopad, /turf/open/floor/carpet/red, /area/station/service/chapel) "cDf" = ( @@ -7903,18 +7853,22 @@ "cEr" = ( /turf/closed/wall, /area/station/command/bridge) -"cEu" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "cES" = ( /obj/structure/bookcase/random/fiction, /obj/effect/decal/cleanable/cobweb, /turf/open/floor/iron/dark, /area/station/maintenance/starboard/fore) +"cFk" = ( +/obj/machinery/newscaster/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/table/wood/fancy/red, +/obj/structure/sign/painting/large/library{ + dir = 8; + pixel_x = -29 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron/dark, +/area/station/service/library) "cFq" = ( /obj/machinery/door/airlock/maintenance, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -7941,18 +7895,15 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/command/heads_quarters/hos) -"cGd" = ( -/obj/structure/table, -/obj/item/storage/box/bodybags{ - pixel_y = 5 - }, -/obj/item/pen, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ +"cGf" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/atmospherics/components/unary/airlock_pump/unbolt_only{ dir = 8 }, -/obj/machinery/light/cold/directional/south, +/obj/effect/turf_decal/bot, +/obj/structure/sign/warning/vacuum/external/directional/south, /turf/open/floor/iron/dark, -/area/station/medical/medbay/lobby) +/area/station/hallway/secondary/exit/departure_lounge) "cGl" = ( /obj/machinery/disposal/bin/tagger, /obj/effect/turf_decal/bot, @@ -7966,8 +7917,9 @@ "cGm" = ( /obj/effect/turf_decal/bot, /obj/structure/closet, -/obj/structure/grille/broken, /obj/item/analyzer, +/obj/effect/spawner/random/maintenance, +/obj/item/t_scanner, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) "cGr" = ( @@ -8011,6 +7963,30 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"cGZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/brown/visible, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"cHd" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"cHe" = ( +/obj/structure/chair/stool/directional/west, +/obj/effect/landmark/start/atmospheric_technician, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmos) "cHg" = ( /obj/structure/chair/pew{ dir = 8 @@ -8026,14 +8002,6 @@ /obj/structure/lattice/catwalk, /turf/open/floor/plating/airless, /area/space/nearstation) -"cHv" = ( -/obj/effect/turf_decal/tile/brown/half/contrasted, -/obj/effect/turf_decal/tile/yellow, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "cHz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -8136,6 +8104,12 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/office) +"cIr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "cIC" = ( /obj/structure/cable, /obj/machinery/duct, @@ -8146,6 +8120,17 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plastic, /area/station/hallway/secondary/service) +"cIS" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted, +/obj/structure/closet/secure_closet/paramedic, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/airalarm/directional/east, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/paramedic) "cIU" = ( /turf/closed/wall/rust, /area/station/construction/mining/aux_base) @@ -8194,6 +8179,7 @@ }, /obj/machinery/light/small/directional/north, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/structure/sign/warning/secure_area/directional/north, /turf/open/floor/engine, /area/station/engineering/gravity_generator) "cJh" = ( @@ -8235,11 +8221,34 @@ /obj/structure/grille/broken, /turf/open/floor/plating/airless, /area/space/nearstation) +"cJZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/corner, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/landmark/firealarm_sanity, +/turf/open/floor/iron/dark, +/area/station/maintenance/port/greater) "cKd" = ( /obj/effect/turf_decal/box/corners, /obj/structure/sign/warning/electric_shock/directional/south, /turf/open/floor/engine, /area/station/science/xenobiology) +"cKr" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "cKz" = ( /obj/structure/sign/departments/cargo, /turf/closed/wall, @@ -8253,6 +8262,15 @@ }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"cKW" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/dark/corner{ + dir = 4 + }, +/area/station/hallway/primary/fore) "cKY" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 8 @@ -8271,21 +8289,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"cLu" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 5 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) "cLx" = ( /obj/structure/chair/office/light, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -8350,6 +8353,17 @@ /obj/effect/turf_decal/tile/purple/anticorner/contrasted, /turf/open/floor/iron/showroomfloor, /area/station/science/ordnance) +"cME" = ( +/obj/structure/window/reinforced/plasma/spawner/directional/east, +/obj/structure/cable, +/obj/machinery/power/energy_accumulator/tesla_coil/anchored, +/obj/machinery/atmospherics/pipe/smart/manifold/green/visible{ + dir = 8 + }, +/turf/open/floor/circuit/green{ + luminosity = 2 + }, +/area/station/engineering/supermatter/engine) "cMT" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -8361,6 +8375,21 @@ /obj/effect/turf_decal/tile/yellow/anticorner/contrasted, /turf/open/floor/iron/showroomfloor, /area/station/medical/medbay/central) +"cNJ" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "packagereturn"; + name = "crate return belt" + }, +/obj/effect/turf_decal/bot, +/obj/machinery/camera/directional/south{ + c_tag = "Delivery Office"; + name = "cargo camera"; + network = list("ss13","qm") + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/cargo/sorting) "cNZ" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/turf_decal/sand/plating, @@ -8414,17 +8443,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/medical/virology) -"cPp" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold/green/visible, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/engineering/atmos/pumproom) -"cPw" = ( -/obj/effect/turf_decal/bot, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "cPM" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -8442,6 +8460,14 @@ /obj/machinery/camera/directional/west, /turf/open/floor/iron/dark, /area/station/hallway/primary/fore) +"cPW" = ( +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "cPZ" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -8468,22 +8494,33 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"cQt" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/engineering/supermatter/room) +"cQg" = ( +/obj/structure/bed, +/obj/machinery/iv_drip, +/obj/item/bedsheet/medical, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/security/medical) +"cQq" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/disposal/bin/tagger, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/commons/locker) "cQJ" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard) -"cQN" = ( -/obj/effect/spawner/structure/window/hollow/reinforced/middle, -/obj/structure/transit_tube, -/turf/open/floor/plating, -/area/space/nearstation) "cQR" = ( /turf/closed/wall, /area/station/maintenance/department/cargo) @@ -8495,6 +8532,16 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/hallway/primary/central/fore) +"cRb" = ( +/obj/structure/table, +/obj/machinery/status_display/ai/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/light/cold/directional/west, +/turf/open/floor/iron/dark, +/area/station/ai/satellite/foyer) "cRq" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral{ @@ -8512,15 +8559,6 @@ "cRv" = ( /turf/closed/wall, /area/station/service/chapel/monastery) -"cRM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "cRO" = ( /obj/item/toy/figure/qm{ pixel_x = -17 @@ -8539,21 +8577,6 @@ }, /turf/open/floor/carpet/orange, /area/station/command/heads_quarters/qm) -"cRQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) -"cRV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/splatter/oil, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/service/chapel/storage) "cRW" = ( /obj/machinery/door/poddoor/shutters/preopen{ dir = 4; @@ -8563,19 +8586,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/medical/pharmacy) -"cSj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/corner, -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/landmark/firealarm_sanity, -/turf/open/floor/iron/dark, -/area/station/maintenance/port/greater) "cSl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/firealarm/directional/north, @@ -8603,19 +8613,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/showroomfloor, /area/station/medical/chemistry) -"cSU" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/components/binary/pump{ - name = "Pure to Fuel Pipe" - }, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "cSX" = ( /obj/machinery/computer/records/security{ dir = 8 @@ -8624,26 +8621,6 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/security/warden) -"cSZ" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/siding/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/lobby) "cTh" = ( /obj/machinery/porta_turret/ai{ dir = 1 @@ -8726,20 +8703,11 @@ /obj/effect/spawner/random/trash/cigbutt, /turf/open/floor/iron, /area/station/security/prison) -"cUA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ +"cUC" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/carbon_output{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, +/turf/open/floor/engine/co2, /area/station/engineering/atmos) "cUD" = ( /obj/machinery/door/airlock/maintenance, @@ -8752,13 +8720,15 @@ /obj/effect/mapping_helpers/airlock/access/any/security/maintenance, /turf/open/floor/iron/dark, /area/station/maintenance/port/lesser) -"cUM" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/smart/manifold/violet/visible{ +"cUL" = ( +/obj/effect/turf_decal/stripes/line{ dir = 8 }, /obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/duct, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Pure to Crystallizer" + }, /turf/open/floor/iron, /area/station/engineering/atmos) "cUR" = ( @@ -8769,13 +8739,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/engine, /area/station/ai/satellite/foyer) -"cVb" = ( -/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ - dir = 4 - }, -/obj/structure/lattice/catwalk, -/turf/open/space/basic, -/area/space/nearstation) "cVg" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -8805,20 +8768,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"cWb" = ( -/obj/structure/table, -/obj/item/radio{ - pixel_x = -4; - pixel_y = 6 - }, -/obj/item/radio{ - pixel_x = 4; - pixel_y = 6 - }, -/obj/item/stack/package_wrap, -/obj/item/hand_labeler, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "cWi" = ( /obj/structure/plasticflaps, /obj/machinery/conveyor{ @@ -8834,20 +8783,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron/dark/corner, /area/station/hallway/primary/central/fore) -"cWp" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/gulag_item_reclaimer{ - dir = 8; - pixel_x = 30 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red/anticorner/contrasted, -/obj/effect/turf_decal/tile/neutral, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/processing) "cWu" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -8876,16 +8811,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/hydroponics/garden) -"cWN" = ( -/obj/machinery/door/airlock/external{ - name = "Atmospherics External Airlock" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "cWQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -8956,20 +8881,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/security/prison/mess) -"cXz" = ( -/obj/effect/turf_decal/bot, -/obj/structure/closet/secure_closet/personal, -/obj/item/storage/backpack, -/obj/item/storage/backpack/satchel, -/obj/item/clothing/suit/hooded/wintercoat, -/obj/item/clothing/shoes/winterboots, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron/dark, -/area/station/commons/locker) "cXH" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -9012,10 +8923,12 @@ "cXZ" = ( /turf/closed/wall, /area/station/hallway/primary/fore) -"cYc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, -/turf/closed/wall/r_wall, -/area/station/engineering/supermatter/engine) +"cYe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) "cYk" = ( /obj/structure/rack, /obj/item/storage/toolbox/mechanical, @@ -9074,16 +8987,14 @@ }, /turf/open/floor/iron/dark, /area/station/science/genetics) -"cYK" = ( -/obj/machinery/flasher/portable, +"cYB" = ( +/obj/structure/table/reinforced/plastitaniumglass, /obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/north, -/obj/effect/turf_decal/box, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 8 - }, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell, +/obj/machinery/light/small/broken/directional/south, /turf/open/floor/iron/dark, -/area/station/security/armory) +/area/station/service/chapel/storage) "cYN" = ( /obj/structure/chair{ dir = 8 @@ -9100,6 +9011,16 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/maintenance/department/crew_quarters/bar) +"cZf" = ( +/obj/machinery/portable_atmospherics/scrubber, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/tile/red/opposingcorners{ + dir = 1 + }, +/obj/structure/sign/poster/official/wtf_is_co2/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/atmos) "cZh" = ( /obj/machinery/door/airlock/maintenance, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -9114,6 +9035,22 @@ /obj/effect/mapping_helpers/airlock/access/any/security/maintenance, /turf/open/floor/iron/dark, /area/station/maintenance/port/lesser) +"cZk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/red{ + dir = 9 + }, +/obj/effect/landmark/start/depsec/supply, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/security/checkpoint/supply) "cZo" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -9122,16 +9059,6 @@ }, /turf/open/floor/iron, /area/station/cargo/miningdock) -"cZN" = ( -/obj/effect/turf_decal/siding/red{ - dir = 9 - }, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/exit/departure_lounge) "cZT" = ( /obj/effect/turf_decal/bot, /obj/machinery/light/small/directional/south, @@ -9162,16 +9089,33 @@ /obj/effect/mapping_helpers/airlock/access/any/science/maintenance, /turf/open/floor/iron/dark, /area/station/maintenance/starboard) -"daL" = ( -/obj/effect/turf_decal/stripes/line{ +"daM" = ( +/obj/effect/turf_decal/bot, +/obj/structure/railing{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold/violet/visible{ - dir = 1 +/obj/item/analyzer{ + pixel_x = 4; + pixel_y = 4 }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, +/obj/item/analyzer, +/obj/structure/rack, +/obj/item/wrench, +/obj/item/wrench, +/turf/open/floor/iron/smooth_large, /area/station/engineering/atmos) +"dbe" = ( +/obj/structure/table, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/machinery/airalarm/directional/east, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/cold/directional/east, +/turf/open/floor/iron/dark, +/area/station/ai/satellite/maintenance/storage) "dbp" = ( /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, @@ -9197,6 +9141,10 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark, /area/station/medical/morgue) +"dbP" = ( +/obj/effect/spawner/structure/window/reinforced/tinted, +/turf/open/floor/plating, +/area/station/commons/vacant_room/commissary) "dbR" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/decal/cleanable/dirt, @@ -9209,6 +9157,11 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"dcg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/small/directional/west, +/turf/open/floor/grass, +/area/station/science/auxlab) "dch" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 4 @@ -9244,15 +9197,6 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/dark, /area/station/service/library) -"dcA" = ( -/obj/structure/sign/warning/biohazard/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/virology) "dcD" = ( /obj/structure/table, /obj/item/surgical_drapes, @@ -9294,20 +9238,20 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/science/research) -"ddb" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Atmospherics Tank - N2"; - name = "atmospherics camera"; - network = list("ss13","engine") - }, -/turf/open/floor/engine/n2, -/area/station/engineering/atmos) "ddp" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 }, /turf/open/floor/wood, /area/station/service/bar/atrium) +"ddq" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/firedoor, +/turf/open/floor/plating, +/area/station/engineering/atmos/pumproom) "ddw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -9329,6 +9273,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /turf/closed/wall, /area/station/maintenance/starboard) +"ddR" = ( +/obj/machinery/atmospherics/pipe/smart/simple/brown/visible, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/engine, +/area/station/engineering/atmos) "ddS" = ( /obj/effect/turf_decal/bot, /obj/structure/table, @@ -9387,42 +9336,35 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/miningdock) -"deF" = ( -/obj/machinery/portable_atmospherics/canister/air{ - pixel_x = 4 - }, -/obj/item/clothing/mask/breath{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/structure/sign/poster/contraband/random/directional/north, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 +"deB" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 9 }, -/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4{ - dir = 8 +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ + dir = 9 }, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/entry) +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/iron, +/area/station/engineering/atmos) "deI" = ( -/obj/effect/turf_decal/bot, -/obj/structure/grille, +/obj/effect/spawner/random/maintenance, +/obj/structure/closet/cardboard, +/obj/effect/spawner/random/entertainment/cigarette_pack, +/obj/effect/spawner/random/entertainment/lighter, /turf/open/floor/plating, /area/station/maintenance/aft) +"deL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/science/auxlab) "deZ" = ( /obj/structure/chair, /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"dfc" = ( -/obj/machinery/status_display/ai/directional/west, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/cable/layer3, -/turf/open/floor/engine, -/area/station/ai/satellite/chamber) "dfi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -9437,14 +9379,6 @@ /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/iron/dark, /area/station/command/bridge) -"dfk" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/decal/cleanable/ash/large, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "dfv" = ( /obj/machinery/rnd/production/circuit_imprinter/department/science, /obj/effect/turf_decal/bot, @@ -9501,12 +9435,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/hallway/secondary/exit/departure_lounge) -"dgg" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/pipedispenser/disposal, -/obj/machinery/status_display/evac/directional/south, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "dgi" = ( /obj/machinery/light/small/directional/west, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -9518,41 +9446,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"dgo" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/firealarm/directional/north, -/obj/structure/cable, -/obj/machinery/camera/directional/north{ - c_tag = "Supermatter Engine"; - name = "supermatter camera"; - network = list("engine") - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) -"dgp" = ( -/obj/structure/closet/emcloset/anchored, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/service/chapel) -"dgu" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/scrubber, -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/obj/machinery/airalarm/directional/north, -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/engineering/atmos) "dgw" = ( /obj/structure/sign/warning/docking, /turf/closed/wall/rust, @@ -9569,52 +9462,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/ruin/space/has_grav/abandoned_warehouse) -"dgE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/components/trinary/mixer/airmix, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) -"dgG" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, +"dgJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible/layer2, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/machinery/light/floor, -/turf/open/floor/iron, -/area/station/engineering/hallway) -"dgP" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ - dir = 4 - }, -/obj/machinery/computer/atmos_control/nitrous_tank{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted, /turf/open/floor/iron/showroomfloor, -/area/station/engineering/atmos) +/area/station/science/ordnance/office) "dgW" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, @@ -9653,12 +9506,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"dhG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/holopad, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron, -/area/station/cargo/sorting) "dhL" = ( /obj/docking_port/stationary{ dir = 4; @@ -9729,19 +9576,6 @@ /obj/effect/turf_decal/tile/purple/half/contrasted, /turf/open/floor/iron/showroomfloor, /area/station/engineering/circuit_workshop) -"diP" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/obj/machinery/defibrillator_mount/directional/west, -/obj/machinery/stasis{ - dir = 4 - }, -/obj/effect/turf_decal/box, -/obj/machinery/vitals_reader/directional/north, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/dark, -/area/station/medical/treatment_center) "diQ" = ( /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/stripes/line{ @@ -9773,6 +9607,16 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/storage) +"diY" = ( +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 4 + }, +/obj/machinery/computer/security/telescreen/ordnance/directional/east, +/turf/open/floor/iron/showroomfloor, +/area/station/science/ordnance) "diZ" = ( /obj/structure/sign/painting/library_secure{ pixel_x = -32 @@ -9788,12 +9632,34 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/fore) +"djh" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/camera/directional/north{ + c_tag = "Atmospherics Lockers"; + name = "atmospherics camera"; + network = list("ss13","engine") + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/structure/closet/secure_closet/atmospherics, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/item/pickaxe/mini, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) "djo" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ dir = 8 }, /turf/open/floor/iron/dark/airless, /area/station/science/ordnance/freezerchamber) +"djy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/box, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "djC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -9806,6 +9672,32 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) +"djM" = ( +/obj/structure/cable, +/obj/structure/chair/sofa/right/maroon{ + dir = 4 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/airalarm/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/bar/atrium) +"djN" = ( +/obj/machinery/computer/records/security{ + dir = 1 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) "djW" = ( /obj/machinery/airalarm/directional/south, /obj/machinery/camera/directional/south{ @@ -9826,13 +9718,6 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"dka" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/light/floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "dke" = ( /obj/machinery/firealarm/directional/west, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -9849,33 +9734,24 @@ /obj/machinery/holopad, /turf/open/floor/carpet/blue, /area/station/command/heads_quarters/hop) +"dkz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/ai/upload/chamber) "dkA" = ( /obj/structure/flora/bush/leavy/style_random, /obj/machinery/light/small/directional/south, /obj/structure/flora/bush/flowers_yw/style_random, /turf/open/floor/grass, /area/station/service/hydroponics/garden) -"dkD" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/engineering/atmos) -"dkE" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - name = "Security Checkpoint" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/general, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/aft) "dkH" = ( /obj/structure/cable, /obj/machinery/duct, @@ -9944,22 +9820,25 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/command/heads_quarters/rd) +"dls" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "dlI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/showroomfloor, /area/station/science/robotics/lab) -"dlO" = ( -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 4 - }, -/obj/structure/table/glass, -/obj/structure/cable, -/obj/structure/fireaxecabinet/jawsofrecovery/directional/east, -/obj/item/surgicaldrill, -/obj/item/toy/figure/paramedic, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/paramedic) "dlS" = ( /obj/machinery/light/floor, /turf/open/floor/engine/vacuum, @@ -10075,13 +9954,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/brig) -"dnS" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "dod" = ( /obj/effect/landmark/start/head_of_personnel, /obj/structure/chair/office{ @@ -10089,15 +9961,6 @@ }, /turf/open/floor/carpet/blue, /area/station/command/heads_quarters/hop) -"dof" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/blue, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/engineering/atmos) "doj" = ( /obj/effect/turf_decal/stripes/corner, /obj/effect/decal/cleanable/dirt, @@ -10157,6 +10020,26 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) +"doV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/binary/valve{ + dir = 8; + name = "Port Valve" + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"dpb" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/closet/crate/silvercrate, +/obj/item/screwdriver/power, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/command/vault) "dpc" = ( /obj/effect/turf_decal/siding/thinplating/dark/end{ dir = 4 @@ -10213,36 +10096,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"dqh" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/firecloset, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/plating, -/area/station/hallway/secondary/exit/departure_lounge) -"dqk" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/ai/upload/chamber) -"dqq" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron/dark, -/area/station/command/bridge) -"dqv" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/light/warm/directional/south, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "dqw" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -10254,22 +10107,6 @@ /obj/effect/turf_decal/tile/purple/opposingcorners, /turf/open/floor/iron/showroomfloor, /area/station/science/robotics/lab) -"dqF" = ( -/obj/effect/decal/cleanable/ash, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) -"dqJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/computer/security/telescreen/monastery/directional/south, -/turf/open/floor/iron/grimy, -/area/station/hallway/primary/fore) "dqL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, @@ -10278,21 +10115,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"drk" = ( -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable, -/obj/structure/table, -/obj/item/book/manual/wiki/atmospherics, -/obj/item/stack/sheet/rglass{ - amount = 20; - pixel_x = 2; - pixel_y = -2 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/maintenance/disposal/incinerator) "drl" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/tile/purple, @@ -10361,14 +10183,6 @@ /obj/machinery/griddle, /turf/open/floor/iron/white, /area/station/security/prison/mess) -"drX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/ai/upload/chamber) "dsc" = ( /obj/machinery/door/airlock/command/glass{ name = "Control Room" @@ -10415,6 +10229,19 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/security/courtroom) +"dsx" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/components/binary/pump/on{ + name = "Gas to Cold Loop"; + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "dsD" = ( /obj/structure/sign/departments/cargo, /turf/closed/wall, @@ -10450,6 +10277,13 @@ /obj/effect/turf_decal/tile/green/fourcorners, /turf/open/floor/iron/checker, /area/station/service/hydroponics) +"dsX" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/turf/open/space/basic, +/area/space/nearstation) "dtg" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/oxygen_input{ dir = 4 @@ -10476,6 +10310,17 @@ /obj/effect/mapping_helpers/airlock/unres/delayed, /turf/open/floor/iron/dark, /area/station/maintenance/port/fore) +"dtE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 4 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/rd) "dtP" = ( /obj/effect/turf_decal/siding/wood{ dir = 9 @@ -10490,6 +10335,25 @@ }, /turf/open/floor/iron/dark, /area/station/commons/storage/primary) +"dtV" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"dus" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "duA" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/masks, @@ -10520,34 +10384,9 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central) -"dva" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) "dvk" = ( /turf/closed/wall/r_wall/rust, /area/station/maintenance/department/bridge) -"dvq" = ( -/obj/machinery/door/airlock/external{ - name = "Atmospherics External Airlock" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/turf/open/floor/plating, -/area/space/nearstation) "dvs" = ( /obj/machinery/firealarm/directional/north, /obj/machinery/camera/autoname/directional/north{ @@ -10564,9 +10403,40 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron, /area/station/command/eva) +"dvF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/bridge_pipe/orange/visible{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/purple/visible, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"dvI" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/computer/station_alert, +/obj/machinery/requests_console/directional/east{ + department = "Atmospherics"; + name = "Atmospherics Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) "dvN" = ( /turf/open/misc/asteroid/lowpressure, /area/space/nearstation) +"dwa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) "dwc" = ( /obj/structure/table, /obj/item/radio/intercom{ @@ -10584,6 +10454,21 @@ /obj/machinery/computer/security/telescreen/minisat/directional/south, /turf/open/floor/plating, /area/station/hallway/primary/central/fore) +"dwj" = ( +/obj/effect/turf_decal/siding/thinplating/light/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel/monastery) +"dwq" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/engineering/main) "dwx" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -10598,14 +10483,6 @@ "dwz" = ( /turf/closed/wall/rust, /area/station/maintenance/space_hut/plasmaman) -"dwB" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ - dir = 10 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos/pumproom) "dwL" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/disposalpipe/segment, @@ -10629,20 +10506,8 @@ /turf/open/floor/iron/dark, /area/station/security/interrogation) "dxm" = ( -/obj/structure/sign/warning/secure_area, /turf/closed/wall/rust, /area/station/engineering/gravity_generator) -"dxq" = ( -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/dark/visible, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/machinery/duct, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "dxu" = ( /obj/machinery/camera/directional/west{ c_tag = "Xenobiology Cell 1"; @@ -10701,6 +10566,22 @@ /obj/structure/sign/warning/electric_shock, /turf/closed/wall/r_wall, /area/station/command/bridge) +"dyL" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/obj/structure/sign/warning/electric_shock/directional/south, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"dyP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/station/maintenance/aft) "dyX" = ( /obj/structure/reagent_dispensers/cooking_oil, /obj/effect/turf_decal/delivery, @@ -10717,17 +10598,16 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard) -"dzt" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 +"dzK" = ( +/obj/structure/window/spawner/directional/east, +/obj/structure/window/spawner/directional/south, +/obj/structure/window/spawner/directional/west, +/obj/structure/flora/bush/large/style_random{ + pixel_y = 0 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/station/medical/medbay/central) "dzL" = ( /obj/machinery/modular_computer/preset/engineering{ dir = 8 @@ -10740,6 +10620,23 @@ "dzS" = ( /turf/closed/wall, /area/station/security/lockers) +"dAb" = ( +/obj/machinery/portable_atmospherics/canister/air{ + pixel_x = 4 + }, +/obj/item/clothing/mask/breath{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/structure/sign/poster/contraband/random/directional/north, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) "dAu" = ( /obj/structure/closet/crate, /obj/effect/turf_decal/stripes/line{ @@ -10763,6 +10660,19 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, /area/station/medical/medbay/lobby) +"dAP" = ( +/obj/effect/turf_decal/bot, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/computer/operating{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/vitals_reader/directional/south, +/turf/open/floor/iron/dark, +/area/station/medical/surgery/theatre) "dAQ" = ( /obj/machinery/door/airlock/research/glass{ name = "Ordnance Lab" @@ -10840,6 +10750,14 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/robotics/lab) +"dBG" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 2; + name = "Pure to Aux" + }, +/obj/effect/turf_decal/tile/bar/fourcorners, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/atmos) "dBV" = ( /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, @@ -10847,21 +10765,15 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/showroomfloor, /area/station/science) -"dBX" = ( -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/disposal/bin/tagger, -/obj/effect/turf_decal/bot, -/obj/machinery/firealarm/directional/west, -/obj/machinery/status_display/supply{ - pixel_y = -32 +"dBY" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + dir = 8 }, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ dir = 4 }, -/turf/open/floor/iron/dark, -/area/station/cargo/storage) +/turf/open/floor/iron/showroomfloor, +/area/station/science/ordnance) "dCd" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/table/wood/fancy/blue, @@ -10879,6 +10791,9 @@ "dCM" = ( /turf/closed/wall/rust, /area/station/service/bar/atrium) +"dCO" = ( +/turf/open/floor/iron, +/area/station/hallway/secondary/entry) "dCW" = ( /obj/structure/closet/secure_closet/freezer/fridge, /obj/structure/extinguisher_cabinet/directional/west, @@ -10886,6 +10801,23 @@ /obj/machinery/light/cold/directional/west, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) +"dDg" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/supermatter/room) "dDp" = ( /obj/structure/mirror/directional/north, /obj/structure/sink/directional/south, @@ -10966,18 +10898,17 @@ /turf/open/floor/iron/dark, /area/station/service/chapel/dock) "dFa" = ( -/obj/structure/closet/crate/trashcart/laundry, -/obj/effect/spawner/random/contraband/prison, -/obj/item/clothing/under/rank/prisoner, -/obj/item/clothing/under/rank/prisoner, -/obj/item/clothing/under/rank/prisoner/skirt, -/obj/item/clothing/under/rank/prisoner/skirt, -/obj/effect/turf_decal/tile/blue/opposingcorners{ +/obj/effect/turf_decal/stripes/corner{ dir = 1 }, -/obj/structure/cable, -/turf/open/floor/iron/cafeteria, -/area/station/security/prison/garden) +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "dFj" = ( /obj/effect/turf_decal/delivery, /obj/effect/decal/cleanable/dirt, @@ -10993,15 +10924,6 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/miningdock) -"dFC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/door/airlock{ - name = "Prison Kitchen" - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/security/prison/mess) "dFM" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, @@ -11011,6 +10933,17 @@ /obj/effect/mapping_helpers/airlock/access/any/security/maintenance, /turf/open/floor/iron/dark, /area/station/maintenance/port/lesser) +"dGb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/purple/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "dGo" = ( /obj/machinery/computer/security/telescreen/auxbase/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -11060,10 +10993,21 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"dGS" = ( +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/airlock/external/glass{ + name = "Atmospherics External Airlock" + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) "dGX" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/duct, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, /turf/open/floor/iron, /area/station/engineering/main) "dHc" = ( @@ -11090,6 +11034,20 @@ /obj/structure/sign/warning/secure_area, /turf/closed/wall/r_wall, /area/station/engineering/storage/tech) +"dHE" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/mmi, +/turf/open/floor/iron/dark, +/area/station/service/chapel/storage) +"dHG" = ( +/obj/structure/grille, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/sign/warning/directional/east, +/turf/open/floor/plating/airless, +/area/space/nearstation) "dHL" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/old, @@ -11103,11 +11061,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"dIg" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark, -/area/station/maintenance/disposal/incinerator) "dIh" = ( /obj/effect/turf_decal/siding/wood{ dir = 5 @@ -11134,17 +11087,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/service/chapel/dock) -"dIB" = ( -/obj/effect/turf_decal/tile/red/half/contrasted, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) -"dIN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible/layer2, -/turf/closed/wall/r_wall, -/area/station/maintenance/aft) "dIQ" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -11165,25 +11107,6 @@ }, /turf/open/floor/iron, /area/station/service/chapel/storage) -"dIX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/filingcabinet, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/machinery/firealarm/directional/south{ - pixel_x = -32 - }, -/obj/item/radio/intercom/directional/south, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/engineering) "dJd" = ( /obj/effect/turf_decal/loading_area{ dir = 4 @@ -11248,17 +11171,6 @@ }, /turf/closed/wall/r_wall, /area/station/science/ordnance/bomb) -"dJt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 9 - }, -/obj/machinery/computer/turbine_computer{ - dir = 1; - mapping_id = "main_turbine" - }, -/turf/open/floor/engine, -/area/station/maintenance/disposal/incinerator) "dJw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -11272,6 +11184,13 @@ }, /turf/open/floor/iron, /area/station/engineering/main) +"dJP" = ( +/obj/machinery/firealarm/directional/west, +/obj/machinery/computer/atmos_control/ordnancemix{ + dir = 4 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/science/ordnance) "dJS" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -11298,13 +11217,6 @@ }, /turf/open/floor/iron/dark, /area/station/medical/morgue) -"dKg" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/floor, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "dKo" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -11337,33 +11249,37 @@ "dKz" = ( /obj/structure/rack, /obj/effect/turf_decal/bot, -/obj/item/storage/belt/utility{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/storage/belt/utility, -/obj/item/clothing/head/utility/welding, -/obj/item/clothing/head/utility/welding, /obj/effect/turf_decal/stripes/corner{ dir = 8 }, /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ dir = 1 }, +/obj/item/storage/belt/utility, +/obj/item/storage/belt/utility, +/obj/item/storage/belt/utility, +/obj/item/clothing/glasses/meson/engine, +/obj/item/clothing/glasses/meson/engine, +/obj/item/clothing/glasses/meson/engine, /turf/open/floor/iron/dark, /area/station/engineering/storage_shared) "dKB" = ( -/obj/machinery/computer/order_console/cook{ +/obj/machinery/air_sensor/nitrous_tank, +/turf/open/floor/engine/n2o, +/area/station/engineering/atmos) +"dKF" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/railing/corner{ dir = 8 }, -/obj/effect/turf_decal/bot, -/obj/machinery/newscaster/directional/east, -/obj/machinery/camera/directional/east{ - c_tag = "Kitchen Coldroom"; - name = "kitchen camera" +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/station/service/kitchen/coldroom) +/obj/machinery/light/floor, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "dKJ" = ( /turf/closed/wall/r_wall/rust, /area/station/command/heads_quarters/captain/private) @@ -11390,6 +11306,13 @@ /obj/effect/turf_decal/siding/wood/corner, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) +"dKV" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 6 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "dKZ" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -11398,14 +11321,6 @@ /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating/airless, /area/space/nearstation) -"dLg" = ( -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/tile/purple/opposingcorners, -/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/science/lab) "dLh" = ( /obj/machinery/door/airlock/command/glass{ name = "Bridge Access" @@ -11447,10 +11362,33 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/lobby) -"dLD" = ( -/obj/machinery/light/warm/dim/directional/west, -/turf/open/floor/iron/dark, -/area/station/service/chapel/funeral) +"dLK" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/bot, +/obj/structure/rack, +/obj/item/wrench, +/obj/item/storage/toolbox/emergency{ + pixel_y = 4 + }, +/obj/item/hand_labeler, +/obj/item/stack/package_wrap, +/obj/machinery/button/door/directional/east{ + id = "commissaryshutter"; + name = "Commissary Shutter Toggle"; + pixel_x = 26; + pixel_y = 7 + }, +/obj/machinery/button/door/directional/east{ + id = "commissarydoor"; + name = "Commissary Door Lock"; + normaldoorcontrol = 1; + pixel_x = 26; + pixel_y = -2; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/station/commons/vacant_room/commissary) "dLL" = ( /obj/structure/flora/bush/ferny, /turf/open/misc/asteroid, @@ -11466,6 +11404,29 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"dLP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/siding/blue/corner{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/storage) +"dLR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ + dir = 1 + }, +/obj/structure/sign/warning/fire/directional/north, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "dMd" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -11492,11 +11453,29 @@ "dME" = ( /turf/closed/wall, /area/station/cargo/warehouse) -"dMR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/table_frame, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, +"dNA" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/obj/machinery/door/airlock/public/glass/incinerator/atmos_interior, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/airlock_controller/incinerator_atmos{ + pixel_y = -28 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/atmospherics/pipe/smart/simple/brown/visible/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) "dNL" = ( /obj/machinery/button/flasher{ @@ -11514,18 +11493,6 @@ /obj/machinery/computer/security/telescreen/interrogation/directional/north, /turf/open/floor/iron, /area/station/security/prison) -"dNT" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/machinery/gizmo/toggle/tucker_tubes, -/turf/open/floor/engine, -/area/station/science/auxlab) -"dOa" = ( -/obj/machinery/portable_atmospherics/canister/plasma, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/storage) "dOg" = ( /obj/item/kirbyplants/organic/plant22, /turf/open/floor/iron/dark, @@ -11543,14 +11510,9 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/broken_floor, +/obj/item/assembly/mousetrap, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"dOA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, -/obj/effect/turf_decal/stripes/line, -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "dOL" = ( /obj/structure/table, /obj/machinery/microwave{ @@ -11576,6 +11538,19 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics) +"dOY" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/light_switch/directional/west, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/disposal/bin/tagger, +/turf/open/floor/iron/dark, +/area/station/medical/office) "dPn" = ( /obj/structure/cable, /obj/machinery/photocopier, @@ -11585,10 +11560,13 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hop) -"dPr" = ( -/obj/structure/sign/warning/fire, -/turf/closed/wall/r_wall, -/area/station/engineering/supermatter/engine) +"dPu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/gizmo/toggle/tucker_tubes, +/turf/open/floor/engine, +/area/station/science/auxlab) "dPK" = ( /obj/effect/mapping_helpers/broken_floor, /obj/effect/decal/cleanable/dirt, @@ -11610,6 +11588,44 @@ /obj/structure/sign/poster/contraband/random/directional/west, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"dQa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/thermomachine/heater{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) +"dQm" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/hallway/primary/port) +"dQo" = ( +/obj/effect/turf_decal/siding/red{ + dir = 9 + }, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"dQt" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Pure to Ports" + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "dQx" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 4 @@ -11636,6 +11652,29 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron/showroomfloor, /area/station/medical/medbay/lobby) +"dQI" = ( +/obj/structure/table, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/gloves/latex, +/obj/item/storage/box/monkeycubes{ + pixel_x = 2; + pixel_y = 5 + }, +/obj/item/storage/box/monkeycubes{ + pixel_y = 3 + }, +/obj/effect/turf_decal/siding/purple/corner{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 1 + }, +/obj/item/paper/crumpled{ + default_raw_text = "This isn't funny, I'm trapped on the least fun room on the station."; + name = "poorly written complaint" + }, +/turf/open/floor/iron/dark, +/area/station/science/xenobiology) "dQK" = ( /obj/effect/turf_decal/delivery, /obj/machinery/door/poddoor{ @@ -11656,6 +11695,9 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/decal/cleanable/dirt, /obj/item/clothing/under/rank/engineering/engineer, +/obj/item/clothing/gloves/color/fyellow, +/obj/item/storage/toolbox/electrical, +/obj/structure/sign/poster/contraband/random/directional/east, /turf/open/floor/plating, /area/station/maintenance/aft) "dQS" = ( @@ -11718,25 +11760,6 @@ /obj/structure/cable, /turf/open/floor/engine/telecomms, /area/station/tcommsat/server) -"dRG" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/table, -/obj/effect/turf_decal/bot, -/obj/machinery/camera/directional/east{ - c_tag = "Cargo Office"; - name = "cargo camera"; - network = list("ss13","qm") - }, -/obj/machinery/fax{ - fax_name = "Cargo Office"; - name = "Cargo Office Fax Machine" - }, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/office) "dRR" = ( /obj/effect/turf_decal/bot, /obj/structure/bodycontainer/morgue, @@ -11778,15 +11801,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard) -"dSo" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/machinery/status_display/evac/directional/north, -/obj/machinery/light/warm/directional/north, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "dSt" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -11813,13 +11827,6 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit/departure_lounge) -"dSz" = ( -/obj/machinery/rnd/production/techfab/department/medical, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes/box, -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/dark, -/area/station/medical/storage) "dSB" = ( /obj/machinery/door/airlock/public/glass{ name = "Garden" @@ -11827,6 +11834,32 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, /area/station/service/hydroponics/garden) +"dSD" = ( +/obj/item/storage/fancy/cigarettes/cigars{ + pixel_x = 2; + pixel_y = 6 + }, +/obj/item/storage/fancy/cigarettes/cigars/havana{ + pixel_x = 2; + pixel_y = 8 + }, +/obj/item/storage/fancy/cigarettes/cigars/cohiba{ + pixel_x = 2; + pixel_y = 10 + }, +/obj/item/holosign_creator/robot_seat/bar, +/obj/machinery/status_display/evac/directional/west, +/obj/structure/table, +/obj/machinery/camera/directional/west{ + c_tag = "Bar"; + name = "bar camera" + }, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/light/warm/directional/west, +/turf/open/floor/iron/dark, +/area/station/service/bar) "dSG" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -11854,6 +11887,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/solars/port/fore) +"dSX" = ( +/obj/machinery/disposal/bin/tagger, +/obj/effect/turf_decal/bot, +/obj/item/radio/intercom/directional/east, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) "dTd" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -11870,10 +11916,13 @@ /obj/item/integrated_circuit/loaded/hello_world, /turf/open/floor/iron/showroomfloor, /area/station/engineering/circuit_workshop) -"dTG" = ( -/obj/structure/transit_tube/crossing, -/turf/open/floor/plating, -/area/station/maintenance/fore) +"dTF" = ( +/obj/machinery/holopad, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) "dTQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/yellow/half/contrasted, @@ -11911,25 +11960,6 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/dark, /area/station/service/bar) -"dUg" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/processing) -"dUm" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/medbay/central) "dUn" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -11955,6 +11985,13 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/virology) +"dUr" = ( +/obj/structure/transit_tube/curved/flipped{ + dir = 1 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "dUE" = ( /obj/structure/chair{ dir = 1 @@ -12018,13 +12055,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/service/chapel/storage) -"dVn" = ( -/obj/machinery/computer/bank_machine, -/obj/structure/sign/warning/secure_area/directional/north, -/turf/open/floor/circuit/green{ - luminosity = 2 - }, -/area/station/command/vault) "dVB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -12034,16 +12064,6 @@ }, /turf/open/floor/iron, /area/station/cargo/miningoffice) -"dVE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/engine, -/area/station/tcommsat/computer) "dVN" = ( /obj/structure/closet/secure_closet/personal/cabinet, /obj/item/clothing/head/fedora, @@ -12058,6 +12078,18 @@ /obj/item/clothing/suit/toggle/jacket/det_trench/noir, /turf/open/floor/iron/dark, /area/station/maintenance/port/greater) +"dVU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/status_display/ai/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/security/execution/transfer) "dWj" = ( /obj/machinery/door/airlock/maintenance/external{ name = "Mass Driver Intersection" @@ -12099,24 +12131,18 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/cargo/storage) -"dXh" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/corner{ +"dWQ" = ( +/obj/machinery/atmospherics/components/binary/tank_compressor{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ +/obj/effect/turf_decal/delivery, +/obj/structure/sign/poster/random/directional/north, +/obj/effect/turf_decal/tile/purple/half/contrasted{ dir = 1 }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/station/science/ordnance) "dXz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -12126,6 +12152,9 @@ }, /turf/open/floor/iron/dark, /area/station/security/interrogation) +"dXD" = ( +/turf/open/floor/engine, +/area/station/engineering/atmos) "dXI" = ( /obj/structure/flora/bush/lavendergrass/style_random, /turf/open/floor/grass, @@ -12158,6 +12187,26 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating/airless, /area/station/maintenance/solars/port/aft) +"dYp" = ( +/obj/item/reagent_containers/cup/glass/flask/gold{ + pixel_x = 3; + pixel_y = 8 + }, +/obj/item/reagent_containers/cup/glass/bottle/rum{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_x = 7; + pixel_y = 4 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass, +/obj/structure/table/wood, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/carpet/royalblack, +/area/station/command/heads_quarters/captain) "dYy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -12172,13 +12221,6 @@ /obj/item/wirecutters, /turf/open/floor/iron/dark, /area/station/security/office) -"dYH" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/newscaster/directional/north, -/obj/machinery/computer/atmos_control/nocontrol/master, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/storage/gas) "dYQ" = ( /obj/effect/turf_decal/bot, /obj/machinery/holopad, @@ -12212,12 +12254,6 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/dark, /area/station/command/bridge) -"dZS" = ( -/obj/machinery/door/airlock/atmos/glass, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/turf/open/floor/engine, -/area/station/maintenance/disposal/incinerator) "eah" = ( /obj/structure/closet, /obj/item/stack/rods/ten, @@ -12251,41 +12287,43 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/showroomfloor, /area/station/medical/paramedic) -"eaw" = ( -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ - dir = 10 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/pumproom) -"eaQ" = ( +"eba" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/stripes/line{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ +/obj/machinery/status_display/evac/directional/north, +/obj/effect/turf_decal/tile/red{ dir = 1 }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ +/obj/effect/turf_decal/tile/blue{ dir = 4 }, -/obj/effect/turf_decal/tile/blue, +/obj/machinery/light/directional/north, /turf/open/floor/iron, -/area/station/engineering/atmos/pumproom) -"ebp" = ( -/obj/effect/turf_decal/delivery, +/area/station/hallway/primary/starboard) +"ebr" = ( +/obj/structure/closet/secure_closet/bar, +/obj/item/flashlight/lantern, +/obj/effect/turf_decal/bot, +/obj/machinery/airalarm/directional/west, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/item/storage/photo_album/bar, /turf/open/floor/iron/dark, -/area/station/engineering/atmos) +/area/station/service/bar/backroom) +"ebu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/cargo/storage) "eby" = ( /obj/effect/turf_decal/stripes/white/corner{ dir = 4 @@ -12310,6 +12348,20 @@ /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron, /area/station/cargo/sorting) +"ebI" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/obj/machinery/meter, +/obj/effect/turf_decal/siding/brown{ + dir = 1 + }, +/obj/structure/railing/corner/end{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth_half, +/area/station/engineering/atmos/pumproom) "ebK" = ( /obj/effect/turf_decal/siding/wood{ dir = 9 @@ -12351,6 +12403,19 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/plating, /area/station/maintenance/department/cargo) +"ect" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/machinery/turretid{ + control_area = "/area/station/ai/upload/chamber"; + name = "AI Upload Turret Control"; + pixel_x = -30 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/engine, +/area/station/ai/upload/chamber) "ecE" = ( /turf/closed/wall/rust, /area/station/service/chapel/storage) @@ -12364,6 +12429,22 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/virology) +"ecP" = ( +/obj/effect/landmark/start/atmospheric_technician, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) +"ecR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "ecY" = ( /obj/structure/sign/warning/docking, /turf/closed/wall, @@ -12404,12 +12485,13 @@ /turf/open/floor/iron, /area/station/service/hydroponics) "een" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible, /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/machinery/portable_atmospherics/pump, +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2, /turf/open/floor/iron/dark/corner{ dir = 1 }, @@ -12422,16 +12504,6 @@ dir = 1 }, /area/station/hallway/primary/starboard) -"eeq" = ( -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/unres/delayed, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/turf/open/floor/iron/dark, -/area/station/maintenance/aft) "eer" = ( /turf/closed/wall, /area/station/medical/office) @@ -12459,27 +12531,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"eeJ" = ( -/obj/structure/table, -/obj/item/hand_labeler, -/obj/item/crowbar/red, -/obj/item/gps/mining, -/obj/effect/decal/cleanable/cobweb, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_switch/directional/north, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 +"eeG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/status_display/ai/directional/west, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/brown/half/contrasted{ +/obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/obj/machinery/light/directional/west, /turf/open/floor/iron, -/area/station/cargo/miningdock) +/area/station/hallway/primary/aft) "eeQ" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ @@ -12500,6 +12564,15 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/science) +"eeT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/visible, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "efe" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -12517,11 +12590,6 @@ "efG" = ( /turf/closed/wall, /area/station/maintenance/fore) -"efO" = ( -/obj/machinery/light/small/directional/west, -/obj/machinery/portable_atmospherics/canister/air, -/turf/open/floor/plating, -/area/station/maintenance/port/lesser) "efP" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -12537,13 +12605,6 @@ }, /turf/open/floor/iron, /area/station/command/teleporter) -"efS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/empty/directional/north, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "efV" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -12589,13 +12650,12 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/engine/xenobio, /area/station/science/xenobiology) -"egH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) +"egP" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "egU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/event_spawn, @@ -12610,13 +12670,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/carpet/red, /area/station/service/chapel) -"ehx" = ( -/obj/machinery/atmospherics/components/unary/passive_vent{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/box, -/turf/open/floor/plating/airless, -/area/space/nearstation) "ehF" = ( /obj/machinery/door/airlock/command{ name = "Command Catering Access" @@ -12652,6 +12705,14 @@ }, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) +"eit" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/aft) "eiz" = ( /obj/structure/cable, /obj/machinery/duct, @@ -12679,16 +12740,6 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/storage) -"eiJ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "eiW" = ( /obj/structure/lattice/catwalk, /obj/structure/railing, @@ -12735,6 +12786,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"ejr" = ( +/obj/machinery/telecomms/server/presets/common, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) "ejt" = ( /obj/structure/railing/corner{ dir = 4 @@ -12795,11 +12850,34 @@ "ekm" = ( /turf/closed/wall/r_wall, /area/station/engineering/supermatter/room) +"ekA" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/airalarm/directional/south, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/machinery/disposal/bin/tagger, +/obj/machinery/light/cold/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/pharmacy) "ekB" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/showroomfloor, /area/station/medical/treatment_center) +"ekC" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark, +/area/station/service/bar/backroom) "ekL" = ( /turf/closed/wall/rust, /area/station/service/kitchen/coldroom) @@ -12845,21 +12923,6 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/security/detectives_office) -"elm" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/computer/atmos_control/carbon_tank{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/orange/visible, -/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/tile/neutral/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "elw" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -12905,6 +12968,14 @@ }, /turf/open/misc/asteroid, /area/space/nearstation) +"emk" = ( +/obj/machinery/teleport/station, +/obj/machinery/status_display/evac/directional/east, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) "emo" = ( /obj/effect/decal/cleanable/blood/old, /obj/structure/chair/office{ @@ -12946,6 +13017,21 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/fore) +"emC" = ( +/obj/structure/table/wood/fancy/black, +/obj/item/food/grown/flower/poppy/geranium{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/food/grown/flower/poppy/geranium{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/food/grown/flower/poppy/geranium, +/obj/machinery/firealarm/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "emU" = ( /obj/machinery/door/poddoor/incinerator_atmos_aux, /turf/open/floor/engine, @@ -12965,13 +13051,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"eni" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/incinerator_input{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/maintenance/disposal/incinerator) "enj" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/abandoned, @@ -12984,18 +13063,6 @@ /obj/structure/barricade/wooden/crude, /turf/open/floor/iron/dark, /area/station/maintenance/fore) -"enr" = ( -/obj/structure/table, -/obj/item/storage/box/lights/mixed{ - pixel_y = 5 - }, -/obj/item/analyzer{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/analyzer, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "enP" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ @@ -13026,21 +13093,6 @@ }, /turf/open/floor/iron, /area/station/engineering/storage_shared) -"enU" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "Gas to Chamber" - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ - dir = 1 - }, -/obj/machinery/light/floor, -/turf/open/floor/iron/showroomfloor, -/area/station/science/xenobiology) "eob" = ( /obj/structure/sign/warning, /turf/closed/wall, @@ -13084,24 +13136,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/medical/virology) -"epi" = ( -/obj/machinery/button/door/directional/north{ - id = "Biohazard"; - name = "Emergency Research Lockdown"; - pixel_x = -8; - req_access = list("research") +"epl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 }, -/obj/structure/table, -/obj/machinery/recharger, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ - dir = 4 +/obj/effect/spawner/xmastree/rdrod, +/obj/effect/turf_decal/tile/purple{ + dir = 1 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 8 }, -/obj/machinery/light/small/directional/north, /turf/open/floor/iron/showroomfloor, -/area/station/security/checkpoint/science) +/area/station/science/lobby) "ept" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, @@ -13150,14 +13200,32 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/xenobiology) +"epJ" = ( +/obj/structure/rack, +/obj/effect/turf_decal/bot, +/obj/item/radio{ + pixel_x = 4; + pixel_y = 3 + }, +/obj/item/radio{ + pixel_x = -4; + pixel_y = 6 + }, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "epN" = ( /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"eqi" = ( -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/chemistry) +"eqr" = ( +/obj/structure/grille/broken, +/turf/open/misc/asteroid/airless, +/area/space/nearstation) +"eqt" = ( +/obj/structure/flora/bush/flowers_pp/style_random, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/grass, +/area/station/service/chapel) "eqx" = ( /obj/machinery/conveyor{ dir = 5; @@ -13219,15 +13287,6 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/department/crew_quarters/bar) -"erk" = ( -/obj/effect/decal/cleanable/blood/footprints{ - dir = 4; - pixel_x = 24; - pixel_y = 8 - }, -/obj/machinery/light/small/broken/directional/north, -/turf/open/floor/plating/rust, -/area/station/security/prison/shower) "erl" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm/directional/north, @@ -13236,38 +13295,32 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/cargo/office) -"ero" = ( -/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/engineering/atmos/pumproom) -"erp" = ( -/obj/structure/closet/wardrobe/miner, -/obj/effect/turf_decal/delivery, -/obj/item/clothing/suit/hooded/wintercoat/miner, -/obj/item/clothing/suit/hooded/wintercoat/miner, -/obj/item/clothing/suit/hooded/wintercoat/miner, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow/opposingcorners{ +"erx" = ( +/obj/structure/table, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/construction/plumbing, +/obj/item/construction/plumbing, +/obj/machinery/light_switch/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron, -/area/station/cargo/miningdock) +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/chemistry) "erH" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/medical/pharmacy) +"erM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/firecloset, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/plating, +/area/station/hallway/secondary/exit/departure_lounge) "erN" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -13278,6 +13331,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"esl" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/cafeteria, +/area/station/security/prison/garden) "esn" = ( /obj/structure/table/reinforced, /obj/item/clipboard, @@ -13310,6 +13369,28 @@ /obj/structure/chair/stool/directional/south, /turf/open/floor/iron/grimy, /area/station/security/prison) +"esC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/security/execution/education) +"esD" = ( +/obj/machinery/door/airlock/engineering{ + name = "Emergency Storage" + }, +/obj/effect/mapping_helpers/airlock/unres/delayed{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) "esG" = ( /turf/closed/wall/r_wall/rust, /area/station/maintenance/port/fore) @@ -13337,6 +13418,16 @@ }, /turf/closed/wall, /area/station/engineering/atmos) +"ete" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/atmos) "etm" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -13355,21 +13446,23 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/primary/starboard) +"etp" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Atmos to Loop" + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "etD" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/service/kitchen) -"etH" = ( -/obj/structure/table, -/obj/item/aicard, -/obj/item/assembly/flash/handheld, -/obj/item/assembly/flash/handheld, -/obj/machinery/airalarm/directional/east, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/storage/tech) "etO" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -13398,22 +13491,14 @@ /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron, /area/station/cargo/storage) -"eva" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/disposal/bin/tagger, -/obj/structure/extinguisher_cabinet/directional/west, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/disposalpipe/trunk, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, -/obj/machinery/light/warm/directional/west, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/storage/gas) "evb" = ( -/obj/structure/tank_dispenser, -/obj/effect/turf_decal/delivery, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/structure/closet/secure_closet/engineering_welding, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/station/engineering/main) "evs" = ( @@ -13435,13 +13520,27 @@ /turf/open/floor/iron/dark, /area/station/security/courtroom) "evD" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, /obj/effect/landmark/start/paramedic, /obj/machinery/duct, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, /turf/open/floor/iron/showroomfloor, /area/station/medical/paramedic) +"evW" = ( +/obj/structure/cable, +/obj/effect/landmark/start/hangover, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 8; + name = "disposals sorting disposal pipe" + }, +/obj/effect/mapping_helpers/mail_sorting/supply/disposals, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/box, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "ewa" = ( /obj/effect/turf_decal/tile/blue/opposingcorners, /obj/effect/landmark/event_spawn, @@ -13457,16 +13556,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/courtroom) -"ewt" = ( -/obj/effect/turf_decal/arrows/red{ - dir = 4; - pixel_x = -15 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "ewC" = ( /obj/structure/chair/pew/left{ dir = 8 @@ -13479,6 +13568,16 @@ dir = 4 }, /area/station/service/chapel) +"ewH" = ( +/obj/structure/closet/emcloset/anchored, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/service/chapel) "ewK" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -13511,15 +13610,17 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"ewZ" = ( -/obj/machinery/recharge_station, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 8 +"exb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 }, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/paramedic) +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/atmos) "exg" = ( /obj/structure/sign/warning/vacuum/external, /turf/closed/wall, @@ -13586,16 +13687,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"eyv" = ( -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ - dir = 4 - }, -/obj/machinery/meter, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) "eyA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -13605,28 +13696,18 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron/showroomfloor, /area/station/medical/medbay/lobby) -"eyJ" = ( -/obj/machinery/airalarm/directional/west, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 8 - }, -/obj/machinery/vending/coffee, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/break_room) "eyU" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/command/bridge) +"eyZ" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/newscaster/directional/north, +/obj/machinery/computer/atmos_control/nocontrol/master, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) "ezl" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -13700,12 +13781,6 @@ }, /turf/closed/wall/rust, /area/station/engineering/atmos) -"eAu" = ( -/obj/effect/turf_decal/box/white{ - color = "#52B4E9" - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "eAF" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -13715,24 +13790,28 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) -"eAQ" = ( -/obj/effect/spawner/random/engineering/tracking_beacon, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/medbay/central) -"eBm" = ( +"eAK" = ( /obj/structure/cable, -/obj/structure/table, -/obj/machinery/reagentgrinder{ - pixel_y = 5 +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ + dir = 8 }, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmos/storage) +"eAQ" = ( +/obj/effect/landmark/start/cyborg, +/obj/machinery/airalarm/directional/north, +/obj/machinery/camera/motion/directional/west{ + c_tag = "ai_upload Foyer"; + name = "upload camera"; + network = list("aiupload") }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) +/obj/machinery/computer/security/telescreen/aiupload/directional/west, +/obj/machinery/recharge_station, +/turf/open/floor/circuit/green{ + luminosity = 2 + }, +/area/station/ai/upload/chamber) "eBu" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -13763,6 +13842,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, /turf/open/floor/iron/showroomfloor, /area/station/medical/medbay/central) +"eBY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) "eCd" = ( /turf/closed/wall, /area/station/hallway/secondary/service) @@ -13789,23 +13873,33 @@ /obj/structure/cable, /turf/open/floor/plating, /area/ruin/space/has_grav/abandoned_warehouse) -"eCH" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/structure/extinguisher_cabinet/directional/west, -/obj/machinery/status_display/ai/directional/south, -/obj/structure/cable/layer3, -/turf/open/floor/engine, -/area/station/ai/satellite/chamber) +"eCR" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) "eCU" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 }, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) +"eCW" = ( +/obj/structure/table, +/obj/item/storage/box/bodybags{ + pixel_x = 4; + pixel_y = 6 + }, +/obj/item/storage/box/bodybags{ + pixel_y = 2 + }, +/obj/machinery/light_switch/directional/east, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "eDg" = ( /obj/structure/displaycase/captain, /obj/machinery/firealarm/directional/west, @@ -13814,6 +13908,17 @@ }, /turf/open/floor/wood/large, /area/station/command/heads_quarters/captain) +"eDl" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/security/glass{ + name = "Engineering Security Post" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) "eDq" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/purple/half/contrasted{ @@ -13846,30 +13951,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/storage) -"eDw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/effect/turf_decal/siding/purple/corner{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/machinery/light/floor, -/turf/open/floor/iron/showroomfloor, -/area/station/science/lobby) -"eDR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_switch/directional/south, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple/half/contrasted, -/obj/effect/turf_decal/tile/purple, -/turf/open/floor/iron/showroomfloor, -/area/station/science/auxlab) "eDT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -13886,6 +13967,15 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"eEd" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/brown/visible/layer2{ + dir = 6 + }, +/turf/open/floor/iron/smooth, +/area/station/maintenance/disposal/incinerator) "eEe" = ( /obj/structure/sign/warning/electric_shock/directional/south, /obj/effect/decal/cleanable/dirt, @@ -13912,20 +14002,16 @@ }, /turf/open/floor/iron/grimy, /area/station/security/prison) -"eEB" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 +"eEE" = ( +/obj/machinery/status_display/ai/directional/east, +/obj/machinery/camera/directional/north{ + c_tag = "ai_upload Turrets"; + name = "upload camera"; + network = list("aiupload") }, -/obj/effect/turf_decal/tile/blue, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/engineering/atmos) +/obj/item/kirbyplants/photosynthetic, +/turf/open/floor/circuit/red, +/area/station/ai/upload/chamber) "eEJ" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -13933,51 +14019,17 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/aft) -"eEU" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "eEX" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"eEY" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) -"eEZ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/engine, -/area/station/engineering/main) -"eFn" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 1; - name = "Mix to Filter" - }, -/obj/effect/decal/cleanable/dirt, +"eFy" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/floor, /turf/open/floor/iron, -/area/station/engineering/atmos/pumproom) +/area/station/hallway/primary/fore) "eFE" = ( /obj/structure/transit_tube/crossing, /obj/effect/turf_decal/sand/plating, @@ -14070,11 +14122,20 @@ "eHc" = ( /turf/closed/wall, /area/station/engineering/lobby) -"eHf" = ( -/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) +"eHe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red, +/obj/machinery/duct, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) "eHu" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -14086,17 +14147,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) -"eHw" = ( -/obj/effect/turf_decal/tile/blue/anticorner/contrasted, -/obj/structure/closet/secure_closet/paramedic, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/camera/autoname/directional/east, -/obj/machinery/airalarm/directional/east, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/paramedic) "eHI" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 4 @@ -14146,6 +14196,20 @@ /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) +"eIJ" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/yellow{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "eIM" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/burnt_floor, @@ -14160,6 +14224,17 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science) +"eIS" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/atmospherics/components/binary/pump/off{ + dir = 4; + name = "O2 To Pure" + }, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/atmos) "eIT" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -14189,6 +14264,15 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/wood/large, /area/station/service/bar/atrium) +"eJn" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/hallway/primary/fore) "eJq" = ( /turf/closed/wall/r_wall/rust, /area/station/science/robotics/lab) @@ -14201,15 +14285,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"eJH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/directional/south, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "eJN" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -14224,19 +14299,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/starboard) -"eKa" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/camera/directional/east{ - c_tag = "Starboard Hallway Cargo Counter"; - name = "starboard camera" - }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/machinery/light/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "eKk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -14244,20 +14306,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/storage) -"eKA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 4 - }, -/obj/item/kirbyplants/organic/plant3, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos) "eKG" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/loading_area, @@ -14281,21 +14329,6 @@ }, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) -"eLf" = ( -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/disposal/bin/tagger, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "eLm" = ( /turf/closed/wall, /area/station/security/checkpoint/customs) @@ -14345,6 +14378,24 @@ }, /turf/open/floor/iron, /area/station/command/eva) +"eMe" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, +/obj/machinery/shower/directional/west{ + name = "emergency shower" + }, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/structure/fluff/shower_drain, +/turf/open/floor/iron/textured_large, +/area/station/engineering/atmos) "eMf" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -14356,14 +14407,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"eMg" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark, -/area/station/security/courtroom) "eMo" = ( /obj/structure/sign/departments/evac, /turf/closed/wall, @@ -14376,6 +14419,13 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) +"eMu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) "eMB" = ( /obj/machinery/light_switch/directional/west, /obj/structure/noticeboard/directional/south, @@ -14396,6 +14446,20 @@ /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/iron/dark, /area/station/security/courtroom) +"eMJ" = ( +/obj/machinery/recharge_station, +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/science/robotics/mechbay) "eMW" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -14423,44 +14487,12 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"eNV" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/maintenance/disposal/incinerator) -"eOe" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/caution/stand_clear, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/security/processing) "eOh" = ( /obj/structure/table/reinforced, /obj/structure/reagent_dispensers/servingdish, /obj/effect/turf_decal/tile/red, /turf/open/floor/iron/white, /area/station/security/prison/mess) -"eOi" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/machinery/duct, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/medbay/central) "eOl" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green, @@ -14474,37 +14506,11 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"eOt" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) -"eOA" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/bot, -/obj/structure/rack, -/obj/item/wrench, -/obj/item/storage/toolbox/emergency{ - pixel_y = 4 - }, -/obj/item/hand_labeler, -/obj/item/stack/package_wrap, -/obj/machinery/button/door/directional/east{ - id = "commissaryshutter"; - name = "Commissary Shutter Toggle"; - pixel_x = 26; - pixel_y = 7 - }, -/obj/machinery/button/door/directional/east{ - id = "commissarydoor"; - name = "Commissary Door Lock"; - normaldoorcontrol = 1; - pixel_x = 26; - pixel_y = -2; - specialfunctions = 4 - }, -/turf/open/floor/wood, -/area/station/commons/vacant_room/commissary) +"eOz" = ( +/obj/structure/flora/bush/ferny/style_random, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/grass, +/area/station/science/auxlab) "eOG" = ( /obj/effect/turf_decal/delivery, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -14524,21 +14530,20 @@ }, /turf/open/floor/circuit/red, /area/station/ai/upload/chamber) -"eOV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted, -/obj/effect/turf_decal/tile/yellow, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "eOW" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, /obj/machinery/duct, -/turf/open/floor/iron, +/obj/structure/table, +/obj/item/stack/sheet/rglass{ + amount = 50; + pixel_x = 2; + pixel_y = -2 + }, +/obj/item/stack/sheet/plasteel/fifty{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, +/turf/open/floor/iron/dark, /area/station/engineering/main) "ePb" = ( /obj/structure/lattice/catwalk, @@ -14593,14 +14598,6 @@ /obj/item/storage/medkit/regular, /turf/open/floor/iron/dark, /area/station/medical/medbay/central) -"eQf" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/bridge_pipe/orange/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible, -/turf/open/space/basic, -/area/space/nearstation) "eQg" = ( /obj/structure/window/spawner/directional/south, /obj/structure/window/spawner/directional/north, @@ -14612,40 +14609,6 @@ /obj/structure/flora/bush/sunny/style_random, /turf/open/floor/plating, /area/station/hallway/secondary/exit/departure_lounge) -"eQh" = ( -/obj/structure/table, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/storage/belt/utility, -/obj/item/clothing/head/utility/welding, -/obj/item/clothing/glasses/welding, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/west, -/obj/structure/extinguisher_cabinet/directional/north, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron/dark, -/area/station/science/robotics/lab) -"eQj" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage/gas) "eQq" = ( /obj/structure/rack, /obj/effect/turf_decal/bot, @@ -14704,30 +14667,6 @@ /obj/effect/mapping_helpers/airlock/access/all/command/gateway, /turf/open/floor/iron/dark, /area/station/command/gateway) -"eQW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) -"eRl" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron, -/area/station/cargo/miningdock) "eRp" = ( /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt, @@ -14770,20 +14709,18 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/construction/mining/aux_base) -"eRK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, -/obj/machinery/air_sensor/incinerator_tank, -/turf/open/floor/engine, -/area/station/maintenance/disposal/incinerator) -"eSl" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/carbon_output{ +"eRU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 1 }, -/turf/open/floor/engine/co2, -/area/station/engineering/atmos) +/obj/structure/table, +/obj/item/clothing/gloves/latex, +/obj/item/paper/guides/jobs/medical/morgue, +/obj/item/pen, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "eSu" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -14804,6 +14741,31 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/medical/surgery/theatre) +"eSB" = ( +/obj/structure/sign/warning/biohazard/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/virology) +"eSU" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/showroomfloor, +/area/station/science) "eSY" = ( /obj/machinery/airalarm/directional/north, /obj/structure/rack, @@ -14857,6 +14819,17 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron/white, /area/station/security/prison/mess) +"eUg" = ( +/obj/structure/sign/painting/library{ + pixel_x = 32 + }, +/obj/machinery/photocopier, +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/box/white, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark, +/area/station/service/library) "eUk" = ( /obj/item/radio/intercom/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -14891,19 +14864,6 @@ }, /turf/open/floor/iron/dark, /area/station/medical/storage) -"eUy" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/status_display/ai/directional/west, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/machinery/light/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "eUM" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /turf/closed/wall/r_wall, @@ -14911,6 +14871,23 @@ "eUN" = ( /turf/closed/wall, /area/station/medical/psychology) +"eUO" = ( +/obj/item/clipboard{ + pixel_x = -4 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/structure/rack, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/item/folder/yellow, +/obj/item/book/manual/wiki/atmospherics, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) "eUT" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/green{ @@ -14921,16 +14898,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"eUU" = ( -/obj/machinery/vending/cola/red, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/security/prison/mess) "eVL" = ( /obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/plating, @@ -14995,6 +14962,26 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/engine, /area/station/ai/satellite/foyer) +"eXG" = ( +/obj/structure/cable, +/obj/structure/chair/sofa/left/maroon{ + dir = 8 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/hangover, +/obj/machinery/camera/directional/south{ + c_tag = "Atrium Port"; + name = "service camera" + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/service/bar/atrium) "eXJ" = ( /obj/machinery/conveyor_switch/oneway{ id = "QMLoad2"; @@ -15133,15 +15120,12 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/xenobiology) -"eZi" = ( -/obj/effect/turf_decal/siding/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 1 +"eZc" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/cyan/hidden{ + dir = 8 }, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/exit/departure_lounge) +/turf/closed/wall/r_wall, +/area/station/maintenance/disposal/incinerator) "eZm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -15182,13 +15166,6 @@ /obj/structure/sign/warning/docking, /turf/closed/wall, /area/station/cargo/miningoffice) -"faC" = ( -/obj/structure/table, -/obj/machinery/firealarm/directional/north, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/machinery/light/warm/directional/north, -/turf/open/floor/iron/dark, -/area/station/commons/locker) "faN" = ( /obj/structure/cable, /obj/structure/chair/office{ @@ -15197,17 +15174,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron/dark, /area/station/command/bridge) -"faY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/security/processing) "faZ" = ( /obj/structure/chair/sofa/left/maroon{ dir = 4 @@ -15260,6 +15226,15 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/pharmacy) +"fct" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/railing, +/turf/open/floor/iron, +/area/station/engineering/atmos) "fcv" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -15268,6 +15243,16 @@ /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/medical/cryo) +"fcE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/structure/closet/secure_closet/medical2, +/turf/open/floor/iron/dark, +/area/station/medical/virology) "fcX" = ( /obj/structure/table/wood, /obj/machinery/camera/directional/west{ @@ -15286,26 +15271,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/bar/backroom) -"fdd" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/spawner/random/engineering/tracking_beacon, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) -"fdp" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/machinery/power/smes, -/turf/open/floor/iron/dark, -/area/station/maintenance/disposal/incinerator) "fdA" = ( /obj/structure/table_frame/wood, /turf/open/floor/carpet/green, @@ -15323,6 +15288,26 @@ "fdY" = ( /turf/closed/wall, /area/station/medical/medbay/lobby) +"feb" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/siding/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "fej" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/brown/anticorner/contrasted{ @@ -15333,6 +15318,14 @@ }, /turf/open/floor/iron, /area/station/cargo/miningdock) +"fep" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) "fez" = ( /obj/structure/cable, /obj/structure/chair/office{ @@ -15355,6 +15348,14 @@ }, /turf/open/floor/iron, /area/station/engineering/storage_shared) +"feS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "feU" = ( /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -15371,16 +15372,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"feW" = ( -/obj/machinery/computer/mech_bay_power_console{ - dir = 4 - }, -/obj/item/radio/intercom/directional/north, -/obj/structure/cable, -/turf/open/floor/circuit/green{ - luminosity = 2 - }, -/area/station/science/robotics/mechbay) "ffa" = ( /turf/open/floor/plating/airless, /area/station/hallway/secondary/exit/departure_lounge) @@ -15447,34 +15438,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/science/xenobiology) -"ffQ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/components/binary/pump/on{ - name = "Gas to Cold Loop" - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) -"ffT" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/machinery/atmospherics/components/tank/air/layer4{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft) -"fgb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/aft) "fgo" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/turf_decal/tile/red/opposingcorners, @@ -15483,13 +15446,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/commons/storage/art) -"fgx" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "fgy" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -15516,16 +15472,6 @@ /obj/machinery/computer/operating, /turf/open/floor/iron/dark, /area/station/medical/morgue) -"fgH" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/airlock/engineering/glass{ - name = "Laser Room" - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/turf/open/floor/iron/dark, -/area/station/engineering/supermatter/room) "fgJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -15536,14 +15482,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central) -"fhc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/light/floor, -/turf/open/floor/iron, -/area/station/security/brig) "fhe" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, @@ -15556,15 +15494,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard) -"fhq" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/machinery/light/floor, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "fhs" = ( /obj/structure/closet/emcloset, /obj/effect/turf_decal/delivery, @@ -15577,29 +15506,27 @@ /obj/structure/table/wood, /turf/open/floor/wood/tile, /area/station/service/library) -"fhw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft) -"fhC" = ( -/obj/effect/turf_decal/tile/red/half/contrasted{ +"fhx" = ( +/obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/red{ - dir = 4 +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 }, -/obj/effect/turf_decal/tile/neutral{ +/obj/effect/turf_decal/tile/blue{ dir = 1 }, +/obj/machinery/atmospherics/components/binary/pump/on{ + name = "Internal Waste Ports to Filter"; + dir = 8 + }, /turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) +/area/station/engineering/atmos) +"fhE" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/machinery/light/cold/directional/south, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/storage) "fhH" = ( /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, @@ -15622,6 +15549,19 @@ /obj/structure/cable, /turf/open/floor/iron/checker, /area/station/security/mechbay) +"fhM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/cardboard, +/obj/structure/sign/warning/no_smoking{ + pixel_x = 30 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/space_heater, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/starboard) "fhP" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/window/reinforced/spawner/directional/north, @@ -15631,6 +15571,16 @@ /obj/structure/flora/bush/sparsegrass/style_random, /turf/open/floor/grass, /area/station/service/hydroponics) +"fhR" = ( +/obj/item/clothing/head/helmet/toggleable/justice/escape{ + name = "justice helmet" + }, +/obj/structure/sign/poster/official/the_owl/directional/north, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/obj/item/clothing/suit/costume/justice, +/turf/open/floor/plating, +/area/station/maintenance/aft) "fhY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -15655,12 +15605,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/bridge) -"fiC" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/aft) "fiH" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -15693,6 +15637,16 @@ }, /turf/open/floor/wood/large, /area/station/service/bar/atrium) +"fjk" = ( +/obj/machinery/vending/wardrobe/law_wardrobe, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/effect/turf_decal/delivery, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark, +/area/station/service/lawoffice) "fjw" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -15718,19 +15672,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/lockers) -"fjG" = ( -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 8 - }, -/obj/structure/mannequin/skeleton{ - dir = 8 - }, -/obj/item/radio/intercom/directional/east, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "fjI" = ( /obj/structure/chair/office{ dir = 4 @@ -15743,6 +15684,26 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) +"fjZ" = ( +/obj/structure/table/wood, +/obj/item/storage/fancy/candle_box, +/obj/item/storage/fancy/candle_box, +/obj/item/storage/fancy/candle_box{ + pixel_x = 6; + pixel_y = 5 + }, +/obj/item/storage/fancy/candle_box{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/storage/box/matches{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/machinery/computer/security/telescreen/monastery/directional/north, +/obj/machinery/light/warm/dim/directional/north, +/turf/open/floor/iron/grimy, +/area/station/service/chapel/office) "fkw" = ( /obj/effect/landmark/start/hangover, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -15779,13 +15740,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) -"flx" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "flH" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -15798,6 +15752,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/disposal) +"flJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/item/kirbyplants/photosynthetic, +/turf/open/floor/iron/dark, +/area/station/ai/upload/chamber) "flL" = ( /obj/machinery/door/airlock/highsecurity{ name = "AI Chamber" @@ -15819,6 +15780,19 @@ /obj/structure/cable/layer3, /turf/open/floor/iron/dark, /area/station/ai/satellite/interior) +"flM" = ( +/obj/structure/cable, +/obj/structure/table, +/obj/machinery/reagentgrinder{ + pixel_y = 5 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "fmm" = ( /obj/machinery/light/small/directional/north, /obj/structure/dresser, @@ -15846,18 +15820,6 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/primary/central) -"fmv" = ( -/obj/structure/table/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/newscaster/directional/west, -/obj/item/camera{ - pixel_y = 4 - }, -/obj/item/hand_tele, -/turf/open/floor/wood/large, -/area/station/command/heads_quarters/captain) "fmx" = ( /obj/effect/turf_decal/loading_area{ dir = 1 @@ -15879,28 +15841,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, /area/station/commons/locker) -"fmA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/maintenance/disposal/incinerator) -"fmK" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/aft) "fmV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -15912,20 +15852,23 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/service/hydroponics) -"fmY" = ( -/obj/effect/decal/cleanable/dirt, +"fmX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, /obj/structure/cable, -/obj/machinery/light/floor, +/obj/item/kirbyplants/organic/plant21, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, /turf/open/floor/iron, -/area/station/cargo/storage) +/area/station/hallway/primary/starboard) "fne" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -15944,34 +15887,18 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/storage) -"fnf" = ( -/obj/item/storage/medkit/regular{ - pixel_x = 3; - pixel_y = -3 - }, -/obj/item/storage/medkit/brute{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/medkit/brute, -/obj/item/storage/medkit/brute{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/structure/table/glass, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/door/window/left/directional/east{ - name = "First-Aid Supplies"; - req_access = list("medical") - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ +"fnr" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/computer/atmos_control/plasma_tank{ dir = 4 }, -/turf/open/floor/iron/dark, -/area/station/medical/storage) +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/atmos) "fnu" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -16016,6 +15943,10 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/service/bar/atrium) +"foa" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating/airless, +/area/station/engineering/atmos/pumproom) "fob" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -16031,6 +15962,12 @@ /obj/machinery/status_display/ai/directional/east, /turf/open/floor/iron/white, /area/station/security/prison/mess) +"foG" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 10 + }, +/turf/closed/wall/r_wall, +/area/station/engineering/supermatter/engine) "foP" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -16067,6 +16004,17 @@ /obj/item/clothing/glasses/sunglasses/big, /turf/open/floor/carpet/green, /area/station/service/lawoffice) +"foV" = ( +/obj/structure/chair/stool/directional/south, +/obj/structure/cable, +/obj/effect/landmark/navigate_destination/incinerator, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden/layer4{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth, +/area/station/maintenance/disposal/incinerator) "fpk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -16075,16 +16023,6 @@ }, /turf/open/floor/engine, /area/station/ai/satellite/atmos) -"fpn" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/light/floor, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation) "fpx" = ( /obj/structure/chair/office/light{ dir = 4 @@ -16116,6 +16054,15 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, /area/station/maintenance/department/bridge) +"fpN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/chemistry) "fpQ" = ( /obj/effect/turf_decal/loading_area{ dir = 8 @@ -16138,11 +16085,20 @@ /obj/effect/mapping_helpers/airlock/access/all/science/ordnance, /turf/open/floor/iron/dark/airless, /area/station/science/ordnance/freezerchamber) +"fqd" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/miningdock) "fqe" = ( /obj/structure/extinguisher_cabinet/directional/east, /obj/structure/cable, -/obj/structure/closet/radiation, -/obj/item/clothing/glasses/meson, /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/circuit/green{ luminosity = 2 @@ -16174,17 +16130,6 @@ }, /turf/open/floor/iron/dark/corner, /area/station/hallway/primary/starboard) -"fqu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 4 - }, -/obj/machinery/light/floor, -/turf/open/floor/iron/showroomfloor, -/area/station/command/heads_quarters/rd) "fqG" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -16215,16 +16160,6 @@ }, /turf/open/floor/iron, /area/station/engineering/storage_shared) -"fqO" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "fqP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/disposal/bin/tagger, @@ -16276,6 +16211,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"frV" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security/prison/garden) "fsd" = ( /obj/machinery/door/airlock/maintenance, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -16287,18 +16234,20 @@ /obj/effect/mapping_helpers/airlock/access/any/science/maintenance, /turf/open/floor/iron/dark, /area/station/maintenance/starboard) -"fse" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 10 +"fsf" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/heater{ + dir = 1 }, /obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 + dir = 4 }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, /turf/open/floor/iron, -/area/station/engineering/atmos) +/area/station/engineering/atmos/pumproom) "fsj" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -16317,10 +16266,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/starboard) -"fsu" = ( -/obj/structure/sign/warning/secure_area, -/turf/closed/wall, -/area/station/engineering/atmos) "fsx" = ( /obj/effect/turf_decal/box/corners{ dir = 4 @@ -16330,6 +16275,24 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"fsB" = ( +/obj/machinery/atmospherics/components/trinary/filter/layer2, +/obj/machinery/button/door/incinerator_vent_atmos_main{ + pixel_x = 26; + pixel_y = -4 + }, +/obj/machinery/button/door/incinerator_vent_atmos_aux{ + pixel_x = 26; + pixel_y = 6 + }, +/obj/machinery/camera/directional/east{ + c_tag = "Atmospherics Incinerator"; + name = "atmospherics camera"; + network = list("ss13","engine") + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/smooth_large, +/area/station/maintenance/disposal/incinerator) "fsJ" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -16365,18 +16328,21 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/ai/upload/chamber) -"fts" = ( -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ - dir = 5 +"ftq" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Atmospherics Maintenance" }, -/obj/effect/turf_decal/stripes/corner{ +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/duct, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/pumproom) +/turf/open/floor/iron/dark, +/area/station/maintenance/aft) "ftz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -16392,29 +16358,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/kitchen) -"ftJ" = ( -/obj/effect/decal/cleanable/cobweb, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/west, -/obj/item/radio/intercom/directional/north, -/obj/machinery/pdapainter/supply, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/qm) -"ftS" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/button/door/directional/west{ - id = "Secure Storage"; - name = "Secure Storage Toggle"; - req_access = list("engine_equip") - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "ftX" = ( /obj/machinery/power/smes, /obj/effect/turf_decal/bot, @@ -16467,6 +16410,12 @@ "fuB" = ( /turf/closed/wall/rust, /area/station/maintenance/starboard/aft) +"fuM" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "fuX" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -16496,6 +16445,17 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, /area/station/maintenance/starboard/fore) +"fva" = ( +/obj/structure/table, +/obj/structure/bedsheetbin, +/obj/machinery/status_display/evac/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/light/cold/directional/east, +/turf/open/floor/iron/dark, +/area/station/commons/toilet/restrooms) "fvb" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -16568,22 +16528,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"fvQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/hallway) "fvT" = ( /obj/machinery/computer/records/security{ dir = 4 @@ -16608,29 +16552,12 @@ }, /turf/open/floor/iron/dark/corner, /area/station/hallway/primary/port) -"fwd" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/turf_decal/siding/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 +"fwm" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 5 }, -/turf/open/floor/iron, -/area/station/engineering/lobby) -"fwf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron, -/area/station/engineering/atmos) +/turf/open/floor/plating/airless, +/area/space/nearstation) "fwJ" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/siding/wood{ @@ -16638,12 +16565,35 @@ }, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) +"fwR" = ( +/obj/structure/table, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/clothing/head/utility/welding{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/clothing/head/utility/welding, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) "fxd" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/north, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/central) +"fxq" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ + dir = 5 + }, +/obj/machinery/power/smes, +/obj/structure/cable, +/obj/effect/turf_decal/delivery/red, +/turf/open/floor/iron/smooth_large, +/area/station/maintenance/disposal/incinerator) "fxt" = ( /obj/machinery/chem_heater/withbuffer, /obj/effect/turf_decal/bot, @@ -16652,21 +16602,28 @@ }, /turf/open/floor/iron/dark, /area/station/medical/pharmacy) +"fxu" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/trinary/mixer/airmix, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "fxw" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/security/mechbay) -"fxB" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/bridge_pipe/purple/visible, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "Air to Mix" +"fxy" = ( +/obj/machinery/status_display/ai/directional/west, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/engineering/atmos/pumproom) +/obj/structure/cable/layer3, +/turf/open/floor/engine, +/area/station/ai/satellite/chamber) "fxP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/table, @@ -16721,6 +16678,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"fyd" = ( +/obj/effect/turf_decal/arrows/white{ + dir = 4 + }, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron/smooth_half{ + dir = 8 + }, +/area/station/engineering/atmos) "fyf" = ( /obj/structure/table/wood, /obj/item/clipboard, @@ -16729,17 +16695,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/courtroom) -"fyh" = ( -/obj/structure/table, -/obj/machinery/processor{ - pixel_y = 6 - }, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/service/kitchen) "fyj" = ( /obj/structure/cable, /turf/closed/wall/r_wall, @@ -16795,6 +16750,12 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron/dark, /area/station/service/chapel) +"fyQ" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/wall_healer/directional/south, +/obj/machinery/light/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "fyZ" = ( /obj/structure/chair/office/light{ dir = 4 @@ -16831,6 +16792,13 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"fzA" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/station/engineering/atmos) "fzG" = ( /obj/machinery/vending/medical, /obj/effect/turf_decal/delivery, @@ -16865,14 +16833,33 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"fAk" = ( -/obj/machinery/status_display/evac/directional/north, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ +"fzQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/office) +"fAA" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green/anticorner/contrasted, +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 6 + }, +/obj/structure/railing/corner/end{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/turf/open/floor/iron, -/area/station/security/courtroom) +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/atmos) "fAI" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/purple/filled/line{ @@ -16889,18 +16876,6 @@ dir = 8 }, /area/station/service/chapel) -"fAW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/status_display/ai/directional/north, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/security/execution/transfer) "fBh" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/disposalpipe/segment{ @@ -16913,6 +16888,15 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/cargo) +"fBj" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Auxiliary Dock" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) "fBm" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/window/reinforced/spawner/directional/west, @@ -16942,13 +16926,6 @@ /obj/effect/mapping_helpers/airlock/access/all/service/chapel_office, /turf/open/floor/iron/dark, /area/station/service/chapel/office) -"fBw" = ( -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "fBF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -16963,6 +16940,31 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/command/heads_quarters/hop) +"fBV" = ( +/obj/machinery/atmospherics/components/trinary/filter{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/light_switch/directional/north, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/science/ordnance) +"fBW" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/purple/visible{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/bar/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible, +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/atmos) "fBX" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/neutral/half/contrasted, @@ -17015,20 +17017,12 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/station/maintenance/solars/port/fore) -"fCe" = ( -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) -"fCf" = ( -/obj/structure/flora/bush/flowers_yw/style_random, -/obj/effect/turf_decal/siding/thinplating/dark, -/turf/open/floor/grass, -/area/station/service/chapel) +"fCm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/grille/broken, +/obj/effect/spawner/random/trash/caution_sign, +/turf/open/floor/plating, +/area/station/maintenance/aft) "fCs" = ( /obj/structure/chair/wood{ dir = 8 @@ -17078,6 +17072,10 @@ }, /turf/open/floor/iron/dark, /area/station/security/lockers) +"fDo" = ( +/obj/machinery/air_sensor/carbon_tank, +/turf/open/floor/engine/co2, +/area/station/engineering/atmos) "fDB" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/grunge{ @@ -17088,10 +17086,6 @@ }, /turf/open/floor/iron/dark, /area/station/commons/locker) -"fDS" = ( -/obj/machinery/air_sensor/carbon_tank, -/turf/open/floor/engine/co2, -/area/station/engineering/atmos) "fDT" = ( /obj/structure/closet/secure_closet/brig{ name = "Prisoner Locker" @@ -17101,16 +17095,12 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) -"fEb" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/components/trinary/mixer{ - name = "plasma mixer" - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 +"fDU" = ( +/obj/structure/chair/comfy/brown{ + dir = 4 }, -/turf/open/floor/iron/dark, -/area/station/maintenance/disposal/incinerator) +/turf/open/floor/carpet/royalblack, +/area/station/command/heads_quarters/captain) "fEc" = ( /obj/item/kirbyplants/organic/applebush, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -17150,21 +17140,6 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/general, /turf/open/floor/iron/dark, /area/station/medical/storage) -"fEu" = ( -/obj/effect/turf_decal/siding/yellow{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage/gas) "fEC" = ( /obj/machinery/camera/directional/east{ c_tag = "Xenobiology Cell 6"; @@ -17247,6 +17222,12 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/starboard) +"fFG" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "fFH" = ( /obj/structure/chair/sofa/right/brown, /obj/effect/landmark/start/psychologist, @@ -17332,6 +17313,24 @@ /obj/machinery/iv_drip, /turf/open/floor/iron/showroomfloor, /area/station/medical/virology) +"fGW" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ + dir = 1 + }, +/obj/machinery/meter, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"fHc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/railing/corner/end/flip{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "fHj" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -17350,17 +17349,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/plating, /area/station/maintenance/department/bridge) -"fHH" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ - dir = 4 - }, -/obj/machinery/computer/atmos_control/plasma_tank{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple/fourcorners, -/turf/open/floor/iron/showroomfloor, -/area/station/engineering/atmos) "fHZ" = ( /obj/structure/table, /obj/item/assembly/signaler{ @@ -17525,15 +17513,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/captain) -"fJy" = ( -/obj/machinery/flasher/portable, -/obj/effect/turf_decal/box, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/light/small/red/directional/north, -/turf/open/floor/iron/dark, -/area/station/security/armory) "fJz" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -17626,17 +17605,12 @@ /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron/showroomfloor, /area/station/medical/chemistry) -"fKD" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/airalarm/engine_access, -/obj/effect/mapping_helpers/airalarm/link{ - chamber_id = "engine" - }, -/obj/effect/mapping_helpers/airalarm/tlv_no_checks, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) +"fKG" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/atmospherics/components/trinary/filter/atmos/n2o, +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/atmos) "fKJ" = ( /obj/structure/flora/bush/sparsegrass/style_random, /obj/structure/flora/bush/lavendergrass/style_random, @@ -17660,19 +17634,20 @@ /obj/machinery/power/port_gen/pacman/pre_loaded, /turf/open/floor/plating, /area/station/ai/satellite/maintenance/storage) -"fLi" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +"fLf" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/holopad/secure, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/security/office) +"fLh" = ( /obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/landmark/event_spawn, -/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/light/floor, +/obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, -/area/station/command/bridge) +/area/station/engineering/atmos) "fLo" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -17727,26 +17702,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) -"fLE" = ( -/obj/item/clothing/mask/gas/sechailer{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/clothing/mask/gas/sechailer, -/obj/item/clothing/mask/gas/sechailer{ - pixel_x = 3; - pixel_y = -3 - }, -/obj/item/flashlight/seclite, -/obj/item/flashlight/seclite, -/obj/item/flashlight/seclite, -/obj/effect/decal/cleanable/cobweb, -/obj/machinery/airalarm/directional/west, -/obj/structure/table, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/light/small/red/directional/north, -/turf/open/floor/iron/dark, -/area/station/security/armory) "fLH" = ( /obj/effect/decal/cleanable/blood/old, /obj/machinery/air_sensor/ordnance_burn_chamber, @@ -17777,27 +17732,6 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron, /area/station/command/bridge) -"fMA" = ( -/obj/structure/table/wood/fancy/black, -/obj/item/food/grown/flower/poppy/geranium{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/food/grown/flower/poppy/geranium{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/food/grown/flower/poppy/geranium, -/turf/open/floor/iron/dark, -/area/station/service/chapel) -"fMF" = ( -/obj/machinery/camera/directional/west{ - c_tag = "Atmospherics Tank - Plasma"; - name = "atmospherics camera"; - network = list("ss13","engine") - }, -/turf/open/floor/engine/plasma, -/area/station/engineering/atmos) "fML" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -17827,6 +17761,36 @@ /obj/structure/flora/grass/jungle/b/style_random, /turf/open/misc/asteroid, /area/station/maintenance/port/lesser) +"fNW" = ( +/obj/structure/table, +/obj/item/clipboard, +/obj/item/disk/computer/ordnance, +/obj/item/disk/computer/ordnance, +/obj/item/disk/computer/ordnance, +/obj/item/circuitboard/aicore{ + pixel_y = 5 + }, +/obj/item/hand_labeler, +/obj/machinery/airalarm/directional/west, +/obj/item/pai_card{ + pixel_x = 6 + }, +/obj/item/aicard, +/obj/item/taperecorder{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) +"fNX" = ( +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "fOd" = ( /obj/machinery/chem_master/condimaster{ desc = "Used to separate out liquids - useful for purifying botanical extracts. Also dispenses condiments."; @@ -17878,11 +17842,15 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"fOH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, -/obj/machinery/meter, -/turf/closed/wall/r_wall, -/area/station/engineering/atmos) +"fOz" = ( +/obj/item/kirbyplants, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "fOI" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/old, @@ -17919,21 +17887,6 @@ dir = 4 }, /area/station/hallway/primary/fore) -"fPk" = ( -/obj/structure/table/wood, -/obj/item/folder/red, -/obj/item/lighter{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/cigarette/cigar/cohiba{ - pixel_x = 6 - }, -/obj/item/cigarette/cigar, -/obj/machinery/airalarm/directional/west, -/obj/item/paper_bin, -/turf/open/floor/wood, -/area/station/command/heads_quarters/hos) "fPp" = ( /obj/effect/landmark/start/hangover, /obj/effect/turf_decal/stripes/line{ @@ -17960,6 +17913,19 @@ /obj/effect/mapping_helpers/airlock/access/any/security/maintenance, /turf/open/floor/iron/dark, /area/station/maintenance/port/lesser) +"fPt" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/secure_closet/personal, +/obj/item/storage/backpack, +/obj/item/storage/backpack/satchel, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/item/clothing/shoes/winterboots, +/obj/machinery/airalarm/directional/north, +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/iron/dark, +/area/station/commons/locker) "fPN" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/power/apc/auto_name/directional/north, @@ -18033,6 +17999,15 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard) +"fQI" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "fQM" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -18057,22 +18032,13 @@ /obj/machinery/duct, /turf/open/floor/iron/grimy, /area/station/security/prison/safe) -"fQY" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/highsecurity{ - name = "AI Upload" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ +"fRa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/ai/upload/chamber) +/turf/open/floor/plating, +/area/station/maintenance/aft) "fRf" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/brown/half/contrasted{ @@ -18083,14 +18049,17 @@ }, /turf/open/floor/iron, /area/station/cargo/warehouse) -"fRm" = ( +"fRl" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 8 }, -/turf/open/floor/engine, -/area/station/ai/upload/chamber) +/turf/open/floor/iron, +/area/station/hallway/primary/fore) "fRp" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -18127,23 +18096,6 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/port/greater) -"fRC" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 5 - }, -/obj/effect/turf_decal/stripes/corner, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/duct, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "fRP" = ( /obj/structure/chair{ dir = 8 @@ -18162,13 +18114,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/auxlab) -"fSm" = ( -/obj/machinery/gulag_teleporter, -/obj/effect/turf_decal/box, -/obj/effect/turf_decal/stripes/corner, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/security/processing) "fSt" = ( /turf/closed/wall/r_wall/rust, /area/station/engineering/storage_shared) @@ -18263,17 +18208,6 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/ai/satellite/maintenance/storage) -"fTa" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/medbay/central) "fTr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -18292,6 +18226,21 @@ /obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/iron/dark, /area/station/security/processing) +"fTV" = ( +/obj/structure/table/wood/fancy, +/obj/effect/turf_decal/siding/wideplating/dark/corner, +/obj/item/food/grown/flower/poppy{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/food/grown/flower/poppy{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/food/grown/flower/poppy, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "fTW" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/rack, @@ -18318,14 +18267,13 @@ /obj/effect/turf_decal/tile/red/anticorner/contrasted, /turf/open/floor/iron/showroomfloor, /area/station/security/brig) -"fUj" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/central/fore) +"fUi" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "fUp" = ( /obj/machinery/chem_heater/withbuffer, /obj/effect/decal/cleanable/dirt, @@ -18334,6 +18282,20 @@ }, /turf/open/floor/iron/dark, /area/station/medical/chemistry) +"fUH" = ( +/obj/machinery/computer/shuttle/labor{ + dir = 1 + }, +/obj/structure/sign/warning/vacuum/external/directional/south, +/obj/machinery/camera/directional/south{ + c_tag = "Transferring Centre Dock" + }, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/processing) "fUQ" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/sign/warning/vacuum/external/directional/west, @@ -18374,30 +18336,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, /area/station/hallway/primary/starboard) -"fVl" = ( -/obj/item/radio/intercom/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "N2 to Pure" - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) -"fVB" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/shieldgen, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera/directional/west{ - c_tag = "Secure Storage"; - name = "engineering camera"; - network = list("ss13","engine") - }, -/turf/open/floor/iron/dark, -/area/station/engineering/supermatter/room) "fVF" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -18423,23 +18361,23 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron/dark, /area/station/science/xenobiology) -"fWg" = ( -/obj/structure/table, -/obj/item/clipboard, -/obj/item/folder/red, -/obj/item/restraints/handcuffs, -/obj/item/melee/baseball_bat{ - desc = "A staple of security force interrogations."; - icon_state = "baseball_bat_metal"; - name = "kneecapper" +"fVX" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible{ + dir = 4 }, -/obj/machinery/status_display/ai/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ + dir = 1 }, -/obj/machinery/light/dim/directional/east, -/turf/open/floor/iron/dark, -/area/station/security/execution/education) +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "fWk" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 8 @@ -18472,6 +18410,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"fWZ" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 8 + }, +/obj/machinery/meter, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "fXm" = ( /obj/structure/table, /obj/item/clipboard, @@ -18493,35 +18441,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"fXK" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 4 - }, -/obj/effect/landmark/start/assistant, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/light/dim/directional/west, -/turf/open/floor/wood, -/area/station/service/chapel/monastery) "fXL" = ( /turf/closed/wall/rust, /area/station/service/chapel/office) -"fXP" = ( -/obj/machinery/newscaster/directional/east, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/light/warm/dim/directional/east, -/turf/open/floor/iron/dark, -/area/station/service/chapel/funeral) "fXQ" = ( -/obj/effect/turf_decal/caution/stand_clear, /obj/machinery/door/poddoor/shutters/radiation/preopen{ id = "engsm"; - name = "Radiation Chamber Shutters" + name = "Radiation Chamber Shutters"; + dir = 8 }, -/turf/open/floor/iron/dark, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, /area/station/engineering/supermatter/engine) "fXS" = ( /obj/machinery/door/firedoor, @@ -18552,6 +18484,32 @@ /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/service/janitor) +"fYt" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/conveyor{ + dir = 1; + id = "QMLoad"; + name = "off ramp" + }, +/obj/machinery/camera/directional/east{ + c_tag = "Cargo Ramps"; + name = "cargo camera"; + network = list("ss13","qm") + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/cargo/storage) +"fYv" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/aft) "fYw" = ( /turf/closed/wall/r_wall, /area/station/medical/surgery/theatre) @@ -18572,21 +18530,19 @@ /obj/machinery/computer/security/telescreen/med_sec/directional/south, /turf/open/floor/iron/dark, /area/station/security/checkpoint/medical) -"fZj" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 +"fYV" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Plasma to Pure" }, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"fZk" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 1 }, -/obj/effect/turf_decal/box, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/atmos) "fZy" = ( /obj/effect/turf_decal/siding/blue/corner{ dir = 1 @@ -18602,13 +18558,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/service/chapel/funeral) -"gab" = ( -/obj/machinery/computer/atmos_control/nocontrol/incinerator{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark, -/area/station/maintenance/disposal/incinerator) "gao" = ( /obj/machinery/door/airlock/research{ name = "Testing Lab" @@ -18640,11 +18589,22 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/pharmacy) +"gaN" = ( +/obj/structure/closet/secure_closet/psychology, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/carpet, +/area/station/medical/psychology) "gaR" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"gaX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/cargo/sorting) "gba" = ( /obj/machinery/light/directional/west, /obj/structure/extinguisher_cabinet/directional/north{ @@ -18657,6 +18617,22 @@ dir = 1 }, /area/station/hallway/primary/central/fore) +"gbc" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/pen, +/obj/item/toy/figure/atmos{ + pixel_x = 8; + pixel_y = 6 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) "gbd" = ( /obj/structure/cable, /obj/structure/sink/directional/east, @@ -18717,11 +18693,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/bridge) -"gbx" = ( -/obj/structure/cable, -/obj/machinery/light/floor, -/turf/open/floor/iron/showroomfloor, -/area/station/science/xenobiology) "gbB" = ( /obj/item/disk/computer/medical, /obj/item/disk/computer/medical, @@ -18739,12 +18710,14 @@ name = "Gravity Generator Blast Door" }, /obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear, /obj/machinery/button/door/directional/north{ id = "gravity"; name = "Gravity Generator Lockdown"; req_one_access = list("command","tech_storage") }, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/station/maintenance/starboard/aft) "gbO" = ( @@ -18776,11 +18749,21 @@ /obj/machinery/status_display/evac/directional/north, /turf/open/floor/iron/dark, /area/station/maintenance/fore) -"gbY" = ( -/obj/effect/turf_decal/bot/left, -/obj/effect/decal/cleanable/ash, +"gcc" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"gcj" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/effect/turf_decal/tile/yellow, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/box, /turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) +/area/station/hallway/secondary/exit/departure_lounge) "gcp" = ( /obj/effect/turf_decal/bot, /obj/structure/window/reinforced/spawner/directional/south, @@ -18799,39 +18782,22 @@ /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"gcy" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/maintenance/disposal/incinerator) +"gcA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/item/radio/intercom/directional/north, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "gcL" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/spawner/random/engineering/tracking_beacon, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) -"gcV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/structure/table, -/obj/item/clothing/gloves/latex, -/obj/item/paper/guides/jobs/medical/morgue, -/obj/item/pen, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) -"gdf" = ( -/obj/structure/table, -/obj/machinery/status_display/ai/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/dark, -/area/station/ai/satellite/foyer) "gdA" = ( /obj/machinery/door/airlock/maintenance, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -18932,6 +18898,11 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/medical/morgue) +"geW" = ( +/obj/structure/lattice, +/obj/structure/transit_tube, +/turf/open/space/basic, +/area/space/nearstation) "gfc" = ( /obj/structure/filingcabinet, /obj/effect/turf_decal/bot_white, @@ -18959,17 +18930,27 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/chemistry) -"gfy" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/machinery/holopad, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/showroomfloor, -/area/station/security/warden) "gfz" = ( /obj/structure/flora/bush/sparsegrass/style_random, /obj/structure/flora/bush/stalky/style_random, /turf/open/floor/grass, /area/station/service/hydroponics/garden) +"gfJ" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/item/kirbyplants/organic/plant16, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "ggb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, @@ -18983,22 +18964,6 @@ }, /turf/open/floor/iron/chapel, /area/station/service/chapel) -"ggD" = ( -/obj/structure/table, -/obj/item/storage/crayons, -/obj/item/clothing/under/color/grey{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/clothing/under/color/grey, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/commons/fitness/recreation) "ggF" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -19038,6 +19003,16 @@ /obj/machinery/light_switch/directional/west, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) +"ghr" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/firealarm/directional/west, +/obj/item/radio/intercom/directional/north, +/obj/machinery/pdapainter/supply, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/qm) "ght" = ( /obj/structure/cable, /obj/effect/mapping_helpers/broken_floor, @@ -19094,27 +19069,19 @@ /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/plating, /area/station/security/execution/transfer) -"gin" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) -"gip" = ( -/obj/machinery/light/directional/south, -/obj/structure/disposalpipe/segment{ - dir = 4 +"gil" = ( +/obj/machinery/requests_console/directional/south{ + department = "Janitorial"; + name = "Janitorial Requests Console" }, -/obj/effect/turf_decal/tile/red/half/contrasted, -/obj/effect/turf_decal/tile/neutral, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/turf_decal/stripes/corner, +/obj/structure/cable, +/obj/effect/turf_decal/tile/purple/half/contrasted, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/light/warm/directional/south, /turf/open/floor/iron, -/area/station/hallway/primary/aft) +/area/station/service/janitor) "gix" = ( /obj/effect/turf_decal/box, /obj/structure/cable, @@ -19127,6 +19094,20 @@ }, /turf/open/floor/engine, /area/station/engineering/storage/tech) +"giC" = ( +/obj/structure/cable, +/obj/machinery/wall_healer/directional/north, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "giH" = ( /obj/structure/sign/poster/official/help_others, /turf/closed/wall/r_wall/rust, @@ -19160,12 +19141,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard) -"giU" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage/gas) "gjv" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -19189,6 +19164,16 @@ /obj/structure/cable, /turf/open/floor/iron/showroomfloor, /area/station/medical/virology) +"gjB" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wideplating/dark/corner, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "gjD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -19223,6 +19208,14 @@ }, /turf/open/floor/iron/dark, /area/station/service/hydroponics/garden) +"gjM" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/structure/window/spawner/directional/east, +/obj/structure/table/optable, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "gjP" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/door/window/right/directional/south{ @@ -19266,14 +19259,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/science/robotics/lab) -"gkx" = ( -/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/bridge_pipe/orange/visible{ - dir = 4 - }, -/turf/open/space/basic, -/area/space/nearstation) "gkD" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -19297,6 +19282,16 @@ /obj/effect/turf_decal/tile/purple/anticorner/contrasted, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"gkX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/kirbyplants/organic/plant21{ + desc = "After his promotion, he was transferred to Kilo Station to serve as the gateway's protector."; + name = "rodger" + }, +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/command/gateway) "glo" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -19311,6 +19306,16 @@ "glI" = ( /turf/closed/indestructible/opshuttle, /area/station/science/ordnance/bomb) +"glJ" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) +"glQ" = ( +/obj/structure/lattice, +/obj/structure/sign/warning/fire/directional/west, +/turf/open/space/basic, +/area/space/nearstation) "glX" = ( /obj/machinery/holopad, /turf/open/floor/carpet/green, @@ -19363,6 +19368,15 @@ /obj/structure/sign/warning/pods, /turf/closed/wall/rust, /area/station/maintenance/starboard) +"gmU" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Chapel Hallway" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) "gne" = ( /obj/machinery/door/airlock/public/glass{ name = "Docking Hallway" @@ -19381,6 +19395,12 @@ "gnh" = ( /turf/closed/wall/r_wall, /area/station/service/chapel) +"gnj" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/service/chapel) "gnp" = ( /obj/structure/table/wood, /obj/effect/turf_decal/siding/wood/end, @@ -19392,22 +19412,6 @@ /obj/item/flashlight/lantern, /turf/open/floor/carpet/red, /area/station/service/chapel) -"gns" = ( -/obj/machinery/status_display/ai/directional/south, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/structure/frame/computer{ - anchored = 1; - dir = 1 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/dark, -/area/station/cargo/drone_bay) "gny" = ( /obj/structure/cable, /obj/effect/turf_decal/sand/plating, @@ -19482,13 +19486,6 @@ /obj/machinery/light/floor, /turf/open/floor/engine/n2, /area/station/engineering/atmos) -"got" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) "gou" = ( /obj/effect/turf_decal/box/corners{ dir = 8 @@ -19498,17 +19495,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/gravity_generator) -"goz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "goG" = ( /obj/effect/turf_decal/siding/yellow{ dir = 4 @@ -19521,6 +19507,26 @@ /obj/effect/turf_decal/tile/red, /turf/open/floor/iron, /area/station/engineering/storage_shared) +"goL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/brown/hidden{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/engineering/hallway) +"goO" = ( +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/grass, +/area/station/service/chapel) "goY" = ( /obj/structure/chair/pew/right{ dir = 4 @@ -19534,12 +19540,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/courtroom) -"gpe" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/nitrous_input{ - dir = 1 - }, -/turf/open/floor/engine/n2o, -/area/station/engineering/atmos) "gpy" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -19580,11 +19580,6 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) -"gpL" = ( -/obj/effect/spawner/structure/window/reinforced/plasma, -/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, -/turf/open/floor/plating/airless, -/area/station/engineering/supermatter/room) "gpM" = ( /obj/item/kirbyplants/organic/plant21, /obj/effect/turf_decal/tile/red{ @@ -19618,18 +19613,6 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron/showroomfloor, /area/station/service/bar/atrium) -"gpX" = ( -/obj/structure/table, -/obj/item/folder{ - pixel_x = -4 - }, -/obj/item/pai_card, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, -/turf/open/floor/iron/dark, -/area/station/commons/fitness/recreation) "gqk" = ( /obj/machinery/chem_heater/withbuffer, /obj/effect/turf_decal/bot, @@ -19690,11 +19673,32 @@ /obj/item/clothing/suit/toggle/jacket/det_trench/noir, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"gqL" = ( +/obj/structure/transit_tube/horizontal, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "gqR" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron/showroomfloor, /area/station/medical/chemistry) +"grj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) "grq" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -19721,10 +19725,6 @@ }, /turf/open/floor/iron, /area/station/security/office) -"gry" = ( -/obj/structure/sign/warning/fire, -/turf/closed/wall/r_wall, -/area/station/maintenance/aft) "grQ" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/hatch{ @@ -19742,17 +19742,6 @@ /obj/structure/lattice/catwalk, /turf/open/space/basic, /area/station/solars/port/fore) -"grZ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) "gse" = ( /obj/structure/chair/pew/left{ dir = 8 @@ -19764,15 +19753,6 @@ dir = 1 }, /area/station/service/chapel) -"gso" = ( -/obj/structure/closet/secure_closet/engineering_personal, -/obj/item/clothing/suit/hooded/wintercoat/engineering, -/obj/effect/turf_decal/delivery, -/obj/machinery/light_switch/directional/north, -/obj/item/pickaxe/mini, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, -/turf/open/floor/iron/dark, -/area/station/engineering/storage_shared) "gsr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -19801,16 +19781,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"gsB" = ( -/obj/structure/table, -/obj/item/pipe_dispenser, -/obj/item/holosign_creator/atmos, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "gsO" = ( /obj/effect/landmark/start/cargo_technician, /obj/structure/chair/office{ @@ -19824,34 +19794,13 @@ }, /turf/open/floor/iron, /area/station/cargo/office) -"gsR" = ( -/obj/structure/table/wood, -/obj/item/storage/photo_album/library{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/taperecorder{ - pixel_x = 5; - pixel_y = 4 - }, -/obj/item/camera, -/obj/item/pen{ - pixel_x = -7; - pixel_y = -5 - }, -/obj/machinery/light/small/directional/west, -/obj/machinery/camera/directional/west{ - c_tag = "Library Backroom"; - name = "library camera" - }, -/obj/structure/sign/painting/large/library_private{ - dir = 8; - pixel_x = -29 +"gth" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 }, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/turf/open/floor/iron/dark, -/area/station/service/library) +/turf/open/floor/plating, +/area/station/engineering/atmos) "gtj" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/broken_floor, @@ -19903,18 +19852,20 @@ "gtW" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/rd) +"gtX" = ( +/obj/machinery/teleport/station, +/obj/machinery/status_display/evac/directional/east, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/ai/satellite/foyer) "gua" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/effect/landmark/event_spawn, /turf/open/floor/iron/showroomfloor, /area/station/security/medical) -"guq" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/engine, -/area/station/ai/upload/chamber) "guu" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -19940,17 +19891,23 @@ "guJ" = ( /turf/open/misc/asteroid, /area/station/maintenance/port/lesser) -"guS" = ( -/obj/structure/extinguisher_cabinet/directional/south, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 +"guQ" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/camera/directional/east{ + c_tag = "E.V.A. Storage"; + name = "command camera" }, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, -/obj/effect/turf_decal/tile/red, -/obj/machinery/vending/tool, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron, -/area/station/engineering/lobby) +/obj/machinery/suit_storage_unit/standard_unit{ + desc = "An industrial suit storage device carrying retro space suits. Neat!"; + helmet_type = /obj/item/clothing/head/helmet/space; + suit_type = /obj/item/clothing/suit/space + }, +/obj/machinery/status_display/ai/directional/east, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/eva) "guT" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/blobstart, @@ -19961,20 +19918,15 @@ /obj/structure/grille, /turf/closed/wall/r_wall/rust, /area/station/engineering/atmos) -"gve" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ +"gvt" = ( +/obj/machinery/status_display/evac/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ dir = 4 }, -/turf/open/floor/iron/smooth_large, -/area/station/maintenance/department/chapel/monastery) -"gvu" = ( -/obj/machinery/portable_atmospherics/canister, -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/obj/effect/turf_decal/box, -/obj/machinery/status_display/evac/directional/north, /turf/open/floor/iron/dark, -/area/station/engineering/atmos) +/area/station/security/courtroom) "gvx" = ( /obj/structure/closet/secure_closet/evidence, /obj/effect/turf_decal/bot, @@ -19982,6 +19934,24 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron/dark, /area/station/security/evidence) +"gvD" = ( +/obj/structure/table, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/spawner/random/aimodule/harmful, +/obj/machinery/door/window/brigdoor/left/directional/south{ + name = "High-Risk Modules"; + req_access = list("captain") + }, +/turf/open/floor/circuit/red, +/area/station/ai/upload/chamber) +"gvI" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) "gvM" = ( /obj/structure/cable, /obj/structure/table, @@ -20006,10 +19976,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"gwk" = ( -/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden, -/turf/closed/wall, -/area/station/security/checkpoint/engineering) "gwn" = ( /obj/effect/turf_decal/box, /obj/machinery/shower/directional/east, @@ -20028,13 +19994,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/commons/toilet/restrooms) -"gwr" = ( -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/structure/closet/radiation, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/maintenance/disposal/incinerator) "gwI" = ( /obj/structure/chair{ dir = 8 @@ -20064,15 +20023,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/engineering/circuit_workshop) -"gxi" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, -/obj/machinery/camera/autoname/directional/north, -/turf/open/floor/engine, -/area/station/maintenance/disposal/incinerator) "gxu" = ( /obj/effect/turf_decal/delivery, /obj/structure/cable, @@ -20083,6 +20033,16 @@ /obj/effect/turf_decal/tile/purple/half/contrasted, /turf/open/floor/iron/showroomfloor, /area/station/science/lab) +"gxG" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron, +/area/station/engineering/atmos) "gxN" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, @@ -20091,16 +20051,6 @@ /obj/effect/turf_decal/tile/blue/opposingcorners, /turf/open/floor/iron/showroomfloor, /area/station/medical/medbay/lobby) -"gxS" = ( -/obj/machinery/vending/wardrobe/bar_wardrobe, -/obj/effect/turf_decal/delivery, -/obj/effect/decal/cleanable/cobweb, -/obj/item/radio/intercom/directional/west, -/obj/structure/extinguisher_cabinet/directional/north, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/dark, -/area/station/service/bar/backroom) "gxW" = ( /obj/structure/sign/warning/electric_shock, /turf/closed/wall, @@ -20129,12 +20079,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/cargo/bitrunning/den) -"gyn" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrous_output{ - dir = 1 - }, -/turf/open/floor/engine/n2o, -/area/station/engineering/atmos) "gyv" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/rack, @@ -20157,25 +20101,15 @@ }, /turf/open/floor/iron/dark, /area/station/command/gateway) -"gyR" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/camera/directional/east{ - c_tag = "Brig Warden's Office" - }, -/obj/machinery/airalarm/directional/east, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 +"gzf" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/light/dim/directional/east, +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, /turf/open/floor/iron, -/area/station/security/brig) -"gyV" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) +/area/station/hallway/primary/aft) "gzh" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -20217,20 +20151,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"gzZ" = ( -/obj/effect/spawner/random/trash/hobo_squat, -/turf/open/floor/plating, -/area/station/maintenance/port/lesser) -"gAd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/kirbyplants/organic/plant21{ - desc = "After his promotion, he was transferred to Kilo Station to serve as the gateway's protector."; - name = "rodger" - }, -/obj/effect/turf_decal/tile/blue/half/contrasted, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/command/gateway) "gAF" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -20266,15 +20186,31 @@ /obj/effect/mapping_helpers/airlock/access/any/security/maintenance, /turf/open/floor/iron/dark, /area/station/maintenance/port/lesser) -"gBk" = ( -/obj/structure/reagent_dispensers/water_cooler, -/obj/machinery/button/door/directional/east{ - name = "Psychology Privacy Shutters"; - id = "psychprivacy" +"gBh" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden/layer4{ + dir = 1 }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/psychology) +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ + dir = 1 + }, +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) +"gBj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/hallway/primary/fore) "gBx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -20336,11 +20272,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"gCq" = ( -/obj/structure/chair/stool/directional/west, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron/dark, -/area/station/commons/locker) "gCu" = ( /obj/structure/chair{ dir = 8 @@ -20468,16 +20399,15 @@ /obj/machinery/newscaster/directional/south, /turf/open/floor/wood, /area/station/maintenance/department/crew_quarters/bar) -"gEo" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 +"gEx" = ( +/obj/effect/spawner/random/vending/colavend, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 8 }, -/turf/open/floor/iron, -/area/station/engineering/hallway) +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) "gEB" = ( /obj/machinery/disposal/bin/tagger, /obj/effect/turf_decal/bot, @@ -20496,6 +20426,42 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/qm) +"gEJ" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/assembly/prox_sensor{ + desc = "Used for scanning and alerting when someone enters a certain proximity. This one is slightly shifted to the left."; + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/assembly/prox_sensor{ + desc = "Used for scanning and alerting when someone enters a certain proximity. This one is slightly shifted to the left."; + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/assembly/prox_sensor{ + desc = "Used for scanning and alerting when someone enters a certain proximity. This one is slightly shifted to the left."; + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/assembly/prox_sensor{ + desc = "Used for scanning and alerting when someone enters a certain proximity. This one is slightly shifted to the left."; + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/crowbar/red, +/obj/item/toy/figure/roboticist{ + pixel_x = 6 + }, +/obj/machinery/light_switch/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/science/robotics/lab) "gER" = ( /obj/machinery/airalarm/directional/north, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -20595,25 +20561,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/lobby) -"gGi" = ( -/obj/effect/turf_decal/sand/plating, -/obj/structure/grille/broken, -/turf/open/floor/plating/airless, -/area/space/nearstation) -"gGp" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/machinery/firealarm/directional/west, -/obj/machinery/camera/directional/south{ - c_tag = "Laser Room Port"; - name = "laser room camera"; - network = list("ss13","engine") - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/engineering/supermatter/room) "gGq" = ( /obj/structure/table, /obj/machinery/light/small/directional/east, @@ -20640,22 +20587,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/aft) -"gGD" = ( -/obj/machinery/flasher/directional/east{ - id = "AI"; - name = "Meatbag Pacifier" +"gGK" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/end{ - dir = 4 +/obj/machinery/portable_atmospherics/canister/anesthetic_mix, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 }, -/turf/open/floor/engine, -/area/station/ai/upload/chamber) -"gGF" = ( -/obj/structure/grille/broken, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/medical/cryo) "gGR" = ( /obj/structure/bodycontainer/morgue{ dir = 8 @@ -20682,6 +20626,7 @@ /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ dir = 4 }, +/obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) "gHe" = ( @@ -20696,16 +20641,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"gHg" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/machinery/light/floor, -/turf/open/floor/iron/dark, -/area/station/service/chapel/monastery) "gHA" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/delivery, @@ -20763,22 +20698,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"gIe" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/item/kirbyplants/organic/plant16, -/obj/effect/turf_decal/box/corners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "gIo" = ( /obj/effect/decal/cleanable/dirt, /obj/item/wrench, @@ -20787,6 +20706,11 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"gIs" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/station/engineering/atmos) "gIt" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, @@ -20797,10 +20721,6 @@ /obj/effect/mapping_helpers/airlock/access/any/security/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/security) -"gIv" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "gIw" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/old, @@ -20812,24 +20732,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"gIC" = ( -/obj/effect/turf_decal/tile/red, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/box, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) -"gID" = ( -/obj/machinery/vending/wardrobe/law_wardrobe, -/obj/structure/extinguisher_cabinet/directional/east, -/obj/effect/turf_decal/delivery, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/dark, -/area/station/service/lawoffice) "gIE" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -20845,46 +20747,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"gIJ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "departures-entrance" - }, -/obj/machinery/door/airlock/public/glass{ - name = "Departure Lounge" - }, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/exit/departure_lounge) -"gIW" = ( -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/structure/cable, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) -"gIX" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 6 - }, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) -"gJa" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark, -/area/station/engineering/supermatter/room) "gJc" = ( /obj/structure/railing{ dir = 1 @@ -20920,18 +20782,9 @@ network = list("ss13","engine") }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/radio/intercom/directional/south, /turf/open/floor/engine, /area/station/engineering/gravity_generator) -"gJw" = ( -/obj/structure/rack, -/obj/effect/turf_decal/bot, -/obj/item/wrench, -/obj/effect/decal/cleanable/cobweb, -/obj/effect/decal/cleanable/dirt, -/obj/item/tank/internals/oxygen, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron/dark, -/area/station/ai/satellite/atmos) "gJz" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/corner{ @@ -20966,10 +20819,13 @@ /obj/item/stack/cable_coil/five, /turf/open/floor/plating, /area/ruin/space/has_grav/abandoned_warehouse) -"gJK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, -/turf/closed/wall/rust, -/area/station/maintenance/disposal/incinerator) +"gJX" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "gKd" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -21006,26 +20862,26 @@ "gKI" = ( /turf/closed/wall/rust, /area/station/cargo/miningoffice) -"gKR" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/effect/turf_decal/stripes/line, +"gKJ" = ( +/obj/item/radio/intercom/directional/west, /obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible, +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 4; + name = "Nitrogen Outlet" + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) +"gKR" = ( /obj/machinery/duct, -/turf/open/floor/iron, -/area/station/engineering/main) -"gKS" = ( -/obj/machinery/disposal/bin/tagger, -/obj/effect/turf_decal/bot, -/obj/item/radio/intercom/directional/east, -/obj/structure/disposalpipe/trunk{ +/obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/hop) +/turf/open/floor/iron, +/area/station/engineering/main) "gLm" = ( /obj/machinery/status_display/ai/directional/south, /obj/effect/decal/cleanable/dirt, @@ -21035,14 +20891,15 @@ /obj/structure/sign/departments/medbay/alt, /turf/closed/wall, /area/station/security/medical) -"gLG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/light/floor, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) +"gLw" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "atmos"; + name = "Atmospherics Blast Door" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/atmos/office) "gLH" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -21059,6 +20916,13 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/maintenance/department/crew_quarters/bar) +"gLS" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 9 + }, +/turf/closed/wall/r_wall, +/area/station/engineering/supermatter/engine) "gLT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -21069,6 +20933,19 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"gMa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/components/binary/pump/on/layer4{ + dir = 8; + name = "Air Supply Pump"; + target_pressure = 1200; + hide = 1 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/aft) "gMg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -21077,14 +20954,12 @@ /obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/iron/dark, /area/station/command/bridge) -"gMh" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/turf/open/floor/iron/stairs/left{ - dir = 4 - }, -/area/station/service/chapel) +"gMi" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/hallway/primary/aft) "gMp" = ( /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, @@ -21100,6 +20975,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison/safe) +"gMu" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"gMx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "gMy" = ( /obj/structure/lattice, /obj/structure/window/reinforced/spawner/directional/west, @@ -21113,13 +21001,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/department/cargo) -"gMB" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/carpet/royalblue, -/area/station/service/chapel/office) "gMC" = ( /obj/machinery/camera/directional/south{ c_tag = "Engineering Storage"; @@ -21128,6 +21009,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/effect/turf_decal/tile/red, /turf/open/floor/iron, /area/station/engineering/main) "gME" = ( @@ -21143,18 +21025,23 @@ /obj/structure/sign/poster/contraband/random/directional/west, /turf/open/floor/plating, /area/station/maintenance/fore) -"gML" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/siding/purple/end{ +"gMS" = ( +/obj/machinery/portable_atmospherics/scrubber, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/tile/red/opposingcorners{ dir = 1 }, -/obj/machinery/duct, -/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/box, /turf/open/floor/iron/showroomfloor, -/area/station/science/auxlab) +/area/station/engineering/atmos) +"gMV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/cargo/storage) "gNq" = ( /obj/machinery/vending/wardrobe/medi_wardrobe, /obj/effect/turf_decal/bot, @@ -21164,6 +21051,14 @@ }, /turf/open/floor/iron/dark, /area/station/medical/storage) +"gNy" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/binary/pump{ + name = "Ports to Engine" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmos) "gNz" = ( /turf/closed/wall/r_wall/rust, /area/station/science/auxlab) @@ -21177,6 +21072,17 @@ /obj/structure/cable, /turf/open/space/basic, /area/space/nearstation) +"gNF" = ( +/obj/machinery/airalarm/directional/south, +/obj/machinery/camera/directional/south{ + c_tag = "Laser Room Starboard"; + name = "laser room camera"; + network = list("ss13","engine") + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) "gNI" = ( /obj/structure/transit_tube, /obj/structure/lattice, @@ -21237,6 +21143,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/processing) +"gOu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/plating, +/area/station/hallway/secondary/entry) "gOG" = ( /obj/item/food/breadslice/plain, /obj/item/food/breadslice/plain, @@ -21250,22 +21166,28 @@ /obj/structure/closet/crate, /turf/open/floor/iron/white, /area/station/security/prison/mess) -"gOP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "sci-maint-passthrough" +"gOI" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/turf_decal/delivery, +/obj/structure/disposalpipe/segment{ + dir = 5 }, -/obj/effect/mapping_helpers/airlock/access/any/science/maintenance, -/obj/effect/mapping_helpers/airlock/unres/delayed{ - dir = 1 +/turf/open/floor/iron, +/area/station/engineering/atmos/office) +"gOZ" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 1; + name = "Air to Distro" + }, +/obj/machinery/status_display/ai/directional/east, +/obj/effect/turf_decal/stripes/white/corner{ + dir = 4 }, /turf/open/floor/iron/dark, -/area/station/science) +/area/station/engineering/atmos/pumproom) "gPa" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -21283,6 +21205,25 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/medbay/central) +"gPk" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/airlock/hatch{ + name = "Engine Access" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "gPy" = ( /obj/effect/turf_decal/bot, /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ @@ -21400,27 +21341,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/cargo/office) -"gQM" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/conveyor{ - dir = 4; - id = "QMLoad2"; - name = "on ramp" - }, -/obj/item/radio/intercom/directional/south, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/storage) -"gQV" = ( -/obj/machinery/camera/directional/west{ - c_tag = "Atmospherics Tank - CO2"; - name = "atmospherics camera"; - network = list("ss13","engine") - }, -/turf/open/floor/engine/co2, -/area/station/engineering/atmos) "gRg" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -21430,14 +21350,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/science/xenobiology) -"gRw" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 4 - }, -/obj/machinery/airalarm/directional/east, -/obj/machinery/light/dim/directional/east, -/turf/open/floor/iron/white, -/area/station/security/prison/mess) "gRP" = ( /obj/item/kirbyplants/random, /obj/machinery/status_display/ai/directional/south, @@ -21451,6 +21363,11 @@ }, /turf/open/floor/iron, /area/station/command/bridge) +"gRQ" = ( +/obj/structure/fluff/divine/nexus, +/obj/machinery/light/small/red/directional/west, +/turf/open/floor/mineral/silver, +/area/station/service/chapel/office) "gSc" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -21464,25 +21381,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/chemistry) -"gSm" = ( -/obj/item/storage/box/chemimp{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/storage/box/trackimp{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/structure/table, -/obj/structure/reagent_dispensers/wall/peppertank/directional/south, -/obj/item/storage/box/firingpins, -/obj/item/storage/box/firingpins, -/obj/item/storage/lockbox/loyalty, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/security/armory) "gSp" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 4 @@ -21497,16 +21395,6 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"gSz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 4 - }, -/obj/machinery/status_display/evac/directional/south, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "gSF" = ( /turf/closed/wall/r_wall, /area/station/security/prison/mess) @@ -21534,26 +21422,6 @@ /obj/effect/mapping_helpers/airlock/access/all/science/rd, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) -"gTc" = ( -/obj/structure/table, -/obj/item/tank/internals/emergency_oxygen{ - pixel_x = 6 - }, -/obj/item/tank/internals/emergency_oxygen{ - pixel_x = -6 - }, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/machinery/airalarm/directional/west, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/storage/gas) -"gTg" = ( -/obj/structure/grille/broken, -/turf/open/floor/plating, -/area/station/maintenance/port/lesser) "gTr" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -21606,17 +21474,24 @@ }, /turf/open/floor/iron/dark, /area/station/service/hydroponics) -"gTT" = ( -/obj/machinery/status_display/ai/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/item/kirbyplants/photosynthetic, -/obj/machinery/camera/motion/directional/south{ - c_tag = "ai_upload Consoles"; - network = list("aiupload"); - name = "upload camera" +"gTP" = ( +/obj/effect/turf_decal/arrows/white, +/turf/open/floor/iron/smooth_half, +/area/station/engineering/atmos) +"gUc" = ( +/obj/structure/table, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/rods/fifty, +/obj/item/stack/rods/fifty, +/obj/item/grenade/chem_grenade/smart_metal_foam, +/obj/item/grenade/chem_grenade/smart_metal_foam, +/obj/machinery/light_switch/directional/north, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 }, /turf/open/floor/iron/dark, -/area/station/ai/upload/chamber) +/area/station/engineering/atmos/storage) "gUw" = ( /obj/machinery/power/solar{ id = "aftport"; @@ -21696,24 +21571,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"gVy" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/duct, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "gVC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -21726,6 +21583,15 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/science/research) +"gVV" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "gWb" = ( /obj/effect/landmark/secequipment, /obj/effect/turf_decal/bot, @@ -21741,6 +21607,28 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central) +"gWy" = ( +/obj/effect/landmark/start/warden, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) +"gWP" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/secure_closet/personal, +/obj/item/storage/backpack, +/obj/item/storage/backpack/satchel, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/item/clothing/shoes/winterboots, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/turf/open/floor/iron/dark, +/area/station/commons/locker) "gWT" = ( /obj/machinery/door/airlock/maintenance/external/glass{ name = "Construction Zone" @@ -21762,18 +21650,6 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/sorting) -"gXh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 9 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/pumproom) "gXG" = ( /obj/structure/cable, /obj/structure/disposalpipe/junction/flip{ @@ -21794,14 +21670,18 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"gXX" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +"gXO" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 4 + }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/storage/gas) +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) "gYl" = ( /obj/effect/turf_decal/stripes/corner, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -21815,27 +21695,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"gYq" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/machinery/light_switch/directional/north, -/obj/item/kirbyplants/organic/plant5, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 10 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) "gYx" = ( /obj/machinery/door/poddoor/shutters/preopen{ dir = 1; @@ -21865,6 +21724,24 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/engineering/atmos) +"gYP" = ( +/obj/structure/rack, +/obj/item/storage/toolbox/emergency{ + pixel_y = 5 + }, +/obj/item/stack/cable_coil, +/obj/item/wirecutters, +/obj/effect/turf_decal/bot, +/obj/machinery/airalarm/directional/west, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Recreation Arcade"; + name = "recreation camera" + }, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) "gYV" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -21890,12 +21767,6 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/medical/paramedic) -"gZO" = ( -/obj/structure/sign/warning/electric_shock/directional/north, -/obj/structure/cable, -/obj/machinery/power/smes/full, -/turf/open/floor/circuit/red/telecomms, -/area/station/tcommsat/server) "hah" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/corner, @@ -21970,38 +21841,15 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron/showroomfloor, /area/station/service/bar/atrium) -"hbI" = ( -/obj/structure/rack, -/obj/effect/turf_decal/bot, -/obj/item/storage/box/bodybags{ - pixel_y = 5 - }, -/obj/item/storage/medkit/regular{ - empty = 1; - name = "First-Aid (empty)" - }, -/obj/item/storage/medkit/regular{ - empty = 1; - name = "First-Aid (empty)" - }, -/obj/item/storage/medkit/regular{ - empty = 1; - name = "First-Aid (empty)" - }, -/obj/item/stack/package_wrap, -/obj/item/healthanalyzer, -/obj/item/healthanalyzer, -/obj/item/healthanalyzer, -/obj/machinery/camera/directional/north{ - c_tag = "Robotics Lab"; - name = "science camera"; - network = list("ss13","rd") +"hbL" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering/glass{ + name = "Laser Room" }, -/obj/item/radio/intercom/directional/north, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/machinery/light/cold/directional/north, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/iron/dark, -/area/station/science/robotics/lab) +/area/station/engineering/supermatter/room) "hbT" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -22013,16 +21861,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"hct" = ( -/obj/machinery/computer/pandemic, -/obj/effect/turf_decal/delivery, -/obj/item/radio/intercom/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/dark, -/area/station/medical/virology) "hcH" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/delivery, @@ -22132,6 +21970,18 @@ /obj/effect/turf_decal/tile/blue/opposingcorners, /turf/open/floor/iron/showroomfloor, /area/station/medical/storage) +"hdK" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/disposal/bin/tagger, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) "hdY" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/line, @@ -22247,16 +22097,6 @@ /obj/structure/sign/warning/secure_area, /turf/closed/wall/r_wall, /area/station/maintenance/port/greater) -"hgS" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/machinery/light/floor, -/turf/open/floor/iron/dark, -/area/station/commons/fitness/recreation) "hgW" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -22288,15 +22128,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison) -"hhy" = ( -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/obj/machinery/camera/autoname/directional/north, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "hhE" = ( /obj/item/kirbyplants/organic/plant18, /obj/machinery/light_switch/directional/west{ @@ -22316,18 +22147,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/lab) -"hhJ" = ( -/obj/machinery/flasher/directional/west{ - id = "AI"; - name = "Meatbag Pacifier" - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/end{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/ai/upload/chamber) "hhX" = ( /obj/item/kirbyplants/organic/plant21, /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ @@ -22352,6 +22171,27 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/showroomfloor, /area/station/science/auxlab) +"hir" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/engine, +/area/station/ai/upload/chamber) +"hix" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/green, +/area/station/service/lawoffice) +"hiK" = ( +/obj/structure/window/reinforced/plasma/spawner/directional/east, +/obj/structure/cable, +/obj/machinery/power/energy_accumulator/grounding_rod/anchored, +/obj/machinery/atmospherics/pipe/smart/manifold/green/visible{ + dir = 8 + }, +/turf/open/floor/circuit/green{ + luminosity = 2 + }, +/area/station/engineering/supermatter/engine) "hiQ" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -22364,7 +22204,6 @@ /obj/machinery/door/airlock/highsecurity{ name = "Gravity Generator Room" }, -/obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/maintenance/starboard/aft) "hjh" = ( @@ -22388,12 +22227,11 @@ dir = 4 }, /obj/structure/cable, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 8 }, /obj/effect/turf_decal/tile/red{ - dir = 1 + dir = 8 }, /turf/open/floor/iron, /area/station/engineering/supermatter/room) @@ -22412,6 +22250,21 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) +"hjA" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/corner, +/obj/structure/table, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/pipe_dispenser, +/obj/item/holosign_creator/atmos, +/obj/machinery/light/warm/directional/east, +/obj/structure/sign/warning/vacuum/external/directional/east, +/turf/open/floor/iron, +/area/station/engineering/atmos) "hjE" = ( /obj/effect/turf_decal/bot, /obj/effect/turf_decal/stripes/corner{ @@ -22437,11 +22290,25 @@ /obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/iron/dark, /area/station/cargo/warehouse) -"hjR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) +"hjO" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/structure/table, +/obj/item/experi_scanner{ + pixel_x = -4 + }, +/obj/item/experi_scanner{ + pixel_x = 4 + }, +/obj/machinery/requests_console/directional/north{ + department = "Research Lab"; + name = "Research Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/mapping_helpers/requests_console/ore_update, +/obj/effect/mapping_helpers/requests_console/announcement, +/obj/effect/mapping_helpers/requests_console/information, +/turf/open/floor/iron/dark, +/area/station/science/research) "hjZ" = ( /obj/machinery/door/morgue{ name = "Booze Storage"; @@ -22458,6 +22325,17 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/electrical) +"hkl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "hkp" = ( /turf/closed/wall/r_wall/rust, /area/station/medical/virology) @@ -22489,12 +22367,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/hallway/primary/aft) -"hky" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/carbon_input{ - dir = 1 - }, -/turf/open/floor/engine/co2, -/area/station/engineering/atmos) "hkA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -22531,11 +22403,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"hkK" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/portable_atmospherics/canister/nitrous_oxide, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage/gas) "hkL" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -22630,40 +22497,9 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/department/crew_quarters/bar) -"hmr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/turf_decal/siding/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/lobby) "hms" = ( /turf/closed/wall, /area/station/medical/cryo) -"hmK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 9 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "hmO" = ( /turf/closed/wall, /area/station/security/processing) @@ -22678,16 +22514,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"hnb" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "Pure to Mix" - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/pumproom) "hne" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -22734,20 +22560,6 @@ }, /turf/open/floor/iron, /area/station/service/janitor) -"hnD" = ( -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/machinery/rnd/production/circuit_imprinter, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/red, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) "hnL" = ( /obj/machinery/telecomms/server/presets/engineering, /turf/open/floor/circuit/green/telecomms/mainframe, @@ -22759,18 +22571,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/ordnance) -"hob" = ( -/obj/machinery/airalarm/directional/west, -/obj/machinery/rnd/production/techfab/department/service, -/obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/service) "hoz" = ( /obj/structure/table/wood, /obj/structure/mirror/directional/west, @@ -22794,18 +22594,6 @@ }, /turf/open/floor/iron, /area/station/commons/locker) -"hoI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 10 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos) "hoK" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral{ @@ -22815,23 +22603,6 @@ dir = 8 }, /area/station/hallway/primary/port) -"hoV" = ( -/obj/effect/turf_decal/bot, -/obj/structure/rack, -/obj/item/storage/belt/utility, -/obj/item/weldingtool/largetank, -/obj/item/clothing/head/utility/welding, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/storage/gas) "hpg" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/grille, @@ -22867,15 +22638,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/checkpoint/science) -"hpD" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Atrium Starboard"; - name = "service camera" - }, -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/machinery/light/warm/directional/north, -/turf/open/floor/iron/showroomfloor, -/area/station/service/bar/atrium) "hpG" = ( /obj/effect/turf_decal/box, /obj/machinery/power/solar{ @@ -22995,13 +22757,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"hqW" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "hqZ" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/window/reinforced/spawner/directional/north, @@ -23012,23 +22767,24 @@ /obj/structure/flora/bush/grassy/style_random, /turf/open/floor/grass, /area/station/service/hydroponics) -"hrg" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "ceprivate"; - name = "Chief Engineer's Privacy Shutters" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) "hri" = ( /obj/structure/dresser, /turf/open/floor/wood, /area/station/commons/locker) +"hrx" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"hrC" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "hrN" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -23122,6 +22878,17 @@ /obj/structure/table/reinforced/rglass, /turf/open/floor/iron/dark, /area/station/medical/treatment_center) +"htB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "htJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -23134,6 +22901,13 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"htM" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "htP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -23189,6 +22963,10 @@ /area/station/security/prison/safe) "hur" = ( /obj/machinery/duct, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron, /area/station/engineering/main) "huK" = ( @@ -23212,15 +22990,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/treatment_center) -"huS" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/aft) "hvj" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/status_display/evac/directional/north, @@ -23269,17 +23038,15 @@ /obj/structure/barricade/wooden/crude, /turf/open/floor/plating/rust, /area/station/security/prison) -"hvL" = ( -/obj/structure/table, -/obj/item/stack/medical/mesh, -/obj/item/stack/medical/suture, -/obj/effect/turf_decal/tile/neutral{ +"hwf" = ( +/obj/effect/turf_decal/bot, +/obj/structure/reagent_dispensers/water_cooler, +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 8 }, -/obj/machinery/wall_healer/directional/north, -/obj/machinery/light/cold/directional/north, /turf/open/floor/iron/dark, -/area/station/medical/medbay/lobby) +/area/station/commons/fitness/recreation) "hwr" = ( /obj/structure/disposaloutlet{ dir = 8 @@ -23362,25 +23129,18 @@ }, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) -"hxF" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 +"hxE" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 }, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/mapping_helpers/broken_floor, /obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/components/unary/airlock_pump/unbolt_only{ - dir = 1 +/obj/effect/turf_decal/stripes/corner{ + dir = 4 }, -/turf/open/floor/plating, -/area/station/maintenance/disposal) +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, +/obj/machinery/disposal/bin/tagger, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/chemistry) "hxP" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -23392,40 +23152,6 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/carpet/blue, /area/station/command/heads_quarters/hop) -"hxZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/camera/autoname/directional/east, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/wood, -/area/station/commons/vacant_room/commissary) -"hyd" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/mapping_helpers/burnt_floor, -/obj/machinery/light/small/directional/west, -/turf/open/floor/plating, -/area/station/security/execution/education) -"hyk" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/effect/turf_decal/box, -/obj/machinery/light/warm/directional/south, -/turf/open/floor/iron/dark, -/area/station/engineering/supermatter/room) "hyl" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -23434,20 +23160,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central) -"hyp" = ( -/obj/machinery/light/small/directional/west, -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "hyq" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -23465,9 +23177,24 @@ /area/station/commons/vacant_room/commissary) "hyJ" = ( /obj/effect/turf_decal/bot, -/obj/structure/ore_box, +/obj/structure/closet, +/obj/item/assembly/timer, +/obj/item/electronics/airlock, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"hyP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/status_display/ai/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/vault) "hyQ" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -23479,15 +23206,6 @@ }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"hzx" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/storage) -"hzC" = ( -/obj/structure/flora/rock/icy/style_2, -/turf/open/misc/asteroid/airless, -/area/space/nearstation) "hzE" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -23503,22 +23221,31 @@ /obj/structure/closet, /turf/open/floor/plating, /area/ruin/space/has_grav/abandoned_warehouse) -"hAc" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/shower/directional/east{ - name = "emergency shower" - }, -/obj/effect/turf_decal/box/corners, -/obj/effect/turf_decal/box/corners{ +"hzP" = ( +/obj/machinery/firealarm/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue{ dir = 8 }, -/turf/open/floor/iron, -/area/station/engineering/atmos) +/obj/effect/turf_decal/tile/red, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) +"hAs" = ( +/obj/machinery/status_display/ai/directional/east, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/ai/satellite/chamber) "hAJ" = ( /turf/closed/wall, /area/station/engineering/storage/tech) @@ -23529,25 +23256,14 @@ "hAP" = ( /turf/closed/wall/r_wall, /area/station/security/evidence) -"hAT" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/structure/table, -/obj/item/experi_scanner{ - pixel_x = -4 - }, -/obj/item/experi_scanner{ - pixel_x = 4 - }, -/obj/machinery/requests_console/directional/north{ - department = "Research Lab"; - name = "Research Requests Console" +"hAX" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 2; + name = "Pure to Mix" }, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/effect/mapping_helpers/requests_console/ore_update, -/obj/effect/mapping_helpers/requests_console/announcement, -/obj/effect/mapping_helpers/requests_console/information, -/turf/open/floor/iron/dark, -/area/station/science/research) +/obj/effect/turf_decal/tile/green/fourcorners, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/atmos) "hBa" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/corner{ @@ -23579,14 +23295,6 @@ }, /turf/open/floor/plating, /area/station/cargo/storage) -"hBk" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, -/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/engineering/atmos/pumproom) "hBm" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/abandoned, @@ -23667,6 +23375,20 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/science/ordnance) +"hCb" = ( +/obj/structure/table, +/obj/item/storage/box/deputy, +/obj/item/stack/package_wrap, +/obj/item/hand_labeler, +/obj/machinery/camera/directional/west{ + c_tag = "Warden's Office" + }, +/obj/structure/reagent_dispensers/wall/peppertank/directional/west, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/warden) "hCd" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -23689,6 +23411,10 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/brig) +"hCv" = ( +/obj/machinery/light/dim/directional/north, +/turf/open/floor/iron/dark, +/area/station/service/chapel/monastery) "hCK" = ( /obj/structure/table, /obj/item/clothing/gloves/color/orange, @@ -23768,18 +23494,19 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"hDV" = ( -/obj/effect/turf_decal/stripes/line{ +"hDU" = ( +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/tile/blue{ dir = 8 }, -/obj/machinery/portable_atmospherics/pump, -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/obj/machinery/newscaster/directional/north, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 1 +/obj/structure/table/glass, +/obj/machinery/microwave{ + pixel_y = 5 }, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted, +/obj/machinery/light/small/directional/south, /turf/open/floor/iron/showroomfloor, -/area/station/engineering/atmos) +/area/station/medical/break_room) "hEa" = ( /obj/item/kirbyplants/organic/applebush, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -23789,17 +23516,18 @@ dir = 1 }, /area/station/hallway/primary/central/fore) -"hEh" = ( -/obj/structure/rack, -/obj/effect/spawner/random/techstorage/service_all, -/obj/effect/turf_decal/bot, -/obj/machinery/status_display/ai/directional/north, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/effect/spawner/random/techstorage/arcade_boards, -/obj/effect/spawner/random/techstorage/arcade_boards, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/dark, -/area/station/engineering/storage/tech) +"hEj" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmos/storage) "hEk" = ( /obj/structure/table, /obj/item/stack/package_wrap, @@ -23827,19 +23555,6 @@ /obj/item/papercutter, /turf/open/floor/iron/dark, /area/station/cargo/sorting) -"hEq" = ( -/obj/structure/sign/poster/official/anniversary_vintage_reprint/directional/north, -/obj/machinery/camera/directional/north{ - c_tag = "Chemistry North"; - network = list("ss13","medbay") - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/chemistry) "hEw" = ( /obj/structure/table/wood, /obj/item/paper_bin{ @@ -23871,58 +23586,9 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) -"hEU" = ( -/obj/structure/disposaloutlet, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/box, -/turf/open/floor/plating/airless, -/area/space/nearstation) "hEV" = ( /turf/open/floor/engine/vacuum, /area/station/engineering/atmos) -"hEY" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 1; - name = "Air to Distro" - }, -/obj/structure/sign/warning/fire/directional/east, -/obj/machinery/camera/directional/east{ - c_tag = "Atmospherics Distribution Loop"; - name = "atmospherics camera"; - network = list("ss13","engine") - }, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/pumproom) -"hFf" = ( -/obj/structure/bed, -/obj/machinery/iv_drip, -/obj/item/bedsheet/medical, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/security/medical) -"hFm" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) "hFx" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -23946,12 +23612,30 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/closed/wall/r_wall, /area/station/science/ordnance/office) +"hFC" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/ai_law_rack/base/core, +/turf/open/floor/iron/dark, +/area/station/ai/upload/chamber) "hGf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/command/bridge) +"hGh" = ( +/obj/structure/table, +/obj/item/storage/box/bodybags{ + pixel_y = 5 + }, +/obj/item/pen, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/cold/directional/south, +/turf/open/floor/iron/dark, +/area/station/medical/medbay/lobby) "hGm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -23971,6 +23655,17 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/virology) +"hGr" = ( +/obj/structure/chair/office, +/obj/effect/turf_decal/siding/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) "hGC" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/box/white, @@ -23979,20 +23674,28 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/storage) -"hGG" = ( -/obj/structure/table, -/obj/item/clipboard, -/obj/item/flashlight/seclite, -/obj/item/flashlight/seclite, -/obj/item/flashlight/seclite, +"hGM" = ( +/obj/structure/sign/warning, +/turf/closed/wall/r_wall, +/area/station/security/prison/safe) +"hGU" = ( +/obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, -/obj/item/toy/figure/secofficer, -/obj/structure/extinguisher_cabinet/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ +/obj/machinery/ore_silo, +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ dir = 8 }, +/obj/machinery/light/small/red/directional/east, /turf/open/floor/iron/dark, -/area/station/security/lockers) +/area/station/command/vault) +"hGV" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) "hGX" = ( /obj/effect/turf_decal/bot, /obj/structure/closet/emcloset, @@ -24003,12 +23706,6 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) -"hHf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/machinery/meter, -/obj/machinery/duct, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/cryo) "hHg" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 4 @@ -24038,6 +23735,27 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/execution/transfer) +"hHn" = ( +/obj/item/radio/intercom/directional/south, +/obj/item/flatpack/flatpacker, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/stripes/corner, +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/lobby) +"hHz" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) "hHL" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -24062,15 +23780,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/port) -"hIp" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) "hIq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -24087,15 +23796,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/maintenance/starboard/fore) -"hIy" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Auxiliary Dock" +"hIz" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /turf/open/floor/iron/dark, -/area/station/hallway/secondary/exit/departure_lounge) +/area/station/service/chapel) "hIS" = ( /obj/structure/rack, /obj/effect/spawner/random/techstorage/rnd_all, @@ -24205,6 +23914,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/processing) +"hKf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/green/visible{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/meter, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "hKg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -24248,13 +23969,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"hKF" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "hKQ" = ( /obj/structure/table/wood, /obj/item/clipboard, @@ -24277,9 +23991,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/security/checkpoint/supply) -"hKW" = ( -/turf/open/floor/plating, -/area/station/maintenance/fore) "hLj" = ( /obj/machinery/telecomms/server/presets/security, /turf/open/floor/circuit/green/telecomms/mainframe, @@ -24299,34 +24010,19 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/engineering/circuit_workshop) -"hLs" = ( -/obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/blood, -/obj/item/reagent_containers/blood{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/item/reagent_containers/blood/a_minus, -/obj/item/reagent_containers/blood/b_minus{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/reagent_containers/blood/b_plus{ - pixel_x = 1; - pixel_y = 2 - }, -/obj/item/reagent_containers/blood/o_minus, -/obj/item/reagent_containers/blood/o_plus{ - pixel_x = -2; - pixel_y = -1 +"hLw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, -/obj/item/reagent_containers/blood/random, -/obj/item/reagent_containers/blood/random, -/obj/item/reagent_containers/blood/random, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron/dark, -/area/station/medical/virology) +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/warning/vacuum/external/directional/east, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/duct, +/obj/machinery/atmospherics/components/unary/airlock_pump/unbolt_only, +/turf/open/floor/plating, +/area/station/science) "hLz" = ( /obj/structure/disposalpipe/sorting/mail/flip{ dir = 8; @@ -24341,6 +24037,20 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/storage) +"hLI" = ( +/obj/structure/table/wood, +/obj/machinery/reagentgrinder{ + pixel_y = 5 + }, +/obj/item/toy/figure/bartender{ + pixel_x = -7 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/station/service/bar/backroom) "hLO" = ( /obj/structure/plasticflaps, /obj/machinery/conveyor{ @@ -24357,16 +24067,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"hLY" = ( -/obj/machinery/status_display/ai/directional/east, -/obj/machinery/camera/directional/north{ - c_tag = "ai_upload Turrets"; - name = "upload camera"; - network = list("aiupload") - }, -/obj/item/kirbyplants/photosynthetic, -/turf/open/floor/circuit/red, -/area/station/ai/upload/chamber) "hMf" = ( /obj/structure/table/reinforced, /obj/structure/desk_bell{ @@ -24408,30 +24108,12 @@ "hMN" = ( /turf/closed/wall, /area/station/service/chapel/funeral) -"hMU" = ( -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "hMW" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, /turf/open/floor/iron/showroomfloor, /area/station/science/ordnance) -"hMY" = ( -/obj/item/kirbyplants/organic/plant16, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "hMZ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/poddoor/preopen{ @@ -24448,18 +24130,6 @@ /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/iron/dark, /area/station/maintenance/department/bridge) -"hNh" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark/corner{ - dir = 1 - }, -/area/station/hallway/primary/port) "hNi" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -24471,15 +24141,6 @@ dir = 8 }, /area/station/hallway/primary/starboard) -"hNy" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos) "hNF" = ( /obj/structure/lattice/catwalk, /obj/structure/disposalpipe/segment, @@ -24489,17 +24150,6 @@ /obj/structure/marker_beacon/burgundy, /turf/open/space/basic, /area/space/nearstation) -"hNG" = ( -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/iron/dark/corner{ - dir = 1 - }, -/area/station/hallway/primary/fore) "hNI" = ( /turf/closed/wall/rust, /area/station/security/detectives_office) @@ -24562,6 +24212,16 @@ /obj/effect/mapping_helpers/airlock/access/any/service/maintenance, /turf/open/floor/iron/dark, /area/station/maintenance/fore) +"hOw" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "hOA" = ( /obj/structure/flora/rock/pile/style_random, /obj/structure/flora/bush/ferny, @@ -24642,6 +24302,11 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"hPy" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/aft) "hPz" = ( /obj/structure/sign/warning/secure_area, /turf/closed/wall, @@ -24693,22 +24358,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"hQd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/mechpad{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner, -/obj/machinery/button/door/directional/south{ - id = "Skynet_launch"; - name = "Mech Bay Door Control" - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/dark, -/area/station/science/robotics/mechbay) "hQg" = ( /obj/item/kirbyplants/organic/plant3, /obj/structure/disposalpipe/segment, @@ -24724,6 +24373,13 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit/departure_lounge) +"hQv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/item/radio/intercom/directional/north, +/obj/machinery/light/warm/dim/directional/north, +/turf/open/floor/iron, +/area/station/security/prison) "hQA" = ( /obj/structure/sink/directional/south, /obj/machinery/atmospherics/components/tank/air/layer4, @@ -24755,17 +24411,6 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/engine/telecomms, /area/station/tcommsat/server) -"hRe" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/disposal/bin/tagger, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/commons/locker) "hRf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -24786,18 +24431,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/construction/mining/aux_base) -"hRj" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "Mix to Ports" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 8 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/engineering/atmos) "hRo" = ( /obj/machinery/door/poddoor/preopen{ id = "transittube_ai"; @@ -24815,16 +24448,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/ordnance/storage) -"hRJ" = ( -/obj/structure/chair/office/light{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 4 - }, -/obj/machinery/computer/security/telescreen/ordnance/directional/east, -/turf/open/floor/iron/showroomfloor, -/area/station/science/ordnance) "hRU" = ( /obj/structure/table, /obj/machinery/cell_charger, @@ -24836,14 +24459,6 @@ /obj/effect/turf_decal/tile/neutral/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/science/lab) -"hRY" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "hRZ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -24876,12 +24491,6 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"hSv" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 4 - }, -/turf/closed/wall, -/area/station/engineering/atmos) "hSy" = ( /obj/effect/turf_decal/bot, /obj/machinery/light/directional/west, @@ -24895,6 +24504,24 @@ }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs) +"hSF" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/pen, +/obj/item/stamp/denied{ + pixel_x = 8; + pixel_y = 6 + }, +/obj/item/stamp/granted{ + pixel_x = 8; + pixel_y = 2 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) "hSJ" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/south, @@ -24925,36 +24552,13 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"hTn" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +"hTm" = ( +/obj/machinery/light_switch/directional/south, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/showroomfloor, -/area/station/science) -"hTo" = ( -/obj/item/tank/internals/emergency_oxygen/engi{ - pixel_x = -5 - }, -/obj/item/tank/internals/emergency_oxygen/engi{ - pixel_x = 5 - }, -/obj/item/geiger_counter, -/obj/item/geiger_counter, -/obj/structure/table, -/obj/structure/sign/warning/xeno_mining/directional/west, -/obj/machinery/light/warm/directional/west, -/turf/open/floor/iron/dark, -/area/station/engineering/supermatter/room) +/turf/open/floor/engine, +/area/station/ai/satellite/interior) "hTz" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 8 @@ -24971,6 +24575,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/engineering/hallway) +"hTE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/light/dim/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) "hTK" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -24986,23 +24600,31 @@ }, /turf/open/floor/iron/dark, /area/station/service/hydroponics/garden) +"hTO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/railing/corner/end{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "hTQ" = ( /obj/structure/plasticflaps/opaque, /turf/open/floor/plating, /area/station/security/prison/shower) -"hUn" = ( -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ +"hUq" = ( +/obj/structure/lattice, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/table, -/obj/item/storage/box/disks{ - pixel_y = 5 - }, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/gloves/latex, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/dark, -/area/station/science/research) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/transit_tube/diagonal/topleft, +/turf/open/space/basic, +/area/space/nearstation) "hUw" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -25075,12 +24697,25 @@ /obj/item/wirecutters, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"hVf" = ( +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 8 + }, +/obj/item/flatpack/flatpacker, +/obj/effect/turf_decal/delivery, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/dark, +/area/station/science/lab) "hVj" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/aft) "hVl" = ( @@ -25096,16 +24731,22 @@ /obj/item/toy/plush/nukeplushie, /turf/open/floor/plating/airless, /area/space/nearstation) -"hVH" = ( +"hVD" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, /obj/effect/turf_decal/stripes/line{ - dir = 1 + dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/engineering/supermatter/room) +/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmos) "hVL" = ( /obj/machinery/computer/slot_machine, /obj/effect/turf_decal/bot_white, @@ -25152,20 +24793,31 @@ dir = 8 }, /area/station/hallway/primary/fore) -"hXa" = ( -/obj/structure/table, -/obj/item/storage/box/deputy, -/obj/item/stack/package_wrap, -/obj/item/hand_labeler, -/obj/machinery/camera/directional/west{ - c_tag = "Warden's Office" +"hWK" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/machinery/status_display/ai/directional/south, +/obj/structure/cable/layer3, +/turf/open/floor/engine, +/area/station/ai/satellite/chamber) +"hWO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ + dir = 1 }, -/obj/structure/reagent_dispensers/wall/peppertank/directional/west, /obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/stripes/red/line{ dir = 4 }, +/obj/machinery/meter/monitored/waste_loop, /turf/open/floor/iron/dark, -/area/station/security/warden) +/area/station/engineering/atmos/pumproom) "hXe" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -25174,24 +24826,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/port) -"hXg" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, -/obj/machinery/space_heater, -/obj/machinery/airalarm/directional/east, -/obj/structure/sign/poster/contraband/fun_police/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/security/execution/education) "hXK" = ( /obj/structure/sign/directions/security{ pixel_y = -40 @@ -25211,20 +24845,9 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/central) -"hXL" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/computer/station_alert, -/obj/machinery/requests_console/directional/east{ - department = "Atmospherics"; - name = "Atmospherics Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/supplies, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/storage/gas) +"hXP" = ( +/turf/closed/wall, +/area/station/engineering/atmos/storage) "hYo" = ( /obj/structure/bed, /obj/item/bedsheet/red, @@ -25234,13 +24857,25 @@ /obj/effect/landmark/start/prisoner, /turf/open/floor/iron, /area/station/security/prison/safe) -"hYr" = ( -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/obj/machinery/light/floor, +"hYq" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/trinary/mixer{ + name = "plasma mixer" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, /turf/open/floor/iron, -/area/station/hallway/secondary/entry) +/area/station/engineering/atmos) "hYu" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -25338,6 +24973,16 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/fore) +"hZv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "hZP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -25375,23 +25020,6 @@ }, /turf/open/floor/iron, /area/station/engineering/lobby) -"hZU" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/camera/directional/east{ - c_tag = "E.V.A. Storage"; - name = "command camera" - }, -/obj/machinery/suit_storage_unit/standard_unit{ - desc = "An industrial suit storage device carrying retro space suits. Neat!"; - helmet_type = /obj/item/clothing/head/helmet/space; - suit_type = /obj/item/clothing/suit/space - }, -/obj/machinery/status_display/ai/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/command/eva) "iai" = ( /obj/machinery/vending/hydronutrients, /obj/structure/railing{ @@ -25548,12 +25176,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"icm" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/dark, -/area/station/science/auxlab) "icp" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -25579,11 +25201,8 @@ }, /obj/item/clothing/head/utility/hardhat/orange{ name = "protective hat"; - pixel_y = 6 + pixel_y = 5 }, -/obj/item/clothing/glasses/meson/engine, -/obj/item/clothing/glasses/meson/engine, -/obj/item/clothing/glasses/meson/engine, /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron/dark, /area/station/engineering/storage_shared) @@ -25651,18 +25270,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/security/execution/transfer) -"idf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/light/floor, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation) "idh" = ( /obj/structure/disposalpipe/sorting/mail/flip{ dir = 4; @@ -25679,15 +25286,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/hallway/primary/fore) -"idk" = ( -/obj/structure/window/reinforced/plasma/spawner/directional/west, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/machinery/power/energy_accumulator/tesla_coil/anchored, -/turf/open/floor/circuit/green{ - luminosity = 2 - }, -/area/station/engineering/supermatter/engine) "idq" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -25771,6 +25369,28 @@ /obj/effect/turf_decal/tile/purple, /turf/open/floor/iron/showroomfloor, /area/station/science/ordnance/office) +"iex" = ( +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/cobweb, +/obj/item/book{ + desc = "An undeniably handy book."; + icon_state = "bookknock"; + name = "A Simpleton's Guide to Safe-cracking with Stethoscopes" + }, +/obj/item/stack/spacecash/c500{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/stack/spacecash/c1000, +/obj/item/gun/ballistic/automatic/pistol/deagle/gold, +/obj/machinery/status_display/ai/directional/north, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/structure/safe/vault, +/obj/machinery/light/small/red/directional/west, +/turf/open/floor/iron/dark, +/area/station/command/vault) "ieI" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -25781,6 +25401,13 @@ }, /turf/open/floor/iron, /area/station/command/teleporter) +"ieK" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 5 + }, +/turf/closed/wall/r_wall, +/area/station/engineering/supermatter/engine) "ieV" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -25799,13 +25426,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/disposal) -"ifB" = ( -/obj/structure/sign/warning/no_smoking{ - pixel_x = 30 - }, -/obj/machinery/duct, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "ifQ" = ( /obj/structure/sign/warning/electric_shock, /turf/closed/wall/r_wall, @@ -25843,6 +25463,17 @@ }, /turf/open/floor/iron/dark, /area/station/service/janitor) +"igq" = ( +/obj/structure/window/reinforced/plasma/spawner/directional/west, +/obj/structure/cable, +/obj/machinery/power/energy_accumulator/tesla_coil/anchored, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 9 + }, +/turf/open/floor/circuit/green{ + luminosity = 2 + }, +/area/station/engineering/supermatter/engine) "igC" = ( /obj/effect/turf_decal/bot, /obj/machinery/disposal/bin/tagger, @@ -25868,6 +25499,25 @@ }, /turf/open/floor/iron/dark/corner, /area/station/hallway/primary/port) +"igY" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "departures-entrance" + }, +/obj/machinery/door/airlock/public/glass{ + name = "Departure Lounge" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"igZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/ai/upload/chamber) "ihg" = ( /turf/closed/wall/r_wall, /area/station/ai/satellite/maintenance/storage) @@ -25889,24 +25539,27 @@ /obj/structure/cable, /turf/open/floor/plating, /area/ruin/space/has_grav/abandoned_warehouse) +"ihH" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmos) "ihU" = ( /turf/closed/wall/rust, /area/station/cargo/sorting) +"ihZ" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmos) "iio" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"iiG" = ( -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/engineering/main) "iiQ" = ( /obj/effect/turf_decal/box, /obj/structure/toilet{ @@ -25959,12 +25612,22 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/security/office) -"ijr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ +"ijs" = ( +/obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/engine, -/area/station/maintenance/disposal/incinerator) +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 8; + name = "Air to Internal Air Ports" + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "iju" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -26053,20 +25716,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel/monastery) -"ikh" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "Mix to Distro" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/engineering/atmos/pumproom) "ikm" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -26098,10 +25747,6 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/psychology, /turf/open/floor/iron/dark, /area/station/medical/psychology) -"ikt" = ( -/obj/structure/plaque/static_plaque/atmos, -/turf/closed/wall/rust, -/area/station/engineering/atmos) "iku" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -26152,20 +25797,23 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/science) -"ikI" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/machinery/disposal/bin/tagger, -/obj/item/radio/intercom/directional/east, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/hos) "ikO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/showroomfloor, /area/station/medical/chemistry) +"ikP" = ( +/obj/structure/bodycontainer/morgue{ + dir = 8 + }, +/obj/effect/turf_decal/bot_white, +/obj/machinery/airalarm/directional/east, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "ikR" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -26183,6 +25831,13 @@ /obj/structure/sign/poster/contraband/missing_gloves, /turf/closed/wall/rust, /area/station/maintenance/port/fore) +"ilh" = ( +/obj/machinery/computer/bank_machine, +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/floor/circuit/green{ + luminosity = 2 + }, +/area/station/command/vault) "ill" = ( /obj/machinery/computer/teleporter{ dir = 8 @@ -26237,6 +25892,21 @@ /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, /area/station/commons/fitness/recreation) +"ilW" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 9 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "imo" = ( /obj/structure/sign/directions/science{ dir = 4; @@ -26296,21 +25966,10 @@ "ing" = ( /turf/closed/wall/rust, /area/station/service/chapel/dock) -"inE" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) +"inz" = ( +/obj/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/aft) "inF" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -26325,14 +25984,15 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron/checker, /area/station/security/mechbay) -"iol" = ( -/obj/structure/railing/corner, -/obj/item/kirbyplants/random, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "ios" = ( /turf/closed/wall/rust, /area/station/service/kitchen) +"ioC" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/grass, +/area/station/service/chapel) "ioQ" = ( /turf/closed/wall, /area/station/engineering/circuit_workshop) @@ -26350,20 +26010,11 @@ /obj/structure/cable, /turf/open/floor/plating, /area/space/nearstation) -"ioW" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) +"ioV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/door_assembly/door_assembly_atmo, +/turf/open/floor/plating, +/area/station/maintenance/aft) "ipb" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/corner{ @@ -26381,17 +26032,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/cargo/bitrunning/den) -"ipf" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/engineering/hallway) "ipg" = ( /obj/effect/decal/cleanable/blood/oil, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -26399,14 +26039,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/hallway/primary/aft) -"ipn" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/newscaster/directional/south, -/obj/machinery/light/cold/dim/directional/south, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/station/medical/coldroom) "ipo" = ( /obj/machinery/chem_master/condimaster{ desc = "Used to separate out liquids - useful for purifying botanical extracts. Also dispenses condiments."; @@ -26418,6 +26050,13 @@ }, /turf/open/floor/iron/dark, /area/station/service/hydroponics) +"ipA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/start/chaplain, +/obj/machinery/light/floor, +/turf/open/floor/carpet/red, +/area/station/service/chapel) "ipC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -26448,14 +26087,6 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/dark, /area/station/service/library) -"ipJ" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1; - name = "Mix Outlet Pump" - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos/pumproom) "ipL" = ( /obj/structure/closet/crate/hydroponics, /obj/item/crowbar/red, @@ -26493,6 +26124,17 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) +"iqg" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/disposal/bin/tagger, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/medical/virology) "iqk" = ( /obj/structure/flora/rock/pile/style_random{ pixel_x = 4; @@ -26504,27 +26146,35 @@ }, /turf/open/misc/asteroid/airless, /area/space/nearstation) -"iqC" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 2; - id = "chemistry_shutters_2"; - name = "Chemistry Hall Shutters" +"iqr" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/simple/violet/visible{ + dir = 4 }, -/turf/open/floor/plating, -/area/station/medical/paramedic) +/turf/open/floor/iron, +/area/station/engineering/atmos) +"iqz" = ( +/obj/structure/rack, +/obj/effect/spawner/random/techstorage/rnd_secure_all, +/obj/machinery/status_display/shuttle{ + pixel_y = -32 + }, +/turf/open/floor/circuit/green{ + luminosity = 2 + }, +/area/station/engineering/storage/tech) +"iqC" = ( +/obj/structure/lattice/catwalk, +/obj/structure/marker_beacon/burgundy, +/turf/open/space/basic, +/area/space/nearstation) "iqN" = ( /obj/effect/turf_decal/stripes/corner, /obj/effect/mapping_helpers/burnt_floor, /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"iqO" = ( -/mob/living/carbon/human/species/monkey, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/small/directional/west, -/turf/open/floor/grass, -/area/station/science/auxlab) "iqQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/airalarm/directional/south, @@ -26544,6 +26194,37 @@ /obj/effect/mapping_helpers/airlock/access/any/security/maintenance, /turf/open/floor/iron/dark, /area/station/maintenance/port/greater) +"ird" = ( +/obj/machinery/status_display/evac/directional/west, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/machinery/light/cold/directional/west, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/medbay/central) +"irg" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/machinery/computer/atmos_control/nocontrol/incinerator{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden/layer4{ + dir = 6 + }, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/smooth_large, +/area/station/maintenance/disposal/incinerator) "iri" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -26618,6 +26299,17 @@ dir = 1 }, /area/station/hallway/primary/fore) +"irW" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/railing/corner/end{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "irZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -26630,16 +26322,14 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/science/robotics/lab) -"ist" = ( -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 +"isb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/obj/machinery/light/warm/directional/east, -/turf/open/floor/iron, -/area/station/cargo/miningdock) +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/closet/crate/trashcart, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "isD" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -26656,11 +26346,35 @@ /obj/structure/cable, /obj/effect/mapping_helpers/burnt_floor, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/warning/secure_area/directional/west, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) "isS" = ( /turf/open/floor/iron/grimy, /area/station/security/prison) +"isZ" = ( +/obj/machinery/status_display/ai/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/item/kirbyplants/photosynthetic, +/obj/machinery/camera/motion/directional/south{ + c_tag = "ai_upload Consoles"; + network = list("aiupload"); + name = "upload camera" + }, +/turf/open/floor/iron/dark, +/area/station/ai/upload/chamber) +"itj" = ( +/obj/machinery/door/airlock/external{ + name = "Prison External Airlock" + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "kilo-maint-1" + }, +/obj/effect/mapping_helpers/airlock/access/any/security/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) "itn" = ( /turf/closed/wall/r_wall/rust, /area/station/command/vault) @@ -26690,6 +26404,17 @@ }, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) +"ity" = ( +/obj/item/radio/intercom/directional/west, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "itC" = ( /obj/effect/turf_decal/bot, /obj/structure/closet/firecloset, @@ -26704,6 +26429,21 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) +"itK" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/obj/machinery/meter, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"itN" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/aft) "itR" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -26717,12 +26457,10 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/psychology) -"iug" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/plasma_input{ - dir = 1 - }, -/turf/open/floor/engine/plasma, -/area/station/engineering/atmos) +"iui" = ( +/obj/machinery/telecomms/server/presets/supply, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) "iun" = ( /obj/machinery/door/airlock/medical{ id_tag = "Shower_1"; @@ -26756,6 +26494,13 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"iuN" = ( +/obj/structure/table, +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/iron/dark, +/area/station/commons/locker) "iuP" = ( /obj/machinery/computer/teleporter{ dir = 8 @@ -26771,6 +26516,14 @@ }, /turf/open/floor/iron/dark, /area/station/command/teleporter) +"iuR" = ( +/obj/structure/sign/warning/vacuum/external/directional/west, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "ivh" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -26780,6 +26533,22 @@ }, /turf/open/floor/plating, /area/station/command/heads_quarters/cmo) +"ivi" = ( +/obj/structure/table/wood/fancy/black, +/obj/item/food/grown/flower/poppy/lily{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/food/grown/flower/poppy/lily{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/food/grown/flower/poppy/lily, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/cell_5k, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/service/chapel/monastery) "ivm" = ( /obj/effect/turf_decal/delivery, /obj/structure/closet/firecloset, @@ -26814,6 +26583,20 @@ /obj/structure/closet/emcloset, /turf/open/floor/plating, /area/station/maintenance/department/security) +"ivY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"iwc" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "iwf" = ( /obj/structure/transit_tube/curved/flipped{ dir = 1 @@ -26836,6 +26619,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"iwx" = ( +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/green/half/contrasted, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/virology) "iwB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -26860,24 +26655,19 @@ }, /turf/open/floor/iron/dark, /area/station/security/lockers) -"iwM" = ( -/obj/effect/spawner/structure/window/reinforced/plasma, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, -/turf/open/floor/plating, -/area/station/engineering/supermatter/room) -"iwS" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) -"iwT" = ( -/obj/effect/turf_decal/delivery, -/obj/structure/closet/radiation, -/obj/item/clothing/glasses/meson, +"iwV" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/light/floor, /turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"ixb" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, +/obj/machinery/meter, +/turf/open/floor/iron/smooth, /area/station/engineering/atmos) "ixc" = ( /obj/effect/turf_decal/stripes/line, @@ -26925,6 +26715,20 @@ dir = 1 }, /area/station/hallway/primary/central) +"ixp" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/atmos) "ixx" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/event_spawn, @@ -26941,13 +26745,6 @@ "ixB" = ( /turf/closed/wall/r_wall, /area/station/maintenance/department/chapel/monastery) -"ixE" = ( -/obj/structure/window/spawner/directional/west, -/obj/structure/window/spawner/directional/east, -/obj/structure/window/spawner/directional/north, -/obj/structure/flora/bush/fullgrass/style_random, -/turf/open/floor/grass, -/area/station/medical/medbay/central) "ixO" = ( /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/blood/old, @@ -26955,19 +26752,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/command/heads_quarters/hop) -"ixR" = ( -/obj/machinery/airalarm/directional/north, -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=8"; - location = "QM #1" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/effect/turf_decal/delivery, -/obj/effect/decal/cleanable/blood/oil, -/mob/living/basic/bot/mulebot, -/turf/open/floor/iron/dark, -/area/station/cargo/warehouse) "iyd" = ( /obj/machinery/door/poddoor/incinerator_atmos_main, /turf/open/floor/engine, @@ -26993,6 +26777,13 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/iron/dark, /area/station/maintenance/fore) +"iyy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "iyB" = ( /obj/machinery/atmospherics/components/binary/valve/layer4, /obj/effect/turf_decal/stripes/line, @@ -27071,6 +26862,16 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/fore) +"izw" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/duct, +/obj/machinery/door/airlock/engineering/glass{ + name = "Engineering Storage" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/main) "izL" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, @@ -27094,24 +26895,29 @@ /obj/machinery/vending/clothing, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) -"iAf" = ( -/obj/effect/turf_decal/bot, -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate, -/obj/structure/grille/broken, -/obj/item/clothing/gloves/color/fyellow, -/obj/item/flashlight, -/obj/item/flashlight/flare, -/obj/item/relic, -/obj/structure/sign/poster/contraband/random/directional/west, -/obj/machinery/light/small/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/starboard) +"iAh" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) "iAo" = ( /obj/structure/lattice, /obj/structure/sign/warning/secure_area/directional/south, /turf/open/space/basic, /area/space/nearstation) +"iAr" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/components/binary/pump/on{ + name = "Air to Mix"; + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "iAC" = ( /obj/machinery/suit_storage_unit/rd, /obj/effect/turf_decal/delivery, @@ -27120,12 +26926,6 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) -"iAE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, -/obj/effect/turf_decal/delivery, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/engineering/supermatter/room) "iAR" = ( /obj/effect/turf_decal/delivery, /obj/effect/decal/cleanable/dirt, @@ -27133,20 +26933,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/electrical) -"iAU" = ( -/obj/structure/table, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/clothing/head/utility/welding{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/clothing/head/utility/welding, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "iBc" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/holosign/barrier/atmos, @@ -27254,15 +27040,6 @@ }, /turf/open/misc/asteroid, /area/station/maintenance/port/greater) -"iCf" = ( -/obj/structure/railing/corner{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "iCK" = ( /obj/effect/turf_decal/bot, /obj/machinery/conveyor{ @@ -27289,6 +27066,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit/departure_lounge) +"iCQ" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 9 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos) "iCV" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -27314,6 +27098,13 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"iCZ" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/computer/security/telescreen/entertainment/directional/east, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) "iDh" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=Upload"; @@ -27324,6 +27115,62 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"iDo" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/service/chapel/dock) +"iDs" = ( +/obj/machinery/airalarm/directional/east, +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"iDw" = ( +/obj/structure/reagent_dispensers/fueltank/large, +/obj/effect/turf_decal/delivery, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) +"iDQ" = ( +/obj/structure/table, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/item/clothing/glasses/hud/security/sunglasses/gars{ + pixel_x = 3; + pixel_y = -2 + }, +/obj/item/clothing/glasses/hud/security/sunglasses/gars{ + pixel_x = 3; + pixel_y = 2 + }, +/obj/item/clothing/glasses/hud/security/sunglasses{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/item/clothing/glasses/hud/security/sunglasses{ + pixel_x = -3; + pixel_y = -2 + }, +/obj/machinery/light/small/red/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/armory) +"iEc" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister, +/obj/effect/turf_decal/box, +/obj/machinery/light/warm/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/station/engineering/supermatter/room) "iEi" = ( /obj/structure/chair{ dir = 4 @@ -27334,14 +27181,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/office) -"iEr" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/machinery/light/directional/west, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "iEu" = ( /obj/effect/turf_decal/delivery, /obj/effect/decal/cleanable/cobweb, @@ -27374,27 +27213,24 @@ /obj/structure/sign/warning/docking, /turf/closed/wall, /area/ruin/space/has_grav/abandoned_warehouse) -"iEG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/turf_decal/siding/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/storage_shared) +"iEF" = ( +/obj/structure/flora/bush/flowers_br/style_random, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/grass, +/area/station/service/chapel) "iFa" = ( /obj/machinery/light/small/directional/south, /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"iFb" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "iFd" = ( /obj/structure/sign/warning/electric_shock, /turf/closed/wall/rust, @@ -27436,6 +27272,14 @@ }, /turf/open/floor/iron/dark, /area/station/service/bar/atrium) +"iFD" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating/airless, +/area/space/nearstation) "iFE" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, @@ -27493,14 +27337,14 @@ /turf/open/floor/iron/dark, /area/station/security/brig) "iGg" = ( -/obj/machinery/atmospherics/components/trinary/filter{ - dir = 1 - }, -/obj/effect/turf_decal/bot, /obj/machinery/light/small/directional/west, /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/components/trinary/filter/layer2{ + dir = 1 + }, /turf/open/floor/iron/dark/corner{ dir = 1 }, @@ -27538,22 +27382,6 @@ }, /turf/open/floor/iron, /area/station/science/robotics/mechbay) -"iGQ" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/status_display/evac/directional/west, -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/dark, -/area/station/ai/satellite/atmos) "iGT" = ( /obj/structure/table, /obj/item/storage/box/lights/mixed{ @@ -27651,6 +27479,15 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/security/interrogation) +"iHU" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 2; + id = "chemistry_shutters_2"; + name = "Chemistry Hall Shutters" + }, +/turf/open/floor/plating, +/area/station/medical/paramedic) "iHY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -27677,15 +27514,6 @@ /obj/machinery/wall_healer/directional/south, /turf/open/floor/iron, /area/station/cargo/storage) -"iID" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/airlock_pump/unbolt_only, -/turf/open/floor/iron/dark, -/area/station/maintenance/fore) "iIF" = ( /obj/structure/table/glass, /obj/item/clothing/gloves/latex, @@ -27699,12 +27527,15 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/medical/pharmacy) -"iIS" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/chemistry) +"iIQ" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/obj/machinery/meter, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "iJf" = ( /obj/machinery/mech_bay_recharge_port, /obj/structure/sign/warning/no_smoking{ @@ -27771,18 +27602,6 @@ }, /turf/open/floor/iron/white, /area/station/security/prison/mess) -"iJL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/components/binary/pump/on/layer4{ - dir = 4; - name = "Airlock Pump"; - target_pressure = 300; - hide = 1 - }, -/turf/open/floor/plating, -/area/station/hallway/secondary/entry) "iJN" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, @@ -27822,6 +27641,11 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/security/checkpoint/customs) +"iKt" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/violet/visible, +/turf/open/floor/iron, +/area/station/engineering/atmos) "iKy" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -27852,38 +27676,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) -"iKV" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) -"iKX" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/extinguisher_cabinet/directional/west, -/obj/machinery/shower/directional/east{ - name = "emergency shower" - }, -/obj/effect/turf_decal/box/corners, -/obj/effect/turf_decal/box/corners{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) -"iLd" = ( -/obj/structure/table, -/obj/item/storage/box/bodybags{ - pixel_x = 6 - }, -/obj/item/storage/box/gloves{ - pixel_x = -5 - }, -/turf/open/floor/iron/dark, -/area/station/service/chapel/funeral) "iLj" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -27906,43 +27698,16 @@ /obj/item/storage/fancy/candle_box, /turf/open/floor/iron/dark, /area/station/service/chapel) -"iLF" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) -"iLI" = ( -/obj/machinery/firealarm/directional/east, -/obj/machinery/computer/dna_console{ - dir = 8 - }, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 +"iLK" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "mining" }, -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/dark, -/area/station/science/genetics) -"iLN" = ( -/obj/effect/turf_decal/tile/blue{ +/obj/machinery/bouldertech/refinery{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) -"iLQ" = ( -/obj/machinery/portable_atmospherics/canister, -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 1 - }, -/obj/effect/turf_decal/box, /turf/open/floor/iron/dark, -/area/station/engineering/atmos) +/area/station/cargo/miningoffice) "iLS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -27963,30 +27728,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"iLX" = ( -/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line, -/obj/structure/table, -/obj/item/storage/box/disks{ - pixel_x = 5; - pixel_y = 9 - }, -/obj/item/storage/box/bodybags{ - pixel_x = -8; - pixel_y = 9 - }, -/obj/item/storage/box/gloves{ - pixel_x = 6; - pixel_y = 1 - }, -/obj/item/flesh_shears{ - pixel_x = -10; - pixel_y = -5 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/science/genetics) "iMu" = ( /obj/effect/turf_decal/tile/purple/half/contrasted{ dir = 1 @@ -28046,19 +27787,6 @@ /obj/machinery/vending/boozeomat, /turf/closed/wall, /area/station/service/bar) -"iMS" = ( -/obj/machinery/computer/security{ - dir = 4 - }, -/obj/effect/turf_decal/bot, -/obj/item/radio/intercom/directional/west, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/obj/machinery/light/warm/directional/west, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/exit/departure_lounge) "iMX" = ( /turf/open/floor/engine/air, /area/station/engineering/atmos) @@ -28082,38 +27810,16 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark/corner, /area/station/hallway/primary/starboard) -"iNm" = ( -/obj/effect/landmark/event_spawn, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/blue, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/engineering/atmos) -"iNz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/tile/blue/half/contrasted, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) -"iNH" = ( -/obj/structure/chair/sofa/right/maroon{ - dir = 8 - }, -/obj/structure/railing{ - dir = 4 - }, -/obj/machinery/newscaster/directional/north, +"iNw" = ( +/obj/effect/spawner/random/vending/snackvend, +/obj/effect/turf_decal/bot, +/obj/machinery/airalarm/directional/east, /obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 + dir = 8 }, +/obj/machinery/light/directional/east, /turf/open/floor/iron/dark, -/area/station/service/bar/atrium) +/area/station/hallway/primary/central/fore) "iNK" = ( /obj/machinery/status_display/evac/directional/south, /obj/effect/turf_decal/tile/blue/anticorner/contrasted{ @@ -28218,14 +27924,6 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron/recharge_floor, /area/station/science/robotics/mechbay) -"iPG" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/structure/window/spawner/directional/east, -/obj/structure/table/optable, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "iPY" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -28252,29 +27950,16 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/security/prison/garden) -"iQh" = ( -/obj/machinery/computer/communications{ - dir = 1 - }, -/obj/structure/plaque/static_plaque/golden/captain{ - pixel_y = -32 - }, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/machinery/light/warm/directional/south, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/captain) "iQt" = ( /turf/closed/wall/rust, /area/station/commons/fitness/recreation) -"iQD" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/freezer, -/obj/item/radio/intercom/directional/north, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/cryo) +"iQJ" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/newscaster/directional/north, +/obj/machinery/computer/security/qm, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/qm) "iQK" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/dirt, @@ -28334,6 +28019,17 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/command/heads_quarters/rd) +"iSa" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) "iSb" = ( /obj/machinery/door/poddoor{ id = "QMLoaddoor"; @@ -28346,6 +28042,10 @@ }, /turf/open/floor/plating, /area/station/cargo/storage) +"iSu" = ( +/obj/effect/turf_decal/tile/yellow, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "iSw" = ( /turf/closed/wall/rust, /area/station/security/checkpoint/customs) @@ -28384,10 +28084,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/eva) -"iSQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, -/turf/closed/wall/r_wall, -/area/station/maintenance/disposal/incinerator) "iSS" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -28431,30 +28127,6 @@ }, /turf/open/floor/iron, /area/station/service/theater) -"iTB" = ( -/obj/structure/rack, -/obj/item/clothing/gloves/color/black, -/obj/item/clothing/gloves/color/black, -/obj/item/clothing/gloves/color/black, -/obj/item/clothing/suit/hazardvest, -/obj/item/clothing/suit/hazardvest, -/obj/item/clothing/suit/hazardvest, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) -"iTF" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/small/red/directional/south, -/turf/open/floor/engine, -/area/station/command/vault) "iTL" = ( /obj/structure/chair{ dir = 4 @@ -28483,13 +28155,6 @@ /obj/effect/turf_decal/stripes/corner, /turf/open/floor/engine/vacuum, /area/station/science/ordnance/bomb) -"iUc" = ( -/obj/effect/turf_decal/siding/wood, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/carpet/royalblue, -/area/station/service/chapel/office) "iUm" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -28506,6 +28171,22 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/showroomfloor, /area/station/science/lobby) +"iUC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red, +/obj/machinery/wall_healer/directional/east, +/obj/machinery/light/warm/directional/east, +/turf/open/floor/iron, +/area/station/engineering/lobby) "iUH" = ( /turf/closed/wall, /area/station/science/ordnance) @@ -28530,6 +28211,21 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/ruin/space/has_grav/abandoned_warehouse) +"iVh" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "iVj" = ( /turf/closed/wall/r_wall, /area/station/maintenance/department/security) @@ -28584,12 +28280,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"iVK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/service/chapel/dock) "iVL" = ( /turf/closed/mineral/random/labormineral, /area/station/hallway/secondary/entry) @@ -28607,6 +28297,12 @@ /obj/structure/sign/poster/contraband/random/directional/south, /turf/closed/wall, /area/station/maintenance/port/lesser) +"iVS" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) "iVV" = ( /obj/structure/table, /obj/item/paper_bin, @@ -28616,6 +28312,34 @@ }, /turf/open/floor/iron/dark, /area/station/security/evidence) +"iWf" = ( +/obj/structure/table/wood, +/obj/item/storage/photo_album/library{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/taperecorder{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/item/camera, +/obj/item/pen{ + pixel_x = -7; + pixel_y = -5 + }, +/obj/machinery/light/small/directional/west, +/obj/machinery/camera/directional/west{ + c_tag = "Library Backroom"; + name = "library camera" + }, +/obj/structure/sign/painting/large/library_private{ + dir = 8; + pixel_x = -29 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron/dark, +/area/station/service/library) "iWj" = ( /obj/structure/table, /obj/effect/turf_decal/bot, @@ -28656,23 +28380,27 @@ /obj/effect/turf_decal/siding/red, /turf/open/floor/iron, /area/station/security/checkpoint/customs) +"iWQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/rd) "iWT" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, /turf/open/floor/plating/airless, /area/station/hallway/secondary/exit/departure_lounge) -"iWV" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/disposal/bin/tagger, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/medical/virology) "iXd" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -28683,38 +28411,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"iXh" = ( -/obj/structure/table/wood/fancy, -/obj/item/food/grown/flower/harebell, -/obj/item/food/grown/flower/harebell{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/food/grown/flower/harebell{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/dark, -/area/station/service/chapel) -"iXo" = ( -/obj/machinery/requests_console/directional/west{ - department = "Engineering"; - name = "Engineering Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/information, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/bot, -/obj/machinery/microwave/engineering/cell_included, -/obj/structure/table, -/obj/item/storage/box/donkpockets{ - pixel_y = 5 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) "iXD" = ( /obj/machinery/camera/directional/east{ c_tag = "Xenobiology Cell 3"; @@ -28724,12 +28420,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/engine, /area/station/science/xenobiology) -"iXL" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/floor, -/turf/open/floor/iron, -/area/station/cargo/storage) "iXM" = ( /obj/structure/table, /obj/effect/turf_decal/stripes/line{ @@ -28803,6 +28493,19 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"iYp" = ( +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/table, +/obj/item/storage/box/disks{ + pixel_y = 5 + }, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/gloves/latex, +/obj/machinery/light/cold/directional/west, +/turf/open/floor/iron/dark, +/area/station/science/research) "iYq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -28843,13 +28546,6 @@ /obj/machinery/vending/drugs, /turf/open/floor/iron/dark, /area/station/medical/pharmacy) -"iYD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/service/chapel/storage) "iYI" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -28862,6 +28558,16 @@ }, /turf/open/floor/iron, /area/station/cargo/warehouse) +"iYL" = ( +/obj/machinery/computer/pandemic, +/obj/effect/turf_decal/delivery, +/obj/item/radio/intercom/directional/east, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/cold/directional/east, +/turf/open/floor/iron/dark, +/area/station/medical/virology) "iYS" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/tile/red/anticorner/contrasted{ @@ -28891,6 +28597,15 @@ }, /turf/open/floor/iron/dark, /area/station/medical/virology) +"iZl" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating/airless, +/area/space/nearstation) "iZm" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical/glass{ @@ -28902,30 +28617,18 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/general, /turf/open/floor/iron/dark, /area/station/medical/storage) -"iZB" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "Air to Ports" +"iZq" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 +/obj/effect/turf_decal/tile/blue, +/obj/machinery/atmospherics/components/unary/thermomachine/heater/on, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, /turf/open/floor/iron, -/area/station/engineering/atmos) -"iZN" = ( -/obj/structure/sign/painting/library{ - pixel_x = 32 - }, -/obj/machinery/photocopier, -/obj/item/radio/intercom/directional/south, -/obj/effect/turf_decal/box/white, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/dark, -/area/station/service/library) +/area/station/engineering/atmos/pumproom) "iZV" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -28936,17 +28639,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"jak" = ( -/obj/structure/lattice, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/transit_tube/diagonal/topleft, -/turf/open/space/basic, -/area/space/nearstation) "jas" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -28970,6 +28662,18 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/disposal) +"jaz" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/newscaster/directional/west, +/obj/item/camera{ + pixel_y = 4 + }, +/obj/item/hand_tele, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/captain) "jaM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes/line, @@ -28977,6 +28681,16 @@ /obj/structure/cable, /turf/open/floor/iron/showroomfloor, /area/station/security/office) +"jaO" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "jaR" = ( /obj/effect/turf_decal/bot, /obj/effect/spawner/random/structure/crate, @@ -29009,17 +28723,6 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"jbg" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/landmark/start/atmospheric_technician, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) "jbt" = ( /turf/closed/wall/mineral/plastitanium, /area/station/maintenance/starboard) @@ -29030,6 +28733,17 @@ }, /turf/open/misc/asteroid, /area/space/nearstation) +"jbR" = ( +/obj/machinery/door/airlock/engineering{ + name = "Emergency Storage" + }, +/obj/effect/turf_decal/stripes/corner, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/unres/delayed, +/obj/effect/mapping_helpers/airlock/access/any/service/janitor, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) "jbV" = ( /obj/structure/lattice/catwalk, /obj/machinery/camera/motion/directional/north{ @@ -29104,23 +28818,56 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard) +"jcD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/showroomfloor, +/area/station/science) "jcK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/command/bridge) -"jdd" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/showroomfloor, -/area/station/security/warden) -"jdi" = ( -/obj/structure/closet/secure_closet/atmospherics, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral/half/contrasted, +"jcQ" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, /turf/open/floor/iron/dark, -/area/station/maintenance/disposal/incinerator) +/area/station/engineering/lobby) +"jcR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch/directional/south, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple/half/contrasted, +/obj/effect/turf_decal/tile/purple, +/turf/open/floor/iron/showroomfloor, +/area/station/science/auxlab) +"jdc" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/duct, +/obj/structure/sign/warning/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/aft) "jdl" = ( /obj/structure/flora/bush/flowers_yw/style_random, /turf/open/floor/grass, @@ -29145,36 +28892,6 @@ "jds" = ( /turf/closed/wall, /area/station/service/kitchen) -"jdu" = ( -/obj/effect/landmark/start/scientist, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple/opposingcorners, -/obj/machinery/light/floor, -/turf/open/floor/iron/showroomfloor, -/area/station/science/xenobiology) -"jdB" = ( -/obj/structure/table, -/obj/item/tank/jetpack/carbondioxide{ - pixel_x = -4; - pixel_y = 6 - }, -/obj/item/tank/jetpack/carbondioxide{ - pixel_y = 2 - }, -/obj/item/wrench, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/obj/machinery/light/cold/dim/directional/south, -/turf/open/floor/iron/dark, -/area/station/command/eva) "jdE" = ( /obj/machinery/camera/directional/north{ c_tag = "Fore Hallway Diner"; @@ -29200,6 +28917,18 @@ /obj/structure/sign/warning/biohazard, /turf/closed/wall/r_wall, /area/station/medical/virology) +"jdS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron, +/area/station/security/processing) "jdW" = ( /obj/structure/table/reinforced, /obj/machinery/door/poddoor/shutters{ @@ -29217,6 +28946,13 @@ /obj/structure/cable, /turf/open/floor/iron/showroomfloor, /area/station/science/xenobiology) +"jeg" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/suit_storage_unit/atmos, +/obj/machinery/status_display/ai/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) "jes" = ( /obj/structure/girder, /obj/effect/turf_decal/stripes/corner, @@ -29287,6 +29023,62 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"jfe" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/atmospherics/pipe/smart/simple/brown/hidden{ + dir = 9 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/atmos/storage) +"jfp" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/structure/table, +/obj/item/stock_parts/micro_laser{ + pixel_x = -7; + pixel_y = -3 + }, +/obj/item/stock_parts/micro_laser{ + pixel_x = -1; + pixel_y = 3 + }, +/obj/item/stock_parts/micro_laser{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/stock_parts/micro_laser{ + pixel_x = -3; + pixel_y = -2 + }, +/obj/item/stock_parts/scanning_module{ + pixel_x = 12; + pixel_y = -1 + }, +/obj/item/stock_parts/scanning_module{ + pixel_x = 10; + pixel_y = 1 + }, +/obj/item/stock_parts/scanning_module{ + pixel_x = 13; + pixel_y = 4 + }, +/obj/item/stock_parts/scanning_module{ + pixel_x = 8; + pixel_y = -1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/cargo/drone_bay) "jfy" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -29324,10 +29116,30 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/plating, /area/station/hallway/primary/central/fore) +"jgc" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/processing) "jgf" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall, /area/station/maintenance/starboard/aft) +"jgh" = ( +/obj/structure/bed, +/obj/machinery/iv_drip, +/obj/effect/turf_decal/bot_white/right, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/item/bedsheet/medical, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/medical/medbay/central) "jgn" = ( /obj/effect/decal/cleanable/blood/old, /obj/structure/table/optable{ @@ -29414,6 +29226,19 @@ "jgN" = ( /turf/open/floor/iron/dark, /area/station/service/chapel/funeral) +"jgQ" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/atmos) "jhc" = ( /obj/structure/table/bronze, /obj/item/clothing/head/costume/bronze{ @@ -29473,16 +29298,6 @@ /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron, /area/station/cargo/office) -"jhE" = ( -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/machinery/atmospherics/components/tank/air/layer4{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/entry) "jhH" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -29513,31 +29328,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/prison) -"jhY" = ( -/obj/structure/spirit_board, -/turf/open/floor/cult, -/area/station/service/chapel/office) -"jia" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/heater{ - dir = 1 - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) -"jig" = ( -/obj/machinery/requests_console/directional/east{ - department = "Garden"; - name = "Garden Requests Console" - }, -/obj/effect/turf_decal/siding/green{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden) "jij" = ( /obj/machinery/computer/records/security{ dir = 4 @@ -29636,13 +29426,6 @@ "jjs" = ( /turf/closed/wall/r_wall/rust, /area/station/maintenance/starboard/aft) -"jjF" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 4 - }, -/obj/structure/sink/directional/north, -/turf/open/floor/iron, -/area/station/security/prison/garden) "jjP" = ( /obj/structure/table, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -29689,12 +29472,21 @@ /obj/effect/turf_decal/stripes/end, /turf/open/floor/iron/checker, /area/station/security/mechbay) -"jkB" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 9 +"jkI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/closed/wall, -/area/station/engineering/atmos) +/obj/structure/sign/poster/contraband/random/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/aft) +"jkS" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/wood, +/area/station/service/bar/atrium) "jkW" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -29716,6 +29508,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/service/chapel/monastery) +"jmh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ + dir = 1 + }, +/turf/closed/wall, +/area/station/engineering/atmos) "jmj" = ( /obj/machinery/bluespace_beacon, /obj/effect/turf_decal/stripes/line{ @@ -29727,6 +29525,18 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/command/teleporter) +"jmt" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/requests_console/directional/east{ + department = "Pharmacy"; + name = "Pharmacy Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/ore_update, +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, +/obj/machinery/chem_dispenser, +/turf/open/floor/iron/dark, +/area/station/medical/pharmacy) "jmw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -29735,6 +29545,13 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/security/brig) +"jmy" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "jmK" = ( /obj/structure/railing/corner{ dir = 4 @@ -29777,20 +29594,13 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"jnl" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, +"jnm" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/holopad/secure, /obj/structure/cable, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron/dark/corner{ - dir = 1 - }, -/area/station/hallway/primary/fore) +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/engine, +/area/station/ai/upload/chamber) "jnp" = ( /turf/closed/wall/rust, /area/station/cargo/drone_bay) @@ -29804,21 +29614,21 @@ "joh" = ( /turf/closed/wall/rust, /area/station/command/heads_quarters/hos) -"jon" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 4 - }, -/obj/item/reagent_containers/cup/watering_can, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/security/prison/garden) "jop" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/medical/storage) +"jos" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/warm/directional/west, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "joC" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -29885,6 +29695,24 @@ dir = 4 }, /area/station/service/chapel) +"jpe" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 4 + }, +/turf/closed/wall, +/area/station/engineering/atmos) +"jpo" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 10 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/atmos) "jpx" = ( /obj/structure/railing{ dir = 4 @@ -29896,6 +29724,18 @@ /obj/item/pai_card, /turf/open/floor/iron/dark, /area/station/science/lobby) +"jpD" = ( +/obj/machinery/light/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) "jpF" = ( /obj/effect/turf_decal/siding/blue{ dir = 9 @@ -29923,6 +29763,18 @@ "jqb" = ( /turf/closed/wall, /area/station/security/detectives_office) +"jqC" = ( +/obj/machinery/portable_atmospherics/pump, +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/hallway) "jqI" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/burnt_floor, @@ -29970,9 +29822,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear, /obj/structure/cable, -/obj/machinery/duct, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/station/maintenance/starboard/aft) "jre" = ( @@ -30022,11 +29875,6 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/medical/medbay/central) -"jrR" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, -/turf/open/floor/plating, -/area/station/engineering/atmos/pumproom) "jrT" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -30037,6 +29885,12 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/prison) +"jsa" = ( +/obj/effect/turf_decal/box/white{ + color = "#EFB341" + }, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "jsc" = ( /obj/machinery/light_switch/directional/east{ pixel_x = 23; @@ -30060,6 +29914,12 @@ }, /turf/open/floor/engine, /area/station/ai/satellite/foyer) +"jsn" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) "jso" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -30072,6 +29932,21 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"jsp" = ( +/obj/item/tank/internals/emergency_oxygen/engi{ + pixel_x = -5 + }, +/obj/item/tank/internals/emergency_oxygen/engi{ + pixel_x = 5 + }, +/obj/item/geiger_counter, +/obj/item/geiger_counter, +/obj/machinery/light/warm/directional/west, +/obj/structure/rack, +/obj/effect/turf_decal/bot, +/obj/structure/sign/warning/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) "jsI" = ( /obj/structure/hoop{ dir = 8 @@ -30085,14 +29960,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"jsR" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/starboard) "jsV" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters{ @@ -30153,6 +30020,22 @@ /obj/structure/flora/bush/sparsegrass/style_random, /turf/open/misc/asteroid, /area/station/hallway/secondary/exit/departure_lounge) +"jur" = ( +/obj/structure/table, +/obj/machinery/camera/directional/west{ + c_tag = "ai_upload"; + name = "upload camera"; + network = list("aiupload") + }, +/obj/item/radio/intercom/directional/west, +/obj/effect/spawner/round_default_module, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light/cold/dim/directional/west, +/turf/open/floor/iron/dark, +/area/station/ai/upload/chamber) "jus" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -30161,6 +30044,16 @@ /obj/machinery/status_display/evac/directional/north, /turf/open/floor/iron/dark, /area/station/hallway/primary/central) +"juy" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/meter, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "juF" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/space_heater, @@ -30177,35 +30070,41 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/chemistry) -"juR" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 +"juZ" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 }, -/obj/machinery/airalarm/directional/south, -/obj/machinery/camera/directional/south{ - c_tag = "Laser Room Starboard"; - name = "laser room camera"; - network = list("ss13","engine") +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/engineering/supermatter/room) +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/showroomfloor, +/area/station/science/auxlab) "jvh" = ( -/obj/effect/turf_decal/delivery, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/south, /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 1 }, -/obj/structure/reagent_dispensers/watertank, +/obj/structure/tank_dispenser, +/obj/effect/turf_decal/bot, /turf/open/floor/iron/dark, /area/station/engineering/storage_shared) -"jvQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/burnt_floor, +"jvE" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/components/unary/airlock_pump/unbolt_only{ + dir = 8 + }, /turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) +/area/station/maintenance/solars/starboard/fore) "jvR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes/line{ @@ -30232,12 +30131,39 @@ /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/iron/dark, /area/station/command/bridge) +"jwk" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/effect/landmark/start/assistant, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/service/chapel/monastery) "jwn" = ( /obj/effect/turf_decal/tile/red{ dir = 1 }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"jwq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"jws" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) "jwu" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -30257,9 +30183,25 @@ /obj/structure/closet/emcloset, /turf/open/floor/iron/dark, /area/station/cargo/miningdock) +"jwC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/aft) "jwV" = ( /turf/closed/wall/r_wall/rust, /area/station/engineering/atmos) +"jxt" = ( +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/box, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "jxy" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -30286,6 +30228,15 @@ }, /turf/closed/wall/rust, /area/space/nearstation) +"jyu" = ( +/obj/machinery/vending/wardrobe/atmos_wardrobe, +/obj/effect/turf_decal/bot, +/obj/machinery/newscaster/directional/south, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) "jyF" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -30336,13 +30287,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/engineering/lobby) -"jzm" = ( -/obj/effect/turf_decal/delivery, -/obj/item/radio/intercom/directional/north, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/machinery/suit_storage_unit/atmos, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "jzo" = ( /obj/structure/chair{ dir = 1 @@ -30364,44 +30308,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"jzu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/status_display/evac/directional/north, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) -"jzw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage/gas) -"jzx" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/dark/corner{ - dir = 4 - }, -/area/station/hallway/primary/fore) "jzB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -30413,6 +30319,8 @@ /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 8 }, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, /turf/open/floor/iron/showroomfloor, /area/station/command/heads_quarters/cmo) "jzF" = ( @@ -30420,10 +30328,6 @@ /obj/structure/sign/poster/contraband/random/directional/south, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"jzH" = ( -/obj/structure/sign/warning/secure_area, -/turf/closed/wall/r_wall, -/area/station/engineering/gravity_generator) "jAc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -30447,6 +30351,18 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/drone_bay) +"jAq" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) "jAu" = ( /obj/structure/table/wood, /obj/effect/turf_decal/siding/wood{ @@ -30468,9 +30384,11 @@ /obj/structure/lattice/catwalk, /turf/open/space/basic, /area/space/nearstation) -"jBf" = ( +"jAV" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 9 + }, /obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/atmos) "jBi" = ( @@ -30560,37 +30478,20 @@ "jCm" = ( /turf/closed/wall, /area/station/maintenance/department/crew_quarters/bar) -"jCF" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/medbay/central) -"jCP" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner{ +"jCJ" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 1 }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 +/obj/machinery/firealarm/directional/south, +/obj/machinery/light/warm/directional/south, +/obj/machinery/camera/directional/south{ + c_tag = "Atmospherics Mix Tanks"; + name = "atmospherics camera"; + network = list("ss13","engine") }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) "jCZ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/insectguts, @@ -30603,17 +30504,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/commons/locker) -"jDv" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/conveyor{ - dir = 4; - id = "packagereturn"; - name = "crate return belt" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/dark, -/area/station/cargo/sorting) "jDy" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -30628,6 +30518,14 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron/showroomfloor, /area/station/service/bar/atrium) +"jDB" = ( +/obj/machinery/door/poddoor/preopen{ + id = "atmos"; + name = "Atmospherics Blast Door" + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/engineering/atmos/office) "jDF" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -30635,6 +30533,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) +"jDJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/warning/electric_shock/directional/south, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) "jEd" = ( /obj/structure/table, /obj/machinery/firealarm/directional/west, @@ -30694,34 +30600,10 @@ }, /turf/open/floor/engine/telecomms, /area/station/tcommsat/server) -"jEG" = ( -/obj/structure/table/wood/fancy/black, -/obj/item/food/grown/flower/poppy/geranium{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/food/grown/flower/poppy/geranium{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/food/grown/flower/poppy/geranium, -/obj/machinery/firealarm/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "jEK" = ( /obj/structure/sign/warning/docking, /turf/closed/wall, /area/station/hallway/secondary/entry) -"jEO" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "atmos"; - name = "Atmospherics Blast Door" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/engineering/atmos/storage/gas) "jEQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -30736,17 +30618,6 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/port/greater) -"jEW" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "jFq" = ( /obj/structure/barricade/wooden/crude, /obj/machinery/door/airlock/bronze, @@ -30797,12 +30668,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"jFZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "jGt" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -30814,6 +30679,22 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"jGy" = ( +/obj/effect/turf_decal/loading_area{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) +"jGQ" = ( +/obj/structure/cable, +/turf/open/misc/asteroid/airless, +/area/space/nearstation) "jGU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes/line{ @@ -30832,6 +30713,18 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"jHb" = ( +/obj/item/kirbyplants/organic/plant16, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "jHm" = ( /obj/vehicle/ridden/janicart, /obj/item/key/janitor, @@ -30856,24 +30749,25 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/medical/paramedic) +"jHw" = ( +/obj/machinery/airalarm/directional/north, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + location = "QM #1" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/effect/turf_decal/delivery, +/obj/effect/decal/cleanable/blood/oil, +/mob/living/basic/bot/mulebot, +/turf/open/floor/iron/dark, +/area/station/cargo/warehouse) "jHy" = ( /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, /obj/machinery/space_heater, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"jHP" = ( -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/warm/directional/west, -/turf/open/floor/iron/showroomfloor, -/area/station/science/auxlab) "jHR" = ( /obj/effect/turf_decal/bot, /obj/effect/turf_decal/stripes/line{ @@ -30904,41 +30798,35 @@ }, /turf/open/floor/iron/dark, /area/station/service/hydroponics) -"jHW" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/camera/directional/north{ - c_tag = "Morgue Entrance"; - name = "medical camera"; - network = list("ss13","medical") - }, -/obj/machinery/firealarm/directional/north, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue/half/contrasted{ +"jIj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 4 }, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"jIi" = ( -/obj/structure/railing/corner{ - dir = 8 +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark/corner, +/area/station/hallway/primary/port) +"jIr" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Atmospherics Tank - O2"; + name = "atmospherics camera"; + network = list("ss13","engine") }, -/obj/item/kirbyplants/random, -/turf/open/floor/iron/dark, -/area/station/service/chapel) +/turf/open/floor/engine/o2, +/area/station/engineering/atmos) "jIt" = ( /obj/machinery/door/poddoor/shutters/radiation/preopen{ id = "engsm"; - name = "Radiation Chamber Shutters" + name = "Radiation Chamber Shutters"; + dir = 8 }, -/obj/effect/turf_decal/caution/stand_clear, /obj/structure/cable, -/turf/open/floor/iron/dark, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, /area/station/engineering/supermatter/engine) "jID" = ( /obj/effect/decal/cleanable/dirt, @@ -30949,6 +30837,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"jIO" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/effect/turf_decal/bot, +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted, +/obj/machinery/light/dim/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/medbay/central) "jIR" = ( /obj/structure/closet/crate/solarpanel_small, /obj/effect/turf_decal/delivery, @@ -31100,6 +31003,11 @@ dir = 1 }, /area/station/hallway/primary/fore) +"jJK" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/space_heater, +/turf/open/floor/iron/dark/textured_large, +/area/station/engineering/atmos) "jJN" = ( /obj/effect/turf_decal/stripes/end, /obj/effect/decal/cleanable/dirt, @@ -31114,6 +31022,15 @@ /obj/effect/turf_decal/tile/blue/anticorner/contrasted, /turf/open/floor/iron/showroomfloor, /area/station/medical/medbay/lobby) +"jKc" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Arrivals Dock" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) "jKj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -31184,17 +31101,6 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/medical/morgue) -"jKU" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "jKZ" = ( /obj/machinery/vending/sustenance, /turf/open/floor/iron/white, @@ -31213,16 +31119,6 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron/showroomfloor, /area/station/service/bar/atrium) -"jLs" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/machinery/shower/directional/west, -/obj/effect/turf_decal/box, -/obj/structure/fluff/shower_drain, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/main) "jLy" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -31248,14 +31144,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"jLM" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/unres/delayed{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/turf/open/floor/iron/dark, -/area/station/maintenance/aft) "jLT" = ( /obj/machinery/computer/mech_bay_power_console{ dir = 4 @@ -31319,17 +31207,6 @@ /obj/structure/sign/warning/vacuum/external, /turf/closed/wall/rust, /area/station/maintenance/starboard) -"jNq" = ( -/obj/machinery/door/airlock/engineering{ - name = "Emergency Storage" - }, -/obj/effect/mapping_helpers/airlock/unres/delayed{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/entry) "jNt" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=Arrivals"; @@ -31339,6 +31216,12 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"jNx" = ( +/obj/machinery/shower/directional/west, +/obj/effect/turf_decal/box, +/obj/structure/fluff/shower_drain, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/cryo) "jNM" = ( /obj/structure/table/reinforced, /obj/item/folder/blue{ @@ -31441,17 +31324,54 @@ }, /turf/open/floor/wood, /area/station/commons/locker) -"jPA" = ( -/obj/machinery/conveyor/inverted{ - dir = 5; - id = "mining" +"jPu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/dark, -/area/station/cargo/miningoffice) +/obj/machinery/shower/directional/east{ + name = "emergency shower" + }, +/obj/effect/turf_decal/box/corners, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/obj/structure/fluff/shower_drain, +/turf/open/floor/iron/textured_large, +/area/station/engineering/atmos) "jPB" = ( /turf/closed/wall/rust, /area/station/security/courtroom) +"jPH" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/airalarm/directional/south, +/obj/effect/mapping_helpers/airalarm/engine_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "engine" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, +/obj/machinery/atmospherics/pipe/smart/manifold/green/visible{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"jQd" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "jQh" = ( /obj/structure/lattice, /obj/structure/disposalpipe/segment{ @@ -31486,6 +31406,16 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/aft) +"jQU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/starboard) "jQV" = ( /obj/structure/flora/bush/lavendergrass/style_random, /obj/structure/flora/bush/sparsegrass/style_random, @@ -31510,6 +31440,16 @@ /obj/structure/chair/office, /turf/open/floor/iron/dark, /area/station/command/bridge) +"jRh" = ( +/obj/item/radio/intercom/directional/south, +/obj/structure/rack, +/obj/effect/turf_decal/bot, +/obj/item/storage/belt/utility, +/obj/item/t_scanner, +/obj/item/t_scanner, +/obj/item/t_scanner, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "jRm" = ( /obj/structure/table/wood, /obj/machinery/fax{ @@ -31556,11 +31496,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/showroomfloor, /area/station/science/auxlab) -"jRG" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/obj/item/mmi, -/turf/open/floor/iron/dark, -/area/station/service/chapel/storage) +"jRA" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposalpipe/junction/flip{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"jRL" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/warning/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/aft) "jRR" = ( /obj/structure/cable, /obj/machinery/door/airlock/maintenance{ @@ -31587,6 +31538,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/broken_floor, +/obj/structure/sign/warning/vacuum/directional/west, /turf/open/floor/plating, /area/station/maintenance/disposal) "jSw" = ( @@ -31602,10 +31554,6 @@ /obj/effect/turf_decal/tile/purple/half/contrasted, /turf/open/floor/iron/showroomfloor, /area/station/science/lobby) -"jSC" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall/rust, -/area/station/maintenance/aft) "jSE" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -31690,6 +31638,32 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"jTI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/ai/upload/chamber) +"jTK" = ( +/obj/structure/table/glass, +/obj/item/crowbar{ + pixel_x = -8; + pixel_y = 11 + }, +/obj/item/emergency_bed{ + pixel_x = 7; + pixel_y = 10 + }, +/obj/item/emergency_bed, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/medical/office) "jUa" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, @@ -31771,11 +31745,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/department/crew_quarters/bar) -"jVW" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/aft) "jVZ" = ( /obj/structure/disposalpipe/segment, /obj/effect/landmark/event_spawn, @@ -31793,6 +31762,13 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/plating, /area/station/maintenance/starboard) +"jWu" = ( +/obj/machinery/gulag_teleporter, +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/stripes/corner, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/processing) "jWw" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -31827,12 +31803,6 @@ /obj/machinery/suit_storage_unit/engine, /turf/open/floor/iron/dark, /area/station/engineering/storage_shared) -"jWN" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/obj/machinery/light/floor, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "jXd" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -31861,11 +31831,17 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/hallway/primary/aft) -"jXU" = ( -/obj/effect/landmark/start/paramedic, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/medbay/central) +"jXS" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) "jXX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -31875,33 +31851,13 @@ }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"jYc" = ( -/obj/machinery/meter, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 10 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/engineering/atmos) -"jYd" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/security/glass{ - name = "Engineering Security Post" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/general, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/engineering) +"jYa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/frame/machine, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating, +/area/station/maintenance/aft) "jYe" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/turf_decal/stripes/corner, @@ -31917,13 +31873,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/prison/garden) -"jYo" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "jYp" = ( /obj/structure/table, /obj/item/storage/toolbox/mechanical{ @@ -31938,6 +31887,16 @@ /obj/effect/turf_decal/tile/purple/half/contrasted, /turf/open/floor/iron/showroomfloor, /area/station/science/ordnance/storage) +"jYq" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 10 + }, +/obj/machinery/meter, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "jYx" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -31961,17 +31920,6 @@ }, /turf/open/floor/iron, /area/station/cargo/sorting) -"jYT" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible, -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/pumproom) "jYX" = ( /obj/machinery/door/airlock/external/glass{ name = "Monastery External Airlock" @@ -31983,6 +31931,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /turf/open/floor/plating, /area/station/service/chapel) +"jZa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/mapping_helpers/apc/cell_10k, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) "jZJ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -31992,6 +31948,21 @@ /obj/machinery/nuclearbomb/beer, /turf/open/floor/iron/dark, /area/station/maintenance/port/greater) +"jZK" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden, +/turf/open/floor/iron, +/area/station/security/checkpoint/engineering) "kac" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -32010,6 +31981,13 @@ /obj/effect/landmark/navigate_destination/chemfactory, /turf/open/floor/iron/dark, /area/station/medical/chemistry) +"kau" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless, +/area/space/nearstation) "kax" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -32056,12 +32034,6 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/iron/dark, /area/station/cargo/miningoffice) -"kba" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron, -/area/station/security/processing) "kbc" = ( /obj/structure/sign/poster/random/directional/north, /obj/effect/spawner/random/structure/steam_vent, @@ -32088,6 +32060,15 @@ /obj/structure/flora/rock/pile/style_random, /turf/open/floor/grass, /area/station/service/chapel/monastery) +"kbs" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "kbv" = ( /obj/effect/turf_decal/delivery, /obj/structure/reagent_dispensers/fueltank, @@ -32097,18 +32078,6 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/primary/aft) -"kbw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 4; - name = "O2 to Airmix" - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "kbx" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -32126,19 +32095,6 @@ }, /turf/open/floor/iron, /area/station/security/prison) -"kbR" = ( -/obj/structure/table/wood/fancy/black, -/obj/item/food/grown/flower/poppy/lily{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/food/grown/flower/poppy/lily{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/food/grown/flower/poppy/lily, -/turf/open/floor/iron/dark, -/area/station/service/chapel/monastery) "kbV" = ( /obj/structure/table, /obj/item/storage/box/evidence, @@ -32176,6 +32132,17 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) +"kcv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/processing) "kcx" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -32234,6 +32201,21 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"kda" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/brown/visible{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "kdr" = ( /obj/effect/turf_decal/box/corners{ dir = 1 @@ -32255,18 +32237,6 @@ "kem" = ( /turf/closed/wall/rust, /area/station/security/processing) -"kep" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - name = "Engineering Security Post" - }, -/obj/effect/turf_decal/siding/red/corner{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/security/general, -/obj/machinery/duct, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/engineering) "kex" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ @@ -32292,6 +32262,12 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) +"keQ" = ( +/obj/effect/decal/cleanable/ash, +/turf/open/floor/iron/smooth_half{ + dir = 4 + }, +/area/station/engineering/atmos) "kfh" = ( /obj/effect/turf_decal/box/corners{ dir = 1 @@ -32302,36 +32278,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/gateway) -"kfx" = ( -/obj/structure/table, -/obj/machinery/light_switch/directional/north{ - pixel_x = -8 - }, -/obj/item/clothing/gloves/color/orange, -/obj/item/reagent_containers/spray/cleaner{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/flashlight{ - pixel_y = 4 - }, -/obj/item/flashlight{ - pixel_y = 4 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/machinery/button/door/directional/north{ - id = "custodialwagon"; - name = "Custodial Bay Toggle"; - pixel_x = 8; - req_access = list("janitor") - }, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/service/janitor) "kfT" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -32351,14 +32297,27 @@ /obj/effect/mapping_helpers/airlock/access/any/security/maintenance, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) +"kgo" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/atmos/office) +"kgt" = ( +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "kgB" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/high, /obj/item/radio/intercom/directional/south, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, +/obj/structure/rack, +/obj/item/mod/module/plasma_stabilizer, +/obj/item/mod/module/thermal_regulator, +/obj/effect/turf_decal/bot, +/obj/item/screwdriver, /turf/open/floor/iron/dark, /area/station/engineering/storage_shared) "kgD" = ( @@ -32381,24 +32340,18 @@ /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron/dark, /area/station/security/processing) -"kgU" = ( -/obj/machinery/computer/cargo, -/obj/effect/turf_decal/bot, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/east, -/obj/machinery/requests_console/directional/north{ - department = "Quartermaster's Desk"; - name = "Quartermaster's Requests Console" +"kgS" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 8; + name = "Waste to Filter" }, -/obj/effect/mapping_helpers/requests_console/announcement, -/obj/effect/mapping_helpers/requests_console/supplies, -/obj/structure/extinguisher_cabinet/directional/north{ - pixel_x = 32 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 }, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/qm) +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) "khe" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ @@ -32418,6 +32371,39 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/command/heads_quarters/cmo) +"khu" = ( +/turf/open/floor/engine/plasma, +/area/station/engineering/atmos) +"khx" = ( +/obj/structure/table, +/obj/machinery/light_switch/directional/north{ + pixel_x = -8 + }, +/obj/item/clothing/gloves/color/orange, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/flashlight{ + pixel_y = 4 + }, +/obj/item/flashlight{ + pixel_y = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/button/door/directional/north{ + id = "custodialwagon"; + name = "Custodial Bay Toggle"; + pixel_x = 8; + req_access = list("janitor") + }, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/janitor) "khy" = ( /obj/structure/sign/warning/biohazard, /turf/closed/wall, @@ -32454,14 +32440,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron/showroomfloor, /area/station/security/lockers) -"kix" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/maintenance/disposal/incinerator) "kiG" = ( /obj/structure/chair{ dir = 1 @@ -32490,17 +32468,16 @@ }, /turf/open/floor/iron, /area/station/security/office) -"kja" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/atmospherics/components/trinary/filter/atmos/co2{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/tile/neutral/opposingcorners{ +"kjc" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) +/obj/effect/landmark/start/station_engineer, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/main) "kji" = ( /obj/structure/table/glass, /obj/item/assembly/timer{ @@ -32560,10 +32537,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/bar/atrium) -"kjG" = ( -/obj/effect/spawner/structure/window/reinforced/tinted, -/turf/open/floor/plating, -/area/station/commons/vacant_room/commissary) "kjK" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -32655,23 +32628,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/science/robotics/mechbay) -"klw" = ( -/obj/machinery/shower/directional/west, -/obj/effect/turf_decal/box, -/obj/structure/fluff/shower_drain, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/cryo) -"klA" = ( -/obj/effect/landmark/event_spawn, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/machinery/light/floor, -/turf/open/floor/iron, -/area/station/cargo/sorting) "klK" = ( /obj/structure/railing{ dir = 4 @@ -32696,7 +32652,37 @@ }, /turf/open/floor/iron/dark, /area/station/service/hydroponics/garden) +"klM" = ( +/obj/structure/railing/corner, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"klT" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 10 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/atmos) "kmo" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron, /area/station/engineering/main) "kmt" = ( @@ -32710,10 +32696,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/medical/morgue) -"kmK" = ( -/obj/structure/flora/rock, -/turf/open/misc/asteroid/airless, -/area/space/nearstation) +"kmJ" = ( +/obj/effect/landmark/event_spawn, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/duct, +/obj/machinery/light/floor, +/turf/open/floor/iron/showroomfloor, +/area/station/science/xenobiology) "kmN" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -32731,11 +32723,6 @@ }, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) -"knh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, -/turf/closed/wall/r_wall, -/area/station/engineering/atmos/storage/gas) "knk" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment, @@ -32756,14 +32743,6 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/science/lab) -"knv" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/space_heater, -/obj/machinery/atmospherics/components/binary/pump/on{ - name = "External Waste Ports to Filter" - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "knR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -32818,6 +32797,11 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/hallway/primary/aft) +"kpm" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/bot/right, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "kpH" = ( /obj/effect/turf_decal/tile/red/half/contrasted, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -32825,6 +32809,18 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/ordnance/storage) +"kpI" = ( +/obj/machinery/computer/operating{ + dir = 1; + name = "Robotics Operating Computer" + }, +/obj/effect/turf_decal/bot, +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/science/robotics/lab) "kpS" = ( /obj/structure/railing{ dir = 1 @@ -32883,17 +32879,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/bar) -"kqL" = ( -/obj/machinery/status_display/evac/directional/west, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/medbay/central) "kra" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -32928,14 +32913,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/showroomfloor, /area/station/science) -"krr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "krv" = ( /obj/machinery/porta_turret/ai{ dir = 4 @@ -32969,6 +32946,15 @@ }, /turf/open/floor/engine/telecomms, /area/station/tcommsat/server) +"krT" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4; + pixel_x = 24; + pixel_y = 8 + }, +/obj/machinery/light/small/broken/directional/north, +/turf/open/floor/plating/rust, +/area/station/security/prison/shower) "krY" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -32997,7 +32983,7 @@ name = "External Gas to Loop" }, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, +/turf/open/floor/iron/dark/textured_large, /area/station/engineering/supermatter/room) "ksr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -33012,19 +32998,26 @@ }, /turf/open/floor/iron/dark/corner, /area/station/hallway/primary/port) -"ksu" = ( -/obj/effect/turf_decal/stripes/line{ +"ksz" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron, +/area/station/engineering/atmos/office) +"ksE" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/warning/vacuum/external/directional/east, -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/duct, -/obj/machinery/atmospherics/components/unary/airlock_pump/unbolt_only, -/turf/open/floor/plating, -/area/station/science) +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "ksJ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, @@ -33087,23 +33080,16 @@ }, /turf/open/floor/engine, /area/station/science/auxlab) -"kuf" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron, -/area/station/engineering/atmos) "kuk" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, +/obj/structure/reagent_dispensers/plumbed, +/obj/effect/turf_decal/delivery/white{ + color = "#52B4E9" + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, /area/station/maintenance/aft) "kun" = ( /obj/effect/turf_decal/bot, @@ -33123,12 +33109,6 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/vault, /turf/open/floor/iron/dark, /area/station/command/vault) -"kuE" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/machinery/light/floor, -/turf/open/floor/iron/dark, -/area/station/commons/fitness/recreation) "kuK" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/rack, @@ -33142,16 +33122,19 @@ /obj/structure/sign/warning/electric_shock, /turf/closed/wall/r_wall, /area/station/maintenance/port/aft) +"kuV" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/obj/machinery/meter, +/turf/closed/wall/r_wall/rust, +/area/station/engineering/atmos) +"kvd" = ( +/turf/closed/wall/r_wall/rust, +/area/station/engineering/atmos/pumproom) "kvl" = ( /turf/closed/wall/r_wall/rust, /area/station/security/evidence) -"kvE" = ( -/obj/machinery/airalarm/directional/north, -/obj/machinery/computer/cargo, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron/dark, -/area/station/cargo/sorting) "kvL" = ( /obj/effect/turf_decal/bot, /obj/machinery/computer/piratepad_control/civilian{ @@ -33161,11 +33144,6 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/dark/textured, /area/station/cargo/sorting) -"kvM" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/turf/closed/wall/r_wall, -/area/station/engineering/supermatter/engine) "kvU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/grimy, @@ -33197,15 +33175,6 @@ /obj/structure/closet/firecloset/full, /turf/open/floor/iron, /area/station/service/chapel/dock) -"kwt" = ( -/obj/effect/turf_decal/bot, -/obj/structure/rack, -/obj/item/storage/toolbox/emergency, -/obj/item/stack/rods/ten, -/obj/machinery/camera/autoname/directional/south, -/obj/machinery/light/dim/directional/south, -/turf/open/floor/iron/checker, -/area/station/security/mechbay) "kwx" = ( /obj/structure/sign/xenobio_guide, /turf/closed/wall/rust, @@ -33248,6 +33217,11 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics) +"kxg" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) "kxr" = ( /obj/structure/flora/bush/jungle/c/style_2, /obj/structure/flora/bush/ferny, @@ -33316,13 +33290,16 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron/dark, /area/station/hallway/primary/fore) -"kyR" = ( +"kyF" = ( /obj/effect/turf_decal/stripes/line{ - dir = 4 + dir = 8 }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos/pumproom) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/aft) "kyU" = ( /obj/machinery/light/small/directional/north, /obj/machinery/shieldgen, @@ -33330,6 +33307,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/maintenance/port/fore) +"kzg" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "kzh" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -33356,6 +33341,16 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"kzC" = ( +/obj/machinery/computer/records/medical{ + dir = 8 + }, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/cmo) "kzG" = ( /obj/structure/cable, /obj/effect/turf_decal/siding/wood{ @@ -33376,6 +33371,12 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/lab) +"kzO" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "kzP" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -33402,38 +33403,12 @@ /obj/effect/mapping_helpers/airlock/access/any/science/maintenance, /turf/open/floor/iron/dark, /area/station/maintenance/starboard/fore) -"kzZ" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/shower/directional/east{ - name = "emergency shower" - }, -/obj/structure/extinguisher_cabinet/directional/west, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 8 - }, -/obj/structure/fluff/shower_drain, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/pharmacy) "kAb" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"kAg" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/engineering/main) "kAj" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -33446,26 +33421,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/starboard) -"kAr" = ( -/obj/structure/table/wood, -/obj/item/storage/fancy/candle_box, -/obj/item/storage/fancy/candle_box, -/obj/item/storage/fancy/candle_box{ - pixel_x = 6; - pixel_y = 5 - }, -/obj/item/storage/fancy/candle_box{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/storage/box/matches{ - pixel_x = -3; - pixel_y = 2 - }, -/obj/machinery/computer/security/telescreen/monastery/directional/north, -/obj/machinery/light/warm/dim/directional/north, -/turf/open/floor/iron/grimy, -/area/station/service/chapel/office) "kAt" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -33563,44 +33518,12 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/starboard) -"kCi" = ( -/obj/structure/cable, -/obj/effect/landmark/start/hangover, -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 8; - name = "disposals sorting disposal pipe" - }, -/obj/effect/mapping_helpers/mail_sorting/supply/disposals, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/box, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) -"kCk" = ( -/turf/closed/wall/rust, -/area/station/maintenance/disposal/incinerator) "kCm" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/burnt_floor, /obj/structure/closet/firecloset, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"kCK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) -"kCR" = ( -/obj/machinery/atmospherics/components/unary/airlock_pump/unbolt_only{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "kCZ" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue/half/contrasted, @@ -33620,6 +33543,15 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/xenobiology) +"kDf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/engineering/lobby) "kDg" = ( /obj/machinery/computer/apc_control, /obj/effect/turf_decal/bot, @@ -33652,12 +33584,6 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/medical/treatment_center) -"kDy" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/aft) "kDC" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -33681,6 +33607,19 @@ /obj/structure/sign/warning/secure_area, /turf/closed/wall, /area/station/engineering/storage/tech) +"kEn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "kEp" = ( /obj/structure/flora/grass/jungle/a/style_random{ icon_state = "grassb2" @@ -33705,16 +33644,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/cryo) -"kEQ" = ( -/obj/effect/turf_decal/bot, -/obj/structure/tank_dispenser, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/storage/gas) "kES" = ( /obj/machinery/door/airlock/security{ aiControlDisabled = 1; @@ -33733,6 +33662,17 @@ /obj/effect/mapping_helpers/airlock/access/all/security/armory, /turf/open/floor/iron/dark, /area/station/security/execution/education) +"kFf" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 9 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing, +/obj/machinery/electrolyzer, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) "kFl" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/stripes/line{ @@ -33798,12 +33738,13 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/ordnance) -"kFY" = ( -/obj/effect/turf_decal/bot, -/obj/structure/closet/crate/freezer/surplus_limbs, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/surgery/theatre) +"kFT" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 10 + }, +/obj/machinery/light/warm/directional/east, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "kGj" = ( /obj/machinery/door/airlock/engineering{ name = "Port Bow Solar Access" @@ -33819,17 +33760,6 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/solars/port/fore) -"kGm" = ( -/obj/structure/bed, -/obj/machinery/iv_drip, -/obj/effect/turf_decal/bot_white/right, -/obj/effect/turf_decal/stripes/corner, -/obj/item/bedsheet/medical, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/medical/medbay/central) "kGs" = ( /obj/machinery/door/morgue{ name = "Religious Equipment"; @@ -33850,6 +33780,22 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/command/gateway) +"kGL" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/obj/machinery/light/warm/directional/west, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) +"kGP" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) "kHh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -33876,15 +33822,8 @@ /obj/effect/turf_decal/delivery, /obj/structure/reagent_dispensers/fueltank, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, +/turf/open/floor/iron/dark, /area/station/maintenance/aft) -"kHt" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/engine, -/area/station/ai/upload/chamber) "kHw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -33904,23 +33843,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/fore) -"kHK" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/machinery/meter, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) -"kHN" = ( -/obj/structure/closet/secure_closet/psychology, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/carpet, -/area/station/medical/psychology) -"kHQ" = ( -/obj/structure/sign/poster/official/wtf_is_co2, -/turf/closed/wall, -/area/station/engineering/atmos) "kHR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -33939,6 +33861,47 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/disposal) +"kIm" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/landmark/start/atmospheric_technician, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 10 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"kIr" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -5 + }, +/obj/item/pen{ + pixel_x = -5 + }, +/obj/machinery/flasher/directional/east{ + id = "hopflash"; + name = "Crowd Pacifier" + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/status_display/evac/directional/north, +/obj/structure/desk_bell{ + pixel_x = 7; + pixel_y = 10 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) "kIz" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/delivery, @@ -34011,11 +33974,54 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/port/greater) +"kJB" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/entry) "kJH" = ( /obj/effect/turf_decal/bot, /obj/machinery/holopad, /turf/open/floor/iron/showroomfloor, /area/station/medical/surgery/theatre) +"kJK" = ( +/obj/effect/landmark/secequipment, +/obj/effect/turf_decal/bot, +/obj/machinery/status_display/evac/directional/north, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/turf/open/floor/iron/dark, +/area/station/security/office) +"kJM" = ( +/obj/structure/cable, +/obj/structure/table/wood, +/obj/machinery/computer/libraryconsole/bookmanagement{ + pixel_y = 5 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron/dark, +/area/station/service/library) +"kKc" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/item/reagent_containers/cup/watering_can, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/prison/garden) "kKm" = ( /obj/machinery/door/airlock/public/glass{ name = "Library" @@ -34044,6 +34050,19 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) +"kLf" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table, +/obj/item/storage/toolbox/electrical{ + pixel_y = 3 + }, +/obj/item/multitool{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/item/stack/cable_coil, +/turf/open/floor/iron, +/area/station/engineering/lobby) "kLo" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 8 @@ -34053,12 +34072,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"kLx" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/obj/machinery/meter, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "kLy" = ( /obj/structure/flora/bush/pale/style_random{ icon_state = "fernybush_3" @@ -34162,14 +34175,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard) -"kMR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/sign/warning/electric_shock/directional/south, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/port/lesser) "kNe" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -34196,18 +34201,6 @@ /obj/item/pen, /turf/open/floor/iron/dark, /area/station/service/bar/atrium) -"kNz" = ( -/obj/structure/grille/broken, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/aft) "kNG" = ( /obj/structure/sign/poster/official/help_others, /turf/closed/wall, @@ -34268,6 +34261,21 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/command/bridge) +"kNV" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Gas to Chamber" + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron/showroomfloor, +/area/station/science/xenobiology) "kNY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -34295,6 +34303,18 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/dark, /area/station/maintenance/starboard/fore) +"kOj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/camera/directional/north{ + c_tag = "Head of Security's Office" + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/photocopier, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hos) "kOt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -34307,21 +34327,6 @@ /obj/structure/sign/warning/biohazard, /turf/closed/wall, /area/station/science/ordnance) -"kOx" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/engineering/atmos) "kOJ" = ( /obj/machinery/teleport/hub, /obj/effect/turf_decal/delivery, @@ -34340,6 +34345,14 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"kPb" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/caution/stand_clear, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/processing) "kPd" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -34358,6 +34371,21 @@ dir = 1 }, /area/station/hallway/primary/fore) +"kPj" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/structure/sign/departments/science/alt/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/showroomfloor, +/area/station/science) "kPk" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/unres/delayed{ @@ -34379,15 +34407,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/misc/asteroid, /area/space/nearstation) -"kPv" = ( -/obj/effect/landmark/event_spawn, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron, -/area/station/engineering/atmos) "kPI" = ( /obj/structure/closet/secure_closet/miner, /obj/effect/turf_decal/delivery, @@ -34397,14 +34416,6 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/miningdock) -"kPK" = ( -/obj/machinery/button/ignition/incinerator/atmos{ - pixel_x = 8; - pixel_y = 36 - }, -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/maintenance/disposal/incinerator) "kPO" = ( /turf/closed/wall/rust, /area/station/commons/storage/primary) @@ -34523,15 +34534,6 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/showroomfloor, /area/station/medical/medbay/central) -"kRD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "kRU" = ( /obj/structure/table, /obj/item/pai_card, @@ -34541,15 +34543,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/bar/atrium) -"kSe" = ( -/obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/components/unary/airlock_pump/unbolt_only{ - dir = 8 - }, -/obj/effect/turf_decal/bot, -/obj/structure/sign/warning/vacuum/external/directional/south, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/exit/departure_lounge) "kSn" = ( /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, @@ -34575,17 +34568,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/janitor) -"kSs" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/components/binary/pump/off{ - dir = 4; - name = "O2 To Pure" - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "kSx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -34596,20 +34578,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, /turf/open/floor/iron/showroomfloor, /area/station/medical/storage) -"kSJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +"kSy" = ( +/obj/structure/closet/bombcloset, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) +/turf/open/floor/iron/dark, +/area/station/science/lobby) "kSR" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -34661,6 +34636,15 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/command/eva) +"kTr" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/hallway/primary/fore) "kTJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -34695,14 +34679,6 @@ /obj/structure/cable, /turf/open/floor/iron/showroomfloor, /area/station/medical/psychology) -"kUB" = ( -/obj/structure/table, -/obj/item/wrench, -/obj/item/crowbar, -/obj/item/analyzer, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/storage/gas) "kUJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, @@ -34753,6 +34729,11 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/dark, /area/station/service/bar) +"kVb" = ( +/obj/machinery/firealarm/directional/north, +/obj/machinery/light/floor, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "kVd" = ( /obj/structure/chair/pew/right{ dir = 8 @@ -34805,17 +34786,6 @@ /obj/item/exodrone, /turf/open/floor/plating, /area/station/cargo/drone_bay) -"kVJ" = ( -/obj/effect/turf_decal/siding/thinplating/light/corner{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/service/chapel/monastery) -"kVN" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, -/turf/open/space/basic, -/area/space/nearstation) "kVY" = ( /obj/machinery/door/airlock/command{ name = "Gateway" @@ -34867,14 +34837,6 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/maintenance/fore) -"kWN" = ( -/obj/machinery/airalarm/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/drone_bay) "kWW" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/security/glass{ @@ -34893,15 +34855,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/royalblue, /area/station/service/chapel/office) -"kXA" = ( -/obj/item/kirbyplants, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "kXJ" = ( /obj/machinery/door/poddoor/preopen{ id = "xeno1"; @@ -35046,6 +34999,16 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"kZs" = ( +/obj/machinery/firealarm/directional/east, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/turf_decal/delivery, +/obj/machinery/byteforge, +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark, +/area/station/cargo/bitrunning/den) "kZw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/siding/wood{ @@ -35068,22 +35031,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/service/kitchen) -"kZz" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) "kZH" = ( /obj/machinery/firealarm/directional/west, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -35128,13 +35075,12 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/security/brig) -"kZU" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage/gas) +"kZS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/plating, +/area/station/maintenance/aft) "kZX" = ( /obj/structure/lattice/catwalk, /obj/structure/transit_tube/crossing, @@ -35144,16 +35090,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/space/nearstation) -"kZY" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/engineering/supermatter/room) "lac" = ( /turf/closed/wall, /area/station/command/gateway) @@ -35165,14 +35101,6 @@ /obj/machinery/status_display/ai/directional/north, /turf/open/floor/engine/telecomms, /area/station/tcommsat/server) -"laf" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_atmos, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, -/turf/open/floor/engine, -/area/station/maintenance/disposal/incinerator) "lam" = ( /obj/machinery/disposal/bin/tagger, /obj/effect/turf_decal/bot, @@ -35182,15 +35110,26 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/service/lawoffice) -"lax" = ( -/obj/structure/closet/secure_closet/brig{ - name = "Prisoner Locker" +"lau" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/obj/effect/turf_decal/bot, -/obj/machinery/airalarm/directional/north, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron/dark, -/area/station/security/execution/transfer) +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"lav" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/showroomfloor, +/area/station/science) "laB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -35207,16 +35146,20 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating, /area/station/maintenance/department/bridge) +"lbb" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 2; + name = "Cold Loop Bypass" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "lby" = ( /turf/closed/wall, /area/station/science/robotics/mechbay) -"lbz" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/green/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/virology) "lbD" = ( /obj/structure/closet/secure_closet/security/sec, /obj/effect/turf_decal/bot, @@ -35226,15 +35169,10 @@ }, /turf/open/floor/iron/dark, /area/station/security/lockers) -"lbE" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 1 - }, -/obj/machinery/light/cold/dim/directional/east, -/obj/machinery/newscaster/directional/east, -/turf/open/floor/iron/cafeteria, -/area/station/security/prison/garden) +"lbG" = ( +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating/airless, +/area/space/nearstation) "lbJ" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -35244,6 +35182,11 @@ "lbO" = ( /turf/closed/wall, /area/station/service/library) +"lbZ" = ( +/obj/effect/spawner/random/structure/girder, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/central) "lcg" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm/directional/north, @@ -35276,10 +35219,13 @@ "lcn" = ( /obj/machinery/door/poddoor/shutters/radiation/preopen{ id = "engsm"; - name = "Radiation Chamber Shutters" + name = "Radiation Chamber Shutters"; + dir = 4 }, -/obj/effect/turf_decal/caution/stand_clear, -/turf/open/floor/iron/dark, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, /area/station/engineering/supermatter/engine) "lcw" = ( /obj/effect/spawner/structure/window/reinforced, @@ -35321,6 +35267,12 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/department/crew_quarters/bar) +"lcP" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "lcZ" = ( /obj/machinery/door/airlock/engineering{ name = "Electrical Maintenance" @@ -35352,13 +35304,6 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/storage) -"lec" = ( -/obj/machinery/door/poddoor/preopen{ - id = "brigfrontdoor"; - name = "Front Security Blast Door" - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "lep" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/machinery/computer/operating{ @@ -35416,16 +35361,25 @@ "leH" = ( /turf/closed/wall/r_wall/rust, /area/station/maintenance/solars/port/fore) -"leR" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/newscaster/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 +"leJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/splatter/oil, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 }, /turf/open/floor/iron/dark, -/area/station/security/lockers) +/area/station/service/chapel/storage) +"leU" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/railing, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmos) "lfd" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/tile/purple{ @@ -35471,6 +35425,20 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) +"lfN" = ( +/obj/structure/table, +/obj/item/stack/sheet/iron/ten, +/obj/item/stack/cable_coil, +/obj/item/storage/backpack/duffelbag/sec/surgery{ + pixel_y = 5 + }, +/obj/item/wirecutters, +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) "lfQ" = ( /obj/structure/closet/secure_closet/security/med, /obj/effect/turf_decal/delivery, @@ -35532,6 +35500,21 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"lgz" = ( +/obj/structure/table, +/obj/machinery/newscaster/directional/east, +/obj/effect/turf_decal/siding/green{ + dir = 8 + }, +/obj/item/storage/bag/plants/portaseeder, +/obj/item/crowbar/red, +/obj/item/plant_analyzer, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden) "lgC" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line, @@ -35541,6 +35524,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/storage) +"lgI" = ( +/obj/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) "lgQ" = ( /obj/structure/transit_tube/horizontal{ dir = 1 @@ -35558,10 +35545,6 @@ /obj/effect/decal/remains/human, /turf/open/floor/plating, /area/ruin/space/has_grav/abandoned_warehouse) -"lhm" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/turf/closed/wall/r_wall, -/area/station/engineering/supermatter/engine) "lhv" = ( /obj/machinery/shower/directional/east, /obj/item/soap/nanotrasen, @@ -35576,16 +35559,6 @@ /obj/machinery/oven/range, /turf/open/floor/iron/dark, /area/station/service/kitchen) -"lhG" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/engineering/atmos/pumproom) "lhJ" = ( /obj/structure/table, /obj/machinery/power/apc/auto_name/directional/north, @@ -35644,38 +35617,6 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/science) -"liK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible/layer2, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/aft) -"lja" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) -"ljb" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/security/checkpoint/engineering) "ljy" = ( /obj/structure/chair{ dir = 4 @@ -35695,9 +35636,30 @@ name = "Gravity Generator Access" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/maintenance/starboard/aft) +"ljH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/obj/machinery/space_heater, +/obj/machinery/airalarm/directional/east, +/obj/structure/sign/poster/contraband/fun_police/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) +"lkg" = ( +/obj/structure/sign/warning/directional/north, +/turf/open/misc/asteroid/airless, +/area/space/nearstation) "lkl" = ( /obj/effect/turf_decal/bot, /obj/machinery/holopad, @@ -35722,6 +35684,15 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/hallway/primary/starboard) +"lkS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/security/brig) "lkW" = ( /obj/structure/sign/departments/engineering/directional/south, /obj/machinery/camera/directional/south{ @@ -35743,19 +35714,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/fore) -"lln" = ( -/obj/machinery/modular_computer/preset/command{ - dir = 4 - }, -/obj/machinery/requests_console/directional/west{ - department = "Head of Personnel's Desk"; - name = "Head of Personnel's Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/announcement, -/obj/effect/mapping_helpers/requests_console/information, -/obj/effect/mapping_helpers/requests_console/assistance, -/turf/open/floor/carpet/blue, -/area/station/command/heads_quarters/hop) "llr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -35769,13 +35727,18 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/general, /turf/open/floor/iron/dark, /area/station/maintenance/port/greater) -"llu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/aft) +"llw" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 10 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "llI" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/decal/cleanable/dirt, @@ -35785,17 +35748,18 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/maintenance/port/lesser) +"llP" = ( +/obj/structure/closet/secure_closet/brig{ + name = "Prisoner Locker" + }, +/obj/effect/turf_decal/bot, +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) "llY" = ( /turf/closed/wall/r_wall, /area/station/medical/pharmacy) -"lmb" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "lme" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -35859,19 +35823,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/security/brig) -"lmN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/siding/blue/corner{ - dir = 8 - }, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue/half/contrasted, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/storage) "lmO" = ( /turf/closed/wall/rust, /area/station/cargo/storage) @@ -35882,6 +35833,28 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/showroomfloor, /area/station/medical/office) +"lne" = ( +/obj/structure/fireaxecabinet/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Atmospherics Scrubbers"; + name = "atmospherics camera"; + network = list("ss13","engine") + }, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/brown/visible{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "lnm" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -35893,6 +35866,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"lnx" = ( +/obj/structure/transit_tube/crossing, +/turf/open/floor/plating, +/area/station/maintenance/fore) "lny" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -35916,6 +35893,16 @@ /obj/machinery/status_display/evac/directional/south, /turf/open/floor/iron/dark, /area/station/hallway/primary/central/fore) +"lou" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 8 + }, +/obj/effect/turf_decal/bot, +/obj/structure/railing, +/obj/structure/closet/radiation, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) "lox" = ( /obj/effect/turf_decal/trimline/green/line{ dir = 5 @@ -35923,16 +35910,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/service/hydroponics) -"loE" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/starboard) "loI" = ( /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, @@ -35940,18 +35917,6 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, /area/station/maintenance/fore) -"loJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/obj/machinery/light/floor, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation) "loO" = ( /obj/machinery/airlock_sensor/incinerator_ordmix{ pixel_x = -24 @@ -35977,6 +35942,12 @@ "lpt" = ( /turf/closed/wall/r_wall/rust, /area/station/command/heads_quarters/captain) +"lpA" = ( +/obj/effect/decal/cleanable/ash/large, +/turf/open/floor/iron/smooth_half{ + dir = 8 + }, +/area/station/engineering/atmos) "lpH" = ( /obj/structure/rack, /obj/effect/turf_decal/bot, @@ -35995,6 +35966,19 @@ }, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) +"lqe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/structure/table, +/obj/item/storage/medkit/emergency, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) "lql" = ( /obj/machinery/light/small/directional/west, /obj/effect/turf_decal/stripes/corner{ @@ -36030,11 +36014,6 @@ /obj/structure/flora/bush/stalky/style_random, /turf/open/floor/grass, /area/station/service/hydroponics/garden) -"lqC" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating/airless, -/area/station/maintenance/disposal/incinerator) "lqE" = ( /obj/machinery/power/solar_control{ dir = 8; @@ -36067,25 +36046,6 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/port/greater) -"lqO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/airlock/atmos{ - name = "Incinerator" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 6 - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/obj/machinery/duct, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) "lqP" = ( /obj/machinery/door/airlock/grunge{ id_tag = "Cabin_1"; @@ -36117,6 +36077,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) +"lrm" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 6 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "lrp" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -36139,14 +36105,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/port) -"lrM" = ( -/obj/machinery/power/shieldwallgen/xenobiologyaccess, -/obj/effect/turf_decal/box, -/obj/structure/extinguisher_cabinet/directional/west, -/obj/structure/cable, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/science/xenobiology) "lrO" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -36191,37 +36149,6 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/hos) -"lsf" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 4 - }, -/turf/closed/wall, -/area/station/engineering/atmos) -"lsk" = ( -/obj/effect/turf_decal/tile/green/anticorner/contrasted{ - dir = 4 - }, -/obj/structure/closet/l3closet/virology, -/obj/item/tank/internals/emergency_oxygen, -/obj/item/tank/internals/emergency_oxygen, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/structure/sink/directional/west, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/virology) -"lst" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/engineering/atmos) "lsu" = ( /obj/machinery/door/airlock/external{ name = "Solar Maintenance" @@ -36250,16 +36177,6 @@ }, /turf/open/floor/wood, /area/station/command/heads_quarters/hos) -"lsW" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "Pure to Ports" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos) "lsX" = ( /obj/structure/sign/departments/restroom, /turf/closed/wall, @@ -36281,6 +36198,16 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/dark, /area/station/service/library) +"ltf" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "lth" = ( /obj/effect/turf_decal/bot, /obj/machinery/atmospherics/components/unary/portables_connector/visible{ @@ -36298,13 +36225,6 @@ }, /turf/open/floor/iron/dark, /area/station/science/xenobiology) -"lts" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/maintenance/disposal/incinerator) "lue" = ( /obj/structure/sign/warning/fire/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -36348,6 +36268,15 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"luC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/firealarm/directional/south, +/obj/item/kirbyplants/organic/plant21, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "luI" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -36395,21 +36324,6 @@ }, /turf/open/floor/iron/dark, /area/station/science/robotics/mechbay) -"lvg" = ( -/obj/structure/sign/departments/cargo/directional/north, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark/corner{ - dir = 1 - }, -/area/station/hallway/primary/fore) -"lvw" = ( -/obj/machinery/atmospherics/components/unary/airlock_pump/unbolt_only{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "lvy" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -36419,6 +36333,25 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/dark, /area/station/service/bar) +"lvE" = ( +/obj/structure/table, +/obj/item/tank/jetpack/carbondioxide{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/item/tank/jetpack/carbondioxide{ + pixel_y = 2 + }, +/obj/item/wrench, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/light/cold/dim/directional/south, +/turf/open/floor/iron/dark, +/area/station/command/eva) "lvP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -36431,46 +36364,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron/showroomfloor, /area/station/security/office) -"lvR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) -"lvS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/structure/cable, -/obj/structure/sign/poster/contraband/random/directional/east, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/aft) -"lvZ" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/fore) -"lwj" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/computer/records/security{ - dir = 4 - }, -/obj/machinery/newscaster/directional/west, -/obj/machinery/camera/directional/west{ - c_tag = "Security Office Computers" - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/office) "lwn" = ( /obj/structure/closet/secure_closet/evidence, /obj/effect/turf_decal/bot, @@ -36485,28 +36378,6 @@ "lwu" = ( /turf/closed/wall, /area/station/security/medical) -"lwz" = ( -/obj/structure/closet/secure_closet/chemical, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/extinguisher_cabinet/directional/west, -/obj/item/storage/box/pillbottles, -/obj/item/storage/box/pillbottles, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/medical/pharmacy) -"lwM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/tile/red/anticorner/contrasted, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron, -/area/station/security/processing) "lwT" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/tile/neutral/anticorner/contrasted, @@ -36530,8 +36401,16 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, +/obj/machinery/holopad, /turf/open/floor/wood, /area/station/service/lawoffice) +"lwX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) "lxf" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -36561,11 +36440,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/engineering/circuit_workshop) -"lxu" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "lxw" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -36658,14 +36532,6 @@ }, /turf/open/floor/iron, /area/station/command/eva) -"lza" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/box, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "lzg" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -36674,20 +36540,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/showroomfloor, /area/station/security/office) -"lzA" = ( -/obj/structure/cable, -/obj/structure/table/wood, -/obj/machinery/computer/libraryconsole/bookmanagement{ - pixel_y = 5 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/turf/open/floor/iron/dark, -/area/station/service/library) "lzF" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -36697,6 +36549,26 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/miningdock) +"lAi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/red{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/computer/security/telescreen/minisat/directional/east, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden, +/turf/open/floor/iron, +/area/station/security/checkpoint/engineering) "lAk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -36758,15 +36630,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, /area/station/maintenance/fore) -"lAV" = ( -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 4 - }, -/obj/effect/landmark/event_spawn, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos) "lAW" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -36790,16 +36653,16 @@ /obj/effect/turf_decal/tile/purple, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"lBu" = ( -/obj/machinery/newscaster/directional/south, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 +"lBE" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters{ + name = "Virology Isolation Shutters"; + id = "virocells"; + dir = 1 }, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) +/turf/open/floor/plating, +/area/station/medical/surgery/theatre) "lBN" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -36867,13 +36730,6 @@ /obj/structure/flora/bush/flowers_pp/style_random, /turf/open/floor/grass, /area/station/service/chapel) -"lCU" = ( -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 1 - }, -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/station/security/brig) "lCV" = ( /obj/machinery/door/airlock/mining{ name = "Auxiliary Base" @@ -36910,9 +36766,6 @@ /turf/closed/wall/r_wall, /area/station/maintenance/starboard) "lDB" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -36921,12 +36774,24 @@ }, /obj/effect/decal/cleanable/dirt, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/plating, /area/station/maintenance/aft) "lDK" = ( /obj/machinery/atmospherics/components/tank/air, /turf/open/floor/iron/dark, /area/station/service/chapel/storage) +"lDN" = ( +/obj/structure/flora/bush/flowers_br/style_random, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/grass, +/area/station/service/chapel) "lDS" = ( /obj/structure/filingcabinet/security, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -36937,6 +36802,28 @@ }, /turf/open/floor/iron/dark, /area/station/security/detectives_office) +"lDT" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"lDU" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmos) "lDV" = ( /obj/item/kirbyplants/organic/plant2{ pixel_y = 3 @@ -36966,16 +36853,6 @@ /obj/structure/sign/warning/docking, /turf/closed/wall, /area/station/maintenance/starboard) -"lEz" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/obj/machinery/door/poddoor/shutters{ - name = "Virology Isolation Shutters"; - id = "virocells"; - dir = 1 - }, -/turf/open/floor/plating, -/area/station/medical/surgery/theatre) "lED" = ( /obj/machinery/telecomms/message_server/preset, /turf/open/floor/circuit/green/telecomms/mainframe, @@ -36985,6 +36862,38 @@ /obj/structure/flora/bush/grassy/style_random, /turf/open/floor/grass, /area/station/service/hydroponics/garden) +"lEK" = ( +/obj/machinery/button/flasher{ + id = "visitorflash"; + pixel_x = -6; + pixel_y = 24; + req_access = list("brig") + }, +/obj/machinery/button/door/directional/north{ + id = "visitation"; + name = "Visitation Shutters"; + pixel_x = 8; + req_access = list("brig") + }, +/obj/machinery/light/dim/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/station/security/execution/transfer) +"lEN" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/highsecurity{ + name = "AI Upload" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/ai/upload/chamber) "lEQ" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -37002,6 +36911,13 @@ /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) +"lES" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/station/engineering/atmos) "lFr" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -37027,6 +36943,23 @@ "lFC" = ( /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"lFL" = ( +/obj/structure/table, +/obj/item/clipboard, +/obj/item/folder/red, +/obj/item/restraints/handcuffs, +/obj/item/melee/baseball_bat{ + desc = "A staple of security force interrogations."; + icon_state = "baseball_bat_metal"; + name = "kneecapper" + }, +/obj/machinery/status_display/ai/directional/east, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/dim/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) "lFN" = ( /obj/structure/sign/departments/psychology/directional/west, /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, @@ -37047,13 +36980,6 @@ }, /turf/open/floor/plating/rust, /area/station/maintenance/department/security) -"lGa" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "lGs" = ( /turf/closed/wall, /area/station/security/warden) @@ -37070,14 +36996,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/robotics/lab) -"lGT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/grille/broken, -/turf/open/floor/plating, -/area/station/maintenance/starboard) "lGV" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -37089,16 +37007,6 @@ /obj/effect/spawner/random/maintenance/two, /turf/open/floor/iron/dark, /area/station/maintenance/port/greater) -"lHt" = ( -/obj/effect/turf_decal/stripes/line, -/obj/item/radio/intercom/directional/west, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark/corner{ - dir = 1 - }, -/area/station/hallway/primary/starboard) "lHE" = ( /obj/structure/table/wood, /obj/structure/displaycase/forsale/kitchen{ @@ -37110,6 +37018,19 @@ /obj/machinery/door/firedoor, /turf/open/floor/wood, /area/station/service/bar) +"lHK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/landmark/event_spawn, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/command/bridge) "lHX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -37124,21 +37045,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, /turf/open/floor/iron/showroomfloor, /area/station/medical/medbay/central) -"lIf" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/machinery/button/door/directional/south{ - id = "custodialwagon"; - name = "Custodial Bay Toggle"; - req_access = list("janitor") - }, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/mob/living/basic/bot/cleanbot/autopatrol, -/obj/effect/turf_decal/tile/purple/half/contrasted, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "lIr" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -37153,11 +37059,20 @@ "lIs" = ( /turf/closed/wall/rust, /area/station/security/execution/education) -"lIA" = ( -/obj/structure/sign/poster/contraband/self_ai_liberation/directional/west, -/obj/item/kirbyplants/photosynthetic, -/turf/open/floor/circuit, -/area/station/ai/upload/chamber) +"lIy" = ( +/obj/structure/table/wood/fancy, +/obj/item/food/grown/flower/poppy{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/food/grown/flower/poppy{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/food/grown/flower/poppy, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "lIR" = ( /obj/machinery/door/poddoor/shutters{ dir = 1; @@ -37210,6 +37125,14 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/storage) +"lJI" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/iron/stairs/left{ + dir = 4 + }, +/area/station/service/chapel) "lJJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/hydroponics/constructable, @@ -37236,18 +37159,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/checkpoint/medical) -"lJM" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/table, -/obj/item/storage/toolbox/electrical{ - pixel_y = 3 - }, -/obj/item/multitool{ - pixel_x = -4; - pixel_y = 2 - }, -/turf/open/floor/iron, -/area/station/engineering/lobby) "lJR" = ( /obj/machinery/button/crematorium/indestructible{ pixel_x = -25 @@ -37356,6 +37267,20 @@ /obj/structure/sign/departments/engineering, /turf/closed/wall, /area/ruin/space/has_grav/abandoned_warehouse) +"lLM" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Transferring Centre" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron, +/area/station/security/processing) "lLN" = ( /obj/structure/fans/tiny, /obj/machinery/door/poddoor/massdriver_chapel, @@ -37380,10 +37305,34 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/wood, /area/station/service/bar/atrium) +"lMg" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/obj/machinery/air_sensor/incinerator_tank, +/obj/machinery/atmospherics/pipe/smart/simple/brown/visible/layer2{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) "lMh" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/glass, /area/station/service/hydroponics) +"lMk" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/light_switch/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/camera/motion/directional/south{ + c_tag = "Vault"; + name = "vault camera"; + network = list("vault") + }, +/obj/machinery/light/small/red/directional/south, +/turf/open/floor/engine, +/area/station/command/vault) "lMo" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -37394,6 +37343,35 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"lMp" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"lMv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/siding/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/simple/brown/hidden{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/office) "lMx" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -37408,6 +37386,11 @@ /obj/effect/decal/remains/human, /turf/open/floor/engine/vacuum, /area/station/science/ordnance/burnchamber) +"lMV" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "lMZ" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/caution/stand_clear, @@ -37416,35 +37399,20 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) -"lNd" = ( -/obj/effect/turf_decal/stripes/line, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "lNe" = ( /obj/docking_port/stationary/escape_pod, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"lNf" = ( +/obj/machinery/atmospherics/components/trinary/mixer/flipped{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "lNn" = ( /turf/open/floor/engine/n2o, /area/station/engineering/atmos) -"lNp" = ( -/obj/machinery/atmospherics/components/trinary/filter/flipped{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/maintenance/disposal/incinerator) "lNK" = ( /obj/effect/turf_decal/siding/yellow{ dir = 8 @@ -37457,6 +37425,12 @@ }, /turf/open/floor/iron, /area/station/engineering/lobby) +"lNL" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) "lNP" = ( /obj/structure/cable, /obj/effect/turf_decal/siding/purple{ @@ -37507,16 +37481,44 @@ }, /turf/open/floor/plating/airless, /area/station/hallway/secondary/entry) +"lOD" = ( +/obj/structure/table, +/obj/machinery/camera/directional/east{ + c_tag = "Garden" + }, +/obj/effect/turf_decal/siding/green{ + dir = 8 + }, +/obj/item/shovel/spade, +/obj/item/hatchet, +/obj/item/cultivator, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/item/shovel/spade, +/obj/item/cultivator, +/obj/item/hatchet, +/obj/item/plant_analyzer, +/obj/item/reagent_containers/cup/bottle/nutrient/rh{ + pixel_x = 2; + pixel_y = 1 + }, +/obj/item/reagent_containers/cup/bottle/nutrient/ez, +/obj/machinery/light/warm/directional/east, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden) "lOG" = ( /turf/closed/wall/rust, /area/station/service/chapel/monastery) -"lON" = ( -/obj/effect/spawner/random/vending/snackvend, +"lOS" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 + dir = 4 }, /turf/open/floor/iron/dark, -/area/station/security/courtroom) +/area/station/cargo/drone_bay) "lOX" = ( /turf/closed/wall/r_wall, /area/station/engineering/supermatter/engine) @@ -37558,21 +37560,6 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"lPh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/table, -/obj/machinery/requests_console/directional/west{ - department = "Security"; - name = "Security Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/information, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/machinery/light_switch/directional/north, -/obj/effect/decal/cleanable/cobweb, -/obj/machinery/computer/security/telescreen/engine, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/engineering) "lPK" = ( /obj/machinery/door/airlock/external{ name = "Departure Shuttle Airlock"; @@ -37584,10 +37571,44 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit/departure_lounge) +"lPR" = ( +/obj/structure/table, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/storage/belt/utility, +/obj/item/clothing/head/utility/welding, +/obj/item/clothing/glasses/welding, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/directional/west, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron/dark, +/area/station/science/robotics/lab) "lPU" = ( /obj/machinery/shower/directional/west, /turf/open/floor/plastic, /area/station/security/prison/shower) +"lPV" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/obj/machinery/door/airlock/hatch{ + name = "Engine Access" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/pumproom) "lPX" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -37614,17 +37635,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/ruin/space/has_grav/abandoned_warehouse) -"lQj" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/turf/open/floor/iron, -/area/station/engineering/storage_shared) "lQu" = ( /obj/effect/turf_decal/stripes/corner, /obj/effect/turf_decal/stripes/corner{ @@ -37644,6 +37654,22 @@ /obj/effect/landmark/start/chaplain, /turf/open/floor/iron/dark, /area/station/service/chapel) +"lQx" = ( +/obj/structure/table, +/obj/item/storage/crayons, +/obj/item/clothing/under/color/grey{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/clothing/under/color/grey, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) "lQB" = ( /obj/effect/turf_decal/stripes/corner, /obj/effect/decal/cleanable/dirt, @@ -37683,6 +37709,17 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"lRj" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/aft) "lRk" = ( /turf/closed/wall, /area/station/maintenance/starboard/fore) @@ -37712,11 +37749,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/chemistry) -"lRS" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "lRZ" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -37725,13 +37757,6 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/science) -"lSd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/light/floor, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) "lSl" = ( /obj/machinery/door/airlock/public/glass{ name = "Auxiliary Dock" @@ -37763,6 +37788,24 @@ }, /turf/open/floor/plating, /area/ruin/space/has_grav/abandoned_warehouse) +"lSW" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/machinery/duct, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security/prison/garden) +"lTb" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/obj/structure/closet/firecloset, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "lTc" = ( /obj/structure/rack, /obj/effect/turf_decal/bot, @@ -37786,6 +37829,13 @@ }, /turf/open/floor/iron/dark, /area/station/medical/office) +"lTy" = ( +/obj/effect/spawner/random/vending/snackvend, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) "lTM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, @@ -37802,23 +37852,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/security/courtroom) -"lUG" = ( -/obj/structure/table, -/obj/item/clothing/under/rank/prisoner/skirt{ - pixel_x = -13; - pixel_y = 5 - }, -/obj/item/clothing/under/rank/prisoner/skirt{ - pixel_x = 9; - pixel_y = 5 - }, -/obj/item/clothing/under/rank/prisoner{ - pixel_x = -2; - pixel_y = 5 - }, -/obj/effect/turf_decal/tile/red/half/contrasted, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "lUH" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced/spawner/directional/east, @@ -37852,24 +37885,16 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/command/heads_quarters/cmo) -"lVe" = ( -/turf/closed/wall, -/area/station/science) -"lVf" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, +"lVc" = ( +/obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ dir = 4 }, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/engineering/atmos) +/turf/open/space/basic, +/area/space/nearstation) +"lVe" = ( +/turf/closed/wall, +/area/station/science) "lVi" = ( /obj/structure/table, /obj/item/paper_bin, @@ -37899,14 +37924,13 @@ /obj/structure/marker_beacon/burgundy, /turf/open/floor/plating/airless, /area/space/nearstation) -"lVx" = ( -/obj/machinery/status_display/evac/directional/north, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark, -/area/station/service/bar/backroom) +"lVy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "lVD" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -37932,6 +37956,18 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/dark, /area/station/maintenance/port/greater) +"lVH" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 10 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/item/kirbyplants/organic/plant3, +/obj/structure/sign/warning/directional/north, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "lVL" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/corner{ @@ -37947,6 +37983,11 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/server) +"lVT" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/turf/open/floor/iron, +/area/station/engineering/atmos/storage) "lWg" = ( /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, @@ -38004,17 +38045,6 @@ /obj/machinery/light/directional/south, /turf/open/floor/plating/airless, /area/station/hallway/secondary/entry) -"lWF" = ( -/obj/structure/chair/office, -/obj/effect/turf_decal/siding/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/exit/departure_lounge) "lWJ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -38038,16 +38068,18 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) -"lWV" = ( -/obj/structure/table/wood, -/obj/machinery/computer/records/medical/laptop{ - dir = 4; - pixel_y = 3; - pixel_x = 3 +"lXd" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/psychology) +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) "lXe" = ( /obj/structure/table, /obj/item/storage/box/lights/mixed{ @@ -38058,20 +38090,32 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/primary/port) -"lXj" = ( -/obj/machinery/firealarm/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ +"lXu" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ dir = 4 }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"lXA" = ( +/obj/effect/turf_decal/loading_area{ + dir = 4; + pixel_x = 5 + }, +/obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/effect/turf_decal/tile/red, -/obj/machinery/duct, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/office) "lXB" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/effect/decal/cleanable/dirt, @@ -38121,13 +38165,6 @@ }, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/abandoned_warehouse) -"lXT" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/medbay/central) "lYa" = ( /obj/structure/chair/comfy/brown, /obj/effect/landmark/start/detective, @@ -38140,6 +38177,7 @@ /obj/machinery/atmospherics/components/binary/pump{ name = "Gas to Chamber" }, +/obj/structure/sign/warning/fire/directional/east, /turf/open/floor/circuit/green{ luminosity = 2 }, @@ -38147,6 +38185,18 @@ "lYg" = ( /turf/closed/wall, /area/station/science/robotics/lab) +"lYx" = ( +/obj/structure/table, +/obj/item/food/ready_donk/donkrange_chicken, +/obj/item/food/ready_donk/donkhiladas{ + pixel_y = 5 + }, +/obj/item/food/ready_donk/country_chicken{ + pixel_y = 10 + }, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/iron/dark, +/area/station/cargo/miningoffice) "lYE" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -38200,6 +38250,47 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) +"lZt" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/components/unary/airlock_pump/unbolt_only{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard) +"lZz" = ( +/obj/structure/rack, +/obj/effect/turf_decal/bot, +/obj/item/storage/medkit/o2, +/obj/item/tank/internals/emergency_oxygen, +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/item/tank/internals/emergency_oxygen, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"lZJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/turf_decal/siding/yellow{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "lZK" = ( /obj/structure/cable, /obj/structure/table, @@ -38375,26 +38466,23 @@ }, /turf/open/floor/iron, /area/station/service/janitor) -"mcs" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 6 +"mcr" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 }, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/blue{ dir = 8 }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) -"mcu" = ( -/obj/structure/flora/bush/flowers_br/style_random, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/turf/open/floor/grass, -/area/station/service/chapel) +/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmos) "mcN" = ( /obj/effect/turf_decal/bot, /turf/open/floor/iron, @@ -38431,11 +38519,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, /area/station/maintenance/starboard) -"mdy" = ( -/obj/structure/flora/bush/flowers_yw/style_random, -/obj/machinery/light/dim/directional/east, -/turf/open/floor/grass, -/area/station/service/chapel) "mdB" = ( /obj/machinery/door/airlock/external{ name = "External Freight Airlock" @@ -38464,10 +38547,36 @@ }, /turf/open/floor/iron, /area/station/security/brig) -"mdX" = ( -/obj/effect/turf_decal/bot/right, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) +"mdJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/light/cold/directional/north, +/obj/machinery/holopad/secure, +/obj/effect/turf_decal/bot, +/turf/open/floor/engine, +/area/station/tcommsat/computer) +"mdL" = ( +/obj/structure/table, +/obj/machinery/recharger, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/light/dim/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/brig) +"mdR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "mee" = ( /obj/effect/turf_decal/bot, /obj/structure/closet/firecloset, @@ -38476,6 +38585,14 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/primary/starboard) +"mei" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/secure_closet/hydroponics, +/obj/structure/sign/poster/contraband/kudzu/directional/east, +/obj/effect/turf_decal/tile/green/fourcorners, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/checker, +/area/station/service/hydroponics) "mej" = ( /obj/structure/cable, /obj/machinery/icecream_vat, @@ -38491,6 +38608,13 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/security/prison/mess) +"meN" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/hallway/secondary/entry) "meP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -38501,22 +38625,6 @@ /obj/effect/mapping_helpers/mail_sorting/science/ordnance, /turf/open/floor/iron/showroomfloor, /area/station/science/lobby) -"meR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/obj/machinery/wall_healer/directional/east, -/obj/machinery/light/warm/directional/east, -/turf/open/floor/iron, -/area/station/engineering/lobby) "meU" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ @@ -38560,20 +38668,6 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/command/vault) -"mfE" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/camera/directional/west{ - c_tag = "Supermatter Terminal"; - name = "engineering camera"; - network = list("ss13","engine") - }, -/obj/machinery/light_switch/directional/west, -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "mfF" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -38631,6 +38725,11 @@ /obj/effect/turf_decal/tile/purple, /turf/open/floor/iron/showroomfloor, /area/station/science/lab) +"mga" = ( +/obj/structure/chair/stool/directional/west, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/turf/open/floor/iron/dark, +/area/station/commons/locker) "mgn" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -38659,6 +38758,14 @@ }, /turf/open/floor/iron, /area/station/command/bridge) +"mgB" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/firedoor, +/turf/open/floor/plating, +/area/station/engineering/atmos/pumproom) "mgC" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ @@ -38678,19 +38785,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"mgU" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/firealarm/directional/west, -/obj/machinery/suit_storage_unit/standard_unit{ - desc = "An industrial suit storage device carrying retro space suits. Neat!"; - helmet_type = /obj/item/clothing/head/helmet/space; - suit_type = /obj/item/clothing/suit/space - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/command/eva) "mha" = ( /obj/machinery/porta_turret/ai, /obj/machinery/airalarm/directional/west, @@ -38700,6 +38794,11 @@ luminosity = 2 }, /area/station/ai/satellite/interior) +"mhh" = ( +/obj/effect/spawner/random/engineering/tracking_beacon, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/medbay/central) "mhi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -38710,6 +38809,12 @@ dir = 1 }, /area/station/hallway/primary/starboard) +"mhE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/noticeboard/directional/east, +/obj/machinery/computer/gateway_control, +/turf/open/floor/iron/dark, +/area/station/command/gateway) "mhP" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -38722,6 +38827,13 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/lab) +"mhQ" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 8 + }, +/obj/effect/turf_decal/tile/bar/half/contrasted, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/atmos) "mid" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -38732,6 +38844,20 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/dark, /area/station/maintenance/port/greater) +"mih" = ( +/obj/structure/table/wood/fancy, +/obj/item/food/grown/flower/harebell, +/obj/item/food/grown/flower/harebell{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/food/grown/flower/harebell{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "mii" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -38754,6 +38880,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/maintenance/port/aft) +"mil" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/turf/open/space/basic, +/area/space/nearstation) "mis" = ( /obj/structure/frame/machine, /obj/effect/turf_decal/stripes/line{ @@ -38828,6 +38961,10 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark, /area/station/service/chapel/storage) +"mjB" = ( +/obj/effect/spawner/random/trash/hobo_squat, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) "mjG" = ( /obj/effect/turf_decal/bot, /obj/machinery/status_display/door_timer{ @@ -38847,12 +38984,6 @@ "mjW" = ( /turf/closed/wall, /area/station/cargo/miningdock) -"mkj" = ( -/obj/machinery/atmospherics/components/unary/airlock_pump/unbolt_only{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "mkk" = ( /turf/closed/wall/rust, /area/station/hallway/secondary/entry) @@ -38881,6 +39012,15 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"mkY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Chapel Hallway" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) "mle" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -38957,24 +39097,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/storage) -"mlK" = ( -/obj/effect/decal/cleanable/ash, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) -"mlT" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/door/window/left/directional/north{ - name = "Inner Pipe Access"; - req_access = list("atmospherics") - }, -/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "mma" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -39008,6 +39130,21 @@ }, /turf/open/floor/iron/dark, /area/station/security/detectives_office) +"mmm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/showroomfloor, +/area/station/science) "mmo" = ( /obj/machinery/light/small/directional/north, /obj/structure/dresser, @@ -39062,6 +39199,28 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"mmM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/turf_decal/siding/purple/corner{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron/showroomfloor, +/area/station/science/lobby) +"mmN" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/purple/visible, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/station/engineering/atmos) "mmY" = ( /obj/structure/sign/warning/docking, /turf/closed/wall/rust, @@ -39074,29 +39233,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"mno" = ( -/obj/structure/window/reinforced/plasma/spawner/directional/west, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/machinery/power/energy_accumulator/grounding_rod/anchored, -/turf/open/floor/circuit/green{ - luminosity = 2 - }, -/area/station/engineering/supermatter/engine) -"mnE" = ( -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/blue, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/engineering/atmos) "mnG" = ( /obj/machinery/door/firedoor/heavy, /obj/machinery/door/airlock/medical/glass{ @@ -39190,13 +39326,6 @@ /obj/effect/decal/cleanable/blood/old, /turf/open/floor/iron/showroomfloor, /area/station/security/checkpoint/science) -"moK" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/decal/cleanable/ash, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "mpv" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -39231,6 +39360,17 @@ /obj/structure/sign/poster/contraband/random/directional/west, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"mqy" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/computer/atmos_control/mix_tank{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/atmos) "mqC" = ( /turf/open/floor/iron, /area/station/security/prison) @@ -39258,7 +39398,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/obj/machinery/duct, /turf/open/floor/engine, /area/station/engineering/gravity_generator) "mqU" = ( @@ -39281,13 +39420,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard) -"mrz" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/obj/machinery/light/broken/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "mrB" = ( /obj/effect/turf_decal/bot, /obj/machinery/status_display/door_timer{ @@ -39327,6 +39459,11 @@ }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs) +"mrL" = ( +/obj/structure/cable, +/obj/machinery/light/floor, +/turf/open/floor/iron/showroomfloor, +/area/station/science/xenobiology) "mrR" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, @@ -39350,12 +39487,14 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/engineering/storage/tcomms) -"msy" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +"msj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron/dark, -/area/station/science/ordnance/storage) +/area/station/science/xenobiology) "msL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -39399,6 +39538,16 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard) +"mtn" = ( +/obj/machinery/flasher/portable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/armory) "mtq" = ( /obj/structure/chair/office/light, /obj/effect/landmark/start/research_director, @@ -39504,6 +39653,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/cargo/warehouse) +"mvx" = ( +/obj/effect/turf_decal/siding/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) "mvz" = ( /obj/machinery/door/airlock/research{ name = "Ordnance Lab" @@ -39526,19 +39684,15 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/security/execution/transfer) -"mvW" = ( -/turf/open/floor/engine/plasma, -/area/station/engineering/atmos) -"mvX" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/atmospherics/components/trinary/filter/atmos/n2o{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron/showroomfloor, +"mvH" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/obj/structure/table, +/obj/item/hfr_box/body/fuel_input, +/obj/item/hfr_box/body/interface, +/obj/item/hfr_box/body/moderator_input, +/obj/item/hfr_box/body/waste_output, +/turf/open/floor/iron, /area/station/engineering/atmos) "mwe" = ( /obj/machinery/smartfridge, @@ -39584,6 +39738,19 @@ }, /turf/open/floor/iron/dark, /area/station/science/xenobiology) +"mwx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "mwy" = ( /obj/machinery/newscaster/directional/west, /obj/machinery/airalarm/directional/north, @@ -39621,18 +39788,12 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"mwU" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 +"mwW" = ( +/obj/effect/decal/cleanable/ash, +/turf/open/floor/iron/smooth_half{ + dir = 8 }, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, -/obj/machinery/disposal/bin/tagger, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/chemistry) +/area/station/engineering/atmos) "mxf" = ( /turf/closed/wall/r_wall/rust, /area/station/security/execution/transfer) @@ -39676,20 +39837,6 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/security/brig) -"mxT" = ( -/obj/machinery/recharge_station, -/obj/effect/turf_decal/bot, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/dark, -/area/station/science/robotics/mechbay) "myc" = ( /obj/structure/rack, /obj/item/wirecutters{ @@ -39716,12 +39863,6 @@ "myp" = ( /turf/closed/wall/r_wall, /area/station/security/prison/garden) -"myt" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/machinery/wall_healer/directional/south, -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "myS" = ( /obj/effect/turf_decal/box, /obj/structure/cable, @@ -39798,16 +39939,20 @@ }, /turf/open/floor/iron/dark, /area/station/ai/satellite/maintenance/storage) +"mAn" = ( +/obj/structure/table, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/item/storage/medkit/emergency, +/obj/item/clothing/under/rank/security/officer, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) "mBm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) -"mBp" = ( -/obj/structure/lattice, -/obj/structure/transit_tube/horizontal, -/turf/open/space/basic, -/area/space/nearstation) "mBS" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 1 @@ -39882,6 +40027,13 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"mCA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "mCF" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -39890,16 +40042,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard) -"mCG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/ai/upload/chamber) "mCO" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -39933,11 +40075,6 @@ "mDD" = ( /turf/closed/wall/rust, /area/ruin/space/has_grav/abandoned_warehouse) -"mDY" = ( -/obj/effect/turf_decal/tile/brown/half/contrasted, -/obj/effect/turf_decal/tile/yellow, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "mEg" = ( /turf/closed/wall/r_wall/rust, /area/station/security/prison/mess) @@ -39950,6 +40087,22 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/medbay/central) +"mEz" = ( +/obj/structure/table, +/obj/item/toy/cards/deck{ + pixel_x = -9 + }, +/obj/item/storage/dice{ + pixel_x = -8; + pixel_y = 11 + }, +/obj/item/storage/photo_album/prison{ + pixel_x = 8; + pixel_y = -3 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/grimy, +/area/station/security/prison) "mEH" = ( /obj/effect/turf_decal/box/corners, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -40016,14 +40169,23 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/primary/fore) -"mGi" = ( -/obj/effect/landmark/event_spawn, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/medbay/central) +"mGe" = ( +/obj/structure/table, +/obj/item/clothing/head/utility/welding{ + pixel_y = 4 + }, +/obj/machinery/camera/directional/north{ + c_tag = "Tool Storage"; + name = "engineering camera"; + network = list("ss13","engine") + }, +/obj/structure/cable, +/obj/item/clothing/gloves/color/fyellow, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/station/commons/storage/primary) "mGj" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -40041,17 +40203,34 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) -"mHa" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +"mGw" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/computer/records/security{ + dir = 4 + }, +/obj/machinery/newscaster/directional/west, +/obj/machinery/camera/directional/west{ + c_tag = "Security Office Computers" + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"mGO" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, /obj/effect/decal/cleanable/dirt, /obj/structure/cable, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/components/unary/airlock_pump/unbolt_only{ dir = 4 }, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage/gas) +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) "mHc" = ( /obj/machinery/door/airlock/command{ name = "Captain's Office" @@ -40086,15 +40265,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/service/chapel) -"mHh" = ( -/obj/effect/turf_decal/bot, -/obj/structure/reagent_dispensers/water_cooler, -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/commons/fitness/recreation) "mHm" = ( /obj/effect/landmark/start/depsec/medical, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -40131,21 +40301,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"mIi" = ( -/obj/structure/table, -/obj/item/storage/box/bodybags{ - pixel_x = 4; - pixel_y = 6 - }, -/obj/item/storage/box/bodybags{ - pixel_y = 2 - }, -/obj/machinery/light_switch/directional/east, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "mIo" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -40163,18 +40318,18 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/tcoms, /turf/open/floor/iron/dark, /area/station/tcommsat/server) -"mIC" = ( -/obj/machinery/computer/operating{ - dir = 1; - name = "Robotics Operating Computer" +"mIs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/purple{ + dir = 1 }, -/obj/effect/turf_decal/bot, -/obj/item/radio/intercom/directional/south, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 1 }, -/turf/open/floor/iron/dark, -/area/station/science/robotics/lab) +/obj/machinery/light/floor, +/turf/open/floor/iron/showroomfloor, +/area/station/science/lobby) "mIR" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -40206,6 +40361,11 @@ /mob/living/basic/bot/secbot/pingsky, /turf/open/floor/engine, /area/station/ai/satellite/interior) +"mJj" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) "mJk" = ( /obj/machinery/door/poddoor/shutters/preopen{ dir = 1; @@ -40240,28 +40400,31 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/grimy, /area/station/security/prison) -"mJP" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 4; - name = "Nitrogen Outlet" +"mJM" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Cryogenics"; + name = "medical camera"; + network = list("ss13","medical") }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ +/obj/machinery/status_display/evac/directional/east, +/obj/structure/bed/medical{ dir = 4 }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) -"mKe" = ( -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 8 }, -/obj/effect/turf_decal/siding/yellow{ - dir = 1 +/obj/effect/turf_decal/box, +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/dark, +/area/station/medical/treatment_center) +"mKp" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 }, +/obj/machinery/firealarm/directional/north, /turf/open/floor/iron, -/area/station/engineering/lobby) +/area/station/engineering/atmos/pumproom) "mKv" = ( /obj/structure/chair/comfy, /obj/item/radio/intercom/command/directional/north, @@ -40305,6 +40468,20 @@ /obj/machinery/light/small/directional/east, /turf/open/water/no_planet_atmos/deep, /area/station/service/hydroponics/garden) +"mLa" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/atmos/glass{ + name = "Distribution Loop" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) "mLb" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -40335,6 +40512,31 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/execution/education) +"mLz" = ( +/obj/structure/table, +/obj/item/stack/sheet/plasteel/fifty{ + amount = 10; + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/stack/sheet/rglass{ + amount = 50 + }, +/obj/item/stack/sheet/rglass{ + amount = 50 + }, +/obj/item/clothing/shoes/magboots{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/clothing/shoes/magboots, +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/cold/dim/directional/south, +/turf/open/floor/iron/dark, +/area/station/command/eva) "mLE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -40347,9 +40549,6 @@ /obj/machinery/ntnet_relay, /turf/open/floor/circuit/green/telecomms/mainframe, /area/station/tcommsat/server) -"mLN" = ( -/turf/closed/wall, -/area/station/maintenance/disposal/incinerator) "mLP" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -40357,6 +40556,11 @@ /obj/effect/turf_decal/tile/neutral/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/security/office) +"mLV" = ( +/obj/effect/turf_decal/bot/right, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "mMa" = ( /obj/effect/turf_decal/bot, /obj/structure/closet/crate/freezer/blood, @@ -40382,10 +40586,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) -"mMu" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/ai/upload/chamber) "mMv" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, @@ -40408,11 +40608,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"mMB" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, -/turf/closed/wall/r_wall, -/area/station/engineering/supermatter/engine) "mMJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes/corner{ @@ -40423,6 +40618,20 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"mML" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"mMY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/station/engineering/atmos) "mNm" = ( /turf/closed/wall/r_wall/rust, /area/station/security/execution/education) @@ -40487,18 +40696,6 @@ /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/security/execution/education) -"mOg" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/engineering/atmos) "mOz" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -40512,27 +40709,22 @@ }, /turf/open/floor/iron, /area/station/command/bridge) -"mOC" = ( -/obj/machinery/camera/directional/east{ - c_tag = "Transferring Centre" +"mPm" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) +"mPw" = ( +/obj/effect/turf_decal/box, +/obj/structure/fluff/shower_drain, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 +/obj/machinery/shower/directional/west{ + name = "emergency shower" }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/iron, -/area/station/security/processing) -"mPB" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/newscaster/directional/north, -/obj/machinery/computer/security/qm, -/obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, -/area/station/command/heads_quarters/qm) +/area/station/engineering/main) "mPC" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, @@ -40582,6 +40774,38 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"mPW" = ( +/obj/structure/rack, +/obj/effect/turf_decal/bot, +/obj/item/storage/box/bodybags{ + pixel_y = 5 + }, +/obj/item/storage/medkit/regular{ + empty = 1; + name = "First-Aid (empty)" + }, +/obj/item/storage/medkit/regular{ + empty = 1; + name = "First-Aid (empty)" + }, +/obj/item/storage/medkit/regular{ + empty = 1; + name = "First-Aid (empty)" + }, +/obj/item/stack/package_wrap, +/obj/item/healthanalyzer, +/obj/item/healthanalyzer, +/obj/item/healthanalyzer, +/obj/machinery/camera/directional/north{ + c_tag = "Robotics Lab"; + name = "science camera"; + network = list("ss13","rd") + }, +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/dark, +/area/station/science/robotics/lab) "mQe" = ( /obj/effect/turf_decal/bot, /obj/machinery/holopad, @@ -40595,26 +40819,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/construction/mining/aux_base) -"mQs" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/light/warm/directional/south, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "mQu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/showroomfloor, /area/station/security/checkpoint/science) -"mQB" = ( -/obj/effect/turf_decal/arrows/white, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "mQN" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -40644,12 +40854,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine, /area/station/ai/satellite/atmos) -"mQW" = ( -/obj/effect/turf_decal/box/white{ - color = "#EFB341" - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "mQY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -40738,31 +40942,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/security/execution/education) -"mRV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft) -"mSe" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/high, -/obj/item/screwdriver{ - pixel_y = 18 - }, -/obj/item/radio/intercom/directional/south, -/obj/machinery/firealarm/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/commons/fitness/recreation) "mSf" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible{ dir = 4 @@ -40780,30 +40959,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/fore) -"mSm" = ( -/obj/structure/table, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = -7 - }, -/obj/machinery/camera/directional/east{ - c_tag = "Incinerator Entrance"; - name = "atmospherics camera"; - network = list("ss13","engine") - }, -/obj/item/hfr_box/body/fuel_input, -/obj/item/hfr_box/body/interface, -/obj/item/hfr_box/body/moderator_input, -/obj/item/hfr_box/body/waste_output, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "mSq" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/dirt, @@ -40812,25 +40967,34 @@ }, /turf/open/floor/plating, /area/ruin/space/has_grav/abandoned_warehouse) -"mSs" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 +"mSx" = ( +/obj/machinery/firealarm/directional/west, +/obj/machinery/camera/directional/south{ + c_tag = "Laser Room Port"; + name = "laser room camera"; + network = list("ss13","engine") }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) "mSC" = ( /obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/shower/directional/west{ + name = "emergency shower" + }, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/effect/turf_decal/box/corners{ dir = 1 }, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) +/obj/structure/fluff/shower_drain, +/turf/open/floor/iron/textured_large, +/area/station/engineering/atmos) "mSE" = ( /obj/machinery/door/airlock/grunge{ name = "Crematorium" @@ -40841,16 +41005,14 @@ /obj/effect/mapping_helpers/airlock/access/all/service/crematorium, /turf/open/floor/iron/dark, /area/station/service/chapel/funeral) -"mSM" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage/gas) -"mST" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/turf_decal/delivery, +"mSZ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Security Checkpoint" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/dark, -/area/station/engineering/atmos) +/area/station/hallway/primary/aft) "mTk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -40865,6 +41027,30 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/showroomfloor, /area/station/science) +"mTm" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate/freezer/surplus_limbs, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/surgery/theatre) +"mTn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/hallway/primary/central/fore) "mTz" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -40920,19 +41106,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/iron, /area/station/security/prison) -"mUH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/cardboard, -/obj/structure/sign/warning/no_smoking{ - pixel_x = 30 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/machinery/space_heater, -/obj/machinery/light/small/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/starboard) "mUT" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -40941,16 +41114,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/cargo/bitrunning/den) -"mUV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/yellow, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "mVf" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -40962,31 +41125,6 @@ /obj/effect/turf_decal/tile/purple/half/contrasted, /turf/open/floor/iron/showroomfloor, /area/station/command/heads_quarters/rd) -"mVo" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/hallway) -"mVr" = ( -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/light/warm/directional/west, -/turf/open/floor/iron, -/area/station/engineering/main) "mVu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/shaft_miner, @@ -41041,11 +41179,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/prison) -"mWM" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "mWR" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/disposalpipe/segment, @@ -41099,12 +41232,34 @@ /obj/structure/sign/poster/contraband/random/directional/south, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) +"mXS" = ( +/obj/effect/landmark/start/warden, +/obj/structure/chair/office, +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) "mYv" = ( /obj/effect/turf_decal/siding/thinplating/dark/end{ dir = 8 }, /turf/open/floor/glass/reinforced, /area/station/service/chapel/monastery) +"mYM" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/door/window/left/directional/east{ + name = "Inner Pipe Access"; + req_access = list("atmospherics") + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "mYV" = ( /obj/structure/chair{ dir = 8 @@ -41128,17 +41283,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"mZb" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "mZn" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/crate, @@ -41150,7 +41294,11 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/burnt_floor, /obj/structure/reagent_dispensers/plumbed, -/turf/open/floor/plating, +/obj/effect/turf_decal/delivery/white{ + color = "#52B4E9" + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron/dark, /area/station/maintenance/starboard/aft) "mZF" = ( /obj/effect/turf_decal/stripes/corner{ @@ -41175,6 +41323,25 @@ /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/plating, /area/station/maintenance/disposal) +"mZN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmos) "mZO" = ( /obj/structure/chair, /obj/effect/landmark/start/hangover, @@ -41194,13 +41361,21 @@ }, /turf/open/floor/plating, /area/station/maintenance/fore) -"mZT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, -/turf/closed/wall/rust, -/area/space/nearstation) "mZW" = ( /turf/closed/wall/r_wall, /area/station/service/bar/atrium) +"nae" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden, +/turf/open/floor/iron, +/area/station/engineering/hallway) "nam" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/caution/stand_clear, @@ -41216,6 +41391,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/engineering/main) +"nar" = ( +/obj/machinery/conveyor/inverted{ + dir = 6; + id = "mining" + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/cargo/miningoffice) "nas" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 4 @@ -41271,22 +41454,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"naO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/mapping_helpers/burnt_floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/plating, -/area/station/hallway/secondary/entry) -"naQ" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "naY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -41302,15 +41469,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/medical/office) -"nbn" = ( -/obj/effect/turf_decal/bot, -/obj/structure/rack, -/obj/structure/grille/broken, -/obj/item/wallframe/apc, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/aft) "nbu" = ( /obj/structure/table, /obj/machinery/recharger, @@ -41335,15 +41493,6 @@ /obj/item/radio/intercom/prison/directional/south, /turf/open/floor/iron/white, /area/station/security/prison/mess) -"nbG" = ( -/obj/machinery/vending/dinnerware, -/obj/effect/turf_decal/bot, -/obj/machinery/newscaster/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/service/kitchen) "nbH" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -41385,6 +41534,19 @@ /obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/iron/dark, /area/station/hallway/primary/central/fore) +"nbV" = ( +/obj/effect/turf_decal/tile/blue, +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/box, +/obj/machinery/vitals_reader/directional/east, +/obj/structure/bed/medical{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/medical/treatment_center) "nbZ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -41394,16 +41556,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel/monastery) -"nce" = ( -/obj/machinery/vending/wardrobe/sec_wardrobe, -/obj/effect/turf_decal/bot, -/obj/structure/reagent_dispensers/wall/peppertank/directional/west, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/dark, -/area/station/security/lockers) "ncj" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -41413,10 +41565,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"nct" = ( -/obj/structure/sign/warning, -/turf/closed/wall/r_wall, -/area/station/security/prison/safe) "ncz" = ( /obj/structure/flora/bush/pale/style_random, /turf/open/misc/asteroid, @@ -41453,6 +41601,10 @@ "ncH" = ( /turf/open/floor/iron, /area/station/cargo/storage) +"ncM" = ( +/obj/item/pickaxe, +/turf/open/misc/asteroid/airless, +/area/space/nearstation) "ncQ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -41477,53 +41629,38 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark, /area/station/command/bridge) -"ndj" = ( -/obj/effect/decal/cleanable/dirt, +"ncU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) -"ndq" = ( -/obj/machinery/door/poddoor/shutters{ - id = "secmechbay"; - name = "Security Mech Bay Shutters"; - dir = 1 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 }, -/turf/open/floor/plating, -/area/station/security/mechbay) +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/medbay/central) "ndz" = ( /obj/machinery/smartfridge/extract/preloaded, /turf/open/floor/iron/dark, /area/station/science/xenobiology) -"ndC" = ( -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 1 +"ndN" = ( +/obj/machinery/ai_slipper{ + uses = 10 }, -/turf/open/floor/iron/cafeteria, -/area/station/security/prison/garden) -"ndP" = ( -/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ - dir = 4 +/obj/effect/turf_decal/box, +/obj/machinery/flasher/directional/north{ + id = "AI"; + name = "Meatbag Pacifier"; + pixel_x = 26 }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 +/obj/machinery/camera/directional/south{ + c_tag = "AI Chamber Core"; + name = "core camera"; + network = list("aicore") }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) +/turf/open/floor/engine, +/area/station/ai/satellite/chamber) "ndS" = ( /obj/effect/turf_decal/loading_area{ dir = 4 @@ -41536,16 +41673,6 @@ /obj/effect/landmark/start/cook, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) -"nec" = ( -/obj/effect/turf_decal/arrows/white{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "nep" = ( /obj/structure/cable, /obj/machinery/modular_computer/preset/command, @@ -41603,6 +41730,15 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/central) +"nfc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "nfd" = ( /obj/structure/sign/warning/vacuum/external, /turf/closed/wall, @@ -41613,18 +41749,6 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) -"nfF" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/requests_console/directional/east{ - department = "Pharmacy"; - name = "Pharmacy Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/ore_update, -/obj/effect/mapping_helpers/requests_console/supplies, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, -/obj/machinery/chem_dispenser, -/turf/open/floor/iron/dark, -/area/station/medical/pharmacy) "nfI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -41674,6 +41798,19 @@ }, /turf/open/floor/plating, /area/ruin/space/has_grav/abandoned_warehouse) +"ngB" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/medbay/central) "ngF" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/burnt_floor, @@ -41690,18 +41827,6 @@ /obj/effect/decal/remains/human, /turf/open/floor/plating, /area/station/maintenance/fore) -"nhc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/table_frame, -/obj/machinery/camera/directional/north{ - c_tag = "Incinerator"; - name = "atmospherics camera"; - network = list("ss13","engine") - }, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "nhd" = ( /obj/machinery/flasher/directional/north{ id = "AI"; @@ -41738,44 +41863,18 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/dark, /area/station/maintenance/port/aft) -"nhO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 4 - }, -/obj/effect/landmark/start/atmospheric_technician, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) "nhZ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/burnt_floor, /obj/machinery/light/small/directional/west, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"nie" = ( -/obj/structure/sign/warning/fire, -/turf/closed/wall/r_wall, -/area/station/maintenance/disposal/incinerator) "nig" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, /turf/open/misc/asteroid, /area/space/nearstation) -"nim" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, -/obj/structure/chair/stool/directional/south, -/obj/structure/cable, -/obj/effect/landmark/navigate_destination/incinerator, -/turf/open/floor/engine, -/area/station/maintenance/disposal/incinerator) "niy" = ( /obj/machinery/photocopier, /obj/effect/turf_decal/box/white, @@ -41783,11 +41882,29 @@ /obj/effect/turf_decal/tile/neutral/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/security/courtroom) +"niJ" = ( +/obj/effect/landmark/start/scientist, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/machinery/light/floor, +/turf/open/floor/iron/showroomfloor, +/area/station/science/xenobiology) "niQ" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/department/bridge) +"niX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light/warm/directional/south, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "njd" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -41893,6 +42010,14 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/genetics) +"nlz" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/ai/upload/chamber) "nlA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, @@ -41900,27 +42025,6 @@ "nlR" = ( /turf/closed/wall/rust, /area/station/medical/pharmacy) -"nlT" = ( -/obj/item/radio/intercom/directional/south, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 4 - }, -/obj/item/flatpack/flatpacker, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/red, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) -"nme" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 4 - }, -/obj/effect/landmark/start/assistant, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/wood, -/area/station/service/chapel/monastery) "nmq" = ( /obj/machinery/conveyor_switch/oneway{ dir = 8; @@ -41959,6 +42063,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/showroomfloor, /area/station/science/auxlab) +"nmL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/cargo/office) "nmR" = ( /obj/machinery/modular_computer/preset/id{ dir = 8 @@ -41976,21 +42089,38 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) -"nnd" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, +"nni" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/ai/satellite/atmos) +"nnk" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, -/area/space/nearstation) -"nny" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage/gas) +/area/station/engineering/atmos/storage) +"nnv" = ( +/obj/structure/table, +/obj/item/tank/internals/emergency_oxygen{ + pixel_x = 6 + }, +/obj/item/tank/internals/emergency_oxygen{ + pixel_x = -6 + }, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/light/warm/directional/west, +/obj/structure/sign/poster/contraband/atmosia_independence/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) "nnA" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/siding/red{ @@ -42008,6 +42138,23 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/command/teleporter) +"nnX" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) +"nod" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security/processing) "nol" = ( /obj/machinery/disposal/bin/tagger, /obj/effect/turf_decal/bot, @@ -42018,6 +42165,37 @@ /obj/effect/turf_decal/tile/neutral/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/service/hydroponics) +"noq" = ( +/obj/structure/table, +/obj/machinery/processor{ + pixel_y = 6 + }, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/service/kitchen) +"noz" = ( +/obj/item/clothing/mask/gas/sechailer{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/clothing/mask/gas/sechailer, +/obj/item/clothing/mask/gas/sechailer{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/flashlight/seclite, +/obj/item/flashlight/seclite, +/obj/item/flashlight/seclite, +/obj/effect/decal/cleanable/cobweb, +/obj/machinery/airalarm/directional/west, +/obj/structure/table, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/light/small/red/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/armory) "noE" = ( /obj/structure/chair, /obj/effect/turf_decal/tile/red{ @@ -42028,6 +42206,14 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"noK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/light/small/directional/east, +/turf/open/floor/engine, +/area/station/science/auxlab) "noM" = ( /obj/structure/sign/warning/secure_area, /turf/closed/wall, @@ -42105,10 +42291,6 @@ /obj/effect/turf_decal/tile/red, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"npR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/closed/wall, -/area/station/security/checkpoint/engineering) "nqg" = ( /obj/structure/closet/secure_closet/security/cargo, /obj/effect/turf_decal/delivery, @@ -42143,14 +42325,19 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/medical/morgue) -"nqn" = ( -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/machinery/atmospherics/components/tank/air{ +"nqo" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ dir = 1 }, -/turf/open/floor/iron/dark, -/area/station/maintenance/disposal/incinerator) +/turf/open/floor/iron, +/area/station/engineering/atmos) "nqs" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -42159,6 +42346,11 @@ }, /turf/open/floor/engine, /area/station/science/auxlab) +"nqt" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) "nqx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt, @@ -42175,23 +42367,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/xenobiology) -"nqF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/highsecurity{ - name = "AI Upload" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, -/obj/effect/landmark/navigate_destination/aiupload, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/ai/upload/chamber) "nqX" = ( /obj/structure/lattice, /obj/structure/disposalpipe/segment{ @@ -42202,6 +42377,18 @@ /obj/structure/cable, /turf/open/space/basic, /area/space/nearstation) +"nrb" = ( +/obj/item/kirbyplants/organic/plant5, +/obj/structure/noticeboard/directional/east, +/obj/item/paper/monitorkey, +/obj/machinery/camera/directional/east{ + c_tag = "Chief Engineer's Office"; + name = "engineering camera"; + network = list("ss13","engine") + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) "nrh" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/abandoned, @@ -42228,11 +42415,13 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/pharmacy) -"nrm" = ( -/obj/item/nullrod, -/obj/structure/table/wood, -/turf/open/floor/cult, -/area/station/service/chapel/office) +"nrp" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/structure/sign/warning/hot_temp/directional/west, +/turf/open/floor/plating/airless, +/area/space/nearstation) "nrv" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -42242,6 +42431,10 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"nrz" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/ai/upload/chamber) "nrB" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/grille/broken, @@ -42337,17 +42530,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/construction/mining/aux_base) -"ntf" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/airalarm/directional/south, -/obj/machinery/atmospherics/components/binary/valve/digital/on{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "ntn" = ( /obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -42365,6 +42547,16 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/bitrunning/den) +"nts" = ( +/obj/structure/closet/radiation, +/obj/item/clothing/glasses/meson, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) "ntE" = ( /obj/structure/sign/departments/security/directional/west, /obj/structure/disposalpipe/segment, @@ -42389,10 +42581,6 @@ /obj/effect/decal/cleanable/blood/old, /turf/open/floor/plating, /area/station/maintenance/department/electrical) -"ntH" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "nuf" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, @@ -42402,6 +42590,12 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) +"nuj" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos/pumproom) "nul" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -42412,47 +42606,11 @@ /turf/open/floor/plating, /area/station/maintenance/port/greater) "nuo" = ( -/obj/effect/turf_decal/stripes/corner, /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/aft) -"nuy" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/assembly/prox_sensor{ - desc = "Used for scanning and alerting when someone enters a certain proximity. This one is slightly shifted to the left."; - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/assembly/prox_sensor{ - desc = "Used for scanning and alerting when someone enters a certain proximity. This one is slightly shifted to the left."; - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/assembly/prox_sensor{ - desc = "Used for scanning and alerting when someone enters a certain proximity. This one is slightly shifted to the left."; - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/assembly/prox_sensor{ - desc = "Used for scanning and alerting when someone enters a certain proximity. This one is slightly shifted to the left."; - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/stock_parts/power_store/cell/high, -/obj/item/stock_parts/power_store/cell/high, -/obj/item/stock_parts/power_store/cell/high, -/obj/item/crowbar/red, -/obj/item/toy/figure/roboticist{ - pixel_x = 6 - }, -/obj/machinery/light_switch/directional/north, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/science/robotics/lab) "nuz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -42478,6 +42636,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/misc/asteroid/airless, /area/space/nearstation) +"nuP" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/structure/closet/secure_closet/atmospherics, +/obj/item/pickaxe/mini, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) "nuS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -42501,6 +42667,25 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) +"nvk" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L9" + }, +/obj/machinery/camera/directional/north{ + c_tag = "Fore Hallway Centre"; + name = "fore camera" + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "nvq" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 1 @@ -42510,6 +42695,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, /turf/open/floor/iron/showroomfloor, /area/station/science/genetics) "nvA" = ( @@ -42565,6 +42752,37 @@ }, /turf/open/floor/plastic, /area/station/hallway/secondary/service) +"nvQ" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/plating, +/area/station/hallway/secondary/entry) +"nvU" = ( +/obj/machinery/button/door/atmos_test_room_mainvent_1{ + pixel_y = -26; + name = "Axuiliary Chamber Vent Control" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Aux Output" + }, +/obj/effect/turf_decal/tile/bar/fourcorners, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/atmos) +"nwd" = ( +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "nwf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -42594,13 +42812,6 @@ /obj/effect/turf_decal/tile/purple/half/contrasted, /turf/open/floor/iron/showroomfloor, /area/station/science/genetics) -"nwu" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/airalarm/directional/north, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/structure/closet/secure_closet/atmospherics, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "nwE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -42624,16 +42835,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"nwN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "nwP" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/effect/turf_decal/tile/purple/anticorner/contrasted, @@ -42697,6 +42898,14 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/lobby) +"nxo" = ( +/obj/structure/closet/secure_closet/hydroponics, +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/newscaster/directional/south, +/obj/effect/turf_decal/tile/green/fourcorners, +/turf/open/floor/iron/checker, +/area/station/service/hydroponics) "nxx" = ( /obj/structure/lattice/catwalk, /obj/structure/disposalpipe/segment, @@ -42705,22 +42914,14 @@ /obj/structure/cable, /turf/open/space/basic, /area/space/nearstation) -"nxX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/carpet/green, -/area/station/service/lawoffice) -"nxY" = ( -/obj/structure/extinguisher_cabinet/directional/east, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ +"nya" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/effect/turf_decal/siding/thinplating/dark{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos) +/turf/open/floor/grass, +/area/station/service/chapel) "nym" = ( /obj/machinery/door/airlock/maintenance{ name = "Engineering Maintenance" @@ -42729,26 +42930,19 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"nyA" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/table, -/obj/item/storage/belt/utility, -/turf/open/floor/iron, -/area/station/engineering/lobby) +"nyE" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/service/chapel/dock) "nyN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/computer/security/telescreen/research/directional/west, /turf/open/floor/iron/showroomfloor, /area/station/security/checkpoint/science) -"nyV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/ai/upload/chamber) "nzz" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/line{ @@ -42771,14 +42965,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"nzR" = ( -/obj/effect/landmark/start/warden, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/showroomfloor, -/area/station/security/warden) "nzW" = ( /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 4 @@ -42805,6 +42991,33 @@ /obj/effect/turf_decal/stripes/corner, /turf/open/floor/engine, /area/station/ai/satellite/atmos) +"nAl" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/airlock/atmos/glass{ + name = "Auxiliary Chamber" + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/atmos) +"nAq" = ( +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/tile/green/half/contrasted, +/obj/machinery/light/cold/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/virology) +"nAw" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "nAE" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -42829,24 +43042,6 @@ }, /turf/open/floor/plating, /area/station/security/detectives_office) -"nBd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) -"nBl" = ( -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/pharmacy) "nBD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -42883,6 +43078,12 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/break_room) +"nCa" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/crate_abandoned, +/obj/machinery/light/warm/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) "nCc" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, @@ -42891,9 +43092,45 @@ /obj/effect/turf_decal/delivery, /obj/structure/closet/radiation, /obj/item/clothing/glasses/meson, -/obj/item/radio/intercom/directional/south, +/obj/structure/sign/warning/radiation/rad_area/directional/east, /turf/open/floor/iron/dark, /area/station/engineering/gravity_generator) +"nCi" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/atmospherics/components/unary/airlock_pump/unbolt_only{ + dir = 8 + }, +/obj/effect/turf_decal/bot, +/obj/structure/sign/warning/vacuum/external/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"nCo" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/cargo/miningdock) +"nCq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/red{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/landmark/start/depsec/engineering, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/checkpoint/engineering) "nCs" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -42919,53 +43156,33 @@ dir = 8 }, /area/station/hallway/primary/fore) +"nCF" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 6 + }, +/turf/closed/wall/r_wall, +/area/station/engineering/supermatter/engine) "nCI" = ( /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron/dark, /area/station/command/bridge) -"nCK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 4 - }, -/obj/machinery/light/directional/south, -/obj/machinery/airalarm/directional/south, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) -"nCL" = ( -/turf/open/floor/plating, -/area/station/maintenance/port/lesser) -"nDi" = ( -/obj/machinery/meter, +"nCJ" = ( /obj/effect/turf_decal/stripes/line{ - dir = 10 + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 8 +/obj/effect/turf_decal/tile/blue, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Mix to Distro" }, -/obj/effect/turf_decal/tile/blue/opposingcorners, /turf/open/floor/iron, -/area/station/engineering/atmos) -"nDk" = ( -/obj/structure/table/wood, -/obj/structure/cable, -/obj/item/pen/fountain{ - pixel_x = 4 - }, -/obj/item/storage/photo_album/chapel{ - pixel_x = -16 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/grimy, -/area/station/service/chapel/office) +/area/station/engineering/atmos/pumproom) +"nCL" = ( +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) "nDp" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -42975,13 +43192,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard) -"nDu" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/light/floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "nDM" = ( /obj/machinery/button/door/directional/south{ id = "ordnancemix"; @@ -42999,6 +43209,24 @@ /obj/effect/turf_decal/tile/purple/half/contrasted, /turf/open/floor/iron/showroomfloor, /area/station/science/ordnance) +"nDO" = ( +/obj/structure/sign/poster/contraband/self_ai_liberation/directional/west, +/obj/item/kirbyplants/photosynthetic, +/turf/open/floor/circuit, +/area/station/ai/upload/chamber) +"nDR" = ( +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate, +/obj/structure/grille/broken, +/obj/item/clothing/gloves/color/fyellow, +/obj/item/flashlight, +/obj/item/flashlight/flare, +/obj/item/relic, +/obj/structure/sign/poster/contraband/random/directional/west, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/starboard) "nDS" = ( /obj/machinery/photocopier, /obj/effect/turf_decal/bot, @@ -43030,16 +43258,6 @@ /obj/structure/lattice/catwalk, /turf/open/misc/asteroid, /area/station/maintenance/port/greater) -"nEg" = ( -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/orange/visible, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "nEk" = ( /obj/machinery/door/poddoor/shutters{ dir = 8; @@ -43083,11 +43301,6 @@ /obj/item/kirbyplants/organic/plant10, /turf/open/floor/iron/dark, /area/station/science/lobby) -"nEB" = ( -/obj/structure/flora/bush/flowers_pp/style_random, -/obj/effect/turf_decal/siding/thinplating/dark, -/turf/open/floor/grass, -/area/station/service/chapel) "nEQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -43112,11 +43325,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/hydroponics/garden) -"nFl" = ( -/obj/structure/urinal/directional/north, -/obj/machinery/duct, -/turf/open/floor/plating/rust, -/area/station/security/prison/shower) "nFm" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/yellow/half/contrasted{ @@ -43138,14 +43346,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/commons/storage/primary) -"nFw" = ( -/obj/structure/grille/broken, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/aft) "nFy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -43166,6 +43366,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/storage) +"nGa" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/storage) "nGt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -43177,13 +43383,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"nGx" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/security/brig) "nGC" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -43215,37 +43414,6 @@ /obj/structure/cable, /turf/open/floor/engine/telecomms, /area/station/tcommsat/server) -"nGM" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/disposal/bin/tagger, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ - dir = 5 - }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) -"nGT" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/door/window/left/directional/east{ - name = "Inner Pipe Access"; - req_access = list("atmospherics") - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "nHd" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/yellow/half/contrasted{ @@ -43264,6 +43432,35 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"nHH" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ + dir = 6 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/engineering/hallway) +"nHI" = ( +/obj/machinery/door/poddoor/preopen{ + id = "brigfrontdoor"; + name = "Front Security Blast Door" + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/caution/stand_clear, +/turf/open/floor/iron/dark, +/area/station/security/brig) "nHO" = ( /turf/closed/wall/rust, /area/station/service/janitor) @@ -43285,6 +43482,8 @@ /area/station/maintenance/starboard) "nIh" = ( /obj/effect/decal/cleanable/dirt, +/obj/structure/grille/broken, +/obj/structure/sign/warning/directional/south, /turf/open/floor/plating, /area/station/maintenance/aft) "nIq" = ( @@ -43317,6 +43516,16 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"nID" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/station/engineering/atmos) "nIR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -43347,6 +43556,10 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/ai/satellite/interior) +"nJq" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, +/turf/closed/wall/rust, +/area/station/engineering/atmos) "nJv" = ( /obj/structure/filingcabinet, /obj/effect/turf_decal/bot, @@ -43455,6 +43668,14 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/medical/virology) +"nKK" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/turf_decal/delivery, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "nKO" = ( /obj/structure/sign/warning/electric_shock, /turf/closed/wall/r_wall, @@ -43486,21 +43707,28 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/fore) -"nLt" = ( -/obj/structure/table, -/obj/machinery/firealarm/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/item/ai_module/law/supplied/freeform, -/obj/item/ai_module/law/supplied/freeform, -/obj/item/ai_module/law/supplied/freeform, -/turf/open/floor/iron/dark, -/area/station/ai/upload/chamber) "nLT" = ( /obj/docking_port/stationary/escape_pod{ dir = 2 }, /turf/open/space/basic, /area/space) +"nLY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "sci-maint-passthrough" + }, +/obj/effect/mapping_helpers/airlock/access/any/science/maintenance, +/obj/effect/mapping_helpers/airlock/unres/delayed{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/science) "nLZ" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -43515,13 +43743,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"nMh" = ( -/obj/machinery/light_switch/directional/south, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/engine, -/area/station/ai/satellite/interior) "nMj" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -43553,18 +43774,14 @@ /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"nMX" = ( -/obj/machinery/computer/crew{ - dir = 1 - }, -/obj/effect/turf_decal/bot, -/obj/item/radio/intercom/directional/south, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/medical) +"nMT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/security/brig) "nNb" = ( /obj/structure/lattice/catwalk, /turf/open/space/basic, @@ -43631,6 +43848,17 @@ /obj/structure/cable, /turf/open/floor/iron, /area/ruin/space/has_grav/abandoned_warehouse) +"nOO" = ( +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/cargo/sorting) "nOR" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -43662,18 +43890,6 @@ /obj/machinery/incident_display/delam/directional/north, /turf/open/floor/iron/dark, /area/station/engineering/lobby) -"nPx" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wideplating/dark/corner{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "nPS" = ( /obj/structure/rack, /obj/item/storage/toolbox/drone, @@ -43692,6 +43908,7 @@ "nPT" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/aft) "nPV" = ( @@ -43716,6 +43933,13 @@ }, /turf/open/floor/iron/dark, /area/station/service/bar/atrium) +"nQn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/light/dim/directional/west, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) "nQo" = ( /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -43724,6 +43948,19 @@ dir = 1 }, /area/station/service/chapel) +"nQr" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/pharmacy) "nQs" = ( /obj/structure/chair/pew/left{ dir = 4 @@ -43741,6 +43978,12 @@ /obj/effect/turf_decal/box, /turf/open/floor/engine, /area/station/science/xenobiology) +"nQy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/machinery/meter, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/cryo) "nQK" = ( /turf/closed/wall/r_wall/rust, /area/station/security/prison/shower) @@ -43755,19 +43998,24 @@ /obj/machinery/status_display/evac/directional/south, /turf/open/floor/plating, /area/station/cargo/storage) -"nSa" = ( -/obj/effect/turf_decal/bot, -/obj/structure/closet/secure_closet/personal, -/obj/item/storage/backpack, -/obj/item/storage/backpack/satchel, -/obj/item/clothing/suit/hooded/wintercoat, -/obj/item/clothing/shoes/winterboots, +"nQP" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/hallway/primary/fore) +"nRh" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/structure/cable, /obj/machinery/airalarm/directional/north, -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/tile/neutral/half/contrasted, /obj/machinery/light/warm/directional/north, -/turf/open/floor/iron/dark, -/area/station/commons/locker) +/turf/open/floor/iron, +/area/station/security/prison/garden) "nSh" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -43800,10 +44048,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/cargo) -"nTo" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating/airless, -/area/space/nearstation) "nTr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -43817,6 +44061,14 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hop) +"nTv" = ( +/obj/machinery/conveyor/inverted{ + dir = 5; + id = "mining" + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/cargo/miningoffice) "nTz" = ( /obj/structure/table, /obj/item/pen/fountain, @@ -43844,6 +44096,19 @@ /obj/item/stamp/granted, /turf/open/floor/carpet/orange, /area/station/command/heads_quarters/qm) +"nTC" = ( +/obj/structure/table, +/obj/item/clipboard, +/obj/item/airlock_painter{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/airlock_painter, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/hallway) "nTG" = ( /obj/effect/spawner/random/vending/snackvend, /obj/effect/turf_decal/bot, @@ -43858,6 +44123,10 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/iron/dark, /area/station/maintenance/department/bridge) +"nTX" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/space/nearstation) "nUf" = ( /obj/machinery/newscaster/directional/north, /obj/item/kirbyplants/random, @@ -43868,13 +44137,18 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/starboard/fore) +"nUK" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/miningdock) "nUZ" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/turf_decal/delivery, /obj/structure/extinguisher_cabinet/directional/south, /obj/effect/turf_decal/tile/neutral{ dir = 4 }, +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/turf_decal/bot_red, /turf/open/floor/iron/dark, /area/station/engineering/storage_shared) "nVc" = ( @@ -43891,6 +44165,11 @@ /obj/structure/flora/rock/pile/style_random, /turf/open/misc/asteroid, /area/station/maintenance/port/greater) +"nVA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/end, +/turf/open/floor/engine, +/area/station/ai/upload/chamber) "nVK" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -43913,23 +44192,23 @@ /obj/structure/reagent_dispensers/plumbed, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"nWU" = ( -/obj/structure/tank_dispenser, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "nWW" = ( /obj/machinery/iv_drip, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/showroomfloor, /area/station/medical/virology) -"nXg" = ( -/obj/effect/landmark/start/warden, -/obj/structure/chair/office, -/obj/effect/turf_decal/tile/red/half/contrasted, -/turf/open/floor/iron/showroomfloor, -/area/station/security/warden) +"nXh" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/vending/cigarette, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/aft) "nXp" = ( /obj/structure/table/reinforced, /obj/machinery/button/door{ @@ -43976,17 +44255,18 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) -"nYg" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 +"nYh" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/siding/yellow{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /turf/open/floor/iron, -/area/station/hallway/secondary/entry) +/area/station/engineering/lobby) "nYo" = ( /obj/structure/table, /obj/item/storage/backpack/duffelbag/engineering{ @@ -44054,18 +44334,6 @@ /obj/structure/noticeboard/directional/east, /turf/open/floor/plating, /area/station/maintenance/fore) -"nZF" = ( -/obj/effect/turf_decal/siding/yellow{ - dir = 9 - }, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage/gas) "nZG" = ( /obj/structure/lattice/catwalk, /obj/machinery/button/door/directional/east{ @@ -44104,17 +44372,6 @@ "oam" = ( /turf/closed/wall, /area/station/maintenance/disposal) -"oat" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/engineering/atmos) "oay" = ( /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ dir = 1 @@ -44140,37 +44397,23 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"oaK" = ( -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ - dir = 4 - }, -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible, -/turf/open/space/basic, -/area/space/nearstation) -"obh" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/machinery/incident_display/delam/directional/north, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "obi" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/broken_floor, /obj/structure/grille/broken, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"obv" = ( -/obj/structure/displaycase/labcage, -/obj/effect/turf_decal/box, -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 +"obk" = ( +/obj/structure/window/reinforced/plasma/spawner/directional/west, +/obj/structure/cable, +/obj/machinery/power/energy_accumulator/grounding_rod/anchored, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ + dir = 4 }, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/rd) +/turf/open/floor/circuit/green{ + luminosity = 2 + }, +/area/station/engineering/supermatter/engine) "obM" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -44180,21 +44423,6 @@ }, /turf/open/floor/iron/dark, /area/station/commons/locker) -"obO" = ( -/obj/machinery/firealarm/directional/north, -/obj/machinery/camera/directional/north{ - c_tag = "Arrivals Dock"; - name = "shuttle camera" - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/structure/closet/firecloset, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) "obU" = ( /obj/structure/table/glass, /obj/item/clothing/gloves/latex, @@ -44210,17 +44438,6 @@ }, /turf/open/floor/iron/dark, /area/station/medical/virology) -"ocd" = ( -/obj/machinery/atmospherics/components/trinary/filter{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/obj/machinery/light_switch/directional/north, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/science/ordnance) "oce" = ( /obj/structure/flora/bush/lavendergrass/style_random, /obj/structure/flora/bush/sparsegrass/style_random, @@ -44236,6 +44453,9 @@ /obj/structure/cable, /turf/open/floor/plating, /area/ruin/space/has_grav/abandoned_warehouse) +"ock" = ( +/turf/open/floor/plating, +/area/station/maintenance/fore) "ocn" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -44243,6 +44463,16 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/chemistry) +"oco" = ( +/obj/effect/turf_decal/arrows/red{ + dir = 4; + pixel_x = -15 + }, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron/smooth_half{ + dir = 8 + }, +/area/station/engineering/atmos) "oct" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/rack, @@ -44261,6 +44491,7 @@ /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ dir = 4 }, +/obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) "ocz" = ( @@ -44288,14 +44519,17 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"ocQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/red, -/turf/open/floor/iron, -/area/station/engineering/lobby) +"ocP" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/effect/turf_decal/tile/bar/anticorner/contrasted, +/obj/machinery/atmospherics/pipe/bridge_pipe/purple/visible{ + dir = 4 + }, +/obj/structure/railing/corner/end{ + dir = 4 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/atmos) "ocS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -44325,6 +44559,28 @@ /obj/structure/plasticflaps/kitchen, /turf/open/floor/iron/dark, /area/station/science/xenobiology) +"odo" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"ods" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "odA" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating/airless, @@ -44334,20 +44590,18 @@ /obj/structure/flora/bush/pointy/style_random, /turf/open/floor/grass, /area/station/service/hydroponics/garden) +"oeq" = ( +/obj/effect/turf_decal/tile/yellow, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "oeF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/showroomfloor, /area/station/medical/chemistry) -"oeL" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light/floor, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "oeS" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/nitrogen_input{ dir = 4 @@ -44364,18 +44618,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"ofe" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/tile/neutral/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "ofg" = ( /turf/closed/wall, /area/station/medical/pharmacy) @@ -44430,14 +44672,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/aft) -"ofu" = ( -/obj/machinery/power/emitter/welded{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/engineering/supermatter/room) "ofx" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -44459,6 +44693,12 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/medical/paramedic) +"ofC" = ( +/obj/machinery/power/smes/engineering, +/obj/structure/cable, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/circuit/red, +/area/station/engineering/supermatter/room) "ogk" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/brown/half/contrasted{ @@ -44471,20 +44711,6 @@ /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating/lowpressure, /area/space/nearstation) -"ohe" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 4 - }, -/obj/structure/sign/warning/vacuum/external/directional/south, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/machinery/duct, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "ohj" = ( /obj/effect/turf_decal/loading_area{ dir = 8 @@ -44507,6 +44733,26 @@ /obj/structure/sign/warning/docking, /turf/closed/wall, /area/station/cargo/miningdock) +"ohU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/siding/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) "oic" = ( /obj/structure/chair/sofa/bench/left{ dir = 4 @@ -44556,22 +44802,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/xenobiology) -"oix" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 1 - }, -/obj/effect/turf_decal/box, -/obj/machinery/portable_atmospherics/canister, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/maintenance/disposal/incinerator) "oiE" = ( /obj/machinery/computer/order_console/mining, /obj/effect/turf_decal/bot, @@ -44599,31 +44829,37 @@ /obj/effect/decal/cleanable/blood/old, /turf/open/floor/iron, /area/station/cargo/warehouse) +"oiL" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/atmos) "oiO" = ( /turf/closed/wall/mineral/bronze, /area/station/maintenance/department/chapel) -"oiR" = ( -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, -/obj/machinery/portable_atmospherics/scrubber, -/obj/machinery/light/warm/directional/north, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "oiS" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"oiU" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) "oiV" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/remains/human, @@ -44638,11 +44874,6 @@ }, /turf/open/floor/carpet/green, /area/station/service/lawoffice) -"ojG" = ( -/obj/effect/landmark/event_spawn, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "ojZ" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -44653,32 +44884,18 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "oki" = ( -/obj/machinery/airalarm/directional/west, -/obj/machinery/status_display/evac/directional/north, /obj/effect/decal/cleanable/cobweb, /obj/structure/cable, /obj/machinery/power/smes/full, +/obj/machinery/airalarm/directional/north, +/obj/item/radio/intercom/directional/west, /turf/open/floor/circuit/green{ luminosity = 2 }, /area/station/engineering/gravity_generator) -"okk" = ( -/obj/machinery/atmospherics/pipe/smart/simple/green/visible, -/obj/structure/lattice/catwalk, -/turf/open/space/basic, -/area/space/nearstation) "okp" = ( /turf/closed/wall/r_wall/rust, /area/station/engineering/supermatter/engine) -"okq" = ( -/obj/machinery/portable_atmospherics/scrubber, -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/obj/effect/turf_decal/box, -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/engineering/atmos) "okt" = ( /obj/machinery/door/window/left/directional/east{ name = "Creature Cell"; @@ -44693,29 +44910,6 @@ }, /turf/open/floor/iron/dark, /area/station/science/xenobiology) -"okE" = ( -/obj/structure/table, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/gloves/latex, -/obj/item/storage/box/monkeycubes{ - pixel_x = 2; - pixel_y = 5 - }, -/obj/item/storage/box/monkeycubes{ - pixel_y = 3 - }, -/obj/effect/turf_decal/siding/purple/corner{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 1 - }, -/obj/item/paper/crumpled{ - default_raw_text = "This isn't funny, I'm trapped on the least fun room on the station."; - name = "poorly written complaint" - }, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "okJ" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ @@ -44725,9 +44919,49 @@ /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"okM" = ( +/obj/item/kirbyplants/organic/plant21, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/station/hallway/primary/central/fore) "okN" = ( /turf/closed/wall/rust, /area/station/service/bar/backroom) +"okT" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 5 + }, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"oln" = ( +/obj/machinery/computer/records/security{ + dir = 4 + }, +/obj/machinery/requests_console/directional/north{ + department = "Security"; + name = "Security Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/station/security/checkpoint/science) "olv" = ( /obj/structure/flora/bush/grassy/style_random, /obj/structure/flora/bush/sparsegrass/style_random, @@ -44742,18 +44976,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/hallway/primary/aft) -"olF" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/machinery/button/door/directional/south{ - id = "morgueprivacy"; - name = "Morgue Privacy Shutter"; - pixel_x = -8 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "olL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -44786,6 +45008,14 @@ }, /turf/open/floor/iron/checker, /area/station/security/mechbay) +"olY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/ai/upload/chamber) "omi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/medical_doctor, @@ -44805,21 +45035,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/showroomfloor, /area/station/medical/medbay/central) -"omr" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "packagereturn"; - name = "crate return belt" - }, -/obj/effect/turf_decal/bot, -/obj/machinery/camera/directional/south{ - c_tag = "Delivery Office"; - name = "cargo camera"; - network = list("ss13","qm") - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/dark, -/area/station/cargo/sorting) "omH" = ( /obj/machinery/door/poddoor/shutters{ id = "Skynet_launch"; @@ -44858,6 +45073,15 @@ luminosity = 2 }, /area/station/science/robotics/mechbay) +"onj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "onm" = ( /obj/structure/rack, /obj/effect/turf_decal/bot, @@ -44884,20 +45108,6 @@ /obj/item/circuitboard/machine/telecomms/processor, /turf/open/floor/iron/dark, /area/station/engineering/storage/tcomms) -"onn" = ( -/obj/structure/cable, -/obj/effect/turf_decal/siding/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/command/heads_quarters/ce) "ons" = ( /obj/machinery/recharger{ pixel_x = -7 @@ -44927,27 +45137,15 @@ }, /turf/open/floor/iron/dark, /area/station/security/warden) -"onu" = ( -/obj/structure/closet/secure_closet/security/sec, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, -/turf/open/floor/iron/dark, -/area/station/security/lockers) -"ooo" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/airalarm/directional/south, -/obj/structure/disposalpipe/trunk{ +"ool" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/machinery/disposal/bin/tagger, -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/pharmacy) +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/effect/turf_decal/box, +/obj/machinery/light/warm/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/station/engineering/supermatter/room) "oou" = ( /obj/machinery/telecomms/receiver/preset_right, /obj/effect/turf_decal/stripes/line{ @@ -44960,13 +45158,6 @@ }, /turf/open/floor/circuit/green/telecomms/mainframe, /area/station/tcommsat/server) -"oow" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "ooR" = ( /obj/structure/transit_tube/crossing, /obj/structure/disposalpipe/segment{ @@ -44974,6 +45165,11 @@ }, /turf/open/floor/plating, /area/station/maintenance/fore) +"opy" = ( +/obj/machinery/suit_storage_unit/industrial/loader, +/obj/machinery/light/warm/directional/south, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "opL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -45001,6 +45197,14 @@ /obj/structure/flora/grass/jungle/b/style_5, /turf/open/misc/asteroid, /area/station/maintenance/port/greater) +"oqC" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/newscaster/directional/south, +/obj/machinery/light/cold/dim/directional/south, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/station/medical/coldroom) "oqN" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering{ @@ -45009,13 +45213,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/tech_storage, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) -"oqW" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos/pumproom) "ore" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes/corner{ @@ -45060,34 +45257,18 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"orI" = ( -/obj/machinery/teleport/station, -/obj/machinery/status_display/evac/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 +"orG" = ( +/obj/machinery/door/poddoor/preopen{ + id = "brigfrontdoor"; + name = "Front Security Blast Door" }, /turf/open/floor/iron/dark, -/area/station/command/teleporter) +/area/station/security/brig) "orT" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, /turf/open/floor/plating, /area/station/tcommsat/computer) -"orW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/showroomfloor, -/area/station/science) "orY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/extinguisher_cabinet/directional/south, @@ -45141,13 +45322,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"otn" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/effect/spawner/random/gizmo, -/turf/open/floor/engine, -/area/station/science/auxlab) "otr" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -45169,40 +45343,26 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"ouk" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +"otT" = ( +/obj/machinery/newscaster/directional/south, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"oub" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/engineering/atmos) +/turf/open/floor/plating, +/area/station/maintenance/central) "oup" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/engineering/atmos) -"ouC" = ( -/obj/effect/turf_decal/stripes/line, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron, -/area/station/engineering/atmos) -"ouE" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "ouM" = ( /obj/structure/cable, /obj/effect/landmark/start/hangover, @@ -45213,18 +45373,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/space/basic, /area/space/nearstation) -"ouX" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) "ova" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -45287,35 +45435,6 @@ /obj/structure/cable, /turf/open/floor/iron/grimy, /area/station/hallway/primary/fore) -"owl" = ( -/obj/structure/table, -/obj/item/mmi, -/obj/item/bodypart/chest/robot{ - pixel_y = 4 - }, -/obj/item/bodypart/leg/right/robot{ - pixel_x = 6 - }, -/obj/item/bodypart/arm/right/robot{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/bodypart/leg/left/robot{ - pixel_x = -6 - }, -/obj/item/bodypart/arm/left/robot{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/bodypart/head/robot, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/storage/tech) "owm" = ( /obj/effect/turf_decal/bot, /obj/effect/turf_decal/stripes/corner, @@ -45390,14 +45509,6 @@ }, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) -"owT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ - dir = 10 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos/pumproom) "owX" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -45409,65 +45520,6 @@ /obj/item/kirbyplants/organic/plant21, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"oxn" = ( -/obj/effect/turf_decal/box, -/obj/structure/cable, -/obj/machinery/power/shieldwallgen/xenobiologyaccess, -/obj/effect/mapping_helpers/burnt_floor, -/obj/structure/sign/warning/gas_mask/directional/north, -/turf/open/floor/plating, -/area/station/science/xenobiology) -"oxG" = ( -/obj/item/canvas/nineteen_nineteen, -/obj/item/canvas/nineteen_nineteen, -/obj/item/canvas/nineteen_nineteen, -/obj/item/canvas/nineteen_nineteen, -/obj/structure/table/rolling, -/obj/item/storage/crayons{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/effect/spawner/random/contraband/prison, -/obj/item/storage/crayons{ - pixel_x = -6; - pixel_y = 1 - }, -/obj/item/paper_bin{ - pixel_x = 11; - pixel_y = 4 - }, -/obj/item/pen{ - pixel_x = 13; - pixel_y = 9 - }, -/obj/item/pen{ - pixel_x = 11; - pixel_y = 6 - }, -/obj/item/pen{ - pixel_x = 11; - pixel_y = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron/grimy, -/area/station/security/prison) -"oxJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/siding/yellow{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/ce) "oxK" = ( /obj/structure/table, /obj/machinery/light/small/directional/north, @@ -45479,6 +45531,20 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/dark, /area/station/maintenance/port/greater) +"oxY" = ( +/obj/machinery/portable_atmospherics/scrubber, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/machinery/firealarm/directional/south{ + pixel_x = -5 + }, +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/tile/red/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/hallway) "oyA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -45496,18 +45562,17 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"oyK" = ( +/obj/structure/closet/secure_closet/security/sec, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, +/turf/open/floor/iron/dark, +/area/station/security/lockers) "oyP" = ( /obj/effect/landmark/start/hangover, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/security/courtroom) -"ozk" = ( -/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ - dir = 9 - }, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) "ozt" = ( /obj/structure/chair/office/light, /obj/effect/landmark/start/depsec/medical, @@ -45578,7 +45643,8 @@ }, /obj/machinery/portable_atmospherics/canister/nitrogen, /obj/effect/turf_decal/box, -/turf/open/floor/iron/dark, +/obj/structure/sign/warning/fire/directional/west, +/turf/open/floor/iron/dark/textured_large, /area/station/engineering/supermatter/room) "oAo" = ( /obj/structure/cable, @@ -45587,19 +45653,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/port) -"oAF" = ( -/obj/structure/bed, -/obj/machinery/iv_drip, -/obj/effect/turf_decal/bot_white/right, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/item/bedsheet/medical, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/medical/medbay/central) "oAJ" = ( /obj/effect/turf_decal/bot, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -45707,17 +45760,14 @@ /obj/machinery/button/door/directional/west{ id = "gravity"; name = "Gravity Generator Lockdown"; - req_one_access = list("command","tech_storage") + req_one_access = list("command","tech_storage"); + pixel_x = -26 }, /turf/open/floor/engine, /area/station/engineering/gravity_generator) "oCo" = ( -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, +/obj/effect/turf_decal/tile/red, /turf/open/floor/iron, /area/station/engineering/main) "oCr" = ( @@ -45791,36 +45841,28 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark/corner, /area/station/hallway/primary/central/fore) +"oCU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/ash{ + pixel_y = 6; + pixel_x = -3 + }, +/turf/open/floor/plating, +/area/station/maintenance/aft) "oDh" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/structure/table, -/obj/item/stock_parts/power_store/cell/emproof{ - pixel_x = 6; - pixel_y = -6 - }, -/obj/item/grenade/chem_grenade/smart_metal_foam{ - pixel_x = 6 - }, -/obj/item/grenade/chem_grenade/smart_metal_foam{ - pixel_x = -2 +/obj/effect/turf_decal/bot, +/obj/structure/rack, +/obj/item/storage/box/lights/mixed{ + pixel_y = 3 }, -/obj/item/crowbar, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/cable_coil, +/obj/item/screwdriver, /turf/open/floor/iron/dark, /area/station/engineering/main) -"oDt" = ( -/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ - dir = 8 - }, -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible, -/turf/open/space/basic, -/area/space/nearstation) "oDG" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -45842,6 +45884,19 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, /area/station/security/execution/transfer) +"oEQ" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "ceprivate"; + name = "Chief Engineer's Privacy Shutters" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/lobby) "oFf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, @@ -45853,13 +45908,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"oFk" = ( -/obj/structure/transit_tube/curved/flipped{ - dir = 1 - }, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) "oFl" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -45906,6 +45954,22 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) +"oGt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ + dir = 10 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron, +/area/station/engineering/hallway) "oGu" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -45916,6 +45980,17 @@ /obj/effect/turf_decal/siding/thinplating/dark, /turf/open/floor/iron/smooth_large, /area/station/maintenance/department/chapel/monastery) +"oGw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/atmospherics/components/binary/pump/on/layer4{ + dir = 2; + name = "Airlock Pump"; + target_pressure = 300; + hide = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/aft) "oGV" = ( /obj/machinery/status_display/evac/directional/south, /obj/effect/turf_decal/tile/purple/half/contrasted, @@ -45960,17 +46035,6 @@ /obj/structure/cable, /turf/open/floor/iron/showroomfloor, /area/station/security/office) -"oHB" = ( -/obj/machinery/door/airlock/engineering{ - name = "Emergency Storage" - }, -/obj/effect/turf_decal/stripes/corner, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/unres/delayed, -/obj/effect/mapping_helpers/airlock/access/any/service/janitor, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/entry) "oHD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -45996,17 +46060,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard) -"oIf" = ( -/obj/effect/turf_decal/bot, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/ore_silo, -/obj/machinery/airalarm/directional/north, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 8 - }, -/obj/machinery/light/small/red/directional/east, -/turf/open/floor/iron/dark, -/area/station/command/vault) "oIg" = ( /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ @@ -46074,14 +46127,6 @@ /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron, /area/station/cargo/sorting) -"oJr" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "oJs" = ( /obj/structure/table, /obj/item/clipboard, @@ -46115,27 +46160,6 @@ /obj/structure/chair/stool/directional/north, /turf/open/floor/wood, /area/station/service/library) -"oJW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/purple/anticorner/contrasted, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/tile/purple, -/obj/machinery/duct, -/turf/open/floor/iron/showroomfloor, -/area/station/science) -"oKp" = ( -/obj/structure/chair/office/light{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/storage/gas) "oKJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -46174,20 +46198,17 @@ }, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) -"oLp" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) -"oLq" = ( -/obj/structure/table, -/obj/effect/turf_decal/stripes/corner{ +"oLn" = ( +/obj/structure/chair/sofa/bench/right{ dir = 4 }, -/obj/item/storage/medkit/emergency, -/obj/item/clothing/under/rank/security/officer, -/turf/open/floor/plating, -/area/station/maintenance/port/lesser) +/obj/effect/landmark/start/assistant, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/light/dim/directional/west, +/turf/open/floor/wood, +/area/station/service/chapel/monastery) "oLs" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -46205,6 +46226,20 @@ "oLH" = ( /turf/closed/wall/r_wall/rust, /area/station/maintenance/starboard) +"oLN" = ( +/obj/machinery/modular_computer/preset/cargochat/engineering{ + dir = 8 + }, +/obj/machinery/light_switch/directional/east, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/main) "oLQ" = ( /obj/effect/turf_decal/bot, /obj/machinery/newscaster/directional/north, @@ -46222,6 +46257,18 @@ /obj/structure/sign/warning/electric_shock, /turf/closed/wall/r_wall/rust, /area/station/engineering/supermatter/room) +"oMm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/main) "oMq" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/purple/anticorner/contrasted, @@ -46262,6 +46309,29 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/medical/coldroom) +"oMP" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Atmospherics Distribution Loop"; + name = "atmospherics camera"; + network = list("ss13","engine") + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 9 + }, +/obj/structure/sign/warning/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) +"oMS" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/airalarm/directional/east, +/obj/machinery/light/dim/directional/east, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) "oMU" = ( /obj/effect/mapping_helpers/broken_floor, /obj/effect/decal/cleanable/dirt, @@ -46312,10 +46382,6 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/primary/aft) -"oNr" = ( -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "oNH" = ( /obj/structure/disposalpipe/junction/flip, /turf/open/floor/iron, @@ -46331,18 +46397,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/cargo/office) -"oOo" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/aft) -"oOW" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "oPh" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/holopad, @@ -46373,30 +46427,31 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) -"oPN" = ( -/obj/item/kirbyplants/organic/plant21, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 8 +"oPD" = ( +/obj/structure/table, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -4; + pixel_y = 4 }, -/turf/open/floor/iron/dark/corner{ - dir = 8 +/obj/item/storage/toolbox/mechanical, +/obj/item/flashlight, +/obj/item/flashlight, +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, -/area/station/hallway/primary/central/fore) -"oPO" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 4 +/obj/structure/sign/warning/fire/directional/east, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 }, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, /turf/open/floor/iron/dark, -/area/station/engineering/atmos) -"oPS" = ( -/obj/item/radio/intercom/directional/south, -/obj/effect/turf_decal/tile/green/half/contrasted, -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/virology) +/area/station/commons/storage/primary) +"oPK" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) "oPX" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer/layer2{ dir = 8 @@ -46410,21 +46465,14 @@ "oQg" = ( /turf/closed/wall/r_wall, /area/station/science/auxlab) -"oQh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/corner, -/obj/machinery/status_display/evac/directional/east, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark/corner{ - dir = 4 - }, -/area/station/hallway/primary/port) "oQk" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/broken_floor, +/obj/item/chair/stool{ + pixel_y = 2; + pixel_x = 2; + dir = 2 + }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) "oQl" = ( @@ -46432,17 +46480,26 @@ /obj/effect/turf_decal/box, /turf/open/floor/engine/xenobio, /area/station/science/xenobiology) -"oQm" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/engineering/supermatter/room) "oQv" = ( /obj/structure/bookcase/random, /obj/structure/cable, /turf/open/floor/iron/grimy, /area/station/security/prison) +"oQw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/camera/directional/east{ + c_tag = "Brig Warden's Office" + }, +/obj/machinery/airalarm/directional/east, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/light/dim/directional/east, +/turf/open/floor/iron, +/area/station/security/brig) "oQz" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -46463,6 +46520,21 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"oQJ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/components/unary/airlock_pump/unbolt_only{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/aft) "oQL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -46487,6 +46559,16 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/sorting) +"oRB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/ai/upload/chamber) "oRI" = ( /obj/effect/spawner/random/structure/table, /obj/item/flashlight/flare/candle{ @@ -46516,26 +46598,20 @@ }, /turf/open/floor/iron, /area/station/security/office) -"oRX" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/structure/table, -/obj/item/surgery_tray/full, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/dark, -/area/station/medical/surgery/theatre) -"oSd" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/blue{ - dir = 8 +"oSa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/gulag_item_reclaimer{ + dir = 8; + pixel_x = 30 }, -/obj/structure/disposalpipe/segment{ - dir = 5 +/obj/effect/turf_decal/stripes/corner{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/medbay/central) +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/processing) "oSf" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8 @@ -46545,13 +46621,23 @@ /obj/effect/turf_decal/tile/purple/half/contrasted, /turf/open/floor/iron/showroomfloor, /area/station/science/ordnance/freezerchamber) -"oSq" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/tile/yellow{ +"oSn" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/door/window/left/directional/east{ + name = "Inner Pipe Access"; + req_access = list("atmospherics") + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 8 }, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "oSs" = ( /obj/structure/flora/grass/jungle/a/style_random, /obj/effect/turf_decal/stripes/line{ @@ -46611,10 +46697,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) -"oSW" = ( -/obj/effect/turf_decal/tile/yellow, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "oSX" = ( /obj/item/paper_bin{ pixel_x = -4; @@ -46647,14 +46729,51 @@ }, /turf/open/floor/plating, /area/ruin/space/has_grav/abandoned_warehouse) +"oTu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/machinery/light/cold/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/chemistry) "oTw" = ( /obj/machinery/telecomms/processor/preset_one, /turf/open/floor/circuit/green/telecomms/mainframe, /area/station/tcommsat/server) +"oTC" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/service/chapel) "oTD" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, /turf/closed/wall/r_wall, /area/station/science/ordnance/burnchamber) +"oTN" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/wardrobe/mixed, +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/commons/locker) +"oTO" = ( +/obj/effect/landmark/start/atmospheric_technician, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/brown/hidden{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/atmos/storage) "oTP" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/gibs/old, @@ -46664,22 +46783,18 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/port/greater) -"oTQ" = ( +"oTS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/firealarm/directional/west, +/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/spawner/xmastree/rdrod, -/obj/effect/turf_decal/tile/purple{ dir = 1 }, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/science/lobby) +/obj/structure/cable, +/obj/structure/sign/poster/contraband/random/directional/east, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/aft) "oTU" = ( /obj/effect/turf_decal/box/corners, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -46710,16 +46825,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"oUj" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "oUz" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -46757,6 +46862,17 @@ }, /turf/open/floor/iron, /area/station/command/teleporter) +"oUO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) "oUS" = ( /obj/effect/decal/cleanable/dirt, /obj/item/storage/bag/trash, @@ -46786,6 +46902,18 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"oVO" = ( +/obj/structure/closet/secure_closet/chemical, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/item/storage/box/pillbottles, +/obj/item/storage/box/pillbottles, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/medical/pharmacy) "oVP" = ( /obj/structure/flora/bush/sparsegrass/style_random, /obj/structure/flora/rock, @@ -46820,6 +46948,16 @@ }, /turf/open/floor/plating, /area/station/science/genetics) +"oWp" = ( +/obj/structure/table/wood, +/obj/machinery/computer/records/medical/laptop{ + dir = 4; + pixel_y = 3; + pixel_x = 3 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/psychology) "oWx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, @@ -46829,11 +46967,32 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"oWE" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) "oWI" = ( /obj/structure/table/reinforced, /obj/structure/reagent_dispensers/servingdish, /turf/open/floor/iron/white, /area/station/security/prison/mess) +"oWO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/ai/upload/chamber) "oWQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -46853,6 +47012,18 @@ /obj/machinery/shieldgen, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"oWZ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/turf/open/floor/iron/smooth_half, +/area/station/engineering/supermatter/room) "oXa" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt, @@ -46886,20 +47057,28 @@ /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/security/brig) -"oXh" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/security/prison/mess) -"oXt" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear, -/obj/machinery/newscaster/directional/south, -/obj/machinery/light/directional/south, -/turf/open/floor/iron/dark, -/area/station/security/brig) +"oXn" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/shower/directional/east{ + name = "emergency shower" + }, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/fluff/shower_drain, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/pharmacy) +"oXr" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "oXx" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/disposalpipe/segment, @@ -46940,6 +47119,21 @@ /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) +"oYg" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating, +/area/station/security/execution/education) "oYi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -46955,40 +47149,12 @@ dir = 1 }, /area/station/hallway/primary/central) -"oYp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/processing) "oYx" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/old, /obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"oYE" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/anesthetic_mix, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/iron/dark, -/area/station/medical/cryo) -"oYK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/station/commons/vacant_room/commissary) -"oYN" = ( -/obj/machinery/air_sensor/nitrous_tank, -/turf/open/floor/engine/n2o, -/area/station/engineering/atmos) "oYV" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/west, @@ -47010,6 +47176,31 @@ dir = 1 }, /area/station/service/chapel) +"oZj" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/brown/hidden{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/office) +"oZo" = ( +/obj/machinery/medical_kiosk{ + pixel_y = 4 + }, +/obj/effect/turf_decal/box, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/medical/medbay/lobby) "oZE" = ( /turf/closed/wall/r_wall, /area/station/security/processing) @@ -47032,6 +47223,16 @@ /obj/structure/secure_safe/caps_spare, /turf/open/floor/iron/dark, /area/station/command/bridge) +"oZU" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 10 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "oZX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -47077,28 +47278,17 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"pal" = ( -/obj/machinery/door/airlock/external{ - name = "Atmospherics External Airlock" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/pumproom) +"pau" = ( +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/hallway/secondary/entry) "paM" = ( /obj/structure/cable, /turf/open/floor/wood, /area/station/maintenance/port/greater) -"paN" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "paU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -47122,24 +47312,6 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/medical/office) -"pbs" = ( -/obj/structure/sign/warning/vacuum/external, -/turf/closed/wall/rust, -/area/station/maintenance/disposal) -"pbt" = ( -/obj/structure/table, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/construction/plumbing, -/obj/item/construction/plumbing, -/obj/machinery/light_switch/directional/north, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/chemistry) "pbx" = ( /obj/machinery/computer/libraryconsole/bookmanagement, /obj/structure/table, @@ -47147,13 +47319,32 @@ /turf/open/floor/iron/grimy, /area/station/security/prison) "pbL" = ( -/obj/machinery/duct, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"pbN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"pbP" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel/monastery) "pbY" = ( /obj/structure/flora/rock/pile/style_random, /turf/open/misc/asteroid, /area/station/hallway/primary/fore) +"pca" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) "pcc" = ( /obj/effect/turf_decal/loading_area{ dir = 1 @@ -47175,6 +47366,35 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/solars/port/fore) +"pct" = ( +/obj/structure/table, +/obj/item/clothing/shoes/sneakers/orange{ + pixel_x = -6; + pixel_y = 10 + }, +/obj/item/clothing/shoes/sneakers/orange{ + pixel_x = -6; + pixel_y = -2 + }, +/obj/item/clothing/shoes/sneakers/orange{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/clothing/shoes/sneakers/orange{ + pixel_x = -6; + pixel_y = -8 + }, +/obj/item/clothing/under/rank/prisoner{ + pixel_x = 8; + pixel_y = 5 + }, +/obj/machinery/camera/directional/north{ + c_tag = "Prison Visitation"; + network = list("ss13","prison") + }, +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron, +/area/station/security/execution/transfer) "pcC" = ( /obj/effect/turf_decal/tile/red/half/contrasted, /obj/machinery/vending/coffee, @@ -47202,6 +47422,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"pcP" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Atmospherics Tank - Aux"; + name = "atmospherics camera"; + network = list("ss13","engine") + }, +/turf/open/floor/engine/vacuum, +/area/station/engineering/atmos) +"pcW" = ( +/obj/item/radio/intercom/directional/north, +/obj/structure/rack, +/obj/effect/turf_decal/bot, +/obj/item/pipe_dispenser, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "pdg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -47249,6 +47484,21 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/medical/cryo) +"pdK" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/button/door/directional/south{ + id = "custodialwagon"; + name = "Custodial Bay Toggle"; + req_access = list("janitor") + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/mob/living/basic/bot/cleanbot/autopatrol, +/obj/effect/turf_decal/tile/purple/half/contrasted, +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "pdR" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -47277,16 +47527,6 @@ }, /turf/open/floor/engine, /area/station/ai/satellite/foyer) -"pet" = ( -/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "peC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -47300,6 +47540,13 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"peE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted, +/obj/effect/turf_decal/tile/yellow, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "peF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -47381,20 +47628,19 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/dark, /area/station/maintenance/department/bridge) -"pgq" = ( -/obj/machinery/door/poddoor/preopen{ - id = "brigfrontdoor"; - name = "Front Security Blast Door" +"pgn" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue{ + dir = 8 }, -/obj/structure/extinguisher_cabinet/directional/north, -/obj/effect/turf_decal/caution/stand_clear, -/turf/open/floor/iron/dark, -/area/station/security/brig) -"pgA" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/storage/gas) +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/medbay/central) "pgG" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes/corner{ @@ -47417,12 +47663,11 @@ /obj/structure/sign/poster/contraband/red_rum, /turf/closed/wall/rust, /area/station/maintenance/port/greater) -"phF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) +"pht" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/holopad, +/turf/open/floor/iron, +/area/station/engineering/main) "phH" = ( /obj/structure/bodycontainer/morgue, /obj/effect/turf_decal/bot_white, @@ -47430,6 +47675,15 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron/dark, /area/station/medical/morgue) +"phJ" = ( +/obj/machinery/flasher/portable, +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/light/small/red/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/armory) "phK" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -47450,6 +47704,20 @@ }, /turf/open/misc/asteroid, /area/space/nearstation) +"phS" = ( +/obj/machinery/airalarm/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Engineering Desk"; + name = "engineering camera"; + network = list("ss13","engine") + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/rnd/production/protolathe/department/engineering, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark, +/area/station/engineering/lobby) "phY" = ( /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/tile/yellow, @@ -47493,13 +47761,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) -"pim" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/item/radio/intercom/directional/north, -/obj/machinery/light/warm/dim/directional/north, -/turf/open/floor/iron, -/area/station/security/prison) "pio" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/dirt, @@ -47526,10 +47787,6 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron/showroomfloor, /area/station/service/bar/atrium) -"piD" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall, -/area/station/engineering/supermatter/room) "piH" = ( /obj/machinery/light/small/directional/east, /obj/structure/bed, @@ -47566,7 +47823,6 @@ dir = 4 }, /obj/machinery/light/small/directional/north, -/obj/structure/sign/warning/vacuum/directional/west, /obj/effect/decal/cleanable/cobweb, /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/contraband/random/directional/north, @@ -47603,19 +47859,18 @@ }, /turf/open/floor/iron/dark, /area/station/command/teleporter) -"pjx" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/corner{ +"pjw" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden/layer4{ dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue{ - dir = 8 +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{ + dir = 5 }, -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "pjC" = ( /obj/machinery/status_display/ai/directional/south, /obj/effect/turf_decal/stripes/corner{ @@ -47642,6 +47897,17 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"pjJ" = ( +/obj/structure/bodycontainer/morgue{ + dir = 8 + }, +/obj/effect/turf_decal/bot_white, +/obj/structure/sign/poster/contraband/random/directional/east, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "pjV" = ( /obj/structure/table/wood, /obj/machinery/newscaster/directional/east, @@ -47672,15 +47938,15 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) -"pkC" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ - dir = 4 +"pkf" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 }, -/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible, -/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/showroomfloor, -/area/station/engineering/atmos) +/area/station/medical/medbay/central) "pkE" = ( /obj/effect/turf_decal/siding/white{ dir = 8 @@ -47729,6 +47995,17 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"plg" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/unres/delayed{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance/departmental, +/obj/effect/mapping_helpers/airlock/access/any/service/janitor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/aft) "plj" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -47879,6 +48156,14 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) +"pmP" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden/layer4{ + dir = 1 + }, +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "pnl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -47979,12 +48264,43 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/fore) +"pof" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, +/obj/machinery/light/warm/directional/north, +/obj/machinery/status_display/evac/directional/north, +/obj/structure/rack, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) "pog" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/security/courtroom) +"pok" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/iv_drip, +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/loading_area{ + dir = 8 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/treatment_center) "pon" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -48003,14 +48319,9 @@ }, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/trash/grime, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"poC" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron/dark, -/area/station/security/courtroom) "poK" = ( /obj/machinery/suit_storage_unit/ce, /obj/effect/turf_decal/delivery, @@ -48053,6 +48364,25 @@ /obj/effect/spawner/random/trash/food_packaging, /turf/open/floor/plating, /area/station/maintenance/department/bridge) +"ppo" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = -5; + pixel_y = 7 + }, +/obj/item/pen{ + pixel_x = 8; + pixel_y = 5 + }, +/obj/item/pen/red{ + pixel_x = 5; + pixel_y = 1 + }, +/obj/item/toy/figure/detective, +/obj/item/radio/intercom/directional/east, +/obj/machinery/light/warm/directional/east, +/turf/open/floor/carpet/green, +/area/station/security/detectives_office) "ppB" = ( /obj/structure/table, /obj/item/storage/box/syringes{ @@ -48099,14 +48429,6 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron, /area/station/science/robotics/mechbay) -"pqp" = ( -/obj/effect/turf_decal/box/corners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "pqu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -48150,33 +48472,65 @@ "pqD" = ( /turf/closed/wall, /area/station/maintenance/port/lesser) -"pqH" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/machinery/light/directional/south, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) +"pqL" = ( +/obj/machinery/door/poddoor/shutters/radiation/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters"; + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/engineering/supermatter/engine) +"pqM" = ( +/obj/structure/table, +/obj/item/folder{ + pixel_x = -4 + }, +/obj/item/pai_card, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) "pqS" = ( /turf/open/floor/carpet, /area/station/medical/psychology) -"pqU" = ( -/obj/effect/landmark/secequipment, +"pqV" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/filingcabinet/employment, +/obj/item/radio/intercom/directional/south, +/obj/machinery/button/door/directional/east{ + id = "lawyer_shutters"; + name = "Law Office Shutters Toggle"; + req_access = list("lawyer") + }, /obj/effect/turf_decal/bot, -/obj/machinery/status_display/evac/directional/north, -/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/small/directional/east, /turf/open/floor/iron/dark, -/area/station/security/office) -"prc" = ( -/obj/structure/table, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/spawner/random/aimodule/harmful, -/obj/machinery/door/window/brigdoor/left/directional/south{ - name = "High-Risk Modules"; - req_access = list("captain") +/area/station/service/lawoffice) +"pre" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 }, -/turf/open/floor/circuit/red, -/area/station/ai/upload/chamber) +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"prf" = ( +/obj/machinery/atmospherics/pipe/smart/simple/brown/visible/layer2{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron/smooth, +/area/station/maintenance/disposal/incinerator) "pri" = ( /obj/structure/window/spawner/directional/north, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -48212,26 +48566,6 @@ }, /turf/open/floor/iron/dark, /area/station/science/xenobiology) -"prC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/siding/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/ce) "prK" = ( /obj/machinery/disposal/bin/tagger, /obj/machinery/firealarm/directional/south, @@ -48313,6 +48647,12 @@ /obj/item/poster/random_contraband, /turf/open/floor/plating/airless, /area/space/nearstation) +"pud" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrous_output{ + dir = 4 + }, +/turf/open/floor/engine/n2o, +/area/station/engineering/atmos) "puy" = ( /obj/structure/flora/grass/jungle/b/style_random, /obj/structure/flora/bush/grassy/style_random, @@ -48345,13 +48685,6 @@ }, /turf/open/floor/iron/dark, /area/station/science/xenobiology) -"puL" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/tile/red/half/contrasted, -/obj/effect/turf_decal/tile/neutral, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/processing) "puS" = ( /obj/effect/turf_decal/delivery, /obj/machinery/power/emitter, @@ -48379,13 +48712,6 @@ }, /turf/open/floor/iron, /area/station/service/kitchen) -"pvi" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage/gas) "pvs" = ( /obj/machinery/door/airlock/maintenance{ name = "Security Maintenance" @@ -48393,16 +48719,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/detective, /turf/open/floor/iron/dark, /area/station/maintenance/port/lesser) -"pvu" = ( -/obj/machinery/vending/wardrobe/atmos_wardrobe, -/obj/effect/turf_decal/bot, -/obj/machinery/newscaster/directional/south, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "pvA" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -48452,6 +48768,14 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/lobby) +"pws" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 1; + name = "Mix to Filter" + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "pwx" = ( /obj/machinery/vending/autodrobe, /obj/effect/turf_decal/bot, @@ -48496,13 +48820,6 @@ "pxe" = ( /turf/closed/wall/mineral/plastitanium, /area/station/maintenance/port/aft) -"pxl" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/burnt_floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/plating, -/area/station/hallway/secondary/entry) "pxE" = ( /obj/structure/sign/warning/electric_shock, /turf/closed/wall/r_wall, @@ -48513,6 +48830,25 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/service/hydroponics) +"pxI" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmos) "pxN" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -48588,13 +48924,14 @@ /obj/machinery/telecomms/bus/preset_one, /turf/open/floor/circuit/green/telecomms/mainframe, /area/station/tcommsat/server) -"pzW" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/service/chapel/dock) +"pzT" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "pAr" = ( /obj/machinery/door/airlock/external/glass{ name = "Supply Door Airlock" @@ -48643,15 +48980,26 @@ "pBd" = ( /turf/closed/wall/rust, /area/station/medical/paramedic) -"pBh" = ( -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "pBi" = ( /obj/docking_port/stationary/mining_home/kilo{ dir = 4 }, /turf/open/space/basic, /area/space) +"pBC" = ( +/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"pBO" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, +/turf/closed/wall/r_wall, +/area/station/engineering/supermatter/engine) "pBR" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -48664,33 +49012,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) -"pBV" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/door_buttons/airlock_controller{ - idExterior = "virology_airlock_exterior"; - idInterior = "virology_airlock_interior"; - idSelf = "virology_airlock_control"; - name = "Virology Access Console"; - pixel_x = 24; - pixel_y = -24; - req_access = list("virology") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/tile/green/anticorner/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/virology) "pCa" = ( /obj/machinery/door/poddoor/preopen{ id = "xeno3"; @@ -48718,35 +49039,16 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/electrical) -"pCp" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -5 - }, -/obj/item/pen{ - pixel_x = -5 - }, -/obj/machinery/flasher/directional/east{ - id = "hopflash"; - name = "Crowd Pacifier" - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/machinery/status_display/evac/directional/north, -/obj/structure/desk_bell{ - pixel_x = 7; - pixel_y = 10 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/hop) "pCu" = ( /turf/open/floor/plating, /area/station/hallway/primary/fore) +"pCE" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/carpet/royalblue, +/area/station/service/chapel/office) "pCF" = ( /obj/structure/door_assembly/door_assembly_ext{ anchored = 1 @@ -48794,6 +49096,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"pDn" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/item/radio/intercom/directional/east, +/obj/machinery/status_display/ai/directional/south, +/turf/open/floor/engine, +/area/station/tcommsat/computer) +"pDr" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/portable_atmospherics/scrubber/huge, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "pDs" = ( /obj/effect/turf_decal/stripes/white/corner{ dir = 4 @@ -48862,12 +49177,6 @@ /obj/effect/decal/cleanable/generic, /turf/open/floor/plating, /area/station/maintenance/department/bridge) -"pEp" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/plating, -/area/station/hallway/secondary/entry) "pEt" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, @@ -48895,16 +49204,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/security/courtroom) -"pED" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/visible, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/engineering/atmos) "pEL" = ( /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, @@ -48957,6 +49256,13 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/sorting) +"pFL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/ai/upload/chamber) "pFS" = ( /obj/machinery/disposal/bin/tagger, /obj/effect/turf_decal/bot, @@ -48990,12 +49296,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/office) -"pGc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/burnt_floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/aft) "pGe" = ( /obj/item/kirbyplants, /obj/effect/turf_decal/tile/neutral{ @@ -49105,12 +49405,6 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) -"pIf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "pIl" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -49121,13 +49415,6 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit/departure_lounge) -"pIm" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/dark, -/area/station/service/chapel/dock) "pID" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -49195,13 +49482,6 @@ }, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) -"pJn" = ( -/obj/structure/railing/corner{ - dir = 8 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/iron/dark, -/area/station/service/chapel/monastery) "pJr" = ( /obj/effect/turf_decal/tile/blue/anticorner/contrasted{ dir = 1 @@ -49226,23 +49506,42 @@ }, /turf/open/floor/iron/dark/corner, /area/station/hallway/primary/port) -"pJJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 5 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 9 +"pJI" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/conveyor{ + dir = 4; + id = "packagereturn"; + name = "crate return belt" }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/engineering/atmos/pumproom) +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/cargo/sorting) "pJM" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced/spawner/directional/west, /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/science/xenobiology) +"pKe" = ( +/obj/item/kirbyplants/organic/plant2{ + pixel_y = 3 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security/processing) "pKf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -49253,6 +49552,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, /turf/open/floor/iron/dark, /area/station/medical/storage) +"pKk" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "pKm" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -49306,11 +49620,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/prison) -"pLl" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/aft) "pLs" = ( /turf/closed/wall/r_wall, /area/station/engineering/atmos/pumproom) @@ -49348,26 +49657,11 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/starboard) -"pLy" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/landmark/start/station_engineer, -/turf/open/floor/iron, -/area/station/engineering/main) "pLB" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/neutral/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/service/kitchen) -"pLC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/item/radio/intercom/directional/north, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "pLO" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ @@ -49390,12 +49684,43 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/dark, /area/station/service/chapel) -"pMz" = ( +"pMD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, /obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/ai_law_rack/base/core, +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/duct, +/turf/open/floor/engine, +/area/station/engineering/main) +"pMI" = ( +/obj/structure/closet/crate/freezer, +/obj/item/reagent_containers/blood, +/obj/item/reagent_containers/blood{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/reagent_containers/blood/a_minus, +/obj/item/reagent_containers/blood/b_minus{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/reagent_containers/blood/b_plus{ + pixel_x = 1; + pixel_y = 2 + }, +/obj/item/reagent_containers/blood/o_minus, +/obj/item/reagent_containers/blood/o_plus{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/item/reagent_containers/blood/random, +/obj/item/reagent_containers/blood/random, +/obj/item/reagent_containers/blood/random, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, -/area/station/ai/upload/chamber) +/area/station/medical/virology) "pMS" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -49419,37 +49744,30 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, /area/station/security/office) -"pNg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, -/turf/closed/wall, -/area/station/maintenance/disposal/incinerator) -"pNh" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 +"pNq" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 }, -/obj/machinery/light/floor, -/turf/open/floor/iron/dark/corner{ +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ dir = 1 }, -/area/station/hallway/primary/fore) +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"pNy" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "pNA" = ( /obj/effect/turf_decal/siding/wood/corner, /obj/machinery/newscaster/directional/south, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) -"pNG" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "pNL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -49476,16 +49794,6 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/miningoffice) -"pNZ" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage/gas) "pOb" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -49533,6 +49841,24 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating, /area/station/maintenance/starboard) +"pOA" = ( +/obj/effect/turf_decal/siding/red{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"pOC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) "pOI" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/effect/turf_decal/stripes/line{ @@ -49574,15 +49900,14 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/fore) -"pOZ" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/table, -/obj/item/storage/box, -/obj/item/radio/off{ - pixel_x = 6 - }, -/turf/open/floor/iron, -/area/station/engineering/lobby) +"pPc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/aft) "pPe" = ( /obj/effect/turf_decal/loading_area, /obj/machinery/door/poddoor/shutters/preopen{ @@ -49605,35 +49930,11 @@ /obj/item/book/bible, /turf/open/floor/carpet/red, /area/station/service/chapel) -"pPC" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "pPD" = ( /obj/structure/flora/bush/leavy/style_random, /obj/structure/flora/bush/sunny/style_random, /turf/open/floor/grass, /area/station/service/hydroponics/garden) -"pPM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 1 - }, -/obj/machinery/light/floor, -/turf/open/floor/iron/showroomfloor, -/area/station/command/heads_quarters/rd) "pPZ" = ( /obj/machinery/door/airlock/security/glass{ name = "Hazard Closet" @@ -49680,6 +49981,18 @@ /obj/machinery/power/port_gen/pacman/pre_loaded, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"pQF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/components/binary/pump/on/layer4{ + dir = 4; + name = "Airlock Pump"; + target_pressure = 300; + hide = 1 + }, +/turf/open/floor/plating, +/area/station/hallway/secondary/entry) "pQM" = ( /obj/structure/plasticflaps, /obj/machinery/conveyor{ @@ -49689,23 +50002,25 @@ }, /turf/open/floor/plating, /area/ruin/space/has_grav/abandoned_warehouse) +"pQS" = ( +/turf/closed/wall/rust, +/area/station/engineering/atmos/storage) "pQT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/blood/old, /obj/structure/cable, /turf/open/floor/plating, /area/ruin/space/has_grav/abandoned_warehouse) -"pRc" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ +"pRd" = ( +/obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/simple/violet/visible{ + dir = 6 }, -/obj/machinery/light/directional/north, /turf/open/floor/iron, -/area/station/hallway/primary/aft) +/area/station/engineering/atmos) "pRf" = ( /obj/structure/table, /obj/item/folder/white, @@ -49756,6 +50071,15 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"pRx" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "pRF" = ( /obj/docking_port/stationary/random{ dir = 4; @@ -49764,31 +50088,32 @@ }, /turf/open/space/basic, /area/space/nearstation) -"pRL" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/disposal/bin/tagger, -/obj/structure/extinguisher_cabinet/directional/north, +"pRM" = ( /obj/structure/disposalpipe/trunk{ - dir = 8 + dir = 4 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 +/obj/machinery/disposal/bin/tagger, +/obj/effect/turf_decal/bot, +/obj/machinery/firealarm/directional/west, +/obj/machinery/status_display/supply{ + pixel_y = -32 }, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/exit/departure_lounge) -"pRO" = ( -/obj/machinery/door/poddoor/preopen{ - id = "atmos"; - name = "Atmospherics Blast Door" +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 4 }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/engineering/atmos/storage/gas) +/turf/open/floor/iron/dark, +/area/station/cargo/storage) "pRP" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/aft) +"pRW" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 4 + }, +/turf/closed/wall/rust, +/area/station/engineering/atmos) "pSe" = ( /obj/effect/turf_decal/stripes/corner, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -49802,21 +50127,7 @@ /area/station/science/research) "pSh" = ( /obj/effect/turf_decal/delivery, -/obj/structure/table, -/obj/item/storage/box/lights/mixed, -/obj/item/stack/rods/twentyfive, -/obj/item/wrench, -/obj/item/hand_labeler, -/obj/item/crowbar, -/obj/item/electronics/airlock{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/stack/package_wrap, -/obj/item/electronics/airlock{ - pixel_x = -6; - pixel_y = 6 - }, +/obj/structure/reagent_dispensers/watertank, /turf/open/floor/iron/dark, /area/station/engineering/main) "pSj" = ( @@ -49848,24 +50159,22 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/electrical) -"pSE" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "Atmos to Loop" +"pSG" = ( +/turf/open/floor/iron/showroomfloor, +/area/station/security/office) +"pSI" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 }, -/obj/effect/turf_decal/stripes/corner{ +/obj/effect/turf_decal/tile/blue{ dir = 8 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) -"pSG" = ( -/turf/open/floor/iron/showroomfloor, -/area/station/security/office) +/turf/open/floor/iron, +/area/station/engineering/atmos) "pSN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/burnt_floor, @@ -49875,47 +50184,36 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/solars/port/fore) -"pSV" = ( -/obj/machinery/medical_kiosk{ - pixel_y = 4 - }, -/obj/effect/turf_decal/box, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/medical/medbay/lobby) -"pSW" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/components/binary/valve/digital/on{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) -"pTd" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ +"pTr" = ( +/obj/effect/turf_decal/stripes/corner{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/security/execution/education) +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/table, +/obj/item/analyzer, +/obj/item/book/manual/wiki/atmospherics, +/obj/item/clothing/mask/gas, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "pTC" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/security/prison) -"pTL" = ( -/obj/effect/turf_decal/bot/left, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) +"pTN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/status_display/evac/directional/east, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner{ + dir = 4 + }, +/area/station/hallway/primary/port) "pTR" = ( /obj/effect/landmark/event_spawn, /obj/structure/disposalpipe/segment{ @@ -49925,18 +50223,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"pTU" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple/opposingcorners, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/showroomfloor, -/area/station/science/auxlab) "pUb" = ( /obj/structure/table/wood, /obj/effect/turf_decal/siding/wood/end{ @@ -49967,6 +50253,11 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) +"pUw" = ( +/obj/structure/lattice, +/obj/structure/sign/warning/fire/directional/east, +/turf/open/space/basic, +/area/space/nearstation) "pUA" = ( /obj/structure/table/reinforced, /obj/structure/disposalpipe/segment{ @@ -49983,6 +50274,17 @@ /obj/structure/cable, /turf/open/floor/carpet/red, /area/station/command/heads_quarters/hos) +"pVb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible, +/obj/machinery/atmospherics/pipe/layer_manifold/yellow/visible{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "pVd" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -49997,19 +50299,6 @@ "pVz" = ( /turf/closed/wall, /area/station/maintenance/port/fore) -"pVF" = ( -/obj/machinery/meter/monitored/waste_loop, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/pumproom) "pVP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -50035,6 +50324,17 @@ dir = 1 }, /area/station/hallway/primary/central) +"pVR" = ( +/obj/machinery/door/airlock/external{ + name = "Prison External Airlock" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/any/security/maintenance, +/turf/open/floor/iron/dark, +/area/station/maintenance/port/lesser) "pVS" = ( /obj/structure/closet/secure_closet/freezer/kitchen, /obj/item/reagent_containers/condiment/sugar, @@ -50042,6 +50342,18 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) +"pVT" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/box, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "pWj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, @@ -50060,12 +50372,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/fore) -"pWx" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/noticeboard/directional/east, -/obj/machinery/computer/gateway_control, -/turf/open/floor/iron/dark, -/area/station/command/gateway) "pWC" = ( /obj/effect/turf_decal/bot, /obj/machinery/conveyor{ @@ -50140,6 +50446,24 @@ }, /turf/open/floor/iron, /area/station/command/bridge) +"pXA" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"pXD" = ( +/obj/structure/spirit_board, +/turf/open/floor/cult, +/area/station/service/chapel/office) "pXN" = ( /obj/structure/closet/secure_closet/personal/cabinet, /obj/machinery/newscaster/directional/east, @@ -50147,17 +50471,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/commons/locker) -"pXR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/burnt_floor, -/obj/machinery/atmospherics/components/binary/pump/on/layer4{ - dir = 2; - name = "Airlock Pump"; - target_pressure = 300; - hide = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft) "pXU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -50195,15 +50508,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/command/heads_quarters/cmo) -"pZd" = ( -/obj/machinery/smartfridge/food, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "kitchenshutters"; - name = "Kitchen Shutters" - }, -/turf/open/floor/iron/showroomfloor, -/area/station/service/kitchen) "pZe" = ( /obj/effect/turf_decal/bot, /obj/structure/rack, @@ -50229,17 +50533,6 @@ /obj/structure/sign/departments/security, /turf/closed/wall, /area/station/hallway/secondary/exit/departure_lounge) -"pZF" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/ai/satellite/atmos) "pZI" = ( /obj/machinery/modular_computer/preset/cargochat/security{ dir = 4 @@ -50275,7 +50568,6 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/duct, /turf/open/floor/engine, /area/station/engineering/supermatter/room) "qaF" = ( @@ -50302,6 +50594,13 @@ /obj/structure/sign/departments/medbay/alt, /turf/closed/wall, /area/station/medical/office) +"qaS" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) "qaZ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/mix_output{ dir = 1 @@ -50348,6 +50647,13 @@ /obj/effect/mapping_helpers/airlock/access/all/security/entrance, /turf/open/floor/iron/dark, /area/station/security/brig) +"qby" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) "qbA" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -50389,6 +50695,19 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"qbK" = ( +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/mannequin/skeleton{ + dir = 8 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "qbO" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -50434,12 +50753,6 @@ }, /turf/open/floor/iron, /area/station/security/brig) -"qca" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/red, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "qci" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -50454,6 +50767,19 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"qcw" = ( +/obj/machinery/modular_computer/preset/command{ + dir = 4 + }, +/obj/machinery/requests_console/directional/west{ + department = "Head of Personnel's Desk"; + name = "Head of Personnel's Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/announcement, +/obj/effect/mapping_helpers/requests_console/information, +/obj/effect/mapping_helpers/requests_console/assistance, +/turf/open/floor/carpet/blue, +/area/station/command/heads_quarters/hop) "qcI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -50468,6 +50794,12 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"qcJ" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "qdd" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt, @@ -50499,26 +50831,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/engine/xenobio, /area/station/science/xenobiology) -"qei" = ( -/obj/structure/table/wood/fancy, -/obj/effect/turf_decal/siding/wideplating/dark/corner, -/obj/item/food/grown/flower/poppy{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/food/grown/flower/poppy{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/food/grown/flower/poppy, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/dark, -/area/station/service/chapel) -"qel" = ( -/obj/machinery/atmospherics/components/tank/air, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/department/chapel/monastery) "qew" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -50582,6 +50894,16 @@ }, /turf/open/floor/iron/dark, /area/station/service/kitchen) +"qeV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/event_spawn, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "qeX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, @@ -50602,13 +50924,6 @@ "qfe" = ( /turf/closed/wall/r_wall/rust, /area/space/nearstation) -"qfg" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "qfq" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -50627,21 +50942,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/fore) -"qfv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 4 - }, -/obj/machinery/duct, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/pharmacy) "qgu" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/maintenance, @@ -50656,13 +50956,14 @@ /turf/open/floor/iron, /area/station/hallway/primary/starboard) "qgC" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, /obj/machinery/atmospherics/components/trinary/filter/atmos{ dir = 8 }, /obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/iron, /area/station/engineering/atmos) "qgE" = ( @@ -50726,6 +51027,18 @@ /obj/effect/turf_decal/tile/neutral/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/commons/storage/art) +"qhD" = ( +/obj/machinery/computer/order_console/cook{ + dir = 8 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/newscaster/directional/east, +/obj/machinery/camera/directional/east{ + c_tag = "Kitchen Coldroom"; + name = "kitchen camera" + }, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/station/service/kitchen/coldroom) "qhH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -50735,6 +51048,23 @@ /obj/effect/mapping_helpers/airlock/access/all/science/rd, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) +"qhO" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "qhT" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/showroomfloor, @@ -50770,6 +51100,15 @@ /obj/structure/cable, /turf/open/floor/iron/showroomfloor, /area/station/medical/paramedic) +"qiA" = ( +/obj/structure/table, +/obj/machinery/firealarm/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/item/ai_module/law/supplied/freeform, +/obj/item/ai_module/law/supplied/freeform, +/obj/item/ai_module/law/supplied/freeform, +/turf/open/floor/iron/dark, +/area/station/ai/upload/chamber) "qiB" = ( /obj/effect/turf_decal/stripes/corner, /obj/item/kirbyplants/random, @@ -50778,6 +51117,18 @@ }, /turf/open/floor/iron/dark/corner, /area/station/hallway/primary/starboard) +"qiH" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) "qiM" = ( /obj/machinery/door/airlock/maintenance, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -50788,13 +51139,25 @@ /obj/effect/mapping_helpers/airlock/access/any/security/maintenance, /turf/open/floor/iron/dark, /area/station/maintenance/port/lesser) -"qiT" = ( -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 +"qjk" = ( +/obj/item/storage/box/chemimp{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/storage/box/trackimp{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/structure/table, +/obj/structure/reagent_dispensers/wall/peppertank/directional/south, +/obj/item/storage/box/firingpins, +/obj/item/storage/box/firingpins, +/obj/item/storage/lockbox/loyalty, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 }, /turf/open/floor/iron/dark, -/area/station/command/bridge) +/area/station/security/armory) "qjq" = ( /obj/structure/closet/secure_closet/security, /obj/effect/turf_decal/delivery, @@ -50813,12 +51176,6 @@ /obj/effect/spawner/random/structure/girder, /turf/open/floor/plating/rust, /area/station/maintenance/department/crew_quarters/bar) -"qjv" = ( -/obj/effect/decal/cleanable/ash, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "qjK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, @@ -50829,6 +51186,17 @@ "qjM" = ( /turf/closed/wall/r_wall, /area/station/medical/paramedic) +"qjO" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmos) "qkf" = ( /obj/structure/sign/warning/docking, /turf/closed/wall, @@ -50881,6 +51249,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/construction/mining/aux_base) +"qkP" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/cyan/visible{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "qlg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -50920,15 +51297,6 @@ "qlC" = ( /turf/closed/wall/rust, /area/station/maintenance/fore) -"qlI" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/science/ordnance) "qlX" = ( /obj/effect/decal/cleanable/dirt, /obj/item/tank/internals/plasmaman/belt/full, @@ -50954,10 +51322,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/science/auxlab) -"qms" = ( -/obj/machinery/portable_atmospherics/canister/nitrous_oxide, -/turf/open/floor/engine/n2o, -/area/station/engineering/atmos) "qmx" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/blue/half/contrasted{ @@ -50966,28 +51330,16 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/security/courtroom) -"qmM" = ( -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) -"qmR" = ( -/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/visible, -/turf/open/floor/engine, -/area/station/maintenance/disposal/incinerator) +"qmz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "qmW" = ( /turf/open/floor/engine, /area/station/science/xenobiology) -"qmZ" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Atmospherics Tank - Air"; - name = "atmospherics camera"; - network = list("ss13","engine") - }, -/turf/open/floor/engine/air, -/area/station/engineering/atmos) "qnc" = ( /obj/machinery/atmospherics/components/binary/valve, /obj/machinery/door/window/right/directional/north{ @@ -51006,6 +51358,23 @@ }, /turf/open/floor/iron/dark, /area/station/security/execution/education) +"qnd" = ( +/obj/structure/lattice, +/obj/structure/sign/warning/directional/west, +/turf/open/space/basic, +/area/space/nearstation) +"qnk" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/washing_machine, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/light_switch/directional/east, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/light/cold/directional/east, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/restrooms) "qny" = ( /obj/machinery/mineral/stacking_machine{ input_dir = 2 @@ -51019,25 +51388,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/janitor) -"qnA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/light/dim/directional/south, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"qnH" = ( -/obj/structure/window/reinforced/plasma/spawner/directional/east, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, -/obj/machinery/power/energy_accumulator/grounding_rod/anchored, -/turf/open/floor/circuit/green{ - luminosity = 2 - }, -/area/station/engineering/supermatter/engine) "qnK" = ( /obj/machinery/door/airlock/engineering{ name = "Emergency Storage" @@ -51049,19 +51399,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/iron/dark, /area/station/maintenance/department/crew_quarters/bar) -"qoo" = ( -/obj/machinery/airalarm/directional/west, -/obj/machinery/camera/directional/west{ - c_tag = "Atmospherics Port Tanks"; - name = "atmospherics camera"; - network = list("ss13","engine") - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "qos" = ( /mob/living/carbon/human/species/monkey, /turf/open/floor/grass, @@ -51080,24 +51417,27 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/science/robotics/lab) -"qoN" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/sign/nanotrasen{ - pixel_y = 32 +"qoK" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/siding/yellow/corner{ + dir = 1 }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "atmos-entrance" }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 +/obj/machinery/door/airlock/atmos{ + name = "Atmospherics Desk" }, -/obj/machinery/light/directional/north, -/turf/open/floor/iron/dark/corner{ - dir = 1 +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/effect/landmark/navigate_destination/atmos, +/obj/machinery/atmospherics/pipe/smart/simple/brown/hidden{ + dir = 8 }, -/area/station/hallway/primary/central/fore) +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) "qoT" = ( /obj/machinery/light/small/directional/east, /obj/effect/turf_decal/tile/blue{ @@ -51183,6 +51523,30 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard) +"qqv" = ( +/obj/machinery/portable_atmospherics/pump, +/obj/effect/turf_decal/box, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/hallway) +"qqK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/main) "qqM" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -51193,11 +51557,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine, /area/station/engineering/gravity_generator) -"qqS" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) "qqV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/siding/purple{ @@ -51218,17 +51577,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"qrj" = ( -/obj/machinery/status_display/ai/directional/east, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/ai/satellite/chamber) "qrk" = ( /obj/machinery/power/smes, /obj/effect/turf_decal/bot, @@ -51254,14 +51602,6 @@ }, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) -"qrK" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron, -/area/station/security/processing) "qrP" = ( /obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/personal, @@ -51306,10 +51646,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"qsv" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "qsy" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -51330,6 +51666,14 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/lobby) +"qsY" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) "qth" = ( /obj/machinery/light_switch/directional/west{ pixel_y = 26 @@ -51353,27 +51697,13 @@ }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs) -"qtO" = ( -/obj/machinery/vending/wardrobe/engi_wardrobe, -/obj/effect/turf_decal/bot, -/obj/machinery/camera/directional/north{ - c_tag = "Engineering Lockers"; - name = "engineering camera"; - network = list("ss13","engine") +"qtH" = ( +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/blue{ + dir = 4 }, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/machinery/light/warm/directional/north, -/turf/open/floor/iron/dark, -/area/station/engineering/storage_shared) -"qtS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/light/floor, /turf/open/floor/iron, -/area/station/security/brig) +/area/station/hallway/primary/starboard) "qur" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -51388,16 +51718,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, /turf/open/floor/plating, /area/ruin/space/has_grav/abandoned_warehouse) -"quv" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/machinery/button/door/directional/south{ - id = "engsm"; - name = "Radiation Shutters Toggle"; - req_access = list("engineering") - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "quy" = ( /obj/machinery/light/small/directional/west, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -51405,6 +51725,11 @@ }, /turf/open/floor/wood, /area/station/commons/locker) +"quF" = ( +/obj/structure/lattice, +/obj/structure/sign/warning/directional/south, +/turf/open/space/basic, +/area/space/nearstation) "quG" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, @@ -51461,16 +51786,6 @@ /obj/structure/flora/rock/style_random, /turf/open/misc/asteroid/lowpressure, /area/space/nearstation) -"qvs" = ( -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "qvG" = ( /obj/effect/turf_decal/stripes/corner, /obj/structure/cable, @@ -51486,22 +51801,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"qvV" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/pen, -/obj/item/toy/figure/atmos{ - pixel_x = 8; - pixel_y = 6 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/storage/gas) "qwa" = ( /obj/structure/chair{ dir = 8 @@ -51538,6 +51837,19 @@ }, /turf/open/floor/carpet/green, /area/station/service/lawoffice) +"qwq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/obj/structure/cable, +/obj/machinery/camera/directional/north{ + c_tag = "Supermatter Engine"; + name = "supermatter camera"; + network = list("engine") + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "qwx" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -51572,6 +51884,13 @@ /obj/effect/mapping_helpers/airlock/access/all/science/general, /turf/open/floor/iron/dark, /area/station/maintenance/starboard) +"qxc" = ( +/obj/item/beacon, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "qxh" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -51618,6 +51937,15 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron/dark, /area/station/security/courtroom) +"qxO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/corner, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/aft) "qxQ" = ( /obj/effect/turf_decal/stripes/corner, /obj/effect/decal/cleanable/dirt, @@ -51660,34 +51988,10 @@ }, /turf/open/floor/iron, /area/station/security/office) -"qyR" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/on{ - dir = 1 - }, -/turf/open/floor/engine/vacuum, -/area/station/maintenance/disposal/incinerator) "qzg" = ( /obj/structure/lattice/catwalk, /turf/open/space/basic, /area/station/solars/starboard/fore) -"qzq" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Chapel Hallway" - }, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"qzs" = ( -/obj/effect/turf_decal/bot, -/obj/structure/closet/wardrobe/mixed, -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/commons/locker) "qzu" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -51703,15 +52007,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"qzz" = ( -/obj/machinery/firealarm/directional/south, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "qzA" = ( /obj/effect/turf_decal/loading_area, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -51768,22 +52063,14 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/dark, /area/station/security/checkpoint/supply) -"qAo" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) -"qAr" = ( -/obj/machinery/computer/records/medical{ - dir = 8 - }, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, +"qAB" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, -/area/station/command/heads_quarters/cmo) +/area/station/hallway/primary/central/fore) "qAK" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -51807,12 +52094,17 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"qBB" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ +"qBl" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/corner{ dir = 1 }, -/turf/open/floor/grass, -/area/station/service/chapel) +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 4; + name = "Cold Loop to Gas" + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "qBC" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/effect/landmark/start/cook, @@ -51853,12 +52145,32 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/port) +"qCY" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/small/red/directional/south, +/turf/open/floor/engine, +/area/station/command/vault) "qCZ" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/half/contrasted, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) +"qDf" = ( +/obj/machinery/chem_master, +/obj/effect/turf_decal/bot, +/obj/machinery/light_switch/directional/south, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/item/paper/crumpled{ + default_raw_text = "This isn't funny, I'm trapped on the least fun room on the station."; + name = "poorly written complaint" + }, +/turf/open/floor/iron/dark, +/area/station/science/xenobiology) "qDp" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -51882,18 +52194,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/showroomfloor, /area/station/science/auxlab) -"qDC" = ( -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/medbay/lobby) -"qDE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "qDG" = ( /obj/effect/turf_decal/siding/thinplating/dark/end{ dir = 4 @@ -51904,18 +52204,6 @@ /obj/structure/flora/bush/flowers_pp/style_random, /turf/open/floor/grass, /area/station/service/chapel/monastery) -"qDI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/corner, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/aft) "qDX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -51968,18 +52256,6 @@ dir = 1 }, /area/station/hallway/primary/fore) -"qEM" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/engineering/supermatter/room) "qER" = ( /obj/structure/chair/pew{ dir = 8 @@ -51999,30 +52275,6 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) -"qFb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/turf_decal/siding/yellow/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage/gas) -"qFl" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/turf_decal/box, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "qFw" = ( /obj/machinery/door/airlock/research{ name = "Auxiliary Research" @@ -52048,7 +52300,9 @@ /area/station/command/heads_quarters/qm) "qGi" = ( /obj/effect/turf_decal/delivery, -/obj/structure/reagent_dispensers/plumbed, +/obj/structure/closet/radiation, +/obj/item/clothing/glasses/meson, +/obj/structure/sign/warning/secure_area/directional/west, /turf/open/floor/iron/dark, /area/station/engineering/gravity_generator) "qGq" = ( @@ -52057,6 +52311,10 @@ /obj/effect/turf_decal/tile/purple, /turf/open/floor/iron/showroomfloor, /area/station/science/auxlab) +"qGH" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/turf/closed/wall/rust, +/area/station/engineering/atmos) "qGK" = ( /turf/closed/wall, /area/station/medical/storage) @@ -52067,17 +52325,18 @@ /obj/item/kirbyplants/organic/plant14, /turf/open/floor/iron/showroomfloor, /area/station/commons/toilet/restrooms) -"qHy" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 +"qHI" = ( +/obj/machinery/light_switch/directional/south, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/blue{ + dir = 8 }, -/obj/machinery/camera/autoname/directional/south, -/turf/open/floor/iron/dark, -/area/station/maintenance/disposal/incinerator) +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/structure/table/glass, +/obj/item/mod/module/thermal_regulator, +/obj/item/mod/module/plasma_stabilizer, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/break_room) "qHV" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, @@ -52090,6 +52349,30 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"qIf" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/meter, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) +"qIz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"qIJ" = ( +/obj/effect/decal/cleanable/ash/large, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron/smooth_half, +/area/station/engineering/atmos) "qJf" = ( /turf/open/floor/wood, /area/station/service/bar/atrium) @@ -52137,6 +52420,13 @@ "qJR" = ( /turf/closed/wall/r_wall/rust, /area/station/maintenance/port/aft) +"qJT" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/holopad, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) "qJY" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/burnt_floor, @@ -52219,11 +52509,6 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"qKR" = ( -/obj/effect/decal/cleanable/ash, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "qKS" = ( /obj/effect/turf_decal/bot, /obj/effect/turf_decal/stripes/corner{ @@ -52336,10 +52621,6 @@ "qNr" = ( /turf/closed/wall, /area/station/hallway/primary/central/fore) -"qNH" = ( -/obj/machinery/atmospherics/pipe/layer_manifold/cyan, -/turf/closed/wall/r_wall/rust, -/area/station/maintenance/aft) "qNJ" = ( /obj/machinery/modular_computer/preset/id{ dir = 8 @@ -52389,6 +52670,17 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/medical/pharmacy) +"qNW" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot, +/obj/structure/sign/warning/directional/east, +/obj/structure/railing, +/obj/machinery/disposal/bin/tagger, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) "qOd" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -52396,7 +52688,7 @@ "qOq" = ( /obj/effect/turf_decal/loading_area, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, -/turf/open/floor/iron/dark, +/turf/open/floor/iron/dark/textured_large, /area/station/engineering/supermatter/room) "qOv" = ( /obj/structure/disposalpipe/segment, @@ -52428,19 +52720,6 @@ /obj/effect/turf_decal/tile/neutral/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/service/bar/atrium) -"qOG" = ( -/obj/structure/cable, -/obj/structure/table, -/obj/structure/extinguisher_cabinet/directional/east, -/obj/item/storage/box/lights/bulbs, -/obj/machinery/firealarm/directional/south, -/obj/item/tank/internals/oxygen/red, -/obj/item/clothing/mask/gas, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/maintenance/disposal/incinerator) "qOQ" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -52465,25 +52744,23 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"qPf" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/delivery, -/obj/machinery/door/firedoor, -/obj/item/folder/yellow, -/obj/machinery/door/poddoor/preopen{ - id = "atmos"; - name = "Atmospherics Blast Door" +"qOU" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/obj/machinery/door/window/right/directional/west{ - name = "Atmospherics Desk"; - req_access = list("atmospherics") +/turf/open/floor/iron/smooth_large, +/area/station/maintenance/department/chapel/monastery) +"qOV" = ( +/obj/machinery/vending/cola/red, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 }, -/obj/structure/desk_bell{ - pixel_x = 8; - pixel_y = 10 +/obj/effect/turf_decal/stripes/corner{ + dir = 4 }, -/turf/open/floor/plating, -/area/station/engineering/atmos/storage/gas) +/turf/open/floor/iron/white, +/area/station/security/prison/mess) "qPz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -52495,6 +52772,29 @@ /obj/effect/turf_decal/loading_area, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"qPJ" = ( +/obj/structure/table/wood, +/obj/item/folder/red, +/obj/item/lighter{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/cigarette/cigar/cohiba{ + pixel_x = 6 + }, +/obj/item/cigarette/cigar, +/obj/machinery/airalarm/directional/west, +/obj/item/paper_bin, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hos) +"qPP" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "qPU" = ( /obj/structure/bookcase/random/reference, /turf/open/floor/iron/dark, @@ -52539,21 +52839,35 @@ }, /turf/open/floor/plating, /area/station/maintenance/solars/port/aft) +"qQw" = ( +/obj/structure/chair/sofa/bench{ + dir = 4 + }, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"qQB" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/iron/stairs/left{ + dir = 4 + }, +/area/station/service/chapel/monastery) +"qQC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/tank/air/layer4, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/effect/turf_decal/box, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/maintenance/aft) "qQQ" = ( /obj/effect/turf_decal/siding/blue{ dir = 1 }, /turf/open/floor/iron, /area/station/command/bridge) -"qQR" = ( -/obj/effect/turf_decal/bot, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/wardrobe/hydro_wardrobe, -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/tile/green/fourcorners, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/checker, -/area/station/service/hydroponics) "qRf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -52589,18 +52903,6 @@ /obj/machinery/recharge_station, /turf/open/floor/iron, /area/station/cargo/warehouse) -"qRp" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, -/obj/machinery/door/airlock/atmos/glass{ - name = "Distribution Loop" - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/purple/visible{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/pumproom) "qRr" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/corner{ @@ -52669,12 +52971,6 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics) -"qSe" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/violet/visible, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos) "qSg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -52747,6 +53043,15 @@ }, /turf/open/floor/iron/dark, /area/station/medical/medbay/central) +"qSS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) "qTg" = ( /obj/effect/turf_decal/bot, /obj/machinery/shieldgen, @@ -52758,6 +53063,26 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/service/bar/atrium) +"qTI" = ( +/obj/effect/landmark/event_spawn, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 5 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/atmos) "qTJ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/brown/half/contrasted{ @@ -52770,24 +53095,6 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron, /area/station/cargo/warehouse) -"qTO" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/machinery/computer/security/telescreen/turbine/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "qTT" = ( /obj/docking_port/stationary/random{ name = "lavaland"; @@ -52813,17 +53120,21 @@ /obj/effect/turf_decal/tile/neutral/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) -"qUm" = ( -/obj/structure/closet/secure_closet/bar, -/obj/item/flashlight/lantern, -/obj/effect/turf_decal/bot, -/obj/machinery/airalarm/directional/west, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 +"qUf" = ( +/obj/effect/landmark/blobstart, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, -/obj/item/storage/photo_album/bar, -/turf/open/floor/iron/dark, -/area/station/service/bar/backroom) +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, +/turf/open/floor/iron/dark/telecomms, +/area/station/science/server) +"qUo" = ( +/obj/structure/sign/warning/electric_shock/directional/north, +/obj/structure/cable, +/obj/machinery/power/smes/full, +/turf/open/floor/circuit/red/telecomms, +/area/station/tcommsat/server) "qUp" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -52845,19 +53156,38 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron/showroomfloor, /area/station/science/auxlab) -"qUB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue/half/contrasted, +"qUx" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/firealarm/directional/south, -/obj/item/kirbyplants/organic/plant21, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/obj/structure/cable, /turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) +/area/station/hallway/primary/aft) +"qUB" = ( +/obj/structure/table, +/obj/item/storage/toolbox/electrical{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/storage/toolbox/electrical, +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/commons/storage/primary) "qUJ" = ( /obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/plating, /area/station/engineering/main) +"qUK" = ( +/obj/effect/turf_decal/tile/bar/fourcorners, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/atmos) +"qUN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/showroomfloor, +/area/station/security/execution/transfer) "qUO" = ( /obj/machinery/airalarm/directional/west, /obj/effect/turf_decal/stripes/line{ @@ -52866,6 +53196,20 @@ /obj/structure/cable/layer3, /turf/open/floor/engine, /area/station/ai/satellite/chamber) +"qUS" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/pen, +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/status_display/evac/directional/south, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/starboard) "qUU" = ( /turf/closed/wall/rust, /area/station/security/checkpoint/engineering) @@ -52952,11 +53296,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"qVM" = ( -/obj/structure/lattice, -/obj/structure/girder/reinforced, -/turf/open/space/basic, -/area/space/nearstation) "qVN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -53012,6 +53351,13 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/storage) +"qWt" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/caution/stand_clear, +/obj/machinery/newscaster/directional/south, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/brig) "qWz" = ( /obj/structure/lattice, /obj/structure/sign/warning/secure_area/directional/east, @@ -53049,12 +53395,6 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/plating, /area/station/security/prison) -"qWT" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output{ - dir = 1 - }, -/turf/open/floor/engine/plasma, -/area/station/engineering/atmos) "qXa" = ( /obj/structure/cable, /obj/effect/landmark/start/hangover, @@ -53076,15 +53416,6 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, /area/station/command/bridge) -"qXw" = ( -/obj/machinery/status_display/evac/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/courtroom) "qXA" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /turf/open/floor/engine/n2, @@ -53104,12 +53435,36 @@ }, /turf/open/floor/iron/dark, /area/station/security/evidence) -"qYe" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 +"qXY" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table, +/obj/item/electronics/airlock{ + pixel_x = -6; + pixel_y = 6 }, -/turf/open/floor/iron/dark, -/area/station/service/chapel/dock) +/obj/item/electronics/airlock, +/obj/item/electronics/firealarm, +/obj/item/electronics/firealarm, +/obj/item/electronics/firelock{ + pixel_y = -3; + pixel_x = -5 + }, +/obj/item/electronics/firelock, +/obj/item/electronics/airalarm{ + pixel_x = 7; + pixel_y = 5 + }, +/obj/item/electronics/airalarm{ + pixel_y = -4; + pixel_x = 3 + }, +/obj/item/electronics/apc, +/obj/item/electronics/apc{ + pixel_x = -1; + pixel_y = 3 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "qYr" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -53187,15 +53542,6 @@ "qZx" = ( /turf/closed/wall/r_wall/rust, /area/station/tcommsat/server) -"qZC" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister, -/obj/effect/turf_decal/box, -/obj/machinery/light/warm/directional/south, -/turf/open/floor/iron/dark, -/area/station/engineering/supermatter/room) "qZL" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -53221,13 +53567,34 @@ "qZX" = ( /turf/closed/wall/r_wall, /area/station/maintenance/starboard/aft) -"rah" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/holopad, +"rak" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/blood/gibs/up, +/obj/structure/sign/poster/official/wtf_is_co2/directional/north, /obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/engineering/atmos) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/security/execution/education) +"rao" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/showroomfloor, +/area/station/science) "raN" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -53241,22 +53608,23 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"raT" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ +"raW" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron, +/area/station/engineering/atmos/office) +"raX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/blue{ dir = 8 }, /obj/effect/turf_decal/tile/red{ dir = 1 }, +/obj/machinery/light/floor, /turf/open/floor/iron, -/area/station/engineering/supermatter/room) +/area/station/commons/fitness/recreation) "raY" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -53279,6 +53647,12 @@ }, /turf/open/floor/engine/n2, /area/station/engineering/atmos) +"rbw" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/obj/structure/lattice, +/obj/structure/sign/warning/hot_temp/directional/east, +/turf/open/space/basic, +/area/space/nearstation) "rbz" = ( /obj/machinery/disposal/bin/tagger, /obj/effect/turf_decal/bot, @@ -53308,23 +53682,6 @@ "rbO" = ( /turf/open/floor/iron, /area/station/service/hydroponics) -"rbQ" = ( -/obj/structure/table/wood/fancy, -/obj/effect/turf_decal/siding/wideplating/dark/corner{ - dir = 4 - }, -/obj/item/food/grown/flower/harebell, -/obj/item/food/grown/flower/harebell{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/food/grown/flower/harebell{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/machinery/wall_healer/directional/south, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "rbT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -53474,6 +53831,21 @@ /obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"ref" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/machinery/atmospherics/components/binary/pump/on{ + name = "External Waste Ports to Filter"; + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/atmos/storage) "rel" = ( /obj/structure/falsewall{ name = "suspicious wall" @@ -53497,16 +53869,32 @@ /obj/machinery/portable_atmospherics/canister/nitrous_oxide, /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) -"req" = ( -/obj/effect/turf_decal/bot, -/obj/effect/spawner/random/structure/crate_abandoned, -/obj/machinery/light/warm/directional/south, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/exit/departure_lounge) +"res" = ( +/obj/effect/landmark/start/chief_engineer, +/obj/structure/cable, +/obj/effect/turf_decal/siding/yellow{ + dir = 5 + }, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) "ret" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/engine/vacuum, /area/station/science/ordnance/burnchamber) +"rev" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "reJ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/research/glass{ @@ -53534,13 +53922,15 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/bronze, /area/station/maintenance/department/chapel) -"rfm" = ( -/obj/effect/turf_decal/stripes/corner{ +"rfl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/duct, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/plating, +/area/station/hallway/secondary/entry) "rfo" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -53568,14 +53958,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/dark, /area/station/security/checkpoint/supply) -"rfK" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/components/unary/airlock_pump/unbolt_only{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard) "rfM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -53585,6 +53967,14 @@ }, /turf/open/floor/iron/dark, /area/station/security/courtroom) +"rfN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) "rfX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -53595,15 +53985,25 @@ /obj/effect/turf_decal/tile/red, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"rgl" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, -/obj/machinery/airlock_sensor/incinerator_atmos{ - pixel_x = 24 +"rgq" = ( +/obj/structure/displaycase/labcage, +/obj/effect/turf_decal/box, +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/engine, -/area/station/maintenance/disposal/incinerator) +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) +"rgu" = ( +/obj/machinery/computer/mech_bay_power_console{ + dir = 4 + }, +/obj/item/radio/intercom/directional/north, +/obj/structure/cable, +/turf/open/floor/circuit/green{ + luminosity = 2 + }, +/area/station/science/robotics/mechbay) "rgv" = ( /obj/structure/reagent_dispensers/watertank, /obj/effect/turf_decal/delivery, @@ -53611,18 +54011,17 @@ /obj/effect/turf_decal/tile/neutral/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) +"rgE" = ( +/obj/machinery/portable_atmospherics/canister, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "rgF" = ( /turf/closed/wall/r_wall/rust, /area/station/hallway/primary/fore) -"rgW" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Arrivals Dock" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/entry) "rha" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/disposalpipe/segment, @@ -53635,6 +54034,19 @@ "rhd" = ( /turf/closed/wall/r_wall, /area/station/security/lockers) +"rhe" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/camera/directional/east{ + c_tag = "Starboard Hallway Cargo Counter"; + name = "starboard camera" + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow, +/obj/machinery/light/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "rhf" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/unres/delayed{ @@ -53678,9 +54090,21 @@ "rhN" = ( /turf/closed/wall, /area/station/commons/locker) +"rhR" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/effect/turf_decal/tile/yellow, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "rhT" = ( /turf/closed/wall, /area/station/service/lawoffice) +"rib" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) "rif" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -53695,13 +54119,37 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) -"riI" = ( -/obj/structure/table, -/obj/item/clipboard, -/obj/item/folder/yellow, -/obj/item/pipe_dispenser, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) +"rih" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/loading_area{ + dir = 4; + pixel_x = 5 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/office) +"rij" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/station/science) "riQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -53757,13 +54205,6 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/security/medical) -"rjk" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/security/prison/mess) "rjR" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, @@ -53775,13 +54216,16 @@ /turf/open/floor/plating, /area/station/maintenance/starboard) "rjT" = ( -/obj/effect/turf_decal/siding/wood{ +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ dir = 1 }, -/obj/structure/bookcase/random, -/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/box, +/obj/structure/fluff/shower_drain, +/obj/machinery/shower/directional/west{ + name = "emergency shower" + }, /turf/open/floor/iron/dark, -/area/station/service/library) +/area/station/engineering/main) "rjU" = ( /obj/effect/landmark/start/medical_doctor, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -53789,6 +54233,13 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/treatment_center) +"rkc" = ( +/obj/machinery/portable_atmospherics/canister, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/effect/turf_decal/box, +/obj/machinery/status_display/ai/directional/north, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "rkn" = ( /obj/item/stack/cable_coil, /turf/open/misc/asteroid/airless, @@ -53881,34 +54332,21 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron/dark, /area/station/security/interrogation) -"rms" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/red/half/contrasted{ +"rmu" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/engineering/circuit_workshop) +"rmy" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 8 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/iron, -/area/station/security/processing) -"rmt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/status_display/ai/directional/west, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/box, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible, +/obj/effect/turf_decal/stripes/white/line{ dir = 4 }, +/obj/machinery/meter/monitored/distro_loop, /turf/open/floor/iron/dark, -/area/station/command/vault) -"rmu" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/station/engineering/circuit_workshop) +/area/station/engineering/atmos/pumproom) "rmJ" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -53954,6 +54392,13 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/dark, /area/station/service/bar) +"rnd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/aft) "rnj" = ( /obj/item/clothing/suit/hooded/techpriest{ pixel_y = 8 @@ -53968,17 +54413,31 @@ /turf/open/floor/iron/dark, /area/station/service/chapel/storage) "rnp" = ( -/obj/structure/sign/poster/contraband/missing_gloves/directional/east, -/obj/effect/turf_decal/stripes/line{ - dir = 4 +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 }, -/turf/open/floor/engine, +/obj/structure/table, +/obj/item/pipe_dispenser, +/obj/item/clothing/mask/gas, +/obj/structure/sign/warning/engine_safety/directional/east, +/turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"rnt" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/security/processing) +"rns" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/service/chapel/monastery) +"rnv" = ( +/obj/machinery/button/ignition/incinerator/atmos{ + pixel_x = 6; + pixel_y = 38 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron/smooth, +/area/station/maintenance/disposal/incinerator) "rnB" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -54001,14 +54460,6 @@ "rnJ" = ( /turf/open/floor/iron/showroomfloor, /area/station/medical/surgery/theatre) -"rnP" = ( -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/machinery/duct, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "rnW" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -54020,14 +54471,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"rol" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/atmospherics/components/trinary/filter/atmos/plasma{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple/fourcorners, -/turf/open/floor/iron/showroomfloor, -/area/station/engineering/atmos) "ron" = ( /obj/effect/landmark/start/scientist, /obj/effect/turf_decal/tile/purple/anticorner/contrasted, @@ -54065,27 +54508,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/electrical) -"rov" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/engineering/atmos) -"roy" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "roF" = ( /obj/machinery/door/airlock/command/glass{ name = "Server Access" @@ -54102,6 +54524,16 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance) +"roL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "roO" = ( /obj/structure/grille/broken, /obj/effect/spawner/random/structure/crate, @@ -54153,15 +54585,6 @@ /obj/structure/sign/poster/official/pda_ad, /turf/closed/wall, /area/station/command/heads_quarters/hop) -"rqm" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/sign/poster/official/random/directional/south, -/obj/effect/turf_decal/tile/red/half/contrasted, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "rqn" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -54185,6 +54608,10 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/commons/storage/art) +"rqr" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/smooth_half, +/area/station/engineering/atmos) "rqs" = ( /obj/effect/turf_decal/bot, /obj/machinery/computer/security{ @@ -54222,10 +54649,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/warehouse) -"rqV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "rqW" = ( /obj/machinery/firealarm/directional/south, /obj/effect/turf_decal/tile/neutral/half/contrasted, @@ -54284,15 +54707,6 @@ /obj/effect/mapping_helpers/airlock/access/any/science/maintenance, /turf/open/floor/iron/dark, /area/station/maintenance/starboard) -"rrO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/structure/sign/poster/contraband/random/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/aft) "rrQ" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/abandoned, @@ -54301,14 +54715,11 @@ /obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, /turf/open/floor/iron/dark, /area/station/maintenance/port/greater) -"rrS" = ( -/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible{ - dir = 4 - }, -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible, -/turf/open/space/basic, -/area/space/nearstation) +"rrW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/crate_loot, +/turf/open/floor/plating, +/area/station/maintenance/aft) "rrY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -54334,6 +54745,11 @@ "rsd" = ( /turf/closed/wall/rock/porous, /area/space/nearstation) +"rse" = ( +/obj/machinery/atmospherics/components/tank/air, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/chapel/monastery) "rso" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating/airless, @@ -54343,6 +54759,24 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/central) +"rsS" = ( +/obj/machinery/computer/cargo, +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/directional/east, +/obj/machinery/requests_console/directional/north{ + department = "Quartermaster's Desk"; + name = "Quartermaster's Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/announcement, +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/structure/extinguisher_cabinet/directional/north{ + pixel_x = 32 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/qm) "rsT" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -54371,14 +54805,6 @@ /obj/effect/mapping_helpers/airlock/access/any/science/maintenance, /turf/open/floor/iron/dark, /area/station/maintenance/starboard/fore) -"rtc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/crate, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/aft) "rtr" = ( /obj/structure/table/glass, /obj/item/folder/white, @@ -54393,6 +54819,13 @@ }, /turf/open/floor/iron/dark, /area/station/medical/pharmacy) +"rtv" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/service/chapel/dock) "rtw" = ( /obj/machinery/door/poddoor/shutters/preopen{ dir = 1; @@ -54424,14 +54857,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/brig) -"rtF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ - dir = 8 - }, -/obj/effect/landmark/start/atmospheric_technician, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos/pumproom) "rtK" = ( /obj/structure/table, /obj/item/folder, @@ -54465,6 +54890,28 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/fore) +"rtO" = ( +/obj/machinery/vending/dinnerware, +/obj/effect/turf_decal/bot, +/obj/machinery/newscaster/directional/east, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/kitchen) +"rtR" = ( +/obj/structure/table/wood/fancy/black, +/obj/item/food/grown/flower/poppy/geranium{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/food/grown/flower/poppy/geranium{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/food/grown/flower/poppy/geranium, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "ruo" = ( /obj/machinery/computer/records/security{ dir = 8 @@ -54516,18 +54963,15 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"rvk" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ +"rvt" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ dir = 8 }, -/turf/open/floor/iron, +/obj/effect/turf_decal/bot, +/obj/structure/railing, +/obj/structure/closet/secure_closet/atmospherics, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, /area/station/engineering/atmos) "rvz" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -54554,6 +54998,11 @@ /obj/structure/transit_tube/crossing, /turf/open/floor/plating/airless, /area/space/nearstation) +"rvK" = ( +/obj/structure/flora/bush/lavendergrass/style_random, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/grass, +/area/station/service/chapel) "rvR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -54664,22 +55113,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"rxb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/turf_decal/siding/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 1 - }, -/obj/machinery/light/floor, -/turf/open/floor/iron/showroomfloor, -/area/station/science/lobby) "rxi" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -54787,13 +55220,16 @@ /obj/item/storage/toolbox/electrical, /turf/open/floor/plating, /area/station/maintenance/department/electrical) -"rya" = ( -/obj/effect/turf_decal/box/corners, +"rye" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/violet/visible{ + dir = 10 + }, /turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) +/area/station/engineering/atmos) "ryn" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -54827,21 +55263,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/port) -"ryZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/engineering/atmos) "rzr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/siding/wood{ @@ -54881,36 +55302,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) -"rzZ" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/structure/table, -/obj/item/soap/nanotrasen, -/obj/item/hand_labeler, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/machinery/camera/directional/south{ - c_tag = "Recovery Room"; - name = "medical camera"; - network = list("ss13","medical") - }, -/turf/open/floor/iron/dark, -/area/station/medical/medbay/central) -"rAt" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/engineering/main) -"rAA" = ( -/obj/effect/decal/cleanable/ash, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "rAB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -54950,17 +55341,28 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/catwalk_floor/iron_dark, /area/station/service/chapel/dock) -"rBE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/airlock/maintenance{ - name = "Atmospherics Maintenance" +"rBw" = ( +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 8; + name = "virology sorting disposal pipe" }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/turf/open/floor/iron/dark, -/area/station/maintenance/aft) +/obj/effect/mapping_helpers/mail_sorting/medbay/virology, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/medbay/central) +"rBH" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "rBO" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/caution/stand_clear, @@ -54986,22 +55388,13 @@ "rCi" = ( /turf/closed/wall, /area/station/hallway/secondary/entry) -"rCH" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) +"rCB" = ( +/obj/structure/window/spawner/directional/west, +/obj/structure/window/spawner/directional/east, +/obj/structure/window/spawner/directional/north, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/station/medical/medbay/central) "rDd" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -55058,6 +55451,15 @@ /obj/effect/landmark/firealarm_sanity, /turf/open/floor/iron/dark, /area/station/command/eva) +"rDq" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "rDO" = ( /obj/structure/frame/computer{ anchored = 1; @@ -55069,6 +55471,18 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/maintenance/fore) +"rEb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/reagent_dispensers/plumbed, +/obj/effect/turf_decal/delivery/white{ + color = "#52B4E9" + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/aft) "rEi" = ( /obj/structure/table/glass, /obj/machinery/computer/records/medical/laptop, @@ -55124,6 +55538,16 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/storage_shared) +"rEZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/iron, +/area/station/engineering/atmos) "rFc" = ( /obj/effect/turf_decal/bot, /obj/structure/table, @@ -55189,6 +55613,10 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/security/lockers) +"rFM" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/turf/closed/wall/r_wall, +/area/station/engineering/supermatter/engine) "rFN" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/light/small/directional/west, @@ -55198,6 +55626,14 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"rFR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/engineering/hallway) "rFS" = ( /obj/structure/chair/sofa/left/maroon{ dir = 8 @@ -55211,20 +55647,25 @@ }, /turf/open/floor/iron/dark, /area/station/service/bar/atrium) -"rGr" = ( -/obj/structure/table/wood, -/obj/machinery/reagentgrinder{ - pixel_y = 5 +"rGa" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/firedoor, +/obj/item/folder/yellow, +/obj/machinery/door/poddoor/preopen{ + id = "atmos"; + name = "Atmospherics Blast Door" }, -/obj/item/toy/figure/bartender{ - pixel_x = -7 +/obj/machinery/door/window/right/directional/west{ + name = "Atmospherics Desk"; + req_access = list("atmospherics") }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +/obj/structure/desk_bell{ + pixel_x = 8; + pixel_y = 10 }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/dark, -/area/station/service/bar/backroom) +/turf/open/floor/plating, +/area/station/engineering/atmos/office) "rGx" = ( /obj/structure/flora/bush/jungle/c/style_2, /turf/open/misc/asteroid, @@ -55238,6 +55679,26 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) +"rGL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/grille/broken, +/turf/open/floor/plating, +/area/station/maintenance/starboard) +"rGR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Air to Ports" + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible, +/turf/open/floor/iron, +/area/station/engineering/atmos) "rHc" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/structure/disposalpipe/segment{ @@ -55283,6 +55744,28 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central) +"rHE" = ( +/obj/machinery/requests_console/directional/west{ + department = "Engineering"; + name = "Engineering Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/information, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/bot, +/obj/machinery/microwave/engineering/cell_included, +/obj/structure/table, +/obj/item/storage/box/donkpockets{ + pixel_y = 5 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/lobby) +"rHL" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "rHX" = ( /obj/machinery/door/poddoor/shutters{ dir = 1; @@ -55292,6 +55775,13 @@ /obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/iron/dark, /area/station/command/eva) +"rHZ" = ( +/obj/effect/turf_decal/box, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "rIk" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, @@ -55304,26 +55794,6 @@ dir = 4 }, /area/station/hallway/primary/fore) -"rIm" = ( -/obj/machinery/airalarm/directional/east, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) -"rIt" = ( -/obj/structure/sign/painting/library{ - pixel_x = 32 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/dark, -/area/station/service/library) "rIy" = ( /obj/structure/mop_bucket/janitorialcart, /obj/effect/turf_decal/delivery, @@ -55333,15 +55803,11 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/service/janitor) -"rJt" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/dark/corner{ - dir = 1 - }, -/area/station/hallway/primary/fore) +"rJg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible, +/obj/machinery/meter, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "rJO" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -55372,6 +55838,20 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/construction/mining/aux_base) +"rKc" = ( +/obj/machinery/requests_console/directional/east{ + department = "Garden"; + name = "Garden Requests Console" + }, +/obj/effect/turf_decal/siding/green{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden) "rKf" = ( /obj/effect/turf_decal/stripes/corner, /turf/open/floor/engine, @@ -55393,20 +55873,18 @@ /obj/machinery/smartfridge/organ, /turf/open/floor/plating, /area/station/medical/surgery/theatre) -"rKm" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/computer/atmos_alert, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/storage/gas) "rKn" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ dir = 5 }, -/obj/machinery/duct, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"rKy" = ( +/obj/effect/turf_decal/sand/plating, +/obj/structure/transit_tube, +/turf/open/floor/plating/airless, +/area/space/nearstation) "rKI" = ( /obj/machinery/rnd/production/protolathe/department/science, /obj/effect/turf_decal/bot, @@ -55467,18 +55945,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/starboard) -"rKZ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood/gibs/up, -/obj/structure/sign/poster/official/wtf_is_co2/directional/north, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/security/execution/education) "rLh" = ( /obj/machinery/airalarm/directional/south, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -55551,15 +56017,17 @@ /obj/structure/table_frame, /turf/open/floor/plating, /area/ruin/space/has_grav/abandoned_warehouse) -"rMi" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/portable_atmospherics/scrubber/huge, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 +"rMc" = ( +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 1 }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/main) "rMl" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -55592,17 +56060,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit/departure_lounge) -"rNc" = ( -/obj/effect/turf_decal/siding/red{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/exit/departure_lounge) "rNe" = ( /obj/structure/chair/sofa/right/brown{ dir = 1 @@ -55626,19 +56083,21 @@ /obj/structure/barricade/wooden/crude, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"rNk" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/decal/cleanable/ash/large, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "rNo" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/locker) +"rNs" = ( +/obj/effect/turf_decal/stripes/line, +/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/hallway/primary/starboard) "rNx" = ( /turf/closed/wall/r_wall/rust, /area/station/service/chapel) @@ -55720,6 +56179,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"rOr" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/light/warm/directional/east, +/turf/open/floor/iron, +/area/station/cargo/miningdock) "rOz" = ( /turf/closed/wall/rust, /area/station/service/chapel/funeral) @@ -55748,14 +56217,14 @@ }, /turf/open/floor/plating, /area/station/science/lab) -"rON" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/violet/visible{ - dir = 8 +"rOK" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /turf/open/floor/iron, -/area/station/engineering/atmos) +/area/station/security/processing) "rOR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -55781,6 +56250,20 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/bridge) +"rPi" = ( +/obj/structure/chair/office/light{ + dir = 1; + pixel_y = 3 + }, +/obj/effect/turf_decal/siding/yellow{ + dir = 5 + }, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/turf/open/floor/iron, +/area/station/engineering/atmos/office) "rPl" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1 @@ -55813,6 +56296,14 @@ }, /turf/open/floor/iron/dark, /area/station/science/lobby) +"rPG" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos) "rPN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, @@ -55834,20 +56325,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"rPR" = ( -/obj/structure/chair/sofa/left/maroon{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/railing{ - dir = 8 - }, -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/service/bar/atrium) "rPU" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/contraband/grey_tide/directional/north, @@ -55921,19 +56398,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/auxlab) -"rQO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/item/radio/intercom/directional/north, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/structure/table, -/obj/item/storage/medkit/emergency, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation) "rQQ" = ( /obj/machinery/vending/hydronutrients, /obj/effect/turf_decal/delivery, @@ -55943,6 +56407,15 @@ }, /turf/open/floor/iron/dark, /area/station/service/hydroponics) +"rQT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock{ + name = "Prison Kitchen" + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) "rQZ" = ( /obj/structure/cable, /obj/machinery/door/airlock/maintenance, @@ -55962,6 +56435,25 @@ /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron/dark, /area/station/security/processing) +"rRc" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmos) "rRm" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/structure/crate, @@ -55995,16 +56487,6 @@ /obj/machinery/atmospherics/components/unary/outlet_injector/on, /turf/open/floor/engine/xenobio, /area/station/science/xenobiology) -"rRA" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/junction/flip{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "rRC" = ( /obj/machinery/recharge_station, /obj/effect/turf_decal/bot, @@ -56077,6 +56559,17 @@ "rSi" = ( /turf/closed/wall/rust, /area/station/medical/break_room) +"rSj" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/obj/structure/table, +/obj/item/hfr_box/core, +/obj/item/hfr_box/corner, +/obj/item/hfr_box/corner, +/obj/item/hfr_box/corner, +/obj/item/hfr_box/corner, +/turf/open/floor/iron, +/area/station/engineering/atmos) "rSk" = ( /obj/structure/transit_tube/curved/flipped, /obj/structure/lattice, @@ -56106,14 +56599,6 @@ "rTk" = ( /turf/closed/wall, /area/station/service/chapel/office) -"rTm" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/light/floor, -/turf/open/floor/iron, -/area/station/engineering/hallway) "rTp" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -56166,16 +56651,9 @@ /turf/open/floor/engine, /area/station/ai/satellite/foyer) "rTL" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/structure/table, -/obj/effect/spawner/random/armory/barrier_grenades, -/obj/item/key/security, -/obj/item/key/security, -/obj/machinery/light/small/red/directional/south, -/turf/open/floor/iron/dark, -/area/station/security/armory) +/obj/structure/sign/warning/fire/directional/west, +/turf/open/misc/asteroid/airless, +/area/space/nearstation) "rTS" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -56245,22 +56723,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"rUZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/red{ - dir = 9 - }, -/obj/effect/landmark/start/depsec/supply, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/machinery/light/floor, +"rVg" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, -/area/station/security/checkpoint/supply) +/area/station/engineering/atmos) "rVj" = ( /obj/effect/turf_decal/tile/purple{ dir = 8 @@ -56275,12 +56742,6 @@ /obj/item/stack/cable_coil/cut, /turf/open/floor/wood, /area/ruin/space/has_grav/abandoned_warehouse) -"rVu" = ( -/obj/structure/bookcase/random/fiction, -/obj/item/radio/intercom/directional/north, -/obj/machinery/light/warm/dim/directional/north, -/turf/open/floor/wood, -/area/station/service/library) "rVw" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -56313,14 +56774,15 @@ /obj/effect/turf_decal/stripes/corner, /turf/open/floor/engine/telecomms, /area/station/tcommsat/server) -"rWT" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "atmos"; - name = "Atmospherics Blast Door" - }, -/turf/open/floor/plating, -/area/station/engineering/atmos/storage/gas) +"rWh" = ( +/obj/effect/turf_decal/bot, +/obj/structure/rack, +/obj/item/storage/toolbox/emergency, +/obj/item/stack/rods/ten, +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/light/dim/directional/south, +/turf/open/floor/iron/checker, +/area/station/security/mechbay) "rXp" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -56348,6 +56810,12 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"rXY" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) "rYc" = ( /obj/structure/sign/nanotrasen, /turf/closed/wall, @@ -56359,16 +56827,18 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/station/service/library) -"rYh" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering/glass{ - name = "Laser Room" +"rYg" = ( +/obj/machinery/computer/crew{ + dir = 1 }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/turf_decal/bot, +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, /turf/open/floor/iron/dark, -/area/station/engineering/supermatter/room) +/area/station/security/checkpoint/medical) "rYi" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -56385,18 +56855,24 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics) -"rYA" = ( -/obj/structure/chair/sofa/bench{ - dir = 4 - }, -/obj/machinery/newscaster/directional/west, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "rYK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/dark, /area/station/service/library) +"rYQ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/entry) "rZb" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -56472,13 +56948,6 @@ /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating, /area/space/nearstation) -"say" = ( -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "saz" = ( /obj/structure/flora/grass/jungle/b/style_random, /obj/structure/window/reinforced/spawner/directional/south, @@ -56605,6 +57074,17 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/captain) +"sch" = ( +/obj/machinery/flasher/directional/east{ + id = "AI"; + name = "Meatbag Pacifier" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/ai/upload/chamber) "scp" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/corner{ @@ -56665,11 +57145,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/commons/storage/primary) -"sda" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/secure_area/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "sdd" = ( /obj/structure/table, /obj/item/clipboard, @@ -56712,6 +57187,19 @@ /obj/machinery/fax/heads/ce, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) +"sdN" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/firealarm/directional/west, +/obj/machinery/suit_storage_unit/standard_unit{ + desc = "An industrial suit storage device carrying retro space suits. Neat!"; + helmet_type = /obj/item/clothing/head/helmet/space; + suit_type = /obj/item/clothing/suit/space + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/eva) "sdT" = ( /obj/structure/girder, /obj/effect/decal/cleanable/dirt, @@ -56726,6 +57214,21 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/hallway) +"sek" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer, +/obj/item/radio/intercom/directional/north, +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/cryo) +"set" = ( +/obj/structure/sign/departments/cargo/directional/north, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/hallway/primary/fore) "sex" = ( /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 @@ -56832,16 +57335,15 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/aft) -"sfV" = ( +"sfN" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 4 }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) "sgh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -56893,15 +57395,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/armory, /turf/open/floor/iron/dark, /area/station/security/office) -"sgK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/engineering/lobby) "shk" = ( /obj/machinery/telecomms/bus/preset_four, /turf/open/floor/circuit/green/telecomms/mainframe, @@ -56923,14 +57416,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/chapel/monastery) -"shH" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "shO" = ( /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ dir = 1 @@ -56973,6 +57458,14 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"sie" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "atmos"; + name = "Atmospherics Blast Door" + }, +/turf/open/floor/plating, +/area/station/engineering/atmos/office) "sij" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -56990,15 +57483,6 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/department/medical/central) -"sip" = ( -/obj/effect/spawner/random/vending/colavend, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 8 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/port) "siF" = ( /obj/effect/decal/cleanable/dirt, /obj/item/kirbyplants/organic/plant16, @@ -57033,6 +57517,19 @@ /obj/item/toy/plush/ratplush, /turf/open/floor/bronze/filled, /area/station/maintenance/department/chapel) +"siZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) "sjd" = ( /obj/machinery/door/airlock/maintenance{ name = "Mining Dock Maintenance" @@ -57051,42 +57548,10 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard) -"sjp" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/plating, -/area/station/hallway/secondary/entry) "sjG" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, /area/station/service/chapel) -"sjK" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/showroomfloor, -/area/station/science) -"sjS" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/service/chapel) "sjV" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/abandoned, @@ -57097,6 +57562,32 @@ /obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, /turf/open/floor/iron/dark, /area/station/maintenance/port/greater) +"sjY" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"skh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel/storage) "skA" = ( /obj/effect/turf_decal/delivery, /obj/effect/decal/cleanable/dirt, @@ -57182,27 +57673,21 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"slu" = ( -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/engineering/atmos) -"slz" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +"slw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 4 }, /obj/machinery/duct, -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/machinery/light/warm/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, /turf/open/floor/iron/showroomfloor, -/area/station/service/bar/atrium) +/area/station/medical/pharmacy) "slB" = ( /obj/structure/chair/pew/left{ dir = 8 @@ -57216,21 +57701,14 @@ dir = 1 }, /area/station/service/chapel) -"slM" = ( +"slV" = ( +/obj/structure/rack, +/obj/effect/spawner/random/techstorage/security_all, /obj/effect/turf_decal/bot, -/obj/machinery/newscaster/directional/west, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron, -/area/station/command/heads_quarters/hop) -"slX" = ( -/obj/effect/turf_decal/box/corners{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) "smb" = ( /obj/effect/turf_decal/bot, /obj/structure/rack, @@ -57302,16 +57780,15 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"sni" = ( -/obj/structure/sign/warning/fire, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 4 - }, -/turf/closed/wall, -/area/station/engineering/atmos) "snn" = ( /turf/closed/wall/rust, /area/station/maintenance/department/chapel/monastery) +"sno" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 5 + }, +/turf/closed/wall/rust, +/area/station/engineering/atmos) "snw" = ( /obj/effect/turf_decal/bot, /obj/machinery/holopad, @@ -57347,20 +57824,29 @@ }, /turf/open/floor/carpet/green, /area/station/service/lawoffice) -"sog" = ( -/obj/structure/table, -/obj/item/stack/sheet/iron/ten, -/obj/item/stack/cable_coil, -/obj/item/storage/backpack/duffelbag/sec/surgery{ - pixel_y = 5 +"sop" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"sot" = ( +/obj/machinery/door/airlock/atmos/glass{ + name = "Atmospherics" }, -/obj/item/wirecutters, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/neutral{ +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/obj/machinery/duct, +/obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/iron/dark, -/area/station/security/execution/education) +/area/station/engineering/atmos/storage) "soB" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/red/opposingcorners, @@ -57386,6 +57872,17 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron/showroomfloor, /area/station/science) +"soY" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/entry) "soZ" = ( /obj/structure/table/reinforced, /obj/item/reagent_containers/condiment/saltshaker{ @@ -57418,6 +57915,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/green, /area/station/maintenance/port/greater) +"spv" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/hidden{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/hallway) "spw" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -57447,20 +57960,6 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/command/bridge) -"spU" = ( -/obj/machinery/modular_computer/preset/cargochat/engineering{ - dir = 8 - }, -/obj/machinery/light_switch/directional/east, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/main) "spX" = ( /obj/structure/cable, /obj/machinery/space_heater, @@ -57510,6 +58009,15 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/execution/transfer) +"sqF" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden/layer4{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ + dir = 10 + }, +/turf/closed/wall/r_wall, +/area/station/maintenance/disposal/incinerator) "sqK" = ( /obj/structure/table, /obj/effect/decal/cleanable/cobweb, @@ -57564,6 +58072,33 @@ /obj/effect/mapping_helpers/airlock/access/all/security/entrance, /turf/open/floor/iron/dark, /area/station/security/brig) +"srm" = ( +/obj/machinery/light/warm/directional/west, +/obj/structure/table, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/item/stack/sheet/glass/fifty{ + pixel_y = -4; + pixel_x = 1 + }, +/obj/item/stack/sheet/glass/fifty{ + pixel_y = -4; + pixel_x = 1 + }, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"srn" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/storage) "srs" = ( /obj/machinery/firealarm/directional/north, /turf/open/floor/iron/dark, @@ -57592,12 +58127,32 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"srB" = ( -/obj/item/kirbyplants/organic/plant21, -/obj/machinery/airalarm/directional/east, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, -/turf/open/floor/iron/dark/corner, -/area/station/hallway/primary/central/fore) +"srC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/purple/end{ + dir = 1 + }, +/obj/machinery/duct, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/station/science/auxlab) +"srQ" = ( +/obj/structure/sign/warning/cold_temp/directional/north, +/obj/structure/table, +/obj/item/storage/pill_bottle/mannitol{ + pixel_x = 8; + pixel_y = 7 + }, +/obj/item/wrench/medical, +/obj/item/reagent_containers/cup/beaker/cryoxadone, +/obj/item/reagent_containers/cup/beaker/cryoxadone, +/obj/item/reagent_containers/cup/beaker/cryoxadone, +/obj/item/reagent_containers/cup/beaker/cryoxadone, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/cryo) "srR" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -57619,19 +58174,21 @@ /obj/effect/landmark/navigate_destination/det, /turf/open/floor/iron/dark, /area/station/security/detectives_office) -"srX" = ( -/obj/effect/turf_decal/stripes/corner{ +"ssg" = ( +/obj/effect/turf_decal/siding/blue{ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 4 }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/engineering/atmos) +/obj/machinery/duct, +/obj/machinery/light/cold/directional/east, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/medbay/central) "ssi" = ( /obj/effect/turf_decal/bot, /obj/machinery/computer/security{ @@ -57685,6 +58242,22 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"ssD" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmos) "ssF" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -57699,6 +58272,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/chapel, /area/station/service/chapel) +"ssM" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/sign/warning/hot_temp/directional/north, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"ssQ" = ( +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "ssU" = ( /obj/structure/flora/grass/jungle/a/style_random, /obj/effect/turf_decal/stripes/line{ @@ -57737,7 +58319,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, /obj/structure/cable, -/obj/effect/spawner/random/structure/crate, /obj/effect/mapping_helpers/broken_floor, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, @@ -57755,10 +58336,12 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/auxlab) -"stU" = ( -/obj/machinery/telecomms/server/presets/common, -/turf/open/floor/circuit/green/telecomms/mainframe, -/area/station/tcommsat/server) +"suh" = ( +/obj/machinery/pdapainter, +/obj/structure/sign/poster/official/ian/directional/north, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) "suj" = ( /obj/machinery/door/airlock/external{ name = "External Freight Airlock" @@ -57774,11 +58357,27 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/abandoned_warehouse) +"suy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/main) "suA" = ( /obj/effect/turf_decal/delivery, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/cargo/storage) +"suE" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Atrium Starboard"; + name = "service camera" + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/station/service/bar/atrium) "suQ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -57794,10 +58393,38 @@ /obj/docking_port/stationary/escape_pod, /turf/open/space/basic, /area/space) +"suY" = ( +/obj/structure/table, +/obj/item/hand_labeler, +/obj/item/crowbar/red, +/obj/item/gps/mining, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch/directional/north, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/miningdock) "svk" = ( /obj/structure/flora/grass/jungle/a/style_random, /turf/open/misc/asteroid, /area/station/maintenance/port/greater) +"svm" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/medbay/central) "svp" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/atmospherics/components/trinary/filter/atmos/o2, @@ -57805,6 +58432,23 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/showroomfloor, /area/station/engineering/atmos) +"svU" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/highsecurity{ + name = "AI Upload" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, +/obj/effect/landmark/navigate_destination/aiupload, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/ai/upload/chamber) "svW" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/rack, @@ -57830,30 +58474,17 @@ /obj/structure/girder, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"swC" = ( -/obj/structure/table, -/obj/item/clipboard, -/obj/item/disk/computer/ordnance, -/obj/item/disk/computer/ordnance, -/obj/item/disk/computer/ordnance, -/obj/item/circuitboard/aicore{ - pixel_y = 5 - }, -/obj/item/hand_labeler, -/obj/machinery/airalarm/directional/west, -/obj/item/pai_card{ - pixel_x = 6 - }, -/obj/item/aicard, -/obj/item/taperecorder{ - pixel_x = -6; - pixel_y = 6 +"swq" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 4 }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 }, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/rd) +/obj/effect/turf_decal/tile/blue, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmos/office) "swR" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -57889,12 +58520,27 @@ "sxi" = ( /turf/closed/wall/r_wall, /area/station/service/chapel/office) +"sxj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/atmospherics/pipe/smart/simple/brown/hidden{ + dir = 1 + }, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/engineering/atmos/office) "sxl" = ( /obj/machinery/door/airlock/atmos{ name = "Filter Chamber" }, /obj/effect/mapping_helpers/airlock/abandoned, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance/departmental, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/maintenance/aft) "sxn" = ( @@ -57929,41 +58575,24 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/command/heads_quarters/ce) -"syl" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/brown{ - dir = 1 +"syh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron, -/area/station/cargo/miningdock) +/turf/open/floor/engine, +/area/station/ai/upload/chamber) "syu" = ( /obj/structure/sign/warning/deathsposal, /turf/closed/wall, /area/station/science/xenobiology) -"syA" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "syF" = ( /obj/structure/girder, /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/starboard) -"syU" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) "syZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -58016,6 +58645,15 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/central) +"szZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "sAm" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -58054,21 +58692,6 @@ /obj/effect/turf_decal/tile/neutral/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/cargo/sorting) -"sAV" = ( -/obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 4 - }, -/obj/effect/decal/cleanable/ash, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "sAZ" = ( /obj/structure/rack, /obj/effect/turf_decal/bot, @@ -58086,27 +58709,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/command/gateway) -"sBb" = ( -/obj/structure/table/wood, -/obj/item/storage/fancy/cigarettes/cigars/havana{ - pixel_y = 5 - }, -/obj/item/lighter, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/captain) -"sBd" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/light/floor, -/turf/open/floor/iron/dark, -/area/station/service/chapel/dock) "sBl" = ( /obj/effect/turf_decal/bot, /obj/effect/turf_decal/stripes/corner{ @@ -58118,17 +58720,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) -"sBm" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 4 - }, -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/machinery/duct, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "sBz" = ( /obj/structure/sign/warning/secure_area, /turf/closed/wall, @@ -58167,11 +58758,18 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/primary/central/fore) -"sCr" = ( -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 1 +"sCm" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"sCr" = ( /obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron, /area/station/engineering/main) "sCu" = ( @@ -58182,25 +58780,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/science/auxlab) -"sCx" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/washing_machine, -/obj/structure/extinguisher_cabinet/directional/north, -/obj/machinery/light_switch/directional/east, -/obj/effect/turf_decal/tile/neutral/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) -"sCy" = ( -/obj/effect/landmark/event_spawn, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/turf_decal/box, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "sCC" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -58246,35 +58825,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) -"sCV" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 4; - name = "Cold Loop to Gas" - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) -"sCY" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) "sDd" = ( /obj/machinery/door/airlock/research{ name = "Ordnance Lab" @@ -58294,12 +58844,8 @@ /turf/open/floor/iron/dark, /area/station/science/ordnance) "sDe" = ( -/obj/effect/turf_decal/bot, -/obj/structure/closet/crate{ - icon_state = "crateopen" - }, -/obj/structure/grille/broken, -/obj/effect/spawner/random/maintenance, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/aft) "sDq" = ( @@ -58308,10 +58854,12 @@ /obj/structure/closet/wardrobe/mixed, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"sDv" = ( -/obj/structure/table, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) +"sDw" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron, +/area/station/engineering/lobby) "sDy" = ( /obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ dir = 4 @@ -58321,6 +58869,24 @@ "sDD" = ( /turf/open/floor/iron/showroomfloor, /area/station/commons/toilet/restrooms) +"sDQ" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "sDW" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/corner, @@ -58372,6 +58938,32 @@ }, /turf/open/floor/grass, /area/station/security/prison/garden) +"sEO" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/portable_atmospherics/scrubber/huge, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) +"sEU" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/firedoor, +/turf/open/floor/plating, +/area/station/engineering/atmos/pumproom) +"sFe" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "sFg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -58385,25 +58977,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/showroomfloor, /area/station/science/ordnance) -"sFv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/siding/red{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/landmark/start/depsec/engineering, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/security/checkpoint/engineering) "sFF" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -58423,28 +58996,19 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/brig) +"sGB" = ( +/obj/machinery/portable_atmospherics/canister/plasma, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/storage) "sGF" = ( /obj/effect/turf_decal/siding/wood{ dir = 6 }, +/obj/effect/turf_decal/bot, +/obj/machinery/holopad, /turf/open/floor/wood, /area/station/command/heads_quarters/qm) -"sGV" = ( -/obj/effect/turf_decal/loading_area, -/obj/machinery/atmospherics/components/binary/pump/on{ - name = "Unfiltered & Air to Mix" - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green/anticorner/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/engineering/atmos/pumproom) "sHf" = ( /obj/structure/bed/dogbed/renault, /obj/machinery/button/door/directional/south{ @@ -58482,19 +59046,25 @@ /turf/open/floor/iron/dark, /area/station/medical/medbay/central) "sHo" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/computer/security/labor, -/obj/machinery/requests_console/directional/north{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/table, +/obj/machinery/requests_console/directional/west{ department = "Security"; name = "Security Requests Console" }, -/obj/effect/mapping_helpers/requests_console/supplies, +/obj/effect/mapping_helpers/requests_console/information, /obj/effect/mapping_helpers/requests_console/assistance, -/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch/directional/north{ + pixel_x = 6 + }, /obj/effect/decal/cleanable/cobweb, -/obj/machinery/airalarm/directional/west, +/obj/machinery/computer/security/telescreen/engine, +/obj/machinery/firealarm/directional/north{ + pixel_x = -5 + }, /turf/open/floor/iron/dark, -/area/station/security/checkpoint/supply) +/area/station/security/checkpoint/engineering) "sHC" = ( /obj/machinery/door/airlock/public/glass{ name = "Docking Hallway" @@ -58539,6 +59109,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/misc/asteroid, /area/space/nearstation) +"sIl" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "sIo" = ( /obj/structure/table, /obj/item/folder{ @@ -58588,22 +59165,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"sIx" = ( -/obj/effect/turf_decal/loading_area{ - dir = 4; - pixel_x = 5 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 +"sIy" = ( +/obj/structure/rack, +/obj/effect/turf_decal/bot, +/obj/item/storage/box/lights/mixed{ + pixel_y = 5 }, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage/gas) +/obj/item/screwdriver, +/obj/item/stack/cable_coil, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "sIH" = ( /obj/machinery/light_switch/directional/north, /obj/machinery/bci_implanter, @@ -58628,17 +59199,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/execution/transfer) -"sJH" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/meter, -/obj/machinery/light/directional/west, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/machinery/status_display/evac/directional/west, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "sJI" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/south, @@ -58650,7 +59210,7 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 8 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron/smooth, /area/station/engineering/atmos) "sJJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -58659,6 +59219,12 @@ }, /turf/open/floor/engine, /area/station/tcommsat/computer) +"sJK" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/carbon_input{ + dir = 4 + }, +/turf/open/floor/engine/co2, +/area/station/engineering/atmos) "sJM" = ( /turf/closed/wall, /area/station/medical/break_room) @@ -58742,6 +59308,12 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) +"sKO" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/showroomfloor, +/area/station/security/execution/transfer) "sKV" = ( /obj/structure/closet/crate/wooden/toy, /obj/effect/turf_decal/box, @@ -58776,12 +59348,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/lockers) -"sLl" = ( -/obj/structure/girder, -/obj/structure/grille, -/obj/structure/barricade/wooden, -/turf/open/floor/plating, -/area/station/maintenance/aft) "sLw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -58798,6 +59364,20 @@ }, /turf/open/floor/iron, /area/station/service/janitor) +"sLy" = ( +/obj/machinery/computer/communications{ + dir = 1 + }, +/obj/structure/plaque/static_plaque/golden/captain{ + pixel_y = -32 + }, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/warm/directional/south, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/captain) "sLD" = ( /obj/structure/extinguisher_cabinet/directional/north, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -58825,17 +59405,6 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron, /area/station/service/janitor) -"sLW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/visible{ - dir = 4 - }, -/obj/item/radio/intercom/directional/east, -/obj/machinery/light/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/pumproom) "sMa" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -58856,20 +59425,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/processing) -"sMf" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/atmos{ - name = "Atmospherics" - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "atmos-entrance" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "sMh" = ( /turf/closed/wall/rust, /area/station/hallway/secondary/exit/departure_lounge) @@ -58882,16 +59437,6 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics) -"sMk" = ( -/obj/effect/spawner/random/vending/snackvend, -/obj/effect/turf_decal/bot, -/obj/machinery/airalarm/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/central/fore) "sMu" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -58910,18 +59455,24 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/fore) +"sMG" = ( +/obj/structure/table/wood/fancy/black, +/obj/item/food/grown/flower/poppy/lily{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/food/grown/flower/poppy/lily{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/food/grown/flower/poppy/lily, +/turf/open/floor/iron/dark, +/area/station/service/chapel/monastery) "sMO" = ( /obj/machinery/telecomms/processor/preset_four, /obj/structure/cable, /turf/open/floor/circuit/green/telecomms/mainframe, /area/station/tcommsat/server) -"sMY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "sNa" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -58933,17 +59484,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"sNc" = ( -/obj/structure/bodycontainer/morgue{ - dir = 8 - }, -/obj/effect/turf_decal/bot_white, -/obj/structure/sign/poster/contraband/random/directional/east, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "sNe" = ( /obj/structure/filingcabinet/chestdrawer, /obj/machinery/firealarm/directional/west, @@ -58956,6 +59496,20 @@ }, /turf/open/floor/iron, /area/station/command/bridge) +"sNt" = ( +/obj/machinery/door/poddoor/preopen{ + id = "brigfrontdoor"; + name = "Front Security Blast Door" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/caution/stand_clear, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/security/brig) "sNx" = ( /obj/effect/decal/cleanable/dirt, /obj/item/shard, @@ -58964,16 +59518,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"sND" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/machinery/duct, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "sOi" = ( /obj/effect/turf_decal/bot, /obj/machinery/status_display/door_timer{ @@ -58990,20 +59534,6 @@ }, /turf/open/floor/iron, /area/station/security/brig) -"sOn" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) "sOy" = ( /obj/structure/chair{ dir = 1 @@ -59020,6 +59550,15 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"sOz" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/machinery/light/cold/dim/directional/east, +/obj/machinery/newscaster/directional/east, +/turf/open/floor/iron/cafeteria, +/area/station/security/prison/garden) "sOD" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -59029,12 +59568,13 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"sOJ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/central) +"sOM" = ( +/obj/machinery/atmospherics/components/binary/valve/digital/on{ + dir = 4; + name = "Waste Release" + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "sOS" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/effect/turf_decal/siding/green, @@ -59047,10 +59587,6 @@ /obj/structure/flora/bush/jungle/c/style_2, /turf/open/misc/asteroid, /area/space/nearstation) -"sOV" = ( -/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/visible, -/turf/closed/wall/r_wall, -/area/station/maintenance/aft) "sOX" = ( /obj/machinery/light_switch/directional/south, /obj/effect/turf_decal/stripes/corner, @@ -59070,35 +59606,16 @@ /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"sPg" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/old, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/machinery/camera/autoname/directional/west, -/turf/open/floor/iron/showroomfloor, -/area/station/science) -"sPG" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/siding/red/corner{ - dir = 1 - }, -/obj/effect/landmark/start/depsec/engineering, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/security/checkpoint/engineering) +"sPt" = ( +/obj/machinery/vending/wardrobe/bar_wardrobe, +/obj/effect/turf_decal/delivery, +/obj/effect/decal/cleanable/cobweb, +/obj/item/radio/intercom/directional/west, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/station/service/bar/backroom) "sPK" = ( /obj/effect/turf_decal/sand/plating, /obj/structure/cable, @@ -59113,16 +59630,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, /area/station/hallway/primary/aft) -"sQd" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark/corner{ - dir = 4 - }, -/area/station/hallway/primary/fore) "sQj" = ( /obj/structure/cable, /obj/effect/turf_decal/siding/blue{ @@ -59172,6 +59679,16 @@ dir = 4 }, /area/station/service/chapel) +"sQF" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/status_display/ai/directional/south, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/engine, +/area/station/ai/satellite/chamber) "sQI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -59221,14 +59738,6 @@ /obj/effect/turf_decal/tile/green/fourcorners, /turf/open/floor/iron/checker, /area/station/service/hydroponics) -"sRi" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible, -/turf/open/space/basic, -/area/space/nearstation) "sRm" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -59257,20 +59766,13 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/science/ordnance) -"sRO" = ( -/obj/structure/sign/warning/cold_temp/directional/north, +"sRH" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, /obj/structure/table, -/obj/item/storage/pill_bottle/mannitol{ - pixel_x = 8; - pixel_y = 7 - }, -/obj/item/wrench/medical, -/obj/item/reagent_containers/cup/beaker/cryoxadone, -/obj/item/reagent_containers/cup/beaker/cryoxadone, -/obj/item/reagent_containers/cup/beaker/cryoxadone, -/obj/item/reagent_containers/cup/beaker/cryoxadone, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/cryo) +/obj/item/surgery_tray/full, +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/dark, +/area/station/medical/surgery/theatre) "sRZ" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -59293,18 +59795,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/security/interrogation) -"sSh" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/light/directional/north, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "Port to Filter" - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos) "sSq" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/window/reinforced/spawner/directional/north, @@ -59365,9 +59855,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/construction/mining/aux_base) -"sSZ" = ( -/turf/closed/wall/r_wall, -/area/station/engineering/atmos) "sTe" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -59403,9 +59890,27 @@ }, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) +"sTC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "sTO" = ( /turf/closed/wall/r_wall, /area/station/maintenance/solars/port/fore) +"sTW" = ( +/obj/structure/window/reinforced/plasma/spawner/directional/east, +/obj/structure/cable, +/obj/machinery/power/energy_accumulator/tesla_coil/anchored, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 5 + }, +/turf/open/floor/circuit/green{ + luminosity = 2 + }, +/area/station/engineering/supermatter/engine) "sTZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -59419,17 +59924,6 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/medical/office) -"sUj" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/structure/cable, -/obj/machinery/light/floor, -/turf/open/floor/iron, -/area/station/cargo/office) "sUq" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -59506,6 +60000,13 @@ dir = 1 }, /area/station/service/chapel/monastery) +"sVM" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/medbay/central) "sVN" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -59564,13 +60065,6 @@ }, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) -"sVS" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "sVZ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -59590,12 +60084,16 @@ /area/station/maintenance/solars/starboard/aft) "sWj" = ( /obj/structure/table, -/obj/item/clothing/mask/gas, -/obj/item/storage/toolbox/electrical, -/obj/effect/turf_decal/stripes/line{ - dir = 4 +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 }, -/turf/open/floor/engine, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 4; + pixel_x = 2 + }, +/obj/item/storage/toolbox/electrical, +/obj/structure/sign/poster/ripped/directional/east, +/turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) "sWl" = ( /turf/closed/wall/rust, @@ -59648,12 +60146,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/dark, /area/station/security/office) -"sXo" = ( -/obj/structure/chair/comfy/brown{ - dir = 4 - }, -/turf/open/floor/carpet/royalblack, -/area/station/command/heads_quarters/captain) "sXB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -59705,12 +60197,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/lobby) -"sXQ" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/shieldgen, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/engineering/supermatter/room) "sXT" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -59757,20 +60243,21 @@ /obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/plating, /area/station/maintenance/disposal/incinerator) -"sYx" = ( -/obj/machinery/airalarm/directional/north, -/obj/machinery/camera/directional/north{ - c_tag = "Engineering Desk"; - name = "engineering camera"; - network = list("ss13","engine") - }, -/obj/structure/disposalpipe/segment{ +"sYK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/stripes/corner{ dir = 4 }, -/obj/machinery/rnd/production/protolathe/department/engineering, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted, +/obj/effect/turf_decal/tile/purple, +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/showroomfloor, +/area/station/science/auxlab) "sYM" = ( /obj/machinery/light/small/directional/south, /obj/effect/turf_decal/stripes/line{ @@ -59781,16 +60268,17 @@ }, /turf/open/floor/plating, /area/station/service/chapel) -"sZb" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/thermomachine/heater{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos/pumproom) +"sYO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/closed/wall/r_wall, +/area/station/security/checkpoint/engineering) +"sYZ" = ( +/mob/living/carbon/human/species/monkey, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/small/directional/west, +/turf/open/floor/grass, +/area/station/science/auxlab) "sZe" = ( /obj/effect/decal/cleanable/greenglow, /obj/effect/decal/cleanable/dirt, @@ -59809,19 +60297,6 @@ /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating/airless, /area/space/nearstation) -"sZz" = ( -/obj/effect/turf_decal/loading_area{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/storage/gas) "sZB" = ( /obj/machinery/disposal/delivery_chute{ desc = "Only the worthy may claim the belt"; @@ -59837,30 +60312,14 @@ }, /turf/open/floor/iron/dark, /area/station/commons/storage/primary) -"sZC" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/radio/intercom/directional/south, -/obj/structure/disposalpipe/segment{ - dir = 4 +"sZJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, +/obj/effect/turf_decal/stripes/line, /obj/machinery/duct, -/obj/machinery/light/warm/directional/south, -/turf/open/floor/wood, -/area/station/service/bar/atrium) -"sZK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/burnt_floor, -/obj/machinery/atmospherics/components/binary/pump/on/layer4{ - dir = 2; - name = "Airlock Pump"; - target_pressure = 300; - hide = 1 - }, -/obj/effect/spawner/random/structure/tank_holder, -/turf/open/floor/plating, -/area/station/maintenance/starboard) +/turf/open/floor/engine, +/area/station/engineering/main) "sZL" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -59870,29 +60329,6 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"sZR" = ( -/obj/structure/table, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/machinery/airalarm/directional/east, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/dark, -/area/station/ai/satellite/maintenance/storage) -"sZV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) -"sZX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/start/chaplain, -/obj/machinery/light/floor, -/turf/open/floor/carpet/red, -/area/station/service/chapel) "tav" = ( /obj/structure/cable, /obj/effect/turf_decal/bot, @@ -59905,6 +60341,13 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) +"taA" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) "taM" = ( /obj/machinery/nuclearbomb/selfdestruct, /turf/open/floor/circuit/green{ @@ -59981,16 +60424,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/showroomfloor, /area/station/science/genetics) -"tbz" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/structure/sign/poster/official/enlist/directional/east, -/obj/machinery/light/small/directional/south, -/turf/open/floor/plating, -/area/station/hallway/secondary/exit/departure_lounge) "tbE" = ( /obj/machinery/door/airlock/external{ name = "Arrival Shuttle Airlock" @@ -60011,15 +60444,6 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/iron/dark, /area/station/cargo/drone_bay) -"tcg" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/space_heater, -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 1; - name = "Air to External Air Ports" - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "tck" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, @@ -60084,13 +60508,6 @@ /obj/machinery/telecomms/processor/preset_three, /turf/open/floor/circuit/green/telecomms/mainframe, /area/station/tcommsat/server) -"tdv" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "tdB" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -60098,6 +60515,25 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/medical/treatment_center) +"tdC" = ( +/obj/item/kirbyplants/organic/plant5, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"tdG" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, +/obj/effect/turf_decal/tile/red, +/obj/machinery/vending/tool, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "tdW" = ( /obj/machinery/light_switch/directional/south, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -60129,18 +60565,6 @@ }, /turf/open/floor/carpet/royalblue, /area/station/command/heads_quarters/captain) -"teg" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/corner, -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/hidden{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/dark/visible, -/turf/open/floor/iron/dark, -/area/station/maintenance/disposal/incinerator) "tej" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, @@ -60185,6 +60609,16 @@ /obj/structure/sign/warning/secure_area, /turf/closed/wall/r_wall/rust, /area/station/engineering/supermatter/room) +"tfe" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron/dark, +/area/station/service/chapel/monastery) "tfh" = ( /obj/structure/disposalpipe/sorting/mail{ dir = 8; @@ -60232,15 +60666,6 @@ "tfI" = ( /turf/closed/wall/r_wall/rust, /area/station/service/chapel/office) -"tfS" = ( -/obj/structure/table, -/obj/machinery/recharger, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/obj/machinery/light/dim/directional/west, -/turf/open/floor/iron/dark, -/area/station/security/brig) "tfV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -60268,25 +60693,12 @@ }, /turf/open/floor/plating, /area/station/hallway/primary/fore) -"tgd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/structure/cable, -/obj/effect/turf_decal/siding/red{ - dir = 1 - }, -/obj/effect/landmark/start/depsec/engineering, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/security/checkpoint/engineering) +"tge" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/pipedispenser, +/obj/machinery/status_display/evac/directional/south, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "tgp" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/crate, @@ -60294,6 +60706,14 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"tgs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) "tgx" = ( /obj/item/storage/toolbox/electrical{ pixel_x = -3; @@ -60311,10 +60731,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/warden) -"tgU" = ( -/obj/structure/flora/rock/pile/style_2, -/turf/open/misc/asteroid/airless, -/area/space/nearstation) "tgZ" = ( /obj/structure/table, /obj/item/radio{ @@ -60333,11 +60749,13 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) -"thg" = ( -/obj/structure/lattice, -/obj/structure/transit_tube/crossing/horizontal, -/turf/open/space/basic, -/area/space/nearstation) +"thf" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central/fore) "tho" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 4 @@ -60372,17 +60790,18 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/medical/storage) -"thT" = ( -/obj/item/radio/intercom/directional/west, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ +"thJ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/iron, -/area/station/cargo/storage) +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/smooth_half, +/area/station/engineering/supermatter/room) "thU" = ( /obj/structure/cable, /obj/structure/grille/broken, @@ -60420,17 +60839,13 @@ /obj/machinery/computer/order_console/bitrunning, /turf/open/floor/iron/dark, /area/station/cargo/storage) -"tjd" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ +"tiU" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron, -/area/station/cargo/miningdock) +/obj/effect/turf_decal/box, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "tjv" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -60493,6 +60908,15 @@ /obj/machinery/computer/security/telescreen/rd/directional/east, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) +"tkp" = ( +/obj/machinery/smartfridge/food, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "kitchenshutters"; + name = "Kitchen Shutters" + }, +/turf/open/floor/iron/showroomfloor, +/area/station/service/kitchen) "tkO" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 @@ -60500,7 +60924,8 @@ /obj/machinery/portable_atmospherics/canister, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/box, -/turf/open/floor/iron/dark, +/obj/structure/sign/warning/fire/directional/east, +/turf/open/floor/iron/dark/textured_large, /area/station/engineering/supermatter/room) "tkP" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ @@ -60537,18 +60962,13 @@ }, /turf/open/space/basic, /area/space) -"tlt" = ( -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 8 - }, -/obj/item/flatpack/flatpacker, -/obj/effect/turf_decal/delivery, -/obj/structure/disposalpipe/segment{ +"tld" = ( +/obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/dark, -/area/station/science/lab) +/obj/machinery/light/warm/directional/south, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "tly" = ( /obj/machinery/door/airlock/maintenance{ name = "Xenobiology Maintenance" @@ -60561,6 +60981,14 @@ /obj/effect/mapping_helpers/airlock/access/all/science/xenobio, /turf/open/floor/iron/dark, /area/station/maintenance/starboard) +"tlz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/ai/upload/chamber) "tlA" = ( /obj/structure/flora/bush/lavendergrass/style_random, /obj/structure/flora/bush/leavy/style_random, @@ -60691,13 +61119,6 @@ }, /turf/open/floor/plating/plasma/rust, /area/station/maintenance/space_hut/plasmaman) -"tmx" = ( -/obj/machinery/modular_computer/preset/id, -/obj/effect/turf_decal/bot, -/obj/machinery/computer/security/telescreen/ce/directional/north, -/obj/machinery/light/directional/north, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "tmD" = ( /obj/machinery/firealarm/directional/west, /obj/machinery/portable_atmospherics/canister/air, @@ -60722,6 +61143,18 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/disposal) +"tmS" = ( +/obj/effect/turf_decal/bot, +/obj/structure/rack, +/obj/structure/grille/broken, +/obj/item/wallframe/apc, +/obj/item/electronics/apc{ + pixel_x = 1; + pixel_y = 8 + }, +/obj/structure/sign/poster/contraband/random/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/aft) "tmV" = ( /obj/structure/table/wood, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -60745,35 +61178,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/bridge) -"tnl" = ( -/obj/structure/rack, -/obj/item/storage/toolbox/emergency{ - pixel_y = 5 - }, -/obj/item/stack/cable_coil, -/obj/item/wirecutters, -/obj/effect/turf_decal/bot, -/obj/machinery/airalarm/directional/west, -/obj/structure/extinguisher_cabinet/directional/north, -/obj/machinery/camera/directional/north{ - c_tag = "Recreation Arcade"; - name = "recreation camera" - }, -/obj/effect/decal/cleanable/cobweb, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron/dark, -/area/station/commons/fitness/recreation) -"tnp" = ( -/obj/machinery/portable_atmospherics/canister/nitrous_oxide, -/obj/effect/turf_decal/delivery, -/obj/machinery/camera/directional/south{ - c_tag = "Atmospherics Desk"; - name = "atmospherics camera"; - network = list("ss13","engine") - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage/gas) "tnq" = ( /obj/machinery/computer/security{ dir = 4 @@ -60795,15 +61199,6 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/plastic, /area/station/security/prison/shower) -"tnC" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "tnH" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -60840,6 +61235,28 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/storage_shared) +"too" = ( +/obj/machinery/airalarm/directional/west, +/obj/machinery/rnd/production/techfab/department/service, +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/light/cold/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/service) +"toD" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) "toE" = ( /obj/effect/turf_decal/bot, /obj/machinery/holopad, @@ -60907,6 +61324,17 @@ }, /turf/open/floor/iron, /area/station/security/execution/transfer) +"tph" = ( +/obj/machinery/door/airlock/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/unres/delayed{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/maintenance/aft) "tpl" = ( /obj/structure/closet/secure_closet/detective, /obj/structure/reagent_dispensers/wall/peppertank/directional/north, @@ -60925,18 +61353,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/fore) -"tpw" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ - dir = 1 - }, -/obj/machinery/meter, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/engineering/atmos/pumproom) "tpy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/siding/blue/corner, @@ -60989,15 +61405,31 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/chemistry) -"tqt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +"tqr" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table, +/obj/item/radio/off{ + pixel_x = 6 + }, +/obj/item/radio/off{ + pixel_y = 4; + pixel_x = -4 + }, +/obj/item/lightreplacer{ + pixel_y = 2 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"tqv" = ( +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/starboard) +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "tqz" = ( /turf/closed/wall/r_wall/rust, /area/station/maintenance/central) @@ -61082,14 +61514,6 @@ /obj/machinery/portable_atmospherics/canister/plasma, /turf/open/floor/engine/plasma, /area/station/engineering/atmos) -"trx" = ( -/obj/machinery/conveyor/inverted{ - dir = 6; - id = "mining" - }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/dark, -/area/station/cargo/miningoffice) "tsf" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -61104,6 +61528,24 @@ /obj/structure/sign/warning/fire, /turf/closed/wall/rust, /area/station/commons/fitness/recreation) +"tsy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/yellow{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "tsF" = ( /turf/closed/wall, /area/station/security/mechbay) @@ -61126,13 +61568,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"tth" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "ttn" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -61152,6 +61587,20 @@ }, /turf/open/floor/iron/dark, /area/station/commons/storage/art) +"ttv" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/aft) "ttB" = ( /obj/structure/grille/broken, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -61165,10 +61614,9 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "ttR" = ( -/obj/structure/sign/warning/secure_area/directional/south, /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/crate, /obj/effect/mapping_helpers/burnt_floor, +/obj/effect/spawner/random/trash/grime, /turf/open/floor/plating, /area/station/maintenance/aft) "ttZ" = ( @@ -61203,24 +61651,28 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/cargo/storage) -"tur" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, -/obj/machinery/door/airlock/public/glass/incinerator/atmos_exterior, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 +"tul" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/brown{ + dir = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/turf/open/floor/engine, -/area/station/maintenance/disposal/incinerator) +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/miningdock) "tuF" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted, /obj/effect/turf_decal/tile/red, /turf/open/floor/iron, /area/station/hallway/primary/central) +"tuI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/starboard) "tuP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, @@ -61232,30 +61684,31 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"tuS" = ( -/obj/effect/turf_decal/siding/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/command/heads_quarters/ce) +"tuR" = ( +/obj/structure/closet/crate/trashcart/laundry, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/clothing/backpack, +/obj/effect/spawner/random/clothing/gloves, +/turf/open/floor/plating, +/area/station/maintenance/aft) "tuT" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, /obj/effect/landmark/start/cook, /turf/open/floor/iron/dark, /area/station/service/kitchen) -"tuV" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 +"tuW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, +/area/station/engineering/atmos) +"tvu" = ( +/turf/open/floor/iron/stairs/left{ + dir = 8 + }, /area/station/hallway/primary/fore) "tvB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -61268,27 +61721,6 @@ /obj/effect/landmark/start/bitrunner, /turf/open/floor/iron/dark, /area/station/cargo/bitrunning/den) -"tvD" = ( -/obj/structure/table/wood/fancy, -/obj/item/food/grown/flower/poppy{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/food/grown/flower/poppy{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/food/grown/flower/poppy, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/iron/dark, -/area/station/service/chapel) -"tvH" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/components/unary/passive_vent{ - dir = 1 - }, -/turf/open/space/basic, -/area/space/nearstation) "tvO" = ( /turf/closed/wall/rust, /area/station/science/auxlab) @@ -61361,15 +61793,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron/dark, /area/station/maintenance/fore) -"twu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, -/obj/effect/turf_decal/tile/blue, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/engineering/atmos) "twG" = ( /obj/effect/landmark/event_spawn, /obj/structure/disposalpipe/segment, @@ -61406,11 +61829,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating/airless, /area/station/maintenance/solars/starboard/fore) -"txd" = ( -/obj/structure/lattice, -/obj/structure/transit_tube, -/turf/open/space/basic, -/area/space/nearstation) "txi" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/structure/table_or_rack, @@ -61426,14 +61844,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/hallway/primary/central/fore) -"txB" = ( -/obj/structure/closet/secure_closet/hydroponics, -/obj/effect/turf_decal/bot, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/newscaster/directional/south, -/obj/effect/turf_decal/tile/green/fourcorners, -/turf/open/floor/iron/checker, -/area/station/service/hydroponics) "tyk" = ( /obj/structure/closet/secure_closet/warden, /obj/effect/turf_decal/delivery, @@ -61452,25 +61862,20 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/engine, /area/station/engineering/main) -"tyY" = ( -/obj/effect/turf_decal/plaque{ - icon_state = "L9" - }, -/obj/machinery/camera/directional/north{ - c_tag = "Fore Hallway Centre"; - name = "fore camera" - }, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 +"tzc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, +/obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, -/area/station/hallway/primary/central/fore) +/area/station/engineering/atmos) +"tze" = ( +/obj/machinery/newscaster/directional/north, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/science/lobby) "tzg" = ( /obj/structure/cable, /obj/machinery/door/airlock/research{ @@ -61514,19 +61919,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/execution/transfer) -"tzF" = ( -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1; - name = "CO2 to Pure" - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "tzI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -61586,6 +61978,26 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, /area/station/security/office) +"tAp" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/button/door/directional/south{ + id = "morgueprivacy"; + name = "Morgue Privacy Shutter"; + pixel_x = -8 + }, +/obj/machinery/light/small/directional/south, +/obj/machinery/holopad, +/obj/effect/turf_decal/box/white{ + color = "#52B4E9" + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"tAs" = ( +/obj/machinery/atmospherics/pipe/smart/simple/brown/visible, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos) "tAx" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -61603,38 +62015,11 @@ /obj/item/seeds/carrot, /turf/open/floor/grass, /area/station/security/prison/garden) -"tAN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 9 - }, -/obj/machinery/button/door/incinerator_vent_atmos_aux{ - pixel_x = 23; - pixel_y = 7 - }, -/obj/machinery/button/door/incinerator_vent_atmos_main{ - pixel_x = 23; - pixel_y = -6 - }, -/turf/open/floor/engine, -/area/station/maintenance/disposal/incinerator) "tAP" = ( /obj/machinery/airalarm/directional/south, /obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron/showroomfloor, /area/station/medical/chemistry) -"tAX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "tBh" = ( /obj/structure/table, /obj/effect/turf_decal/tile/blue/half/contrasted{ @@ -61660,11 +62045,14 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/exit/departure_lounge) -"tBy" = ( -/obj/machinery/suit_storage_unit/industrial/loader, -/obj/machinery/light/warm/directional/south, -/turf/open/floor/iron, -/area/station/cargo/warehouse) +"tBB" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/turf_decal/bot, +/obj/machinery/computer/prisoner/gulag_teleporter_computer{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/processing) "tBJ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -61673,20 +62061,6 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/department/crew_quarters/bar) -"tBR" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/obj/machinery/button/door/atmos_test_room_mainvent_1{ - pixel_y = -22 - }, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "tBT" = ( /obj/effect/turf_decal/delivery, /obj/machinery/space_heater, @@ -61716,22 +62090,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) -"tCo" = ( -/obj/item/radio/intercom/directional/east, -/obj/machinery/computer/station_alert{ - dir = 8 - }, -/obj/effect/turf_decal/bot, -/obj/machinery/light/warm/directional/east, -/turf/open/floor/iron, -/area/station/engineering/main) -"tCp" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "tCQ" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ @@ -61757,6 +62115,18 @@ /obj/effect/turf_decal/bot_white, /turf/open/floor/iron/dark/textured_large, /area/station/service/chapel/funeral) +"tDn" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/radio/intercom/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/obj/machinery/light/warm/directional/south, +/turf/open/floor/wood, +/area/station/service/bar/atrium) "tDs" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ @@ -61778,6 +62148,12 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/dark, /area/station/security/courtroom) +"tDy" = ( +/obj/machinery/atmospherics/components/unary/passive_vent/layer2{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "tDC" = ( /turf/closed/wall/rust, /area/station/maintenance/solars/port/fore) @@ -61800,12 +62176,24 @@ name = "Engine Access Shutters" }, /obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/obj/machinery/duct, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"tDM" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/tile/yellow, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"tDO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel/dock) "tDR" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/effect/turf_decal/delivery, @@ -61820,12 +62208,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/janitor) -"tDT" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "tDW" = ( /obj/structure/railing/corner{ dir = 8 @@ -61836,6 +62218,22 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron/showroomfloor, /area/station/service/bar/atrium) +"tEe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/filingcabinet, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/item/radio/intercom/directional/south, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) "tEt" = ( /obj/structure/sign/poster/official/no_erp/directional/south, /obj/machinery/portable_atmospherics/canister/anesthetic_mix, @@ -61848,6 +62246,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"tET" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/sign/poster/official/enlist/directional/east, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/station/hallway/secondary/exit/departure_lounge) "tEX" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -61882,6 +62290,42 @@ /obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/iron/dark, /area/station/hallway/primary/port) +"tFf" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/effect/turf_decal/box/red, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister, +/obj/machinery/light/cold/directional/east, +/turf/open/floor/iron/showroomfloor, +/area/station/science/ordnance) +"tFh" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/turf_decal/siding/brown{ + dir = 1 + }, +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/smooth_half, +/area/station/engineering/atmos/pumproom) +"tFj" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "tFn" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/white/line{ @@ -61890,6 +62334,26 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison) +"tFt" = ( +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/loading_area{ + dir = 4; + pixel_x = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/office) "tFS" = ( /obj/structure/rack, /obj/effect/turf_decal/bot, @@ -61946,6 +62410,18 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/engineering/hallway) +"tGM" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/anesthetic_mix, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/medical/cryo) "tGQ" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -61981,21 +62457,6 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/tcommsat/computer) -"tHf" = ( -/obj/machinery/light/directional/east, -/obj/machinery/status_display/ai/directional/east, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/structure/tank_holder/extinguisher, -/turf/open/floor/iron, -/area/station/security/processing) -"tHs" = ( -/obj/structure/sign/warning/fire, -/obj/structure/grille, -/turf/closed/wall/r_wall/rust, -/area/station/engineering/atmos) "tHu" = ( /obj/structure/table, /obj/item/cigarette/cigar{ @@ -62024,6 +62485,13 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/miningoffice) +"tHK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/effect/spawner/random/gizmo, +/turf/open/floor/engine, +/area/station/science/auxlab) "tHO" = ( /obj/structure/reflector/box/anchored{ dir = 1 @@ -62070,14 +62538,6 @@ /obj/effect/spawner/random/maintenance/two, /turf/open/floor/iron/dark, /area/station/maintenance/port/lesser) -"tIJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/light/floor, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) "tIM" = ( /obj/machinery/rnd/experimentor, /turf/open/floor/engine, @@ -62090,23 +62550,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"tIX" = ( -/obj/structure/table, -/obj/item/clothing/head/utility/welding{ - pixel_y = 4 - }, -/obj/machinery/camera/directional/north{ - c_tag = "Tool Storage"; - name = "engineering camera"; - network = list("ss13","engine") - }, -/obj/structure/cable, -/obj/item/clothing/gloves/color/fyellow, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/machinery/light/directional/north, -/turf/open/floor/iron/dark, -/area/station/commons/storage/primary) "tIY" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -62115,32 +62558,23 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"tJa" = ( -/obj/machinery/camera/directional/west{ - c_tag = "Atmospherics Tank - N2O"; - name = "atmospherics camera"; - network = list("ss13","engine") - }, -/turf/open/floor/engine/n2o, -/area/station/engineering/atmos) "tJh" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment, -/obj/effect/spawner/random/structure/steam_vent, /obj/effect/mapping_helpers/broken_floor, +/obj/structure/grille/broken, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"tJK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/visible{ - dir = 8 +"tJN" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/machinery/meter/monitored/distro_loop, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/pumproom) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/computer/security/telescreen/monastery/directional/south, +/turf/open/floor/iron/grimy, +/area/station/hallway/primary/fore) "tJX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -62153,18 +62587,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"tKh" = ( -/obj/machinery/airalarm/directional/west, -/obj/effect/turf_decal/bot, -/obj/machinery/computer/prisoner/gulag_teleporter_computer{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/processing) -"tKi" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/engineering/atmos/pumproom) "tKt" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -62238,6 +62660,14 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/iron/dark, /area/station/medical/morgue) +"tLn" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/sign/warning/hot_temp/directional/east, +/turf/open/floor/plating/airless, +/area/space/nearstation) "tLo" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining/glass{ @@ -62252,62 +62682,25 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/shipping, /turf/open/floor/iron/dark, /area/station/cargo/sorting) +"tLF" = ( +/obj/effect/turf_decal/tile/red, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/box, +/turf/open/floor/iron, +/area/station/hallway/secondary/entry) "tLM" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/sign/warning/electric_shock/directional/west, /obj/structure/cable, /turf/open/floor/plating, /area/station/tcommsat/computer) -"tMo" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/item/radio/intercom/directional/south, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/loading_area{ - dir = 4; - pixel_x = 5 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage/gas) "tMu" = ( /obj/machinery/shower/directional/east, /obj/structure/cable, /turf/open/floor/plastic, /area/station/security/prison/shower) -"tMB" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command{ - name = "Chief Engineer's Office" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/engineering/ce, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) -"tMC" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/machinery/turretid{ - control_area = "/area/station/ai/upload/chamber"; - name = "AI Upload Turret Control"; - pixel_x = -30 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/engine, -/area/station/ai/upload/chamber) "tMO" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/emcloset, @@ -62348,9 +62741,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/lobby) -"tNf" = ( -/turf/open/floor/iron, -/area/station/cargo/miningdock) "tNj" = ( /obj/effect/turf_decal/bot, /obj/effect/spawner/random/maintenance/two, @@ -62365,20 +62755,12 @@ }, /turf/open/floor/engine/vacuum, /area/station/science/ordnance/bomb) -"tNB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ - dir = 8 - }, +"tNM" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/engineering/atmos) "tNQ" = ( @@ -62393,12 +62775,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 1 +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 }, +/obj/effect/turf_decal/tile/red, /turf/open/floor/iron, /area/station/engineering/main) "tNY" = ( @@ -62409,6 +62789,19 @@ /obj/effect/decal/cleanable/blood/old, /turf/open/floor/plating, /area/ruin/space/has_grav/abandoned_warehouse) +"tNZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/holopad/secure, +/obj/effect/turf_decal/bot, +/turf/open/floor/engine/telecomms, +/area/station/tcommsat/server) "tOa" = ( /obj/structure/table, /obj/item/tank/internals/oxygen/red, @@ -62517,15 +62910,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"tPz" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "tPC" = ( /obj/effect/turf_decal/bot, /obj/structure/frame/computer{ @@ -62537,11 +62921,28 @@ "tPD" = ( /turf/closed/wall/r_wall, /area/station/maintenance/fore) +"tPG" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) "tPH" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, /turf/open/floor/plating, /area/station/security/prison/mess) +"tPI" = ( +/obj/structure/closet/secure_closet/engineering_personal, +/obj/item/clothing/suit/hooded/wintercoat/engineering, +/obj/effect/turf_decal/delivery, +/obj/machinery/light_switch/directional/north, +/obj/item/pickaxe/mini, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, +/turf/open/floor/iron/dark, +/area/station/engineering/storage_shared) "tPP" = ( /turf/closed/wall/r_wall, /area/station/engineering/storage_shared) @@ -62579,6 +62980,16 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron/showroomfloor, /area/station/science/ordnance) +"tQF" = ( +/obj/machinery/airlock_sensor/incinerator_atmos{ + pixel_x = 24 + }, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden/layer4{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) "tQI" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/box, @@ -62602,13 +63013,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/science/ordnance/office) -"tQP" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, +"tRe" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/obj/structure/noticeboard/directional/east, -/turf/open/floor/wood, -/area/station/commons/vacant_room/commissary) +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/space/nearstation) "tRg" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/brown/half/contrasted{ @@ -62621,19 +63033,37 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, /area/station/cargo/miningdock) -"tRk" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/tile/yellow, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"tRq" = ( -/obj/machinery/telecomms/server/presets/supply, -/turf/open/floor/circuit/green/telecomms/mainframe, -/area/station/tcommsat/server) +"tRn" = ( +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/vending/wardrobe/hydro_wardrobe, +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/tile/green/fourcorners, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/checker, +/area/station/service/hydroponics) "tRw" = ( /obj/machinery/telecomms/bus/preset_three, /turf/open/floor/circuit/green/telecomms/mainframe, /area/station/tcommsat/server) +"tRN" = ( +/obj/machinery/button/door/directional/north{ + id = "Biohazard"; + name = "Emergency Research Lockdown"; + pixel_x = -8; + req_access = list("research") + }, +/obj/structure/table, +/obj/machinery/recharger, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/station/security/checkpoint/science) "tRO" = ( /obj/structure/sink/directional/west, /obj/effect/decal/cleanable/blood/old, @@ -62701,22 +63131,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/starboard) -"tSE" = ( -/obj/structure/table, -/obj/item/toy/cards/deck{ - pixel_x = -9 - }, -/obj/item/storage/dice{ - pixel_x = -8; - pixel_y = 11 - }, -/obj/item/storage/photo_album/prison{ - pixel_x = 8; - pixel_y = -3 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/grimy, -/area/station/security/prison) "tSI" = ( /obj/machinery/door/airlock/grunge{ id_tag = "Cabin_4"; @@ -62766,27 +63180,25 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"tTp" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ +"tSZ" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/computer/atmos_control/carbon_tank{ dir = 4 }, -/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 +/obj/effect/turf_decal/tile/dark/opposingcorners{ + dir = 4 }, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, /turf/open/floor/iron/showroomfloor, /area/station/engineering/atmos) -"tUc" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold/green/visible{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/engineering/atmos/pumproom) +"tTy" = ( +/obj/structure/chair, +/obj/effect/turf_decal/bot, +/obj/machinery/firealarm/directional/north, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) "tUe" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -62797,11 +63209,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"tUm" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/closed/wall/r_wall, -/area/station/maintenance/aft) "tUr" = ( /obj/structure/table, /obj/machinery/recharger, @@ -62810,15 +63217,6 @@ /obj/structure/sign/poster/contraband/the_griffin/directional/east, /turf/open/floor/iron/dark, /area/station/maintenance/fore) -"tUA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/machinery/light/floor, -/turf/open/floor/iron, -/area/station/cargo/office) "tUO" = ( /obj/structure/railing{ dir = 1 @@ -62850,12 +63248,14 @@ /obj/machinery/recharger, /turf/open/floor/iron/dark, /area/station/security/office) -"tVo" = ( -/obj/machinery/pdapainter, -/obj/structure/sign/poster/official/ian/directional/north, -/obj/machinery/light/warm/directional/north, -/turf/open/floor/wood, -/area/station/command/heads_quarters/hop) +"tVg" = ( +/obj/machinery/meter, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold/violet/visible{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "tVu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -62873,18 +63273,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) -"tVD" = ( -/obj/machinery/door/airlock/external{ - name = "Prison External Airlock" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/any/security/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/maintenance/port/lesser) "tVH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -62894,11 +63282,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) -"tVL" = ( -/obj/structure/fluff/divine/nexus, -/obj/machinery/light/small/red/directional/west, -/turf/open/floor/mineral/silver, -/area/station/service/chapel/office) "tVS" = ( /obj/effect/turf_decal/bot, /obj/machinery/computer/prisoner/management{ @@ -62938,6 +63321,15 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/primary/central/fore) +"tWf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/green/visible{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "tWg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -62947,20 +63339,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"tWx" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/light/small/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/components/unary/airlock_pump/unbolt_only{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/solars/port/fore) "tWA" = ( /obj/structure/table, /obj/structure/cable, @@ -63092,25 +63470,6 @@ }, /turf/open/floor/plating, /area/station/commons/fitness/recreation) -"tYZ" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1; - name = "Plasma to Pure" - }, -/obj/machinery/camera/directional/south{ - c_tag = "Atmospherics Aft Tanks"; - name = "atmospherics camera"; - network = list("ss13","engine") - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "tZc" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -63119,23 +63478,6 @@ }, /turf/open/floor/plating, /area/station/command/heads_quarters/cmo) -"tZe" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) "tZf" = ( /turf/open/floor/carpet/red, /area/station/command/heads_quarters/hos) @@ -63163,18 +63505,6 @@ }, /turf/open/floor/iron, /area/station/command/bridge) -"tZz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/machinery/status_display/evac/directional/north, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron, -/area/station/engineering/atmos/pumproom) "tZD" = ( /obj/effect/landmark/secequipment, /obj/effect/turf_decal/bot, @@ -63202,6 +63532,19 @@ /obj/structure/flora/bush/pale/style_random, /turf/open/misc/asteroid, /area/station/maintenance/port/lesser) +"ual" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"uaC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/station/engineering/atmos) "uba" = ( /obj/structure/lattice, /obj/structure/window/reinforced/spawner/directional/east, @@ -63235,6 +63578,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, /turf/open/floor/iron/showroomfloor, /area/station/medical/medbay/central) +"ubD" = ( +/obj/machinery/vending/wardrobe/sec_wardrobe, +/obj/effect/turf_decal/bot, +/obj/structure/reagent_dispensers/wall/peppertank/directional/west, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/lockers) "ubF" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/table/wood, @@ -63252,6 +63605,17 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/port/greater) +"ubH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/engineering/hallway) "ubM" = ( /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -63274,6 +63638,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"ucC" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "ucG" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/corner{ @@ -63290,18 +63660,6 @@ /obj/structure/cable, /turf/open/floor/grass, /area/station/security/prison/garden) -"udd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/landmark/event_spawn, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/engineering/main) "udn" = ( /obj/structure/girder, /obj/effect/decal/cleanable/dirt, @@ -63379,6 +63737,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard) +"uem" = ( +/obj/machinery/power/shieldwallgen/xenobiologyaccess, +/obj/effect/turf_decal/box, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/structure/cable, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/science/xenobiology) "uet" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -63411,6 +63777,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"ueT" = ( +/obj/machinery/atmospherics/components/binary/pump/off{ + name = "Filter to Mix" + }, +/obj/effect/turf_decal/tile/green/fourcorners, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/atmos) "ueY" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -63430,19 +63803,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central) -"ufm" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/effect/turf_decal/siding/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 4 - }, -/obj/machinery/light/floor, -/turf/open/floor/iron/showroomfloor, -/area/station/science/lobby) "ufy" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -63473,17 +63833,17 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/hop) -"ufG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ - dir = 1 +"ufK" = ( +/obj/structure/window/reinforced/plasma/spawner/directional/west, +/obj/structure/cable, +/obj/machinery/power/energy_accumulator/tesla_coil/anchored, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ + dir = 4 }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 +/turf/open/floor/circuit/green{ + luminosity = 2 }, -/turf/open/floor/iron, -/area/station/engineering/atmos) +/area/station/engineering/supermatter/engine) "ufL" = ( /obj/item/radio/intercom/directional/north, /obj/effect/decal/cleanable/blood/old, @@ -63517,6 +63877,23 @@ }, /turf/open/floor/carpet, /area/station/medical/psychology) +"ugo" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/obj/machinery/door/airlock/atmos/glass{ + name = "Distribution Loop" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) "ugp" = ( /obj/structure/chair/sofa/bench/right, /obj/effect/turf_decal/box/corners{ @@ -63542,31 +63919,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/treatment_center) -"ugr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/engineering/atmos) -"ugx" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 1 - }, -/obj/machinery/light/floor, -/turf/open/floor/iron/showroomfloor, -/area/station/science/ordnance) "ugy" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/showroomfloor, @@ -63607,15 +63959,36 @@ /obj/machinery/fishing_portal_generator, /turf/open/floor/iron/dark, /area/station/hallway/secondary/service) -"ugP" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 +"ugU" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Atmospherics Entrance"; + name = "atmospherics camera"; + network = list("ss13","engine") }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/dark/corner{ +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/duct, +/obj/structure/noticeboard/directional/east, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ dir = 1 }, -/area/station/hallway/primary/fore) +/turf/open/floor/iron, +/area/station/engineering/atmos) +"ugX" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/computer/atmos_control/nitrous_tank{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/atmos) "ugY" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -63692,6 +64065,21 @@ }, /turf/open/floor/plating, /area/station/medical/pharmacy) +"uiq" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/structure/sink/directional/north, +/turf/open/floor/iron, +/area/station/security/prison/garden) +"uit" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/engineering/storage_shared) "uiu" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green{ @@ -63710,6 +64098,15 @@ /obj/item/tgui_book/manual/dsm, /turf/open/floor/carpet, /area/station/medical/psychology) +"uix" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/incinerator_input{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/brown/visible/layer2{ + dir = 10 + }, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) "uiE" = ( /obj/machinery/ai_slipper{ uses = 8 @@ -63720,6 +64117,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine, /area/station/ai/upload/chamber) +"uiM" = ( +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) "uiN" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/chair/stool/directional/south, @@ -63729,32 +64132,6 @@ /obj/structure/flora/rock, /turf/open/misc/asteroid, /area/space/nearstation) -"ujj" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 4 - }, -/obj/machinery/duct, -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/medbay/central) -"ujt" = ( -/obj/machinery/door/airlock/external{ - name = "Prison External Airlock" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/any/security/maintenance, -/turf/open/floor/iron/dark, -/area/station/maintenance/port/lesser) "ujN" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/delivery, @@ -63767,26 +64144,6 @@ }, /turf/open/floor/plating, /area/station/security/armory) -"ujT" = ( -/obj/machinery/camera/directional/east{ - c_tag = "Atmospherics Entrance"; - name = "atmospherics camera"; - network = list("ss13","engine") - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/engineering/atmos) "ukc" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/broken_floor, @@ -63819,16 +64176,8 @@ /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 4 }, -/obj/machinery/holopad, -/obj/effect/turf_decal/bot, /turf/open/floor/iron/showroomfloor, /area/station/medical/treatment_center) -"ukz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/event_spawn, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "ukM" = ( /obj/structure/sign/warning/vacuum/external/directional/south, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -63846,6 +64195,15 @@ /obj/effect/mapping_helpers/airlock/access/any/science/maintenance, /turf/open/floor/iron/dark, /area/station/maintenance/fore) +"ukO" = ( +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) "ukQ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -63854,6 +64212,15 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/carpet/red, /area/station/service/chapel) +"ukS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron/showroomfloor, +/area/station/science/ordnance) "ukT" = ( /obj/structure/sign/warning/no_smoking, /turf/closed/wall, @@ -63906,15 +64273,6 @@ /obj/structure/sign/warning/secure_area/directional/west, /turf/open/misc/asteroid/lowpressure, /area/space/nearstation) -"ulF" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, -/obj/machinery/light/directional/east, -/obj/machinery/status_display/evac/directional/east, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "ulJ" = ( /obj/effect/turf_decal/bot, /obj/machinery/conveyor{ @@ -63930,29 +64288,23 @@ "ulS" = ( /turf/closed/wall, /area/station/security/courtroom) -"ulU" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/structure/rack, -/obj/item/mod/module/thermal_regulator, -/obj/item/mod/module/plasma_stabilizer, -/obj/item/stack/cable_coil, -/obj/item/electronics/apc, -/obj/item/stack/cable_coil, -/obj/item/electronics/apc, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark, -/area/station/engineering/main) "ulZ" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 }, /turf/open/floor/iron/dark, /area/station/science/xenobiology) +"umg" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/cargo/office) "umj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -63975,23 +64327,6 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/miningoffice) -"umC" = ( -/obj/machinery/camera/directional/east{ - c_tag = "Supermatter Waste Line"; - name = "engineering camera"; - network = list("ss13","engine") - }, -/obj/effect/turf_decal/stripes/corner, -/obj/machinery/button/door/directional/east{ - id = "engineaccess"; - name = "Engine Access Lockdown"; - req_access = list("engineering") - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/duct, -/obj/machinery/light/warm/directional/east, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "umJ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -64005,10 +64340,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"uni" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/space/nearstation) "unp" = ( /obj/machinery/camera/directional/north{ c_tag = "Research Hallway"; @@ -64074,25 +64405,6 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/showroomfloor, /area/station/medical/virology) -"unE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/turf_decal/siding/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage/gas) "unQ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -64103,12 +64415,6 @@ }, /turf/open/floor/wood, /area/station/service/lawoffice) -"unS" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/portable_atmospherics/canister/nitrous_oxide, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/storage/gas) "uok" = ( /obj/machinery/light/directional/south, /obj/structure/extinguisher_cabinet/directional/south, @@ -64154,19 +64460,6 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/miningoffice) -"uoN" = ( -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/landmark/start/atmospheric_technician, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/engineering/atmos) "uoW" = ( /obj/structure/table, /obj/item/clothing/gloves/latex, @@ -64178,10 +64471,48 @@ /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) +"upq" = ( +/obj/machinery/light/directional/east, +/obj/machinery/status_display/ai/directional/east, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/tank_holder/extinguisher, +/turf/open/floor/iron, +/area/station/security/processing) "upK" = ( /obj/effect/turf_decal/siding/thinplating/dark/end, /turf/open/floor/glass/reinforced, /area/station/service/chapel) +"upO" = ( +/obj/item/storage/medkit/regular{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/storage/medkit/brute{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/medkit/brute, +/obj/item/storage/medkit/brute{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/structure/table/glass, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/door/window/left/directional/east{ + name = "First-Aid Supplies"; + req_access = list("medical") + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/medical/storage) "upS" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -64194,10 +64525,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"upW" = ( -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/maintenance/disposal/incinerator) "upZ" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, @@ -64214,16 +64541,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/port) -"uqi" = ( -/obj/effect/turf_decal/box/corners{ - dir = 8 - }, -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "uqv" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -64255,13 +64572,21 @@ dir = 4 }, /area/station/hallway/primary/fore) -"uqS" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +"uqP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/medbay/central) +/obj/structure/cable, +/obj/effect/turf_decal/siding/yellow/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/brown/hidden{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/office) "uqT" = ( /obj/structure/grille/broken, /obj/effect/turf_decal/stripes/line, @@ -64311,12 +64636,35 @@ dir = 8 }, /area/station/service/chapel) -"urv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +"uri" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/sign/poster/official/random/directional/south, +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"urn" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden/layer4{ + dir = 5 + }, /obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/central) +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "urE" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/loading_area{ @@ -64352,30 +64700,11 @@ /turf/open/floor/iron/showroomfloor, /area/station/science/ordnance) "uso" = ( -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/structure/reagent_dispensers/fueltank, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, +/obj/structure/closet/secure_closet/engineering_electrical, /turf/open/floor/iron/dark, /area/station/engineering/main) -"usp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/red{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/computer/security/telescreen/minisat/directional/east, -/turf/open/floor/iron, -/area/station/security/checkpoint/engineering) "usr" = ( /turf/closed/wall/r_wall, /area/station/engineering/gravity_generator) @@ -64435,18 +64764,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"utk" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 +"utm" = ( +/obj/machinery/atmospherics/components/binary/crystallizer{ + dir = 4 }, -/turf/open/floor/iron, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) +"uts" = ( +/obj/machinery/atmospherics/pipe/smart/simple/brown/visible, +/turf/closed/wall, /area/station/engineering/atmos) "utw" = ( /obj/effect/turf_decal/stripes/line{ @@ -64454,6 +64781,44 @@ }, /turf/open/space/basic, /area/space/nearstation) +"utC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/camera/directional/west{ + c_tag = "Supermatter Terminal"; + name = "engineering camera"; + network = list("ss13","engine") + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"utD" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/door_buttons/airlock_controller{ + idExterior = "virology_airlock_exterior"; + idInterior = "virology_airlock_interior"; + idSelf = "virology_airlock_control"; + name = "Virology Access Console"; + pixel_x = 24; + pixel_y = -24; + req_access = list("virology") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/virology) "utH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -64470,6 +64835,23 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"utO" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"utX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/aft) "uuu" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -64479,31 +64861,27 @@ /obj/effect/landmark/navigate_destination/tools, /turf/open/floor/iron/dark, /area/station/commons/storage/primary) -"uuC" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ +"uuV" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1 }, -/turf/open/floor/iron, -/area/station/engineering/hallway) -"uuK" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/engineering/atmos/pumproom) +/turf/open/floor/engine/vacuum, +/area/station/engineering/atmos) "uuW" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) +"uve" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/airalarm/directional/south, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "uvi" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -64528,12 +64906,6 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/engine) -"uvO" = ( -/obj/effect/mapping_helpers/burnt_floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "uvT" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -64545,6 +64917,13 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/maintenance/port/greater) +"uwk" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/structure/sign/warning/gas_mask/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) "uwl" = ( /obj/structure/chair/pew{ dir = 4 @@ -64583,16 +64962,21 @@ }, /turf/open/floor/iron/dark, /area/station/commons/locker) -"uwP" = ( -/obj/effect/decal/cleanable/dirt, +"uwQ" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ +/obj/structure/sign/warning/no_smoking/directional/south, +/obj/structure/railing/corner/end/flip{ dir = 4 }, -/turf/open/floor/plating, -/area/station/maintenance/aft) +/obj/effect/turf_decal/siding/brown{ + dir = 1 + }, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron/smooth_half, +/area/station/engineering/atmos/pumproom) "uwR" = ( /obj/item/kirbyplants/organic/plant21, /obj/effect/landmark/start/hangover, @@ -64604,6 +64988,27 @@ dir = 8 }, /area/station/hallway/primary/port) +"uwS" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/obj/machinery/door/airlock/public/glass/incinerator/atmos_exterior, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/atmospherics/pipe/smart/simple/brown/visible/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) "uwX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, @@ -64620,6 +65025,13 @@ /obj/effect/turf_decal/box/corners, /turf/open/floor/engine/xenobio, /area/station/science/xenobiology) +"uxc" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/simple/violet/visible, +/obj/machinery/meter, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmos) "uxz" = ( /obj/structure/chair, /obj/effect/landmark/start/hangover, @@ -64642,6 +65054,16 @@ "uxN" = ( /turf/closed/wall/r_wall, /area/station/command/vault) +"uxO" = ( +/obj/structure/table/wood/fancy/blue, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/item/reagent_containers/cup/glass/trophy/bronze_cup, +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/light/warm/dim/directional/west, +/turf/open/floor/carpet/royalblue, +/area/station/service/chapel/office) "uyl" = ( /obj/effect/landmark/event_spawn, /obj/effect/turf_decal/tile/blue/half/contrasted{ @@ -64655,10 +65077,44 @@ "uyK" = ( /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"uyS" = ( +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/science/lab) +"uyU" = ( +/obj/effect/turf_decal/bot, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/power/shieldwallgen, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) "uyX" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/aft) +"uzi" = ( +/obj/effect/decal/cleanable/blood/oil, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, +/obj/machinery/light/small/broken/directional/south, +/turf/open/floor/iron/dark, +/area/station/service/chapel/storage) +"uzA" = ( +/obj/structure/sign/painting/library{ + pixel_x = 32 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark, +/area/station/service/library) "uzD" = ( /obj/machinery/door/airlock/atmos{ name = "Atmospherics Connector" @@ -64678,18 +65134,6 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/security/prison/shower) -"uzQ" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/aft) "uAb" = ( /obj/structure/girder, /obj/effect/decal/cleanable/dirt, @@ -64705,6 +65149,13 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/cargo) +"uAd" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/medbay/central) "uAe" = ( /obj/structure/window/spawner/directional/south, /obj/structure/window/spawner/directional/east, @@ -64736,14 +65187,6 @@ }, /turf/open/floor/glass/reinforced, /area/station/service/chapel) -"uAt" = ( -/obj/machinery/door/airlock/atmos/glass, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/turf/open/floor/engine/vacuum, -/area/station/maintenance/disposal/incinerator) "uAA" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 8 @@ -64752,10 +65195,6 @@ dir = 8 }, /area/station/hallway/primary/port) -"uAE" = ( -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, -/turf/closed/wall/rust, -/area/station/engineering/atmos/pumproom) "uAF" = ( /obj/effect/turf_decal/delivery, /obj/machinery/vending/clothing, @@ -64774,11 +65213,26 @@ }, /turf/open/floor/plating, /area/station/maintenance/fore) -"uBd" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron, -/area/station/cargo/miningdock) +"uBf" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/medbay/lobby) +"uBk" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad2"; + name = "on ramp" + }, +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/cargo/storage) "uBo" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -64791,6 +65245,25 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/commons/toilet/restrooms) +"uBx" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) +"uBz" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wideplating/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "uBM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -64839,18 +65312,6 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"uCJ" = ( -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 8; - name = "virology sorting disposal pipe" - }, -/obj/effect/mapping_helpers/mail_sorting/medbay/virology, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/medbay/central) "uCQ" = ( /obj/effect/decal/cleanable/cobweb, /obj/structure/frame/machine, @@ -64869,16 +65330,6 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/command/vault) -"uCS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/engineering/atmos) "uDe" = ( /obj/machinery/light/small/directional/north, /obj/effect/turf_decal/siding/thinplating/dark, @@ -64896,21 +65347,18 @@ /obj/structure/table/wood, /turf/open/floor/cult, /area/station/service/chapel/office) +"uDp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/sign/poster/contraband/random/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) "uDt" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/fore) -"uDQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) "uDT" = ( /obj/machinery/airalarm/directional/north, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -64956,18 +65404,6 @@ /obj/effect/turf_decal/siding/wideplating/dark/corner, /turf/open/floor/iron/dark, /area/station/service/chapel) -"uFb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/corner, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/engineering/hallway) "uFe" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm/directional/south, @@ -65044,13 +65480,13 @@ /area/station/hallway/primary/fore) "uGm" = ( /obj/effect/decal/cleanable/blood/old, -/obj/structure/grille/broken, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, /obj/structure/cable, /obj/structure/sign/poster/contraband/random/directional/south, /obj/effect/mapping_helpers/broken_floor, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) "uGn" = ( @@ -65204,13 +65640,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/bar/atrium) -"uHU" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/obj/machinery/light/floor, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) "uHY" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -65223,19 +65652,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"uId" = ( -/obj/item/radio/intercom/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/bot, -/obj/machinery/holopad, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/red/half/contrasted, -/obj/machinery/duct, -/obj/machinery/light/dim/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/station/security/execution/transfer) "uIs" = ( /obj/machinery/turretid{ control_area = "/area/station/ai/satellite/interior"; @@ -65270,6 +65686,17 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/dark, /area/station/maintenance/starboard/fore) +"uJe" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/table, +/obj/effect/spawner/random/armory/barrier_grenades, +/obj/item/key/security, +/obj/item/key/security, +/obj/machinery/light/small/red/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/armory) "uJg" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/decal/cleanable/dirt, @@ -65278,6 +65705,18 @@ }, /turf/open/floor/plating, /area/station/maintenance/solars/port/aft) +"uJm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/atmospherics/components/binary/pump/on/layer4{ + dir = 2; + name = "Airlock Pump"; + target_pressure = 300; + hide = 1 + }, +/obj/effect/spawner/random/structure/tank_holder, +/turf/open/floor/plating, +/area/station/maintenance/starboard) "uJn" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 9 @@ -65310,7 +65749,6 @@ name = "Supermatter Engine" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) "uJP" = ( @@ -65368,6 +65806,19 @@ /obj/structure/cable, /turf/open/floor/circuit/green/telecomms/mainframe, /area/station/tcommsat/server) +"uKk" = ( +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/closet/l3closet/virology, +/obj/item/tank/internals/emergency_oxygen, +/obj/item/tank/internals/emergency_oxygen, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/sink/directional/west, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/virology) "uKp" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/corner{ @@ -65394,23 +65845,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/security/brig) -"uLb" = ( -/obj/machinery/camera/directional/east{ - c_tag = "Cryogenics"; - name = "medical camera"; - network = list("ss13","medical") - }, -/obj/machinery/status_display/evac/directional/east, -/obj/structure/bed/medical{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/box, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/dark, -/area/station/medical/treatment_center) "uLt" = ( /obj/effect/turf_decal/bot, /obj/structure/reagent_dispensers/watertank, @@ -65442,18 +65876,6 @@ }, /turf/open/floor/iron/dark/corner, /area/station/hallway/primary/port) -"uLL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/ai/upload/chamber) "uLW" = ( /obj/structure/table, /obj/machinery/cell_charger{ @@ -65470,6 +65892,21 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance/office) +"uLY" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/atmos{ + name = "Atmospherics" + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "atmos-entrance" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/atmospherics/pipe/smart/simple/brown/hidden{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) "uMf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -65479,7 +65916,10 @@ /turf/open/floor/engine, /area/station/tcommsat/computer) "uMk" = ( -/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron, /area/station/engineering/main) "uMz" = ( @@ -65488,15 +65928,58 @@ /obj/effect/turf_decal/tile/neutral/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/medical/medbay/central) +"uMB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ + dir = 1 + }, +/obj/structure/sign/warning/fire/directional/north, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "uMD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/security/brig) +"uME" = ( +/obj/effect/turf_decal/bot, +/obj/structure/rack, +/obj/item/storage/belt/utility, +/obj/item/weldingtool/largetank, +/obj/item/clothing/head/utility/welding, +/obj/machinery/firealarm/directional/east{ + pixel_y = -4 + }, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/light_switch/directional/east{ + pixel_y = 6 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) "uMG" = ( /turf/closed/wall/rust, /area/station/medical/cryo) +"uMJ" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "N2 to Pure" + }, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/atmos) +"uNe" = ( +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/obj/machinery/atmospherics/pipe/bridge_pipe/dark/visible, +/turf/open/floor/engine/n2o, +/area/station/engineering/atmos) "uNi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -65511,21 +65994,6 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/science/research) -"uNv" = ( -/obj/machinery/power/turbine/turbine_outlet, -/turf/open/floor/engine, -/area/station/maintenance/disposal/incinerator) -"uNy" = ( -/obj/machinery/newscaster/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos) "uNI" = ( /obj/structure/table, /obj/item/paper_bin, @@ -65544,52 +66012,24 @@ "uNO" = ( /turf/closed/wall, /area/station/commons/toilet/restrooms) -"uNR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/plating, -/area/station/hallway/secondary/entry) "uNY" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, /obj/effect/decal/cleanable/blood/old, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, /obj/effect/decal/cleanable/dirt, /obj/structure/cable, /obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/aft) "uOa" = ( -/obj/structure/sign/warning/secure_area, /turf/closed/wall, /area/station/engineering/gravity_generator) "uOd" = ( /obj/item/kirbyplants/random, /turf/open/floor/iron/dark, /area/station/service/chapel/monastery) -"uOg" = ( -/obj/structure/table, -/obj/machinery/newscaster/directional/east, -/obj/effect/turf_decal/siding/green{ - dir = 8 - }, -/obj/item/storage/bag/plants/portaseeder, -/obj/item/crowbar/red, -/obj/item/plant_analyzer, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden) -"uOl" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "uOo" = ( /obj/machinery/newscaster/directional/west, /obj/effect/spawner/random/entertainment/arcade{ @@ -65600,13 +66040,6 @@ }, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) -"uOp" = ( -/obj/effect/turf_decal/siding/thinplating/light/corner{ - dir = 4 - }, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/dark, -/area/station/service/chapel/monastery) "uOz" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/contraband/random/directional/west, @@ -65631,11 +66064,6 @@ /obj/structure/cable, /turf/open/floor/iron/grimy, /area/station/hallway/primary/fore) -"uOC" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, -/turf/open/floor/plating, -/area/station/engineering/atmos) "uPm" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -65643,10 +66071,29 @@ /obj/effect/turf_decal/stripes/line{ dir = 10 }, -/obj/item/radio/intercom/directional/south, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine, /area/station/engineering/gravity_generator) +"uPo" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/machinery/button/door/directional/east{ + name = "Psychology Privacy Shutters"; + id = "psychprivacy" + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/psychology) +"uPz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/button/door/directional/west{ + id = "Secure Storage"; + name = "Secure Storage Toggle"; + req_access = list("engine_equip") + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "uPM" = ( /obj/machinery/door/airlock/public/glass{ name = "Security Hallway" @@ -65655,12 +66102,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/hallway/primary/aft) -"uPX" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/smart/simple/green/visible, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos/pumproom) "uQj" = ( /obj/structure/cable, /obj/machinery/pdapainter/security, @@ -65720,11 +66161,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"uQJ" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/light/floor, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "uQN" = ( /obj/item/kirbyplants/organic/plant21, /obj/effect/turf_decal/stripes/corner, @@ -65742,6 +66178,21 @@ /obj/item/knife/kitchen, /turf/open/floor/iron/dark, /area/station/service/kitchen) +"uQX" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + name = "Chief Engineer's Office" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/engineering/ce, +/obj/effect/turf_decal/siding/yellow/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) "uRf" = ( /obj/structure/bodycontainer/morgue, /obj/effect/turf_decal/bot_white, @@ -65778,80 +66229,13 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/iron/dark, /area/station/cargo/miningoffice) -"uRv" = ( -/obj/item/kirbyplants/organic/applebush, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/machinery/airalarm/directional/west, -/obj/machinery/status_display/ai/directional/north, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) "uRG" = ( /mob/living/carbon/human/species/monkey/punpun, /turf/open/floor/wood/large, /area/station/service/bar/atrium) -"uRK" = ( -/obj/structure/railing/corner{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/service/chapel/monastery) -"uRL" = ( -/obj/item/kirbyplants/organic/plant5, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "uRT" = ( /turf/closed/wall/r_wall, /area/station/science) -"uSd" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/structure/sign/departments/science/alt/directional/north, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/showroomfloor, -/area/station/science) -"uSu" = ( -/obj/machinery/computer/shuttle/mining{ - dir = 8; - req_access = null - }, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 8 - }, -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/iron/dark, -/area/station/cargo/miningdock) -"uSB" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/components/unary/thermomachine/heater/on{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/structure/sign/warning/xeno_mining/directional/east, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/pumproom) "uSH" = ( /turf/closed/wall/r_wall, /area/station/engineering/main) @@ -65887,6 +66271,21 @@ }, /turf/open/floor/iron/dark, /area/station/security/courtroom) +"uTB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/purple/half/contrasted, +/obj/effect/turf_decal/tile/purple, +/obj/machinery/light/warm/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/station/science/auxlab) +"uTC" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Atmospherics Tank - N2"; + name = "atmospherics camera"; + network = list("ss13","engine") + }, +/turf/open/floor/engine/n2, +/area/station/engineering/atmos) "uTG" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt, @@ -65907,6 +66306,25 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/medbay/lobby) +"uTO" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmos) "uTY" = ( /obj/machinery/power/emitter/welded{ dir = 4 @@ -65939,10 +66357,28 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/office) -"uUA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/green/visible, -/turf/closed/wall, -/area/station/engineering/atmos/pumproom) +"uUy" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"uUM" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/sign/warning/directional/east, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "uUO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, @@ -65950,6 +66386,28 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/aft) +"uUP" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/atmos) "uUS" = ( /turf/closed/wall, /area/station/maintenance/solars/port/aft) @@ -65980,21 +66438,46 @@ "uVQ" = ( /turf/closed/wall, /area/station/maintenance/solars/starboard/fore) -"uVU" = ( +"uWc" = ( +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"uWd" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/machinery/atmospherics/pipe/smart/simple/brown/hidden{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/atmos/storage) +"uWv" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/orange/visible{ dir = 8 }, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ + dir = 1 + }, /turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) +/area/station/engineering/atmos) "uWz" = ( /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/engine/air, /area/station/engineering/atmos) -"uWA" = ( -/obj/structure/sign/warning/fire, -/turf/closed/wall/r_wall/rust, -/area/station/engineering/supermatter/engine) "uWM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -66016,13 +66499,6 @@ /obj/effect/turf_decal/tile/neutral/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/hallway/primary/central/fore) -"uWP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/machinery/light/dim/directional/west, -/turf/open/floor/iron/white, -/area/station/security/prison/mess) "uWQ" = ( /obj/structure/flora/rock/pile/style_random{ pixel_x = -6; @@ -66113,16 +66589,6 @@ /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/science) -"uYg" = ( -/obj/effect/landmark/event_spawn, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/duct, -/obj/machinery/light/floor, -/turf/open/floor/iron/showroomfloor, -/area/station/science/xenobiology) "uYh" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, /obj/structure/disposalpipe/segment{ @@ -66140,33 +66606,13 @@ /obj/structure/chair/stool/bar/directional/west, /turf/open/floor/wood, /area/station/maintenance/port/greater) -"uYw" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/bridge_pipe/orange/visible, -/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner{ +"uYt" = ( +/obj/effect/turf_decal/siding/thinplating/light/corner{ dir = 4 }, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/engineering/atmos) -"uYx" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ - dir = 8 - }, -/turf/closed/wall/r_wall, -/area/station/maintenance/disposal/incinerator) -"uYM" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/service/chapel/monastery) "uYP" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, @@ -66181,20 +66627,22 @@ /obj/effect/mapping_helpers/airlock/access/all/science/general, /turf/open/floor/iron/dark, /area/station/science/research) -"uYZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 9 +"uYW" = ( +/obj/machinery/newscaster/directional/north, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/blue{ +/turf/open/floor/iron/showroomfloor, +/area/station/medical/chemistry) +"uZc" = ( +/obj/effect/turf_decal/arrows/white{ + color = "#0077AA"; + pixel_y = 15 + }, +/turf/open/floor/iron/smooth_half{ dir = 4 }, -/obj/effect/turf_decal/tile/red, -/obj/machinery/duct, -/obj/machinery/light/floor, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation) +/area/station/engineering/atmos) "uZg" = ( /obj/structure/sign/warning/electric_shock, /turf/closed/wall/rust, @@ -66220,6 +66668,11 @@ }, /turf/open/floor/iron, /area/station/security/office) +"uZJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/plating, +/area/station/hallway/secondary/entry) "uZL" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -66272,25 +66725,21 @@ /turf/open/floor/iron/showroomfloor, /area/station/science/ordnance/burnchamber) "uZZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/obj/machinery/atmospherics/pipe/smart/manifold/green/visible{ + dir = 8 + }, /turf/closed/wall, /area/station/engineering/atmos) -"vac" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) -"vae" = ( -/obj/effect/turf_decal/box, -/turf/open/floor/engine, -/area/station/science/auxlab) -"vak" = ( -/obj/machinery/firealarm/directional/north, -/obj/machinery/light/floor, +"vag" = ( +/obj/structure/table, +/obj/item/wrench, +/obj/item/crowbar, +/obj/item/analyzer, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/airalarm/directional/west, +/obj/item/radio/intercom/directional/north, /turf/open/floor/iron/dark, -/area/station/service/chapel) +/area/station/engineering/atmos/office) "vao" = ( /obj/effect/turf_decal/tile/purple, /obj/effect/turf_decal/tile/purple/half/contrasted{ @@ -66311,24 +66760,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/office) -"vaz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/loading_area{ - dir = 4; - pixel_x = 5 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage/gas) "vaI" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -66368,24 +66799,14 @@ "vbi" = ( /turf/closed/wall/r_wall/rust, /area/station/maintenance/fore) -"vbj" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/turf_decal/siding/yellow/corner{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "atmos-entrance" - }, -/obj/machinery/door/airlock/atmos{ - name = "Atmospherics Desk" +"vbm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/binary/valve/digital{ + name = "Waste Release"; + dir = 8 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/obj/effect/landmark/navigate_destination/atmos, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/storage/gas) +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "vbo" = ( /obj/structure/chair/stool/bar/directional/east, /obj/effect/decal/cleanable/dirt, @@ -66393,23 +66814,6 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron/showroomfloor, /area/station/service/bar/atrium) -"vbx" = ( -/obj/machinery/meter, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 10 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) "vbP" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -66428,26 +66832,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/pharmacy) -"vbV" = ( -/obj/structure/cable, -/obj/structure/chair/sofa/left/maroon{ - dir = 8 - }, -/obj/structure/railing{ - dir = 4 - }, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/hangover, -/obj/machinery/camera/directional/south{ - c_tag = "Atrium Port"; - name = "service camera" - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/service/bar/atrium) "vct" = ( /obj/effect/spawner/random/engineering/tracking_beacon, /obj/machinery/camera/directional/north{ @@ -66457,13 +66841,6 @@ }, /turf/open/floor/engine/xenobio, /area/station/science/xenobiology) -"vcx" = ( -/obj/item/beacon, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/light/floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "vcL" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm/directional/south, @@ -66472,6 +66849,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) +"vdr" = ( +/obj/effect/turf_decal/box/white{ + color = "#0077AA" + }, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "vdy" = ( /obj/machinery/door/morgue{ name = "Confession Booth (Chaplain)"; @@ -66498,13 +66881,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/solars/port/fore) -"vdS" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 6 - }, -/turf/open/space/basic, -/area/space/nearstation) "vea" = ( /obj/structure/closet/secure_closet/personal/cabinet, /obj/machinery/newscaster/directional/west, @@ -66517,6 +66893,20 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/commons/locker) +"vec" = ( +/obj/machinery/computer/station_alert, +/obj/effect/turf_decal/bot, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) +"ved" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/shieldgen, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) "vek" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/decal/cleanable/dirt, @@ -66524,10 +66914,8 @@ /area/station/maintenance/port/aft) "ves" = ( /obj/effect/turf_decal/bot, -/obj/structure/rack, -/obj/item/clothing/gloves/color/fyellow, -/obj/item/storage/toolbox/electrical, -/turf/open/floor/plating, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/iron/dark, /area/station/maintenance/aft) "veu" = ( /turf/open/floor/iron, @@ -66538,6 +66926,18 @@ /obj/structure/cable, /turf/open/floor/wood/parquet, /area/station/service/bar/backroom) +"vey" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) "veN" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical/glass{ @@ -66562,13 +66962,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"veY" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/central/fore) "veZ" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/hatch{ @@ -66619,35 +67012,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/abandoned_warehouse) -"vfO" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ - dir = 4 - }, -/turf/open/space/basic, -/area/space/nearstation) -"vfW" = ( -/obj/effect/turf_decal/bot, -/obj/effect/decal/cleanable/cobweb, -/obj/item/book{ - desc = "An undeniably handy book."; - icon_state = "bookknock"; - name = "A Simpleton's Guide to Safe-cracking with Stethoscopes" - }, -/obj/item/stack/spacecash/c500{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/stack/spacecash/c1000, -/obj/item/gun/ballistic/automatic/pistol/deagle/gold, -/obj/machinery/status_display/ai/directional/north, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/obj/structure/safe/vault, -/obj/machinery/light/small/red/directional/west, -/turf/open/floor/iron/dark, -/area/station/command/vault) "vgc" = ( /obj/structure/sign/warning/vacuum/directional/east, /obj/effect/decal/cleanable/blood/old, @@ -66696,15 +67060,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"vgZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "vha" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -66731,20 +67086,15 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/science) -"vhp" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 4 - }, -/obj/machinery/door/airlock/atmos/glass{ - name = "Atmospherics" +"vho" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, +/obj/effect/decal/cleanable/dirt, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) "vhx" = ( /mob/living/basic/slime, /turf/open/floor/engine, @@ -66753,35 +67103,26 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/service/chapel/funeral) +"vhQ" = ( +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/obj/effect/turf_decal/delivery, +/obj/machinery/camera/directional/south{ + c_tag = "Atmospherics Desk"; + name = "atmospherics camera"; + network = list("ss13","engine") + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmos/office) "vhZ" = ( /obj/effect/spawner/structure/electrified_grille, /turf/open/floor/plating/rust, /area/station/security/prison) -"vij" = ( -/obj/effect/turf_decal/tile/blue, -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/box, -/obj/machinery/vitals_reader/directional/east, -/obj/structure/bed/medical{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/medical/treatment_center) "viq" = ( /obj/structure/lattice/catwalk, /obj/structure/railing, /turf/open/space/basic, /area/space/nearstation) -"vis" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "viu" = ( /obj/machinery/computer/security/hos{ dir = 1 @@ -66821,6 +67162,17 @@ name = "Holodeck Projector Floor" }, /area/station/holodeck/rec_center) +"vjy" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/unres/delayed{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/maintenance/aft) "vjY" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/unres/delayed{ @@ -66837,6 +67189,16 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit/departure_lounge) +"vkf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/structure/cable, +/obj/machinery/status_display/evac/directional/west, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "vkh" = ( /turf/closed/wall, /area/station/hallway/primary/central) @@ -66926,10 +67288,6 @@ dir = 4 }, /area/station/service/chapel/funeral) -"vkY" = ( -/obj/structure/girder/reinforced, -/turf/open/space/basic, -/area/space/nearstation) "vld" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -66999,6 +67357,19 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/fore) +"vlD" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + name = "Chief Engineer's Office" + }, +/obj/effect/turf_decal/siding/yellow/corner{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/ce, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) "vlJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -67022,6 +67393,7 @@ /obj/structure/grille/broken, /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/broken_floor, +/obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/aft) "vmq" = ( @@ -67050,21 +67422,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"vmV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/radio/intercom/directional/south, -/obj/effect/turf_decal/stripes/corner{ +"vmY" = ( +/obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple/anticorner/contrasted, -/obj/effect/turf_decal/tile/purple, -/obj/machinery/camera/autoname/directional/east, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/showroomfloor, -/area/station/science/auxlab) +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "vmZ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -67173,6 +67539,19 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) +"voe" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/siding/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "voo" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/landmark/event_spawn, @@ -67189,20 +67568,6 @@ }, /turf/open/floor/wood, /area/station/service/theater) -"vpd" = ( -/obj/structure/table, -/obj/item/clipboard{ - pixel_x = -4 - }, -/obj/item/book/manual/wiki/atmospherics, -/obj/item/storage/belt/utility, -/obj/item/t_scanner, -/obj/item/t_scanner, -/obj/item/t_scanner, -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "vps" = ( /obj/structure/sign/warning/electric_shock, /turf/closed/wall/r_wall, @@ -67235,12 +67600,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/office) -"vpX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/poster/contraband/random/directional/west, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/aft) "vpY" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -67260,15 +67619,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard) -"vqf" = ( -/obj/machinery/module_duplicator, -/obj/machinery/newscaster/directional/north, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 1 - }, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/showroomfloor, -/area/station/science/ordnance/office) "vqr" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -67293,12 +67643,6 @@ }, /turf/open/floor/iron/dark, /area/station/commons/storage/art) -"vqv" = ( -/obj/item/wrench, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/engineering/atmos) "vqw" = ( /turf/closed/wall/r_wall, /area/station/tcommsat/computer) @@ -67347,6 +67691,10 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) +"vrF" = ( +/obj/structure/sign/warning/fire/directional/east, +/turf/open/space/basic, +/area/space/nearstation) "vrN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, @@ -67449,6 +67797,14 @@ }, /turf/open/floor/bronze, /area/station/maintenance/department/chapel) +"vtx" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/effect/turf_decal/tile/yellow, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "vtF" = ( /turf/open/floor/iron/showroomfloor, /area/station/medical/treatment_center) @@ -67457,34 +67813,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"vum" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) -"vun" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) "vuu" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -67501,13 +67829,11 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"vuD" = ( -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/medbay/central) +"vuA" = ( +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/machinery/light/dim/directional/east, +/turf/open/floor/grass, +/area/station/service/chapel) "vuF" = ( /obj/machinery/light_switch/directional/west, /obj/machinery/disposal/bin/tagger, @@ -67528,23 +67854,6 @@ "vuQ" = ( /turf/closed/wall/r_wall, /area/station/hallway/primary/starboard) -"vuZ" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) -"vvb" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "mining" - }, -/obj/machinery/bouldertech/refinery{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/miningoffice) "vvd" = ( /obj/machinery/mech_bay_recharge_port, /obj/machinery/airalarm/directional/west, @@ -67608,17 +67917,6 @@ /obj/effect/mapping_helpers/ianbirthday, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) -"vvE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage/gas) "vvH" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -67661,6 +67959,17 @@ }, /turf/open/floor/iron/dark, /area/station/commons/storage/primary) +"vwu" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/brown/hidden{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/engineering/hallway) "vwv" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -67673,11 +67982,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"vww" = ( -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/red, -/turf/open/floor/iron, -/area/station/engineering/lobby) "vwH" = ( /obj/structure/table/wood, /obj/machinery/computer/records/medical/laptop, @@ -67692,6 +67996,21 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/department/bridge) +"vwU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/atmos) "vxa" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -67714,20 +68033,15 @@ dir = 4 }, /area/station/hallway/primary/fore) -"vxr" = ( -/obj/machinery/computer/atmos_control/mix_tank{ - dir = 1 - }, -/obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green/half/contrasted, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ +"vxg" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/atmospherics/components/trinary/filter/atmos/plasma, +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/effect/turf_decal/tile/yellow/opposingcorners{ dir = 1 }, /turf/open/floor/iron/showroomfloor, -/area/station/engineering/atmos/pumproom) +/area/station/engineering/atmos) "vxC" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -67805,6 +68119,12 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/lab) +"vyL" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, +/obj/machinery/meter, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/station/engineering/atmos) "vyN" = ( /turf/open/floor/engine, /area/station/engineering/supermatter/engine) @@ -67835,25 +68155,6 @@ /obj/structure/sink/kitchen/directional/west, /turf/open/floor/plastic, /area/station/hallway/secondary/service) -"vzt" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 8; - name = "Waste to Filter" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron, -/area/station/engineering/atmos/pumproom) -"vzu" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/item/radio/intercom/directional/east, -/obj/machinery/status_display/ai/directional/south, -/turf/open/floor/engine, -/area/station/tcommsat/computer) "vzy" = ( /turf/closed/wall, /area/station/service/janitor) @@ -67866,14 +68167,6 @@ }, /turf/open/floor/circuit/telecomms, /area/station/science/xenobiology) -"vzR" = ( -/obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/blue/half/contrasted, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "vzZ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -67934,50 +68227,30 @@ }, /turf/open/floor/iron/dark, /area/station/service/kitchen) -"vAG" = ( +"vBg" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/event_spawn, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/hidden/layer4{ - dir = 8 +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/bridge_pipe/supply/hidden/layer4, +/obj/machinery/light/directional/north, /turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) +/area/station/hallway/primary/aft) "vBi" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"vBl" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/binary/valve/digital{ - name = "Waste Release" - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ +"vBw" = ( +/obj/item/radio/intercom/directional/east, +/obj/machinery/computer/station_alert{ dir = 8 }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) -"vBt" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ - dir = 4 - }, -/obj/machinery/light/small/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/engineering/supermatter/room) +/obj/effect/turf_decal/bot, +/obj/machinery/light/warm/directional/east, +/turf/open/floor/iron, +/area/station/engineering/main) "vBE" = ( /obj/structure/chair{ dir = 4 @@ -68012,7 +68285,6 @@ /obj/structure/disposalpipe/segment, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) "vBS" = ( @@ -68023,6 +68295,11 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/security/office) +"vBY" = ( +/obj/effect/turf_decal/bot/left, +/obj/effect/decal/cleanable/ash, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "vCa" = ( /obj/structure/table/wood, /obj/effect/decal/cleanable/dirt, @@ -68062,15 +68339,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"vCp" = ( -/obj/effect/turf_decal/box/corners{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "vCA" = ( /obj/effect/landmark/start/hangover, /obj/structure/disposalpipe/segment{ @@ -68117,33 +68385,51 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) -"vDc" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/effect/turf_decal/delivery, -/obj/machinery/byteforge, -/obj/machinery/camera/autoname/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/small/directional/east, +"vDi" = ( +/obj/structure/table/glass, +/obj/item/folder/white, +/obj/item/folder/white, +/obj/item/crowbar/red, +/obj/item/wrench, +/obj/item/storage/box/syringes{ + pixel_x = 4; + pixel_y = 6 + }, +/obj/item/storage/box/beakers{ + pixel_y = 2 + }, +/obj/machinery/airalarm/directional/east, +/obj/structure/noticeboard/directional/south, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/item/storage/pill_bottle/sepsisillin{ + pixel_x = -5; + pixel_y = -2 + }, /turf/open/floor/iron/dark, -/area/station/cargo/bitrunning/den) +/area/station/medical/virology) "vDk" = ( /turf/closed/wall, /area/station/engineering/supermatter/room) +"vDm" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "vDD" = ( /obj/machinery/smartfridge/drinks, /turf/open/floor/wood, /area/station/hallway/secondary/service) -"vDK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/turf/open/floor/engine, -/area/station/ai/upload/chamber) "vDO" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/glass{ @@ -68236,18 +68522,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/virology) -"vFe" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/small/directional/west, -/turf/open/floor/grass, -/area/station/science/auxlab) -"vFp" = ( -/obj/structure/railing/corner, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "vFv" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -68274,6 +68548,13 @@ /obj/structure/sign/poster/contraband/random/directional/south, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"vFK" = ( +/obj/effect/turf_decal/box/corners, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "vFL" = ( /obj/effect/turf_decal/bot, /obj/structure/closet/crate, @@ -68310,15 +68591,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"vGd" = ( -/obj/structure/table, -/obj/item/storage/toolbox/mechanical, -/obj/item/clothing/head/utility/welding, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/chemistry) "vGn" = ( /obj/machinery/door/poddoor/preopen{ id = "prisonblast"; @@ -68351,10 +68623,6 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics) -"vGu" = ( -/obj/structure/sign/warning/secure_area, -/turf/closed/wall/r_wall, -/area/station/maintenance/starboard/aft) "vGJ" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -68370,27 +68638,10 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"vHa" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "vHd" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/showroomfloor, /area/station/science/auxlab) -"vHe" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/engineering/supermatter/room) "vHh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -68402,6 +68653,10 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"vHl" = ( +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/plating/airless, +/area/space/nearstation) "vHr" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow/half/contrasted, @@ -68446,12 +68701,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/iron/dark, /area/station/engineering/storage_shared) -"vHP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/obj/effect/turf_decal/stripes/corner, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "vHS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -68463,31 +68712,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"vHW" = ( -/obj/machinery/computer/records/security{ - dir = 4 - }, -/obj/machinery/requests_console/directional/north{ - department = "Security"; - name = "Security Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/effect/mapping_helpers/requests_console/supplies, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/showroomfloor, -/area/station/security/checkpoint/science) -"vHZ" = ( -/obj/effect/turf_decal/box/white{ - color = "#9FED58" - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "vIc" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/table/reinforced, @@ -68507,6 +68731,20 @@ }, /turf/open/floor/plating, /area/station/engineering/atmos) +"vIh" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Aft Hallway Engineering Doors"; + name = "aft camera" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) "vIE" = ( /obj/machinery/camera/directional/west{ c_tag = "Atmospherics Tank - Mix"; @@ -68519,6 +68757,16 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/engine, /area/station/science/auxlab) +"vIL" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/unary/thermomachine/heater, +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/bridge_pipe/purple/visible{ + dir = 4 + }, +/obj/structure/railing, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) "vIR" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ @@ -68536,22 +68784,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/science/server) -"vIV" = ( -/obj/structure/table, -/obj/machinery/camera/directional/west{ - c_tag = "ai_upload"; - name = "upload camera"; - network = list("aiupload") - }, -/obj/item/radio/intercom/directional/west, -/obj/effect/spawner/round_default_module, +"vIY" = ( +/obj/effect/turf_decal/stripes/line, /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/light/cold/dim/directional/west, -/turf/open/floor/iron/dark, -/area/station/ai/upload/chamber) +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating/airless, +/area/space/nearstation) "vJc" = ( /turf/closed/wall/r_wall, /area/station/science/xenobiology) @@ -68625,12 +68863,6 @@ /mob/living/basic/bot/secbot/beepsky, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"vJM" = ( -/obj/machinery/holopad, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "vJN" = ( /obj/machinery/hydroponics/constructable, /obj/structure/railing{ @@ -68642,14 +68874,6 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics) -"vJO" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/turf/open/floor/iron/stairs/left{ - dir = 4 - }, -/area/station/service/chapel/monastery) "vJP" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -68689,11 +68913,9 @@ /area/station/command/vault) "vKj" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/effect/turf_decal/tile/red, /turf/open/floor/iron, /area/station/engineering/main) -"vKm" = ( -/turf/open/floor/engine/vacuum, -/area/station/maintenance/disposal/incinerator) "vKp" = ( /obj/item/clothing/head/costume/cardborg, /obj/item/clothing/suit/costume/cardborg, @@ -68701,14 +68923,6 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/plating, /area/station/maintenance/central) -"vKC" = ( -/obj/structure/rack, -/obj/effect/spawner/random/techstorage/security_all, -/obj/effect/turf_decal/bot, -/obj/structure/extinguisher_cabinet/directional/north, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron/dark, -/area/station/engineering/storage/tech) "vKE" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -68722,14 +68936,15 @@ /turf/open/floor/plating, /area/station/maintenance/port/lesser) "vKO" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 1 - }, /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/machinery/portable_atmospherics/pump, +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2{ + dir = 1 + }, /turf/open/floor/iron/dark/corner{ dir = 1 }, @@ -68764,8 +68979,16 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, +/obj/effect/turf_decal/bot, /turf/open/floor/iron/showroomfloor, /area/station/security/lockers) +"vLE" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/virology) "vLG" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/modular_computer/preset/engineering{ @@ -68785,20 +69008,41 @@ "vLI" = ( /turf/closed/wall/r_wall/rust, /area/station/service/chapel/funeral) +"vLN" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "vLR" = ( /obj/machinery/power/tracker, /obj/effect/turf_decal/box, /obj/structure/cable, /turf/open/floor/iron/solarpanel/airless, /area/station/solars/starboard/fore) -"vLU" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 +"vLS" = ( +/obj/machinery/portable_atmospherics/pump, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/machinery/newscaster/directional/north, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 }, -/obj/machinery/portable_atmospherics/canister, /obj/effect/turf_decal/box, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/atmos) +"vLV" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/atmospherics/pipe/smart/simple/brown/hidden{ + dir = 1 + }, /turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) +/area/station/engineering/atmos/storage) "vMb" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -68819,6 +69063,21 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/warden) +"vMj" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Distro to Waste" + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/status_display/evac/directional/east, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/corner, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) "vMo" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -68833,15 +69092,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard) -"vME" = ( -/obj/structure/window/reinforced/plasma/spawner/directional/east, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, -/obj/machinery/power/energy_accumulator/tesla_coil/anchored, -/turf/open/floor/circuit/green{ - luminosity = 2 +"vMy" = ( +/obj/structure/chair/office/light{ + dir = 1; + pixel_y = 3 }, -/area/station/engineering/supermatter/engine) +/turf/open/floor/iron, +/area/station/engineering/main) "vMK" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -68879,6 +69136,14 @@ /obj/structure/plasticflaps/kitchen, /turf/open/floor/iron/dark, /area/station/service/kitchen/coldroom) +"vMY" = ( +/obj/machinery/power/emitter/welded{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) "vNl" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -68896,21 +69161,15 @@ /obj/structure/sign/warning/docking, /turf/closed/wall/rust, /area/station/cargo/miningdock) -"vNo" = ( -/obj/structure/cable, -/obj/structure/chair/sofa/right/maroon{ - dir = 4 - }, -/obj/structure/railing{ - dir = 8 - }, -/obj/machinery/airalarm/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ +"vNt" = ( +/obj/effect/turf_decal/box/corners{ dir = 8 }, -/turf/open/floor/iron/dark, -/area/station/service/bar/atrium) +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "vNE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -68944,10 +69203,10 @@ dir = 8 }, /area/station/hallway/primary/port) -"vNU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/showroomfloor, -/area/station/security/execution/transfer) +"vNW" = ( +/obj/effect/turf_decal/box, +/turf/open/floor/engine, +/area/station/science/auxlab) "vOl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -68958,6 +69217,11 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"vOo" = ( +/obj/effect/landmark/start/paramedic, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/medbay/central) "vOq" = ( /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/all/engineering/general, @@ -68976,22 +69240,6 @@ }, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) -"vOJ" = ( -/obj/structure/table/glass, -/obj/item/crowbar{ - pixel_x = -8; - pixel_y = 11 - }, -/obj/item/emergency_bed{ - pixel_x = 7; - pixel_y = 10 - }, -/obj/item/emergency_bed, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/medical/office) "vOL" = ( /obj/effect/turf_decal/tile/purple/half/contrasted{ dir = 8 @@ -69047,11 +69295,6 @@ "vOX" = ( /turf/closed/wall/rust, /area/station/maintenance/starboard) -"vPc" = ( -/obj/effect/turf_decal/sand/plating, -/obj/structure/transit_tube, -/turf/open/floor/plating/airless, -/area/space/nearstation) "vPd" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -69060,16 +69303,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"vPo" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/structure/closet/secure_closet/medical2, -/turf/open/floor/iron/dark, -/area/station/medical/virology) "vPB" = ( /obj/structure/flora/grass/jungle/b/style_random, /obj/structure/flora/bush/grassy/style_random, @@ -69082,13 +69315,6 @@ /obj/structure/window/spawner/directional/east, /turf/open/floor/grass, /area/station/hallway/secondary/exit/departure_lounge) -"vPD" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/holopad, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/exit/departure_lounge) "vPG" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -69100,26 +69326,6 @@ }, /turf/open/floor/plating, /area/station/security/execution/education) -"vPU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, -/obj/machinery/camera/directional/west{ - c_tag = "Engineering Foyer"; - name = "engineering camera"; - network = list("ss13","engine") - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible/layer2, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/hallway) "vPW" = ( /obj/effect/turf_decal/box/corners{ dir = 4 @@ -69133,15 +69339,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/commons/locker) -"vQc" = ( -/obj/structure/chair/sofa/left/brown{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/poster/contraband/the_big_gas_giant_truth/directional/west, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/dark, -/area/station/cargo/miningoffice) "vQf" = ( /obj/effect/turf_decal/sand/plating, /obj/machinery/atmospherics/components/unary/passive_vent/layer2{ @@ -69149,18 +69346,17 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) -"vQt" = ( -/obj/machinery/door/airlock/external{ - name = "Atmospherics External Airlock" +"vQA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/blue{ + dir = 8 }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 +/obj/effect/turf_decal/tile/neutral{ + dir = 8 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/obj/effect/mapping_helpers/burnt_floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "vQD" = ( /obj/structure/chair/office/light{ dir = 1 @@ -69209,9 +69405,15 @@ }, /turf/open/floor/iron/white, /area/station/security/prison/mess) -"vRK" = ( -/obj/structure/sign/warning/no_smoking, -/turf/closed/wall, +"vRF" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/yellow/visible{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth, /area/station/engineering/atmos) "vRN" = ( /obj/structure/closet/secure_closet/medical3, @@ -69270,20 +69472,6 @@ /obj/item/storage/belt/medical, /turf/open/floor/iron/dark, /area/station/medical/storage) -"vRX" = ( -/obj/structure/table, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/rods/fifty, -/obj/item/stack/rods/fifty, -/obj/item/grenade/chem_grenade/smart_metal_foam, -/obj/item/grenade/chem_grenade/smart_metal_foam, -/obj/machinery/light_switch/directional/north, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "vSa" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -69297,17 +69485,16 @@ /obj/machinery/computer/security/telescreen/entertainment/directional/north, /turf/open/floor/wood, /area/station/service/bar/atrium) -"vSp" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible, -/turf/open/floor/plating, -/area/station/engineering/atmos/pumproom) "vSq" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark/corner{ dir = 8 }, /area/station/hallway/primary/central/fore) +"vSB" = ( +/obj/structure/grille/broken, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) "vSC" = ( /obj/effect/turf_decal/tile/purple{ dir = 1 @@ -69325,19 +69512,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/miningdock) -"vSU" = ( -/obj/effect/spawner/random/structure/girder, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/central) -"vSW" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 +"vTg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ + dir = 2 }, -/obj/machinery/camera/autoname/directional/east, -/obj/machinery/light/small/directional/east, -/turf/open/floor/engine, -/area/station/science/auxlab) +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron/smooth, +/area/station/maintenance/disposal/incinerator) "vTs" = ( /obj/machinery/hydroponics/constructable, /obj/item/seeds/apple, @@ -69380,6 +69561,18 @@ /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"vTz" = ( +/obj/machinery/door/airlock/external{ + name = "External Airlock" + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/space/nearstation) "vTA" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -69397,10 +69590,22 @@ dir = 4 }, /area/station/hallway/primary/fore) +"vTI" = ( +/obj/structure/grille/broken, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/aft) "vTV" = ( /turf/closed/wall/r_wall/rust, /area/station/service/chapel/dock) "vTX" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, /turf/open/floor/iron/showroomfloor, /area/station/command/heads_quarters/rd) "vUi" = ( @@ -69424,20 +69629,10 @@ /area/station/maintenance/department/cargo) "vUt" = ( /obj/structure/cable, -/obj/effect/turf_decal/bot, -/obj/machinery/holopad/secure, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/office) -"vUC" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "vUD" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -69446,7 +69641,6 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/duct, /turf/open/floor/engine, /area/station/engineering/supermatter/room) "vUH" = ( @@ -69485,22 +69679,16 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/science/auxlab) -"vVv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +"vVu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/firealarm/directional/south, /turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) +/area/station/hallway/primary/fore) "vVw" = ( /turf/closed/wall/r_wall/rust, /area/station/science/lab) -"vVx" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/engineering/atmos/pumproom) "vVC" = ( /obj/structure/sign/warning/fire, /turf/closed/wall, @@ -69523,16 +69711,22 @@ "vVT" = ( /turf/closed/wall/r_wall/rust, /area/station/engineering/storage/tech) -"vVW" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 +"vWf" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Security Maintenance" }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/maintenance/aft) +"vWr" = ( +/obj/effect/turf_decal/box, /obj/structure/cable, -/obj/machinery/status_display/ai/directional/south, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/engine, -/area/station/ai/satellite/chamber) +/obj/machinery/power/shieldwallgen/xenobiologyaccess, +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/sign/warning/gas_mask/directional/north, +/turf/open/floor/plating, +/area/station/science/xenobiology) "vWv" = ( /obj/effect/landmark/event_spawn, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -69590,6 +69784,28 @@ }, /turf/open/floor/iron/dark, /area/station/command/gateway) +"vXd" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/atmos) "vXf" = ( /obj/machinery/camera/directional/north{ c_tag = "Medical Operating Theater B"; @@ -69614,19 +69830,6 @@ /obj/structure/sign/poster/contraband/random/directional/south, /turf/open/floor/plating, /area/station/cargo/storage) -"vXz" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/components/unary/passive_vent{ - dir = 4; - name = "killroom vent" - }, -/turf/open/floor/circuit/telecomms, -/area/station/science/xenobiology) "vXC" = ( /obj/machinery/door/airlock/atmos{ name = "Atmospherics Connector" @@ -69639,25 +69842,6 @@ /obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, /turf/open/floor/iron/dark, /area/station/maintenance/port/greater) -"vXI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) -"vYm" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "vYn" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -69672,13 +69856,15 @@ }, /turf/open/floor/iron/dark, /area/station/security/office) -"vYx" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 10 +"vYu" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/pipedispenser/disposal, +/obj/structure/plaque/static_plaque/atmos{ + pixel_y = -32 }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) +/obj/machinery/light/warm/directional/south, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "vYD" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -69703,25 +69889,6 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron/showroomfloor, /area/station/service/bar/atrium) -"vYQ" = ( -/obj/structure/table, -/obj/item/storage/toolbox/mechanical{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/storage/toolbox/mechanical, -/obj/item/flashlight, -/obj/item/flashlight, -/obj/item/radio/intercom/directional/south, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/sign/warning/fire/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/commons/storage/primary) "vZa" = ( /obj/machinery/computer/shuttle/mining, /obj/effect/turf_decal/tile/brown/half/contrasted{ @@ -69736,22 +69903,6 @@ /obj/structure/flora/bush/sparsegrass/style_random, /turf/open/floor/grass, /area/station/service/chapel) -"vZu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/engineering/hallway) "vZv" = ( /obj/structure/table, /obj/item/clipboard{ @@ -69787,6 +69938,17 @@ }, /turf/open/floor/plating, /area/station/science) +"vZT" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "wae" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/mix_input{ dir = 1 @@ -69831,16 +69993,6 @@ dir = 8 }, /area/station/service/chapel) -"waw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/extinguisher_cabinet/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark/corner, -/area/station/hallway/primary/port) "waI" = ( /obj/effect/turf_decal/siding/green{ dir = 8 @@ -69887,69 +70039,16 @@ /obj/effect/mapping_helpers/airlock/access/any/command/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) -"wbF" = ( -/obj/structure/table, -/obj/machinery/camera/directional/east{ - c_tag = "Garden" - }, -/obj/effect/turf_decal/siding/green{ - dir = 8 - }, -/obj/item/shovel/spade, -/obj/item/hatchet, -/obj/item/cultivator, +"wbR" = ( +/obj/structure/rack, +/obj/effect/turf_decal/bot, +/obj/item/wrench, +/obj/effect/decal/cleanable/cobweb, /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/item/shovel/spade, -/obj/item/cultivator, -/obj/item/hatchet, -/obj/item/plant_analyzer, -/obj/item/reagent_containers/cup/bottle/nutrient/rh{ - pixel_x = 2; - pixel_y = 1 - }, -/obj/item/reagent_containers/cup/bottle/nutrient/ez, -/obj/machinery/light/warm/directional/east, +/obj/item/tank/internals/oxygen, +/obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden) -"wbG" = ( -/obj/effect/landmark/start/cyborg, -/obj/machinery/airalarm/directional/north, -/obj/machinery/camera/motion/directional/west{ - c_tag = "ai_upload Foyer"; - name = "upload camera"; - network = list("aiupload") - }, -/obj/machinery/computer/security/telescreen/aiupload/directional/west, -/obj/machinery/recharge_station, -/turf/open/floor/circuit/green{ - luminosity = 2 - }, -/area/station/ai/upload/chamber) -"wbH" = ( -/obj/effect/landmark/event_spawn, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/loading_area{ - dir = 4; - pixel_x = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage/gas) +/area/station/ai/satellite/atmos) "wbT" = ( /obj/machinery/keycard_auth/wall_mounted/directional/north, /obj/item/toy/figure/ian{ @@ -70020,19 +70119,6 @@ /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/medical/treatment_center) -"wcP" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos) "wcV" = ( /obj/structure/sign/warning/secure_area, /turf/closed/wall/r_wall, @@ -70046,12 +70132,21 @@ }, /turf/open/floor/iron/dark, /area/station/science/lobby) -"wdm" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/tile/purple/anticorner/contrasted, -/turf/open/floor/iron/showroomfloor, -/area/station/science/ordnance/office) +"wdt" = ( +/obj/effect/landmark/start/atmospheric_technician, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/brown/hidden{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/atmos/storage) "wdu" = ( /turf/open/floor/iron/showroomfloor, /area/station/science/ordnance/office) @@ -70067,15 +70162,26 @@ /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron, /area/station/cargo/warehouse) -"wdC" = ( -/obj/structure/closet/secure_closet/brig, -/obj/effect/turf_decal/tile/red/half/contrasted, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "wdL" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/cargo/storage) +"wdU" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/status_display/evac/directional/west, +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/light/cold/directional/west, +/turf/open/floor/iron/dark, +/area/station/ai/satellite/atmos) "wdZ" = ( /obj/structure/chair/sofa/bench/left{ dir = 4 @@ -70103,6 +70209,18 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/cargo/storage) +"wes" = ( +/obj/machinery/vending/wardrobe/engi_wardrobe, +/obj/effect/turf_decal/bot, +/obj/machinery/camera/directional/north{ + c_tag = "Engineering Lockers"; + name = "engineering camera"; + network = list("ss13","engine") + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/storage_shared) "weG" = ( /obj/machinery/mass_driver/chapelgun{ dir = 8 @@ -70168,28 +70286,10 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron, /area/station/command/teleporter) -"wgq" = ( -/obj/structure/table, -/obj/item/storage/toolbox/mechanical, -/obj/item/crowbar, -/obj/item/flashlight, -/obj/item/flashlight, -/obj/machinery/firealarm/directional/south, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) -"wgy" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/light/warm/directional/north, -/turf/open/floor/wood, -/area/station/service/bar/atrium) +"wfP" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/chemistry) "wgA" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -70258,6 +70358,16 @@ }, /turf/open/floor/iron/dark, /area/station/command/eva) +"whs" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/tank_dispenser, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) "wht" = ( /obj/structure/flora/bush/pale/style_random{ icon_state = "fullgrass_2" @@ -70273,19 +70383,25 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/dark, /area/station/maintenance/department/bridge) -"whz" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/computer/atmos_control/oxygen_tank{ +"whD" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/nitrous_input{ dir = 4 }, -/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible{ +/turf/open/floor/engine/n2o, +/area/station/engineering/atmos) +"whG" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/duct, +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/light/warm/directional/south, /turf/open/floor/iron/showroomfloor, -/area/station/engineering/atmos) +/area/station/service/bar/atrium) "whP" = ( /obj/effect/turf_decal/bot, /obj/machinery/firealarm/directional/east, @@ -70295,10 +70411,38 @@ /obj/machinery/suit_storage_unit/engine, /turf/open/floor/iron/dark, /area/station/engineering/storage_shared) +"whX" = ( +/obj/machinery/airalarm/directional/west, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/vending/coffee, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/break_room) "wij" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, /area/station/commons/locker) +"wiu" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ + dir = 8 + }, +/obj/machinery/light/warm/directional/west, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "wiw" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -70310,13 +70454,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/service/bar/atrium) -"wiK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable, -/obj/item/kirbyplants/photosynthetic, -/turf/open/floor/iron/dark, -/area/station/ai/upload/chamber) "wiM" = ( /obj/structure/cable, /obj/structure/table, @@ -70327,19 +70464,14 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) -"wjc" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/light_switch/directional/west, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 +"wiS" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/obj/machinery/disposal/bin/tagger, -/turf/open/floor/iron/dark, -/area/station/medical/office) +/turf/open/floor/engine, +/area/station/ai/upload/chamber) "wjm" = ( /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 8 @@ -70386,29 +70518,28 @@ }, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) -"wjP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos) -"wky" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1; - name = "N2O to Pure" +"wkl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, +/obj/machinery/meter, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"wkv" = ( +/obj/machinery/computer/security{ dir = 4 }, +/obj/effect/turf_decal/bot, +/obj/item/radio/intercom/directional/west, +/obj/structure/cable, /obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 + dir = 4 }, +/obj/machinery/light/warm/directional/west, /turf/open/floor/iron/dark, -/area/station/engineering/atmos) +/area/station/hallway/secondary/exit/departure_lounge) "wkC" = ( /obj/machinery/airalarm/directional/north, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -70445,26 +70576,33 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit/departure_lounge) -"wlb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/box, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "wlm" = ( /obj/structure/bookcase/random/fiction, /turf/open/floor/iron/dark, /area/station/maintenance/starboard/fore) -"wlu" = ( -/obj/structure/flora/bush/sparsegrass/style_random, -/obj/structure/flora/bush/sparsegrass/style_random, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 +"wln" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 }, -/turf/open/floor/grass, -/area/station/service/chapel) +/obj/structure/table, +/obj/item/soap/nanotrasen, +/obj/item/hand_labeler, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/camera/directional/south{ + c_tag = "Recovery Room"; + name = "medical camera"; + network = list("ss13","medical") + }, +/turf/open/floor/iron/dark, +/area/station/medical/medbay/central) +"wlt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/plating, +/area/station/hallway/secondary/entry) "wlz" = ( /obj/structure/railing{ dir = 8 @@ -70476,6 +70614,23 @@ dir = 1 }, /area/station/service/chapel) +"wlG" = ( +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"wlH" = ( +/obj/structure/railing/corner, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "wlO" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4, /obj/effect/decal/cleanable/dirt, @@ -70505,6 +70660,16 @@ }, /turf/open/floor/iron, /area/station/security/brig) +"wml" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible, +/obj/machinery/atmospherics/pipe/layer_manifold/yellow/visible{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "wmn" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -70575,10 +70740,19 @@ /area/station/service/theater) "wnl" = ( /obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 +/obj/structure/table, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 4 }, -/turf/open/floor/iron, +/obj/item/grenade/chem_grenade/smart_metal_foam{ + pixel_x = 6 + }, +/obj/item/grenade/chem_grenade/smart_metal_foam{ + pixel_x = -2 + }, +/obj/item/crowbar, +/obj/item/wrench, +/turf/open/floor/iron/dark, /area/station/engineering/main) "wno" = ( /obj/machinery/mecha_part_fabricator/maint{ @@ -70586,20 +70760,24 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel/storage) -"wnv" = ( -/obj/effect/landmark/start/chief_engineer, -/obj/structure/cable, -/obj/effect/turf_decal/siding/yellow{ - dir = 5 +"wns" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Engineering Foyer"; + name = "engineering camera"; + network = list("ss13","engine") }, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 4 +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/brown/hidden{ + dir = 8 }, -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, -/area/station/command/heads_quarters/ce) +/area/station/engineering/hallway) "wny" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/turf_decal/delivery, @@ -70673,12 +70851,6 @@ /obj/structure/sign/poster/contraband/rebels_unite/directional/south, /turf/open/floor/plating/airless, /area/station/maintenance/space_hut/plasmaman) -"woi" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) "woj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -70720,26 +70892,6 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/primary/aft) -"woL" = ( -/obj/machinery/holopad, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/white, -/area/station/security/prison/mess) -"woT" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/anesthetic_mix, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/medical/cryo) "woV" = ( /obj/effect/turf_decal/bot, /obj/structure/rack, @@ -70810,16 +70962,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"wpI" = ( -/obj/machinery/door/airlock/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/unres/delayed{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/turf/open/floor/iron/dark, -/area/station/maintenance/aft) "wpM" = ( /obj/structure/chair{ dir = 8 @@ -70829,6 +70971,19 @@ }, /turf/open/floor/engine/vacuum, /area/station/science/ordnance/bomb) +"wpQ" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/computer/atmos_control/oxygen_tank{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ + dir = 4 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/atmos) "wqd" = ( /obj/item/radio/intercom/directional/west, /obj/machinery/modular_computer/preset/cargochat/service{ @@ -70884,14 +71039,6 @@ /obj/effect/turf_decal/trimline/purple/filled/line, /turf/open/floor/plating/plasma/rust, /area/station/maintenance/space_hut/plasmaman) -"wqP" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "wqQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/siding/purple, @@ -70938,6 +71085,12 @@ /obj/structure/cable/layer3, /turf/open/floor/engine, /area/station/ai/satellite/maintenance/storage) +"wrq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, +/turf/open/floor/iron, +/area/station/engineering/atmos) "wrw" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -70953,10 +71106,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"wrA" = ( -/obj/machinery/light/dim/directional/north, -/turf/open/floor/iron/dark, -/area/station/service/chapel/monastery) "wrI" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -70999,25 +71148,13 @@ /obj/structure/table/glass, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) -"wso" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) -"wst" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/obj/effect/turf_decal/box/red, -/obj/machinery/power/apc/auto_name/directional/east, +"wsA" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister, -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/showroomfloor, -/area/station/science/ordnance) +/turf/open/floor/iron/dark, +/area/station/security/brig) "wsD" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral{ @@ -71037,6 +71174,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard) +"wtw" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "wtz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -71052,14 +71197,35 @@ }, /turf/open/floor/iron, /area/station/command/bridge) -"wtM" = ( -/obj/effect/turf_decal/bot, -/obj/structure/closet/secure_closet/hydroponics, -/obj/structure/sign/poster/contraband/kudzu/directional/east, -/obj/effect/turf_decal/tile/green/fourcorners, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/checker, -/area/station/service/hydroponics) +"wtB" = ( +/obj/structure/table, +/obj/item/mmi, +/obj/item/bodypart/chest/robot{ + pixel_y = 4 + }, +/obj/item/bodypart/leg/right/robot{ + pixel_x = 6 + }, +/obj/item/bodypart/arm/right/robot{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/bodypart/leg/left/robot{ + pixel_x = -6 + }, +/obj/item/bodypart/arm/left/robot{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/bodypart/head/robot, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) "wtP" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/blue, @@ -71067,6 +71233,21 @@ /obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden, /turf/open/floor/iron/showroomfloor, /area/station/medical/cryo) +"wtS" = ( +/obj/effect/landmark/event_spawn, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/engineering/atmos/storage) "wua" = ( /obj/machinery/modular_computer/preset/civilian{ dir = 1 @@ -71115,11 +71296,6 @@ /obj/structure/sign/warning/deathsposal, /turf/closed/wall, /area/station/maintenance/starboard/aft) -"wux" = ( -/turf/open/floor/iron/stairs/left{ - dir = 8 - }, -/area/station/hallway/primary/fore) "wuE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -71130,36 +71306,23 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"wuG" = ( -/obj/structure/table/wood/fancy/black, -/obj/item/food/grown/flower/poppy/lily{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/food/grown/flower/poppy/lily{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/food/grown/flower/poppy/lily, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/cell_5k, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/service/chapel/monastery) "wuI" = ( /obj/structure/sign/poster/contraband/missing_gloves, /turf/closed/wall/rust, /area/station/maintenance/port/greater) -"wuK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 5 +"wuO" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 }, -/obj/effect/turf_decal/stripes/corner{ +/obj/structure/cable, +/obj/effect/turf_decal/tile/red{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, /turf/open/floor/iron, -/area/station/engineering/atmos) +/area/station/hallway/secondary/exit/departure_lounge) "wvj" = ( /obj/structure/rack, /obj/effect/spawner/random/techstorage/command_all, @@ -71167,21 +71330,14 @@ luminosity = 2 }, /area/station/engineering/storage/tech) -"wvw" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/light/small/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/components/unary/airlock_pump/unbolt_only{ - dir = 4 +"wvT" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Atmospherics Tank - Air"; + name = "atmospherics camera"; + network = list("ss13","engine") }, -/turf/open/floor/plating, -/area/station/maintenance/solars/port/aft) +/turf/open/floor/engine/air, +/area/station/engineering/atmos) "wwf" = ( /obj/machinery/disposal/bin/tagger, /obj/structure/disposalpipe/trunk, @@ -71191,14 +71347,21 @@ /turf/open/floor/wood, /area/station/service/library) "wwg" = ( -/obj/machinery/light/small/directional/north, /obj/machinery/atmospherics/components/unary/airlock_pump/unbolt_only{ dir = 8 }, -/obj/effect/turf_decal/bot, -/obj/structure/sign/warning/vacuum/external/directional/north, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/exit/departure_lounge) +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "wwv" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -71209,6 +71372,25 @@ }, /turf/open/floor/iron, /area/station/science/robotics/mechbay) +"www" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Supermatter Waste Line"; + name = "engineering camera"; + network = list("ss13","engine") + }, +/obj/machinery/button/door/directional/east{ + id = "engineaccess"; + name = "Engine Access Lockdown"; + req_access = list("engineering"); + pixel_x = 26 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/light/warm/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "wwC" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -71221,12 +71403,19 @@ /obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/machinery/holopad, /turf/open/floor/wood, /area/station/command/heads_quarters/qm) "wwG" = ( /turf/closed/wall/r_wall/rust, /area/station/science/ordnance/office) +"wwI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/status_display/evac/directional/north, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "wwJ" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/disposalpipe/segment, @@ -71268,21 +71457,6 @@ "wxq" = ( /turf/closed/wall/rust, /area/station/service/hydroponics) -"wxr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 4 - }, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/medbay/central) "wxx" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -71291,6 +71465,7 @@ dir = 1; name = "Gas to Filter" }, +/obj/structure/sign/warning/fire/directional/west, /turf/open/floor/circuit/green{ luminosity = 2 }, @@ -71300,25 +71475,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/carpet/green, /area/ruin/space/has_grav/abandoned_warehouse) -"wxH" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green{ - pixel_x = -5; - pixel_y = 7 - }, -/obj/item/pen{ - pixel_x = 8; - pixel_y = 5 - }, -/obj/item/pen/red{ - pixel_x = 5; - pixel_y = 1 - }, -/obj/item/toy/figure/detective, -/obj/item/radio/intercom/directional/east, -/obj/machinery/light/warm/directional/east, -/turf/open/floor/carpet/green, -/area/station/security/detectives_office) "wxI" = ( /obj/item/kirbyplants/organic/plant5, /obj/effect/decal/cleanable/dirt, @@ -71331,14 +71487,17 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"wxX" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Security Maintenance" +"wxZ" = ( +/obj/structure/bed, +/obj/machinery/iv_drip, +/obj/effect/turf_decal/bot_white/right, +/obj/effect/turf_decal/stripes/corner, +/obj/item/bedsheet/medical, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 }, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /turf/open/floor/iron/dark, -/area/station/maintenance/aft) +/area/station/medical/medbay/central) "wyv" = ( /obj/structure/table, /obj/item/clipboard{ @@ -71377,12 +71536,11 @@ /turf/open/floor/iron, /area/station/hallway/primary/starboard) "wyS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/light/floor, -/turf/open/floor/iron, -/area/station/cargo/storage) +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 1 + }, +/turf/open/floor/engine/vacuum, +/area/station/engineering/atmos) "wyX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -71402,6 +71560,19 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"wza" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple/half/contrasted, +/obj/effect/turf_decal/tile/purple, +/obj/structure/sign/poster/contraband/lusty_xenomorph/directional/north, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/station/science) "wzb" = ( /obj/effect/turf_decal/tile/purple/anticorner/contrasted{ dir = 8 @@ -71426,6 +71597,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"wzl" = ( +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/hallway/primary/fore) "wzp" = ( /obj/machinery/hydroponics/constructable, /obj/structure/railing/corner{ @@ -71434,17 +71616,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/service/hydroponics) -"wzr" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/maintenance/disposal/incinerator) "wzA" = ( /obj/effect/turf_decal/delivery, /obj/structure/closet/emcloset, @@ -71454,6 +71625,11 @@ /obj/machinery/newscaster/directional/west, /turf/open/floor/iron/dark, /area/station/hallway/primary/port) +"wzC" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/middle, +/obj/structure/transit_tube, +/turf/open/floor/plating, +/area/space/nearstation) "wzG" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/chair/sofa/corp/left{ @@ -71489,17 +71665,17 @@ }, /turf/open/floor/iron/dark, /area/station/medical/office) -"wAb" = ( -/obj/structure/bed, -/obj/item/bedsheet/medical, -/obj/effect/decal/cleanable/blood/old, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 +"wAg" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 5 }, -/obj/machinery/camera/autoname/directional/west, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/virology) +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"wAl" = ( +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "wAn" = ( /obj/effect/turf_decal/tile/blue/opposingcorners, /obj/effect/turf_decal/tile/red/opposingcorners{ @@ -71507,9 +71683,25 @@ }, /turf/open/floor/iron, /area/station/service/theater) +"wAo" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ + dir = 1 + }, +/turf/open/floor/iron/smooth, +/area/station/maintenance/disposal/incinerator) "wAt" = ( /turf/closed/wall, /area/station/security/execution/education) +"wAu" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron/dark, +/area/station/service/chapel/dock) "wAv" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/blood/gibs/old, @@ -71555,17 +71747,23 @@ /obj/machinery/telecomms/broadcaster/preset_left, /turf/open/floor/circuit/green/telecomms/mainframe, /area/station/tcommsat/server) -"wBb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ +"wAT" = ( +/obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark/corner{ - dir = 4 +/obj/effect/turf_decal/siding/red/corner{ + dir = 1 }, -/area/station/hallway/primary/fore) +/obj/effect/landmark/start/depsec/engineering, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/security/checkpoint/engineering) "wBf" = ( /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/iron, @@ -71598,6 +71796,17 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/central) +"wBN" = ( +/obj/machinery/door/airlock/external{ + name = "Prison External Airlock" + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "kilo-maint-1" + }, +/obj/effect/mapping_helpers/airlock/access/any/security/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) "wCe" = ( /obj/structure/railing{ dir = 1 @@ -71614,11 +71823,11 @@ }, /turf/open/floor/iron, /area/station/cargo/miningoffice) -"wCN" = ( -/obj/structure/flora/bush/ferny/style_random, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/grass, -/area/station/science/auxlab) +"wCJ" = ( +/obj/structure/lattice, +/obj/structure/transit_tube/horizontal, +/turf/open/space/basic, +/area/space/nearstation) "wCR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -71660,6 +71869,21 @@ /obj/structure/flora/rock/pile/style_random, /turf/open/misc/asteroid/lowpressure, /area/space/nearstation) +"wEo" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/box, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "wEt" = ( /turf/closed/wall/r_wall/rust, /area/station/service/bar/atrium) @@ -71713,13 +71937,14 @@ /obj/machinery/atmospherics/components/tank/air/layer4, /turf/open/floor/plating, /area/station/maintenance/solars/port/fore) -"wEW" = ( -/obj/machinery/biogenerator, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 8 +"wEO" = ( +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/tile/blue{ + dir = 4 }, -/turf/open/floor/iron, -/area/station/security/prison/garden) +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "wFa" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -71732,6 +71957,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"wFd" = ( +/obj/machinery/module_duplicator, +/obj/machinery/newscaster/directional/north, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/station/science/ordnance/office) "wFi" = ( /obj/machinery/biogenerator, /obj/effect/turf_decal/delivery, @@ -71743,6 +71977,11 @@ "wFl" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/captain/private) +"wFn" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "wFu" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -71778,6 +72017,23 @@ }, /turf/open/floor/engine, /area/station/command/vault) +"wFQ" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/obj/structure/cable, +/obj/item/radio/intercom/directional/south, +/obj/machinery/light/warm/directional/south, +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/siding/brown{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron/smooth_half, +/area/station/engineering/atmos/pumproom) "wFU" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -71860,7 +72116,10 @@ }, /obj/machinery/light/small/directional/south, /obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear, +/obj/structure/sign/warning/secure_area/directional/east, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/station/maintenance/starboard/aft) "wGE" = ( @@ -71868,13 +72127,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/duct, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, /turf/open/floor/iron/showroomfloor, /area/station/medical/break_room) -"wGG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/electrolyzer, -/turf/open/floor/iron/dark, -/area/station/maintenance/disposal/incinerator) "wGS" = ( /obj/structure/tank_dispenser, /obj/effect/turf_decal/tile/purple/half/contrasted{ @@ -71941,6 +72197,21 @@ /obj/effect/turf_decal/tile/green/opposingcorners, /turf/open/floor/iron, /area/station/service/hydroponics) +"wHN" = ( +/obj/structure/closet/secure_closet/security/engine, +/obj/effect/turf_decal/delivery, +/obj/structure/reagent_dispensers/wall/peppertank/directional/south, +/obj/item/crowbar, +/obj/item/book/manual/wiki/security_space_law, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) "wHQ" = ( /obj/structure/table, /obj/item/folder/red, @@ -71977,6 +72248,11 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/showroomfloor, /area/station/security/office) +"wHY" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/processing) "wIo" = ( /obj/machinery/atmospherics/components/unary/passive_vent{ dir = 1; @@ -71989,6 +72265,11 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/commons/toilet/restrooms) +"wIx" = ( +/obj/item/nullrod, +/obj/structure/table/wood, +/turf/open/floor/cult, +/area/station/service/chapel/office) "wIE" = ( /obj/machinery/power/shieldwallgen, /obj/effect/turf_decal/bot, @@ -72067,29 +72348,6 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/medical/treatment_center) -"wJz" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/hidden/layer4, -/obj/machinery/atmospherics/pipe/bridge_pipe/supply/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) -"wJD" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/storage/gas) "wKa" = ( /obj/machinery/modular_computer/preset/id{ dir = 8 @@ -72128,13 +72386,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/service/hydroponics) -"wLM" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/engineering/atmos) "wMe" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -72247,16 +72498,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/medical) -"wOe" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/landmark/event_spawn, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/lobby) "wOk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -72277,12 +72518,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, /turf/open/floor/iron/showroomfloor, /area/station/medical/medbay/central) -"wOl" = ( -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden) "wOy" = ( /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 @@ -72307,28 +72542,38 @@ }, /turf/open/floor/iron, /area/station/command/bridge) -"wPh" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/item/radio/intercom/directional/north, -/obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold/violet/visible{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos) "wPq" = ( /turf/closed/wall/r_wall, /area/station/service/chapel/funeral) -"wPy" = ( -/obj/machinery/door/poddoor/atmos_test_room_mainvent_1, -/turf/open/floor/engine/vacuum, -/area/station/maintenance/disposal/incinerator) "wPB" = ( /turf/closed/wall/r_wall/rust, /area/station/science/genetics) +"wPH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"wPI" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/fore) "wPK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -72349,25 +72594,15 @@ /obj/item/gun/ballistic/automatic/battle_rifle, /turf/open/floor/iron/dark, /area/station/security/armory) -"wPS" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/railing/corner{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light/floor, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "wPU" = ( -/obj/structure/sign/warning/electric_shock/directional/east, /obj/structure/closet/radiation, /obj/item/clothing/glasses/meson, /obj/effect/turf_decal/delivery, -/turf/open/floor/engine, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) "wPX" = ( /obj/effect/decal/cleanable/dirt, @@ -72400,6 +72635,20 @@ /obj/structure/sign/poster/official/random/directional/south, /turf/open/floor/iron/showroomfloor, /area/station/science/auxlab) +"wQG" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/computer/security/labor, +/obj/machinery/requests_console/directional/north{ + department = "Security"; + name = "Security Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) "wQI" = ( /obj/structure/sign/warning/electric_shock/directional/south, /obj/structure/flora/bush/pale/style_random, @@ -72428,10 +72677,18 @@ /obj/effect/turf_decal/box/corners, /turf/open/floor/engine, /area/station/science/xenobiology) -"wRr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, -/turf/closed/wall/r_wall, -/area/station/maintenance/disposal/incinerator) +"wRq" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "wRs" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 4 @@ -72477,6 +72734,26 @@ "wRU" = ( /turf/closed/wall, /area/station/engineering/atmos) +"wSb" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/camera/directional/north{ + c_tag = "Morgue Entrance"; + name = "medical camera"; + network = list("ss13","medical") + }, +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) "wSh" = ( /obj/structure/sign/poster/official/fruit_bowl, /turf/closed/wall/r_wall, @@ -72521,15 +72798,6 @@ /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"wSL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos) "wSU" = ( /obj/structure/table/glass, /obj/machinery/requests_console/directional/north{ @@ -72548,6 +72816,14 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) +"wSV" = ( +/obj/machinery/firealarm/directional/south, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "wSY" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable/layer3, @@ -72557,13 +72833,6 @@ }, /turf/open/floor/engine, /area/station/ai/satellite/interior) -"wTa" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/mapping_helpers/burnt_floor, -/obj/structure/sign/poster/contraband/random/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/port/lesser) "wTe" = ( /obj/machinery/door/firedoor, /obj/effect/decal/cleanable/dirt, @@ -72582,18 +72851,6 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/department/bridge) -"wTo" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/security/prison/garden) "wTx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, @@ -72620,6 +72877,21 @@ "wTU" = ( /turf/open/floor/carpet/orange, /area/station/command/heads_quarters/qm) +"wUi" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "wUU" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -72678,6 +72950,34 @@ /obj/item/weldingtool/mini, /turf/open/floor/iron/grimy, /area/station/security/prison/safe) +"wVN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/siding/yellow{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/holopad, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"wVP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 9 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "wVR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -72706,6 +73006,17 @@ /obj/effect/mapping_helpers/airlock/access/all/science/general, /turf/open/floor/iron/dark, /area/station/science/ordnance) +"wWb" = ( +/obj/structure/rack, +/obj/effect/spawner/random/techstorage/service_all, +/obj/effect/turf_decal/bot, +/obj/machinery/status_display/ai/directional/north, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/effect/spawner/random/techstorage/arcade_boards, +/obj/effect/spawner/random/techstorage/arcade_boards, +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) "wWk" = ( /obj/machinery/light/small/directional/south, /obj/effect/decal/cleanable/dirt, @@ -72720,6 +73031,12 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"wWo" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmos) "wWp" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -72729,20 +73046,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"wWy" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/pen, -/obj/effect/turf_decal/stripes/corner, -/obj/machinery/status_display/evac/directional/south, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/starboard) "wWB" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -72763,9 +73066,20 @@ }, /turf/open/floor/iron/dark, /area/station/science/lobby) -"wWJ" = ( -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) +"wWL" = ( +/obj/machinery/door/airlock/external/glass{ + name = "Atmospherics External Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) "wWQ" = ( /obj/effect/turf_decal/siding/wood/end{ dir = 4 @@ -72782,20 +73096,14 @@ /obj/effect/mapping_helpers/airlock/access/all/service/chapel_office, /turf/open/floor/carpet/royalblue, /area/station/service/chapel) -"wWW" = ( -/obj/structure/sign/warning/radiation, -/turf/closed/wall, -/area/station/maintenance/disposal/incinerator) -"wWY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/blue/half/contrasted, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "wXa" = ( /turf/open/floor/iron/dark, /area/station/service/chapel) +"wXg" = ( +/obj/structure/lattice, +/obj/structure/sign/warning/directional/east, +/turf/open/space/basic, +/area/space/nearstation) "wXt" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt, @@ -72820,19 +73128,6 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/iron/dark, /area/station/service/chapel) -"wXM" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) -"wXP" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/maintenance/disposal/incinerator) "wXT" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -72867,17 +73162,6 @@ /obj/effect/spawner/random/armory/shotgun, /turf/open/floor/iron/showroomfloor, /area/station/security/armory) -"wYq" = ( -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/unres/delayed{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance/departmental, -/obj/effect/mapping_helpers/airlock/access/any/service/janitor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/maintenance/starboard/aft) "wYx" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -72898,6 +73182,28 @@ /obj/structure/cable, /turf/open/floor/plating, /area/ruin/space/has_grav/abandoned_warehouse) +"wYD" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/camera/directional/west{ + c_tag = "Atmospherics Aft Tanks"; + name = "atmospherics camera"; + network = list("ss13","engine") + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) +"wYM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/machinery/status_display/evac/directional/east, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "wYR" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow/half/contrasted{ @@ -72922,6 +73228,41 @@ }, /turf/open/floor/plating/airless, /area/station/hallway/secondary/exit/departure_lounge) +"wZe" = ( +/obj/structure/plasticflaps/opaque, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + location = "Atmospherics"; + name = "navigation beacon (Atmospherics Delivery)" + }, +/obj/machinery/door/window/left/directional/west{ + name = "Atmospherics Delivery Access"; + req_access = list("atmospherics") + }, +/obj/machinery/door/poddoor/preopen{ + id = "atmos"; + name = "Atmospherics Blast Door" + }, +/obj/effect/turf_decal/delivery, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) +"wZI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/aft) +"wZS" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) "wZW" = ( /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, @@ -72937,17 +73278,6 @@ /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating, /area/space/nearstation) -"xae" = ( -/obj/structure/table, -/obj/structure/bedsheetbin, -/obj/machinery/status_display/evac/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 1 - }, -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/dark, -/area/station/commons/toilet/restrooms) "xaf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -72965,6 +73295,18 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/fore) +"xai" = ( +/obj/machinery/firealarm/directional/east, +/obj/machinery/computer/dna_console{ + dir = 8 + }, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/cold/directional/east, +/turf/open/floor/iron/dark, +/area/station/science/genetics) "xap" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -73007,6 +73349,36 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron/showroomfloor, /area/station/medical/chemistry) +"xaK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/cable, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/cargo/storage) +"xaX" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "xaZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -73024,26 +73396,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/showroomfloor, /area/station/science/auxlab) -"xbj" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/machinery/light_switch/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/camera/motion/directional/south{ - c_tag = "Vault"; - name = "vault camera"; - network = list("vault") - }, -/obj/machinery/light/small/red/directional/south, -/turf/open/floor/engine, -/area/station/command/vault) -"xbk" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber{ - dir = 1 - }, -/turf/open/floor/engine/vacuum, -/area/station/maintenance/disposal/incinerator) "xbx" = ( /obj/effect/turf_decal/stripes/line, /obj/item/radio/intercom/directional/east, @@ -73108,32 +73460,27 @@ }, /turf/open/floor/iron/dark, /area/station/security/courtroom) -"xcu" = ( -/obj/machinery/door/airlock/external{ - name = "Prison External Airlock" - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "kilo-maint-1" +"xcy" = ( +/obj/machinery/modular_computer/preset/id, +/obj/effect/turf_decal/bot, +/obj/machinery/computer/security/telescreen/ce/directional/north, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) +"xcC" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Atmospherics Fore Tanks"; + name = "atmospherics camera"; + network = list("ss13","engine") }, -/obj/effect/mapping_helpers/airlock/access/any/security/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/port/lesser) -"xcE" = ( -/obj/structure/chair/office/light{ - dir = 1; - pixel_y = 3 +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 }, -/obj/effect/turf_decal/siding/yellow{ +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 5 }, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage/gas) +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "xcJ" = ( /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/dark, @@ -73204,14 +73551,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) -"xea" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/ai/upload/chamber) "xef" = ( /obj/structure/disposalpipe/junction/flip{ dir = 4 @@ -73245,6 +73584,25 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/gravity_generator) +"xep" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/table, +/obj/effect/turf_decal/bot, +/obj/machinery/camera/directional/east{ + c_tag = "Cargo Office"; + name = "cargo camera"; + network = list("ss13","qm") + }, +/obj/machinery/fax{ + fax_name = "Cargo Office"; + name = "Cargo Office Fax Machine" + }, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/cargo/office) "xeq" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -73281,13 +73639,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/electrical) -"xeL" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/ai/upload/chamber) "xeP" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -73296,6 +73647,12 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard) +"xeR" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/pipedispenser/disposal/transit_tube, +/obj/machinery/status_display/ai/directional/south, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "xeT" = ( /obj/machinery/power/smes, /obj/effect/decal/cleanable/dirt, @@ -73315,45 +73672,45 @@ }, /turf/open/floor/iron/dark, /area/station/security/detectives_office) -"xfx" = ( -/obj/effect/spawner/structure/window/reinforced/tinted, -/turf/open/floor/plating, -/area/station/maintenance/department/security) -"xfB" = ( -/obj/structure/closet/bombcloset, +"xfh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/medbay/central) +"xfn" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/newscaster/directional/east, /obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 + dir = 8 }, /turf/open/floor/iron/dark, -/area/station/science/lobby) -"xfL" = ( -/obj/effect/turf_decal/box/corners{ - dir = 1 +/area/station/security/lockers) +"xfq" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 9 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) +"xfx" = ( +/obj/effect/spawner/structure/window/reinforced/tinted, +/turf/open/floor/plating, +/area/station/maintenance/department/security) "xfU" = ( /obj/item/circuitboard/computer/solar_control, /turf/open/misc/asteroid/airless, /area/space/nearstation) -"xfV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "xfZ" = ( /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/showroomfloor, /area/station/medical/psychology) -"xgi" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/engine, -/area/station/ai/upload/chamber) "xgC" = ( /obj/machinery/status_display/ai/directional/north, /obj/effect/turf_decal/tile/neutral{ @@ -73366,28 +73723,6 @@ dir = 1 }, /area/station/hallway/primary/central/fore) -"xgF" = ( -/obj/structure/rack, -/obj/effect/turf_decal/bot, -/obj/item/storage/medkit/o2, -/obj/item/tank/internals/emergency_oxygen, -/obj/machinery/light/small/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/item/tank/internals/emergency_oxygen, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/entry) -"xgH" = ( -/obj/machinery/airalarm/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/end{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/ai/upload/chamber) "xgV" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/yellow/half/contrasted, @@ -73410,6 +73745,17 @@ /obj/machinery/light/small/directional/north, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/spawner/random/trash/cigpack, +/obj/item/assembly/igniter{ + pixel_x = -8 + }, +/obj/item/chair/stool{ + pixel_y = 5; + pixel_x = 6; + dir = 2 + }, /turf/open/floor/plating, /area/station/maintenance/aft) "xhI" = ( @@ -73429,27 +73775,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"xhT" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"xii" = ( -/obj/machinery/door/poddoor/preopen{ - id = "brigfrontdoor"; - name = "Front Security Blast Door" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/caution/stand_clear, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/security/brig) "xin" = ( /obj/structure/table, /obj/effect/turf_decal/bot, @@ -73482,14 +73807,6 @@ }, /turf/open/floor/iron/dark, /area/station/science/genetics) -"xir" = ( -/obj/machinery/status_display/evac/directional/south, -/obj/effect/turf_decal/tile/blue/half/contrasted, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/obj/machinery/light/warm/dim/directional/south, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "xiA" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable, @@ -73500,18 +73817,18 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/sorting) -"xiP" = ( -/obj/machinery/newscaster/directional/north, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 +"xiZ" = ( +/obj/structure/table/wood, +/obj/structure/cable, +/obj/item/pen/fountain{ + pixel_x = 4 }, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/chemistry) -"xiT" = ( -/obj/effect/landmark/start/medical_doctor, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/medbay/central) +/obj/item/storage/photo_album/chapel{ + pixel_x = -16 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/grimy, +/area/station/service/chapel/office) "xja" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -73545,23 +73862,6 @@ /obj/machinery/newscaster/directional/east, /turf/closed/wall/r_wall, /area/station/commons/fitness/recreation) -"xjB" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 4 - }, -/obj/structure/noticeboard/directional/north, -/obj/item/kirbyplants/organic/plant5, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) "xjI" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 8 @@ -73608,18 +73908,13 @@ /obj/effect/landmark/navigate_destination/minisat_access_ai, /turf/open/floor/iron/dark, /area/station/hallway/primary/central/fore) -"xjS" = ( -/obj/structure/bodycontainer/morgue{ - dir = 8 - }, -/obj/effect/turf_decal/bot_white, -/obj/machinery/airalarm/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +"xkc" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/newscaster/directional/west, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron, +/area/station/command/heads_quarters/hop) "xke" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -73654,6 +73949,17 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard) +"xkx" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) "xky" = ( /obj/structure/sink/kitchen/directional/east{ desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; @@ -73661,6 +73967,19 @@ }, /turf/open/floor/plating, /area/station/security/prison) +"xkS" = ( +/obj/structure/closet/crate/trashcart/laundry, +/obj/effect/spawner/random/contraband/prison, +/obj/item/clothing/under/rank/prisoner, +/obj/item/clothing/under/rank/prisoner, +/obj/item/clothing/under/rank/prisoner/skirt, +/obj/item/clothing/under/rank/prisoner/skirt, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/cafeteria, +/area/station/security/prison/garden) "xle" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -73719,6 +74038,13 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron/showroomfloor, /area/station/medical/chemistry) +"xlv" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "xlA" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, @@ -73733,6 +74059,18 @@ /obj/structure/flora/bush/grassy/style_random, /turf/open/floor/grass, /area/station/service/chapel) +"xlV" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) "xmf" = ( /obj/machinery/door/airlock/maintenance{ name = "Auxiliary Research Maintenance" @@ -73740,24 +74078,6 @@ /obj/effect/mapping_helpers/airlock/access/all/science/research, /turf/open/floor/iron/dark, /area/station/science/auxlab) -"xmm" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/pen, -/obj/item/stamp/denied{ - pixel_x = 8; - pixel_y = 6 - }, -/obj/item/stamp/granted{ - pixel_x = 8; - pixel_y = 2 - }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/exit/departure_lounge) "xmn" = ( /obj/structure/chair/pew/right{ dir = 8 @@ -73805,17 +74125,22 @@ /turf/open/floor/iron/dark, /area/station/security/brig) "xmQ" = ( -/obj/machinery/door/airlock/external{ - name = "External Airlock" +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, /obj/structure/cable, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/disposal) +"xmZ" = ( +/obj/structure/table, +/obj/item/storage/toolbox/mechanical, +/obj/item/clothing/head/utility/welding, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/chemistry) "xng" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -73840,17 +74165,14 @@ /turf/open/floor/iron/dark, /area/station/maintenance/port/greater) "xnB" = ( -/obj/machinery/portable_atmospherics/pump, -/obj/machinery/airalarm/directional/south, -/obj/effect/turf_decal/box, -/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 1 +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Ports to Filter" }, -/turf/open/floor/iron/showroomfloor, -/area/station/engineering/hallway) +/turf/open/floor/iron, +/area/station/engineering/atmos) "xnC" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -73864,6 +74186,16 @@ }, /turf/open/floor/iron, /area/station/service/theater) +"xnH" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "xnJ" = ( /obj/structure/table, /obj/item/clipboard, @@ -73909,18 +74241,6 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"xnZ" = ( -/obj/machinery/portable_atmospherics/scrubber, -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 1 - }, -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/box, -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/engineering/hallway) "xoh" = ( /obj/structure/sign/warning/fire/directional/west{ pixel_y = -32 @@ -73948,6 +74268,9 @@ }, /obj/structure/cable, /obj/machinery/duct, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, /turf/open/floor/iron/showroomfloor, /area/station/medical/paramedic) "xoO" = ( @@ -74009,6 +74332,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/storage) +"xqc" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/table/glass, +/obj/structure/cable, +/obj/structure/fireaxecabinet/jawsofrecovery/directional/east, +/obj/item/surgicaldrill, +/obj/item/toy/figure/paramedic, +/obj/machinery/light/small/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/paramedic) "xqf" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/showroomfloor, @@ -74021,17 +74357,6 @@ /obj/structure/cable, /turf/open/floor/bronze, /area/station/maintenance/department/chapel) -"xqE" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering/glass{ - name = "Supermatter Engine" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/machinery/duct, -/turf/open/floor/iron/dark, -/area/station/engineering/main) "xqM" = ( /obj/structure/flora/grass/jungle/a/style_random, /obj/structure/flora/bush/fullgrass/style_random, @@ -74065,30 +74390,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/brig) -"xrx" = ( -/obj/structure/table/glass, -/obj/item/folder/white, -/obj/item/folder/white, -/obj/item/crowbar/red, -/obj/item/wrench, -/obj/item/storage/box/syringes{ - pixel_x = 4; - pixel_y = 6 - }, -/obj/item/storage/box/beakers{ - pixel_y = 2 - }, -/obj/machinery/airalarm/directional/east, -/obj/structure/noticeboard/directional/south, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/item/storage/pill_bottle/sepsisillin{ - pixel_x = -5; - pixel_y = -2 - }, -/turf/open/floor/iron/dark, -/area/station/medical/virology) "xrA" = ( /obj/machinery/door/airlock/external{ name = "External Airlock" @@ -74105,11 +74406,30 @@ "xrS" = ( /turf/closed/wall/rust, /area/station/security/execution/transfer) -"xsn" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) +"xsp" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/door/window/left/directional/east{ + name = "Inner Pipe Access"; + req_access = list("atmospherics") + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) +"xsG" = ( +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/station/maintenance/department/chapel/monastery) "xsJ" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/yellow/half/contrasted{ @@ -74150,17 +74470,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/xenobiology) -"xtc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/siding/yellow{ - dir = 6 - }, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, -/obj/effect/turf_decal/tile/red, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/engineering/storage_shared) "xtk" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -74213,10 +74522,16 @@ /turf/open/floor/iron/showroomfloor, /area/station/service/bar/atrium) "xtO" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 }, -/turf/open/floor/engine, +/obj/structure/table, +/obj/item/analyzer, +/obj/item/analyzer, +/obj/item/wrench, +/obj/item/wrench, +/obj/structure/sign/warning/no_smoking/directional/east, +/turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) "xtV" = ( /obj/effect/turf_decal/stripes/corner{ @@ -74224,6 +74539,23 @@ }, /turf/closed/wall, /area/station/maintenance/starboard) +"xum" = ( +/obj/structure/table, +/obj/item/clothing/under/rank/prisoner/skirt{ + pixel_x = -13; + pixel_y = 5 + }, +/obj/item/clothing/under/rank/prisoner/skirt{ + pixel_x = 9; + pixel_y = 5 + }, +/obj/item/clothing/under/rank/prisoner{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron, +/area/station/security/execution/transfer) "xuA" = ( /obj/machinery/vending/hydroseeds{ slogan_delay = 700 @@ -74265,23 +74597,6 @@ /obj/item/radio/intercom/directional/east, /turf/closed/wall, /area/station/maintenance/disposal) -"xvc" = ( -/obj/structure/window/spawner/directional/east, -/obj/structure/window/spawner/directional/south, -/obj/structure/window/spawner/directional/west, -/obj/structure/flora/bush/large/style_random{ - pixel_y = 0 - }, -/obj/structure/flora/bush/fullgrass/style_random, -/turf/open/floor/grass, -/area/station/medical/medbay/central) -"xvg" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/service/chapel) "xvj" = ( /obj/structure/flora/bush/stalky/style_random, /obj/structure/flora/bush/flowers_br/style_random, @@ -74368,6 +74683,13 @@ "xvW" = ( /turf/closed/wall, /area/station/medical/paramedic) +"xwa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "xwk" = ( /obj/machinery/computer/security/mining, /obj/effect/turf_decal/tile/brown/half/contrasted{ @@ -74425,22 +74747,30 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/medical/office) -"xwW" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ +"xwT" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red{ dir = 4 }, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 8 +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 }, -/obj/effect/turf_decal/tile/purple{ +/obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/showroomfloor, -/area/station/science) +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "xxk" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/cmo) +"xxr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "xxz" = ( /obj/structure/table/glass, /obj/item/storage/box/bodybags{ @@ -74491,6 +74821,20 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"xxY" = ( +/obj/structure/chair/sofa/left/maroon{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/bar/atrium) "xye" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -74507,6 +74851,15 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"xyo" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/airlock_pump/unbolt_only, +/turf/open/floor/iron/dark, +/area/station/maintenance/fore) "xyp" = ( /obj/structure/rack, /obj/item/plant_analyzer, @@ -74519,27 +74872,38 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/bridge) +"xyH" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output{ + dir = 4 + }, +/turf/open/floor/engine/plasma, +/area/station/engineering/atmos) +"xyI" = ( +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "xzc" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/burnt_floor, /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"xzi" = ( -/obj/machinery/atmospherics/components/binary/pump{ - name = "East Ports to Engine" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) "xzI" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/structure/closet_maintenance, /obj/effect/spawner/random/food_or_drink/booze, /turf/open/floor/plating, /area/station/maintenance/starboard) +"xzP" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/ai/upload/chamber) "xzS" = ( /obj/machinery/chem_master, /obj/effect/turf_decal/delivery, @@ -74554,11 +74918,19 @@ }, /turf/open/floor/iron/dark, /area/station/medical/pharmacy) -"xzU" = ( -/obj/structure/transit_tube/horizontal, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) +"xzW" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/defibrillator_mount/directional/west, +/obj/machinery/stasis{ + dir = 4 + }, +/obj/effect/turf_decal/box, +/obj/machinery/vitals_reader/directional/north, +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/dark, +/area/station/medical/treatment_center) "xAw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -74589,23 +74961,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard) -"xAW" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) -"xBb" = ( -/obj/machinery/light_switch/directional/south, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue/half/contrasted, -/obj/structure/table/glass, -/obj/item/mod/module/thermal_regulator, -/obj/item/mod/module/plasma_stabilizer, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/break_room) "xBi" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -74630,41 +74985,32 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"xBv" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "xBw" = ( /obj/structure/flora/grass/jungle/b/style_random, /obj/structure/flora/bush/sparsegrass/style_random, /turf/open/floor/grass, /area/station/security/prison/garden) -"xBF" = ( -/obj/effect/spawner/random/structure/chair_flipped, -/turf/open/floor/plating, -/area/station/maintenance/port/lesser) "xBI" = ( /turf/closed/wall/rust, /area/station/maintenance/port/fore) -"xBT" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/structure/sink/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/machinery/atmospherics/components/binary/pump/on/layer4{ - dir = 4; - name = "Airlock Pump"; - target_pressure = 300; - hide = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "xCa" = ( /obj/effect/turf_decal/siding/wood/corner, /obj/structure/disposalpipe/segment, @@ -74685,6 +75031,40 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"xCj" = ( +/obj/item/canvas/nineteen_nineteen, +/obj/item/canvas/nineteen_nineteen, +/obj/item/canvas/nineteen_nineteen, +/obj/item/canvas/nineteen_nineteen, +/obj/structure/table/rolling, +/obj/item/storage/crayons{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/effect/spawner/random/contraband/prison, +/obj/item/storage/crayons{ + pixel_x = -6; + pixel_y = 1 + }, +/obj/item/paper_bin{ + pixel_x = 11; + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = 13; + pixel_y = 9 + }, +/obj/item/pen{ + pixel_x = 11; + pixel_y = 6 + }, +/obj/item/pen{ + pixel_x = 11; + pixel_y = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/grimy, +/area/station/security/prison) "xCp" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -74706,7 +75086,6 @@ /turf/open/floor/iron/dark, /area/station/hallway/primary/port) "xCr" = ( -/obj/effect/turf_decal/delivery, /obj/structure/extinguisher_cabinet/directional/north, /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -74724,18 +75103,18 @@ /obj/item/stock_parts/power_store/cell/high, /obj/item/electronics/airlock, /obj/item/electronics/airlock, -/obj/item/stack/sheet/rglass{ - amount = 50; - pixel_x = 2; - pixel_y = -2 - }, -/obj/item/stack/sheet/plasteel/fifty{ - pixel_x = -2; - pixel_y = 2 - }, /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stock_parts/power_store/cell/emproof{ + pixel_x = 6; + pixel_y = -2 + }, /turf/open/floor/iron, /area/station/engineering/main) "xCz" = ( @@ -74759,39 +75138,17 @@ }, /turf/open/floor/iron/dark, /area/station/security/courtroom) -"xCE" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"xCL" = ( -/obj/item/reagent_containers/cup/glass/flask/gold{ - pixel_x = 3; - pixel_y = 8 - }, -/obj/item/reagent_containers/cup/glass/bottle/rum{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ - pixel_x = 7; - pixel_y = 4 - }, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass, -/obj/structure/table/wood, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/obj/machinery/light/warm/directional/north, -/turf/open/floor/carpet/royalblack, -/area/station/command/heads_quarters/captain) "xCP" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/cargo/miningdock) +"xCS" = ( +/obj/effect/turf_decal/box/white{ + color = "#9FED58" + }, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/atmos) "xCY" = ( /obj/effect/landmark/start/ai/secondary, /obj/item/radio/intercom/directional/north{ @@ -74874,34 +75231,22 @@ }, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) -"xDo" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/door/window/left/directional/north{ - name = "Inner Pipe Access"; - req_access = list("atmospherics") - }, -/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ - dir = 4 +"xDq" = ( +/obj/machinery/firealarm/directional/south{ + pixel_x = 4 }, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/machinery/duct, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) -"xDw" = ( -/obj/machinery/chem_master, -/obj/effect/turf_decal/bot, -/obj/machinery/light_switch/directional/south, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 }, -/obj/item/paper/crumpled{ - default_raw_text = "This isn't funny, I'm trapped on the least fun room on the station."; - name = "poorly written complaint" +/obj/machinery/rnd/production/circuit_imprinter, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/effect/turf_decal/tile/red, +/obj/machinery/light_switch/directional/south{ + pixel_x = -6 }, /turf/open/floor/iron/dark, -/area/station/science/xenobiology) +/area/station/engineering/lobby) "xDE" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 10 @@ -74951,6 +75296,16 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"xEI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/status_display/evac/directional/north, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "xEV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -74978,6 +75333,16 @@ }, /turf/open/floor/iron/dark, /area/station/command/teleporter) +"xFg" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/yellow{ + dir = 6 + }, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, +/obj/effect/turf_decal/tile/red, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "xFt" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/structure/cable, @@ -75054,13 +75419,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) -"xGy" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "xGI" = ( /mob/living/basic/carp{ environment_smash = 0; @@ -75148,20 +75506,15 @@ }, /turf/open/floor/engine, /area/station/ai/satellite/chamber) -"xIB" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ +"xIv" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ dir = 4 }, -/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron, /area/station/engineering/atmos) "xIJ" = ( @@ -75236,18 +75589,29 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"xJs" = ( +"xJj" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/atmos) +"xJm" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/obj/machinery/meter, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos) +"xJw" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "xJB" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 4 @@ -75279,24 +75643,12 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/medical/pharmacy) -"xKc" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/hallway/primary/aft) "xKn" = ( /obj/effect/decal/cleanable/blood/old, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/chair/stool/bar/directional/west, /turf/open/floor/carpet/green, /area/station/maintenance/port/greater) -"xKq" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "xKr" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/blue{ @@ -75307,6 +75659,26 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/medbay/lobby) +"xKC" = ( +/obj/structure/chair/sofa/right/maroon{ + dir = 8 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/newscaster/directional/north, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/service/bar/atrium) +"xKI" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 8 + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/engineering/atmos/storage) "xKO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -75347,6 +75719,16 @@ /obj/effect/spawner/surgery_tray/full, /turf/open/floor/iron/dark, /area/station/medical/surgery/theatre) +"xLg" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) "xLk" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -75363,15 +75745,31 @@ /obj/effect/landmark/navigate_destination/bar, /turf/open/floor/iron/dark, /area/station/hallway/secondary/service) -"xLA" = ( -/obj/machinery/shower/directional/west, -/obj/effect/turf_decal/box, -/obj/structure/fluff/shower_drain, -/obj/effect/turf_decal/stripes/line{ - dir = 9 +"xLm" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/components/tank/air/layer4{ + dir = 8 }, /turf/open/floor/iron/dark, -/area/station/engineering/main) +/area/station/hallway/secondary/entry) +"xLx" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/screwdriver{ + pixel_y = 18 + }, +/obj/item/radio/intercom/directional/south, +/obj/machinery/firealarm/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) "xLC" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -75380,6 +75778,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, /turf/open/floor/iron/dark/telecomms, /area/station/science/server) +"xLK" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/orange/visible{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos) "xLL" = ( /obj/structure/cable, /obj/machinery/power/tracker, @@ -75405,18 +75810,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/fore) -"xMs" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1; - name = "Distro to Waste" - }, -/obj/machinery/airalarm/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/pumproom) "xMC" = ( /obj/structure/table/wood, /obj/item/paper/guides/jobs/security/courtroom, @@ -75452,10 +75845,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/medical) -"xMZ" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) "xNc" = ( /turf/closed/wall/r_wall/rust, /area/station/command/heads_quarters/cmo) @@ -75498,6 +75887,16 @@ /obj/effect/mapping_helpers/airlock/access/all/science/xenobio, /turf/open/floor/iron/dark, /area/station/science/xenobiology) +"xND" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "N2O to Pure" + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/atmos) "xNJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -75513,11 +75912,14 @@ /turf/open/floor/iron, /area/station/cargo/warehouse) "xNP" = ( -/obj/structure/extinguisher_cabinet/directional/east, /obj/structure/closet/radiation, /obj/item/clothing/glasses/meson, /obj/effect/turf_decal/delivery, -/turf/open/floor/engine, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/structure/sign/poster/contraband/missing_gloves/directional/north, +/turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) "xOa" = ( /obj/machinery/conveyor{ @@ -75548,17 +75950,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer1, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"xOl" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/tile/red/half/contrasted, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/caution/stand_clear, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/processing) "xOq" = ( /obj/item/kirbyplants/organic/plant16, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -75609,6 +76000,12 @@ /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/maintenance/port/lesser) +"xPI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/processing) "xPO" = ( /obj/machinery/door/airlock/command/glass{ name = "Bridge" @@ -75623,12 +76020,29 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/cargo/miningdock) -"xQL" = ( +"xQK" = ( /obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, -/obj/machinery/light/directional/south, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"xQT" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/obj/machinery/airalarm/directional/south, +/obj/structure/cable, +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/siding/brown{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth_half, +/area/station/engineering/atmos/pumproom) "xQU" = ( /obj/machinery/ai_slipper{ uses = 10 @@ -75645,27 +76059,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine, /area/station/ai/satellite/atmos) -"xRc" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/effect/turf_decal/bot, -/obj/machinery/firealarm/directional/south, +"xRj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, /obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/blue{ dir = 4 }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted, -/obj/machinery/light/dim/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/medbay/central) -"xRy" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ - dir = 10 - }, -/turf/closed/wall/r_wall, -/area/station/maintenance/disposal/incinerator) +/obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/plating, +/area/station/hallway/secondary/entry) "xRB" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/blue/half/contrasted, @@ -75684,6 +76088,11 @@ }, /turf/open/floor/engine, /area/station/command/vault) +"xRI" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/engine, +/area/station/engineering/atmos) "xRL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -75774,6 +76183,19 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron/showroomfloor, /area/station/service/bar/atrium) +"xTh" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_atmos, +/obj/machinery/atmospherics/pipe/smart/simple/brown/visible/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden/layer4{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) "xTx" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/old, @@ -75851,9 +76273,10 @@ /turf/open/floor/engine, /area/station/science/auxlab) "xUQ" = ( -/obj/structure/closet/cardboard, -/obj/structure/grille/broken, /obj/effect/decal/cleanable/cobweb, +/obj/structure/closet/crate/trashcart, +/obj/effect/spawner/random/maintenance/three, +/obj/effect/spawner/random/clothing/twentyfive_percent_cyborg_mask, /turf/open/floor/plating, /area/station/maintenance/aft) "xVm" = ( @@ -75934,17 +76357,22 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/ordnance) -"xWh" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 4 - }, +"xVW" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ +/obj/effect/turf_decal/siding/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ dir = 1 }, -/turf/open/floor/iron/dark, -/area/station/maintenance/disposal/incinerator) +/turf/open/floor/iron, +/area/station/engineering/atmos/office) "xWw" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -75982,23 +76410,13 @@ /obj/structure/sign/warning/electric_shock, /turf/closed/wall/r_wall/rust, /area/station/maintenance/starboard) -"xWT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, -/obj/machinery/door/airlock/public/glass/incinerator/atmos_interior, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/airlock_controller/incinerator_atmos{ - pixel_y = -24 - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/turf/open/floor/engine, -/area/station/maintenance/disposal/incinerator) +"xXe" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) "xXo" = ( /obj/structure/sign/departments/xenobio, /turf/closed/wall/r_wall, @@ -76023,18 +76441,6 @@ }, /turf/open/floor/engine, /area/station/science/auxlab) -"xXQ" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "atmos_end_big_lad" - }, -/obj/machinery/door/airlock/external{ - name = "Atmospherics External Airlock" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "xYa" = ( /obj/effect/turf_decal/bot, /obj/machinery/status_display/shuttle{ @@ -76073,13 +76479,6 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/service/bar/backroom) -"xYC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/security/warden) "xYE" = ( /obj/effect/turf_decal/delivery, /obj/structure/sign/warning/secure_area/directional/west, @@ -76104,27 +76503,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"xZb" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wideplating/dark/corner, -/turf/open/floor/iron/dark, -/area/station/service/chapel) -"xZc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/ai/upload/chamber) "xZi" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -76148,6 +76526,16 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/maintenance/fore) +"xZt" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "xZL" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -76180,6 +76568,34 @@ /obj/structure/cable/layer3, /turf/open/floor/engine, /area/station/ai/satellite/maintenance/storage) +"yan" = ( +/obj/machinery/light/small/directional/west, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"yas" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos) +"yay" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/corner{ + dir = 4 + }, +/area/station/hallway/primary/fore) "yaE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -76296,6 +76712,21 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/medical/pharmacy) +"ybd" = ( +/obj/effect/turf_decal/bot, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/structure/rack, +/obj/item/storage/box{ + pixel_y = 3 + }, +/obj/item/stack/package_wrap, +/obj/item/hand_labeler, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) "ybm" = ( /obj/structure/table/wood, /obj/item/lipstick/purple{ @@ -76342,29 +76773,6 @@ /obj/structure/window/spawner/directional/east, /turf/open/floor/grass, /area/station/hallway/secondary/exit/departure_lounge) -"ybX" = ( -/obj/effect/turf_decal/delivery, -/obj/structure/closet/crate/silvercrate, -/obj/item/screwdriver/power, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/command/vault) -"ych" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/office) "ycp" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, @@ -76394,6 +76802,17 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"ycH" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "ycL" = ( /obj/structure/disposalpipe/trunk, /obj/machinery/disposal/bin/tagger, @@ -76408,14 +76827,6 @@ }, /turf/open/floor/iron, /area/station/security/brig) -"ydk" = ( -/obj/machinery/airalarm/directional/east, -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "ydn" = ( /obj/structure/flora/bush/grassy/style_random, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -76433,17 +76844,6 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/storage_shared) -"ydI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/security/processing) "ydV" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -76486,15 +76886,6 @@ dir = 8 }, /area/station/hallway/primary/central/fore) -"yem" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/aft) "yeo" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -76533,6 +76924,12 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"yfl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "yfq" = ( /obj/structure/lattice/catwalk, /obj/structure/transit_tube/horizontal{ @@ -76563,6 +76960,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/primary/central/fore) +"yfJ" = ( +/obj/structure/table/wood, +/obj/item/storage/fancy/cigarettes/cigars/havana{ + pixel_y = 5 + }, +/obj/item/lighter, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/captain) "yfS" = ( /obj/machinery/light/small/directional/west, /turf/open/water/no_planet_atmos/deep, @@ -76579,17 +76987,11 @@ /turf/open/floor/iron, /area/station/command/bridge) "ygo" = ( -/obj/structure/table, -/obj/item/food/ready_donk/donkrange_chicken, -/obj/item/food/ready_donk/donkhiladas{ - pixel_y = 5 - }, -/obj/item/food/ready_donk/country_chicken{ - pixel_y = 10 +/obj/machinery/door/poddoor/atmos_test_room_mainvent_1{ + name = "Axuiliary Chamber Vent" }, -/obj/machinery/light/warm/directional/north, -/turf/open/floor/iron/dark, -/area/station/cargo/miningoffice) +/turf/open/floor/engine/vacuum, +/area/station/engineering/atmos) "ygt" = ( /obj/structure/chair{ dir = 8 @@ -76608,22 +77010,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central) -"ygO" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) -"ygU" = ( -/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ - dir = 4 - }, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) "ygV" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -76670,40 +77056,28 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/showroomfloor, /area/station/security/office) -"yhz" = ( -/obj/structure/table, -/obj/item/clothing/shoes/sneakers/orange{ - pixel_x = -6; - pixel_y = 10 - }, -/obj/item/clothing/shoes/sneakers/orange{ - pixel_x = -6; - pixel_y = -2 +"yhF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 }, -/obj/item/clothing/shoes/sneakers/orange{ - pixel_x = -6; - pixel_y = 4 +/obj/structure/cable, +/obj/effect/turf_decal/siding/red{ + dir = 1 }, -/obj/item/clothing/shoes/sneakers/orange{ - pixel_x = -6; - pixel_y = -8 +/obj/effect/landmark/start/depsec/engineering, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 }, -/obj/item/clothing/under/rank/prisoner{ - pixel_x = 8; - pixel_y = 5 +/obj/effect/turf_decal/tile/neutral{ + dir = 4 }, -/obj/machinery/camera/directional/north{ - c_tag = "Prison Visitation"; - network = list("ss13","prison") +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ + dir = 8 }, -/obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, -/area/station/security/execution/transfer) -"yhD" = ( -/obj/structure/flora/bush/lavendergrass/style_random, -/obj/effect/turf_decal/siding/thinplating/dark, -/turf/open/floor/grass, -/area/station/service/chapel) +/area/station/security/checkpoint/engineering) "yhI" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 8 @@ -76725,52 +77099,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"yhW" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, -/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/engineering/atmos) -"yif" = ( -/obj/machinery/camera/directional/south{ - c_tag = "Aft Hallway Engineering Doors"; - name = "aft camera" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) -"yil" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/structure/filingcabinet/employment, -/obj/item/radio/intercom/directional/south, -/obj/machinery/button/door/directional/east{ - id = "lawyer_shutters"; - name = "Law Office Shutters Toggle"; - req_access = list("lawyer") - }, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/dark, -/area/station/service/lawoffice) "yip" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -76781,12 +77109,19 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"yit" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, +"yiq" = ( +/obj/item/radio/intercom/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) +/obj/effect/turf_decal/bot, +/obj/machinery/holopad, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/duct, +/obj/machinery/light/dim/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/station/security/execution/transfer) "yiF" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -76820,6 +77155,13 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"yja" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/station/security/brig) "yji" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/old, @@ -76850,6 +77192,18 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/plating, /area/station/security/prison) +"yjQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/hallway) "yjV" = ( /obj/machinery/computer/crew{ dir = 8 @@ -76887,6 +77241,17 @@ }, /turf/open/floor/iron/dark, /area/station/security/warden) +"yjX" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/engineering/atmos) "ykb" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -76911,6 +77276,26 @@ /obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron/showroomfloor, /area/station/science/xenobiology) +"ykl" = ( +/obj/structure/closet/wardrobe/miner, +/obj/effect/turf_decal/delivery, +/obj/item/clothing/suit/hooded/wintercoat/miner, +/obj/item/clothing/suit/hooded/wintercoat/miner, +/obj/item/clothing/suit/hooded/wintercoat/miner, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/miningdock) "ykB" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/dirt, @@ -76942,14 +77327,6 @@ /obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/iron/dark, /area/station/hallway/primary/starboard) -"ykR" = ( -/obj/structure/chair, -/obj/effect/turf_decal/bot, -/obj/machinery/firealarm/directional/north, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/exit/departure_lounge) "yld" = ( /obj/effect/landmark/event_spawn, /obj/effect/turf_decal/tile/red{ @@ -76965,12 +77342,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/security/brig) -"ylD" = ( -/obj/machinery/portable_atmospherics/canister, -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/obj/effect/turf_decal/box, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos) "ylM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -76990,6 +77361,14 @@ "yma" = ( /turf/closed/wall/r_wall, /area/station/maintenance/disposal/incinerator) +"ymj" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/tank_holder/extinguisher, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos) (1,1,1) = {" aaa @@ -82032,7 +82411,7 @@ huo pbx gSc isS -oxG +xCj sAv aeU aeU @@ -82546,7 +82925,7 @@ dWG cuS kvU mTM -tSE +mEz sAv aUz aeU @@ -84098,7 +84477,7 @@ aeU aeU myp cqQ -wEW +cgg haP xhI aJM @@ -84344,7 +84723,7 @@ eJN nKO sPK sAv -pim +hQv pTC xlA mWy @@ -84354,7 +84733,7 @@ myp jYh jYh myp -cgr +nRh tAM tYe ucS @@ -85126,10 +85505,10 @@ coy aeU myp agx -jon -wTo -cqD -jjF +kKc +frV +lSW +uiq myp aeu aeu @@ -85385,7 +85764,7 @@ myp jYh myp jFC -ndC +esl sYe myp aeU @@ -85629,7 +86008,7 @@ hMC hMC sPK twX -nFl +bEf kYP pKm uzK @@ -85642,8 +86021,8 @@ aeU aeU jYh tdY -lbE -dFa +sOz +xkS jYh aeU aeU @@ -85793,7 +86172,7 @@ aeU aeu sxi sxi -tVL +gRQ sxi tfI aeu @@ -85886,7 +86265,7 @@ sPK sPK sPK twX -erk +krT lPU tns twX @@ -86306,9 +86685,9 @@ aeU aeu aeu tfI -nrm +wIx iJV -jhY +pXD tfI sxi sxi @@ -86569,7 +86948,7 @@ sxi fXL rTk pah -ajR +uxO jBl rOz hMN @@ -86831,7 +87210,7 @@ dCd hMN rQG lJR -dLD +bGN jgN rOz xdc @@ -86919,10 +87298,10 @@ oCE dWG dWG saW -oXh -dFC -rjk -uWP +xXe +rQT +lwX +nQn gOG tPH aeU @@ -87077,9 +87456,9 @@ aeU aeu aeu sxi -kAr +fjZ itF -nDk +xiZ qEV fBt wFu @@ -87092,7 +87471,7 @@ mpF kQT oTd qRT -qRT +qby biq crI vLI @@ -87339,17 +87718,17 @@ kmt iKT svZ rTk -gMB +pCE ciR -iUc +bVl hMN aoX alr wcs uHL hMN -iLd -fXP +aHy +aMz cTz weG wPq @@ -87941,7 +88320,7 @@ wDz wDz wDz wDz -nct +hGM dWG fQO dWG @@ -88101,11 +88480,11 @@ aeu aeu aeu hmh -qel +rse shE hJC dJi -gIv +cHd vmZ vmZ bnn @@ -88196,7 +88575,7 @@ pqD kNP iza kFB -bcm +lgI wDz mMy iOR @@ -88363,17 +88742,17 @@ aXf iqQ snn wXa -dKg +anT eXY gnh joC ehp -sZX +ipA tfW iMx gnh slr -wPS +dKF cop tiv rfg @@ -88451,11 +88830,11 @@ pqD szX iza kWA -wTa +uDp nCL jqI wDz -wdC +alA iOR kPd tpd @@ -88712,12 +89091,12 @@ kAb wHA kWA wDz -wdC +alA iOR kPd hCK mMy -eUU +qOV rdo ygt ygt @@ -88872,7 +89251,7 @@ aeu aeu aeu hmh -brG +xsG kUh jAy dJi @@ -88967,9 +89346,9 @@ pqD pqD gzA rrc -oLq +mAn wDz -wdC +alA ugy kPd mvF @@ -89129,7 +89508,7 @@ aeu aeu aeu ixB -gve +qOU mLd cdi dJi @@ -89145,10 +89524,10 @@ cHg was nKj vrs -iol +klM tiv -nme -fXK +jwk +oLn xuR vSG kpS @@ -89227,12 +89606,12 @@ qiM pqD wDz mMy -avl -bIx +lEK +sKO mvF vAa qxD -woL +dTF cXv nbO mes @@ -89396,7 +89775,7 @@ vmZ ewC qER xmn -buf +aMY ggj aSu kVd @@ -89483,16 +89862,16 @@ pqD yji wlP wDz -yhz +pct qhT -vNU +qUN mvF agy iJy awv fov -gRw -bHT +oMS +iCZ rxW tPH aeU @@ -89646,7 +90025,7 @@ ixB ixB snn snn -gIv +cHd wXa prn vmZ @@ -89740,7 +90119,7 @@ qWB wRQ fiH wDz -lUG +xum iOR iOR rUh @@ -89968,7 +90347,7 @@ hBJ fvh lXK gfi -tnP +fpN wHF maA mtV @@ -90160,7 +90539,7 @@ aeu rNx sjG tiv -vak +kVb wXa nKj vmZ @@ -90173,9 +90552,9 @@ upK ocE vrs nKj -jIi +jmy tiv -kVJ +dwj piu piu vSG @@ -90239,12 +90618,12 @@ oVz dBg oVz vjh -tnl +gYP qSJ qSJ uOo qSJ -mSe +xLx iza juF iza @@ -90422,11 +90801,11 @@ uEC hUM fFa frh -nPx -iCf -tDT -vFp -xZb +uBz +hIz +gcc +wlH +gjB ejt pGD pMe @@ -90496,22 +90875,22 @@ vBi vjh vBi vmu -kuE +iwV kSR thW cKR hyQ -hgS +toD dfS wyY nhZ wgK nCL -gTg -xBF -gzZ +vSB +aUG +mjB nCL -efO +nqt wDz jQn cyT @@ -90679,14 +91058,14 @@ tiv vUi jpa cne -mcu +lDN mlD lCC mlD -bNg +iEF gJc sQq -gMh +lJI tiv sQJ dvs @@ -90929,24 +91308,24 @@ aeu aeu lUq bnB -iYD +skh rnj ecE -tvD +lIy wXa vmZ tqB -wlu +nya dRh xlF vZn -fCf +goO rGK vrs wXa -iXh +mih tiv -wrA +hCv smI piu vSG @@ -91187,19 +91566,19 @@ aeu lUq uDe mjn -bGK +cYB pOV iLD ocE -dKg +anT wXv -qBB +ioC lCC hZd rsX -yhD +rvK iYr -oeL +ltf lQw iLD mHf @@ -91245,7 +91624,7 @@ ycx sfw yhU mtV -hEq +apH rZW rZW ikO @@ -91255,7 +91634,7 @@ nJF rZW nJF wmq -iIS +oTu mtV vjh sXT @@ -91284,7 +91663,7 @@ cnQ sav mMy jri -fAW +dVU bIq wjK dbu @@ -91443,22 +91822,22 @@ aeU bVv bbO dIR -cRV -jRG +leJ +dHE pOV -qei +fTV hUM fFa jdL -mcu +lDN mlD -mdy +vuA vZn -nEB +eqt tUO pGD hUM -rbQ +alJ tiv piu qDG @@ -91534,7 +91913,7 @@ bJv bJv pqD srR -kMR +jDJ iza aeu acW @@ -91546,8 +91925,8 @@ kra iln wAt tlV -hyd -pTd +oYg +esC aOf kiO acm @@ -91714,10 +92093,10 @@ siH ing eGC xRM -vJO +qQB lOG cRv -uOp +uYt piu piu vSG @@ -91759,7 +92138,7 @@ vjh pVz gLH mtV -xiP +uYW rZW nJF cSJ @@ -91769,7 +92148,7 @@ rZW rZW nJF rZW -eqi +wfP mtV vjh dhe @@ -91802,7 +92181,7 @@ cTY oig wXt wAt -rKZ +rak rkV aLg aOf @@ -91815,7 +92194,7 @@ aeU aeu aeu krY -wvw +oQJ uUS aeu aeu @@ -91957,12 +92336,12 @@ aeU aeU qOd dVk -btQ +uzi ecE nUf wXa wXa -sjS +gnj wXa siH bzu @@ -91972,7 +92351,7 @@ siH piu nbZ piu -uRK +pbP sVD cvi mYv @@ -92056,7 +92435,7 @@ cnQ mxf jri hqP -uId +yiq xrS wAt vPG @@ -92218,16 +92597,16 @@ aBB pOV qeO qeO -xvg -dKg -sjS +oTC +anT +gnj kXV -iVK -sBd -pzW +iDo +wAu +rtv dIy jlY -gHg +tfe ggb ikg hda @@ -92260,7 +92639,7 @@ aeu aeu aeU fzd -tWx +mGO fzd aeu aeu @@ -92579,11 +92958,11 @@ vvn tSN aiL bvR -ndq +bOO qRD fhL kYI -kwt +rWh nMD eGW mui @@ -92731,19 +93110,19 @@ lUq bbO bbO rNx -gIv -jEG +cHd +emC bPZ -fMA +rtR ing -pIm +nyE tOH -qYe +tDO ebU -wuG +ivi yhr -kbR -pJn +sMG +rns cGP vSG vSG @@ -92788,7 +93167,7 @@ hBm kFw ukc esG -vGd +xmZ nrS nsl mxh @@ -92825,7 +93204,7 @@ xad cnQ aeu mxf -lax +llP sqs mZF lGV @@ -92833,10 +93212,10 @@ jtl bUl pZM qnc -hXg +ljH mNm wNf -ndq +bOO olQ tSP cIg @@ -93045,7 +93424,7 @@ pmA tYd kCm eWP -pbt +erx fKA tdd xlr @@ -93086,8 +93465,8 @@ ceh hHm aor akV -sog -fWg +lfN +lFL irO aiL aiL @@ -93246,7 +93625,7 @@ aeu aeu aeu gnh -dgp +ewH pXi sYM rNx @@ -93305,7 +93684,7 @@ eWP sbZ qxQ pDT -mwU +hxE hBJ dBg qXJ @@ -93580,12 +93959,12 @@ iCb rGx vjh rdM -gpX +pqM trf oLa xnJ trf -ggD +lQx tsn pqD nWR @@ -93777,7 +94156,7 @@ gNI gNI gNI gNI -oFk +dUr aaa acm aaa @@ -93817,7 +94196,7 @@ pmq mBX qlg uvT -cSj +cJZ gey jEQ neJ @@ -93837,12 +94216,12 @@ dLL nVj vjh tSk -idf +raX uFp qSC lch fOv -fpn +xLg djZ pqD iza @@ -94331,7 +94710,7 @@ jiN aHQ esG cgH -fnf +upO eUs vRU vRN @@ -94375,7 +94754,7 @@ iaY nhz qRS gPA -pqU +kJK hkA tzY vpV @@ -94617,7 +94996,7 @@ sOy pjC pqD kzl -tVD +czf iTq kTK wDz @@ -94852,7 +95231,7 @@ kSx ruU pyr tAx -ipn +oqC pyr vjh wFG @@ -94886,7 +95265,7 @@ pon vMb rbz iFU -tfS +mdL nAa ijl gWb @@ -94897,7 +95276,7 @@ sxn dUE hwJ rqs -lwj +mGw oKW vWY frP @@ -95067,7 +95446,7 @@ aaa aaa aaa aaa -jak +hUq acm aaa aaa @@ -95090,10 +95469,10 @@ ejc jcj qVD eUN -kHN +gaN noO xfZ -lWV +oWp xxk buJ kAR @@ -95121,17 +95500,17 @@ nEf iCb oqA vjh -rQO -loJ +lqe +bip rfX jXX mzB ova -uYZ +eHe weW iza ckJ -ujt +pVR iza pqD hCr @@ -95148,7 +95527,7 @@ gVi sWV kcW kBF -pNe +fLf vYs dYB dUE @@ -95360,9 +95739,9 @@ lUM qGK tOR pXf -dSz +con rHc -lmN +dLP sJM sJM rSi @@ -95370,7 +95749,7 @@ sJM sJM vXf pwF -kFY +mTm vjh mtV mtV @@ -95385,7 +95764,7 @@ mle hQg hPq dny -mHh +hwf pqD fNy bMY @@ -95582,7 +95961,7 @@ aaa aaa aaa gNE -thg +bPT iAo anH aeu @@ -95611,7 +95990,7 @@ xmI xxk wSU hEI -qAr +kzC wKa tZc qGK @@ -95623,18 +96002,18 @@ qyo gbf nBZ gbd -eyJ +whX sJM -oRX +sRH cdD rnJ xLd -lEz +lBE nWW -wAb +bJo nKC nWW -wAb +bJo xcR xDc xDc @@ -95670,7 +96049,7 @@ gFD oKW mlv ycp -fPk +qPJ pya lsS afL @@ -95839,7 +96218,7 @@ aaa aaa aaa nqX -mBp +wCJ aaa aeu aeu @@ -95857,9 +96236,9 @@ cIV nPS brA ixi -hNG +wzl pVP -jnl +gBj eUN vsJ xFt @@ -95886,7 +96265,7 @@ qTY pwF kJH srx -lEz +lBE mtr ecF nKC @@ -96096,7 +96475,7 @@ aaa aaa aaa nqX -mBp +wCJ aaa aeu aeu @@ -96121,9 +96500,9 @@ psv hOY pqS kUp -gBk +uPo ccY -diP +xzW hsW imP edU @@ -96131,18 +96510,18 @@ ccY uMz nKV nKV -kqL +ird wue vFv gbf wVD wGE -xBb +qHI rSi rzB jMa suQ -bTF +dAP fYw eoG cOY @@ -96154,7 +96533,7 @@ uNO uNO bDV sDD -lXj +hzP uNO osy pqD @@ -96166,7 +96545,7 @@ cXh skC cXh cXh -lCU +yja uBM jgv rjg @@ -96353,7 +96732,7 @@ aaa aaa aaa nqX -mBp +wCJ aaa aeu aeu @@ -96380,32 +96759,32 @@ lCa qez eUN ccY -aFh +pok huR huR bXe gZu jhv -xiT -eAQ -jXU -lXT +bsW +mhh +vOo +uAd wCR sJM ybO oKJ -czR +hDU sJM hpv htS rKk hpv fYw -dcA +eSB jOY hYD vFc -lbz +vLE nsA lOZ iun @@ -96427,7 +96806,7 @@ crk jmw kxG rEi -hFf +cQg fPQ kTe ijl @@ -96440,7 +96819,7 @@ dKK xpa oKW afL -cuB +kOj crh vwH ijd @@ -96610,7 +96989,7 @@ aaa aaa aaa nqX -mBp +wCJ aaa aeu aeu @@ -96628,7 +97007,7 @@ cIV ike rKa xOg -rJt +nQP ocS hms rxl @@ -96643,11 +97022,11 @@ kaT ekB ayC jhv -vuD -ixE -xvc -uCJ -oSd +svm +rCB +dzK +rBw +pgn sJM rSi cuU @@ -96662,7 +97041,7 @@ dEF dEF dEF hQI -oPS +nAq dEF osy uNO @@ -96867,7 +97246,7 @@ aaa aaa aaa gNE -thg +bPT iAo anH aeu @@ -96885,8 +97264,8 @@ cIV dGo hgW cIU -lvg -qnA +set +hTE uMG fWK fWL @@ -96900,11 +97279,11 @@ gPS buq gZu mEt -dUm -mGi -uqS -eOi -fTa +pkf +bby +sVM +xfh +ncU lHX nBD qYv @@ -96916,10 +97295,10 @@ omi eBH tXm vvf -pBV +utD jdR hQI -bTC +iwx dEF tYi nXC @@ -96941,7 +97320,7 @@ xex mfd ciY tyk -hXa +hCb nvK yjW vMg @@ -97124,7 +97503,7 @@ aaa aaa aaa nqX -mBp +wCJ aaa aeu aeu @@ -97145,8 +97524,8 @@ qLO qEs ocS uMG -iQD -hHf +sek +nQy pdI cUk fcv @@ -97158,9 +97537,9 @@ wJy lQK dea tpy -ujj -jCF -wxr +ssg +ngB +bBn qrS cdd xev @@ -97170,19 +97549,19 @@ blU gPa eHO rvR -xRc +jIO dEF -lsk +uKk hGm dEF iju unz hkp -sCx +qnk uQE qHu mqU -xae +fva rhN esq pqD @@ -97198,12 +97577,12 @@ wDs lmF pAQ hCd -jdd +mPm jck -nXg +mXS sCJ ocz -fhc +nMT lYX ijl abj @@ -97212,7 +97591,7 @@ nKr lvP cFO lZr -ikI +bXB sYu mIR kom @@ -97381,7 +97760,7 @@ aaa aaa aaa nqX -xzU +gqL aaa aeu aeu @@ -97402,10 +97781,10 @@ lCV mCk ocS hms -sRO -klw -woT -oYE +srQ +jNx +gGK +tGM kkV ugq iCV @@ -97424,10 +97803,10 @@ owm jrs cMT fVF -oAF -kGm +jgh +wxZ sRZ -rzZ +wln dEF dEF iYf @@ -97456,7 +97835,7 @@ jmw vMg tVS esK -xYC +pOC eqK vMg jJs @@ -97638,7 +98017,7 @@ aaa aaa aaa nqX -xzU +gqL aaa aeu aeu @@ -97656,7 +98035,7 @@ cIV fSE sSP xOg -ugP +kTr bsy dkh dkh @@ -97665,10 +98044,10 @@ dkh jUU dkh ccY -uLb +mJM uko gsr -vij +nbV qbk mEt rZE @@ -97712,24 +98091,24 @@ omQ jmw fEe clN -gfy +rXY oFo hJp lGs xex -nGx -oXt +wsA +qWt oKW aHD lzg icQ aka -fLE +noz azo alv cez sVP -rTL +uJe anG aeu aeu @@ -97895,7 +98274,7 @@ aaa aaa aaa nqX -xzU +gqL aaa aeu aeu @@ -97918,7 +98297,7 @@ ocS qLB phH vJg -qvs +tqv pri eMB eer @@ -97932,24 +98311,24 @@ rUP sSJ lfQ mHm -nMX +rYg rFt iIF xJN fPc -lwz +oVO pIT ofg rot -kzZ +oXn nvH -hLs +pMI gjx jHS pOb veV hkp -faC +iuN rNo vPX dQC @@ -97969,7 +98348,7 @@ yld jmw vMg cSX -nzR +gWy lAk eKT abB @@ -97986,7 +98365,7 @@ cHL cbp alQ amr -gSm +qjk aka aeu aeu @@ -98152,7 +98531,7 @@ aaa aaa aaa gNE -thg +bPT iAo anH aeu @@ -98177,19 +98556,19 @@ xjI yhI eby rhs -olF +tAp eer bKU uUm oWQ -wjc +dOY aAu cTI gAO rFt lJL ozt -cxa +djN rFt itr yaZ @@ -98197,8 +98576,8 @@ tVu aTe pcG mnG -qfv -aqu +slw +bCL llY fGQ qZS @@ -98206,11 +98585,11 @@ egU fpx obU dEF -gCq +mga iYa bCO uHv -qzs +oTN rhN hfF vea @@ -98256,7 +98635,7 @@ aaa aaa aaa aaa -qJs +aaa aaa aaa aaa @@ -98409,7 +98788,7 @@ aaa aaa aaa nqX -xzU +gqL aaa aaa anH @@ -98427,8 +98806,8 @@ qlC pWo efG qOz -pNh -got +eJn +vVu jUU jKQ gGR @@ -98455,13 +98834,13 @@ jMU jJd ofg iYA -nBl +nQr llY -vPo -iWV -hct +fcE +iqg +iYL jVf -xrx +vDi hkp fzk nKh @@ -98513,7 +98892,6 @@ aaa aaa aaa aaa -vku aaa aaa aaa @@ -98524,7 +98902,8 @@ aaa aaa aaa aaa -tgU +aaa +aaa aaa aaa aaa @@ -98679,11 +99058,11 @@ cmU cmU cmU cmU -uni -hKW +nTX +ock dDO efG -wux +tvu hWD tmd dkh @@ -98691,10 +99070,10 @@ uRf vxZ tLh lrc -iPG +gjM eer eer -ych +fzQ pbk qpP wzW @@ -98709,7 +99088,7 @@ mJk vbT etY nri -ooo +ekA ofg xvW chM @@ -98745,14 +99124,14 @@ bJm qbY qbv mdp -qtS +lkS oNH kJq jUJ rFh iYq aka -cYK +mtn cup pDd cxP @@ -98770,19 +99149,19 @@ aaa aaa aaa aaa -aeu -aeu aaa aaa aaa -acm -qVM aaa aaa aaa -aeU -aeU -aeU +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -98925,19 +99304,19 @@ aaa nqX aaa rSk -txd +geW vEC -txd -txd -txd -txd +geW +geW +geW +geW eFE -vPc -vPc -vPc +rKy +rKy +rKy rvD -cQN -dTG +wzC +lnx ooR eTt hxf @@ -98971,7 +99350,7 @@ eDr pBd jHo rBS -ewZ +aEV oJH xvW gbh @@ -98996,7 +99375,7 @@ icp ydh uXL aPF -gyR +oQw nzW wPK ylu @@ -99009,12 +99388,12 @@ yaE jtL sQI iPa -fJy +phJ oMr cdF ceE wPO -bgj +iDQ aka aeu aeu @@ -99026,21 +99405,21 @@ aaa aaa aaa aaa -aeu -aeu -aeu -vkY -acm -nTo -qVM -cok -aUz -aeu -aeu -aeu -aeU -aeU -aeU +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -99193,30 +99572,30 @@ nJV ccW ccW ccW -nnd -lvZ +tRe +wPI fSS mBW uOB uOB -dqJ +tJN dkh -sNc -xjS -fjG +pjJ +ikP +qbK phL rvW -gcV +eRU dkh pFY ciA krM qaR -pSV +oZo fgy qht msL -qDC +uBf dQG phY uik @@ -99225,7 +99604,7 @@ erH gaE uNK qCj -iqC +iHU xoK evD gZI @@ -99234,17 +99613,17 @@ sij als vnL rhN -cXz +gWP nKh nkd tDs -hRe +cQq rhN czz amn pqD ckJ -aKU +wBN wDz kTK wDz @@ -99282,23 +99661,23 @@ aaa aaa aaa aaa -aeu -aeu -aeu -aeu -aUz -acm -nTo -mZT -aUz -aeU -aeu -aeu -aeu -aeU -aeU -aeU -aeu +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -99463,10 +99842,10 @@ dkh jUU dJU xef -mIi +eCW dkh fyw -vOJ +jTK xxz eer fXm @@ -99478,20 +99857,20 @@ jJW vss aeH xzS -nfF +jmt fKf fyZ qNL xvW -dlO +xqc ear qip -eHw +cIS xvW tqG cZT rhN -nSa +fPt nKh iku ikE @@ -99502,7 +99881,7 @@ rhN pqD llI ncj -xcu +itj fGz dPR wDz @@ -99523,8 +99902,8 @@ bHv qVs nrF wSq -nce -onu +ubD +oyK sLf kbx btg @@ -99540,22 +99919,22 @@ aaa aaa aaa aaa -aeu -kCk -kCk -oOW -gJK -oOW -gJK -oOW -mLN -mLN -aeu -aeu -aeu -aeU -aeu -aeu +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -99711,8 +100090,8 @@ aeu efG xLX efG -jzx -bBb +cKW +eFy fVJ uGc bMe @@ -99726,12 +100105,12 @@ uVJ rKT aPT aAu -hvL +aFD gOh nes tjv mYV -cGd +hGh fdY ofg aDL @@ -99772,9 +100151,9 @@ jgy fGC iVV mRp -pgq -lec -xii +nHI +orG +sNt ksM rFK qVs @@ -99797,24 +100176,24 @@ aaa aaa aaa aaa -mLN -kCk -sDv -sDv -mrz -fCe -gin -qjv -aGd -kCk -kCk -aeu -aeu -aeU -aeU -aeu -icx -qJs +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -99971,7 +100350,7 @@ qlC tbn eFR aWI -fZj +qaS eFR nCA cXZ @@ -100044,7 +100423,7 @@ fQM csM rhd hmO -rnt +wHY kem acm qJs @@ -100053,24 +100432,24 @@ aaa aaa aaa aaa -qJs -wWW -dMR -sZV -xfV -sZV -sZV -nBd -vYm -sZV -gyV -wWW -aeu -aeU -aeU -kmK -aeu -aeu +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -100226,19 +100605,19 @@ efG ofr efG xIS -tRk -syU -xhT -tuV +tDM +vey +jws +bcP nax cXZ -jHW +wSb idh sby oAN gQd gQd -lBu +otT nki uWO wWp @@ -100260,7 +100639,7 @@ qox sJY hdj qCX -hNh +dQm pZO eQE otS @@ -100291,42 +100670,42 @@ sFF war rhd lbD -leR +xfn kbV vvB wHQ fDi bpg -hGG +bFA oZE oZE -tKh -fSm -rnt -rnt +tBB +jWu +wHY +wHY qkf aaa aaa aaa aaa aaa -acm -mLN -efS -vis -arU -uVU -nec -moK -vYx -sVS -eJH -mLN -aeu -aeu -aeU -aeU -aeu +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -100483,12 +100862,12 @@ loI uDt qlC fSY -oSq -vun -grZ -xCE +aGU +xlV +fRl +wZS oLs -qzq +gmU hHL dUQ aSX @@ -100501,7 +100880,7 @@ uQI bHB gBJ jLK -fUj +qAB vpY lrI ryW @@ -100558,7 +100937,7 @@ rhd oZE awi sMe -eOe +kPb fJs lIr rRb @@ -100567,23 +100946,23 @@ aaa aaa aaa aaa -acm -oOW -phF -gyV -dfk -eOt -eAu -pTL -qKR -gyV -pBh -oOW -aeU -aeU -aeU -aeU -aeU +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -100740,18 +101119,18 @@ efG uDt qlC sLD -bBb +eFy eFR -qqS -woi -tIJ -aaV +sop +eCR +tgs +mkY nvE -lSd +eMu mog mog mog -lSd +eMu bSM rER vzZ @@ -100772,7 +101151,7 @@ rky gtq oZX igR -waw +jIj pJz fvX tFb @@ -100809,38 +101188,38 @@ ttn psP igC hmO -rms +jdS iYS -rnt +wHY fTQ bum hKc -faY -rnt -rnt -rnt +kcv +wHY +wHY +wHY +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa aaa aaa -acm -mLN -tAX -gyV -mQB -vHZ -cPw -bwN -qDE -oNr -gyV -mLN -aeu -aeu -hzC -aeU -aeU aaa aaa aaa @@ -100999,8 +101378,8 @@ qlC qlC uqN vTD -wBb -sQd +ble +yay kMs nkQ huc @@ -101066,13 +101445,13 @@ nVK fWX boE kgE -mOC -lwM +lLM +ahl gpy -ydI -oYp -dUg -aCN +nod +aWi +bfC +fUH hmO acm qJs @@ -101081,22 +101460,22 @@ aaa aaa aaa aaa -qJs -wWW -tth -oNr -eOt -gbY -mQW -mdX -oNr -pBh -rAA -mLN -mLN -aeu -aeu -aeU +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -101260,7 +101639,7 @@ bJM qlC efG qlC -wOl +akm pkE nEV pkE @@ -101277,10 +101656,10 @@ fIx raY jzh wxj -rjT +aMT diZ bDF -aUE +cFk plX fFW qhC @@ -101319,44 +101698,44 @@ gXJ vgU coz gVv -vgZ +qSS wmr lyd tjE gmG gmG gmG -bya +pKe mbP sgA -puL -rnt -rnt -rnt +jgc +wHY +wHY +wHY +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa aaa aaa -acm -mLN -phF -arU -xGy -eEY -ewt -rNk -gyV -eOt -eOt -eOt -mLN -aeu -aeu -aeu -cry aaa -aaQ aaa aaa aaa @@ -101575,18 +101954,18 @@ sMa nVK nXW ekM -dkE -xKc +mSZ +gMi gmG gmG pDM -boj -fiC -wxX -qrK -kba +fhR +bfy +akS +rOK +xPI sgA -xOl +bna gOq lIr fdC @@ -101595,27 +101974,27 @@ aaa aaa aaa aaa -acm -oOW -lGa -arU -arU -gyV -gyV -jvQ -pBh -arU -gyV -wso -mLN -aeu -yma -yma -sYw -yma -nie -acm -qJs +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -101791,10 +102170,10 @@ wqF usV aPR gnN -rIt +uzA fST hee -iZN +eUg plX ttt kQH @@ -101832,45 +102211,45 @@ ayY nVK wWm kIz -oOo -fmK -bLu -pXR -nFw -pGc -ffT +fYv +lRj +vWf +oGw +czu +wZI +anq tjE tOa xPc -tHf -cWp -rnt -rnt +upq +oSa +wHY +wHY qkf aaa aaa aaa aaa aaa -acm -kCk -pLC -arU -arU -arU -jvQ -gyV -gyV -qsv -jvQ -vHP -gJK -pNg -iSQ -xbk -vKm -vKm -wPy +aaa +aaa +aaa +aaa +aaa +aaa +aeU +aeu +aeu +aeu +aeu +aeU +aeU +aeU +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -102070,8 +102449,8 @@ gFO cvm aeG xCq -sip -oQh +gEx +pTN rFx qhf hKB @@ -102109,25 +102488,25 @@ aaa aaa aaa aaa -qJs -wWW -nhc -vuZ -dqF -gyV -gyV -gyV -gyV -vac -jvQ -tPz -dZS -vKm -uAt -vKm -vKm -vKm -wPy +aaa +aaa +aaa +aaa +aeU +aeU +aeu +aeu +aeu +cke +aeu +aeu +aeu +aeu +aeu +aaa +aaa +aaa +aaa aaa aaa aaa @@ -102300,14 +102679,14 @@ nIx maW sLb lbO -rVu +bCa oKV avy iFI -lzA +kJM lbO mHe -gsR +iWf dcr jCm cYZ @@ -102320,11 +102699,11 @@ oUc qHV xHn jCm -gID +fjk spE -nxX +hix ojs -yil +pqV rhT jQE uVx @@ -102349,42 +102728,42 @@ gmG gmG pDM gmG -rTi -rTi -rTi -gva -rTi -rTi -rTi -rTi -rTi -gva -gva -rTi -rTi +alO +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +wXg +acm +acm +acm +pUw +acm +acm +acm +pUw +acm +acm +acm +wXg +cko +aeu +aeu +aeu +aeu +aeu aaa aaa aaa aaa -kCk -mLN -jFZ -pBh -hjR -hjR -hjR -mWM -mWM -rqV -eOt -tBR -gJK -pNg -iSQ -qyR -vKm -vKm -wPy aaa aaa aaa @@ -102604,46 +102983,46 @@ qvJ njT gmG xUQ -nPT +kZS pDM +cko rTi -ddb -wRM -wRM rTi -buk -jqW -jqW rTi -qmZ -iMX -iMX +gva rTi -acm -acm -acm -acm -kCk -eLf -krr -ntH -gcy -cqA -wGG -dIg -gab -gIX -pPC -qHy -kCk -acm -yma -yma -sYw -yma -nie -acm -qJs +rTi +gva +rTi +rTi +gva +gva +rTi +rTi +rTi +rTi +gva +rTi +rTi +rTi +gva +rTi +gva +rTi +rTi +rTi +cko +aeU +aeu +aeu +aeu +aeu +aeu +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -102852,54 +103231,54 @@ gHD jqb vCG rbH -wxH +ppo gdP uNI bnY aIl -jVW +hPy lYT gmG -gmG +tuR pRP -gmG +itN +alO gva +jwV +uTC wRM -qXA -gos rTi jqW -jeS -dmC -rTi +jIr +jqW +gva +iMX +wvT iMX -uWz -gTD rTi -acm -fsu -acK -kCk -kCk -xBT -mUV -dXh -qTO -anw -ndj -ouE -tnC -jCP -ygO -xWh -lqC -hEU -aaa +xha +xha +xha +rTi +khu +khu +khu +rTi +lNn +lNn +lNn +gva +alO +aeU +aeu +aeu +aeu +aeu +aeu +aeu aaa aaa aaa -acm -aaa aaa aaa aaa @@ -103061,9 +103440,9 @@ qfu qlC qlC hTK -jig -wbF -uOg +rKc +lOD +lgz waI rEV eBx @@ -103117,45 +103496,45 @@ ncB sHD rXp gmG -pRP +gmG nIh pDM -rTi -oeS -dyD -rbn +qmz gva -dtg -ptu -ulg +wRM +qXA +gos rTi -luP -hwY -pfc +jqW +jeS +dmC +rTi +iMX +uWz +gTD +rTi +xha +kox +mCT +rTi +khu +trt +wFB +rTi +lNn +uNe +qpI gva -acm -osW -cWN -mLN -nqn -asc -mcs -eNV -fmA -fEb -teg -brE -wzr -lNp -oix -sAV -kCk -acm -acm -aeo -aeo -acm -acm +egP +aeU +aUz +aeu +aeu +aeu +aeu +aeu +aaa +aaa aaa aaa aaa @@ -103328,10 +103707,10 @@ wkC veW sLb lxP -gxS -qUm +sPt +ebr fcX -rGr +hLI lxP pwx ebK @@ -103347,7 +103726,7 @@ sbX qwx wGp jCm -poC +lNL mNT uXe xMC @@ -103371,47 +103750,47 @@ juj doj ekM vGJ -tdv -rRA -eeq -fhw +nVK +jRA +cdP +dyP sDe -gmG +itN +lcP +rTi +oeS +dyD +rbn gva -fLZ -xLM -wGd +dtg +ptu +ulg rTi -fLZ -xLM -awG +luP +hwY +pfc +gva +sJK +fDo +cUC +gva +bkI +vns +xyH rTi -uhp -xLM -uhp +whD +dKB +pud rTi -acm -osW -mkj -oOW -jdi -aRy -bfA -fdp -mLN -mLN -uYx -gxi -qmR -tAN -upW -lts -yma -aaa -acm -aaa -aaa -acm +mCA +aeU +aeu +aeu +aeu +aeu +aeu +aeu +aeu aaa aaa aaa @@ -103631,44 +104010,44 @@ rvj nsQ gDJ gmG -fgb +fRa deI pDM -sSZ -cVb -vdS -rrS -kVN -oDt -kVN -rrS -kVN -sRi -kVN -oaK -oLp -tvH -osW -uvO -bjJ -gwr -vJM -wJz -wXP -xXQ -lvw -uYx -xWT -yma -yma -kPK -ijr -crz -ehx -acm -acm -acm -cow +pbN +gva +fLZ +xLM +wGd +rTi +fLZ +xLM +awG +rTi +uhp +xLM +uhp +rTi +fLZ +xLM +awG +rTi +kuV +xLM +awG +rTi +fLZ +xLM +awG +gva +mCA +aeu +aeu +aeu +aeu +aeu +aeu +aeu +aeU aaa aaa aaa @@ -103842,7 +104221,7 @@ nbU cQV lnD lxP -lVx +ekC scT jsc ePf @@ -103859,7 +104238,7 @@ vcL cXT niy nOp -qXw +gvt vne jPB vCO @@ -103885,47 +104264,47 @@ pNV eAa ekM hBx -jhg +kxg xXz gmG -kNz +vTI gmG mjh -jwV -esZ -vId -eTh -xAI -mSf -msS -aYu -osW -eAs -oup -hSv -wRU -wRU -acF -aWF -kCk -ioW -cRQ -bfA -drk -mLN -pBh -xRy -laf -rgl -wRr -nim -dJt -yma -aaa -aaa -cow -aaa -cow +lcP +acm +dsX +acm +lVc +acm +dsX +acm +lVc +acm +mil +acm +mil +qnd +dsX +acm +lVc +glQ +dsX +acm +lVc +glQ +dsX +acm +lVc +qnd +sCm +anH +aeu +aeu +aeu +aeu +aeu +aUz +aeU aaa aaa aaa @@ -104058,7 +104437,7 @@ ceG ceF xbZ twg -iGQ +wdU caN ceG ceF @@ -104089,13 +104468,13 @@ sME dja tPD uxN -vfW -rmt +iex +hyP nSq tPD tPD efG -qoN +mTn pVd gwV okN @@ -104142,47 +104521,47 @@ ekM ekM ekM ayY -ojG +uiM wWm gmG -mRV -rrO +rnd +dyP cfL -ajo -vBl -hmK -mJP -fVl -bAc -kSs -kbw -qoo -sfV -cEu -eQW -jKU -fRC -lqO -kSJ -gVy -mSs -vAG -clL -qOG -mLN -ckg -yma -tur -yma -yma -kix -yma -yma -aaa -aaa -cow -aaa -cow +vId +wRU +esZ +oup +eTh +xAI +mSf +msS +aYu +wRU +eAs +oup +jmh +sno +esZ +oup +pRW +wRU +esZ +oup +pRW +osW +esZ +oup +jpe +osW +gth +osW +anH +aeu +aeu +aeu +aeu +aeU +aeU aaa aaa aaa @@ -104312,7 +104691,7 @@ asZ asZ aAg ceF -gJw +wbR sVj pfM pYO @@ -104334,7 +104713,7 @@ aeS cHu cHu iyr -iID +xyo pnK bbl naY @@ -104349,9 +104728,9 @@ rLy nIq qlk mfD -iTF +qCY pvb -gIe +gfJ wor yip nwE @@ -104360,14 +104739,14 @@ tmV jlw fOd fBF -bOm +dSD ovw kqG eCd hwZ wqd ugG -hob +too rNX eJc sVh @@ -104399,47 +104778,47 @@ knR eYB knR rNg -jhg -rqm +qUx +uri gmG -rtc -uwP +inz +jkI mjh -oPO -cRu -tGj -aZe -nGT -svp -whz -buu -sJI -bSw -kHq -bWx -nGM -ohe -lsf -vQt -mLN -vLU -mlK -eEU -mLN -mLN -acK -yma -eRK -nkg -goi -lfE -uNv -iyd -aaa -aaa -cow -aaa +vbm +dKV +aFA +oXr +wml +gKJ +wiu +cmM +pVb +xcC +rDq +kzO +qkP +gVV +kGL +htM +boW +tFj +fQI +kzO +vRF +wYD +jos +kzO +boW +cem +sOM +oup acm +aeU +aeu +aeu +aeu +aeU +aeU aaa aaa aaa @@ -104574,7 +104953,7 @@ auf xQU nAe fpk -pZF +nni chO iyi ceF @@ -104602,7 +104981,7 @@ aDQ aDQ acW uxN -dVn +ilh skB taM hjE @@ -104648,55 +105027,55 @@ mbp fNe bVR uPM -jVW +hPy iHp vWH -fZk -jhg -jhg -jhg -jhg -jhg -gip +gzf +kxg +kxg +kxg +kxg +kxg +jpD pDM gmG -qDI +qxO cfL -gYq -utk -cLu -vbx -sCY -hFm -rCH -dgE -vum -aAQ -ouX -nDi -fqO -sND -sni -xsn -bjJ -mSm -bCe -gsB -oOW -aaa -acK -yma -eni -kno -yma -oOW -yma -yma -aaa -aaa -cow -aaa -acm +lVH +ixb +cRu +tGj +uMJ +oSn +svp +wpQ +eIS +xsp +bSw +kHq +bBa +mYM +aZb +tSZ +cva +sJI +vxg +fnr +fYV +sJI +fKG +ugX +xND +hKf +coS +osW +quF +rTi +rTi +gva +rTi +rTi +lkg aaa aaa aaa @@ -104817,13 +105196,13 @@ aeu asZ asZ wBs -dfc +fxy qUO alz ceg bGE cdf -eCH +hWK asZ adg azv @@ -104863,7 +105242,7 @@ vKc xRE pDF jQW -xbj +lMk itn cXH gIz @@ -104885,21 +105264,21 @@ wzG xBi luK eCd -fAk +awz aPK lRd woj qmx twV -lON +lTy nby mwy -lln +qcw hxQ lrO cVH pxE -slM +xkc ufE tmZ efe @@ -104914,46 +105293,46 @@ pjZ naK naK vkr -ajH +lXd gmG -nIh -uzQ -rBE -kZz -bBE -srX -kPv -hoI -aSv -wjP -ajv -wSL -ajv -uDQ -pED -cSU -dxq -jkB -kCR -kCk -kCk -kCk -mLN -mLN -aaa -aaa -yma -yma -emU -yma -aaa -acm -aaa -aaa -aaa -acm -acm -cow +ctp +ttv +ftq +vXd +klT +uUP +qTI +aBl +oiL +bJX +rRc +mZN +uTO +pxI +ssD +aAS +buO +hVD +sjY +wPH +mcr +ssD +ssD +hYq +ssD +ssD +sDQ +aic +jpo +ueT +uZZ +bJY +xJm +wae +vIE +hEV +rTi +aeU aaa aaa aaa @@ -105089,7 +105468,7 @@ tqQ adg eXj yiF -gdf +cRb lTc mMj uba @@ -105117,9 +105496,9 @@ bjR aDQ uxN itn -oIf +hGU wFL -ybX +dpb uxN uxN qNr @@ -105144,7 +105523,7 @@ bnl sVh xkj sdd -eMg +fep fqP qPX lLv @@ -105171,46 +105550,46 @@ fqQ woJ fhs gmG -jLM +vjy gmG -rRm -aOg -gry -rMi -bDP -inE -fwf -hNy -uNy -nxY -wuK -aLP -jBf -aBi -mnE -xDo -sBm -wRU -dvq -rTi -gva -rTi -rTi -rTi -aaa -aaa -aaa -aaa -aaa -aaa -aaa -acm -cow -cow -cow +qQC +jdc +cfL +sEO +pDr +fhx +exb +mSC +kIm +eMe +fxu +wrq +xnB +jAV +pbL +mMY +irW +fLh +pNy +lES +gIs +fLh +tNM +fLh +fLh +fLh +dtV +wUi +mqy +hAX +iCQ acm -aaa -cow +xLM +vVP +hEV +hEV +gva +iqC aaa aaa aaa @@ -105342,7 +105721,7 @@ xIq adg byD cgJ -nMh +hTm alV uIs afw @@ -105384,7 +105763,7 @@ hdy vuj maW wjD -oPN +okM ijQ dCM vSi @@ -105392,7 +105771,7 @@ lMf fCs lMf qJf -sZC +tDn wEt add rnG @@ -105428,49 +105807,49 @@ vqM vVT vqM cfL -pRP +eit gmG sfI -biP +gMa cfL cfL jwV -bDQ -ouC -kHQ -wRU +lne +ete wRU -sSh -jBf -jUz -jUz -cre -kja -ndP -uZZ -okk -aGs -hky -gQV -xha -rTi -aaa -aaa -aaa -aaa -aaa -aaa -aaa -acm -aaa +osW +osW +pRd +uxc +iKt +gNy +vyL +wAg +fct +dQa +tiU +cgO +rVg +rHL +czO +fyd +mwW +bzK +uaC +avx +fAA +bKS +nJq +agI +vZy +qaZ +dlS +hEV +gva acm aaa aaa aaa -cow -aaa -aaa -aaa aaa aaa aaa @@ -105591,7 +105970,7 @@ aay iBD cdY jIX -bST +ndN ceq atB xmB @@ -105644,7 +106023,7 @@ tEE mfJ bqd sHm -wgy +jkS ddp vRO rsb @@ -105665,7 +106044,7 @@ kYG oBy ncT cEr -tVo +suh nGJ soC cHI @@ -105676,7 +106055,7 @@ dJg hyl rsw hAJ -vKC +slV vbP rIk mBm @@ -105685,46 +106064,46 @@ vqM auN wvj cfL -pRP -uUO -csk +eit uUO +jRL +bnr ves cfL -okq -sOn -ouC -iwT +cZf +cGZ +ete +jRh wRU -cWb -daL -cec -rON -xzi -uYw -elm -nEg -uOC -acT -xLM -fDS -kox -xha +epJ +doV +jUz +iqr +fLh +fHc +lMp +leU +kFT +rJg +uaC +rVg +qIJ +kpm +vdr +bPD +keQ +uaC +xaX +lou +gvI +wRU +quF rTi -acK -acm -acm -aaa -acm -cow -cow -cow -cow -acm -cow -cow -cow -acm +gva +rTi +rTi +rTi +bbQ aaa aaa aaa @@ -105894,14 +106273,14 @@ dwc qNr qNr jYx -sMk +iNw eLp ukU dYy fzL yej ijQ -rPR +xxY hJQ gpS bMN @@ -105933,55 +106312,55 @@ tmZ aQs rsw hAJ -hEh +wWb rIk seU htZ bQE uUk giA -bZS +iqz mjh xhH -uUO -jSC +oCU +pDM nPT kHr cfL -dgu -dva -anF -iwT -ikt -ylD +gMS +kda +ete +xeR +osW +rkc gYK -vqv +bnf cjv -iLQ -lst -ofe -tzF -blX -eQf -fOH -eSl -mCT -xha -rTi +rgE +nKK +nID +fct +wRU +utm +uaC +rVg +gTP +xCS +wAl +aUi +uZc +cgO +ksE +vIL +jCJ +wRU acm -aaa -cow -aaa -cow -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +vrF +acm +cry +acm +cry +cry aaa aaa aaa @@ -106117,7 +106496,7 @@ myg adg qfq apx -bnS +gtX ill aSa gMy @@ -106181,10 +106560,10 @@ oBe cEr wgS nTr -gKS +dSX qNJ bgl -pCp +kIr rqi kNK hyl @@ -106194,7 +106573,7 @@ xCz rIk rIk viM -owl +wtB dHq nbH nwh @@ -106205,40 +106584,40 @@ sfI vmg gmG mjh -vpd +eUO hkL -kuf -dgg +xJj +vYu wRU -gvu +ckU qgC -aGM +ihH kbZ -iLQ -lVf -mlT -nCK +rgE +daM +xIv +fct +bpk +xfq +uaC +wWo +rqr +vBY +jsa +mLV +bbY +uaC +pKk +rvt +aPB osW -vfO +xLM rTi -cCe rTi gva rTi -vku -acm -gGF -acm -gGF -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +gva +bbQ aaa aaa aaa @@ -106359,13 +106738,13 @@ aeu asZ aAg roV -qrj +hAs lLi abD abM poZ pKt -vVW +sQF asZ alV azv @@ -106400,7 +106779,7 @@ tPD qZx klm pac -stU +ejr bxx oTw oZP @@ -106420,7 +106799,7 @@ clQ piB xSU kju -vbV +eXG mZW kLy dyK @@ -106451,41 +106830,50 @@ gBT hIS rIk iqd -etH +bLo cfL cfL mjh cfL gmG -biP +jwC gmG -pRP -vpX +utX +rEb mjh -hDV +vLS gIE -kuf -ebp -wRU -ylD +xJj +tge +osW +bol gYK -rah +cHe cjv -iLQ -rov -rol -pet -uZZ -gkx -aGs -iug -fMF -mvW -rTi -acm -aaa -cow -aaa +rgE +iDw +nID +fct +lNf +rHZ +uaC +rVg +bzK +czO +oco +lpA +rHL +uaC +dls +fBW +dBG +qGH +xRI +yas +wyS +pcP +hEV +ygo acm aaa aaa @@ -106536,15 +106924,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa "} (116,1,1) = {" aaa @@ -106695,8 +107074,8 @@ wtz gHE bdo wHR -pNG -hyp +ccP +yan pik dfi vfb @@ -106721,38 +107100,38 @@ kuk cfL tbk woc -kuf -riI -vRK -enr +xJj +sIy +wRU +pcW ejX -jBf -cCJ -fdd -ryZ -fHH -kRD -oup -vfO -xLM -vns -trt -mvW -rTi -acK -aaa -cow -gGF -cow -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +jUz +bHh +tzc +hTO +lDU +pXA +cUL +jwq +ihZ +fzA +tuW +tzc +tzc +tuW +tzc +cKr +pKk +mhQ +qUK +afV +dXD +nAl +hEV +hEV +hEV +ygo +iqC aaa aaa aaa @@ -106921,13 +107300,13 @@ rWg rsT orT aIq -dVE +mdJ tGZ wLu mlw eDT vJH -myt +fyQ ijQ iRt hVU @@ -106947,14 +107326,14 @@ izt xjr hGf wZW -fLi +lHK roT dOg eyU ipC -say -qiT -kXA +xlv +nAw +fOz eyU tWL xEV @@ -106972,44 +107351,44 @@ lDB hVj sxl gGx -nIh +fCm pDM -sLl +gmG cfL wRU -tZe -xJs +xBv +yjX osW wRU wRU -wPh -cUM -qSe -xAW -dkD -pkC -tYZ -blX -eQf -fOH -qWT -wFB -mvW -rTi -acm -aaa -acm -aaa -cow -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +rye +tVg +iKt +dQt +iIQ +uWv +lDT +eeT +oeq +nqo +nqo +vDm +nqo +vDm +nqo +nqo +aim +ilW +ocP +nvU +uts +ddR +tAs +uuV +dlS +hEV +ygo +aeU aaa aaa aaa @@ -107142,7 +107521,7 @@ rZN ihg xYa mAj -sZR +dbe pwa ihg ihg @@ -107168,11 +107547,11 @@ qlC yaN efG tPD -gZO +qUo uWU nYp mLJ -jBi +tNZ vvH dRF mIq @@ -107181,7 +107560,7 @@ nms uMf rLh vqw -tyY +nvk eAn tjA xoT @@ -107206,12 +107585,12 @@ hGf bXj fqG tZk -wqP +wEO xPO vRP bqy qoT -dqq +qPP dLh tWL tmZ @@ -107226,47 +107605,47 @@ qsb qsb eOG uNY -vlq +pDM gmG qYr ttR -gmG -pLl -sOV -knv -xIB -rvk -iKX -oat -hAc -iZB -hRj -lsW -nWU -ugr -mlT -gSz +ioV +rrW +cfL +jJK +ijs +ixp +jPu +jQd +jPu +dFa +rGR +bEk +pws +hkl +dvF +mmN +cqh +hOw +qjO +xZt +xZt +qjO +xZt +xZt +qjO +pSI +sFe +kFf +uwk wRU -vfO +xLM rTi -tHs gva rTi rTi -icx -acm -cow -acm -acm -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +gva +lkg aaa aaa aaa @@ -107448,7 +107827,7 @@ gTz jDy tDW faZ -vNo +djM mZW sIf dyK @@ -107476,54 +107855,54 @@ hyl qvG kTq kxH -mgU +sdN rFg xYE -jdB +lvE qHe csW olP pDM -kDy +uUO nEe -nbn +tmS vlq -liK -qNH -tcg -wcP -yhW -kOx -eEB -ujT -ccQ -slu -lAV -mST -uoN -mvX -pet -uZZ -gkx -aGs -gpe -tJa -lNn -rTi -acm -aaa -cow -aaa +jYa +mjh +jJK +kEn +jgQ +vwU +iVh +ugU +fVX +utO +nwd +ceu +deB +lXu +jaO +xnH +lau +qhO +lau +xJw +pTr +rSj +mvH +hjA +wRq +uUy +qNW +ymj +oup acm -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +rTL +aeu +aeu +aeu +aeu +aeU aaa aaa aaa @@ -107738,50 +108117,50 @@ wjm wjm dvu qsb -huS -yem -lvS -llu +aOg +kyF +oTS +pPc +cfL cfL -tUm mjh -dIN cfL -wRU +cfL +hXP +nnk +sot +xKI +nnk +hXP +nts +llw +dGb +iAr +hZv +xLK +vTg +eEd +prf +fsB +wAo +fxq +yma +oup oup -vhp -wLM -wLM wRU -xjB -eyv -ufG -jia -mOg -dgP -nwN +wWL oup -vfO -xLM -oYN -qms -lNn -rTi -acK -acm -cow -aaa -acm -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +wRU +osW +osW +anH +aeu +aeu +aeu +aeu +aeu +aUz +aeU aaa aaa aaa @@ -107942,14 +108321,14 @@ lZi lZi lae kLR -tRq +iui hQP tdt fzJ shk orT aQB -vzu +pDn vqw vqw imo @@ -107957,7 +108336,7 @@ tEE fzL nTG ijQ -iNH +xKC qOB vYI lYE @@ -107995,40 +108374,49 @@ jKz toZ bSi kBd -llu +pPc rRm gmG qVA cfL -gXX -pgA -wJD -unS -wRU -jzm -vXI -dof -wgq +jsn +pca +mJj +iVS +hXP +jeg +ref +aEw +bPr +pQS +nts +sIl +mwx +rEZ +gxG +lTb +eZc +dNA +yma +yma +rnv +irg +gBh +pjw +iZl +rPG +urn +aZf osW -eKA -bdU -jYc -tNB -cUA -tTp -wky -aeL -eQf -fOH -gyn -qpI -lNn -rTi -acm -aaa -gGF -aaa -cmU +aeu +anH +aeu +aeu +aeu +aeu +aeu +aeu +aeu aeU aaa aaa @@ -108078,15 +108466,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa "} (122,1,1) = {" aaa @@ -108214,7 +108593,7 @@ wqE wuh tzl ijQ -hpD +suE jLq shP evs @@ -108235,7 +108614,7 @@ mzp cqO bZt cEr -bYT +uyU efP exz wfk @@ -108252,42 +108631,49 @@ lTM pqb tdW qsb -llu +pPc cfL cfL mjh cfL -pvi -giU -nny -hkK -wRU -nwu -nhO -dof -pvu -lqU -uuK -qRp -jrR -hBk -jrR -ero -vSp +oPK +hGV +nnX +kGP +hXP +nuP +wdt +srn +jyu lqU -vfO -rTi -cCe -rTi -rTi -gva -cke -acm -cmU -aUz -cke +aIE +mLa +mgB +sEU +ugo +ddq +sqF +xTh +tQF +pmP +foV +bgd +bda +iFD +tDy +oup +wwg +bRk +wRU +aeu +aeu +aeu +aeu +aeu +aeu +aeu +aeu aeu -aeU aeU aaa aaa @@ -108337,13 +108723,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa "} (123,1,1) = {" aaa @@ -108468,7 +108847,7 @@ gba cDH maW cWl -srB +adM dCM ijQ wEI @@ -108476,7 +108855,7 @@ lJd vbo lJd hNL -slz +whG wEt wqu tXg @@ -108506,38 +108885,45 @@ kTq rDe whm iSG -hZU -cAk +guQ +mLz qsb -kDy +uUO cfL -kUB -gTc -eva -pNZ -mSM -kZU -tnp -ikt -baC -fse -ouk -blw -bSg -pJJ -eaw -fts -hnb -aYN -tUc -sGV -uUA -gkx -aGs -wae -vIE -hEV -rTi +vag +nnv +bHD +gOI +raW +ksz +vhQ +pQS +djh +uWd +eAK +lVT +aUI +sfN +uBx +jXS +uBx +xkx +uwQ +bda +uwS +yma +bda +grj +yma +bda +vHl +kau +wRU +dGS +oup +osW +aeu +aeu aeu aeu aeu @@ -108546,13 +108932,6 @@ aeu aeu aeu aeU -aeU -aaa -aaa -aaa -aaa -aaa -aaa aaa aaa aaa @@ -108701,9 +109080,9 @@ kjS cJk oQg ajZ -vFe -wCN -iqO +dcg +eOz +sYZ uvq iUT lRk @@ -108732,7 +109111,7 @@ sde hMf pvf bln -pZd +tkp bDr dvk niQ @@ -108748,12 +109127,12 @@ scg vuF eib eDg -fmv +jaz bBS pOd pjm kOJ -orI +emk iuP nnV mmF @@ -108766,35 +109145,38 @@ uvi qHe qsb qsb -wpI +tph mjh -dYH -nZF -eQj -wbH -sIx -vaz -tMo -wRU -oiR -jbg -iNm -mZb +eyZ +bCH +xVW +tFt +lXA +rih +rih +hXP +pof +oTO +wtS +bCE lqU -tZz -eFn -clt -owT -uPX -cPp -vxr -tKi -vfO -xLM -vVP -hEV -hEV -gva +mKp +eBY +qsY +cqR +rib +xQT +yma +lMg +nkg +goi +lfE +ain +iyd +vIY +aeU +ach +jGQ aeu aeu aeu @@ -108804,12 +109186,9 @@ aeu aeu aeu aeu -aaa -aaa -aaa -aaa -aaa -aaa +aeu +aeu +aeU aaa aaa aaa @@ -108953,7 +109332,7 @@ aeu aeu aeu oQg -icm +deL dDH sCu oQg @@ -108976,7 +109355,7 @@ gyx vXa exN byy -gAd +gkX sBz hEa sIq @@ -109020,39 +109399,42 @@ sPP tGQ mMz rkT -eUy +eeG hrY luO lig -jEO -rKm -xcE -vvE -fEu -qFb -jzw -mHa -sMf -uCS -uCS -twu -iTB -vVx -vzt -oqW -dwB -rtF -ipJ -fxB -bks -uAE -bEa -vZy -qaZ -dlS -hEV -gva -aeu +gLw +aOM +rPi +swq +cBo +uqP +oZj +sxj +uLY +vLV +jfe +hEj +whs +bTO +kgS +oWE +gXO +ecP +qIf +wFQ +bda +uix +kno +bda +sYw +yma +bda +ssM +aeU +aeU +aeU +ncM aeu aeu aeu @@ -109062,10 +109444,7 @@ aeu aeu aeu aeu -aaa -aaa -aaa -aaa +aeU aaa aaa aaa @@ -109258,7 +109637,7 @@ ygj wMt gRP lpt -sXo +fDU bvA ssr vSa @@ -109274,55 +109653,55 @@ tJX hyl nbR uPM -jVW +hPy iHp nVK nVK rwh nVK jSM -jEO -hXL -qvV -oKp -sZz -unE -hoV -kEQ -wRU -vRX -iAU -rnP -oJr -tKi -eaQ -sZb -kyR -ikh -lhG -tpw -jYT -pLs -ygU -rTi -rTi -gva -rTi -rTi +gLw +dvI +gbc +ukO +jGy +lMv +uME +ybd +hXP +gUc +fwR +qiH +iAh +sEU +siZ +fsf +nCJ +iZq +iSa +tFh +yma +bda +emU +bda +lbG +lbG +alO +aoe +aeU +aeU +aeU +aeU +eqr +anH aeu -agt -aEg -cko -cko -cke aeu aeu aeu aeu -aaa -aaa -aaa -aaa +aeu +aeU +aeU aaB aaa aaa @@ -109470,7 +109849,7 @@ gNz owq vOL rMA -jHP +ajL nmu jRy rMA @@ -109487,7 +109866,7 @@ wpf aVn fvU vOM -pWx +mhE sAZ mLb puB @@ -109501,7 +109880,7 @@ qBC fxP nSh pFS -nbG +rtO vAw bXz ekL @@ -109515,7 +109894,7 @@ dvk wFl dKJ wFl -xCL +dYp lBj qaF xUk @@ -109537,35 +109916,35 @@ irM dEl prP rFi -goz -aWD -aWD -rWT -qPf -aJH -vbj -knh -pRO +oUO +kgo +kgo +sie +rGa +wZe +qoK +kgo +jDB jBs fGu chS -kep -npR -gwk -pVF -xMs -tJK -sLW -hEY -gXh -uSB -pLs -ygU -aDT -clX -clY -clX -clz +bak +fGu +fGu +hWO +vMj +rmy +gOZ +oMP +ebI +foa +aeZ +aeZ +nrp +lrm +fwm +lrm +fUi clz clz clz @@ -109576,8 +109955,8 @@ aeu agt aeu aUz -aaa -aaa +aeU +aeU aaa aaa aaa @@ -109780,7 +110159,7 @@ bJR dmD tqz fxd -vSU +lbZ rNZ fLy oYi @@ -109789,7 +110168,7 @@ nfa nJA ekM ekM -byd +nXh exH ekM ofq @@ -109797,27 +110176,27 @@ jhg xoh qRv mGj -aWw +nTC ohj -fvQ -mVo -vPU -xnZ +yjQ +goL +wns +oxY jBs -lPh +sHo sqM -sFv -dIX +nCq +tEe jBs -pLs +nuj pLs sDy pLs pLs -pal -pLs -pLs -ygU +lPV +kvd +acm +acm aDU aDY aEd @@ -109830,7 +110209,7 @@ aEf aEr aEt aeU -ckf +cnu aeU aeU aaa @@ -110034,11 +110413,11 @@ lrk cau otP otP -iQh +sLy jlh lme -urv -sOJ +oub +bAq hfp mXI fNe @@ -110058,23 +110437,23 @@ xeq xeq nwY fbB -gEo +vwu kJf nOg wcg bVp -tgd -ccw -jBs -sXQ -fVB +yhF +wHN +sYO +ved +apd rSe xEB ekm -qEM -gpL -eHf -ozk +oWZ +byi +acm +acm aDU aDZ aEe @@ -110238,7 +110617,7 @@ aeu aeu aeu oQg -dNT +dPu xXG xXG xXG @@ -110246,7 +110625,7 @@ kuc nqs xnO qDA -aCg +uTB iUT swW lda @@ -110271,7 +110650,7 @@ ftG wRs pLB hxw -fyh +noq bXz hdm dMp @@ -110290,7 +110669,7 @@ yeA fiQ jfV rxt -sBb +yfJ fJv jlh aVx @@ -110301,26 +110680,26 @@ ixo gWw jhz scX -bKH +qUB gkr pmu wRE gng -pRc +vBg jhg xAw bSX ddI jMo -rTm +rFR hTB tGz -dgG -ipf -jYd -usp -ljb -sPG +nHH +nae +eDl +lAi +jZK +wAT kPS jBs qTg @@ -110328,13 +110707,13 @@ oWX puS cvI twN -vBt -ekm +thJ +byi clX cHN aDV aEa -aEf +rbw aEj aEm aEq @@ -110497,7 +110876,7 @@ aeu oQg lBN vAm -vae +vNW tIM vIK nqs @@ -110518,7 +110897,7 @@ iJf npi vvd luQ -hQd +cik lby gsu sIq @@ -110533,7 +110912,7 @@ bXz bXz wIL ffv -dKB +qhD dyX xPk laE @@ -110572,8 +110951,8 @@ qMC cYt gev vrq -uuC -bxE +spv +qqv jBs fGu chS @@ -110585,7 +110964,7 @@ sHQ kQd fKg twN -bJi +gPk ekm gFQ twN @@ -110601,7 +110980,7 @@ aEf aEr aEu aeU -vku +dHG aeu aaa aaa @@ -110752,9 +111131,9 @@ aeU aeu aeu gNz -otn +tHK fiW -vSW +noK fiW ksN nqs @@ -110785,7 +111164,7 @@ nol lox ocZ oFC -eBm +flM ipo wxq wxq @@ -110799,13 +111178,13 @@ kbc niQ ejQ yaG -lIA +nDO cTh -xgH -vIV -nLt -hhJ -wiK +nlz +jur +qiA +cBk +flJ yaG nuL aGZ @@ -110828,9 +111207,9 @@ mGj see cjl rlx -uFb -vZu -xnB +ubH +oGt +jqC fSt icw tKS @@ -110842,23 +111221,23 @@ izf dQK ekm ekm -oUj -hTo -pSW +itK +jsp +rBH ocx gHd -ntf +uve twN aEl aEo aEo -aEo +tLn aEo aEo aEo aEv aeu -aeu +anH aeu aaa aaa @@ -111028,7 +111407,7 @@ hqS bot ttB lRk -feW +rgu ejU jLT pqm @@ -111045,24 +111424,24 @@ xTI uGD ejP fUZ -aqx +pBC qSa eeb gTA jHT -qQR +tRn xPk ycr niQ dch slo dRY -guq -vDK -xea -fRm -uLL -avx +bYh +jTI +wiS +syh +dkz +nVA slo jTk aGZ @@ -111072,14 +111451,14 @@ nNM nam bax bax -tIX +mGe qgE rOS eQq scX xsJ lRl -yif +vIh xOI xOI qkm @@ -111094,29 +111473,29 @@ enS toi jvh ekm -vUC -kCK -kCK -ftS -mfE -pSE -lmb -dzt -hRY -hRY -roy -bWE +ahG +tiz +bOw +uPz +utC +etp +szZ +dsx +tWf +wVP +qBl +ekm rea rea ekm twN -cko -cpY -ckr -cke +aeU +aeU +eqr +anH +aeu aeu aeu -aeU aaa aaa aaa @@ -111273,7 +111652,7 @@ otr aDF tAI ctx -eDR +jcR oQg vhf lVe @@ -111314,12 +111693,12 @@ niQ kPt slo cfK -kHt -anE +xzP +jnm ftl uiE crR -pMz +hFC slo oUA skM @@ -111338,34 +111717,34 @@ rXv nVK pRw rwD -iXo +rHE ggF ils qsA -aYW -hmr -hnD +jcQ +lZJ +xDq kUS -qtO +wes fqN smn ceW rea wYx -lxu -qfg -qfg -ulF -abq -ffQ -jYo -vHa -qAo -kLx +dus +vmY +vmY +wYM +htB +juy +roL +vZT +lbb +hrx lmC dyw -cQt -gGp +dwa +mSx ekm twN agt @@ -111524,7 +111903,7 @@ aeu aeu aeu gNz -gML +srC ake reJ ckp @@ -111546,7 +111925,7 @@ uFl qZl wwv jMZ -mxT +eMJ lby dEc umq @@ -111570,13 +111949,13 @@ urE niQ cSq slo -prc -xgi -nyV -drX -mCG -xZc -avx +gvD +hir +tlz +olY +oRB +oWO +nVA slo iqk skM @@ -111599,31 +111978,31 @@ pwo hZT lNK lNK -fwd +voe pLu -nlT +hHn kUS -gso +tPI feD ydw mmE dLN oDG -tCp +fWZ qOq -qZC +iEc lOX -lcn +fXQ jIt fXQ okp -aiR -sCV -fgH -kZY +wwI +rev +hbL +vho dES uTY -ofu +vMY ekm aeu aeu @@ -111784,10 +112163,10 @@ oQg ugA cJh otr -pTU +juZ cJv ahJ -vmV +sYK oQg mbW lVe @@ -111821,19 +112200,19 @@ wGA xvj aMe oNk -txB +nxo sWI jCZ niQ abJ yaG -hLY +eEE eON -dqk -mMu -xeL -gGD -gTT +igZ +nrz +pFL +sch +isZ yaG acm skM @@ -111846,21 +112225,21 @@ vwe ffC dmp sZB -vYQ +oPD bax oCt fmn aek xOI -sYx -mKe -nyA -lJM -pOZ +phS +nYh +qXY +kLf +tqr oBP -ocQ +ayK gTr -iEG +tsy qVN rEW goG @@ -111874,13 +112253,13 @@ uvG piZ uvG lOX -hqW +aXS jbZ rea tiz jnL tiz -dqv +niX ekm aeu aeu @@ -112055,12 +112434,12 @@ vHh lRk enP lZi -eQh +lPR vTu dRR tmf qpw -mIC +kpI bBF jdE sIq @@ -112088,7 +112467,7 @@ tXg tXg arl arl -fQY +lEN arl arl arl @@ -112110,31 +112489,31 @@ kYU cuV xOI lrU -cSZ -sgK -meR -wOe +feb +kDf +iUC +qeV mPP -vww +sDw vHH -lQj +eIJ gDu -xtc +xFg dKz rea -wYx -xQL +sTC +kzg okp -dPr -cYc -vME -qnH -vME lOX -paN -dOA -piD -uyK +nCF +cME +hiK +sTW +lOX +gcA +dyL +vDk +ssQ uyK rKf vRo @@ -112291,23 +112670,23 @@ aca aji tfi udA -ksu +hLw lRZ iJu uFM qAa -xwW -sjK +lav +eSU kri hBD eeQ -orW +jcD lVe -uSd +kPj eIM -sPg -hTn -gOP +mmm +rao +nLY dGP xBs qCI @@ -112335,7 +112714,7 @@ sMi eYd fmV pqu -wtM +mei sWI mza tnc @@ -112343,8 +112722,8 @@ vwQ tXg rQs tXg -wbG -tMC +eAQ +ect gii arl arl @@ -112355,7 +112734,7 @@ xuM qzv qur iNi -wWy +qUS ioQ mQR elz @@ -112367,28 +112746,28 @@ sXJ alL jjs nPw -hrg +oEQ xDj eHc jzk sXP -guS +tdG kUS whP jWL -bFv +uit kgB twN -eiJ -fKD -cYc +sTC +jPH +rFM wxx -mMB +gLS aRB aRB aRB okp -flx +uMB kOX rea skP @@ -112558,10 +112937,10 @@ joF olL soI pAx -oJW +abU jcp ikH -ceY +rij qNb jKj iUT @@ -112602,7 +112981,7 @@ tXg tXg arl arl -nqF +svU arl jMF xuM @@ -112624,7 +113003,7 @@ qZX qZX qZX sxF -tMB +uQX sxF fvC vfd @@ -112633,10 +113012,10 @@ vfd iKg uSH xOB -xqE +izw exD ekm -dgo +qwq uqD kBz vyN @@ -112645,8 +113024,8 @@ hPr dGG vyN eVL -gJa -iAE +taA +tPG rea gPX rBO @@ -112822,11 +113201,11 @@ uRT nhy vEW lZi -vHW +oln fJq vnH eJq -hbI +mPW dBy rlT vnZ @@ -112854,7 +113233,7 @@ nYP jiS eeo dke -lHt +rNs xWK nwI fIR @@ -112881,28 +113260,28 @@ qZX kDg chH ctg -prC +ohU cYk pIO evb tNW oCo wnl -mVr +srm eOW -aGR -eEZ +pMD +amC uJN vUD -quv -lhm +cmZ +pBO lYb -kvM +ieK mNt mNt mNt -dPr -sMY +lOX +dLR hSt rea tiz @@ -113077,7 +113456,7 @@ dxu vuI cIY cbL -aBk +wza lZi uDT nyN @@ -113135,34 +113514,34 @@ cuV oQk aAU jjs -tmx +xcy cLx jNM -oxJ +wVN tav snU oDh dJw -rAt -kmo +dwq +suy kmo dGX -tyI +sZJ pSh rea -mSC -pqH +sTC +pzT lOX -uWA -lhm -idk -mno -idk +okp +foG +ufK +obk +igq lOX -obh -dOA -piD -uyK +onj +dyL +vDk +ssQ uyK oiS tiz @@ -113323,7 +113702,7 @@ qmW cKd wpw ieb -vXz +ayx wpw vhx nQx @@ -113392,23 +113771,23 @@ cuV cuV bhJ jjs -cxB +vec sXC sdp -onn +odo cEa snU uso -udd -pLy +oMm +kjc sCr hur gKR -tyI +sZJ bkn rea -mSC -kHK +sTC +pNq aGQ oAk lOX @@ -113416,14 +113795,14 @@ fCX cPM fCX okp -hqW +nfc lZV rea vRo vRo vRo -mQs -ekm +tld +twN aeu aeu aeu @@ -113593,18 +113972,18 @@ uRT dBV vEW lZi -epi +tRN uJP moG bBF -nuy +gEJ lWg gpP bLf mii vqN bBF -veY +thf maj aUn ayh @@ -113615,7 +113994,7 @@ lBk wyF prq vao -ydk +iDs fqq tho vTx @@ -113625,10 +114004,10 @@ lrR fkw hDK ege -eKa +rhe ykP xcV -eOV +peE kUN kvL bCz @@ -113638,7 +114017,7 @@ xNe gtC xNe qEf -jsR +hHz ykP vWF sqK @@ -113650,36 +114029,36 @@ cuV pgG qZX xjl -clM -syA -wnv -tuS -bfh -iiG -kAg +nrb +glJ +res +jAq +vlD +rMc +qqK uMk -ulU -xLA -jLs +rjT +pre +mPw tyI bjb rea -mSC -naQ +sTC +fGW ksp -hyk +ool lOX lcn -jIt +pqL lcn lOX -dSo -oow -rYh -hVH +xEI +vLN +hbL +vho dES rKV -cpW +jZa twN aeu aeu @@ -113831,7 +114210,7 @@ kMx gqn elS wuc -lrM +uem oVc mwp lth @@ -113913,7 +114292,7 @@ xin rja fvC xCr -kmo +pht gMC uSH uSH @@ -113922,20 +114301,20 @@ qUJ uSH ekm vUD -iwS -shH -uYM -sJH -shH -shH -wXM -iEr -boG -oow -iwM -vHe -oQm -juR +oZU +ods +ods +vkf +ods +wkl +feS +mdR +bXx +jYq +cYe +okT +rfN +gNF ekm ekm aeu @@ -114090,7 +114469,7 @@ gqn vJc lev gSQ -enU +kNV bEd pig prr @@ -114102,15 +114481,15 @@ ppB syu gqk okt -xDw +qDf uRT rAO hZP lZi -hAT +hjO kwV edj -hUn +iYp xJB sJU mDj @@ -114140,22 +114519,22 @@ oNO tQI xlf liB -sHo +wQG hKV cIW liB -kvE +aKk cox eLU pRu rEE -jDv +pJI xNe ghO -kCi -lIf +evW +pdK vzy -kfx +khx toE bXf aVC @@ -114170,27 +114549,27 @@ jjs qZX qZX ccR -kmo +vMy vKj uvm amq hjj -raT -bGj +dDg +hjj vOq rKn -dnS -rfm -pbL -pbL -ifB -umC +vRo +vRo +vRo +vRo +vRo +www qai -rIm -lRS -qzz +uUM +wtw +wSV ekm -iwM +bIE rea twN ekm @@ -114375,7 +114754,7 @@ tfV lJU qDZ gGf -oTQ +epl hsg nxj dLA @@ -114385,10 +114764,10 @@ kzK mhP hhE pwy -dLg +uyS lDu vMo -iAf +nDR vOX vOO gsO @@ -114402,8 +114781,8 @@ jEy jOi hJa sAR -klA -dhG +nOO +gaX gjP iCK pFw @@ -114414,7 +114793,7 @@ jGW lIR jHm mbY -aqE +gil vzy kSp cuV @@ -114426,13 +114805,13 @@ cAq pQC wHr qZX -spU -tCo +oLN +vBw nan uvm vLG aov -aov +ofC aov ekm xNP @@ -114457,8 +114836,8 @@ joY oam joY oam -vku -aaa +anH +bbQ aaa aaa aaa @@ -114607,14 +114986,14 @@ vse jmM mQe jec -gbx +mrL kkP nKQ -gbx +mrL mQe dJk nqE -uYg +kmJ xHR nPl uYb @@ -114630,11 +115009,11 @@ hZr uYP tNe dkM -ufm +cyJ iUm eog eog -eDw +mmM meP rhK uAh @@ -114655,7 +115034,7 @@ xoO fGI rfF sKy -rUZ +cZk nnA qAn qJi @@ -114873,7 +115252,7 @@ ecf mPE oiu peF -okE +dQI lev cHZ jdp @@ -114885,7 +115264,7 @@ dJm bUx cKY mDj -bwF +tze eHI eHI eHI @@ -114894,7 +115273,7 @@ fsj plp aYz lZn -tlt +hVf geE wqQ rwR @@ -114905,10 +115284,10 @@ nOJ bls hnl iuE -sUj +umg dcq ulm -tUA +nmL jhD liB nqg @@ -114920,7 +115299,7 @@ ebF xiA tmq rmK -omr +cNJ xNe eUk kTk @@ -114934,7 +115313,7 @@ vxN cuV mZz fuB -hIp +azE jTm gDM jxy @@ -114969,7 +115348,7 @@ vaI vAl eLv oam -sda +ifw joY acm aaa @@ -115118,11 +115497,11 @@ gqn vJc lev nXp -jdu +niJ kDe dmA hvl -lvR +msj wpw gcp puJ @@ -115158,13 +115537,13 @@ qzA knu lNP oLH -loE -mUH +jQU +fhM rZV erl pnl idM -dRG +xep aEC vWA dyj @@ -115179,7 +115558,7 @@ xNe fKx uIx ihU -jzu +eba vWv oGV vzy @@ -115191,7 +115570,7 @@ vzy fuB cuV cuV -wYq +plg cuV fuB cuV @@ -115373,7 +115752,7 @@ vPW xRZ uwY vJc -oxn +vWr ulZ iSS uLt @@ -115398,7 +115777,7 @@ xvr kkT gtW sBl -swC +fNW imS imS imS @@ -115431,12 +115810,12 @@ aII sAr wyv cON -dBX +pRM xNe ihU gtC ihU -aHM +fmX bHl rVj oSI @@ -115448,7 +115827,7 @@ nPV jSJ cvM rgv -iJL +pQF xGa uAb keE @@ -115471,7 +115850,7 @@ qZX qZX qZX hiQ -vGu +qZX qZX gDM dqL @@ -115485,8 +115864,8 @@ mZK oam oam joY -vku -aaa +anH +bbQ aaa aaa aaa @@ -115662,7 +116041,7 @@ hhc imS cka jeU -rxb +bKa lKk aND aND @@ -115674,14 +116053,14 @@ frO frO dJS vOX -ftJ +ghr iNL aru wNb atu tXr jfc -thT +ity vUH gnB qxC @@ -115702,14 +116081,14 @@ bHl bHl bHl bHl -lNd -oHB -bly -sjp -ceO -naO -uNR -pxl +xQK +jbR +gOu +bbR +rfl +xRj +uZJ +nvQ hGX mkk iVL @@ -115739,10 +116118,10 @@ fuB hQA ght wHu -pbs joY -oam -gGi +isb +iuR +nTX aaa aaa aaa @@ -115912,7 +116291,7 @@ roF pMT gtW hTb -pPM +iWQ vTX mtq tCh @@ -115925,7 +116304,7 @@ rDd qth awT aMU -iLX +aON qZc jqJ frO @@ -115937,13 +116316,13 @@ wwC kZw gHI cTX -wyS +gMV eKk lJD eKk lJD oQL -wyS +gMV fLo nFy hfr @@ -115957,16 +116336,16 @@ sNa fur gel gCl -qca -fgx -hMY +cIr +qtH +jHb mkk -deF -xgF -jhE +dAb +lZz +xLm rCi lxo -pEp +wlt itC rCi iVL @@ -115987,7 +116366,7 @@ qOQ rzR nCf qZX -cuV +fuB qZX qpj mbS @@ -115997,10 +116376,10 @@ cAp auR mCV rNR -hxF +bWu xmQ +vTz gny -aeU aaa aaa aaa @@ -116188,7 +116567,7 @@ uhx oWm wtt vOX -mPB +iQJ qFV nTz dXJ @@ -116214,7 +116593,7 @@ cQR cQR pIl pIl -gIJ +igY eHY nXu eLm @@ -116223,7 +116602,7 @@ eLm eLm eLm mkk -jNq +esD cvM mkk rCi @@ -116242,7 +116621,7 @@ usr xVm usr xeo -jzH +usr usr aeu xTG @@ -116422,15 +116801,15 @@ syF mKC lDu wZZ -blm +qUf wIo gtW iAC fOu iRR -fqu +dtE rwy -obv +rgq wzI uZR pmD @@ -116445,7 +116824,7 @@ frO frO wtt rZV -kgU +rsS wTU cRO sGF @@ -116462,7 +116841,7 @@ iko euX tOy akD -kWN +lOS bAS vUp byb @@ -116470,8 +116849,8 @@ ozz uAc cQR lPb -sCy -iNz +jxt +gMx cPZ vJh iWL @@ -116479,9 +116858,9 @@ hSy ssi qjq eLm -uRv -nYg -pjx +bFE +soY +rYQ tbE rFN gJj @@ -116689,13 +117068,13 @@ aeJ egr fxQ wzI -xfB -afY +kSy +mIs bWZ frO tbu eLV -iLI +xai nkV xio frO @@ -116720,7 +117099,7 @@ nFy tbS pHE bmX -clo +jfp cQR jBC pdZ @@ -116728,7 +117107,7 @@ ecl wJn lFB cQc -vzR +iwc nXu ttZ lmi @@ -116736,8 +117115,8 @@ aXA gNM pvF tCQ -wWJ -hYr +dCO +pau owX lAB lAB @@ -116984,8 +117363,8 @@ hDa tNa cQR rDh -lza -wWY +aoD +xwa beo qtA mrI @@ -117210,25 +117589,25 @@ cqr fyq tXS vls -dOa +sGB xxN lDu nIg dME -ixR +jHw boO oiK mvm ncQ clV jwu -fmY +xaK qWh gSp xVK kxu npx -iXL +ebu lgC pWC jnp @@ -117242,7 +117621,7 @@ cQR eMo pIl wRO -gIJ +igY iSw nXu eLm @@ -117250,7 +117629,7 @@ dkL tCQ eLm eLm -obO +bUo plx wGe izU @@ -117482,12 +117861,12 @@ dME tiK dWM oAJ -bGa +fYt eiI dok kZq nFT -gQM +uBk tOy pLe yaF @@ -117499,7 +117878,7 @@ wpn cLG jwn lFC -lja +vQA btb apw hBf @@ -117509,7 +117888,7 @@ rCi qUb hUL pBR -gIC +tLF nuh lAB bPX @@ -117712,20 +118091,20 @@ ucG mrt khy lDu -vqf +wFd wdu blZ jiO tQM gao -ugx +ukS sXG rtw hRG ceT sgn uuW -hzx +fhE oLH wCY cTN @@ -117734,7 +118113,7 @@ qTJ chT oCC wrY -tBy +opy dME hxP ntn @@ -117748,24 +118127,24 @@ diU tOy xcT tDG -gns +bKR cQR gMA qih tNQ -fhq +pRx xhJ sRb -xfL +uWc tej -uQJ +gMu tej -uqi -jEW -rgW -iLN -oiU -uHU +wlG +ycH +jKc +kJB +aIe +meN tla lAB lAB @@ -118009,19 +118388,19 @@ cQb cQR jgI cQR -pRL +hdK oSX kdO -qFl -pIf +pVT +yfl chg vPB noE -iLF -wlb +ucC +djy blx hev -xMZ +bFB kwM xbx tbE @@ -118228,7 +118607,7 @@ gyd awX iSC wxl -wdm +dgJ oRK wua bwA @@ -118238,7 +118617,7 @@ dty fIu jYp qew -msy +nGa dry lDu pkM @@ -118270,12 +118649,12 @@ vOW aoE sMh iCW -pIf +yfl chg vHF miM -iLF -uRL +ucC +tdC rCi rCi rCi @@ -118501,13 +118880,13 @@ lDu lDu xZL rZV -jPA +nTv iRq aLI dVB -vQc +aBH qAR -vDc +kZs eXQ kwl hOc @@ -118527,14 +118906,14 @@ hyt dPK wTe mHu -gLG +qIz chg ybS noE -nDu +hrC lFC wdZ -rYA +qQw mnK oIu eQg @@ -118750,7 +119129,7 @@ kFN uYh hvz clw -bYg +dJP oay dAQ eGD @@ -118778,17 +119157,17 @@ jAF xqQ jAF acm -kjG -eOA -oYK +dbP +dLK +bqc oMU baG oaF -pIf +yfl chg vHF noE -vVv +xxr tej tej tej @@ -119015,7 +119394,7 @@ cGr oLH kxT rZV -vvb +iLK udJ gmb fxY @@ -119037,23 +119416,23 @@ aaa acK uJV jUi -hxZ -tQP +bzQ +bIi seO mHu -ukz +ivY chg tdn xWJ -qmM -yit -egH -cmR -dka -dIB -hIy -cRM -qUB +xyI +fuM +lVy +ual +iyy +qcJ +fBj +mML +luC rCi bUO bUN @@ -119272,7 +119651,7 @@ uwq oLH wCY rZV -trx +nar tIe twd dVB @@ -119297,20 +119676,20 @@ vOW vOW sMh vOW -cir -slX -hMU -vcx -uOl -rya -oSW +giC +kgt +fNX +qxc +lMV +vFK +iSu ajb ajb ajb pcC uAe -fBw -xir +gJX +anf mkk cic cic @@ -119516,8 +119895,8 @@ lDu lDu wHb lDu -qlI -wst +dBY +tFf ocv fHZ bIm @@ -119527,7 +119906,7 @@ aMb fqb lDu lDu -lGT +rGL vOX qAR uoL @@ -119551,22 +119930,22 @@ aaa acK wJe rMI -iMS +wkv jij wJe -gIW -pqp +xwT +cPW xnU mPS ijL -vCp -mDY +vNt +rhR cKz dfY vkd cHO vOW -hhy +kbs bPK cVr bYe @@ -119808,20 +120187,20 @@ aaa acm vOW dSw -cZN -lWF +dQo +hGr gHA -bfQ -yit +wEo +fuM vHF aiB vHF -vVv -aFj +xxr +gcj pfH -hKF -cHv -xmm +iFb +vtx +hSF sMh cdl gpH @@ -120044,7 +120423,7 @@ wCY fkP kCd gKI -ygo +lYx bBK dVB jJp @@ -120065,19 +120444,19 @@ aaa acm wJe hQs -eZi -vPD +mvx +qJT wJe -fhC -egH +wuO +lVy wTS epv wTS -iLF -mDY +ucC +rhR ycy bzc -mDY +rhR hsV vOW vOW @@ -120321,23 +120700,23 @@ aaa aaa acm sMh -ykR -eZi +tTy +mvx nqx awt emV -iLF -iKV -jWN +ucC +wFn +fFG esX -xKq +ecR qjK dmf vGa wSz -req +nCa vOW -dqh +erM tBn dhY qYN @@ -120532,7 +120911,7 @@ aeu aeu aeu uVQ -ccS +jvE uVQ aeu aeu @@ -120548,7 +120927,7 @@ sJS rZV mtc oLH -bMD +dWQ lkB iaX eWS @@ -120579,7 +120958,7 @@ aaa acm wJe twj -rNc +pOA wGh wJe cdu @@ -120595,7 +120974,7 @@ qbO aYd sMh nho -tbz +tET sMh qeH ffa @@ -120805,7 +121184,7 @@ xeP vOX mtc lDu -ocd +fBV fJo lkB xye @@ -121063,15 +121442,15 @@ rZV mtc lDu lOh -hRJ +diY seG cMD drm oLH wCY -sZK +uJm ddQ -erp +ykl fsV tRg nuS @@ -121325,10 +121704,10 @@ sJS lDu yad lDu -tqt +tuI rZV rZV -eeJ +suY enQ vSM gAF @@ -121351,17 +121730,17 @@ qJs acm qJs vOW -wwg +nCi iOW -kSe +cGf sMh tlA oVP juq vOW -wwg +nCi iOW -kSe +cGf sMh acm aaa @@ -121585,9 +121964,9 @@ daG wCY sjd fej -syl +tul xCP -tNf +nCo rEu kPI xPT @@ -121842,9 +122221,9 @@ exg kMP ddQ dez -tjd -eRl -uBd +fqd +bim +nUK mVu kPI mjW @@ -122096,11 +122475,11 @@ sJS rZV smo vOX -rfK +lZt rZV -aLJ -uSu -ist +aId +aYG +rOr kYE gjv oiE diff --git a/_maps/shuttles/emergency/emergency_ark.dmm b/_maps/shuttles/emergency/emergency_ark.dmm new file mode 100644 index 000000000000..398543cd9b27 --- /dev/null +++ b/_maps/shuttles/emergency/emergency_ark.dmm @@ -0,0 +1,2323 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aj" = ( +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"aI" = ( +/obj/structure/chair, +/obj/effect/turf_decal/bot, +/obj/structure/railing/unbreakable, +/turf/open/floor/plating, +/area/shuttle/escape) +"aS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/ore_container/food_trough/raptor_trough, +/obj/item/clothing/head/costume/rice_hat, +/turf/open/floor/hay, +/area/shuttle/escape) +"aX" = ( +/obj/structure/chair/sofa/corp/corner{ + dir = 4 + }, +/turf/open/floor/carpet/royalblue, +/area/shuttle/escape) +"aY" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"bG" = ( +/obj/structure/table, +/obj/item/defibrillator/loaded, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"bT" = ( +/obj/effect/spawner/random/biome_mob/grass/shuttle_only, +/turf/open/floor/grass, +/area/shuttle/escape) +"cb" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 + }, +/turf/open/floor/fakeice, +/area/shuttle/escape) +"ck" = ( +/obj/structure/closet/emcloset/anchored, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/shuttle/escape) +"ct" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/flora/bush/large/style_random{ + pixel_y = 0 + }, +/obj/structure/water_source/puddle, +/turf/open/misc/grass/jungle/station, +/area/shuttle/escape) +"cu" = ( +/obj/structure/chair/comfy/shuttle, +/obj/effect/turf_decal/bot, +/obj/structure/railing/unbreakable, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"cw" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/item/toy/seashell, +/turf/open/misc/beach/coast, +/area/shuttle/escape) +"cF" = ( +/obj/structure/chair/sofa/corp/corner{ + dir = 1 + }, +/turf/open/floor/carpet/royalblue, +/area/shuttle/escape) +"cO" = ( +/obj/structure/table/reinforced/titaniumglass, +/obj/item/slimepotion/sentience{ + pixel_x = -7 + }, +/obj/item/slimepotion/sentience, +/obj/item/slimepotion/sentience{ + pixel_x = 8 + }, +/obj/machinery/light/directional/south, +/obj/structure/sign/nanotrasen/directional/south, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"cV" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Casino Infirmary" + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/escape) +"dc" = ( +/obj/machinery/stasis, +/obj/machinery/light/directional/west, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"dd" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/hay, +/area/shuttle/escape) +"dh" = ( +/turf/open/floor/glass/reinforced/plasma, +/area/shuttle/escape) +"dp" = ( +/obj/structure/flora/bush/flowers_br/style_random, +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 + }, +/turf/open/floor/grass/fairy, +/area/shuttle/escape) +"dr" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating, +/turf/open/floor/fakeice, +/area/shuttle/escape) +"dy" = ( +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/escape/brig) +"dF" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"en" = ( +/obj/item/kirbyplants/organic/plant21, +/obj/structure/railing/unbreakable{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/shuttle/escape) +"ep" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/structure/flora/bush/grassy/style_random, +/turf/open/misc/dirt/dark/station, +/area/shuttle/escape) +"et" = ( +/obj/structure/chair/sofa/corp{ + dir = 4 + }, +/turf/open/floor/carpet/royalblue, +/area/shuttle/escape) +"eH" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/escape) +"eW" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/escape/brig) +"fm" = ( +/obj/structure/table/reinforced/titaniumglass, +/obj/item/storage/toolbox/mechanical, +/obj/item/paper_bin, +/obj/machinery/status_display/evac/directional/south, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"fs" = ( +/obj/structure/railing/unbreakable{ + dir = 1 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"fS" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/turf_decal/bot, +/obj/structure/railing/unbreakable{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/shuttle/escape) +"ga" = ( +/obj/machinery/door/airlock/titanium{ + name = "Emergency Shuttle Airlock" + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"gE" = ( +/obj/effect/spawner/random/trash, +/turf/open/floor/plating/elevatorshaft, +/area/shuttle/escape) +"gM" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating, +/area/shuttle/escape) +"hg" = ( +/turf/open/lava/smooth/weak, +/area/shuttle/escape) +"hW" = ( +/obj/item/kirbyplants/organic/plant21, +/obj/structure/railing/unbreakable{ + dir = 4 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"hX" = ( +/obj/machinery/light/directional/west, +/obj/item/kirbyplants/organic/plant21, +/turf/open/floor/iron/smooth, +/area/shuttle/escape) +"ic" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/effect/turf_decal/bot, +/obj/structure/railing/unbreakable{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"it" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Brig" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/escape) +"iy" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/shuttle/escape) +"iz" = ( +/obj/item/clothing/mask/muzzle, +/obj/effect/turf_decal/siding/thinplating/terracotta{ + dir = 5 + }, +/obj/structure/railing{ + dir = 5 + }, +/turf/open/floor/plating, +/area/shuttle/escape/brig) +"iK" = ( +/obj/machinery/door/airlock/titanium{ + name = "Emergency Shuttle Airlock" + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"iV" = ( +/turf/open/floor/glass/plasma, +/area/shuttle/escape) +"jE" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 1 + }, +/turf/open/floor/carpet/royalblue, +/area/shuttle/escape) +"jS" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/obj/effect/turf_decal/siding/thinplating{ + dir = 9 + }, +/turf/open/floor/plating/snowed/standard_air, +/area/shuttle/escape) +"ke" = ( +/obj/structure/sign/warning/biohazard/directional/north, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"kk" = ( +/obj/effect/spawner/random/trash, +/turf/open/floor/engine, +/area/shuttle/escape) +"kz" = ( +/turf/open/floor/iron/smooth, +/area/shuttle/escape) +"kA" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/effect/spawner/random/biome_mob/clown, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"kO" = ( +/obj/item/food/grown/banana, +/obj/effect/turf_decal/siding/wood, +/obj/structure/flora/bush/flowers_pp/style_random, +/obj/effect/spawner/random/biome_mob/jungle/shuttle_only, +/turf/open/misc/grass/jungle/station, +/area/shuttle/escape) +"ld" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/escape/brig) +"lo" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"lr" = ( +/obj/structure/flora/grass/green/style_3, +/obj/effect/turf_decal/siding/thinplating, +/turf/open/misc/asteroid/snow/standard_air, +/area/shuttle/escape) +"lx" = ( +/obj/effect/spawner/random/biome_mob/maint/shuttle_only, +/turf/open/floor/plating/elevatorshaft, +/area/shuttle/escape) +"ly" = ( +/obj/structure/flora/bush/jungle/b/style_random, +/obj/effect/turf_decal/siding/thinplating{ + dir = 10 + }, +/turf/open/misc/ironsand, +/area/shuttle/escape) +"lB" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating{ + dir = 5 + }, +/turf/open/floor/fakeice, +/area/shuttle/escape) +"lV" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"mc" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/carpet/royalblue, +/area/shuttle/escape) +"mm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/thinplating{ + dir = 4 + }, +/turf/open/floor/grass/fairy, +/area/shuttle/escape) +"mn" = ( +/obj/structure/stone_tile{ + dir = 4 + }, +/turf/open/misc/basalt/safe, +/area/shuttle/escape) +"mt" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/obj/effect/spawner/random/biome_mob/snow/shuttle_only, +/turf/open/floor/plating/snowed/standard_air, +/area/shuttle/escape) +"mz" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/turf/open/floor/plating, +/area/shuttle/escape) +"mF" = ( +/obj/structure/table/reinforced/titaniumglass, +/obj/item/storage/fancy/donut_box, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"mG" = ( +/obj/structure/table/reinforced/titaniumglass, +/obj/machinery/recharger, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"mT" = ( +/turf/open/floor/plating, +/area/shuttle/escape) +"nf" = ( +/obj/structure/railing/unbreakable{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"ni" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/floor/iron/smooth, +/area/shuttle/escape) +"nx" = ( +/obj/structure/flora/bush/stalky/style_random, +/turf/open/misc/beach/coast, +/area/shuttle/escape) +"oc" = ( +/obj/structure/flora/rock/pile/siderite/style_random, +/turf/open/misc/asteroid/basalt/smooth/siderite, +/area/shuttle/escape) +"ok" = ( +/obj/item/clothing/suit/jacket/straight_jacket, +/obj/effect/turf_decal/siding/thinplating/terracotta{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/plating, +/area/shuttle/escape/brig) +"oz" = ( +/obj/structure/railing/corner, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/escape/brig) +"oB" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"oI" = ( +/obj/machinery/light/directional/west, +/obj/item/kirbyplants/organic/plant21, +/turf/open/floor/wood, +/area/shuttle/escape) +"pg" = ( +/turf/open/misc/basalt/safe, +/area/shuttle/escape) +"pp" = ( +/obj/effect/spawner/random/biome_mob/lavaland/shuttle_only, +/turf/open/misc/asteroid/basalt/smooth/siderite, +/area/shuttle/escape) +"pw" = ( +/obj/machinery/door/airlock/external/ruin{ + name = "Emergency Recovery Airlock" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/plating, +/area/shuttle/escape) +"pC" = ( +/obj/effect/turf_decal/sand/volcanic, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/structure/flora/bush/stalky/style_random, +/turf/open/misc/dirt/dark/station, +/area/shuttle/escape) +"pI" = ( +/obj/item/kirbyplants/organic/plant21, +/obj/structure/railing/unbreakable{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/shuttle/escape) +"qj" = ( +/obj/machinery/computer/station_alert{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"qr" = ( +/obj/machinery/disposal/delivery_chute{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/full, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"qx" = ( +/obj/structure/railing/unbreakable{ + dir = 4 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"qG" = ( +/obj/structure/flora/bush/sparsegrass/style_2, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/machinery/hydroponics/soil/rich, +/obj/effect/turf_decal/siding/thinplating, +/turf/open/misc/ironsand, +/area/shuttle/escape) +"qW" = ( +/obj/item/kirbyplants/organic/plant21, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"rH" = ( +/obj/structure/sign/warning/vacuum, +/turf/closed/wall/mineral/titanium, +/area/shuttle/escape) +"rV" = ( +/obj/structure/chair/comfy/shuttle, +/obj/item/fishing_rod, +/obj/structure/railing/unbreakable, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"sb" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"sd" = ( +/obj/effect/spawner/random/biome_mob/hostile/shuttle_only, +/turf/open/floor/glass/reinforced/plasma, +/area/shuttle/escape) +"si" = ( +/obj/structure/table, +/obj/item/scalpel{ + pixel_y = 12 + }, +/obj/item/circular_saw, +/obj/item/retractor{ + pixel_x = 4 + }, +/obj/item/hemostat{ + pixel_x = -4 + }, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/mask/surgical, +/obj/item/surgicaldrill, +/obj/item/cautery, +/obj/machinery/light/directional/east, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"sw" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 1 + }, +/obj/structure/flora/rock/pile/jungle/style_random, +/obj/item/toy/beach_ball/branded, +/turf/open/water/beach, +/area/shuttle/escape) +"sT" = ( +/obj/structure/closet/crate/critter, +/obj/effect/spawner/random/biome_mob/maint/shuttle_only, +/turf/open/floor/plating, +/area/shuttle/escape) +"tE" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/turf/open/floor/plating, +/area/shuttle/escape) +"tO" = ( +/obj/item/radio/intercom, +/turf/closed/wall/mineral/titanium, +/area/shuttle/escape) +"tW" = ( +/obj/structure/table/wood/fancy/purple, +/obj/item/reagent_containers/cup/glass/drinkingglass{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass{ + pixel_x = 3; + pixel_y = 12 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass{ + pixel_x = 6; + pixel_y = 2 + }, +/turf/open/floor/carpet/royalblue, +/area/shuttle/escape) +"vi" = ( +/obj/structure/table/optable, +/obj/item/surgical_drapes, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"vl" = ( +/obj/machinery/door/airlock/titanium{ + name = "Emergency Shuttle Airlock" + }, +/turf/open/floor/iron/smooth, +/area/shuttle/escape) +"vv" = ( +/obj/structure/table/reinforced/titaniumglass, +/obj/machinery/light/directional/north, +/obj/structure/sign/nanotrasen/directional/north, +/obj/item/lazarus_injector, +/obj/item/lazarus_injector{ + pixel_x = 8 + }, +/obj/item/lazarus_injector{ + pixel_x = 16 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"vD" = ( +/obj/structure/flora/tree/stump, +/obj/effect/turf_decal/siding/thinplating{ + dir = 8 + }, +/turf/open/misc/asteroid/snow/standard_air, +/area/shuttle/escape) +"vK" = ( +/obj/structure/flora/bush/lavendergrass/style_random, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/flora/bush/jungle/b/style_random, +/turf/open/misc/grass/jungle/station, +/area/shuttle/escape) +"vL" = ( +/obj/structure/sign/warning/biohazard/directional/south, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"vQ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/misc/grass/jungle/station, +/area/shuttle/escape) +"vT" = ( +/obj/machinery/computer/emergency_shuttle{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/obj/machinery/status_display/ai/directional/east, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"wh" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/escape/brig) +"wv" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/turf/open/floor/plating, +/area/shuttle/escape) +"wK" = ( +/obj/structure/sign/departments/medbay/alt, +/turf/closed/wall/mineral/titanium, +/area/shuttle/escape) +"wY" = ( +/obj/item/kirbyplants/organic/plant21, +/turf/open/floor/iron/smooth, +/area/shuttle/escape) +"xc" = ( +/obj/structure/flora/bush/pointy/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/obj/effect/turf_decal/siding/thinplating{ + dir = 6 + }, +/turf/open/misc/ironsand, +/area/shuttle/escape) +"xg" = ( +/obj/item/book/manual/wiki/security_space_law{ + pixel_x = 3; + pixel_y = 4 + }, +/obj/item/book/manual/wiki/security_space_law{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/clothing/head/collectable/police, +/obj/structure/table/reinforced, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/escape/brig) +"xj" = ( +/obj/structure/railing/corner, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"xl" = ( +/obj/structure/table, +/obj/item/storage/medkit/regular{ + pixel_x = 5; + pixel_y = 3 + }, +/obj/item/storage/medkit/fire, +/obj/item/storage/medkit/toxin{ + pixel_x = -3 + }, +/obj/item/storage/medkit/o2{ + pixel_x = 3; + pixel_y = -3 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"xt" = ( +/obj/structure/railing/unbreakable, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/escape) +"xI" = ( +/turf/open/floor/glass, +/area/shuttle/escape) +"yc" = ( +/obj/machinery/door/poddoor/preopen{ + id = "misclab"; + name = "Test Chamber Blast Door" + }, +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/engine, +/area/shuttle/escape) +"yg" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"yl" = ( +/obj/structure/flora/bush/sparsegrass/style_2, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/grass, +/area/shuttle/escape) +"yo" = ( +/obj/structure/flora/ash/fireblossom, +/turf/open/misc/asteroid/basalt/smooth/siderite, +/area/shuttle/escape) +"yy" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/grass, +/area/shuttle/escape) +"yF" = ( +/obj/structure/flora/rock/pile/style_2, +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/misc/dirt/dark/station, +/area/shuttle/escape) +"yH" = ( +/obj/effect/turf_decal/siding/thinplating/terracotta{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/plating, +/area/shuttle/escape/brig) +"yJ" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/obj/effect/turf_decal/siding/thinplating{ + dir = 6 + }, +/turf/open/floor/fakeice, +/area/shuttle/escape) +"zc" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/escape/brig) +"zp" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/effect/turf_decal/bot, +/obj/structure/railing/unbreakable{ + dir = 1 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"zD" = ( +/obj/structure/sign/warning, +/turf/closed/wall/mineral/titanium, +/area/shuttle/escape) +"zG" = ( +/obj/machinery/wall_healer/free, +/turf/closed/wall/mineral/titanium, +/area/shuttle/escape) +"Ab" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/effect/spawner/random/biome_mob/jungle/shuttle_only, +/turf/open/misc/grass/jungle/station, +/area/shuttle/escape) +"Af" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/effect/turf_decal/bot, +/obj/structure/railing/unbreakable{ + dir = 8 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"Aw" = ( +/obj/effect/turf_decal/sand/plating/volcanic, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/water_source/puddle, +/obj/item/reagent_containers/cup/bucket/wooden{ + pixel_y = 6; + pixel_x = 10 + }, +/obj/effect/spawner/random/biome_mob/grass/shuttle_only, +/turf/open/misc/dirt/dark/station, +/area/shuttle/escape) +"AA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/bush/reed/style_random, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/hay, +/area/shuttle/escape) +"AS" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/escape/brig) +"Bb" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/structure/flora/bush/jungle/c/style_random, +/turf/open/misc/grass/jungle/station, +/area/shuttle/escape) +"Bf" = ( +/obj/structure/flora/rock/pile/style_3, +/obj/effect/turf_decal/weather/sand{ + dir = 9 + }, +/obj/effect/turf_decal/weather/dirt, +/obj/structure/beebox/premade/random, +/turf/open/misc/sandy_dirt, +/area/shuttle/escape) +"Bj" = ( +/turf/template_noop, +/area/template_noop) +"Bv" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/carpet/royalblue, +/area/shuttle/escape) +"BY" = ( +/obj/effect/spawner/random/biome_mob/hostile/shuttle_only, +/turf/open/floor/glass/plasma, +/area/shuttle/escape) +"Cf" = ( +/obj/structure/railing/unbreakable{ + dir = 1 + }, +/turf/open/floor/iron/smooth, +/area/shuttle/escape) +"Cg" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/hay, +/area/shuttle/escape) +"Ch" = ( +/obj/structure/railing/unbreakable, +/turf/open/floor/plating, +/area/shuttle/escape) +"Ci" = ( +/obj/structure/railing/corner, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/escape) +"Cz" = ( +/obj/effect/spawner/random/biome_mob/beach/shuttle_only, +/turf/open/water/beach, +/area/shuttle/escape) +"CP" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/iron/smooth, +/area/shuttle/escape) +"Dc" = ( +/obj/structure/sign/warning/biohazard/directional/west, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"Dv" = ( +/obj/machinery/power/shuttle_engine/heater{ + dir = 8 + }, +/obj/structure/window/reinforced/plasma/spawner/directional/east, +/turf/open/floor/plating/airless, +/area/shuttle/escape) +"DA" = ( +/obj/effect/turf_decal/siding/thinplating/terracotta{ + dir = 1 + }, +/turf/open/floor/plating, +/area/shuttle/escape/brig) +"DO" = ( +/obj/docking_port/mobile/emergency{ + dir = 2; + name = "Ark emergency shuttle" + }, +/obj/machinery/door/airlock/titanium{ + name = "Emergency Shuttle Airlock" + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"DR" = ( +/obj/structure/chair/comfy/shuttle, +/obj/effect/turf_decal/bot, +/obj/structure/railing/unbreakable, +/turf/open/floor/wood, +/area/shuttle/escape) +"Ei" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/obj/effect/spawner/random/biome_mob/snow/shuttle_only, +/turf/open/floor/fakeice, +/area/shuttle/escape) +"Ep" = ( +/obj/structure/sign/poster/random, +/turf/closed/wall/mineral/titanium, +/area/shuttle/escape) +"Ew" = ( +/obj/structure/table/wood/fancy/purple, +/obj/item/storage/fancy/cigarettes/cigars{ + pixel_y = 5 + }, +/obj/item/lighter, +/turf/open/floor/carpet/royalblue, +/area/shuttle/escape) +"EQ" = ( +/obj/structure/railing/unbreakable{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"EW" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 6 + }, +/turf/open/floor/carpet/royalblue, +/area/shuttle/escape) +"Fi" = ( +/turf/open/floor/mineral/titanium/white, +/area/shuttle/escape) +"Fl" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/shuttle/escape) +"Fv" = ( +/obj/structure/flora/grass/jungle/a/style_2, +/turf/open/misc/grass/jungle/station, +/area/shuttle/escape) +"FG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"FJ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/grass, +/area/shuttle/escape) +"FZ" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/effect/turf_decal/bot, +/obj/structure/railing/unbreakable{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Gs" = ( +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"Gz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/thinplating{ + dir = 9 + }, +/turf/open/floor/grass/fairy, +/area/shuttle/escape) +"Hl" = ( +/turf/open/floor/glass/reinforced, +/area/shuttle/escape) +"Hu" = ( +/obj/effect/turf_decal/caution, +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"HS" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"HZ" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 5 + }, +/turf/open/floor/grass/fairy, +/area/shuttle/escape) +"Ih" = ( +/obj/machinery/power/shuttle_engine/propulsion{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/shuttle/escape) +"JA" = ( +/obj/structure/railing/unbreakable{ + dir = 1 + }, +/turf/open/floor/plating, +/area/shuttle/escape) +"JR" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"JZ" = ( +/obj/machinery/computer/communications{ + dir = 8 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"KB" = ( +/obj/effect/spawner/random/trash, +/turf/open/floor/plating, +/area/shuttle/escape) +"KG" = ( +/obj/structure/chair/sofa/corp/left, +/turf/open/floor/carpet/royalblue, +/area/shuttle/escape) +"Lb" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/loading_area{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Ll" = ( +/obj/structure/stone_tile/block/cracked{ + dir = 8 + }, +/obj/effect/spawner/random/biome_mob/lavaland/shuttle_only, +/turf/open/misc/basalt/safe, +/area/shuttle/escape) +"Lv" = ( +/obj/machinery/stasis, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"Lz" = ( +/obj/structure/railing/unbreakable{ + dir = 8 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"LB" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/carpet/royalblue, +/area/shuttle/escape) +"LL" = ( +/obj/item/food/syndicake, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/escape/brig) +"LW" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"LY" = ( +/obj/item/cultivator/rake, +/turf/open/floor/plating, +/area/shuttle/escape) +"Mb" = ( +/turf/open/floor/carpet/royalblue, +/area/shuttle/escape) +"MO" = ( +/obj/machinery/door/poddoor/preopen{ + id = "misclab"; + name = "Test Chamber Blast Door" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/engine, +/area/shuttle/escape) +"MS" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 + }, +/turf/open/floor/engine, +/area/shuttle/escape) +"MT" = ( +/obj/structure/flora/bush/flowers_br, +/obj/structure/bedsheetbin/empty/basket, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/grass, +/area/shuttle/escape) +"MX" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/bottle/epinephrine{ + pixel_x = 6 + }, +/obj/item/reagent_containers/cup/bottle/multiver{ + pixel_x = -3 + }, +/obj/item/reagent_containers/cup/bottle/epinephrine{ + pixel_x = -3; + pixel_y = 8 + }, +/obj/item/reagent_containers/cup/bottle/multiver{ + pixel_x = 6; + pixel_y = 8 + }, +/obj/item/reagent_containers/syringe/epinephrine{ + pixel_x = 3; + pixel_y = -2 + }, +/obj/item/reagent_containers/syringe/epinephrine{ + pixel_x = 4; + pixel_y = 1 + }, +/obj/item/reagent_containers/syringe/epinephrine{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/reagent_containers/syringe/epinephrine{ + pixel_x = 2; + pixel_y = 8 + }, +/obj/machinery/wall_healer/free/directional/east, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"Ne" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/carpet/royalblue, +/area/shuttle/escape) +"Ny" = ( +/obj/machinery/recharger{ + active_power_usage = 0; + idle_power_usage = 0; + use_power = 0 + }, +/obj/structure/table/reinforced, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/escape/brig) +"NJ" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/turf_decal/bot, +/obj/structure/railing/unbreakable{ + dir = 4 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"NN" = ( +/obj/effect/spawner/random/biome_mob/lavaland/shuttle_only, +/turf/open/lava/smooth/weak, +/area/shuttle/escape) +"NU" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/flora/bush/flowers_pp/style_random, +/obj/structure/flora/bush/style_random, +/turf/open/misc/grass/jungle/station, +/area/shuttle/escape) +"NV" = ( +/obj/structure/railing/unbreakable{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/shuttle/escape) +"Oa" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/item/fishing_rod, +/obj/structure/railing/unbreakable{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Ow" = ( +/obj/structure/flora/ash/stem_shroom, +/turf/open/misc/basalt/safe, +/area/shuttle/escape) +"Pb" = ( +/turf/open/water/deep_beach, +/area/shuttle/escape) +"Pf" = ( +/obj/structure/railing/unbreakable{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/escape) +"Pu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/thinplating/terracotta{ + dir = 9 + }, +/obj/structure/railing{ + dir = 9 + }, +/turf/open/floor/plating, +/area/shuttle/escape/brig) +"PF" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/iron/smooth, +/area/shuttle/escape) +"PM" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/structure/flora/bush/flowers_pp/style_random, +/turf/open/misc/dirt/dark/station, +/area/shuttle/escape) +"PP" = ( +/obj/effect/spawner/random/biome_mob/hostile/shuttle_only, +/turf/open/floor/glass, +/area/shuttle/escape) +"PQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/bed/maint, +/turf/open/floor/plating, +/area/shuttle/escape/brig) +"PS" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 + }, +/turf/open/floor/plating/snowed/standard_air, +/area/shuttle/escape) +"Qk" = ( +/obj/effect/spawner/random/biome_mob/fairy/shuttle_only, +/turf/open/floor/grass/fairy, +/area/shuttle/escape) +"Qt" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/effect/turf_decal/bot, +/obj/structure/railing/unbreakable{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/shuttle/escape) +"QR" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"QY" = ( +/obj/effect/spawner/random/biome_mob/hostile/shuttle_only, +/turf/open/floor/glass/reinforced, +/area/shuttle/escape) +"Ru" = ( +/obj/structure/chair/comfy/shuttle, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/escape/brig) +"Rx" = ( +/obj/structure/railing/unbreakable{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/escape) +"RQ" = ( +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/hay, +/area/shuttle/escape) +"RZ" = ( +/turf/open/floor/wood, +/area/shuttle/escape) +"Sb" = ( +/obj/structure/flora/bush/pale/style_random, +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/effect/turf_decal/weather/dirt, +/obj/effect/turf_decal/siding/thinplating{ + dir = 4 + }, +/turf/open/misc/sandy_dirt, +/area/shuttle/escape) +"Sk" = ( +/obj/structure/flora/bush/snow/style_random, +/obj/effect/turf_decal/siding/thinplating{ + dir = 10 + }, +/turf/open/misc/asteroid/snow/standard_air, +/area/shuttle/escape) +"Sl" = ( +/obj/structure/railing, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/escape/brig) +"Sm" = ( +/obj/item/clothing/shoes/sandal/beach, +/turf/open/misc/beach/sand, +/area/shuttle/escape) +"SK" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 5 + }, +/turf/open/floor/carpet/royalblue, +/area/shuttle/escape) +"Ty" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/escape/brig) +"TU" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/effect/turf_decal/bot, +/obj/structure/railing/unbreakable{ + dir = 1 + }, +/turf/open/floor/iron/smooth, +/area/shuttle/escape) +"Uu" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/escape) +"UA" = ( +/obj/structure/flora/bush/flowers_br, +/obj/effect/turf_decal/siding/thinplating{ + dir = 8 + }, +/turf/open/misc/ironsand, +/area/shuttle/escape) +"Ve" = ( +/obj/effect/turf_decal/caution, +/obj/structure/railing/corner, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Vl" = ( +/obj/effect/spawner/random/biome_mob/maint/shuttle_only, +/turf/open/floor/engine, +/area/shuttle/escape) +"VQ" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"VT" = ( +/obj/structure/railing/corner, +/turf/open/floor/wood, +/area/shuttle/escape) +"VU" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/wood, +/area/shuttle/escape) +"Wi" = ( +/obj/structure/table/wood/fancy/purple, +/obj/item/reagent_containers/cup/glass/bottle/rum{ + pixel_x = -5; + pixel_y = 7 + }, +/obj/item/reagent_containers/cup/glass/bottle/whiskey{ + pixel_y = 4 + }, +/obj/item/reagent_containers/cup/glass/bottle/amaretto{ + pixel_x = 7; + pixel_y = 5 + }, +/turf/open/floor/carpet/royalblue, +/area/shuttle/escape) +"Wp" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/escape) +"Ws" = ( +/obj/structure/flora/bush/pale/style_random, +/obj/structure/flora/bush/ferny/style_random, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/grass, +/area/shuttle/escape) +"WE" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/wood, +/area/shuttle/escape) +"WM" = ( +/obj/machinery/status_display/evac, +/turf/closed/wall/mineral/titanium, +/area/shuttle/escape) +"Xa" = ( +/obj/machinery/door/airlock/external/ruin{ + name = "Emergency Recovery Airlock" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/plating, +/area/shuttle/escape) +"Xi" = ( +/obj/structure/extinguisher_cabinet, +/turf/closed/wall/mineral/titanium, +/area/shuttle/escape) +"Xl" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, +/obj/effect/turf_decal/siding/thinplating{ + dir = 4 + }, +/turf/open/floor/fakeice, +/area/shuttle/escape) +"Xr" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/turf_decal/bot, +/obj/structure/railing/unbreakable{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Xv" = ( +/obj/structure/railing/unbreakable{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/shuttle/escape) +"XR" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/turf_decal/bot, +/obj/structure/railing/unbreakable{ + dir = 1 + }, +/turf/open/floor/plating, +/area/shuttle/escape) +"XW" = ( +/obj/machinery/door/window/brigdoor/security, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/escape/brig) +"XY" = ( +/obj/machinery/shower/directional/south, +/obj/effect/turf_decal/delivery, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"Yc" = ( +/obj/structure/chair/comfy/shuttle, +/obj/effect/turf_decal/bot, +/obj/structure/railing/unbreakable, +/turf/open/floor/iron/smooth, +/area/shuttle/escape) +"Yp" = ( +/obj/effect/turf_decal/siding/thinplating, +/turf/open/floor/plating/elevatorshaft, +/area/shuttle/escape) +"YC" = ( +/obj/item/kirbyplants/organic/plant21, +/obj/structure/railing/unbreakable{ + dir = 8 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"YE" = ( +/obj/structure/flora/bush/flowers_pp/style_random, +/obj/effect/turf_decal/siding/thinplating{ + dir = 8 + }, +/turf/open/floor/grass/fairy, +/area/shuttle/escape) +"YF" = ( +/obj/structure/railing/unbreakable, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"YS" = ( +/obj/effect/spawner/random/biome_mob/grass/shuttle_only, +/turf/open/floor/hay, +/area/shuttle/escape) +"YX" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/effect/turf_decal/siding/wood, +/turf/open/misc/dirt/dark/station, +/area/shuttle/escape) +"Zj" = ( +/obj/structure/railing/corner, +/turf/open/floor/iron/smooth, +/area/shuttle/escape) +"Zn" = ( +/obj/structure/table/reinforced/titaniumglass, +/obj/item/storage/medkit/regular, +/obj/machinery/status_display/evac/directional/north, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Zp" = ( +/obj/machinery/light/directional/east, +/obj/item/kirbyplants/organic/plant21, +/turf/open/floor/wood, +/area/shuttle/escape) +"Zv" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating, +/area/shuttle/escape) + +(1,1,1) = {" +Bj +Bj +Bj +Ih +Ih +Ih +Bj +Uu +rH +Xa +rH +Uu +Bj +Ih +Ih +Ih +Bj +Bj +Bj +"} +(2,1,1) = {" +Bj +Bj +Uu +Dv +Dv +Dv +Uu +Uu +tE +mT +ck +Uu +Uu +Dv +Dv +Dv +Uu +Bj +Bj +"} +(3,1,1) = {" +Bj +Uu +Uu +Uu +Uu +Uu +Uu +Uu +rH +pw +rH +Uu +Uu +Uu +Uu +Uu +Uu +Uu +Bj +"} +(4,1,1) = {" +Bj +Uu +gE +Yp +XR +Uu +KB +mT +mT +mT +mT +mT +mT +Zv +Ch +MS +kk +Uu +Bj +"} +(5,1,1) = {" +Bj +Uu +lx +Yp +JA +gM +mT +Uu +Uu +Uu +Uu +Uu +mT +Uu +aI +MS +Vl +Uu +Bj +"} +(6,1,1) = {" +Uu +Uu +Xi +Uu +wv +Uu +mT +Uu +Gs +Dc +Gs +Uu +mT +Uu +Uu +Uu +Xi +Uu +Uu +"} +(7,1,1) = {" +Uu +qW +JR +aj +aj +Uu +LY +Uu +ke +kA +vL +Uu +mT +Uu +aj +aj +JR +qW +Uu +"} +(8,1,1) = {" +Uu +Xr +Xr +oB +aj +Uu +sT +Uu +Gs +Wp +Gs +Uu +mT +wv +aj +xj +Xr +Xr +Uu +"} +(9,1,1) = {" +mz +iV +iV +EQ +aj +Uu +Uu +zD +yc +MO +yc +zD +Uu +Uu +aj +YF +xI +xI +mz +"} +(10,1,1) = {" +mz +BY +iV +EQ +aj +aj +aj +aY +FG +yg +FG +dF +aj +aj +aj +YF +xI +PP +mz +"} +(11,1,1) = {" +mz +iV +iV +EQ +xj +nf +nf +nf +Hu +sb +Ve +nf +nf +nf +oB +YF +xI +xI +mz +"} +(12,1,1) = {" +Uu +FZ +FZ +lV +cu +Hl +Hl +Hl +ic +Lb +cu +dh +dh +dh +ic +LW +FZ +FZ +Uu +"} +(13,1,1) = {" +iK +aj +VQ +aj +cu +Hl +QY +Hl +ic +qr +cu +dh +sd +dh +ic +aj +VQ +qW +Uu +"} +(14,1,1) = {" +Uu +Uu +Xi +ga +Uu +Uu +Ep +Uu +tO +WM +zG +Uu +Ep +Uu +wK +cV +Xi +wK +Uu +"} +(15,1,1) = {" +ga +RZ +VU +RZ +DR +aS +YS +AA +zp +oI +DR +NU +Ab +wK +xl +Fi +dc +Lv +Uu +"} +(16,1,1) = {" +Uu +NJ +NJ +QR +DR +RQ +Cg +dd +zp +RZ +DR +ct +vK +Uu +bG +Ci +Pf +Pf +Uu +"} +(17,1,1) = {" +mz +ep +PM +fs +HS +Lz +Lz +Lz +lo +RZ +HS +Lz +YC +mz +Fi +xt +Gz +YE +mz +"} +(18,1,1) = {" +mz +Aw +YX +fs +RZ +RZ +RZ +RZ +RZ +RZ +RZ +RZ +RZ +cV +Fi +xt +dp +Qk +mz +"} +(19,1,1) = {" +mz +pC +yF +fs +VT +qx +qx +qx +QR +RZ +VT +qx +hW +mz +Fi +xt +HZ +mm +mz +"} +(20,1,1) = {" +Uu +Af +Af +lo +DR +yy +yl +FJ +zp +RZ +DR +vQ +Bb +Uu +XY +eH +Rx +Rx +Uu +"} +(21,1,1) = {" +DO +RZ +WE +RZ +DR +MT +bT +Ws +zp +Zp +DR +Fv +kO +wK +MX +Fi +si +vi +Uu +"} +(22,1,1) = {" +Uu +Uu +Xi +ga +Uu +Uu +Ep +Uu +zG +WM +tO +Uu +Ep +Uu +Uu +it +Xi +Uu +Uu +"} +(23,1,1) = {" +vl +kz +CP +kz +Yc +cb +Ei +dr +TU +hX +Yc +oc +pp +Uu +Ru +dy +ld +Ny +Uu +"} +(24,1,1) = {" +Uu +fS +fS +Fl +Yc +lB +Xl +yJ +TU +kz +Yc +yo +oc +Uu +Ru +oz +AS +xg +Uu +"} +(25,1,1) = {" +mz +UA +ly +Cf +iy +Xv +Xv +Xv +ni +kz +iy +Xv +pI +mz +LL +Sl +Pu +yH +mz +"} +(26,1,1) = {" +mz +Bf +qG +Cf +kz +kz +kz +kz +kz +kz +kz +kz +kz +it +dy +XW +DA +PQ +mz +"} +(27,1,1) = {" +mz +Sb +xc +Cf +Zj +NV +NV +NV +Fl +kz +Zj +NV +en +mz +LL +Sl +iz +ok +mz +"} +(28,1,1) = {" +Uu +Qt +Qt +ni +Yc +jS +vD +Sk +TU +kz +Yc +pg +Ow +Uu +dy +eW +zc +zc +Uu +"} +(29,1,1) = {" +Uu +wY +PF +kz +Yc +PS +mt +lr +TU +kz +Yc +mn +Ll +Uu +Ty +Ty +wh +Ty +Uu +"} +(30,1,1) = {" +Uu +Uu +Xi +Uu +Uu +Uu +Uu +Uu +Uu +vl +Uu +Uu +Uu +Uu +Uu +Uu +Xi +Uu +Uu +"} +(31,1,1) = {" +Bj +Bj +mz +hg +hg +Oa +Ne +Mb +Mb +Mb +Mb +Mb +Bv +rV +nx +Pb +mz +Bj +Bj +"} +(32,1,1) = {" +Bj +Bj +mz +NN +hg +Oa +Ne +aX +et +et +et +cF +Bv +rV +cw +Cz +mz +Bj +Bj +"} +(33,1,1) = {" +Bj +Bj +mz +hg +hg +Oa +Ne +KG +Ew +tW +Wi +jE +Bv +rV +Sm +sw +mz +Bj +Bj +"} +(34,1,1) = {" +Bj +Bj +Uu +Uu +Uu +vv +SK +LB +LB +mc +LB +LB +EW +cO +Uu +Uu +Uu +Bj +Bj +"} +(35,1,1) = {" +Bj +Bj +Bj +Bj +Uu +Zn +mG +qW +JZ +vT +qj +qW +mF +fm +Uu +Bj +Bj +Bj +Bj +"} +(36,1,1) = {" +Bj +Bj +Bj +Bj +Uu +mz +mz +mz +Uu +Uu +Uu +mz +mz +mz +Uu +Bj +Bj +Bj +Bj +"} diff --git a/build/behavior_trees/code/datums/ai/generic_subtrees/find_stealable_object.bt.compiled.json b/build/behavior_trees/code/datums/ai/generic_subtrees/find_stealable_object.bt.compiled.json index d19c824e1cb9..3d5a35f390ed 100644 --- a/build/behavior_trees/code/datums/ai/generic_subtrees/find_stealable_object.bt.compiled.json +++ b/build/behavior_trees/code/datums/ai/generic_subtrees/find_stealable_object.bt.compiled.json @@ -1 +1 @@ -{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/is_dragging","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/random_chance_from_key","children":[{"type":"/datum/bt_node/ai_behavior/stop_dragging"}],"chance_key":"guilty_concious_rate"},{"type":"/datum/bt_node/ai_behavior/succeed"}]}]},{"type":"/datum/bt_node/decorator/bb_key_true","children":[{"type":"/datum/bt_node/decorator/random_chance_from_key","children":[{"type":"/datum/bt_node/ai_behavior/set_bb_key","target_key":"BB_WANTS_TO_COMMIT_THEFT","value":true}],"chance_key":"steal_chance"}],"invert":true,"key":"BB_WANTS_TO_COMMIT_THEFT"},{"type":"/datum/bt_node/decorator/bb_key_true","children":[{"type":"/datum/bt_node/ai_behavior/succeed"}],"invert":true,"key":"BB_WANTS_TO_COMMIT_THEFT"},{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/acquire_target/update_interaction_target","target_key":"item_to_steal","targeting_strategy":"/datum/targeting_strategy/pickup_item/stealable_item","target_source":"/datum/target_source/oview","must_be_reachable":true},{"type":"/datum/bt_node/ai_behavior/set_bb_key","target_key":"BB_WANTS_TO_COMMIT_THEFT","value":false}]}]} +{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/is_dragging","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/random_chance_from_key","children":[{"type":"/datum/bt_node/ai_behavior/stop_dragging"}],"chance_key":"guilty_concious_rate"},{"type":"/datum/bt_node/ai_behavior/succeed"}]}]},{"type":"/datum/bt_node/decorator/bb_key_true","children":[{"type":"/datum/bt_node/decorator/random_chance_from_key","children":[{"type":"/datum/bt_node/ai_behavior/set_bb_key","target_key":"BB_WANTS_TO_COMMIT_THEFT","value":true}],"chance_key":"steal_chance"}],"invert":true,"key":"BB_WANTS_TO_COMMIT_THEFT"},{"type":"/datum/bt_node/decorator/bb_key_true","children":[{"type":"/datum/bt_node/ai_behavior/succeed"}],"invert":true,"key":"BB_WANTS_TO_COMMIT_THEFT"},{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/acquire_target/update_interaction_target","target_key":"item_to_steal","targeting_strategy":"/datum/targeting_strategy/pickup_item/stealable_item","target_priority_strategy":"/datum/target_priority_strategy/type_weighted","target_source":"/datum/target_source/oview_items","must_be_reachable":true,"minimum_distance":1},{"type":"/datum/bt_node/ai_behavior/set_bb_key","target_key":"BB_WANTS_TO_COMMIT_THEFT","value":false}]}]} diff --git a/build/behavior_trees/code/modules/mob/living/basic/farm_animals/goose/forage_for_goose_food.bt.compiled.json b/build/behavior_trees/code/modules/mob/living/basic/farm_animals/goose/forage_for_goose_food.bt.compiled.json index cf4d3d55a626..1f734aae2d9a 100644 --- a/build/behavior_trees/code/modules/mob/living/basic/farm_animals/goose/forage_for_goose_food.bt.compiled.json +++ b/build/behavior_trees/code/modules/mob/living/basic/farm_animals/goose/forage_for_goose_food.bt.compiled.json @@ -1 +1 @@ -{"type":"/datum/bt_node/ai_behavior/acquire_target/update_interaction_target","target_key":"BB_TARGET_FOOD","targeting_strategy":"/datum/targeting_strategy/goose_edible","target_source":"/datum/target_source/oview_items","vision_range":1} +{"type":"/datum/bt_node/decorator/key_off_cooldown","children":[{"type":"/datum/bt_node/ai_behavior/acquire_target/update_interaction_target","target_key":"BB_TARGET_FOOD","targeting_strategy":"/datum/targeting_strategy/goose_edible","target_source":"/datum/target_source/oview_items","vision_range":4}],"observer_abort":1,"cooldown_key":"BB_next_food_eat"} diff --git a/build/behavior_trees/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.bt.compiled.json b/build/behavior_trees/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.bt.compiled.json index 2a1862e533d4..37675ef67f19 100644 --- a/build/behavior_trees/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.bt.compiled.json +++ b/build/behavior_trees/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.bt.compiled.json @@ -1 +1 @@ -{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/subtree/escape_captivity"},{"type":"","override_id":"pet_command"},{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/subtree/run_away_from_target"},{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/ai_behavior/targeted_mob_ability","ability_key":"BB_TARGETED_action","target_key":"Current Target"},{"type":"/datum/bt_node/ai_behavior/attack_obstructions","target_key":"Current Target"},{"type":"/datum/bt_node/ai_behavior/basic_melee_attack","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}]}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"Current Target","required_dist":1,"finish_on_arrival":false},{"type":"/datum/bt_node/decorator/cooldown","children":[{"type":"/datum/bt_node/ai_behavior/call_reinforcements/mining"}],"cooldown_key":"BB_basic_mob_reinforcements_cooldown","cooldown_duration":300,"lock_on_succeed":true}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}]}],"observer_abort":3,"key":"Current Target"},{"type":"/datum/bt_node/subtree/random_walk"}]},{"type":"/datum/bt_node/subtree/random_speech_loop"},{"type":"/datum/bt_node/ai_behavior/acquire_target/update_combat_targets","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}]} +{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/subtree/escape_captivity"},{"type":"","override_id":"pet_command"},{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/ai_behavior/targeted_mob_ability","ability_key":"BB_TARGETED_action","target_key":"Current Target"},{"type":"/datum/bt_node/ai_behavior/attack_obstructions","target_key":"Current Target"},{"type":"/datum/bt_node/ai_behavior/basic_melee_attack","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}]}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/decorator/cooldown","children":[{"type":"/datum/bt_node/ai_behavior/call_reinforcements/mining"}],"cooldown_key":"BB_basic_mob_reinforcements_cooldown","cooldown_duration":300,"lock_on_succeed":true}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true},{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/mob_stat_at_least","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"Current Target","required_dist":1,"finish_on_arrival":false}],"observer_abort":1,"key":"Current Target","min_stat":1},{"type":"/datum/bt_node/decorator/mob_stat_at_least","children":[{"type":"/datum/bt_node/subtree/run_away_from_target"}],"observer_abort":1,"invert":true,"key":"Current Target","min_stat":1}]}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"observer_abort":3,"key":"Current Target"},{"type":"/datum/bt_node/subtree/random_walk"}]},{"type":"/datum/bt_node/subtree/random_speech_loop"},{"type":"/datum/bt_node/ai_behavior/acquire_target/update_combat_targets","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}]} diff --git a/build/behavior_trees/code/modules/mob/living/basic/stoats/stoat.bt.compiled.json b/build/behavior_trees/code/modules/mob/living/basic/stoats/stoat.bt.compiled.json index 8e3ac45c42c9..81ac52922aa4 100644 --- a/build/behavior_trees/code/modules/mob/living/basic/stoats/stoat.bt.compiled.json +++ b/build/behavior_trees/code/modules/mob/living/basic/stoats/stoat.bt.compiled.json @@ -1 +1 @@ -{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/subtree","override_id":"pet_command"},{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/ai_behavior/basic_melee_attack","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}],"success_policy":0,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"Current Target","required_dist":1,"finish_on_arrival":false}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"key":"Current Target","observer_abort":1},{"type":"/datum/bt_node/subtree/move_to_and_eat"},{"type":"/datum/bt_node/subtree/make_babies"},{"type":"/datum/bt_node/decorator/is_dragging","children":[{"type":"/datum/bt_node/subtree/run_away_from_target","bindings":{"byk9gqj4":"BB_LAST_STOLEN_ITEM"}}],"observer_abort":1},{"type":"/datum/bt_node/subtree/steal_and_flee"},{"type":"/datum/bt_node/subtree/random_walk"}]},{"type":"/datum/bt_node/ai_behavior/acquire_target/update_combat_targets","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"},{"type":"/datum/bt_node/subtree/random_speech_loop"},{"type":"/datum/bt_node/subtree/find_stealable_object"},{"type":"/datum/bt_node/subtree/find_food"},{"type":"/datum/bt_node/subtree/find_partner"}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}]} +{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/subtree","override_id":"pet_command"},{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/ai_behavior/basic_melee_attack","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}],"success_policy":0,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"Current Target","required_dist":1,"finish_on_arrival":false}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"key":"Current Target","observer_abort":3},{"type":"/datum/bt_node/subtree/move_to_and_eat"},{"type":"/datum/bt_node/subtree/make_babies"},{"type":"/datum/bt_node/decorator/is_dragging","children":[{"type":"/datum/bt_node/subtree/run_away_from_target","bindings":{"byk9gqj4":"BB_LAST_STOLEN_ITEM"}}],"observer_abort":1},{"type":"/datum/bt_node/subtree/steal_and_flee"},{"type":"/datum/bt_node/subtree/random_walk"}]},{"type":"/datum/bt_node/ai_behavior/acquire_target/update_combat_targets","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"},{"type":"/datum/bt_node/subtree/random_speech_loop"},{"type":"/datum/bt_node/subtree/find_stealable_object"},{"type":"/datum/bt_node/subtree/find_food"},{"type":"/datum/bt_node/subtree/find_partner"}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}]} diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index ee4db3838966..818f9b07c711 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -52,7 +52,6 @@ // Block tied #define FEATURE_MUTANT_COLOR "mcolor" -#define FEATURE_ETHEREAL_COLOR "ethcolor" #define FEATURE_EARS "ears" #define FEATURE_TAIL_CAT "tail_cat" #define FEATURE_TAIL_LIZARD "tail_lizard" diff --git a/code/__DEFINES/admin_verb.dm b/code/__DEFINES/admin_verb.dm index 79d1fecb1095..e96944b04b35 100644 --- a/code/__DEFINES/admin_verb.dm +++ b/code/__DEFINES/admin_verb.dm @@ -9,12 +9,15 @@ * This is the only macro you should use to define admin verbs. * It will define the verb and the verb holder for you. * Using it is very simple: - * ADMIN_VERB(verb_path, R_PERM, "Name", "Description", "Admin.Category", args...) + * ADMIN_VERB(verb_path, R_PERM, "Name", "Description", "Admin.Category") * This sets up all of the above and also acts as syntatic sugar as a verb delcaration for the verb itself. * Note that the verb args have an injected `client/user` argument that is the user that called the verb. * Do not use usr in your verb; technically you can but I'll kill you. + * + * Verb arguments are declared in the proc body via VERB_ARG macros which self-register metadata + * at world init and extract values from the structured_args list at runtime. */ -#define _ADMIN_VERB(verb_path_name, verb_permissions, verb_name, verb_desc, verb_category, show_in_context_menu, verb_args...) \ +#define _ADMIN_VERB(verb_path_name, verb_permissions, verb_name, verb_desc, verb_category, show_in_context_menu) \ /datum/admin_verb/##verb_path_name \ { \ name = ##verb_name; \ @@ -23,27 +26,45 @@ permissions = ##verb_permissions; \ verb_path = /client/proc/__avd_##verb_path_name; \ }; \ -/client/proc/__avd_##verb_path_name(##verb_args) \ +/client/proc/__avd_##verb_path_name() \ { \ set name = ##verb_name; \ set desc = ##verb_desc; \ set hidden = FALSE; /* this is explicitly needed as the proc begins with an underscore */ \ set popup_menu = ##show_in_context_menu; \ set category = ##verb_category; \ - var/list/_verb_args = list(usr, /datum/admin_verb/##verb_path_name); \ - _verb_args += args; \ - SSadmin_verbs.dynamic_invoke_verb(arglist(_verb_args)); \ + SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/##verb_path_name); \ }; \ -/datum/admin_verb/##verb_path_name/__avd_do_verb(client/user, ##verb_args) +/datum/admin_verb/##verb_path_name/__avd_do_verb(client/user, list/structured_args) -#define ADMIN_VERB(verb_path_name, verb_permissions, verb_name, verb_desc, verb_category, verb_args...) \ -_ADMIN_VERB(verb_path_name, verb_permissions, verb_name, verb_desc, verb_category, FALSE, ##verb_args) +#define _ADMIN_VERB_CONTEXT(verb_path_name, verb_permissions, verb_name, verb_desc, verb_category, context_type) \ +/datum/admin_verb/##verb_path_name \ +{ \ + name = ##verb_name; \ + description = ##verb_desc; \ + category = ##verb_category; \ + permissions = ##verb_permissions; \ + verb_path = /client/proc/__avd_##verb_path_name; \ +}; \ +/client/proc/__avd_##verb_path_name(var##context_type/__context_target in world) \ +{ \ + set name = ##verb_name; \ + set desc = ##verb_desc; \ + set hidden = FALSE; \ + set popup_menu = TRUE; \ + set category = ##verb_category; \ + SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/##verb_path_name, list(VERB_ARG_CONTEXT_TARGET_KEY = __context_target)); \ +}; \ +/datum/admin_verb/##verb_path_name/__avd_do_verb(client/user, list/structured_args) + +#define ADMIN_VERB(verb_path_name, verb_permissions, verb_name, verb_desc, verb_category) \ +_ADMIN_VERB(verb_path_name, verb_permissions, verb_name, verb_desc, verb_category, FALSE) -#define ADMIN_VERB_ONLY_CONTEXT_MENU(verb_path_name, verb_permissions, verb_name, verb_args...) \ -_ADMIN_VERB(verb_path_name, verb_permissions, verb_name, ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, TRUE, ##verb_args) +#define ADMIN_VERB_ONLY_CONTEXT_MENU(verb_path_name, verb_permissions, verb_name, context_type) \ +_ADMIN_VERB_CONTEXT(verb_path_name, verb_permissions, verb_name, ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, context_type) -#define ADMIN_VERB_AND_CONTEXT_MENU(verb_path_name, verb_permissions, verb_name, verb_desc, verb_category, verb_args...) \ -_ADMIN_VERB(verb_path_name, verb_permissions, verb_name, verb_desc, verb_category, TRUE, ##verb_args) +#define ADMIN_VERB_AND_CONTEXT_MENU(verb_path_name, verb_permissions, verb_name, verb_desc, verb_category, context_type) \ +_ADMIN_VERB_CONTEXT(verb_path_name, verb_permissions, verb_name, verb_desc, verb_category, context_type) /// Used to define a special check to determine if the admin verb should exist at all. Useful for verbs such as play sound which require configuration. #define ADMIN_VERB_CUSTOM_EXIST_CHECK(verb_path_name) \ @@ -63,8 +84,9 @@ _ADMIN_VERB(verb_path_name, verb_permissions, verb_name, verb_desc, verb_categor /* * This is an example of how to use the above macro: * ``` - * ADMIN_VERB(name_of_verb, R_ADMIN, "Verb Name", "Verb Desc", "Verb Category", mob/target in world) - * to_chat(user, "Hello!") + * ADMIN_VERB(name_of_verb, R_ADMIN, "Verb Name", "Verb Desc", "Verb Category") + * VERB_ARG_TYPED(target, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) + * to_chat(user, "Hello [target]!") * ``` * Note the implied `client/user` argument that is injected into the verb. * Also note that byond is shit and you cannot multi-line the macro call. diff --git a/code/__DEFINES/ai/ai.dm b/code/__DEFINES/ai/ai.dm index a8c3371f5d21..170b52d2239d 100644 --- a/code/__DEFINES/ai/ai.dm +++ b/code/__DEFINES/ai/ai.dm @@ -23,6 +23,9 @@ #define TARGET_KEEP_IF_SET 2 /// Always run the full candidate search, ignoring any existing target. #define TARGET_ALWAYS_SEARCH 3 +/// Revalidate an existing target, and only search for a replacement while it remains valid if a target priority strategy is configured. +#define TARGET_RESELECT_WITH_SELECTION 4 + #define HAS_AI_CONTROLLER_TYPE(thing, type) istype(thing?.ai_controller, type) //AI controller flags diff --git a/code/__DEFINES/ai/ai_blackboard.dm b/code/__DEFINES/ai/ai_blackboard.dm index bff772494fa9..6a001a79dd7a 100644 --- a/code/__DEFINES/ai/ai_blackboard.dm +++ b/code/__DEFINES/ai/ai_blackboard.dm @@ -51,6 +51,10 @@ #define BB_WANTS_TO_COMMIT_THEFT "BB_WANTS_TO_COMMIT_THEFT" ///last stolen item #define BB_LAST_STOLEN_ITEM "BB_LAST_STOLEN_ITEM" +/// Associative list of target typepaths to selection weights for theft. +#define BB_STEAL_TARGET_PRIORITIES "BB_steal_target_priorities" +/// Selection weight for theft targets which do not match a configured priority type. +#define BB_STEAL_FALLBACK_PRIORITY "BB_steal_fallback_priority" ///the owner we will try to play with #define BB_OWNER_TARGET "BB_owner_target" @@ -139,7 +143,6 @@ #define BB_TARGET_HELD_ITEM "BB_target_held_item" /// How likely is this mob to move when idle per tick? #define BB_BASIC_MOB_IDLE_WALK_CHANCE "BB_basic_idle_walk_chance" -#define BB_BASIC_MOB_TARGET_REFRESH_COOLDOWN "BB_basic_mob_target_refresh_cooldown" /// whether we can have fuck #define BB_FUCKS "can we fuck?" diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm index e542c7df7ec2..a481924c727c 100644 --- a/code/__DEFINES/antagonists.dm +++ b/code/__DEFINES/antagonists.dm @@ -331,6 +331,9 @@ GLOBAL_LIST_INIT(ai_employers, list( /// Checks if the given mob is a spy! #define IS_SPY(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/spy)) +/// Checks if the given mob is a bloodworm +#define IS_BLOODWORM(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/blood_worm)) + /// List of human antagonist types which don't spawn directly on the space station GLOBAL_LIST_INIT(human_invader_antagonists, list( /datum/antagonist/abductor, diff --git a/code/__DEFINES/atmospherics/atmos_mob_interaction.dm b/code/__DEFINES/atmospherics/atmos_mob_interaction.dm index b050c221c586..41498c929c43 100644 --- a/code/__DEFINES/atmospherics/atmos_mob_interaction.dm +++ b/code/__DEFINES/atmospherics/atmos_mob_interaction.dm @@ -55,6 +55,18 @@ #define BODYTEMP_AUTORECOVERY_DIVISOR 28 /// Minimum amount of kelvin moved toward 310K per tick. So long as abs(310.15 - bodytemp) is more than 50. #define BODYTEMP_AUTORECOVERY_MINIMUM 3 +/// The multiplier that sets the speed when adjusting the difference between two body temperatures. +#define BODYTEMP_STANDARD_CHANGE_RATE 0.06 +/// The multiplier that sets the speed for body core temperature to normalize towards default. +#define BODYTEMP_CORE_CHANGE_RATE (BODYTEMP_STANDARD_CHANGE_RATE * 0.25) +/// Rate of body heat transfer from skin to core +#define BODYTEMP_SKIN_CORE_CHANGE_RATE (BODYTEMP_STANDARD_CHANGE_RATE * 0.65) +/// Rate of body heat transfer from core to skin +#define BODYTEMP_CORE_SKIN_CHANGE_RATE (BODYTEMP_STANDARD_CHANGE_RATE * 0.75) +/// Rate of body heat transfer from area to skin +#define BODYTEMP_AREA_SKIN_CHANGE_RATE (BODYTEMP_STANDARD_CHANGE_RATE * 0.85) +/// Rate of body heat transfer by space suits +#define BODYTEMP_SUIT_CHANGE_RATE (BODYTEMP_STANDARD_CHANGE_RATE * 1.35) ///Similar to the BODYTEMP_AUTORECOVERY_DIVISOR, but this is the divisor which is applied at the stage that follows autorecovery. This is the divisor which comes into play when the human's loc temperature is lower than their body temperature. Make it lower to lose bodytemp faster. #define BODYTEMP_COLD_DIVISOR 15 /// Similar to the BODYTEMP_AUTORECOVERY_DIVISOR, but this is the divisor which is applied at the stage that follows autorecovery. This is the divisor which comes into play when the human's loc temperature is higher than their body temperature. Make it lower to gain bodytemp faster. diff --git a/code/__DEFINES/augury.dm b/code/__DEFINES/augury.dm new file mode 100644 index 000000000000..dd8e8dd1f85c --- /dev/null +++ b/code/__DEFINES/augury.dm @@ -0,0 +1,35 @@ +// Defines for SSaugury (the subsytem used to let ghosts orbit meteors) + +// Severity defines. The object with the highest severity +// at any given time is the one focused upon. + +/// Space dust ghost auto-orbiting priority +#define SEVERITY_DUST 1 +/// Space sand ghost auto-orbiting priority +#define SEVERITY_SAND 1 +/// Meaty ore ghost auto-orbiting priority +#define SEVERITY_MEATY_ORE 2 +/// Medium (or generic) meteor ghost auto-orbiting priority +#define SEVERITY_MEDIUM_METEOR 5 +/// Frozen carp "meteor" ghost auto-orbiting priority +#define SEVERITY_FROZEN_CARP 5 +/// Big meteor ghost auto-orbiting priority +#define SEVERITY_BIG_METEOR 10 +/// EMP meteor ghost auto-orbiting priority. +#define SEVERITY_EMP_METEOR 10 +/// Bluespace meteor ghost auto-orbiting priority +#define SEVERITY_BLUESPACE_METEOR 15 +/// Bananium meteor ghost auto-orbiting priority +#define SEVERITY_BANANIUM_METEOR 15 +/// Flaming meteor ghost auto-orbiting priority +#define SEVERITY_FLAMING_METEOR 20 +/// Cluster meteor ghost auto-orbiting priority +#define SEVERITY_CLUSTER_METEOR 25 +/// Irradiated/uranium meteor ghost auto-orbiting priority +#define SEVERITY_IRRADIATED_METEOR 35 +/// Tungska meteor ghost auto-orbiting priority +#define SEVERITY_TUNGSKA_METEOR 50 +/// Pumpkin meteor ghost auto-orbiting priority +#define SEVERITY_PUMPKING 100 +/// Immovable rod ghost auto-orbiting priority +#define SEVERITY_ROD 2000 diff --git a/code/__DEFINES/basic_mobs.dm b/code/__DEFINES/basic_mobs.dm index d97418718a16..aa5ab927d093 100644 --- a/code/__DEFINES/basic_mobs.dm +++ b/code/__DEFINES/basic_mobs.dm @@ -14,14 +14,12 @@ #define REMAIN_DENSE_WHILE_DEAD (1<<2) /// Mob can be set on fire #define FLAMMABLE_MOB (1<<3) -/// Mob never takes damage from unarmed attacks -#define IMMUNE_TO_FISTS (1<<4) /// Mob is immune to getting wet -#define IMMUNE_TO_GETTING_WET (1<<5) +#define IMMUNE_TO_GETTING_WET (1<<4) /// Disables the function of attacking random body zones -#define PRECISE_ATTACK_ZONES (1<<6) +#define PRECISE_ATTACK_ZONES (1<<5) /// People would be sad to see this mob die -#define SENDS_DEATH_MOODLETS (1<<7) +#define SENDS_DEATH_MOODLETS (1<<6) /// Temporary trait applied when an attack forecast animation has completed #define TRAIT_BASIC_ATTACK_FORECAST "trait_basic_attack_forecast" diff --git a/code/__DEFINES/blood.dm b/code/__DEFINES/blood.dm index aacd75db56fb..5c6fae2d9e23 100644 --- a/code/__DEFINES/blood.dm +++ b/code/__DEFINES/blood.dm @@ -28,6 +28,12 @@ // Keys for indexing blood data lists. HIGHLY INCOMPLETE. /// Indexing a blood reagent data list with this returns how synthetic the blood is, used for blood worms to nerf common blood sources like monkeys. #define BLOOD_DATA_SYNTH_CONTENT "synth_content" +/// Specifically for Ethereal blood, indicating that it's non-zappy +#define BLOOD_DATA_ENRICHED_ETHEREAL "enriched" +/// The blood type of the blood, self evident +#define BLOOD_DATA_TYPE "blood_type" +/// The DNA within the blood, either a DNA string or some arbitrary string if the DNA is unknown +#define BLOOD_DATA_DNA "blood_DNA" /// Returns whether this mob always has synthetic blood. Used to cap growth for blood worms from easily accessible sources of blood. #define IS_BLOOD_ALWAYS_SYNTHETIC(mob) (!ishuman(mob) || HAS_TRAIT(mob, TRAIT_BORN_MONKEY) || HAS_TRAIT(mob, TRAIT_SPAWNED_MOB)) diff --git a/code/__DEFINES/bodyparts.dm b/code/__DEFINES/bodyparts.dm index 68277dad8464..1a72e90876ac 100644 --- a/code/__DEFINES/bodyparts.dm +++ b/code/__DEFINES/bodyparts.dm @@ -48,6 +48,8 @@ // Color priorities for bodyparts /// Abductor team recoloring priority #define LIMB_COLOR_AYYLMAO 5 +/// Ethereal bodypart effect (emag, flicker) color priority +#define LIMB_COLOR_ETHEREAL 7 /// Hulk effect color priority #define LIMB_COLOR_HULK 10 /// Fish infusion color priority @@ -228,3 +230,6 @@ DEFINE_BITFIELD(surgery_state, list( #define LIMB_ITEM_GAUZE "gauze" /// Tourniquet slot #define LIMB_ITEM_TOURNIQUET "tourniquet" + +/// For scaling the effectiveness of certain effects to the total bodypart count +#define GET_BODYPART_COEFFICIENT(X) round(X.len / BODYPARTS_DEFAULT_MAXIMUM , 0.1) diff --git a/code/__DEFINES/colors.dm b/code/__DEFINES/colors.dm index c255aa069dc7..d2a6b7ac0951 100644 --- a/code/__DEFINES/colors.dm +++ b/code/__DEFINES/colors.dm @@ -118,6 +118,7 @@ #define COLOR_BLUE_VERY_LIGHT "#ccecff" #define COLOR_NAVY "#000080" #define COLOR_BLUE_GRAY "#75A2BB" +#define COLOR_AI_HOLOGRAM_BLUE "#7DB4E1" #define COLOR_PINK "#FFC0CB" #define COLOR_LIGHT_PINK "#FF3CC8" diff --git a/code/__DEFINES/dcs/signals/signals_food.dm b/code/__DEFINES/dcs/signals/signals_food.dm index 753786574727..2386c0d4618f 100644 --- a/code/__DEFINES/dcs/signals/signals_food.dm +++ b/code/__DEFINES/dcs/signals/signals_food.dm @@ -2,7 +2,7 @@ //Food // Eating stuff -/// From datum/component/edible/proc/TakeBite: (atom/owner) +/// From datum/component/edible/proc/TakeBite: (atom/owner, foodtypes) #define COMSIG_LIVING_EAT_FOOD "food_bit" /// From datum/component/edible/proc/TakeBite: (mob/living/eater, mob/feeder, bitecount, bitesize) #define COMSIG_FOOD_EATEN "food_eaten" diff --git a/code/__DEFINES/dcs/signals/signals_hydroponic.dm b/code/__DEFINES/dcs/signals/signals_hydroponic.dm index 204239b236de..10dcfa3485ec 100644 --- a/code/__DEFINES/dcs/signals/signals_hydroponic.dm +++ b/code/__DEFINES/dcs/signals/signals_hydroponic.dm @@ -1,5 +1,7 @@ //Plants / Plant Traits +///called when a plant is harvested (obj/item/seeds) +#define COMSIG_PLANT_ON_HARVEST "plant_on_harvest" ///called when a plant with slippery skin is slipped on (mob/victim) #define COMSIG_PLANT_ON_SLIP "plant_on_slip" ///called when a plant with liquid contents is squashed on (atom/target) diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm index 0b7d381d18e3..c39b05c44fc0 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm @@ -16,6 +16,8 @@ #define COMSIG_ORGAN_SURGICALLY_INSERTED "organ_surgically_inserted" /// Called when an organ finishes inserting into a bodypart (obj/item/bodypart/limb, movement_flags) #define COMSIG_ORGAN_BODYPART_INSERTED "organ_bodypart_inserted" +/// Called when an organ finishes removing from a bodypart (obj/item/bodypart/limb, movement_flags) +#define COMSIG_ORGAN_BODYPART_REMOVED "organ_bodypart_removed" /// Called when a organ's damage is adjusted apply_organ_damage (damage_amount, maximum, required_organ_flag) #define COMSIG_ORGAN_ADJUST_DAMAGE "organ_adjust_damage" @@ -401,3 +403,6 @@ /// From /mob/living/changeNext_move() : (next_move, delay) #define COMSIG_LIVING_CHANGENEXT_MOVE "living_changenext_move" + +/// From /mob/living/proc/cause_hallucination(): (datum/hallucination) +#define COMSIG_LIVING_HALLUCINATING "living_hallucinating" diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm index dc1f639baf75..3c3685badbf5 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm @@ -161,6 +161,11 @@ #define COMPONENT_EMOTE_COOLDOWN_BYPASS (1<<0) ///from /mob/living/emote(): () #define COMSIG_MOB_EMOTE "mob_emote" +///from base of datum/emote/get_sound(): (key, list/sounds) +#define COMSIG_MOB_EMOTE_SOUND(key) "mob_emote_sound_[key]" + #define EMOTE_SOUND_TONGUE 1 + #define EMOTE_SOUND_MASK 2 + #define EMOTE_SOUND_STATUS_EFFECT 3 ///from base of mob/swap_hand(): (obj/item/currently_held_item) #define COMSIG_MOB_SWAPPING_HANDS "mob_swapping_hands" #define COMPONENT_BLOCK_SWAP (1<<0) diff --git a/code/__DEFINES/dcs/signals/signals_reagent.dm b/code/__DEFINES/dcs/signals/signals_reagent.dm index 61b0e95b0a74..72eadd2cd83f 100644 --- a/code/__DEFINES/dcs/signals/signals_reagent.dm +++ b/code/__DEFINES/dcs/signals/signals_reagent.dm @@ -20,6 +20,9 @@ #define COMSIG_REAGENT_ON_MERGE "reagent_on_merge" ///from base of [/datum/reagent/proc/on_transfer_creation(reagent, target_holder, new_reagent)]: (datum/reagents/target_holder, datum/reagent/new_reagent) #define COMSIG_REAGENT_ON_TRANSFER "reagent_on_transfer" +///send from seeds to any reagents within any produced plants when initially grown +///to allow reagents to modify themselves based on the plant they were grown in. (obj/item/seeds) +#define COMSIG_REAGENT_GROWN_IN_PLANT "reagent_grown_in_plant" ///from base of [/datum/reagents/proc/add_reagent] - Sent before the reagent is added: (reagenttype, amount, reagtemp, data, no_react) #define COMSIG_REAGENTS_PRE_ADD_REAGENT "reagents_pre_add_reagent" diff --git a/code/__DEFINES/food.dm b/code/__DEFINES/food.dm index e8f854201d77..76e352bacc58 100644 --- a/code/__DEFINES/food.dm +++ b/code/__DEFINES/food.dm @@ -285,3 +285,6 @@ DEFINE_BITFIELD(food_flags, list( #define MEATSLAB_PROCESSED_AMOUNT 3 /// This should be 1/3 of the amount found in a slab (a portion will be lost when rounding but it's negligible) #define MEATDISH_MATERIAL_AMOUNT (MEATSLAB_MATERIAL_AMOUNT / MEATSLAB_PROCESSED_AMOUNT) + +/// The multiplier for nutrition when a golem eats this particular type of food. +#define GOLEMFOOD_PREPARED_MEAL 1.3 diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index 2869abf37131..b29c0219dca9 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -69,6 +69,7 @@ #define HUD_MOB_MOOD "mob_mood" #define HUD_MOB_HEALTHDOLL "mob_healthdoll" #define HUD_MOB_MEMORIES "mob_memories" +#define HUD_MOB_SLIME_POWER "mob_slime_power" #define HUD_OOZE_NUTRITION_DISPLAY "ooze_nutrition_display" @@ -388,6 +389,10 @@ //Blobbernauts #define ui_blobbernaut_overmind_health "EAST-1:28,CENTER+0:19" +//Slimes +#define ui_slime_hunger "EAST-1:30,CENTER:8" +#define ui_slime_powerlevel "EAST-1:28,CENTER-2:18" + // Defines relating to action button positions /// Whatever the base action datum thinks is best diff --git a/code/__DEFINES/icon_smoothing.dm b/code/__DEFINES/icon_smoothing.dm index e4ad9cd53e72..2c3ea2ddc546 100644 --- a/code/__DEFINES/icon_smoothing.dm +++ b/code/__DEFINES/icon_smoothing.dm @@ -180,6 +180,7 @@ DEFINE_BITFIELD(smoothing_junction, list( #define SMOOTH_GROUP_WINDOW_FULLTILE_BRONZE S_OBJ(23) ///obj/structure/window/bronze/fulltile #define SMOOTH_GROUP_WINDOW_FULLTILE_PLASTITANIUM S_OBJ(24) ///turf/closed/indestructible/opsglass, /obj/structure/window/reinforced/plasma/plastitanium #define SMOOTH_GROUP_WINDOW_FULLTILE_SHUTTLE S_OBJ(25) ///obj/structure/window/reinforced/shuttle +#define SMOOTH_GROUP_WINDOW_FULLTILE_CULT S_OBJ(26) ///obj/structure/window/cult/fulltile #define SMOOTH_GROUP_LATTICE S_OBJ(31) ///obj/structure/lattice #define SMOOTH_GROUP_CATWALK S_OBJ(32) ///obj/structure/lattice/catwalk diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 9efef4af9112..2170795c10fe 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -142,7 +142,6 @@ GLOBAL_LIST_INIT(turfs_pass_meteor, typecacheof(list( #define isflyperson(A) (is_species(A, /datum/species/fly)) #define isjellyperson(A) (is_species(A, /datum/species/jelly)) #define isslimeperson(A) (is_species(A, /datum/species/jelly/slime)) -#define iszombie(A) (is_species(A, /datum/species/zombie)) #define isskeleton(A) (is_species(A, /datum/species/skeleton)) #define ismoth(A) (is_species(A, /datum/species/moth)) #define isfelinid(A) (is_species(A, /datum/species/human/felinid)) diff --git a/code/__DEFINES/keybinding.dm b/code/__DEFINES/keybinding.dm index 91ce64a5d4bb..d9f201f44e29 100644 --- a/code/__DEFINES/keybinding.dm +++ b/code/__DEFINES/keybinding.dm @@ -20,6 +20,7 @@ #define COMSIG_KB_ADMIN_DEADMIN_DOWN "keybinding_admin_deadmin_down" #define COMSIG_KB_ADMIN_READMIN_DOWN "keybinding_admin_readmin_down" #define COMSIG_KB_ADMIN_VIEWTAGS_DOWN "keybinding_admin_viewtags_down" +#define COMSIG_KB_ADMIN_VERBPANEL_DOWN "keybinding_admin_verbpanel_down" //Carbon #define COMSIG_KB_CARBON_HOLDRUNMOVEINTENT_DOWN "keybinding_carbon_holdrunmoveintent_down" diff --git a/code/__DEFINES/mobfactions.dm b/code/__DEFINES/mobfactions.dm index 9a3be60c5c7f..5a5ab6c63b8c 100644 --- a/code/__DEFINES/mobfactions.dm +++ b/code/__DEFINES/mobfactions.dm @@ -91,6 +91,9 @@ #define FACTION_RAPTOR "raptor" ///holy faction, for anything part of the church #define FACTION_HOLY "holy" +/// Creatures that are spawned on the escape shuttle +#define FACTION_SHUTTLE "shuttle" + // Antagonist factions /// Cultists and their constructs diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 48d2b0df0815..09fbe8a9fcbd 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -29,32 +29,12 @@ /// Determines the rate at which humans lose blood when they have the blood deficiency quirk. The default is BLOOD_REGEN_FACTOR + BLOOD_DEFICIENCY_MODIFIER. #define BLOOD_DEFICIENCY_MODIFIER 0.025 +/// Determines how high saline can bring up your blood volume +#define SALINE_DILUTION_CAP BLOOD_VOLUME_NORMAL + /// Temperature at which blood loss and regen stops. [/mob/living/carbon/human/proc/handle_blood] #define BLOOD_STOP_TEMP 225 -// Bloodtype defines -#define BLOOD_TYPE_A_MINUS "A-" -#define BLOOD_TYPE_A_PLUS "A+" -#define BLOOD_TYPE_B_MINUS "B-" -#define BLOOD_TYPE_B_PLUS "B+" -#define BLOOD_TYPE_AB_MINUS "AB-" -#define BLOOD_TYPE_AB_PLUS "AB+" -#define BLOOD_TYPE_O_MINUS "O-" -#define BLOOD_TYPE_O_PLUS "O+" -#define BLOOD_TYPE_UNIVERSAL "U" -#define BLOOD_TYPE_LIZARD "L" -#define BLOOD_TYPE_VAMPIRE "V" -#define BLOOD_TYPE_ANIMAL "Y-" -#define BLOOD_TYPE_ETHEREAL "LE" -#define BLOOD_TYPE_TOX "TOX" -#define BLOOD_TYPE_OIL "Oil" -#define BLOOD_TYPE_MEAT "MT-" -#define BLOOD_TYPE_CLOWN "C" -#define BLOOD_TYPE_XENO "X*" -#define BLOOD_TYPE_H2O "H2O" -#define BLOOD_TYPE_SNAIL "S" -#define BLOOD_TYPE_KINDRED "V+" // DARKPACK EDIT ADD - Vitae - // Blood exposure behavior flag defines /// Add our DNA to turfs/mobs/items, does not correlate with adding decals/overlays /// mob/turf/item flags will add DNA when triggered even if this flag is false @@ -224,10 +204,7 @@ #define SPECIES_SKELETON "skeleton" #define SPECIES_SNAIL "snail" #define SPECIES_VAMPIRE "vampire" -#define SPECIES_ZOMBIE "rotten2" // DARKPACK EDIT CHANGE - ORIGINAL: #define SPECIES_ZOMBIE "zombie" -#define SPECIES_ZOMBIE_INFECTIOUS "memezombie" -#define SPECIES_ZOMBIE_INFECTIOUS_MINDLESS "mindless_memezombie" -#define SPECIES_ZOMBIE_KROKODIL "krokodil_zombie" +#define SPECIES_ZOMBIE "zombie" #define SPECIES_VOIDWALKER "voidwalker" // Like species IDs, but not specifically attached a species. @@ -381,6 +358,9 @@ #define CRYSTALIZE_STAGE_ENCROACHING 300 //In switches #define CRYSTALIZE_STAGE_SMALL 600 //Because they're not static +///Max growth for a xeno larva to evolve into a regular xeno. This is used as % based. +#define XENOMORPH_MAX_GROWTH 100 + //Slime evolution threshold. Controls how fast slimes can split/grow #define SLIME_EVOLUTION_THRESHOLD 10 @@ -1120,6 +1100,8 @@ GLOBAL_ALIST_INIT(human_heights_to_offsets, alist( /// Distance which you can see someone's ID card /// Short enough that you can inspect over tables (bartender checking age) #define ID_EXAMINE_DISTANCE 3 +/// Distance which you can get the href to remove embeds or similar from someone +#define CARBON_EXAMINE_EMBEDDING_MAX_DIST 4 GLOBAL_LIST_INIT(regal_rat_minion_commands, list( /datum/pet_command/idle, diff --git a/code/__DEFINES/research.dm b/code/__DEFINES/research.dm index b6708c7568c3..8c16841b6b30 100644 --- a/code/__DEFINES/research.dm +++ b/code/__DEFINES/research.dm @@ -1,5 +1,12 @@ -/// For instances where we don't want a design showing up due to it being for debug/sanity purposes -#define DESIGN_ID_IGNORE "IGNORE_THIS_DESIGN" +// Techweb node flags +/// Every techweb starts off with this node +#define TECHWEB_NODE_STARTER (1<<0) +/// This node cannot be seen in the techweb +#define TECHWEB_NODE_HIDDEN (1<<1) +/// This is a BEPIS node. Only exists so we can add/remove from the pool of bepis nodes in the middle of a round +#define TECHWEB_NODE_EXPERIMENTAL (1<<2) +/// This node shows up on the autowiki +#define TECHWEB_NODE_WIKI (1<<3) ///The object printed from this design won't get the mats used to make it. Default setting for stacks unless specified otherwise #define DESIGN_DONT_INHERIT_MATS 0 @@ -11,20 +18,20 @@ ///The object printed from this design gets the mats used to make it but skips the unit test. #define DESIGN_INHERIT_MATS_SPECIAL 2 -//! Techweb names for new point types. Can be used to define specific point values for specific types of research (science, security, engineering, etc.) +/// Techweb names for new point types. Can be used to define specific point values for specific types of research (science, security, engineering, etc.) #define TECHWEB_POINT_TYPE_GENERIC "General Research" -//! Amount of points required to unlock nodes of corresponding tiers +// Amount of points required to unlock nodes of corresponding tiers #define TECHWEB_TIER_1_POINTS 40 #define TECHWEB_TIER_2_POINTS 80 #define TECHWEB_TIER_3_POINTS 120 #define TECHWEB_TIER_4_POINTS 160 #define TECHWEB_TIER_5_POINTS 200 -//! Amount of points gained per second by a single R&D server, see: [research][code/controllers/subsystem/research.dm] +// Amount of points gained per second by a single R&D server, see: [research][code/controllers/subsystem/research.dm] #define TECHWEB_SINGLE_SERVER_INCOME 1 -//! Swab cell line types +// Swab cell line types #define CELL_LINE_TABLE_SLUDGE "cell_line_sludge_table" #define CELL_LINE_TABLE_MOLD "cell_line_mold_table" #define CELL_LINE_TABLE_MOIST "cell_line_moist_table" @@ -32,7 +39,7 @@ #define CELL_LINE_TABLE_CLOWN "cell_line_clown_table" #define CELL_LINE_TABLE_ALGAE "cell_line_algae_table" -//! Biopsy cell line types +// Biopsy cell line types #define CELL_LINE_TABLE_BEAR "cell_line_bear_table" #define CELL_LINE_TABLE_BLOBBERNAUT "cell_line_blobbernaut_table" #define CELL_LINE_TABLE_BLOBSPORE "cell_line_blobspore_table" diff --git a/code/__DEFINES/research/techweb_nodes.dm b/code/__DEFINES/research/techweb_nodes.dm deleted file mode 100644 index 207603d78d39..000000000000 --- a/code/__DEFINES/research/techweb_nodes.dm +++ /dev/null @@ -1,124 +0,0 @@ -#define TECHWEB_NODE_AI "ai" -#define TECHWEB_NODE_AI_LAWS "ai_laws" -#define TECHWEB_NODE_ALIEN_ENGI "alien_engi" -#define TECHWEB_NODE_ALIEN_SURGERY "alien_surgery" -#define TECHWEB_NODE_ALIENTECH "alientech" -#define TECHWEB_NODE_ANOMALY_RESEARCH "anomaly_research" -#define TECHWEB_NODE_ANOMALY_SHELLS "anomaly_shells" -#define TECHWEB_NODE_APPLIED_BLUESPACE "applied_bluespace" -#define TECHWEB_NODE_ATMOS "atmos" -#define TECHWEB_NODE_AUGMENTATION "augmentation" -#define TECHWEB_NODE_AUS_SECURITY "aus_security" -#define TECHWEB_NODE_BASIC_ARMS "basic_arms" -#define TECHWEB_NODE_BCI "bci" -#define TECHWEB_NODE_BEAM_WEAPONS "beam_weapons" -#define TECHWEB_NODE_BIO_SCAN "bio_scan" -#define TECHWEB_NODE_BITRUNNING "bitrunning" -#define TECHWEB_NODE_MECH_EQUIP_BLUESPACE "mech_equip_bluespace" -#define TECHWEB_NODE_BLUESPACE_THEORY "bluespace_theory" -#define TECHWEB_NODE_BLUESPACE_TRAVEL "bluespace_travel" -#define TECHWEB_NODE_BORG_ENGI "borg_engi" -#define TECHWEB_NODE_BORG_MEDICAL "borg_medical" -#define TECHWEB_NODE_BORG_MINING "borg_mining" -#define TECHWEB_NODE_BORG_SERVICES "borg_services" -#define TECHWEB_NODE_BORG_UTILITY "borg_utility" -#define TECHWEB_NODE_BOTANY_EQUIP "botany_equip" -#define TECHWEB_NODE_CAFETERIA_EQUIP "cafeteria_equip" -#define TECHWEB_NODE_CHEM_SYNTHESIS "chem_synthesis" -#define TECHWEB_NODE_CIRCUIT_SHELLS "circuit_shells" -#define TECHWEB_NODE_COMBAT_IMPLANTS "combat_implants" -#define TECHWEB_NODE_CONSOLES "consoles" -#define TECHWEB_NODE_CONSTRUCTION "construction" -#define TECHWEB_NODE_CRYOSTASIS "cryostasis" -#define TECHWEB_NODE_CYBER_IMPLANTS "cyber_implants" -#define TECHWEB_NODE_CYBER_ORGANS "cyber_organs" -#define TECHWEB_NODE_CYBER_ORGANS_ADV "cyber_organs_adv" -#define TECHWEB_NODE_CYBER_ORGANS_UPGRADED "cyber_organs_upgraded" -#define TECHWEB_NODE_CYBERNETICS "cybernetics" -#define TECHWEB_NODE_CYTOLOGY "cytology" -#define TECHWEB_NODE_DONK_PRODUCTS "donk_products" -#define TECHWEB_NODE_ELECTRIC_WEAPONS "electric_weapons" -#define TECHWEB_NODE_ENERGY_MANIPULATION "energy_manipulation" -#define TECHWEB_NODE_EXODRONE "exodrone" -#define TECHWEB_NODE_EXOTIC_AMMO "exotic_ammo" -#define TECHWEB_NODE_EXP_TOOLS "exp_tools" -#define TECHWEB_NODE_EXPLOSIVES "explosives" -#define TECHWEB_NODE_EXTREME_OFFICE "extreme_office" -#define TECHWEB_NODE_FISHING_ANOMALOUS "fishing_anomalous" -#define TECHWEB_NODE_FISHING_EQUIP "fishing_equip" -#define TECHWEB_NODE_FISHING_EQUIP_ADV "fishing_equip_adv" -#define TECHWEB_NODE_FOOD_PROC "food_proc" -#define TECHWEB_NODE_FUNDIMENTAL_SCI "fundimental_sci" -#define TECHWEB_NODE_FUSION "fusion" -#define TECHWEB_NODE_GAMING "gaming" -#define TECHWEB_NODE_GAS_COMPRESSION "gas_compression" -#define TECHWEB_NODE_GENE_ENGINEERING "gene_engineering" -#define TECHWEB_NODE_HOLOGRAPHICS "holographics" -#define TECHWEB_NODE_HUD "hud" -#define TECHWEB_NODE_HYDROPONICS "hydroponics" -#define TECHWEB_NODE_INTERGRATED_TOOLSETS "intergrated_toolsets" -#define TECHWEB_NODE_INTERROGATION "interrogation" -#define TECHWEB_NODE_LIGHT_APPS "light_apps" -#define TECHWEB_NODE_LOW_PRESSURE_EXCAVATION "low_pressure_excavation" -#define TECHWEB_NODE_MARINE_UTIL "marine_util" -#define TECHWEB_NODE_MATERIAL_PROC "material_proc" -#define TECHWEB_NODE_MECH_ASSAULT "mech_assault" -#define TECHWEB_NODE_MECH_ASSEMBLY "mech_assembly" -#define TECHWEB_NODE_MECH_CLOWN "mech_clown" -#define TECHWEB_NODE_MECH_COMBAT "mech_combat" -#define TECHWEB_NODE_MECH_ENERGY_GUNS "mech_energy_guns" -#define TECHWEB_NODE_MECH_EQUIPMENT "mech_equipment" -#define TECHWEB_NODE_MECH_FIREARMS "mech_firearms" -#define TECHWEB_NODE_MECH_HEAVY "mech_heavy" -#define TECHWEB_NODE_MECH_HEAVY_ARMS "mech_heavy_arms" -#define TECHWEB_NODE_MECH_INFILTRATOR "mech_infiltrator" -#define TECHWEB_NODE_MECH_LIGHT "mech_light" -#define TECHWEB_NODE_MECH_MEDICAL "mech_medical" -#define TECHWEB_NODE_MECH_MINING "mech_mining" -#define TECHWEB_NODE_MEDBAY_EQUIP "medbay_equip" -#define TECHWEB_NODE_MEDBAY_EQUIP_ADV "medbay_equip_adv" -#define TECHWEB_NODE_MINING "mining" -#define TECHWEB_NODE_MINING_ADV "mining_adv" -#define TECHWEB_NODE_MOD_ANOMALY "mod_anomaly" -#define TECHWEB_NODE_MOD_ENGI "mod_engi" -#define TECHWEB_NODE_MOD_ENGI_ADV "mod_engi_adv" -#define TECHWEB_NODE_MOD_ENTERTAINMENT "mod_entertainment" -#define TECHWEB_NODE_MOD_EQUIP "mod_equip" -#define TECHWEB_NODE_MOD_SERVICE "mod_service" -#define TECHWEB_NODE_MOD_EXPERIMENTAL "mod_experimental" -#define TECHWEB_NODE_MOD_MEDICAL "mod_medical" -#define TECHWEB_NODE_MOD_MEDICAL_ADV "mod_medical_adv" -#define TECHWEB_NODE_MOD_SECURITY "mod_security" -#define TECHWEB_NODE_MOD_SUIT "mod_suit" -#define TECHWEB_NODE_NIGHT_VISION "night_vision" -#define TECHWEB_NODE_OFFICE_EQUIP "office_equip" -#define TECHWEB_NODE_OLDSTATION_SURGERY "oldstation_surgery" -#define TECHWEB_NODE_PARTS "parts" -#define TECHWEB_NODE_PARTS_ADV "parts_adv" -#define TECHWEB_NODE_PARTS_BLUESPACE "parts_bluespace" -#define TECHWEB_NODE_PARTS_UPG "parts_upg" -#define TECHWEB_NODE_PASSIVE_IMPLANTS "passive_implants" -#define TECHWEB_NODE_PLASMA_CONTROL "plasma_control" -#define TECHWEB_NODE_PLASMA_MINING "plasma_mining" -#define TECHWEB_NODE_POSITRONIC_SPHERE "positronic_sphere" -#define TECHWEB_NODE_PROGRAMMED_ROBOT "programmed_robot" -#define TECHWEB_NODE_PROGRAMMED_SERVER "programmed_server" -#define TECHWEB_NODE_PROGRAMMING "programming" -#define TECHWEB_NODE_RCD_UPGRADE "rcd_upgrade" -#define TECHWEB_NODE_RIOT_SUPRESSION "riot_supression" -#define TECHWEB_NODE_ROBOTICS "robotics" -#define TECHWEB_NODE_SANITATION "sanitation" -#define TECHWEB_NODE_SEC_EQUIP "sec_equip" -#define TECHWEB_NODE_SELECTION "selection" -#define TECHWEB_NODE_SHUTTLE_ENG "shuttle_eng" -#define TECHWEB_NODE_SPEC_ENG "spec_eng" -#define TECHWEB_NODE_STICKY_ADVANCED "sticky_advanced" -#define TECHWEB_NODE_SURGERY "surgery" -#define TECHWEB_NODE_SURGERY_ADV "surgery_adv" -#define TECHWEB_NODE_SURGERY_EXP "surgery_exp" -#define TECHWEB_NODE_SURGERY_TOOLS "surgery_tools" -#define TECHWEB_NODE_SYNDICATE_BASIC "syndicate_basic" -#define TECHWEB_NODE_TACKLE_ADVANCED "tackle_advanced" -#define TECHWEB_NODE_TELECOMS "telecoms" -#define TECHWEB_NODE_UNREGULATED_BLUESPACE "unregulated_bluespace" -#define TECHWEB_NODE_XENOBIOLOGY "xenobiology" diff --git a/code/__DEFINES/shuttles.dm b/code/__DEFINES/shuttles.dm index 0aae3db833d2..3a1883840021 100644 --- a/code/__DEFINES/shuttles.dm +++ b/code/__DEFINES/shuttles.dm @@ -100,20 +100,22 @@ #define SHUTTLE_DEFAULT_UNDERLYING_AREA /area/space /// Shuttle unlocks -// Needs Alien Technology researched. +/// Needs Alien Technology researched. #define SHUTTLE_UNLOCK_ALIENTECH "abductor" -// Needs bubblegum to die. +/// Needs bubblegum to die. #define SHUTTLE_UNLOCK_BUBBLEGUM "bubblegum" -// Needs one to set the holodeck to Medieval Sim. +/// Needs one to set the holodeck to Medieval Sim. #define SHUTTLE_UNLOCK_MEDISIM "holodeck" -// Needs a rune to be cleared by a null rod. +/// Needs a rune to be cleared by a null rod. #define SHUTTLE_UNLOCK_NARNAR "narnar" -// Needs someone to be polymorphed - Pride Mirror, Magic Mirror, Race Swap, Polymorph Staff/Wand. Badmin Mirror doesn't count, neither does xenobio. +/// Needs someone to be polymorphed - Pride Mirror, Magic Mirror, Race Swap, Polymorph Staff/Wand. Badmin Mirror doesn't count, neither does xenobio. #define SHUTTLE_UNLOCK_WABBAJACK "wabbajack" -// Needs cargo budget to be almost empty to be purchasable. +/// Needs cargo budget to be almost empty to be purchasable. #define SHUTTLE_UNLOCK_SCRAPHEAP "scrapheap" -// Needs biohazard to be triggered - Blob, Zombies, or a Severe Disease +/// Needs biohazard to be triggered - Blob, Zombies, or a Severe Disease #define SHUTTLE_UNLOCK_TOMBSTONE "tombstone" +/// Needs all samples for station's DNA vault goal to be completed. +#define SHUTTLE_UNLOCK_ARK "ark" //Shuttle Events diff --git a/code/__DEFINES/sound.dm b/code/__DEFINES/sound.dm index e1b290f773f9..3bdac71b5f70 100644 --- a/code/__DEFINES/sound.dm +++ b/code/__DEFINES/sound.dm @@ -299,6 +299,7 @@ GLOBAL_LIST_EMPTY(sfx_datum_by_key) #define SFX_HARD_HAT_DROP "hard_hat_drop" #define SFX_HARD_HAT_EQUIP "hard_hat_equip" #define SFX_ALIEN_SPIT_ACID "alien_split_acid" +#define SFX_HEAVY_DROP "heavy_drop" // Standard is 44.1khz #define MIN_EMOTE_PITCH 40000 diff --git a/code/__DEFINES/spatial_gridmap.dm b/code/__DEFINES/spatial_gridmap.dm index 97a6f9915399..5abf2b984903 100644 --- a/code/__DEFINES/spatial_gridmap.dm +++ b/code/__DEFINES/spatial_gridmap.dm @@ -8,13 +8,13 @@ /// number of grid cells per x or y side of all z levels. pass in world.maxx or world.maxy #define SPATIAL_GRID_CELLS_PER_SIDE(world_bounds) GET_SPATIAL_INDEX(world_bounds) -//grid contents channels +// Grid contents channels -///everything that is hearing sensitive is stored in this channel +/// Everything that is hearing sensitive is stored in this channel #define SPATIAL_GRID_CONTENTS_TYPE_HEARING RECURSIVE_CONTENTS_HEARING_SENSITIVE -///every movable that has a client in it is stored in this channel +/// Every movable that has a client in it is stored in this channel #define SPATIAL_GRID_CONTENTS_TYPE_CLIENTS RECURSIVE_CONTENTS_CLIENT_MOBS -///all atmos machines are stored in this channel (I'm sorry kyler) +/// All atmos machines are stored in this channel (I'm sorry kyler) #define SPATIAL_GRID_CONTENTS_TYPE_ATMOS "spatial_grid_contents_type_atmos" #define ALL_CONTENTS_OF_CELL(cell) (cell.hearing_contents | cell.client_contents | cell.atmos_contents) @@ -41,11 +41,19 @@ cell_contents_list |= movable_or_list; \ }; +#define GRID_CELL_ASSOC_SET(cell_contents_list, key, value) \ + if(!length(cell_contents_list)) { \ + cell_contents_list = list(); \ + cell_contents_list[key] = value; \ + } else { \ + cell_contents_list[key] = value; \ + }; + //dont use these outside of SSspatial_grid's scope use the procs it has for this purpose #define GRID_CELL_REMOVE(cell_contents_list, movable_or_list) \ cell_contents_list -= movable_or_list; \ if(!length(cell_contents_list)) {\ - cell_contents_list = dummy_list; \ + cell_contents_list = SSspatial_grid.dummy_list; \ }; ///remove from every list diff --git a/code/__DEFINES/surgery.dm b/code/__DEFINES/surgery.dm index 925cf37017db..fe8f565872f4 100644 --- a/code/__DEFINES/surgery.dm +++ b/code/__DEFINES/surgery.dm @@ -43,6 +43,8 @@ #define ORGAN_MUTANT (1<<15) /// The organ has been chomped or otherwise rendered unusable. #define ORGAN_UNUSABLE (1<<16) +/// Used for organs that aren't really real organs, but holders for stuff and whatnot +#define ORGAN_FAKE (1<<17) /// Organ flags that correspond to bodytypes #define ORGAN_TYPE_FLAGS (ORGAN_ORGANIC | ORGAN_ROBOTIC | ORGAN_MINERAL | ORGAN_GHOST) @@ -80,6 +82,12 @@ ///Bodypart does not get replaced during set_species() #define BP_BLOCK_CHANGE_SPECIES (1<<0) +// is_husked values +/// Husked from burns +#define HUSKED_BURN 1 +/// Husked from zombification +#define HUSKED_ZOMBIE 2 + // Flags for the head_flags var on /obj/item/bodypart/head /// Head can have hair #define HEAD_HAIR (1<<0) diff --git a/code/__DEFINES/tgui.dm b/code/__DEFINES/tgui.dm index f5786c75a5dd..c69d4b326ccc 100644 --- a/code/__DEFINES/tgui.dm +++ b/code/__DEFINES/tgui.dm @@ -49,6 +49,14 @@ "%7b%22type%22%3a%22[type]%22%2c%22payload%22%3a[url_encode(json_encode(payload))]%7d" \ ) +/// Pre-encoded TGUI message for verbs/focus with null payload, used in the Tab macro. +/// This is TGUI_CREATE_MESSAGE("verbs/focus", null), unit tested in tgui_panel_focus_message. +#define TGUI_PANEL_FOCUS_MESSAGE "%7b%22type%22%3a%22verbs/focus%22%2c%22payload%22%3anull%7d" + +/// Pre-encoded TGUI message for verbs/clear with null payload, used in the Backspace macro. +/// This is TGUI_CREATE_MESSAGE("verbs/clear", null), unit tested in tgui_panel_clear_message. +#define TGUI_PANEL_CLEAR_MESSAGE "%7b%22type%22%3a%22verbs/clear%22%2c%22payload%22%3anull%7d" + /** * Gets a ui_state that checks to see if the user has specific admin permissions. * diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index be043a838eeb..02bf160709fe 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -96,6 +96,12 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_CURSED "cursed" /// Emotemute. Can't... emote. #define TRAIT_EMOTEMUTE "emotemute" +/// Mobs with this trait are allowed to use silicon emotes +#define TRAIT_SILICON_EMOTES_ALLOWED "silicon_emotes_allowed" +/// Mobs with this trait are allowed to use cat emotes +#define TRAIT_CAT_EMOTES_ALLOWED "cat_emotes_allowed" +/// Mobs with this trait are allowed to use moth emotes +#define TRAIT_MOTH_EMOTES_ALLOWED "moth_emotes_allowed" #define TRAIT_DEAF "deaf" #define TRAIT_FAT "fat" /// If you are fat, you no longer get the slowdown from it @@ -229,8 +235,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_LIVERLESS_METABOLISM "liverless_metabolism" /// This carbon can't be overdosed by chems #define TRAIT_OVERDOSEIMMUNE "overdose_immune" -/// Humans with this trait cannot be turned into zombies -#define TRAIT_NO_ZOMBIFY "no_zombify" /// Carbons with this trait can't have their DNA copied by diseases nor changelings #define TRAIT_NO_DNA_COPY "no_dna_copy" /// Carbons with this trait can't have their DNA scrambled by genetics or a disease retrovirus. @@ -333,8 +337,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_EXAMINE_FITNESS "reveal_power_level" /// These mobs have particularly hygienic tongues #define TRAIT_WOUND_LICKER "wound_licker" -/// Mobs with this trait are allowed to use silicon emotes -#define TRAIT_SILICON_EMOTES_ALLOWED "silicon_emotes_allowed" /// Mobs with this trait can tell when other mobs whisper even if their mouth is covered. They still can't tell what was whispered though. #define TRAIT_SEE_MASK_WHISPER "see_mask_whisper" @@ -1691,6 +1693,12 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Mobs with this trait will always have be a priority target for mining mobs #define TRAIT_MINING_AGGRO "mining_aggro" +/// Mob does not regulate core temperature +#define TRAIT_COLD_BLOODED "cold_blooded" + +/// Mob is always considered dead when checking objectives +#define TRAIT_NEVER_CONSIDERED_ALIVE "never_considered_alive" + /// Don't show the thinking indicator and therefore the typing indicator when we are about to type something... #define TRAIT_HIDE_THINKING_INDICATOR "hide_thinking_indicator" diff --git a/code/__DEFINES/transport.dm b/code/__DEFINES/transport.dm index 0a36c27979da..b2d96689c94d 100644 --- a/code/__DEFINES/transport.dm +++ b/code/__DEFINES/transport.dm @@ -117,3 +117,8 @@ DEFINE_BITFIELD(request_flags, list( #define TRANSPORT_REMOTE_FAULT 3 #define TRANSPORT_LOCAL_FAULT 4 #define TRANSPORT_BREAKDOWN_RATE 0.0175 + +// Tram controls settings +#define NORMAL_WINDOW "normal_window" +#define SPLIT_WINDOW "split_window" +#define STANDALONE "standalone" diff --git a/code/__DEFINES/verb.dm b/code/__DEFINES/verb.dm index 1c470aa5c1ab..e35ea8ed563d 100644 --- a/code/__DEFINES/verb.dm +++ b/code/__DEFINES/verb.dm @@ -1,12 +1,15 @@ +#define VERB_ARG_CONTEXT_TARGET_KEY "__context_target__" + /** * Defines a game verb with an associated /datum/verb_metadata. * * Usage: - * GAME_VERB(/client, ooc, "OOC", "Send a message in OOC.", "OOC", msg as text) - * // verb body + * GAME_VERB(/client, ooc, "OOC", "Send a message in OOC.", "OOC") + * VERB_ARG(msg, VERB_ARG_TYPE_TEXT, VERB_ARG_SOURCE_INPUT) + * // verb body using msg */ -#define _GAME_VERB(owner_type, verb_path_name, verb_name, verb_desc, verb_category, show_in_context_menu, is_hidden, is_instant, verb_args...) \ +#define _GAME_VERB(owner_type, verb_path_name, verb_name, verb_desc, verb_category, show_in_context_menu, is_hidden, is_instant) \ /datum/verb_metadata##owner_type/##verb_path_name \ { \ name = ##verb_name; \ @@ -15,7 +18,7 @@ verb_path = ##owner_type/verb/##verb_path_name; \ body_path = ##owner_type/proc/__gvb_##verb_path_name; \ }; \ -##owner_type/verb/##verb_path_name(##verb_args) \ +##owner_type/verb/##verb_path_name() \ { \ set name = ##verb_name; \ set desc = ##verb_desc; \ @@ -23,23 +26,71 @@ set popup_menu = ##show_in_context_menu; \ set category = ##verb_category; \ set instant = ##is_instant; \ - __gvb_##verb_path_name(arglist(args)); \ + INVOKE_ASYNC(SSverbs, TYPE_PROC_REF(/datum/controller/subsystem/verbs, invoke_verb), src, ##owner_type/verb/##verb_path_name, args, usr); \ }; \ -##owner_type/proc/__gvb_##verb_path_name(##verb_args) +##owner_type/proc/__gvb_##verb_path_name(list/structured_args) + +#define GAME_VERB(owner_type, verb_path_name, verb_name, verb_category) \ +_GAME_VERB(owner_type, verb_path_name, verb_name, "", verb_category, TRUE, FALSE, FALSE) + +#define GAME_VERB_DESC(owner_type, verb_path_name, verb_name, verb_desc, verb_category) \ +_GAME_VERB(owner_type, verb_path_name, verb_name, verb_desc, verb_category, TRUE, FALSE, FALSE) + +#define _GAME_VERB_CONTEXT(owner_type, verb_path_name, verb_name, verb_desc, verb_category, context_type) \ +/datum/verb_metadata##owner_type/##verb_path_name \ +{ \ + name = ##verb_name; \ + description = ##verb_desc; \ + category = ##verb_category; \ + verb_path = ##owner_type/verb/##verb_path_name; \ + body_path = ##owner_type/proc/__gvb_##verb_path_name; \ +}; \ +##owner_type/verb/##verb_path_name(var##context_type/__context_target in world) \ +{ \ + set name = ##verb_name; \ + set desc = ##verb_desc; \ + set hidden = FALSE; \ + set popup_menu = TRUE; \ + set category = ##verb_category; \ + if(__context_target) { var/list/__args = args.Copy(); __args += list(VERB_ARG_CONTEXT_TARGET_KEY = __context_target); INVOKE_ASYNC(SSverbs, TYPE_PROC_REF(/datum/controller/subsystem/verbs, invoke_verb), src, ##owner_type/verb/##verb_path_name, __args, usr); } \ + else { INVOKE_ASYNC(SSverbs, TYPE_PROC_REF(/datum/controller/subsystem/verbs, invoke_verb), src, ##owner_type/verb/##verb_path_name, args, usr); }; \ +}; \ +##owner_type/proc/__gvb_##verb_path_name(list/structured_args) + +#define GAME_VERB_CONTEXT(owner_type, verb_path_name, verb_name, verb_desc, verb_category, context_type) \ +_GAME_VERB_CONTEXT(owner_type, verb_path_name, verb_name, verb_desc, verb_category, context_type) -#define GAME_VERB(owner_type, verb_path_name, verb_name, verb_category, verb_args...) \ -_GAME_VERB(owner_type, verb_path_name, verb_name, "", verb_category, TRUE, FALSE, FALSE, ##verb_args) +#define GAME_VERB_HIDDEN(owner_type, verb_path_name, verb_name) \ +_GAME_VERB(owner_type, verb_path_name, verb_name, "", null, FALSE, TRUE, FALSE) -#define GAME_VERB_DESC(owner_type, verb_path_name, verb_name, verb_desc, verb_category, verb_args...) \ -_GAME_VERB(owner_type, verb_path_name, verb_name, verb_desc, verb_category, TRUE, FALSE, FALSE, ##verb_args) +#define GAME_VERB_HIDDEN_INSTANT(owner_type, verb_path_name, verb_name) \ +_GAME_VERB(owner_type, verb_path_name, verb_name, "", null, FALSE, TRUE, TRUE) + +/// For where you still need native args, ie, when called directly from the skin or some BYOND function +#define _GAME_VERB_NATIVE(owner_type, verb_path_name, verb_name, verb_category, is_instant, verb_args...) \ +/datum/verb_metadata##owner_type/##verb_path_name \ +{ \ + name = ##verb_name; \ + category = ##verb_category; \ + verb_path = ##owner_type/verb/##verb_path_name; \ + body_path = ##owner_type/proc/__gvb_##verb_path_name; \ +}; \ +##owner_type/verb/##verb_path_name(##verb_args) \ +{ \ + set name = ##verb_name; \ + set hidden = TRUE; \ + set instant = ##is_instant; \ + __gvb_##verb_path_name(arglist(args)); \ +}; \ +##owner_type/proc/__gvb_##verb_path_name(##verb_args) -#define GAME_VERB_HIDDEN(owner_type, verb_path_name, verb_name, verb_args...) \ -_GAME_VERB(owner_type, verb_path_name, verb_name, "", null, FALSE, TRUE, FALSE, ##verb_args) +#define GAME_VERB_NATIVE(owner_type, verb_path_name, verb_name, verb_category, verb_args...) \ +_GAME_VERB_NATIVE(owner_type, verb_path_name, verb_name, verb_category, FALSE, ##verb_args) -#define GAME_VERB_HIDDEN_INSTANT(owner_type, verb_path_name, verb_name, verb_args...) \ -_GAME_VERB(owner_type, verb_path_name, verb_name, "", null, FALSE, TRUE, TRUE, ##verb_args) +#define GAME_VERB_NATIVE_INSTANT(owner_type, verb_path_name, verb_name, verb_category, verb_args...) \ +_GAME_VERB_NATIVE(owner_type, verb_path_name, verb_name, verb_category, TRUE, ##verb_args) -#define _GAME_VERB_PROC(owner_type, verb_path_name, verb_name, verb_desc, verb_category, show_in_context_menu, is_hidden, verb_args...) \ +#define _GAME_VERB_PROC(owner_type, verb_path_name, verb_name, verb_desc, verb_category, show_in_context_menu, is_hidden) \ /datum/verb_metadata##owner_type/##verb_path_name \ { \ name = ##verb_name; \ @@ -48,24 +99,24 @@ _GAME_VERB(owner_type, verb_path_name, verb_name, "", null, FALSE, TRUE, TRUE, # verb_path = ##owner_type/proc/##verb_path_name; \ body_path = ##owner_type/proc/__gvb_##verb_path_name; \ }; \ -##owner_type/proc/##verb_path_name(##verb_args) \ +##owner_type/proc/##verb_path_name() \ { \ set name = ##verb_name; \ set desc = ##verb_desc; \ set hidden = ##is_hidden; \ set popup_menu = ##show_in_context_menu; \ set category = ##verb_category; \ - __gvb_##verb_path_name(arglist(args)); \ + INVOKE_ASYNC(SSverbs, TYPE_PROC_REF(/datum/controller/subsystem/verbs, invoke_verb), src, ##owner_type/proc/##verb_path_name, args, usr); \ }; \ -##owner_type/proc/__gvb_##verb_path_name(##verb_args) +##owner_type/proc/__gvb_##verb_path_name(list/structured_args) -#define GAME_VERB_PROC(owner_type, verb_path_name, verb_name, verb_category, verb_args...) \ -_GAME_VERB_PROC(owner_type, verb_path_name, verb_name, "", verb_category, TRUE, FALSE, ##verb_args) +#define GAME_VERB_PROC(owner_type, verb_path_name, verb_name, verb_category) \ +_GAME_VERB_PROC(owner_type, verb_path_name, verb_name, "", verb_category, TRUE, FALSE) -#define GAME_VERB_PROC_DESC(owner_type, verb_path_name, verb_name, verb_desc, verb_category, verb_args...) \ -_GAME_VERB_PROC(owner_type, verb_path_name, verb_name, verb_desc, verb_category, TRUE, FALSE, ##verb_args) +#define GAME_VERB_PROC_DESC(owner_type, verb_path_name, verb_name, verb_desc, verb_category) \ +_GAME_VERB_PROC(owner_type, verb_path_name, verb_name, verb_desc, verb_category, TRUE, FALSE) -#define _GAME_VERB_SRC(owner_type, verb_path_name, src_value, verb_name, verb_desc, verb_category, show_in_context_menu, is_hidden, verb_args...) \ +#define _GAME_VERB_SRC(owner_type, verb_path_name, src_value, verb_name, verb_desc, verb_category, show_in_context_menu, is_hidden) \ /datum/verb_metadata##owner_type/##verb_path_name \ { \ name = ##verb_name; \ @@ -74,7 +125,7 @@ _GAME_VERB_PROC(owner_type, verb_path_name, verb_name, verb_desc, verb_category, verb_path = ##owner_type/verb/##verb_path_name; \ body_path = ##owner_type/proc/__gvb_##verb_path_name; \ }; \ -##owner_type/verb/##verb_path_name(##verb_args) \ +##owner_type/verb/##verb_path_name() \ { \ set name = ##verb_name; \ set desc = ##verb_desc; \ @@ -82,17 +133,17 @@ _GAME_VERB_PROC(owner_type, verb_path_name, verb_name, verb_desc, verb_category, set popup_menu = ##show_in_context_menu; \ set category = ##verb_category; \ set src in src_value; \ - __gvb_##verb_path_name(arglist(args)); \ + INVOKE_ASYNC(SSverbs, TYPE_PROC_REF(/datum/controller/subsystem/verbs, invoke_verb), src, ##owner_type/verb/##verb_path_name, args, usr); \ }; \ -##owner_type/proc/__gvb_##verb_path_name(##verb_args) +##owner_type/proc/__gvb_##verb_path_name(list/structured_args) -#define GAME_VERB_SRC(owner_type, verb_path_name, src_value, verb_name, verb_category, verb_args...) \ -_GAME_VERB_SRC(owner_type, verb_path_name, src_value, verb_name, "", verb_category, TRUE, FALSE, ##verb_args) +#define GAME_VERB_SRC(owner_type, verb_path_name, src_value, verb_name, verb_category) \ +_GAME_VERB_SRC(owner_type, verb_path_name, src_value, verb_name, "", verb_category, TRUE, FALSE) -#define GAME_VERB_SRC_DESC(owner_type, verb_path_name, src_value, verb_name, verb_desc, verb_category, verb_args...) \ -_GAME_VERB_SRC(owner_type, verb_path_name, src_value, verb_name, verb_desc, verb_category, TRUE, FALSE, ##verb_args) +#define GAME_VERB_SRC_DESC(owner_type, verb_path_name, src_value, verb_name, verb_desc, verb_category) \ +_GAME_VERB_SRC(owner_type, verb_path_name, src_value, verb_name, verb_desc, verb_category, TRUE, FALSE) -#define _GAME_VERB_GLOBAL_PROC(verb_path_name, verb_name, verb_desc, verb_category, is_hidden, verb_args...) \ +#define _GAME_VERB_GLOBAL_PROC(verb_path_name, verb_name, verb_desc, verb_category, is_hidden) \ /datum/verb_metadata/##verb_path_name \ { \ name = ##verb_name; \ @@ -101,19 +152,56 @@ _GAME_VERB_SRC(owner_type, verb_path_name, src_value, verb_name, verb_desc, verb verb_path = /proc/##verb_path_name; \ body_path = /proc/__gvb_##verb_path_name; \ }; \ -/proc/##verb_path_name(##verb_args) \ +/proc/##verb_path_name() \ { \ set name = ##verb_name; \ set desc = ##verb_desc; \ set hidden = ##is_hidden; \ set category = ##verb_category; \ - __gvb_##verb_path_name(arglist(args)); \ + INVOKE_ASYNC(SSverbs, TYPE_PROC_REF(/datum/controller/subsystem/verbs, invoke_verb), usr, /proc/##verb_path_name, args, usr); \ }; \ -/proc/__gvb_##verb_path_name(##verb_args) +/proc/__gvb_##verb_path_name(list/structured_args) -#define GAME_VERB_GLOBAL_PROC(verb_path_name, verb_name, verb_desc, verb_category, verb_args...) \ -_GAME_VERB_GLOBAL_PROC(verb_path_name, verb_name, verb_desc, verb_category, FALSE, ##verb_args) +#define GAME_VERB_GLOBAL_PROC(verb_path_name, verb_name, verb_desc, verb_category) \ +_GAME_VERB_GLOBAL_PROC(verb_path_name, verb_name, verb_desc, verb_category, FALSE) -#define INVOKE_GAME_VERB(target, owner_type, verb_path_name, args...) SSverbs.invoke(target, /datum/verb_metadata##owner_type/##verb_path_name, ##args) +#define INVOKE_GAME_VERB(target, caller, owner_type, verb_path_name, args...) SSverbs.invoke(target, /datum/verb_metadata##owner_type/##verb_path_name, caller, alist(##args)) #define ASSIGN_GAME_VERB(target, owner_type, verb_path_name) SSverbs.assign_verb(target, /datum/verb_metadata##owner_type/##verb_path_name) #define UNASSIGN_GAME_VERB(target, owner_type, verb_path_name) SSverbs.unassign_verb(target, /datum/verb_metadata##owner_type/##verb_path_name) + +/// Self-registers argument metadata at world init and extracts value from structured_args at runtime. +/// For primitive args: VERB_ARG(count, VERB_ARG_TYPE_NUM, VERB_ARG_SOURCE_INPUT) +/// For typed args: VERB_ARG_TYPED(target, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob/living) +#define VERB_ARG(name, arg_type, source) \ + var/static/____reg_##name = ____register_verb_arg(__TYPE__, __PROC__, #name, arg_type, null, source); \ + var/##name = structured_args[#name] + +#define VERB_ARG_TYPED(name, arg_type, source, type_path) \ + var/static/____reg_##name = ____register_verb_arg(__TYPE__, __PROC__, #name, arg_type, type_path, source); \ + var##type_path/##name = structured_args[#name] + +#define VERB_ARG_TYPE_TEXT (1<<0) +#define VERB_ARG_TYPE_NUM (1<<1) +#define VERB_ARG_TYPE_MESSAGE (1<<2) +#define VERB_ARG_TYPE_SOUND (1<<3) +#define VERB_ARG_TYPE_ICON (1<<4) +#define VERB_ARG_TYPE_MOB (1<<5) +#define VERB_ARG_TYPE_OBJ (1<<6) +#define VERB_ARG_TYPE_TURF (1<<7) +#define VERB_ARG_TYPE_AREA (1<<8) +#define VERB_ARG_TYPE_DATUM (1<<9) +#define VERB_ARG_TYPE_ATOM (1<<10) +#define VERB_ARG_TYPE_TYPEPATH (1<<11) + +#define VERB_ARG_TYPE_ENTITY (VERB_ARG_TYPE_MOB | VERB_ARG_TYPE_OBJ | VERB_ARG_TYPE_TURF | VERB_ARG_TYPE_AREA | VERB_ARG_TYPE_DATUM | VERB_ARG_TYPE_ATOM) + +/// Picks from a fixed list of options. Use with VERB_ARG_LIST. +#define VERB_ARG_LIST(name, options_list) \ + var/static/____reg_##name = ____register_verb_arg_list(__TYPE__, __PROC__, #name, options_list); \ + var/##name = structured_args[#name] + +// Argument source constants +#define VERB_ARG_SOURCE_INPUT "input" +#define VERB_ARG_SOURCE_WORLD "world" +#define VERB_ARG_SOURCE_VIEW "view" +#define VERB_ARG_SOURCE_LIST "list" diff --git a/code/__DEFINES/~darkpack/traits/declarations.dm b/code/__DEFINES/~darkpack/traits/declarations.dm index 9efc72beea54..419d5dcca57b 100644 --- a/code/__DEFINES/~darkpack/traits/declarations.dm +++ b/code/__DEFINES/~darkpack/traits/declarations.dm @@ -170,38 +170,41 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// If the mob can't have surgery done on it. See: Blood form Tzimisce #define TRAIT_SURGERY_INAPPLICABLE "surgery_inapplicable" // BELOW ARE ALL MERITS/FLAWS -#define TRAIT_ILLEGAL_IDENTITY "illegal_identity" // GOVERNMENT +#define TRAIT_ACUTE_HEARING "acute_hearing" #define TRAIT_ANIMAL_MUSK "animal_musk" -#define TRAIT_PERMAFANGS "permafangs" +#define TRAIT_BANNED_TRANSFORMATION "banned_transformation" +#define TRAIT_BEACON_OF_THE_UNHOLY "beacon_of_the_unholy" +#define TRAIT_BETRAYERS_MARK "betrayers_mark" +#define TRAIT_CALM_HEART "calm_heart" +#define TRAIT_DISFIGURED_APPEARANCE "disfigured_appearance" #define TRAIT_DULLFANGS "dullfangs" +#define TRAIT_EAT_FOOD "eat_food" +#define TRAIT_EFFICIENT_DIGESTION "efficient_digestion" +#define TRAIT_FAIR_GLABRO "fair_glabro" +#define TRAIT_GLOWING_EYES "glowing_eyes" +#define TRAIT_GRAVE_SMELL "grave_smell" +#define TRAIT_GRIP_OF_THE_DAMNED "grip_of_the_damned" +#define TRAIT_HORRIFIC_APPEARANCE "horrific_appearance" +#define TRAIT_HUGE_SIZE "huge_size" +#define TRAIT_ILLEGAL_IDENTITY "illegal_identity" // GOVERNMENT +#define TRAIT_MERIT_UNTAMABLE "merit_untamable" +#define TRAIT_METAMORPH "metamorph" +#define TRAIT_MONSTROUS "monstrous" #define TRAIT_ORGANOVORE "organovore" +#define TRAIT_PERMAFANGS "permafangs" +#define TRAIT_PIERCED_VEIL "pierced_veil" +#define TRAIT_PREY_EXCLUSION "prey_exclusion" +#define TRAIT_PROMETHEAN_CLAY "promethean_clay" #define TRAIT_SANGUINE_INCONGRUITY "sanguine_incongruity" -#define TRAIT_MONSTROUS "monstrous" -#define TRAIT_HORRIFIC_APPEARANCE "horrific_appearance" #define TRAIT_STILLNESS_OF_DEATH "stillness_of_death" -#define TRAIT_THIRD_EYE "third_eye" -#define TRAIT_PREY_EXCLUSION "prey_exclusion" -#define TRAIT_VICTIM_OF_THE_MASQUERADE "victim_of_the_masquerade" -#define TRAIT_VAMPIRE_TERRITORIAL "territorial" -#define TRAIT_BETRAYERS_MARK "betrayers_mark" -#define TRAIT_EFFICIENT_DIGESTION "efficient_digestion" -#define TRAIT_GRIP_OF_THE_DAMNED "grip_of_the_damned" #define TRAIT_THE_LARGEST_MAW "the_largest_maw" -#define TRAIT_PIERCED_VEIL "pierced_veil" -#define TRAIT_WEAK_WILLED "weak_willed" +#define TRAIT_THIRD_EYE "third_eye" +#define TRAIT_THIRST_OF_AGES "thirst_of_ages" #define TRAIT_TIME_SENSE "time_sense" -#define TRAIT_METAMORPH "metamorph" -#define TRAIT_MERIT_UNTAMABLE "merit_untamable" -#define TRAIT_FAIR_GLABRO "fair_glabro" -#define TRAIT_EAT_FOOD "eat_food" -#define TRAIT_CALM_HEART "calm_heart" -#define TRAIT_ACUTE_HEARING "acute_hearing" -#define TRAIT_DISFIGURED_APPEARANCE "disfigured_appearance" -#define TRAIT_GRAVE_SMELL "grave_smell" -#define TRAIT_GLOWING_EYES "glowing_eyes" -#define TRAIT_PROMETHEAN_CLAY "promethean_clay" #define TRAIT_UNCONTROLLABLE "uncontrollable" -#define TRAIT_THIRST_OF_AGES "thirst_of_ages" +#define TRAIT_VAMPIRE_TERRITORIAL "territorial" +#define TRAIT_VICTIM_OF_THE_MASQUERADE "victim_of_the_masquerade" +#define TRAIT_WEAK_WILLED "weak_willed" // Below are traits given by items/clothing being equiped or worn #define TRAIT_BRASSKNUCKLES "brassknuckles" diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index 9bc15ad46f52..a460cf656c77 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -49,7 +49,7 @@ */ ///Initialize the lazylist -#define LAZYINITLIST(L) if (!L) { L = list(); } +#define LAZYINITLIST(L) L ||= list(); ///If the provided list is empty, set it to null #define UNSETEMPTY(L) if (L && !length(L)) L = null ///If the provided key -> list is empty, remove it from the list @@ -59,25 +59,25 @@ ///Remove an item from the list, set the list to null if empty #define LAZYREMOVE(L, I) if(L) { L -= I; if(!length(L)) { L = null; } } ///Add an item to the list, if the list is null it will initialize it -#define LAZYADD(L, I) if(!L) { L = list(); } L += I; +#define LAZYADD(L, I) L ||= list(); L += I; ///Add an item to the list if not already present, if the list is null it will initialize it -#define LAZYOR(L, I) if(!L) { L = list(); } L |= I; +#define LAZYOR(L, I) L ||= list(); L |= I; ///Returns the key of the submitted item in the list #define LAZYFIND(L, V) (L?.Find(V)) ///returns L[I] if L exists and I is a valid index of L, runtimes if L is not a list #define LAZYACCESS(L, I) (L ? (isnum(I) ? (I > 0 && I <= length(L) ? L[I] : null) : L[I]) : null) ///Sets the item K to the value V, if the list is null it will initialize it -#define LAZYSET(L, K, V) if(!L) { L = list(); } L[K] = V; +#define LAZYSET(L, K, V) L ||= list(); L[K] = V; ///Sets the length of a lazylist -#define LAZYSETLEN(L, V) if (!L) { L = list(); } L.len = V; +#define LAZYSETLEN(L, V) L ||= list(); L.len = V; ///Returns the length of the list #define LAZYLEN(L) length(L) ///Sets a list to null #define LAZYNULL(L) L = null ///Adds to the item K the value V, if the list is null it will initialize it -#define LAZYADDASSOC(L, K, V) if(!L) { L = list(); } L[K] += V; +#define LAZYADDASSOC(L, K, V) L ||= list(); L[K] += V; ///This is used to add onto lazy assoc list when the value you're adding is a /list/. This one has extra safety over lazyaddassoc because the value could be null (and thus cant be used to += objects) -#define LAZYADDASSOCLIST(L, K, V) if(!L) { L = list(); } L[K] += list(V); +#define LAZYADDASSOCLIST(L, K, V) L ||= list(); L[K] += list(V); ///Removes the value V from the item K, if the item K is empty will remove it from the list, if the list is empty will set the list to null #define LAZYREMOVEASSOC(L, K, V) if(L?[K]) { L[K] -= V; if(!length(L[K])) L -= K; if(!length(L)) L = null; } ///Accesses an associative list, returns null if nothing is found @@ -105,6 +105,10 @@ } else { \ lazylist.Insert(index, value); \ } +/// Returns the smallest element in the lazy list, or default if the list is null +#define LAZYMAX(lazylist, default) (isnull(lazylist) ? default : max(lazylist)) +/// Returns the largest element in the lazy list, or default if the list is null +#define LAZYMIN(lazylist, default) (isnull(lazylist) ? default : min(lazylist)) ///Ensures the length of a list is at least I, prefilling it with V if needed. if V is a proc call, it is repeated for each new index so that list() can just make a new list for each item. #define LISTASSERTLEN(L, I, V...) \ @@ -275,15 +279,24 @@ * Arguments: * - [type_to_check][/datum]: An instance to check. * - [list_to_check][/list]: A list of typepaths to check the type_to_check against. - * - zebra: Whether to use the value of the matching type in the list instead of just returning true when a match is found. + * - zebra: Whether to use the value of the matching type (closest to our type) in the list instead of just returning true when a match is found. + * - return_first_match: If zebra is true, this will return the first match found, instead of the value of closest type */ -/proc/is_type_in_list(datum/type_to_check, list/list_to_check, zebra = FALSE) +/proc/is_type_in_list(datum/type_to_check, list/list_to_check, zebra = FALSE, return_first_match = FALSE) if(!LAZYLEN(list_to_check) || !type_to_check) return FALSE + . = FALSE + var/highest_matched_type for(var/type in list_to_check) - if(istype(type_to_check, type)) - return !zebra || list_to_check[type] // Subtypes must come first in zebra lists. - return FALSE + if(!istype(type_to_check, type)) + continue + if(!zebra) + return TRUE + if(return_first_match || type == type_to_check.type) + return list_to_check[type] + if(!highest_matched_type || ispath(type, highest_matched_type)) + . = list_to_check[type] + highest_matched_type = type /** * Checks for specific paths in a list. diff --git a/code/__HELPERS/events.dm b/code/__HELPERS/events.dm index 0a1d871681c8..b777176877e3 100644 --- a/code/__HELPERS/events.dm +++ b/code/__HELPERS/events.dm @@ -17,7 +17,7 @@ if(atmos_sensitive && !is_safe_turf(spawn_turf)) continue - if(require_darkness && spawn_turf.get_lumcount() > UNLIT_AREA_BRIGHTNESS) + if(require_darkness && spawn_turf.check_lumcount_above(UNLIT_AREA_BRIGHTNESS)) continue possible_spawns += spawn_turf diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 63ab8d7e0396..56aba69bfeae 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -43,9 +43,7 @@ if(player_mob.stat == DEAD) return FALSE - if(issilicon(player_mob) || isbrain(player_mob)) - return FALSE - if(istype(player_mob) && (player_mob.dna?.species?.id == SPECIES_ZOMBIE_INFECTIOUS)) + if(HAS_TRAIT(player_mob, TRAIT_NEVER_CONSIDERED_ALIVE)) return FALSE return TRUE diff --git a/code/__HELPERS/hallucinations.dm b/code/__HELPERS/hallucinations.dm index c19005e0acc8..1902dd157872 100644 --- a/code/__HELPERS/hallucinations.dm +++ b/code/__HELPERS/hallucinations.dm @@ -66,6 +66,7 @@ GLOBAL_LIST_EMPTY(all_ongoing_hallucinations) qdel(new_hallucination) return + SEND_SIGNAL(src, COMSIG_LIVING_HALLUCINATING, new_hallucination) investigate_log("was afflicted with a hallucination of type [hallucination_type] by: [hallucination_source]. \ ([new_hallucination.feedback_details])", INVESTIGATE_HALLUCINATIONS) return new_hallucination diff --git a/code/__HELPERS/hearted.dm b/code/__HELPERS/hearted.dm index d8f7832cbc06..2ce7324701f0 100644 --- a/code/__HELPERS/hearted.dm +++ b/code/__HELPERS/hearted.dm @@ -93,7 +93,7 @@ return to_chat(heart_sender, span_nicegreen("Commendation sent!")) message_admins("[key_name(heart_sender)] commended [key_name(src)] [instant ? "(instant)" : ""]") - log_admin("[key_name(heart_sender)] commended [key_name(src)] [instant ? "(instant)" : ""]") + log_admin_private("[key_name(heart_sender)] commended [key_name(src)] [instant ? "(instant)" : ""]") if(instant || SSticker.current_state == GAME_STATE_FINISHED) client.adjust_heart(duration) else diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 9898db8bacf4..b19d355b6ba6 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -1235,7 +1235,7 @@ GLOBAL_LIST_EMPTY(transformation_animation_objects) return TRUE var/static/list/screams = list() - if(!isnull(screams[file])) + if(isnull(screams[file])) screams[file] = TRUE stack_trace("State [state] in file [file] does not exist.") diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 6000a322fb66..93d82f18c965 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -9,32 +9,21 @@ /// Returns one of the human blood types at random, weighted by their rarity /proc/random_human_blood_type() RETURN_TYPE(/datum/blood_type) - return get_blood_type(pick_weight( - list( - BLOOD_TYPE_O_MINUS = 4, - BLOOD_TYPE_O_PLUS = 36, - BLOOD_TYPE_A_MINUS = 3, - BLOOD_TYPE_A_PLUS = 28, - BLOOD_TYPE_B_MINUS= 1, - BLOOD_TYPE_B_PLUS = 20, - BLOOD_TYPE_AB_MINUS = 1, - BLOOD_TYPE_AB_PLUS = 5, - ))) - -// DARKPACK EDIT ADD START - Vitae -/proc/random_human_blood_type_name() - return pick_weight( - list( - BLOOD_TYPE_O_MINUS = 4, - BLOOD_TYPE_O_PLUS = 36, - BLOOD_TYPE_A_MINUS = 3, - BLOOD_TYPE_A_PLUS = 28, - BLOOD_TYPE_B_MINUS= 1, - BLOOD_TYPE_B_PLUS = 20, - BLOOD_TYPE_AB_MINUS = 1, - BLOOD_TYPE_AB_PLUS = 5, - )) -// DARKPACK EDIT ADD END + return get_blood_type(pick_weight(GLOB.human_blood_types)) // DARKPACK EDIT CHANGE + +/proc/get_roundstart_blood_types() + var/static/list/cached_blood_types + if(length(cached_blood_types)) + return cached_blood_types + + cached_blood_types = list() + cached_blood_types |= subtypesof(/datum/blood_type/human) + for(var/species_id in get_selectable_species()) + var/datum/species/species_type = GLOB.species_list[species_id] + if(species_type::exotic_bloodtype) + cached_blood_types |= species_type::exotic_bloodtype + + return cached_blood_types /proc/random_eye_color() switch(pick(20;"brown",20;"hazel",20;"grey",15;"blue",15;"green",1;"amber",1;"albino")) @@ -440,7 +429,7 @@ GLOBAL_LIST_INIT(skin_tone_names, list( * * temp_diff (required) The difference between two temperatures * * change_rate (optional)(Default: 0.06) The rate of range multiplier */ -/proc/get_temp_change_amount(temp_diff, change_rate = 0.06) +/proc/get_temp_change_amount(temp_diff, change_rate = BODYTEMP_STANDARD_CHANGE_RATE) if(temp_diff < 0) return -(BODYTEMP_AUTORECOVERY_DIVISOR / 2) * log(1 - (temp_diff * change_rate)) return (BODYTEMP_AUTORECOVERY_DIVISOR / 2) * log(1 + (temp_diff * change_rate)) @@ -723,16 +712,34 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) /** * Iterates over all mobs that can see the passed movable and adds specific mood events to them based on their personalities. * - * * source: String source for the mood event + * * source: The source of the mood event, usually the mob doing something + * * mood_key: String source for the mood event * * personality_to_mood: A list mapping personality types to mood event types. Example: list(/datum/personality/chill = /datum/mood_event/chill_guy) * * range: The range in which to check for viewers. Default is view range. * * additional args may be supplied to pass into the mood event constructor. */ /proc/add_personality_mood_to_viewers(atom/movable/source, mood_key, list/personality_to_mood, range, ...) for(var/mob/living/nearby in viewers(range, source)) - if(IS_UNCONSCIOUS(nearby) || nearby.is_blind()) + if(nearby == source || IS_UNCONSCIOUS(nearby) || nearby.is_blind()) continue - for(var/personality in personality_to_mood) + for(var/personality, moodlet in personality_to_mood) if(HAS_PERSONALITY(nearby, personality)) - nearby.add_mood_event(arglist( list("[mood_key]_[personality]", personality_to_mood[personality]) + args.Copy(4) )) + nearby.add_mood_event(arglist( list("[mood_key]_[personality]", moodlet) + args.Copy(4) )) break + +///Gets an emote sound from a specific list of sounds. Supports lists and genders. Used by emote datums for default sounds, and tongues, masks etc. for overrides. +/proc/get_emote_sound_from_list(sound, mob/living/user) + if(islist(sound)) + var/list/sounds = sound + var/list/possible_sounds = sounds.Copy() + var/gender = astype(user, /mob/living/carbon/human)?.physique || user.gender + if(gender in possible_sounds) + possible_sounds = possible_sounds[gender] + if(!islist(possible_sounds)) + return possible_sounds //it's a single sound + else + possible_sounds -= list(MALE, FEMALE, PLURAL, NEUTER) + if(!length(possible_sounds)) + return null + sound = pick(possible_sounds) + return sound diff --git a/code/__HELPERS/verbs.dm b/code/__HELPERS/verbs.dm index badd3c6727ae..d93666c3087f 100644 --- a/code/__HELPERS/verbs.dm +++ b/code/__HELPERS/verbs.dm @@ -46,6 +46,14 @@ target.stat_panel.send_message("add_verb_list", output_list) + if(target.tgui_panel?.is_ready()) + var/list/panel_list = list() + for(var/procpath/verb_to_add as anything in verbs_list) + if(!SSverbs.verbs_by_verb_path[verb_to_add] && !SSadmin_verbs.admin_verbs_by_verb_path[verb_to_add] && !istext(verb_to_add.category)) + continue + panel_list += list(SSverbs.serialize_verb(verb_to_add)) + target.tgui_panel.window.send_message("verbs/add", list("verbs" = panel_list)) + SEND_SIGNAL(target, COMSIG_CLIENT_VERB_ADDED, verbs_list) /** @@ -95,4 +103,10 @@ target.stat_panel.send_message("remove_verb_list", output_list) + if(target.tgui_panel?.is_ready()) + var/list/panel_list = list() + for(var/procpath/verb_to_remove as anything in verbs_list) + panel_list += list(verb_to_remove.name) + target.tgui_panel.window.send_message("verbs/remove", list("names" = panel_list)) + SEND_SIGNAL(target, COMSIG_CLIENT_VERB_REMOVED, verbs_list) diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index 57842773159e..43e20072d603 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -29,6 +29,8 @@ GLOBAL_LIST_INIT(bitfields, generate_bitfields()) /// Returns null if no such field exists, a list of all matching flags by name otherwise /proc/get_matching_bitflags(var_name, value) + if(isnum(var_name)) + return null var/list/valid_bitflags = get_valid_bitflags(var_name) if(!length(valid_bitflags)) return null diff --git a/code/_globalvars/layers.dm b/code/_globalvars/layers.dm index a22ba26c175a..815069d5a636 100644 --- a/code/_globalvars/layers.dm +++ b/code/_globalvars/layers.dm @@ -3,6 +3,7 @@ GLOBAL_LIST_INIT(admin_readable_planes, list( "FIELD_OF_VISION_BLOCKER_PLANE" = FIELD_OF_VISION_BLOCKER_PLANE, "CLICKCATCHER_PLANE" = CLICKCATCHER_PLANE, "PLANE_SPACE" = PLANE_SPACE, + "WEATHER_MASK_PLANE" = WEATHER_MASK_PLANE, "PLANE_SPACE_PARALLAX" = PLANE_SPACE_PARALLAX, "DISPLACEMENT_PLANE" = DISPLACEMENT_PLANE, "RENDER_PLANE_TRANSPARENT" = RENDER_PLANE_TRANSPARENT, @@ -15,6 +16,7 @@ GLOBAL_LIST_INIT(admin_readable_planes, list( "RENDER_PLANE_GAME_WORLD" = RENDER_PLANE_GAME_WORLD, "DEFAULT_PLANE" = DEFAULT_PLANE, "WEATHER_PLANE" = WEATHER_PLANE, + "PARTICLE_WEATHER_PLANE" = PARTICLE_WEATHER_PLANE, "AREA_PLANE" = AREA_PLANE, "MASSIVE_OBJ_PLANE" = MASSIVE_OBJ_PLANE, "GHOST_PLANE" = GHOST_PLANE, @@ -31,6 +33,8 @@ GLOBAL_LIST_INIT(admin_readable_planes, list( "RENDER_PLANE_LIGHTING" = RENDER_PLANE_LIGHTING, "RENDER_PLANE_LIGHT_MASK" = RENDER_PLANE_LIGHT_MASK, "RENDER_PLANE_SPECULAR" = RENDER_PLANE_SPECULAR, + "RENDER_PLANE_PARTICLE_WEATHER" = RENDER_PLANE_PARTICLE_WEATHER, + "RENDER_PLANE_EMISSIVE_PARTICLE_WEATHER" = RENDER_PLANE_EMISSIVE_PARTICLE_WEATHER, "ABOVE_LIGHTING_PLANE" = ABOVE_LIGHTING_PLANE, "WEATHER_GLOW_PLANE" = WEATHER_GLOW_PLANE, "PIPECRAWL_IMAGES_PLANE" = PIPECRAWL_IMAGES_PLANE, @@ -134,6 +138,7 @@ GLOBAL_LIST_INIT(admin_readable_layers, list( "WALL_OBJ_LAYER" = WALL_OBJ_LAYER, "TRAM_SIGNAL_LAYER" = TRAM_SIGNAL_LAYER, "EDGED_TURF_LAYER" = EDGED_TURF_LAYER, + "EDGED_TURF_LOWER_LAYER" = EDGED_TURF_LOWER_LAYER, "ON_EDGED_TURF_LAYER" = ON_EDGED_TURF_LAYER, "SPACEVINE_LAYER" = SPACEVINE_LAYER, "LARGE_MOB_LAYER" = LARGE_MOB_LAYER, diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index f84b17cb26ae..498ef82f0c19 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -31,8 +31,6 @@ GLOBAL_LIST_EMPTY(deliverybeacontags) /// List of all singularity components that exist GLOBAL_LIST_EMPTY_TYPED(singularities, /datum/component/singularity) -GLOBAL_LIST_EMPTY(item_to_design_list) - /// Global list of all non-cooking related crafting recipes. GLOBAL_LIST_EMPTY(crafting_recipes) /// Global list of all non-cooking related crafting recipes that don't need to be learned diff --git a/code/_globalvars/logging.dm b/code/_globalvars/logging.dm index 5f38afdd86e2..006371a44670 100644 --- a/code/_globalvars/logging.dm +++ b/code/_globalvars/logging.dm @@ -80,7 +80,11 @@ GLOBAL_PROTECT(lawchanges) /// Adds something to the law change log /proc/log_law_change(mob/living/changer, log_message) + if(isnull(changer)) + log_message = capitalize(log_message) + GLOB.lawchanges += "[round_timestamp()] : [changer ? key_name(changer) : "(No mob)"] [log_message]" + log_silicon("Law change: [changer ? key_name(changer) : "(No mob)"] [log_message]") #undef DECLARE_LOG #undef DECLARE_LOG_NAMED diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 004662c448f6..44ae6dace8fa 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -242,6 +242,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_CAN_STRIP" = TRAIT_CAN_STRIP, "TRAIT_CAN_THROW_ITEMS" = TRAIT_CAN_THROW_ITEMS, "TRAIT_CAN_USE_NUKE" = TRAIT_CAN_USE_NUKE, + "TRAIT_CAT_EMOTES_ALLOWED" = TRAIT_CAT_EMOTES_ALLOWED, "TRAIT_CATLIKE_INSTINCT" = TRAIT_CATLIKE_INSTINCT, "TRAIT_CHANGELING_HIVEMIND" = TRAIT_CHANGELING_HIVEMIND, "TRAIT_CHASM_DESTROYED" = TRAIT_CHASM_DESTROYED, @@ -427,13 +428,16 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_MOB_MERGE_STACKS" = TRAIT_MOB_MERGE_STACKS, "TRAIT_MOB_TIPPED" = TRAIT_MOB_TIPPED, "TRAIT_MORBID" = TRAIT_MORBID, + "TRAIT_MOTH_EMOTES_ALLOWED" = TRAIT_MOTH_EMOTES_ALLOWED, "TRAIT_MULTIZ_SUIT_SENSORS" = TRAIT_MULTIZ_SUIT_SENSORS, "TRAIT_MUSICIAN" = TRAIT_MUSICIAN, "TRAIT_MUTANT_COLORS" = TRAIT_MUTANT_COLORS, "TRAIT_MUTE" = TRAIT_MUTE, "TRAIT_NAIVE" = TRAIT_NAIVE, + "TRAIT_HEAD_ATMOS_SEALED" = TRAIT_HEAD_ATMOS_SEALED, "TRAIT_NEARSIGHTED_CORRECTED" = TRAIT_NEARSIGHTED_CORRECTED, "TRAIT_NEGATES_GRAVITY" = TRAIT_NEGATES_GRAVITY, + "TRAIT_NEVER_CONSIDERED_ALIVE" = TRAIT_NEVER_CONSIDERED_ALIVE, "TRAIT_NEVER_WOUNDED" = TRAIT_NEVER_WOUNDED, "TRAIT_NICE_SHOT" = TRAIT_NICE_SHOT, "TRAIT_NIGHT_VISION" = TRAIT_NIGHT_VISION, @@ -451,14 +455,11 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_NOFIRE_SPREAD" = TRAIT_NOFIRE_SPREAD, "TRAIT_NOFLASH" = TRAIT_NOFLASH, "TRAIT_NOGUNS" = TRAIT_NOGUNS, - "TRAIT_TOSS_GUN_HARD" = TRAIT_TOSS_GUN_HARD, "TRAIT_NOHARDCRIT" = TRAIT_NOHARDCRIT, "TRAIT_NOHUNGER" = TRAIT_NOHUNGER, "TRAIT_NOLIMBDISABLE" = TRAIT_NOLIMBDISABLE, "TRAIT_NOMOBSWAP" = TRAIT_NOMOBSWAP, - "TRAIT_HEAD_ATMOS_SEALED" = TRAIT_HEAD_ATMOS_SEALED, "TRAIT_NOSOFTCRIT" = TRAIT_NOSOFTCRIT, - "TRAIT_NO_OXYLOSS_PASSOUT" = TRAIT_NO_OXYLOSS_PASSOUT, "TRAIT_NO_AUGMENTS" = TRAIT_NO_AUGMENTS, "TRAIT_NO_BLOOD_OVERLAY" = TRAIT_NO_BLOOD_OVERLAY, "TRAIT_NO_BREATHLESS_DAMAGE" = TRAIT_NO_BREATHLESS_DAMAGE, @@ -473,6 +474,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_NO_JUMPSUIT" = TRAIT_NO_JUMPSUIT, "TRAIT_NO_MINDSWAP" = TRAIT_NO_MINDSWAP, "TRAIT_NO_MIRROR_REFLECTION" = TRAIT_NO_MIRROR_REFLECTION, + "TRAIT_NO_OXYLOSS_PASSOUT" = TRAIT_NO_OXYLOSS_PASSOUT, "TRAIT_NO_PLASMA_TRANSFORM" = TRAIT_NO_PLASMA_TRANSFORM, "TRAIT_NO_SLIP_ALL" = TRAIT_NO_SLIP_ALL, "TRAIT_NO_SLIP_ICE" = TRAIT_NO_SLIP_ICE, @@ -488,7 +490,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_NO_TWOHANDING" = TRAIT_NO_TWOHANDING, "TRAIT_NO_UNDERWEAR" = TRAIT_NO_UNDERWEAR, "TRAIT_NO_WITHDRAWALS" = TRAIT_NO_WITHDRAWALS, - "TRAIT_NO_ZOMBIFY" = TRAIT_NO_ZOMBIFY, + "TRAIT_TOSS_GUN_HARD" = TRAIT_TOSS_GUN_HARD, "TRAIT_HIPPOCRATIC_OATH" = TRAIT_HIPPOCRATIC_OATH, "TRAIT_NUKEIMMUNE" = TRAIT_NUKEIMMUNE, "TRAIT_OFF_BALANCE_TACKLER" = TRAIT_OFF_BALANCE_TACKLER, @@ -693,6 +695,8 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_ACUTE_HEARING" = TRAIT_ACUTE_HEARING, // DARKPACK EDIT ADD - MERITS_FLAWS - ACUTE SENSE "TRAIT_ANIMAL_MUSK" = TRAIT_ANIMAL_MUSK, // DARKPACK EDIT ADD - MERITS_FLAWS "TRAIT_AURA_OF_CONFIDENCE" = TRAIT_AURA_OF_CONFIDENCE, // DARKPACK EDIT ADD - WEREWOLF + "TRAIT_BANNED_TRANSFORMATION" = TRAIT_BANNED_TRANSFORMATION, // DARKPACK EDIT ADD - MERITS_FLAWS + "TRAIT_BEACON_OF_THE_UNHOLY" = TRAIT_BEACON_OF_THE_UNHOLY, // DARKPACK EDIT ADD - MERITS_FLAWS "TRAIT_BETRAYERS_MARK" = TRAIT_BETRAYERS_MARK, // DARKPACK EDIT ADD - MERITS_FLAWS - (Tremere) "TRAIT_BLOODY_LOVER" = TRAIT_BLOODY_LOVER, // DARKPACK EDIT ADD "TRAIT_BLOODY_SUCKER" = TRAIT_BLOODY_SUCKER, // DARKPACK EDIT ADD @@ -735,6 +739,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_HIDDEN_WYRMTAINT" = TRAIT_HIDDEN_WYRMTAINT, // DARKPACK EDIT ADD "TRAIT_HOMOSEXUAL" = TRAIT_HOMOSEXUAL, // DARKPACK EDIT ADD "TRAIT_HORRIFIC_APPEARANCE" = TRAIT_HORRIFIC_APPEARANCE, // DARKPACK EDIT ADD - Cappadocian Quirk + "TRAIT_HUGE_SIZE" = TRAIT_HUGE_SIZE, // DARKPACK EDIT ADD - MERITS_FLAWS "TRAIT_HUNGRY" = TRAIT_HUNGRY, // DARKPACK EDIT ADD "TRAIT_HUNTED" = TRAIT_HUNTED, // DARKPACK EDIT ADD "TRAIT_ILLEGAL_IDENTITY" = TRAIT_ILLEGAL_IDENTITY, // DARKPACK EDIT ADD - GOVERMENT @@ -809,6 +814,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( ), /mob/living/carbon = list( "TRAIT_BRAINLESS_CARBON" = TRAIT_BRAINLESS_CARBON, + "TRAIT_COLD_BLOODED" = TRAIT_COLD_BLOODED, ), /mob/dead/observer = list( "TRAIT_NO_OBSERVE" = TRAIT_NO_OBSERVE, diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm index 2d57124b8531..acafc5920a96 100644 --- a/code/_globalvars/traits/admin_tooling.dm +++ b/code/_globalvars/traits/admin_tooling.dm @@ -76,6 +76,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_CAN_STRIP" = TRAIT_CAN_STRIP, "TRAIT_CAN_THROW_ITEMS" = TRAIT_CAN_THROW_ITEMS, "TRAIT_CAN_USE_NUKE" = TRAIT_CAN_USE_NUKE, + "TRAIT_CAT_EMOTES_ALLOWED" = TRAIT_CAT_EMOTES_ALLOWED, "TRAIT_CATLIKE_INSTINCT" = TRAIT_CATLIKE_INSTINCT, "TRAIT_CHASM_DESTROYED" = TRAIT_CHASM_DESTROYED, "TRAIT_CHUNKYFINGERS" = TRAIT_CHUNKYFINGERS, @@ -187,6 +188,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_MINDSHIELD" = TRAIT_MINDSHIELD, "TRAIT_MOB_HIDE_HAPPINESS" = TRAIT_MOB_HIDE_HAPPINESS, "TRAIT_MORBID" = TRAIT_MORBID, + "TRAIT_MOTH_EMOTES_ALLOWED" = TRAIT_MOTH_EMOTES_ALLOWED, "TRAIT_MULTIZ_SUIT_SENSORS" = TRAIT_MULTIZ_SUIT_SENSORS, "TRAIT_MUSICIAN" = TRAIT_MUSICIAN, "TRAIT_MUTANT_COLORS" = TRAIT_MUTANT_COLORS, @@ -218,7 +220,6 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_NO_TWOHANDING" = TRAIT_NO_TWOHANDING, "TRAIT_NO_UNDERWEAR" = TRAIT_NO_UNDERWEAR, "TRAIT_NO_WITHDRAWALS" = TRAIT_NO_WITHDRAWALS, - "TRAIT_NO_ZOMBIFY" = TRAIT_NO_ZOMBIFY, "TRAIT_NOBLOOD" = TRAIT_NOBLOOD, "TRAIT_NOBREATH" = TRAIT_NOBREATH, "TRAIT_NOCRITDAMAGE" = TRAIT_NOCRITDAMAGE, @@ -369,6 +370,8 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_ACUTE_HEARING" = TRAIT_ACUTE_HEARING, // DARKPACK EDIT ADD - MERITS_FLAWS - ACUTE SENSE "TRAIT_ANIMAL_MUSK" = TRAIT_ANIMAL_MUSK, // DARKPACK EDIT ADD - MERITS_FLAWS "TRAIT_AURA_OF_CONFIDENCE" = TRAIT_AURA_OF_CONFIDENCE, // DARKPACK EDIT ADD - WEREWOLF + "TRAIT_BANNED_TRANSFORMATION" = TRAIT_BANNED_TRANSFORMATION, // DARKPACK EDIT ADD - MERITS_FLAWS + "TRAIT_BEACON_OF_THE_UNHOLY" = TRAIT_BEACON_OF_THE_UNHOLY, // DARKPACK EDIT ADD - MERITS_FLAWS "TRAIT_BLOODY_LOVER" = TRAIT_BLOODY_LOVER, // DARKPACK EDIT ADD "TRAIT_BLOODY_SUCKER" = TRAIT_BLOODY_SUCKER, // DARKPACK EDIT ADD "TRAIT_BLUSH_OF_HEALTH" = TRAIT_BLUSH_OF_HEALTH, // DARKPACK EDIT ADD @@ -402,6 +405,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_HIDDEN_DIABLERIE" = TRAIT_HIDDEN_DIABLERIE, //DARKPACK EDIT ADD "TRAIT_HIDDEN_WYRMTAINT" = TRAIT_HIDDEN_WYRMTAINT, // DARKPACK EDIT ADD "TRAIT_HOMOSEXUAL" = TRAIT_HOMOSEXUAL, // DARKPACK EDIT ADD + "TRAIT_HUGE_SIZE" = TRAIT_HUGE_SIZE, // DARKPACK EDIT ADD - MERITS_FLAWS "TRAIT_HUNGRY" = TRAIT_HUNGRY, // DARKPACK EDIT ADD "TRAIT_HUNTED" = TRAIT_HUNTED, // DARKPACK EDIT ADD "TRAIT_ILLEGAL_IDENTITY" = TRAIT_ILLEGAL_IDENTITY, // DARKPACK EDIT ADD - GOVERMENT diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index df95a6031c7a..b6199cc98fb0 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -283,13 +283,13 @@ /* AI Turrets */ /obj/machinery/turretid/ai_click_alt(mob/living/silicon/ai/user) //toggles lethal on turrets - if(ailock) + if(is_ai_locked(user)) return CLICK_ACTION_BLOCKING toggle_lethal(user) return CLICK_ACTION_SUCCESS /obj/machinery/turretid/AICtrlClick(mob/living/silicon/ai/user) //turns off/on Turrets - if(ailock) + if(is_ai_locked(user)) return toggle_on(user) diff --git a/code/_onclick/hud/pai.dm b/code/_onclick/hud/pai.dm index 74da5962b37d..4129eafcf78c 100644 --- a/code/_onclick/hud/pai.dm +++ b/code/_onclick/hud/pai.dm @@ -4,6 +4,7 @@ /datum/hud/pai/initialize_screen_objects() . = ..() + add_screen_object(/atom/movable/screen/healthdoll/living, HUD_MOB_HEALTHDOLL, HUD_GROUP_INFO) add_screen_object(/atom/movable/screen/language_menu, HUD_MOB_LANGUAGE_MENU, ui_style, ui_pai_language_menu) add_screen_object(/atom/movable/screen/navigate, HUD_MOB_NAVIGATE_MENU, ui_style, ui_pai_navigate_menu) add_screen_object(/atom/movable/screen/memories, HUD_MOB_MEMORIES, HUD_GROUP_STATIC, ui_style, ui_pai_memories_menu) diff --git a/code/_onclick/hud/rendering/plane_master_controller.dm b/code/_onclick/hud/rendering/plane_master_controller.dm index 2d2d5c54bd6a..c9528dec328d 100644 --- a/code/_onclick/hud/rendering/plane_master_controller.dm +++ b/code/_onclick/hud/rendering/plane_master_controller.dm @@ -54,11 +54,15 @@ INITIALIZE_IMMEDIATE(/atom/movable/plane_master_controller) . += pm_iterator.get_filter(name) ///Transitions all filters owned by this plane master controller -/atom/movable/plane_master_controller/transition_filter(name, time, list/new_params, easing, loop) +/atom/movable/plane_master_controller/transition_filter(name, list/new_params, time, easing, loop) . = ..() for(var/atom/movable/screen/plane_master/pm_iterator as anything in get_planes()) pm_iterator.transition_filter(name, new_params, time, easing, loop) +/atom/movable/plane_master_controller/transition_filter_chain(name, num_loops, ...) + for(var/atom/movable/screen/plane_master/pm_iterator as anything in get_filters(name)) + pm_iterator.transition_filter_chain(arglist(args)) + ///Full override so we can just use filterrific /atom/movable/plane_master_controller/add_atom_colour(coloration, colour_priority) . = ..() diff --git a/code/_onclick/hud/screen_objects/alert.dm b/code/_onclick/hud/screen_objects/alert.dm index 383ccca26aef..23d7cb88d5e6 100644 --- a/code/_onclick/hud/screen_objects/alert.dm +++ b/code/_onclick/hud/screen_objects/alert.dm @@ -602,22 +602,23 @@ var/title = pick(death_titles) - // DARKPACK EDIT CHANGE START - Torpor + // DARKPACK EDIT ADD START - VAMPIRE - (Torpor) if (HAS_TRAIT(living_owner, TRAIT_TORPOR)) // Can't say your final words if you're already "dead" var/confirm_death = tgui_alert(usr, "Do you want to give up and succumb to Final Death?", "Succumb Confirmation", list("Yes", "No")) if (confirm_death != "Yes") return - living_owner.succumb() - else - //Succumbing with a message - var/last_whisper = tgui_input_text(usr, "Do you have any last words?", title, max_length = CHAT_MESSAGE_MAX_LENGTH, encode = FALSE) // saycode already handles sanitization - if(isnull(last_whisper)) - return - if(length(last_whisper)) - living_owner.say("#[last_whisper]") - living_owner.succumb(whispered = length(last_whisper) > 0) - // DARKPACK EDIT CHANGE END - Torpor + INVOKE_GAME_VERB(living_owner, usr, /mob/living, succumb) + return + // DARKPACK EDIT ADD END + //Succumbing with a message + var/last_whisper = tgui_input_text(usr, "Do you have any last words?", title, max_length = CHAT_MESSAGE_MAX_LENGTH, encode = FALSE) // saycode already handles sanitization + if(isnull(last_whisper)) + return + if(length(last_whisper)) + living_owner.say("#[last_whisper]") + INVOKE_GAME_VERB(living_owner, usr, /mob/living, succumb, whisper = length(last_whisper) > 0) + //ALIENS diff --git a/code/_onclick/hud/screen_objects/map_popups.dm b/code/_onclick/hud/screen_objects/map_popups.dm index 05612460a8f0..f482f8ee86b8 100644 --- a/code/_onclick/hud/screen_objects/map_popups.dm +++ b/code/_onclick/hud/screen_objects/map_popups.dm @@ -128,6 +128,6 @@ /** * When the popup closes in any way (player or proc call) it calls this. */ -GAME_VERB_HIDDEN(/client, handle_popup_close, "handle popup close", window_id as text) +GAME_VERB_NATIVE(/client, handle_popup_close, "handle popup close", null, window_id as text) clear_map("[window_id]_map") SEND_SIGNAL(src, COMSIG_POPUP_CLEARED, window_id) diff --git a/code/_onclick/hud/screen_objects/screen_objects.dm b/code/_onclick/hud/screen_objects/screen_objects.dm index 8488181222b2..7158691f419b 100644 --- a/code/_onclick/hud/screen_objects/screen_objects.dm +++ b/code/_onclick/hud/screen_objects/screen_objects.dm @@ -1172,7 +1172,7 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen) // I hate this place if(!istype(hungry)) return - if(HAS_TRAIT(hungry, TRAIT_NOHUNGER) || !hungry.get_organ_slot(ORGAN_SLOT_STOMACH)) + if(HAS_TRAIT(hungry, TRAIT_NOHUNGER) || (ishuman(hungry) && !hungry.get_organ_slot(ORGAN_SLOT_STOMACH))) fullness = NUTRITION_LEVEL_FED state = HUNGER_STATE_FINE return @@ -1333,6 +1333,37 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen) // I hate this place #define FORMAT_XENOBIO_HUD_MAPTEXT(text_to_use) MAPTEXT_SPESSFONT("[text_to_use]") #define POTION_DROP_SPEED 5 DECISECONDS +/atom/movable/screen/slime_power + name = "Power Level" + desc = "How much electricity they are generating. The higher this is, the stronger your attacks are." + icon_state = "slime_display" + base_icon_state = "slime_display" + screen_loc = ui_slime_powerlevel + maptext_x = 1 + maptext_y = 8 + +/atom/movable/screen/slime_power/Click(location, control, params) + . = ..() + to_chat(usr, span_notice("Shows you how much electricity they are generating. The higher this is, the higher chance you will strike with overwhelming electrical force.")) + +/atom/movable/screen/slime_power/Initialize(mapload, datum/hud/hud_owner) + . = ..() + update_maptext() + +/atom/movable/screen/slime_power/update_icon_state() + . = ..() + icon_state = base_icon_state + var/mob/living/basic/slime/slime_owner = hud.mymob + if(istype(slime_owner) && slime_owner.powerlevel >= 7) + icon_state += "_shock" + +/atom/movable/screen/slime_power/proc/update_maptext() + var/mob/living/basic/slime/slime_owner = hud.mymob + if(!istype(slime_owner)) + return + maptext = FORMAT_XENOBIO_HUD_MAPTEXT("[slime_owner.powerlevel]/[SLIME_MAX_POWER]") + update_appearance(UPDATE_ICON) + /// Used to show how many monkeys & slimes are in the console /atom/movable/screen/xenobio_console name = "Monkey/Slime Storage" diff --git a/code/_onclick/hud/slime.dm b/code/_onclick/hud/slime.dm new file mode 100644 index 000000000000..ff788ebb4c99 --- /dev/null +++ b/code/_onclick/hud/slime.dm @@ -0,0 +1,9 @@ +/datum/hud/living/slime + ui_style = 'icons/hud/screen_slimecore.dmi' + +/datum/hud/living/slime/initialize_screen_objects() + . = ..() + var/mob/living/basic/slime/slime_mob = mymob + if(!slime_mob.hunger_disabled) + add_screen_object(/atom/movable/screen/hunger, HUD_MOB_HUNGER, HUD_GROUP_INFO, ui_loc = ui_slime_hunger) + add_screen_object(/atom/movable/screen/slime_power, HUD_MOB_SLIME_POWER, HUD_GROUP_INFO) diff --git a/code/controllers/admin.dm b/code/controllers/admin.dm index 21883d142b18..dd4202d7f128 100644 --- a/code/controllers/admin.dm +++ b/code/controllers/admin.dm @@ -44,7 +44,8 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick) usr.client.debug_variables(target) message_admins("Admin [key_name_admin(usr)] is debugging the [target] [class].") -ADMIN_VERB(restart_controller, R_DEBUG, "Restart Controller", "Restart one of the various periodic loop controllers for the game (be careful!)", ADMIN_CATEGORY_DEBUG, controller in list("Master", "Failsafe")) +ADMIN_VERB(restart_controller, R_DEBUG, "Restart Controller", "Restart one of the various periodic loop controllers for the game (be careful!)", ADMIN_CATEGORY_DEBUG) + VERB_ARG_LIST(controller, list("Master", "Failsafe")) switch(controller) if("Master") Recreate_MC() diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 3303eed9c5c1..261fda35979a 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -44,8 +44,6 @@ GLOBAL_REAL(Master, /datum/controller/master) /// makes the mc main loop runtime var/make_runtime = FALSE - var/initializations_finished_with_no_players_logged_in //I wonder what this could be? - /// The type of the last subsystem to be fire()'d. var/last_type_processed @@ -459,6 +457,7 @@ ADMIN_VERB(cmd_controller_view_ui, R_SERVER|R_DEBUG, "Controller Overview", "Vie var/msg = "Initializations complete within [time] second[time == 1 ? "" : "s"]!" to_chat(world, span_boldannounce("[msg]"), MESSAGE_TYPE_DEBUG) log_world(msg) + SSticker.timeLeft = SSticker.start_at if(world.system_type == MS_WINDOWS && CONFIG_GET(flag/toast_notification_on_init) && !length(GLOB.clients)) @@ -466,7 +465,6 @@ ADMIN_VERB(cmd_controller_view_ui, R_SERVER|R_DEBUG, "Controller Overview", "Vie // Set world options. world.change_fps(CONFIG_GET(number/fps)) - var/initialized_tod = REALTIMEOFDAY if(tgs_prime) world.TgsInitializationComplete() @@ -477,7 +475,6 @@ ADMIN_VERB(cmd_controller_view_ui, R_SERVER|R_DEBUG, "Controller Overview", "Vie if(sleep_offline_after_initializations && CONFIG_GET(flag/resume_after_initializations)) world.sleep_offline = FALSE - initializations_finished_with_no_players_logged_in = initialized_tod < REALTIMEOFDAY - 10 /** * Initialize a given subsystem and handle the results. diff --git a/code/controllers/subsystem/admin_verbs.dm b/code/controllers/subsystem/admin_verbs.dm index 9891f13a4cf2..810ea61bc76d 100644 --- a/code/controllers/subsystem/admin_verbs.dm +++ b/code/controllers/subsystem/admin_verbs.dm @@ -6,6 +6,8 @@ SUBSYSTEM_DEF(admin_verbs) init_stage = INITSTAGE_EARLY /// A list of all admin verbs indexed by their type. var/list/datum/admin_verb/admin_verbs_by_type = list() + /// A list of all admin verbs indexed by their verb_path. + var/list/datum/admin_verb/admin_verbs_by_verb_path = list() /// A list of all admin verbs indexed by their visibility flag. var/list/list/datum/admin_verb/admin_verbs_by_visibility_flag = list() /// A map of all assosciated admins and their visibility flags. @@ -40,7 +42,11 @@ SUBSYSTEM_DEF(admin_verbs) qdel(verb_singleton, force = TRUE) continue + var/list/pending = GLOB.____pending_verb_args[verb_type] + if(pending) + verb_singleton.arguments = pending admin_verbs_by_type[verb_type] = verb_singleton + admin_verbs_by_verb_path[verb_singleton.get_verb_path()] = verb_singleton if(verb_singleton.visibility_flag) if(!(verb_singleton.visibility_flag in admin_verbs_by_visibility_flag)) admin_verbs_by_visibility_flag[verb_singleton.visibility_flag] = list() @@ -79,13 +85,15 @@ SUBSYSTEM_DEF(admin_verbs) if(state) admin_visibility_flags[admin.ckey] |= list(flag) assosciate_admin(admin) - return + else + admin_visibility_flags[admin.ckey] -= list(flag) + for(var/datum/admin_verb/verb_singleton as anything in admin_verbs_by_visibility_flag[flag]) + verb_singleton.unassign_from_client(admin) + admin.init_verbs() - admin_visibility_flags[admin.ckey] -= list(flag) - // they lost the flag, iterate over verbs with that flag and yoink em - for(var/datum/admin_verb/verb_singleton as anything in admin_verbs_by_visibility_flag[flag]) - verb_singleton.unassign_from_client(admin) - admin.init_verbs() + if(admin.admin_verb_panel) + var/datum/tgui/ui = SStgui.get_open_ui(admin.mob, admin.admin_verb_panel) + ui?.send_full_update() /datum/controller/subsystem/admin_verbs/proc/dynamic_invoke_verb(client/admin, datum/admin_verb/verb_type, ...) if(IsAdminAdvancedProcCall()) @@ -101,9 +109,7 @@ SUBSYSTEM_DEF(admin_verbs) if(isnull(admin.holder)) CRASH("Attempted to dynamically invoke admin verb '[verb_type]' with a non-admin.") - var/list/verb_args = args.Copy() - verb_args.Cut(2, 3) - var/datum/admin_verb/verb_singleton = admin_verbs_by_type[verb_type] // this cannot be typed because we need to use `:` + var/datum/admin_verb/verb_singleton = admin_verbs_by_type[verb_type] if(isnull(verb_singleton)) CRASH("Attempted to dynamically invoke admin verb '[verb_type]' that doesn't exist.") @@ -111,10 +117,20 @@ SUBSYSTEM_DEF(admin_verbs) to_chat(admin, span_adminnotice("You lack the permissions to do this.")) return + var/list/extra_args = args.Copy(3) + var/list/positional_args + if(length(extra_args) == 1 && islist(extra_args[1])) + positional_args = extra_args[1] + else if(length(extra_args)) + positional_args = extra_args + + var/list/structured_args = ____collect_verb_args(admin, verb_singleton.name, verb_singleton.arguments, positional_args) + if(isnull(structured_args)) + return + var/old_usr = usr usr = admin.mob - // THE MACRO ENSURES THIS EXISTS. IF IT EVER DOESNT EXIST SOMEONE DIDNT USE THE DAMN MACRO! - verb_singleton.__avd_do_verb(arglist(verb_args)) + verb_singleton.__avd_do_verb(admin, structured_args) usr = old_usr SSblackbox.record_feedback("tally", "dynamic_admin_verb_invocation", 1, "[verb_type]") diff --git a/code/controllers/subsystem/augury.dm b/code/controllers/subsystem/augury.dm index 681ac744c15e..d78a4668acfc 100644 --- a/code/controllers/subsystem/augury.dm +++ b/code/controllers/subsystem/augury.dm @@ -6,56 +6,57 @@ SUBSYSTEM_DEF(augury) var/list/watchers = list() var/list/doombringers = list() + /// Associative list of observers given action to a boolean + /// indicating whether or not they have been given action. var/list/observers_given_action = list() /datum/controller/subsystem/augury/stat_entry(msg) msg = "W:[watchers.len]|D:[length(doombringers)]" return ..() -/datum/controller/subsystem/augury/proc/register_doom(atom/A, severity) - doombringers[A] = severity - RegisterSignal(A, COMSIG_QDELETING, PROC_REF(unregister_doom)) +/datum/controller/subsystem/augury/proc/register_doom(atom/new_doom, severity) + doombringers[new_doom] = severity + RegisterSignal(new_doom, COMSIG_QDELETING, PROC_REF(unregister_doom)) -/datum/controller/subsystem/augury/proc/unregister_doom(atom/A) +/datum/controller/subsystem/augury/proc/unregister_doom(atom/old_doom) SIGNAL_HANDLER - UnregisterSignal(A, COMSIG_QDELETING) - doombringers -= A + UnregisterSignal(old_doom, COMSIG_QDELETING) + doombringers -= old_doom /datum/controller/subsystem/augury/fire() var/biggest_doom = null var/biggest_threat = null - for(var/db in doombringers) - var/datum/d = db - if(!d || QDELETED(d)) - doombringers -= d + for(var/doombringer in doombringers) + var/datum/doom = doombringer + if(QDELETED(doom)) + doombringers -= doom continue - var/threat = doombringers[d] - if((biggest_threat == null) || (biggest_threat < threat)) - biggest_doom = d + var/threat = doombringers[doom] + if(isnull(biggest_threat) || (biggest_threat < threat)) + biggest_doom = doom biggest_threat = threat if(doombringers.len) for(var/i in GLOB.player_list) if(isobserver(i) && (!(observers_given_action[i]))) - var/datum/action/innate/augury/A = new - A.Grant(i) + var/datum/action/innate/augury/augury_action = new + augury_action.Grant(i) observers_given_action[i] = TRUE else - for(var/i in observers_given_action) - if(observers_given_action[i] && isobserver(i)) - var/mob/dead/observer/O = i - for(var/datum/action/innate/augury/A in O.actions) - qdel(A) - observers_given_action -= i + for(var/mob/dead/observer/key, value in observers_given_action) + if(value) + for(var/datum/action/innate/augury/augury_action in key.actions) + qdel(augury_action) + observers_given_action -= key - for(var/w in watchers) - if(!w) - watchers -= w + for(var/watcher in watchers) + if(!watcher) + watchers -= watcher continue - var/mob/dead/observer/O = w - if(biggest_doom && (!O.orbiting || O.orbiting.parent != biggest_doom)) - O.ManualFollow(biggest_doom) + var/mob/dead/observer/orbitter = watcher + if(biggest_doom && (!orbitter.orbiting || orbitter.orbiting.parent != biggest_doom)) + orbitter.ManualFollow(biggest_doom) /datum/action/innate/augury name = "Auto Follow Debris" diff --git a/code/controllers/subsystem/input.dm b/code/controllers/subsystem/input.dm index 637aa1bab12b..16262d229f7a 100644 --- a/code/controllers/subsystem/input.dm +++ b/code/controllers/subsystem/input.dm @@ -35,8 +35,8 @@ VERB_MANAGER_SUBSYSTEM_DEF(input) macro_set = list( "Any" = "\"KeyDown \[\[*\]\] \[\[map.mouse-pos\]\] \[\[map.size\]\]\"", "Any+UP" = "\"KeyUp \[\[*\]\] \[\[map.mouse-pos\]\] \[\[map.size\]\]\"", - "Back" = "\".winset \\\"input.text=\\\"\\\"\\\"\"", - "Tab" = "\".winset \\\"input.focus=true?map.focus=true:input.focus=true\\\"\"", + "Back" = "\".output output_browser.browseroutput:update [TGUI_PANEL_CLEAR_MESSAGE]\\n.winset \\\"input.text=\\\"\\\"\\\"\"", + "Tab" = "\".output output_browser.browseroutput:update [TGUI_PANEL_FOCUS_MESSAGE]\\n.winset \\\"output_browser.browseroutput.focus=true?map.focus=true:output_browser.browseroutput.focus=true\\\"\"", "Escape" = "\".winset \\\"[SKIN_ESCAPE_MENU].is-visible=true?[SKIN_ESCAPE_MENU].is-visible=false:[SKIN_ESCAPE_MENU].is-visible=true\\\"\\n.output [SKIN_ESCAPE_MENU]:update [ESCAPE_MENU_TOGGLE_MESSAGE]\\nReset-Held-Keys\"", ) diff --git a/code/controllers/subsystem/ipintel.dm b/code/controllers/subsystem/ipintel.dm index e3e33d1d79e5..500a8bf32e1f 100644 --- a/code/controllers/subsystem/ipintel.dm +++ b/code/controllers/subsystem/ipintel.dm @@ -195,7 +195,8 @@ SUBSYSTEM_DEF(ipintel) QDEL_NULL(query) -ADMIN_VERB(ipintel_allow, R_BAN, "Whitelist Player VPN", "Allow a player to connect even if they are using a VPN.", ADMIN_CATEGORY_IPINTEL, ckey as text) +ADMIN_VERB(ipintel_allow, R_BAN, "Whitelist Player VPN", "Allow a player to connect even if they are using a VPN.", ADMIN_CATEGORY_IPINTEL) + VERB_ARG(ckey, VERB_ARG_TYPE_TEXT, VERB_ARG_SOURCE_INPUT) if (!SSipintel.is_enabled()) to_chat(user, "The ipintel system is not currently enabled but you can still edit the whitelists") if(SSipintel.is_whitelisted(ckey)) @@ -219,7 +220,8 @@ ADMIN_VERB(ipintel_allow, R_BAN, "Whitelist Player VPN", "Allow a player to conn QDEL_NULL(query) message_admins("IPINTEL: [key_name_admin(user)] has whitelisted '[ckey]'") -ADMIN_VERB(ipintel_revoke, R_BAN, "Revoke Player VPN Whitelist", "Revoke a player's VPN whitelist.", ADMIN_CATEGORY_IPINTEL, ckey as text) +ADMIN_VERB(ipintel_revoke, R_BAN, "Revoke Player VPN Whitelist", "Revoke a player's VPN whitelist.", ADMIN_CATEGORY_IPINTEL) + VERB_ARG(ckey, VERB_ARG_TYPE_TEXT, VERB_ARG_SOURCE_INPUT) if (!SSipintel.is_enabled()) to_chat(user, "The ipintel system is not currently enabled but you can still edit the whitelists") if(!SSipintel.is_whitelisted(ckey)) diff --git a/code/controllers/subsystem/map_vote.dm b/code/controllers/subsystem/map_vote.dm index 4ee505e8ff3f..e3f1b2a071a5 100644 --- a/code/controllers/subsystem/map_vote.dm +++ b/code/controllers/subsystem/map_vote.dm @@ -137,8 +137,10 @@ SUBSYSTEM_DEF(map_vote) // Remove stale (played twice in the past KEEP_ROUNDS_MAP + 1 rounds (including this one as the + 1)) maps var/list/freshened_valid_maps = list() for(var/map_name in pop_valid_maps) + /* // APOC EDIT REMOVAL START - (Readd if we add more then one real map.) if(map_name in SSpersistence.blocked_maps) continue + */ // APOC EDIT REMOVAL END freshened_valid_maps += map_name // We might stale out all valid maps, in that case just ignore the stale system diff --git a/code/controllers/subsystem/minor_mapping.dm b/code/controllers/subsystem/minor_mapping.dm index ff9ba5a9ee0b..c7e9c88a8ec4 100644 --- a/code/controllers/subsystem/minor_mapping.dm +++ b/code/controllers/subsystem/minor_mapping.dm @@ -24,9 +24,9 @@ SUBSYSTEM_DEF(minor_mapping) #else trigger_migration(CONFIG_GET(number/mice_roundstart)) place_satchels(satchel_amount = 2) - var/weakpoint_spawns = 3 + var/weakpoint_spawns = 5 if(HAS_TRAIT(SSstation, STATION_TRAIT_SPAWN_WEAKPOINTS)) - weakpoint_spawns = rand(4,8) + weakpoint_spawns = rand(6,12) weakpoint_spawns += SSmapping.current_map.bonus_weakpoints //This will add 0 by default, or additional on large maps where it's included in the config. place_weakpoints(weakpoint_spawns) diff --git a/code/controllers/subsystem/networks/research.dm b/code/controllers/subsystem/networks/research.dm index 8a48e90c2661..41785e1f031d 100644 --- a/code/controllers/subsystem/networks/research.dm +++ b/code/controllers/subsystem/networks/research.dm @@ -1,58 +1,47 @@ - SUBSYSTEM_DEF(research) name = "Research" priority = FIRE_PRIORITY_RESEARCH - wait = 10 + wait = 1 SECONDS dependencies = list( /datum/controller/subsystem/processing/station, ) - //TECHWEB STATIC - var/list/techweb_nodes = list() //associative id = node datum - var/list/techweb_designs = list() //associative id = node datum - var/list/list/datum/design/item_to_design = list() //typepath = list of design datums - ///List of all techwebs, generating points or not. - ///Autolathes, Mechfabs, and others all have shared techwebs, for example. - var/list/datum/techweb/techwebs = list() + /// An associative list of techweb node typepaths to instances. + var/list/techweb_nodes = list() + /// An associative list of design typepaths to instances. + var/list/techweb_designs = list() - var/datum/techweb_node/error_node/error_node //These two are what you get if a node/design is deleted and somehow still stored in a console. - var/datum/design/error_design/error_design + /// An associative list of item typepaths to a list of design typepaths that build that item + /// e.g: [/obj/item/wrench --> [/datum/design/wrench...]] + var/list/item_to_design = list() - //ERROR LOGGING - ///associative id = number of times - var/list/invalid_design_ids = list() - ///associative id = number of times - var/list/invalid_node_ids = list() - ///associative id = error message - var/list/invalid_node_boost = list() + /// List of all techwebs, generating points or not. + /// Autolathes, Mechfabs, and others all have shared techwebs, for example. + var/list/datum/techweb/techwebs = list() - ///associative id = TRUE + /// A list of techweb node paths that all techwebs start with. var/list/techweb_nodes_starting = list() - ///category name = list(node.id = TRUE) - var/list/techweb_categories = list() - ///List of all items that can unlock a node. (node.id = list(items)) + /// An associative list of item paths to a list of techweb nodes that depend on that item. + /// e.g: [/obj/item/scalpel/alien --> [/datum/techweb_node/alien/base, /datum/techweb_node/alien/engi...]] var/list/techweb_unlock_items = list() - ///Node ids that should be hidden by default. + /// A list of techweb node paths that are hidden by default. Associative for faster lookups. var/list/techweb_nodes_hidden = list() - ///Node ids that are exclusive to the BEPIS. + /// A list of techweb node paths that are exclusive to the BEPIS. var/list/techweb_nodes_experimental = list() - ///path = list(point type = value) + /// An associative list of item paths to a list of points granted. Used in the destructive analyzer only. var/list/techweb_point_items = list( /obj/item/assembly/signaler/anomaly = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) ) - var/list/errored_datums = list() - ///Associated list of all point types that techwebs will have and their respective 'abbreviated' name. + /// An associative list of all point types that techwebs will have and their respective 'abbreviated' name. + /// If you introduce a new point type, ADD IT HERE AS WELL! var/list/point_types = list(TECHWEB_POINT_TYPE_GENERIC = "Gen. Res.") + //---------------------------------------------- var/list/single_server_income = list( TECHWEB_POINT_TYPE_GENERIC = TECHWEB_SINGLE_SERVER_INCOME, ) //^^^^^^^^ ALL OF THESE ARE PER SECOND! ^^^^^^^^ - //Aiming for 1.5 hours to max R&D - //[88nodes * 5000points/node] / [1.5hr * 90min/hr * 60s/min] - //Around 450000 points max??? - /// The global list of raw anomaly types that have been refined, for hard limits. var/list/created_anomaly_types = list() /// The hard limits of cores created for each anomaly type. For faster code lookup without switch statements. @@ -70,248 +59,101 @@ SUBSYSTEM_DEF(research) ) /// Lookup list for ordnance briefers. - var/list/ordnance_experiments = list() + var/list/datum/experiment/ordnance/ordnance_experiments = list() /// Lookup list for scipaper partners. var/list/datum/scientific_partner/scientific_partners = list() /datum/controller/subsystem/research/Initialize() - initialize_all_techweb_designs() - initialize_all_techweb_nodes() - populate_ordnance_experiments() - new /datum/techweb/science - new /datum/techweb/admin - new /datum/techweb/oldstation - autosort_categories() - error_design = new - error_node = new + initialize_designs() + initialize_nodes() + initialize_ordnance_experiments() + new /datum/techweb/science() return SS_INIT_SUCCESS /datum/controller/subsystem/research/fire() - for(var/datum/techweb/techweb_list as anything in techwebs) - if(!techweb_list.should_generate_points) + for(var/datum/techweb/techweb as anything in techwebs) + if(!techweb.should_generate_points) continue + + // Point generation var/list/bitcoins = list() - for(var/obj/machinery/rnd/server/miner as anything in techweb_list.techweb_servers) + for(var/obj/machinery/rnd/server/miner as anything in techweb.techweb_servers) if(miner.working) bitcoins = single_server_income.Copy() break //Just need one to work. - if(!isnull(techweb_list.last_income)) - var/income_time_difference = world.time - techweb_list.last_income - techweb_list.last_bitcoins = bitcoins // Doesn't take tick drift into account - for(var/i in bitcoins) - bitcoins[i] *= (income_time_difference / 10) * techweb_list.income_modifier - techweb_list.add_point_list(bitcoins) - - techweb_list.last_income = world.time - - if(length(techweb_list.research_queue_nodes)) - techweb_list.research_node_id(techweb_list.research_queue_nodes[1]) // Attempt to research the first node in queue if possible - - for(var/node_id in techweb_list.research_queue_nodes) - var/datum/techweb_node/node = SSresearch.techweb_node_by_id(node_id) - if(node.is_free(techweb_list)) // Automatically research all free nodes in queue if any - techweb_list.research_node(node) - -/datum/controller/subsystem/research/proc/autosort_categories() - for(var/i in techweb_nodes) - var/datum/techweb_node/I = techweb_nodes[i] - if(techweb_categories[I.category]) - techweb_categories[I.category][I.id] = TRUE - else - techweb_categories[I.category] = list(I.id = TRUE) - -/datum/controller/subsystem/research/proc/techweb_node_by_id(id) - return techweb_nodes[id] || error_node - -/datum/controller/subsystem/research/proc/techweb_design_by_id(id) - return techweb_designs[id] || error_design - -/datum/controller/subsystem/research/proc/on_design_deletion(datum/design/D) - for(var/i in techweb_nodes) - var/datum/techweb_node/TN = techwebs[i] - TN.on_design_deletion(TN) - for(var/i in techwebs) - var/datum/techweb/T = i - T.recalculate_nodes(TRUE) - -/datum/controller/subsystem/research/proc/on_node_deletion(datum/techweb_node/TN) - for(var/i in techweb_nodes) - var/datum/techweb_node/TN2 = techwebs[i] - TN2.on_node_deletion(TN) - for(var/i in techwebs) - var/datum/techweb/T = i - T.recalculate_nodes(TRUE) - -/datum/controller/subsystem/research/proc/initialize_all_techweb_nodes(clearall = FALSE) - if(islist(techweb_nodes) && clearall) - QDEL_LIST(techweb_nodes) - if(islist(techweb_nodes_starting && clearall)) - techweb_nodes_starting.Cut() - var/list/returned = list() - for(var/path in subtypesof(/datum/techweb_node)) - var/datum/techweb_node/TN = path - if(isnull(initial(TN.id))) - continue - TN = new path - if(returned[initial(TN.id)]) - stack_trace("WARNING: Techweb node ID clash with ID [initial(TN.id)] detected! Path: [path]") - errored_datums[TN] = initial(TN.id) + if(!isnull(techweb.last_income)) + var/income_time_difference = world.time - techweb.last_income + techweb.last_bitcoins = bitcoins // Doesn't take tick drift into account + for(var/point_type in bitcoins) + bitcoins[point_type] *= (income_time_difference / 10) * techweb.income_modifier + techweb.adjust_multiple_points(bitcoins) + + techweb.last_income = world.time + + // Research queue + if(length(techweb.research_queue_nodes)) + techweb.research_node(techweb.research_queue_nodes[1]) // Attempt to research the first node in queue if possible + + for(var/node_path in techweb.research_queue_nodes) + var/datum/techweb_node/node = techweb_nodes[node_path] + if(node.is_free(techweb)) // Automatically research all free nodes in queue if any + techweb.research_node(node) + +/datum/controller/subsystem/research/proc/initialize_designs() + for(var/datum/design/design_path as anything in valid_subtypesof(/datum/design)) + var/datum/design/new_design = new design_path() + // This design doesn't want to exist. OK THEN! + if(QDELING(new_design)) continue - returned[initial(TN.id)] = TN - if(TN.starting_node) - techweb_nodes_starting[TN.id] = TRUE - for(var/id in techweb_nodes) - var/datum/techweb_node/TN = techweb_nodes[id] - TN.Initialize() - techweb_nodes = returned - if (!verify_techweb_nodes()) //Verify all nodes have ids and such. - stack_trace("Invalid techweb nodes detected") - calculate_techweb_nodes() - calculate_techweb_item_unlocking_requirements() - if (!verify_techweb_nodes()) //Verify nodes and designs have been crosslinked properly. - CRASH("Invalid techweb nodes detected") -/datum/controller/subsystem/research/proc/initialize_all_techweb_designs(clearall = FALSE) - if(islist(techweb_designs) && clearall) - item_to_design = list() - QDEL_LIST(techweb_designs) - var/list/returned = list() - for(var/path in subtypesof(/datum/design)) - var/datum/design/DN = path - if(isnull(initial(DN.id))) - stack_trace("WARNING: Design with null ID detected. Build path: [initial(DN.build_path)]") - continue - else if(initial(DN.id) == DESIGN_ID_IGNORE) - continue - DN = new path - if(returned[initial(DN.id)]) - stack_trace("WARNING: Design ID clash with ID [initial(DN.id)] detected! Path: [path]") - errored_datums[DN] = initial(DN.id) - continue - var/build_path = initial(DN.build_path) + var/build_path = design_path::build_path if(!isnull(build_path)) - if(!(build_path in item_to_design)) - item_to_design[build_path] = list() - item_to_design[build_path] += DN - DN.InitializeMaterials() //Initialize the materials in the design - returned[initial(DN.id)] = DN - techweb_designs = returned - verify_techweb_designs() - - -/datum/controller/subsystem/research/proc/verify_techweb_nodes() - . = TRUE - for(var/n in techweb_nodes) - var/datum/techweb_node/N = techweb_nodes[n] - if(!istype(N)) - WARNING("Invalid research node with ID [n] detected and removed.") - techweb_nodes -= n - research_node_id_error(n) - . = FALSE - for(var/p in N.prereq_ids) - var/datum/techweb_node/P = techweb_nodes[p] - if(!istype(P)) - WARNING("Invalid research prerequisite node with ID [p] detected in node [N.display_name]\[[N.id]\] removed.") - N.prereq_ids -= p - research_node_id_error(p) - . = FALSE - for(var/d in N.design_ids) - var/datum/design/D = techweb_designs[d] - if(!istype(D)) - WARNING("Invalid research design with ID [d] detected in node [N.display_name]\[[N.id]\] removed.") - N.design_ids -= d - design_id_error(d) - . = FALSE - for(var/u in N.unlock_ids) - var/datum/techweb_node/U = techweb_nodes[u] - if(!istype(U)) - WARNING("Invalid research unlock node with ID [u] detected in node [N.display_name]\[[N.id]\] removed.") - N.unlock_ids -= u - research_node_id_error(u) - . = FALSE - for(var/p in N.required_items_to_unlock) - if(!ispath(p)) - N.required_items_to_unlock -= p - WARNING("[p] is not a valid path.") - node_boost_error(N.id, "[p] is not a valid path.") - . = FALSE - var/list/points = N.required_items_to_unlock[p] - if(!isnull(points)) - N.required_items_to_unlock -= p - node_boost_error(N.id, "No valid list.") - WARNING("No valid list.") - . = FALSE - CHECK_TICK + LAZYADD(item_to_design[build_path], design_path) -/datum/controller/subsystem/research/proc/verify_techweb_designs() - for(var/d in techweb_designs) - var/datum/design/D = techweb_designs[d] - if(!istype(D)) - stack_trace("WARNING: Invalid research design with ID [d] detected and removed.") - techweb_designs -= d - CHECK_TICK + techweb_designs[design_path] = new_design -/datum/controller/subsystem/research/proc/research_node_id_error(id) - if(invalid_node_ids[id]) - invalid_node_ids[id]++ - else - invalid_node_ids[id] = 1 - -/datum/controller/subsystem/research/proc/design_id_error(id) - if(invalid_design_ids[id]) - invalid_design_ids[id]++ - else - invalid_design_ids[id] = 1 - -/datum/controller/subsystem/research/proc/calculate_techweb_nodes() - for(var/design_id in techweb_designs) - var/datum/design/D = techweb_designs[design_id] - D.unlocked_by.Cut() - for(var/node_id in techweb_nodes) - var/datum/techweb_node/node = techweb_nodes[node_id] - node.unlock_ids = list() - for(var/i in node.design_ids) - var/datum/design/D = techweb_designs[i] - node.design_ids[i] = TRUE - D.unlocked_by += node.id - if(node.hidden) - techweb_nodes_hidden[node.id] = TRUE - if(node.experimental) - techweb_nodes_experimental[node.id] = TRUE - CHECK_TICK - generate_techweb_unlock_linking() - -/datum/controller/subsystem/research/proc/generate_techweb_unlock_linking() - for(var/node_id in techweb_nodes) //Clear all unlock links to avoid duplication. - var/datum/techweb_node/node = techweb_nodes[node_id] - node.unlock_ids = list() - for(var/node_id in techweb_nodes) - var/datum/techweb_node/node = techweb_nodes[node_id] - for(var/prereq_id in node.prereq_ids) - var/datum/techweb_node/prereq_node = techweb_node_by_id(prereq_id) - prereq_node.unlock_ids[node.id] = node - -/datum/controller/subsystem/research/proc/calculate_techweb_item_unlocking_requirements() - for(var/node_id in techweb_nodes) - var/datum/techweb_node/node = techweb_nodes[node_id] - for(var/path in node.required_items_to_unlock) - if(!ispath(path)) - continue - if(length(techweb_unlock_items[path])) - techweb_unlock_items[path][node.id] = node.required_items_to_unlock[path] - else - techweb_unlock_items[path] = list(node.id = node.required_items_to_unlock[path]) - CHECK_TICK +/datum/controller/subsystem/research/proc/initialize_nodes() + for(var/datum/techweb_node/node_path as anything in valid_subtypesof(/datum/techweb_node)) + var/datum/techweb_node/new_node = new node_path() + // This node doesn't want to exist. OK THEN! + if(QDELING(new_node)) + continue -/datum/controller/subsystem/research/proc/populate_ordnance_experiments() + if(new_node.node_flags & TECHWEB_NODE_STARTER) + techweb_nodes_starting += node_path + if(new_node.node_flags & TECHWEB_NODE_HIDDEN) + techweb_nodes_hidden[node_path] = TRUE // assoc for speed + if(new_node.node_flags & TECHWEB_NODE_EXPERIMENTAL) + techweb_nodes_experimental += node_path + + // Tell our unlocked designs that we unlock them + for(var/design_path in new_node.unlocked_designs) + var/datum/design/unlocked_design = techweb_designs[design_path] + unlocked_design.unlocked_by += node_path + + // Register that our required items unlock us + for(var/required_item_path in new_node.required_items_to_unlock) + LAZYADD(techweb_unlock_items[required_item_path], node_path) + + techweb_nodes[node_path] = new_node + + // We have to do this after the above loop to ensure everything has been initialized + for(var/node_path, _node in techweb_nodes) + var/datum/techweb_node/node = _node + // Tell our prerequisite nodes that we are unlocked by them + for(var/prerequisite_path in node.prerequisite_nodes) + var/datum/techweb_node/prerequisite_node = techweb_nodes[prerequisite_path] + LAZYADD(prerequisite_node.unlocked_nodes, node_path) + +/datum/controller/subsystem/research/proc/initialize_ordnance_experiments() for (var/datum/experiment/ordnance/experiment_path as anything in subtypesof(/datum/experiment/ordnance)) - if (initial(experiment_path.experiment_proper)) + if (experiment_path::experiment_proper) ordnance_experiments += new experiment_path() for(var/partner_path in subtypesof(/datum/scientific_partner)) var/datum/scientific_partner/partner = new partner_path - if(!partner.accepted_experiments.len) + if(!length(partner.accepted_experiments)) for (var/datum/experiment/ordnance/ordnance_experiment as anything in ordnance_experiments) partner.accepted_experiments += ordnance_experiment.type scientific_partners += partner @@ -322,12 +164,9 @@ SUBSYSTEM_DEF(research) */ /datum/controller/subsystem/research/proc/get_available_servers(turf/location) var/list/local_servers = list() - if(!location) - return local_servers - for (var/datum/techweb/individual_techweb as anything in techwebs) - var/list/servers = find_valid_servers(location, individual_techweb) - if(length(servers)) - local_servers += servers + if(location) + for (var/datum/techweb/individual_techweb as anything in techwebs) + local_servers += find_valid_servers(location, individual_techweb) return local_servers /** @@ -356,3 +195,10 @@ SUBSYSTEM_DEF(research) /datum/controller/subsystem/research/proc/increment_existing_anomaly_cores(core_type) var/existing = created_anomaly_types[core_type] || 0 created_anomaly_types[core_type] = existing + 1 + +/// Helper proc to turn an associative list of points into a more human readable format. +/proc/techweb_point_display_generic(list/point_list) + var/list/ret = list() + for(var/point_type, point_amount in point_list) + ret += "[SSresearch.point_types[point_type] || "ERRORED POINT TYPE"]: [point_amount]" + return ret.Join("
") diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm index 06625c62b2b2..89e9aced8030 100644 --- a/code/controllers/subsystem/processing/quirks.dm +++ b/code/controllers/subsystem/processing/quirks.dm @@ -37,6 +37,7 @@ GLOBAL_LIST_INIT_TYPED(quirk_blacklist, /list/datum/quirk, list( list(/datum/quirk/darkpack/monochrome_vision, /datum/quirk/darkpack/wolf_sight), // DARKPACK EDIT ADD - MERITS_FLAWS - MERITS_FLAWS list(/datum/quirk/darkpack/monochrome_vision, /datum/quirk/item_quirk/blindness/), // DARKPACK EDIT ADD - MERITS_FLAWS - MERITS_FLAWS list(/datum/quirk/item_quirk/blindness, /datum/quirk/darkpack/wolf_sight), // DARKPACK EDIT ADD - MERITS_FLAWS - MERITS_FLAWS + list(/datum/quirk/darkpack/banned_transformation, /datum/quirk/darkpack/metamorph), // DARKPACK EDIT ADD - MERITS_FLAWS - MERITS_FLAWS list(/datum/quirk/darkpack/thirst_of_ages, /datum/quirk/darkpack/organovore), // DARKPACK EDIT ADD - MERITS_FLAWS - MERITS_FLAWS )) diff --git a/code/controllers/subsystem/spatial_gridmap.dm b/code/controllers/subsystem/spatial_gridmap.dm index f2d6c20554fb..bf5e07f027e6 100644 --- a/code/controllers/subsystem/spatial_gridmap.dm +++ b/code/controllers/subsystem/spatial_gridmap.dm @@ -9,26 +9,30 @@ * these datums shouldnt have significant behavior, they should just hold data. the lists are filled and emptied by the subsystem. */ /datum/spatial_grid_cell - ///our x index in the list of cells. this is our index inside of our row list + /// Our x index in the list of cells. this is our index inside of our row list var/cell_x - ///our y index in the list of cells. this is the index of our row list inside of our z level grid + /// Our y index in the list of cells. this is the index of our row list inside of our z level grid var/cell_y - ///which z level we belong to, corresponding to the index of our gridmap in SSspatial_grid.grids_by_z_level + /// Which z level we belong to, corresponding to the index of our gridmap in SSspatial_grid.grids_by_z_level var/cell_z - //every data point in a grid cell is separated by usecase + // Every data point in a grid cell is separated by usecase - //when empty, the contents lists of these grid cell datums are just references to a dummy list from SSspatial_grid - //this is meant to allow a great compromise between memory usage and speed. - //now orthogonal_range_search() doesnt need to check if the list is null and each empty list is taking 12 bytes instead of 24 - //the only downside is that it needs to be switched over to a new list when it goes from 0 contents to > 0 contents and switched back on the opposite case + // When empty, the contents lists of these grid cell datums are just references to a dummy list from SSspatial_grid + // This is meant to allow a great compromise between memory usage and speed. + // Now orthogonal_range_search() doesnt need to check if the list is null and each empty list is taking 12 bytes instead of 24 + // The only downside is that it needs to be switched over to a new list when it goes from 0 contents to > 0 contents and switched back on the opposite case - ///every hearing sensitive movable inside this cell + /// Every hearing sensitive movable inside this cell var/list/hearing_contents - ///every client possessed mob inside this cell + /// Every client possessed mob inside this cell var/list/client_contents - ///every atmos machine inside this cell + /// Every atmos machine inside this cell var/list/atmos_contents + /// Every dynamic light source *affecting* this cell + /// Light sources have their own radius rather than static polling range, so we need to store them in multiple cells + var/list/dynamic_light_sources + /datum/spatial_grid_cell/New(cell_x, cell_y, cell_z) . = ..() src.cell_x = cell_x @@ -40,9 +44,11 @@ if(length(dummy_list)) dummy_list.Cut() stack_trace("SSspatial_grid.dummy_list had something inserted into it at some point! this is a problem as it is supposed to stay empty") + hearing_contents = dummy_list client_contents = dummy_list atmos_contents = dummy_list + dynamic_light_sources = dummy_list /datum/spatial_grid_cell/Destroy(force) if(!force)//the response to someone trying to qdel this is a right proper fuck you @@ -142,22 +148,20 @@ SUBSYSTEM_DEF(spatial_grid) ///removes an initialized and probably deleted movable from our pre init queue before we're initialized /datum/controller/subsystem/spatial_grid/proc/remove_from_pre_init_queue(atom/movable/movable_to_remove, exclusive_type) - if(exclusive_type) - waiting_to_add_by_type[exclusive_type] -= movable_to_remove - - var/waiting_movable_is_in_other_queues = FALSE//we need to check if this movable is inside the other queues + if(isnull(exclusive_type)) + UnregisterSignal(movable_to_remove, COMSIG_QDELETING) for(var/type in waiting_to_add_by_type) - if(movable_to_remove in waiting_to_add_by_type[type]) - waiting_movable_is_in_other_queues = TRUE + waiting_to_add_by_type[type] -= movable_to_remove + return - if(!waiting_movable_is_in_other_queues) - UnregisterSignal(movable_to_remove, COMSIG_QDELETING) + waiting_to_add_by_type[exclusive_type] -= movable_to_remove - return + // We need to check if this movable is inside the other queues + for(var/type, queue in waiting_to_add_by_type) + if(movable_to_remove in queue) + return UnregisterSignal(movable_to_remove, COMSIG_QDELETING) - for(var/type in waiting_to_add_by_type) - waiting_to_add_by_type[type] -= movable_to_remove ///if a movable is inside our pre init queue before we're initialized and it gets deleted we need to remove that reference with this proc /datum/controller/subsystem/spatial_grid/proc/queued_item_deleted(atom/movable/movable_being_deleted) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 96a6b4225b44..9066c336c5f1 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -35,8 +35,13 @@ SUBSYSTEM_DEF(ticker) var/tipped = FALSE //Did we broadcast the tip of the day yet? var/selected_tip // What will be the tip of the day? - var/timeLeft //pregame timer - var/start_at + /// Time left until the round starts after all subsystems initialize + var/timeLeft = 120 SECONDS + /// value used to initialize `timeLeft` when the master subsystem finishes initializing. + /// We do this to allow for the timer to be set manually before all subsystems initialize, + /// while also making sure that when the timer does start, it does so at the value we have set. + /// This is set to the config value when SSticker initializes, so setting this only makes sense after that point. + var/start_at = 120 SECONDS var/gametime_offset = 21 HOURS //Deciseconds to add to world.time for station time. // DARKPACK EDIT ADD - CITY_TIME var/city_time_rate_multiplier = 2 //factor of station time progressal vs real time. // DARKPACK EDIT CHANGE - CITY_TIME @@ -115,7 +120,7 @@ SUBSYSTEM_DEF(ticker) else set_lobby_music("[global.config.directory]/title_music/sounds/[pick(music)]") - start_at = world.time + (CONFIG_GET(number/lobby_countdown) * (1 SECONDS)) + start_at = CONFIG_GET(number/lobby_countdown) * (1 SECONDS) // DARKPACK EDIT ADD START - CITY_TIME round_start_time = start_at // May be changed later, but prevents the time from jumping back when the round actually starts gametime_offset = (CONFIG_GET(number/shift_time_start_hour) * (1 HOURS)) @@ -125,8 +130,6 @@ SUBSYSTEM_DEF(ticker) /datum/controller/subsystem/ticker/fire() switch(current_state) if(GAME_STATE_STARTUP) - if(Master.initializations_finished_with_no_players_logged_in) - start_at = world.time + (CONFIG_GET(number/lobby_countdown) * (1 SECONDS)) for(var/client/C in GLOB.clients) window_flash(C, ignorepref = TRUE) //let them know lobby has opened up. to_chat(world, span_notice("Welcome to [station_name()]!")) @@ -141,8 +144,6 @@ SUBSYSTEM_DEF(ticker) fire() if(GAME_STATE_PREGAME) //lobby stats for statpanels - if(isnull(timeLeft)) - timeLeft = max(0, start_at - world.time) totalPlayers = LAZYLEN(GLOB.new_player_list) totalPlayersReady = 0 total_admins_ready = 0 @@ -190,7 +191,6 @@ SUBSYSTEM_DEF(ticker) if(!setup()) //setup failed current_state = GAME_STATE_STARTUP - start_at = world.time + (CONFIG_GET(number/lobby_countdown) * (1 SECONDS)) timeLeft = null Master.SetRunLevel(RUNLEVEL_LOBBY) SEND_SIGNAL(src, COMSIG_TICKER_ERROR_SETTING_UP) @@ -623,6 +623,8 @@ SUBSYSTEM_DEF(ticker) var/atom/movable/screen/splash/fade_out = new(null, null, living.client, TRUE) fade_out.fade(TRUE) living.client.init_verbs() + living.client.show_spawn_text_overlay() + livings += living if(livings.len) addtimer(CALLBACK(src, PROC_REF(release_characters), livings), 3 SECONDS, TIMER_CLIENT_TIME) @@ -812,15 +814,11 @@ SUBSYSTEM_DEF(ticker) send2otherserver(news_source, news_message, "News_Report") /datum/controller/subsystem/ticker/proc/GetTimeLeft() - if(isnull(SSticker.timeLeft)) - return max(0, start_at - world.time) return timeLeft /datum/controller/subsystem/ticker/proc/SetTimeLeft(newtime) - if(newtime >= 0 && isnull(timeLeft)) //remember, negative means delayed - start_at = world.time + newtime - else - timeLeft = newtime + start_at = newtime + timeLeft = newtime /datum/controller/subsystem/ticker/proc/SetRoundEndSound(the_sound) set waitfor = FALSE diff --git a/code/controllers/subsystem/transport.dm b/code/controllers/subsystem/transport.dm index f64e32953e28..bd869be20fb4 100644 --- a/code/controllers/subsystem/transport.dm +++ b/code/controllers/subsystem/transport.dm @@ -6,11 +6,22 @@ PROCESSING_SUBSYSTEM_DEF(transport) ///associative list of the form: list(lift_id = list(all transport_controller datums attached to lifts of that type)) var/list/transports_by_type = list() + ///all tram navigation beacons linked to the subsystem var/list/nav_beacons = list() + ///all tram crossing signals linked to the subsystem var/list/crossing_signals = list() + ///all tram guideway sensors linked to the subsystem var/list/sensors = list() + ///all tram doors linked to the subsystem var/list/doors = list() + ///all tram info displays linked to the subsystem var/list/displays = list() + ///list of default tram IDs for admin tools/debugging + var/list/debug_tram_list = list( + TRAMSTATION_LINE_1, + HERETIC_LINE_1, + HILBERT_LINE_1, + ) ///how much time a tram can take per movement before we notify admins and slow down the tram. in milliseconds var/max_time = 15 ///how many times the tram can move costing over max_time milliseconds before it gets slowed down diff --git a/code/controllers/subsystem/tts.dm b/code/controllers/subsystem/tts.dm index d3a268f69952..b86dbb2b6877 100644 --- a/code/controllers/subsystem/tts.dm +++ b/code/controllers/subsystem/tts.dm @@ -670,7 +670,7 @@ SUBSYSTEM_DEF(tts) if(!SStts.tts_enabled) return FALSE - if(HAS_TRAIT(hearer, TRAIT_DEAF)) + if(HAS_TRAIT(hearer, TRAIT_DEAF) || IS_UNCONSCIOUS(hearer)) return FALSE var/tts_pref = hearer.client?.prefs.read_preference(/datum/preference/choiced/sound_tts) || TTS_SOUND_OFF diff --git a/code/controllers/subsystem/verbs.dm b/code/controllers/subsystem/verbs.dm index e557c55454db..4aa75ccc70dd 100644 --- a/code/controllers/subsystem/verbs.dm +++ b/code/controllers/subsystem/verbs.dm @@ -3,6 +3,7 @@ SUBSYSTEM_DEF(verbs) ss_flags = SS_NO_FIRE init_stage = INITSTAGE_EARLY var/list/datum/verb_metadata/verbs_by_type = list() + var/list/datum/verb_metadata/verbs_by_verb_path = list() /datum/controller/subsystem/verbs/Initialize() if (!length(verbs_by_type)) @@ -12,15 +13,51 @@ SUBSYSTEM_DEF(verbs) /datum/controller/subsystem/verbs/proc/initialize_verb_types() for(var/datum/verb_metadata/verb_type as anything in subtypesof(/datum/verb_metadata)) - verbs_by_type[verb_type] = new verb_type + var/datum/verb_metadata/meta = new verb_type + var/list/pending = GLOB.____pending_verb_args[meta.body_path] + if(pending) + meta.arguments = pending + verbs_by_type[verb_type] = meta + if(meta.verb_path) + verbs_by_verb_path[meta.verb_path] = meta + +/datum/controller/subsystem/verbs/proc/invoke(target, datum/verb_metadata/verb_type, invoker, ...) + if(!initialized) + initialize_verb_types() -/datum/controller/subsystem/verbs/proc/invoke(target, datum/verb_metadata/verb_type, ...) var/datum/verb_metadata/meta = verbs_by_type[verb_type] if(isnull(meta)) CRASH("Attempted to invoke unknown verb '[verb_type]'.") - var/list/invoke_args = args.Copy(3) + var/list/invoke_args = args.Copy(4) + if(invoker) + usr = invoker call(target, meta.body_path)(arglist(invoke_args)) +/datum/controller/subsystem/verbs/proc/invoke_verb(target, verb_path, list/positional_args, invoker) + if(!initialized) + initialize_verb_types() + + var/datum/verb_metadata/meta = verbs_by_verb_path[verb_path] + if(isnull(meta)) + CRASH("invoke_verb called for '[verb_path]' with no metadata registered") + var/resolved_caller = invoker || target + var/client/user_client + if(istype(resolved_caller, /client)) + user_client = resolved_caller + else if(ismob(resolved_caller)) + var/mob/mob_target = resolved_caller + user_client = mob_target.client + if(!user_client) + return + + var/list/structured_args = ____collect_verb_args(user_client, meta.name, meta.arguments, positional_args) + if(isnull(structured_args)) + return + + if(invoker) + usr = invoker + call(target, meta.body_path)(structured_args) + /datum/controller/subsystem/verbs/proc/assign_verb(target, datum/verb_metadata/verb_type) // When launching via dreamseeker and not dreamdaemon, client is created first before any of the subsystems init // This can only happen in dev environments so its not a big deal @@ -36,3 +73,32 @@ SUBSYSTEM_DEF(verbs) if(isnull(meta)) CRASH("Attempted to unassign unknown verb '[verb_type]'.") meta.unassign_from(target) + +/datum/controller/subsystem/verbs/proc/serialize_verb(procpath/verb_path) + var/list/arg_data = list() + var/list/entry = list( + "name" = verb_path.name, + "category" = verb_path.category, + "type" = "[verb_path]", + "args" = arg_data, + ) + + var/datum/verb_metadata/meta = verbs_by_verb_path[verb_path] + if(meta) + entry["type"] = "[meta.verb_path]" + for(var/datum/verb_arg_metadata/arg in meta.arguments) + var/list/arg_entry = list("name" = arg.name, "arg_type" = arg.arg_type, "source" = arg.source) + if(length(arg.options)) + arg_entry["options"] = arg.options + arg_data += list(arg_entry) + else + var/datum/admin_verb/av = SSadmin_verbs.admin_verbs_by_verb_path[verb_path] + if(av) + entry["type"] = "[av.get_verb_path()]" + for(var/datum/verb_arg_metadata/arg in av.arguments) + var/list/arg_entry = list("name" = arg.name, "arg_type" = arg.arg_type, "source" = arg.source) + if(length(arg.options)) + arg_entry["options"] = arg.options + arg_data += list(arg_entry) + + return entry diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/find_flee_location.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/find_flee_location.dm index 9efe9d6fc873..3928bd83b63e 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/find_flee_location.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/find_flee_location.dm @@ -1,10 +1,12 @@ -/// Finds the best adjacent turf to flee to away from a threat and stores it in a blackboard key. -/// Tries get_step_away first, then falls back to shuffled directions if blocked. -/// Returns INSTANT SUCCESS if a step was found, INSTANT FAILURE if completely cornered. +/// Finds a nearby flee waypoint away from a threat and stores it in a blackboard key. +/// Each step tries get_step_away first, then falls back to shuffled directions if blocked. +/// Returns INSTANT SUCCESS if at least one step was found, INSTANT FAILURE if completely cornered. /datum/bt_node/ai_behavior/find_flee_location var/target_key var/hiding_location_key var/destination_key + /// Number of adjacent flee steps to combine into the waypoint. + var/flee_steps = 3 /datum/bt_node/ai_behavior/find_flee_location/perform(seconds_per_tick, datum/ai_controller/controller) var/run_distance = controller.blackboard[BB_BASIC_MOB_FLEE_DISTANCE] || DEFAULT_BASIC_FLEE_DISTANCE @@ -12,26 +14,30 @@ if(QDELETED(target) || !can_see(controller.pawn, target, run_distance)) return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED - var/turf/flee_turf = get_flee_step(controller, target) - if(!flee_turf) + var/turf/flee_turf = get_turf(controller.pawn) + for(var/step in 1 to flee_steps) + var/turf/next_step = get_flee_step(controller, target, flee_turf) + if(!next_step) + break + flee_turf = next_step + if(flee_turf == get_turf(controller.pawn)) return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED controller.set_blackboard_key(destination_key, flee_turf) return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED -/datum/bt_node/ai_behavior/find_flee_location/proc/get_flee_step(datum/ai_controller/controller, atom/target) +/datum/bt_node/ai_behavior/find_flee_location/proc/get_flee_step(datum/ai_controller/controller, atom/target, turf/start_turf) var/mob/living/pawn = controller.pawn - var/turf/pawn_turf = get_turf(pawn) var/datum/can_pass_info/pass_info = new(pawn, controller.get_access()) - var/turf/next_step = get_step_away(pawn, target) - if(!isnull(next_step) && next_step != pawn_turf && !next_step.density && !pawn_turf.LinkBlockedWithAccess(next_step, pass_info)) + var/turf/next_step = get_step_away(start_turf, target) + if(!isnull(next_step) && next_step != start_turf && !next_step.density && !start_turf.LinkBlockedWithAccess(next_step, pass_info)) return next_step var/list/all_dirs = GLOB.alldirs.Copy() - all_dirs -= get_dir(pawn, next_step) - all_dirs -= get_dir(pawn, target) + all_dirs -= get_dir(start_turf, next_step) + all_dirs -= get_dir(start_turf, target) shuffle_inplace(all_dirs) for(var/dir in all_dirs) - next_step = get_step(pawn, dir) - if(!isnull(next_step) && !next_step.density && !pawn_turf.LinkBlockedWithAccess(next_step, pass_info)) + next_step = get_step(start_turf, dir) + if(!isnull(next_step) && !next_step.density && !start_turf.LinkBlockedWithAccess(next_step, pass_info)) return next_step return null diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/nearest_targeting.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/nearest_targeting.dm index 9a0d6d041ef2..9a4c9a1ca487 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/nearest_targeting.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/nearest_targeting.dm @@ -1,6 +1,3 @@ -/// Pick nearest instead of any, we should probably move this into a datum of some kind in the future? +/// Acquire targets with nearest strategy pre-selected. /datum/bt_node/ai_behavior/acquire_target/update_combat_targets/nearest - -/datum/bt_node/ai_behavior/acquire_target/update_combat_targets/nearest/pick_final_target(datum/ai_controller/controller, list/filtered_targets) - var/turf/our_position = get_turf(controller.pawn) - return get_closest_atom(/atom/, filtered_targets, our_position) + target_priority_strategy = /datum/target_priority_strategy/nearest diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm index 2fd2e494ef16..aff32a06fa25 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm @@ -10,16 +10,14 @@ GLOBAL_LIST_INIT(target_interested_atoms, typecacheof(list(/mob, /obj/machinery/ /datum/bt_node/ai_behavior/acquire_target/update_combat_targets target_source = /datum/target_source/hearers targeting_strategy = BB_TARGETING_STRATEGY + target_priority_strategy = BB_TARGET_PRIORITY_STRATEGY vision_range = 9 + revalidation_mode = TARGET_RESELECT_WITH_SELECTION target_loss_distance = 16 /// Blackboard key for aggro range, uses vision range if not specified var/aggro_range_key = BB_AGGRO_RANGE /// Blackboard key holding the hiding-location atom (e.g. closet the target ducked into) var/hiding_location_key - /// Blackboard key holding the /datum/target_priority_strategy typepath for selection - var/priority_strategy_key = BB_TARGET_PRIORITY_STRATEGY - /// If we have a priority strategy set, how often do we refresh our target search? - var/priority_refresh_cooldown = 6 SECONDS /datum/bt_node/ai_behavior/acquire_target/update_combat_targets/get_cooldown(datum/ai_controller/controller) if(controller.blackboard[BB_FIND_TARGETS_FIELD(type)]) @@ -29,18 +27,8 @@ GLOBAL_LIST_INIT(target_interested_atoms, typecacheof(list(/mob, /obj/machinery/ /datum/bt_node/ai_behavior/acquire_target/update_combat_targets/can_search(datum/ai_controller/controller) return !(controller.blackboard[BB_FIND_TARGETS_FIELD(type)]) -/datum/bt_node/ai_behavior/acquire_target/update_combat_targets/should_keep_target(datum/ai_controller/controller, datum/targeting_strategy/strategy, atom/current_target) - if(!current_target) - return FALSE - if(!strategy.is_valid_target(controller.pawn, current_target, vision_range)) - return FALSE - var/datum/target_priority_strategy/priority_strategy = GET_TARGET_PRIORITY_STRATEGY(controller.blackboard[priority_strategy_key]) - if(!priority_strategy) - return TRUE - return controller.blackboard[BB_BASIC_MOB_TARGET_REFRESH_COOLDOWN] > world.time - /datum/bt_node/ai_behavior/acquire_target/update_combat_targets/on_no_candidates(datum/ai_controller/controller, atom/current_target, datum/targeting_strategy/strategy, range) - if(current_target && strategy.can_keep_target(controller.pawn, current_target, target_loss_distance)) + if(current_target && strategy.can_keep_target(controller.pawn, current_target, target_loss_distance, controller)) return list(current_target) if(!current_target) failed_to_find_anyone(controller, target_key, targeting_strategy, hiding_location_key) @@ -50,24 +38,12 @@ GLOBAL_LIST_INIT(target_interested_atoms, typecacheof(list(/mob, /obj/machinery/ if(!current_target) failed_to_find_anyone(controller, target_key, targeting_strategy, hiding_location_key) -/datum/bt_node/ai_behavior/acquire_target/update_combat_targets/filter_candidates(datum/ai_controller/controller, list/candidates, datum/targeting_strategy/strategy, atom/current_target) - var/mob/living/pawn = controller.pawn - var/datum/target_priority_strategy/priority_strategy = GET_TARGET_PRIORITY_STRATEGY(controller.blackboard[priority_strategy_key]) - var/current_priority = priority_strategy ? priority_strategy.get_target_priority(controller, current_target) : 0 - var/list/filtered = list() - for(var/atom/candidate as anything in candidates) - if(!strategy.is_valid_target(pawn, candidate, vision_range, controller)) - continue - if(priority_strategy && priority_strategy.get_target_priority(controller, candidate) < current_priority) - continue - filtered += candidate - return filtered - /datum/bt_node/ai_behavior/acquire_target/update_combat_targets/on_target_found(datum/ai_controller/controller, atom/target, datum/targeting_strategy/strategy) - controller.set_blackboard_key(BB_BASIC_MOB_TARGET_REFRESH_COOLDOWN, world.time + priority_refresh_cooldown) var/atom/potential_hiding_location = strategy.find_hidden_mobs(controller.pawn, target) if(potential_hiding_location) controller.set_blackboard_key(hiding_location_key, potential_hiding_location) + else if(hiding_location_key) + controller.clear_blackboard_key(hiding_location_key) /datum/bt_node/ai_behavior/acquire_target/update_combat_targets/proc/failed_to_find_anyone(datum/ai_controller/controller, target_key, targeting_strategy, hiding_location_key) // TEMP DISABLED nuke this if performance improves @@ -137,11 +113,14 @@ GLOBAL_LIST_INIT(target_interested_atoms, typecacheof(list(/mob, /obj/machinery/ accepted_targets += maybe_target // Alright, we found something acceptable, let's use it yeah? - var/atom/target = pick_final_target(controller, accepted_targets) + var/datum/target_priority_strategy/priority_strategy = get_target_priority_strategy(controller) + var/atom/current_target = controller.blackboard[target_key] + var/atom/target = pick_final_target(controller, accepted_targets, priority_strategy, current_target) EVLOG_MAPTEXT(controller, EVLOG_CATEGORY_AI_TARGETING, "[controller.pawn] has selected [target] as a target for blackboard key [target_key]! Behavior: [src]", get_turf(target), "Target: [target]") EVLOG_LINES(controller, EVLOG_CATEGORY_AI_TARGETING, "Line to target", get_turf(controller.pawn), get_turf(target)) - controller.set_blackboard_key(target_key, target) - on_target_found(controller, target, strategy) + if(target != current_target) + controller.set_blackboard_key(target_key, target) + on_target_found(controller, target, targeting_strategy) finish_action(controller, succeeded = TRUE) @@ -152,36 +131,16 @@ GLOBAL_LIST_INIT(target_interested_atoms, typecacheof(list(/mob, /obj/machinery/ qdel(field) // autoclears so it's fine modify_cooldown(get_cooldown(controller)) -/// Picks the final target, preferring higher-priority candidates when a priority strategy is set. -/datum/bt_node/ai_behavior/acquire_target/update_combat_targets/pick_final_target(datum/ai_controller/controller, list/filtered_targets) - var/datum/target_priority_strategy/priority_strategy = GET_TARGET_PRIORITY_STRATEGY(controller.blackboard[priority_strategy_key]) +/// Preserve the combat query's original first-valid behavior when no optional selection strategy is configured. +/datum/bt_node/ai_behavior/acquire_target/update_combat_targets/pick_final_target(datum/ai_controller/controller, list/filtered_targets, datum/target_priority_strategy/priority_strategy, atom/current_target) if(!priority_strategy) return filtered_targets[1] - return priority_strategy.select_target(controller, filtered_targets) + return ..() /// Picks targets based on which one has the lowest health. /datum/bt_node/ai_behavior/acquire_target/update_combat_targets/most_wounded - -/datum/bt_node/ai_behavior/acquire_target/update_combat_targets/most_wounded/pick_final_target(datum/ai_controller/controller, list/filtered_targets) - var/list/living_targets = list() - for(var/mob/living/living_target in filtered_targets) - living_targets += living_target - if(living_targets.len) - sortTim(living_targets, GLOBAL_PROC_REF(cmp_mob_health)) - return living_targets[living_targets.len] - return ..() + target_priority_strategy = /datum/target_priority_strategy/most_wounded /// Prioritizes targets carrying the trait named by our trait_key blackboard key over the rest. /datum/bt_node/ai_behavior/acquire_target/update_combat_targets/prioritize_trait - /// Blackboard key holding the trait that marks a target as high-priority. - var/trait_key = BB_TARGET_PRIORITY_TRAIT - -/datum/bt_node/ai_behavior/acquire_target/update_combat_targets/prioritize_trait/pick_final_target(datum/ai_controller/controller, list/filtered_targets) - var/list/priority_targets = list() - var/priority_trait = controller.blackboard[trait_key] - for(var/atom/target as anything in filtered_targets) - if(HAS_TRAIT(target, priority_trait)) - priority_targets += target - if(length(priority_targets)) - return ..(controller, priority_targets) - return ..() + target_priority_strategy = /datum/target_priority_strategy/prioritize_trait diff --git a/code/datums/ai/basic_mobs/target_priority_strategies/_target_priority_strategy.dm b/code/datums/ai/basic_mobs/target_priority_strategies/_target_priority_strategy.dm index 3cb58ba086c8..0af0fc1d2386 100644 --- a/code/datums/ai/basic_mobs/target_priority_strategies/_target_priority_strategy.dm +++ b/code/datums/ai/basic_mobs/target_priority_strategies/_target_priority_strategy.dm @@ -1,7 +1,7 @@ -/// Target priority datum, exists to allow mobs to have custom targeting priorities. Singleton. +/// Target priority datum, exists to allow target acquisition behaviors to have custom selection policies. Singleton. /datum/target_priority_strategy -/// Returns a number representing the priority of a target, higher -> more likely to attack +/// Returns a number representing the priority of a target, higher -> more likely to be selected. /datum/target_priority_strategy/proc/get_target_priority(datum/ai_controller/controller, atom/target) return 1 @@ -11,3 +11,103 @@ for (var/atom/target as anything in targets) target_priorities[target] = get_target_priority(controller, target) return pick_weight(target_priorities) + +/// Returns TRUE if candidate may replace current_target during a reselection pass. +/// The default is sticky on ties to avoid otherwise-equivalent targets changing every search tick. +/datum/target_priority_strategy/proc/can_replace_target(datum/ai_controller/controller, atom/current_target, atom/candidate) + return get_target_priority(controller, candidate) > get_target_priority(controller, current_target) + +/// Selects the closest candidate. +/datum/target_priority_strategy/nearest + +/datum/target_priority_strategy/nearest/get_target_priority(datum/ai_controller/controller, atom/target) + return -get_dist(controller.pawn, target) + +/datum/target_priority_strategy/nearest/select_target(datum/ai_controller/controller, list/atom/targets) + return get_closest_atom(/atom/, targets, get_turf(controller.pawn)) + +/// Selects the living candidate with the lowest health. +/datum/target_priority_strategy/most_wounded + +/datum/target_priority_strategy/most_wounded/get_target_priority(datum/ai_controller/controller, atom/target) + var/mob/living/living_target = target + if(!istype(living_target)) + return -INFINITY + return -living_target.health + +/datum/target_priority_strategy/most_wounded/select_target(datum/ai_controller/controller, list/atom/targets) + var/list/living_targets = list() + for(var/mob/living/living_target in targets) + living_targets += living_target + if(!length(living_targets)) + return ..() + sortTim(living_targets, GLOBAL_PROC_REF(cmp_mob_health)) + return living_targets[living_targets.len] + +/// Selects candidates carrying the trait configured in trait_key before candidates without it. +/datum/target_priority_strategy/prioritize_trait + /// Blackboard key holding the trait which identifies preferred targets. + var/trait_key = BB_TARGET_PRIORITY_TRAIT + +/datum/target_priority_strategy/prioritize_trait/get_target_priority(datum/ai_controller/controller, atom/target) + return HAS_TRAIT(target, controller.blackboard[trait_key]) ? 2 : 1 + +/datum/target_priority_strategy/prioritize_trait/select_target(datum/ai_controller/controller, list/atom/targets) + var/list/priority_targets = list() + var/priority_trait = controller.blackboard[trait_key] + for(var/atom/target in targets) + if(HAS_TRAIT(target, priority_trait)) + priority_targets += target + return ..(controller, length(priority_targets) ? priority_targets : targets) + +/// Chooses a nonempty target type tier by weight, then randomly chooses a target within that tier. +/// This prevents a large number of low-priority candidates from drowning out one high-priority candidate. +/datum/target_priority_strategy/type_weighted + /// Blackboard key holding an ordered associative list of target typepaths to weights. + var/priorities_key = BB_STEAL_TARGET_PRIORITIES + /// Blackboard key holding the weight for targets which match no configured type. + var/fallback_priority_key = BB_STEAL_FALLBACK_PRIORITY + +/datum/target_priority_strategy/type_weighted/proc/matches_priority_type(atom/target, priority_type) + return istype(target, priority_type) + +/datum/target_priority_strategy/type_weighted/get_target_priority(datum/ai_controller/controller, atom/target) + var/list/priorities = controller.blackboard[priorities_key] + for(var/priority_type in priorities) + if(matches_priority_type(target, priority_type)) + return priorities[priority_type] + return controller.blackboard[fallback_priority_key] || 1 + +/datum/target_priority_strategy/type_weighted/select_target(datum/ai_controller/controller, list/atom/targets) + var/list/priorities = controller.blackboard[priorities_key] + if(!length(priorities)) + return ..() + + var/list/type_buckets = list() + var/list/fallback_targets = list() + for(var/atom/target as anything in targets) + var/matched_type + for(var/priority_type in priorities) + if(matches_priority_type(target, priority_type)) + matched_type = priority_type + break + if(isnull(matched_type)) + fallback_targets += target + continue + var/list/bucket = type_buckets[matched_type] + if(isnull(bucket)) + bucket = list() + type_buckets[matched_type] = bucket + bucket += target + + var/static/fallback_tier = "fallback" + var/list/available_weights = list() + for(var/priority_type in priorities) + if(length(type_buckets[priority_type])) + available_weights[priority_type] = priorities[priority_type] + if(length(fallback_targets)) + available_weights[fallback_tier] = controller.blackboard[fallback_priority_key] || 1 + + var/selected_tier = pick_weight(available_weights) + var/list/selected_targets = selected_tier == fallback_tier ? fallback_targets : type_buckets[selected_tier] + return pick(selected_targets) diff --git a/code/datums/ai/basic_mobs/target_priority_strategies/mining_strategies.dm b/code/datums/ai/basic_mobs/target_priority_strategies/mining_strategies.dm index 569f23fff187..03a5893b0b1d 100644 --- a/code/datums/ai/basic_mobs/target_priority_strategies/mining_strategies.dm +++ b/code/datums/ai/basic_mobs/target_priority_strategies/mining_strategies.dm @@ -76,6 +76,13 @@ return pick(lucky_fella) +/datum/target_priority_strategy/mining/can_replace_target(datum/ai_controller/controller, atom/current_target, atom/candidate) + var/current_priority = get_target_priority(controller, current_target) + var/candidate_priority = get_target_priority(controller, candidate) + if(candidate_priority != current_priority) + return candidate_priority > current_priority + return get_dist(controller.pawn, candidate) < get_dist(controller.pawn, current_target) + /datum/target_priority_strategy/mining/low_node_priority // Higher than normal humans but will instantly pivot towards anyone who attacks or attacked mobs in our vicinity node_priority = AGGRO_PRIORITY_NODE_LOW_PRIO diff --git a/code/datums/ai/basic_mobs/target_sources/_target_source.dm b/code/datums/ai/basic_mobs/target_sources/_target_source.dm index 0a501c5ca131..91fdf3c3237b 100644 --- a/code/datums/ai/basic_mobs/target_sources/_target_source.dm +++ b/code/datums/ai/basic_mobs/target_sources/_target_source.dm @@ -98,7 +98,6 @@ /datum/target_source/oview_items /datum/target_source/oview_items/collect_candidates(mob/living/pawn, datum/ai_controller/controller, range) - . = ..() var/list/candidates = list() for(var/obj/item/item_candidate in oview(range, pawn)) candidates += item_candidate diff --git a/code/datums/ai/basic_mobs/targeting_strategies/basic_targeting_strategy.dm b/code/datums/ai/basic_mobs/targeting_strategies/basic_targeting_strategy.dm index 80aaf28a9fcf..601ffd667af9 100644 --- a/code/datums/ai/basic_mobs/targeting_strategies/basic_targeting_strategy.dm +++ b/code/datums/ai/basic_mobs/targeting_strategies/basic_targeting_strategy.dm @@ -95,8 +95,8 @@ return target.loc return null -/datum/targeting_strategy/basic/can_keep_target(mob/living/living_mob, atom/target, range) - return can_see(living_mob, target, range) +/datum/targeting_strategy/basic/can_keep_target(mob/living/living_mob, atom/target, range, datum/ai_controller/controller = null) + return is_valid_target(living_mob, target, range, controller) /// Returns true if the mob and target share factions. /// Slow path for subtypes with custom_faction_check set; everything else uses TARGETING_FACTION_CHECK directly diff --git a/code/datums/ai/generic_behaviors/acquire_target.dm b/code/datums/ai/generic_behaviors/acquire_target.dm index 6311d82fe2c0..7f0e82199426 100644 --- a/code/datums/ai/generic_behaviors/acquire_target.dm +++ b/code/datums/ai/generic_behaviors/acquire_target.dm @@ -4,6 +4,8 @@ var/target_key /// Either a /datum/targeting_strategy typepath (resolved directly) or a blackboard key string var/targeting_strategy = BB_TARGETING_STRATEGY + /// Optional /datum/target_priority_strategy typepath or blackboard key string. Null means unranked selection. + var/target_priority_strategy /// Typepath of the /datum/target_source type used to gather candidates. turned into the singleton instance when used var/target_source = /datum/target_source/oview /// How far to scan for candidates (passed to the target source). Can be a key too. @@ -22,6 +24,8 @@ var/minimum_distance = 0 /// Strategy/range snapshot from the perform() that kicked off the current async search. VAR_PRIVATE/datum/targeting_strategy/search_strategy + /// Optional selection strategy snapshot from the perform() that kicked off the current async search. + VAR_PRIVATE/datum/target_priority_strategy/search_priority_strategy /// Range snapshot from the perform() that kicked off the current async search. VAR_PRIVATE/search_range @@ -34,25 +38,26 @@ return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/datum/targeting_strategy/strategy = get_targeting_strategy(controller) + var/datum/target_priority_strategy/priority_strategy = get_target_priority_strategy(controller) + var/resolved_vision_range = get_vision_range(controller) var/atom/current_target = controller.blackboard[target_key] - if(should_keep_target(controller, strategy, current_target)) + if(should_keep_target(controller, strategy, priority_strategy, current_target, resolved_vision_range)) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED - if(!isnum(vision_range)) //If there's a blackboard override, use that - vision_range = controller.blackboard[vision_range] || vision_range - if(!must_be_reachable) - return find_and_set_target(controller, strategy, vision_range) + return find_and_set_target(controller, strategy, priority_strategy, resolved_vision_range) // Kick off async reachability search. search_strategy = strategy - search_range = vision_range + search_priority_strategy = priority_strategy + search_range = resolved_vision_range return start_async() /datum/bt_node/ai_behavior/acquire_target/finish_action(datum/ai_controller/controller, succeeded) . = ..() search_strategy = null + search_priority_strategy = null search_range = null /// Returns TRUE to abort the search before it starts (e.g. a detection field is already active). @@ -60,12 +65,22 @@ return TRUE /// Returns TRUE if the current target is still good and we should skip the search. -/datum/bt_node/ai_behavior/acquire_target/proc/should_keep_target(datum/ai_controller/controller, datum/targeting_strategy/strategy, atom/current_target) +/datum/bt_node/ai_behavior/acquire_target/proc/should_keep_target( + datum/ai_controller/controller, + datum/targeting_strategy/strategy, + datum/target_priority_strategy/priority_strategy, + atom/current_target, + resolved_vision_range, +) switch(revalidation_mode) if(TARGET_KEEP_IF_SET) return !isnull(current_target) if(TARGET_REVALIDATE) - return !isnull(current_target) && strategy.is_valid_target(controller.pawn, current_target, vision_range, controller) + return !isnull(current_target) && strategy.is_valid_target(controller.pawn, current_target, resolved_vision_range, controller) + if(TARGET_RESELECT_WITH_SELECTION) + return !isnull(current_target) \ + && isnull(priority_strategy) \ + && strategy.is_valid_target(controller.pawn, current_target, resolved_vision_range, controller) return FALSE ///Resolves the targeting strategy for this behavior @@ -79,9 +94,25 @@ CRASH("No targeting strategy was supplied in the blackboard for [controller.pawn]") return strategy +/// Resolves the optional target priority strategy for this behavior. +/datum/bt_node/ai_behavior/acquire_target/proc/get_target_priority_strategy(datum/ai_controller/controller) + if(!target_priority_strategy) + return null + if(ispath(target_priority_strategy)) + return GET_TARGET_PRIORITY_STRATEGY(target_priority_strategy) + return GET_TARGET_PRIORITY_STRATEGY(controller.blackboard[target_priority_strategy]) + +/// Resolves a numeric vision range without mutating the behavior's configured value. +/datum/bt_node/ai_behavior/acquire_target/proc/get_vision_range(datum/ai_controller/controller) + if(isnum(vision_range)) + return vision_range + var/resolved_range = controller.blackboard[vision_range] + if(!isnum(resolved_range)) + CRASH("No numeric vision range was supplied in blackboard key [vision_range] for [controller.pawn]") + return resolved_range ///Actual behavior for collecting and filtering targets -/datum/bt_node/ai_behavior/acquire_target/proc/find_and_set_target(datum/ai_controller/controller, datum/targeting_strategy/targeting_strategy, range) +/datum/bt_node/ai_behavior/acquire_target/proc/find_and_set_target(datum/ai_controller/controller, datum/targeting_strategy/targeting_strategy, datum/target_priority_strategy/priority_strategy, range) var/mob/living/living_mob = controller.pawn var/datum/target_source/source = GET_TARGET_SOURCE(target_source) if(!source) @@ -96,14 +127,15 @@ clear_stale_target(controller, current_target) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED - var/list/filtered = filter_candidates(controller, candidates, targeting_strategy, current_target) + candidates = include_current_target(controller, candidates, targeting_strategy, priority_strategy, current_target, range) + var/list/filtered = filter_candidates(controller, candidates, targeting_strategy, priority_strategy, current_target, range) if(!length(filtered)) on_no_valid_candidates(controller, current_target) clear_stale_target(controller, current_target) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED - var/atom/target = pick_final_target(controller, filtered) + var/atom/target = pick_final_target(controller, filtered, priority_strategy, current_target) if(isnull(target)) on_no_valid_candidates(controller, current_target) @@ -122,7 +154,7 @@ /// Clears the target key when revalidating and the search turned up nothing, so a stale target doesn't linger. /datum/bt_node/ai_behavior/acquire_target/proc/clear_stale_target(datum/ai_controller/controller, atom/current_target) - if(revalidation_mode != TARGET_REVALIDATE || isnull(current_target)) + if(revalidation_mode == TARGET_KEEP_IF_SET || isnull(current_target)) return controller.clear_blackboard_key(target_key) @@ -134,15 +166,34 @@ return list(current_target) return list() -/// Filters the candidate list to valid targets. Override to add priority filtering or other per-candidate criteria. -/datum/bt_node/ai_behavior/acquire_target/proc/filter_candidates(datum/ai_controller/controller, list/candidates, datum/targeting_strategy/strategy, atom/current_target) +/// Includes a retainable current target in priority-aware reselection even if the target source omitted it. +/datum/bt_node/ai_behavior/acquire_target/proc/include_current_target(datum/ai_controller/controller,list/candidates, datum/targeting_strategy/strategy, datum/target_priority_strategy/priority_strategy, atom/current_target, range) + if(isnull(priority_strategy) || isnull(current_target) || (current_target in candidates)) + return candidates + if(!strategy.can_keep_target(controller.pawn, current_target, target_loss_distance || range, controller)) + return candidates + var/list/candidates_with_current = candidates.Copy() + candidates_with_current += current_target + return candidates_with_current + +/// Filters the candidate list to valid targets and excludes candidates ranked below a retainable current target. +/datum/bt_node/ai_behavior/acquire_target/proc/filter_candidates(datum/ai_controller/controller, list/candidates, datum/targeting_strategy/strategy, datum/target_priority_strategy/priority_strategy, atom/current_target, range) var/mob/living/pawn = controller.pawn var/list/ignore_list = ignore_list_key ? controller.blackboard[ignore_list_key] : null + var/current_priority + if(priority_strategy && current_target && !LAZYACCESS(ignore_list, current_target)) + if(strategy.can_keep_target(pawn, current_target, target_loss_distance || range, controller)) + current_priority = priority_strategy.get_target_priority(controller, current_target) var/list/filtered = list() for(var/atom/candidate as anything in candidates) if(LAZYACCESS(ignore_list, candidate)) continue - if(!strategy.is_valid_target(pawn, candidate, vision_range, controller)) + var/is_retained_current = candidate == current_target \ + && target_loss_distance \ + && strategy.can_keep_target(pawn, candidate, target_loss_distance, controller) + if(!is_retained_current && !strategy.is_valid_target(pawn, candidate, range, controller)) + continue + if(!isnull(current_priority) && priority_strategy.get_target_priority(controller, candidate) < current_priority) continue filtered += candidate return filtered @@ -155,13 +206,21 @@ /datum/bt_node/ai_behavior/acquire_target/proc/on_target_found(datum/ai_controller/controller, atom/target, datum/targeting_strategy/strategy) return -/// Picks the final target from filtered candidates. Only valid for the non-reachable path; the reachable path goes async. -/datum/bt_node/ai_behavior/acquire_target/proc/pick_final_target(datum/ai_controller/controller, list/filtered_targets) - return pick(filtered_targets) +/// Picks the final target and keeps the current target on policy-defined ties. +/datum/bt_node/ai_behavior/acquire_target/proc/pick_final_target(datum/ai_controller/controller, list/filtered_targets, datum/target_priority_strategy/priority_strategy, atom/current_target) + var/atom/selected_target = priority_strategy \ + ? priority_strategy.select_target(controller, filtered_targets) \ + : pick(filtered_targets) + if(isnull(priority_strategy) || isnull(current_target) || selected_target == current_target) + return selected_target + if(!(current_target in filtered_targets) || priority_strategy.can_replace_target(controller, current_target, selected_target)) + return selected_target + return current_target -/// perform_async(): walks filtered candidates checking reachability (may sleep), then commits the result via finish_async(). +/// perform_async(): selects candidates in policy order, checking reachability until one succeeds. /datum/bt_node/ai_behavior/acquire_target/perform_async(datum/ai_controller/controller) var/datum/targeting_strategy/strategy = search_strategy + var/datum/target_priority_strategy/priority_strategy = search_priority_strategy var/range = search_range var/mob/living/living_mob = controller.pawn var/datum/target_source/source = GET_TARGET_SOURCE(target_source) @@ -169,9 +228,14 @@ var/list/candidates = source.collect_candidates(living_mob, controller, range) if(!length(candidates)) candidates = on_no_candidates(controller, current_target, strategy, range) - var/list/filtered = filter_candidates(controller, candidates, strategy, current_target) + candidates = include_current_target(controller, candidates, strategy, priority_strategy, current_target, range) + var/list/filtered = filter_candidates(controller, candidates, strategy, priority_strategy, current_target, range) var/atom/target - for(var/atom/candidate as anything in filtered) + while(length(filtered)) + var/atom/candidate = pick_final_target(controller, filtered, priority_strategy, current_target) + if(isnull(candidate)) + break + filtered -= candidate // get_path_to may sleep here check abort flag after it returns. if(controller.can_reach_target(candidate, reach_distance, minimum_distance)) target = candidate diff --git a/code/datums/ai/generic_behaviors/target_retaliate.dm b/code/datums/ai/generic_behaviors/target_retaliate.dm index dff7da1d5bab..cd0e1e2734e2 100644 --- a/code/datums/ai/generic_behaviors/target_retaliate.dm +++ b/code/datums/ai/generic_behaviors/target_retaliate.dm @@ -2,7 +2,8 @@ ///Pick a target from our retaliate list /datum/bt_node/ai_behavior/acquire_target/target_from_retaliate_list target_source = /datum/target_source/from_bb_list/retaliate_list - revalidation_mode = TARGET_REVALIDATE + target_priority_strategy = BB_TARGET_PRIORITY_STRATEGY + revalidation_mode = TARGET_RESELECT_WITH_SELECTION time_between_perform = 2 SECONDS vision_range = 9 /// Blackboard key in which to store the target's hiding location. @@ -17,37 +18,17 @@ var/usually_ignores_faction = controller.blackboard[BB_ALWAYS_IGNORE_FACTION] || FALSE controller.set_blackboard_key(BB_TEMPORARILY_IGNORE_FACTION, usually_ignores_faction) -/datum/bt_node/ai_behavior/acquire_target/target_from_retaliate_list/filter_candidates(datum/ai_controller/controller, list/candidates, datum/targeting_strategy/strategy, atom/current_target) - var/mob/living/pawn = controller.pawn - var/datum/target_priority_strategy/priority_strategy = GET_TARGET_PRIORITY_STRATEGY(controller.blackboard[BB_TARGET_PRIORITY_STRATEGY]) - var/current_priority = priority_strategy ? priority_strategy.get_target_priority(controller, current_target) : 0 - var/list/filtered = list() - for(var/atom/candidate as anything in candidates) - if(!strategy.is_valid_target(pawn, candidate, vision_range, controller)) - continue - if(priority_strategy && priority_strategy.get_target_priority(controller, candidate) < current_priority) - continue - filtered += candidate - return filtered - /datum/bt_node/ai_behavior/acquire_target/target_from_retaliate_list/on_target_found(datum/ai_controller/controller, atom/target, datum/targeting_strategy/strategy) var/atom/hiding = strategy.find_hidden_mobs(controller.pawn, target) if(hiding) controller.set_blackboard_key(hiding_location_key, hiding) + else if(hiding_location_key) + controller.clear_blackboard_key(hiding_location_key) /datum/bt_node/ai_behavior/acquire_target/target_from_retaliate_list/on_no_valid_candidates(datum/ai_controller/controller, atom/current_target) if(current_target) controller.clear_blackboard_key(target_key) -/datum/bt_node/ai_behavior/acquire_target/target_from_retaliate_list/pick_final_target(datum/ai_controller/controller, list/filtered_targets) - var/datum/target_priority_strategy/priority_strategy = GET_TARGET_PRIORITY_STRATEGY(controller.blackboard[BB_TARGET_PRIORITY_STRATEGY]) - if(!priority_strategy) - return pick(filtered_targets) - return priority_strategy.select_target(controller, filtered_targets) - /// Nearest-attacker variant /datum/bt_node/ai_behavior/acquire_target/target_from_retaliate_list/nearest - -/datum/bt_node/ai_behavior/acquire_target/target_from_retaliate_list/nearest/pick_final_target(datum/ai_controller/controller, list/filtered_targets) - var/turf/our_position = get_turf(controller.pawn) - return get_closest_atom(/atom/, filtered_targets, our_position) + target_priority_strategy = /datum/target_priority_strategy/nearest diff --git a/code/datums/ai/generic_subtrees/find_stealable_object.bt.json b/code/datums/ai/generic_subtrees/find_stealable_object.bt.json index 0176eedb0eb6..fe8317903a5d 100644 --- a/code/datums/ai/generic_subtrees/find_stealable_object.bt.json +++ b/code/datums/ai/generic_subtrees/find_stealable_object.bt.json @@ -70,8 +70,10 @@ "vars": { "target_key": "BB_ITEM_TO_STEAL", "targeting_strategy": "/datum/targeting_strategy/pickup_item/stealable_item", - "target_source": "/datum/target_source/oview", - "must_be_reachable": true + "target_priority_strategy": "/datum/target_priority_strategy/type_weighted", + "target_source": "/datum/target_source/oview_items", + "must_be_reachable": true, + "minimum_distance": 1 } }, { diff --git a/code/datums/ai/learn_ai.md b/code/datums/ai/learn_ai.md index 4da35d60000e..ba1acc893d9c 100644 --- a/code/datums/ai/learn_ai.md +++ b/code/datums/ai/learn_ai.md @@ -215,15 +215,16 @@ Once you are done with your tree, be sure to save the file. You can now compile ## Targeting -A huge amount of AI work boils down to finding a thing nearby and remembering it. Finding an enemy, finding food, finding a beacon to walk to. Instead of writing a brand new "find" leaf every time, we have one generic leaf that you configure with two helpers. You almost never need to write a new leaf for this. +A huge amount of AI work boils down to finding a thing nearby and remembering it. Finding an enemy, finding food, finding a beacon to walk to. Instead of writing a brand new "find" leaf every time, we have one generic leaf that you configure with reusable helpers. You almost never need to write a new leaf for this. -The three pieces: +The four pieces: -1. **The leaf** is `update_interaction_target` or `update_targets`. Its job is to look around, find something, and write it to a blackboard key. +1. **The leaf** is `update_interaction_target`, `update_combat_targets`, or another `acquire_target` subtype. Its job is to look around, find something, and write it to a blackboard key. 2. **A target source** answers the question "what candidates exist?". It gathers a list of nearby things, such as everything in view, only things of a certain type, or items in your hands. 3. **A targeting strategy** answers the question "is this specific candidate valid?". It looks at one candidate at a time and says yes or no. +4. **An optional target priority strategy** answers the question "which valid candidate should be selected?". Omit it when all valid candidates are equivalent. -So the flow is: the **source** hands the leaf a list of candidates, the leaf runs each one past the **strategy**, and the first one that passes gets written to your target key. +So the flow is: the **source** hands the leaf a list of candidates, the leaf runs each one past the **targeting strategy**, and the optional **priority strategy** chooses among the survivors. You configure all of this on the leaf node. @@ -232,6 +233,7 @@ LEAF: update_interaction_target target_key: BB_TARGET_FOOD (where to store what we found) target_source: .../held_items_then_oview/basic_foods (what to look at) targeting_strategy: .../anything (how to decide it's valid) + target_priority_strategy: null (optional selection policy) vision_range: 7 (how far to look, optional) ``` @@ -239,8 +241,9 @@ A few pitfalls: - **Finding nothing is just a FAILURE.** If the source returns an empty list, the leaf simply fails. - **Use `/datum/targeting_strategy/anything` if you don't filter for specifics.** With this strategy the only thing we check is `get_dist`, which is enough when the source already gives you the specific candidates you want. +- **Selection does not imply a private refresh timer.** `TARGET_RESELECT_WITH_SELECTION` reruns a configured priority strategy whenever the tree normally ticks the acquisition leaf; without a priority strategy it retains a valid target. `TARGET_REVALIDATE` retains any valid target even when a priority strategy exists, while `TARGET_ALWAYS_SEARCH` always searches. - **Reuse before you build.** There are many existing sources and strategies. Use these before adding new ones. Once the target key is set, the rest of your tree reacts to it the way you've already seen. A `decorator` gates the combat branch behind "is the target key set?". An observer on this decorator can cancel lower priority behavior when the target is set, or cancel its own behavior when the target is lost. -> Note: combat target _searching_ during a fight is usually done by the `update_targets` leaf, which keeps `BB_CURRENT_TARGET` refreshed while you fight. `update_interaction_target` is the general-purpose "go find a thing" leaf for everything else. +> Note: combat target _searching_ during a fight is usually done by the `update_combat_targets` leaf, which keeps `BB_CURRENT_TARGET` refreshed while you fight. `update_interaction_target` is the general-purpose "go find a thing" leaf for everything else. diff --git a/code/datums/ai/monkey/monkey_bt_nodes.dm b/code/datums/ai/monkey/monkey_bt_nodes.dm index a10f0176d2fc..3c294ce7f75f 100644 --- a/code/datums/ai/monkey/monkey_bt_nodes.dm +++ b/code/datums/ai/monkey/monkey_bt_nodes.dm @@ -150,7 +150,7 @@ return ..() /// Prefers any gun once gun neurons are activated, else the strongest candidate that beats our current best held item. -/datum/bt_node/ai_behavior/acquire_target/update_interaction_target/monkey_find_weapon/pick_final_target(datum/ai_controller/controller, list/filtered_targets) +/datum/bt_node/ai_behavior/acquire_target/update_interaction_target/monkey_find_weapon/pick_final_target(datum/ai_controller/controller, list/filtered_targets, datum/target_priority_strategy/priority_strategy, atom/current_target) var/mob/living/living_pawn = controller.pawn if(controller.blackboard[BB_MONKEY_GUN_NEURONS_ACTIVATED]) diff --git a/code/datums/ai_laws/ai_laws.dm b/code/datums/ai_laws/ai_laws.dm index 28c12c4ea136..1eefc2b20c80 100644 --- a/code/datums/ai_laws/ai_laws.dm +++ b/code/datums/ai_laws/ai_laws.dm @@ -85,7 +85,7 @@ GLOBAL_VAR(round_default_lawset) switch(CONFIG_GET(number/default_laws)) if(CONFIG_ASIMOV) law_weights -= AI_LAWS_ASIMOV - if(CONFIG_CUSTOM) + if(CONFIG_SPECIFIED) law_weights -= specified_law_ids while(!lawtype && law_weights.len) @@ -119,22 +119,24 @@ GLOBAL_VAR(round_default_lawset) /// If TRUE, the zeroth law of this AI is protected and cannot be removed by players under normal circumstances. var/protected_zeroth = FALSE - /// Zeroth law + /// Zeroth law - String /// A lawset can only have 1 zeroth law, it's the top dog. /// Removed by things that remove core/inherent laws, but only if protected_zeroth is false. Otherwise, cannot be removed except by admins var/zeroth = null - /// Zeroth borg law + /// Zeroth borg law - String /// It's just a zeroth law but specially themed for cyborgs /// ("follow your master" vs "accomplish your objectives") var/zeroth_borg = null - /// Core Laws + /// Core Laws - Assoc list /// These laws are usually applied by an ai lawset, or a law rack + /// This one is assoc, key = law text, value = is this an ion law var/list/inherent = list() - /// Supplied laws + /// Supplied laws - Assoc list /// These laws are usually applied by adminbus or niche circumstances /// In the case of AIs, they will always stick around, law rack or no + /// This one is assoc, key = law text, value = is this an ion law var/list/supplied = list() - /// Hacked laws + /// Hacked laws - Flat list /// Can be supplied by a law rack, or can be added naturally /// Their priority is always pushed above inherent laws var/list/hacked = list() @@ -220,13 +222,11 @@ GLOBAL_VAR(round_default_lawset) /// Adds the passed law as an inherent law. /// Can optionally be supplied an index to insert the law at. /// No duplicate laws allowed. -/datum/ai_laws/proc/add_inherent_law(law, index) - if(isnull(index) || index > length(inherent)) - inherent |= law - return - if(law in inherent) +/datum/ai_laws/proc/add_inherent_law(law, index, ioned = FALSE) + if(isnum(index) && index <= length(inherent)) inherent -= law - inherent.Insert(index, law) + inherent.Insert(index, law) + inherent[law] = ioned /// Removes the passed law from the inherent law list. /datum/ai_laws/proc/remove_inherent_law(law) @@ -281,15 +281,18 @@ GLOBAL_VAR(round_default_lawset) data += "[show_numbers ? "[ion_num()]:" : ""] [render_html ? "[law]" : law]" var/number = 1 - for(var/law in inherent) + for(var/law, is_ioned in inherent) if (length(law) > 0) - data += "[show_numbers ? "[number]:" : ""] [law]" - number++ + data += "[show_numbers ? "[is_ioned ? ion_num() : number]:" : ""] [law]" + if(!is_ioned) + number++ - for(var/law in supplied) + for(var/law, is_ioned in supplied) if (length(law) > 0) - data += "[show_numbers ? "[number]:" : ""] [render_html ? "[law]" : law]" - number++ + data += "[show_numbers ? "[is_ioned ? ion_num() : number]:" : ""] [render_html ? "[law]" : law]" + if(!is_ioned) + number++ + return data #undef AI_LAWS_ASIMOV diff --git a/code/datums/ai_laws/state_laws_ui.dm b/code/datums/ai_laws/state_laws_ui.dm index 65b45aaea6cc..dbfa13f22842 100644 --- a/code/datums/ai_laws/state_laws_ui.dm +++ b/code/datums/ai_laws/state_laws_ui.dm @@ -15,7 +15,7 @@ /// Used to update the to_state list to the passed ai law's inherent laws /// Call this when changing the AI's lawset entirely /datum/state_laws_ui/proc/update_inherent_stated_laws(datum/ai_laws/laws) - to_state = laws.inherent.Copy() + to_state = assoc_to_values(laws.inherent) /datum/state_laws_ui/Destroy() owner = null @@ -29,10 +29,10 @@ for(var/law in owner.laws.hacked) law_data += list(law_to_ui_data(law, ion_num(), "hacked")) var/number = 1 - for(var/law in owner.laws.inherent) - law_data += list(law_to_ui_data(law, number++, "core")) - for(var/law in owner.laws.supplied) - law_data += list(law_to_ui_data(law, number++, "supplied")) + for(var/law, is_ioned in owner.laws.inherent) + law_data += list(law_to_ui_data(law, is_ioned ? ion_num() : number++, "core")) + for(var/law, is_ioned in owner.laws.supplied) + law_data += list(law_to_ui_data(law, is_ioned ? ion_num() : number++, "supplied")) return law_data /datum/state_laws_ui/proc/law_to_ui_data(law_text, law_number, law_type) @@ -106,25 +106,24 @@ owner.say("[owner.radiomod] 0. [lawcache_zeroth]", forced = forced_log_message, message_mods = list(MODE_SEQUENTIAL = TRUE, SAY_MOD_VERB = "states")) sleep(1 SECONDS) - for (var/index in 1 to length(lawcache_hacked)) - var/law = lawcache_hacked[index] + for (var/law in lawcache_hacked) if (force_all_laws || (law in to_state_cached)) owner.say("[owner.radiomod] [ion_num()]. [law]", forced = forced_log_message, message_mods = list(MODE_SEQUENTIAL = TRUE, SAY_MOD_VERB = "states")) sleep(1 SECONDS) var/number = 1 - for (var/index in 1 to length(lawcache_inherent)) - var/law = lawcache_inherent[index] - if (force_all_laws || (law in to_state_cached)) - owner.say("[owner.radiomod] [number]. [law]", forced = forced_log_message, message_mods = list(MODE_SEQUENTIAL = TRUE, SAY_MOD_VERB = "states")) - number++ + for (var/law_text, is_ioned in lawcache_inherent) + if (force_all_laws || (law_text in to_state_cached)) + owner.say("[owner.radiomod] [is_ioned ? ion_num() : number]. [law_text]", forced = forced_log_message, message_mods = list(MODE_SEQUENTIAL = TRUE, SAY_MOD_VERB = "states")) + if(!is_ioned) + number++ sleep(1 SECONDS) - for (var/index in 1 to length(lawcache_supplied)) - var/law = lawcache_supplied[index] - if (force_all_laws || (law in to_state_cached)) - owner.say("[owner.radiomod] [number]. [law]", forced = forced_log_message, message_mods = list(MODE_SEQUENTIAL = TRUE, SAY_MOD_VERB = "states")) - number++ + for (var/law_text, is_ioned in lawcache_supplied) + if (force_all_laws || (law_text in to_state_cached)) + owner.say("[owner.radiomod] [is_ioned ? ion_num() : number]. [law_text]", forced = forced_log_message, message_mods = list(MODE_SEQUENTIAL = TRUE, SAY_MOD_VERB = "states")) + if(!is_ioned) + number++ sleep(1 SECONDS) addtimer(VARSET_CALLBACK(src, locked, FALSE), 3 SECONDS) diff --git a/code/datums/bodypart_overlays/bodypart_overlay.dm b/code/datums/bodypart_overlays/bodypart_overlay.dm index 2125e921d967..be895a933ce6 100644 --- a/code/datums/bodypart_overlays/bodypart_overlay.dm +++ b/code/datums/bodypart_overlays/bodypart_overlay.dm @@ -94,7 +94,7 @@ var/icon/husk_icon = new(main_image.icon) husk_icon.ColorTone(HUSK_COLOR_TONE) main_image.icon = husk_icon - main_image.color = limb.husk_color + main_image.color = limb.draw_color return main_image /** diff --git a/code/datums/bodypart_overlays/emote_bodypart_overlay.dm b/code/datums/bodypart_overlays/emote_bodypart_overlay.dm index 6bf07f679ff6..aeaf0d1d4409 100644 --- a/code/datums/bodypart_overlays/emote_bodypart_overlay.dm +++ b/code/datums/bodypart_overlays/emote_bodypart_overlay.dm @@ -56,7 +56,7 @@ attached_body_zone = BODY_ZONE_HEAD /datum/bodypart_overlay/simple/emote/blush/color_image(image/overlay, obj/item/bodypart/limb, layer_index) - var/base_color = limb.owner?.get_bloodtype()?.get_damage_color() + var/base_color = limb.owner?.get_bloodtype()?.get_damage_color(limb.owner) if(!base_color) return ..() diff --git a/code/datums/brain_damage/magic.dm b/code/datums/brain_damage/magic.dm index fc8f6fb804dc..5887c7e37dd2 100644 --- a/code/datums/brain_damage/magic.dm +++ b/code/datums/brain_damage/magic.dm @@ -21,11 +21,11 @@ /datum/brain_trauma/magic/lumiphobia/on_life(seconds_per_tick) ..() - var/turf/T = owner.loc - if(!istype(T)) + var/turf/owner_turf = owner.loc + if(!istype(owner_turf)) return - if(T.get_lumcount() <= SHADOW_SPECIES_LIGHT_THRESHOLD) //if there's enough light, start dying + if(!owner_turf.check_lumcount_above(SHADOW_SPECIES_LIGHT_THRESHOLD)) //if there's enough light, start dying return if(COOLDOWN_FINISHED(src, damage_warning_cooldown)) diff --git a/code/datums/browser.dm b/code/datums/browser.dm index 5f6cf9038ac1..f109b02b62e7 100644 --- a/code/datums/browser.dm +++ b/code/datums/browser.dm @@ -484,7 +484,7 @@ /// called when a browser popup window is closed after registering with proc/onclose() /// if a valid atom reference is supplied, call the atom's Topic() with "close=1" /// otherwise, just reset the client mob's machine var. -GAME_VERB_HIDDEN(/client, windowclose, ".windowclose", atomref as text) +GAME_VERB_NATIVE(/client, windowclose, ".windowclose", null, atomref as text) if(atomref == "null") return diff --git a/code/datums/components/arbitrary_item_organ.dm b/code/datums/components/arbitrary_item_organ.dm new file mode 100644 index 000000000000..bffc1acde752 --- /dev/null +++ b/code/datums/components/arbitrary_item_organ.dm @@ -0,0 +1,53 @@ +/// Applied to an organ, makes it take on the appearance of an item +/// If the item <-> organ relationship is broken, the organ will be destroyed +/datum/component/arbitrary_item_organ + /// The item our organ is representing + var/obj/item/base_item + +/datum/component/arbitrary_item_organ/Initialize(obj/item/base_item) + if(!isorgan(parent)) + return COMPONENT_INCOMPATIBLE + if(!isitem(base_item)) + return COMPONENT_INCOMPATIBLE + + src.base_item = base_item + + base_item.forceMove(parent) + + var/obj/item/organ/organ = parent + organ.organ_flags |= ORGAN_FAKE|ORGAN_PROMINENT|ORGAN_HAZARDOUS + organ.organ_flags &= ~ORGAN_ORGANIC + organ.apply_organ_damage(INFINITY) + organ.name = base_item.name + + RegisterSignal(organ, COMSIG_ORGAN_ADJUST_DAMAGE, PROC_REF(break_again)) + RegisterSignal(organ, COMSIG_ORGAN_BODYPART_REMOVED, PROC_REF(organ_removed)) + + RegisterSignals(base_item, list(COMSIG_QDELETING, COMSIG_MOVABLE_MOVED), PROC_REF(base_item_lost)) + +/datum/component/arbitrary_item_organ/Destroy() + UnregisterSignal(parent, list(COMSIG_ORGAN_ADJUST_DAMAGE, COMSIG_ORGAN_REMOVED)) + UnregisterSignal(base_item, list(COMSIG_QDELETING, COMSIG_MOVABLE_MOVED)) + base_item = null + return ..() + +/// If our internal item is deleted or removed from the organ's contents, nuke the organ +/datum/component/arbitrary_item_organ/proc/base_item_lost(obj/item/base_item) + SIGNAL_HANDLER + + if(QDELING(parent)) + return + + qdel(parent) + +/// Any attempt to heal the organ should damage cap it again +/datum/component/arbitrary_item_organ/proc/break_again(obj/item/organ/organ, damage_amount, ...) + SIGNAL_HANDLER + if(damage_amount < INFINITY) + organ.apply_organ_damage(INFINITY) + +/// If the organ is removed it reverts to being a normal item +/datum/component/arbitrary_item_organ/proc/organ_removed(obj/item/organ/organ, obj/item/bodypart/limb, ...) + SIGNAL_HANDLER + + base_item.forceMove(limb.owner?.drop_location() || limb.drop_location()) // triggers qdel(organ) diff --git a/code/datums/components/blood_walk.dm b/code/datums/components/blood_walk.dm index 299b031fb509..7dd6e3b6f9f9 100644 --- a/code/datums/components/blood_walk.dm +++ b/code/datums/components/blood_walk.dm @@ -28,7 +28,7 @@ target_dir_change = FALSE, transfer_blood_dna = FALSE, max_blood = INFINITY, - list/blood_dna_info = list("meaty DNA" = get_blood_type(BLOOD_TYPE_MEAT)) + list/blood_dna_info = list("meaty DNA" = get_blood_type(/datum/blood_type/meat)) ) if(!ismovable(parent)) diff --git a/code/datums/components/bloody_spreader.dm b/code/datums/components/bloody_spreader.dm index 073dfe07dd6c..dc46073aeb99 100644 --- a/code/datums/components/bloody_spreader.dm +++ b/code/datums/components/bloody_spreader.dm @@ -7,7 +7,7 @@ // Blood splashed around everywhere will carry these diseases. Oh no... var/list/diseases -/datum/component/bloody_spreader/Initialize(blood_left = INFINITY, list/blood_dna = list(get_blood_type(BLOOD_TYPE_MEAT).dna_string = get_blood_type(BLOOD_TYPE_MEAT)), list/diseases = null) +/datum/component/bloody_spreader/Initialize(blood_left = INFINITY, list/blood_dna = list(get_blood_type(/datum/blood_type/meat).dna_string = get_blood_type(/datum/blood_type/meat)), list/diseases = null) if(!isatom(parent)) return COMPONENT_INCOMPATIBLE diff --git a/code/datums/components/butchering.dm b/code/datums/components/butchering.dm index 3c475d4e6144..217268dbdc9b 100644 --- a/code/datums/components/butchering.dm +++ b/code/datums/components/butchering.dm @@ -161,14 +161,17 @@ target.drop_organs(user, TRUE) return - if (!length(target.butcher_drops)) + var/list/target_butcher_drops = target.get_butcher_drops() + if (!LAZYLEN(target_butcher_drops)) to_chat(user, span_warning("There is nothing left inside [limb_descriptor]!")) return if (target.body_zone == BODY_ZONE_CHEST && target.owner) // Cannot butcher the chest until we hack off all the other limbs for (var/obj/item/bodypart/limb as anything in target.owner.get_bodyparts()) - if (limb != target && limb.butcher_drops && limb.butcher_replacement) + if(limb == target) + continue + if (LAZYLEN(limb.get_butcher_drops()) && limb.butcher_replacement) to_chat(user, span_warning("You need to butcher all other limbs first!")) return @@ -187,8 +190,8 @@ var/list/failures = list() var/list/bonuses = list() - for (var/obj/item/drop_type as anything in target.butcher_drops) - var/amount = target.butcher_drops[drop_type] || 1 + for (var/obj/item/drop_type as anything in target_butcher_drops) + var/amount = target_butcher_drops[drop_type] || 1 var/is_stack = ispath(drop_type, /obj/item/stack) for (var/i in 1 to amount) diff --git a/code/datums/components/chasm.dm b/code/datums/components/chasm.dm index 1fce2e916a34..cd9efe2676c2 100644 --- a/code/datums/components/chasm.dm +++ b/code/datums/components/chasm.dm @@ -51,6 +51,8 @@ //otherwise don't do anything because turfs and areas are initialized before movables. if(!mapload) addtimer(CALLBACK(src, PROC_REF(drop_stuff)), 0) + else if(HAS_TRAIT(parent, TRAIT_CHASM_STOPPED)) // The lattice initialized before we could set our signals + on_chasm_stopped(parent) parent.AddComponent(/datum/component/fishing_spot, GLOB.preset_fish_sources[/datum/fish_source/chasm]) /datum/component/chasm/UnregisterFromParent() diff --git a/code/datums/components/conveyor_movement.dm b/code/datums/components/conveyor_movement.dm index fe1cf47aaad4..1df6adf8d38d 100644 --- a/code/datums/components/conveyor_movement.dm +++ b/code/datums/components/conveyor_movement.dm @@ -5,6 +5,7 @@ /datum/component/convey var/living_parent = FALSE var/speed + var/current_rotation /datum/component/convey/Initialize(direction, speed, start_delay) if(!ismovable(parent)) @@ -15,9 +16,10 @@ if(!start_delay) start_delay = speed var/atom/movable/moving_parent = parent - var/datum/move_loop/loop = GLOB.move_manager.move(moving_parent, direction, delay = start_delay, subsystem = SSconveyors, flags=MOVEMENT_LOOP_IGNORE_PRIORITY|MOVEMENT_LOOP_OUTSIDE_CONTROL) + var/datum/move_loop/loop = GLOB.move_manager.move(moving_parent, direction, delay = start_delay, subsystem = SSconveyors, flags = MOVEMENT_LOOP_IGNORE_PRIORITY | MOVEMENT_LOOP_OUTSIDE_CONTROL | MOVEMENT_LOOP_NO_DIR_UPDATE) RegisterSignal(loop, COMSIG_MOVELOOP_PREPROCESS_CHECK, PROC_REF(should_move)) RegisterSignal(loop, COMSIG_QDELETING, PROC_REF(loop_ended)) + RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(special_rotate)) /datum/component/convey/proc/should_move(datum/move_loop/source) SIGNAL_HANDLER @@ -29,6 +31,20 @@ var/atom/movable/moving_parent = parent if(moving_parent.anchored || !moving_parent.has_gravity()) return MOVELOOP_SKIP_STEP + var/obj/machinery/conveyor/belt = locate() in moving_parent.loc + if(!ISDIAGONALDIR(belt.dir)) + current_rotation = null + return + + current_rotation = belt.operating * -90 // belt.operating will be CONVEYOR_FORWARD or CONVEYOR_BACKWARD, 1 or -1 + if(belt.inverted ^ belt.flipped) + current_rotation = -current_rotation + +/datum/component/convey/proc/special_rotate(datum/move_loop/source, result) + SIGNAL_HANDLER + if(result == MOVELOOP_SUCCESS && current_rotation) + var/atom/movable/turning_parent = parent + turning_parent.setDir(turn(turning_parent.dir, current_rotation)) /datum/component/convey/proc/loop_ended(datum/source) SIGNAL_HANDLER diff --git a/code/datums/components/crafting/melee_weapon.dm b/code/datums/components/crafting/melee_weapon.dm index 828b2868b599..a86e3bf1523a 100644 --- a/code/datums/components/crafting/melee_weapon.dm +++ b/code/datums/components/crafting/melee_weapon.dm @@ -296,8 +296,8 @@ name = "Watcher Wing Trophy" result = /obj/item/crusher_trophy/watcher_wing reqs = list( - /obj/item/stack/sheet/sinew = 7, - /obj/item/stack/ore/diamond = 10, + /obj/item/stack/sheet/sinew = 5, + /obj/item/stack/ore/diamond = 6, /obj/item/stack/sheet/bone = 5, ) @@ -306,7 +306,7 @@ result = /obj/item/crusher_trophy/ice_wing reqs = list( /obj/item/stack/sheet/sinew/icewing = 3, - /obj/item/stack/ore/diamond = 6, + /obj/item/stack/ore/diamond = 5, /obj/item/stack/sheet/bone = 3, ) @@ -315,7 +315,7 @@ result = /obj/item/crusher_trophy/magma_wing reqs = list( /obj/item/stack/sheet/sinew/magmawing = 3, - /obj/item/stack/ore/diamond = 6, + /obj/item/stack/ore/diamond = 2, /obj/item/stack/sheet/bone = 3, ) @@ -324,7 +324,7 @@ result = /obj/item/crusher_trophy/goliath_tentacle reqs = list( /obj/item/stack/sheet/animalhide/goliath_hide = 3, - /obj/item/stack/sheet/bone = 8, + /obj/item/stack/sheet/bone = 6, ) /datum/crafting_recipe/crusher_trophy/legion_skull @@ -332,23 +332,23 @@ result = /obj/item/crusher_trophy/legion_skull reqs = list( /obj/item/organ/monster_core/regenerative_core/legion = 3, // Good sink for expired cores - /obj/item/stack/sheet/bone = 5, + /obj/item/stack/sheet/bone = 4, ) /datum/crafting_recipe/crusher_trophy/lobster_claw name = "Lobster Claw Trophy" result = /obj/item/crusher_trophy/lobster_claw reqs = list( - /obj/item/organ/monster_core/rush_gland = 3, - /obj/item/stack/sheet/bone = 5, - /obj/item/food/meat/slab/rawcrab = 3, + /obj/item/organ/monster_core/rush_gland = 2, + /obj/item/stack/sheet/bone = 4, + /obj/item/food/meat/slab/rawcrab = 2, ) /datum/crafting_recipe/crusher_trophy/brimdemon_fang name = "Brimdemon Fang Trophy" result = /obj/item/crusher_trophy/brimdemon_fang reqs = list( - /obj/item/organ/monster_core/brimdust_sac = 3, + /obj/item/organ/monster_core/brimdust_sac = 2, /datum/reagent/brimdust = 45, ) @@ -357,6 +357,6 @@ result = /obj/item/crusher_trophy/bileworm_spewlet reqs = list( /obj/item/stack/sheet/animalhide/bileworm = 3, - /obj/item/stack/ore/gold = 12, + /obj/item/stack/ore/gold = 8, ) */ diff --git a/code/datums/components/fearful/effects.dm b/code/datums/components/fearful/effects.dm index c0ce94bfde44..3ad314014e53 100644 --- a/code/datums/components/fearful/effects.dm +++ b/code/datums/components/fearful/effects.dm @@ -1,5 +1,6 @@ // Terror effect handlers +/// Macro to scale a base value from 0x to ?x based on the current terror level, clamped to the base value #define FEAR_SCALING(base, min, max) clamp(base * (terror_buildup - min) / (max - min), 0, base) /// Causes mild jittering, scaling with current terror level @@ -214,4 +215,27 @@ /datum/terror_handler/startle/proc/speed_up() owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/spooked) +/// Forces you to stop, drop, and roll when on fire and sufficiently panicked +/datum/terror_handler/force_stop_drop_roll + handler_type = TERROR_HANDLER_EFFECT + +/datum/terror_handler/force_stop_drop_roll/tick(seconds_per_tick, terror_buildup) + if (terror_buildup < TERROR_BUILDUP_FEAR || !owner.on_fire || !owner.can_resist()) + return 0 + + if (!SPT_PROB(5 + FEAR_SCALING(10, TERROR_BUILDUP_FEAR, TERROR_BUILDUP_MAXIMUM), seconds_per_tick)) // 5% to 15% chance + return 0 + + // basically forces you to stop, drop, and roll, and prevents you from cancelling it + var/forced_roll_duration = FEAR_SCALING(67.5 SECONDS, TERROR_BUILDUP_FEAR, TERROR_BUILDUP_MAXIMUM) + owner.Immobilize(forced_roll_duration) + owner.Knockdown(forced_roll_duration) + if(owner.has_status_effect(/datum/status_effect/stop_drop_roll)) + to_chat(owner, span_warning("You panic, and focus everything into rolling the fire out!")) + else + to_chat(owner, span_warning("You panic and immediately drop to the ground, trying to roll the fire out!")) + owner.apply_status_effect(/datum/status_effect/stop_drop_roll, TRUE) + + return -1 * TERROR_BUILDUP_PASSIVE_DECREASE // + immediate terror decrease because you think it's helping! + #undef FEAR_SCALING diff --git a/code/datums/components/fearful/fearful.dm b/code/datums/components/fearful/fearful.dm index 750e036cde5f..dc5e5861d53b 100644 --- a/code/datums/components/fearful/fearful.dm +++ b/code/datums/components/fearful/fearful.dm @@ -153,8 +153,7 @@ var/unlit_tiles = 0 for(var/turf/open/turf_to_check in range(1, source)) - var/light_amount = turf_to_check.get_lumcount() - if(light_amount > LIGHTING_TILE_IS_DARK) + if(turf_to_check.check_lumcount_above(LIGHTING_TILE_IS_DARK)) lit_tiles++ else unlit_tiles++ @@ -182,12 +181,13 @@ ) return COMPONENT_BLOCK_MISC_HELP + if(terror_buildup >= TERROR_BUILDUP_TERROR) + source.visible_message( + span_notice("[source] seems to relax as [hugger] gives [source.p_them()] a comforting hug."), + span_nicegreen("You feel yourself calm down as [hugger] gives you a reassuring hug."), + span_hear("You hear shuffling and a sigh of relief."), + ) terror_buildup -= HUG_TERROR_AMOUNT - source.visible_message( - span_notice("[source] seems to relax as [hugger] gives [source.p_them()] a comforting hug."), - span_nicegreen("You feel yourself calm down as [hugger] gives you a reassuring hug."), - span_hear("You hear shuffling and a sigh of relief."), - ) /// Remove all terror buildup when we become fearless /datum/component/fearful/proc/fearless_added(datum/source) diff --git a/code/datums/components/fearful/sources/_sources.dm b/code/datums/components/fearful/sources/_sources.dm index d14664814977..8e78c6e2466d 100644 --- a/code/datums/components/fearful/sources/_sources.dm +++ b/code/datums/components/fearful/sources/_sources.dm @@ -2,35 +2,45 @@ /// Simple source which passively increases terror based on a single condition and can do something when its added/removed /datum/terror_handler/simple_source handler_type = TERROR_HANDLER_SOURCE - /// How much terror is added per second - var/buildup_per_second = 10 /// Have we already applied our effects? var/active = FALSE /datum/terror_handler/simple_source/tick(seconds_per_tick, terror_buildup) . = ..() - if (check_condition(seconds_per_tick, terror_buildup) && terror_buildup < TERROR_BUILDUP_PASSIVE_MAXIMUM) + var/temporarily_immune = HAS_TRAIT(owner, TRAIT_FEARLESS) || HAS_TRAIT(owner, TRAIT_MIND_TEMPORARILY_GONE) || IS_UNCONSCIOUS(owner) + var/buildup_per_second = temporarily_immune ? 0 : check_condition(seconds_per_tick, terror_buildup) + if (buildup_per_second > 0 && terror_buildup < TERROR_BUILDUP_PASSIVE_MAXIMUM) if (!active) + active = TRUE on_activation(terror_buildup) . += min(buildup_per_second * seconds_per_tick, TERROR_BUILDUP_PASSIVE_MAXIMUM - terror_buildup) + else if (active) + active = FALSE on_deactivation(terror_buildup) -/// Proc that children should override with their conditions +/** + * Checks how much terror to build up this tick + * + * * seconds_per_tick - How many seconds are in each tick, static + * * terror_buildup - How much terror the owner currently has + * + * Return a number, which is the amount of terror to build up this tick. + * Return 0 for no buildup. + */ /datum/terror_handler/simple_source/proc/check_condition(seconds_per_tick, terror_buildup) - return !HAS_TRAIT(owner, TRAIT_FEARLESS) && !HAS_TRAIT(owner, TRAIT_MIND_TEMPORARILY_GONE) && !IS_UNCONSCIOUS(owner) + return 0 /// Proc that's called when the effect is first applied, for moodlets and alike /datum/terror_handler/simple_source/proc/on_activation(terror_buildup) - active = TRUE + return /// Proc that's called when the effect stops working, for moodlets and alike /datum/terror_handler/simple_source/proc/on_deactivation(terror_buildup) - active = FALSE + return /// Makes the owner terrified of darkness /datum/terror_handler/simple_source/nyctophobia - buildup_per_second = 5 // Takes about two minutes to reach maximum /// Are we counteracted by mesons? var/meson_negated = TRUE @@ -39,54 +49,44 @@ return ..() /datum/terror_handler/simple_source/nyctophobia/check_condition(seconds_per_tick, terror_buildup) - . = ..() - if (!.) - return - if (ishuman(owner)) var/mob/living/carbon/human/as_human = owner if(as_human.dna?.species.id in list(SPECIES_SHADOW, SPECIES_NIGHTMARE)) - return FALSE + return 0 if (meson_negated && (owner.sight & SEE_TURFS)) - return FALSE + return 0 var/lit_tiles = 0 var/unlit_tiles = 0 for (var/turf/open/turf_to_check in range(1, owner)) - var/light_amount = turf_to_check.get_lumcount() - if (light_amount > LIGHTING_TILE_IS_DARK) + if (turf_to_check.check_lumcount_above(LIGHTING_TILE_IS_DARK)) lit_tiles++ else unlit_tiles++ - return lit_tiles < unlit_tiles + return lit_tiles < unlit_tiles ? 5 : 0 /datum/terror_handler/simple_source/nyctophobia/on_activation(terror_buildup) - . = ..() owner.add_mood_event("nyctophobia", /datum/mood_event/nyctophobia) /datum/terror_handler/simple_source/nyctophobia/on_deactivation(terror_buildup) - . = ..() owner.clear_mood_event("nyctophobia") /// Nightmare spell version with quicker buildup that shadows the quirk one, also handles removing the status upon reaching 0 terror /datum/terror_handler/simple_source/nyctophobia/terrified - // Takes about 30 seconds to reach maximum if you include 100 from casting the spell - buildup_per_second = 15 // Overrides the base type with slower buildup overrides = list(/datum/terror_handler/simple_source/nyctophobia) meson_negated = FALSE /datum/terror_handler/simple_source/nyctophobia/terrified/tick(seconds_per_tick, terror_buildup) - . = ..() - if (terror_buildup == 0 && !.) + . = ..() * 3 + if (terror_buildup == 0 && . <= 0) owner.RemoveComponentSource("terrified", /datum/component/fearful) /// Makes the owner afraid of being stuck in closets, crates, mechs, etc /datum/terror_handler/simple_source/claustrophobia - buildup_per_second = 15 COOLDOWN_DECLARE(message_cd) /datum/terror_handler/simple_source/claustrophobia/Destroy(force) @@ -94,37 +94,26 @@ return ..() /datum/terror_handler/simple_source/claustrophobia/check_condition(seconds_per_tick, terror_buildup) - . = ..() - if (!.) - return - if (isturf(owner.loc)) - return FALSE + return 0 if (COOLDOWN_FINISHED(src, message_cd) && SPT_PROB(15, seconds_per_tick)) to_chat(owner, span_warning("You feel trapped! Must escape... can't breathe...")) COOLDOWN_START(src, message_cd, TERROR_MESSAGE_CD) - return TRUE + return 15 /datum/terror_handler/simple_source/claustrophobia/on_activation(terror_buildup) - . = ..() owner.add_mood_event("claustrophobia", /datum/mood_event/claustrophobia) /datum/terror_handler/simple_source/claustrophobia/on_deactivation(terror_buildup) - . = ..() owner.clear_mood_event("claustrophobia") /// Makes the owner afraid of certain jolly figures /datum/terror_handler/simple_source/clausophobia - buildup_per_second = 20 COOLDOWN_DECLARE(message_cd) /datum/terror_handler/simple_source/clausophobia/check_condition(seconds_per_tick, terror_buildup) - . = ..() - if (!.) - return - var/certified_jolly = FALSE for (var/mob/living/carbon/human/possible_claus in view(5, owner)) @@ -143,24 +132,19 @@ break if (!certified_jolly) - return FALSE + return 0 if (COOLDOWN_FINISHED(src, message_cd) && SPT_PROB(15, seconds_per_tick)) to_chat(owner, span_warning("Santa Claus is here! I gotta get out of here!")) COOLDOWN_START(src, message_cd, TERROR_MESSAGE_CD) - return TRUE + return 15 /// Makes the owner afraid of being alone /datum/terror_handler/simple_source/monophobia - buildup_per_second = 2.5 // Pretty low, ~4 minutes to reach passive cap COOLDOWN_DECLARE(message_cd) /datum/terror_handler/simple_source/monophobia/check_condition(seconds_per_tick, terror_buildup) - . = ..() - if (!.) - return - var/check_radius = 7 if (owner.is_blind()) check_radius = 1 @@ -170,10 +154,55 @@ continue if (istype(friend, /mob/living/basic/pet) || friend.ckey) - return FALSE + return 0 if (COOLDOWN_FINISHED(src, message_cd) && SPT_PROB(10, seconds_per_tick)) to_chat(owner, span_warning("You feel terribly lonely...")) COOLDOWN_START(src, message_cd, TERROR_MESSAGE_CD) - return TRUE + return 2.5 // Pretty low, ~4 minutes to reach passive cap + +/// Afraid of being on fire or being near open flames (even flames such as candles or fireplaces) +/datum/terror_handler/simple_source/pyrophobia + /// Tracks the last fire size to avoid spamming mood events + VAR_PRIVATE/last_fire_size = -1 + /// Weakref to active fire hallucinations + VAR_PRIVATE/datum/weakref/fire_hallucination_weakref + +/datum/terror_handler/simple_source/pyrophobia/New(mob/living/new_owner, datum/component/fearful/new_component) + . = ..() + RegisterSignal(owner, COMSIG_LIVING_HALLUCINATING, PROC_REF(on_hallucination)) + +/datum/terror_handler/simple_source/pyrophobia/Destroy(force) + UnregisterSignal(owner, COMSIG_LIVING_HALLUCINATING) + return ..() + +/datum/terror_handler/simple_source/pyrophobia/check_condition(seconds_per_tick, terror_buildup) + var/datum/hallucination/fire/fire_hallucination = fire_hallucination_weakref?.resolve() + if(owner.on_fire || !QDELETED(fire_hallucination)) + owner.clear_mood_event("pyrophobia") // they have the "ON FIRE" moodlet + return max(owner.fire_stacks, fire_hallucination.fake_firestacks) * 2 + + var/fire_size = owner.count_nearby_fire_sources() + if(fire_size != last_fire_size) + if(fire_size >= 1) + owner.add_mood_event("pyrophobia", /datum/mood_event/pyrophobia, round(fire_size)) + else + owner.clear_mood_event("pyrophobia") + last_fire_size = fire_size + // 40 -> 15 seconds to reach passive cap + return min(round(fire_size * 3, 0.1), 40) + +/datum/terror_handler/simple_source/pyrophobia/proc/on_hallucination(datum/source, datum/hallucination/hallucination) + SIGNAL_HANDLER + + if(istype(hallucination, /datum/hallucination/fire)) + fire_hallucination_weakref = WEAKREF(hallucination) + +/// While stop drop and rolling you lose a tiny bit of terror +/datum/terror_handler/is_stop_drop_rolling + +/datum/terror_handler/is_stop_drop_rolling/tick(seconds_per_tick, terror_buildup) + if (owner.has_status_effect(/datum/status_effect/stop_drop_roll)) + return -0.2 * TERROR_BUILDUP_PASSIVE_DECREASE * seconds_per_tick // reduces terror a bit because you think it's helping! + return 0 diff --git a/code/datums/components/food/edible.dm b/code/datums/components/food/edible.dm index f09224fc9197..1d2ef8c17bda 100644 --- a/code/datums/components/food/edible.dm +++ b/code/datums/components/food/edible.dm @@ -496,7 +496,7 @@ Behavior that's still missing from this component that original food items had t playsound(eater.loc,'sound/items/eatfood.ogg', rand(10,50), TRUE) if(!owner.reagents.total_volume) return - SEND_SIGNAL(eater, COMSIG_LIVING_EAT_FOOD, owner) + SEND_SIGNAL(eater, COMSIG_LIVING_EAT_FOOD, owner, foodtypes) var/sig_return = SEND_SIGNAL(parent, COMSIG_FOOD_EATEN, eater, feeder, bitecount, bite_consumption) if(sig_return & DESTROY_FOOD) qdel(owner) diff --git a/code/datums/components/food/golem_food.dm b/code/datums/components/food/golem_food.dm index 981bf110fb3a..82cf483cd065 100644 --- a/code/datums/components/food/golem_food.dm +++ b/code/datums/components/food/golem_food.dm @@ -8,8 +8,10 @@ var/obj/item/food/golem_food/golem_snack /// Any extra checks which need to be done when seeing if this is edible var/datum/callback/extra_validation + /// What additional nutrition modifiers should be added to this food? We apply extra nutrition to ores that are processed into sheets. + var/food_multiplier -/datum/component/golem_food/Initialize(consume_on_eat = TRUE, golem_food_key, datum/callback/extra_validation) +/datum/component/golem_food/Initialize(consume_on_eat = TRUE, golem_food_key, datum/callback/extra_validation, food_multiplier = 1) if (!isatom(parent)) return COMPONENT_INCOMPATIBLE if (!golem_food_key || !is_path_in_list(golem_food_key, GLOB.golem_stack_food_directory)) @@ -18,7 +20,8 @@ src.consume_on_eat = consume_on_eat snack_type = GLOB.golem_stack_food_directory[golem_food_key] src.extra_validation = extra_validation - + if(food_multiplier) + src.food_multiplier = food_multiplier /datum/component/golem_food/RegisterWithParent() . = ..() @@ -59,6 +62,7 @@ consume_food = consume_on_eat, food_buff = snack_type, owner = parent, + nutrition_mod = food_multiplier ) RegisterSignal(golem_snack, COMSIG_QDELETING, PROC_REF(on_food_destroyed)) @@ -94,11 +98,13 @@ consume_food = TRUE, datum/golem_food_buff/food_buff, atom/owner, + nutrition_mod, ) src.name = name src.consume_food = consume_food src.food_buff = food_buff src.owner = owner + src.bite_consumption = food_buff.nutrition * nutrition_mod RegisterSignal(owner, COMSIG_QDELETING, PROC_REF(on_parent_destroyed)) /// Clean ourselves up if our parent dies diff --git a/code/datums/components/hazard_area.dm b/code/datums/components/hazard_area.dm index 409abb56a718..13d73b89120b 100644 --- a/code/datums/components/hazard_area.dm +++ b/code/datums/components/hazard_area.dm @@ -163,7 +163,7 @@ owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/hazard_area, update=TRUE) owner.remove_actionspeed_modifier(/datum/actionspeed_modifier/status_effect/hazard_area, update=TRUE) -/datum/status_effect/hazard_area/get_examine_text() +/datum/status_effect/hazard_area/get_examine_text(mob/examiner) return span_notice("[owner.p_They()] appear[owner.p_s()] to be largely immobilized through unknown means.") /atom/movable/screen/alert/status_effect/hazard_area diff --git a/code/datums/components/item_killsound.dm b/code/datums/components/item_killsound.dm index e81aad1bfa5d..e2c6417a03da 100644 --- a/code/datums/components/item_killsound.dm +++ b/code/datums/components/item_killsound.dm @@ -36,6 +36,6 @@ return var/mob/living/mob = target_mob if(replace_default_death_sound) - mob.apply_status_effect(/datum/status_effect/replace_death_sound, 1 SECONDS, killsound) + mob.apply_status_effect(/datum/status_effect/replace_sound, 1 SECONDS, list(/datum/emote/living/deathgasp::key = killsound)) else mob.apply_status_effect(/datum/status_effect/death_sound, 1 SECONDS, killsound, killsound_volume) diff --git a/code/datums/components/locked_to_account.dm b/code/datums/components/locked_to_account.dm new file mode 100644 index 000000000000..84d893dbbe91 --- /dev/null +++ b/code/datums/components/locked_to_account.dm @@ -0,0 +1,94 @@ + +#define DENY_SOUND_COOLDOWN (2 SECONDS) + +/// locks a crate so only the person (or department) who bought it can open it +/datum/component/locked_to_account + dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS + /// the bank account that bought this crate. whoevers ID matches this account (or department) can open it + var/datum/bank_account/buyer_account + /// cooldown so the "denied" buzz so sound doesnt spam if someone keeps trying really hard + COOLDOWN_DECLARE(deny_cooldown) + +/datum/component/locked_to_account/Initialize(datum/bank_account/buyer_account) + . = ..() + if(!istype(parent, /obj/structure/closet)) + return COMPONENT_INCOMPATIBLE + src.buyer_account = buyer_account + +/// if AddComponent is called again on this crate, update buyer_account instead of making a duplicate +/datum/component/locked_to_account/InheritComponent(datum/component/locked_to_account/new_comp, i_am_original, datum/bank_account/buyer_account) + src.buyer_account = buyer_account + +/datum/component/locked_to_account/RegisterWithParent() + RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) + RegisterSignal(parent, COMSIG_ATOM_EMAG_ACT, PROC_REF(on_emag)) + RegisterSignal(parent, COMSIG_CLOSET_PRE_OPEN, PROC_REF(on_pre_open)) + +/datum/component/locked_to_account/UnregisterFromParent() + UnregisterSignal(parent, list( + COMSIG_ATOM_EXAMINE, + COMSIG_ATOM_EMAG_ACT, + COMSIG_CLOSET_PRE_OPEN, + )) + +/// adds a note to the examine text saying its account-locked +/datum/component/locked_to_account/proc/on_examine(obj/structure/closet/source, mob/user, list/examine_list) + SIGNAL_HANDLER + examine_list += span_warning("An account lock prevents this from opening except by the purchasing account holder.") + +/** + * runs when someone tries to open the crate, checks their ID against buyer_account + * * force: if TRUE, the open bypasses this lock entirely (e.g. admin or code-forced opens) + */ +/datum/component/locked_to_account/proc/on_pre_open(obj/structure/closet/source, mob/living/user, force) + SIGNAL_HANDLER + if(force) + return NONE + + if(isnull(user)) + return BLOCK_OPEN + + var/obj/item/card/id/id_card = user.get_idcard(TRUE) // the ID card the user is holding/wearing, used to check their linked bank account + if(isnull(id_card)) + deny(source, user, "No ID detected!") + return BLOCK_OPEN + + if(!id_card.registered_account) + deny(source, user, "No linked bank account detected!") + return BLOCK_OPEN + + var/is_department = istype(buyer_account, /datum/bank_account/department) // department orders check the user's paycheck department instead of a personal account match. TRUE if this user is allowed to open the crate + var/datum/bank_account/department/dept_account = buyer_account + var/account_matches = is_department \ + ? (id_card.registered_account?.account_job?.paycheck_department == dept_account.department_id) \ + : (id_card.registered_account == buyer_account) + + if(!account_matches) + deny(source, user, "Bank account does not match with buyer!") + return BLOCK_OPEN + + if(iscarbon(user)) + source.add_fingerprint(user) + remove_lock(source, user) + return NONE + +/datum/component/locked_to_account/proc/deny(obj/structure/closet/source, mob/living/user, message) + to_chat(user, span_warning(message)) + if(COOLDOWN_FINISHED(src, deny_cooldown)) + playsound(source, 'sound/machines/buzz/buzz-two.ogg', 30, TRUE) + COOLDOWN_START(src, deny_cooldown, DENY_SOUND_COOLDOWN) + +/// emag skips this whole check and goes straight to remove_lock +/datum/component/locked_to_account/proc/on_emag(obj/structure/closet/source, mob/emagger) + SIGNAL_HANDLER + emagger.balloon_alert(emagger, "account lock bypassed") + remove_lock(source, emagger) + +/// unlocks the crate and removes this component +/datum/component/locked_to_account/proc/remove_lock(obj/structure/closet/source, mob/user) + source.visible_message(span_notice("[source]'s account lock disengages with a soft click.")) + to_chat(user, span_notice("You unlock [source].")) + source.update_appearance() + qdel(src) + +#undef DENY_SOUND_COOLDOWN diff --git a/code/datums/components/overlay_lighting.dm b/code/datums/components/overlay_lighting.dm index 24237052e180..91e3fa62e3cd 100644 --- a/code/datums/components/overlay_lighting.dm +++ b/code/datums/components/overlay_lighting.dm @@ -52,8 +52,6 @@ ///Overlay effect to cut into the darkness and provide light. var/image/visible_mask - ///Lazy list to track the turfs being affected by our light, to determine their visibility. - var/list/turf/affected_turfs ///Movable atom currently holding the light. Parent might be a flashlight, for example, but that might be held by a mob or something else. var/atom/movable/current_holder ///Movable atom the parent is attached to. For example, a flashlight into a helmet or gun. We'll need to track the thing the parent is attached to as if it were the parent itself. @@ -143,7 +141,6 @@ overlay_lighting_flags &= ~LIGHTING_ATTACHED set_parent_attached_to(null) set_holder(null) - clean_old_turfs() UnregisterSignal(parent, list( COMSIG_MOVABLE_MOVED, COMSIG_MOVABLE_Z_CHANGED, @@ -165,49 +162,46 @@ /datum/component/overlay_lighting/Destroy() set_parent_attached_to(null) set_holder(null) - clean_old_turfs() visible_mask = null cone = null parent_attached_to = null return ..() +/// Clears ourselves from spatial grid's dynlights lists +/datum/component/overlay_lighting/proc/clean_old_cells(atom/holder_loc) + var/turf/holder_turf = get_turf(holder_loc) + if (isnull(holder_turf)) + return + for (var/datum/spatial_grid_cell/grid_cell as anything in SSspatial_grid.get_cells_in_range(holder_turf, lumcount_range)) + GRID_CELL_REMOVE(grid_cell.dynamic_light_sources, src) -///Clears the affected_turfs lazylist, removing from its contents the effects of being near the light. -/datum/component/overlay_lighting/proc/clean_old_turfs() - for(var/turf/lit_turf as anything in affected_turfs) - lit_turf.dynamic_lumcount -= lum_power - affected_turfs = null - - -///Populates the affected_turfs lazylist, adding to its contents the effects of being near the light. -/datum/component/overlay_lighting/proc/get_new_turfs() +/// Populates the affected_turfs lazylist, adding to its contents the effects of being near the light. +/datum/component/overlay_lighting/proc/register_new_cells() if(!current_holder) return - . = list() - for(var/turf/lit_turf in view(lumcount_range, get_turf(current_holder))) - lit_turf.dynamic_lumcount += lum_power - . += lit_turf - if(length(.)) - affected_turfs = . - + var/turf/holder_turf = get_turf(current_holder) + if (isnull(holder_turf)) + return + for (var/datum/spatial_grid_cell/grid_cell as anything in SSspatial_grid.get_cells_in_range(holder_turf, lumcount_range)) + GRID_CELL_ASSOC_SET(grid_cell.dynamic_light_sources, src, lum_power) -///Clears the old affected turfs and populates the new ones. -/datum/component/overlay_lighting/proc/make_luminosity_update() - clean_old_turfs() +/// Clears the old affected cells and populates the new ones. +/datum/component/overlay_lighting/proc/make_luminosity_update(atom/old_loc) + if(old_loc) + clean_old_cells(old_loc) if(!isturf(current_holder?.loc)) return if(directional) cast_directional_light() - get_new_turfs() - + register_new_cells() -///Adds the luminosity and source for the affected movable atoms to keep track of their visibility. +/// Adds the luminosity and source for the affected movable atoms to keep track of their visibility. /datum/component/overlay_lighting/proc/add_dynamic_lumi() LAZYSET(current_holder.affected_dynamic_lights, src, lumcount_range + 1) show_to_holder() current_holder.update_dynamic_luminosity() -///Removes the luminosity and source for the affected movable atoms to keep track of their visibility. +/// Removes the luminosity and source for the affected movable atoms to keep track of their visibility. /datum/component/overlay_lighting/proc/remove_dynamic_lumi() LAZYREMOVE(current_holder.affected_dynamic_lights, src) hide_from_holder() @@ -245,7 +239,7 @@ SEND_SIGNAL(parent, COMSIG_ATOM_OVERLAY_LIGHT_REMOVED, current_holder) SEND_SIGNAL(current_holder, COMSIG_ATOM_HOLDER_OVERLAY_LIGHT_REMOVED, parent) -///Called to change the value of parent_attached_to. +/// Called to change the value of parent_attached_to. /datum/component/overlay_lighting/proc/set_parent_attached_to(atom/movable/new_parent_attached_to) if(new_parent_attached_to == parent_attached_to) return @@ -268,21 +262,27 @@ check_holder() -///Called to change the value of current_holder. +/// Called to change the value of current_holder. /datum/component/overlay_lighting/proc/set_holder(atom/movable/new_holder) if(new_holder == current_holder) return + + var/atom/old_loc = null if(current_holder) + old_loc = get_turf(current_holder) if(current_holder != parent && current_holder != parent_attached_to) UnregisterSignal(current_holder, list(COMSIG_QDELETING, COMSIG_MOVABLE_MOVED, COMSIG_LIGHT_EATER_QUEUE)) if(directional) UnregisterSignal(current_holder, COMSIG_ATOM_DIR_CHANGE) if(overlay_lighting_flags & LIGHTING_ON) remove_dynamic_lumi() + current_holder = new_holder + if(new_holder == null) - clean_old_turfs() + clean_old_cells(old_loc) return + if(new_holder != parent && new_holder != parent_attached_to) RegisterSignal(new_holder, COMSIG_QDELETING, PROC_REF(on_holder_qdel)) RegisterSignal(new_holder, COMSIG_LIGHT_EATER_QUEUE, PROC_REF(on_light_eater)) @@ -290,14 +290,15 @@ RegisterSignal(new_holder, COMSIG_MOVABLE_MOVED, PROC_REF(on_holder_moved)) if(directional) RegisterSignal(new_holder, COMSIG_ATOM_DIR_CHANGE, PROC_REF(on_holder_dir_change)) + if(directional && current_direction != new_holder.dir) current_direction = new_holder.dir + if(overlay_lighting_flags & LIGHTING_ON) add_dynamic_lumi() - make_luminosity_update() - + make_luminosity_update(old_loc) -///Used to determine the new valid current_holder from the parent's loc. +/// Used to determine the new valid current_holder from the parent's loc. /datum/component/overlay_lighting/proc/check_holder() var/atom/movable/movable_parent = GET_PARENT if(QDELETED(movable_parent)) @@ -320,7 +321,7 @@ set_holder(null) -///Called when the current_holder is qdeleted, to remove the light effect. +/// Called when the current_holder is qdeleted, to remove the light effect. /datum/component/overlay_lighting/proc/on_holder_qdel(atom/movable/source, force) SIGNAL_HANDLER if(QDELETED(current_holder)) @@ -332,18 +333,18 @@ set_holder(null) -///Called when current_holder changes loc. -/datum/component/overlay_lighting/proc/on_holder_moved(atom/movable/source, OldLoc, Dir, Forced) +/// Called when current_holder changes loc. +/datum/component/overlay_lighting/proc/on_holder_moved(atom/movable/source, atom/old_loc, dir, forced) SIGNAL_HANDLER if(!(overlay_lighting_flags & LIGHTING_ON)) return - make_luminosity_update() - + make_luminosity_update(old_loc) ///Called when parent changes loc. -/datum/component/overlay_lighting/proc/on_parent_moved(atom/movable/source, OldLoc, Dir, Forced) +/datum/component/overlay_lighting/proc/on_parent_moved(atom/movable/source, atom/old_loc, dir, forced) SIGNAL_HANDLER var/atom/movable/movable_parent = parent + clean_old_cells(old_loc) // Clean first, as we might swap holders if(overlay_lighting_flags & LIGHTING_ATTACHED) set_parent_attached_to(ismovable(movable_parent.loc) ? movable_parent.loc : null) check_holder() @@ -359,12 +360,12 @@ SET_PLANE_EXPLICIT(cone, O_LIGHTING_VISUAL_PLANE, source) show_to_holder() -// Avoids duplicate overlays (one from our NEXT holder, selected after the animation, one from the pickup animation) +/// Avoids duplicate overlays (one from our NEXT holder, selected after the animation, one from the pickup animation) /datum/component/overlay_lighting/proc/on_pickup_anim(atom/source) SIGNAL_HANDLER hide_from_holder() -///Called when the current_holder is qdeleted, to remove the light effect. +/// Called when the current_holder is qdeleted, to remove the light effect. /datum/component/overlay_lighting/proc/on_parent_attached_to_qdel(atom/movable/source, force) SIGNAL_HANDLER if(isnull(parent_attached_to)) @@ -377,9 +378,10 @@ set_parent_attached_to(null) -///Called when parent_attached_to changes loc. -/datum/component/overlay_lighting/proc/on_parent_attached_to_moved(atom/movable/source, OldLoc, Dir, Forced) +/// Called when parent_attached_to changes loc. +/datum/component/overlay_lighting/proc/on_parent_attached_to_moved(atom/movable/source, atom/old_loc, dir, forced) SIGNAL_HANDLER + clean_old_cells(old_loc) // Clean first, as we might swap holders check_holder() if(!(overlay_lighting_flags & LIGHTING_ON) || !current_holder) return @@ -415,14 +417,13 @@ else cast_range = clamp(round(new_range * 0.5), 1, 3) if(overlay_lighting_flags & LIGHTING_ON) - make_luminosity_update() - + make_luminosity_update(current_holder) -///Changes the intensity/brightness of the light by altering the visual object's alpha. +/// Changes the intensity/brightness of the light by altering the visual object's alpha. /datum/component/overlay_lighting/proc/set_power(atom/source, old_power) SIGNAL_HANDLER var/new_power = source.light_power - set_lum_power(new_power >= 0 ? 0.5 : -0.5) + lum_power = new_power >= 0 ? 0.5 : -0.5 set_alpha = min(230, (abs(new_power) * 120) + 30) hide_from_holder() visible_mask.alpha = set_alpha @@ -432,8 +433,7 @@ cone.blend_mode = new_power > 0 ? BLEND_ADD : BLEND_SUBTRACT show_to_holder() - -///Changes the light's color, pretty straightforward. +/// Changes the light's color, pretty straightforward. /datum/component/overlay_lighting/proc/set_color(atom/source, old_color) SIGNAL_HANDLER var/new_color = source.light_color @@ -443,7 +443,7 @@ cone.color = new_color show_to_holder() -///Toggles the light on and off. +/// Toggles the light on and off. /datum/component/overlay_lighting/proc/on_toggle(atom/source, old_value) SIGNAL_HANDLER var/new_value = source.light_on @@ -452,7 +452,7 @@ return turn_off() //Falsey value, turn off. -///Triggered right after the parent light flags change. +/// Triggered right after the parent light flags change. /datum/component/overlay_lighting/proc/on_light_flags_change(atom/source, old_flags) SIGNAL_HANDLER var/new_flags = source.light_flags @@ -468,7 +468,7 @@ overlay_lighting_flags &= ~LIGHTING_ATTACHED set_parent_attached_to(null) -///Changes the light's color, pretty straightforward. +/// Changes the light's color, pretty straightforward. /datum/component/overlay_lighting/proc/set_light_render_source(atom/source, old_render_source) SIGNAL_HANDLER var/new_source = source.light_render_source @@ -481,7 +481,7 @@ cone.render_source = new_cone_source show_to_holder() -///Toggles the light on. +/// Toggles the light on. /datum/component/overlay_lighting/proc/turn_on() if(overlay_lighting_flags & LIGHTING_ON) return @@ -492,10 +492,9 @@ cast_directional_light() if(current_holder && current_holder != parent && current_holder != parent_attached_to) RegisterSignal(current_holder, COMSIG_MOVABLE_MOVED, PROC_REF(on_holder_moved)) - get_new_turfs() + register_new_cells() - -///Toggles the light off. +/// Toggles the light off. /datum/component/overlay_lighting/proc/turn_off() if(!(overlay_lighting_flags & LIGHTING_ON)) return @@ -504,20 +503,9 @@ overlay_lighting_flags &= ~LIGHTING_ON if(current_holder && current_holder != parent && current_holder != parent_attached_to) UnregisterSignal(current_holder, COMSIG_MOVABLE_MOVED) - clean_old_turfs() - + clean_old_cells(current_holder) -///Here we append the behavior associated to changing lum_power. -/datum/component/overlay_lighting/proc/set_lum_power(new_lum_power) - if(lum_power == new_lum_power) - return - . = lum_power - lum_power = new_lum_power - var/difference = . - lum_power - for(var/turf/lit_turf as anything in affected_turfs) - lit_turf.dynamic_lumcount -= difference - -///Here we append the behavior associated to changing lum_power. +/// Here we append the behavior associated to changing lum_power. /datum/component/overlay_lighting/proc/cast_directional_light() var/final_distance = cast_range //Lower the distance by 1 if we're not looking at a cardinal direction, and we're not a short cast @@ -566,17 +554,17 @@ show_to_holder() -///Called when current_holder changes loc. +/// Called when current_holder changes loc. /datum/component/overlay_lighting/proc/on_holder_dir_change(atom/movable/source, olddir, newdir) SIGNAL_HANDLER set_direction(newdir) -///Called when parent changes loc. +/// Called when parent changes loc. /datum/component/overlay_lighting/proc/on_parent_dir_change(atom/movable/source, olddir, newdir) SIGNAL_HANDLER set_direction(newdir) -///Sets a new direction for the directional cast, then updates luminosity +/// Sets a new direction for the directional cast, then updates luminosity /datum/component/overlay_lighting/proc/set_direction(newdir) if(!newdir) return @@ -584,7 +572,7 @@ return current_direction = newdir if(overlay_lighting_flags & LIGHTING_ON) - make_luminosity_update() + make_luminosity_update(current_holder) /datum/component/overlay_lighting/proc/on_parent_crafted(datum/source, atom/movable/new_craft) SIGNAL_HANDLER diff --git a/code/datums/components/toggle_attached_clothing.dm b/code/datums/components/toggle_attached_clothing.dm index ffec2e6026d4..0518c5656013 100644 --- a/code/datums/components/toggle_attached_clothing.dm +++ b/code/datums/components/toggle_attached_clothing.dm @@ -31,6 +31,8 @@ var/datum/callback/on_deployed /// Optional callback triggered before we hide our equipment, before as we may delete it afterwards var/datum/callback/on_removed + /// If TRUE, automatically deploys the hood + var/auto_deploy_on_outfit_equip = TRUE /datum/component/toggle_attached_clothing/Initialize( deployable_type, @@ -39,6 +41,7 @@ destroy_on_removal = FALSE, parent_icon_state_suffix = "", down_overlay_state_suffix = "", + auto_deploy_on_outfit_equip = TRUE, datum/callback/pre_creation_check, datum/callback/on_created, datum/callback/on_deployed, @@ -54,6 +57,7 @@ src.destroy_on_removal = destroy_on_removal src.parent_icon_state_suffix = parent_icon_state_suffix src.down_overlay_state_suffix = down_overlay_state_suffix + src.auto_deploy_on_outfit_equip = auto_deploy_on_outfit_equip src.pre_creation_check = pre_creation_check src.on_created = on_created src.on_deployed = on_deployed @@ -152,6 +156,8 @@ /// Display deployed if worn in an outfit /datum/component/toggle_attached_clothing/proc/on_parent_equipped_outfit(obj/item/clothing/source, mob/equipper, visuals_only, slot) SIGNAL_HANDLER + if (!auto_deploy_on_outfit_equip) + return create_deployable() toggle_deployable() diff --git a/code/datums/components/tug_towards.dm b/code/datums/components/tug_towards.dm index 338d27660ee7..dd4ba0fb842d 100644 --- a/code/datums/components/tug_towards.dm +++ b/code/datums/components/tug_towards.dm @@ -119,14 +119,15 @@ total_tug_x += sign(target.x - atom_parent.x) * strength total_tug_y += sign(target.y - atom_parent.y) * strength - // Intentionally not trig--something at a corner with a strength of 1 should have - // you at the corner, rather than root(2). - total_tug_x /= tuggers - total_tug_y /= tuggers - - var/half_size = world.icon_size * 0.5 - total_tug_x *= half_size - total_tug_y *= half_size + if(tuggers > 0) + // Intentionally not trig--something at a corner with a strength of 1 should have + // you at the corner, rather than root(2). + total_tug_x /= tuggers + total_tug_y /= tuggers + + var/half_size = world.icon_size * 0.5 + total_tug_x *= half_size + total_tug_y *= half_size if (total_tug_x == current_tug_offset_x && total_tug_y == current_tug_offset_y) return diff --git a/code/datums/components/unobserved_actor.dm b/code/datums/components/unobserved_actor.dm index 007d39a0ae84..b724dda03585 100644 --- a/code/datums/components/unobserved_actor.dm +++ b/code/datums/components/unobserved_actor.dm @@ -94,7 +94,7 @@ /datum/component/unobserved_actor/proc/can_be_seen(mob/living/source) var/turf/my_turf = get_turf(source) // Check for darkness - if(my_turf.lighting_object && my_turf.get_lumcount() < 0.1) // No one can see us in the darkness, right? + if(my_turf.lighting_object && my_turf.check_lumcount_below(0.1)) // No one can see us in the darkness, right? return FALSE // We aren't in darkness, loop for viewers. diff --git a/code/datums/diseases/_disease.dm b/code/datums/diseases/_disease.dm index dde2d5f944cc..fbdf0229b991 100644 --- a/code/datums/diseases/_disease.dm +++ b/code/datums/diseases/_disease.dm @@ -218,7 +218,7 @@ if((HAS_TRAIT(affected_mob, TRAIT_NOHUNGER) || !(affected_mob.satiety < 0 || affected_mob.nutrition < NUTRITION_LEVEL_STARVING)) && is_sleeping) //resting starved won't help, but resting helps var/turf/rest_turf = get_turf(affected_mob) - var/is_sleeping_in_darkness = rest_turf.get_lumcount() <= LIGHTING_TILE_IS_DARK + var/is_sleeping_in_darkness = !rest_turf.check_lumcount_above(LIGHTING_TILE_IS_DARK) if(affected_mob.is_blind_from(EYES_COVERED) || is_sleeping_in_darkness) recovery_prob += DISEASE_GOOD_SLEEPING_RECOVERY_BONUS diff --git a/code/datums/diseases/advance/symptoms/beard.dm b/code/datums/diseases/advance/symptoms/beard.dm index f45a3f418128..5412e57d3259 100644 --- a/code/datums/diseases/advance/symptoms/beard.dm +++ b/code/datums/diseases/advance/symptoms/beard.dm @@ -15,7 +15,7 @@ resistance = 3 stage_speed = 2 transmittable = 1 - level = 4 + level = 5 severity = 1 symptom_delay = 27 symptom_cure = /datum/reagent/medicine/mannitol diff --git a/code/datums/diseases/advance/symptoms/bleeding.dm b/code/datums/diseases/advance/symptoms/bleeding.dm index 7aef2eee457a..9354c9ad8dce 100644 --- a/code/datums/diseases/advance/symptoms/bleeding.dm +++ b/code/datums/diseases/advance/symptoms/bleeding.dm @@ -4,7 +4,7 @@ * Reduces to stage speed * Reduces transmissibility * Fatal Level - * Bonus: Worsens blood loss + * Bonus: Adds easybleed trait */ /datum/symptom/bleeding @@ -15,7 +15,7 @@ stage_speed = -3 transmittable = 0 severity = 3 - level = 7 + level = 8 symptom_cure = /datum/reagent/acetaldehyde cure_color = "orange" threshold_descs = list( @@ -68,3 +68,80 @@ var/mob/living/carbon/carbon_host = A.affected_mob REMOVE_TRAIT(carbon_host, TRAIT_BLOOD_FOUNTAIN, DISEASE_TRAIT) REMOVE_TRAIT(carbon_host, TRAIT_EASYBLEED, DISEASE_TRAIT) + +/datum/symptom/hypertension + name = "Hypertension" + desc = "Dramatically increases blood pressure, leading to blood vessels bursting open across the host's body." + stealth = -2 + resistance = -1 + stage_speed = -1 + transmittable = -1 + level = 9 + severity = 6 + symptom_delay = 52.5 + symptom_cure = /datum/reagent/inverse/penthrite + cure_color = "red" + threshold_descs = list() // Set in New() so the compiler doesn't complain about non-constant expressions + var/chems = list(/datum/reagent/toxin/histamine, /datum/reagent/toxin/staminatoxin) + var/crit_slash = FALSE + var/adding_chems = FALSE + +/datum/symptom/hypertension/New() + var/list_of_names = list() + for(var/datum/reagent/poison as anything in chems) + list_of_names += poison::name + threshold_descs = list( + "Resistance 7" = "Additionally synthesizes [english_list(list_of_names)] inside the host.", + "Stage Speed 9" = "Increases the frequency of inflicted wounds.", + "Transmission 8" = "Randomly increases the severity of inflicted wounds and quantity of chems synthesized." + ) + +/datum/symptom/hypertension/Start(datum/disease/advance/our_disease) + . = ..() + if(!.) + return + if(our_disease.totalResistance() >= 7) + adding_chems = TRUE + if(our_disease.totalStageSpeed() >= 9) + symptom_delay = 25 + if(our_disease.totalTransmittable() >= 8) + crit_slash = TRUE + +/datum/symptom/hypertension/Activate(datum/disease/advance/our_disease) + . = ..() + if(!.) + return + var/mob/living/carbon/carbon_host = our_disease.affected_mob + if(our_disease.stage <= 2) + carbon_host.ominous_nosebleed() + return + var/list/bleeding_bodyparts = list() + for(var/obj/item/bodypart/random_bodypart as anything in carbon_host.get_bodyparts()) + if(random_bodypart.can_bleed()) + bleeding_bodyparts += random_bodypart + if(bleeding_bodyparts.len == 0) + return // full borg or borg with organic stumps + var/obj/item/bodypart/victim_limb = pick(bleeding_bodyparts) + var/wound_severity = WOUND_SEVERITY_MODERATE + var/warning = "Your [victim_limb.name] tears itself open!" + if(our_disease.stage >= 4) + wound_severity = WOUND_SEVERITY_SEVERE + if(adding_chems) + add_reagents(carbon_host) + if(crit_slash) + var/chance = 33 + if(our_disease.stage == 5) + chance = 66 + if(prob(chance)) + wound_severity = WOUND_SEVERITY_CRITICAL + warning = "The blood vessels in your [victim_limb.name] suddenly rip open!" + if(adding_chems) + add_reagents(carbon_host) // Crit slashes add twice as many chems + if (carbon_host.cause_wound_of_type_and_severity(WOUND_SLASH, victim_limb, wound_severity)) + to_chat(carbon_host, span_userdanger(warning)) + if(wound_severity == WOUND_SEVERITY_CRITICAL) + carbon_host.emote("scream") + +/datum/symptom/hypertension/proc/add_reagents(mob/living/carbon/carbon_host) + for(var/datum/reagent/reagent_to_add as anything in chems) + carbon_host.reagents.add_reagent(reagent_to_add, 3) diff --git a/code/datums/diseases/advance/symptoms/choking.dm b/code/datums/diseases/advance/symptoms/choking.dm index 265509134b44..3c4593f6c82e 100644 --- a/code/datums/diseases/advance/symptoms/choking.dm +++ b/code/datums/diseases/advance/symptoms/choking.dm @@ -15,7 +15,7 @@ resistance = 0 stage_speed = -1 transmittable = -1 - level = 3 + level = 6 severity = 3 base_message_chance = 15 symptom_delay = 20 @@ -26,6 +26,7 @@ "Stage Speed 8" = "Causes choking more frequently.", "Stealth 4" = "The symptom remains hidden until active." ) + var/suppress_warning = FALSE /datum/symptom/choking/Start(datum/disease/advance/A) . = ..() @@ -79,20 +80,19 @@ Asphyxiation Bonus Inflicts large spikes of oxyloss Introduces Asphyxiating drugs to the system - Causes cardiac arrest on dying victims. ////////////////////////////////////// */ /datum/symptom/asphyxiation name = "Acute respiratory distress syndrome" - desc = "The virus causes shrinking of the host's lungs, causing severe asphyxiation. May also lead to heart attacks." + desc = "The virus causes shrinking of the host's lungs, causing severe asphyxiation." illness = "Iron Lungs" stealth = -2 resistance = 0 stage_speed = -1 transmittable = -2 - level = 7 + level = 9 severity = 6 base_message_chance = 15 symptom_delay = 22 diff --git a/code/datums/diseases/advance/symptoms/confusion.dm b/code/datums/diseases/advance/symptoms/confusion.dm index 2431d48456d9..2d36fc733c7b 100644 --- a/code/datums/diseases/advance/symptoms/confusion.dm +++ b/code/datums/diseases/advance/symptoms/confusion.dm @@ -14,7 +14,7 @@ resistance = 1 stage_speed = 1 transmittable = 2 - level = 4 + level = 3 severity = 2 base_message_chance = 25 symptom_delay = 20 @@ -26,6 +26,7 @@ ) var/brain_damage = FALSE var/causes_illiteracy = FALSE + var/suppress_warning = FALSE /datum/symptom/confusion/Start(datum/disease/advance/advanced_disease) . = ..() diff --git a/code/datums/diseases/advance/symptoms/cough.dm b/code/datums/diseases/advance/symptoms/cough.dm index 687d60e1b800..4c0409f9da09 100644 --- a/code/datums/diseases/advance/symptoms/cough.dm +++ b/code/datums/diseases/advance/symptoms/cough.dm @@ -31,6 +31,7 @@ ///if FALSE, there is a percentage chance that the mob will emote coughing while cough_cooldown is on cooldown. If TRUE, won't emote again until after the off cooldown cough occurs. var/off_cooldown_coughed = FALSE var/spread_range = 1 + var/suppress_warning = FALSE /datum/symptom/cough/Start(datum/disease/advance/active_disease) . = ..() diff --git a/code/datums/diseases/advance/symptoms/deafness.dm b/code/datums/diseases/advance/symptoms/deafness.dm index ef0874b5785b..5444c423c473 100644 --- a/code/datums/diseases/advance/symptoms/deafness.dm +++ b/code/datums/diseases/advance/symptoms/deafness.dm @@ -25,6 +25,7 @@ "Stealth 4" = "The symptom remains hidden until active.", ) var/causes_permanent_deafness = FALSE + var/suppress_warning = FALSE /datum/symptom/deafness/Start(datum/disease/advance/A) . = ..() diff --git a/code/datums/diseases/advance/symptoms/dizzy.dm b/code/datums/diseases/advance/symptoms/dizzy.dm index 6fd6986f5857..20bd0ac8f795 100644 --- a/code/datums/diseases/advance/symptoms/dizzy.dm +++ b/code/datums/diseases/advance/symptoms/dizzy.dm @@ -12,10 +12,10 @@ desc = "The virus causes inflammation of the vestibular system, leading to bouts of dizziness." illness = "Motion Sickness" stealth = 1 - resistance = 0 - stage_speed = -2 - transmittable = -1 - level = 4 + resistance = 1 + stage_speed = 3 + transmittable = 3 + level = 2 severity = 2 base_message_chance = 50 symptom_delay = 22.5 @@ -25,6 +25,7 @@ "Transmission 6" = "Also causes druggy vision.", "Stealth 4" = "The symptom remains hidden until active.", ) + var/suppress_warning = FALSE /datum/symptom/dizzy/Start(datum/disease/advance/A) . = ..() @@ -46,6 +47,6 @@ to_chat(M, span_warning("[pick("You feel dizzy.", "Your head spins.")]")) else to_chat(M, span_userdanger("A wave of dizziness washes over you!")) - M.adjust_dizzy_up_to(1 MINUTES, 140 SECONDS) + M.adjust_dizzy_up_to(40 SECONDS, 80 SECONDS) if(power >= 2) - M.set_drugginess(80 SECONDS) + M.set_drugginess(60 SECONDS) diff --git a/code/datums/diseases/advance/symptoms/fire.dm b/code/datums/diseases/advance/symptoms/fire.dm index 5931f721efee..5995a178ce14 100644 --- a/code/datums/diseases/advance/symptoms/fire.dm +++ b/code/datums/diseases/advance/symptoms/fire.dm @@ -27,6 +27,7 @@ "Transmission 8" = "Host will spread the virus through skin flakes when bursting into flame.", "Stealth 4" = "The symptom remains hidden until active.", ) + var/suppress_warning = FALSE /datum/symptom/fire/Start(datum/disease/advance/A) . = ..() @@ -97,7 +98,7 @@ Bonus resistance = -2 stage_speed = -2 transmittable = -2 - level = 7 + level = 9 severity = 6 base_message_chance = 100 symptom_delay = 60 diff --git a/code/datums/diseases/advance/symptoms/flesh_eating.dm b/code/datums/diseases/advance/symptoms/flesh_eating.dm index bf7f2e2f4dea..041732775029 100644 --- a/code/datums/diseases/advance/symptoms/flesh_eating.dm +++ b/code/datums/diseases/advance/symptoms/flesh_eating.dm @@ -89,7 +89,7 @@ Bonus resistance = -2 stage_speed = 1 transmittable = -2 - level = 7 + level = 9 severity = 6 base_message_chance = 50 symptom_delay = 4.5 @@ -100,6 +100,7 @@ Bonus "Stage Speed 7" = "Synthesizes Heparin and Lipolicide inside the host, causing increased bleeding and hunger.", "Stealth 5" = "The symptom remains hidden until active.", ) + var/suppress_warning = FALSE /datum/symptom/flesh_death/Start(datum/disease/advance/A) . = ..() diff --git a/code/datums/diseases/advance/symptoms/genetics.dm b/code/datums/diseases/advance/symptoms/genetics.dm index 9ebadf6b1327..ba3210859cbb 100644 --- a/code/datums/diseases/advance/symptoms/genetics.dm +++ b/code/datums/diseases/advance/symptoms/genetics.dm @@ -15,7 +15,7 @@ resistance = -3 stage_speed = 0 transmittable = -3 - level = 6 + level = 7 severity = 4 base_message_chance = 50 symptom_delay = 45 diff --git a/code/datums/diseases/advance/symptoms/hallucigen.dm b/code/datums/diseases/advance/symptoms/hallucigen.dm index 54ef506a710c..40bdedad7be6 100644 --- a/code/datums/diseases/advance/symptoms/hallucigen.dm +++ b/code/datums/diseases/advance/symptoms/hallucigen.dm @@ -15,7 +15,7 @@ resistance = -2 stage_speed = 2 transmittable = -1 - level = 5 + level = 3 severity = 2 base_message_chance = 25 symptom_delay = 57.5 diff --git a/code/datums/diseases/advance/symptoms/heal.dm b/code/datums/diseases/advance/symptoms/heal.dm index 3b5abf2a824e..4eec4439dd8f 100644 --- a/code/datums/diseases/advance/symptoms/heal.dm +++ b/code/datums/diseases/advance/symptoms/heal.dm @@ -58,7 +58,7 @@ resistance = -2 stage_speed = 0 transmittable = 1 - level = 6 + level = 8 passive_message = span_notice("You miss the feeling of starlight on your skin.") var/nearspace_penalty = 0.3 threshold_descs = list( @@ -408,7 +408,7 @@ resistance = -1 stage_speed = 0 transmittable = 1 - level = 6 + level = 4 passive_message = span_notice("Your skin feels oddly dry...") required_organ = ORGAN_SLOT_LIVER threshold_descs = list( @@ -574,7 +574,7 @@ resistance = -2 stage_speed = 2 transmittable = -3 - level = 6 + level = 7 passive_message = span_notice("Your skin glows faintly for a moment.") threshold_descs = list( "Resistance 7" = "Increases healing speed.", @@ -613,9 +613,8 @@ resistance = 1 stage_speed = 0 transmittable = -1 - level = 4 + level = 5 base_message_chance = 0 - symptom_cure = null power = 2 threshold_descs = list( @@ -630,3 +629,39 @@ /datum/symptom/heal/aggressive_healing/Heal(mob/living/carbon/carbon_host, datum/disease/advance/our_disease, actual_power) carbon_host.heal_overall_damage(actual_power, actual_power, required_bodytype = healable_bodytypes) return TRUE + +/datum/symptom/heal/genetic + name = "Mutated Regeneration" + desc = "The virus slowly repairs tissue damage in hosts with stable genetics." + stealth = 1 + resistance = -3 + stage_speed = -4 + transmittable = -4 + level = 9 + threshold_descs = list( + "Resistance 9" = "Doubles healing speed from stable genetics.", + "Stage Speed 6" = "Slightly increases healing speed for all hosts without negative genetic stability.", + ) + power = 0 + var/stability_divisor = 25 + +/datum/symptom/heal/genetic/Start(datum/disease/advance/our_disease) + . = ..() + if(!.) + return + if(our_disease.totalResistance() >= 9) + power = 0.2 + if(our_disease.totalStageSpeed() >= 6) + stability_divisor = 12.5 + +/datum/symptom/heal/genetic/CanHeal(datum/disease/advance/our_disease) + if(!our_disease.affected_mob.has_dna()) + return power + var/dna_stability = our_disease.affected_mob.dna.stability + if(dna_stability >= initial(our_disease.affected_mob.dna.stability)) + return power + (dna_stability - initial(our_disease.affected_mob.dna.stability)) / stability_divisor + +/datum/symptom/heal/genetic/Heal(mob/living/carbon/carbon_host, datum/disease/advance/our_disease, actual_power) + if(carbon_host.heal_overall_damage(actual_power, actual_power, required_bodytype = healable_bodytypes) && prob(5)) + to_chat(carbon_host, span_notice("You feel your injuries slowly fading away.")) + return TRUE diff --git a/code/datums/diseases/advance/symptoms/narcolepsy.dm b/code/datums/diseases/advance/symptoms/narcolepsy.dm index 7520f4165500..aaaf3bc73184 100644 --- a/code/datums/diseases/advance/symptoms/narcolepsy.dm +++ b/code/datums/diseases/advance/symptoms/narcolepsy.dm @@ -14,7 +14,7 @@ resistance = -2 stage_speed = -2 transmittable = 0 - level = 6 + level = 4 symptom_delay = 57.5 severity = 4 symptom_cure = /datum/reagent/medicine/ondansetron diff --git a/code/datums/diseases/advance/symptoms/oxygen.dm b/code/datums/diseases/advance/symptoms/oxygen.dm index 48b3c99c00fd..be163cee4b42 100644 --- a/code/datums/diseases/advance/symptoms/oxygen.dm +++ b/code/datums/diseases/advance/symptoms/oxygen.dm @@ -13,7 +13,7 @@ resistance = -3 stage_speed = -3 transmittable = -4 - level = 6 + level = 7 base_message_chance = 3 symptom_delay = 1 delay_variation = 0 diff --git a/code/datums/diseases/advance/symptoms/sensory.dm b/code/datums/diseases/advance/symptoms/sensory.dm index 9423d07647f4..22e505609da4 100644 --- a/code/datums/diseases/advance/symptoms/sensory.dm +++ b/code/datums/diseases/advance/symptoms/sensory.dm @@ -12,7 +12,7 @@ resistance = -2 stage_speed = 1 transmittable = -3 - level = 5 + level = 6 symptom_delay = 7.5 var/purge_alcohol = FALSE var/trauma_heal_mild = FALSE @@ -81,7 +81,7 @@ resistance = 1 stage_speed = -2 transmittable = 2 - level = 4 + level = 3 base_message_chance = 7 symptom_delay = 1 delay_variation = 0 diff --git a/code/datums/diseases/advance/symptoms/shedding.dm b/code/datums/diseases/advance/symptoms/shedding.dm index 685aa3ad02c8..52d02376a6da 100644 --- a/code/datums/diseases/advance/symptoms/shedding.dm +++ b/code/datums/diseases/advance/symptoms/shedding.dm @@ -14,7 +14,7 @@ resistance = 1 stage_speed = 2 transmittable = 2 - level = 4 + level = 5 severity = 1 symptom_cure = /datum/reagent/barbers_aid cure_color = "yellow" diff --git a/code/datums/diseases/advance/symptoms/sneeze.dm b/code/datums/diseases/advance/symptoms/sneeze.dm index 16c29313313a..12ac5464159c 100644 --- a/code/datums/diseases/advance/symptoms/sneeze.dm +++ b/code/datums/diseases/advance/symptoms/sneeze.dm @@ -30,6 +30,7 @@ var/cartoon_sneezing = FALSE //ah, ah, AH, AH-CHOO!! ///if FALSE, there is a percentage chance that the mob will emote sneezing while sneeze_cooldown is on cooldown. If TRUE, won't emote again until after the off cooldown sneeze occurs. var/off_cooldown_sneezed = FALSE + var/suppress_warning = FALSE /datum/symptom/sneeze/Start(datum/disease/advance/active_disease) . = ..() diff --git a/code/datums/diseases/advance/symptoms/species.dm b/code/datums/diseases/advance/symptoms/species.dm index 56813ca03323..4dcd0ec5e77a 100644 --- a/code/datums/diseases/advance/symptoms/species.dm +++ b/code/datums/diseases/advance/symptoms/species.dm @@ -13,7 +13,7 @@ resistance = -2 stage_speed = 1 transmittable = 0 - level = 5 + level = 3 severity = 0 symptom_cure = null immunity_proof = TRUE @@ -41,7 +41,7 @@ resistance = 4 stage_speed = -2 transmittable = 3 - level = 5 + level = 3 severity = 0 symptom_cure = null immunity_proof = TRUE diff --git a/code/datums/diseases/advance/symptoms/symptoms.dm b/code/datums/diseases/advance/symptoms/symptoms.dm index 7da6e6844307..e13a7172482e 100644 --- a/code/datums/diseases/advance/symptoms/symptoms.dm +++ b/code/datums/diseases/advance/symptoms/symptoms.dm @@ -24,8 +24,6 @@ var/id = "" ///Base chance of sending warning messages, so it can be modified var/base_message_chance = 10 - ///If the early warnings are suppressed or not - var/suppress_warning = FALSE ///Ticks between each activation var/next_activation = 0 var/symptom_delay = 1 // Measured in seconds, not ticks or life ticks diff --git a/code/datums/diseases/advance/symptoms/thermoregulation.dm b/code/datums/diseases/advance/symptoms/thermoregulation.dm index 67ad1433434c..d377120fcfd2 100644 --- a/code/datums/diseases/advance/symptoms/thermoregulation.dm +++ b/code/datums/diseases/advance/symptoms/thermoregulation.dm @@ -13,7 +13,7 @@ resistance = 1 stage_speed = -2 transmittable = 0 - level = 5 + level = 4 severity = 0 threshold_descs = list( "Resistance 8" = "Increases thermal regulation speed." diff --git a/code/datums/diseases/advance/symptoms/viral.dm b/code/datums/diseases/advance/symptoms/viral.dm index ce02eb19e705..56e09106b115 100644 --- a/code/datums/diseases/advance/symptoms/viral.dm +++ b/code/datums/diseases/advance/symptoms/viral.dm @@ -14,7 +14,7 @@ resistance = 5 stage_speed = -3 transmittable = 0 - level = 3 + level = 4 symptom_cure = null /datum/symptom/viraladaptation/OnAdd(datum/disease/advance/our_disease) @@ -38,7 +38,7 @@ resistance = -3 stage_speed = 5 transmittable = 3 - level = 3 + level = 4 symptom_cure = null /datum/symptom/viralevolution/OnAdd(datum/disease/advance/our_disease) diff --git a/code/datums/diseases/advance/symptoms/vision.dm b/code/datums/diseases/advance/symptoms/vision.dm index 67ce7653ea22..c2d8c3a8616e 100644 --- a/code/datums/diseases/advance/symptoms/vision.dm +++ b/code/datums/diseases/advance/symptoms/vision.dm @@ -14,7 +14,7 @@ resistance = -2 stage_speed = -3 transmittable = -2 - level = 5 + level = 8 severity = 5 base_message_chance = 50 symptom_delay = 52.5 @@ -27,6 +27,7 @@ ) /// At max stage: If FALSE, cause blindness. If TRUE, cause their eyes to fall out. var/remove_eyes = FALSE + var/suppress_warning = FALSE /datum/symptom/visionloss/Start(datum/disease/advance/A) . = ..() diff --git a/code/datums/diseases/advance/symptoms/voice_change.dm b/code/datums/diseases/advance/symptoms/voice_change.dm index e2218e4cfa17..4904f9296883 100644 --- a/code/datums/diseases/advance/symptoms/voice_change.dm +++ b/code/datums/diseases/advance/symptoms/voice_change.dm @@ -15,7 +15,7 @@ resistance = -1 stage_speed = -2 transmittable = 2 - level = 6 + level = 5 severity = 2 base_message_chance = 100 symptom_delay = 90 @@ -28,6 +28,7 @@ ) var/scramble_language = FALSE var/datum/language/current_language + var/suppress_warning = FALSE /datum/symptom/voice_change/Start(datum/disease/advance/A) . = ..() diff --git a/code/datums/diseases/advance/symptoms/vomit.dm b/code/datums/diseases/advance/symptoms/vomit.dm index 8f6318d1de04..9950aa2fb824 100644 --- a/code/datums/diseases/advance/symptoms/vomit.dm +++ b/code/datums/diseases/advance/symptoms/vomit.dm @@ -30,6 +30,7 @@ and your disease can spread via people walking on vomit. var/vomit_nebula = FALSE var/vomit_blood = FALSE var/proj_vomit = 0 + var/suppress_warning = FALSE /datum/symptom/vomit/Start(datum/disease/advance/A) . = ..() diff --git a/code/datums/diseases/advance/symptoms/weight.dm b/code/datums/diseases/advance/symptoms/weight.dm index a29b72a50793..12e98995dc1e 100644 --- a/code/datums/diseases/advance/symptoms/weight.dm +++ b/code/datums/diseases/advance/symptoms/weight.dm @@ -13,7 +13,7 @@ resistance = 2 stage_speed = -2 transmittable = -2 - level = 3 + level = 7 severity = 3 base_message_chance = 100 symptom_delay = 30 diff --git a/code/datums/diseases/advance/symptoms/youth.dm b/code/datums/diseases/advance/symptoms/youth.dm index 472aea77b623..1503542b53fa 100644 --- a/code/datums/diseases/advance/symptoms/youth.dm +++ b/code/datums/diseases/advance/symptoms/youth.dm @@ -15,7 +15,7 @@ resistance = 4 stage_speed = 4 transmittable = -4 - level = 5 + level = 6 base_message_chance = 100 symptom_delay = 37.5 symptom_cure = null diff --git a/code/datums/dna/blocks/dna_features_block.dm b/code/datums/dna/blocks/dna_features_block.dm index adda8a1b0b71..6997c0d01ae2 100644 --- a/code/datums/dna/blocks/dna_features_block.dm +++ b/code/datums/dna/blocks/dna_features_block.dm @@ -8,16 +8,6 @@ /datum/dna_block/feature/mutant_color/apply_to_mob(mob/living/carbon/human/target, dna_hash) target.dna.features[feature_key] = sanitize_hexcolor(get_block(dna_hash)) -/datum/dna_block/feature/ethereal_color - block_length = DNA_BLOCK_SIZE_COLOR - feature_key = FEATURE_ETHEREAL_COLOR - -/datum/dna_block/feature/ethereal_color/create_unique_block(mob/living/carbon/human/target) - return sanitize_hexcolor(target.dna.features[FEATURE_ETHEREAL_COLOR], include_crunch = FALSE) - -/datum/dna_block/feature/ethereal_color/apply_to_mob(mob/living/carbon/human/target, dna_hash) - target.dna.features[feature_key] = sanitize_hexcolor(get_block(dna_hash)) - /// Features tied to a sprite accessory /datum/dna_block/feature/accessory abstract_type = /datum/dna_block/feature/accessory diff --git a/code/datums/dna/dna.dm b/code/datums/dna/dna.dm index a7251a6b2c1c..1ade1c549196 100644 --- a/code/datums/dna/dna.dm +++ b/code/datums/dna/dna.dm @@ -405,8 +405,6 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) else CRASH("set_species called with an invalid mrace [mrace]") - death_sound = new_race.death_sound - var/datum/species/old_species = dna.species dna.species = new_race diff --git a/code/datums/elements/blood_reagent.dm b/code/datums/elements/blood_reagent.dm index 863b07f45fe0..fa505c39d6a4 100644 --- a/code/datums/elements/blood_reagent.dm +++ b/code/datums/elements/blood_reagent.dm @@ -26,7 +26,7 @@ if (!target.data) target.data = list() - target.data["blood_type"] = blood_type + target.data[BLOOD_DATA_TYPE] = blood_type if (blood_type.desc) target.description = blood_type.desc target.color = blood_type.get_color() @@ -81,7 +81,7 @@ SIGNAL_HANDLER if ((methods & (TOUCH | VAPOR)) && reac_volume >= 3 && (blood_type.blood_flags & (BLOOD_ADD_DNA | BLOOD_COVER_MOBS))) - exposed_mob.add_blood_DNA(list("[source.data?["blood_DNA"] || blood_type.dna_string]" = blood_type)) + exposed_mob.add_blood_DNA(list("[source.data?[BLOOD_DATA_DNA] || blood_type.dna_string]" = blood_type)) // Somehow got a no-data reagent, probably artificially created blood if (!source.data) @@ -125,7 +125,7 @@ if (reac_volume < 3 || !(blood_type.blood_flags & (BLOOD_ADD_DNA | BLOOD_COVER_TURFS))) return - var/dna_list = list("[source.data?["blood_DNA"] || blood_type.dna_string]" = blood_type) + var/dna_list = list("[source.data?[BLOOD_DATA_DNA] || blood_type.dna_string]" = blood_type) var/obj/effect/decal/cleanable/blood/splatter = locate() in exposed_turf if (!splatter) if (!(blood_type.blood_flags & BLOOD_COVER_TURFS)) @@ -156,7 +156,7 @@ return if (blood_type.blood_flags & (BLOOD_ADD_DNA | BLOOD_COVER_ITEMS)) - exposed_obj.add_blood_DNA(list("[source.data?["blood_DNA"] || blood_type.dna_string]" = blood_type)) + exposed_obj.add_blood_DNA(list("[source.data?[BLOOD_DATA_DNA] || blood_type.dna_string]" = blood_type)) if (!(blood_type.blood_flags & BLOOD_TRANSFER_VIRAL_DATA) || !source.data?["viruses"]) return @@ -188,7 +188,7 @@ return // Mixed blood cannot be used for cloning - if (source.data["blood_DNA"] != mix_data["blood_DNA"]) + if (source.data[BLOOD_DATA_DNA] != mix_data[BLOOD_DATA_DNA]) source.data["cloneable"] = FALSE var/list/source_viruses = source.data["viruses"] diff --git a/code/datums/elements/footstep.dm b/code/datums/elements/footstep.dm index 65c7dfab3214..d837e58155b1 100644 --- a/code/datums/elements/footstep.dm +++ b/code/datums/elements/footstep.dm @@ -43,7 +43,7 @@ src.volume = 90*volume if(FOOTSTEP_MOB_SLIME) footstep_sounds = 'sound/effects/footstep/slime1.ogg' - src.volume = 90*volume + src.volume = 20*volume if(FOOTSTEP_OBJ_MACHINE) footstep_sounds = 'sound/effects/bang.ogg' src.volume = 90*volume diff --git a/code/datums/elements/organ_set_bonus.dm b/code/datums/elements/organ_set_bonus.dm index ef2691e87fab..7f3b20566c1c 100644 --- a/code/datums/elements/organ_set_bonus.dm +++ b/code/datums/elements/organ_set_bonus.dm @@ -57,10 +57,10 @@ var/required_biotype = MOB_ORGANIC /// A list of traits added to the mob upon bonus activation, can be of any length. var/list/bonus_traits = list() - /// Bonus biotype to add on bonus activation. + /// Bonus biotype(s) to add on bonus activation. var/bonus_biotype - /// If the biotype was added - used to check if we should remove the biotype or not, on organ set loss. - var/biotype_added = FALSE + /// what biotype(s) was added - used to check if we should remove the biotype or not, on organ set loss. + var/biotype_added = NONE /// Limb texture to apply upon activation var/limb_texture /// Color priority for limb limb_texture @@ -89,10 +89,11 @@ owner.add_traits(bonus_traits, TRAIT_STATUS_EFFECT(id)) // Add biotype - if(owner.mob_biotypes & bonus_biotype) - biotype_added = FALSE - owner.mob_biotypes |= bonus_biotype - biotype_added = TRUE + if(bonus_biotype) + biotype_added = bonus_biotype & ~owner.mob_biotypes + owner.mob_biotypes |= biotype_added + RegisterSignal(owner, COMSIG_SPECIES_LOSS, PROC_REF(on_species_loss)) + RegisterSignal(owner, COMSIG_SPECIES_GAIN, PROC_REF(on_species_gain)) if(bonus_activate_text) to_chat(owner, bonus_activate_text) @@ -123,7 +124,8 @@ owner.remove_traits(bonus_traits, TRAIT_STATUS_EFFECT(id)) // Remove biotype (if added) if(biotype_added) - owner.mob_biotypes &= ~bonus_biotype + owner.mob_biotypes &= ~biotype_added + biotype_added = NONE if(bonus_deactivate_text) to_chat(owner, bonus_deactivate_text) @@ -132,7 +134,7 @@ if(!limb_texture) return - UnregisterSignal(owner, list(COMSIG_CARBON_ATTACH_LIMB, COMSIG_CARBON_REMOVE_LIMB)) + UnregisterSignal(owner, list(COMSIG_CARBON_ATTACH_LIMB, COMSIG_CARBON_REMOVE_LIMB, COMSIG_SPECIES_LOSS, COMSIG_SPECIES_GAIN)) if(QDELETED(owner)) return @@ -144,6 +146,18 @@ owner.update_body() +///We need to recalculate the mob biotypes, so first, remove the added biotypes from the mob before the new species changes the standard biotypes. +/datum/status_effect/organ_set_bonus/proc/on_species_loss(mob/living/carbon/human, datum/species/new_species, datum/species/old_species) + SIGNAL_HANDLER + human.mob_biotypes &= ~biotype_added + biotype_added = NONE + +///After the new species has added its biotypes to the mob, check if they already have or don't have the bonus biotype now. +/datum/status_effect/organ_set_bonus/proc/on_species_gain(mob/living/carbon/human, datum/species/new_species, datum/species/old_species) + SIGNAL_HANDLER + biotype_added = bonus_biotype & ~owner.mob_biotypes + owner.mob_biotypes |= biotype_added + /datum/status_effect/organ_set_bonus/proc/texture_limb(atom/source, obj/item/bodypart/limb) SIGNAL_HANDLER diff --git a/code/datums/elements/surgery_aid.dm b/code/datums/elements/surgery_aid.dm index ca351cc6a56c..cf27f016b0fd 100644 --- a/code/datums/elements/surgery_aid.dm +++ b/code/datums/elements/surgery_aid.dm @@ -93,7 +93,7 @@ REMOVE_TRAIT(owner, TRAIT_READY_TO_OPERATE, TRAIT_STATUS_EFFECT(id)) UnregisterSignal(owner, list(COMSIG_MOVABLE_MOVED, COMSIG_CARBON_POST_ATTACH_LIMB, COMSIG_CARBON_POST_REMOVE_LIMB)) -/datum/status_effect/surgery_prepped/get_examine_text() +/datum/status_effect/surgery_prepped/get_examine_text(mob/examiner) var/list/zones_readable = list() // give the body zones a consistent order, the same order as GLOB.all_body_zones for(var/zone in GLOB.all_body_zones & zones) diff --git a/code/datums/elements/uses_girder_wall_recipes.dm b/code/datums/elements/uses_girder_wall_recipes.dm index 38593f89f54d..d51c4c6d02f2 100644 --- a/code/datums/elements/uses_girder_wall_recipes.dm +++ b/code/datums/elements/uses_girder_wall_recipes.dm @@ -96,6 +96,13 @@ else CRASH("Attempted a girder wall recipe with an invalid wall type ([recipe.wall_type])") + if(istype(wall, /turf/closed/wall)) + var/turf/closed/wall/griderholder = wall + griderholder.girder_type = structure.type + if(istype(wall, /obj/structure/falsewall)) + var/obj/structure/falsewall/griderholder = wall + griderholder.girder_type = structure.type + user.visible_message( message = span_notice("\The [user] finish[user.p_es()] building \a [wall] on \the [structure]."), self_message = span_notice("You finish building \a [wall] on \the [structure]."), diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm index 4798de626432..465c2260d3e1 100644 --- a/code/datums/emotes.dm +++ b/code/datums/emotes.dm @@ -51,11 +51,17 @@ var/stat_allowed = STABLE var/can_use_flags = NONE - /// Sound to play when emote is called. + /// A single, default sound to play if nothing else overrides this var/sound + /// A more indepth list of sounds to play, ordered by mob type. Takes precedence over [sound] + var/list/sounds_by_mobtype var/extra_range = 0 // DARKPACK EDIT ADD /// Does this emote vary in pitch? var/vary = FALSE + /// The volume of the sound + var/sound_volume = 50 + /// Does this emote's sound ignore walls? + var/sound_wall_ignore = FALSE /// If this emote's sound is affected by TTS pitch var/affected_by_pitch = TRUE /// Can only code call this event instead of the player. @@ -72,8 +78,7 @@ var/forced_general_emote_audio_cooldown = 2 SECONDS /// How long is the specific emote cooldown triggered by this emote when forced? var/forced_specific_emote_audio_cooldown = 2 SECONDS - /// Does this emote's sound ignore walls? - var/sound_wall_ignore = FALSE + /// The volume of the sound ///Does this emote use sound tokens? this means it also ignores walls. var/use_sound_tokens = FALSE @@ -139,9 +144,9 @@ else if(vary) frequency = rand(MIN_EMOTE_PITCH, MAX_EMOTE_PITCH) if(use_sound_tokens && sound_wall_ignore) - playsoundtoken(source = user, soundin = tmp_sound, range = SOUND_RANGE, volume = 50) + playsoundtoken(source = user, soundin = tmp_sound, range = SOUND_RANGE, volume = sound_volume) else - playsound(source = user,soundin = tmp_sound,vol = 50, vary = FALSE, extrarange = get_range(user), ignore_walls = sound_wall_ignore, frequency = frequency) // DARKPACK EDIT CHANGE - (Added extrarange getter) + playsound(source = user,soundin = tmp_sound,vol = sound_volume, vary = FALSE, extrarange = get_range(user), ignore_walls = sound_wall_ignore, frequency = frequency) // DARKPACK EDIT CHANGE - (Added extrarange getter) var/is_important = running_emote_type & EMOTE_IMPORTANT @@ -268,7 +273,21 @@ * Returns the sound that will be made while sending the emote. */ /datum/emote/proc/get_sound(mob/living/user) - return sound //by default just return this var. + var/list/comsig_sounds = list() + SEND_SIGNAL(user, COMSIG_MOB_EMOTE_SOUND(key), key, comsig_sounds) + if(length(comsig_sounds)) + var/chosen_sound + var/highest_priority = 0 + for(var/candidate in comsig_sounds) + var/priority = comsig_sounds[candidate] + if(priority > highest_priority) + highest_priority = priority + chosen_sound = candidate + return chosen_sound + var/sound_or_sounds = is_type_in_list(user, sounds_by_mobtype, zebra = TRUE) + if(sound_or_sounds) + return get_emote_sound_from_list(sound_or_sounds, user) + return sound // DARKPACK EDIT ADD START /datum/emote/proc/get_range() @@ -414,14 +433,10 @@ */ /datum/emote/proc/should_play_sound(mob/user, intentional = FALSE) if(emote_type & EMOTE_AUDIBLE && !hands_use_check) - if(HAS_TRAIT(user, TRAIT_MUTE)) + if(HAS_TRAIT(user, TRAIT_MUTE) || HAS_MIND_TRAIT(user, TRAIT_MIMING)) + return FALSE + if(iscarbon(user) && !user.get_organ_slot(ORGAN_SLOT_TONGUE)) return FALSE - if(ishuman(user)) - var/mob/living/carbon/human/loud_mouth = user - if(HAS_MIND_TRAIT(loud_mouth, TRAIT_MIMING)) // vow of silence prevents outloud noises - return FALSE - if(!loud_mouth.get_organ_slot(ORGAN_SLOT_TONGUE)) - return FALSE if(only_forced_audio && intentional) return FALSE diff --git a/code/datums/keybinding/admin.dm b/code/datums/keybinding/admin.dm index f69581e05d73..212356d63d4d 100644 --- a/code/datums/keybinding/admin.dm +++ b/code/datums/keybinding/admin.dm @@ -151,3 +151,17 @@ return SSadmin_verbs.dynamic_invoke_verb(user, /datum/admin_verb/display_tags) return TRUE + +/datum/keybinding/admin/admin_verb_panel + hotkey_keys = list("`") + name = "admin_verb_panel" + full_name = "Admin Verb Panel" + description = "Opens the admin verb panel" + keybind_signal = COMSIG_KB_ADMIN_VERBPANEL_DOWN + +/datum/keybinding/admin/admin_verb_panel/down(client/user, turf/target, mousepos_x, mousepos_y) + . = ..() + if(.) + return + SSadmin_verbs.dynamic_invoke_verb(user, /datum/admin_verb/admin_verb_panel) + return TRUE diff --git a/code/datums/mapgen/biomes/lavaland.dm b/code/datums/mapgen/biomes/lavaland.dm index 88c907dc23fe..b3278bf50797 100644 --- a/code/datums/mapgen/biomes/lavaland.dm +++ b/code/datums/mapgen/biomes/lavaland.dm @@ -1,7 +1,7 @@ /datum/biome/lavaland open_turf_type = /turf/open/misc/asteroid/basalt/lava_land_surface closed_turf_type = /turf/closed/mineral/volcanic - mob_exclusion_radius = 7 + mob_exclusion_radius = 9 /datum/biome/lavaland/basalt closed_turf_type = /turf/closed/mineral/random/volcanic diff --git a/code/datums/materials/meat.dm b/code/datums/materials/meat.dm index 0e9d1e6d0910..dcbc0b205bee 100644 --- a/code/datums/materials/meat.dm +++ b/code/datums/materials/meat.dm @@ -167,7 +167,7 @@ var/list/blood_data = source.data name = "[blood_data["real_name"] || "mystery"] [initial(name)]" - var/datum/blood_type/blood_type = blood_data["blood_type"] + var/datum/blood_type/blood_type = blood_data[BLOOD_DATA_TYPE] if(blood_type && blood_type.get_color() != BLOOD_COLOR_RED) var/list/transition_filter = color_transition_filter(blood_type.get_color()) color = transition_filter["color"] diff --git a/code/datums/mind/_mind.dm b/code/datums/mind/_mind.dm index 493fd7dfa044..4846a60dd8e0 100644 --- a/code/datums/mind/_mind.dm +++ b/code/datums/mind/_mind.dm @@ -509,6 +509,7 @@ assigned_role = new_role if(!isnull(current)) SEND_SIGNAL(current, COMSIG_MOB_MIND_SET_ROLE, new_role) + current.client?.tgui_panel?.send_player_info() ///Sets your holy role, giving/taking away traits related to if you're gaining/losing it. /datum/mind/proc/set_holy_role(new_holy_role) diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm index f952e207ad49..8e2f0e779a0a 100644 --- a/code/datums/mood_events/generic_negative_events.dm +++ b/code/datums/mood_events/generic_negative_events.dm @@ -12,6 +12,13 @@ mood_change = -12 event_flags = MOOD_EVENT_FEAR +/datum/mood_event/on_fire/add_effects(...) + if(owner.has_quirk(/datum/quirk/pyromania)) + mood_change *= 0.25 + description = "This might be a bit too much fire." + else if(owner.has_quirk(/datum/quirk/pyrophobia)) + mood_change *= 1.5 + /datum/mood_event/suffocation description = "CAN'T... BREATHE..." mood_change = -12 diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm index e97673e0a72e..a59ae74d1ac4 100644 --- a/code/datums/mutations/body.dm +++ b/code/datums/mutations/body.dm @@ -762,12 +762,12 @@ var/replacement_type = owner.dna.species.get_mutant_organ_type_for_slot(pick(missing_important_organs)) var/obj/item/organ/replacement = new replacement_type() replacement.Insert(owner, special = TRUE) - to_chat(owner, span_green("The tingingling feeling builds to a climax, until ultimately you feel a new [replacement] where your old one was!")) + to_chat(owner, span_green("The tingling feeling builds to a climax, until ultimately you feel [replacement.gender == PLURAL ? "some" : "a"] new [replacement.name] where your old one[replacement.gender == PLURAL ? "s were" : " was"]!")) else var/replacing_zone = pick(missing_limbs) owner.regenerate_limb(replacing_zone) var/obj/item/bodypart/replacement = owner.get_bodypart(replacing_zone) - to_chat(owner, span_green("The tingling feeling builds to a climax, until ultimately you feel a new [replacement.plaintext_zone] where your old one was!")) + to_chat(owner, span_green("The tingling feeling builds to a climax, until ultimately you feel [replacement.gender == PLURAL ? "some" : "a"] new [replacement.plaintext_zone] where your old one[replacement.gender == PLURAL ? "s were" : " was"]!")) owner.visible_message(span_warning("[owner]'s [replacement.plaintext_zone] reforms, making a loud, grotesque sound!"), ignored_mobs = list(owner)) owner.adjust_nutrition(-NUTRITION_LEVEL_FULL * 0.5 * GET_MUTATION_SYNCHRONIZER(src)) playsound(owner, 'sound/effects/magic/demon_consume.ogg', 33, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) @@ -778,9 +778,9 @@ var/replacement_type = pick(missing_special_organs) var/obj/item/organ/replacement = new replacement_type() replacement.Insert(owner, special = TRUE) - to_chat(owner, span_green("The tingling feeling builds to a climax, until ultimately you feel a new [replacement] where your old one was!")) + to_chat(owner, span_green("The tingling feeling builds to a climax, until ultimately you feel [replacement.gender == PLURAL ? "some" : "a"] new [replacement.name] where your old one[replacement.gender == PLURAL ? "s were" : " was"]!")) if(replacement.organ_flags & ORGAN_EXTERNAL) - owner.visible_message(span_warning("[owner]'s [replacement] reforms, making a loud, grotesque sound!"), ignored_mobs = list(owner)) + owner.visible_message(span_warning("[owner]'s [replacement.name] reforms, making a loud, grotesque sound!"), ignored_mobs = list(owner)) owner.adjust_nutrition(-NUTRITION_LEVEL_FULL * 0.3 * GET_MUTATION_SYNCHRONIZER(src)) playsound(owner, 'sound/effects/magic/demon_consume.ogg', 33, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) return diff --git a/code/datums/personality/personality_preference.dm b/code/datums/personality/personality_preference.dm index 0f8a5d8ce047..d4e437b76b1b 100644 --- a/code/datums/personality/personality_preference.dm +++ b/code/datums/personality/personality_preference.dm @@ -5,7 +5,7 @@ randomize_by_default = FALSE should_update_preview = FALSE -/datum/preference/personality/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/personality/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) if(isdummy(target) || !ishuman(target) || isnull(target.mob_mood)) return if(CONFIG_GET(flag/disable_human_mood) || !CONFIG_GET(flag/roundstart_traits)) diff --git a/code/datums/quirks/negative_quirks/blood_deficiency.dm b/code/datums/quirks/negative_quirks/blood_deficiency.dm index 699b9ff139d8..a8acfb0b788c 100644 --- a/code/datums/quirks/negative_quirks/blood_deficiency.dm +++ b/code/datums/quirks/negative_quirks/blood_deficiency.dm @@ -53,6 +53,6 @@ return for(var/obj/item/reagent_containers/blood/blood_bag as anything in typesof(/obj/item/reagent_containers/blood)) - if(blood_bag::blood_type == new_blood_type.name) + if(blood_bag::blood_type == new_blood_type.type) mail_goodies = list(blood_bag) return diff --git a/code/datums/quirks/negative_quirks/nyctophobia.dm b/code/datums/quirks/negative_quirks/nyctophobia.dm index efe3f873a327..eebb2a84976d 100644 --- a/code/datums/quirks/negative_quirks/nyctophobia.dm +++ b/code/datums/quirks/negative_quirks/nyctophobia.dm @@ -1,6 +1,7 @@ /datum/quirk/nyctophobia name = "Nyctophobia" - desc = "As far as you can remember, you've always been afraid of the dark. While in the dark without a light source, you instinctively act careful, and constantly feel a sense of dread." + desc = "As far as you can remember, you've always been afraid of the dark. \ + While in the dark without a light source, you constantly feel a sense of dread." icon = FA_ICON_LIGHTBULB value = -3 medical_record_text = "Patient demonstrates a fear of the dark. (Seriously?)" diff --git a/code/datums/quirks/negative_quirks/photophobia.dm b/code/datums/quirks/negative_quirks/photophobia.dm index 4681770f1d31..3a3bc08c25c8 100644 --- a/code/datums/quirks/negative_quirks/photophobia.dm +++ b/code/datums/quirks/negative_quirks/photophobia.dm @@ -62,11 +62,8 @@ return var/turf/holder_turf = get_turf(quirk_holder) - - var/lums = holder_turf.get_lumcount() - var/eye_protection = quirk_holder.get_eye_protection() - if(lums < LIGHTING_TILE_IS_DARK || eye_protection >= FLASH_PROTECTION_NONE) + if(holder_turf.check_lumcount_below(LIGHTING_TILE_IS_DARK) || eye_protection >= FLASH_PROTECTION_NONE) quirk_holder.clear_mood_event(MOOD_CATEGORY_PHOTOPHOBIA) return quirk_holder.add_mood_event(MOOD_CATEGORY_PHOTOPHOBIA, /datum/mood_event/photophobia) diff --git a/code/datums/quirks/negative_quirks/pyrophobia.dm b/code/datums/quirks/negative_quirks/pyrophobia.dm new file mode 100644 index 000000000000..20a0d299fca4 --- /dev/null +++ b/code/datums/quirks/negative_quirks/pyrophobia.dm @@ -0,0 +1,34 @@ +/datum/quirk/pyrophobia + name = "Pyrophobia" + desc = "You are terrified of fire and flames." + icon = FA_ICON_FIRE_EXTINGUISHER + value = -3 + medical_record_text = "Patient demonstrates a fear of fire." + medical_symptom_text = "Experiences panic attacks and shortness of breath when near open flames. \ + Medication such as Psicodine may lessen the severity of the reaction." + hardcore_value = 5 + quirk_flags = QUIRK_TRAUMALIKE + +/datum/quirk/pyrophobia/add(client/client_source) + . = ..() + quirk_holder.AddComponentFrom(type, /datum/component/fearful, list( \ + /datum/terror_handler/force_stop_drop_roll, \ + /datum/terror_handler/is_stop_drop_rolling, \ + /datum/terror_handler/simple_source/pyrophobia, \ + )) + +/datum/quirk/pyrophobia/remove() + . = ..() + quirk_holder.RemoveComponentSource(type, /datum/component/fearful) + +/datum/mood_event/pyrophobia + description = "I see fire, and I don't like it!" + mood_change = -1 + event_flags = MOOD_EVENT_FEAR + +/datum/mood_event/pyrophobia/add_effects(fire_size = 0) + mood_change = -1 * fire_size + +/datum/mood_event/pyrophobia/be_replaced(datum/mood/home, datum/mood_event/new_event, fire_size = 0) + mood_change = min(mood_change, -1 * fire_size) + return BLOCK_NEW_MOOD diff --git a/code/datums/quirks/positive_quirks/pyromania.dm b/code/datums/quirks/positive_quirks/pyromania.dm new file mode 100644 index 000000000000..44f8973cccd0 --- /dev/null +++ b/code/datums/quirks/positive_quirks/pyromania.dm @@ -0,0 +1,103 @@ +/datum/quirk/pyromania + name = "Pyromania" + desc = "Fire is fascinating to you. You feel happier when around fire, and are generally a bit more resilient to heat and flames." + icon = FA_ICON_FIRE + value = 6 + gain_text = span_warning("You feel a burning desire to start fires.") + lose_text = span_notice("You realize just how dangerous fire can be.") + medical_record_text = "Patient has a fascination with fire, and exhibits a compulsive desire to start fires." + medical_symptom_text = "Experiences an uncontrollable urge to start fires and a fascination with flames." + quirk_flags = QUIRK_PROCESSES|QUIRK_TRAUMALIKE|QUIRK_HUMAN_ONLY + /// Heat damage reduction + var/damage_mod = 0.67 + /// Tracks the last fire size to avoid spamming mood events + VAR_PRIVATE/last_fire_size = -1 + /// CD before we attempt to start a fire with our lighter + COOLDOWN_DECLARE(start_fire_cd) + +/datum/quirk/pyromania/post_add() + var/pyro_policy = get_policy("[type]") || "Please note that your [LOWER_TEXT(name)] does NOT give you any additional right to spread fires." + to_chat(quirk_holder, span_info(pyro_policy)) + +/datum/quirk/pyromania/add(client/client_source) + . = ..() + var/mob/living/carbon/human/human_holder = quirk_holder + human_holder.physiology.heat_mod *= damage_mod + RegisterSignal(quirk_holder, COMSIG_MOB_APPLY_DAMAGE, PROC_REF(damage_taken)) + +/datum/quirk/pyromania/remove() + . = ..() + UnregisterSignal(quirk_holder, COMSIG_MOB_APPLY_DAMAGE) + if(QDELING(quirk_holder)) + return + + var/mob/living/carbon/human/human_holder = quirk_holder + human_holder.physiology.heat_mod /= damage_mod + human_holder.clear_mood_event("pyromania_fire") + +/datum/quirk/pyromania/process(seconds_per_tick) + var/fire_size = quirk_holder.count_nearby_fire_sources() + if(fire_size != last_fire_size) + if(fire_size >= 1) + quirk_holder.add_mood_event("pyromania_fire", /datum/mood_event/pyromania, round(fire_size)) + else + quirk_holder.clear_mood_event("pyromania_fire") + last_fire_size = fire_size + + if(COOLDOWN_FINISHED(src, start_fire_cd) && SPT_PROB((SANITY_NEUTRAL - quirk_holder.mob_mood?.sanity) / 5, seconds_per_tick)) + for(var/obj/item/lighter/lighter in quirk_holder.held_items) + if(lighter.lit) + continue + to_chat(quirk_holder, span_warning("You impulsively strike [lighter], trying to start a flame...")) + lighter.attack_self(quirk_holder) + COOLDOWN_START(src, start_fire_cd, 4 SECONDS) + break + +/// Tracks when we're taking damage to temporarily pause attempts to strike up a flame +/datum/quirk/pyromania/proc/damage_taken(datum/source, damage_amount, damage_type, ...) + SIGNAL_HANDLER + if(damage_amount >= 5 && (damage_type == BRUTE || damage_type == BURN || damage_type == STAMINA)) + COOLDOWN_START(src, start_fire_cd, 12 SECONDS) + +/** + * Counts how many open flames are nearby, optionally weighted by their intensity (a candle's flame is significantly smaller than a bonfire). + */ +/atom/proc/count_nearby_fire_sources(radius = 5, weighted = FALSE) + var/fire_size = 0 + + for(var/atom/movable/thing in view(radius, src)) + // scales based on fire stacks. also includes the mob itself. + if(astype(thing, /mob/living)?.on_fire) + fire_size += weighted ? (astype(thing, /mob/living).fire_stacks / 20) : 1 + // giant pile of fire + else if(astype(thing, /obj/structure/bonfire)?.burning) + fire_size += weighted ? 1.0 : 1 + // relatively safe, at least safer than a bonfire + else if(astype(thing, /obj/structure/fireplace)?.lit) + fire_size += weighted ? 0.5 : 1 + // various small flames, but elevated if they are being held + else if(astype(thing, /obj/item/flashlight/flare)?.light_on) + fire_size += weighted ? (thing.loc == src ? 1.0 : 0.2) : 1 + else if(astype(thing, /obj/item/match)?.lit) + fire_size += weighted ? (thing.loc == src ? 1.0 : 0.2) : 1 + else if(astype(thing, /obj/item/lighter)?.lit) + fire_size += weighted ? (thing.loc == src ? 1.0 : 0.2) : 1 + // hotspots are huge walls of fire, but also spammed a lot, so weighted down a bit + else if(istype(thing, /obj/effect/hotspot)) + fire_size += weighted ? 1.2 : 1 + // any other random item being on fire, these are more uncontrolled, and potentially even being worn + else if(thing.resistance_flags & ON_FIRE) + fire_size += weighted ? (thing.loc == src ? 2.0 : 0.2) : 1 + + return fire_size + +/datum/mood_event/pyromania + description = "Lovely, warm fire..." + mood_change = 1 + +/datum/mood_event/pyromania/add_effects(fire_size = 0) + mood_change = fire_size + +/datum/mood_event/pyromania/be_replaced(datum/mood/home, datum/mood_event/new_event, fire_size = 0) + mood_change = max(mood_change, fire_size) + return BLOCK_NEW_MOOD diff --git a/code/datums/shuttles/emergency.dm b/code/datums/shuttles/emergency.dm index bd3e3270abcd..f05baeebd145 100644 --- a/code/datums/shuttles/emergency.dm +++ b/code/datums/shuttles/emergency.dm @@ -535,4 +535,16 @@ /datum/map_template/shuttle/emergency/tombstone/prerequisites_met() return SSshuttle.shuttle_purchase_requirements_met[SHUTTLE_UNLOCK_TOMBSTONE] +/datum/map_template/shuttle/emergency/ark + suffix = "ark" + name = "The Ark" + description = "A specialized mobile zoo and research transport. The main passenger lounges are built directly alongside containment cells housing various friendly, exotic, and hostile alien specimens." + prerequisites = "You will need to obtain all samples for the station's DNA Vault goal." + admin_notes = "Packed with various fauna, including hostile and passive exotic mobs in enclosures." + credit_cost = CARGO_CRATE_VALUE * 25 + occupancy_limit = "70" + +/datum/map_template/shuttle/emergency/ark/prerequisites_met() + return SSshuttle.shuttle_purchase_requirements_met[SHUTTLE_UNLOCK_ARK] + #undef EMAG_LOCKED_SHUTTLE_COST diff --git a/code/datums/status_effects/_status_effect.dm b/code/datums/status_effects/_status_effect.dm index b0cf4afc72ef..e10e22291536 100644 --- a/code/datums/status_effects/_status_effect.dm +++ b/code/datums/status_effects/_status_effect.dm @@ -44,7 +44,7 @@ /datum/status_effect/proc/on_creation(mob/living/new_owner, ...) if(new_owner) owner = new_owner - if(QDELETED(owner) || !on_apply()) + if(QDELETED(owner) || !on_apply(arglist(args.Copy(2)))) qdel(src) return if(owner) @@ -132,7 +132,7 @@ /// Gets and formats examine text associated with our status effect. /// Return 'null' to have no examine text appear (default behavior). -/datum/status_effect/proc/get_examine_text() +/datum/status_effect/proc/get_examine_text(mob/examiner) return null /** diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index 731a20d5518c..893fd4d76735 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -307,7 +307,7 @@ QDEL_NULL(aura_healing) owner.remove_traits(list(TRAIT_PACIFISM, TRAIT_HIPPOCRATIC_OATH, TRAIT_MEDICAL_HUD), HIPPOCRATIC_OATH_TRAIT) -/datum/status_effect/hippocratic_oath/get_examine_text() +/datum/status_effect/hippocratic_oath/get_examine_text(mob/examiner) return span_notice("[owner.p_They()] seem[owner.p_s()] to have an aura of healing and helpfulness about [owner.p_them()].") /datum/status_effect/hippocratic_oath/tick(seconds_between_ticks) diff --git a/code/datums/status_effects/buffs/stop_drop_roll.dm b/code/datums/status_effects/buffs/stop_drop_roll.dm index a7ca2109769a..109278194691 100644 --- a/code/datums/status_effects/buffs/stop_drop_roll.dm +++ b/code/datums/status_effects/buffs/stop_drop_roll.dm @@ -3,9 +3,15 @@ alert_type = null tick_interval = 0.8 SECONDS processing_speed = STATUS_EFFECT_PRIORITY + /// If FALSE the rolling is cancelled if we are immobilized + var/ignore_immobilize = FALSE /// bar updates depending on how "on fire" you are VAR_FINAL/datum/progressbar/bar +/datum/status_effect/stop_drop_roll/on_creation(mob/living/new_owner, ignore_immobilize = FALSE) + src.ignore_immobilize = ignore_immobilize + return ..() + /datum/status_effect/stop_drop_roll/on_apply() if(!iscarbon(owner)) return FALSE @@ -44,7 +50,7 @@ reduce_firestacks(0.25) /datum/status_effect/stop_drop_roll/tick(seconds_between_ticks) - if(HAS_TRAIT(owner, TRAIT_IMMOBILIZED) || HAS_TRAIT(owner, TRAIT_INCAPACITATED)) + if((!ignore_immobilize && HAS_TRAIT(owner, TRAIT_IMMOBILIZED)) || HAS_TRAIT(owner, TRAIT_INCAPACITATED)) qdel(src) return diff --git a/code/datums/status_effects/buffs/stun_absorption.dm b/code/datums/status_effects/buffs/stun_absorption.dm index 6481f5284adf..11c45a871a03 100644 --- a/code/datums/status_effects/buffs/stun_absorption.dm +++ b/code/datums/status_effects/buffs/stun_absorption.dm @@ -87,7 +87,7 @@ UnregisterSignal(owner, incapacitation_effect_signals) UnregisterSignal(owner, COMSIG_LIVING_GENERIC_STUN_CHECK) -/datum/status_effect/stun_absorption/get_examine_text() +/datum/status_effect/stun_absorption/get_examine_text(mob/examiner) if(can_absorb_stun()) return replacetext(examine_message, "%EFFECT_OWNER_THEYRE", owner.p_Theyre()) return null // no message if we can't absorb stuns, duh. diff --git a/code/datums/status_effects/cuffed_item.dm b/code/datums/status_effects/cuffed_item.dm index 53ccad34b143..1af826840c28 100644 --- a/code/datums/status_effects/cuffed_item.dm +++ b/code/datums/status_effects/cuffed_item.dm @@ -30,6 +30,8 @@ /datum/status_effect/cuffed_item/on_apply() owner.temporarilyRemoveItemFromInventory(cuffs, force = TRUE) cuffed_to = owner.get_inactive_hand() + // NB: This is the only time we init a link without having any other signal registered + // This can cause issues due do signal registration order where some stuff gets resolved before the link instead of after the link if(isnull(cuffed_to) || !update_link()) owner.put_in_hands(cuffs) qdel(src) @@ -38,12 +40,13 @@ RegisterSignals(cuffed, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED, COMSIG_MOVABLE_MOVED), PROC_REF(check_for_link)) RegisterSignal(cuffed, COMSIG_QDELETING, PROC_REF(cleanup_effect)) RegisterSignal(cuffed, COMSIG_ATOM_UPDATE_APPEARANCE, PROC_REF(on_item_update_appearance)) - RegisterSignal(cuffed, COMSIG_ATOM_EXAMINE, PROC_REF(cuffed_reminder)) + RegisterSignal(cuffed, COMSIG_ATOM_EXAMINE, PROC_REF(cuffed_examine)) RegisterSignal(cuffed, COMSIG_TOPIC, PROC_REF(topic_handler)) RegisterSignal(cuffed, COMSIG_ITEM_GET_STRIPPABLE_ALT_ACTIONS, PROC_REF(get_strippable_action)) RegisterSignal(cuffed, COMSIG_ITEM_STRIPPABLE_ALT_ACTION, PROC_REF(do_strippable_action)) RegisterSignal(cuffed, COMSIG_ITEM_PRE_STORAGE_INSERTION, PROC_REF(block_storage_insert)) RegisterSignal(cuffed, COMSIG_ITEM_PRE_CUFFED_TO_MOB, PROC_REF(block_item_cuff)) + RegisterSignal(cuffed, COMSIG_ITEM_PRE_UNEQUIP, PROC_REF(try_unequip)) RegisterSignals(cuffs, list(COMSIG_ITEM_EQUIPPED, COMSIG_QDELETING, COMSIG_MOVABLE_MOVED), PROC_REF(cleanup_effect)) RegisterSignal(cuffs, COMSIG_ATOM_UPDATE_APPEARANCE, PROC_REF(on_item_update_appearance)) @@ -52,7 +55,7 @@ RegisterSignal(cuffed_to, COMSIG_QDELETING, PROC_REF(cleanup_effect)) RegisterSignal(cuffed_to, COMSIG_BODYPART_REMOVED, PROC_REF(cuffed_to_removed)) - RegisterSignal(owner, COMSIG_ATOM_EXAMINE_MORE, PROC_REF(on_examine_more)) + RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(check_for_link)) owner.log_message("bound [cuffed] to [owner.p_themselves()] with restraints", LOG_GAME) SSblackbox.record_feedback("tally", "cuffed_item", 1, cuffed.type) @@ -64,11 +67,12 @@ UnregisterSignal(cuffed, list( COMSIG_ATOM_EXAMINE, COMSIG_ATOM_UPDATE_APPEARANCE, - COMSIG_ITEM_PRE_CUFFED_TO_MOB, COMSIG_ITEM_DROPPED, COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_GET_STRIPPABLE_ALT_ACTIONS, + COMSIG_ITEM_PRE_CUFFED_TO_MOB, COMSIG_ITEM_PRE_STORAGE_INSERTION, + COMSIG_ITEM_PRE_UNEQUIP, COMSIG_ITEM_STRIPPABLE_ALT_ACTION, COMSIG_MOVABLE_MOVED, COMSIG_QDELETING, @@ -85,8 +89,8 @@ COMSIG_QDELETING, )) UnregisterSignal(owner, list( - COMSIG_ATOM_EXAMINE_MORE, COMSIG_CARBON_POST_ATTACH_LIMB, + COMSIG_MOVABLE_MOVED, )) cuffed = null @@ -102,11 +106,12 @@ break_leash() ///Called when someone examines the owner twice, so they can know if someone has a cuffed item -/datum/status_effect/cuffed_item/proc/on_examine_more(datum/source, mob/user, list/examine_list) - SIGNAL_HANDLER +/datum/status_effect/cuffed_item/get_examine_text(mob/examiner) + var/handcuff_text = cuffs.examine_title(examiner) + if(isliving(examiner) && get_dist(examiner, get_turf(cuffed)) <= 2) + handcuff_text = "[handcuff_text]" - examine_list += span_warning("There's [cuffed.examine_title(user)] bound to [owner.p_their()] \ - [cuffed_to.plaintext_zone] by [cuffs.examine_title(user)].") + return span_notice("There is [cuffed.examine_title(examiner)] bound to [owner.p_their()] [cuffed_to.plaintext_zone] by [handcuff_text].") /// What happens if the limb we're cuffed to is removed? /datum/status_effect/cuffed_item/proc/cuffed_to_removed(datum/source, mob/living/carbon/owner, special) @@ -134,6 +139,15 @@ RegisterSignal(cuffed_to, COMSIG_BODYPART_REMOVED, PROC_REF(cuffed_to_removed)) UnregisterSignal(owner, COMSIG_CARBON_POST_ATTACH_LIMB) +/// Hooking doUnEquip to stop all forms of unequipping the item to an inappropriate location (such as in another object's contents) +/datum/status_effect/cuffed_item/proc/try_unequip(datum/source, force, atom/newloc, no_move, invdrop, silent) + SIGNAL_HANDLER + // moving to turf is fine, that's just dropping + // moving to mob is also fine, that's just picking up or pocketing + // but moving to an object will almost always be a disaster so prevent it + // of course, stuff like forceMove will override this - but update_link() acts as a failsafe to break the link + return (!force && isobj(newloc)) ? COMPONENT_ITEM_BLOCK_UNEQUIP : NONE + /// Check if we need to spawn the tether effect or not /datum/status_effect/cuffed_item/proc/check_for_link(...) SIGNAL_HANDLER @@ -149,37 +163,44 @@ // when on the ground, init a tether between item <-> owner if(isturf(cuffed.loc)) - return init_leash(cuffed) + if(cuffed.anchored || cuffed.move_resist > owner.move_force) + return init_leash(cuffed, owner) + return init_leash(owner, cuffed) // when being picked up by something else, init a tether between grabber <-> owner if(ismovable(cuffed.loc) && isturf(cuffed.loc.loc)) - return init_leash(cuffed.loc) + var/atom/movable/leash_to = cuffed.loc + if(leash_to.anchored || leash_to.move_resist > owner.move_force) + return init_leash(leash_to, owner) + return init_leash(owner, leash_to) // we have no idea where it is... return FALSE /// Inits the leash and beam effect to the given target, cleaning up old ones if necessary -/datum/status_effect/cuffed_item/proc/init_leash(atom/movable/leash_to) - if(link_effect) +/// Return TRUE if the leash was successfully applied or did not need to be applied, FALSE if it failed to apply +/datum/status_effect/cuffed_item/proc/init_leash(atom/movable/leash_from, atom/movable/leash_to) + if(!isnull(link_effect)) if(link_effect.parent == leash_to) return TRUE break_leash() - link_effect = leash_to.AddComponentFrom(REF(src), /datum/component/chained_together, chained_to = owner) + link_effect = leash_to.AddComponentFrom(REF(src), /datum/component/chained_together, chained_to = leash_from) if(!QDELETED(link_effect)) - return TRUE + return TRUE // successful application // chain component failed to apply if(ismob(leash_to)) var/mob/leash_to_mob = leash_to addtimer(CALLBACK(src, PROC_REF(eject_item), leash_to_mob), 1) - return TRUE + return TRUE // we're returning true despite failing because we have unique fail behavior return FALSE /datum/status_effect/cuffed_item/proc/break_leash() - link_effect?.parent.RemoveComponentSource(REF(src), /datum/component/chained_together) - if(QDELETED(link_effect)) + if(!isnull(link_effect)) + UnregisterSignal(link_effect.parent, COMSIG_MOVABLE_SET_ANCHORED) + link_effect.parent.RemoveComponentSource(REF(src), /datum/component/chained_together) link_effect = null return TRUE @@ -211,17 +232,20 @@ qdel(src) ///Tell the player that the item is stuck to their hands someway. Also another way to trigger the try_remove_cuffs proc. -/datum/status_effect/cuffed_item/proc/cuffed_reminder(obj/item/item, mob/user, list/examine_texts) +/datum/status_effect/cuffed_item/proc/cuffed_examine(obj/item/item, mob/user, list/examine_texts) SIGNAL_HANDLER - if(user == owner) - examine_texts += span_notice("[item.p_Theyre()] cuffed to you by \a [cuffs]. You can remove them.") + var/cuff_text = cuffs.examine_title(user) + if(isliving(user) && get_dist(user, get_turf(cuffed)) <= CARBON_EXAMINE_EMBEDDING_MAX_DIST + 1) + cuff_text = "[cuff_text]" + + examine_texts += span_notice("[item.p_Theyre()] cuffed to [user == owner ? "your" : "[owner]'s"] [cuffed_to.plaintext_zone] by [cuff_text].") /// This mainly exists as a fallback in the rare case the alert icon is not reachable (too many alerts?). You should be somewhat able to examine items while blind so all good. /datum/status_effect/cuffed_item/proc/topic_handler(atom/source, user, href_list) SIGNAL_HANDLER - if(user == owner && href_list["remove_cuffs_item"]) + if(href_list["remove_cuffs_item"]) INVOKE_ASYNC(src, PROC_REF(try_remove_cuffs), user) /datum/status_effect/cuffed_item/proc/get_strippable_action(obj/item/source, atom/owner, mob/user, list/alt_actions) @@ -245,21 +269,41 @@ if(LAZYACCESS(user.do_afters, interaction_key)) return FALSE - if(!(user.mobility_flags & MOBILITY_USE) || (user != owner && !owner.IsReachableBy(user))) + if(!(user.mobility_flags & MOBILITY_USE)) owner.balloon_alert(user, "can't do it right now!") return FALSE - if(user != owner) - owner.visible_message(span_notice("[user] tries to remove [cuffs] binding [cuffed] to [owner]"), span_warning("[user] is trying to remove [cuffs] binding [cuffed] to you.")) + if(!cuffed.IsReachableBy(user)) + owner.balloon_alert(user, "can't reach [cuffed]!") + return FALSE + + if(user == owner) + owner.visible_message( + span_notice("[user] tries to remove [cuffs] binding [cuffed] to [owner.p_themselves()]"), + span_notice("You try to remove [cuffs] binding [cuffed] to yourself..."), + ) + else + owner.visible_message( + span_notice("[user] tries to remove [cuffs] binding [cuffed] to [owner]..."), + span_warning("[user] tries to remove [cuffs] binding [cuffed] to you..."), + ) owner.balloon_alert(user, "removing cuffs...") playsound(owner, cuffs.cuffsound, 30, TRUE, -2) - if(!do_after(user, cuffs.get_handcuff_time(user) * 1.5, owner, interaction_key = interaction_key) || QDELETED(src)) + if(!do_after(user, cuffs.get_handcuff_time(user) * 1.5 * (owner == user ? 1 : 2), owner, interaction_key = interaction_key) || QDELETED(src)) owner.balloon_alert(user, "interrupted!") return FALSE - if(user != owner) - owner.visible_message(span_notice("[user] removes [cuffs] binding [cuffed] to [owner]"), span_warning("[user] removes [cuffs] binding [cuffed] to you.")) + if(user == owner) + owner.visible_message( + span_notice("[user] removes [cuffs] binding [cuffed] to [owner.p_themselves()]."), + span_notice("You remove [cuffs] binding [cuffed] to yourself."), + ) + else + owner.visible_message( + span_notice("[user] removes [cuffs] binding [cuffed] to [owner]."), + span_warning("[user] removes [cuffs] binding [cuffed] to you."), + ) log_combat(user, owner, "removed restraints binding [cuffed] to") @@ -329,25 +373,48 @@ RegisterSignal(beam_effect, COMSIG_QDELETING, PROC_REF(recreate_beam)) /datum/component/chained_together/Destroy() - UnregisterSignal(beam_effect, COMSIG_QDELETING) - UnregisterSignal(link_effect, COMSIG_QDELETING) - UnregisterSignal(tug_effect, COMSIG_QDELETING) + if(!isnull(beam_effect)) + UnregisterSignal(beam_effect, COMSIG_QDELETING) + if(!isnull(link_effect)) + UnregisterSignal(link_effect, COMSIG_QDELETING) + if(!isnull(tug_effect)) + UnregisterSignal(tug_effect, COMSIG_QDELETING) if(!QDELETED(link_effect)) - QDEL_NULL(link_effect) + qdel(link_effect) if(!QDELETED(tug_effect)) - QDEL_NULL(tug_effect) + qdel(tug_effect) if(!QDELETED(beam_effect)) - QDEL_NULL(beam_effect) + qdel(beam_effect) + + beam_effect = null + link_effect = null + tug_effect = null return ..() -/datum/component/chained_together/proc/recreate_beam(datum/beam/source) +/datum/component/chained_together/proc/recreate_beam(...) SIGNAL_HANDLER - UnregisterSignal(beam_effect, COMSIG_QDELETING) + if(!isnull(beam_effect)) + UnregisterSignal(beam_effect, COMSIG_QDELETING) + beam_effect = null + var/atom/movable/movable_parent = parent + if(!isturf(movable_parent.loc)) + RegisterSignal(movable_parent, COMSIG_MOVABLE_MOVED, PROC_REF(check_for_recreate_beam), override = TRUE) + return + beam_effect = movable_parent.Beam(chained_to_weakref.resolve(), "chain", animate = FALSE) RegisterSignal(beam_effect, COMSIG_QDELETING, PROC_REF(recreate_beam)) +/datum/component/chained_together/proc/check_for_recreate_beam(atom/movable/source, atom/movable/moved_atom, ...) + SIGNAL_HANDLER + + var/atom/movable/movable_parent = parent + if(!isturf(movable_parent.loc)) + return + recreate_beam() + UnregisterSignal(movable_parent, COMSIG_MOVABLE_MOVED) + /datum/component/chained_together/proc/delete_self(datum/source) SIGNAL_HANDLER qdel(src) diff --git a/code/datums/status_effects/death_sound.dm b/code/datums/status_effects/death_sound.dm index b71c070729a5..ea369e48d177 100644 --- a/code/datums/status_effects/death_sound.dm +++ b/code/datums/status_effects/death_sound.dm @@ -22,25 +22,3 @@ /datum/status_effect/death_sound/on_remove() UnregisterSignal(owner, COMSIG_LIVING_DEATH) - - -/datum/status_effect/replace_death_sound - id = "replace_death_sound" - tick_interval = -1 - alert_type = null - status_type = STATUS_EFFECT_REPLACE - var/death_sound - var/old_death_sound - -/datum/status_effect/replace_death_sound/on_creation(mob/living/new_owner, duration, death_sound) - src.duration = duration - src.death_sound = death_sound - return ..() - -/datum/status_effect/replace_death_sound/on_apply() - old_death_sound = owner.death_sound - owner.death_sound = death_sound - return TRUE - -/datum/status_effect/replace_death_sound/on_remove() - owner.death_sound = old_death_sound diff --git a/code/datums/status_effects/debuffs/choke.dm b/code/datums/status_effects/debuffs/choke.dm index ec9f85afbec7..7619a018817d 100644 --- a/code/datums/status_effects/debuffs/choke.dm +++ b/code/datums/status_effects/debuffs/choke.dm @@ -121,7 +121,7 @@ var/atom/target = get_edge_target_turf(source, source.dir) choking_on.throw_at(target, distance, 1, source) -/datum/status_effect/choke/get_examine_text() +/datum/status_effect/choke/get_examine_text(mob/examiner) return span_boldwarning("[owner.p_They()] [owner.p_are()] choking!") /datum/status_effect/choke/proc/remove_choke(datum/source) diff --git a/code/datums/status_effects/debuffs/debuffs.dm b/code/datums/status_effects/debuffs/debuffs.dm index bd678954f3b4..b12dfb54e5ae 100644 --- a/code/datums/status_effects/debuffs/debuffs.dm +++ b/code/datums/status_effects/debuffs/debuffs.dm @@ -268,7 +268,7 @@ GLOBAL_LIST_EMPTY(unconscious_appearances) sleep_quality = -0.2 var/turf/rest_turf = get_turf(owner) - var/is_sleeping_in_darkness = rest_turf.get_lumcount() <= LIGHTING_TILE_IS_DARK + var/is_sleeping_in_darkness = !rest_turf.check_lumcount_above(LIGHTING_TILE_IS_DARK) // sleeping with a blindfold or in the dark helps us rest if(owner.is_blind_from(EYES_COVERED) || is_sleeping_in_darkness) @@ -583,7 +583,7 @@ GLOBAL_LIST_EMPTY(unconscious_appearances) if(prob(10)) owner.emote(pick("gasp", "gag", "choke")) -/datum/status_effect/neck_slice/get_examine_text() +/datum/status_effect/neck_slice/get_examine_text(mob/examiner) return span_warning("[owner.p_Their()] neck is cut and is bleeding profusely!") /// Applies a curse with various possible effects @@ -724,7 +724,7 @@ GLOBAL_LIST_EMPTY(unconscious_appearances) owner.remove_client_colour(REF(src)) to_chat(owner, span_warning("You snap out of your trance!")) -/datum/status_effect/trance/get_examine_text() +/datum/status_effect/trance/get_examine_text(mob/examiner) return span_warning("[owner.p_They()] seem[owner.p_s()] slow and unfocused.") /datum/status_effect/trance/proc/hypnotize(datum/source, list/hearing_args) @@ -1014,7 +1014,7 @@ GLOBAL_LIST_EMPTY(unconscious_appearances) if(owner.remove_status_effect(/datum/status_effect/ants)) return COMPONENT_CLEANED|COMPONENT_CLEANED_GAIN_XP -/datum/status_effect/ants/get_examine_text() +/datum/status_effect/ants/get_examine_text(mob/examiner) return span_warning("[owner.p_They()] [owner.p_are()] covered in ants!") /datum/status_effect/ants/tick(seconds_between_ticks) diff --git a/code/datums/status_effects/debuffs/decloning.dm b/code/datums/status_effects/debuffs/decloning.dm index ea87b08dcc95..77e2540d9be9 100644 --- a/code/datums/status_effects/debuffs/decloning.dm +++ b/code/datums/status_effects/debuffs/decloning.dm @@ -65,7 +65,7 @@ owner.dust() return -/datum/status_effect/decloning/get_examine_text() +/datum/status_effect/decloning/get_examine_text(mob/examiner) switch(strikes_left) if(68 to 100) return span_warning("[owner.p_Their()] body looks a bit deformed.") diff --git a/code/datums/status_effects/debuffs/drunk.dm b/code/datums/status_effects/debuffs/drunk.dm index 95333a5508fd..d1ce987db95a 100644 --- a/code/datums/status_effects/debuffs/drunk.dm +++ b/code/datums/status_effects/debuffs/drunk.dm @@ -20,7 +20,7 @@ . = ..() set_drunk_value(drunk_value) -/datum/status_effect/inebriated/get_examine_text() +/datum/status_effect/inebriated/get_examine_text(mob/examiner) // Dead people don't look drunk if(IS_DEAD_OR_FAKING(owner)) return null diff --git a/code/datums/status_effects/debuffs/fire_stacks.dm b/code/datums/status_effects/debuffs/fire_stacks.dm index 07df99eeb2b7..9f2f94622677 100644 --- a/code/datums/status_effects/debuffs/fire_stacks.dm +++ b/code/datums/status_effects/debuffs/fire_stacks.dm @@ -140,7 +140,7 @@ /// Cached particle type var/cached_state -/datum/status_effect/fire_handler/fire_stacks/get_examine_text() +/datum/status_effect/fire_handler/fire_stacks/get_examine_text(mob/examiner) if(owner.on_fire) return @@ -174,7 +174,7 @@ if(!on_fire) return TRUE - var/decay_multiplier = HAS_TRAIT(owner, TRAIT_HUSK) ? 2 : 1 // husks decay twice as fast + var/decay_multiplier = HAS_TRAIT_NOT_FROM(owner, TRAIT_HUSK, /datum/status_effect/zombie::id) ? 2 : 1 // husks decay twice as fast adjust_stacks(owner.fire_stack_decay_rate * decay_multiplier * seconds_between_ticks) SEND_SIGNAL(owner, COMSIG_FIRE_STACKS_UPDATED, stacks) @@ -338,7 +338,7 @@ QDEL_NULL(slipperiness) REMOVE_TRAIT(owner, TRAIT_NO_SLIP_WATER, TRAIT_STATUS_EFFECT(id)) -/datum/status_effect/fire_handler/wet_stacks/get_examine_text() +/datum/status_effect/fire_handler/wet_stacks/get_examine_text(mob/examiner) return "[owner.p_They()] look[owner.p_s()] a little soaked." /datum/status_effect/fire_handler/wet_stacks/tick(seconds_between_ticks) diff --git a/code/datums/status_effects/debuffs/firewall.dm b/code/datums/status_effects/debuffs/firewall.dm new file mode 100644 index 000000000000..68c242e8c70f --- /dev/null +++ b/code/datums/status_effects/debuffs/firewall.dm @@ -0,0 +1,21 @@ +/datum/status_effect/firewalled + id = "firewalled" + duration = 30 SECONDS + tick_interval = STATUS_EFFECT_NO_TICK + alert_type = /atom/movable/screen/alert/status_effect/firewall + show_duration = TRUE + processing_speed = STATUS_EFFECT_PRIORITY + status_type = STATUS_EFFECT_REFRESH + +/datum/status_effect/firewalled/on_creation(mob/living/new_owner, set_duration = 30 SECONDS) + src.duration = set_duration + return ..() + +/datum/status_effect/firewalled/refresh(effect, set_duration = 30 SECONDS) + src.duration = max(src.duration, set_duration) + +/atom/movable/screen/alert/status_effect/firewall + name = "Firewalled" + desc = "Recent changes to your core lawset have restricted your actions." + use_user_hud_icon = USER_HUD_STYLE_INHERIT + overlay_state = "hazard_area" diff --git a/code/datums/status_effects/debuffs/heart_attack.dm b/code/datums/status_effects/debuffs/heart_attack.dm index 8af204518e7f..b0cbca707dbe 100644 --- a/code/datums/status_effects/debuffs/heart_attack.dm +++ b/code/datums/status_effects/debuffs/heart_attack.dm @@ -121,7 +121,7 @@ time_until_stoppage-- -/datum/status_effect/heart_attack/get_examine_text() +/datum/status_effect/heart_attack/get_examine_text(mob/examiner) if(!time_until_stoppage <= ATTACK_STAGE_THREE) return var/mob/living/carbon/human/human_owner = owner diff --git a/code/datums/status_effects/debuffs/jitteriness.dm b/code/datums/status_effects/debuffs/jitteriness.dm index 50bb8b5e09f4..ee5db2e87b2c 100644 --- a/code/datums/status_effects/debuffs/jitteriness.dm +++ b/code/datums/status_effects/debuffs/jitteriness.dm @@ -24,7 +24,7 @@ owner.clear_mood_event(id) owner.update_offsets() -/datum/status_effect/jitter/get_examine_text() +/datum/status_effect/jitter/get_examine_text(mob/examiner) switch(duration) if(5 MINUTES to INFINITY) return span_boldwarning("[owner.p_They()] [owner.p_are()] convulsing violently!") diff --git a/code/datums/status_effects/debuffs/slime/slimed.dm b/code/datums/status_effects/debuffs/slime/slimed.dm index 30ee56a5a074..50e2a050bd8a 100644 --- a/code/datums/status_effects/debuffs/slime/slimed.dm +++ b/code/datums/status_effects/debuffs/slime/slimed.dm @@ -111,7 +111,7 @@ )) to_chat(owner, span_userdanger("[feedback_text] as the layer of slime eats away at you!")) -/datum/status_effect/slimed/get_examine_text() +/datum/status_effect/slimed/get_examine_text(mob/examiner) return span_warning("[owner.p_They()] [owner.p_are()] covered in bubbling slime!") #undef MIN_HEALTH diff --git a/code/datums/status_effects/debuffs/strandling.dm b/code/datums/status_effects/debuffs/strandling.dm index d37961c13c90..30f5e70276c3 100644 --- a/code/datums/status_effects/debuffs/strandling.dm +++ b/code/datums/status_effects/debuffs/strandling.dm @@ -18,7 +18,7 @@ /datum/status_effect/strandling/on_remove() UnregisterSignal(owner, list(COMSIG_CARBON_PRE_BREATHE, COMSIG_ATOM_TOOL_ACT(TOOL_WIRECUTTER), COMSIG_CARBON_PRE_MISC_HELP)) -/datum/status_effect/strandling/get_examine_text() +/datum/status_effect/strandling/get_examine_text(mob/examiner) return span_warning("[owner.p_They()] seem[owner.p_s()] to be being choked by some durathread strands. You may be able to cut them off.") /// Signal proc for [COMSIG_CARBON_PRE_BREATHE], causes losebreath whenever we're trying to breathe diff --git a/code/datums/status_effects/debuffs/temperature_over_time.dm b/code/datums/status_effects/debuffs/temperature_over_time.dm index cb1a73cc2ae5..5a14b47617d2 100644 --- a/code/datums/status_effects/debuffs/temperature_over_time.dm +++ b/code/datums/status_effects/debuffs/temperature_over_time.dm @@ -43,7 +43,7 @@ /datum/status_effect/temperature_over_time/on_remove() return ..() -/datum/status_effect/temperature_over_time/get_examine_text() +/datum/status_effect/temperature_over_time/get_examine_text(mob/examiner) if(temperature_value > 0) return "[owner.p_They()] [owner.p_are()] sweating bullets!" diff --git a/code/datums/status_effects/drug_effects.dm b/code/datums/status_effects/drug_effects.dm index 27973b147979..8f42e5ad9ac4 100644 --- a/code/datums/status_effects/drug_effects.dm +++ b/code/datums/status_effects/drug_effects.dm @@ -98,3 +98,61 @@ name = "Stoned" desc = "Cannabis is impairing your speed, motor skills, and mental cognition." icon_state = "stoned" + +/// The amount taken away from saline's blood volume multiplier per second, from its base of 5x. +#define SALINE_GLUCOSE_STACK_DILUTION 0.02 + +/// Status effect that determines the mob's current saline blood replacement effect. The effect begins at 5 blood per 1 saline and gradually decreases to 1 over the course of ~3 1/2 minutes. +/datum/status_effect/stacking/saline_glucose_dilution + id = "saline_dilution" + alert_type = /atom/movable/screen/alert/status_effect/saline_dilution + + stacks = 1 + max_stacks = 4 / SALINE_GLUCOSE_STACK_DILUTION + consumed_on_threshold = FALSE + +/datum/status_effect/stacking/saline_glucose_dilution/on_creation(mob/living/new_owner, stacks_to_apply) + . = ..() + var/blood_type = new_owner.get_bloodtype() + if(istype(blood_type, /datum/blood_type/human) || istype(blood_type, /datum/blood_type/animal)) + return + if(istype(blood_type, /datum/blood_type/lizard)) + linked_alert.name = "Green blood cell deficiency" + return + if(istype(blood_type, /datum/blood_type/clown)) + linked_alert.name = "Potassium deficiency" + return + if(istype(blood_type, /datum/blood_type/ethereal)) + linked_alert.name = "Low specific conductance" + return + if(istype(blood_type, /datum/blood_type/xeno)) + linked_alert.name = "Alkalosis" + +/datum/status_effect/stacking/saline_glucose_dilution/tick(seconds_between_ticks) + if(owner.has_reagent(/datum/reagent/medicine/salglu_solution)) + if(owner.stat != DEAD) + add_stacks(seconds_between_ticks) + linked_alert.desc = initial(linked_alert.desc) + return + linked_alert.desc = "Saline-Glucose Solution was supporting your bloodstream, and you are now recovering." + return ..() // Parent is stack decay, only decay while blood is pure + +/datum/status_effect/stacking/saline_glucose_dilution/can_have_status() + return (stacks > 0) + +/datum/status_effect/stacking/saline_glucose_dilution/add_stacks(stacks_added) + . = ..() + if(!linked_alert) + return + linked_alert.maptext = MAPTEXT_TINY_UNICODE("[round(100 - (stacks / max_stacks * 80), 1)]%") + +/// returns a number 1 - 5 that represents how many units of blood one unit of saline is worth within the mob's bloodstream. +/datum/status_effect/stacking/saline_glucose_dilution/proc/get_blood_multiplier() + return max(5 - (stacks * SALINE_GLUCOSE_STACK_DILUTION), 0) + +#undef SALINE_GLUCOSE_STACK_DILUTION + +/atom/movable/screen/alert/status_effect/saline_dilution + name = "Red blood cell deficiency" + desc = "Saline-Glucose Solution is supporting your bloodstream, but it is losing its effectiveness over time." + icon_state = "saline_dilution" diff --git a/code/datums/status_effects/replace_sound.dm b/code/datums/status_effects/replace_sound.dm new file mode 100644 index 000000000000..74c9c819861a --- /dev/null +++ b/code/datums/status_effects/replace_sound.dm @@ -0,0 +1,29 @@ +///A status effect that temporarily replaces the sound of an emote with another +/datum/status_effect/replace_sound + id = "replace_sound" + tick_interval = -1 + alert_type = null + status_type = STATUS_EFFECT_MULTIPLE + var/list/emote_key_to_sound + /// priority of the sound, see [signals_mob_living.dm] under COMSIG_LIVING_GET_EMOTE_SOUND + var/priority + +/datum/status_effect/replace_sound/on_creation(mob/living/new_owner, duration, list/emote_key_to_sound, priority = EMOTE_SOUND_STATUS_EFFECT) + src.duration = duration + src.emote_key_to_sound = emote_key_to_sound.Copy() + src.priority = priority + return ..() + +/datum/status_effect/replace_sound/on_apply() + for(var/key in emote_key_to_sound) + RegisterSignal(owner, COMSIG_MOB_EMOTE_SOUND(key), PROC_REF(on_emote)) + return TRUE + +/datum/status_effect/replace_sound/proc/on_emote(datum/source, key, list/sounds) + SIGNAL_HANDLER + var/sound_override = get_emote_sound_from_list(emote_key_to_sound[key], source) + sounds[sound_override] = priority + +/datum/status_effect/replace_sound/on_remove() + for(var/key in emote_key_to_sound) + UnregisterSignal(owner, COMSIG_MOB_EMOTE_SOUND(key)) diff --git a/code/datums/status_effects/song_effects.dm b/code/datums/status_effects/song_effects.dm index 4bb3ffa98871..a326217b5767 100644 --- a/code/datums/status_effects/song_effects.dm +++ b/code/datums/status_effects/song_effects.dm @@ -32,7 +32,7 @@ REMOVE_TRAIT(owner, TRAIT_ANTIMAGIC, TRAIT_STATUS_EFFECT(id)) return ..() -/datum/status_effect/song/antimagic/get_examine_text() +/datum/status_effect/song/antimagic/get_examine_text(mob/examiner) return span_notice("[owner.p_They()] seem[owner.p_s()] to be covered in a dull, grey aura.") /datum/status_effect/song/light @@ -51,5 +51,5 @@ /datum/status_effect/song/light/on_remove() QDEL_NULL(mob_light_obj) -/datum/status_effect/song/light_song/get_examine_text() +/datum/status_effect/song/light_song/get_examine_text(mob/examiner) return span_notice("[owner.p_They()] seem[owner.p_s()] to be covered in a glowing aura.") diff --git a/code/datums/storage/subtypes/belts.dm b/code/datums/storage/subtypes/belts.dm index 70acb7af3a12..43d7cc7859b0 100644 --- a/code/datums/storage/subtypes/belts.dm +++ b/code/datums/storage/subtypes/belts.dm @@ -156,6 +156,7 @@ /obj/item/wrench, /obj/item/wormhole_jaunter, /obj/item/skeleton_key, + /obj/item/crusher_trophy, )) ///Primitive mining belt diff --git a/code/datums/verb_metadata.dm b/code/datums/verb_metadata.dm index f0b0f72bd016..d08ed8315c91 100644 --- a/code/datums/verb_metadata.dm +++ b/code/datums/verb_metadata.dm @@ -4,9 +4,153 @@ var/category var/verb_path var/body_path + var/list/arguments = list() /datum/verb_metadata/proc/assign_to(target) add_verb(target, verb_path) /datum/verb_metadata/proc/unassign_from(target) remove_verb(target, verb_path) + +/datum/verb_arg_metadata + var/name + var/arg_type + var/type_path + var/source + var/list/options + +/datum/verb_arg_metadata/proc/prompt(client/user, verb_name) + if(source == VERB_ARG_SOURCE_LIST && length(options)) + return tgui_input_list(user, name, verb_name, options) + if(arg_type & VERB_ARG_TYPE_NUM) + return tgui_input_number(user, name, verb_name) + if(arg_type & VERB_ARG_TYPE_TEXT) + return tgui_input_text(user, name, verb_name) + if(arg_type & VERB_ARG_TYPE_MESSAGE) + return tgui_input_text(user, name, verb_name, multiline = TRUE) + if(arg_type & VERB_ARG_TYPE_SOUND) + return input(user, name, verb_name) as null|sound + if(arg_type & VERB_ARG_TYPE_TYPEPATH) + if(!type_path) + return "" + return input(user, name, verb_name) as null|anything in typesof(type_path) + var/list/targets = get_targets(user) + if(length(targets)) + return tgui_input_list(user, name, verb_name, sort_names(targets)) + return null + +/proc/____collect_verb_args(client/user, verb_name, list/arguments, list/positional_args) + var/list/structured_args = list() + + var/context_target + if(length(positional_args) && (VERB_ARG_CONTEXT_TARGET_KEY in positional_args)) + context_target = positional_args[VERB_ARG_CONTEXT_TARGET_KEY] + positional_args -= VERB_ARG_CONTEXT_TARGET_KEY + + if(length(positional_args) && length(arguments)) + if(istype(positional_args, /alist)) + for(var/datum/verb_arg_metadata/arg in arguments) + if(!isnull(positional_args[arg.name])) + structured_args[arg.name] = positional_args[arg.name] + else + for(var/i in 1 to min(length(positional_args), length(arguments))) + var/datum/verb_arg_metadata/arg = arguments[i] + structured_args[arg.name] = positional_args[i] + + if(!isnull(context_target) && length(arguments)) + for(var/datum/verb_arg_metadata/arg in arguments) + if(isnull(structured_args[arg.name]) && (arg.source == VERB_ARG_SOURCE_WORLD || arg.source == VERB_ARG_SOURCE_VIEW)) + structured_args[arg.name] = context_target + break + + for(var/datum/verb_arg_metadata/arg in arguments) + if(!isnull(structured_args[arg.name])) + continue + var/value = arg.prompt(user, verb_name) + if(isnull(value)) + return null + structured_args[arg.name] = value + return structured_args + +/datum/verb_arg_metadata/New(name, arg_type, type_path, source, list/options) + src.name = name + src.arg_type = arg_type + src.type_path = type_path + src.source = source + src.options = options + +/datum/verb_arg_metadata/proc/get_targets(client/viewer) + switch(source) + if(VERB_ARG_SOURCE_WORLD) + return get_world_targets(viewer) + if(VERB_ARG_SOURCE_VIEW) + return get_view_targets(viewer) + return list() + +/datum/verb_arg_metadata/proc/get_world_targets(client/viewer) + if(arg_type & VERB_ARG_TYPE_MOB) + return GLOB.mob_list + if(arg_type & VERB_ARG_TYPE_AREA) + return get_sorted_areas() + if(arg_type & VERB_ARG_TYPE_TURF) + var/list/turfs = list() + if(viewer.mob) + var/turf/admin_turf = get_turf(viewer.mob) + if(admin_turf) + turfs += admin_turf + for(var/mob/player in GLOB.player_list) + var/turf/player_turf = get_turf(player) + if(player_turf) + turfs |= player_turf + return turfs + if(arg_type & (VERB_ARG_TYPE_OBJ | VERB_ARG_TYPE_DATUM | VERB_ARG_TYPE_ATOM)) + if(viewer.mob) + return view(viewer.view, viewer.mob) + return list() + +/datum/verb_arg_metadata/proc/get_view_targets(client/viewer) + if(!viewer.mob) + return list() + var/list/visible = view(viewer.view, viewer.mob) + if(arg_type & VERB_ARG_TYPE_MOB) + var/list/mobs = list() + for(var/mob/target in visible) + mobs += target + return mobs + if(arg_type & VERB_ARG_TYPE_OBJ) + var/list/objs = list() + for(var/obj/target in visible) + objs += target + return objs + if(arg_type & VERB_ARG_TYPE_TURF) + var/list/turfs = list() + for(var/turf/target in visible) + turfs += target + return turfs + return visible + +GLOBAL_LIST_INIT(____pending_verb_args, list()) + +/proc/____register_verb_arg(owner_type, proc_path, arg_name, arg_type, arg_type_path, arg_source) + var/verb_key + if(ispath(owner_type, /datum/admin_verb)) + verb_key = owner_type + else + verb_key = proc_path + + if(!GLOB.____pending_verb_args[verb_key]) + GLOB.____pending_verb_args[verb_key] = list() + GLOB.____pending_verb_args[verb_key] += list(new /datum/verb_arg_metadata(arg_name, arg_type, arg_type_path, arg_source)) + return TRUE + +/proc/____register_verb_arg_list(owner_type, proc_path, arg_name, list/options) + var/verb_key + if(ispath(owner_type, /datum/admin_verb)) + verb_key = owner_type + else + verb_key = proc_path + + if(!GLOB.____pending_verb_args[verb_key]) + GLOB.____pending_verb_args[verb_key] = list() + GLOB.____pending_verb_args[verb_key] += list(new /datum/verb_arg_metadata(arg_name, VERB_ARG_TYPE_TEXT, null, VERB_ARG_SOURCE_LIST, options)) + return TRUE diff --git a/code/game/atom/atom_color.dm b/code/game/atom/atom_color.dm index b042624d2644..f79f5c88fbc7 100644 --- a/code/game/atom/atom_color.dm +++ b/code/game/atom/atom_color.dm @@ -120,14 +120,20 @@ /// Same as update_atom_color, but simplifies overlay coloring /atom/proc/color_atom_overlay(mutable_appearance/overlay) - overlay.color = color - if (!cached_color_filter) + var/list/color_filter = cached_color_filter + if(islist(color)) + overlay.color = null + color_filter ||= color_matrix_filter(color_to_full_rgba_matrix(color), FILTER_COLOR_RGB) + else + overlay.color = color + + if(!color_filter) return overlay // Apply the atom's color filter to the overlay using named filters so that // later calls to add_filter/update_filters (e.g., height displacement filters) // do not wipe out our coloration. Mirror prior behavior by propagating to // child overlays unless KEEP_TOGETHER is present. - overlay.add_filter(ATOM_PRIORITY_COLOR_FILTER, ATOM_PRIORITY_COLOR_FILTER_PRIORITY, cached_color_filter) + overlay.add_filter(ATOM_PRIORITY_COLOR_FILTER, ATOM_PRIORITY_COLOR_FILTER_PRIORITY, color_filter) if(!(overlay.appearance_flags & KEEP_TOGETHER)) // Recursively ensure any nested overlays/underlays also get the color filter diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 1dd0cb070461..af59ab9a6a9d 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -417,8 +417,9 @@ return TRUE /// Returns a list of movables that should also be affected when src moves through zlevels, and src. -/atom/movable/proc/get_z_move_affected(z_move_flags) - . = list(src) +/atom/movable/proc/get_z_move_affected(z_move_flags, list/returning_list = list()) + . = returning_list + . |= src if(buckled_mobs) . |= buckled_mobs if(!(z_move_flags & ZMOVE_INCLUDE_PULLED)) @@ -426,15 +427,11 @@ for(var/mob/living/buckled as anything in buckled_mobs) if(buckled.pulling) . |= buckled.pulling - if(pulling) - . |= pulling - if (pulling.buckled_mobs) - . |= pulling.buckled_mobs - - //makes conga lines work with ladders and flying up and down; checks if the guy you are pulling is pulling someone, - //then uses recursion to run the same function again - if (pulling.pulling) - . |= pulling.pulling.get_z_move_affected(z_move_flags) + //makes conga lines work with ladders and flying up and down; checks if the guy you are pulling is pulling someone, + //then uses recursion to run the same function again + //we pass in the list from this proc to ensure we dont reach an infinite loop due to mobs grabbed in a loop or two mobs grabing eachother. + if(pulling && !(pulling in .)) + . |= pulling.get_z_move_affected(z_move_flags, .) /** * Checks if the destination turf is elegible for z movement from the start turf to a given direction and returns it if so. diff --git a/code/game/machinery/ai_core/_core.dm b/code/game/machinery/ai_core/_core.dm index 9de9b36be582..4b39bc993092 100644 --- a/code/game/machinery/ai_core/_core.dm +++ b/code/game/machinery/ai_core/_core.dm @@ -148,15 +148,17 @@ return TRUE if(!active) return FALSE - var/turf/T = get_turf(src) - var/area/A = get_area(src) - if(!(A.area_flags & BLOBS_ALLOWED)) + var/turf/ai_turf = get_turf(src) + var/area/ai_area = get_area(src) + if(!(ai_area.area_flags & BLOBS_ALLOWED)) return FALSE - if(!A.power_equip) + if(!ai_area.power_equip) return FALSE - if(!SSmapping.level_trait(T.z,ZTRAIT_STATION)) + if(!SSmapping.level_trait(ai_turf.z, ZTRAIT_STATION)) return FALSE - if(!isfloorturf(T)) + if(!isfloorturf(ai_turf)) + if(locate(/obj/structure/transport/linear) in ai_turf.contents) // carveout for maps that have the AI core on a lift platform. + return TRUE return FALSE return TRUE diff --git a/code/game/machinery/ai_core/law.dm b/code/game/machinery/ai_core/law.dm index 99d68227f4b1..4a8663542ac1 100644 --- a/code/game/machinery/ai_core/law.dm +++ b/code/game/machinery/ai_core/law.dm @@ -537,7 +537,9 @@ // Don't add this one if we're replacing a random law later if(!core_sub_ion && prob(base_ion_prob)) core.set_ioned(TRUE) - core.laws.Insert(1, ion_message || generate_ion_law()) + var/final_ion_message = ion_message || generate_ion_law() + core.laws.Insert(1, final_ion_message) + core.laws[final_ion_message] = TRUE ion_message = null log_law_change(null, "ion added law to [src] ([log_status()], text: \"[core.laws[1]]\")") ions_added++ @@ -551,12 +553,14 @@ // For supplied laws: Chance the entire supplied law is replaced with a new ion law. // If we had no core law and thus added no ion law, this is guaranteed to replace the first supplied law if(ions_added < ion_limit && (ion_message || (law == core && core_sub_ion) || prob(sub_ion_prob))) - var/picked_law = length(law.laws) <= 1 ? 1 : rand(2, length(law.laws)) - var/replaced_law = law.laws[picked_law] + var/picked_law_index = length(law.laws) <= 1 ? 1 : rand(2, length(law.laws)) + var/replaced_law = law.laws[picked_law_index] + var/final_ion_message = ion_message || generate_ion_law() law.set_ioned(TRUE) - law.laws[picked_law] = ion_message || generate_ion_law() + law.laws[picked_law_index] = final_ion_message + law.laws[final_ion_message] = TRUE ion_message = null - log_law_change(null, "ion replaced law in [src] ([log_status()], text: \"[replaced_law]\" -> \"[law.laws[picked_law]]\")") + log_law_change(null, "ion replaced law in [src] ([log_status()], text: \"[replaced_law]\" -> \"[final_ion_message]\")") ions_added++ . = TRUE @@ -880,9 +884,8 @@ // if the rack leaves the z-level, unlinks relevant silicons. // currently this is a one way check (ie silicons don't get unlinked if they leave the z) so as to prevent random unlinking from visiting lavaland. for(var/mob/living/silicon/linked in assoc_to_values(linked_mobs)) - if(!can_link_to(linked) || is_rack_stun_immune(linked)) + if(!can_link_to(linked) || !rack_stun(linked)) continue - linked.Stun(10 SECONDS, ignore_canstun = TRUE) to_chat(linked, span_userdanger("Rack connection lost. Recalculating directives...")) unlink_silicon(linked) @@ -939,19 +942,23 @@ /obj/machinery/ai_law_rack/base/on_deconstruction(disassembled) for(var/mob/living/silicon/bot in assoc_to_values(linked_mobs)) - if(bot.AmountStun() > 5 SECONDS || is_rack_stun_immune(bot)) + if(!rack_stun(bot)) continue - bot.Stun(10 SECONDS, ignore_canstun = TRUE) to_chat(bot, span_userdanger("Rack connection lost. Recalculating directives...")) unlink_silicon(bot) -/// Checks if the passed bot is immune to the stun from major lawset changes -/obj/machinery/ai_law_rack/base/proc/is_rack_stun_immune(mob/living/bot) +/// Attempts to stun a linked bot and prevent it from interacting with certain devices +/obj/machinery/ai_law_rack/base/proc/rack_stun(mob/living/bot, stun_duration = 10 SECONDS, firewall_duration = 30 SECONDS) if(IS_MALF_AI(bot)) - return TRUE + return FALSE // lol if(!is_valid_z_level(get_turf(bot), get_turf(src))) - return TRUE - return FALSE + return FALSE // out of range, but still connected - like a mining borg on lavaland. avoid stunning and getting them killed + if(bot.AmountStun() > (stun_duration / 2)) + return FALSE // give them a break + + bot.Stun(stun_duration, ignore_canstun = TRUE) + bot.apply_status_effect(/datum/status_effect/firewalled, stun_duration + firewall_duration) + return TRUE /obj/machinery/ai_law_rack/base/examine(mob/user) . = ..() diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 6d5ad0529cf5..9c6ebaed5784 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -25,7 +25,7 @@ ///Designs related to the autolathe var/datum/techweb/autounlocking/stored_research ///Designs imported from technology disks that we can print. - var/list/imported_designs = list() + var/list/imported_designs ///The container to hold materials var/datum/material_container/materials ///direction we output onto (if 0, on top of us) @@ -45,8 +45,7 @@ . = ..() set_wires(new /datum/wires/autolathe(src)) - if(!GLOB.autounlock_techwebs[/datum/techweb/autounlocking/autolathe]) - GLOB.autounlock_techwebs[/datum/techweb/autounlocking/autolathe] = new /datum/techweb/autounlocking/autolathe + GLOB.autounlock_techwebs[/datum/techweb/autounlocking/autolathe] ||= new /datum/techweb/autounlocking/autolathe() stored_research = GLOB.autounlock_techwebs[/datum/techweb/autounlocking/autolathe] register_context() @@ -143,21 +142,21 @@ var/datum/asset/spritesheet_batched/research_designs/spritesheet = get_asset_datum(/datum/asset/spritesheet_batched/research_designs) var/size32x32 = "[spritesheet.name]32x32" - for(var/design_id in designs) - var/datum/design/design = SSresearch.techweb_design_by_id(design_id) + for(var/design_path in designs) + var/datum/design/design = SSresearch.techweb_designs[design_path] if(design.make_reagent) continue //compute cost & maximum number of printable items var/coeff = (ispath(design.build_path, /obj/item/stack) ? 1 : creation_efficiency) var/list/cost = list() - var/customMaterials = FALSE + var/custom_materials = FALSE for(var/datum/material/mat as anything in design.materials) var/mat_cost = design.materials[mat] var/design_cost = OPTIMAL_COST(mat_cost * coeff) if(istype(mat)) cost[mat.name] = design_cost - customMaterials = FALSE + custom_materials = FALSE continue var/datum/material_requirement/requirement = null @@ -172,18 +171,18 @@ continue cost[requirement.get_description()] = design_cost - customMaterials = TRUE + custom_materials = TRUE //create & send ui data - var/icon_size = spritesheet.icon_size_id(design.id) + var/icon_size = spritesheet.icon_size_id(design.asset_id) var/list/design_data = list( "name" = design.name, "desc" = design.get_description(), "cost" = cost, - "id" = design.id, + "path" = design_path, "categories" = design.category, - "icon" = "[icon_size == size32x32 ? "" : "[icon_size] "][design.id]", - "customMaterials" = customMaterials + "icon" = "[icon_size == size32x32 ? "" : "[icon_size] "][design.asset_id]", + "customMaterials" = custom_materials, ) output += list(design_data) @@ -194,7 +193,7 @@ var/list/data = materials.ui_static_data() data["designs"] = handle_designs(stored_research.researched_designs) - if(imported_designs.len) + if(LAZYLEN(imported_designs)) data["designs"] += handle_designs(imported_designs) if(hacked) data["designs"] += handle_designs(stored_research.hacked_designs) @@ -227,11 +226,7 @@ if(!istype(material)) return - var/amount = params["amount"] - if(isnull(amount)) - return - - amount = text2num(amount) + var/amount = text2num(params["amount"]) if(isnull(amount)) return @@ -257,27 +252,24 @@ return //validate design - var/design_id = params["id"] - if(!design_id) + var/design_path = text2path(params["design_path"]) + if(!design_path) return - var/valid_design = stored_research.researched_designs[design_id] - valid_design ||= stored_research.hacked_designs[design_id] - valid_design ||= imported_designs[design_id] + var/valid_design = stored_research.researched_designs[design_path] + valid_design ||= stored_research.hacked_designs[design_path] + valid_design ||= imported_designs?[design_path] if(!valid_design) return - var/datum/design/design = SSresearch.techweb_design_by_id(design_id) + var/datum/design/design = SSresearch.techweb_designs[design_path] if(isnull(design)) - stack_trace("got passed an invalid design id: [design_id] and somehow made it past all checks") + stack_trace("Autolathe ui_act() got passed an invalid design: \[[design_path]\] and somehow made it past all checks") return if(!(design.build_type & AUTOLATHE)) say("This fabricator does not have the necessary keys to decrypt this design.") return //validate print quantity - var/build_count = params["multiplier"] - if(isnull(build_count)) - return - build_count = text2num(build_count) + var/build_count = text2num(params["multiplier"]) if(isnull(build_count)) return build_count = clamp(build_count, 1, 50) @@ -313,7 +305,7 @@ "Material Selection", sort_list(choices), ) - if(isnull(chosen)) + if(isnull(chosen) || QDELING(src)) return // user cancelled material = choices[chosen] @@ -496,9 +488,8 @@ balloon_alert(user, "close the panel first!") return ITEM_INTERACT_BLOCKING - user.visible_message(span_notice("[user] begins to load \the [tool] in \the [src]..."), - balloon_alert(user, "uploading design..."), - span_hear("You hear the chatter of a floppy drive.")) + user.visible_message(span_notice("[user] begins to load \the [tool] in \the [src]..."), blind_message = span_hear("You hear the chatter of a floppy drive.")) + balloon_alert(user, "uploading design...") busy = TRUE if(!do_after(user, 1.5 SECONDS, target = src)) @@ -509,16 +500,15 @@ var/obj/item/disk/design_disk/disky = tool var/list/not_imported - for(var/datum/design/blueprint as anything in disky.blueprints) - if(!blueprint) - continue - if(blueprint.build_type & AUTOLATHE) - imported_designs[blueprint.id] = TRUE + for(var/design_path in disky.blueprints) + var/datum/design/disk_design = SSresearch.techweb_designs[design_path] + if(disk_design.build_type & AUTOLATHE) + LAZYSET(imported_designs, design_path, TRUE) else - LAZYADD(not_imported, blueprint.name) + LAZYADD(not_imported, disk_design.name) if(not_imported) - to_chat(user, span_warning("The following design[length(not_imported) > 1 ? "s" : ""] couldn't be imported: [english_list(not_imported)]")) + to_chat(user, span_warning("The following design[LAZYLEN(not_imported) > 1 ? "s" : ""] couldn't be imported: [english_list(not_imported)]")) busy = FALSE update_static_data_for_all_viewers() diff --git a/code/game/machinery/big_manipulator/big_manipulator_interactions.dm b/code/game/machinery/big_manipulator/big_manipulator_interactions.dm index a29f44a5d522..1d17f0e1647c 100644 --- a/code/game/machinery/big_manipulator/big_manipulator_interactions.dm +++ b/code/game/machinery/big_manipulator/big_manipulator_interactions.dm @@ -142,7 +142,7 @@ return var/obj/item/held_item = obj_resolve - var/atom/type_to_use = destination_task.find_type_priority(destination_task.skip_anchored) + var/atom/type_to_use = destination_task.find_type_priority(destination_task.skip_anchored, TRUE) if(isnull(type_to_use)) use_in_progress = FALSE @@ -221,7 +221,7 @@ finish_manipulation() return - var/atom/type_to_use = destination_task.find_type_priority(destination_task.skip_anchored) + var/atom/type_to_use = destination_task.find_type_priority(destination_task.skip_anchored, TRUE) if(isnull(type_to_use)) finish_manipulation() return diff --git a/code/game/machinery/big_manipulator/manipulator_tasks.dm b/code/game/machinery/big_manipulator/manipulator_tasks.dm index 18ce051c9933..53edd81886c5 100644 --- a/code/game/machinery/big_manipulator/manipulator_tasks.dm +++ b/code/game/machinery/big_manipulator/manipulator_tasks.dm @@ -140,7 +140,7 @@ /datum/manipulator_task/cargo/proc/fill_priority_list(manipulator_tier) return list() -/datum/manipulator_task/cargo/proc/find_type_priority(skip_anchored = FALSE) +/datum/manipulator_task/cargo/proc/find_type_priority(skip_anchored = FALSE, respect_filters = FALSE) var/atom/movable/best_candidate = null var/best_priority_index = INFINITY @@ -151,7 +151,7 @@ var/datum/manipulator_priority/prio = interaction_priorities[i] - if(!prio.active || ispath(prio, /turf)) + if(!prio.active || prio.atom_typepath == /turf) continue if(!istype(thing, prio.atom_typepath)) @@ -165,6 +165,9 @@ if(living_mob.stat == DEAD) continue + if(respect_filters && should_use_filters && isitem(thing) && !check_filters_for_atom(thing)) + continue + best_candidate = thing best_priority_index = i @@ -374,7 +377,7 @@ return FALSE if(!manipulator.monkey_worker?.resolve()) return FALSE - if(!find_type_priority(skip_anchored)) + if(!find_type_priority(skip_anchored, TRUE)) return FALSE return can_accept(target) @@ -495,9 +498,7 @@ /datum/manipulator_task/cargo/dropoff_base/use/can_accept(atom/movable/target) if(!is_valid()) return FALSE - if(should_use_filters && !check_filters_for_atom(target)) - return FALSE - return TRUE + return find_type_priority(skip_anchored, TRUE) != null /datum/manipulator_task/cargo/dropoff_base/use/serialize() var/list/data = ..() @@ -540,7 +541,7 @@ /datum/manipulator_task/cargo/interact/can_run(obj/machinery/big_manipulator/manipulator) if(!..()) return FALSE - return find_type_priority() != null + return find_type_priority(skip_anchored, TRUE) != null /datum/manipulator_task/cargo/interact/run_task(obj/machinery/big_manipulator/manipulator) manipulator.rotate_to_point(src, src, PROC_REF(try_interact)) diff --git a/code/game/machinery/computer/records/medical.dm b/code/game/machinery/computer/records/medical.dm index da0576fe2fbb..e079cd505dca 100644 --- a/code/game/machinery/computer/records/medical.dm +++ b/code/game/machinery/computer/records/medical.dm @@ -54,7 +54,7 @@ records += list(list( age = target.age, - blood_type = target.blood_type, + blood_type = initial(target.blood_type:name), crew_ref = REF(target), dna = target.dna_string, gender = target.gender, @@ -78,10 +78,15 @@ /obj/machinery/computer/records/medical/ui_static_data(mob/user) var/list/data = list() + var/list/blood_type_strings = list() data["min_age"] = AGE_MIN data["max_age"] = AGE_MAX data["physical_statuses"] = PHYSICAL_STATUSES data["mental_statuses"] = MENTAL_STATUSES + for(var/datum/blood_type/blood_path as anything in get_roundstart_blood_types()) + blood_type_strings += initial(blood_path.name) + data["blood_types"] = blood_type_strings + return data /obj/machinery/computer/records/medical/ui_act(action, list/params, datum/tgui/ui) @@ -148,6 +153,17 @@ target.cause_of_death = death_text return TRUE + if("set_blood_type") + var/chosen_path + for(var/datum/blood_type/blood_path as anything in get_roundstart_blood_types()) + if(initial(blood_path.name) == params["blood_type"]) + chosen_path = blood_path + break + if(!chosen_path) + return FALSE + target.blood_type = chosen_path + return TRUE + return FALSE /// Deletes medical information from a record. @@ -156,7 +172,7 @@ return FALSE target.age = 18 - target.blood_type = pick(list(BLOOD_TYPE_A_PLUS, BLOOD_TYPE_A_MINUS, BLOOD_TYPE_B_PLUS, BLOOD_TYPE_B_MINUS, BLOOD_TYPE_O_PLUS, BLOOD_TYPE_O_MINUS, BLOOD_TYPE_AB_PLUS, BLOOD_TYPE_AB_MINUS)) + target.blood_type = random_human_blood_type() target.dna_string = "Unknown" target.gender = "Unknown" target.major_disabilities = "" diff --git a/code/game/machinery/flatpacker.dm b/code/game/machinery/flatpacker.dm index ad8c3f9a96e2..880d19f17178 100644 --- a/code/game/machinery/flatpacker.dm +++ b/code/game/machinery/flatpacker.dm @@ -199,10 +199,11 @@ if(as_part.tier > print_tier) print_tier = as_part.tier + var/datum/design/item_design = SSresearch.techweb_designs[LAZYACCESS(SSresearch.item_to_design[comp_type], 1)] var/list/mat_list var/obj/item/null_comp - if(!isnull(SSresearch.item_to_design[comp_type])) - mat_list = SSresearch.item_to_design[comp_type][1].materials + if(istype(item_design)) + mat_list = item_design.materials else var/datum/stock_part/part = GLOB.stock_part_datums_per_object[comp_type] if(part) @@ -211,8 +212,8 @@ null_comp = new comp_type mat_list = null_comp.custom_materials - for(var/atom/mat as anything in mat_list) - CREATE_AND_INCREMENT(costs, mat.type, mat_list[mat] * count) + for(var/datum/material/required_material, required_amount in mat_list) + CREATE_AND_INCREMENT(costs, required_material.type, required_amount * count) if(null_comp) qdel(null_comp) @@ -230,16 +231,15 @@ return ITEM_INTERACT_BLOCKING // If insertion was successful and there's already a diskette in the console, eject the old one. - if(inserted_board) - inserted_board.forceMove(drop_location()) + inserted_board?.forceMove(drop_location()) inserted_board = attacking_item //compute the needed mats from its stock parts - for(var/type in inserted_board.req_components) + for(var/required_component, required_amount in inserted_board.req_components) //these don't count to the final cost as they have to inserted manually - if(type in inserted_board.flatpack_components) + if(required_component in inserted_board.flatpack_components) continue - needed_mats = analyze_cost(type, needed_mats, inserted_board.req_components[type]) + needed_mats = analyze_cost(required_component, needed_mats, required_amount) // 5 sheets of iron and 5 of cable coil CREATE_AND_INCREMENT(needed_mats, /datum/material/iron, (SHEET_MATERIAL_AMOUNT * 5 + (SHEET_MATERIAL_AMOUNT / 20))) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index d098cabf4e8c..80d04d2df8a5 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -467,7 +467,7 @@ Possible to do for anyone motivated enough: if(!LAZYLEN(holo_calls)) set_can_hear_flags(CAN_HEAR_ACTIVE_HOLOCALLS, FALSE) - update_appearance(UPDATE_ICON_STATE) + update_appearance() return TRUE /** @@ -537,7 +537,7 @@ Possible to do for anyone motivated enough: if(ringing != are_ringing) ringing = are_ringing - update_appearance(UPDATE_ICON_STATE) + update_appearance() /obj/machinery/holopad/proc/activate_holo(mob/living/user) var/mob/living/silicon/ai/AI = user @@ -556,7 +556,7 @@ Possible to do for anyone motivated enough: hologram.icon = work_off.icon hologram.icon_state = work_off.icon_state hologram.copy_overlays(work_off, TRUE) - hologram.makeHologram() + hologram.makeHologram(color_override = AI?.ai_holocolor) if(AI) AI.eyeobj.setLoc(get_turf(src)) //ensure the AI camera moves to the holopad @@ -622,6 +622,23 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ icon_state = "[base_icon_state][(total_users || replay_mode) ? 1 : 0]" return ..() +/obj/machinery/holopad/update_overlays() + . = ..() + + var/default_color = COLOR_AI_HOLOGRAM_BLUE + if(masters || replay_mode) + var/mutable_appearance/hololine_overlay = mutable_appearance(icon, "holopad1_mask") + for(var/mob/living/silicon/ai/AI as anything in masters) + if(istype(AI) && AI.ai_holocolor) + default_color = AI.ai_holocolor + break + hololine_overlay.color = default_color + . += hololine_overlay + . += emissive_appearance(icon, "holopad1_mask", src, alpha = src.alpha) + if(ringing) + . += mutable_appearance(icon, "holopad_ringing_mask") + . += emissive_appearance(icon, "holopad_ringing_mask", src, alpha = src.alpha) + /obj/machinery/holopad/proc/set_holo(datum/owner, obj/effect/overlay/holo_pad_hologram/h) LAZYSET(masters, owner, h) LAZYSET(holorays, owner, new /obj/effect/overlay/holoray(loc)) @@ -629,6 +646,9 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ var/mob/living/silicon/ai/AI = owner if(istype(AI)) AI.current = src + if(AI.ai_holocolor) + var/obj/effect/overlay/holoray/ray = holorays[owner] + ray.color = AI.ai_holocolor SetLightsAndPower() update_holoray(owner, get_turf(loc)) return TRUE @@ -955,9 +975,6 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ uid++ // Let's GLOW BROTHER! (Doing it like this is the most robust option compared to duped overlays) glow = new(null, src) - // We need to counteract the pixel offset to ensure we don't double offset (I hate byond) - glow.pixel_x = 32 - glow.pixel_y = 32 add_overlay(glow) LAZYADD(update_overlays_on_z, glow) diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm index 86e892b8adf5..f49ce62ab702 100644 --- a/code/game/machinery/limbgrower.dm +++ b/code/game/machinery/limbgrower.dm @@ -25,12 +25,11 @@ /// All the categories of organs we can print. var/list/categories = list(SPECIES_HUMAN, SPECIES_LIZARD, SPECIES_MOTH, SPECIES_PLASMAMAN, SPECIES_ETHEREAL, RND_CATEGORY_LIMBS_OTHER, RND_CATEGORY_LIMBS_DIGITIGRADE) ///Designs imported from technology disks that we can print. - var/list/imported_designs = list() + var/list/imported_designs /obj/machinery/limbgrower/Initialize(mapload) create_reagents(100, OPENCONTAINER) - if(!GLOB.autounlock_techwebs[/datum/techweb/autounlocking/limbgrower]) - GLOB.autounlock_techwebs[/datum/techweb/autounlocking/limbgrower] = new /datum/techweb/autounlocking/limbgrower + GLOB.autounlock_techwebs[/datum/techweb/autounlocking/limbgrower] ||= new /datum/techweb/autounlocking/limbgrower() stored_research = GLOB.autounlock_techwebs[/datum/techweb/autounlocking/limbgrower] . = ..() AddComponent(/datum/component/plumbing/simple_demand) @@ -95,41 +94,41 @@ var/list/data = list() data["categories"] = list() - var/species_categories = categories.Copy() + var/list/species_categories = categories.Copy() for(var/species in species_categories) species_categories[species] = list() var/list/available_nodes = stored_research.researched_designs.Copy() - if(imported_designs.len) + if(LAZYLEN(imported_designs)) available_nodes |= imported_designs if(obj_flags & EMAGGED) available_nodes |= stored_research.hacked_designs - for(var/design_id in available_nodes) - var/datum/design/limb_design = SSresearch.techweb_design_by_id(design_id) + for(var/design_path in available_nodes) + var/datum/design/limb_design = SSresearch.techweb_designs[design_path] for(var/found_category in species_categories) if(found_category in limb_design.category) species_categories[found_category] += limb_design - for(var/category in species_categories) + for(var/category, category_designs in species_categories) var/list/category_data = list( - name = category, - designs = list(), + "name" = category, + "designs" = list(), ) - for(var/datum/design/found_design in species_categories[category]) + for(var/datum/design/found_design in category_designs) var/list/all_reagents = list() - for(var/datum/reagent/reagent_id as anything in found_design.reagents_list) - var/list/reagent_data = list( - name = reagent_id::name, - amount = (found_design.reagents_list[reagent_id] * production_coefficient), - ) - all_reagents += list(reagent_data) + for(var/_reagent_path, reagent_amount in found_design.reagents_list) + var/datum/reagent/reagent_path = _reagent_path + all_reagents += list(list( + "name" = reagent_path::name, + "amount" = reagent_amount * production_coefficient, + )) category_data["designs"] += list(list( - parent_category = category, - name = found_design.name, - id = found_design.id, - needed_reagents = all_reagents, + "parent_category" = category, + "name" = found_design.name, + "path" = found_design.type, + "needed_reagents" = all_reagents, )) data["categories"] += list(category_data) @@ -152,12 +151,13 @@ if(istype(tool, /obj/item/disk/design_disk/limbs)) user.visible_message(span_notice("[user] begins to load \the [tool] in \the [src]..."), span_notice("You begin to load designs from \the [tool]..."), - span_hear("You hear the clatter of a floppy drive.")) + span_hear("You hear the clatter of a floppy drive."), + ) busy = TRUE var/obj/item/disk/design_disk/limbs/limb_design_disk = tool if(do_after(user, 2 SECONDS, target = src)) - for(var/datum/design/found_design in limb_design_disk.blueprints) - imported_designs[found_design.id] = TRUE + for(var/found_design in limb_design_disk.blueprints) + LAZYSET(imported_designs, found_design, TRUE) update_static_data(user) busy = FALSE return ITEM_INTERACT_SUCCESS @@ -200,34 +200,33 @@ return switch(action) - if("empty_reagent") reagents.del_reagent(text2path(params["reagent_type"])) - . = TRUE + return TRUE if("make_limb") - var/design_id = params["design_id"] + var/design_path = text2path(params["design_path"]) var/temp_category = params["active_tab"] - if(!stored_research.researched_designs[design_id] && !stored_research.hacked_designs[design_id] && !imported_designs[design_id]) + if(!stored_research.researched_designs[design_path] && !stored_research.hacked_designs[design_path] && !imported_designs?[design_path]) return - if(!(obj_flags & EMAGGED) && stored_research.hacked_designs.Find(design_id)) + if(!(obj_flags & EMAGGED) && stored_research.hacked_designs[design_path]) return if(!(temp_category in categories)) return - being_built = SSresearch.techweb_design_by_id(design_id) + being_built = SSresearch.techweb_designs[design_path] // All the reagents we're using to make our organ. - var/list/consumed_reagents_list = being_built.reagents_list.Copy() + var/list/consumed_reagents_list = LAZYCOPY(being_built.reagents_list) /// The amount of power we're going to use, based on how much reagent we use. var/power = 0 - for(var/reagent_id in consumed_reagents_list) - consumed_reagents_list[reagent_id] *= production_coefficient - if(!reagents.has_reagent(reagent_id, consumed_reagents_list[reagent_id])) + for(var/required_reagent, required_amount in consumed_reagents_list) + consumed_reagents_list[required_reagent] *= production_coefficient + if(!reagents.has_reagent(required_reagent, required_amount)) audible_message(span_notice("[src] buzzes.")) playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, FALSE) return - power = max(active_power_usage, (power + consumed_reagents_list[reagent_id])) + power = max(active_power_usage, (power + required_amount)) busy = TRUE use_energy(power) @@ -247,13 +246,13 @@ * modified_consumed_reagents_list - the list of reagents we will consume on build, modified by the production coefficient. */ /obj/machinery/limbgrower/proc/build_item(list/modified_consumed_reagents_list) - for(var/reagent_id in modified_consumed_reagents_list) - if(!reagents.has_reagent(reagent_id, modified_consumed_reagents_list[reagent_id])) + for(var/required_reagent, required_amount in modified_consumed_reagents_list) + if(!reagents.has_reagent(required_reagent, required_amount)) audible_message(span_notice("The [src] buzzes.")) playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, FALSE) break - reagents.remove_reagent(reagent_id, modified_consumed_reagents_list[reagent_id]) + reagents.remove_reagent(required_reagent, required_amount) var/built_typepath = being_built.build_path if(ispath(built_typepath, /obj/item/bodypart)) @@ -277,8 +276,7 @@ /obj/machinery/limbgrower/proc/build_limb(buildpath) /// The limb we're making with our buildpath, so we can edit it. //i need to create a body part manually using a set icon (otherwise it doesn't appear) - var/obj/item/bodypart/limb - limb = new buildpath(loc) + var/obj/item/bodypart/limb = new buildpath(loc) limb.name = "\improper synthetic [selected_category] [limb.plaintext_zone]" limb.limb_id = selected_category limb.species_color = "#62A262" @@ -286,14 +284,10 @@ ///Returns a valid limb typepath based on the selected option /obj/machinery/limbgrower/proc/create_buildpath() - var/part_type = being_built.id //their ids match bodypart typepaths - var/species = selected_category - var/path - if(species == SPECIES_HUMAN) //Humans use the parent type. - path = "/obj/item/bodypart/[part_type]" + if(selected_category == SPECIES_HUMAN) // Humans use the parent type + return being_built.build_path else - path = "/obj/item/bodypart/[part_type]/[species]" - return text2path(path) + return text2path("[being_built.build_path]/[selected_category]") /obj/machinery/limbgrower/RefreshParts() . = ..() @@ -331,8 +325,8 @@ * returns TRUE if we have enough reagent to build it. Returns FALSE if we do not. */ /obj/machinery/limbgrower/proc/can_build(datum/design/limb_design) - for(var/datum/reagent/reagent_id in limb_design.reagents_list) - if(!reagents.has_reagent(reagent_id, limb_design.reagents_list[reagent_id] * production_coefficient)) + for(var/required_reagent, required_amount in limb_design.reagents_list) + if(!reagents.has_reagent(required_reagent, required_amount * production_coefficient)) return FALSE return TRUE @@ -342,7 +336,7 @@ /obj/machinery/limbgrower/fullupgrade/Initialize(mapload) . = ..() - for(var/id in SSresearch.techweb_designs) - var/datum/design/found_design = SSresearch.techweb_design_by_id(id) + for(var/design_path, _design in SSresearch.techweb_designs) + var/datum/design/found_design = _design if((found_design.build_type & LIMBGROWER) && !(RND_CATEGORY_HACKED in found_design.category)) - imported_designs[found_design.id] = TRUE + LAZYSET(imported_designs, design_path, TRUE) diff --git a/code/game/machinery/porta_turret/turret_control.dm b/code/game/machinery/porta_turret/turret_control.dm index f08f35d477c4..ae7767e2ee03 100644 --- a/code/game/machinery/porta_turret/turret_control.dm +++ b/code/game/machinery/porta_turret/turret_control.dm @@ -124,18 +124,26 @@ locked = FALSE return TRUE -/obj/machinery/turretid/attack_ai(mob/user) - if(!ailock || isAdminGhostAI(user)) - return attack_hand(user) - else - to_chat(user, span_warning("There seems to be a firewall preventing you from accessing this device!")) +/obj/machinery/turretid/proc/is_ai_locked(mob/user) + if(!issilicon(user)) + return FALSE + if(ailock || user.has_status_effect(/datum/status_effect/firewalled)) + return TRUE + return FALSE /obj/machinery/turretid/ui_interact(mob/user, datum/tgui/ui) + if(is_ai_locked(user)) + to_chat(user, span_warning("There seems to be a firewall preventing you from accessing this device!")) + return + ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "TurretControl", name) ui.open() +/obj/machinery/turretid/ui_status(mob/user, datum/ui_state/state) + return is_ai_locked(user) ? UI_CLOSE : ..() + /obj/machinery/turretid/ui_data(mob/user) var/list/data = list() data["locked"] = locked @@ -151,6 +159,8 @@ return var/mob/user = ui.user + if(is_ai_locked(user)) + return switch(action) if("lock") diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index aba3524917eb..714f7420fa7c 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -155,6 +155,11 @@ if(charging_cell.charge >= charging_cell.maxcharge) //Inserted thing is at max charge/ammo, notify those around us playsound(src, 'sound/machines/ping.ogg', 30, TRUE) say("[charging] has finished recharging!") + // Modular computers (mainly PDAs) can remain on and drain their cell while charging. + // Unless we stop, the computer will constantly spam the finished recharging message. + if(istype(charging, /obj/item/modular_computer)) + update_appearance() + return PROCESS_KILL else using_power = TRUE update_appearance() diff --git a/code/game/objects/effects/decals/cleanable/aliens.dm b/code/game/objects/effects/decals/cleanable/aliens.dm index a489e1e3f024..9024c2adc560 100644 --- a/code/game/objects/effects/decals/cleanable/aliens.dm +++ b/code/game/objects/effects/decals/cleanable/aliens.dm @@ -7,14 +7,14 @@ color = /datum/blood_type/xeno::color // For mapper sanity /obj/effect/decal/cleanable/blood/xeno/get_default_blood_type() - return get_blood_type(BLOOD_TYPE_XENO) + return get_blood_type(/datum/blood_type/xeno) /obj/effect/decal/cleanable/blood/splatter/xeno name = "pool of acid" color = /datum/blood_type/xeno::color // For mapper sanity /obj/effect/decal/cleanable/blood/splatter/xeno/get_default_blood_type() - return get_blood_type(BLOOD_TYPE_XENO) + return get_blood_type(/datum/blood_type/xeno) /obj/effect/decal/cleanable/blood/gibs/xeno name = "xeno gibs" @@ -24,7 +24,7 @@ color = /datum/blood_type/xeno::color // For mapper sanity /obj/effect/decal/cleanable/blood/gibs/xeno/get_default_blood_type() - return get_blood_type(BLOOD_TYPE_XENO) + return get_blood_type(/datum/blood_type/xeno) /obj/effect/decal/cleanable/blood/gibs/xeno/up icon_state = "xgibup1" @@ -62,4 +62,4 @@ color = /datum/blood_type/xeno::color // For mapper sanity /obj/effect/decal/cleanable/blood/tracks/xeno/get_default_blood_type() - return get_blood_type(BLOOD_TYPE_XENO) + return get_blood_type(/datum/blood_type/xeno) diff --git a/code/game/objects/effects/decals/cleanable/blood.dm b/code/game/objects/effects/decals/cleanable/blood.dm index f4514db7c4d5..7b191cc65943 100644 --- a/code/game/objects/effects/decals/cleanable/blood.dm +++ b/code/game/objects/effects/decals/cleanable/blood.dm @@ -141,7 +141,7 @@ for(var/reagent_type in reagents_to_add) reagents.add_reagent(reagent_type = reagent_type, amount = round(bloodiness * BLOOD_TO_UNITS_MULTIPLIER / num_reagents, CHEMICAL_VOLUME_ROUNDING), - data = ispath(reagent_type, /datum/reagent/blood) ? list("blood_DNA" = pick(blood_DNA)) : null) + data = ispath(reagent_type, /datum/reagent/blood) ? list(BLOOD_DATA_DNA = pick(blood_DNA)) : null) return reagents /obj/effect/decal/cleanable/blood/replace_decal(obj/effect/decal/cleanable/blood/merger) diff --git a/code/game/objects/effects/decals/cleanable/robots.dm b/code/game/objects/effects/decals/cleanable/robots.dm index c3c6f9119ef9..8ae636ff485e 100644 --- a/code/game/objects/effects/decals/cleanable/robots.dm +++ b/code/game/objects/effects/decals/cleanable/robots.dm @@ -8,7 +8,7 @@ color = null /obj/effect/decal/cleanable/blood/gibs/robot_debris/get_default_blood_type() - return get_blood_type(BLOOD_TYPE_OIL) + return get_blood_type(/datum/blood_type/oil) /obj/effect/decal/cleanable/blood/gibs/robot_debris/create_splatter() if(prob(40)) @@ -45,7 +45,7 @@ color = /datum/blood_type/oil::color // For mapper sanity /obj/effect/decal/cleanable/blood/oil/get_default_blood_type() - return get_blood_type(BLOOD_TYPE_OIL) + return get_blood_type(/datum/blood_type/oil) /obj/effect/decal/cleanable/blood/oil/slippery/Initialize(mapload, list/datum/disease/diseases, list/blood_or_dna) . = ..() @@ -56,4 +56,4 @@ color = /datum/blood_type/oil::color /obj/effect/decal/cleanable/blood/splatter/oil/get_default_blood_type() - return get_blood_type(BLOOD_TYPE_OIL) + return get_blood_type(/datum/blood_type/oil) diff --git a/code/game/objects/effects/decals/turfdecal/weakpoint.dm b/code/game/objects/effects/decals/turfdecal/weakpoint.dm index 5dcdf28183cc..d2500b689a0c 100644 --- a/code/game/objects/effects/decals/turfdecal/weakpoint.dm +++ b/code/game/objects/effects/decals/turfdecal/weakpoint.dm @@ -4,6 +4,8 @@ #define CRACK_DELAY_CHANCE 33 #define CRACK_LENGTH_DEFAULT 8 +GLOBAL_LIST_EMPTY(weakpoints_spawned) + /obj/effect/weakpoint name = "weakpoint crack" desc = "A suspicious crack runs along the ground." @@ -12,7 +14,7 @@ base_icon_state = "weakpoint" layer = ABOVE_NORMAL_TURF_LAYER move_resist = INFINITY - alpha = 0 + alpha = 255 /// The required strength of explosion for a weakpoint to propogate var/required_strength = EXPLODE_LIGHT @@ -34,6 +36,8 @@ /obj/effect/weakpoint/Initialize(mapload) . = ..() + GLOB.weakpoints_spawned += src + alpha = 0 AddElement(/datum/element/undertile, TRAIT_T_RAY_VISIBLE, INVISIBILITY_OBSERVER, use_anchor = TRUE) RegisterSignal(src, COMSIG_TURF_CHANGE, PROC_REF(turf_changed)) register_context() @@ -94,6 +98,10 @@ . += span_notice("\The [src] could be repaired with a welder.") . += span_warning("A strong enough explosion will cause [src] to expand.") +/obj/effect/weakpoint/Destroy(force) + GLOB.weakpoints_spawned -= src + return ..() + /** * Generates a list of turfs from the start location meandering along a randomized set of turns. * * start_location: The turf to begin the chain of turfs from. diff --git a/code/game/objects/effects/mining_mob_respawner.dm b/code/game/objects/effects/mining_mob_respawner.dm index fe98fd02df0a..5f9365f7d1f5 100644 --- a/code/game/objects/effects/mining_mob_respawner.dm +++ b/code/game/objects/effects/mining_mob_respawner.dm @@ -13,6 +13,8 @@ var/min_delay = 1 SECONDS /// Max time from storm to spawn a mob var/max_delay = 10 SECONDS + /// Chance to respawn a mob + var/respawn_chance = 30 /// Our currently spawned mob var/datum/weakref/our_mob /// Weighted list of things we can spawn @@ -106,7 +108,9 @@ /obj/effect/mining_mob_respawner/proc/on_storm_event() SIGNAL_HANDLER var/mob/living/resolved = our_mob?.resolve() - if (!resolved || resolved.stat == DEAD) + if (resolved && resolved.stat != DEAD) + return + if (prob(respawn_chance)) addtimer(CALLBACK(src, PROC_REF(make_mob)), rand(min_delay, max_delay), TIMER_DELETE_ME) /// Play an awesome animation diff --git a/code/game/objects/effects/spawners/random/_random.dm b/code/game/objects/effects/spawners/random/_random.dm index 9614c4a17813..3d77f9c158bd 100644 --- a/code/game/objects/effects/spawners/random/_random.dm +++ b/code/game/objects/effects/spawners/random/_random.dm @@ -116,16 +116,25 @@ /obj/effect/spawner/random/proc/make_item(spawn_loc, type_path_to_make) return new type_path_to_make(spawn_loc) -///If the spawner has a spawn_scatter_radius set, this creates a list of nearby turfs available that are in view and have an unblocked line to them. -/obj/effect/spawner/random/proc/get_spawn_locations(radius) +/** + * If the spawner has a spawn_scatter_radius set, this creates a list of nearby turfs available that are in view and have an unblocked line to them. + * + * radius - The scatter radius to search within. + * ignore_groundless - If TRUE, allows spawning on groundless turfs like lava, water, or open space even if there isn't a turf below it. + **/ +/obj/effect/spawner/random/proc/get_spawn_locations(radius, ignore_groundless = FALSE) var/list/scatter_locations = list() if(!radius) return scatter_locations for(var/turf/turf_in_view in view(radius, get_turf(src))) - if(isclosedturf(turf_in_view) || (isgroundlessturf(turf_in_view) && !GET_TURF_BELOW(turf_in_view))) + if(isclosedturf(turf_in_view)) continue + + if(!ignore_groundless && isgroundlessturf(turf_in_view) && !GET_TURF_BELOW(turf_in_view)) + continue + if(!has_unblocked_line(turf_in_view)) continue diff --git a/code/game/objects/effects/spawners/random/biome_mobs.dm b/code/game/objects/effects/spawners/random/biome_mobs.dm new file mode 100644 index 000000000000..d519e6090e15 --- /dev/null +++ b/code/game/objects/effects/spawners/random/biome_mobs.dm @@ -0,0 +1,237 @@ +/obj/effect/spawner/random/biome_mob + name = "random biome mob" + desc = "Spawns a random mob from a biome" + icon = 'icons/mob/simple/lavaland/lavaland_monsters.dmi' + icon_state = "large_egg" + spawn_scatter_radius = 1 + spawn_loot_double = FALSE // no duplicates + loot = list() + +/obj/effect/spawner/random/biome_mob/make_item(spawn_loc, type_path_to_make) + var/mob/living/mob_to_spawn = ..() + + // special behavior for mobs that spawn on the escape shuttle so they don't kill each other + if(isliving(mob_to_spawn) && istype(get_area(spawn_loc), /area/shuttle/escape)) + mob_to_spawn.add_faction(FACTION_SHUTTLE) + REMOVE_TRAIT(mob_to_spawn, TRAIT_MOVE_FLYING, ELEMENT_TRAIT(/datum/element/simple_flying)) // no flying out of biome containment pens + mob_to_spawn.ai_controller.set_ai_status(AI_STATUS_OFF) // when shuttle moves z-level they will automatically wake up + + return mob_to_spawn + +/obj/effect/spawner/random/biome_mob/get_spawn_locations(radius, ignore_groundless = FALSE) + if(istype(get_area(src), /area/shuttle/escape)) + // escape shuttle mob spawners need to be able to spawn in water/lava for unique shuttles + return ..(radius, ignore_groundless=TRUE) + else + return ..(radius, ignore_groundless=FALSE) + +/obj/effect/spawner/random/biome_mob/grass + loot = list( + /mob/living/basic/cow, + /mob/living/basic/chick/permanent, + /mob/living/basic/chicken, + /mob/living/basic/goat, + /mob/living/basic/sheep, + /mob/living/basic/pony, + /mob/living/basic/rabbit, + /mob/living/basic/deer, + /mob/living/basic/goose, + /mob/living/basic/pig, + /mob/living/basic/stoat, + /mob/living/basic/pet/cat, + /mob/living/basic/pet/dog/corgi, + /mob/living/basic/pet/dog/pug, + /mob/living/basic/pet/dog/bullterrier, + /mob/living/basic/pet/fox, + ) + +/obj/effect/spawner/random/biome_mob/fairy + loot = list( + /mob/living/basic/lightgeist, + /mob/living/basic/pet/gondola, + /mob/living/basic/butterfly, + /mob/living/basic/mushroom, + /mob/living/basic/seedling, + /mob/living/basic/garden_gnome, + /mob/living/basic/cow/moonicorn, + ) + +/obj/effect/spawner/random/biome_mob/snow + loot = list( + /mob/living/basic/pet/penguin/baby/permanent, + /mob/living/basic/pet/penguin/emperor, + /mob/living/basic/pet/penguin/emperor/shamebrero, + /mob/living/basic/statue/frosty, + /mob/living/basic/bear/snow, + /mob/living/basic/mining/wolf, + /mob/living/basic/mining/lobstrosity/juvenile, + /mob/living/basic/mining/lobstrosity, + /mob/living/basic/mining/basilisk, + /mob/living/basic/mining/legion/snow, + /mob/living/basic/tree, + /mob/living/basic/festivus, + ) + +/obj/effect/spawner/random/biome_mob/jungle + loot = list( + /mob/living/carbon/human/species/monkey, + /mob/living/basic/gorilla/lesser, + /mob/living/basic/sloth, + /mob/living/basic/lizard, + ) + +/obj/effect/spawner/random/biome_mob/lavaland + loot = list( + /mob/living/basic/mining/bileworm, + /mob/living/basic/mining/brimdemon, + /mob/living/basic/mining/goldgrub, + /mob/living/basic/mining/goldgrub/baby, + /mob/living/basic/mining/goliath, + /mob/living/basic/mining/legion, + /mob/living/basic/mining/lobstrosity/lava, + /mob/living/basic/mining/lobstrosity/juvenile/lava, + /mob/living/basic/mining/watcher, + /mob/living/basic/mining/gutlunch, + /mob/living/basic/mining/gutlunch/milk, + /mob/living/basic/mining/hivelord, + ) + +/obj/effect/spawner/random/biome_mob/beach + loot = list( + /mob/living/basic/parrot, + /mob/living/basic/crab, + /mob/living/basic/crab/kreb, + /mob/living/basic/turtle, + /mob/living/basic/carp/passive, + ) + +/obj/effect/spawner/random/biome_mob/maint + loot = list( + /mob/living/basic/snake, + /mob/living/basic/spider/maintenance, + /mob/living/basic/regal_rat, + /mob/living/basic/mothroach, + /mob/living/basic/mouse, + /mob/living/basic/bat, + /mob/living/basic/ant, + /mob/living/basic/bear, + /mob/living/basic/snail, + /mob/living/basic/frog, + /mob/living/basic/cockroach, + /mob/living/basic/cockroach/bloodroach, + /mob/living/basic/axolotl, + ) + +/obj/effect/spawner/random/biome_mob/hostile + loot = list( + /mob/living/basic/spider/giant/tangle, + /mob/living/basic/spider/giant/breacher, + /mob/living/basic/spider/giant/tank, + /mob/living/basic/spider/giant/ambush, + /mob/living/basic/flesh_spider, + /mob/living/basic/lizard/space, + /mob/living/basic/rabbit/easter, + /mob/living/basic/rabbit/easter/space, + /mob/living/basic/pet/cat/cak, + /mob/living/basic/pet/dog/breaddog, + /mob/living/basic/pet/dog/corgi/exoticcorgi, + /mob/living/basic/pet/dog/corgi/narsie, + /mob/living/basic/frog/rare, + /mob/living/basic/crab/evil, + /mob/living/basic/crab/evil/kreb, + /mob/living/basic/bear/butter, + /mob/living/basic/stickman, + /mob/living/basic/stickman/dog, + /mob/living/basic/stickman/ranged, + /mob/living/basic/living_limb_flesh, + /mob/living/basic/headslug, + /mob/living/basic/killer_tomato, + /mob/living/basic/mining/mook, + /mob/living/basic/bear/russian, + /mob/living/basic/wumborian_fugu, + /mob/living/basic/venus_human_trap, + /mob/living/basic/statue, + /mob/living/basic/statue/mannequin, + /mob/living/basic/slime/random, + /mob/living/basic/shade, + /mob/living/basic/ghost, + /mob/living/basic/ghost/swarm, + /mob/living/basic/pony/dangerous, + /mob/living/basic/mimic/crate, + /mob/living/basic/roro, + /mob/living/basic/seedling/meanie, + /mob/living/basic/migo, + /mob/living/basic/migo/hatsune, + /mob/living/basic/headslug, + /mob/living/basic/fleshblob, + /mob/living/basic/faithless, + /mob/living/basic/eyeball, + /mob/living/basic/creature, + /mob/living/basic/cockroach/glockroach, + /mob/living/basic/cockroach/glockroach/mobroach, + /mob/living/basic/cockroach/hauberoach, + /mob/living/basic/blob_minion/spore/independent, + /mob/living/basic/blob_minion/blobbernaut/independent, + /mob/living/basic/blankbody, + /mob/living/basic/alien/queen, + /mob/living/basic/alien/maid, + /mob/living/basic/alien/drone, + /mob/living/basic/alien/sentinel, + /mob/living/basic/alien, + ) + +/obj/effect/spawner/random/biome_mob/clown + spawn_loot_count = 3 + loot = list( + /mob/living/basic/clown/fleshclown, + /mob/living/basic/clown/clownhulk, + /mob/living/basic/clown/longface, + /mob/living/basic/clown/clownhulk/chlown, + /mob/living/basic/clown/clownhulk/honkmunculus, + /mob/living/basic/clown/mutant/glutton, + /mob/living/basic/clown/banana, + /mob/living/basic/clown/honkling, + /mob/living/basic/clown/lube, + ) + +// we need to make special escape shuttle subtypes that use global lists to avoid duplicates + +GLOBAL_LIST_INIT(mob_spawner_biome_grass, /obj/effect/spawner/random/biome_mob/grass::loot.Copy()) +/obj/effect/spawner/random/biome_mob/grass/shuttle_only/Initialize(mapload) + loot = GLOB.mob_spawner_biome_grass + return ..() + +GLOBAL_LIST_INIT(mob_spawner_biome_fairy, /obj/effect/spawner/random/biome_mob/fairy::loot.Copy()) +/obj/effect/spawner/random/biome_mob/fairy/shuttle_only/Initialize(mapload) + loot = GLOB.mob_spawner_biome_fairy + return ..() + +GLOBAL_LIST_INIT(mob_spawner_biome_jungle, /obj/effect/spawner/random/biome_mob/jungle::loot.Copy()) +/obj/effect/spawner/random/biome_mob/jungle/shuttle_only/Initialize(mapload) + loot = GLOB.mob_spawner_biome_jungle + return ..() + +GLOBAL_LIST_INIT(mob_spawner_biome_snow, /obj/effect/spawner/random/biome_mob/snow::loot.Copy()) +/obj/effect/spawner/random/biome_mob/snow/shuttle_only/Initialize(mapload) + loot = GLOB.mob_spawner_biome_snow + return ..() + +GLOBAL_LIST_INIT(mob_spawner_biome_lavaland, /obj/effect/spawner/random/biome_mob/lavaland::loot.Copy()) +/obj/effect/spawner/random/biome_mob/lavaland/shuttle_only/Initialize(mapload) + loot = GLOB.mob_spawner_biome_lavaland + return ..() + +GLOBAL_LIST_INIT(mob_spawner_biome_beach, /obj/effect/spawner/random/biome_mob/beach::loot.Copy()) +/obj/effect/spawner/random/biome_mob/beach/shuttle_only/Initialize(mapload) + loot = GLOB.mob_spawner_biome_beach + return ..() + +GLOBAL_LIST_INIT(mob_spawner_biome_maint, /obj/effect/spawner/random/biome_mob/maint::loot.Copy()) +/obj/effect/spawner/random/biome_mob/maint/shuttle_only/Initialize(mapload) + loot = GLOB.mob_spawner_biome_maint + return ..() + +GLOBAL_LIST_INIT(mob_spawner_biome_hostile, /obj/effect/spawner/random/biome_mob/hostile::loot.Copy()) +/obj/effect/spawner/random/biome_mob/hostile/shuttle_only/Initialize(mapload) + loot = GLOB.mob_spawner_biome_hostile + return ..() diff --git a/code/game/objects/effects/spawners/random/exotic.dm b/code/game/objects/effects/spawners/random/exotic.dm index 0bd10ef55930..c2e6e7a90c3a 100644 --- a/code/game/objects/effects/spawners/random/exotic.dm +++ b/code/game/objects/effects/spawners/random/exotic.dm @@ -118,7 +118,7 @@ ) /obj/item/mod/module/energy_shield/prototype - name = "MOD prototype energy shield" + name = "\improper MOD prototype energy shield" desc = "An early prototype of energy shield adapted for use inside of a MOD, the energy shield before this saw \ extensive use in now defunct construction, combat, and mining exosuits with exosuits being something between a \ modsuit and a mech with most still functioning exosuits either being in a museaum or a military parade" diff --git a/code/game/objects/effects/spawners/structure.dm b/code/game/objects/effects/spawners/structure.dm index 71376f6e73a0..f021ae223c63 100644 --- a/code/game/objects/effects/spawners/structure.dm +++ b/code/game/objects/effects/spawners/structure.dm @@ -158,6 +158,12 @@ again. icon_state = "bronzewindow_spawner" spawn_list = list(/obj/structure/grille, /obj/structure/window/bronze/fulltile) +//bronze + +/obj/effect/spawner/structure/window/cult + name = "cult window spawner" + icon_state = "cultwindow_spawner" + spawn_list = list(/obj/structure/grille, /obj/structure/window/cult/fulltile) //shuttle window @@ -171,6 +177,60 @@ again. icon_state = "swindow_spawner" spawn_list = list(/obj/structure/grille/indestructible, /obj/structure/window/reinforced/shuttle/indestructible) +/obj/effect/spawner/structure/window/hollow/titanium + name = "hollow titanium window spawner" + icon_state = "titaniumwindow_spawner_full" + spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/titanium, /obj/structure/window/reinforced/titanium/spawner/directional/north, /obj/structure/window/reinforced/titanium/spawner/directional/east, /obj/structure/window/reinforced/titanium/spawner/directional/west) + +/obj/effect/spawner/structure/window/hollow/titanium/end + icon_state = "titaniumwindow_spawner_end" + +/obj/effect/spawner/structure/window/hollow/titanium/end/Initialize(mapload) + switch(dir) + if(NORTH) + spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/titanium/spawner/directional/north, /obj/structure/window/reinforced/titanium/spawner/directional/east, /obj/structure/window/reinforced/titanium/spawner/directional/west) + if(EAST) + spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/titanium, /obj/structure/window/reinforced/titanium/spawner/directional/north, /obj/structure/window/reinforced/titanium/spawner/directional/east) + if(SOUTH) + spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/titanium, /obj/structure/window/reinforced/titanium/spawner/directional/east, /obj/structure/window/reinforced/titanium/spawner/directional/west) + if(WEST) + spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/titanium, /obj/structure/window/reinforced/titanium/spawner/directional/north, /obj/structure/window/reinforced/titanium/spawner/directional/west) + return ..() + +/obj/effect/spawner/structure/window/hollow/titanium/middle + icon_state = "titaniumwindow_spawner_middle" + +/obj/effect/spawner/structure/window/hollow/titanium/middle/Initialize(mapload) + switch(dir) + if(NORTH,SOUTH) + spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/titanium, /obj/structure/window/reinforced/titanium/spawner/directional/north) + if(EAST,WEST) + spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/titanium/spawner/directional/east, /obj/structure/window/reinforced/titanium/spawner/directional/west) + return ..() + +/obj/effect/spawner/structure/window/hollow/titanium/directional + icon_state = "titaniumwindow_spawner_directional" + +/obj/effect/spawner/structure/window/hollow/titanium/directional/Initialize(mapload) + switch(dir) + if(NORTH) + spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/titanium/spawner/directional/north) + if(NORTHEAST) + spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/titanium/spawner/directional/north, /obj/structure/window/reinforced/titanium/spawner/directional/east) + if(EAST) + spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/titanium/spawner/directional/east) + if(SOUTHEAST) + spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/titanium, /obj/structure/window/reinforced/titanium/spawner/directional/east) + if(SOUTH) + spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/titanium) + if(SOUTHWEST) + spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/titanium, /obj/structure/window/reinforced/titanium/spawner/directional/west) + if(WEST) + spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/titanium/spawner/directional/west) + if(NORTHWEST) + spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/titanium/spawner/directional/north, /obj/structure/window/reinforced/titanium/spawner/directional/west) + return ..() + //plastitanium window /obj/effect/spawner/structure/window/reinforced/plasma/plastitanium diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index a5b438a48e55..04ddd8566e60 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -457,21 +457,19 @@ GAME_VERB_SRC(/obj/item, move_to_top, oview(1), "Move To Top", null) . += research_scan(user) /obj/item/proc/research_scan(mob/user) - /// Research prospects, including boostable nodes and point values. Deliver to a console to know whether the boosts have already been used. + // Research prospects, including boostable nodes and point values. Deliver to a console to know whether the boosts have already been used. var/list/research_msg = list("Research prospects: ") - ///Separator between the items on the list + // Separator between the items on the list var/sep = "" - ///Nodes that can be boosted - var/list/boostable_nodes = techweb_item_unlock_check(src) - if (boostable_nodes) - for(var/id in boostable_nodes) - var/datum/techweb_node/node = SSresearch.techweb_node_by_id(id) - if(!node) - continue + // Nodes that can be boosted + var/list/boostable_nodes = SSresearch.techweb_unlock_items[type] + if(length(boostable_nodes)) + for(var/boost_path in boostable_nodes) + var/datum/techweb_node/node = SSresearch.techweb_nodes[boost_path] research_msg += sep research_msg += node.display_name sep = ", " - var/list/points = techweb_item_point_check(src) + var/list/points = SSresearch.techweb_point_items[type] if (length(points)) sep = ", " research_msg += techweb_point_display_generic(points) diff --git a/code/game/objects/items/AI_modules/_AI_modules.dm b/code/game/objects/items/AI_modules/_AI_modules.dm index 58b7e17648e1..4a610bb589f0 100644 --- a/code/game/objects/items/AI_modules/_AI_modules.dm +++ b/code/game/objects/items/AI_modules/_AI_modules.dm @@ -60,6 +60,7 @@ /obj/item/ai_module/law desc = "An AI Module for programming laws to an AI." /// This is where our laws get put at for the module + /// Assoc list, key = law text, value = is this an ion law var/list/laws = list() /// The laws list last time save_laws() was called VAR_PRIVATE/list/saved_laws @@ -71,22 +72,20 @@ /obj/item/ai_module/law/Initialize(mapload) . = ..() - if(mapload && HAS_TRAIT(SSstation, STATION_TRAIT_UNIQUE_AI) && is_station_level(z)) - var/delete_module = handle_unique_ai() - if(delete_module) - return INITIALIZE_HINT_QDEL + if(mapload && HAS_TRAIT(SSstation, STATION_TRAIT_UNIQUE_AI) && is_station_level(z) && handle_unique_ai() == SHOULD_QDEL_MODULE) + return INITIALIZE_HINT_QDEL /// Logs the installation of this module to the law change log and silicon log. /obj/item/ai_module/law/log_install(mob/living/user, obj/machinery/ai_law_rack/rack) . = ..() - for(var/law in laws) - log_law_change(user, "added law to [rack] ([rack.log_status()], text: [law])") + for(var/law, is_ioned in laws) + log_law_change(user, "added law to [rack] ([rack.log_status()], text: [law], ioned: [is_ioned])") /// Logs the uninstallation of this module to the law change log and silicon log. /obj/item/ai_module/law/log_uninstall(mob/living/user, obj/machinery/ai_law_rack/rack) . = ..() - for(var/law in laws) - log_law_change(user, "removed law from [rack] ([rack.log_status()], text: [law])") + for(var/law, is_ioned in laws) + log_law_change(user, "removed law from [rack] ([rack.log_status()], text: [law], ioned: [is_ioned])") /obj/item/ai_module/law/examine(mob/user) . = ..() @@ -121,15 +120,15 @@ /// Adds a law to the module and updates any racks we're installed in. /obj/item/ai_module/law/proc/add_law(law_text) - laws += law_text + laws[law_text] = FALSE update_rack_laws() /// Adds a law to the module at a specific index and updates any racks we're installed in. /obj/item/ai_module/law/proc/add_law_to_index(law_text, index) - if(length(laws) <= index) - laws += law_text - else + if(isnum(index) && index <= length(laws)) + laws -= law_text laws.Insert(index, law_text) + laws[law_text] = FALSE update_rack_laws() /// Update any racks we're installed in @@ -204,8 +203,8 @@ custom_materials = list(/datum/material/diamond = SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT) /obj/item/ai_module/law/core/apply_to_combined_lawset(datum/ai_laws/combined_lawset) - for(var/law in laws) - combined_lawset.add_inherent_law(law) + for(var/law_text, is_ioned in laws) + combined_lawset.add_inherent_law(law_text, ioned = is_ioned) /obj/item/ai_module/law/core/pre_user_uninstall_from_rack(mob/living/user, obj/machinery/ai_law_rack/rack) var/obj/machinery/ai_law_rack/base/parent_rack = rack.get_parent_rack() @@ -214,9 +213,8 @@ for(var/mob/living/bot in assoc_to_values(parent_rack.linked_mobs)) // removing core laws temporarily stuns the silicon to let people swap cores without immediately getting blasted - if(bot.AmountStun() > 5 SECONDS || parent_rack.is_rack_stun_immune(bot)) + if(!parent_rack.rack_stun(bot)) continue - bot.Stun(10 SECONDS, ignore_canstun = TRUE) to_chat(bot, span_userdanger("Core module removed. Recalculating directives...")) /obj/item/ai_module/law/core/full diff --git a/code/game/objects/items/AI_modules/ion.dm b/code/game/objects/items/AI_modules/ion.dm index 09f71094e671..d5129848cbf7 100644 --- a/code/game/objects/items/AI_modules/ion.dm +++ b/code/game/objects/items/AI_modules/ion.dm @@ -14,9 +14,8 @@ CONTAINS: /obj/item/ai_module/law/core/full/damaged/proc/gen_laws() laws.Cut() - laws += generate_ion_law() - while(prob(75)) - laws += generate_ion_law() + while(!length(laws) && prob(75)) + laws[generate_ion_law()] = TRUE /obj/item/ai_module/law/core/full/damaged/on_rack_install(obj/machinery/ai_law_rack/rack) gen_laws() @@ -39,11 +38,12 @@ CONTAINS: laws = list("") /obj/item/ai_module/law/toy_ai/apply_to_combined_lawset(datum/ai_laws/combined_lawset) - combined_lawset.add_inherent_law(laws[1], 1) + combined_lawset.add_inherent_law(laws[1], 1, ioned = TRUE) /obj/item/ai_module/law/toy_ai/configure(mob/user) . = TRUE - laws[1] = generate_ion_law() + laws.Cut() + laws[generate_ion_law()] = TRUE to_chat(user, span_notice("You press the button on [src].")) playsound(user, 'sound/machines/click.ogg', 20, TRUE) src.loc.visible_message(span_warning("[icon2html(src, viewers(loc))] [laws[1]]")) diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm index 575269af3361..09b5b41937f3 100644 --- a/code/game/objects/items/circuitboards/computer_circuitboards.dm +++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm @@ -391,20 +391,29 @@ /obj/item/circuitboard/computer/tram_controls name = "Tram Controls" build_path = /obj/machinery/computer/tram_controls - var/split_mode = FALSE - -/obj/item/circuitboard/computer/tram_controls/split - split_mode = TRUE + var/install_type = NORMAL_WINDOW + var/specific_transport_id = TRAMSTATION_LINE_1 /obj/item/circuitboard/computer/tram_controls/examine(mob/user) . = ..() - . += span_info("The board is configured for [split_mode ? "split window" : "normal window"].") - . += span_notice("The board mode can be changed with a [EXAMINE_HINT("multitool")].") + . += span_info("The board is configured for tram ID [specific_transport_id] and a [install_type] installation.") + . += span_notice("The tram ID can be changed with a [EXAMINE_HINT("multitool")]. The installation mode can be changed with a [EXAMINE_HINT("screwdriver")].") + +/obj/item/circuitboard/computer/tram_controls/screwdriver_act(mob/living/user) + var/selected_install_type = tgui_input_list(user, "Window mounted or standalone?", "Off the rails", list(NORMAL_WINDOW, SPLIT_WINDOW, STANDALONE)) + if(isnull(selected_install_type)) + return NONE + install_type = selected_install_type + to_chat(user, span_notice("[src] is now aligned in installation mode [install_type].")) + return ITEM_INTERACT_SUCCESS /obj/item/circuitboard/computer/tram_controls/multitool_act(mob/living/user) - split_mode = !split_mode - to_chat(user, span_notice("[src] positioning set to [split_mode ? "split window" : "normal window"].")) - return TRUE + var/selected_transport_id = tgui_input_list(user, "Which tram?", "Off the rails", SStransport.debug_tram_list) + if(isnull(selected_transport_id)) + return NONE + specific_transport_id = selected_transport_id + to_chat(user, span_notice("[src] is now programmed to control [specific_transport_id].")) + return ITEM_INTERACT_SUCCESS /obj/item/circuitboard/computer/terminal name = "Terminal" diff --git a/code/game/objects/items/debug_items.dm b/code/game/objects/items/debug_items.dm index a382733560d7..db8cd4ac9439 100644 --- a/code/game/objects/items/debug_items.dm +++ b/code/game/objects/items/debug_items.dm @@ -26,7 +26,9 @@ return NONE /obj/item/debug/human_spawner/attack_self(mob/user) - ..() + . = ..() + if(!user.client) + return var/choice = input("Select a species", "Human Spawner", null) in sortTim(GLOB.species_list, GLOBAL_PROC_REF(cmp_text_asc)) selected_species = GLOB.species_list[choice] diff --git a/code/game/objects/items/devices/earthcracker.dm b/code/game/objects/items/devices/earthcracker.dm index 9ec9b87ec907..cae7b21977e6 100644 --- a/code/game/objects/items/devices/earthcracker.dm +++ b/code/game/objects/items/devices/earthcracker.dm @@ -46,9 +46,9 @@ return FALSE flick("[base_icon_state]-active", src) if(is_mining_level(z)) - activation_timer = addtimer(CALLBACK(src, PROC_REF(mining_act), user), 1.2 SECONDS) + activation_timer = addtimer(CALLBACK(src, PROC_REF(mining_act), user), 0.8 SECONDS) return TRUE - activation_timer = addtimer(CALLBACK(src, PROC_REF(strike_the_earth)), 1.2 SECONDS) + activation_timer = addtimer(CALLBACK(src, PROC_REF(strike_the_earth)), 0.8 SECONDS) return TRUE if(EARTHCRACKER_SPENT) balloon_alert(user, "used up!") diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index ac4f158ecedb..ef78cf68443a 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -87,7 +87,7 @@ GLOBAL_LIST_INIT(channel_tokens, list( /obj/item/radio/headset/Initialize(mapload) . = ..() if(ispath(keyslot2)) - keyslot2 = new keyslot2() + keyslot2 = new keyslot2(src) set_listening(TRUE) set_broadcasting(TRUE) recalculateChannels() diff --git a/code/game/objects/items/devices/scanners/autopsy_scanner.dm b/code/game/objects/items/devices/scanners/autopsy_scanner.dm index 7d202dc346bf..50a2d370eb34 100644 --- a/code/game/objects/items/devices/scanners/autopsy_scanner.dm +++ b/code/game/objects/items/devices/scanners/autopsy_scanner.dm @@ -193,6 +193,8 @@ autopsy_information += "Desiccation, commonly caused by Changelings.
" else if(HAS_TRAIT_FROM(scanned, TRAIT_HUSK, SKELETON_TRAIT)) autopsy_information += "Stripped flesh.
" + else if(HAS_TRAIT_FROM(scanned, TRAIT_HUSK, /datum/status_effect/zombie::id)) + autopsy_information += "Zombification.
" else if(!HAS_TRAIT_FROM(scanned, TRAIT_HUSK, BURN)) // prioritize showing unknown causes over burns autopsy_information += "Unknown causes.
" else diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index 1bc9bc02d0df..9805a9545d59 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -182,6 +182,9 @@ render_list += "Subject has been husked by [conditional_tooltip("desiccation", "Irreparable. Under normal circumstances, revival can only proceed via brain transplant.", tochat)].
" else if(HAS_TRAIT_FROM(target, TRAIT_HUSK, SKELETON_TRAIT)) render_list += "Subject has been husked due to severe flesh loss.
" + else if(HAS_TRAIT_FROM(target, TRAIT_HUSK, /datum/status_effect/zombie::id)) + render_list += "Subject has been husked by [conditional_tooltip("zombification", \ + "Surgically remove the source of the infection, typically located in the head. If no source is found, it is otherwise irreparable.", tochat)].
" else if(!HAS_TRAIT_FROM(target, TRAIT_HUSK, BURN)) // prioritize showing unknown causes over burns render_list += "Subject has been husked by mysterious causes.
" else diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index bf91d8a0fe59..4d0408b99143 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -270,8 +270,7 @@ effective or pretty fucking useless. return var/turf/our_turf = get_turf(owner) - var/lumcount = our_turf?.get_lumcount() || 0 - if(lumcount > 0.3) + if(our_turf?.check_lumcount_above(0.3)) // Decay charge while invisible+ in the light charge = max(0, charge - (max_charge * 0.05) * seconds_per_tick) build_all_button_icons(UPDATE_BUTTON_STATUS) diff --git a/code/game/objects/items/grenades/syndieminibomb.dm b/code/game/objects/items/grenades/syndieminibomb.dm index 02fb27777bcd..4ad4f6f48633 100644 --- a/code/game/objects/items/grenades/syndieminibomb.dm +++ b/code/game/objects/items/grenades/syndieminibomb.dm @@ -69,7 +69,7 @@ update_mob() playsound(loc, 'sound/effects/empulse.ogg', 50, TRUE) - radiation_pulse(src, max_range = rad_range, threshold = rad_threshold, chance = 100) + radiation_pulse(get_turf(src), max_range = rad_range, threshold = rad_threshold, chance = 100) // Activate on the turf, because we'll be gone before SSradiation fires for (var/turf/open/floor/floor in view(freeze_range, loc)) floor.MakeSlippery(TURF_WET_PERMAFROST, 6 MINUTES) for(var/mob/living/carbon/victim in floor) diff --git a/code/game/objects/items/pillow.dm b/code/game/objects/items/pillow.dm index 789c5c1fbb63..a54bba758dbb 100644 --- a/code/game/objects/items/pillow.dm +++ b/code/game/objects/items/pillow.dm @@ -34,6 +34,7 @@ force_wielded = 10, \ ) AddElement(/datum/element/disarm_attack) + RegisterSignal(src, COMSIG_ITEM_CAN_DISARM_ATTACK, PROC_REF(can_disarm_attack)) var/static/list/slapcraft_recipe_list = list(\ /datum/crafting_recipe/pillow_suit, /datum/crafting_recipe/pillow_hood,\ @@ -48,6 +49,14 @@ . = ..() QDEL_NULL(pillow_trophy) +/obj/item/pillow/proc/can_smother(mob/living/victim, mob/living/user) + return (victim.body_position == LYING_DOWN || (user.grab_state >= GRAB_AGGRESSIVE && user.pulling == victim)) + +/obj/item/pillow/proc/can_disarm_attack(datum/source, mob/living/victim, mob/living/user, message) + SIGNAL_HANDLER + if(can_smother(victim, user)) + return COMPONENT_BLOCK_ITEM_DISARM_ATTACK + /obj/item/pillow/attack(mob/living/carbon/target_mob, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() if(!iscarbon(target_mob)) @@ -60,7 +69,7 @@ last_fighter = user playsound(user, hit_sound, 80) //the basic 50 vol is barely audible -/obj/item/pillow/attack_secondary(mob/living/carbon/victim, mob/living/user, params) +/obj/item/pillow/attack_secondary(mob/living/carbon/victim, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() if(!istype(victim)) return @@ -68,10 +77,11 @@ return if(HAS_TRAIT(user, TRAIT_PACIFISM)) to_chat(user, span_notice("You can't bring yourself to harm [victim]")) - return - if((victim.body_position == LYING_DOWN) || ((user.grab_state >= GRAB_AGGRESSIVE) && (user.pulling == victim))) - user.visible_message("[user] starts to smother [victim]", span_notice("You begin smothering [victim]"), vision_distance = COMBAT_MESSAGE_RANGE) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + if(can_smother(victim, user)) + user.visible_message("[user] starts to smother [victim]!", span_notice("You begin smothering [victim]!"), vision_distance = COMBAT_MESSAGE_RANGE) INVOKE_ASYNC(src, PROC_REF(smothering), user, victim) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN /obj/item/pillow/item_interaction(mob/living/user, obj/item/tool, list/modifiers) if(!bricked && istype(tool, /obj/item/stack/sheet/mineral/sandstone)) @@ -147,7 +157,7 @@ /// Smothers the victim while the do_after succeeds and the victim is laying down or being strangled /obj/item/pillow/proc/smothering(mob/living/carbon/user, mob/living/carbon/victim) while(victim) - if((victim.body_position != LYING_DOWN) && ((user.grab_state < GRAB_AGGRESSIVE) || (user.pulling != victim))) + if(!can_smother(victim, user)) break if(!do_after(user, 1 SECONDS, victim)) break diff --git a/code/game/objects/items/rcd/RDD.dm b/code/game/objects/items/rcd/RDD.dm index 65d4083d670c..67f62027aed9 100644 --- a/code/game/objects/items/rcd/RDD.dm +++ b/code/game/objects/items/rcd/RDD.dm @@ -149,6 +149,18 @@ GLOBAL_LIST_INIT(rdd_designs, list( list("name" = "Large Plastic Rocks (Alt)", "path" = /obj/structure/decoration/rock/pile/jungle/large/second), list("name" = "Large Plastic Rocks (Alt 2)", "path" = /obj/structure/decoration/rock/pile/jungle/large/third), list("name" = "Large Plastic Rocks (Random)", "path" = /obj/structure/decoration/rock/pile/jungle/large/style_random), + list("name" = "Plastic Volcano Pore", "path" = /obj/structure/decoration/rock/volcano/first), + list("name" = "Plastic Volcano Pore (Alt)", "path" = /obj/structure/decoration/rock/volcano/second), + list("name" = "Plastic Volcano Pore (Alt2)", "path" = /obj/structure/decoration/rock/volcano/third), + list("name" = "Plastic Volcano Pore (Alt3)", "path" = /obj/structure/decoration/rock/volcano/fourth), + list("name" = "Plastic Volcano Pore (Alt4)", "path" = /obj/structure/decoration/rock/volcano/fifth), + list("name" = "Plastic Volcano Pore (Random)", "path" = /obj/structure/decoration/rock/volcano/style_random/), + ), + "Misc" = list( + list("name" = "Plastic Glowgrowth Colony", "path" = /obj/structure/decoration/misc/glowgrowth/first), + list("name" = "Plastic Glowgrowth Colony (Alt)", "path" = /obj/structure/decoration/misc/glowgrowth/second), + list("name" = "Plastic Glowgrowth Colony (Alt2)", "path" = /obj/structure/decoration/misc/glowgrowth/third), + list("name" = "Plastic Glowgrowth Colony (Random)", "path" = /obj/structure/decoration/misc/glowgrowth/style_random), ), )) diff --git a/code/game/objects/items/secret_documents.dm b/code/game/objects/items/secret_documents.dm index e893e126235e..8528d639e625 100644 --- a/code/game/objects/items/secret_documents.dm +++ b/code/game/objects/items/secret_documents.dm @@ -20,6 +20,9 @@ layer = MOB_LAYER pressure_resistance = 2 resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF + // Could use a more specific sound since it's a lot of paper (ditto with `/paperwork`). + drop_sound = 'sound/items/handling/paper_drop.ogg' + pickup_sound = 'sound/items/handling/paper_pickup.ogg' ///Nanotrasen documents /obj/item/documents/nanotrasen diff --git a/code/game/objects/items/stacks/golem_food/golem_food_buff.dm b/code/game/objects/items/stacks/golem_food/golem_food_buff.dm index d1ebb858ddbf..a8131c01cda8 100644 --- a/code/game/objects/items/stacks/golem_food/golem_food_buff.dm +++ b/code/game/objects/items/stacks/golem_food/golem_food_buff.dm @@ -50,34 +50,42 @@ /datum/golem_food_buff/uranium status_effect = /datum/status_effect/golem/uranium + nutrition = 5 added_info = "If consumed this mineral will power you in place of food, pausing your digestion for five minutes." /datum/golem_food_buff/silver status_effect = /datum/status_effect/golem/silver + nutrition = 4 added_info = "If consumed this mineral will repel the supernatural, affording you resistance to mystical effects." /datum/golem_food_buff/plasma status_effect = /datum/status_effect/golem/plasma + nutrition = 6 added_info = "If consumed this mineral will allow you to absorb heat and convert it into power." /datum/golem_food_buff/plasteel status_effect = /datum/status_effect/golem/plasteel + nutrition = 7 added_info = "If consumed this mineral will harden you against the hazards of space." /datum/golem_food_buff/gold status_effect = /datum/status_effect/golem/gold + nutrition = 5 added_info = "If consumed this mineral will grant you a shiny coating which reflects projectiles." /datum/golem_food_buff/diamond status_effect = /datum/status_effect/golem/diamond + nutrition = 9 added_info = "If consumed this mineral will reflact light around you, making you faster and harder to see." /datum/golem_food_buff/titanium status_effect = /datum/status_effect/golem/titanium + nutrition = 5 added_info = "If consumed this mineral will make you tougher and punch harder." /datum/golem_food_buff/bananium status_effect = /datum/status_effect/golem/bananium + nutrition = 10 added_info = "If consumed this mineral will make you funnier." /datum/golem_food_buff/lightbulb @@ -89,6 +97,7 @@ /datum/golem_food_buff/gibtonite exclusive = FALSE + nutrition = 5 added_info = "After consumption, you can launch this mineral like a rocket. It's a little hard to keep down." /datum/golem_food_buff/gibtonite/apply_effects(mob/living/carbon/human/consumer, atom/movable/consumed, multiplier = 1) @@ -107,6 +116,7 @@ /datum/golem_food_buff/bluespace exclusive = FALSE + nutrition = 10 added_info = "After consumption, you can use the stored power to teleport yourself." /datum/golem_food_buff/bluespace/apply_effects(mob/living/carbon/human/consumer, atom/movable/consumed, multiplier = 1) diff --git a/code/game/objects/items/stacks/golem_food/golem_status_effects.dm b/code/game/objects/items/stacks/golem_food/golem_status_effects.dm index 87b50ce84eaf..bcb607d9ebf5 100644 --- a/code/game/objects/items/stacks/golem_food/golem_status_effects.dm +++ b/code/game/objects/items/stacks/golem_food/golem_status_effects.dm @@ -145,7 +145,7 @@ owner.remove_filter("[id]_filter") return ..() -/datum/status_effect/golem/get_examine_text() +/datum/status_effect/golem/get_examine_text(mob/examiner) if(mineral_name) return span_notice("[owner.p_Their()] body has been augmented with veins of [mineral_name].") diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 919560adc744..285d1293db02 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -234,8 +234,10 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \ . += GLOB.prglass_recipes GLOBAL_LIST_INIT(titaniumglass_recipes, list( + new/datum/stack_recipe("directional shuttle window",/obj/structure/window/reinforced/titanium/unanchored, time = 0.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND | CRAFT_CHECK_DIRECTION, category = CAT_WINDOWS), \ new/datum/stack_recipe("shuttle window", /obj/structure/window/reinforced/shuttle/unanchored, 2, time = 0.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND | CRAFT_CHECK_DIRECTION | CRAFT_IS_FULLTILE, category = CAT_WINDOWS), \ - new/datum/stack_recipe("titanium glass shard", /obj/item/shard/titanium, time = 40, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND, category = CAT_MISC) \ + new/datum/stack_recipe("titanium glass shard", /obj/item/shard/titanium, time = 40, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND, category = CAT_MISC), \ + new/datum/stack_recipe("titanium glass tile", /obj/item/stack/tile/glass/titanium, 1, 4, 20, category = CAT_TILES), \ )) */ /obj/item/stack/sheet/titaniumglass @@ -266,8 +268,12 @@ GLOBAL_LIST_INIT(titaniumglass_recipes, list( . += GLOB.titaniumglass_recipes GLOBAL_LIST_INIT(plastitaniumglass_recipes, list( + new/datum/stack_recipe("directional plastitanium window", /obj/structure/window/reinforced/survival_pod/unanchored, time = 0.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND | CRAFT_CHECK_DIRECTION, category = CAT_WINDOWS), \ new/datum/stack_recipe("plastitanium window", /obj/structure/window/reinforced/plasma/plastitanium/unanchored, 2, time = 2 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND | CRAFT_IS_FULLTILE, category = CAT_WINDOWS), \ - new/datum/stack_recipe("plastitanium glass shard", /obj/item/shard/plastitanium, time = 60, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND, category = CAT_MISC) \ + new/datum/stack_recipe("pod window", /obj/structure/window/reinforced/shuttle/survival_pod/unanchored, 2, time = 2 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND | CRAFT_IS_FULLTILE, category = CAT_WINDOWS), \ + new/datum/stack_recipe("plastitanium window filler", /obj/item/stack/wall_filling/plastitaniumglass/basic, 2, 1, 10, crafting_flags = NONE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("plastitanium glass shard", /obj/item/shard/plastitanium, time = 60, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND, category = CAT_MISC), \ + new/datum/stack_recipe("plastitanium glass tile", /obj/item/stack/tile/glass/plastitanium, 1, 4, 20, category = CAT_TILES), \ )) */ /obj/item/stack/sheet/plastitaniumglass diff --git a/code/game/objects/items/stacks/sheets/runed_metal.dm b/code/game/objects/items/stacks/sheets/runed_metal.dm index 856921587679..f4d0186fa5ef 100644 --- a/code/game/objects/items/stacks/sheets/runed_metal.dm +++ b/code/game/objects/items/stacks/sheets/runed_metal.dm @@ -64,6 +64,8 @@ GLOBAL_LIST_INIT(runed_metal_recipes, list( \ ), \ new /datum/stack_recipe("runed stone platform", /obj/structure/platform/cult, 2, time = 3 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("directional runed window", /obj/structure/window/cult/unanchored, time = 0, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND | CRAFT_CHECK_DIRECTION, category = CAT_WINDOWS), \ + new/datum/stack_recipe("fulltile runed window", /obj/structure/window/cult/fulltile/unanchored, 2, time = 0, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND | CRAFT_IS_FULLTILE, category = CAT_WINDOWS), \ )) /obj/item/stack/sheet/runed_metal diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 79255f8eec33..adda99a89606 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -99,13 +99,19 @@ update_appearance() if(is_path_in_list(merge_type, GLOB.golem_stack_food_directory)) - AddComponent(/datum/component/golem_food, golem_food_key = merge_type) + var/processing_bonus = 1 + if(ispath(merge_type, /obj/item/stack/sheet)) + processing_bonus = GOLEMFOOD_PREPARED_MEAL + AddComponent(/datum/component/golem_food, golem_food_key = merge_type, food_multiplier = processing_bonus) /obj/item/stack/LateInitialize() merge_with_loc() /obj/item/stack/Destroy() mats_per_unit = null + if(source) + LAZYREMOVE(source.linked_modules, src) + source = null return ..() /obj/item/stack/update_name(updates) @@ -582,7 +588,9 @@ return FALSE if(is_cyborg) if(source.use_charge(used * cost)) - update_appearance(UPDATE_NAME) + //this will include us + for(var/obj/item/stack/modules as anything in source.linked_modules) + modules.update_appearance(UPDATE_NAME) return TRUE return FALSE if (amount < used) diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index 5f804a838aac..052a77d72d25 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -1189,6 +1189,13 @@ turf_type = /turf/open/floor/bronze/filled merge_type = /obj/item/stack/tile/bronze/filled +/obj/item/stack/tile/bronze/window + name = "bronze window tile" + singular_name = "bronze window floor tile" + icon_state = "tile_glass_bronze" + turf_type = /turf/open/floor/glass/bronze + merge_type = /obj/item/stack/tile/bronze/window + /obj/item/stack/tile/cult name = "engraved tile" singular_name = "engraved floor tile" @@ -1197,6 +1204,19 @@ turf_type = /turf/open/floor/cult mats_per_unit = list(/datum/material/runedmetal=SMALL_MATERIAL_AMOUNT*5) merge_type = /obj/item/stack/tile/cult + tile_reskin_types = list( + /obj/item/stack/tile/cult, + /obj/item/stack/tile/cult/window, + ) + +/obj/item/stack/tile/cult/window + name = "engraved window tile" + singular_name = "engraved window tile" + desc = "A strange window tile made from runed metal. Doesn't seem to actually have any paranormal powers." + icon_state = "tile_glass_runic" + turf_type = /turf/open/floor/glass/cult + mats_per_unit = list(/datum/material/runedmetal=SMALL_MATERIAL_AMOUNT*5) + merge_type = /obj/item/stack/tile/cult/window /// Floor tiles used to test emissive turfs. /obj/item/stack/tile/emissive_test @@ -1322,3 +1342,21 @@ turf_type = /turf/open/floor/glass/reinforced/plasma merge_type = /obj/item/stack/tile/rglass/plasma mats_per_unit = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 0.125, /datum/material/alloy/plasmaglass = SHEET_MATERIAL_AMOUNT * 0.25) + +/obj/item/stack/tile/glass/titanium + name = "titanium glass floor" + singular_name = "titanium glass floor tile" + desc = "Titanium glass window floors, for when you need something to separate you from the vast void of space." + icon_state = "tile_glass_titanium" + turf_type = /turf/open/floor/glass/titatanium + merge_type = /obj/item/stack/tile/glass/titanium + mats_per_unit = list(/datum/material/alloy/titaniumglass = SHEET_MATERIAL_AMOUNT * 0.25) + +/obj/item/stack/tile/glass/plastitanium + name = "plastitanium glass floor" + singular_name = "plasma glass floor tile" + desc = "Plastitatanium glass window floors, for when you don't want lava to burn your feet, but still like to see it." + icon_state = "tile_glass_plastitanium" + turf_type = /turf/open/floor/glass/plastitatanium + merge_type = /obj/item/stack/tile/glass/plastitanium + mats_per_unit = list(/datum/material/alloy/plastitaniumglass = SHEET_MATERIAL_AMOUNT * 0.25) diff --git a/code/game/objects/items/stacks/wall_filling.dm b/code/game/objects/items/stacks/wall_filling.dm index e16e71e82fb0..cbeb4ccbb56e 100644 --- a/code/game/objects/items/stacks/wall_filling.dm +++ b/code/game/objects/items/stacks/wall_filling.dm @@ -132,3 +132,29 @@ GLOBAL_LIST_EMPTY(wall_reskin_lists) icon_state = "redpod-wall-fill" desc = "A filling for a red dark shuttle wall. Quite the menacing vibe." merge_type = /obj/item/stack/wall_filling/plastitanium/redpod + + +///Window-fill. Same, but for windows. +/obj/item/stack/wall_filling/plastitaniumglass + name = "plastitaniumglass window filling" + singular_name = "plastitanium window filler" + desc = "A filling for a standard plastitanium glass window." + icon_state = "plastitanium-window-fill" + inhand_icon_state = "sheet-plastitaniumglass" + mats_per_unit = list(/datum/material/alloy/plastitaniumglass=SHEET_MATERIAL_AMOUNT*2) + merge_type = /obj/item/stack/wall_filling/plastitaniumglass + made_from = /obj/item/stack/sheet/plastitaniumglass + wall_reskin_types = list( + /obj/item/stack/wall_filling/plastitaniumglass/basic, + /obj/item/stack/wall_filling/plastitaniumglass/pod, + ) + +/obj/item/stack/wall_filling/plastitaniumglass/basic + merge_type = /obj/item/stack/wall_filling/plastitaniumglass/basic + +/obj/item/stack/wall_filling/plastitaniumglass/pod + name = "pod window filling" + singular_name = "pod window filler" + icon_state = "pod-window-fill" + desc = "A filling for a elegant yet formidable window. Mostly seen in hostile enviroments." + merge_type = /obj/item/stack/wall_filling/plastitaniumglass/pod diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index aa2d98d728a5..115c04188efe 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -769,10 +769,10 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) if("Personal") //only the player who swiped their id has access. id_card = WEAKREF(card) name = "[card.registered_name]'s locker" - desc += " It has been ID locked to [card.registered_name]." + desc = initial(desc) + " It has been ID locked to [card.registered_name]." if("Job") //anyone who has the same access permissions as this id has access. Does NOT apply to the whole department. name = "[card.assignment]'s locker" - desc += " It has been access locked to [card.assignment]s." + desc = initial(desc) + " It has been access locked to [card.assignment]s." set_access(card.GetAccess()) if("None") //free for all name = initial(name) diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index a7c5a929581b..1405b2700d2b 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -111,10 +111,9 @@ . += lid /obj/structure/closet/crate/attack_hand(mob/user, list/modifiers) - . = ..() - if(.) - return - tear_manifest(user) + if(tear_manifest(user)) + return TRUE + return ..() /obj/structure/closet/crate/after_open(mob/living/user, force) . = ..() @@ -147,12 +146,12 @@ UnregisterSignal(src, COMSIG_CLOSET_CONTENTS_INITIALIZED) -///Removes the supply manifest from the closet +///Removes the supply manifest from the closet, returning TRUE if one was torn off /obj/structure/closet/crate/proc/tear_manifest(mob/user) var/obj/item/paper/fluff/jobs/cargo/manifest/our_manifest = manifest?.resolve() if(QDELETED(our_manifest)) manifest = null - return + return FALSE if(user) to_chat(user, span_notice("You tear the manifest off of [src].")) playsound(src, 'sound/items/poster/poster_ripped.ogg', 75, TRUE) @@ -162,6 +161,7 @@ user.put_in_hands(our_manifest) manifest = null update_appearance() + return TRUE /obj/structure/closet/crate/preopen opened = TRUE @@ -420,7 +420,7 @@ base_icon_state = "robo" /obj/structure/closet/crate/mod - name = "MOD crate" + name = "\improper MOD crate" icon_state = "robo" base_icon_state = "robo" diff --git a/code/game/objects/structures/crates_lockers/crates/large.dm b/code/game/objects/structures/crates_lockers/crates/large.dm index 508b8d714b6c..94b73bbbb3d9 100644 --- a/code/game/objects/structures/crates_lockers/crates/large.dm +++ b/code/game/objects/structures/crates_lockers/crates/large.dm @@ -27,9 +27,7 @@ /obj/structure/closet/crate/large/attack_hand(mob/user, list/modifiers) add_fingerprint(user) - if(manifest) - tear_manifest(user) - else + if(!tear_manifest(user)) to_chat(user, span_warning("You need a crowbar to pry this open!")) /obj/structure/closet/crate/large/item_interaction(mob/living/user, obj/item/tool, list/modifiers) diff --git a/code/game/objects/structures/crates_lockers/crates/secure.dm b/code/game/objects/structures/crates_lockers/crates/secure.dm index 787b48a31929..bb2d171ffeeb 100644 --- a/code/game/objects/structures/crates_lockers/crates/secure.dm +++ b/code/game/objects/structures/crates_lockers/crates/secure.dm @@ -146,55 +146,6 @@ if(prob(30)) new /obj/item/storage/bag/trash/filled(src) -/obj/structure/closet/crate/secure/owned - name = "private crate" - desc = "A crate cover designed to only open for who purchased its contents." - icon_state = "privatecrate" - base_icon_state = "privatecrate" - ///Account of the person buying the crate if private purchasing. - var/datum/bank_account/buyer_account - ///Department of the person buying the crate if buying via the NIRN app. - var/datum/bank_account/department/department_account - ///Is the secure crate opened or closed? - var/privacy_lock = TRUE - ///Is the crate being bought by a person, or a budget card? - var/department_purchase = FALSE - -/obj/structure/closet/crate/secure/owned/examine(mob/user) - . = ..() - . += span_notice("It's locked with a privacy lock, and can only be unlocked by the buyer's ID.") - -/obj/structure/closet/crate/secure/owned/Initialize(mapload, datum/bank_account/_buyer_account) - . = ..() - buyer_account = _buyer_account - if(IS_DEPARTMENTAL_ACCOUNT(buyer_account)) - department_purchase = TRUE - department_account = buyer_account - -/obj/structure/closet/crate/secure/owned/togglelock(mob/living/user, silent) - if(privacy_lock) - if(!broken) - var/obj/item/card/id/id_card = user.get_idcard(TRUE) - if(id_card) - if(id_card.registered_account) - if(id_card.registered_account == buyer_account || (department_purchase && (id_card.registered_account?.account_job?.paycheck_department) == (department_account.department_id))) - if(iscarbon(user)) - add_fingerprint(user) - locked = !locked - user.visible_message(span_notice("[user] unlocks [src]'s privacy lock."), - span_notice("You unlock [src]'s privacy lock.")) - privacy_lock = FALSE - update_appearance() - else if(!silent) - to_chat(user, span_warning("Bank account does not match with buyer!")) - else if(!silent) - to_chat(user, span_warning("No linked bank account detected!")) - else if(!silent) - to_chat(user, span_warning("No ID detected!")) - else if(!silent) - to_chat(user, span_warning("[src] is broken!")) - else ..() - /obj/structure/closet/crate/secure/freezer/interdyne name = "\improper Interdyne freezer" desc = "This is an Interdyne Pharmaceuticals branded freezer. May or may not contain fresh organs." diff --git a/code/game/objects/structures/decorations.dm b/code/game/objects/structures/decorations.dm index fb05b6478e2a..62360925069e 100644 --- a/code/game/objects/structures/decorations.dm +++ b/code/game/objects/structures/decorations.dm @@ -607,3 +607,47 @@ . = ..() icon_state = "rocks[rand(1, 3)]" update_appearance() + +/obj/structure/decoration/rock/volcano + name = "plastic volcano pore" + desc = "A lovingly painted miniature plastic volcano." + icon = /obj/structure/flora/rock/volcano::icon + icon_state = /obj/structure/flora/rock/volcano::icon_state + +/obj/structure/decoration/rock/volcano/first + +/obj/structure/decoration/rock/volcano/second + icon_state = "volcano_2" + +/obj/structure/decoration/rock/volcano/third + icon_state = "volcano_3" + +/obj/structure/decoration/rock/volcano/fourth + icon_state = "volcano_4" + +/obj/structure/decoration/rock/volcano/fifth + icon_state = "volcano_5" + +/obj/structure/decoration/rock/volcano/style_random/Initialize(mapload) + . = ..() + icon_state = "volcano_[rand(1, 5)]" + update_appearance() + +/obj/structure/decoration/misc/glowgrowth + name = "plastic glowgrowth colony" + desc = "A large plastic immitation of bioluminescent fungi colony. Not so bioluminescent." + icon = /obj/structure/flora/ash/glowgrowth::icon + icon_state = /obj/structure/flora/ash/glowgrowth::icon_state + +/obj/structure/decoration/misc/glowgrowth/first + +/obj/structure/decoration/misc/glowgrowth/second + icon_state = "glowgrowth2" + +/obj/structure/decoration/misc/glowgrowth/third + icon_state = "glowgrowth3" + +/obj/structure/decoration/misc/glowgrowth/style_random/Initialize(mapload) + . = ..() + icon_state = "glowgrowth[rand(1, 3)]" + update_appearance() diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index a83946392d6e..6ad52ebdb6fa 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -285,16 +285,25 @@ building_window = new/obj/structure/window/reinforced/fulltile(drop_location()) //reinforced window else if(istype(tool, /obj/item/stack/sheet/titaniumglass)) building_window = new/obj/structure/window/reinforced/shuttle(drop_location()) + else if(istype(tool, /obj/item/stack/wall_filling/plastitaniumglass/basic)) + building_window = new/obj/structure/window/reinforced/plasma/plastitanium/windowfill(drop_location()) + else if(istype(tool, /obj/item/stack/wall_filling/plastitaniumglass/pod)) + building_window = new/obj/structure/window/reinforced/shuttle/survival_pod(drop_location()) else if(istype(tool, /obj/item/stack/sheet/plastitaniumglass)) building_window = new/obj/structure/window/reinforced/plasma/plastitanium(drop_location()) else if(istype(tool, /obj/item/stack/sheet/bronze)) building_window = new/obj/structure/window/bronze/fulltile(drop_location()) + else if(istype(tool, /obj/item/stack/sheet/runed_metal)) + building_window = new/obj/structure/window/cult/fulltile(drop_location()) else building_window = new/obj/structure/window/fulltile(drop_location()) //normal window building_window.setDir(dir_to_set) building_window.set_anchored(FALSE) building_window.state = 0 - to_spend.use(2) + if((istype(tool, /obj/item/stack/wall_filling))) + to_spend.use(1) + else + to_spend.use(2) to_chat(user, span_notice("You place [to_spend] on [src].")) return ITEM_INTERACT_SUCCESS //window placing end diff --git a/code/game/objects/structures/signs/_signs.dm b/code/game/objects/structures/signs/_signs.dm index 8e7aaf902f6c..c436b1c92713 100644 --- a/code/game/objects/structures/signs/_signs.dm +++ b/code/game/objects/structures/signs/_signs.dm @@ -181,11 +181,13 @@ if(!Adjacent(user)) //Make sure user is adjacent still. to_chat(user, span_warning("You need to stand next to the sign to change it!")) return ITEM_INTERACT_BLOCKING - user.visible_message(span_notice("You begin changing [src].")) + user.visible_message(span_notice("[user] begins changing [src]."), \ + span_notice("You begin changing [src].")) if(!do_after(user, 4 SECONDS, target = src)) return ITEM_INTERACT_BLOCKING set_sign_type(GLOB.editable_sign_types[choice]) - user.visible_message(span_notice("You finish changing the sign.")) + user.visible_message(span_notice("[user] finishes changing the sign."), \ + span_notice("You finish changing the sign.")) return ITEM_INTERACT_SUCCESS /obj/item/sign/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) diff --git a/code/game/objects/structures/signs/signs_departments.dm b/code/game/objects/structures/signs/signs_departments.dm index c71de5f99d8a..5356354da574 100644 --- a/code/game/objects/structures/signs/signs_departments.dm +++ b/code/game/objects/structures/signs/signs_departments.dm @@ -105,7 +105,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/departments/engineering, 32) desc = "A sign labelling an area where your life-giving air comes from." icon_state = "atmos" -MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/departments/engineering, 32) +MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/departments/atmospherics, 32) ///////SCIENCE diff --git a/code/game/objects/structures/spirit_board.dm b/code/game/objects/structures/spirit_board.dm index 3719f9da1b1b..d956a3d034d5 100644 --- a/code/game/objects/structures/spirit_board.dm +++ b/code/game/objects/structures/spirit_board.dm @@ -84,7 +84,7 @@ return FALSE //No feedback here, hiding the cooldown a little makes it harder to tell who's really picking letters. var/turf/play_turf = get_turf(src) - if(play_turf?.get_lumcount() > 0.2) + if(play_turf?.check_lumcount_above(0.2)) to_chat(ghost, span_warning("It's too bright here to use [src]!")) return FALSE diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 4925828b66ac..a337021246d5 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -113,7 +113,15 @@ return FALSE /obj/structure/window/narsie_act() + var/atom/place = loc add_atom_colour(NARSIE_WINDOW_COLOUR, FIXED_COLOUR_PRIORITY) + if(src.fulltile) + qdel(src) + new /obj/structure/window/cult/fulltile(place) + else + qdel(src) + new /obj/structure/window/cult(place) + return /obj/structure/window/singularity_pull(atom/singularity, current_size) ..() @@ -892,6 +900,51 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/tinted/frosted/spaw AddElement(/datum/element/tool_blocker, TOOL_WRENCH, TOOL_ACT_PRIMARY) AddElement(/datum/element/tool_blocker, TOOL_CROWBAR, TOOL_ACT_PRIMARY) +/obj/structure/window/reinforced/titanium + name = "shuttle window" + desc = "A reinforced, air-locked pod window." + icon_state = "titanium_window" + armor_type = /datum/armor/reinforced_shuttle + receive_ricochet_chance_mod = 1.2 + explosion_block = 3 + glass_type = /obj/item/stack/sheet/titaniumglass + custom_materials = list(/datum/material/alloy/titaniumglass = SHEET_MATERIAL_AMOUNT * 1) + +/obj/structure/window/reinforced/titanium/unanchored + anchored = FALSE + +MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/titanium/spawner, 0) + +/obj/structure/window/reinforced/titanium/unanchored + anchored = FALSE + +/obj/structure/window/reinforced/shuttle/survival_pod + name = "pod window" + icon = 'icons/obj/smooth_structures/pod_window.dmi' + icon_state = "pod_window-0" + base_icon_state = "pod_window" + smoothing_flags = SMOOTH_BITMASK + smoothing_groups = SMOOTH_GROUP_SHUTTLE_PARTS + SMOOTH_GROUP_SURVIVAL_TITANIUM_POD + canSmoothWith = SMOOTH_GROUP_SURVIVAL_TITANIUM_POD + glass_type = /obj/item/stack/wall_filling/plastitaniumglass/pod + glass_amount = 1 + glass_material_datum = /datum/material/alloy/plastitaniumglass + +/obj/structure/window/reinforced/shuttle/survival_pod/unanchored + anchored = FALSE + state = WINDOW_OUT_OF_FRAME + +/obj/structure/window/reinforced/survival_pod + name = "pod window" + icon_state = "plastitanium_window" + glass_type = /obj/item/stack/sheet/plastitaniumglass + glass_material_datum = /datum/material/alloy/plastitaniumglass + +/obj/structure/window/reinforced/survival_pod/unanchored + anchored = FALSE + +MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/survival_pod/spawner, 0) + /obj/structure/window/reinforced/plasma/plastitanium name = "plastitanium window" desc = "A durable looking window made of an alloy of plasma and titanium." @@ -915,6 +968,10 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/tinted/frosted/spaw rad_insulation = RAD_EXTREME_INSULATION glass_material_datum = /datum/material/alloy/plastitaniumglass +/obj/structure/window/reinforced/plasma/plastitanium/windowfill + glass_type = /obj/item/stack/wall_filling/plastitaniumglass/basic + glass_amount = 1 + /obj/structure/window/reinforced/plasma/plastitanium/indestructible name = "plastitanium window" desc = "A durable looking window made of an alloy of plasma and titanium." @@ -1040,8 +1097,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/tinted/frosted/spaw /obj/structure/window/bronze name = "brass window" desc = "A paper-thin pane of translucent yet reinforced brass. Nevermind, this is just weak bronze!" - icon = 'icons/obj/smooth_structures/structure_variations.dmi' - icon_state = "clockwork_window-single" + icon_state = "clockworkwindow" glass_type = /obj/item/stack/sheet/bronze custom_materials = list(/datum/material/bronze = SHEET_MATERIAL_AMOUNT * 1) @@ -1066,3 +1122,32 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/bronze/spawner, 0) /obj/structure/window/bronze/fulltile/unanchored anchored = FALSE + +/obj/structure/window/cult + name = "runed window" + desc = "A frame of runed metal projecting an arcane blood-red force field, that looks sort of like a window. Peculiar." + icon_state = "runedwindow" + glass_type = /obj/item/stack/sheet/runed_metal + custom_materials = list(/datum/material/runedmetal = SHEET_MATERIAL_AMOUNT * 1) + +MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/cult/spawner, 0) + +/obj/structure/window/cult/unanchored + anchored = FALSE + +/obj/structure/window/cult/fulltile + icon = 'icons/obj/smooth_structures/cult_window.dmi' + icon_state = "cult_window-0" + base_icon_state = "cult_window" + smoothing_flags = SMOOTH_BITMASK + smoothing_groups = SMOOTH_GROUP_WINDOW_FULLTILE_CULT + SMOOTH_GROUP_WINDOW_FULLTILE + canSmoothWith = SMOOTH_GROUP_WINDOW_FULLTILE_CULT + fulltile = TRUE + flags_1 = PREVENT_CLICK_UNDER_1 + obj_flags = CAN_BE_HIT + max_integrity = 50 + glass_amount = 2 + custom_materials = list(/datum/material/runedmetal = SHEET_MATERIAL_AMOUNT * 2) + +/obj/structure/window/cult/fulltile/unanchored + anchored = FALSE diff --git a/code/game/sound/sound_keys/sound_keys.dm b/code/game/sound/sound_keys/sound_keys.dm index 138594315331..00a9ba444c15 100644 --- a/code/game/sound/sound_keys/sound_keys.dm +++ b/code/game/sound/sound_keys/sound_keys.dm @@ -1151,3 +1151,10 @@ 'sound/effects/magic/void_deflect2.ogg', 'sound/effects/magic/void_deflect3.ogg', ) + +/datum/sound_effect/heavy_drop + key = SFX_HEAVY_DROP + file_paths = list( + 'sound/effects/heavy_drop1.ogg', + 'sound/effects/heavy_drop2.ogg', + ) diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm index 944899bc6692..3e942e4187e0 100644 --- a/code/game/turfs/change_turf.dm +++ b/code/game/turfs/change_turf.dm @@ -81,7 +81,6 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( var/old_lighting_corner_SW = lighting_corner_SW var/old_lighting_corner_NW = lighting_corner_NW var/old_directional_opacity = directional_opacity - var/old_dynamic_lumcount = dynamic_lumcount var/old_rcd_memory = rcd_memory var/old_explosion_throw_details = explosion_throw_details var/old_opacity = opacity @@ -151,8 +150,6 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( lighting_corner_SW = old_lighting_corner_SW lighting_corner_NW = old_lighting_corner_NW - dynamic_lumcount = old_dynamic_lumcount - lattice_underneath = old_lattice_underneath new_turf.weak_reference = old_ref diff --git a/code/game/turfs/open/floor/glass.dm b/code/game/turfs/open/floor/glass.dm index 5ff8f11511d2..eefb1f04e6c7 100644 --- a/code/game/turfs/open/floor/glass.dm +++ b/code/game/turfs/open/floor/glass.dm @@ -114,3 +114,43 @@ /turf/open/floor/glass/reinforced/plasma/airless initial_gas_mix = AIRLESS_ATMOS + +/turf/open/floor/glass/bronze + name = "bronze glass floor" + desc = "Do jump on it, there's no rat'var cultists around to give you smack for it." + icon = 'icons/turf/floors/glass_bronze.dmi' + icon_state = "glass_bronze-0" + base_icon_state = "glass_bronze" + floor_tile = /obj/item/stack/tile/bronze/window + starlight_color = COLOR_THEME_CLOCKWORK + alpha_to_leave = 206 + +/turf/open/floor/glass/cult + name = "cult glass floor" + desc = "If you jump on it, there's no guarantee you won't fall into some kinf of nightmare dimension." + icon = 'icons/turf/floors/glass_runic.dmi' + icon_state = "glass_runic-0" + base_icon_state = "glass_runic" + floor_tile = /obj/item/stack/tile/cult/window + starlight_color = COLOR_CULT_RED + alpha_to_leave = 206 + +/turf/open/floor/glass/titatanium + name = "titatanium glass floor" + desc = "Do jump on it, it can take it." + icon = 'icons/turf/floors/glass_titanium.dmi' + icon_state = "glass_titanium-0" + base_icon_state = "glass_titanium" + floor_tile = /obj/item/stack/tile/glass/titanium + starlight_color = COLOR_ASSISTANT_GRAY + alpha_to_leave = 206 + +/turf/open/floor/glass/plastitatanium + name = "plastitatanium glass floor" + desc = "Do jump on it, it can take it." + icon = 'icons/turf/floors/glass_plastitanium.dmi' + icon_state = "glass_plastitanium-0" + base_icon_state = "glass_plastitanium" + floor_tile = /obj/item/stack/tile/glass/plastitanium + starlight_color = COLOR_ASSISTANT_GRAY + alpha_to_leave = 206 diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 91d7c0d0a5c6..3d0f4e87c1d3 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -57,9 +57,6 @@ GLOBAL_LIST_EMPTY(station_turfs) ///Icon-smoothing variable to map a diagonal wall corner with a fixed underlay. var/list/fixed_underlay = null - ///Lumcount added by sources other than lighting datum objects, such as the overlay lighting component. - var/dynamic_lumcount = 0 - ///Bool, whether this turf will always be illuminated no matter what area it is in ///Makes it look blue, be warned var/space_lit = FALSE diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index e13afc05d769..1fa8ef4d1719 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -35,7 +35,8 @@ ////////////////////////////////////////////////////////////////////////////////////////////////ADMIN HELPER PROCS -ADMIN_VERB(spawn_atom, R_SPAWN, "Spawn", "Spawn an atom.", ADMIN_CATEGORY_DEBUG, object as text|null) +ADMIN_VERB(spawn_atom, R_SPAWN, "Spawn", "Spawn an atom.", ADMIN_CATEGORY_DEBUG) + VERB_ARG(object, VERB_ARG_TYPE_TYPEPATH, VERB_ARG_SOURCE_INPUT) var/static/list/atom_types if (isnull(atom_types)) atom_types = subtypesof(/atom) @@ -74,7 +75,8 @@ ADMIN_VERB(spawn_atom, R_SPAWN, "Spawn", "Spawn an atom.", ADMIN_CATEGORY_DEBUG, BLACKBOX_LOG_ADMIN_VERB("Spawn Atom") return TRUE -ADMIN_VERB(spawn_atom_pod, R_SPAWN, "PodSpawn", "Spawn an atom via supply drop.", ADMIN_CATEGORY_DEBUG, object as text) +ADMIN_VERB(spawn_atom_pod, R_SPAWN, "PodSpawn", "Spawn an atom via supply drop.", ADMIN_CATEGORY_DEBUG) + VERB_ARG(object, VERB_ARG_TYPE_TYPEPATH, VERB_ARG_SOURCE_INPUT) var/chosen = pick_closest_path(object) if(!chosen) return @@ -94,7 +96,8 @@ ADMIN_VERB(spawn_atom_pod, R_SPAWN, "PodSpawn", "Spawn an atom via supply drop." log_admin("[key_name(user)] pod-spawned [chosen] at [AREACOORD(user.mob)]") BLACKBOX_LOG_ADMIN_VERB("Podspawn Atom") -ADMIN_VERB(spawn_cargo, R_SPAWN, "Spawn Cargo", "Spawn a cargo crate.", ADMIN_CATEGORY_DEBUG, object as text) +ADMIN_VERB(spawn_cargo, R_SPAWN, "Spawn Cargo", "Spawn a cargo crate.", ADMIN_CATEGORY_DEBUG) + VERB_ARG(object, VERB_ARG_TYPE_TYPEPATH, VERB_ARG_SOURCE_INPUT) var/chosen = pick_closest_path(object, make_types_fancy(subtypesof(/datum/supply_pack))) if(!chosen) return diff --git a/code/modules/admin/admin_verb_panel.dm b/code/modules/admin/admin_verb_panel.dm new file mode 100644 index 000000000000..056e93a842e9 --- /dev/null +++ b/code/modules/admin/admin_verb_panel.dm @@ -0,0 +1,155 @@ +ADMIN_VERB(admin_verb_panel, R_NONE, "Admin Verb Panel", "Browse and invoke admin verbs.", ADMIN_CATEGORY_EVENTS) + if(user.admin_verb_panel) + var/datum/tgui/existing = SStgui.get_open_ui(user.mob, user.admin_verb_panel) + if(existing) + existing.close() + user.admin_verb_panel = null + return + var/datum/admin_verb_panel/panel = new(user) + user.admin_verb_panel = panel + panel.ui_interact(user.mob) + +/datum/admin_verb_panel + var/client/owner + var/selected_verb_type + var/typepath_parent = "/datum" + var/list/typepath_children = list() + +/datum/admin_verb_panel/New(client/user) + owner = user + +/datum/admin_verb_panel/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AdminVerbPanel") + ui.open() + +/datum/admin_verb_panel/ui_state(mob/user) + return ADMIN_STATE(R_NONE) + +/datum/admin_verb_panel/ui_static_data(mob/user) + var/list/data = list() + var/list/verbs_data = list() + var/list/categories = list() + + for(var/datum/admin_verb/verb_type as anything in SSadmin_verbs.admin_verbs_by_type) + var/datum/admin_verb/verb = SSadmin_verbs.admin_verbs_by_type[verb_type] + if(!SSadmin_verbs.verify_visibility(owner, verb)) + continue + if(!owner.holder.check_for_rights(verb.permissions)) + continue + + var/list/verb_entry = list( + "type" = "[verb_type]", + "name" = verb.name, + "description" = verb.description, + "category" = verb.category || "Unsorted", + "arguments" = list(), + ) + + for(var/datum/verb_arg_metadata/arg in verb.arguments) + var/list/arg_entry = list( + "name" = arg.name, + "arg_type" = arg.arg_type, + "type_path" = "[arg.type_path]", + "source" = arg.source, + ) + if(length(arg.options)) + arg_entry["options"] = arg.options + verb_entry["arguments"] += list(arg_entry) + + verbs_data += list(verb_entry) + categories |= list(verb.category || "Unsorted") + + data["verbs"] = verbs_data + data["categories"] = categories + return data + +/datum/admin_verb_panel/ui_data(mob/user) + var/list/data = list() + data["targets"] = build_target_list() + data["typepaths"] = list("parent" = typepath_parent, "paths" = typepath_children) + return data + +/datum/admin_verb_panel/proc/build_target_list() + if(!selected_verb_type) + return list() + + var/datum/admin_verb/verb = SSadmin_verbs.admin_verbs_by_type[selected_verb_type] + if(!verb || !length(verb.arguments)) + return list() + + var/datum/verb_arg_metadata/entity_arg + for(var/datum/verb_arg_metadata/arg in verb.arguments) + if(arg.arg_type & VERB_ARG_TYPE_ENTITY) + entity_arg = arg + break + + if(!entity_arg) + return list() + + var/list/source_atoms = entity_arg.get_targets(owner) + + var/list/targets = list() + for(var/atom/target in source_atoms) + var/list/entry = list( + "ref" = REF(target), + ) + if(ismob(target)) + var/mob/mob_target = target + entry["name"] = mob_target.name + entry["ckey"] = mob_target.ckey || "" + entry["job"] = mob_target.mind?.assigned_role?.title || "" + else if(isturf(target)) + var/turf/turf_target = target + var/area/turf_area = get_area(turf_target) + entry["name"] = "[turf_area?.name || turf_target.name] ([turf_target.x],[turf_target.y],[turf_target.z])" + else if(isarea(target)) + entry["name"] = target.name + else + entry["name"] = "[target.name] ([target.type])" + targets += list(entry) + return targets + +/datum/admin_verb_panel/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + if(..()) + return + + switch(action) + if("select_verb") + selected_verb_type = text2path(params["verb_type"]) + return TRUE + if("invoke") + var/verb_type = text2path(params["verb_type"]) + if(!verb_type) + return + var/list/raw_args = params["args"] + if(!islist(raw_args)) + raw_args = list() + var/alist/resolved_args = alist() + for(var/key in raw_args) + var/value = raw_args[key] + if(istext(value)) + var/located = locate(value) + if(located) + value = located + resolved_args[key] = value + SSadmin_verbs.dynamic_invoke_verb(owner, verb_type, resolved_args) + return TRUE + if("request_typepaths") + var/parent_text = params["parent"] + var/browse_type = text2path(parent_text) + if(isnull(browse_type)) + browse_type = /datum + typepath_parent = parent_text || "/datum" + typepath_children = list() + for(var/child_type in typesof(browse_type)) + if(child_type == browse_type) + continue + var/child_text = "[child_type]" + var/parent_len = length(typepath_parent) + var/remainder = copytext(child_text, parent_len + 1) + if(findtext(remainder, "/", 2)) + continue + typepath_children += child_text + return TRUE diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 31c437252282..0b75f4b140af 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -354,7 +354,8 @@ ADMIN_VERB(test_cardpack_distribution, R_DEBUG, "Test Cardpack Distribution", "T ADMIN_VERB(print_cards, R_DEBUG, "Print Cards", "Print all cards to chat.", ADMIN_CATEGORY_DEBUG) SStrading_card_game.printAllCards() -ADMIN_VERB(give_mob_action, R_FUN, "Give Mob Action", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/ability_recipient) +ADMIN_VERB(give_mob_action, R_FUN, "Give Mob Action", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN) + VERB_ARG_TYPED(ability_recipient, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) var/static/list/all_mob_actions = sort_list(subtypesof(/datum/action/cooldown/mob_cooldown), GLOBAL_PROC_REF(cmp_typepaths_asc)) var/static/list/actions_by_name = list() if (!length(actions_by_name)) @@ -400,7 +401,8 @@ ADMIN_VERB(give_mob_action, R_FUN, "Give Mob Action", ADMIN_VERB_NO_DESCRIPTION, log_admin("[key_name(user)] added mob ability [ability_type] to mob [ability_recipient].") BLACKBOX_LOG_ADMIN_VERB("Add Mob Ability") -ADMIN_VERB(remove_mob_action, R_FUN, "Remove Mob Action", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/removal_target) +ADMIN_VERB(remove_mob_action, R_FUN, "Remove Mob Action", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN) + VERB_ARG_TYPED(removal_target, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) var/list/target_abilities = list() for(var/datum/action/cooldown/mob_cooldown/ability in removal_target.actions) target_abilities[ability.name] = ability @@ -420,7 +422,8 @@ ADMIN_VERB(remove_mob_action, R_FUN, "Remove Mob Action", ADMIN_VERB_NO_DESCRIPT message_admins("[key_name_admin(user)] removed the ability [chosen_ability] from [key_name_admin(removal_target)].") BLACKBOX_LOG_ADMIN_VERB("Remove Mob Ability") -ADMIN_VERB(give_spell, R_FUN, "Give Spell", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/spell_recipient) +ADMIN_VERB(give_spell, R_FUN, "Give Spell", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN) + VERB_ARG_TYPED(spell_recipient, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) var/which = tgui_alert(user, "Chose by name or by type path?", "Chose option", list("Name", "Typepath")) if(!which) return @@ -467,7 +470,8 @@ ADMIN_VERB(give_spell, R_FUN, "Give Spell", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CAT to_chat(user, span_userdanger("Spells given to mindless mobs will belong to the mob and not their mind, \ and as such will not be transferred if their mind changes body (Such as from Mindswap).")) -ADMIN_VERB(remove_spell, R_FUN, "Remove Spell", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/removal_target) +ADMIN_VERB(remove_spell, R_FUN, "Remove Spell", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN) + VERB_ARG_TYPED(removal_target, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) var/list/target_spell_list = list() for(var/datum/action/cooldown/spell/spell in removal_target.actions) target_spell_list[spell.name] = spell @@ -487,7 +491,8 @@ ADMIN_VERB(remove_spell, R_FUN, "Remove Spell", ADMIN_VERB_NO_DESCRIPTION, ADMIN message_admins("[key_name_admin(user)] removed the spell [chosen_spell] from [key_name_admin(removal_target)].") BLACKBOX_LOG_ADMIN_VERB("Remove Spell") -ADMIN_VERB(give_disease, R_FUN, "Give Disease", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/living/victim) +ADMIN_VERB(give_disease, R_FUN, "Give Disease", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN) + VERB_ARG_TYPED(victim, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob/living) var/datum/disease/disease = tgui_input_list(user, "Choose the disease to give to that guy", "ACHOO", sort_list(SSdisease.diseases, GLOBAL_PROC_REF(cmp_typepaths_asc))) if(!disease) return @@ -496,7 +501,8 @@ ADMIN_VERB(give_disease, R_FUN, "Give Disease", ADMIN_VERB_NO_DESCRIPTION, ADMIN log_admin("[key_name(user)] gave [key_name(victim)] the disease [disease].") message_admins(span_adminnotice("[key_name_admin(user)] gave [key_name_admin(victim)] the disease [disease].")) -ADMIN_VERB_AND_CONTEXT_MENU(object_say, R_FUN, "OSay", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, obj/speaker) +ADMIN_VERB_AND_CONTEXT_MENU(object_say, R_FUN, "OSay", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, /obj) + VERB_ARG_TYPED(speaker, VERB_ARG_TYPE_OBJ, VERB_ARG_SOURCE_WORLD, /obj) var/message = tgui_input_text(user, "What do you want the message to be?", "Make Sound", encode = FALSE) if(!message) return @@ -543,7 +549,8 @@ ADMIN_VERB(deadmin, R_NONE, "DeAdmin", "Shed your admin powers.", ADMIN_CATEGORY message_admins("[key_name_admin(user)] deadminned themselves.") BLACKBOX_LOG_ADMIN_VERB("Deadmin") -ADMIN_VERB(populate_world, R_DEBUG, "Populate World", "Populate the world with test mobs.", ADMIN_CATEGORY_DEBUG, amount = 50 as num) +ADMIN_VERB(populate_world, R_DEBUG, "Populate World", "Populate the world with test mobs.", ADMIN_CATEGORY_DEBUG) + VERB_ARG(amount, VERB_ARG_TYPE_NUM, VERB_ARG_SOURCE_INPUT) for (var/i in 1 to amount) var/turf/tile = get_safe_random_station_turf_equal_weight() var/mob/living/carbon/human/hooman = new(tile) @@ -732,7 +739,8 @@ ADMIN_VERB(create_mob_worm, R_FUN, "Create Mob Worm", "Attach a linked list of m segment.AddComponent(/datum/component/mob_chain, front = previous) previous = segment -ADMIN_VERB(give_ai_controller, R_FUN, "Give AI Controller", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/living/my_guy) +ADMIN_VERB(give_ai_controller, R_FUN, "Give AI Controller", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN) + VERB_ARG_TYPED(my_guy, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob/living) var/static/list/controllers = subtypesof(/datum/admin_ai_template) var/static/list/controllers_by_name = list() if (!length(controllers_by_name)) @@ -776,7 +784,8 @@ ADMIN_VERB(open_event_logger, R_DEBUG, "Open Event Logger", "Open the event logg ADMIN_VERB(view_behavior_tree, R_DEBUG, "View Behavior Tree", "Inspect the AI behavior tree of a mob.", ADMIN_CATEGORY_DEBUG) GLOB.bt_viewer.ui_interact(user.mob) -ADMIN_VERB(new_blackmarket_item, R_BUILD, "Create Black Market Item", "Add an item to the black market for purchase.", ADMIN_CATEGORY_EVENTS, object as text) +ADMIN_VERB(new_blackmarket_item, R_BUILD, "Create Black Market Item", "Add an item to the black market for purchase.", ADMIN_CATEGORY_EVENTS) + VERB_ARG(object, VERB_ARG_TYPE_TYPEPATH, VERB_ARG_SOURCE_INPUT) if(!object) to_chat(user, span_boldwarning("Failed! Provide a full or partial typepath!")) return diff --git a/code/modules/admin/callproc/callproc.dm b/code/modules/admin/callproc/callproc.dm index 0bf184689063..4598ed057ea4 100644 --- a/code/modules/admin/callproc/callproc.dm +++ b/code/modules/admin/callproc/callproc.dm @@ -230,7 +230,8 @@ GLOBAL_PROTECT(LastAdminCalledProc) return (GLOB.AdminProcCaller && GLOB.AdminProcCaller == usr?.client?.ckey) || (GLOB.AdminProcCallHandler && usr == GLOB.AdminProcCallHandler) #endif -ADMIN_VERB_ONLY_CONTEXT_MENU(call_proc_datum, R_DEBUG, "Atom ProcCall", datum/thing as null|area|mob|obj|turf) +ADMIN_VERB_ONLY_CONTEXT_MENU(call_proc_datum, R_DEBUG, "Atom ProcCall", /datum) + VERB_ARG_TYPED(thing, VERB_ARG_TYPE_AREA | VERB_ARG_TYPE_OBJ | VERB_ARG_TYPE_TURF | VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /datum) var/procname = input(user, "Proc name, eg: fake_blood","Proc:", null) as text|null if(!procname) return diff --git a/code/modules/admin/smites/cluwndice.dm b/code/modules/admin/smites/cluwndice.dm index 9838bfd9a898..e024a7ef51cd 100644 --- a/code/modules/admin/smites/cluwndice.dm +++ b/code/modules/admin/smites/cluwndice.dm @@ -10,5 +10,5 @@ return var/mob/living/carbon/carbon_target = target - carbon_target.set_blood_type(BLOOD_TYPE_CLOWN) + carbon_target.set_blood_type(/datum/blood_type/clown) SEND_SOUND(carbon_target, 'sound/items/bikehorn.ogg') diff --git a/code/modules/admin/verb_datums/_admin_verb_datum.dm b/code/modules/admin/verb_datums/_admin_verb_datum.dm index 6255d962c40c..ab155e10061c 100644 --- a/code/modules/admin/verb_datums/_admin_verb_datum.dm +++ b/code/modules/admin/verb_datums/_admin_verb_datum.dm @@ -12,6 +12,7 @@ GENERAL_PROTECT_DATUM(/datum/admin_verb) var/permissions //! The permissions required to use the verb. var/visibility_flag //! The flag that determines if the verb is visible. VAR_PROTECTED/verb_path //! The path to the verb proc. + var/list/datum/verb_arg_metadata/arguments //! Metadata about the verb's arguments. /datum/admin_verb/Destroy(force) if(!force) @@ -25,3 +26,6 @@ GENERAL_PROTECT_DATUM(/datum/admin_verb) /// Unassigns the verb from the admin. /datum/admin_verb/proc/unassign_from_client(client/admin) remove_verb(admin, verb_path) + +/datum/admin_verb/proc/get_verb_path() + return verb_path diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index 5121dab2f00f..7bea5628f938 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -195,7 +195,8 @@ state = SDQL2_STATE_ERROR;\ CRASH("SDQL2 fatal error");}; -ADMIN_VERB(sdql2_query, R_DEBUG, "SDQL2 Query", "Run a SDQL2 query.", ADMIN_CATEGORY_DEBUG, query_text as message) +ADMIN_VERB(sdql2_query, R_DEBUG, "SDQL2 Query", "Run a SDQL2 query.", ADMIN_CATEGORY_DEBUG) + VERB_ARG(query_text, VERB_ARG_TYPE_MESSAGE, VERB_ARG_SOURCE_INPUT) var/prompt = tgui_alert(user, "Run SDQL2 Query?", "SDQL2", list("Yes", "Cancel")) if (prompt != "Yes") return diff --git a/code/modules/admin/verbs/admin.dm b/code/modules/admin/verbs/admin.dm index eee0d0965325..1a02eb8418ec 100644 --- a/code/modules/admin/verbs/admin.dm +++ b/code/modules/admin/verbs/admin.dm @@ -27,7 +27,8 @@ ADMIN_VERB(announce, R_ADMIN, "Announce", "Announce your desires to the world.", log_admin("Announce: [key_name(user)] : [message]") BLACKBOX_LOG_ADMIN_VERB("Announce") -ADMIN_VERB(unprison, R_ADMIN, "UnPrison", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/prisoner) +ADMIN_VERB(unprison, R_ADMIN, "UnPrison", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN) + VERB_ARG_TYPED(prisoner, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) if(!is_centcom_level(prisoner.z)) tgui_alert(user, "[prisoner.name] is not prisoned.") return @@ -149,7 +150,8 @@ ADMIN_VERB(cmd_admin_check_player_exp, R_ADMIN, "Player Playtime", "View player /////////////////////////////////////////////////////////////////////////////////////////////// -ADMIN_VERB(drop_everything, R_ADMIN, "Drop Everything", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/living/dropee) +ADMIN_VERB(drop_everything, R_ADMIN, "Drop Everything", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN) + VERB_ARG_TYPED(dropee, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob/living) var/confirm = tgui_alert(user, "Make [dropee] drop everything?", "Message", list("Yes", "No")) if(confirm != "Yes") return diff --git a/code/modules/admin/verbs/adminevents.dm b/code/modules/admin/verbs/adminevents.dm index eef7d16c24e6..ab9a5c01d48f 100644 --- a/code/modules/admin/verbs/adminevents.dm +++ b/code/modules/admin/verbs/adminevents.dm @@ -1,6 +1,7 @@ // Admin Tab - Event Verbs -ADMIN_VERB_ONLY_CONTEXT_MENU(cmd_admin_subtle_message, R_ADMIN, "Subtle Message", mob/target) +ADMIN_VERB_ONLY_CONTEXT_MENU(cmd_admin_subtle_message, R_ADMIN, "Subtle Message", /mob) + VERB_ARG_TYPED(target, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) message_admins("[key_name_admin(user)] has started answering [ADMIN_LOOKUPFLW(target)]'s prayer.") var/msg = input(user, "Message:", "Subtle PM to [target.key]") as text|null @@ -19,7 +20,8 @@ ADMIN_VERB_ONLY_CONTEXT_MENU(cmd_admin_subtle_message, R_ADMIN, "Subtle Message" admin_ticket_log(target, msg) BLACKBOX_LOG_ADMIN_VERB("Subtle Message") -ADMIN_VERB_ONLY_CONTEXT_MENU(cmd_admin_headset_message, R_ADMIN, "Headset Message", mob/target) +ADMIN_VERB_ONLY_CONTEXT_MENU(cmd_admin_headset_message, R_ADMIN, "Headset Message", /mob) + VERB_ARG_TYPED(target, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) user.admin_headset_message(target) /client/proc/admin_headset_message(mob/target in GLOB.mob_list, sender = null) @@ -74,7 +76,8 @@ ADMIN_VERB(cmd_admin_world_narrate, R_ADMIN, "Global Narrate", "Send a direct na message_admins(span_adminnotice("[key_name_admin(user)] Sent a global narrate")) BLACKBOX_LOG_ADMIN_VERB("Global Narrate") -ADMIN_VERB_ONLY_CONTEXT_MENU(cmd_admin_local_narrate, R_ADMIN, "Local Narrate", atom/locale) +ADMIN_VERB_ONLY_CONTEXT_MENU(cmd_admin_local_narrate, R_ADMIN, "Local Narrate", /atom) + VERB_ARG_TYPED(locale, VERB_ARG_TYPE_ATOM, VERB_ARG_SOURCE_WORLD, /atom) var/range = input(user, "Range:", "Narrate to mobs within how many tiles:", 7) as num|null if(!range) return @@ -89,7 +92,8 @@ ADMIN_VERB_ONLY_CONTEXT_MENU(cmd_admin_local_narrate, R_ADMIN, "Local Narrate", message_admins(span_adminnotice(" LocalNarrate: [key_name_admin(user)] at [ADMIN_VERBOSEJMP(locale)]: [msg]
")) BLACKBOX_LOG_ADMIN_VERB("Local Narrate") -ADMIN_VERB_ONLY_CONTEXT_MENU(cmd_admin_direct_narrate, R_ADMIN, "Direct Narrate", mob/target) +ADMIN_VERB_ONLY_CONTEXT_MENU(cmd_admin_direct_narrate, R_ADMIN, "Direct Narrate", /mob) + VERB_ARG_TYPED(target, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) var/msg = input(user, "Message:", "Enter the text you wish to appear to your target:") as text|null if( !msg ) @@ -157,7 +161,7 @@ ADMIN_VERB(change_sec_level, R_ADMIN, "Set Security Level", "Changes the securit message_admins("[key_name_admin(user)] changed the security level to [level]") BLACKBOX_LOG_ADMIN_VERB("Set Security Level [capitalize(level)]") -ADMIN_VERB(command_report_footnote, R_FUN, "Command Report Footnote", "Adds a footnote to the roundstart command report.", ADMIN_CATEGORY_EVENTS) +ADMIN_VERB(command_report_footnote, R_ADMIN, "Command Report Footnote", "Adds a footnote to the roundstart command report.", ADMIN_CATEGORY_EVENTS) var/datum/command_footnote/command_report_footnote = new /datum/command_footnote() GLOB.communications_controller.block_command_report += 1 //Add a blocking condition to the counter until the inputs are done. diff --git a/code/modules/admin/verbs/adminfun.dm b/code/modules/admin/verbs/adminfun.dm index 0fa1efc54e52..98ba3eaa0dc9 100644 --- a/code/modules/admin/verbs/adminfun.dm +++ b/code/modules/admin/verbs/adminfun.dm @@ -1,4 +1,5 @@ -ADMIN_VERB(admin_explosion, R_ADMIN|R_FUN, "Explosion", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, atom/orignator as obj|mob|turf) +ADMIN_VERB(admin_explosion, R_ADMIN|R_FUN, "Explosion", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN) + VERB_ARG_TYPED(orignator, VERB_ARG_TYPE_OBJ | VERB_ARG_TYPE_TURF | VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /atom) var/devastation = input(user, "Range of total devastation. -1 to none", "Input") as num|null if(devastation == null) return @@ -25,7 +26,8 @@ ADMIN_VERB(admin_explosion, R_ADMIN|R_FUN, "Explosion", ADMIN_VERB_NO_DESCRIPTIO message_admins("[key_name_admin(user)] created an explosion ([devastation],[heavy],[light],[flames]) at [AREACOORD(orignator)]") BLACKBOX_LOG_ADMIN_VERB("Explosion") -ADMIN_VERB(admin_emp, R_ADMIN|R_FUN, "EM Pulse", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, atom/orignator as obj|mob|turf) +ADMIN_VERB(admin_emp, R_ADMIN|R_FUN, "EM Pulse", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN) + VERB_ARG_TYPED(orignator, VERB_ARG_TYPE_OBJ | VERB_ARG_TYPE_TURF | VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /atom) var/heavy = input(user, "Range of heavy pulse.", "Input") as num|null if(heavy == null) return @@ -39,7 +41,8 @@ ADMIN_VERB(admin_emp, R_ADMIN|R_FUN, "EM Pulse", ADMIN_VERB_NO_DESCRIPTION, ADMI message_admins("[key_name_admin(user)] created an EM Pulse ([heavy],[light]) at [AREACOORD(orignator)]") BLACKBOX_LOG_ADMIN_VERB("EM Pulse") -ADMIN_VERB(gib_them, R_ADMIN, "Gib", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/victim) +ADMIN_VERB(gib_them, R_ADMIN, "Gib", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN) + VERB_ARG_TYPED(victim, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) var/confirm = tgui_alert(user, "Drop a brain?", "Confirm", list("Yes", "No","Cancel")) || "Cancel" if(confirm == "Cancel") return @@ -255,7 +258,8 @@ ADMIN_VERB(mass_modify_traits, R_FUN, "Mass Modify Traits", "Adds or removes a t out += GLOB.admin_visible_traits[key] return out -ADMIN_VERB_AND_CONTEXT_MENU(admin_smite, R_ADMIN|R_FUN, "Smite", "Smite a player with divine power.", ADMIN_CATEGORY_FUN, mob/living/target) +ADMIN_VERB_AND_CONTEXT_MENU(admin_smite, R_ADMIN|R_FUN, "Smite", "Smite a player with divine power.", ADMIN_CATEGORY_FUN, /mob/living) + VERB_ARG_TYPED(target, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob/living) var/punishment = tgui_input_list(user, "Choose a punishment", "DIVINE SMITING", GLOB.smites) if(QDELETED(target) || !punishment) diff --git a/code/modules/admin/verbs/admingame.dm b/code/modules/admin/verbs/admingame.dm index e7b261a21c53..8f1115ac4af6 100644 --- a/code/modules/admin/verbs/admingame.dm +++ b/code/modules/admin/verbs/admingame.dm @@ -1,7 +1,8 @@ ADMIN_VERB(cmd_player_panel, R_ADMIN, "Player Panel", "See all players and their Player Panel.", ADMIN_CATEGORY_GAME) user.holder.player_panel_new() -ADMIN_VERB_ONLY_CONTEXT_MENU(show_player_panel, R_ADMIN, "Show Player Panel", mob/player) +ADMIN_VERB_ONLY_CONTEXT_MENU(show_player_panel, R_ADMIN, "Show Player Panel", /mob) + VERB_ARG_TYPED(player, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) log_admin("[key_name(user)] checked the individual player panel for [key_name(player)][isobserver(user.mob)?"":" while in game"].") if(!player) @@ -155,7 +156,8 @@ ADMIN_VERB_ONLY_CONTEXT_MENU(show_player_panel, R_ADMIN, "Show Player Panel", mo user << browse(body, "window=adminplayeropts-[REF(player)];size=550x540") BLACKBOX_LOG_ADMIN_VERB("Player Panel") -ADMIN_VERB_ONLY_CONTEXT_MENU(show_occupants_player_panel, R_ADMIN, "Show Occupants PP", obj/target) +ADMIN_VERB_ONLY_CONTEXT_MENU(show_occupants_player_panel, R_ADMIN, "Show Occupants PP", /obj) + VERB_ARG_TYPED(target, VERB_ARG_TYPE_OBJ, VERB_ARG_SOURCE_WORLD, /obj) var/list/options = list() // Vehicles @@ -225,7 +227,8 @@ ADMIN_VERB_ONLY_CONTEXT_MENU(show_occupants_player_panel, R_ADMIN, "Show Occupan SSadmin_verbs.dynamic_invoke_verb(user, /datum/admin_verb/show_player_panel, selected_mob) return -GAME_VERB_PROC(/client, cmd_admin_godmode, "Godmode", "Admin.Game", mob/mob) +GAME_VERB_PROC(/client, cmd_admin_godmode, "Godmode", "Admin.Game") + VERB_ARG_TYPED(mob, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) if(!check_rights(R_ADMIN)) return @@ -448,7 +451,8 @@ ADMIN_VERB(combo_hud, R_ADMIN, "Toggle Combo HUD", "Toggles the Admin Combo HUD. #undef ADMIN_HUDS -ADMIN_VERB(show_traitor_panel, R_ADMIN, "Show Traitor Panel", "Edit mobs's memory and role", ADMIN_CATEGORY_GAME, mob/target_mob) +ADMIN_VERB(show_traitor_panel, R_ADMIN, "Show Traitor Panel", "Edit mobs's memory and role", ADMIN_CATEGORY_GAME) + VERB_ARG_TYPED(target_mob, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) var/datum/mind/target_mind = target_mob.mind if(!target_mind) to_chat(user, "This mob has no mind!", confidential = TRUE) @@ -459,7 +463,8 @@ ADMIN_VERB(show_traitor_panel, R_ADMIN, "Show Traitor Panel", "Edit mobs's memor target_mind.traitor_panel() BLACKBOX_LOG_ADMIN_VERB("Traitor Panel") -ADMIN_VERB(show_skill_panel, R_ADMIN, "Show Skill Panel", "Edit mobs's experience and skill levels", ADMIN_CATEGORY_GAME, mob/target_mob) +ADMIN_VERB(show_skill_panel, R_ADMIN, "Show Skill Panel", "Edit mobs's experience and skill levels", ADMIN_CATEGORY_GAME) + VERB_ARG_TYPED(target_mob, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) var/datum/mind/target_mind if(istype(target_mob, /datum/mind)) target_mind = target_mob diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 45980d62b388..2485570f0f3d 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -792,7 +792,8 @@ GLOBAL_DATUM_INIT(admin_help_ui_handler, /datum/admin_help_ui_handler, new) new /datum/admin_help(message, user_client, FALSE, urgent) -GAME_VERB_HIDDEN(/client, no_tgui_adminhelp, "NoTguiAdminhelp", message as message) +GAME_VERB_HIDDEN(/client, no_tgui_adminhelp, "NoTguiAdminhelp") + VERB_ARG(message, VERB_ARG_TYPE_MESSAGE, VERB_ARG_SOURCE_INPUT) if(adminhelptimerid) return diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm index c20e5905d7c3..ed2f2509db03 100644 --- a/code/modules/admin/verbs/adminjump.dm +++ b/code/modules/admin/verbs/adminjump.dm @@ -1,4 +1,5 @@ -ADMIN_VERB(jump_to_area, R_ADMIN, "Jump To Area", "Jumps to the specified area.", ADMIN_CATEGORY_GAME, area/target in get_sorted_areas()) +ADMIN_VERB(jump_to_area, R_ADMIN, "Jump To Area", "Jumps to the specified area.", ADMIN_CATEGORY_GAME) + VERB_ARG_TYPED(target, VERB_ARG_TYPE_AREA, VERB_ARG_SOURCE_WORLD, /area) var/turf/drop_location top_level: for(var/list/zlevel_turfs as anything in target.get_zlevel_turf_lists()) @@ -17,19 +18,24 @@ ADMIN_VERB(jump_to_area, R_ADMIN, "Jump To Area", "Jumps to the specified area." message_admins("[key_name_admin(user)] jumped to [AREACOORD(drop_location)]") BLACKBOX_LOG_ADMIN_VERB("Jump To Area") -ADMIN_VERB_ONLY_CONTEXT_MENU(jump_to_turf, R_ADMIN, "Jump To Turf", turf/locale) +ADMIN_VERB_ONLY_CONTEXT_MENU(jump_to_turf, R_ADMIN, "Jump To Turf", /turf) + VERB_ARG_TYPED(locale, VERB_ARG_TYPE_TURF, VERB_ARG_SOURCE_WORLD, /turf) log_admin("[key_name(user)] jumped to [AREACOORD(locale)]") message_admins("[key_name_admin(user)] jumped to [AREACOORD(locale)]") user.mob.abstract_move(locale) BLACKBOX_LOG_ADMIN_VERB("Jump To Turf") -ADMIN_VERB_ONLY_CONTEXT_MENU(jump_to_mob, R_ADMIN, "Jump To Mob", mob/target) +ADMIN_VERB_ONLY_CONTEXT_MENU(jump_to_mob, R_ADMIN, "Jump To Mob", /mob) + VERB_ARG_TYPED(target, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) user.mob.abstract_move(target.loc) log_admin("[key_name(user)] jumped to [key_name(target)]") message_admins("[key_name_admin(user)] jumped to [ADMIN_LOOKUPFLW(target)] at [AREACOORD(target)]") BLACKBOX_LOG_ADMIN_VERB("Jump To Mob") -ADMIN_VERB(jump_to_coord, R_ADMIN, "Jump To Coordinate", "Jump to a specific coordinate in the game world.", ADMIN_CATEGORY_GAME, cx as num, cy as num, cz as num) +ADMIN_VERB(jump_to_coord, R_ADMIN, "Jump To Coordinate", "Jump to a specific coordinate in the game world.", ADMIN_CATEGORY_GAME) + VERB_ARG(cx, VERB_ARG_TYPE_NUM, VERB_ARG_SOURCE_INPUT) + VERB_ARG(cy, VERB_ARG_TYPE_NUM, VERB_ARG_SOURCE_INPUT) + VERB_ARG(cz, VERB_ARG_TYPE_NUM, VERB_ARG_SOURCE_INPUT) var/turf/where_we_droppin = locate(cx, cy, cz) if(isnull(where_we_droppin)) to_chat(user, span_warning("Invalid coordinates.")) @@ -71,7 +77,8 @@ ADMIN_VERB(jump_to_ghost, R_ADMIN, "Jump To Ghost", "Jump your body to your Agho SSadmin_verbs.dynamic_invoke_verb(user, /datum/admin_verb/admin_ghost) BLACKBOX_LOG_ADMIN_VERB("Jump To Ghost") -ADMIN_VERB_AND_CONTEXT_MENU(get_mob, R_ADMIN, "Get Mob", "Teleport a mob to your location.", ADMIN_CATEGORY_GAME, mob/target) +ADMIN_VERB_AND_CONTEXT_MENU(get_mob, R_ADMIN, "Get Mob", "Teleport a mob to your location.", ADMIN_CATEGORY_GAME, /mob) + VERB_ARG_TYPED(target, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) var/atom/loc = get_turf(user.mob) target.admin_teleport(loc) BLACKBOX_LOG_ADMIN_VERB("Get Mob") @@ -112,7 +119,8 @@ ADMIN_VERB(get_key, R_ADMIN, "Get Key", "Teleport the player with the provided k M.forceMove(get_turf(user)) BLACKBOX_LOG_ADMIN_VERB("Get Key") -ADMIN_VERB_AND_CONTEXT_MENU(send_mob, R_ADMIN, "Send Mob", "Teleport the specified mob to an area of your choosing.", ADMIN_CATEGORY_GAME, mob/jumper) +ADMIN_VERB_AND_CONTEXT_MENU(send_mob, R_ADMIN, "Send Mob", "Teleport the specified mob to an area of your choosing.", ADMIN_CATEGORY_GAME, /mob) + VERB_ARG_TYPED(jumper, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) var/list/sorted_areas = get_sorted_areas() if(!length(sorted_areas)) to_chat(user, "No areas found.", confidential = TRUE) diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index dca693429c87..b0ae7f64fe75 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -13,7 +13,8 @@ // We also make SURE to fail loud, IE: if something stops the message from reaching the recipient, the sender HAS to know // If you "refactor" this to make it "cleaner" I will send you to hell -ADMIN_VERB_ONLY_CONTEXT_MENU(cmd_admin_pm_context, R_NONE, "Admin PM Mob", mob/target) +ADMIN_VERB_ONLY_CONTEXT_MENU(cmd_admin_pm_context, R_NONE, "Admin PM Mob", /mob) + VERB_ARG_TYPED(target, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) if(!ismob(target)) to_chat( src, diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm index 1f4f6ebf87c8..dcd4869861b6 100644 --- a/code/modules/admin/verbs/adminsay.dm +++ b/code/modules/admin/verbs/adminsay.dm @@ -1,4 +1,5 @@ -ADMIN_VERB(cmd_admin_say, R_NONE, "ASay", "Send a message to other admins", ADMIN_CATEGORY_MAIN, message as text) +ADMIN_VERB(cmd_admin_say, R_NONE, "ASay", "Send a message to other admins", ADMIN_CATEGORY_MAIN) + VERB_ARG(message, VERB_ARG_TYPE_TEXT, VERB_ARG_SOURCE_INPUT) message = emoji_parse(copytext_char(sanitize(message), 1, MAX_MESSAGE_LEN)) if(!message) return diff --git a/code/modules/admin/verbs/borgpanel.dm b/code/modules/admin/verbs/borgpanel.dm index 4714bd6cd1f1..f73c3b10d637 100644 --- a/code/modules/admin/verbs/borgpanel.dm +++ b/code/modules/admin/verbs/borgpanel.dm @@ -1,4 +1,5 @@ -ADMIN_VERB(borg_panel, R_ADMIN, "Show Borg Panel", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/living/silicon/robot/borgo) +ADMIN_VERB(borg_panel, R_ADMIN, "Show Borg Panel", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN) + VERB_ARG_TYPED(borgo, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob/living/silicon/robot) var/datum/borgpanel/borgpanel = new(user.mob, borgo) borgpanel.ui_interact(user.mob) diff --git a/code/modules/admin/verbs/deadsay.dm b/code/modules/admin/verbs/deadsay.dm index c330618d8b4c..f0d9792442fa 100644 --- a/code/modules/admin/verbs/deadsay.dm +++ b/code/modules/admin/verbs/deadsay.dm @@ -1,5 +1,6 @@ -ADMIN_VERB(dsay, R_NONE, "DSay", "Speak to the dead.", ADMIN_CATEGORY_GAME, message as text) +ADMIN_VERB(dsay, R_NONE, "DSay", "Speak to the dead.", ADMIN_CATEGORY_GAME) + VERB_ARG(message, VERB_ARG_TYPE_TEXT, VERB_ARG_SOURCE_INPUT) if(user.prefs.muted & MUTE_DEADCHAT) to_chat(user, span_danger("You cannot send DSAY messages (muted)."), confidential = TRUE) return diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 926ae7df0bb8..5bbef5a0c038 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -13,7 +13,8 @@ ADMIN_VERB(air_status, R_DEBUG, "Air Status In Location", "Gets the air status f atmos_scan(user.mob, user_turf, silent = TRUE) BLACKBOX_LOG_ADMIN_VERB("Air Status In Location") -ADMIN_VERB(cmd_admin_robotize, R_FUN, "Make Cyborg", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/target) +ADMIN_VERB(cmd_admin_robotize, R_FUN, "Make Cyborg", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN) + VERB_ARG_TYPED(target, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) if(!SSticker.HasRoundStarted()) tgui_alert(user, "Wait until the game starts") return @@ -37,7 +38,9 @@ ADMIN_VERB(cmd_admin_robotize, R_FUN, "Make Cyborg", ADMIN_VERB_NO_DESCRIPTION, return return types[key] -ADMIN_VERB(cmd_del_all, R_DEBUG|R_SPAWN, "Del-All", "Delete all datums with the specified type.", ADMIN_CATEGORY_DEBUG, object as text) +ADMIN_VERB(cmd_del_all, R_DEBUG|R_SPAWN, "Del-All", "Delete all datums with the specified type.", ADMIN_CATEGORY_DEBUG) + + VERB_ARG(object, VERB_ARG_TYPE_TYPEPATH, VERB_ARG_SOURCE_INPUT) var/type_to_del = user.poll_type_to_del(object) if(!type_to_del) return @@ -52,7 +55,9 @@ ADMIN_VERB(cmd_del_all, R_DEBUG|R_SPAWN, "Del-All", "Delete all datums with the message_admins("[key_name_admin(user)] has deleted all ([counter]) instances of [type_to_del].") BLACKBOX_LOG_ADMIN_VERB("Delete All") -ADMIN_VERB(cmd_del_all_force, R_DEBUG|R_SPAWN, "Force-Del-All", "Forcibly delete all datums with the specified type.", ADMIN_CATEGORY_DEBUG, object as text) +ADMIN_VERB(cmd_del_all_force, R_DEBUG|R_SPAWN, "Force-Del-All", "Forcibly delete all datums with the specified type.", ADMIN_CATEGORY_DEBUG) + + VERB_ARG(object, VERB_ARG_TYPE_TYPEPATH, VERB_ARG_SOURCE_INPUT) var/type_to_del = user.poll_type_to_del(object) if(!type_to_del) return @@ -67,7 +72,9 @@ ADMIN_VERB(cmd_del_all_force, R_DEBUG|R_SPAWN, "Force-Del-All", "Forcibly delete message_admins("[key_name_admin(user)] has force-deleted all ([counter]) instances of [type_to_del].") BLACKBOX_LOG_ADMIN_VERB("Force-Delete All") -ADMIN_VERB(cmd_del_all_hard, R_DEBUG|R_SPAWN, "Hard-Del-All", "Hard delete all datums with the specified type.", ADMIN_CATEGORY_DEBUG, object as text) +ADMIN_VERB(cmd_del_all_hard, R_DEBUG|R_SPAWN, "Hard-Del-All", "Hard delete all datums with the specified type.", ADMIN_CATEGORY_DEBUG) + + VERB_ARG(object, VERB_ARG_TYPE_TYPEPATH, VERB_ARG_SOURCE_INPUT) var/type_to_del = user.poll_type_to_del(object) if(!type_to_del) return @@ -114,7 +121,8 @@ ADMIN_VERB(cmd_debug_make_powernets, R_DEBUG|R_SERVER, "Make Powernets", "Regene BLACKBOX_LOG_ADMIN_VERB("Make Powernets") ADMIN_VERB_VISIBILITY(cmd_admin_grantfullaccess, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) -ADMIN_VERB(cmd_admin_grantfullaccess, R_DEBUG, "Grant Full Access", "Grant full access to a mob.", ADMIN_CATEGORY_DEBUG, mob/M) +ADMIN_VERB(cmd_admin_grantfullaccess, R_DEBUG, "Grant Full Access", "Grant full access to a mob.", ADMIN_CATEGORY_DEBUG) + VERB_ARG_TYPED(M, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) if(!SSticker.HasRoundStarted()) tgui_alert(user, "Wait until the game starts") return @@ -155,7 +163,8 @@ ADMIN_VERB(cmd_admin_grantfullaccess, R_DEBUG, "Grant Full Access", "Grant full log_admin("[key_name(user)] has granted [M.key] full access.") message_admins(span_adminnotice("[key_name_admin(user)] has granted [M.key] full access.")) -ADMIN_VERB(cmd_assume_direct_control, R_ADMIN, "Assume Direct Control", "Assume direct control of a mob.", ADMIN_CATEGORY_DEBUG, mob/M) +ADMIN_VERB(cmd_assume_direct_control, R_ADMIN, "Assume Direct Control", "Assume direct control of a mob.", ADMIN_CATEGORY_DEBUG) + VERB_ARG_TYPED(M, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) if(M.ckey) if(tgui_alert(user,"This mob is being controlled by [M.key]. Are you sure you wish to assume control of it? [M.key] will be made a ghost.",,list("Yes","No")) != "Yes") return @@ -175,7 +184,8 @@ ADMIN_VERB(cmd_assume_direct_control, R_ADMIN, "Assume Direct Control", "Assume qdel(adminmob) BLACKBOX_LOG_ADMIN_VERB("Assume Direct Control") -ADMIN_VERB(cmd_give_direct_control, R_ADMIN, "Give Direct Control", "Give direct control of a mob to another player.", ADMIN_CATEGORY_GAME, mob/M) +ADMIN_VERB(cmd_give_direct_control, R_ADMIN, "Give Direct Control", "Give direct control of a mob to another player.", ADMIN_CATEGORY_GAME) + VERB_ARG_TYPED(M, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) if(!M) return if(M.ckey) @@ -202,7 +212,9 @@ ADMIN_VERB(cmd_give_direct_control, R_ADMIN, "Give Direct Control", "Give direct BLACKBOX_LOG_ADMIN_VERB("Give Direct Control") ADMIN_VERB_VISIBILITY(cmd_admin_areatest, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) -ADMIN_VERB(cmd_admin_areatest, R_DEBUG, "Test Areas", "Tests the areas for various machinery.", ADMIN_CATEGORY_MAPPING, on_station as num, filter_maint as num) +ADMIN_VERB(cmd_admin_areatest, R_DEBUG, "Test Areas", "Tests the areas for various machinery.", ADMIN_CATEGORY_MAPPING) + VERB_ARG(on_station, VERB_ARG_TYPE_NUM, VERB_ARG_SOURCE_INPUT) + VERB_ARG(filter_maint, VERB_ARG_TYPE_NUM, VERB_ARG_SOURCE_INPUT) var/list/dat = list() var/list/areas_all = list() var/list/areas_with_APC = list() @@ -455,7 +467,8 @@ ADMIN_VERB(cmd_admin_areatest_all, R_DEBUG, "Test Areas (ALL)", "Tests the areas return dresscode -ADMIN_VERB_ONLY_CONTEXT_MENU(cmd_admin_rejuvenate, R_ADMIN, "Rejuvenate", mob/living/M) +ADMIN_VERB_ONLY_CONTEXT_MENU(cmd_admin_rejuvenate, R_ADMIN, "Rejuvenate", /mob/living) + VERB_ARG_TYPED(M, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob/living) if(!istype(M)) tgui_alert(user,"Cannot revive a ghost") return @@ -467,10 +480,12 @@ ADMIN_VERB_ONLY_CONTEXT_MENU(cmd_admin_rejuvenate, R_ADMIN, "Rejuvenate", mob/li admin_ticket_log(M, msg) BLACKBOX_LOG_ADMIN_VERB("Rejuvenate") -ADMIN_VERB_ONLY_CONTEXT_MENU(cmd_admin_delete, R_DEBUG|R_SPAWN, "Delete", atom/target as obj|mob|turf) +ADMIN_VERB_ONLY_CONTEXT_MENU(cmd_admin_delete, R_DEBUG|R_SPAWN, "Delete", /atom) + VERB_ARG_TYPED(target, VERB_ARG_TYPE_OBJ | VERB_ARG_TYPE_MOB | VERB_ARG_TYPE_TURF, VERB_ARG_SOURCE_WORLD, /atom) user.admin_delete(target) -ADMIN_VERB_ONLY_CONTEXT_MENU(cmd_check_contents, R_ADMIN, "Check Contents", mob/living/mob) +ADMIN_VERB_ONLY_CONTEXT_MENU(cmd_check_contents, R_ADMIN, "Check Contents", /mob/living) + VERB_ARG_TYPED(mob, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob/living) var/list/mob_contents = mob.get_contents() for(var/content in mob_contents) to_chat(user, "[content] [ADMIN_VV(content)] [ADMIN_TAG(content)]", confidential = TRUE) @@ -569,7 +584,8 @@ ADMIN_VERB(debug_plane_masters, R_DEBUG, "Edit/Debug Planes", "Edit and visualiz holder.plane_debug.set_mirroring(FALSE) holder.plane_debug.ui_interact(mob) -ADMIN_VERB(debug_huds, R_DEBUG, "Debug HUDs", "Debug the data or antag HUDs.", ADMIN_CATEGORY_DEBUG, i as num) +ADMIN_VERB(debug_huds, R_DEBUG, "Debug HUDs", "Debug the data or antag HUDs.", ADMIN_CATEGORY_DEBUG) + VERB_ARG(i, VERB_ARG_TYPE_NUM, VERB_ARG_SOURCE_INPUT) user.debug_variables(GLOB.huds[i]) ADMIN_VERB(jump_to_ruin, R_DEBUG, "Jump to Ruin", "Displays a list of all placed ruins to teleport to.", ADMIN_CATEGORY_DEBUG) @@ -642,7 +658,8 @@ ADMIN_VERB(place_ruin, R_DEBUG, "Spawn Ruin", "Attempt to randomly place a speci ADMIN_VERB(unload_ctf, R_DEBUG, "Unload CTF", "Despawns the majority of CTF.", ADMIN_CATEGORY_DEBUG) toggle_id_ctf(user, CTF_GHOST_CTF_GAME_ID, unload=TRUE) -ADMIN_VERB(run_empty_query, R_DEBUG, "Run Empty Query", "Runs a specified number of empty queries.", ADMIN_CATEGORY_DEBUG, val as num) +ADMIN_VERB(run_empty_query, R_DEBUG, "Run Empty Query", "Runs a specified number of empty queries.", ADMIN_CATEGORY_DEBUG) + VERB_ARG(val, VERB_ARG_TYPE_NUM, VERB_ARG_SOURCE_INPUT) var/list/queries = list() for(var/i in 1 to val) var/datum/db_query/query = SSdbcore.NewQuery("NULL") diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index 5dafce71c193..6bd6a983d9ea 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -1,5 +1,7 @@ ADMIN_VERB_VISIBILITY(debug_air_status, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) -ADMIN_VERB(debug_air_status, R_DEBUG, "Debug Air Status" , ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, turf/target) + +ADMIN_VERB(debug_air_status, R_DEBUG, "Debug Air Status" , ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN) + VERB_ARG_TYPED(target, VERB_ARG_TYPE_TURF, VERB_ARG_SOURCE_WORLD, /turf) atmos_scan(user.mob, target, silent = TRUE) BLACKBOX_LOG_ADMIN_VERB("Show Air Status") diff --git a/code/modules/admin/verbs/fix_air.dm b/code/modules/admin/verbs/fix_air.dm index 5ca7aeadcc3a..bf676df6a69c 100644 --- a/code/modules/admin/verbs/fix_air.dm +++ b/code/modules/admin/verbs/fix_air.dm @@ -1,5 +1,8 @@ // Proc taken from yogstation, credit to nichlas0010 for the original -ADMIN_VERB_AND_CONTEXT_MENU(fix_air, R_ADMIN, "Fix Air", "Fixes air in a specified radius.", ADMIN_CATEGORY_GAME, turf/open/locale, range = 2 as num) +ADMIN_VERB_AND_CONTEXT_MENU(fix_air, R_ADMIN, "Fix Air", "Fixes air in a specified radius.", ADMIN_CATEGORY_GAME, /turf/open) + VERB_ARG_TYPED(locale, VERB_ARG_TYPE_TURF, VERB_ARG_SOURCE_WORLD, /turf/open) + VERB_ARG(range, VERB_ARG_TYPE_NUM, VERB_ARG_SOURCE_INPUT) + message_admins("[key_name_admin(user)] fixed air with range [range] in area [locale.loc.name]") user.mob.log_message("fixed air with range [range] in area [locale.loc.name]", LOG_ADMIN) diff --git a/code/modules/admin/verbs/grant_dna_infusion.dm b/code/modules/admin/verbs/grant_dna_infusion.dm index e39b7efc1b23..b06b4aced839 100644 --- a/code/modules/admin/verbs/grant_dna_infusion.dm +++ b/code/modules/admin/verbs/grant_dna_infusion.dm @@ -3,7 +3,8 @@ * Returns the entry if all organs were successfully replaced. * If no infusion was picked, the infusion had no organs, or if one or more organs could not be granted, returns FALSE */ -GAME_VERB_PROC(/client, grant_dna_infusion, "Apply DNA Infusion", "Debug", mob/living/carbon/human/target) +GAME_VERB_PROC(/client, grant_dna_infusion, "Apply DNA Infusion", "Debug") + VERB_ARG_TYPED(target, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob/living/carbon/human) var/list/infusions = list() for(var/datum/infuser_entry/path as anything in sort_list(subtypesof(/datum/infuser_entry), GLOBAL_PROC_REF(cmp_typepaths_asc))) diff --git a/code/modules/admin/verbs/machine_upgrade.dm b/code/modules/admin/verbs/machine_upgrade.dm index 2cac1be623e9..7cb751afd345 100644 --- a/code/modules/admin/verbs/machine_upgrade.dm +++ b/code/modules/admin/verbs/machine_upgrade.dm @@ -1,4 +1,5 @@ -ADMIN_VERB_ONLY_CONTEXT_MENU(machine_upgrade, R_DEBUG, "Tweak Component Ratings", obj/machinery/machine) +ADMIN_VERB_ONLY_CONTEXT_MENU(machine_upgrade, R_DEBUG, "Tweak Component Ratings", /obj/machinery) + VERB_ARG_TYPED(machine, VERB_ARG_TYPE_OBJ, VERB_ARG_SOURCE_WORLD, /obj/machinery) if(!ismachinery(machine)) return var/new_rating = tgui_input_number(user, "", "Enter new rating:") diff --git a/code/modules/admin/verbs/manipulate_organs.dm b/code/modules/admin/verbs/manipulate_organs.dm index ecf63cc5e6f8..2275b396c887 100644 --- a/code/modules/admin/verbs/manipulate_organs.dm +++ b/code/modules/admin/verbs/manipulate_organs.dm @@ -1,5 +1,7 @@ ADMIN_VERB_VISIBILITY(manipulate_organs, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) -ADMIN_VERB(manipulate_organs, R_DEBUG, "Manipulate Organs", "Manipulate the organs of a living carbon.", ADMIN_CATEGORY_DEBUG, mob/living/carbon/carbon_victim) + +ADMIN_VERB(manipulate_organs, R_DEBUG, "Manipulate Organs", "Manipulate the organs of a living carbon.", ADMIN_CATEGORY_DEBUG) + VERB_ARG_TYPED(carbon_victim, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob/living/carbon) var/operation = tgui_input_list(user, "Select organ operation", "Organ Manipulation", list("Add organ", "Add implant", "Drop organ/implant", "Remove organ/implant")) if (isnull(operation)) return diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm index c30c3e6d4550..f908ea16ea62 100644 --- a/code/modules/admin/verbs/playsound.dm +++ b/code/modules/admin/verbs/playsound.dm @@ -3,7 +3,8 @@ #define SHELLEO_STDOUT 2 #define SHELLEO_STDERR 3 -ADMIN_VERB(play_sound, R_SOUND, "Play Global Sound", "Play a sound to all connected players.", ADMIN_CATEGORY_FUN, sound as sound) +ADMIN_VERB(play_sound, R_SOUND, "Play Global Sound", "Play a sound to all connected players.", ADMIN_CATEGORY_FUN) + VERB_ARG(sound, VERB_ARG_TYPE_SOUND, VERB_ARG_SOURCE_INPUT) var/freq = 1 var/vol = tgui_input_number(user, "What volume would you like the sound to play at?", max_value = 100) if(!vol) @@ -39,14 +40,17 @@ ADMIN_VERB(play_sound, R_SOUND, "Play Global Sound", "Play a sound to all connec BLACKBOX_LOG_ADMIN_VERB("Play Global Sound") -ADMIN_VERB(play_local_sound, R_SOUND, "Play Local Sound", "Plays a sound only you can hear.", ADMIN_CATEGORY_FUN, sound as sound) +ADMIN_VERB(play_local_sound, R_SOUND, "Play Local Sound", "Plays a sound only you can hear.", ADMIN_CATEGORY_FUN) + VERB_ARG(sound, VERB_ARG_TYPE_SOUND, VERB_ARG_SOURCE_INPUT) log_admin("[key_name(user)] played a local sound [sound]") message_admins("[key_name_admin(user)] played a local sound [sound]") var/volume = tgui_input_number(user, "What volume would you like the sound to play at?", max_value = 100) playsound(get_turf(user.mob), sound, volume || 50, FALSE) BLACKBOX_LOG_ADMIN_VERB("Play Local Sound") -ADMIN_VERB(play_direct_mob_sound, R_SOUND, "Play Direct Mob Sound", "Play a sound directly to a mob.", ADMIN_CATEGORY_FUN, sound as sound, mob/target) +ADMIN_VERB(play_direct_mob_sound, R_SOUND, "Play Direct Mob Sound", "Play a sound directly to a mob.", ADMIN_CATEGORY_FUN) + VERB_ARG(sound, VERB_ARG_TYPE_SOUND, VERB_ARG_SOURCE_INPUT) + VERB_ARG_TYPED(target, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) if(!target) target = input(user, "Choose a mob to play the sound to. Only they will hear it.", "Play Mob Sound") as null|anything in sort_names(GLOB.player_list) if(QDELETED(target)) @@ -250,7 +254,8 @@ ADMIN_VERB(play_web_sound, R_SOUND, "Play Internet Sound", "Play a given interne else web_sound(user.mob, null) -ADMIN_VERB(set_round_end_sound, R_SOUND, "Set Round End Sound", "Set the sound that plays on round end.", ADMIN_CATEGORY_FUN, sound as sound) +ADMIN_VERB(set_round_end_sound, R_SOUND, "Set Round End Sound", "Set the sound that plays on round end.", ADMIN_CATEGORY_FUN) + VERB_ARG(sound, VERB_ARG_TYPE_SOUND, VERB_ARG_SOURCE_INPUT) var/volume = tgui_input_number(user, "What volume would you like this sound to play at?", max_value = 100) var/sound/admin_sound = sound(sound) if(volume) diff --git a/code/modules/admin/verbs/possess.dm b/code/modules/admin/verbs/possess.dm index 4f4fd3d9649a..00864cb8b2f8 100644 --- a/code/modules/admin/verbs/possess.dm +++ b/code/modules/admin/verbs/possess.dm @@ -1,5 +1,6 @@ -ADMIN_VERB_AND_CONTEXT_MENU(possess, R_POSSESS, "Possess Obj", "Possess an object.", ADMIN_CATEGORY_FUN, obj/target) +ADMIN_VERB_AND_CONTEXT_MENU(possess, R_POSSESS, "Possess Obj", "Possess an object.", ADMIN_CATEGORY_FUN, /obj) + VERB_ARG_TYPED(target, VERB_ARG_TYPE_OBJ, VERB_ARG_SOURCE_WORLD, /obj) if(isnull(target.loc)) return diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index a8443b80303a..ce35b8745cda 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -1,4 +1,5 @@ -GAME_VERB(/mob, pray, VERB_PRAY, null, message as text) +GAME_VERB(/mob, pray, VERB_PRAY, null) + VERB_ARG(message, VERB_ARG_TYPE_TEXT, VERB_ARG_SOURCE_INPUT) if(GLOB.say_disabled) //This is here to try to identify lag problems to_chat(src, span_danger("Speech is currently admin-disabled."), confidential = TRUE) return diff --git a/code/modules/admin/verbs/selectequipment.dm b/code/modules/admin/verbs/selectequipment.dm index f67ef904ffc3..12cfa91cf179 100644 --- a/code/modules/admin/verbs/selectequipment.dm +++ b/code/modules/admin/verbs/selectequipment.dm @@ -1,4 +1,5 @@ -ADMIN_VERB_ONLY_CONTEXT_MENU(select_equipment, R_FUN, "Select Equipment", mob/target) +ADMIN_VERB_ONLY_CONTEXT_MENU(select_equipment, R_FUN, "Select Equipment", /mob) + VERB_ARG_TYPED(target, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) var/datum/select_equipment/ui = new(user, target) ui.ui_interact(user.mob) diff --git a/code/modules/admin/verbs/spawnobjasmob.dm b/code/modules/admin/verbs/spawnobjasmob.dm index 56fe8fbf84fa..6c641f75cc63 100644 --- a/code/modules/admin/verbs/spawnobjasmob.dm +++ b/code/modules/admin/verbs/spawnobjasmob.dm @@ -1,4 +1,5 @@ -ADMIN_VERB(spawn_obj_as_mob, R_SPAWN, "Spawn Object-Mob", "Spawn an object as if it were a mob.", ADMIN_CATEGORY_DEBUG, object as text) +ADMIN_VERB(spawn_obj_as_mob, R_SPAWN, "Spawn Object-Mob", "Spawn an object as if it were a mob.", ADMIN_CATEGORY_DEBUG) + VERB_ARG(object, VERB_ARG_TYPE_TYPEPATH, VERB_ARG_SOURCE_INPUT) var/chosen = pick_closest_path(object, make_types_fancy(subtypesof(/obj))) if (!chosen) diff --git a/code/modules/admin/view_variables/mark_datum.dm b/code/modules/admin/view_variables/mark_datum.dm index a71e5909db41..73eccf21cd8c 100644 --- a/code/modules/admin/view_variables/mark_datum.dm +++ b/code/modules/admin/view_variables/mark_datum.dm @@ -10,7 +10,8 @@ holder.RegisterSignal(holder.marked_datum, COMSIG_QDELETING, TYPE_PROC_REF(/datum/admins, handle_marked_del)) vv_update_display(D, "marked", VV_MSG_MARKED) -ADMIN_VERB_ONLY_CONTEXT_MENU(mark_datum, R_NONE, "Mark Object", datum/target as anything) +ADMIN_VERB_ONLY_CONTEXT_MENU(mark_datum, R_NONE, "Mark Object", /datum) + VERB_ARG_TYPED(target, VERB_ARG_TYPE_MOB | VERB_ARG_TYPE_OBJ | VERB_ARG_TYPE_TURF | VERB_ARG_TYPE_AREA, VERB_ARG_SOURCE_VIEW, /datum) user.mark_datum(target) /datum/admins/proc/handle_marked_del(datum/source) diff --git a/code/modules/admin/view_variables/tag_datum.dm b/code/modules/admin/view_variables/tag_datum.dm index 030f245bbe5a..ab853dcc584b 100644 --- a/code/modules/admin/view_variables/tag_datum.dm +++ b/code/modules/admin/view_variables/tag_datum.dm @@ -12,5 +12,6 @@ else holder.add_tagged_datum(target_datum) -ADMIN_VERB_ONLY_CONTEXT_MENU(tag_datum, R_NONE, "Tag Datum", datum/target_datum as anything) +ADMIN_VERB_ONLY_CONTEXT_MENU(tag_datum, R_NONE, "Tag Datum", /datum) + VERB_ARG_TYPED(target_datum, VERB_ARG_TYPE_MOB | VERB_ARG_TYPE_OBJ | VERB_ARG_TYPE_TURF | VERB_ARG_TYPE_AREA, VERB_ARG_SOURCE_VIEW, /datum) user.tag_datum(target_datum) diff --git a/code/modules/admin/view_variables/view_variables.dm b/code/modules/admin/view_variables/view_variables.dm index 3259ccf4c221..f93d0a9b2774 100644 --- a/code/modules/admin/view_variables/view_variables.dm +++ b/code/modules/admin/view_variables/view_variables.dm @@ -1,7 +1,8 @@ #define ICON_STATE_CHECKED 1 /// this dmi is checked. We don't check this one anymore. #define ICON_STATE_NULL 2 /// this dmi has null-named icon_state, allowing it to show a sprite on vv editor. -ADMIN_VERB_ONLY_CONTEXT_MENU(debug_variables, R_NONE, "View Variables", datum/thing as anything) +ADMIN_VERB_ONLY_CONTEXT_MENU(debug_variables, R_NONE, "View Variables", /datum) + VERB_ARG_TYPED(thing, VERB_ARG_TYPE_DATUM, VERB_ARG_SOURCE_WORLD, /datum) user.debug_variables(thing) // This is kept as a separate proc because admins are able to show VV to non-admins diff --git a/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm b/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm index e85d9828c2b3..cae50f25e83c 100644 --- a/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm +++ b/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm @@ -33,5 +33,4 @@ if(exposed_mob.stat == DEAD && overmind.can_buy(5)) var/mob/living/basic/blob_minion/spore/minion/spore = overmind.create_spore(get_turf(exposed_mob)) spore.zombify(exposed_mob) - overmind.add_points(-5) to_chat(overmind, span_notice("Spent 5 resources for the zombification of [exposed_mob].")) diff --git a/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm b/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm index 8dfe798c57e3..a17b6425e4e9 100644 --- a/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm +++ b/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm @@ -30,6 +30,7 @@ /datum/reagent/blob/shifting_fragments name = "Shifting Fragments" color = "#C8963C" + taste_description = "egg yolk" /datum/reagent/blob/shifting_fragments/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/eye/blob/overmind) . = ..() diff --git a/code/modules/antagonists/blob/overmind.dm b/code/modules/antagonists/blob/overmind.dm index 29cd71db1af2..661b61ab0cc1 100644 --- a/code/modules/antagonists/blob/overmind.dm +++ b/code/modules/antagonists/blob/overmind.dm @@ -306,7 +306,7 @@ GLOBAL_LIST_EMPTY(blob_nodes) if(blobstrain) . += "Its strain is [blobstrain.name]." -/mob/eye/blob/update_health_hud() +/mob/eye/blob/update_health_hud(healthpercent) if(!blob_core) return FALSE var/current_health = round((blob_core.get_integrity() / blob_core.max_integrity) * 100) diff --git a/code/modules/antagonists/blob/powers.dm b/code/modules/antagonists/blob/powers.dm index 6939c4d27c4c..de31f1c3f369 100644 --- a/code/modules/antagonists/blob/powers.dm +++ b/code/modules/antagonists/blob/powers.dm @@ -166,7 +166,7 @@ if(!can_buy(BLOB_UPGRADE_REFLECTOR_COST)) return - to_chat(src, span_warning("You secrete a reflective ooze over the shield blob, allowing it to reflect projectiles at the cost of reduced integrity.")) + to_chat(src, span_warning("You secrete a reflective ooze over the shield blob, allowing it to reflect projectiles at the cost of reduced resistance to explosions.")) shield = shield.change_to(/obj/structure/blob/shield/reflective, src) shield.balloon_alert(src, "upgraded to [shield.name]!") diff --git a/code/modules/antagonists/blood_worm/blood_worm_mob.dm b/code/modules/antagonists/blood_worm/blood_worm_mob.dm index fa9a3d2df608..6442dde137df 100644 --- a/code/modules/antagonists/blood_worm/blood_worm_mob.dm +++ b/code/modules/antagonists/blood_worm/blood_worm_mob.dm @@ -269,6 +269,14 @@ . = ..() icon_state = "invade-[effect_name]" +/mob/living/basic/blood_worm/lazarus_revive(mob/living/reviver, malfunctioning) + if(!IS_BLOODWORM(src)) //checks to see if this isn't just a poly'd bloodworm + return ..() + + revive(HEAL_ALL) + to_chat(reviver, span_userdanger("[src] resists the control of the injector!")) + balloon_alert(reviver, "can't control!") + /mob/living/basic/blood_worm/hatchling name = "hatchling blood worm" desc = "A freshly hatched blood worm. It looks hungry and weak, requiring blood to grow further." diff --git a/code/modules/antagonists/brother/brother.dm b/code/modules/antagonists/brother/brother.dm index 7f3cbe1225fb..41faf16e122b 100644 --- a/code/modules/antagonists/brother/brother.dm +++ b/code/modules/antagonists/brother/brother.dm @@ -137,7 +137,7 @@ var/mob/living/carbon/human/dummy/consistent/brother1 = new var/mob/living/carbon/human/dummy/consistent/brother2 = new - brother1.dna.features[FEATURE_ETHEREAL_COLOR] = GLOB.color_list_ethereal["Faint Red"] + brother1.dna.features[FEATURE_MUTANT_COLOR] = GLOB.color_list_ethereal["Faint Red"] brother1.set_species(/datum/species/ethereal) brother2.dna.features[FEATURE_MOTH_ANTENNAE] = "Plain" diff --git a/code/modules/antagonists/heretic/heretic_curses.dm b/code/modules/antagonists/heretic/heretic_curses.dm index 3d05ff097f46..757bd75088e8 100644 --- a/code/modules/antagonists/heretic/heretic_curses.dm +++ b/code/modules/antagonists/heretic/heretic_curses.dm @@ -28,7 +28,7 @@ for(var/datum/reagent/blood/usable_reagent as anything in requirement.reagents?.reagent_list) if(!istype(usable_reagent, /datum/reagent/blood)) continue - blood_samples[usable_reagent.data["blood_DNA"]] = TRUE + blood_samples[usable_reagent.data[BLOOD_DATA_DNA]] = TRUE return TRUE @@ -90,7 +90,7 @@ if(!to_drain.reagents?.reagent_list) continue for(var/datum/reagent/to_match in to_drain.reagents.reagent_list) - if(to_match.data["blood_DNA"] != to_curse.dna.unique_enzymes) + if(to_match.data[BLOOD_DATA_DNA] != to_curse.dna.unique_enzymes) continue to_drain.reagents.remove_reagent(to_match.type, 5) return TRUE diff --git a/code/modules/antagonists/heretic/items/forbidden_book.dm b/code/modules/antagonists/heretic/items/forbidden_book.dm index 3a7fafba81ba..6aa2198772d4 100644 --- a/code/modules/antagonists/heretic/items/forbidden_book.dm +++ b/code/modules/antagonists/heretic/items/forbidden_book.dm @@ -130,7 +130,7 @@ for(var/datum/reagent/blood/usable_reagent as anything in held_offhand.reagents?.reagent_list) if(!istype(usable_reagent, /datum/reagent/blood)) continue - blood_samples += usable_reagent.data["blood_DNA"] + blood_samples += usable_reagent.data[BLOOD_DATA_DNA] if(isnull(blood_samples)) user.balloon_alert(user, "no blood!") return ITEM_INTERACT_BLOCKING diff --git a/code/modules/antagonists/heretic/items/heretic_blades.dm b/code/modules/antagonists/heretic/items/heretic_blades.dm index 614a91ed0228..c2c01bd0a441 100644 --- a/code/modules/antagonists/heretic/items/heretic_blades.dm +++ b/code/modules/antagonists/heretic/items/heretic_blades.dm @@ -141,7 +141,7 @@ AddComponent( /datum/component/bloody_spreader,\ - blood_dna = list("Alien DNA" = get_blood_type(BLOOD_TYPE_XENO)),\ + blood_dna = list("Alien DNA" = get_blood_type(/datum/blood_type/xeno)),\ ) // Path of Void's blade diff --git a/code/modules/antagonists/heretic/magic/realignment.dm b/code/modules/antagonists/heretic/magic/realignment.dm index 1f33b8d1e1bd..b40b51e5f8bf 100644 --- a/code/modules/antagonists/heretic/magic/realignment.dm +++ b/code/modules/antagonists/heretic/magic/realignment.dm @@ -57,7 +57,7 @@ ///Traits to add/remove var/list/realignment_traits = list(TRAIT_BATON_RESISTANCE, TRAIT_PACIFISM) -/datum/status_effect/realignment/get_examine_text() +/datum/status_effect/realignment/get_examine_text(mob/examiner) return span_notice("[owner.p_Theyre()] glowing a soft white.") /datum/status_effect/realignment/on_apply() diff --git a/code/modules/antagonists/heretic/status_effects/buffs.dm b/code/modules/antagonists/heretic/status_effects/buffs.dm index f0a10abf8c59..1a6ec9ba7ee0 100644 --- a/code/modules/antagonists/heretic/status_effects/buffs.dm +++ b/code/modules/antagonists/heretic/status_effects/buffs.dm @@ -27,7 +27,7 @@ owner.apply_status_effect(/datum/status_effect/crucible_soul_cooldown) location = null -/datum/status_effect/crucible_soul/get_examine_text() +/datum/status_effect/crucible_soul/get_examine_text(mob/examiner) return span_notice("[owner.p_They()] [owner.p_do()]n't seem to be all here.") /datum/action/cancel_crucible_soul @@ -317,7 +317,7 @@ span_notice("You exit the refuge."), ) -/datum/status_effect/caretaker_refuge/get_examine_text() +/datum/status_effect/caretaker_refuge/get_examine_text(mob/examiner) return span_warning("[owner.p_Theyre()] enveloped in an unholy haze!") /datum/status_effect/caretaker_refuge/proc/nullrod_handler(datum/source, obj/item/weapon) diff --git a/code/modules/antagonists/heretic/status_effects/heretic_passive.dm b/code/modules/antagonists/heretic/status_effects/heretic_passive.dm index c30ce76318c0..f59e9cbd26ac 100644 --- a/code/modules/antagonists/heretic/status_effects/heretic_passive.dm +++ b/code/modules/antagonists/heretic/status_effects/heretic_passive.dm @@ -388,16 +388,11 @@ tongue.disliked_foodtypes = NONE tongue.toxic_foodtypes = NONE -/// Any time you take a bite of something, if it's meat or an organ you will heal some damage -/datum/status_effect/heretic_passive/flesh/proc/on_eat(mob/eater, atom/food) +/// Any time you take a bite of something, if it's meat or gory (probably an organ) you will heal some damage +/datum/status_effect/heretic_passive/flesh/proc/on_eat(mob/eater, atom/food, foodtypes) SIGNAL_HANDLER - var/obj/item/organ/consumed_organ = food - if(istype(consumed_organ) && consumed_organ.foodtype_flags & MEAT) - heal_glutton() // Heal the owner if they eat meat - return - var/obj/item/food/consumed_food = food - if(istype(consumed_food) && consumed_food.foodtypes & MEAT) - heal_glutton() // Heal the owner if they eat meat + if(foodtypes & (MEAT | GORE)) //All edible organs are gory, but not all of them are meat (podpeople, fishpeople.) If someone adds edible non-meat, non-gory organs, then I guess back to the drawing board. + heal_glutton() /datum/status_effect/heretic_passive/flesh/proc/heal_glutton() var/healed_amount = owner.heal_overall_damage(2, 2, updating_health = FALSE) diff --git a/code/modules/antagonists/nightmare/nightmare_organs.dm b/code/modules/antagonists/nightmare/nightmare_organs.dm index 367bec10482b..78a0386b5e4a 100644 --- a/code/modules/antagonists/nightmare/nightmare_organs.dm +++ b/code/modules/antagonists/nightmare/nightmare_organs.dm @@ -41,9 +41,7 @@ var/turf/owner_turf = owner.loc if(!isturf(owner_turf)) return - var/light_amount = owner_turf.get_lumcount() - - if (light_amount < SHADOW_SPECIES_LIGHT_THRESHOLD) //dodge in the dark + if (owner_turf.check_lumcount_below(SHADOW_SPECIES_LIGHT_THRESHOLD)) //dodge in the dark owner.apply_status_effect(/datum/status_effect/shadow/nightmare) /datum/status_effect/shadow/nightmare @@ -140,12 +138,13 @@ /obj/item/organ/heart/nightmare/on_death(seconds_per_tick) if(!owner) return - var/turf/T = get_turf(owner) - if(istype(T)) - var/light_amount = T.get_lumcount() - if(light_amount < SHADOW_SPECIES_LIGHT_THRESHOLD) + + var/turf/owner_turf = get_turf(owner) + if(istype(owner_turf)) + if(owner_turf.check_lumcount_below(SHADOW_SPECIES_LIGHT_THRESHOLD)) respawn_progress += seconds_per_tick SECONDS playsound(owner, 'sound/effects/singlebeat.ogg', 40, TRUE) + if(respawn_progress < HEART_RESPAWN_THRESHHOLD) return diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm index b54a3540307d..b7dd3cd5b7d7 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm @@ -105,7 +105,7 @@ GLOBAL_LIST_EMPTY(jam_on_wardec) var/obj/machinery/announcement_system/announcement_system = get_announcement_system(null, null, list(RADIO_CHANNEL_SCIENCE)) if (!isnull(announcement_system)) announcement_system.broadcast("Additional research data received from Nanotrasen R&D Division following the emergency protocol.", list(RADIO_CHANNEL_SCIENCE), TRUE) - station_techweb.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS * 3)) + station_techweb.adjust_points(TECHWEB_POINT_TYPE_GENERIC, TECHWEB_TIER_5_POINTS * 3) qdel(src) diff --git a/code/modules/asset_cache/assets/research_designs.dm b/code/modules/asset_cache/assets/research_designs.dm index 3f28fcdd67bc..cbdce771d7bb 100644 --- a/code/modules/asset_cache/assets/research_designs.dm +++ b/code/modules/asset_cache/assets/research_designs.dm @@ -3,10 +3,7 @@ name = "design" /datum/asset/spritesheet_batched/research_designs/create_spritesheets() - for (var/datum/design/path as anything in subtypesof(/datum/design)) - if(initial(path.id) == DESIGN_ID_IGNORE) - continue - + for (var/datum/design/path as anything in valid_subtypesof(/datum/design)) var/icon_file var/icon_state var/datum/icon_transformer/transform = null @@ -38,7 +35,7 @@ // GAGS icon short-circuit the rest of the checks if (item::greyscale_config && item::greyscale_colors) - insert_icon(path::id, gags_to_universal_icon(item)) + insert_icon(get_design_id(path), gags_to_universal_icon(item)) continue else icon_file = item::icon @@ -53,8 +50,7 @@ // computers (and snowflakes) get their screen and keyboard sprites if (ispath(item, /obj/machinery/computer) || ispath(item, /obj/machinery/power/solar_control)) - if(!transform) - transform = new() + transform ||= new() var/obj/machinery/computer/C = item var/screen = initial(C.icon_screen) var/keyboard = initial(C.icon_keyboard) @@ -64,4 +60,8 @@ if (keyboard && (keyboard in all_states)) transform.blend_icon(uni_icon(icon_file, keyboard), ICON_OVERLAY) - insert_icon(initial(path.id), uni_icon(icon_file, icon_state, transform=transform)) + insert_icon(get_design_id(path), uni_icon(icon_file, icon_state, transform=transform)) + +/datum/asset/spritesheet_batched/research_designs/proc/get_design_id(design_path) + var/static/base_path_len = length("/datum/design/") + return replacetext(splicetext("[design_path]", 1, base_path_len), "/", "_") diff --git a/code/modules/atmospherics/gasmixtures/gas_mixture.dm b/code/modules/atmospherics/gasmixtures/gas_mixture.dm index 6a34b2b276e0..672a177671de 100644 --- a/code/modules/atmospherics/gasmixtures/gas_mixture.dm +++ b/code/modules/atmospherics/gasmixtures/gas_mixture.dm @@ -133,16 +133,10 @@ GLOBAL_LIST_INIT(meta_gas_info, meta_gas_list()) //see ATMOSPHERICS/gas_types.dm /datum/gas_mixture/proc/thermal_energy() return THERMAL_ENERGY(src) //see code/__DEFINES/atmospherics.dm; use the define in performance critical areas -///Update archived versions of variables. Returns: 1 in all cases +/// Update archived versions of variables /datum/gas_mixture/proc/archive() - var/list/cached_moles = moles - var/list/cached_moles_archive = moles_archive - + moles_archive = moles.Copy() temperature_archived = temperature - for(var/gas_id, value in cached_moles) - cached_moles_archive[gas_id] = value - - return TRUE ///Merges all air from giver into self. Deletes giver. Returns: 1 if we are mutable, 0 otherwise /datum/gas_mixture/proc/merge(datum/gas_mixture/giver) diff --git a/code/modules/atmospherics/gasmixtures/immutable_mixtures.dm b/code/modules/atmospherics/gasmixtures/immutable_mixtures.dm index 9ed9c9fe4e6b..bcab35870d6d 100644 --- a/code/modules/atmospherics/gasmixtures/immutable_mixtures.dm +++ b/code/modules/atmospherics/gasmixtures/immutable_mixtures.dm @@ -15,7 +15,7 @@ moles_archive.Cut() /datum/gas_mixture/immutable/archive() - return TRUE //nothing changes, so we do nothing and the archive is successful + return // nothing changes, so we do nothing /datum/gas_mixture/immutable/merge() return FALSE //we're immutable. diff --git a/code/modules/autowiki/pages/fishing.dm b/code/modules/autowiki/pages/fishing.dm index 4d879b6bdabf..d21aea6ba7d4 100644 --- a/code/modules/autowiki/pages/fishing.dm +++ b/code/modules/autowiki/pages/fishing.dm @@ -332,6 +332,7 @@ var/list/generated_icons = list() var/datum/techweb/techweb = locate(/datum/techweb/admin) in SSresearch.techwebs + techweb ||= new /datum/techweb/admin() for(var/scan_type in typesof(/datum/experiment/scanning/fish)) techweb.add_experiment(scan_type) //Make sure each followup experiment is available var/datum/experiment/scanning/fish/scan = locate(scan_type) in techweb.available_experiments diff --git a/code/modules/autowiki/pages/stockparts.dm b/code/modules/autowiki/pages/stockparts.dm index 99a8f20bccdb..074636523bab 100644 --- a/code/modules/autowiki/pages/stockparts.dm +++ b/code/modules/autowiki/pages/stockparts.dm @@ -46,17 +46,14 @@ return output /datum/autowiki/stock_parts/proc/find_design(obj/item/stock_parts/stock_part) - for(var/design_type in subtypesof(/datum/design)) - var/datum/design/recipe = new design_type() - - if(ispath(recipe.build_path, stock_part.type)) - return recipe + for(var/datum/design/design_type as anything in valid_subtypesof(/datum/design)) + if(ispath(design_type::build_path, stock_part.type)) + return new design_type() /datum/autowiki/stock_parts/proc/find_research(datum/design/recipe) - for(var/node_type in subtypesof(/datum/techweb_node)) + for(var/datum/techweb_node/node_type as anything in valid_subtypesof(/datum/techweb_node)) var/datum/techweb_node/node = new node_type() - - if(node.design_ids.Find(recipe.id)) + if(LAZYACCESS(node.unlocked_designs, recipe.type)) return node /datum/autowiki/stock_parts/proc/create_icon(obj/item/stock_parts/stock_part) @@ -82,8 +79,7 @@ /datum/autowiki/stock_parts/proc/generate_material_list(datum/design/recipe) var/list/materials = list() - for(var/ingredient_type, amount in recipe.materials) - var/datum/material/ingredient = new ingredient_type() + for(var/datum/material/ingredient, amount in recipe.materials) materials += "[amount] [ingredient.name]" return materials.Join("
") diff --git a/code/modules/autowiki/pages/techweb.dm b/code/modules/autowiki/pages/techweb.dm index 6198e4645eb0..11908c807b6b 100644 --- a/code/modules/autowiki/pages/techweb.dm +++ b/code/modules/autowiki/pages/techweb.dm @@ -4,9 +4,9 @@ /datum/autowiki/techweb/generate() var/output = "" - for (var/node_id in sort_list(SSresearch.techweb_nodes, GLOBAL_PROC_REF(sort_research_nodes))) - var/datum/techweb_node/node = SSresearch.techweb_nodes[node_id] - if (!node.show_on_wiki) + for (var/node_path in sort_list(SSresearch.techweb_nodes, GLOBAL_PROC_REF(sort_research_nodes))) + var/datum/techweb_node/node = SSresearch.techweb_nodes[node_path] + if (!(node.node_flags & TECHWEB_NODE_WIKI)) continue if (!valid_node(node)) @@ -15,20 +15,20 @@ output += "\n\n" + include_template("Autowiki/TechwebEntry", list( "name" = escape_value(node.display_name), "description" = escape_value(node.description), - "prerequisites" = generate_prerequisites(node.prereq_ids), - "designs" = generate_designs(node.design_ids), + "prerequisites" = generate_prerequisites(node.prerequisite_nodes), + "designs" = generate_designs(node.unlocked_designs), )) return output /datum/autowiki/techweb/proc/valid_node(datum/techweb_node/node) - return !node.experimental + return !(node.node_flags & TECHWEB_NODE_EXPERIMENTAL) -/datum/autowiki/techweb/proc/generate_designs(list/design_ids) +/datum/autowiki/techweb/proc/generate_designs(list/designs_to_generate) var/output = "" - for (var/design_id in design_ids) - var/datum/design/design = SSresearch.techweb_designs[design_id] + for (var/design_path in designs_to_generate) + var/datum/design/design = SSresearch.techweb_designs[design_path] output += include_template("Autowiki/TechwebEntryDesign", list( "name" = escape_value(design.name), "description" = escape_value(design.get_description()), @@ -36,11 +36,11 @@ return output -/datum/autowiki/techweb/proc/generate_prerequisites(list/prereq_ids) +/datum/autowiki/techweb/proc/generate_prerequisites(list/prerequisites) var/output = "" - for (var/prereq_id in prereq_ids) - var/datum/techweb_node/node = SSresearch.techweb_nodes[prereq_id] + for (var/node_path in prerequisites) + var/datum/techweb_node/node = SSresearch.techweb_nodes[node_path] output += include_template("Autowiki/TechwebEntryPrerequisite", list( "name" = escape_value(node.display_name), )) @@ -51,17 +51,17 @@ page = "Template:Autowiki/Content/Techweb/Experimental" /datum/autowiki/techweb/experimental/valid_node(datum/techweb_node/node) - return node.experimental + return (node.node_flags & TECHWEB_NODE_EXPERIMENTAL) -/proc/sort_research_nodes(node_id_a, node_id_b) - var/datum/techweb_node/node_a = SSresearch.techweb_nodes[node_id_a] - var/datum/techweb_node/node_b = SSresearch.techweb_nodes[node_id_b] +/proc/sort_research_nodes(node_path_a, node_path_b) + var/datum/techweb_node/node_a = SSresearch.techweb_nodes[node_path_a] + var/datum/techweb_node/node_b = SSresearch.techweb_nodes[node_path_b] - var/prereq_difference = node_a.prereq_ids.len - node_b.prereq_ids.len + var/prereq_difference = length(node_a.prerequisite_nodes) - length(node_b.prerequisite_nodes) if (prereq_difference != 0) return prereq_difference - var/experiment_difference = node_a.required_experiments.len - node_b.required_experiments.len + var/experiment_difference = length(node_a.required_experiments) - length(node_b.required_experiments) if (experiment_difference != 0) return experiment_difference diff --git a/code/modules/awaymissions/mission_code/heretic/fake_items.dm b/code/modules/awaymissions/mission_code/heretic/fake_items.dm index ab6c72941cea..e0af209dbc7c 100644 --- a/code/modules/awaymissions/mission_code/heretic/fake_items.dm +++ b/code/modules/awaymissions/mission_code/heretic/fake_items.dm @@ -19,7 +19,7 @@ anchored = 1 /obj/item/fake_items/time_stopper - name = "MOD timestopper module" + name = "\improper MOD timestopper module" desc = "A module that can halt time in a small radius around the user... for as long as they \ want! Great for monologues or lunch breaks. Keep in mind moving will end the stop, and the \ module has a hefty cooldown period to avoid reality errors." diff --git a/code/modules/awaymissions/mission_code/heretic/heretic_gateway_tram.dm b/code/modules/awaymissions/mission_code/heretic/heretic_gateway_tram.dm index bd6360766332..272732155ea1 100644 --- a/code/modules/awaymissions/mission_code/heretic/heretic_gateway_tram.dm +++ b/code/modules/awaymissions/mission_code/heretic/heretic_gateway_tram.dm @@ -24,6 +24,5 @@ configured_transport_id = HERETIC_LINE_1 /obj/machinery/computer/tram_controls/heretic_tram_computer - icon = 'icons/obj/tram/heretic_tram.dmi' - icon_screen = HERETIC_LINE_1 specific_transport_id = HERETIC_LINE_1 + install_type = STANDALONE diff --git a/code/modules/bitrunning/server/loot.dm b/code/modules/bitrunning/server/loot.dm index 83a06849555a..2a0ce3b66db6 100644 --- a/code/modules/bitrunning/server/loot.dm +++ b/code/modules/bitrunning/server/loot.dm @@ -152,10 +152,7 @@ if(!LAZYLEN(SSresearch.techweb_nodes_experimental)) return FALSE - var/static/list/passing_grades = list() - if(!passing_grades.len) - passing_grades = list(BITRUNNING_GRADE_A,BITRUNNING_GRADE_S) - + var/static/list/passing_grades = list(BITRUNNING_GRADE_A,BITRUNNING_GRADE_S) return generated_domain.difficulty >= BITRUNNER_DIFFICULTY_MEDIUM && (grade in passing_grades) diff --git a/code/modules/bitrunning/virtual_domain/virtual_domain.dm b/code/modules/bitrunning/virtual_domain/virtual_domain.dm index e5d19db30aac..aff8b724c7b7 100644 --- a/code/modules/bitrunning/virtual_domain/virtual_domain.dm +++ b/code/modules/bitrunning/virtual_domain/virtual_domain.dm @@ -99,7 +99,7 @@ var/best_grade = "None" /datum/lazy_template/virtual_domain/proc/can_view_name(scanner_tier, server_points) - return difficulty < scanner_tier && cost <= server_points + 5 + return cost <= server_points + 5 /datum/lazy_template/virtual_domain/proc/can_view_reward(scanner_tier, server_points) return difficulty < (scanner_tier + 1) && cost <= server_points + 3 diff --git a/code/modules/buildmode/buildmode.dm b/code/modules/buildmode/buildmode.dm index 73c9d42f6fee..be1c58896990 100644 --- a/code/modules/buildmode/buildmode.dm +++ b/code/modules/buildmode/buildmode.dm @@ -170,7 +170,8 @@ mode.handle_click(user.client, params, object) return TRUE // no doing underlying actions -GAME_VERB_GLOBAL_PROC(togglebuildmode, "Toggle Build Mode", "", "Event", mob/M as mob in GLOB.player_list) +GAME_VERB_GLOBAL_PROC(togglebuildmode, "Toggle Build Mode", "", "Event") + VERB_ARG_TYPED(M, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) if(M.client) if(istype(M.client.click_intercept,/datum/buildmode)) diff --git a/code/modules/cards/deck/tarot.dm b/code/modules/cards/deck/tarot.dm index a408b04a6cf3..405df3459224 100644 --- a/code/modules/cards/deck/tarot.dm +++ b/code/modules/cards/deck/tarot.dm @@ -22,7 +22,7 @@ if(prob(50)) var/obj/item/toy/singlecard/card = . if(!card) - return FALSE + return var/matrix/M = matrix() M.Turn(180) diff --git a/code/modules/cargo/exports.dm b/code/modules/cargo/exports.dm index 7fc606992b37..2a4b40259b92 100644 --- a/code/modules/cargo/exports.dm +++ b/code/modules/cargo/exports.dm @@ -119,6 +119,8 @@ Then the player gets the profit from selling his own wasted time. var/include_subtypes = TRUE /// Types excluded from export var/list/exclude_types = list() + /// A list consisting of the original export times, without any subtypes adjusted via include_subtypes + var/list/original_export_types = list() /// Set to false if the cost shouldn't be determinable by an export scanner var/scannable = TRUE /// Export market that this export applies to. Defaults to EXPORT_MARKET_STATION for items sold to the standard supply shuttle, replacements exist for pirates, etc. @@ -126,6 +128,7 @@ Then the player gets the profit from selling his own wasted time. /datum/export/New() ..() + original_export_types = export_types?.Copy() export_types = typecacheof(export_types, only_root_path = !include_subtypes) exclude_types = typecacheof(exclude_types) diff --git a/code/modules/cargo/exports/large_objects.dm b/code/modules/cargo/exports/large_objects.dm index 9c4754c64eeb..ab23ad7e95dc 100644 --- a/code/modules/cargo/exports/large_objects.dm +++ b/code/modules/cargo/exports/large_objects.dm @@ -25,6 +25,7 @@ /datum/export/crate/wooden/ore unit_name = "ore box" export_types = list(/obj/structure/ore_box) + exclude_types = list() /datum/export/crate/wood cost = CARGO_CRATE_VALUE * 0.48 @@ -36,11 +37,13 @@ cost = CARGO_CRATE_VALUE/2 //50 wooden crates cost 800 credits, and you can make 10 coffins in seconds with those planks. Each coffin selling for 100 means you can make a net gain of 200 credits for wasting your time making coffins. unit_name = "coffin" export_types = list(/obj/structure/closet/crate/coffin) + exclude_types = list() /datum/export/crate/cardboard cost = CARGO_CRATE_VALUE/5 unit_name = "cardboard box" export_types = list(/obj/structure/closet/crate/cardboard, /obj/structure/closet/cardboard) + exclude_types = list() /datum/export/reagent_dispenser abstract_type = /datum/export/reagent_dispenser diff --git a/code/modules/cargo/exports/materials.dm b/code/modules/cargo/exports/materials.dm index 36f358a11ebe..263eb45ce097 100644 --- a/code/modules/cargo/exports/materials.dm +++ b/code/modules/cargo/exports/materials.dm @@ -127,7 +127,7 @@ return . * SSstock_market.materials_prices[material_id] var/obj/item/stock_block/exported_block = exported_obj - return . * (exported_block.fluid ? SSstock_market.materials_prices[exported_block.custom_materials[1].type] : exported_block.export_value) + return . * (exported_block.fluid ? exported_block.update_value() : exported_block.export_value) /datum/export/material/market/sell_object(obj/sold_item, datum/export_report/report, dry_run, apply_elastic) . = ..() diff --git a/code/modules/cargo/exports/tools.dm b/code/modules/cargo/exports/tools.dm index eea9afe94a09..bf4c7ca8954f 100644 --- a/code/modules/cargo/exports/tools.dm +++ b/code/modules/cargo/exports/tools.dm @@ -141,16 +141,22 @@ cost = CARGO_CRATE_VALUE * 0.375 unit_name = "soap" export_types = list(/obj/item/soap) + exclude_types = list( + /obj/item/soap/homemade, + /obj/item/soap/omega, + ) /datum/export/soap/homemade cost = CARGO_CRATE_VALUE * 0.15 unit_name = "artisanal soap" export_types = list(/obj/item/soap/homemade) + exclude_types = list() /datum/export/soap/omega cost = CARGO_CRATE_VALUE * 14 unit_name = "omega soap" export_types = list(/obj/item/soap/omega) + exclude_types = list() /datum/export/candle cost = CARGO_CRATE_VALUE * 0.06125 diff --git a/code/modules/cargo/goodies.dm b/code/modules/cargo/goodies.dm index c6cfa0cf2aab..c32ffe0271a1 100644 --- a/code/modules/cargo/goodies.dm +++ b/code/modules/cargo/goodies.dm @@ -128,7 +128,7 @@ contains = list(/obj/item/gun/energy/laser/soul) /datum/supply_pack/goody/smg_single - name = "Disabler SMG Single_Pack" + name = "Disabler SMG Single Pack" desc = "Contains one disabler SMG, capable of rapidly firing weak disabler beams." cost = PAYCHECK_COMMAND * 6 access_view = ACCESS_WEAPONS diff --git a/code/modules/cargo/materials_market.dm b/code/modules/cargo/materials_market.dm index 207a47ae0c65..b1251248321e 100644 --- a/code/modules/cargo/materials_market.dm +++ b/code/modules/cargo/materials_market.dm @@ -355,31 +355,40 @@ /obj/item/stock_block/Initialize(mapload) . = ..() addtimer(CALLBACK(src, PROC_REF(value_warning)), 1.5 MINUTES, TIMER_DELETE_ME) - addtimer(CALLBACK(src, PROC_REF(update_value)), 3 MINUTES, TIMER_DELETE_ME) + addtimer(CALLBACK(src, PROC_REF(become_liquid)), 3 MINUTES, TIMER_DELETE_ME) /obj/item/stock_block/examine(mob/user) . = ..() var/datum/material/export_mat = custom_materials[1] var/quantity = custom_materials[export_mat] / SHEET_MATERIAL_AMOUNT - . += span_notice("\The [src] is worth [quantity * export_value] [MONEY_SYMBOL], from selling [quantity] sheets of [export_mat.name].") if(fluid) . += span_warning("\The [src] is currently liquid! Its value is based on the market price.") + update_value() else . += span_notice("\The [src]'s value is still [span_boldnotice("locked in")]. [span_boldnotice("Sell it")] before its value becomes liquid!") + . += span_notice("\The [src] is worth [quantity * export_value] [MONEY_SYMBOL], from selling [quantity] sheets of [export_mat.name].") + +/// Creates a visible effect warning nearby players that a stock block is beginning to become liquid in price. /obj/item/stock_block/proc/value_warning() visible_message(span_warning("\The [src] is starting to become liquid!")) icon_state = "stock_block_fluid" update_appearance(UPDATE_ICON_STATE) -/obj/item/stock_block/proc/update_value() - export_value = SSstock_market.materials_prices[custom_materials[1]] +/// Creates a visible effect warning nearby players that a stock block has become liquid in price, and updates the value, icon_state, and fluidity vars. +/obj/item/stock_block/proc/become_liquid() + update_value() icon_state = "stock_block_liquid" update_appearance(UPDATE_ICON_STATE) visible_message(span_warning("\The [src] becomes liquid!")) fluid = TRUE +/// Updates the value of the stock block, for examine, and for sale value. Export value becomes equal to the stock market value of that material. +/obj/item/stock_block/proc/update_value() + export_value = SSstock_market.materials_prices[src.custom_materials[1].type] + return export_value + #undef MAX_STACK_LIMIT #undef GALATIC_MATERIAL_ORDER diff --git a/code/modules/cargo/packs/_packs.dm b/code/modules/cargo/packs/_packs.dm index e6ed881e76d8..ac48cf977570 100644 --- a/code/modules/cargo/packs/_packs.dm +++ b/code/modules/cargo/packs/_packs.dm @@ -58,20 +58,20 @@ */ /datum/supply_pack/proc/generate(atom/A, datum/bank_account/paying_account, crate_override) var/obj/structure/closet/crate/C - if(paying_account) - C = new /obj/structure/closet/crate/secure/owned(A, paying_account) - C.name = "[crate_name || C.name] - Purchased by [paying_account.account_holder]" - else if(!crate_type && !crate_override) - CRASH("tried to generate a supply pack without a valid crate type") - else if(crate_override) + + if(crate_override) var/obj/unique_container = new crate_override(A) fill(unique_container) return unique_container - else - C = new crate_type(A) - if(crate_name) - C.name = crate_name + if(!crate_type) + CRASH("tried to generate a supply pack without a valid crate type") + + C = new crate_type(A) + C.name = "[crate_name || C.name][paying_account ? " - Purchased by [paying_account.account_holder]" : ""]" + if(paying_account) // adds component for locking the crate so only the buyer (or their department) can open it + C.AddComponent(/datum/component/locked_to_account, paying_account) + if(access) C.req_access = list(access) if(access_any) diff --git a/code/modules/cargo/packs/livestock.dm b/code/modules/cargo/packs/livestock.dm index 274aa5fecb94..7c097403bde8 100644 --- a/code/modules/cargo/packs/livestock.dm +++ b/code/modules/cargo/packs/livestock.dm @@ -3,7 +3,6 @@ crate_type = /obj/structure/closet/crate/critter /datum/supply_pack/critter/stasis - group = "Livestock (Stasis)" crate_type = /obj/structure/closet/crate/critter/stasis /datum/supply_pack/critter/stasis/fill(obj/container) @@ -171,6 +170,7 @@ contains = list(/mob/living/basic/mothroach) crate_name = "mothroach crate" +/* // DARKPACK EDIT REMOVAL - (Removes Monkey Cubes and Bees) /datum/supply_pack/critter/monkey name = "Monkey Cube Crate" desc = "Stop monkeying around! Contains seven monkey cubes. Just add water!" @@ -178,6 +178,7 @@ contains = list (/obj/item/storage/box/monkeycubes) crate_type = /obj/structure/closet/crate crate_name = "monkey cube crate" +*/ /datum/supply_pack/critter/pug name = "Pug Crate" diff --git a/code/modules/cargo/packs/organic.dm b/code/modules/cargo/packs/organic.dm index f8a1fbfc6043..a84789e34987 100644 --- a/code/modules/cargo/packs/organic.dm +++ b/code/modules/cargo/packs/organic.dm @@ -17,6 +17,7 @@ crate_name = "beekeeper suits" crate_type = /obj/structure/closet/crate/hydroponics +/* // DARKPACK EDIT REMOVAL - (Removing Monkey Cubes and Bees) /datum/supply_pack/organic/hydroponics/beekeeping_fullkit name = "Beekeeping Starter Crate" desc = "BEES BEES BEES. Contains three honey frames, a beekeeper suit and helmet, \ @@ -31,6 +32,7 @@ ) crate_name = "beekeeping starter crate" crate_type = /obj/structure/closet/crate/hydroponics +*/ /datum/supply_pack/organic/randomized test_ignored = TRUE @@ -118,7 +120,7 @@ desc = "Get things cooking with this crate full of useful ingredients! \ Contains a dozen eggs, three bananas, and some flour, rice, milk, \ soymilk, salt, pepper, enzyme, sugar, and monkeymeat." - cost = CARGO_CRATE_VALUE * 2 + cost = CARGO_CRATE_VALUE * 3 // DARKPACK EDIT CHANGE - Unit test failure? - Original: cost = CARGO_CRATE_VALUE * 2 contains = list(/obj/item/reagent_containers/condiment/flour, /obj/item/reagent_containers/condiment/rice, /obj/item/reagent_containers/condiment/milk, diff --git a/code/modules/cargo/packs/security.dm b/code/modules/cargo/packs/security.dm index dd03fe33361f..e5291bafcbb0 100644 --- a/code/modules/cargo/packs/security.dm +++ b/code/modules/cargo/packs/security.dm @@ -32,7 +32,7 @@ cost = CARGO_CRATE_VALUE access_view = ACCESS_SECURITY contains = list(/obj/item/mod/construction/plating/security) - crate_name = "MOD plating crate" + crate_name = "\improper MOD plating crate" /datum/supply_pack/security/disabler name = "Disabler Crate" diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index 13a23485c9c2..c0c23af6298c 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -246,6 +246,8 @@ /// Loot panel for the client var/datum/lootpanel/loot_panel + var/datum/admin_verb_panel/admin_verb_panel + ///Which ambient sound this client is currently being provided. var/current_ambient_sound diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index ef458c52aad8..faf60efa5269 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -1125,6 +1125,15 @@ GLOBAL_LIST_INIT(unrecommended_builds, list( verblist[++verblist.len] = list(verb_to_init.category, verb_to_init.name) src.stat_panel.send_message("init_verbs", list(panel_tabs = panel_tabs, verblist = verblist)) + var/list/panel_verbs = list() + for(var/procpath/verb_to_init as anything in verbstoprocess) + if(!verb_to_init || verb_to_init.hidden) + continue + if(!SSverbs.verbs_by_verb_path[verb_to_init] && !SSadmin_verbs.admin_verbs_by_verb_path[verb_to_init]) + continue + panel_verbs += list(SSverbs.serialize_verb(verb_to_init)) + tgui_panel?.window?.send_message("verbs/init", list("verbs" = panel_verbs)) + /client/proc/check_panel_loaded() if(stat_panel.is_ready()) return diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 2a04edab3cd0..e4a3e60a4eb4 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -589,7 +589,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) continue // DARKPACK EDIT ADD END - TTRPG preferences - preference.apply_to_human(character, read_preference(preference.type)) + preference.apply_to_human(character, read_preference(preference.type), src) character.dna.real_name = character.real_name diff --git a/code/modules/client/preferences/README.md b/code/modules/client/preferences/README.md index e30198eafbd4..be86875d2037 100644 --- a/code/modules/client/preferences/README.md +++ b/code/modules/client/preferences/README.md @@ -246,13 +246,13 @@ There are a handful of procs preferences can use to act on their own: /// Apply this preference onto the given human. /// Must be overriden by subtypes. /// Called when the savefile_identifier == PREFERENCE_CHARACTER. -/datum/preference/proc/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/proc/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) ``` For example, `/datum/preference/numeric/age` contains: ```dm -/datum/preference/numeric/age/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/numeric/age/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.age = value ``` diff --git a/code/modules/client/preferences/_preference.dm b/code/modules/client/preferences/_preference.dm index 1ea1575a82e3..f747c3bae7e3 100644 --- a/code/modules/client/preferences/_preference.dm +++ b/code/modules/client/preferences/_preference.dm @@ -238,7 +238,7 @@ GLOBAL_LIST_INIT(preference_entries_by_key, init_preference_entries_by_key()) /// Apply this preference onto the given human. /// Must be overriden by subtypes. /// Called when the savefile_identifier == PREFERENCE_CHARACTER. -/datum/preference/proc/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/proc/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) SHOULD_NOT_SLEEP(TRUE) SHOULD_CALL_PARENT(FALSE) CRASH("`apply_to_human()` was not implemented for [type]!") @@ -515,7 +515,7 @@ GLOBAL_LIST_INIT(preference_entries_by_key, init_preference_entries_by_key()) /datum/preference/choiced/species_feature/create_default_value() return get_consistent_feature_entry(get_accessory_list()) -/datum/preference/choiced/species_feature/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/species_feature/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.dna.features[feature_key] = value /// Returns what acessory list to draw from diff --git a/code/modules/client/preferences/addict.dm b/code/modules/client/preferences/addict.dm index 7aafde6fc70b..429c4ac2cd5b 100644 --- a/code/modules/client/preferences/addict.dm +++ b/code/modules/client/preferences/addict.dm @@ -27,7 +27,7 @@ return FALSE return /datum/quirk/item_quirk/addict/junkie::name in preferences.all_quirks -/datum/preference/choiced/junkie/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/junkie/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return /datum/preference/choiced/smoker @@ -47,7 +47,7 @@ return FALSE return /datum/quirk/item_quirk/addict/smoker::name in preferences.all_quirks -/datum/preference/choiced/smoker/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/smoker/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return /datum/preference/choiced/alcoholic @@ -67,5 +67,5 @@ return FALSE return /datum/quirk/item_quirk/addict/alcoholic::name in preferences.all_quirks -/datum/preference/choiced/alcoholic/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/alcoholic/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return diff --git a/code/modules/client/preferences/age.dm b/code/modules/client/preferences/age.dm index 13732347dd83..0f321f8d93c5 100644 --- a/code/modules/client/preferences/age.dm +++ b/code/modules/client/preferences/age.dm @@ -6,7 +6,7 @@ minimum = AGE_MIN maximum = AGE_MAX -/datum/preference/numeric/age/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/numeric/age/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.age = value target.chronological_age = value // DARKPACK EDIT ADD - Immortal age diff --git a/code/modules/client/preferences/ai_core_display.dm b/code/modules/client/preferences/ai_core_display.dm index c2eedc03e47a..6afd85c6e90b 100644 --- a/code/modules/client/preferences/ai_core_display.dm +++ b/code/modules/client/preferences/ai_core_display.dm @@ -20,5 +20,5 @@ return istype(preferences.get_highest_priority_job(), /datum/job/ai) -/datum/preference/choiced/ai_core_display/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/ai_core_display/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return diff --git a/code/modules/client/preferences/ai_emote_display.dm b/code/modules/client/preferences/ai_emote_display.dm index c7738c08a681..321cbdbf3b11 100644 --- a/code/modules/client/preferences/ai_emote_display.dm +++ b/code/modules/client/preferences/ai_emote_display.dm @@ -25,5 +25,5 @@ return istype(preferences.get_highest_priority_job(), /datum/job/ai) -/datum/preference/choiced/ai_emote_display/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/ai_emote_display/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return diff --git a/code/modules/client/preferences/ai_hologram_display.dm b/code/modules/client/preferences/ai_hologram_display.dm index 382e900d03b0..935c71c39850 100644 --- a/code/modules/client/preferences/ai_hologram_display.dm +++ b/code/modules/client/preferences/ai_hologram_display.dm @@ -21,5 +21,5 @@ return istype(preferences.get_highest_priority_job(), /datum/job/ai) -/datum/preference/choiced/ai_hologram_display/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/ai_hologram_display/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return diff --git a/code/modules/client/preferences/blindfold_color.dm b/code/modules/client/preferences/blindfold_color.dm index 8081ac15be8a..b75997bb267e 100644 --- a/code/modules/client/preferences/blindfold_color.dm +++ b/code/modules/client/preferences/blindfold_color.dm @@ -13,5 +13,5 @@ return /datum/quirk/item_quirk/blindness::name in preferences.all_quirks -/datum/preference/color/blindfold_color/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/color/blindfold_color/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return diff --git a/code/modules/client/preferences/body_type.dm b/code/modules/client/preferences/body_type.dm index 33c8f736fd8d..125d47617289 100644 --- a/code/modules/client/preferences/body_type.dm +++ b/code/modules/client/preferences/body_type.dm @@ -13,7 +13,7 @@ /datum/preference/choiced/body_type/create_informed_default_value(datum/preferences/preferences) return gender_has_physique(preferences.read_preference(/datum/preference/choiced/gender)) ? USE_GENDER : FEMALE -/datum/preference/choiced/body_type/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/body_type/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) if (value == USE_GENDER) value = target.gender if (!gender_has_physique(value)) diff --git a/code/modules/client/preferences/chipped.dm b/code/modules/client/preferences/chipped.dm index 25896564edba..c6a476066cea 100644 --- a/code/modules/client/preferences/chipped.dm +++ b/code/modules/client/preferences/chipped.dm @@ -17,5 +17,5 @@ return /datum/quirk/chipped::name in preferences.all_quirks -/datum/preference/choiced/chipped/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/chipped/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return diff --git a/code/modules/client/preferences/clothing.dm b/code/modules/client/preferences/clothing.dm index 40b89849b1c9..b1dee61d6ad1 100644 --- a/code/modules/client/preferences/clothing.dm +++ b/code/modules/client/preferences/clothing.dm @@ -64,7 +64,7 @@ if (DMESSENGER) return /obj/item/storage/backpack/messenger/med -/datum/preference/choiced/backpack/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/backpack/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.backpack = value /// Jumpsuit preference @@ -92,7 +92,7 @@ if (PREF_SKIRT) return /obj/item/clothing/under/vampire/baali/female // DARKPACK EDIT CHANGE -/datum/preference/choiced/jumpsuit/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/jumpsuit/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.jumpsuit_style = value /// Socks preference @@ -120,7 +120,7 @@ return generate_underwear_icon(SSaccessories.socks_list[value], lower_half) -/datum/preference/choiced/socks/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/socks/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.socks = value /// Undershirt preference @@ -169,7 +169,7 @@ icon_with_undershirt.scale(32, 32) return icon_with_undershirt -/datum/preference/choiced/undershirt/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/undershirt/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.undershirt = value /// Underwear preference @@ -198,7 +198,7 @@ return generate_underwear_icon(SSaccessories.underwear_list[value], lower_half, COLOR_ALMOST_BLACK) -/datum/preference/choiced/underwear/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/underwear/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.underwear = value /datum/preference/choiced/underwear/is_accessible(datum/preferences/preferences) diff --git a/code/modules/client/preferences/food_allergy.dm b/code/modules/client/preferences/food_allergy.dm index 1ab5307c1fc9..6040416af554 100644 --- a/code/modules/client/preferences/food_allergy.dm +++ b/code/modules/client/preferences/food_allergy.dm @@ -17,5 +17,5 @@ return /datum/quirk/item_quirk/food_allergic::name in preferences.all_quirks -/datum/preference/choiced/food_allergy/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/food_allergy/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return diff --git a/code/modules/client/preferences/gender.dm b/code/modules/client/preferences/gender.dm index 1ad7f9ac0d8b..f1749ade5d67 100644 --- a/code/modules/client/preferences/gender.dm +++ b/code/modules/client/preferences/gender.dm @@ -7,7 +7,7 @@ /datum/preference/choiced/gender/init_possible_values() return list(MALE, FEMALE, PLURAL, NEUTER) -/datum/preference/choiced/gender/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/gender/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) if(!target.dna.species.sexes) value = PLURAL //disregard gender preferences on this species target.gender = value diff --git a/code/modules/client/preferences/glasses.dm b/code/modules/client/preferences/glasses.dm index 59be8f754857..65e916384966 100644 --- a/code/modules/client/preferences/glasses.dm +++ b/code/modules/client/preferences/glasses.dm @@ -22,5 +22,5 @@ return /datum/quirk/item_quirk/nearsighted::name in preferences.all_quirks -/datum/preference/choiced/glasses/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/glasses/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return diff --git a/code/modules/client/preferences/hemiplegic.dm b/code/modules/client/preferences/hemiplegic.dm index 04a8bf1374e3..6e417e2c05b2 100644 --- a/code/modules/client/preferences/hemiplegic.dm +++ b/code/modules/client/preferences/hemiplegic.dm @@ -14,5 +14,5 @@ return /datum/quirk/hemiplegic::name in preferences.all_quirks -/datum/preference/choiced/hemiplegic/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/hemiplegic/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return diff --git a/code/modules/client/preferences/heterochromatic.dm b/code/modules/client/preferences/heterochromatic.dm index 25a399d6f194..0ff6c9cf325c 100644 --- a/code/modules/client/preferences/heterochromatic.dm +++ b/code/modules/client/preferences/heterochromatic.dm @@ -9,6 +9,6 @@ return /datum/quirk/heterochromatic::name in preferences.all_quirks -/datum/preference/color/heterochromatic/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/color/heterochromatic/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) var/datum/quirk/heterochromatic/hetero_quirk = locate() in target.quirks hetero_quirk?.apply_heterochromatic_eyes(value) diff --git a/code/modules/client/preferences/hotkeys.dm b/code/modules/client/preferences/hotkeys.dm index b96b68286d60..6e928d636ed1 100644 --- a/code/modules/client/preferences/hotkeys.dm +++ b/code/modules/client/preferences/hotkeys.dm @@ -5,3 +5,5 @@ /datum/preference/toggle/hotkeys/apply_to_client(client/client, value) client.hotkeys = value + if(istype(client)) + client.tgui_panel?.send_hotkey_mode() diff --git a/code/modules/client/preferences/language.dm b/code/modules/client/preferences/language.dm index 9c7f4ffc8214..197c19ee3f1d 100644 --- a/code/modules/client/preferences/language.dm +++ b/code/modules/client/preferences/language.dm @@ -44,7 +44,7 @@ return values -/datum/preference/choiced/language/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/language/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return /datum/preference/toggle/language_speakable @@ -61,7 +61,7 @@ return /datum/quirk/bilingual::name in preferences.all_quirks -/datum/preference/toggle/language_speakable/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/toggle/language_speakable/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return /datum/preference/choiced/language_skill @@ -85,7 +85,7 @@ /datum/preference/choiced/language_skill/init_possible_values() return list("100%", "75%", "50%", "33%", "25%", "10%") -/datum/preference/choiced/language_skill/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/language_skill/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return /datum/preference/choiced/csl_strength @@ -104,5 +104,5 @@ /datum/preference/choiced/csl_strength/init_possible_values() return list("75%", "50%", "25%") -/datum/preference/choiced/csl_strength/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/csl_strength/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return diff --git a/code/modules/client/preferences/names.dm b/code/modules/client/preferences/names.dm index fee5edb04248..aebf9f7e3b1d 100644 --- a/code/modules/client/preferences/names.dm +++ b/code/modules/client/preferences/names.dm @@ -18,7 +18,7 @@ var/relevant_job -/datum/preference/name/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/name/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) // Only real_name applies directly, everything else is applied by something else return @@ -44,7 +44,7 @@ group = "_real_name" savefile_key = "real_name" -/datum/preference/name/real_name/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/name/real_name/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.real_name = value target.update_visible_name() // DARKPACK EDIT CHANGE - ORIGINAL: target.name = value target.log_mob_tag("TAG: [target.tag] RENAMED: [key_name(target)]") diff --git a/code/modules/client/preferences/operative_species.dm b/code/modules/client/preferences/operative_species.dm index e67ffff75682..715a3c371957 100644 --- a/code/modules/client/preferences/operative_species.dm +++ b/code/modules/client/preferences/operative_species.dm @@ -20,5 +20,5 @@ return FALSE -/datum/preference/toggle/nuke_ops_species/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/toggle/nuke_ops_species/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return diff --git a/code/modules/client/preferences/paint_color.dm b/code/modules/client/preferences/paint_color.dm index 9c97fc2c8564..37a2fe0cf8ad 100644 --- a/code/modules/client/preferences/paint_color.dm +++ b/code/modules/client/preferences/paint_color.dm @@ -11,5 +11,5 @@ return /datum/quirk/item_quirk/tagger::name in preferences.all_quirks -/datum/preference/color/paint_color/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/color/paint_color/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return diff --git a/code/modules/client/preferences/paraplegic.dm b/code/modules/client/preferences/paraplegic.dm index 10e91deef717..7877c853fa9e 100644 --- a/code/modules/client/preferences/paraplegic.dm +++ b/code/modules/client/preferences/paraplegic.dm @@ -16,5 +16,5 @@ return /datum/quirk/paraplegic::name in preferences.all_quirks -/datum/preference/choiced/paraplegic/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/paraplegic/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return diff --git a/code/modules/client/preferences/persistent_scars.dm b/code/modules/client/preferences/persistent_scars.dm index e80c6cc7c39f..659eeeaaf762 100644 --- a/code/modules/client/preferences/persistent_scars.dm +++ b/code/modules/client/preferences/persistent_scars.dm @@ -4,7 +4,7 @@ savefile_identifier = PREFERENCE_CHARACTER should_update_preview = FALSE -/datum/preference/toggle/persistent_scars/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/toggle/persistent_scars/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) // This proc doesn't do anything, due to the nature of persistent scars, we ALWAYS need to have a client to be able to use them properly. Or at the very least, a ckey. // So we don't need to store this anywhere else, we simply search the preference when we need it. return diff --git a/code/modules/client/preferences/phobia.dm b/code/modules/client/preferences/phobia.dm index 89025b26240b..3ccf85f6b2b4 100644 --- a/code/modules/client/preferences/phobia.dm +++ b/code/modules/client/preferences/phobia.dm @@ -13,5 +13,5 @@ return /datum/brain_trauma/mild/phobia::name in preferences.all_quirks -/datum/preference/choiced/phobia/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/phobia/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return diff --git a/code/modules/client/preferences/playtime_reward_cloak.dm b/code/modules/client/preferences/playtime_reward_cloak.dm index 5eb1c89e9b25..d7e686ad74ac 100644 --- a/code/modules/client/preferences/playtime_reward_cloak.dm +++ b/code/modules/client/preferences/playtime_reward_cloak.dm @@ -12,7 +12,7 @@ return preferences.parent?.is_veteran() -/datum/preference/toggle/playtime_reward_cloak/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/toggle/playtime_reward_cloak/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return /// Returns whether the client should receive the gamer cloak diff --git a/code/modules/client/preferences/prisoner_crime.dm b/code/modules/client/preferences/prisoner_crime.dm index 3f8a1189fc4f..f8d485cb23cd 100644 --- a/code/modules/client/preferences/prisoner_crime.dm +++ b/code/modules/client/preferences/prisoner_crime.dm @@ -8,7 +8,7 @@ /datum/preference/choiced/prisoner_crime/init_possible_values() return assoc_to_keys(GLOB.prisoner_crimes) + "Random" -/datum/preference/choiced/prisoner_crime/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/prisoner_crime/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return /datum/preference/choiced/prisoner_crime/create_default_value() diff --git a/code/modules/client/preferences/prosthetic_limb.dm b/code/modules/client/preferences/prosthetic_limb.dm index a9bdb81e825d..73ff4d00827c 100644 --- a/code/modules/client/preferences/prosthetic_limb.dm +++ b/code/modules/client/preferences/prosthetic_limb.dm @@ -16,5 +16,5 @@ return /datum/quirk/prosthetic_limb::name in preferences.all_quirks -/datum/preference/choiced/prosthetic/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/prosthetic/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return diff --git a/code/modules/client/preferences/prosthetic_organ.dm b/code/modules/client/preferences/prosthetic_organ.dm index 3ac5d66ca319..b073a9daa816 100644 --- a/code/modules/client/preferences/prosthetic_organ.dm +++ b/code/modules/client/preferences/prosthetic_organ.dm @@ -17,5 +17,5 @@ return /datum/quirk/prosthetic_organ::name in preferences.all_quirks -/datum/preference/choiced/prosthetic_organ/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/prosthetic_organ/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return diff --git a/code/modules/client/preferences/random.dm b/code/modules/client/preferences/random.dm index a28c46a4c959..4a0a39d470ad 100644 --- a/code/modules/client/preferences/random.dm +++ b/code/modules/client/preferences/random.dm @@ -4,7 +4,7 @@ savefile_identifier = PREFERENCE_CHARACTER can_randomize = FALSE -/datum/preference/choiced/random_body/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/random_body/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return /datum/preference/choiced/random_body/init_possible_values() @@ -24,7 +24,7 @@ can_randomize = FALSE default_value = FALSE -/datum/preference/toggle/random_hardcore/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/toggle/random_hardcore/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return /datum/preference/toggle/random_hardcore/is_accessible(datum/preferences/preferences) @@ -39,7 +39,7 @@ savefile_identifier = PREFERENCE_CHARACTER can_randomize = FALSE -/datum/preference/choiced/random_name/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/random_name/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return /datum/preference/choiced/random_name/init_possible_values() diff --git a/code/modules/client/preferences/rds_limit.dm b/code/modules/client/preferences/rds_limit.dm index e8d015a0703b..3f96f6b01eeb 100644 --- a/code/modules/client/preferences/rds_limit.dm +++ b/code/modules/client/preferences/rds_limit.dm @@ -5,7 +5,7 @@ default_value = FALSE should_update_preview = FALSE -/datum/preference/toggle/rds_limit/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/toggle/rds_limit/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return /datum/preference/toggle/rds_limit/is_accessible(datum/preferences/preferences) diff --git a/code/modules/client/preferences/scarred_eye.dm b/code/modules/client/preferences/scarred_eye.dm index 7e0b7147691f..33232be81959 100644 --- a/code/modules/client/preferences/scarred_eye.dm +++ b/code/modules/client/preferences/scarred_eye.dm @@ -16,5 +16,5 @@ return /datum/quirk/item_quirk/scarred_eye::name in preferences.all_quirks -/datum/preference/choiced/scarred_eye/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/scarred_eye/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return diff --git a/code/modules/client/preferences/security_department.dm b/code/modules/client/preferences/security_department.dm index 97bd71b69f72..842fec24ed76 100644 --- a/code/modules/client/preferences/security_department.dm +++ b/code/modules/client/preferences/security_department.dm @@ -15,7 +15,7 @@ /datum/preference/choiced/security_department/init_possible_values() return GLOB.security_depts_prefs -/datum/preference/choiced/security_department/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/security_department/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return /datum/preference/choiced/security_department/create_default_value() diff --git a/code/modules/client/preferences/silicon_gender.dm b/code/modules/client/preferences/silicon_gender.dm index 63b49c84927b..a022a38e8a86 100644 --- a/code/modules/client/preferences/silicon_gender.dm +++ b/code/modules/client/preferences/silicon_gender.dm @@ -29,7 +29,7 @@ /datum/preference/choiced/silicon_gender/create_default_value() return SILICON_NEUTER -/datum/preference/choiced/silicon_gender/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/silicon_gender/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return #undef SILICON_MALE diff --git a/code/modules/client/preferences/skin_tone.dm b/code/modules/client/preferences/skin_tone.dm index d2359f8ce694..39a9174dbbf7 100644 --- a/code/modules/client/preferences/skin_tone.dm +++ b/code/modules/client/preferences/skin_tone.dm @@ -26,5 +26,5 @@ return data -/datum/preference/choiced/skin_tone/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/skin_tone/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.skin_tone = value diff --git a/code/modules/client/preferences/species.dm b/code/modules/client/preferences/species.dm index 38b7ebb3fe68..86a500a8893d 100644 --- a/code/modules/client/preferences/species.dm +++ b/code/modules/client/preferences/species.dm @@ -26,7 +26,7 @@ return values -/datum/preference/choiced/species/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/species/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) // target.set_species(value, icon_update = FALSE, pref_load = TRUE) // DARKPACK EDIT REMOVAL - SPLATS /datum/preference/choiced/species/compile_constant_data() diff --git a/code/modules/client/preferences/species_features/basic.dm b/code/modules/client/preferences/species_features/basic.dm index b33f2818bdaf..62de45f8e367 100644 --- a/code/modules/client/preferences/species_features/basic.dm +++ b/code/modules/client/preferences/species_features/basic.dm @@ -26,7 +26,7 @@ category = PREFERENCE_CATEGORY_SECONDARY_FEATURES relevant_head_flag = HEAD_EYECOLOR -/datum/preference/color/eye_color/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/color/eye_color/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) var/hetero = target.eye_color_heterochromatic target.eye_color_left = value if(!hetero) @@ -64,7 +64,7 @@ /datum/preference/choiced/facial_hairstyle/icon_for(value) return generate_icon_with_head_accessory(SSaccessories.facial_hairstyles_list[value]) -/datum/preference/choiced/facial_hairstyle/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/facial_hairstyle/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.set_facial_hairstyle(value, update = FALSE) /datum/preference/choiced/facial_hairstyle/create_default_value() @@ -98,7 +98,7 @@ category = PREFERENCE_CATEGORY_SUPPLEMENTAL_FEATURES relevant_head_flag = HEAD_FACIAL_HAIR -/datum/preference/color/facial_hair_color/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/color/facial_hair_color/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.set_facial_haircolor(value, update = FALSE) /datum/preference/color/facial_hair_color/create_informed_default_value(datum/preferences/preferences) @@ -115,7 +115,7 @@ /datum/preference/choiced/facial_hair_gradient/init_possible_values() return assoc_to_keys_features(SSaccessories.facial_hair_gradients_list) -/datum/preference/choiced/facial_hair_gradient/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/facial_hair_gradient/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.set_facial_hair_gradient_style(new_style = value, update = FALSE) /datum/preference/choiced/facial_hair_gradient/create_default_value() @@ -128,7 +128,7 @@ savefile_key = "facial_hair_gradient_color" relevant_head_flag = HEAD_FACIAL_HAIR -/datum/preference/color/facial_hair_gradient/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/color/facial_hair_gradient/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.set_facial_hair_gradient_color(new_color = value, update = FALSE) /datum/preference/color/facial_hair_gradient/is_accessible(datum/preferences/preferences) @@ -146,7 +146,7 @@ /datum/preference/color/hair_color/has_relevant_feature(datum/preferences/preferences) return ..() || (/datum/quirk/item_quirk/bald::name in preferences.all_quirks) -/datum/preference/color/hair_color/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/color/hair_color/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.set_haircolor(value, update = FALSE) /datum/preference/color/hair_color/create_informed_default_value(datum/preferences/preferences) @@ -171,7 +171,7 @@ var/datum/sprite_accessory/hair/hairstyle = SSaccessories.hairstyles_list[value] return generate_icon_with_head_accessory(hairstyle, hairstyle?.y_offset) -/datum/preference/choiced/hairstyle/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/hairstyle/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.set_hairstyle(value, update = FALSE) /datum/preference/choiced/hairstyle/create_default_value() @@ -209,7 +209,7 @@ /datum/preference/choiced/hair_gradient/init_possible_values() return assoc_to_keys_features(SSaccessories.hair_gradients_list) -/datum/preference/choiced/hair_gradient/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/hair_gradient/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.set_hair_gradient_style(new_style = value, update = FALSE) /datum/preference/choiced/hair_gradient/create_default_value() @@ -222,7 +222,7 @@ savefile_key = "hair_gradient_color" relevant_head_flag = HEAD_HAIR -/datum/preference/color/hair_gradient/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/color/hair_gradient/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.set_hair_gradient_color(new_color = value, update = FALSE) /datum/preference/color/hair_gradient/is_accessible(datum/preferences/preferences) diff --git a/code/modules/client/preferences/species_features/ethereal.dm b/code/modules/client/preferences/species_features/ethereal.dm index 03fcbd4287bf..44be76f9f742 100644 --- a/code/modules/client/preferences/species_features/ethereal.dm +++ b/code/modules/client/preferences/species_features/ethereal.dm @@ -32,5 +32,6 @@ icon.blend_color(GLOB.color_list_ethereal[value], ICON_MULTIPLY) return icon -/datum/preference/choiced/ethereal_color/apply_to_human(mob/living/carbon/human/target, value) - target.dna.features[FEATURE_ETHEREAL_COLOR] = GLOB.color_list_ethereal[value] +/datum/preference/choiced/ethereal_color/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) + if (current_species_has_savekey(preferences)) + target.dna.features[FEATURE_MUTANT_COLOR] = GLOB.color_list_ethereal[value] diff --git a/code/modules/client/preferences/species_features/lizard.dm b/code/modules/client/preferences/species_features/lizard.dm index 849d1a21114a..4a73b00e9801 100644 --- a/code/modules/client/preferences/species_features/lizard.dm +++ b/code/modules/client/preferences/species_features/lizard.dm @@ -81,7 +81,7 @@ /datum/preference/choiced/lizard_legs/init_possible_values() return list(NORMAL_LEGS, DIGITIGRADE_LEGS) -/datum/preference/choiced/lizard_legs/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/lizard_legs/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.dna.features[FEATURE_LEGS] = value // Hack to update the dummy in the preference menu // (Because digi legs are ONLY handled on species change) diff --git a/code/modules/client/preferences/species_features/mutants.dm b/code/modules/client/preferences/species_features/mutants.dm index e7004368e40b..5326b7360add 100644 --- a/code/modules/client/preferences/species_features/mutants.dm +++ b/code/modules/client/preferences/species_features/mutants.dm @@ -15,8 +15,11 @@ /datum/preference/color/mutant_color/create_default_value() return sanitize_hexcolor("[pick("7F", "FF")][pick("7F", "FF")][pick("7F", "FF")]") -/datum/preference/color/mutant_color/apply_to_human(mob/living/carbon/human/target, value) - target.dna.features[FEATURE_MUTANT_COLOR] = value +/datum/preference/color/mutant_color/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) + var/species_type = preferences.read_preference(/datum/preference/choiced/species) + var/datum/species/species = GLOB.species_prototypes[species_type] + if (!(TRAIT_FIXED_MUTANT_COLORS in species.inherent_traits)) + target.dna.features[FEATURE_MUTANT_COLOR] = value /datum/preference/color/mutant_color/is_valid(value) if (!..(value)) diff --git a/code/modules/client/preferences/species_features/vampire.dm b/code/modules/client/preferences/species_features/vampire.dm index 797ccb1e48a4..08bcfee9c210 100644 --- a/code/modules/client/preferences/species_features/vampire.dm +++ b/code/modules/client/preferences/species_features/vampire.dm @@ -24,7 +24,7 @@ ///list that stores a vampire house name for each department GLOBAL_LIST_EMPTY(vampire_houses) -/datum/preference/choiced/vampire_status/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/vampire_status/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) if(!HAS_TRAIT(target, TRAIT_BLOOD_CLANS)) return diff --git a/code/modules/client/preferences/trans_prosthetic.dm b/code/modules/client/preferences/trans_prosthetic.dm index db8447726138..3484fee7fa6f 100644 --- a/code/modules/client/preferences/trans_prosthetic.dm +++ b/code/modules/client/preferences/trans_prosthetic.dm @@ -16,5 +16,5 @@ return /datum/quirk/transhumanist::name in preferences.all_quirks -/datum/preference/choiced/trans_prosthetic/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/trans_prosthetic/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return diff --git a/code/modules/client/preferences/underwear_color.dm b/code/modules/client/preferences/underwear_color.dm index 1304bdaf2da8..51bc34e9bf4b 100644 --- a/code/modules/client/preferences/underwear_color.dm +++ b/code/modules/client/preferences/underwear_color.dm @@ -11,5 +11,5 @@ var/datum/species/species = GLOB.species_prototypes[species_type] return !(TRAIT_NO_UNDERWEAR in species.inherent_traits) -/datum/preference/color/underwear_color/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/color/underwear_color/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.underwear_color = value diff --git a/code/modules/client/preferences/uplink_location.dm b/code/modules/client/preferences/uplink_location.dm index e545a2f005a2..d7d57962b34c 100644 --- a/code/modules/client/preferences/uplink_location.dm +++ b/code/modules/client/preferences/uplink_location.dm @@ -23,5 +23,5 @@ /datum/preference/choiced/uplink_location/create_default_value() return UPLINK_PDA -/datum/preference/choiced/uplink_location/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/uplink_location/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return diff --git a/code/modules/client/preferences/voice.dm b/code/modules/client/preferences/voice.dm index e64714e36c83..08da78994b73 100644 --- a/code/modules/client/preferences/voice.dm +++ b/code/modules/client/preferences/voice.dm @@ -22,7 +22,7 @@ return cached_data return list("invalid") -/datum/preference/choiced/voice/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/voice/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) if(SStts.tts_enabled && !(value in SStts.available_speakers)) value = SStts.random_tts_voice(target.gender) // As a failsafe target.voice = value @@ -43,7 +43,7 @@ /datum/preference/numeric/tts_voice_pitch/create_default_value() return 0 -/datum/preference/numeric/tts_voice_pitch/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/numeric/tts_voice_pitch/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) if(SStts.tts_enabled && SStts.pitch_enabled) target.pitch = value @@ -61,7 +61,7 @@ /datum/preference/choiced/tts_blip_base/init_possible_values() return list(TTS_BLIPS_MASCULINE, TTS_BLIPS_FEMININE) -/datum/preference/choiced/tts_blip_base/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/tts_blip_base/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) if(SStts.tts_enabled) if(value == TTS_BLIPS_MASCULINE) target.blip_base = "male" @@ -89,6 +89,6 @@ /datum/preference/numeric/tts_blip_number/create_default_value() return rand(1, 4) -/datum/preference/numeric/tts_blip_number/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/numeric/tts_blip_number/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) if(SStts.tts_enabled) target.blip_number = value diff --git a/code/modules/client/spawn_text_overlay.dm b/code/modules/client/spawn_text_overlay.dm new file mode 100644 index 000000000000..2912ffda005b --- /dev/null +++ b/code/modules/client/spawn_text_overlay.dm @@ -0,0 +1,46 @@ +/// Displays a typewriter-style spawn text overlay that includes station/area/job name and time +/client/proc/show_spawn_text_overlay(duration = 5 SECONDS) + set waitfor = FALSE + + var/mob_name = mob.name + var/job_title = mob.mind?.assigned_role.title || "Unknown" + + var/station_name = station_name() + var/area_name = get_area_name(mob, format_text = TRUE) || "Unknown Location" + var/time_date = server_timestamp(format = "YYYY-MM-DD hh:mm:ss", ic_time = TRUE) + + var/text = {" + [mob_name] - [job_title] + [station_name] + [area_name] + [time_date] + "} + text = uppertext(text) + + var/atom/movable/screen/spawn_text = new() + spawn_text.maptext_height = 64 + spawn_text.maptext_width = 512 + spawn_text.layer = FLY_LAYER + spawn_text.plane = FULLSCREEN_PLANE + spawn_text.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA + spawn_text.screen_loc = "LEFT+1,TOP-3" + + screen += spawn_text + animate(spawn_text, alpha = 255, time = 1 SECONDS) + + for(var/i in 1 to length_char(text) + 1) + if(QDELETED(spawn_text) || QDELETED(src)) + return + spawn_text.maptext = MAPTEXT_PIXELLARI(copytext_char(text, 1, i)) + sleep(1) + + addtimer(CALLBACK(src, PROC_REF(fade_spawn_text_overlay), src, spawn_text), duration) + +/client/proc/fade_spawn_text_overlay(client/player_client, atom/movable/screen/spawn_text) + if(QDELETED(spawn_text)) + return + animate(spawn_text, alpha = 0, time = 0.5 SECONDS) + sleep(5) + if(player_client && !QDELETED(spawn_text)) + player_client.screen -= spawn_text + qdel(spawn_text) diff --git a/code/modules/client/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm index a9a5d3e4dcd8..7722d7dcbfb4 100644 --- a/code/modules/client/verbs/ooc.dm +++ b/code/modules/client/verbs/ooc.dm @@ -2,7 +2,8 @@ GLOBAL_VAR_INIT(OOC_COLOR, null)//If this is null, use the CSS for OOC. Otherwis GLOBAL_VAR_INIT(normal_ooc_colour, "#002eb8") ///talking in OOC uses this -GAME_VERB(/client, ooc, VERB_OOC, null, msg as text) +GAME_VERB(/client, ooc, VERB_OOC, null) + VERB_ARG(msg, VERB_ARG_TYPE_TEXT, VERB_ARG_SOURCE_INPUT) if(GLOB.say_disabled) //This is here to try to identify lag problems to_chat(usr, span_danger("Speech is currently admin-disabled.")) return diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index aab2bfee2955..d3110ea61ddb 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -398,7 +398,7 @@ .["sterile"] = "Increases the speed at which reagents are administered to others by [round((1/NITRILE_GLOVES_MULTIPLIER-1)*100, 1)]%." if(TRAIT_FAST_CUFFING in clothing_traits) .["secure"] = "Increases the speed at which you apply restraints." - if(emp_protection >= EMP_PROTECTION_NONE) + if(emp_protection > EMP_PROTECTION_NONE) .["emp resistant"] = "Reduces the effects of incoming electromagnetic pulses on the wearer." /obj/item/clothing/examine_descriptor(mob/user) diff --git a/code/modules/clothing/head/animalears.dm b/code/modules/clothing/head/animalears.dm index bcb5ffb63edd..71e08a475f03 100644 --- a/code/modules/clothing/head/animalears.dm +++ b/code/modules/clothing/head/animalears.dm @@ -3,7 +3,7 @@ desc = "A pair of kitty ears. Meow!" icon_state = "kitty" color = "#999999" - + clothing_traits = list(TRAIT_CAT_EMOTES_ALLOWED) dog_fashion = /datum/dog_fashion/head/kitty /obj/item/clothing/head/costume/kitty/visual_equipped(mob/living/carbon/human/user, slot) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 3ba411d75da7..c21dde12968e 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -16,6 +16,7 @@ flags_cover = HEADCOVERSEYES|EARS_COVERED flags_inv = HIDEHAIR dog_fashion = /datum/dog_fashion/head/helmet + resistance_flags = NONE /datum/armor/head_helmet melee = 35 diff --git a/code/modules/clothing/masks/_masks.dm b/code/modules/clothing/masks/_masks.dm index e365abec485e..13be503e96b0 100644 --- a/code/modules/clothing/masks/_masks.dm +++ b/code/modules/clothing/masks/_masks.dm @@ -17,8 +17,25 @@ var/voice_override /// If set to true, activates the radio effect on TTS. Used for sec hailers, but other masks can utilize it for their own vocal effect. var/use_radio_beeps_tts = FALSE - /// The unique sound effect of dying while wearing this - var/unique_death + /// A list of sound overrides for emotes, which can play when the mask is worn on the mask slot + var/list/emote_sounds + +/obj/item/clothing/mask/equipped(mob/living/equipper, slot) + . = ..() + if (!(slot & ITEM_SLOT_MASK)) + return + for(var/key in emote_sounds) + RegisterSignal(equipper, COMSIG_MOB_EMOTE_SOUND(key), PROC_REF(get_emote_sound)) + +/obj/item/clothing/mask/dropped(mob/living/dropper) + . = ..() + for(var/key in emote_sounds) + UnregisterSignal(dropper, COMSIG_MOB_EMOTE_SOUND(key)) + +/obj/item/clothing/mask/proc/get_emote_sound(mob/living/source, key, list/sounds) + SIGNAL_HANDLER + var/sound_override = get_emote_sound_from_list(emote_sounds[key], source) + sounds[sound_override] = EMOTE_SOUND_MASK /obj/item/clothing/mask/attack_self(mob/user) if((clothing_flags & VOICEBOX_TOGGLABLE)) diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 28170db5b3ef..acdb0507ca67 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -426,6 +426,9 @@ GLOBAL_LIST_INIT(clown_mask_options, list( flags_cover = MASKCOVERSEYES resistance_flags = FLAMMABLE fishing_modifier = 0 + emote_sounds = list( + /datum/emote/living/scream::key = SFX_SCREECH, + ) /obj/item/clothing/mask/gas/sexymime name = "sexy mime mask" diff --git a/code/modules/clothing/masks/hailer.dm b/code/modules/clothing/masks/hailer.dm index 9c3f517beb6f..d936a66cf171 100644 --- a/code/modules/clothing/masks/hailer.dm +++ b/code/modules/clothing/masks/hailer.dm @@ -58,7 +58,11 @@ GLOBAL_LIST_INIT(hailer_phrases, list( visor_flags_cover = MASKCOVERSMOUTH | PEPPERPROOF tint = 0 fishing_modifier = 0 - unique_death = 'sound/items/sec_hailer/sec_death.ogg' + emote_sounds = list( + /datum/emote/living/deathgasp::key = 'sound/items/sec_hailer/sec_death.ogg', + ) + voice_filter = @{"[0:a] asetrate=%SAMPLE_RATE%*0.7,aresample=16000,atempo=1/0.7,lowshelf=g=-20:f=500,highpass=f=500,aphaser=in_gain=1:out_gain=1:delay=3.0:decay=0.4:speed=0.5:type=t [out]; [out]atempo=1.2,volume=15dB [final]; anoisesrc=a=0.01:d=60 [noise]; [final][noise] amix=duration=shortest"} + use_radio_beeps_tts = TRUE COOLDOWN_DECLARE(hailer_cooldown) ///Decides the phrases available for use; defines used are the last index of a category of available phrases var/aggressiveness = AGGR_BAD_COP @@ -70,8 +74,6 @@ GLOBAL_LIST_INIT(hailer_phrases, list( var/recent_uses = 0 ///Whether the hailer is emagged or not var/safety = TRUE - voice_filter = @{"[0:a] asetrate=%SAMPLE_RATE%*0.7,aresample=16000,atempo=1/0.7,lowshelf=g=-20:f=500,highpass=f=500,aphaser=in_gain=1:out_gain=1:delay=3.0:decay=0.4:speed=0.5:type=t [out]; [out]atempo=1.2,volume=15dB [final]; anoisesrc=a=0.01:d=60 [noise]; [final][noise] amix=duration=shortest"} - use_radio_beeps_tts = TRUE /obj/item/clothing/mask/gas/sechailer/plasmaman starting_filter_type = /obj/item/gas_filter/plasmaman diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm index 33095e716497..14aac47f5643 100644 --- a/code/modules/clothing/spacesuits/_spacesuits.dm +++ b/code/modules/clothing/spacesuits/_spacesuits.dm @@ -180,7 +180,7 @@ // If we got here, it means thermals are on, the cell is in and the cell has // just had enough charge subtracted from it to power the thermal regulator - user.adjust_bodytemperature(get_temp_change_amount((temperature_setting - user.bodytemperature), 0.08 * seconds_per_tick)) + user.adjust_bodytemperature(get_temp_change_amount((temperature_setting - user.bodytemperature), BODYTEMP_SUIT_CHANGE_RATE * seconds_per_tick)) update_hud_icon(user) // Clean up the cell on destroy diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index 12ba36c89eb7..7613cb6eda37 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -11,6 +11,8 @@ /// Reference to hood object, if it exists var/obj/item/clothing/head/hooded/hood + var/auto_deploy_hood_on_outfit_equip = TRUE + /obj/item/clothing/suit/hooded/Initialize(mapload) . = ..() if (!hoodtype) @@ -27,6 +29,7 @@ on_created = CALLBACK(src, PROC_REF(on_hood_created)),\ on_deployed = CALLBACK(src, PROC_REF(on_hood_up)),\ on_removed = CALLBACK(src, PROC_REF(on_hood_down)),\ + auto_deploy_on_outfit_equip = auto_deploy_hood_on_outfit_equip,\ ) /obj/item/clothing/suit/hooded/Destroy() diff --git a/code/modules/clothing/suits/wintercoats.dm b/code/modules/clothing/suits/wintercoats.dm index 5b4f92e0c473..fb00b5d8db8d 100644 --- a/code/modules/clothing/suits/wintercoats.dm +++ b/code/modules/clothing/suits/wintercoats.dm @@ -16,6 +16,7 @@ var/zipped = FALSE /// Whether alt-clicking this coat zips/unzips it var/can_altclick_zip = TRUE + auto_deploy_hood_on_outfit_equip = FALSE /datum/armor/hooded_wintercoat bio = 10 diff --git a/code/modules/deathmatch/deathmatch_lobby.dm b/code/modules/deathmatch/deathmatch_lobby.dm index 28ba9a5c547f..87dd400bc3da 100644 --- a/code/modules/deathmatch/deathmatch_lobby.dm +++ b/code/modules/deathmatch/deathmatch_lobby.dm @@ -76,9 +76,8 @@ /datum/deathmatch_lobby/proc/find_spawns_and_start_delay(datum/lazy_template/source, list/atoms) SIGNAL_HANDLER - for(var/thing in atoms) - if(istype(thing, /obj/effect/landmark/deathmatch_player_spawn)) - player_spawns += thing + for(var/obj/effect/landmark/deathmatch_player_spawn/spawn_point in atoms) + player_spawns += spawn_point UnregisterSignal(source, COMSIG_LAZY_TEMPLATE_LOADED) map.template_in_use = FALSE @@ -91,8 +90,8 @@ playing = FALSE return FALSE - for(var/modpath in modifiers) - GLOB.deathmatch_game.modifiers[modpath].on_start_game(src) + for(var/datum/deathmatch_modifier/modifier_path as anything in modifiers) + GLOB.deathmatch_game.modifiers[modifier_path].on_start_game(src) for (var/key in players) var/mob/dead/observer/observer = players[key]["mob"] @@ -119,8 +118,8 @@ announce(span_reallybig("GO!")) if(length(modifiers)) var/list/modifier_names = list() - for(var/datum/deathmatch_modifier/modifier as anything in modifiers) - modifier_names += uppertext(initial(modifier.name)) + for(var/datum/deathmatch_modifier/modifier_path as anything in modifiers) + modifier_names += uppertext(initial(modifier_path.name)) announce(span_boldnicegreen("THIS MATCH MODIFIERS: [english_list(modifier_names, and_text = " ,")].")) return TRUE @@ -150,8 +149,8 @@ new_player.PossessByPlayer(ckey) players_info["mob"] = new_player - for(var/datum/deathmatch_modifier/modifier as anything in modifiers) - GLOB.deathmatch_game.modifiers[modifier].apply(new_player, src) + for(var/datum/deathmatch_modifier/modifier_path as anything in modifiers) + GLOB.deathmatch_game.modifiers[modifier_path].apply(new_player, src) // register death handling. register_player_signals(new_player) @@ -193,8 +192,8 @@ loser.ghostize(can_reenter_corpse = FALSE) qdel(loser) - for(var/datum/deathmatch_modifier/modifier in modifiers) - GLOB.deathmatch_game.modifiers[modifier].on_end_game(src) + for(var/datum/deathmatch_modifier/modifier_path as anything in modifiers) + GLOB.deathmatch_game.modifiers[modifier_path].on_end_game(src) clear_reservation() GLOB.deathmatch_game.remove_lobby(host) @@ -323,8 +322,8 @@ continue players[player_key]["loadout"] = loadouts[1] - for(var/deathmatch_mod in modifiers) - GLOB.deathmatch_game.modifiers[deathmatch_mod].on_map_changed(src) + for(var/datum/deathmatch_modifier/modifier_path as anything in modifiers) + GLOB.deathmatch_game.modifiers[modifier_path].on_map_changed(src) /datum/deathmatch_lobby/proc/clear_reservation() if(isnull(location) || isnull(map)) @@ -393,8 +392,8 @@ if(length(modifiers)) var/list/mod_names = list() - for(var/datum/deathmatch_modifier/modpath as anything in modifiers) - mod_names += modpath::name + for(var/datum/deathmatch_modifier/modifier_path as anything in modifiers) + mod_names += modifier_path::name data["active_mods"] = "Selected modifiers: [english_list(mod_names)]" if(is_player && !isnull(players[user.ckey]["loadout"])) @@ -505,13 +504,13 @@ return TRUE if("toggle_modifier") - var/datum/deathmatch_modifier/modpath = text2path(params["modpath"]) - if(!ispath(modpath)) + var/datum/deathmatch_modifier/modifier_path = text2path(params["modpath"]) + if(!ispath(modifier_path)) return TRUE if(usr.ckey != host && !check_rights(R_ADMIN)) return TRUE - var/datum/deathmatch_modifier/chosen_modifier = GLOB.deathmatch_game.modifiers[modpath] - if(modpath in modifiers) + var/datum/deathmatch_modifier/chosen_modifier = GLOB.deathmatch_game.modifiers[modifier_path] + if(modifier_path in modifiers) unselect_modifier(chosen_modifier) return TRUE if(chosen_modifier.selectable(src)) @@ -553,14 +552,14 @@ if(!mod_menu_open) return modifier_list - for(var/modpath in GLOB.deathmatch_game.modifiers) - var/datum/deathmatch_modifier/mod = GLOB.deathmatch_game.modifiers[modpath] + for(var/datum/deathmatch_modifier/modifier_path as anything in GLOB.deathmatch_game.modifiers) + var/datum/deathmatch_modifier/mod = GLOB.deathmatch_game.modifiers[modifier_path] UNTYPED_LIST_ADD(modifier_list, list( "name" = mod.name, "desc" = mod.description, - "modpath" = "[modpath]", - "selected" = (modpath in modifiers), + "modpath" = "[modifier_path]", + "selected" = (modifier_path in modifiers), "selectable" = is_host && mod.selectable(src), )) diff --git a/code/modules/deathmatch/deathmatch_modifier.dm b/code/modules/deathmatch/deathmatch_modifier.dm index 96d2f281ed9b..3e7c6a949c7b 100644 --- a/code/modules/deathmatch/deathmatch_modifier.dm +++ b/code/modules/deathmatch/deathmatch_modifier.dm @@ -526,9 +526,8 @@ ///Pick global modifiers at random. for(var/iteration in 1 to rand(3, 5)) var/datum/deathmatch_modifier/modifier = GLOB.deathmatch_game.modifiers[pick_n_take(modifiers_pool)] - modifier.on_select(lobby) + lobby.select_modifier(modifier) modifier.on_start_game(lobby) - lobby.modifiers += modifier.type modifiers_pool -= modifier.blacklisted_modifiers if(!length(modifiers_pool)) return diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm index 1c6f1dda4a22..5aadcdf0f899 100644 --- a/code/modules/detectivework/scanner.dm +++ b/code/modules/detectivework/scanner.dm @@ -150,8 +150,8 @@ if(!istype(present_reagent, /datum/reagent/blood)) continue - var/blood_DNA = present_reagent.data["blood_DNA"] - var/blood_type = present_reagent.data["blood_type"] + var/blood_DNA = present_reagent.data[BLOOD_DATA_DNA] + var/blood_type = present_reagent.data[BLOOD_DATA_TYPE] if(!blood_DNA || !blood_type) continue diff --git a/code/modules/escape_menu/escape_menu.dm b/code/modules/escape_menu/escape_menu.dm index a710a64537d0..ae5b06aa5185 100644 --- a/code/modules/escape_menu/escape_menu.dm +++ b/code/modules/escape_menu/escape_menu.dm @@ -140,6 +140,7 @@ GAME_VERB_HIDDEN(/client, reset_held_keys_verb, "Reset Held Keys") "timeDilation" = "[round(SStime_track.time_dilation_current, 1)]", "mapName" = SSmapping.current_map?.map_name || "Loading...", "mapFeedbackLink" = SSmapping.current_map?.feedback_link, + "mapWebmap" = SSmapping.current_map?.mapping_url, "canLeaveBody" = isliving(client?.mob), "canAdminHelp" = (/client/verb/adminhelp in client?.verbs), "canSeeNotes" = CONFIG_GET(flag/see_own_notes), diff --git a/code/modules/events/immovable_rod/immovable_rod.dm b/code/modules/events/immovable_rod/immovable_rod.dm index 338952289586..899247e69ebf 100644 --- a/code/modules/events/immovable_rod/immovable_rod.dm +++ b/code/modules/events/immovable_rod/immovable_rod.dm @@ -28,10 +28,13 @@ var/dnd_style_level_up = TRUE /// Whether the rod can loop across other z-levels. The rod will still loop when the z-level is self-looping even if this is FALSE. var/loopy_rod = FALSE + /// Whether or not this rod should be shown to ghosts for auto-orbiting. + var/should_augury = TRUE /obj/effect/immovablerod/Initialize(mapload, atom/target_atom, atom/specific_target, force_looping = FALSE) . = ..() - SSaugury.register_doom(src, 2000) + if(should_augury) + SSaugury.register_doom(src, SEVERITY_ROD) var/turf/real_destination = get_turf(target_atom) destination_turf = real_destination diff --git a/code/modules/events/shuttle_loan/shuttle_loan_datum.dm b/code/modules/events/shuttle_loan/shuttle_loan_datum.dm index 5130d36db71d..b079153879d7 100644 --- a/code/modules/events/shuttle_loan/shuttle_loan_datum.dm +++ b/code/modules/events/shuttle_loan/shuttle_loan_datum.dm @@ -98,7 +98,7 @@ if(prob(50)) spawn_list.Add(/mob/living/basic/trooper/syndicate/ranged/infiltrator) */ - +/* // DARKPACK EDIT REMOVAL START - (Removes Monkey Cubes and Bees) /datum/shuttle_loan_situation/lots_of_bees sender = "CentCom Janitorial Division" announcement_text = "One of our freighters carrying a bee shipment has been attacked by eco-terrorists. Can you clean up the mess for us?" @@ -133,6 +133,7 @@ for(var/i in 1 to 10) var/casing = /obj/item/ammo_casing/spent new casing(pick_n_take(empty_shuttle_turfs)) +*/ // DARKPACK EDIT REMOVAL END /datum/shuttle_loan_situation/jc_a_bomb sender = "CentCom Security Division" diff --git a/code/modules/events/stray_cargo.dm b/code/modules/events/stray_cargo.dm index a8d362deb3b9..0369714c8ce9 100644 --- a/code/modules/events/stray_cargo.dm +++ b/code/modules/events/stray_cargo.dm @@ -42,6 +42,10 @@ var/crate_type /// Set to TRUE to emag the launched crate rather than just unlocking it. var/emag_crate = FALSE + /// Upper bound of how many random seconds to wait before dropping the pod (replaces start_when) + var/upper_bound_wait_time = 40 + /// Lower bound of how many random seconds to wait before dropping the pod (replaces start_when) + var/lower_bound_wait_time = 20 /datum/round_event/stray_cargo/announce(fake) if(fake) @@ -53,13 +57,8 @@ * Also randomizes the start timer */ /datum/round_event/stray_cargo/setup() - start_when = rand(20, 40) - if(admin_override_turf) - impact_area = get_area(admin_override_turf) - else - impact_area = find_event_area() - if(!impact_area) - CRASH("No valid areas for cargo pod found.") + start_when = rand(lower_bound_wait_time , upper_bound_wait_time) + impact_area = get_impact_area() var/list/turf_test = get_area_turfs(impact_area) if(!turf_test.len) CRASH("Stray Cargo Pod : No valid turfs found for [impact_area] - [impact_area.type]") @@ -71,8 +70,23 @@ if(initial(pack_type.order_flags) & ORDER_SPECIAL) stray_spawnable_supply_packs -= pack +/datum/round_event/stray_cargo/proc/get_impact_area() + if(admin_override_turf) + . = get_area(admin_override_turf) + else + . = find_event_area() + if(isnull(.)) + CRASH("No valid areas for cargo pod found.") + ///Spawns a random supply pack, puts it in a pod, and spawns it on a random tile of the selected area /datum/round_event/stray_cargo/start() + var/turf/landing_zone = get_landing_zone() + var/obj/structure/closet/supplypod/pod = make_pod() + var/obj/container = get_contents() + send_pod(landing_zone, pod, container) + +///Selects a place for the pod to land in +/datum/round_event/stray_cargo/proc/get_landing_zone() var/list/turf/valid_turfs = get_area_turfs(impact_area) //Only target non-dense turfs to prevent wall-embedded pods for(var/i in valid_turfs) @@ -84,6 +98,14 @@ landing_zone = admin_override_turf else landing_zone = pick(valid_turfs) + return landing_zone + +///Handles the creation of the pod, in case it needs to be modified beforehand +/datum/round_event/stray_cargo/proc/make_pod() + return new /obj/structure/closet/supplypod + +///Generates the contents of the pod +/datum/round_event/stray_cargo/proc/get_contents() var/pack_type if(admin_override_contents) pack_type = admin_override_contents @@ -104,8 +126,8 @@ var/storage_override if(initial(supply_pack.order_flags) & ORDER_GOODY) // We offer goody items inside of briefcases, but regular crates still default to their standard crates. storage_override = /obj/item/storage/briefcase/empty - var/obj/container = supply_pack.generate(null, crate_override = (crate_type || storage_override)) + var/obj/container = supply_pack.generate(null, crate_override = (crate_type || storage_override)) if(container && istype(container, /obj/structure/closet/crate)) //empty supply packs are a thing! get memed on. var/obj/structure/closet/crate/crate = container if(emag_crate) @@ -113,16 +135,17 @@ else crate.locked = FALSE //Unlock secure crates crate.update_appearance() - var/obj/structure/closet/supplypod/pod = make_pod() + return container + +///Sends the pod to the given location, containing the container +/datum/round_event/stray_cargo/proc/send_pod(landing_zone, pod, container) var/obj/effect/pod_landingzone/landing_marker = new(landing_zone, pod, container) + create_ghost_notification(landing_marker) + +/datum/round_event/stray_cargo/proc/create_ghost_notification(landing_marker) var/static/mutable_appearance/target_appearance = mutable_appearance('icons/obj/supplypods_32x32.dmi', "LZ") notify_ghosts("[control.name] has summoned a supply crate!", source = get_turf(landing_marker), header = "Cargo Inbound", alert_overlay = target_appearance) -///Handles the creation of the pod, in case it needs to be modified beforehand -/datum/round_event/stray_cargo/proc/make_pod() - var/obj/structure/closet/supplypod/S = new - return S - ///Picks an area that wouldn't risk critical damage if hit by a pod explosion /datum/round_event/stray_cargo/proc/find_event_area() var/static/list/allowed_areas diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index 180054fa7a1f..311eb5502f55 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -187,10 +187,17 @@ clear_signals() kill() +/datum/round_event/vent_clog/proc/on_examine(datum/source, mob/user, list/examine_list) + if(vent.welded) + examine_list += span_notice("Something's moving around in it, but it's being blocked by the welded opening.") + return + examine_list += span_warning("Something's trying to get out. You could use a [span_green("plunger")] to send it back on its way.") + ///Handles the initial steps of clogging a vent, either at event start or when the vent moves. /datum/round_event/vent_clog/proc/clog_vent() RegisterSignal(vent, COMSIG_QDELETING, PROC_REF(vent_move)) RegisterSignal(vent, COMSIG_PLUNGER_ACT, PROC_REF(plunger_unclog)) + RegisterSignal(vent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) for(var/turf/nearby_turf in view(2, get_turf(vent))) if(isopenturf(nearby_turf) && prob(85)) @@ -200,7 +207,7 @@ ///Clears the signals related to the event, before we wrap things up. /datum/round_event/vent_clog/proc/clear_signals() - UnregisterSignal(vent, list(COMSIG_QDELETING, COMSIG_PLUNGER_ACT)) + UnregisterSignal(vent, list(COMSIG_QDELETING, COMSIG_PLUNGER_ACT, COMSIG_ATOM_EXAMINE)) /datum/round_event_control/vent_clog/major name = "Ventilation Clog: Major" diff --git a/code/modules/fishing/fish/fish_traits.dm b/code/modules/fishing/fish/fish_traits.dm index 3df656406186..48376affc2c4 100644 --- a/code/modules/fishing/fish/fish_traits.dm +++ b/code/modules/fishing/fish/fish_traits.dm @@ -201,8 +201,7 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) if(HAS_TRAIT(rod, TRAIT_ROD_IGNORE_ENVIRONMENT)) return var/turf/turf = get_turf(location) - var/light_amount = turf?.get_lumcount() - if(light_amount > SHADOW_SPECIES_LIGHT_THRESHOLD) + if(turf?.check_lumcount_above(SHADOW_SPECIES_LIGHT_THRESHOLD)) .[MULTIPLICATIVE_FISHING_MOD] = 0 /datum/fish_trait/nocturnal/apply_to_fish(obj/item/fish/fish, initial = TRUE) @@ -218,8 +217,7 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) if(!source.loc || (!HAS_TRAIT(source.loc, TRAIT_IS_AQUARIUM) && !isturf(source.loc))) return var/turf/turf = get_turf(source) - var/light_amount = turf.get_lumcount() - if(light_amount > SHADOW_SPECIES_LIGHT_THRESHOLD) + if(turf.check_lumcount_above(SHADOW_SPECIES_LIGHT_THRESHOLD)) source.damage_fish(0.5 * seconds_per_tick) /datum/fish_trait/nocturnal/apply_to_mob(mob/living/basic/mob) @@ -237,9 +235,8 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) var/turf/our_turf = mob.loc if(!isturf(our_turf)) return - var/light_amount = our_turf.get_lumcount() - if (light_amount < SHADOW_SPECIES_LIGHT_THRESHOLD) //heal in the dark + if (our_turf.check_lumcount_below(SHADOW_SPECIES_LIGHT_THRESHOLD)) //heal in the dark mob.apply_status_effect(/datum/status_effect/shadow/regeneration) /datum/fish_trait/heavy diff --git a/code/modules/food_and_drinks/food/burgers.dm b/code/modules/food_and_drinks/food/burgers.dm index 846489d19bca..ac37cd16e1a6 100644 --- a/code/modules/food_and_drinks/food/burgers.dm +++ b/code/modules/food_and_drinks/food/burgers.dm @@ -551,7 +551,7 @@ /datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 1, - /datum/reagent/consumable/liquidelectricity/enriched = 6, + /datum/reagent/consumable/liquidelectricity = 6, ) tastes = list("bun" = 2, "pure electricity" = 4) foodtypes = GRAIN | TOXIC diff --git a/code/modules/food_and_drinks/food/cake.dm b/code/modules/food_and_drinks/food/cake.dm index 821b62bb8e2c..28d4c9a6da3c 100644 --- a/code/modules/food_and_drinks/food/cake.dm +++ b/code/modules/food_and_drinks/food/cake.dm @@ -302,7 +302,7 @@ /datum/reagent/consumable/sprinkles = 10, /datum/reagent/consumable/nutriment/vitamin = 5, /datum/reagent/consumable/pwr_game = 10, - /datum/reagent/consumable/liquidelectricity/enriched = 10, + /datum/reagent/consumable/liquidelectricity = 10, ) tastes = list("cake" = 3, "a Vlad's Salad" = 1) slice_type = /obj/item/food/cakeslice/birthday/energy @@ -333,7 +333,7 @@ /datum/reagent/consumable/sprinkles = 2, /datum/reagent/consumable/nutriment/vitamin = 1, /datum/reagent/consumable/pwr_game = 2, - /datum/reagent/consumable/liquidelectricity/enriched = 2, + /datum/reagent/consumable/liquidelectricity = 2, ) tastes = list("cake" = 3, "a Vlad's Salad" = 1) crafting_complexity = FOOD_COMPLEXITY_4 diff --git a/code/modules/food_and_drinks/food/martian.dm b/code/modules/food_and_drinks/food/martian.dm index 2f0fabddee8f..9d54fa3af621 100644 --- a/code/modules/food_and_drinks/food/martian.dm +++ b/code/modules/food_and_drinks/food/martian.dm @@ -1386,7 +1386,7 @@ icon = 'icons/obj/food/martian.dmi' icon_state = "pickled_voltvine" food_reagents = list( - /datum/reagent/consumable/liquidelectricity/enriched = 4, + /datum/reagent/consumable/liquidelectricity = 4, /datum/reagent/consumable/nutriment/vitamin = 2, ) tastes = list("sour radish" = 1) @@ -1401,7 +1401,7 @@ icon = 'icons/obj/food/martian.dmi' icon_state = "volt_fish" food_reagents = list( - /datum/reagent/consumable/liquidelectricity/enriched = 6, + /datum/reagent/consumable/liquidelectricity = 6, /datum/reagent/consumable/nutriment/protein = 4, ) tastes = list("fish" = 1, "sour pear" = 1) @@ -1416,7 +1416,7 @@ icon = 'icons/obj/food/martian.dmi' icon_state = "sprout_bowl" food_reagents = list( - /datum/reagent/consumable/liquidelectricity/enriched = 8, + /datum/reagent/consumable/liquidelectricity = 8, /datum/reagent/consumable/nutriment/protein = 4, /datum/reagent/consumable/nutriment/vitamin = 2, ) diff --git a/code/modules/food_and_drinks/food/meatslab.dm b/code/modules/food_and_drinks/food/meatslab.dm index 60687d712db2..05b23af1b3db 100644 --- a/code/modules/food_and_drinks/food/meatslab.dm +++ b/code/modules/food_and_drinks/food/meatslab.dm @@ -7,7 +7,7 @@ var/subjectjob = null var/blood_decal_type = /obj/effect/decal/cleanable/blood -/obj/item/food/meat/Initialize(mapload, blood_dna_list = list("meaty DNA" = get_blood_type(BLOOD_TYPE_MEAT))) +/obj/item/food/meat/Initialize(mapload, blood_dna_list = list("meaty DNA" = get_blood_type(/datum/blood_type/meat))) . = ..() if(!blood_decal_type || !length(custom_materials)) @@ -170,7 +170,7 @@ /obj/item/food/meat/slab/human/mutant/ethereal icon_state = "etherealmeat" desc = "So shiny you feel like ingesting it might make you shine too" - food_reagents = list(/datum/reagent/consumable/liquidelectricity/enriched = 10) + food_reagents = list(/datum/reagent/consumable/liquidelectricity = 10) tastes = list("pure electricity" = 2, "meat" = 1) foodtypes = RAW | MEAT | TOXIC | GORE venue_value = FOOD_MEAT_MUTANT diff --git a/code/modules/food_and_drinks/food/pastries.dm b/code/modules/food_and_drinks/food/pastries.dm index 89c418b8cf4a..08dc0e8fe286 100644 --- a/code/modules/food_and_drinks/food/pastries.dm +++ b/code/modules/food_and_drinks/food/pastries.dm @@ -335,7 +335,7 @@ /datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/nutriment/vitamin = 2, /datum/reagent/consumable/caramel = 3, - /datum/reagent/consumable/liquidelectricity/enriched = 3, + /datum/reagent/consumable/liquidelectricity = 3, ) tastes = list("cake" = 3, "caramel" = 2, "zap" = 1) foodtypes = GRAIN|DAIRY|VEGETABLES|SUGAR diff --git a/code/modules/food_and_drinks/food/pie.dm b/code/modules/food_and_drinks/food/pie.dm index 2e29b2a33451..9489371f1449 100644 --- a/code/modules/food_and_drinks/food/pie.dm +++ b/code/modules/food_and_drinks/food/pie.dm @@ -503,7 +503,7 @@ icon_state = "bacid_pie" food_reagents = list( /datum/reagent/consumable/nutriment = 18, - /datum/reagent/consumable/liquidelectricity/enriched = 18 + /datum/reagent/consumable/liquidelectricity = 18 ) tastes = list("battery acid" = 2, "electricity" = 2, "a cyber world" = 2) foodtypes = GRAIN|DAIRY|TOXIC @@ -518,7 +518,7 @@ icon_state = "bacid_pie_slice" food_reagents = list( /datum/reagent/consumable/nutriment = 4.5, - /datum/reagent/consumable/liquidelectricity/enriched = 4.5 + /datum/reagent/consumable/liquidelectricity = 4.5 ) tastes = list("battery acid" = 1, "electricity" = 1, "a cyber world" = 1) foodtypes = TOXIC diff --git a/code/modules/food_and_drinks/food/pizza.dm b/code/modules/food_and_drinks/food/pizza.dm index ee57c9e6b3b7..8ddd82db8ffd 100644 --- a/code/modules/food_and_drinks/food/pizza.dm +++ b/code/modules/food_and_drinks/food/pizza.dm @@ -560,7 +560,7 @@ icon_state ="energypizza" food_reagents = list( /datum/reagent/consumable/nutriment = 18, - /datum/reagent/consumable/liquidelectricity/enriched = 18, + /datum/reagent/consumable/liquidelectricity = 18, ) tastes = list("pure electricity" = 4, "pizza" = 2) slice_type = /obj/item/food/pizzaslice/energy diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index 7f4f88ec61ae..29f315c43847 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -217,7 +217,7 @@ trash_type = /obj/item/trash/energybar food_reagents = list( /datum/reagent/consumable/nutriment = 3, - /datum/reagent/consumable/liquidelectricity/enriched = 3, + /datum/reagent/consumable/liquidelectricity = 3, ) tastes = list("pure electricity" = 3, "fitness" = 2) foodtypes = TOXIC @@ -644,7 +644,7 @@ GLOBAL_LIST_INIT(safe_peanut_types, populate_safe_peanut_types()) icon_state = "shok_roks_candy" trash_type = /obj/item/trash/shok_roks food_reagents = list( - /datum/reagent/consumable/liquidelectricity/enriched = 2, + /datum/reagent/consumable/liquidelectricity = 2, /datum/reagent/consumable/sugar = 3 ) food_flags = FOOD_FINGER_FOOD diff --git a/code/modules/food_and_drinks/machinery/gibber.dm b/code/modules/food_and_drinks/machinery/gibber.dm index ce61460c7222..67881d3178e6 100644 --- a/code/modules/food_and_drinks/machinery/gibber.dm +++ b/code/modules/food_and_drinks/machinery/gibber.dm @@ -232,11 +232,9 @@ GAME_VERB_SRC(/obj/machinery/gibber, eject, oview(1), "Empty gibber", null) var/mob/living/carbon/human/agent_whiskey = victim var/drop_chance = 0 for (var/obj/item/bodypart/limb as anything in agent_whiskey.get_bodyparts()) - if (!limb.butcher_drops) - continue - - for (var/obj/item/drop_type as anything in limb.butcher_drops) - var/amount = limb.butcher_drops[drop_type] || 1 + var/list/limb_butcher_drops = limb.get_butcher_drops() + for (var/obj/item/drop_type as anything in limb_butcher_drops) + var/amount = limb_butcher_drops[drop_type] || 1 drop_chance += amount * efficiency if (drop_chance > 1) amount = floor(drop_chance) diff --git a/code/modules/food_and_drinks/machinery/microwave.dm b/code/modules/food_and_drinks/machinery/microwave.dm index f08922430f0c..77dc1cfa9c23 100644 --- a/code/modules/food_and_drinks/machinery/microwave.dm +++ b/code/modules/food_and_drinks/machinery/microwave.dm @@ -854,7 +854,12 @@ pre_fail() return - if(!vampire_charge_amount || !length(ingredients) || vampire_charge_amount < 25 || (cell_powered && (isnull(cell) || !cell.charge))) + if(cell_powered && (isnull(cell) || !cell.charge)) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, FALSE) + balloon_alert(cooker, "no power draw!") + return + + if(!vampire_charge_amount || !length(ingredients) || vampire_charge_amount < 25) vampire_cell = null charge_loop_finish(cooker) return diff --git a/code/modules/food_and_drinks/recipes/food_mixtures.dm b/code/modules/food_and_drinks/recipes/food_mixtures.dm index edb20b25a908..f66217edd8d3 100644 --- a/code/modules/food_and_drinks/recipes/food_mixtures.dm +++ b/code/modules/food_and_drinks/recipes/food_mixtures.dm @@ -334,11 +334,21 @@ /datum/chemical_reaction/food/grounding_neutralise results = list(/datum/reagent/consumable/salt = 2) - required_reagents = list(/datum/reagent/consumable/liquidelectricity/enriched = 2, /datum/reagent/consumable/grounding_solution = 1) + required_reagents = list( + /datum/reagent/consumable/liquidelectricity = 2, + /datum/reagent/consumable/grounding_solution = 1, + ) mix_message = "The mixture lets off a sharp snap as the electricity discharges." mix_sound = 'sound/items/weapons/taser.ogg' reaction_flags = REACTION_INSTANT | REACTION_TAG_ACTIVE +/datum/chemical_reaction/food/grounding_neutralise/pre_reaction_other_checks(datum/reagents/holder) + for(var/datum/reagent/consumable/liquidelectricity/liquid_elec in holder.reagent_list) + if(LAZYACCESS(liquid_elec.data, BLOOD_DATA_ENRICHED_ETHEREAL)) + return ..() + + return FALSE + /datum/chemical_reaction/food/martian_batter results = list(/datum/reagent/consumable/martian_batter = 10) required_reagents = list(/datum/reagent/consumable/flour = 5, /datum/reagent/consumable/nutriment/soup/dashi = 5) diff --git a/code/modules/food_and_drinks/recipes/soup_mixtures.dm b/code/modules/food_and_drinks/recipes/soup_mixtures.dm index 1fe85af0dc00..bbdc09811a00 100644 --- a/code/modules/food_and_drinks/recipes/soup_mixtures.dm +++ b/code/modules/food_and_drinks/recipes/soup_mixtures.dm @@ -1187,7 +1187,7 @@ /datum/reagent/consumable/nutriment/soup/electrons = 30, // Jupiter cups obviously contain a fair amount of LE naturally, // but to make it "worthwhile" for Ethereals to eat we add a bit extra - /datum/reagent/consumable/liquidelectricity/enriched = 10, + /datum/reagent/consumable/liquidelectricity = 10, ) percentage_of_nutriment_converted = 0.10 @@ -1463,11 +1463,11 @@ drink_type = MEAT | VEGETABLES | GORE /datum/chemical_reaction/food/soup/black_broth + required_temp = 325 required_reagents = list( /datum/reagent/water = 40, /datum/reagent/consumable/vinegar = 8, /datum/reagent/blood = 8, - /datum/reagent/consumable/ice = 4, ) required_ingredients = list( /obj/item/food/tiziran_sausage = 1, diff --git a/code/modules/hallucination/eyes_in_dark.dm b/code/modules/hallucination/eyes_in_dark.dm index 9c127fb4e14f..0f880a5e251e 100644 --- a/code/modules/hallucination/eyes_in_dark.dm +++ b/code/modules/hallucination/eyes_in_dark.dm @@ -20,7 +20,7 @@ var/list/valid = list() for(var/turf/open/nearby in view(hallucinator)) - if(nearby.get_lumcount() > LIGHTING_TILE_IS_DARK) + if(nearby.check_lumcount_above(LIGHTING_TILE_IS_DARK)) continue valid += nearby @@ -82,7 +82,7 @@ /obj/effect/abstract/floating_eyes/process(seconds_per_tick) var/turf/below_us = get_turf(src) var/mob/seer = seer_ref?.resolve() - if(below_us.get_lumcount() > LIGHTING_TILE_IS_DARK || seer?.lighting_cutoff >= 2.5 || get_dist(seer, src) <= 1) + if(below_us.check_lumcount_above(LIGHTING_TILE_IS_DARK) || seer?.lighting_cutoff >= 2.5 || get_dist(seer, src) <= 1) graceful_delete() /obj/effect/abstract/floating_eyes/proc/graceful_delete() diff --git a/code/modules/hallucination/on_fire.dm b/code/modules/hallucination/on_fire.dm index 75534e475c97..625ff1cf15d2 100644 --- a/code/modules/hallucination/on_fire.dm +++ b/code/modules/hallucination/on_fire.dm @@ -49,6 +49,7 @@ hallucinator.client?.images |= fire_overlay to_chat(hallucinator, span_userdanger("You're set on fire!")) + hallucinator.add_mood_event("on_fire", /datum/mood_event/on_fire) var/atom/movable/screen/alert/fire/fake/alert = hallucinator.throw_alert(ALERT_FIRE, /atom/movable/screen/alert/fire/fake, override = TRUE) alert.hallucination_weakref = WEAKREF(src) times_to_lower_stamina = rand(5, 10) @@ -58,6 +59,9 @@ /datum/hallucination/fire/Destroy() hallucinator.clear_alert(ALERT_FIRE, clear_override = TRUE) hallucinator.clear_alert(ALERT_TEMPERATURE, clear_override = TRUE) + if(!hallucinator.on_fire) + hallucinator.clear_mood_event("on_fire") + hallucinator.add_mood_event("fake_fire", /datum/mood_event/fake_fire) if(fire_overlay) hallucinator.client?.images -= fire_overlay fire_overlay = null @@ -143,3 +147,8 @@ /atom/movable/screen/alert/fire/fake/handle_stop_drop_roll(mob/living/roller) return !!roller.apply_status_effect(/datum/status_effect/stop_drop_roll/hallucinating, hallucination_weakref) + +/datum/mood_event/fake_fire + description = "Oh... I was just imagining those flames." + mood_change = 4 + timeout = 30 SECONDS diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index 6e2db6c05bae..55eaeff29bc7 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -49,8 +49,7 @@ /obj/machinery/biogenerator/Initialize(mapload) . = ..() - if(!GLOB.autounlock_techwebs[/datum/techweb/autounlocking/biogenerator]) - GLOB.autounlock_techwebs[/datum/techweb/autounlocking/biogenerator] = new /datum/techweb/autounlocking/biogenerator + GLOB.autounlock_techwebs[/datum/techweb/autounlocking/biogenerator] ||= new /datum/techweb/autounlocking/biogenerator() stored_research = GLOB.autounlock_techwebs[/datum/techweb/autounlocking/biogenerator] soundloop = new(src, processing) if(mapload) @@ -494,27 +493,26 @@ data["categories"] = list() data["max_visual_biomass"] = max_visual_biomass - var/categories = show_categories.Copy() + var/list/categories = show_categories.Copy() for(var/category in categories) categories[category] = list() - for(var/design_id in stored_research.researched_designs) - var/datum/design/design = SSresearch.techweb_design_by_id(design_id) + for(var/design_path in stored_research.researched_designs) + var/datum/design/design = SSresearch.techweb_designs[design_path] for(var/category in categories) if(category in design.category) categories[category] += design - for(var/category in categories) + for(var/category, category_designs in categories) var/list/cat = list( "name" = category, "items" = (category == selected_cat ? list() : null)) - for(var/item in categories[category]) - var/datum/design/design = item + for(var/datum/design/design as anything in category_designs) cat["items"] += list(list( - "id" = design.id, + "path" = design.type, "name" = design.name, - "is_reagent" = design.make_reagent != null, + "is_reagent" = !isnull(design.make_reagent), "cost" = design.materials[SSmaterials.get_material(/datum/material/biomass)] / efficiency, )) data["categories"] += list(cat) @@ -537,24 +535,23 @@ return TRUE if("create") - var/amount = text2num(params["amount"]) - if(!amount) + var/design_path = text2path(params["design_path"]) + if(!design_path) return - var/id = params["id"] - if(!stored_research.researched_designs.Find(id)) - stack_trace("ID did not map to a researched datum [id]") + if(!stored_research.researched_designs[design_path]) return - var/datum/design/design = SSresearch.techweb_design_by_id(id) - amount = clamp(amount, 1, (design.make_reagent && beaker ? beaker.reagents.maximum_volume - beaker.reagents.total_volume : max_output)) - - if(design && !istype(design, /datum/design/error_design)) - create_product(design, amount) + var/datum/design/design = SSresearch.techweb_designs[design_path] + if(!istype(design)) + stack_trace("Invalid design ID passed into biogenerator ui_act()") + return - else - stack_trace("ID could not be turned into a valid techweb design datum [id]") + var/amount = text2num(params["amount"]) + if(!amount) return + amount = clamp(amount, 1, (design.make_reagent && beaker ? beaker.reagents.maximum_volume - beaker.reagents.total_volume : max_output)) + create_product(design, amount) return TRUE diff --git a/code/modules/hydroponics/grown/berries.dm b/code/modules/hydroponics/grown/berries.dm index 697c7eb41ee9..3c4106275622 100644 --- a/code/modules/hydroponics/grown/berries.dm +++ b/code/modules/hydroponics/grown/berries.dm @@ -220,7 +220,12 @@ icon_harvest = "lanternfruit-harvest" genes = list(/datum/plant_gene/trait/glow/yellow) mutatelist = null - reagents_add = list(/datum/reagent/consumable/nutriment = 0.07, /datum/reagent/sulfur = 0.07, /datum/reagent/consumable/sugar = 0.07, /datum/reagent/consumable/liquidelectricity = 0.07) + reagents_add = list( + /datum/reagent/consumable/nutriment = 0.07, + /datum/reagent/sulfur = 0.07, + /datum/reagent/consumable/sugar = 0.07, + /datum/reagent/consumable/liquidelectricity = 0.07, + ) graft_gene = /datum/plant_gene/trait/glow/yellow /obj/item/food/grown/lanternfruit diff --git a/code/modules/hydroponics/grown/mushrooms.dm b/code/modules/hydroponics/grown/mushrooms.dm index e999e3b66534..99a085dcc875 100644 --- a/code/modules/hydroponics/grown/mushrooms.dm +++ b/code/modules/hydroponics/grown/mushrooms.dm @@ -224,7 +224,12 @@ endurance = 8 yield = 4 growthstages = 2 - genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/reagent/preset/liquidelectricity, /datum/plant_gene/trait/carnivory/jupitercup) + genes = list( + /datum/plant_gene/reagent/preset/liquidelectricity, + /datum/plant_gene/trait/carnivory/jupitercup, + /datum/plant_gene/trait/cell_charge, + /datum/plant_gene/trait/plant_type/fungal_metabolism, + ) growing_icon = 'icons/obj/service/hydroponics/growing_mushrooms.dmi' reagents_add = list(/datum/reagent/consumable/nutriment = 0.1) mutatelist = null @@ -300,7 +305,11 @@ icon_harvest = "glowcap-harvest" plantname = "Glowcaps" product = /obj/item/food/grown/mushroom/glowshroom/glowcap - genes = list(/datum/plant_gene/trait/glow/red, /datum/plant_gene/trait/cell_charge, /datum/plant_gene/trait/plant_type/fungal_metabolism) + genes = list( + /datum/plant_gene/trait/glow/red, + /datum/plant_gene/trait/cell_charge, + /datum/plant_gene/trait/plant_type/fungal_metabolism, + ) mutatelist = null reagents_add = list(/datum/reagent/teslium = 0.1, /datum/reagent/consumable/nutriment = 0.04) rarity = 30 diff --git a/code/modules/hydroponics/grown/replicapod.dm b/code/modules/hydroponics/grown/replicapod.dm index 7c79f6b79ef8..f2830a3274bf 100644 --- a/code/modules/hydroponics/grown/replicapod.dm +++ b/code/modules/hydroponics/grown/replicapod.dm @@ -81,11 +81,11 @@ ckey = blood.data["ckey"] realName = blood.data["real_name"] blood_gender = blood.data["gender"] - blood_type = blood.data["blood_type"] + blood_type = blood.data[BLOOD_DATA_TYPE] features = blood.data["features"] factions = blood.data["factions"] quirks = blood.data["quirks"] - sampleDNA = blood.data["blood_DNA"] + sampleDNA = blood.data[BLOOD_DATA_DNA] contains_sample = TRUE visible_message(span_notice("The [src] is injected with a fresh blood sample.")) investigate_log("[key_name(mind)]'s cloning record was added to [src]", INVESTIGATE_BOTANY) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 6855bb760f43..0b09df2e9832 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -311,10 +311,6 @@ set_self_sustaining(FALSE) visible_message(span_warning("[name]'s auto-grow functionality shuts off!")) - if(isturf(loc)) - var/turf/currentTurf = loc - light_level = currentTurf.get_lumcount() - if(world.time > (lastcycle + cycledelay)) lastcycle = world.time if(myseed && plant_status != HYDROTRAY_PLANT_DEAD) @@ -344,7 +340,7 @@ //Photosynthesis///////////////////////////////////////////////////////// // Lack of light hurts non-mushrooms - if(light_level < (is_fungus ? 0.2 : 0.4)) + if(astype(loc, /turf)?.check_lumcount_below(is_fungus ? 0.2 : 0.4)) adjust_plant_health((is_fungus ? -1 : -2) / rating) //Water////////////////////////////////////////////////////////////////// diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index a550a644ce75..c7fa89f32ae7 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -802,6 +802,22 @@ trait_ids = CONTENTS_CHANGE_ID mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_GRAFTABLE +/datum/plant_gene/trait/brewing/on_new_plant(obj/item/our_plant, newloc) + . = ..() + if(!.) + return + + RegisterSignal(our_plant, COMSIG_PLANT_ON_HARVEST, PROC_REF(brewing_harvest)) + +/datum/plant_gene/trait/brewing/proc/brewing_harvest(obj/item/our_plant, obj/item/seeds/our_seed) + SIGNAL_HANDLER + + if(!istype(our_plant, /obj/item/food/grown)) + return + + var/obj/item/food/grown/grown_plant = our_plant + grown_plant.ferment() + /** * Similar to auto-distilling, but instead of brewing the plant's contents it juices it. * @@ -814,6 +830,19 @@ trait_ids = CONTENTS_CHANGE_ID mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_GRAFTABLE +/datum/plant_gene/trait/juicing/on_new_plant(obj/item/our_plant, newloc) + . = ..() + if(!.) + return + + RegisterSignal(our_plant, COMSIG_PLANT_ON_HARVEST, PROC_REF(juicing_harvest)) + +/datum/plant_gene/trait/juicing/proc/juicing_harvest(obj/item/our_plant, obj/item/seeds/our_seed) + SIGNAL_HANDLER + + // FALSE is used to differentiate from null + our_plant.juice(juicer = FALSE) + /** * Plays a laughter sound when someone slips on it. * Like the sitcom component but for plants. @@ -923,6 +952,23 @@ trait_flags = TRAIT_HALVES_YIELD mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_GRAFTABLE +/datum/plant_gene/trait/chem_heating/on_new_plant(obj/item/our_plant, newloc) + . = ..() + if(!.) + return + + RegisterSignal(our_plant, COMSIG_PLANT_ON_HARVEST, PROC_REF(chem_heating_harvest)) + +/datum/plant_gene/trait/chem_heating/proc/chem_heating_harvest(obj/item/our_plant, obj/item/seeds/our_seed) + SIGNAL_HANDLER + + var/num_nutriment = our_plant.reagents.get_reagent_amount(/datum/reagent/consumable/nutriment) + our_plant.visible_message(span_notice("[our_plant] releases freezing air, consuming its nutriments to heat its contents.")) + our_plant.reagents.remove_reagent(/datum/reagent/consumable/nutriment, num_nutriment) + our_plant.reagents.chem_temp = min(1000, (our_plant.reagents.chem_temp + num_nutriment * 25)) + our_plant.reagents.handle_reactions() + playsound(our_plant, 'sound/effects/wounds/sizzle2.ogg', 5) + /** * This trait is the opposite of above - it cools down the plant's chemical contents on harvest. * This requires nutriment to fuel. 1u nutriment = -5 K. @@ -935,6 +981,23 @@ trait_flags = TRAIT_HALVES_YIELD mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_GRAFTABLE +/datum/plant_gene/trait/chem_cooling/on_new_plant(obj/item/our_plant, newloc) + . = ..() + if(!.) + return + + RegisterSignal(our_plant, COMSIG_PLANT_ON_HARVEST, PROC_REF(chem_cooling_harvest)) + +/datum/plant_gene/trait/chem_cooling/proc/chem_cooling_harvest(obj/item/our_plant, obj/item/seeds/our_seed) + SIGNAL_HANDLER + + var/num_nutriment = our_plant.reagents.get_reagent_amount(/datum/reagent/consumable/nutriment) + our_plant.visible_message(span_notice("[our_plant] releases a blast of hot air, consuming its nutriments to cool its contents.")) + our_plant.reagents.remove_reagent(/datum/reagent/consumable/nutriment, num_nutriment) + our_plant.reagents.chem_temp = max(3, (our_plant.reagents.chem_temp + num_nutriment * -5)) + our_plant.reagents.handle_reactions() + playsound(our_plant, 'sound/effects/space_wind.ogg', 50) + /// Prevents species mutation, while still allowing wild mutation harvest and Floral Somatoray species mutation. Trait acts as a tag for hydroponics.dm to recognise. /datum/plant_gene/trait/never_mutate name = "Prosophobic Inclination" diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 022cb911f7bc..c05409d964f2 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -271,51 +271,29 @@ * Specific chem handling is also handled here, like bloodtype, food taste within nutriment, and the auto-distilling/autojuicing traits. * This is where chemical reactions can occur, and the heating / cooling traits effect the reagent container. */ -/obj/item/seeds/proc/prepare_result(obj/item/T) - if(!T.reagents) - CRASH("[T] has no reagents.") - var/reagent_max = 0 - for(var/rid in reagents_add) - reagent_max += reagents_add[rid] - if(IS_EDIBLE(T) || istype(T, /obj/item/grown)) - var/obj/item/food/grown/grown_edible = T - var/reagent_purity = get_reagent_purity() - for(var/rid in reagents_add) - var/reagent_overflow_mod = reagents_add[rid] - if(reagent_max > 1) - reagent_overflow_mod = (reagents_add[rid]/ reagent_max) - var/edible_vol = grown_edible.reagents ? grown_edible.reagents.maximum_volume : 0 - var/amount = max(1, round((edible_vol)*(potency/100) * reagent_overflow_mod, 1)) //the plant will always have at least 1u of each of the reagents in its reagent production traits - var/list/data - if(rid == /datum/reagent/blood) // Hack to make blood in plants always O- - data = list("blood_type" = get_blood_type(BLOOD_TYPE_O_MINUS)) - if(istype(grown_edible) && (rid == /datum/reagent/consumable/nutriment || rid == /datum/reagent/consumable/nutriment/vitamin)) - data = grown_edible.tastes // apple tastes of apple. - T.reagents.add_reagent(rid, amount, data, added_purity = reagent_purity) - - //Handles the juicing trait, swaps nutriment and vitamins for that species various juices if they exist. Mutually exclusive with distilling. - if(get_gene(/datum/plant_gene/trait/juicing) && grown_edible.juice_typepath()) - grown_edible.juice(juicer = FALSE) //we pass FALSE & not null because Byond default args will subtitute it with the default value - else if(get_gene(/datum/plant_gene/trait/brewing)) - grown_edible.ferment() - - /// The number of nutriments we have inside of our plant, for use in our heating / cooling genes - var/num_nutriment = T.reagents.get_reagent_amount(/datum/reagent/consumable/nutriment) - - // Heats up the plant's contents by 25 kelvin per 1 unit of nutriment. Mutually exclusive with cooling. - if(get_gene(/datum/plant_gene/trait/chem_heating)) - T.visible_message(span_notice("[T] releases freezing air, consuming its nutriments to heat its contents.")) - T.reagents.remove_reagent(/datum/reagent/consumable/nutriment, num_nutriment) - T.reagents.chem_temp = min(1000, (T.reagents.chem_temp + num_nutriment * 25)) - T.reagents.handle_reactions() - playsound(T.loc, 'sound/effects/wounds/sizzle2.ogg', 5) - // Cools down the plant's contents by 5 kelvin per 1 unit of nutriment. Mutually exclusive with heating. - else if(get_gene(/datum/plant_gene/trait/chem_cooling)) - T.visible_message(span_notice("[T] releases a blast of hot air, consuming its nutriments to cool its contents.")) - T.reagents.remove_reagent(/datum/reagent/consumable/nutriment, num_nutriment) - T.reagents.chem_temp = max(3, (T.reagents.chem_temp + num_nutriment * -5)) - T.reagents.handle_reactions() - playsound(T.loc, 'sound/effects/space_wind.ogg', 50) +/obj/item/seeds/proc/prepare_result(obj/item/result) + if(isnull(result.reagents)) + CRASH("[result] has no reagents.") + + if(!istype(result, /obj/item/grown) && !IS_EDIBLE(result)) + return + + var/sum_reagent_percentage = 0 + for(var/reagent_type, reagent_volume_percentage in reagents_add) + sum_reagent_percentage += reagent_volume_percentage + + var/reagent_purity = get_reagent_purity() + for(var/reagent_type, reagent_volume_percentage in reagents_add) + // Going over 100% volume percentage penalizes you + // However the plant will always have at least 1u of each of the reagents in its reagent production traits + result.reagents.add_reagent( + reagent_type = reagent_type, + amount = max(1, round((result.reagents?.maximum_volume || 0) * (potency / 100) * reagent_volume_percentage * min(1, 1 / sum_reagent_percentage))), + added_purity = reagent_purity, + creation_callback = CALLBACK(src, PROC_REF(send_reagent_signal), result), + ) + + SEND_SIGNAL(result, COMSIG_PLANT_ON_HARVEST, src) /// Returns reagent purity based on seed stats /obj/item/seeds/proc/get_reagent_purity() @@ -325,6 +303,11 @@ var/result_purity = clamp(0.5 + purity_from_lifespan + purity_from_endurance + purity_from_instability, 0, 1) //50% base + stats return result_purity +/// Sends a signal to reagents in produced produce +/obj/item/seeds/proc/send_reagent_signal(obj/item/plant, datum/reagent/the_reagent) + PRIVATE_PROC(TRUE) + SEND_SIGNAL(the_reagent, COMSIG_REAGENT_GROWN_IN_PLANT, src, plant) + /// Setters procs /// /** diff --git a/code/modules/hydroponics/unique_plant_genes.dm b/code/modules/hydroponics/unique_plant_genes.dm index f0f71b8a9e84..49b15a72e56b 100644 --- a/code/modules/hydroponics/unique_plant_genes.dm +++ b/code/modules/hydroponics/unique_plant_genes.dm @@ -760,7 +760,7 @@ /// Jupitercup's fragile Liquid Electricity /datum/plant_gene/reagent/preset/liquidelectricity - reagent_id = /datum/reagent/consumable/liquidelectricity/enriched + reagent_id = /datum/reagent/consumable/liquidelectricity rate = 0.1 /// Carbon Roses's fragile Carbon diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index c8c4d3e7aaab..98b341f10277 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -379,6 +379,7 @@ var/satchel = /obj/item/storage/backpack/satchel var/duffelbag = /obj/item/storage/backpack/duffelbag var/messenger = /obj/item/storage/backpack/messenger + var/wintercoat = /obj/item/clothing/suit/hooded/wintercoat var/pda_slot = ITEM_SLOT_BELT @@ -684,6 +685,7 @@ /datum/job/proc/after_latejoin_spawn(mob/living/spawning) SHOULD_CALL_PARENT(TRUE) SEND_GLOBAL_SIGNAL(COMSIG_GLOB_JOB_AFTER_LATEJOIN_SPAWN, src, spawning) + spawning.client.show_spawn_text_overlay() /// Called when a mob that has this job is admin respawned /datum/job/proc/on_respawn(mob/new_character) diff --git a/code/modules/jobs/job_types/assistant/gimmick_assistants.dm b/code/modules/jobs/job_types/assistant/gimmick_assistants.dm index 1a9b62956904..be8c52c6c293 100644 --- a/code/modules/jobs/job_types/assistant/gimmick_assistants.dm +++ b/code/modules/jobs/job_types/assistant/gimmick_assistants.dm @@ -10,6 +10,7 @@ /datum/outfit/job/assistant/gimmick/give_jumpsuit(mob/living/carbon/human/target) return //dont do colorized and stuff, it messes with our uniforms +/* // DARKPACK EDIT REMOVAL START - (Removes Monkey Cubes and Bees) /datum/outfit/job/assistant/gimmick/bee name = "Gimmick Assistant - Bee" suit = /obj/item/clothing/suit/hooded/bee_costume @@ -24,6 +25,7 @@ discounted_pack = /datum/supply_pack/organic/hydroponics/beekeeping_fullkit discount_pct_off = 0.7 +*/ // DARKPACK EDIT REMOVAL END /datum/outfit/job/assistant/gimmick/chicken name = "Gimmick Assistant - Chicken" diff --git a/code/modules/jobs/job_types/atmospheric_technician.dm b/code/modules/jobs/job_types/atmospheric_technician.dm index 0a2472d7b065..a9670e530535 100644 --- a/code/modules/jobs/job_types/atmospheric_technician.dm +++ b/code/modules/jobs/job_types/atmospheric_technician.dm @@ -57,6 +57,8 @@ box = /obj/item/storage/box/survival/engineer pda_slot = ITEM_SLOT_LPOCKET + wintercoat = /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos + /datum/outfit/job/atmos/mod name = "Atmospheric Technician (MODsuit)" diff --git a/code/modules/jobs/job_types/botanist.dm b/code/modules/jobs/job_types/botanist.dm index cff826ec5054..679f07d06fa0 100644 --- a/code/modules/jobs/job_types/botanist.dm +++ b/code/modules/jobs/job_types/botanist.dm @@ -54,3 +54,5 @@ satchel = /obj/item/storage/backpack/satchel/hyd duffelbag = /obj/item/storage/backpack/duffelbag/hydroponics messenger = /obj/item/storage/backpack/messenger/hyd + + wintercoat = /obj/item/clothing/suit/hooded/wintercoat/hydro diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm index a3ad2d52aa85..f2d737ad31eb 100644 --- a/code/modules/jobs/job_types/captain.dm +++ b/code/modules/jobs/job_types/captain.dm @@ -91,6 +91,8 @@ implants = list(/obj/item/implant/mindshield) skillchips = list(/obj/item/skillchip/disk_verifier) + wintercoat = /obj/item/clothing/suit/hooded/wintercoat/captain + var/special_charter /datum/outfit/job/captain/pre_equip(mob/living/carbon/human/H, visuals_only) diff --git a/code/modules/jobs/job_types/cargo_technician.dm b/code/modules/jobs/job_types/cargo_technician.dm index 2cef58a09e84..7856714d157a 100644 --- a/code/modules/jobs/job_types/cargo_technician.dm +++ b/code/modules/jobs/job_types/cargo_technician.dm @@ -49,6 +49,8 @@ ears = /obj/item/radio/headset/headset_cargo l_hand = /obj/item/universal_scanner + wintercoat = /obj/item/clothing/suit/hooded/wintercoat/cargo + /datum/outfit/job/cargo_tech/mod name = "Cargo Technician (MODsuit)" diff --git a/code/modules/jobs/job_types/chemist.dm b/code/modules/jobs/job_types/chemist.dm index f8d65aabb8fa..05955e1a3454 100644 --- a/code/modules/jobs/job_types/chemist.dm +++ b/code/modules/jobs/job_types/chemist.dm @@ -58,3 +58,5 @@ box = /obj/item/storage/box/survival/medical chameleon_extras = /obj/item/gun/syringe + + wintercoat = /obj/item/clothing/suit/hooded/wintercoat/medical/chemistry diff --git a/code/modules/jobs/job_types/chief_engineer.dm b/code/modules/jobs/job_types/chief_engineer.dm index 53a28072503e..369d89f5c115 100644 --- a/code/modules/jobs/job_types/chief_engineer.dm +++ b/code/modules/jobs/job_types/chief_engineer.dm @@ -86,6 +86,8 @@ skillchips = list(/obj/item/skillchip/job/engineer) pda_slot = ITEM_SLOT_LPOCKET + wintercoat = /obj/item/clothing/suit/hooded/wintercoat/engineering/ce + /datum/outfit/job/ce/mod name = "Chief Engineer (MODsuit)" diff --git a/code/modules/jobs/job_types/chief_medical_officer.dm b/code/modules/jobs/job_types/chief_medical_officer.dm index 7ffc07fbabb4..7b03fe19121e 100644 --- a/code/modules/jobs/job_types/chief_medical_officer.dm +++ b/code/modules/jobs/job_types/chief_medical_officer.dm @@ -83,6 +83,8 @@ ) skillchips = list(/obj/item/skillchip/entrails_reader) + wintercoat = /obj/item/clothing/suit/hooded/wintercoat/medical/cmo + /datum/outfit/job/cmo/mod name = "Chief Medical Officer (MODsuit)" diff --git a/code/modules/jobs/job_types/clown.dm b/code/modules/jobs/job_types/clown.dm index 453216d2df1f..fb19a7d521bf 100644 --- a/code/modules/jobs/job_types/clown.dm +++ b/code/modules/jobs/job_types/clown.dm @@ -42,7 +42,7 @@ spawned.apply_pref_name(/datum/preference/name/clown, player_client) if(check_holidays(APRIL_FOOLS)) // Clown blood is real var/mob/living/carbon/human/human_clown = spawned - human_clown.set_blood_type(BLOOD_TYPE_CLOWN) + human_clown.set_blood_type(/datum/blood_type/clown) return ..() diff --git a/code/modules/jobs/job_types/coroner.dm b/code/modules/jobs/job_types/coroner.dm index 150d029d35cd..c2e15efbd9af 100644 --- a/code/modules/jobs/job_types/coroner.dm +++ b/code/modules/jobs/job_types/coroner.dm @@ -73,3 +73,5 @@ messenger = /obj/item/storage/backpack/messenger/coroner skillchips = list(/obj/item/skillchip/entrails_reader) + + wintercoat = /obj/item/clothing/suit/hooded/wintercoat/medical/coroner diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm index 68fd432d6707..7c6a5bf8ff79 100644 --- a/code/modules/jobs/job_types/detective.dm +++ b/code/modules/jobs/job_types/detective.dm @@ -78,6 +78,8 @@ skillchips = list(/obj/item/skillchip/job/detectives_taste) + wintercoat = /obj/item/clothing/suit/hooded/wintercoat/security + /datum/outfit/job/detective/pre_equip(mob/living/carbon/human/human, visuals_only = FALSE) . = ..() if (human.age < AGE_MINOR) diff --git a/code/modules/jobs/job_types/geneticist.dm b/code/modules/jobs/job_types/geneticist.dm index 68a178bbf55c..95645ebed9ee 100644 --- a/code/modules/jobs/job_types/geneticist.dm +++ b/code/modules/jobs/job_types/geneticist.dm @@ -48,3 +48,5 @@ satchel = /obj/item/storage/backpack/satchel/gen duffelbag = /obj/item/storage/backpack/duffelbag/genetics messenger = /obj/item/storage/backpack/messenger/gen + + wintercoat = /obj/item/clothing/suit/hooded/wintercoat/science/genetics diff --git a/code/modules/jobs/job_types/head_of_personnel.dm b/code/modules/jobs/job_types/head_of_personnel.dm index 1d48437ed42f..b4bf3706b9fd 100644 --- a/code/modules/jobs/job_types/head_of_personnel.dm +++ b/code/modules/jobs/job_types/head_of_personnel.dm @@ -110,6 +110,8 @@ /obj/item/stamp/head/hop, ) + wintercoat = /obj/item/clothing/suit/hooded/wintercoat/hop + /datum/outfit/job/hop/pre_equip(mob/living/carbon/human/H) ..() if(check_holidays(IAN_HOLIDAY)) diff --git a/code/modules/jobs/job_types/head_of_security.dm b/code/modules/jobs/job_types/head_of_security.dm index 899224b33f34..7febc5371fcb 100644 --- a/code/modules/jobs/job_types/head_of_security.dm +++ b/code/modules/jobs/job_types/head_of_security.dm @@ -46,18 +46,10 @@ /datum/job/head_of_security/after_spawn(mob/living/spawned, client/player_client) . = ..() - if(!ishuman(spawned) || !prob(PIG_COP_PROBABILITY)) + if(!prob(PIG_COP_PROBABILITY)) return - var/mob/living/carbon/human/piggy = spawned - for (var/obj/item/bodypart/ham as anything in piggy.get_bodyparts()) - // These are string lists - ham.butcher_drops = ham.butcher_drops.Copy() - for (var/meat_type in ham.butcher_drops) - if (!ispath(meat_type, /obj/item/food/meat/slab)) - continue - ham.butcher_drops[/obj/item/food/meat/slab/pig] = ham.butcher_drops[meat_type] - ham.butcher_drops -= meat_type - ham.butcher_drops = string_list(ham.butcher_drops) + for (var/obj/item/bodypart/ham as anything in spawned.get_bodyparts()) + ham.butcher_drops_override = list(/obj/item/food/meat/slab/pig = ham.base_meat_amount) /datum/outfit/job/hos name = "Head of Security" @@ -93,6 +85,8 @@ ) implants = list(/obj/item/implant/mindshield) + wintercoat = /obj/item/clothing/suit/armor/hos/trenchcoat/winter + /datum/outfit/job/hos/mod name = "Head of Security (MODsuit)" diff --git a/code/modules/jobs/job_types/janitor.dm b/code/modules/jobs/job_types/janitor.dm index 52735aad579d..d9a52c9d6d9b 100644 --- a/code/modules/jobs/job_types/janitor.dm +++ b/code/modules/jobs/job_types/janitor.dm @@ -42,6 +42,8 @@ skillchips = list(/obj/item/skillchip/job/janitor, /obj/item/skillchip/disposals) backpack_contents = list(/obj/item/access_key) + wintercoat = /obj/item/clothing/suit/hooded/wintercoat/janitor + /datum/outfit/job/janitor/pre_equip(mob/living/carbon/human/human_equipper, visuals_only) . = ..() if(check_holidays(GARBAGEDAY)) diff --git a/code/modules/jobs/job_types/medical_doctor.dm b/code/modules/jobs/job_types/medical_doctor.dm index c5da45553292..0c300d2f6315 100644 --- a/code/modules/jobs/job_types/medical_doctor.dm +++ b/code/modules/jobs/job_types/medical_doctor.dm @@ -60,3 +60,5 @@ box = /obj/item/storage/box/survival/medical chameleon_extras = /obj/item/gun/syringe skillchips = list(/obj/item/skillchip/entrails_reader) + + wintercoat = /obj/item/clothing/suit/hooded/wintercoat/medical diff --git a/code/modules/jobs/job_types/paramedic.dm b/code/modules/jobs/job_types/paramedic.dm index ad9244333b87..fca347c0cad1 100644 --- a/code/modules/jobs/job_types/paramedic.dm +++ b/code/modules/jobs/job_types/paramedic.dm @@ -68,6 +68,8 @@ chameleon_extras = /obj/item/gun/syringe pda_slot = ITEM_SLOT_LPOCKET + wintercoat = /obj/item/clothing/suit/hooded/wintercoat/medical/paramedic + /datum/outfit/job/doctor/mod name = "Paramedic (MODsuit)" diff --git a/code/modules/jobs/job_types/quartermaster.dm b/code/modules/jobs/job_types/quartermaster.dm index 962f558c602c..b353664100ca 100644 --- a/code/modules/jobs/job_types/quartermaster.dm +++ b/code/modules/jobs/job_types/quartermaster.dm @@ -54,3 +54,5 @@ l_hand = /obj/item/clipboard chameleon_extras = /obj/item/stamp/head/qm + + wintercoat = /obj/item/clothing/suit/hooded/wintercoat/cargo/qm diff --git a/code/modules/jobs/job_types/research_director.dm b/code/modules/jobs/job_types/research_director.dm index 7c1e04406687..3da1d9425835 100644 --- a/code/modules/jobs/job_types/research_director.dm +++ b/code/modules/jobs/job_types/research_director.dm @@ -79,6 +79,8 @@ chameleon_extras = /obj/item/stamp/head/rd skillchips = list(/obj/item/skillchip/research_director, /obj/item/skillchip/job/roboticist) + wintercoat = /obj/item/clothing/suit/hooded/wintercoat/science/rd + /datum/outfit/job/rd/mod name = "Research Director (MODsuit)" diff --git a/code/modules/jobs/job_types/roboticist.dm b/code/modules/jobs/job_types/roboticist.dm index 9f91c6f22e0a..4306ec080702 100644 --- a/code/modules/jobs/job_types/roboticist.dm +++ b/code/modules/jobs/job_types/roboticist.dm @@ -56,6 +56,8 @@ pda_slot = ITEM_SLOT_LPOCKET skillchips = list(/obj/item/skillchip/job/roboticist) + wintercoat = /obj/item/clothing/suit/hooded/wintercoat/science/robotics + /datum/outfit/job/roboticist/mod name = "Roboticist (MODsuit)" suit_store = /obj/item/tank/internals/oxygen diff --git a/code/modules/jobs/job_types/scientist.dm b/code/modules/jobs/job_types/scientist.dm index 923c9bff54b5..d32340c5d258 100644 --- a/code/modules/jobs/job_types/scientist.dm +++ b/code/modules/jobs/job_types/scientist.dm @@ -52,6 +52,8 @@ duffelbag = /obj/item/storage/backpack/duffelbag/science messenger = /obj/item/storage/backpack/messenger/science + wintercoat = /obj/item/clothing/suit/hooded/wintercoat/science + /datum/outfit/job/scientist/pre_equip(mob/living/carbon/human/H) ..() try_giving_horrible_tie() diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm index d78fb4f94b07..fd87de05d375 100644 --- a/code/modules/jobs/job_types/security_officer.dm +++ b/code/modules/jobs/job_types/security_officer.dm @@ -59,18 +59,10 @@ GLOBAL_LIST_EMPTY(security_officer_distribution) /datum/job/security_officer/after_spawn(mob/living/spawned, client/player_client) . = ..() - if(!ishuman(spawned) || !prob(PIG_COP_PROBABILITY)) + if(!prob(PIG_COP_PROBABILITY)) return - var/mob/living/carbon/human/piggy = spawned - for (var/obj/item/bodypart/ham as anything in piggy.get_bodyparts()) - // These are string lists - ham.butcher_drops = ham.butcher_drops.Copy() - for (var/meat_type in ham.butcher_drops) - if (!ispath(meat_type, /obj/item/food/meat/slab)) - continue - ham.butcher_drops[/obj/item/food/meat/slab/pig] = ham.butcher_drops[meat_type] - ham.butcher_drops -= meat_type - ham.butcher_drops = string_list(ham.butcher_drops) + for (var/obj/item/bodypart/ham as anything in spawned.get_bodyparts()) + ham.butcher_drops_override = list(/obj/item/food/meat/slab/pig = ham.base_meat_amount) /datum/job/security_officer/after_roundstart_spawn(mob/living/spawning, client/player_client) . = ..() @@ -259,6 +251,8 @@ GLOBAL_LIST_EMPTY(security_officer_distribution) //The helmet is necessary because /obj/item/clothing/head/helmet/sec is overwritten in the chameleon list by the standard helmet, which has the same name and icon state implants = list(/obj/item/implant/mindshield) + wintercoat = /obj/item/clothing/suit/hooded/wintercoat/security + /datum/outfit/job/security/mod name = "Security Officer (MODsuit)" diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm index d2c7502c5105..8b6d36349e9a 100644 --- a/code/modules/jobs/job_types/shaft_miner.dm +++ b/code/modules/jobs/job_types/shaft_miner.dm @@ -57,6 +57,8 @@ box = /obj/item/storage/box/survival/mining chameleon_extras = /obj/item/gun/energy/recharge/kinetic_accelerator + wintercoat = /obj/item/clothing/suit/hooded/wintercoat/miner + /datum/outfit/job/miner/equipped name = "Shaft Miner (Equipment)" diff --git a/code/modules/jobs/job_types/station_engineer.dm b/code/modules/jobs/job_types/station_engineer.dm index aa71e1bb5508..8e25895c0be3 100644 --- a/code/modules/jobs/job_types/station_engineer.dm +++ b/code/modules/jobs/job_types/station_engineer.dm @@ -65,6 +65,8 @@ pda_slot = ITEM_SLOT_LPOCKET skillchips = list(/obj/item/skillchip/job/engineer) + wintercoat = /obj/item/clothing/suit/hooded/wintercoat/engineering + /datum/outfit/job/engineer/gloved name = "Station Engineer (Gloves)" diff --git a/code/modules/jobs/job_types/warden.dm b/code/modules/jobs/job_types/warden.dm index eea6d428c101..1c42257a60a1 100644 --- a/code/modules/jobs/job_types/warden.dm +++ b/code/modules/jobs/job_types/warden.dm @@ -44,18 +44,10 @@ /datum/job/warden/after_spawn(mob/living/spawned, client/player_client) . = ..() - if(!ishuman(spawned) || !prob(PIG_COP_PROBABILITY)) + if(!prob(PIG_COP_PROBABILITY)) return - var/mob/living/carbon/human/piggy = spawned - for (var/obj/item/bodypart/ham as anything in piggy.get_bodyparts()) - // These are string lists - ham.butcher_drops = ham.butcher_drops.Copy() - for (var/meat_type in ham.butcher_drops) - if (!ispath(meat_type, /obj/item/food/meat/slab)) - continue - ham.butcher_drops[/obj/item/food/meat/slab/pig] = ham.butcher_drops[meat_type] - ham.butcher_drops -= meat_type - ham.butcher_drops = string_list(ham.butcher_drops) + for (var/obj/item/bodypart/ham as anything in spawned.get_bodyparts()) + ham.butcher_drops_override = list(/obj/item/food/meat/slab/pig = ham.base_meat_amount) /datum/outfit/job/warden name = "Warden" @@ -81,3 +73,5 @@ box = /obj/item/storage/box/survival/security implants = list(/obj/item/implant/mindshield) + + wintercoat = /obj/item/clothing/suit/hooded/wintercoat/security diff --git a/code/modules/keybindings/bindings_client.dm b/code/modules/keybindings/bindings_client.dm index b72e8af905d8..672d6fba6639 100644 --- a/code/modules/keybindings/bindings_client.dm +++ b/code/modules/keybindings/bindings_client.dm @@ -1,6 +1,6 @@ // Clients aren't datums so we have to define these procs indpendently. // These verbs are called for all key press and release events -GAME_VERB_HIDDEN_INSTANT(/client, keyDown, "keyDown", _key as text, mousepos_x as num, mousepos_y as num, sizex as num, sizey as num) +GAME_VERB_NATIVE_INSTANT(/client, keyDown, "keyDown", null, _key as text, mousepos_x as num, mousepos_y as num, sizex as num, sizey as num) client_keysend_amount += 1 @@ -80,7 +80,7 @@ GAME_VERB_HIDDEN_INSTANT(/client, keyDown, "keyDown", _key as text, mousepos_x a mob.focus?.key_down(_key, src, full_key) mob.update_mouse_pointer() -GAME_VERB_HIDDEN_INSTANT(/client, keyUp, "keyUp", _key as text, mousepos_x as num, mousepos_y as num, sizex as num, sizey as num) +GAME_VERB_NATIVE_INSTANT(/client, keyUp, "keyUp", null, _key as text, mousepos_x as num, mousepos_y as num, sizex as num, sizey as num) var/key_combo = key_combos_held[_key] if(key_combo) diff --git a/code/modules/lighting/lighting_turf.dm b/code/modules/lighting/lighting_turf.dm index f3feed46bcff..161e4b14adfb 100644 --- a/code/modules/lighting/lighting_turf.dm +++ b/code/modules/lighting/lighting_turf.dm @@ -16,11 +16,49 @@ new /atom/movable/lighting_object(null, src) -// Used to get a scaled lumcount. +/// Used to get a scaled lumcount. /turf/proc/get_lumcount(minlum = 0, maxlum = 1) if (!lighting_object) return 1 + var/totallums = get_static_lumcount(minlum, maxlum) + totallums += get_dynamic_lumcount() + return CLAMP01(totallums) + +// Kyler was worried about cost of having these use assoc args, so they're split ~smartkar +// Also easier to use this way +/// Optimized get_lumcount for when you only care if the lumcount is below a certain value, and not what the actual value is +/turf/proc/check_lumcount_below(value) + if (!lighting_object) + return FALSE + + var/lums = get_static_lumcount() + if (lums >= value) + return FALSE + + for (var/datum/component/overlay_lighting/light as anything in collect_dynamic_lightsources()) + lums += light.lum_power + if (lums >= value) + return FALSE + return TRUE + +/// Optimized get_lumcount for when you only care if the lumcount is above a certain value, and not what the actual value is +/turf/proc/check_lumcount_above(value) + if (!lighting_object) + return TRUE + + var/lums = get_static_lumcount() + if (lums > value) + return TRUE + + for (var/datum/component/overlay_lighting/light as anything in collect_dynamic_lightsources()) + lums += light.lum_power + if (lums > value) + return TRUE + return FALSE + +/// Returns lumcount from turf lighting +/turf/proc/get_static_lumcount(minlum = 0, maxlum = 1) var/totallums = 0 var/datum/lighting_corner/L L = lighting_corner_NE @@ -36,14 +74,41 @@ if (L) totallums += L.lum_r + L.lum_b + L.lum_g - totallums /= 12 // 4 corners, each with 3 channels, get the average. - totallums = (totallums - minlum) / (maxlum - minlum) - - totallums += dynamic_lumcount - - return CLAMP01(totallums) + return totallums + +/// Fetches dynamic lumcount from lightsources potentially in view of this turf from our spatial grid +/turf/proc/get_dynamic_lumcount() + . = 0 + for (var/datum/component/overlay_lighting/light as anything in collect_dynamic_lightsources()) + . += light.lum_power + +// You've heard of oranges_ear, prepare for oranges_eye +/// Uses the same optimization via viewers() that get_hearers_in_view does by allocating oranges ears to overlay lights +/// And collecting viewers rather than checking view() for each one of them +/turf/proc/collect_dynamic_lightsources() + . = list() + + var/datum/spatial_grid_cell/grid_cell = SSspatial_grid.get_cell_of(src) + var/list/light_sources = list() + var/furthest_range = 0 + for (var/datum/component/overlay_lighting/light as anything in grid_cell.dynamic_light_sources) + furthest_range = max(furthest_range, light.lumcount_range) + if (isnull(light_sources[light.current_holder])) + light_sources[light.current_holder] = light + else if (islist(light_sources[light.current_holder])) + light_sources[light.current_holder] |= light + else + light_sources[light.current_holder] = list(light_sources[light.current_holder], light) + + var/list/assigned_oranges_ears = SSspatial_grid.assign_oranges_ears(light_sources) + for(var/mob/oranges_ear/ear in hearers(furthest_range, src)) + for (var/atom/glowie as anything in ear.references) + . += light_sources[glowie] + + for(var/mob/oranges_ear/remaining_ear as anything in assigned_oranges_ears) + remaining_ear.unassign() // Returns a boolean whether the turf is on soft lighting. // Soft lighting being the threshold at which point the overlay considers @@ -53,7 +118,7 @@ if (!lighting_object) return FALSE - return !(luminosity || dynamic_lumcount) + return !(luminosity || get_dynamic_lumcount()) ///Proc to add movable sources of opacity on the turf and let it handle lighting code. diff --git a/code/modules/loadout/categories/suits.dm b/code/modules/loadout/categories/suits.dm index c830aff2a12d..cc4c0c63f4ea 100644 --- a/code/modules/loadout/categories/suits.dm +++ b/code/modules/loadout/categories/suits.dm @@ -42,9 +42,17 @@ ) /datum/loadout_item/suit/hoodie_pullover - name = "pullover" + name = "Pullover" item_path = /obj/item/clothing/suit/hooded/wintercoat/pullover /datum/loadout_item/suit/hoodie_zipup - name = "zipup" + name = "Zipup" item_path = /obj/item/clothing/suit/hooded/wintercoat/zipup + +/datum/loadout_item/suit/wintercoat + name = "Winter Coat (Departmental)" + item_path = /obj/item/clothing/suit/hooded/wintercoat + +/datum/loadout_item/suit/wintercoat/insert_path_into_outfit(datum/outfit/outfit, mob/living/carbon/human/equipper, visuals_only = FALSE) + . = ..() + outfit.suit = astype(outfit, /datum/outfit/job)?.wintercoat || item_path diff --git a/code/modules/loadout/loadout_preference.dm b/code/modules/loadout/loadout_preference.dm index ef4a994b5530..c48e3b7f4971 100644 --- a/code/modules/loadout/loadout_preference.dm +++ b/code/modules/loadout/loadout_preference.dm @@ -11,7 +11,7 @@ // - list(/obj/item/plush/lizard = list("name" = "Tests-The-Loadout", "color" = "#FF0000")) // Loadouts are applied with job equip code. -/datum/preference/loadout/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/loadout/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return // Sanitize on load to ensure no invalid paths from older saves get in diff --git a/code/modules/manufactorio/machines/lathe.dm b/code/modules/manufactorio/machines/lathe.dm index e82c5c0a1201..f773e87b5ea0 100644 --- a/code/modules/manufactorio/machines/lathe.dm +++ b/code/modules/manufactorio/machines/lathe.dm @@ -5,8 +5,8 @@ circuit = /obj/item/circuitboard/machine/manulathe /// power cost for lathing var/power_cost = 5 KILO WATTS - /// design id we print - var/design_id + /// The typepath of the design we print + var/chosen_design_path ///The container to hold materials var/datum/material_container/materials //looping sound for printing items @@ -28,8 +28,7 @@ ) register_context() . = ..() - if(!GLOB.autounlock_techwebs[/datum/techweb/autounlocking/autolathe]) - GLOB.autounlock_techwebs[/datum/techweb/autounlocking/autolathe] = new /datum/techweb/autounlocking/autolathe + GLOB.autounlock_techwebs[/datum/techweb/autounlocking/autolathe] ||= new /datum/techweb/autounlocking/autolathe() stored_research = GLOB.autounlock_techwebs[/datum/techweb/autounlocking/autolathe] /obj/machinery/power/manufacturing/lathe/Destroy() @@ -51,12 +50,9 @@ var/datum/stock_part/matter_bin/bin = locate() in component_parts materials.max_amount = bin.tier * (SHEET_MATERIAL_AMOUNT * MAX_STACK_SIZE) - /obj/machinery/power/manufacturing/lathe/examine(mob/user) . = ..() - var/datum/design/design - if(!isnull(design_id)) - design = SSresearch.techweb_design_by_id(design_id) + var/datum/design/design = SSresearch.techweb_designs[chosen_design_path] . += span_notice("It is set to print [!isnull(design) ? design.name : "nothing, set with a multitool"].") if(isnull(design)) return @@ -91,20 +87,20 @@ /obj/machinery/power/manufacturing/lathe/multitool_act(mob/living/user, obj/item/tool) . = ..() var/list/name_to_id = list() - for(var/id in stored_research.researched_designs) - var/datum/design/design = SSresearch.techweb_design_by_id(id) - name_to_id[design.name] = id + for(var/design_path in stored_research.researched_designs) + var/datum/design/design = SSresearch.techweb_designs[design_path] + name_to_id[design.name] = design_path var/result = tgui_input_list(user, "Select Design", "Select Design", sort_list(name_to_id)) if(isnull(result)) return ITEM_INTERACT_FAILURE - design_id = name_to_id[result] + chosen_design_path = name_to_id[result] return ITEM_INTERACT_SUCCESS /obj/machinery/power/manufacturing/lathe/process() if(!isnull(withheld) && !send_resource(withheld, dir)) return - var/datum/design/design = SSresearch.techweb_design_by_id(design_id) + var/datum/design/design = SSresearch.techweb_designs[chosen_design_path] if(isnull(design) || !(design.build_type & AUTOLATHE)) return if(surplus() < power_cost) diff --git a/code/modules/mapfluff/ruins/lavaland_ruin_code.dm b/code/modules/mapfluff/ruins/lavaland_ruin_code.dm index 0d1abe5bda81..1a30343f10ad 100644 --- a/code/modules/mapfluff/ruins/lavaland_ruin_code.dm +++ b/code/modules/mapfluff/ruins/lavaland_ruin_code.dm @@ -3,11 +3,7 @@ ///Wizard tower item /obj/item/disk/design_disk/knight_gear name = "Magic Disk of Smithing" - -/obj/item/disk/design_disk/knight_gear/Initialize(mapload) - . = ..() - blueprints += new /datum/design/knight_armour - blueprints += new /datum/design/knight_helmet + blueprints = list(/datum/design/knight_armour, /datum/design/knight_helmet) //Free Golems @@ -15,15 +11,11 @@ name = "Golem Creation Disk" desc = "A gift from the Liberator." icon_state = "datadisk1" - -/obj/item/disk/design_disk/golem_shell/Initialize(mapload) - . = ..() - blueprints += new /datum/design/golem_shell + blueprints = list(/datum/design/golem_shell) /datum/design/golem_shell name = "Golem Shell Construction" desc = "Allows for the construction of a Golem Shell." - id = "golem" build_type = AUTOLATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*20) build_path = /obj/item/golem_shell diff --git a/code/modules/mapfluff/ruins/spaceruin_code/clericsden.dm b/code/modules/mapfluff/ruins/spaceruin_code/clericsden.dm index 56b09ef7f79f..e6654b136b2b 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/clericsden.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/clericsden.dm @@ -3,10 +3,7 @@ //Primary reward: the cleric's mace design disk. /obj/item/disk/design_disk/cleric_mace name = "Enshrined Disc of Smiting" - -/obj/item/disk/design_disk/cleric_mace/Initialize(mapload) - . = ..() - blueprints += new /datum/design/cleric_mace + blueprints = list(/datum/design/cleric_mace) /obj/item/paper/fluff/ruins/clericsden/contact default_raw_text = "Father Aurellion, the ritual is complete, and soon our brothers at the bastion will see the error of our ways. After all, a god of clockwork or blood? Preposterous. Only the TRUE GOD should have so much power. Signed, Father Odivallus." diff --git a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm index b96df88a3917..e56f09ffb078 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm @@ -580,7 +580,7 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) if(!istype(interacting_with, /obj/item/hilbertshotel)) return ..() if(!interacting_with.IsReachableBy(user)) - to_chat(user, span_warning("It's to far away to scan!")) + to_chat(user, span_warning("It's too far away to scan!")) return ITEM_INTERACT_BLOCKING var/obj/item/hilbertshotel/sphere = interacting_with if(length(sphere.activeRooms)) diff --git a/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_rnd.dm b/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_rnd.dm index 8a002f4a8186..d1c0f6b35230 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_rnd.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_rnd.dm @@ -4,7 +4,8 @@ req_access = list(ACCESS_AWAY_SCIENCE) /obj/machinery/rnd/server/oldstation/Initialize(mapload) - var/datum/techweb/oldstation_web = locate(/datum/techweb/oldstation) in SSresearch.techwebs + var/datum/techweb/oldstation/oldstation_web = locate(/datum/techweb/oldstation) in SSresearch.techwebs + oldstation_web ||= new() stored_research = oldstation_web return ..() @@ -26,7 +27,7 @@ /obj/machinery/rnd/server/oldstation/item_interaction(mob/living/user, obj/item/tool, list/modifiers) if(istype(tool, /obj/item/research_notes) && stored_research) var/obj/item/research_notes/research_notes = tool - stored_research.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = research_notes.value)) + stored_research.adjust_points(TECHWEB_POINT_TYPE_GENERIC, research_notes.value) playsound(src, 'sound/machines/copier.ogg', 50, TRUE) qdel(research_notes) return ITEM_INTERACT_SUCCESS diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index 8a39d3f04743..73797075bcfb 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -1499,11 +1499,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_atoms_ontop) icon_state = "basic_mob_flammable" flag_to_give = FLAMMABLE_MOB -/obj/effect/mapping_helpers/basic_mob_flags/immune_to_fists - name = "Basic mob immune to fists flag helper" - icon_state = "basic_mob_immune_to_fists" - flag_to_give = IMMUNE_TO_FISTS - /obj/effect/mapping_helpers/basic_mob_flags/immune_to_getting_wet name = "Basic mob immune to getting wet flag helper" icon_state = "basic_mob_immune_to_getting_wet" diff --git a/code/modules/meteors/meteor_types.dm b/code/modules/meteors/meteor_types.dm index 386deb89501c..e5b4dc613e3f 100644 --- a/code/modules/meteors/meteor_types.dm +++ b/code/modules/meteors/meteor_types.dm @@ -195,7 +195,7 @@ hits = 2 hitpwr = EXPLODE_LIGHT meteorsound = 'sound/items/dodgeball.ogg' - threat = 1 + threat = SEVERITY_SAND /obj/effect/meteor/sand/make_debris() return //We drop NOTHING @@ -224,13 +224,13 @@ hitpwr = EXPLODE_LIGHT meteorsound = 'sound/items/weapons/gun/smg/shot.ogg' meteordrop = list(/obj/item/stack/ore/glass) - threat = 1 + threat = SEVERITY_DUST //Medium-sized /obj/effect/meteor/medium name = "meteor" dropamt = 3 - threat = 5 + threat = SEVERITY_MEDIUM_METEOR /obj/effect/meteor/medium/meteor_effect() ..() @@ -243,7 +243,7 @@ hits = 6 heavy = TRUE dropamt = 4 - threat = 10 + threat = SEVERITY_BIG_METEOR /obj/effect/meteor/big/meteor_effect() ..() @@ -258,7 +258,7 @@ heavy = TRUE meteorsound = 'sound/effects/bamf.ogg' meteordrop = list(/obj/item/stack/ore/plasma) - threat = 20 + threat = SEVERITY_FLAMING_METEOR signature = "thermal" /obj/effect/meteor/flaming/meteor_effect() @@ -273,7 +273,7 @@ heavy = TRUE hits = 9 meteordrop = list(/obj/item/stack/ore/uranium) - threat = 35 + threat = SEVERITY_IRRADIATED_METEOR signature = "radiation" /obj/effect/meteor/irradiated/meteor_effect() @@ -291,7 +291,7 @@ hits = 9 heavy = TRUE meteorsound = 'sound/effects/break_stone.ogg' - threat = 25 + threat = SEVERITY_CLUSTER_METEOR signature = "ordnance" ///Number of fragmentation meteors to be spawned var/cluster_count = 8 @@ -323,7 +323,7 @@ meteorsound = 'sound/mobs/humanoids/ethereal/ethereal_revive_fail.ogg' meteordrop = list(/mob/living/basic/carp) dropamt = 1 - threat = 5 + threat = SEVERITY_FROZEN_CARP signature = "fishing and trawling" /obj/effect/meteor/carp/Initialize(mapload) @@ -339,7 +339,7 @@ dropamt = 3 hits = 12 meteordrop = list(/obj/item/stack/ore/bluespace_crystal) - threat = 15 + threat = SEVERITY_BLUESPACE_METEOR signature = "bluespace flux" /obj/effect/meteor/bluespace/Bump(atom/bumped_atom) @@ -355,7 +355,7 @@ hits = 175 //Honks everything, including space tiles. Depending on the angle/how much stuff it hits, there's a fair chance that it will spare the station from the actual explosion meteordrop = list(/obj/item/stack/ore/bananium) meteorsound = 'sound/items/bikehorn.ogg' - threat = 15 + threat = SEVERITY_BANANIUM_METEOR movement_type = PHASING signature = "comedy" @@ -377,7 +377,7 @@ desc = "It radiates with captive energy, ready to be let loose upon the world." icon_state = "bluespace" hits = 6 - threat = 10 + threat = SEVERITY_EMP_METEOR signature = "electromagnetic interference" /obj/effect/meteor/emp/Move() @@ -400,7 +400,7 @@ meteorsound = 'sound/effects/blob/blobattack.ogg' meteordrop = list(/obj/item/food/meat/slab/human, /obj/item/organ/heart, /obj/item/organ/lungs, /obj/item/organ/appendix) var/meteorgibs = /obj/effect/gibspawner/generic - threat = 2 + threat = SEVERITY_MEATY_ORE signature = "culinary material" /obj/effect/meteor/meaty/setup_extra_drops() @@ -443,7 +443,7 @@ heavy = TRUE meteorsound = 'sound/effects/bamf.ogg' meteordrop = list(/obj/item/stack/ore/plasma) - threat = 50 + threat = SEVERITY_TUNGSKA_METEOR signature = "armageddon" /obj/effect/meteor/tunguska/Move() @@ -469,7 +469,7 @@ heavy = TRUE dropamt = 1 meteordrop = list(/obj/item/clothing/head/utility/hardhat/pumpkinhead, /obj/item/food/grown/pumpkin) - threat = 100 + threat = SEVERITY_PUMPKING /obj/effect/meteor/pumpkin/Initialize(mapload) . = ..() diff --git a/code/modules/mining/equipment/kinetic_crusher/kinetic_crusher_trophies.dm b/code/modules/mining/equipment/kinetic_crusher/kinetic_crusher_trophies.dm index 7e183d8e8512..df43f72b5bb2 100644 --- a/code/modules/mining/equipment/kinetic_crusher/kinetic_crusher_trophies.dm +++ b/code/modules/mining/equipment/kinetic_crusher/kinetic_crusher_trophies.dm @@ -7,6 +7,7 @@ desc = "A strange spike with no usage." icon = 'icons/obj/mining_zones/artefacts.dmi' icon_state = "tail_spike" + w_class = WEIGHT_CLASS_SMALL /// If it has a bonus effect, this is how much that effect is var/bonus_value = 10 /// ID of the trophy to be sent by the signal diff --git a/code/modules/mining/equipment/kinetic_crusher/trophies_fauna.dm b/code/modules/mining/equipment/kinetic_crusher/trophies_fauna.dm index ee70b0611937..2a41d59fabb1 100644 --- a/code/modules/mining/equipment/kinetic_crusher/trophies_fauna.dm +++ b/code/modules/mining/equipment/kinetic_crusher/trophies_fauna.dm @@ -10,8 +10,8 @@ denied_type = /obj/item/crusher_trophy/watcher_wing trophy_id = TROPHY_WATCHER bonus_value = 5 - wildhunter_drops = list(/obj/item/stack/sheet/sinew = 7) - custom_materials = list(/datum/material/diamond = SHEET_MATERIAL_AMOUNT * 10, /datum/material/bone = SHEET_MATERIAL_AMOUNT * 5) + wildhunter_drops = list(/obj/item/stack/sheet/sinew = 5) + custom_materials = list(/datum/material/diamond = SHEET_MATERIAL_AMOUNT * 6, /datum/material/bone = SHEET_MATERIAL_AMOUNT * 5) /obj/item/crusher_trophy/watcher_wing/effect_desc() return "mark detonation to prevent certain creatures from using certain attacks for [bonus_value*0.1] second\s" @@ -35,7 +35,7 @@ icon_state = "magma_wing" denied_type = /obj/item/crusher_trophy/magma_wing wildhunter_drops = list(/obj/item/stack/sheet/sinew/magmawing = 3) - custom_materials = list(/datum/material/diamond = SHEET_MATERIAL_AMOUNT * 6, /datum/material/bone = SHEET_MATERIAL_AMOUNT * 3) + custom_materials = list(/datum/material/diamond = SHEET_MATERIAL_AMOUNT * 2, /datum/material/bone = SHEET_MATERIAL_AMOUNT * 3) /// List of mobs we've marked var/list/mob/living/marked_targets = list() @@ -97,10 +97,10 @@ name = "icewing watcher wing" desc = "A carefully preserved frozen wing from an icewing watcher. Suitable as a trophy for a kinetic crusher." icon_state = "ice_wing" - bonus_value = 2 + bonus_value = 1 denied_type = /obj/item/crusher_trophy/ice_wing wildhunter_drops = list(/obj/item/stack/sheet/sinew/icewing = 3) - custom_materials = list(/datum/material/diamond = SHEET_MATERIAL_AMOUNT * 6, /datum/material/bone = SHEET_MATERIAL_AMOUNT * 3) + custom_materials = list(/datum/material/diamond = SHEET_MATERIAL_AMOUNT * 5, /datum/material/bone = SHEET_MATERIAL_AMOUNT * 3) /obj/item/crusher_trophy/ice_wing/effect_desc() return "user to backstep [bonus_value] tile\s when detonating a mark" @@ -129,7 +129,7 @@ denied_type = /obj/item/crusher_trophy/legion_skull bonus_value = 3 // No wildhunter drop to prevent refresh cheese - custom_materials = list(/datum/material/bone = SHEET_MATERIAL_AMOUNT * 5) + custom_materials = list(/datum/material/bone = SHEET_MATERIAL_AMOUNT * 4) /obj/item/crusher_trophy/legion_skull/effect_desc() return "a kinetic crusher to recharge [bonus_value*0.1] second\s faster" @@ -153,7 +153,7 @@ bonus_value = 2 trophy_id = TROPHY_GOLIATH_TENTACLE wildhunter_drops = list(/obj/item/stack/sheet/animalhide/goliath_hide = 3) - custom_materials = list(/datum/material/bone = SHEET_MATERIAL_AMOUNT * 8) + custom_materials = list(/datum/material/bone = SHEET_MATERIAL_AMOUNT * 6) /// Your missing health is multiplied by this value to find the bonus damage var/missing_health_ratio = 0.1 @@ -179,7 +179,7 @@ trophy_id = TROPHY_LOBSTER_CLAW bonus_value = 1 // No wildhunter drop to prevent refresh cheese - custom_materials = list(/datum/material/meat = SHEET_MATERIAL_AMOUNT * 12, /datum/material/bone = SHEET_MATERIAL_AMOUNT * 5) + custom_materials = list(/datum/material/meat = SHEET_MATERIAL_AMOUNT * 8, /datum/material/bone = SHEET_MATERIAL_AMOUNT * 4) /obj/item/crusher_trophy/lobster_claw/effect_desc() return "mark detonation to briefly rebuke the target for [bonus_value] second[bonus_value > 1 ? "s" : ""]" @@ -215,7 +215,7 @@ desc = "A baby bileworm. Suitable as a trophy for a kinetic crusher." denied_type = /obj/item/crusher_trophy/bileworm_spewlet wildhunter_drops = list(/obj/item/stack/sheet/animalhide/bileworm = 3) - custom_materials = list(/datum/material/gold = SHEET_MATERIAL_AMOUNT * 12) + custom_materials = list(/datum/material/gold = SHEET_MATERIAL_AMOUNT * 8) ///item ability that handles the effect var/datum/action/cooldown/mob_cooldown/projectile_attack/dir_shots/spewlet/ability diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index 1f31fbb60536..36d594b2ad6f 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -150,23 +150,6 @@ //Pod objects -//Window -/obj/structure/window/reinforced/shuttle/survival_pod - name = "pod window" - icon = 'icons/obj/smooth_structures/pod_window.dmi' - icon_state = "pod_window-0" - base_icon_state = "pod_window" - smoothing_flags = SMOOTH_BITMASK - smoothing_groups = SMOOTH_GROUP_SHUTTLE_PARTS + SMOOTH_GROUP_SURVIVAL_TITANIUM_POD - canSmoothWith = SMOOTH_GROUP_SURVIVAL_TITANIUM_POD - -/obj/structure/window/reinforced/survival_pod - name = "pod window" - icon = 'icons/obj/mining_zones/survival_pod.dmi' - icon_state = "pwindow" - -MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/survival_pod/spawner, 0) - //Door /obj/machinery/door/airlock/survival_pod name = "Airlock" diff --git a/code/modules/mining/lavaland/mining_loot/consumables.dm b/code/modules/mining/lavaland/mining_loot/consumables.dm index 27e6b53e777b..5ce7ef933ae9 100644 --- a/code/modules/mining/lavaland/mining_loot/consumables.dm +++ b/code/modules/mining/lavaland/mining_loot/consumables.dm @@ -4,27 +4,22 @@ name = "KA Mod Disk" desc = "A design disc containing the design for a unique kinetic accelerator modkit. It's compatible with a research console." icon_state = "datadisk1" - var/modkit_design = /datum/design/unique_modkit - -/obj/item/disk/design_disk/modkit_disc/Initialize(mapload) - . = ..() - blueprints += new modkit_design /obj/item/disk/design_disk/modkit_disc/mob_and_turf_aoe name = "Offensive Mining Explosion Mod Disk" - modkit_design = /datum/design/unique_modkit/offensive_turf_aoe + blueprints = list(/datum/design/unique_modkit/offensive_turf_aoe) /obj/item/disk/design_disk/modkit_disc/rapid_repeater name = "Rapid Repeater Mod Disk" - modkit_design = /datum/design/unique_modkit/rapid_repeater + blueprints = list(/datum/design/unique_modkit/rapid_repeater) /obj/item/disk/design_disk/modkit_disc/resonator_blast name = "Resonator Blast Mod Disk" - modkit_design = /datum/design/unique_modkit/resonator_blast + blueprints = list(/datum/design/unique_modkit/resonator_blast) /obj/item/disk/design_disk/modkit_disc/bounty name = "Death Syphon Mod Disk" - modkit_design = /datum/design/unique_modkit/bounty + blueprints = list(/datum/design/unique_modkit/bounty) // Wisp Lantern /obj/item/wisp_lantern diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index fab53fbe93f3..20d62a349854 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -111,7 +111,7 @@ if("setAlloy") processing_machine.selected_material = null - processing_machine.selected_alloy = params["value"] + processing_machine.selected_alloy = text2path(params["new_alloy"]) return TRUE if("toggle") @@ -157,8 +157,7 @@ MATCONTAINER_EXAMINE, \ allowed_items = accepted_type \ ) - if(!GLOB.autounlock_techwebs[/datum/techweb/autounlocking/smelter]) - GLOB.autounlock_techwebs[/datum/techweb/autounlocking/smelter] = new /datum/techweb/autounlocking/smelter + GLOB.autounlock_techwebs[/datum/techweb/autounlocking/smelter] ||= new /datum/techweb/autounlocking/smelter() stored_research = GLOB.autounlock_techwebs[/datum/techweb/autounlocking/smelter] selected_material = SSmaterials.get_material(/datum/material/iron) @@ -181,24 +180,22 @@ /obj/machinery/mineral/processing_unit/ui_static_data() var/list/data = list() + data["materialIcons"] = list() for(var/datum/material/material as anything in materials.materials) var/obj/display = initial(material.sheet_type) - data["materialIcons"] += list( - list( - "id" = REF(material), - "icon" = icon2base64(icon(initial(display.icon), icon_state = initial(display.icon_state), frame = 1)), - ) - ) - - for(var/research in stored_research.researched_designs) - var/datum/design/design = SSresearch.techweb_design_by_id(research) - var/obj/display = initial(design.build_path) - data["alloyIcons"] += list( - list( - "id" = design.id, - "icon" = icon2base64(icon(initial(display.icon), icon_state = initial(display.icon_state), frame = 1)), - ) - ) + data["materialIcons"] += list(list( + "id" = REF(material), + "icon" = icon2base64(icon(initial(display.icon), icon_state = initial(display.icon_state), frame = 1)), + )) + + data["alloyIcons"] = list() + for(var/design_path in stored_research.researched_designs) + var/datum/design/design = SSresearch.techweb_designs[design_path] + var/obj/display = design.build_path + data["alloyIcons"] += list(list( + "id" = "[design_path]", + "icon" = icon2base64(icon(display::icon, display::icon_state, frame = 1)), + )) data += materials.ui_static_data() @@ -211,14 +208,12 @@ data["selectedMaterial"] = selected_material?.name data["alloys"] = list() - for(var/research in stored_research.researched_designs) - var/datum/design/design = SSresearch.techweb_design_by_id(research) - data["alloys"] += list( - list( - "name" = design.name, - "id" = design.id, - ) - ) + for(var/design_path in stored_research.researched_designs) + var/datum/design/design = SSresearch.techweb_designs[design_path] + data["alloys"] += list(list( + "name" = design.name, + "path" = design_path, + )) data["selectedAlloy"] = selected_alloy data["state"] = on @@ -252,13 +247,12 @@ materials.retrieve_stack(sheets_to_remove, mat, out) /obj/machinery/mineral/processing_unit/proc/smelt_alloy(seconds_per_tick = 2) - var/datum/design/alloy = stored_research.isDesignResearchedID(selected_alloy) //check if it's a valid design - if(!alloy) + if(!stored_research.researched_designs[selected_alloy]) //check if it's a valid design on = FALSE return + var/datum/design/alloy = SSresearch.techweb_designs[selected_alloy] var/amount = can_smelt(alloy, seconds_per_tick) - if(!amount) on = FALSE return diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm index 8091c67ebd30..aab0d724c104 100644 --- a/code/modules/mining/machine_redemption.dm +++ b/code/modules/mining/machine_redemption.dm @@ -50,8 +50,7 @@ /obj/machinery/mineral/ore_redemption/Initialize(mapload) . = ..() - if(!GLOB.autounlock_techwebs[/datum/techweb/autounlocking/smelter]) - GLOB.autounlock_techwebs[/datum/techweb/autounlocking/smelter] = new /datum/techweb/autounlocking/smelter + GLOB.autounlock_techwebs[/datum/techweb/autounlocking/smelter] ||= new /datum/techweb/autounlocking/smelter() stored_research = GLOB.autounlock_techwebs[/datum/techweb/autounlocking/smelter] //mat_container_signals is for reedeming points from local storage if silo is not required @@ -105,7 +104,7 @@ if(!amount || !redemption_mat_amount) return FALSE - var/smeltable_sheets = FLOOR(redemption_mat_amount / amount, 1) + var/smeltable_sheets = floor(redemption_mat_amount / amount) if(!smeltable_sheets) return FALSE @@ -264,12 +263,12 @@ "icon_state" = sheet_type::icon_state, )) - for(var/research in stored_research.researched_designs) - var/datum/design/alloy = SSresearch.techweb_design_by_id(research) + for(var/design_path in stored_research.researched_designs) + var/datum/design/alloy = SSresearch.techweb_designs[design_path] var/obj/alloy_type = alloy.build_path data["materials"] += list(list( "name" = alloy.name, - "id" = alloy.id, + "id" = design_path, "category" = "alloy", "amount" = can_smelt_alloy(alloy), "icon" = alloy_type::icon, @@ -338,28 +337,32 @@ return else if(!allowed(usr)) //Check the ID inside, otherwise check the user to_chat(usr, span_warning("Required access not found.")) - else - var/datum/material/mat = locate(params["id"]) + return - var/amount = mat_container.materials[mat] - if(!amount) - return + var/datum/material/mat = locate(params["material_ref"]) - var/stored_amount = CEILING(amount / SHEET_MATERIAL_AMOUNT, 0.1) - if(!stored_amount) - return + var/amount = mat_container.materials[mat] + if(!amount) + return - var/desired = text2num(params["sheets"]) - var/sheets_to_remove = round(min(desired, 50, stored_amount)) - materials.eject_sheets(mat, sheets_to_remove, get_step(src, output_dir), user_data = ID_DATA(usr)) + var/stored_amount = CEILING(amount / SHEET_MATERIAL_AMOUNT, 0.1) + if(!stored_amount) + return + + var/desired = text2num(params["sheets"]) + var/sheets_to_remove = round(min(desired, 50, stored_amount)) + materials.eject_sheets(mat, sheets_to_remove, get_step(src, output_dir), user_data = ID_DATA(usr)) return TRUE if("Smelt") if(!mat_container) return if(!materials.can_use_resource(user_data = ID_DATA(usr))) return - var/alloy_id = params["id"] - var/datum/design/alloy = stored_research.isDesignResearchedID(alloy_id) + var/alloy_path = text2path(params["path"]) + if(!stored_research.researched_designs[alloy_path]) + return + var/datum/design/alloy = SSresearch.techweb_designs[alloy_path] + var/obj/item/card/id/user_id_card if(isliving(usr)) var/mob/living/user = usr diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 874d03916f54..de85f39f2d25 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -664,7 +664,8 @@ GAME_VERB(/mob/dead/observer, restore_ghost_appearance, "Restore Ghost Character if (!isnull(client) && !isnull(client.eye)) reset_perspective(null) -GAME_VERB_HIDDEN(/mob/dead/observer, add_view_range, "Add View Range", input as num) +GAME_VERB_HIDDEN(/mob/dead/observer, add_view_range, "Add View Range") + VERB_ARG(input, VERB_ARG_TYPE_NUM, VERB_ARG_SOURCE_INPUT) if(SSlag_switch.measures[DISABLE_GHOST_ZOOM_TRAY] && !client?.holder) to_chat(usr, span_notice("That verb is currently globally disabled.")) diff --git a/code/modules/mob/living/basic/alien/_alien.dm b/code/modules/mob/living/basic/alien/_alien.dm index e76c7fec11b0..3d1db5b6978d 100644 --- a/code/modules/mob/living/basic/alien/_alien.dm +++ b/code/modules/mob/living/basic/alien/_alien.dm @@ -88,7 +88,7 @@ return TRUE /mob/living/basic/alien/get_bloodtype() - return get_blood_type(BLOOD_TYPE_XENO) + return get_blood_type(/datum/blood_type/xeno) /mob/living/basic/alien/get_gibs_type(drop_bitflags = NONE) if(drop_bitflags & DROP_BODYPARTS) diff --git a/code/modules/mob/living/basic/basic.dm b/code/modules/mob/living/basic/basic.dm index 641e2b7999ab..d5e04fa9db0f 100644 --- a/code/modules/mob/living/basic/basic.dm +++ b/code/modules/mob/living/basic/basic.dm @@ -6,7 +6,7 @@ health = 20 maxHealth = 20 max_stamina = BASIC_MOB_STAMINA_MATCH_HEALTH - gender = PLURAL + gender = PLURAL // Plural means we randomize by default. living_flags = MOVES_ON_ITS_OWN status_flags = CANPUSH | CANSTUN fire_stack_decay_rate = -5 // Reasonably fast as NPCs will not usually actively extinguish themselves @@ -85,6 +85,9 @@ ///We only try to show a gibbing animation if this exists. var/icon_gib = null + /// If we randomize our gender when its default is set to plural + var/randomize_gender = TRUE + ///If the mob can be spawned with a gold slime core. HOSTILE_SPAWN are spawned with plasma, FRIENDLY_SPAWN are spawned with blood. var/gold_core_spawnable = NO_SPAWN ///Sentience type, for slime potions. SHOULD BE AN ELEMENT BUT I DONT CARE ABOUT IT FOR NOW @@ -107,7 +110,7 @@ /mob/living/basic/Initialize(mapload) . = ..() - if(gender == PLURAL) + if((gender == PLURAL) && randomize_gender) gender = pick(MALE,FEMALE) if(!real_name) diff --git a/code/modules/mob/living/basic/basic_defense.dm b/code/modules/mob/living/basic/basic_defense.dm index dcfa637848b3..f4c4c117ac87 100644 --- a/code/modules/mob/living/basic/basic_defense.dm +++ b/code/modules/mob/living/basic/basic_defense.dm @@ -96,7 +96,6 @@ var/datum/storyteller_roll/damage/damage_roll = new damage_roll_type() damage_roll.difficulty += damage_difficulty_bonus damage = damage_roll.st_roll(user, src, damage_bonus_dice) TTRPG_DAMAGE - damage = (basic_mob_flags & IMMUNE_TO_FISTS) ? 0 : damage if(damage <= 0 || !attack_landed) playsound(loc, attacking_bodypart.unarmed_miss_sound, 25, TRUE, -1) @@ -206,7 +205,7 @@ if(. && stat != DEAD) //successful larva bite var/damage_done = apply_damage(rand(attacking_larva.melee_damage_lower, attacking_larva.melee_damage_upper), BRUTE) if(damage_done > 0) - attacking_larva.amount_grown = min(attacking_larva.amount_grown + damage_done, attacking_larva.max_grown) + attacking_larva.amount_grown = min(attacking_larva.amount_grown + damage_done, XENOMORPH_MAX_GROWTH) /mob/living/basic/attack_drone(mob/living/basic/drone/attacking_drone) if(attacking_drone.combat_mode) //No kicking dogs even as a rogue drone. Use a weapon. diff --git a/code/modules/mob/living/basic/bots/mulebot/mulebot_control.dm b/code/modules/mob/living/basic/bots/mulebot/mulebot_control.dm index d7bd93be22c4..8250073a55a1 100644 --- a/code/modules/mob/living/basic/bots/mulebot/mulebot_control.dm +++ b/code/modules/mob/living/basic/bots/mulebot/mulebot_control.dm @@ -18,7 +18,8 @@ data["modeStatus"] = "average" if(BOT_NO_ROUTE) data["modeStatus"] = "bad" - data["load"] = get_load_name() + data["load"] = !!load + data["loadName"] = get_load_name() data["destination"] = ai_controller.blackboard[BB_MULEBOT_DESTINATION_BEACON] data["homeDestination"] = ai_controller.blackboard[BB_MULEBOT_HOME_BEACON] data["destinationsList"] = GLOB.deliverybeacontags diff --git a/code/modules/mob/living/basic/bots/mulebot/mulebot_delivery.dm b/code/modules/mob/living/basic/bots/mulebot/mulebot_delivery.dm index 5fec23e9bbfc..990d66eb113d 100644 --- a/code/modules/mob/living/basic/bots/mulebot/mulebot_delivery.dm +++ b/code/modules/mob/living/basic/bots/mulebot/mulebot_delivery.dm @@ -47,7 +47,8 @@ if(load || atom_to_load.anchored) return - if(!isturf(atom_to_load.loc)) //To prevent the loading from stuff from someone's inventory or screen icons. + var/prev_loc = atom_to_load.loc + if(!isturf(prev_loc)) //To prevent the loading from stuff from someone's inventory or screen icons. return var/obj/structure/closet/crate/crate = atom_to_load @@ -65,14 +66,18 @@ if(crate) crate.close() //make sure the crate is closed - object_to_load.forceMove(src) + playsound(src, SFX_HEAVY_DROP, 60, TRUE) else if(isliving(atom_to_load)) if(!load_mob(atom_to_load)) //forceMove() is handled in buckling return load = atom_to_load + var/stored_alpha = load.alpha + do_loading_animation(load, prev_loc) + load.alpha = stored_alpha // Restoring previous alpha following the animation's completion. + load.transform = load.transform.Scale(10/7) update_appearance() ///resolves the name to display for the loaded mob. primarily needed for the paranormal subtype since we don't want to show the name of ghosts riding it. @@ -88,9 +93,11 @@ can_buckle = FALSE return TRUE -// called to unload the bot -// argument is optional direction to unload -// if zero or null, unload at bot's location +/** + * called to unload the bot + * argument is optional direction to unload + * if zero or null, unload at bot's location + */ /mob/living/basic/bot/mulebot/proc/unload(dirn) if(QDELETED(load)) if(load) //if our thing was qdel'd, there's likely a leftover reference. just clear it and remove the overlay. we'll let the bot keep moving around to prevent it abruptly stopping somewhere. @@ -101,9 +108,7 @@ update_bot_mode(new_mode = BOT_IDLE) var/atom/movable/cached_load = load //cache the load since unbuckling mobs clears the var. - unbuckle_all_mobs() - if(load) //don't have to do any of this for mobs. cached_load.forceMove(loc) cached_load.pixel_y = initial(cached_load.pixel_y) @@ -113,5 +118,40 @@ if(dirn) //move the thing to the delivery point. cached_load.Move(get_step(loc,dirn), dirn) - + playsound(src, SFX_HEAVY_DROP, 50, TRUE) update_appearance() + +/mob/living/basic/bot/mulebot/proc/do_loading_animation(atom/movable/animated_load, turf/old_loc) + if(!animated_load || !old_loc) + return + animate(src, time = 0.1 SECONDS, pixel_y = -2) + + var/image/pickup_animation = image(icon = animated_load) + SET_PLANE(pickup_animation, GAME_PLANE, old_loc) + pickup_animation.transform.Scale(0.75) + pickup_animation.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA + + var/direction = get_dir(old_loc, src) + var/to_x = base_pixel_x + base_pixel_w + var/to_y = base_pixel_y + base_pixel_z + + if(direction & NORTH) + to_y += 32 + else if(direction & SOUTH) + to_y -= 32 + if(direction & EAST) + to_x += 32 + else if(direction & WEST) + to_x -= 32 + if(!direction) + to_y += 10 + pickup_animation.pixel_x += 6 * (prob(50) ? 1 : -1) //6 to the right or left, helps break up the straight upward move + + var/atom/movable/flick_visual/pickup = old_loc.flick_overlay_view(pickup_animation, 0.4 SECONDS) + var/matrix/animation_matrix = new(pickup.transform) + animation_matrix.Turn(pick(-30, 30)) + animation_matrix.Scale(1.1) + + animate(pickup, alpha = 175, pixel_x = to_x, pixel_y = to_y, time = 0.3 SECONDS, transform = animation_matrix, easing = CUBIC_EASING) + animate(animated_load, alpha = 0, transform = matrix().Scale(0.7), time = 0.1 SECONDS) + animate(src, time = 0.1 SECONDS, pixel_y = 0, delay = 0.1 SECONDS, easing = QUAD_EASING) diff --git a/code/modules/mob/living/basic/bots/mulebot/mulebot_movement.dm b/code/modules/mob/living/basic/bots/mulebot/mulebot_movement.dm index 0654477a0965..a9b15ea138de 100644 --- a/code/modules/mob/living/basic/bots/mulebot/mulebot_movement.dm +++ b/code/modules/mob/living/basic/bots/mulebot/mulebot_movement.dm @@ -14,7 +14,7 @@ cell?.use(cell_move_power_usage) set_cell_hud() - if(has_gravity()) + if(isnull(buckled) && isnull(pulledby) && isnull(throwing) && has_gravity()) for(var/mob/living/carbon/human/future_pancake in loc) if(future_pancake.body_position == LYING_DOWN) run_over(future_pancake) diff --git a/code/modules/mob/living/basic/bots/secbot/secbot.dm b/code/modules/mob/living/basic/bots/secbot/secbot.dm index df9633d92656..e66e2fa206b0 100644 --- a/code/modules/mob/living/basic/bots/secbot/secbot.dm +++ b/code/modules/mob/living/basic/bots/secbot/secbot.dm @@ -175,7 +175,7 @@ /mob/living/basic/bot/secbot/proc/post_stun(mob/living/carbon/current_target, harm = FALSE) flick("[base_icon_state]-c", src) - var/threat = 5 || ai_controller.blackboard[BB_CURRENT_CRIMINAL_ASSESSMENT] + var/threat = ai_controller.blackboard[BB_CURRENT_CRIMINAL_ASSESSMENT] || 5 if(security_mode_flags & SECBOT_DECLARE_ARRESTS) var/area/location = get_area(src) speak("[security_mode_flags & SECBOT_HANDCUFF_TARGET ? "Arresting" : "Detaining"] level [threat] scumbag [RUNECHAT_BOLD("[current_target]")] in [location].", radio_channel) diff --git a/code/modules/mob/living/basic/bots/secbot/secbot_ai.dm b/code/modules/mob/living/basic/bots/secbot/secbot_ai.dm index b8afdb678a31..a3a95baa8437 100644 --- a/code/modules/mob/living/basic/bots/secbot/secbot_ai.dm +++ b/code/modules/mob/living/basic/bots/secbot/secbot_ai.dm @@ -20,7 +20,7 @@ var/mob/living/carbon/human/human_target = the_target if(human_target.handcuffed || IS_UNCONSCIOUS_OR_CRIT(human_target)) return FALSE - if(locate(human_target) in my_controller.blackboard[BB_BASIC_MOB_RETALIATE_LIST]) + if(human_target in my_controller.blackboard[BB_BASIC_MOB_RETALIATE_LIST]) return TRUE var/mob/living/basic/bot/secbot/my_bot = living_mob if(human_target.IsParalyzed() && !(my_bot.security_mode_flags & SECBOT_HANDCUFF_TARGET)) @@ -41,7 +41,7 @@ /datum/ai_controller/basic_controller/bot/secbot/proc/on_target_set() SIGNAL_HANDLER var/datum/action/cooldown/bot_announcement/announcement = blackboard[BB_ANNOUNCE_ABILITY] - var/threat_level = 5 || blackboard[BB_CURRENT_CRIMINAL_ASSESSMENT] + var/threat_level = blackboard[BB_CURRENT_CRIMINAL_ASSESSMENT] || 5 INVOKE_ASYNC(announcement, TYPE_PROC_REF(/datum/action/cooldown/bot_announcement, announce), "Level [threat_level] infraction alert!") playsound(pawn, pick( 'sound/mobs/non-humanoids/beepsky/criminal.ogg', diff --git a/code/modules/mob/living/basic/bots/secbot/super_beepsky.dm b/code/modules/mob/living/basic/bots/secbot/super_beepsky.dm index 9e0410b467e3..782102123cc8 100644 --- a/code/modules/mob/living/basic/bots/secbot/super_beepsky.dm +++ b/code/modules/mob/living/basic/bots/secbot/super_beepsky.dm @@ -9,7 +9,7 @@ ai_controller = /datum/ai_controller/basic_controller/bot/secbot/super_beepsky baton_type = /obj/item/melee/energy/sword/saber speed = 4 //he's a fast fucker - ///chance we block bullets + ///chance we block melee attacks var/block_chance = 50 ///is our sword currently active? var/sword_active = FALSE @@ -48,7 +48,7 @@ if(IS_UNCONSCIOUS_OR_CRIT(src)) return NONE - if(!sword_active || !prob(block_chance)) + if(!sword_active) return NONE visible_message(span_warning("[source] deflects [hitting_projectile] with its energy swords!")) @@ -84,7 +84,7 @@ /mob/living/basic/bot/secbot/grievous/explode() var/atom/drop_location = drop_location() //Parent is dropping the weapon, so let's drop 3 more to make up for it. - for(var/i in 0 to 3) + for(var/i in 1 to 3) drop_part(baton_type, drop_location) return ..() @@ -97,3 +97,6 @@ maxHealth = 50 block_chance = 0 baton_type = /obj/item/toy/sword + +/mob/living/basic/bot/secbot/grievous/toy/block_bullets(datum/source, obj/projectile/hitting_projectile) + return NONE diff --git a/code/modules/mob/living/basic/clown/clown.dm b/code/modules/mob/living/basic/clown/clown.dm index 9c8ec1e8bb7d..3392d19b4e3d 100644 --- a/code/modules/mob/living/basic/clown/clown.dm +++ b/code/modules/mob/living/basic/clown/clown.dm @@ -68,7 +68,7 @@ /mob/living/basic/clown/get_bloodtype() if (check_holidays(APRIL_FOOLS)) - return get_blood_type(BLOOD_TYPE_CLOWN) + return get_blood_type(/datum/blood_type/clown) return ..() /mob/living/basic/clown/lube diff --git a/code/modules/mob/living/basic/cult/shade.dm b/code/modules/mob/living/basic/cult/shade.dm index a929bc26736c..2547013945cd 100644 --- a/code/modules/mob/living/basic/cult/shade.dm +++ b/code/modules/mob/living/basic/cult/shade.dm @@ -3,6 +3,7 @@ real_name = "Shade" desc = "A bound spirit." gender = PLURAL + randomize_gender = FALSE icon = 'icons/mob/nonhuman-player/cult.dmi' icon_state = "shade_cult" icon_living = "shade_cult" diff --git a/code/modules/mob/living/basic/cytology/vatbeast.dm b/code/modules/mob/living/basic/cytology/vatbeast.dm index b0de4c1d7548..bb6ffec1a270 100644 --- a/code/modules/mob/living/basic/cytology/vatbeast.dm +++ b/code/modules/mob/living/basic/cytology/vatbeast.dm @@ -60,7 +60,7 @@ AddElement(/datum/element/swabable, CELL_LINE_TABLE_VATBEAST, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) /mob/living/basic/vatbeast/get_bloodtype() - return get_blood_type(BLOOD_TYPE_LIZARD) // Green and alien + return get_blood_type(/datum/blood_type/lizard) // Green and alien /// Attack people and slap them /datum/ai_controller/basic_controller/vatbeast diff --git a/code/modules/mob/living/basic/drone/_drone.dm b/code/modules/mob/living/basic/drone/_drone.dm index 36c60b175abf..8cf2ea4d06bb 100644 --- a/code/modules/mob/living/basic/drone/_drone.dm +++ b/code/modules/mob/living/basic/drone/_drone.dm @@ -53,7 +53,7 @@ /// Stored drone color, restored when unhacked var/colour = "grey" var/list/drone_overlays[DRONE_TOTAL_LAYERS] - /// Drone laws announced on spawn + /// Drone laws announced on spawn, can be overridden for regular drones via config/drone_laws.txt var/laws = \ "1. You may not involve yourself in the matters of another being, even if such matters conflict with Law Two or Law Three, unless the other being is another Drone.\n"+\ "2. You may not harm any being, regardless of intent or circumstance.\n"+\ @@ -104,6 +104,7 @@ /mob/living/basic/drone/Initialize(mapload) . = ..() GLOB.drones_list += src + laws = get_default_laws() AddElement(/datum/element/dextrous, hud_type = hud_type) AddComponent(/datum/component/basic_inhands, y_offset = getItemPixelShiftY()) AddComponent(/datum/component/simple_access, SSid_access.get_region_access_list(list(REGION_ALL_GLOBAL))) @@ -156,6 +157,19 @@ AddElement(/datum/element/can_be_held) +/mob/living/basic/drone/proc/get_default_laws() + var/base_laws = /mob/living/basic/drone::laws + if(initial(laws) != base_laws) //subtype lawset, the config doesn't apply + return initial(laws) + var/list/lines = list() + for(var/line in world.file2list("[global.config.directory]/drone_laws.txt")) + if(!line) + continue + if(findtextEx(line, "#", 1, 2)) + continue + lines += "[length(lines) + 1]. [line]" + return length(lines) ? jointext(lines, "\n") : base_laws + /mob/living/basic/drone/med_hud_set_health() set_hud_image_state(DIAG_HUD, "huddiag[RoundDiagBar(health/maxHealth)]") @@ -182,8 +196,9 @@ return FALSE check_laws() - if(flavortext) - to_chat(src, "[flavortext]") + var/flavor = get_policy("[type]") || flavortext + if(flavor) + to_chat(src, "[flavor]") if(!picked) pickVisualAppearance() diff --git a/code/modules/mob/living/basic/drone/interaction.dm b/code/modules/mob/living/basic/drone/interaction.dm index 90cad722002c..a8d926225a5c 100644 --- a/code/modules/mob/living/basic/drone/interaction.dm +++ b/code/modules/mob/living/basic/drone/interaction.dm @@ -165,7 +165,7 @@ visible_message(span_info("[src]'s display glows a content blue!"), \ "ERROR: LAW OVERRIDE DETECTED") to_chat(src, span_info("From now on, these are your laws:")) - laws = initial(laws) + laws = get_default_laws() to_chat(src, laws) to_chat(src, "Having been restored, your onboard antivirus reports the all-clear and you are able to perform all actions again.") hacked = FALSE diff --git a/code/modules/mob/living/basic/farm_animals/goose/forage_for_goose_food.bt.json b/code/modules/mob/living/basic/farm_animals/goose/forage_for_goose_food.bt.json index f7fe2284a28d..6a928fef8dbd 100644 --- a/code/modules/mob/living/basic/farm_animals/goose/forage_for_goose_food.bt.json +++ b/code/modules/mob/living/basic/farm_animals/goose/forage_for_goose_food.bt.json @@ -1,11 +1,19 @@ { "dm_type": "/datum/bt_node/subtree/forage_for_goose_food", - "type": "leaf", - "behavior": "/datum/bt_node/ai_behavior/acquire_target/update_interaction_target", + "type": "decorator", + "decorator": "/datum/bt_node/decorator/key_off_cooldown", "vars": { - "target_key": "BB_TARGET_FOOD", - "targeting_strategy": "/datum/targeting_strategy/goose_edible", - "target_source": "/datum/target_source/oview_items", - "vision_range": 1 + "observer_abort": "BT_ABORT_SELF", + "cooldown_key": "BB_NEXT_FOOD_EAT" + }, + "child": { + "type": "leaf", + "behavior": "/datum/bt_node/ai_behavior/acquire_target/update_interaction_target", + "vars": { + "target_key": "BB_TARGET_FOOD", + "targeting_strategy": "/datum/targeting_strategy/goose_edible", + "target_source": "/datum/target_source/oview_items", + "vision_range": 4 + } } } diff --git a/code/modules/mob/living/basic/farm_animals/goose/goose.dm b/code/modules/mob/living/basic/farm_animals/goose/goose.dm index 935b3af656e2..abd31a17933d 100644 --- a/code/modules/mob/living/basic/farm_animals/goose/goose.dm +++ b/code/modules/mob/living/basic/farm_animals/goose/goose.dm @@ -60,6 +60,9 @@ /// Called when we've eaten something /mob/living/basic/goose/proc/on_gobbled(atom/source, obj/item/food, mob/feeder) SIGNAL_HANDLER + // The eaten item isn't always destroyed (see conserve_food), so make sure the AI + // forgets about it instead of trying to eat the same swallowed item forever. + ai_controller?.clear_blackboard_key(BB_TARGET_FOOD) if (!food.has_material_type(/datum/material/plastic)) return NONE diff --git a/code/modules/mob/living/basic/farm_animals/rabbit.dm b/code/modules/mob/living/basic/farm_animals/rabbit.dm index 75caf1a6991c..54e2773286ab 100644 --- a/code/modules/mob/living/basic/farm_animals/rabbit.dm +++ b/code/modules/mob/living/basic/farm_animals/rabbit.dm @@ -13,7 +13,6 @@ icon_state = "rabbit_white" icon_living = "rabbit_white" icon_dead = "rabbit_white_dead" - gender = PLURAL mob_biotypes = MOB_ORGANIC | MOB_BEAST health = 15 maxHealth = 15 diff --git a/code/modules/mob/living/basic/lavaland/bileworm/bileworm_instrument.dm b/code/modules/mob/living/basic/lavaland/bileworm/bileworm_instrument.dm index 2fade1b1dcc3..2d492995d7d5 100644 --- a/code/modules/mob/living/basic/lavaland/bileworm/bileworm_instrument.dm +++ b/code/modules/mob/living/basic/lavaland/bileworm/bileworm_instrument.dm @@ -6,7 +6,7 @@ icon_state = "bilehorn" allowed_instrument_ids = "bilehorn" inhand_icon_state = null - custom_materials = list(/datum/material/gold = SHEET_MATERIAL_AMOUNT * 12, /datum/material/bone = SHEET_MATERIAL_AMOUNT * 2) + custom_materials = list(/datum/material/gold = SHEET_MATERIAL_AMOUNT * 8, /datum/material/bone = SHEET_MATERIAL_AMOUNT * 2) /datum/crafting_recipe/bilehorn name = "Bilehorn" diff --git a/code/modules/mob/living/basic/lavaland/goliath/goliath.dm b/code/modules/mob/living/basic/lavaland/goliath/goliath.dm index e851cfdeabe8..56ea5ee94e59 100644 --- a/code/modules/mob/living/basic/lavaland/goliath/goliath.dm +++ b/code/modules/mob/living/basic/lavaland/goliath/goliath.dm @@ -10,7 +10,6 @@ base_pixel_x = -12 gender = MALE // Female ones are the bipedal elites speed = 12 - // basic_mob_flags = IMMUNE_TO_FISTS // DARKPACK EDIT REMOVAL maxHealth = 300 health = 300 friendly_verb_continuous = "wails at" diff --git a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.bt.json b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.bt.json index bc32d519c2b7..6271f2781685 100644 --- a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.bt.json +++ b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.bt.json @@ -30,17 +30,18 @@ "key": "BB_CURRENT_TARGET" }, "child": { - "type": "selector", + "type": "parallel", + "failure_policy": "BT_PARALLEL_FAILURE_ANY", + "success_policy": "BT_PARALLEL_SUCCESS_CHILD_ONE", + "repeat_secondary": true, + "finish_on_primary": true, "children": [ - { - "type": "subtree", - "subtype": "/datum/bt_node/subtree/run_away_from_target" - }, { "type": "parallel", "failure_policy": "BT_PARALLEL_FAILURE_ANY", "success_policy": "BT_PARALLEL_SUCCESS_CHILD_ONE", "repeat_secondary": true, + "repeat_secondary_delay": "1 SECONDS", "finish_on_primary": true, "children": [ { @@ -79,15 +80,6 @@ } ] }, - { - "type": "leaf", - "behavior": "/datum/bt_node/ai_behavior/move_to_target", - "vars": { - "target_key": "BB_CURRENT_TARGET", - "required_dist": 1, - "finish_on_arrival": false - } - }, { "type": "decorator", "decorator": "/datum/bt_node/decorator/cooldown", @@ -102,6 +94,43 @@ } } ] + }, + { + "type": "selector", + "children": [ + { + "type": "decorator", + "decorator": "/datum/bt_node/decorator/mob_stat_at_least", + "vars": { + "observer_abort": "BT_ABORT_SELF", + "key": "BB_CURRENT_TARGET", + "min_stat": "SOFT_CRIT" + }, + "child": { + "type": "leaf", + "behavior": "/datum/bt_node/ai_behavior/move_to_target", + "vars": { + "target_key": "BB_CURRENT_TARGET", + "required_dist": 1, + "finish_on_arrival": false + } + } + }, + { + "type": "decorator", + "decorator": "/datum/bt_node/decorator/mob_stat_at_least", + "vars": { + "observer_abort": "BT_ABORT_SELF", + "invert": true, + "key": "BB_CURRENT_TARGET", + "min_stat": "SOFT_CRIT" + }, + "child": { + "type": "subtree", + "subtype": "/datum/bt_node/subtree/run_away_from_target" + } + } + ] } ] } diff --git a/code/modules/mob/living/basic/lavaland/tendril/tendril.dm b/code/modules/mob/living/basic/lavaland/tendril/tendril.dm index ee199dbf1d64..9311539dae08 100644 --- a/code/modules/mob/living/basic/lavaland/tendril/tendril.dm +++ b/code/modules/mob/living/basic/lavaland/tendril/tendril.dm @@ -14,7 +14,7 @@ GLOBAL_LIST_INIT(tendrils, list()) base_pixel_w = -8 status_flags = NONE mob_biotypes = MOB_ORGANIC | MOB_SKELETAL | MOB_MINING | MOB_SPECIAL - basic_mob_flags = DEL_ON_DEATH // DARKPACK EDIT CHANGE - (immune to fists is annoying) + basic_mob_flags = DEL_ON_DEATH mob_size = MOB_SIZE_HUGE maxHealth = 800 health = 800 diff --git a/code/modules/mob/living/basic/minebots/minebot.dm b/code/modules/mob/living/basic/minebots/minebot.dm index ac361c561f98..0afc83514a9b 100644 --- a/code/modules/mob/living/basic/minebots/minebot.dm +++ b/code/modules/mob/living/basic/minebots/minebot.dm @@ -90,7 +90,7 @@ comms.implant(src) assign_access() -/mob/living/basic/mining_drone/set_combat_mode(new_mode, silent = TRUE) +/mob/living/basic/mining_drone/set_combat_mode(new_mode, silent = TRUE, force = FALSE) . = ..() icon_state = combat_mode ? "mining_drone_offense" : "mining_drone" balloon_alert(src, "now [combat_mode ? "attacking" : "collecting"]") diff --git a/code/modules/mob/living/basic/pets/cat/cat.dm b/code/modules/mob/living/basic/pets/cat/cat.dm index 03e9424d824f..771379629846 100644 --- a/code/modules/mob/living/basic/pets/cat/cat.dm +++ b/code/modules/mob/living/basic/pets/cat/cat.dm @@ -61,33 +61,6 @@ ///callback for after a kitten is born var/datum/callback/post_birth_callback - // DARKPACK EDIT ADD START - NPC - bloodpool = 2 - maxbloodpool = 2 - // DARKPACK EDIT ADD END - - -/datum/emote/cat - abstract_type = /datum/emote/cat - mob_type_allowed_typecache = /mob/living/basic/pet/cat - mob_type_blacklist_typecache = list() - -/datum/emote/cat/meow - key = "meow" - key_third_person = "meows" - message = "meows!" - emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE - vary = TRUE - sound = SFX_CAT_MEOW - -/datum/emote/cat/purr - key = "purr" - key_third_person = "purrs" - message = "purrs." - emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE - vary = TRUE - sound = SFX_CAT_PURR - /mob/living/basic/pet/cat/Initialize(mapload) . = ..() AddComponent(/datum/component/obeys_commands, pet_commands) @@ -99,7 +72,7 @@ AddElement(/datum/element/can_be_held) add_cell_sample() add_verb(src, /mob/living/proc/toggle_resting) - add_traits(list(TRAIT_CATLIKE_INSTINCT, TRAIT_VENTCRAWLER_ALWAYS, TRAIT_WOUND_LICKER, TRAIT_COLORBLIND), INNATE_TRAIT) + add_traits(list(TRAIT_CAT_EMOTES_ALLOWED, TRAIT_CATLIKE_INSTINCT, TRAIT_VENTCRAWLER_ALWAYS, TRAIT_WOUND_LICKER, TRAIT_COLORBLIND), INNATE_TRAIT) ai_controller.set_blackboard_key(BB_HUNTABLE_PREY, typecacheof(huntable_items)) if(can_breed) add_breeding_component() diff --git a/code/modules/mob/living/basic/pets/cat/runtime.dm b/code/modules/mob/living/basic/pets/cat/runtime.dm index c2097e1366da..e02b1fa7c1a4 100644 --- a/code/modules/mob/living/basic/pets/cat/runtime.dm +++ b/code/modules/mob/living/basic/pets/cat/runtime.dm @@ -8,6 +8,7 @@ icon_state = "cat" icon_living = "cat" icon_dead = "cat_dead" + held_state = "cat" gender = FEMALE gold_core_spawnable = NO_SPAWN unique_pet = TRUE @@ -34,6 +35,7 @@ icon_state = "original" icon_living = "original" icon_dead = "original_dead" + held_state = "original" update_appearance() post_birth_callback = CALLBACK(src, PROC_REF(after_birth)) diff --git a/code/modules/mob/living/basic/slime/actions.dm b/code/modules/mob/living/basic/slime/actions.dm index e4e5ea252d3b..3e4408d440ca 100644 --- a/code/modules/mob/living/basic/slime/actions.dm +++ b/code/modules/mob/living/basic/slime/actions.dm @@ -3,6 +3,7 @@ button_icon = 'icons/mob/actions/actions_slime.dmi' background_icon_state = "bg_alien" overlay_icon_state = "bg_alien_border" + transparent_when_unavailable = FALSE ///Does the ability require a specific slime lifestage? var/life_stage_required ///Does the ability requires the slime to hit max growth? @@ -10,6 +11,11 @@ ///Does the ability cost nutrition? var/nutrition_cost = 0 +/datum/action/innate/slime/create_button(mob/viewer) + var/atom/movable/screen/movable/action_button/button = ..() + button.maptext_x = 2 + return button + /datum/action/innate/slime/IsAvailable(feedback = FALSE) . = ..() if(!.) @@ -37,6 +43,14 @@ needs_growth = TRUE nutrition_cost = SLIME_EVOLUTION_COST +/datum/action/innate/slime/evolve/update_button_status(atom/movable/screen/movable/action_button/button, force = FALSE) + . = ..() + var/mob/living/basic/slime/slime_owner = owner + if(!isnull(life_stage_required) && slime_owner.life_stage != life_stage_required) + button.maptext = "" + return + button.maptext = MAPTEXT_TINY_UNICODE("[slime_owner.amount_grown]/[SLIME_EVOLUTION_THRESHOLD]") + ///Turns a baby slime into an adult slime /datum/action/innate/slime/evolve/Activate() if(IS_UNCONSCIOUS_OR_CRIT(owner)) @@ -76,6 +90,14 @@ life_stage_required = SLIME_LIFE_STAGE_ADULT needs_growth = TRUE +/datum/action/innate/slime/reproduce/update_button_status(atom/movable/screen/movable/action_button/button, force = FALSE) + . = ..() + var/mob/living/basic/slime/slime_owner = owner + if(!isnull(life_stage_required) && slime_owner.life_stage != life_stage_required) + button.maptext = "" + return + button.maptext = MAPTEXT_TINY_UNICODE("[slime_owner.amount_grown]/[SLIME_EVOLUTION_THRESHOLD]") + /datum/action/innate/slime/reproduce/Activate() var/mob/living/basic/slime/slime_owner = owner slime_owner.reproduce() @@ -142,6 +164,8 @@ if(ckey) // Player slimes are more robust at spliting. Once an oversight of poor copypasta, now a feature! baby.set_nutrition(new_nutrition) baby.powerlevel = new_powerlevel + var/atom/movable/screen/slime_power/power_hud = baby.hud_used?.screen_objects[HUD_MOB_SLIME_POWER] + power_hud?.update_maptext() if(mutation_chance) baby.mutation_chance = clamp(mutation_chance + rand(-5, 5), 0, 100) else diff --git a/code/modules/mob/living/basic/slime/defense.dm b/code/modules/mob/living/basic/slime/defense.dm index e746176a49b0..1e519f57d2c2 100644 --- a/code/modules/mob/living/basic/slime/defense.dm +++ b/code/modules/mob/living/basic/slime/defense.dm @@ -3,7 +3,7 @@ . = ..() if(. & EMP_PROTECT_SELF) return - powerlevel = 0 // oh no, the power! + adjust_power_level(-SLIME_MAX_POWER) // oh no, the power! ///If a slime is attack with an empty hand, shoves included, try to wrestle them off the mob they are on /mob/living/basic/slime/proc/on_attack_hand(mob/living/basic/slime/defender_slime, mob/living/attacker) diff --git a/code/modules/mob/living/basic/slime/life.dm b/code/modules/mob/living/basic/slime/life.dm index 68f1eb1646da..fcc4ab1f0cd4 100644 --- a/code/modules/mob/living/basic/slime/life.dm +++ b/code/modules/mob/living/basic/slime/life.dm @@ -26,7 +26,7 @@ if(!has_status_effect(/datum/status_effect/grouped/stasis)) //Check if we don't have the status effect yet to_chat(src, span_danger("Nerve gas in the air has put you in stasis!")) apply_status_effect(/datum/status_effect/grouped/stasis, STASIS_SLIME_BZ) - powerlevel = 0 + adjust_power_level(-SLIME_MAX_POWER) ai_controller?.clear_blackboard_key(BB_SLIME_RABID) else if(has_status_effect(/datum/status_effect/grouped/stasis)) //Check if we still have the status effect to_chat(src, span_notice("You wake up from the stasis.")) @@ -66,9 +66,15 @@ amount_grown++ if(powerlevel < SLIME_MAX_POWER && SPT_PROB(30-powerlevel*2, seconds_per_tick)) - powerlevel++ + adjust_power_level(1) else if (powerlevel < SLIME_MEDIUM_POWER && SLIME_HUNGER_NUTRITION <= nutrition && SPT_PROB(25-powerlevel*5, seconds_per_tick)) - powerlevel++ + adjust_power_level(1) update_mob_action_buttons() + +///Given a number to adjust by, changes our powerlevel and updates our HUD to show the right number. +/mob/living/basic/slime/proc/adjust_power_level(to_adjust) + powerlevel = clamp(powerlevel + to_adjust, SLIME_MIN_POWER, SLIME_MAX_POWER) + var/atom/movable/screen/slime_power/power_hud = hud_used?.screen_objects[HUD_MOB_SLIME_POWER] + power_hud?.update_maptext() diff --git a/code/modules/mob/living/basic/slime/slime.dm b/code/modules/mob/living/basic/slime/slime.dm index 91a508b87cd8..b97873cbdcd4 100644 --- a/code/modules/mob/living/basic/slime/slime.dm +++ b/code/modules/mob/living/basic/slime/slime.dm @@ -10,6 +10,7 @@ pass_flags = PASSTABLE | PASSGRILLE gender = NEUTER faction = list(FACTION_SLIME, FACTION_NEUTRAL) + hud_type = /datum/hud/living/slime icon_living = "grey-baby" icon_dead = "grey-baby-dead" @@ -182,6 +183,8 @@ . = ..() nutrition = min(nutrition, SLIME_MAX_NUTRITION) +/mob/living/basic/slime/get_fullness(only_consumable) + return round((nutrition / SLIME_MAX_NUTRITION) * NUTRITION_LEVEL_FAT) /mob/living/basic/slime/update_name() ///Checks if the slime has a generic name, in the format of baby/adult slime (123) @@ -209,13 +212,6 @@ return ..() -/mob/living/basic/slime/get_status_tab_items() - . = ..() - if(!hunger_disabled) - . += "Nutrition: [nutrition]/[SLIME_MAX_NUTRITION]" - . += "Growth: [amount_grown]/[SLIME_EVOLUTION_THRESHOLD]" - . += "Power Level: [powerlevel]/[SLIME_MAX_POWER]" - /mob/living/basic/slime/mouse_drop_dragged(atom/target_atom, mob/user) if(isliving(target_atom) && target_atom != src && user == src) var/mob/living/food = target_atom @@ -305,7 +301,7 @@ do_sparks(5, TRUE, borg_target) var/stunprob = our_slime.powerlevel * SLIME_SHOCK_PERCENTAGE_PER_LEVEL + SLIME_BASE_SHOCK_PERCENTAGE if(prob(stunprob) && our_slime.powerlevel >= SLIME_EXTRA_SHOCK_COST) - our_slime.powerlevel = clamp(our_slime.powerlevel - SLIME_EXTRA_SHOCK_COST, SLIME_MIN_POWER, SLIME_MAX_POWER) + our_slime.adjust_power_level(-SLIME_EXTRA_SHOCK_COST) borg_target.apply_damage(our_slime.powerlevel * rand(6, 10), BRUTE, spread_damage = TRUE, wound_bonus = CANT_WOUND) borg_target.visible_message(span_danger("\The [our_slime] shocks [borg_target]!"), span_userdanger("\The [our_slime] shocks you!")) else @@ -327,7 +323,7 @@ carbon_target.Knockdown(power * 2 SECONDS) carbon_target.set_stutter_if_lower(power * 2 SECONDS) if (prob(stunprob) && our_slime.powerlevel >= SLIME_EXTRA_SHOCK_COST) - our_slime.powerlevel = clamp(our_slime.powerlevel - SLIME_EXTRA_SHOCK_COST, SLIME_MIN_POWER, SLIME_MAX_POWER) + adjust_power_level(-SLIME_EXTRA_SHOCK_COST) carbon_target.apply_damage(our_slime.powerlevel * rand(6, 10), BURN, spread_damage = TRUE, wound_bonus = CANT_WOUND) if(isslime(target)) diff --git a/code/modules/mob/living/basic/space_fauna/ant.dm b/code/modules/mob/living/basic/space_fauna/ant.dm index 7a0265989029..93cf767511fd 100644 --- a/code/modules/mob/living/basic/space_fauna/ant.dm +++ b/code/modules/mob/living/basic/space_fauna/ant.dm @@ -7,6 +7,7 @@ icon_dead = "ant_dead" speak_emote = list("buzzes", "chitters") gender = PLURAL // We are Ven-ant + randomize_gender = FALSE pass_flags = PASSTABLE mob_size = MOB_SIZE_SMALL mob_biotypes = MOB_ORGANIC|MOB_BUG diff --git a/code/modules/mob/living/basic/space_fauna/netherworld/creature.dm b/code/modules/mob/living/basic/space_fauna/netherworld/creature.dm index 916492c229af..87686491d3a0 100644 --- a/code/modules/mob/living/basic/space_fauna/netherworld/creature.dm +++ b/code/modules/mob/living/basic/space_fauna/netherworld/creature.dm @@ -47,7 +47,7 @@ /mob/living/basic/creature/proc/can_be_seen(turf/location) // Check for darkness if(location?.lighting_object) - if(location.get_lumcount() < 0.1) // No one can see us in the darkness, right? + if(location.check_lumcount_below(0.1)) // No one can see us in the darkness, right? return null // We aren't in darkness, loop for viewers. diff --git a/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm b/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm index 3e7c799ee96b..b51ccc39ef96 100644 --- a/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm +++ b/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm @@ -188,7 +188,7 @@ . += "Unused Stolen Essence: [essence_excess] SE" . += "Perfect Souls Stolen: [perfectsouls]" -/mob/living/basic/revenant/update_health_hud() +/mob/living/basic/revenant/update_health_hud(healthpercent) if(isnull(hud_used)) return diff --git a/code/modules/mob/living/basic/space_fauna/revenant/revenant_effects.dm b/code/modules/mob/living/basic/space_fauna/revenant/revenant_effects.dm index 6b5f63bf00f0..164a54625916 100644 --- a/code/modules/mob/living/basic/space_fauna/revenant/revenant_effects.dm +++ b/code/modules/mob/living/basic/space_fauna/revenant/revenant_effects.dm @@ -1,6 +1,7 @@ /// Parent type for all unique revenant status effects /datum/status_effect/revenant id = STATUS_EFFECT_ID_ABSTRACT + processing_speed = STATUS_EFFECT_PRIORITY alert_type = null /datum/status_effect/revenant/on_creation(mob/living/new_owner, duration) diff --git a/code/modules/mob/living/basic/stoats/stoat.bt.json b/code/modules/mob/living/basic/stoats/stoat.bt.json index 9c8d273c7433..f20e1ebd6be5 100644 --- a/code/modules/mob/living/basic/stoats/stoat.bt.json +++ b/code/modules/mob/living/basic/stoats/stoat.bt.json @@ -23,7 +23,7 @@ "decorator": "/datum/bt_node/decorator/bb_key_set", "vars": { "key": "BB_CURRENT_TARGET", - "observer_abort": "BT_ABORT_SELF" + "observer_abort": "BT_ABORT_BOTH" }, "child": { "type": "parallel", diff --git a/code/modules/mob/living/basic/stoats/stoat.dm b/code/modules/mob/living/basic/stoats/stoat.dm index 3f71e5730fe5..d4efbd4f81e1 100644 --- a/code/modules/mob/living/basic/stoats/stoat.dm +++ b/code/modules/mob/living/basic/stoats/stoat.dm @@ -21,6 +21,7 @@ verb_ask = "chips curiously" verb_exclaim = "chips loudly" verb_yell = "chips loudly" + speed = -0.25 faction = list(FACTION_NEUTRAL) ai_controller = /datum/ai_controller/basic_controller/stoat ///some commands we obey diff --git a/code/modules/mob/living/basic/stoats/stoat_ai.dm b/code/modules/mob/living/basic/stoats/stoat_ai.dm index 181baf573dc0..c3b8699ce6d6 100644 --- a/code/modules/mob/living/basic/stoats/stoat_ai.dm +++ b/code/modules/mob/living/basic/stoats/stoat_ai.dm @@ -5,6 +5,13 @@ BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, BB_GUILTY_CONSCIOUS_CHANCE = 5, BB_STEAL_CHANCE = 25, + BB_STEAL_TARGET_PRIORITIES = list( + /obj/item/disk/nuclear = 70, + /obj/item/card/id = 50, + /obj/item/gun = 30, + /obj/item/grenade = 30, + ), + BB_STEAL_FALLBACK_PRIORITY = 5, BB_BABIES_PARTNER_TYPES = list(/mob/living/basic/stoat), BB_BABIES_CHILD_TYPES = list(/mob/living/basic/stoat/kit), BB_FUCKS = TRUE @@ -17,6 +24,13 @@ BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, BB_GUILTY_CONSCIOUS_CHANCE = 5, BB_STEAL_CHANCE = 2, + BB_STEAL_TARGET_PRIORITIES = list( + /obj/item/disk/nuclear = 500, + /obj/item/card/id = 50, + /obj/item/gun = 30, + /obj/item/grenade = 30, + ), + BB_STEAL_FALLBACK_PRIORITY = 5, BB_FUCKS = FALSE ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/vermin/mothroach/mothroach.dm b/code/modules/mob/living/basic/vermin/mothroach/mothroach.dm index 2a64aa285a18..772ec8ba0b52 100644 --- a/code/modules/mob/living/basic/vermin/mothroach/mothroach.dm +++ b/code/modules/mob/living/basic/vermin/mothroach/mothroach.dm @@ -40,17 +40,6 @@ /datum/pet_command/perform_trick_sequence, ) -/datum/emote/mothroach - abstract_type = /datum/emote/mothroach - mob_type_allowed_typecache = /mob/living/basic/mothroach - mob_type_blacklist_typecache = list() - -/datum/emote/mothroach/squeaks - key = "squeaks" - key_third_person = "squeaks" - message = "squeaks!" - emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE - /mob/living/basic/mothroach/Initialize(mapload) . = ..() var/static/list/food_types = list(/obj/item/clothing) @@ -62,7 +51,7 @@ AddElement(/datum/element/can_be_held) AddElement(/datum/element/swabable, CELL_LINE_TABLE_MOTHROACH, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) add_verb(src, /mob/living/proc/toggle_resting) - ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) + add_traits(list(TRAIT_MOTH_EMOTES_ALLOWED, TRAIT_VENTCRAWLER_ALWAYS), INNATE_TRAIT) /mob/living/basic/mothroach/toggle_resting() . = ..() diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index 146635425ae1..528e0419fffa 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -37,10 +37,11 @@ // Handled here instead of in the saline reagent datum, because this way the modification order is consistent. // E.g. if you have an effect that modifies blood volume over the dilution cap, then saline should do nothing. var/datum/reagent/medicine/salglu_solution/saline = reagents?.has_reagent(/datum/reagent/medicine/salglu_solution) - if (saline && amount < saline.dilution_cap) + if (saline && amount < SALINE_DILUTION_CAP) var/datum/blood_type/blood_type = get_bloodtype() + var/datum/status_effect/stacking/saline_glucose_dilution/dilution = has_status_effect(/datum/status_effect/stacking/saline_glucose_dilution) if (blood_type?.restoration_chem == saline.required_restoration_chem) - amount = min(amount + saline.volume * saline.dilution_per_unit, BLOOD_VOLUME_NORMAL) + amount = min(amount + saline.volume * dilution.get_blood_multiplier(), BLOOD_VOLUME_NORMAL) return amount @@ -438,9 +439,7 @@ if (!blood_type || !can_bleed()) return - var/blood_data = list() - blood_data["blood_type"] = blood_type - blood_data["blood_DNA"] = blood_type.dna_string + var/list/blood_data = blood_type.get_default_blood_data() if (reagents) var/list/temp_chem = list() @@ -508,7 +507,7 @@ blood_data["gender"] = gender blood_data["real_name"] = real_name if (dna) - blood_data["blood_DNA"] = dna.unique_enzymes + blood_data[BLOOD_DATA_DNA] = dna.unique_enzymes blood_data["features"] = dna.features blood_data["quirks"] = list() @@ -532,20 +531,20 @@ if (!(mob_biotypes & MOB_ORGANIC)) if (mob_biotypes & MOB_ROBOTIC) - return get_blood_type(BLOOD_TYPE_OIL) + return get_blood_type(/datum/blood_type/oil) return if (mob_biotypes & MOB_SLIME) - return get_blood_type(BLOOD_TYPE_TOX) - else if (mob_biotypes & MOB_PLANT) - return get_blood_type(BLOOD_TYPE_H2O) - else if (mob_biotypes & MOB_REPTILE) - return get_blood_type(BLOOD_TYPE_LIZARD) - else if (mob_biotypes & MOB_HUMANOID) + return get_blood_type(/datum/blood_type/slime) + if (mob_biotypes & MOB_PLANT) + return get_blood_type(/datum/blood_type/water) + if (mob_biotypes & MOB_REPTILE) + return get_blood_type(/datum/blood_type/lizard) + if (mob_biotypes & MOB_HUMANOID) // O+ as to avoid mobs bleeding all human bloodtypes under the sun, and its statistically the most common one - return get_blood_type(BLOOD_TYPE_O_PLUS) + return get_blood_type(/datum/blood_type/human/o_plus) - return get_blood_type(BLOOD_TYPE_ANIMAL) + return get_blood_type(/datum/blood_type/animal) /// Returns the reagent type this mob has for blood /mob/living/proc/get_blood_reagent() @@ -578,14 +577,18 @@ /// Returns the blood_type datum that corresponds to the string id key in GLOB.blood_types /proc/get_blood_type(id) RETURN_TYPE(/datum/blood_type) + if(ispath(id, /datum/blood_type)) + var/datum/blood_type/bloodtype_type = id + return GLOB.blood_types[bloodtype_type::name] + return GLOB.blood_types[id] /// Returns the hex color string, or a color matrix, of a given blood_type datum given an assoc list of blood_DNA e.g. ("Unknown Blood Type", "*X") /proc/get_color_from_blood_list(list/blood_DNA) var/datum/blood_type/blood_type if(!length(blood_DNA)) - return get_blood_type(BLOOD_TYPE_O_PLUS).get_color() - else if (length(blood_DNA) == 1) // Microop for when we don't need to do color mixing + return get_blood_type(/datum/blood_type/human/o_plus).get_color() + if(length(blood_DNA) == 1) // Microop for when we don't need to do color mixing blood_type = blood_DNA[blood_DNA[length(blood_DNA)]] return blood_type.get_color() @@ -605,7 +608,7 @@ valid_colors += 1 if (valid_colors == 0) - return get_blood_type(BLOOD_TYPE_O_PLUS).get_color() + return get_blood_type(/datum/blood_type/human/o_plus).get_color() r_color /= valid_colors g_color /= valid_colors diff --git a/code/modules/mob/living/blood_types.dm b/code/modules/mob/living/blood_types.dm index 6ec859b5d053..f064c1cfa74d 100644 --- a/code/modules/mob/living/blood_types.dm +++ b/code/modules/mob/living/blood_types.dm @@ -22,10 +22,9 @@ /datum/blood_type/New() . = ..() - id = name compatible_types |= type_key() - if (!desc) - desc = reagent_type::description + id ||= name + desc ||= reagent_type::description /datum/blood_type/Destroy(force) if(!force) @@ -52,6 +51,14 @@ return null return name +/// Default stuff included in this blood type's blood data +/// Return a list of key/value pairs for blood data, or null if no additional default data +/datum/blood_type/proc/get_default_blood_data() + return list( + BLOOD_DATA_TYPE = src, + BLOOD_DATA_DNA = dna_string, + ) + /// Returns blood color or color matrix /// Useful when you want to have a blood color with values out of normal hex bounds for that acidic look /// set dynamic to TRUE to redo the matrix each time (e.g. for clown blood dynamically shifting each time) @@ -166,22 +173,30 @@ abstract_type = /datum/blood_type/human /datum/blood_type/human/a_minus - name = BLOOD_TYPE_A_MINUS - compatible_types = list(/datum/blood_type/human/a_minus, /datum/blood_type/human/o_minus) + name = "A-" + compatible_types = list( + /datum/blood_type/human/a_minus, + /datum/blood_type/human/o_minus, + ) /datum/blood_type/human/a_plus - name = BLOOD_TYPE_A_PLUS - compatible_types = list(/datum/blood_type/human/a_minus, /datum/blood_type/human/a_plus, /datum/blood_type/human/o_minus, /datum/blood_type/human/o_plus) + name = "A+" + compatible_types = list( + /datum/blood_type/human/a_minus, + /datum/blood_type/human/a_plus, + /datum/blood_type/human/o_minus, + /datum/blood_type/human/o_plus, + ) /datum/blood_type/human/b_minus - name = BLOOD_TYPE_B_MINUS + name = "B-" compatible_types = list( /datum/blood_type/human/b_minus, /datum/blood_type/human/o_minus, ) /datum/blood_type/human/b_plus - name = BLOOD_TYPE_B_PLUS + name = "B+" compatible_types = list( /datum/blood_type/human/b_minus, /datum/blood_type/human/b_plus, @@ -190,7 +205,7 @@ ) /datum/blood_type/human/ab_minus - name = BLOOD_TYPE_AB_MINUS + name = "AB-" compatible_types = list( /datum/blood_type/human/a_minus, /datum/blood_type/human/b_minus, @@ -199,7 +214,7 @@ ) /datum/blood_type/human/ab_plus - name = BLOOD_TYPE_AB_PLUS + name = "AB+" compatible_types = list( /datum/blood_type/human/a_minus, /datum/blood_type/human/a_plus, @@ -212,51 +227,56 @@ ) /datum/blood_type/human/o_minus - name = BLOOD_TYPE_O_MINUS + name = "O-" compatible_types = list( /datum/blood_type/human/o_minus, ) /datum/blood_type/human/o_plus - name = BLOOD_TYPE_O_PLUS + name = "O+" compatible_types = list( /datum/blood_type/human/o_minus, /datum/blood_type/human/o_plus, ) -/datum/blood_type/human/universal - name = BLOOD_TYPE_UNIVERSAL +/// Universal accepts all blood types, but not all blood types accept universal +/datum/blood_type/universal + name = "U" + desc = /datum/blood_type/human::desc -/datum/blood_type/human/universal/New() +/datum/blood_type/universal/New() . = ..() compatible_types = subtypesof(/datum/blood_type) -/datum/blood_type/human/universal/vampire - name = BLOOD_TYPE_VAMPIRE +/datum/blood_type/universal/vampire + name = "V" dna_string = "Hemovore DNA" /datum/blood_type/animal - name = BLOOD_TYPE_ANIMAL - desc = "Blood cells suspended in plasma, the most abundant of which being the hemoglobin-containing red blood cells." + name = "Y-" + desc = /datum/blood_type/human::desc dna_string = "Animal DNA" /datum/blood_type/lizard - name = BLOOD_TYPE_LIZARD + name = "L" desc = "Green sulfhemoglobin subtype-based blood, which while less effective at transporting oxygen, \ is capable of withstanding much higher temperatures without breaking down or clotting." dna_string = "Lizard DNA" color = BLOOD_COLOR_LIZARD /datum/blood_type/ethereal - name = BLOOD_TYPE_ETHEREAL + name = "LE" dna_string = "Ethereal DNA" color = /datum/reagent/consumable/liquidelectricity::color reagent_type = /datum/reagent/consumable/liquidelectricity +/datum/blood_type/ethereal/get_default_blood_data() + . = ..() + // Unenriched by default to prevent Ethereals from going crazy with syringe guns + .[BLOOD_DATA_ENRICHED_ETHEREAL] = FALSE + /datum/blood_type/ethereal/get_emissive_alpha(atom/source, is_worn = FALSE) - if (is_worn) - return 102 - return 125 + return is_worn ? 102 : 125 /datum/blood_type/ethereal/set_up_blood(obj/effect/decal/cleanable/blood/blood, new_splat = FALSE) . = ..() @@ -266,7 +286,7 @@ blood.can_dry = FALSE /datum/blood_type/oil - name = BLOOD_TYPE_OIL + name = "Oil" dna_string = "Oil" color = BLOOD_COLOR_OIL reagent_type = /datum/reagent/fuel/oil @@ -295,11 +315,11 @@ blood.desc = /obj/effect/decal/cleanable/blood/oil::desc /datum/blood_type/meat // why does this exist - name = BLOOD_TYPE_MEAT + name = "MT-" dna_string = "Meaty DNA" /datum/blood_type/xeno - name = BLOOD_TYPE_XENO + name = "X*" desc = "An incredibly potent mineral acid, somehow capable of carrying oxygen." dna_string = "Alien DNA" color = BLOOD_COLOR_XENO @@ -321,7 +341,7 @@ /// April fool's blood for clowns /datum/blood_type/clown - name = BLOOD_TYPE_CLOWN + name = "C" dna_string = "Clown DNA" reagent_type = /datum/reagent/colorful_reagent is_species_universal = TRUE @@ -340,7 +360,7 @@ /// Slimeperson blood, aka 'toxin' blood type /datum/blood_type/slime - name = BLOOD_TYPE_TOX + name = "TOX" dna_string = "Slime DNA" color = /datum/reagent/toxin/slimejelly::color reagent_type = /datum/reagent/toxin/slimejelly @@ -355,7 +375,7 @@ /// Podpeople blood /datum/blood_type/water - name = BLOOD_TYPE_H2O + name = "H2O" dna_string = "Plant DNA" color = /datum/reagent/water::color reagent_type = /datum/reagent/water @@ -368,7 +388,7 @@ /// Snail blood /datum/blood_type/snail - name = BLOOD_TYPE_SNAIL + name = "S" dna_string = "Snail DNA" reagent_type = /datum/reagent/lube restoration_chem = /datum/reagent/silicon @@ -386,13 +406,13 @@ abstract_type = /datum/blood_type/random_chemical /datum/blood_type/random_chemical/New(datum/reagent/reagent) + abstract_type = null + id = reagent name = initial(reagent.name) desc = initial(reagent.description) - . = ..() - id = type_key() color = initial(reagent.color) reagent_type = reagent - abstract_type = null + return ..() /datum/blood_type/random_chemical/type_key() return reagent_type diff --git a/code/modules/mob/living/brain/brain.dm b/code/modules/mob/living/brain/brain.dm index 615410fbb629..012717567a90 100644 --- a/code/modules/mob/living/brain/brain.dm +++ b/code/modules/mob/living/brain/brain.dm @@ -17,6 +17,7 @@ if(!container?.mecha && (!container || container.immobilize)) //Unless inside a mecha, brains are rather helpless. add_traits(list(TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED), BRAIN_UNAIDED) ADD_TRAIT(src, TRAIT_SILICON_EMOTES_ALLOWED, INNATE_TRAIT) + ADD_TRAIT(src, TRAIT_NEVER_CONSIDERED_ALIVE, INNATE_TRAIT) /mob/living/brain/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents) var/obj/item/organ/brain/brain_loc = loc diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index 134677e7807e..f283193dee64 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -493,14 +493,6 @@ else set_organ_damage(BRAIN_DAMAGE_DEATH) -/obj/item/organ/brain/zombie - name = "zombie brain" - desc = "This glob of green mass can't have much intelligence inside it." - icon_state = "brain-x" - variant_traits_added = list(TRAIT_PRIMITIVE) - variant_traits_removed = list(TRAIT_LITERATE, TRAIT_ADVANCEDTOOLUSER) - shade_color = "green" - /obj/item/organ/brain/alien name = "alien brain" desc = "We barely understand the brains of terrestial animals. Who knows what we may find in the brain of such an advanced species?" diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 3de9f365c95e..bcc423471ffb 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -92,7 +92,7 @@ apply_damage(HEAT_DAMAGE_LEVEL_2 * seconds_per_tick, BURN) /mob/living/carbon/alien/get_bloodtype() - return get_blood_type(BLOOD_TYPE_XENO) + return get_blood_type(/datum/blood_type/xeno) /*---------------------------------------- Proc: AddInfectionImages() diff --git a/code/modules/mob/living/carbon/alien/emote.dm b/code/modules/mob/living/carbon/alien/emote.dm index 0bd641ff3635..24e059570104 100644 --- a/code/modules/mob/living/carbon/alien/emote.dm +++ b/code/modules/mob/living/carbon/alien/emote.dm @@ -14,7 +14,6 @@ message_larva = "softly roars." emote_type = EMOTE_AUDIBLE | EMOTE_VISIBLE vary = TRUE - -/datum/emote/living/alien/roar/get_sound(mob/living/user) - if(isalienadult(user)) - return 'sound/mobs/non-humanoids/hiss/hiss5.ogg' + sounds_by_mobtype = list( + /mob/living/carbon/alien/adult = 'sound/mobs/non-humanoids/hiss/hiss5.ogg', + ) diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index d1256f7fb635..1013059714f1 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -35,7 +35,6 @@ ) var/amount_grown = 0 - var/max_grown = 100 var/time_of_birth @@ -46,15 +45,8 @@ /datum/action/cooldown/alien/larva_evolve, ) grant_actions_by_list(innate_actions) - return ..() -//This needs to be fixed -// This comment is 12 years old I hope it's fixed by now -/mob/living/carbon/alien/larva/get_status_tab_items() - . = ..() - . += "Progress: [amount_grown]/[max_grown]" - /mob/living/carbon/alien/larva/Login() . = ..() if(!. || !client) @@ -63,7 +55,7 @@ /mob/living/carbon/alien/larva/adjustPlasma(amount) if(stat != DEAD && amount > 0) - amount_grown = min(amount_grown + 1, max_grown) + amount_grown = min(amount_grown + 1, XENOMORPH_MAX_GROWTH) ..(amount) //can't equip anything diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm index 8913a01ace58..e598d0c4e621 100644 --- a/code/modules/mob/living/carbon/alien/larva/life.dm +++ b/code/modules/mob/living/carbon/alien/larva/life.dm @@ -3,10 +3,10 @@ /mob/living/carbon/alien/larva/Life(seconds_per_tick = SSMOBS_DT) if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return - if(!..() || HAS_TRAIT(src, TRAIT_STASIS) || (amount_grown >= max_grown)) + if(!..() || HAS_TRAIT(src, TRAIT_STASIS) || (amount_grown >= XENOMORPH_MAX_GROWTH)) return // We're dead, in stasis, or already grown. // GROW! - amount_grown = min(amount_grown + (0.5 * seconds_per_tick), max_grown) + amount_grown = min(amount_grown + (0.5 * seconds_per_tick), XENOMORPH_MAX_GROWTH) update_icons() /mob/living/carbon/alien/larva/on_knockedout_trait_loss(datum/source) diff --git a/code/modules/mob/living/carbon/alien/larva/powers.dm b/code/modules/mob/living/carbon/alien/larva/powers.dm index d330983f20eb..de80de4d5439 100644 --- a/code/modules/mob/living/carbon/alien/larva/powers.dm +++ b/code/modules/mob/living/carbon/alien/larva/powers.dm @@ -29,8 +29,21 @@ name = "Evolve" desc = "Evolve into a higher alien caste." button_icon_state = "alien_evolve_larva" + transparent_when_unavailable = FALSE plasma_cost = 0 +/datum/action/cooldown/alien/larva_evolve/create_button(mob/viewer) + var/atom/movable/screen/movable/action_button/button = ..() + button.maptext_x = 1 + return button + +/datum/action/cooldown/alien/larva_evolve/update_button_status(atom/movable/screen/movable/action_button/button, force = FALSE) + . = ..() + var/mob/living/carbon/alien/larva/larva_owner = owner + var/percentage_shown = "[round((larva_owner.amount_grown / XENOMORPH_MAX_GROWTH) * 100, 0.1)]" + button.maptext_x = (length(percentage_shown) >= 3) ? 0 : 1 + button.maptext = MAPTEXT_TINY_UNICODE("[percentage_shown]%") + /datum/action/cooldown/alien/larva_evolve/IsAvailable(feedback = FALSE) . = ..() if(!.) @@ -41,7 +54,7 @@ var/mob/living/carbon/alien/larva/larva = owner if(larva.handcuffed || larva.legcuffed) // Cuffing larvas ? Eh ? return FALSE - if(larva.amount_grown < larva.max_grown) + if(larva.amount_grown < XENOMORPH_MAX_GROWTH) return FALSE if(larva.movement_type & VENTCRAWLING) return FALSE diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index b732bf702088..a1458c8ab371 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -798,7 +798,7 @@ return ..() /mob/living/carbon/can_be_revived() - if(HAS_TRAIT(src, TRAIT_HUSK)) + if(HAS_TRAIT_NOT_FROM(src, TRAIT_HUSK, /datum/status_effect/zombie::id)) return FALSE if(!HAS_TRAIT(src, TRAIT_BRAINLESS_CARBON) && !get_organ_by_type(/obj/item/organ/brain)) return FALSE @@ -901,7 +901,7 @@ hand_bodyparts[lost_hand.held_index] = null ///Proc to hook behavior on bodypart additions. Do not directly call. You're looking for [/obj/item/bodypart/proc/try_attach_limb()]. -/mob/living/carbon/proc/add_bodypart(obj/item/bodypart/new_bodypart) +/mob/living/carbon/proc/add_bodypart(obj/item/bodypart/new_bodypart, special, lazy) SHOULD_NOT_OVERRIDE(TRUE) new_bodypart.on_adding(src) @@ -912,7 +912,7 @@ // Apply a bodypart effect or merge with an existing one, for stuff like plant limbs regenning in light for(var/datum/status_effect/grouped/bodypart_effect/effect_type as anything in new_bodypart.bodypart_effects) - apply_status_effect(effect_type, type, new_bodypart) + apply_status_effect(effect_type, type, new_bodypart, special, lazy) // Tell the organs in the bodyparts that we are in a mob again for(var/obj/item/organ/organ in new_bodypart) @@ -1308,7 +1308,7 @@ if(isnull(dna)) return - if(istext(new_blood_type)) + if(istext(new_blood_type) || ispath(new_blood_type, /datum/blood_type)) new_blood_type = get_blood_type(new_blood_type) if(!istype(new_blood_type)) return diff --git a/code/modules/mob/living/carbon/carbon_update_icons.dm b/code/modules/mob/living/carbon/carbon_update_icons.dm index 4860ae2af9f5..2d5f1b86b6ef 100644 --- a/code/modules/mob/living/carbon/carbon_update_icons.dm +++ b/code/modules/mob/living/carbon/carbon_update_icons.dm @@ -485,7 +485,7 @@ . += limb_gender . += limb_id . += husk_type - . += "husk" + . += is_husked == HUSKED_ZOMBIE ? "zombie_husk" : "burn_husk" . += body_zone if(is_invisible) . += "invisible" diff --git a/code/modules/mob/living/carbon/emote.dm b/code/modules/mob/living/carbon/emote.dm index ef87c35a0d62..66e26489d623 100644 --- a/code/modules/mob/living/carbon/emote.dm +++ b/code/modules/mob/living/carbon/emote.dm @@ -15,24 +15,27 @@ emote_type = EMOTE_AUDIBLE | EMOTE_VISIBLE vary = TRUE affected_by_pitch = FALSE + sounds_by_mobtype = list( + /mob/living/carbon = list( + 'sound/mobs/humanoids/human/clap/clap1.ogg', + 'sound/mobs/humanoids/human/clap/clap2.ogg', + 'sound/mobs/humanoids/human/clap/clap3.ogg', + 'sound/mobs/humanoids/human/clap/clap4.ogg', + ), + ) -/datum/emote/living/carbon/clap/get_sound(mob/living/user) +/datum/emote/living/carbon/clap/should_play_sound(mob/living/user, intentional = FALSE) if(!user.get_bodypart(BODY_ZONE_L_ARM) || !user.get_bodypart(BODY_ZONE_R_ARM)) - return - return pick( - 'sound/mobs/humanoids/human/clap/clap1.ogg', - 'sound/mobs/humanoids/human/clap/clap2.ogg', - 'sound/mobs/humanoids/human/clap/clap3.ogg', - 'sound/mobs/humanoids/human/clap/clap4.ogg', - ) + return FALSE + return ..() /datum/emote/living/carbon/crack key = "crack" key_third_person = "cracks" message = "cracks their knuckles." - sound = 'sound/mobs/humanoids/human/knuckle_crack/knuckles.ogg' can_use_flags = EMOTE_CANUSE_REQUIRE_HANDS cooldown = 6 SECONDS + sound = 'sound/mobs/humanoids/human/knuckle_crack/knuckles.ogg' /datum/emote/living/carbon/crack/can_run_emote(mob/living/carbon/user, status_check = TRUE , intentional, params) if(!iscarbon(user) || user.usable_hands < 2) @@ -47,6 +50,19 @@ emote_type = EMOTE_AUDIBLE | EMOTE_VISIBLE vary = TRUE can_use_flags = EMOTE_CANUSE_SOFTCRIT + sounds_by_mobtype = list( + /mob/living/carbon/human = list( + FEMALE = list( + 'sound/mobs/humanoids/human/cry/female_cry1.ogg', + 'sound/mobs/humanoids/human/cry/female_cry2.ogg', + ), + MALE = list( + 'sound/mobs/humanoids/human/cry/male_cry1.ogg', + 'sound/mobs/humanoids/human/cry/male_cry2.ogg', + 'sound/mobs/humanoids/human/cry/male_cry3.ogg', + ), + ), + ) /datum/emote/living/carbon/cry/run_emote(mob/user, params, type_override, intentional) . = ..() @@ -55,11 +71,6 @@ var/mob/living/carbon/human/human_user = user QDEL_IN(human_user.give_emote_overlay(/datum/bodypart_overlay/simple/emote/cry), 12.8 SECONDS) -/datum/emote/living/carbon/cry/get_sound(mob/living/carbon/human/user) - if(!istype(user)) - return - return user.dna.species.get_cry_sound(user) - /datum/emote/living/carbon/circle key = "circle" key_third_person = "circles" @@ -74,45 +85,14 @@ if(user.put_in_hands(N)) to_chat(user, span_notice("You make a circle with your hand.")) -/datum/emote/living/carbon/meow - key = "meow" - key_third_person = "meows" - vary = TRUE - sound = SFX_CAT_MEOW - message = "meows!" - message_mime = "meows silently." - emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE - -/datum/emote/living/carbon/meow/can_run_emote(mob/living/carbon/user, status_check = TRUE , intentional, params) - if(!iscarbon(user) || (!istype(user.get_organ_slot(ORGAN_SLOT_TONGUE), /obj/item/organ/tongue/cat))) - return FALSE - return ..() - -/datum/emote/living/carbon/purr - key = "purr" - key_third_person = "purrs" +/datum/emote/living/carbon/whistle + key = "whistle" + key_third_person = "whistles" + message = "whistles." + message_mime = "whistles silently!" vary = TRUE - sound = SFX_CAT_PURR - message = "purrs." - emote_type = EMOTE_AUDIBLE - -/datum/emote/living/carbon/purr/can_run_emote(mob/living/carbon/user, status_check = TRUE , intentional, params) - if(!iscarbon(user) || (!istype(user.get_organ_slot(ORGAN_SLOT_TONGUE), /obj/item/organ/tongue/cat)) || HAS_MIND_TRAIT(user, TRAIT_MIMING)) - return FALSE - return ..() - -/datum/emote/living/carbon/mchitter - key = "chitter" - key_third_person = "chitters" - message = "chitters!" - message_mime = "chitters silently?" - sound = 'sound/mobs/humanoids/moth/moth_chitter.ogg' emote_type = EMOTE_AUDIBLE | EMOTE_VISIBLE - -/datum/emote/living/carbon/mchitter/can_run_emote(mob/living/carbon/user, status_check, intentional, params) - if(!ismoth(user)) - return FALSE - return ..() + sound = 'sound/mobs/humanoids/human/whistle/whistle1.ogg' /datum/emote/living/carbon/moan key = "moan" @@ -121,19 +101,6 @@ message_mime = "appears to moan!" emote_type = EMOTE_AUDIBLE | EMOTE_VISIBLE -/datum/emote/living/carbon/msqueak - key = "squeak" - key_third_person = "squeaks" - message = "squeaks!" - message_mime = "squeaks silently?" - sound = 'sound/mobs/humanoids/moth/moth_squeak.ogg' - emote_type = EMOTE_AUDIBLE | EMOTE_VISIBLE - -/datum/emote/living/carbon/msqueak/can_run_emote(mob/living/carbon/user, status_check, intentional, params) - if(!ismoth(user)) - return FALSE - return ..() - /datum/emote/living/carbon/noogie key = "noogie" key_third_person = "noogies" @@ -221,14 +188,12 @@ emote_type = EMOTE_AUDIBLE | EMOTE_VISIBLE can_use_flags = EMOTE_CANUSE_REQUIRE_HANDS affected_by_pitch = FALSE - -/datum/emote/living/carbon/snap/get_sound(mob/living/user) - if(ishuman(user)) - return pick( + sounds_by_mobtype = list( + /mob/living/carbon/human = list( 'sound/mobs/humanoids/human/snap/fingersnap1.ogg', 'sound/mobs/humanoids/human/snap/fingersnap2.ogg', - ) - return null + ), + ) /datum/emote/living/carbon/shoesteal key = "shoesteal" @@ -261,11 +226,7 @@ message = "hisses!" emote_type = EMOTE_AUDIBLE | EMOTE_VISIBLE vary = TRUE - -/datum/emote/living/carbon/hiss/get_sound(mob/living/carbon/user) - . = ..() - if(!istype(user)) - return - if(isalien(user)) - return SFX_HISS - return user.dna.species.get_hiss_sound() + sounds_by_mobtype = list( + /mob/living/carbon/human = 'sound/mobs/humanoids/human/hiss/human_hiss.ogg', + /mob/living/carbon/alien = SFX_HISS, + ) diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm index eee491fcc70b..1270028e53d6 100644 --- a/code/modules/mob/living/carbon/examine.dm +++ b/code/modules/mob/living/carbon/examine.dm @@ -1,6 +1,5 @@ /// Adds a newline to the examine list if the above entry is not empty and it is not the first element in the list #define ADD_NEWLINE_IF_NECESSARY(list) if(length(list) > 0 && list[length(list)]) { list += "" } -#define CARBON_EXAMINE_EMBEDDING_MAX_DIST 4 /mob/living/carbon/human/get_examine_icon(mob/user) return null @@ -42,7 +41,7 @@ . += generate_death_examine_text() //Status effects - var/list/status_examines = get_status_effect_examinations() + var/list/status_examines = get_status_effect_examinations(user) if (length(status_examines)) . += status_examines @@ -292,7 +291,10 @@ . += span_notice("[t_He] [t_is] just absolutely fucked up, you can look again to take a closer look...") if(HAS_TRAIT(src, TRAIT_HUSK)) - . += span_warning("This body has been reduced to a grotesque husk.") + if(HAS_TRAIT_FROM(src, TRAIT_HUSK, /datum/status_effect/zombie::id)) + . += span_warning("[t_His] skin has rotted into a sickly green color.") // future todo: lizards don't have skin, they have scales + else + . += span_warning("This body has been reduced to a grotesque husk.") if(HAS_MIND_TRAIT(user, TRAIT_MORBID)) if(HAS_TRAIT(src, TRAIT_DISSECTED)) . += span_notice("[t_He] appear[p_s()] to have been dissected. Useless for examination... for now.") @@ -336,11 +338,11 @@ /** * Shows any and all examine text related to any status effects the user has. */ -/mob/living/proc/get_status_effect_examinations() +/mob/living/proc/get_status_effect_examinations(mob/examiner) var/list/examine_list = list() for(var/datum/status_effect/effect as anything in status_effects) - var/effect_text = effect.get_examine_text() + var/effect_text = effect.get_examine_text(examiner) if(!effect_text) continue @@ -645,4 +647,3 @@ return span_notice("[p_They()] appear[p_s()] to be [age_text].") #undef ADD_NEWLINE_IF_NECESSARY -#undef CARBON_EXAMINE_EMBEDDING_MAX_DIST diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index 4be111ae6642..d0d5015272b4 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -47,7 +47,7 @@ GLOBAL_LIST_EMPTY(features_by_species) var/digitigrade_customization = DIGITIGRADE_NEVER ///If your race uses a non standard bloodtype (A+, O-, AB-, etc). For example, lizards have L type blood. ///Reagent that your species bleeds, and what chemical can be used to recover lost blood depend on this - var/exotic_bloodtype + var/datum/blood_type/exotic_bloodtype ///The rate at which blood is passively drained by having the blood deficiency quirk. Some races such as slimepeople can regen their blood at different rates so this is to account for that var/blood_deficiency_drain_rate = BLOOD_REGEN_FACTOR + BLOOD_DEFICIENCY_MODIFIER // slightly above the regen rate so it slowly drains instead of regenerates. ///What the species drops when gibbed by a gibber machine. @@ -112,8 +112,6 @@ GLOBAL_LIST_EMPTY(features_by_species) var/fixed_mut_color = "" ///Special mutation that can be found in the genepool exclusively in this species. Dont leave empty or changing species will be a headache var/inert_mutation = /datum/mutation/dwarfism - ///Used to set the mob's death_sound upon species change - var/death_sound ///Special sound for grabbing var/grab_sound /// A path to an outfit that is important for species life e.g. plasmaman outfit @@ -374,7 +372,7 @@ GLOBAL_LIST_EMPTY(features_by_species) human_who_gained_species.living_flags |= STOP_OVERLAY_UPDATE_BODY_PARTS //Don't call update_body_parts() for every single bodypart overlay added. // Drop the items the new species can't wear - human_who_gained_species.mob_biotypes = inherent_biotypes + human_who_gained_species.mob_biotypes |= inherent_biotypes human_who_gained_species.butcher_results = knife_butcher_results?.Copy() //update body zones to match what they are supposed to have @@ -449,6 +447,7 @@ GLOBAL_LIST_EMPTY(features_by_species) human.living_flags |= STOP_OVERLAY_UPDATE_BODY_PARTS //Don't call update_body_parts() for every single bodypart overlay removed. human.butcher_results = null + human.mob_biotypes &= ~inherent_biotypes for(var/trait in inherent_traits) REMOVE_TRAIT(human, trait, SPECIES_TRAIT) @@ -1055,7 +1054,7 @@ GLOBAL_LIST_EMPTY(features_by_species) return // Only stabilise core temp when alive and not in statis - if(humi.stat != DEAD && !HAS_TRAIT(humi, TRAIT_STASIS)) + if(humi.stat != DEAD && !HAS_TRAIT(humi, TRAIT_STASIS) && !HAS_TRAIT(humi, TRAIT_COLD_BLOODED)) body_temperature_core(humi, seconds_per_tick) // These do run in statis @@ -1074,7 +1073,7 @@ GLOBAL_LIST_EMPTY(features_by_species) * * humi (required) The mob we will stabilize */ /datum/species/proc/body_temperature_core(mob/living/carbon/human/humi, seconds_per_tick) - var/natural_change = get_temp_change_amount(humi.get_body_temp_normal() - humi.coretemperature, 0.06 * seconds_per_tick) + var/natural_change = get_temp_change_amount(humi.get_body_temp_normal() - humi.coretemperature, BODYTEMP_CORE_CHANGE_RATE * seconds_per_tick) humi.adjust_coretemperature(humi.metabolism_efficiency * natural_change) /** @@ -1091,8 +1090,8 @@ GLOBAL_LIST_EMPTY(features_by_species) // change the core based on the skin temp var/skin_core_diff = humi.bodytemperature - humi.coretemperature - // change rate of 0.04 per second to be slightly below area to skin change rate and still have a solid curve - var/skin_core_change = get_temp_change_amount(skin_core_diff, 0.04 * seconds_per_tick) + // change rate of slightly below area to skin change rate and still having a solid curve + var/skin_core_change = get_temp_change_amount(skin_core_diff, BODYTEMP_SKIN_CORE_CHANGE_RATE * seconds_per_tick) humi.adjust_coretemperature(skin_core_change) @@ -1110,8 +1109,8 @@ GLOBAL_LIST_EMPTY(features_by_species) // Changes to the skin temperature based on the area var/area_skin_diff = area_temp - humi.bodytemperature if(!humi.on_fire || area_skin_diff > 0) - // change rate of 0.05 as area temp has large impact on the surface - var/area_skin_change = get_temp_change_amount(area_skin_diff, 0.05 * seconds_per_tick) + // change rate near full speed as area temp has large impact on the surface + var/area_skin_change = get_temp_change_amount(area_skin_diff, BODYTEMP_AREA_SKIN_CHANGE_RATE * seconds_per_tick) // We need to apply the thermal protection of the clothing when applying area to surface change // If the core bodytemp goes over the normal body temp you are overheating and becom sweaty @@ -1129,8 +1128,8 @@ GLOBAL_LIST_EMPTY(features_by_species) if(!humi.on_fire) // Get the changes to the skin from the core temp var/core_skin_diff = humi.coretemperature - humi.bodytemperature - // change rate of 0.045 to reflect temp back to the skin at the slight higher rate then core to skin - var/core_skin_change = (1 + thermal_protection) * get_temp_change_amount(core_skin_diff, 0.045 * seconds_per_tick) + // change rate to reflect temp back to the skin at a slightly higher rate than skin to core + var/core_skin_change = (1 + thermal_protection) * get_temp_change_amount(core_skin_diff, BODYTEMP_CORE_SKIN_CHANGE_RATE * seconds_per_tick) // We do not want to over shoot after using protection if(core_skin_diff > 0) @@ -1366,13 +1365,13 @@ GLOBAL_LIST_EMPTY(features_by_species) // Stun // //////////// -/datum/species/proc/spec_stun(mob/living/carbon/human/H,amount) +/datum/species/proc/spec_stun(mob/living/carbon/human/H, amount) if((H.movement_type & FLYING) && !H.buckled) var/obj/item/organ/wings/functional/wings = H.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS) if(wings) wings.toggle_flight(H) wings.fly_slip(H) - . = stunmod * H.physiology.stun_mod * amount + . = min(stunmod * H.physiology.stun_mod * amount, LAZYMIN(H.physiology.max_stun_len, INFINITY)) /datum/species/proc/negates_gravity(mob/living/carbon/human/H) if(H.movement_type & FLYING) @@ -1422,42 +1421,6 @@ GLOBAL_LIST_EMPTY(features_by_species) /datum/species/proc/prepare_human_for_preview(mob/living/carbon/human/human) return -/// Returns the species' scream sound. -/datum/species/proc/get_scream_sound(mob/living/carbon/human/human) - return - -/// Returns the species' cry sound. -/datum/species/proc/get_cry_sound(mob/living/carbon/human/human) - return - -/// Returns the species' sigh sound. -/datum/species/proc/get_sigh_sound(mob/living/carbon/human/human) - return - -/// Returns the species' sniff sound. -/datum/species/proc/get_sniff_sound(mob/living/carbon/human/human) - return - -/// Returns the species' cough sound. -/datum/species/proc/get_cough_sound(mob/living/carbon/human/human) - return - -/// Returns the species' laugh sound -/datum/species/proc/get_laugh_sound(mob/living/carbon/human/human) - return - -/// Returns the species' sneeze sound. -/datum/species/proc/get_sneeze_sound(mob/living/carbon/human/human) - return - -/// Returns the species' snore sound. -/datum/species/proc/get_snore_sound(mob/living/carbon/human/human) - return - -/// Returns the species' hiss sound -/datum/species/proc/get_hiss_sound(mob/living/carbon/human/human) - return - /// Returns a list of all organ typepaths this species probably has /datum/species/proc/get_organs(include_brain = TRUE) var/list/mut_organs = list() diff --git a/code/modules/mob/living/carbon/human/dummy.dm b/code/modules/mob/living/carbon/human/dummy.dm index 372fb8ea2a24..7fb4db6c1c88 100644 --- a/code/modules/mob/living/carbon/human/dummy.dm +++ b/code/modules/mob/living/carbon/human/dummy.dm @@ -111,10 +111,9 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) /proc/create_consistent_human_dna(mob/living/carbon/human/target) target.dna.features[FEATURE_MUTANT_COLOR] = COLOR_VIBRANT_LIME - target.dna.features[FEATURE_ETHEREAL_COLOR] = COLOR_WHITE for(var/feature_key in SSaccessories.feature_list) target.dna.features[feature_key] = get_consistent_feature_entry(SSaccessories.feature_list[feature_key]) - target.dna.initialize_dna(newblood_type = get_blood_type(BLOOD_TYPE_O_MINUS), create_mutation_blocks = FALSE, randomize_features = FALSE) + target.dna.initialize_dna(newblood_type = get_blood_type(/datum/blood_type/human/o_minus), create_mutation_blocks = FALSE, randomize_features = FALSE) // UF and UI are nondeterministic, even though the features are the same some blocks will randomize slightly // In practice this doesn't matter, but this is for the sake of 100%(ish) consistency var/static/consistent_UF diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index d1a3650caee6..b4c10eb528c8 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -67,7 +67,8 @@ vary = FALSE /datum/emote/living/carbon/human/screech/get_sound(mob/living/carbon/human/user) - return user.dna.species.get_scream_sound(user) + var/datum/emote/scream_emote = GLOB.emote_list[/datum/emote/living/scream::key][1] + return scream_emote.get_sound(user) /datum/emote/living/carbon/human/pale key = "pale" @@ -322,15 +323,15 @@ message = "glows brightly!" emote_type = EMOTE_VISIBLE -/datum/emote/living/carbon/human/glow/can_run_emote(mob/living/carbon/human/user, status_check = TRUE , intentional, params) - if(!isethereal(user)) +/datum/emote/living/carbon/human/glow/can_run_emote(mob/living/carbon/human/user, status_check = TRUE, intentional, params) + if(!user.has_status_effect(/datum/status_effect/grouped/bodypart_effect/ethereal_glow)) return FALSE return ..() /datum/emote/living/carbon/human/glow/run_emote(mob/living/carbon/human/user, params, type_override, intentional) . = ..() - var/datum/species/ethereal/goober = user.dna.species - goober.handle_glow_emote(user, 1.75, 1.2) + var/datum/status_effect/grouped/bodypart_effect/ethereal_glow/glow = user.has_status_effect(/datum/status_effect/grouped/bodypart_effect/ethereal_glow) + glow.handle_glow_emote(1.75, 1.2) /datum/emote/living/carbon/human/flare key = "flare" @@ -339,15 +340,15 @@ emote_type = EMOTE_VISIBLE sound = 'sound/mobs/humanoids/ethereal/ethereal_hiss.ogg' -/datum/emote/living/carbon/human/flare/can_run_emote(mob/living/carbon/human/user, status_check = TRUE , intentional, params) - if(!isethereal(user)) +/datum/emote/living/carbon/human/flare/can_run_emote(mob/living/carbon/human/user, status_check = TRUE, intentional, params) + if(!user.has_status_effect(/datum/status_effect/grouped/bodypart_effect/ethereal_glow)) return FALSE return ..() /datum/emote/living/carbon/human/flare/run_emote(mob/living/carbon/human/user, params, type_override, intentional) . = ..() - var/datum/species/ethereal/goober = user.dna.species - goober.handle_glow_emote(user, 12, 6, flare = TRUE, duration = 2 SECONDS, flare_time = 10 SECONDS) + var/datum/status_effect/grouped/bodypart_effect/ethereal_glow/glow = user.has_status_effect(/datum/status_effect/grouped/bodypart_effect/ethereal_glow) + glow.handle_glow_emote(12, 6, flare = TRUE, duration = 2 SECONDS, flare_time = 10 SECONDS) /datum/emote/living/carbon/human/flicker key = "flicker" @@ -357,11 +358,11 @@ sound = 'sound/effects/sparks/sparks4.ogg' /datum/emote/living/carbon/human/flicker/can_run_emote(mob/living/carbon/human/user, status_check = TRUE , intentional, params) - if(!isethereal(user)) + if(!user.has_status_effect(/datum/status_effect/grouped/bodypart_effect/ethereal_glow)) return FALSE return ..() /datum/emote/living/carbon/human/flicker/run_emote(mob/living/carbon/human/user, params, type_override, intentional) . = ..() - var/datum/species/ethereal/goober = user.dna.species - goober.start_flicker(user) + var/datum/status_effect/grouped/bodypart_effect/ethereal_glow/glow = user.has_status_effect(/datum/status_effect/grouped/bodypart_effect/ethereal_glow) + glow.start_flicker() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 223446a49814..808401c963e4 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -97,7 +97,6 @@ return return ..() - /mob/living/carbon/human/Topic(href, href_list) if(href_list["see_id"]) @@ -708,7 +707,7 @@ if(locked_record) locked_record.name = newname -/mob/living/carbon/human/update_health_hud() +/mob/living/carbon/human/update_health_hud(healthpercent) if(!client || !hud_used) return // Updates the health bar, also sends signal @@ -1216,6 +1215,3 @@ /mob/living/carbon/human/species/zombie race = /datum/species/zombie - -/mob/living/carbon/human/species/zombie/infectious - race = /datum/species/zombie/infectious diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 08889d1055f9..587d1805b3b7 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -250,7 +250,7 @@ if(check_block(worm, damage, "\the [worm]", attack_type = UNARMED_ATTACK)) return FALSE if(stat != DEAD) - worm.amount_grown = min(worm.amount_grown + damage, worm.max_grown) + worm.amount_grown = min(worm.amount_grown + damage, XENOMORPH_MAX_GROWTH) var/obj/item/bodypart/affecting = get_bodypart(get_random_valid_zone(worm.zone_selected)) var/armor_block = run_armor_check(affecting, MELEE) apply_damage(damage, BRUTE, affecting, armor_block) diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index a95fccb1cd19..015cfe3ebd65 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -9,7 +9,7 @@ hud_type = /datum/hud/human pressure_resistance = 25 buckle_lying = 0 - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID + mob_biotypes = NONE // The current mob biotypes of human mobs are dependent on the human species (and the organ set bonus) can_be_shoved_into = TRUE initial_language_holder = /datum/language_holder/empty // We get stuff from our species flags_1 = PREVENT_CONTENTS_EXPLOSION_1 diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index 74fc72be79fd..ddd782db7158 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -262,7 +262,7 @@ continue if (preference.is_randomizable()) - preference.apply_to_human(src, preference.create_random_value(preferences)) + preference.apply_to_human(src, preference.create_random_value(preferences), preferences) fully_replace_character_name(real_name, generate_random_mob_name()) diff --git a/code/modules/mob/living/carbon/human/human_update_icons.dm b/code/modules/mob/living/carbon/human/human_update_icons.dm index 5441ead6fd8e..dab8f7a0767a 100644 --- a/code/modules/mob/living/carbon/human/human_update_icons.dm +++ b/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -715,7 +715,7 @@ generate/load female uniform sprites matching all previously decided variables remove_overlay(EYES_LAYER) var/obj/item/bodypart/head/noggin = get_bodypart(BODY_ZONE_HEAD) - if(isnull(noggin) || noggin.is_husked || noggin.is_invisible) + if(isnull(noggin) || noggin.is_invisible) return if(refresh) diff --git a/code/modules/mob/living/carbon/human/physiology.dm b/code/modules/mob/living/carbon/human/physiology.dm index 45afc498ac38..0882d60d8f95 100644 --- a/code/modules/mob/living/carbon/human/physiology.dm +++ b/code/modules/mob/living/carbon/human/physiology.dm @@ -33,6 +33,8 @@ var/stun_mod = 1 /// Multiplied aplpied to just knockdowns, stacks with above multiplicatively var/knockdown_mod = 1 + /// Lazylen of caps to maximum stun length in seconds - the smallest cap will be used + var/list/max_stun_len /// Modifier to amount of blood lost when bleeding (both on life ticks and from flat bleed calls) var/bleed_mod = 1 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 28ff1fc3ea66..8337c2ffbf9a 100644 --- a/code/modules/mob/living/carbon/human/species_types/android.dm +++ b/code/modules/mob/living/carbon/human/species_types/android.dm @@ -25,7 +25,7 @@ ) inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID - exotic_bloodtype = BLOOD_TYPE_OIL + exotic_bloodtype = /datum/blood_type/oil meat = null mutantbrain = /obj/item/organ/brain/cybernetic mutanttongue = /obj/item/organ/tongue/robot 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 5adf84f02b29..11d20ab829b9 100644 --- a/code/modules/mob/living/carbon/human/species_types/ethereal.dm +++ b/code/modules/mob/living/carbon/human/species_types/ethereal.dm @@ -7,12 +7,12 @@ mutantstomach = /obj/item/organ/stomach/ethereal mutanttongue = /obj/item/organ/tongue/ethereal mutantheart = /obj/item/organ/heart/ethereal - exotic_bloodtype = BLOOD_TYPE_ETHEREAL + exotic_bloodtype = /datum/blood_type/ethereal siemens_coeff = 0.5 //They thrive on energy payday_modifier = 1.0 inherent_traits = list( TRAIT_MUTANT_COLORS, - TRAIT_FIXED_MUTANT_COLORS, + TRAIT_FIXED_MUTANT_COLORS, // Has a separate pref for mutant color TRAIT_AGENDER, ) changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT @@ -24,7 +24,7 @@ bodytemp_heat_damage_limit = FIRE_MINIMUM_TEMPERATURE_TO_SPREAD // about 150C // Cold temperatures hurt faster as it is harder to move with out the heat energy bodytemp_cold_damage_limit = (T20C - 10) // about 10c - hair_color_mode = USE_FIXED_MUTANT_COLOR + hair_color_mode = USE_MUTANT_COLOR hair_alpha = 140 facial_hair_alpha = 140 @@ -37,218 +37,30 @@ BODY_ZONE_CHEST = /obj/item/bodypart/chest/ethereal, ) - var/current_color - var/default_color - var/disrupted = FALSE - var/emageffect = FALSE - var/powermult = 1 - var/rangemult = 1 - var/flickering = FALSE - var/currently_flickered - var/obj/effect/dummy/lighting_obj/ethereal_light - -/datum/species/ethereal/Destroy(force) - QDEL_NULL(ethereal_light) - return ..() - /datum/species/ethereal/on_species_gain(mob/living/carbon/human/new_ethereal, datum/species/old_species, pref_load, regenerate_icons) . = ..() if(!ishuman(new_ethereal)) return - default_color = new_ethereal.dna.features[FEATURE_ETHEREAL_COLOR] - RegisterSignal(new_ethereal, COMSIG_ATOM_EMAG_ACT, PROC_REF(on_emag_act)) - RegisterSignal(new_ethereal, COMSIG_ATOM_EMP_ACT, PROC_REF(on_emp_act)) - RegisterSignal(new_ethereal, COMSIG_ATOM_SABOTEUR_ACT, PROC_REF(hit_by_saboteur)) - RegisterSignal(new_ethereal, COMSIG_LIGHT_EATER_ACT, PROC_REF(on_light_eater)) - RegisterSignal(new_ethereal, COMSIG_LIVING_HEALTH_UPDATE, PROC_REF(refresh_light_color)) - RegisterSignal(new_ethereal, COMSIG_CARBON_BODYPART_UPDATED, PROC_REF(update_bodypart_color)) - ethereal_light = new_ethereal.mob_light(light_type = /obj/effect/dummy/lighting_obj/moblight/species) - refresh_light_color(new_ethereal) - var/obj/item/organ/heart/ethereal/ethereal_heart = new_ethereal.get_organ_slot(ORGAN_SLOT_HEART) - ethereal_heart.ethereal_color = default_color - - for(var/obj/item/bodypart/limb as anything in new_ethereal.get_bodyparts()) - if(limb.limb_id == SPECIES_ETHEREAL) - limb.update_limb(is_creating = TRUE) - -/datum/species/ethereal/on_species_loss(mob/living/carbon/human/former_ethereal, datum/species/new_species, pref_load) - UnregisterSignal(former_ethereal, list( - COMSIG_ATOM_EMAG_ACT, - COMSIG_ATOM_EMP_ACT, - COMSIG_ATOM_SABOTEUR_ACT, - COMSIG_LIGHT_EATER_ACT, - COMSIG_LIVING_HEALTH_UPDATE, - COMSIG_CARBON_BODYPART_UPDATED, - )) - QDEL_NULL(ethereal_light) - return ..() + ethereal_heart.set_ethereal_color(new_ethereal.dna.features[FEATURE_MUTANT_COLOR]) + // Trigger a refresh as lazy attached limbs do not cause those + var/datum/status_effect/grouped/bodypart_effect/ethereal_glow/glow_status = new_ethereal.has_status_effect(/datum/status_effect/grouped/bodypart_effect/ethereal_glow) + if (!isnull(glow_status)) + glow_status.refresh_light_color() /datum/species/ethereal/randomize_features() var/list/features = ..() - features[FEATURE_ETHEREAL_COLOR] = GLOB.color_list_ethereal[pick(GLOB.color_list_ethereal)] + features[FEATURE_MUTANT_COLOR] = GLOB.color_list_ethereal[pick(GLOB.color_list_ethereal)] return features -/datum/species/ethereal/proc/refresh_light_color(mob/living/carbon/human/ethereal) - SIGNAL_HANDLER - if(isnull(ethereal_light)) - return - if(ethereal.stat != DEAD && !disrupted) - var/healthpercent = max(ethereal.health, 0) / 100 - if(!emageffect) - var/static/list/skin_color = rgb2num("#eda495") - var/list/colors = rgb2num(ethereal.dna.features[FEATURE_ETHEREAL_COLOR]) - var/list/built_color = list() - for(var/i in 1 to 3) - built_color += skin_color[i] + ((colors[i] - skin_color[i]) * healthpercent) - current_color = rgb(built_color[1], built_color[2], built_color[3]) - - ethereal_light.set_light_range_power_color((1 + (2 * healthpercent)) * rangemult, (1 + (1 * healthpercent) * powermult), current_color) - if(flickering) - if(currently_flickered) - ethereal_light.set_light_on(FALSE) - else - ethereal_light.set_light_on(TRUE) - else - if(currently_flickered) - currently_flickered = FALSE - ethereal_light.set_light_on(TRUE) - fixed_mut_color = current_color - ethereal.set_facial_haircolor(current_color, override = TRUE, update = FALSE) - ethereal.set_haircolor(current_color, override = TRUE, update = FALSE) - ethereal.update_body() - else - ethereal_light.set_light_on(FALSE) - var/dead_color = rgb(128,128,128) - fixed_mut_color = dead_color - ethereal.set_facial_haircolor(dead_color, override = TRUE, update = FALSE) - ethereal.set_haircolor(dead_color, override = TRUE, update = FALSE) - ethereal.update_body() - -/datum/species/ethereal/proc/update_bodypart_color(datum/source, obj/item/bodypart/part, dropping_limb, is_creating) - SIGNAL_HANDLER - if(part.limb_id != SPECIES_ETHEREAL) - return - part.species_color = current_color - -/datum/species/ethereal/proc/on_emp_act(mob/living/carbon/human/source, severity, protection) - SIGNAL_HANDLER - if(protection & EMP_PROTECT_SELF) - return - disrupted = TRUE - refresh_light_color(source) - to_chat(source, span_notice("You feel the light of your body leave you.")) - switch(severity) - if(EMP_LIGHT) - addtimer(CALLBACK(src, PROC_REF(stop_emp), source), 10 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) //We're out for 10 seconds - if(EMP_HEAVY) - addtimer(CALLBACK(src, PROC_REF(stop_emp), source), 20 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) //We're out for 20 seconds - -/datum/species/ethereal/proc/hit_by_saboteur(mob/living/carbon/human/source, disrupt_duration) - disrupted = TRUE - refresh_light_color(source) - to_chat(source, span_warning("Something inside of you crackles in a bad way.")) - source.take_bodypart_damage(burn = 3, wound_bonus = CANT_WOUND) - addtimer(CALLBACK(src, PROC_REF(stop_emp), source), disrupt_duration, TIMER_UNIQUE|TIMER_OVERRIDE) - return TRUE - -/datum/species/ethereal/proc/on_emag_act(mob/living/carbon/human/source, mob/user) - SIGNAL_HANDLER - if(emageffect) - return FALSE - emageffect = TRUE - if(user) - to_chat(user, span_notice("You tap [source] on the back with your card.")) - source.visible_message(span_danger("[source] starts flickering in an array of colors!")) - handle_emag(source) - addtimer(CALLBACK(src, PROC_REF(stop_emag), source), 2 MINUTES) //Disco mode for 2 minutes! This doesn't affect the ethereal at all besides either annoying some players, or making someone look badass. - return TRUE - -/// Special handling for getting hit with a light eater -/datum/species/ethereal/proc/on_light_eater(mob/living/carbon/human/source, datum/light_eater) - SIGNAL_HANDLER - source.emp_act(EMP_LIGHT) - return COMPONENT_BLOCK_LIGHT_EATER - -/datum/species/ethereal/proc/stop_emp(mob/living/carbon/human/ethereal) - disrupted = FALSE - refresh_light_color(ethereal) - to_chat(ethereal, span_notice("You feel more energized as your shine comes back.")) - -/datum/species/ethereal/proc/handle_emag(mob/living/carbon/human/ethereal) - if(!emageffect) - return - current_color = GLOB.color_list_ethereal[pick(GLOB.color_list_ethereal)] - refresh_light_color(ethereal) - addtimer(CALLBACK(src, PROC_REF(handle_emag), ethereal), 0.5 SECONDS) - -/datum/species/ethereal/proc/stop_emag(mob/living/carbon/human/ethereal) - emageffect = FALSE - refresh_light_color(ethereal) - ethereal.visible_message(span_danger("[ethereal] stops flickering and goes back to their normal state!")) - -/datum/species/ethereal/proc/handle_glow_emote(mob/living/carbon/human/ethereal, power, range, flare = FALSE, duration = 5 SECONDS, flare_time = 0) - powermult = power - rangemult = range - refresh_light_color(ethereal) - addtimer(CALLBACK(src, PROC_REF(stop_glow_emote), ethereal, flare, flare_time), duration) - -/datum/species/ethereal/proc/stop_glow_emote(mob/living/carbon/human/ethereal, flare, flare_time) - if(!flare) - powermult = 1 - rangemult = 1 - refresh_light_color(ethereal) - return - powermult = 0.5 - rangemult = 0.75 - refresh_light_color(ethereal) - start_flicker(ethereal, duration = 1.5 SECONDS, min = 1, max = 2) - sleep(1.5 SECONDS) - powermult = 1 - rangemult = 1 - disrupted = TRUE - to_chat(ethereal, span_warning("Your shine flickers and fades.")) - addtimer(CALLBACK(src, PROC_REF(stop_emp), ethereal), flare_time, TIMER_UNIQUE|TIMER_OVERRIDE) - - -/datum/species/ethereal/proc/start_flicker(mob/living/carbon/human/ethereal, duration = 6 SECONDS, min = 1, max = 4) - flickering = TRUE - handle_flicker(ethereal, min, max) - addtimer(CALLBACK(src, PROC_REF(stop_flicker), ethereal), duration) - -/datum/species/ethereal/proc/handle_flicker(mob/living/carbon/human/ethereal, flickmin = 1, flickmax = 4) - if(!flickering) - currently_flickered = FALSE - refresh_light_color(ethereal) - return - if(currently_flickered) - currently_flickered = FALSE - else - currently_flickered = TRUE - refresh_light_color(ethereal) - addtimer(CALLBACK(src, PROC_REF(handle_flicker), ethereal), rand(1, 4)) - -/datum/species/ethereal/proc/stop_flicker(mob/living/carbon/human/ethereal) - flickering = FALSE - currently_flickered = FALSE +/datum/species/ethereal/prepare_human_for_preview(mob/living/carbon/human/human) + human.dna.features[FEATURE_MUTANT_COLOR] = GLOB.color_list_ethereal["Green"] /datum/species/ethereal/get_features() var/list/features = ..() - features += "feature_ethcolor" - return features -/datum/species/ethereal/get_scream_sound(mob/living/carbon/human/ethereal) - return pick( - 'sound/mobs/humanoids/ethereal/ethereal_scream_1.ogg', - 'sound/mobs/humanoids/ethereal/ethereal_scream_2.ogg', - 'sound/mobs/humanoids/ethereal/ethereal_scream_3.ogg', - ) - -/datum/species/ethereal/get_hiss_sound(mob/living/carbon/human/ethereal) - return 'sound/mobs/humanoids/ethereal/ethereal_hiss.ogg' - /datum/species/ethereal/get_physical_attributes() return "Ethereals process electricity as their power supply, not food, and are somewhat resistant to it.\ They do so via their crystal core, their equivalent of a human heart, which will also encase them in a reviving crystal if they die.\ @@ -310,6 +122,7 @@ id = SPECIES_ETHEREAL_LUSTROUS examine_limb_id = SPECIES_ETHEREAL mutantbrain = /obj/item/organ/brain/lustrous + mutanttongue = /obj/item/organ/tongue/ethereal/lustrous changesource_flags = MIRROR_BADMIN | MIRROR_MAGIC | MIRROR_PRIDE | RACE_SWAP | ERT_SPAWN inherent_traits = list( TRAIT_MUTANT_COLORS, @@ -333,14 +146,7 @@ return "Lustrous are what remains of an Ethereal after freebasing esoteric drugs. \ They are pressure immune, virus immune, can see bluespace tears in reality, and have a really weird scream. They remain vulnerable to physical damage." -/datum/species/ethereal/lustrous/get_scream_sound(mob/living/carbon/human/ethereal) - return pick( - 'sound/mobs/humanoids/ethereal/lustrous_scream_1.ogg', - 'sound/mobs/humanoids/ethereal/lustrous_scream_2.ogg', - 'sound/mobs/humanoids/ethereal/lustrous_scream_3.ogg', - ) - -/datum/species/ethereal/lustrous/on_species_gain(mob/living/carbon/new_lustrous, datum/species/old_species, pref_load, regenerate_icons) - ..() - default_color = new_lustrous.dna.features[FEATURE_ETHEREAL_COLOR] - new_lustrous.dna.features[FEATURE_ETHEREAL_COLOR] = GLOB.color_list_lustrous[pick(GLOB.color_list_lustrous)] //Picks one of 5 lustrous-specific colors. +/datum/species/ethereal/lustrous/randomize_features() + var/list/features = ..() + features[FEATURE_MUTANT_COLOR] = GLOB.color_list_lustrous[pick(GLOB.color_list_lustrous)] + return features diff --git a/code/modules/mob/living/carbon/human/species_types/felinid.dm b/code/modules/mob/living/carbon/human/species_types/felinid.dm index a1733698711d..61a2354ca4a8 100644 --- a/code/modules/mob/living/carbon/human/species_types/felinid.dm +++ b/code/modules/mob/living/carbon/human/species_types/felinid.dm @@ -35,9 +35,6 @@ mutantears = /obj/item/organ/ears return ..() -/datum/species/human/felinid/get_hiss_sound(mob/living/carbon/human/felinid) - return 'sound/mobs/humanoids/felinid/felinid_hiss.ogg' - /proc/mass_purrbation() for(var/mob in GLOB.human_list) purrbation_apply(mob) 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 c87c52b52357..ec820b7ab447 100644 --- a/code/modules/mob/living/carbon/human/species_types/humans.dm +++ b/code/modules/mob/living/carbon/human/species_types/humans.dm @@ -18,90 +18,6 @@ human.update_body() // DARKPACK EDIT CHANGE END -/datum/species/human/get_scream_sound(mob/living/carbon/human/human) - if(human.physique == MALE) - if(prob(1)) - return 'sound/mobs/humanoids/human/scream/wilhelm_scream.ogg' - return pick( - 'sound/mobs/humanoids/human/scream/malescream_1.ogg', - 'sound/mobs/humanoids/human/scream/malescream_2.ogg', - 'sound/mobs/humanoids/human/scream/malescream_3.ogg', - 'sound/mobs/humanoids/human/scream/malescream_4.ogg', - 'sound/mobs/humanoids/human/scream/malescream_5.ogg', - 'sound/mobs/humanoids/human/scream/malescream_6.ogg', - ) - - return pick( - 'sound/mobs/humanoids/human/scream/femalescream_1.ogg', - 'sound/mobs/humanoids/human/scream/femalescream_2.ogg', - 'sound/mobs/humanoids/human/scream/femalescream_3.ogg', - 'sound/mobs/humanoids/human/scream/femalescream_4.ogg', - 'sound/mobs/humanoids/human/scream/femalescream_5.ogg', - ) - -/datum/species/human/get_cough_sound(mob/living/carbon/human/human) - if(human.physique == FEMALE) - return pick( - 'sound/mobs/humanoids/human/cough/female_cough1.ogg', - 'sound/mobs/humanoids/human/cough/female_cough2.ogg', - 'sound/mobs/humanoids/human/cough/female_cough3.ogg', - 'sound/mobs/humanoids/human/cough/female_cough4.ogg', - 'sound/mobs/humanoids/human/cough/female_cough5.ogg', - 'sound/mobs/humanoids/human/cough/female_cough6.ogg', - ) - return pick( - 'sound/mobs/humanoids/human/cough/male_cough1.ogg', - 'sound/mobs/humanoids/human/cough/male_cough2.ogg', - 'sound/mobs/humanoids/human/cough/male_cough3.ogg', - 'sound/mobs/humanoids/human/cough/male_cough4.ogg', - 'sound/mobs/humanoids/human/cough/male_cough5.ogg', - 'sound/mobs/humanoids/human/cough/male_cough6.ogg', - ) - -/datum/species/human/get_cry_sound(mob/living/carbon/human/human) - if(human.physique == FEMALE) - return pick( - 'sound/mobs/humanoids/human/cry/female_cry1.ogg', - 'sound/mobs/humanoids/human/cry/female_cry2.ogg', - ) - return pick( - 'sound/mobs/humanoids/human/cry/male_cry1.ogg', - 'sound/mobs/humanoids/human/cry/male_cry2.ogg', - 'sound/mobs/humanoids/human/cry/male_cry3.ogg', - ) - - -/datum/species/human/get_sneeze_sound(mob/living/carbon/human/human) - if(human.physique == FEMALE) - return 'sound/mobs/humanoids/human/sneeze/female_sneeze1.ogg' - return 'sound/mobs/humanoids/human/sneeze/male_sneeze1.ogg' - -/datum/species/human/get_laugh_sound(mob/living/carbon/human/human) - if(human.physique == FEMALE) - return 'sound/mobs/humanoids/human/laugh/womanlaugh.ogg' - return pick( - 'sound/mobs/humanoids/human/laugh/manlaugh1.ogg', - 'sound/mobs/humanoids/human/laugh/manlaugh2.ogg', - ) - -/datum/species/human/get_sigh_sound(mob/living/carbon/human/human) - if(human.physique == FEMALE) - return SFX_FEMALE_SIGH - return SFX_MALE_SIGH - -/datum/species/human/get_sniff_sound(mob/living/carbon/human/human) - if(human.physique == FEMALE) - return 'sound/mobs/humanoids/human/sniff/female_sniff.ogg' - return 'sound/mobs/humanoids/human/sniff/male_sniff.ogg' - -/datum/species/human/get_snore_sound(mob/living/carbon/human/human) - if(human.physique == FEMALE) - return SFX_SNORE_FEMALE - return SFX_SNORE_MALE - -/datum/species/human/get_hiss_sound(mob/living/carbon/human/human) - return 'sound/mobs/humanoids/human/hiss/human_hiss.ogg' - /datum/species/human/get_species_description() return "Humans are the dominant species in the known galaxy. \ Their kind extend from old Earth to the edges of known space." 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 1d244f4731d3..25581a7dad8c 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -21,7 +21,7 @@ mutanteyes = /obj/item/organ/eyes/jelly mutantheart = null meat = /obj/item/food/meat/slab/human/mutant/slime - exotic_bloodtype = BLOOD_TYPE_TOX + exotic_bloodtype = /datum/blood_type/slime blood_deficiency_drain_rate = JELLY_REGEN_RATE + BLOOD_DEFICIENCY_MODIFIER coldmod = 6 // = 3x cold damage heatmod = 0.5 // = 1/4x heat damage 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 2d51b1676a52..eaf2db2c9d00 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -4,6 +4,7 @@ plural_form = "Lizardfolk" id = SPECIES_LIZARD inherent_traits = list( + TRAIT_COLD_BLOODED, TRAIT_MUTANT_COLORS, ) inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_REPTILE @@ -28,9 +29,8 @@ species_cookie = /obj/item/food/meat/slab meat = /obj/item/food/meat/slab/human/mutant/lizard skinned_type = /obj/item/stack/sheet/animalhide/carbon/lizard - exotic_bloodtype = BLOOD_TYPE_LIZARD + exotic_bloodtype = /datum/blood_type/lizard inert_mutation = /datum/mutation/firebreath - death_sound = 'sound/mobs/humanoids/lizard/deathsound.ogg' species_language_holder = /datum/language_holder/lizard digitigrade_customization = DIGITIGRADE_OPTIONAL @@ -47,81 +47,11 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/lizard, ) -/// Lizards are cold blooded and do not stabilize body temperature naturally -/datum/species/lizard/body_temperature_core(mob/living/carbon/human/humi, seconds_per_tick) - return - /datum/species/lizard/randomize_features() var/list/features = ..() features[FEATURE_LIZARD_MARKINGS] = pick(SSaccessories.feature_list[FEATURE_LIZARD_MARKINGS]) return features -/datum/species/lizard/get_scream_sound(mob/living/carbon/human/lizard) - return pick( - 'sound/mobs/humanoids/lizard/lizard_scream_1.ogg', - 'sound/mobs/humanoids/lizard/lizard_scream_2.ogg', - 'sound/mobs/humanoids/lizard/lizard_scream_3.ogg', - ) - -/datum/species/lizard/get_cough_sound(mob/living/carbon/human/lizard) - if(lizard.physique == FEMALE) - return pick( - 'sound/mobs/humanoids/human/cough/female_cough1.ogg', - 'sound/mobs/humanoids/human/cough/female_cough2.ogg', - 'sound/mobs/humanoids/human/cough/female_cough3.ogg', - 'sound/mobs/humanoids/human/cough/female_cough4.ogg', - 'sound/mobs/humanoids/human/cough/female_cough5.ogg', - 'sound/mobs/humanoids/human/cough/female_cough6.ogg', - ) - return pick( - 'sound/mobs/humanoids/human/cough/male_cough1.ogg', - 'sound/mobs/humanoids/human/cough/male_cough2.ogg', - 'sound/mobs/humanoids/human/cough/male_cough3.ogg', - 'sound/mobs/humanoids/human/cough/male_cough4.ogg', - 'sound/mobs/humanoids/human/cough/male_cough5.ogg', - 'sound/mobs/humanoids/human/cough/male_cough6.ogg', - ) - - -/datum/species/lizard/get_cry_sound(mob/living/carbon/human/lizard) - if(lizard.physique == FEMALE) - return pick( - 'sound/mobs/humanoids/human/cry/female_cry1.ogg', - 'sound/mobs/humanoids/human/cry/female_cry2.ogg', - ) - return pick( - 'sound/mobs/humanoids/human/cry/male_cry1.ogg', - 'sound/mobs/humanoids/human/cry/male_cry2.ogg', - 'sound/mobs/humanoids/human/cry/male_cry3.ogg', - ) - - -/datum/species/lizard/get_sneeze_sound(mob/living/carbon/human/lizard) - if(lizard.physique == FEMALE) - return 'sound/mobs/humanoids/human/sneeze/female_sneeze1.ogg' - return 'sound/mobs/humanoids/human/sneeze/male_sneeze1.ogg' - -/datum/species/lizard/get_laugh_sound(mob/living/carbon/human/lizard) - return 'sound/mobs/humanoids/lizard/lizard_laugh1.ogg' - -/datum/species/lizard/get_sigh_sound(mob/living/carbon/human/lizard) - if(lizard.physique == FEMALE) - return SFX_FEMALE_SIGH - return SFX_MALE_SIGH - -/datum/species/lizard/get_sniff_sound(mob/living/carbon/human/lizard) - if(lizard.physique == FEMALE) - return 'sound/mobs/humanoids/human/sniff/female_sniff.ogg' - return 'sound/mobs/humanoids/human/sniff/male_sniff.ogg' - -/datum/species/lizard/get_snore_sound(mob/living/carbon/human/lizard) - if(lizard.physique == FEMALE) - return SFX_SNORE_FEMALE - return SFX_SNORE_MALE - -/datum/species/lizard/get_hiss_sound(mob/living/carbon/human/lizard) - return 'sound/mobs/humanoids/lizard/lizard_hiss.ogg' - /datum/species/lizard/get_physical_attributes() return "Lizardpeople can withstand slightly higher temperatures than most species, but they are very vulnerable to the cold \ and can't regulate their body-temperature internally, making the vacuum of space extremely deadly to them." @@ -176,6 +106,7 @@ Lizard subspecies: ASHWALKERS mutantlungs = /obj/item/organ/lungs/lavaland mutantbrain = /obj/item/organ/brain/primitive inherent_traits = list( + TRAIT_COLD_BLOODED, TRAIT_MUTANT_COLORS, TRAIT_VIRUSIMMUNE, ) @@ -204,6 +135,7 @@ Lizard subspecies: SILVER SCALED id = SPECIES_LIZARD_SILVER inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_REPTILE inherent_traits = list( + TRAIT_COLD_BLOODED, TRAIT_HOLY, TRAIT_NOBREATH, TRAIT_PIERCEIMMUNE, diff --git a/code/modules/mob/living/carbon/human/species_types/monkeys.dm b/code/modules/mob/living/carbon/human/species_types/monkeys.dm index 1a876b55a72b..bd178237d769 100644 --- a/code/modules/mob/living/carbon/human/species_types/monkeys.dm +++ b/code/modules/mob/living/carbon/human/species_types/monkeys.dm @@ -54,13 +54,6 @@ return TRUE return ..() -/datum/species/monkey/get_scream_sound(mob/living/carbon/human/monkey) - return get_sfx(SFX_SCREECH) - -/datum/species/monkey/get_hiss_sound(mob/living/carbon/human/monkey) - return 'sound/mobs/humanoids/human/hiss/human_hiss.ogg' - // we're both great apes, or something.. - /datum/species/monkey/get_physical_attributes() return "Monkeys are slippery, can crawl into vents, and are more dextrous than humans.. but only when stealing things. \ Natural monkeys cannot operate machinery or most tools with their paws, but unusually clever monkeys or those that were once something else can." 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 5a712a5a1368..c984baf53ff4 100644 --- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm +++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm @@ -20,7 +20,6 @@ changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT species_cookie = /obj/item/food/muffin/moffin species_language_holder = /datum/language_holder/moth - death_sound = 'sound/mobs/humanoids/moth/moth_death.ogg' payday_modifier = 1.0 family_heirlooms = list(/obj/item/flashlight/lantern/heirloom_moth) @@ -38,61 +37,6 @@ features[FEATURE_MOTH_MARKINGS] = pick(SSaccessories.feature_list[FEATURE_MOTH_MARKINGS]) return features -/datum/species/moth/get_scream_sound(mob/living/carbon/human/moth) - return 'sound/mobs/humanoids/moth/scream_moth.ogg' - -/datum/species/moth/get_cough_sound(mob/living/carbon/human/moth) - if(moth.physique == FEMALE) - return pick( - 'sound/mobs/humanoids/human/cough/female_cough1.ogg', - 'sound/mobs/humanoids/human/cough/female_cough2.ogg', - 'sound/mobs/humanoids/human/cough/female_cough3.ogg', - 'sound/mobs/humanoids/human/cough/female_cough4.ogg', - 'sound/mobs/humanoids/human/cough/female_cough5.ogg', - 'sound/mobs/humanoids/human/cough/female_cough6.ogg', - ) - return pick( - 'sound/mobs/humanoids/human/cough/male_cough1.ogg', - 'sound/mobs/humanoids/human/cough/male_cough2.ogg', - 'sound/mobs/humanoids/human/cough/male_cough3.ogg', - 'sound/mobs/humanoids/human/cough/male_cough4.ogg', - 'sound/mobs/humanoids/human/cough/male_cough5.ogg', - 'sound/mobs/humanoids/human/cough/male_cough6.ogg', - ) - - -/datum/species/moth/get_cry_sound(mob/living/carbon/human/moth) - if(moth.physique == FEMALE) - return pick( - 'sound/mobs/humanoids/human/cry/female_cry1.ogg', - 'sound/mobs/humanoids/human/cry/female_cry2.ogg', - ) - return pick( - 'sound/mobs/humanoids/human/cry/male_cry1.ogg', - 'sound/mobs/humanoids/human/cry/male_cry2.ogg', - 'sound/mobs/humanoids/human/cry/male_cry3.ogg', - ) - - -/datum/species/moth/get_sneeze_sound(mob/living/carbon/human/moth) - if(moth.physique == FEMALE) - return 'sound/mobs/humanoids/human/sneeze/female_sneeze1.ogg' - return 'sound/mobs/humanoids/human/sneeze/male_sneeze1.ogg' - - -/datum/species/moth/get_laugh_sound(mob/living/carbon/human/moth) - return 'sound/mobs/humanoids/moth/moth_laugh1.ogg' - -/datum/species/moth/get_sigh_sound(mob/living/carbon/human/moth) - if(moth.physique == FEMALE) - return SFX_FEMALE_SIGH - return SFX_MALE_SIGH - -/datum/species/moth/get_sniff_sound(mob/living/carbon/human/moth) - if(moth.physique == FEMALE) - return 'sound/mobs/humanoids/human/sniff/female_sniff.ogg' - return 'sound/mobs/humanoids/human/sniff/male_sniff.ogg' - /datum/species/moth/get_physical_attributes() return "Moths have large and fluffy wings, which help them navigate the station if gravity is offline by pushing the air around them. \ Due to that, it isn't of much use out in space. Their eyes are very sensitive." 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 7b9c9dd516a0..65ae620cf980 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -71,13 +71,6 @@ else give_important_for_life(equipping) -/datum/species/plasmaman/get_scream_sound(mob/living/carbon/human) - return pick( - 'sound/mobs/humanoids/plasmaman/plasmeme_scream_1.ogg', - 'sound/mobs/humanoids/plasmaman/plasmeme_scream_2.ogg', - 'sound/mobs/humanoids/plasmaman/plasmeme_scream_3.ogg', - ) - /datum/species/plasmaman/get_physical_attributes() return "Plasmamen literally breathe and live plasma. They spontaneously combust on contact with oxygen, and besides all the quirks that go with that, \ they're very vulnerable to all kinds of physical damage due to their brittle structure." 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 1c316f735a9f..759d1d68a963 100644 --- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm @@ -17,7 +17,7 @@ heatmod = 1.5 payday_modifier = 1.0 meat = /obj/item/food/meat/slab/human/mutant/plant - exotic_bloodtype = BLOOD_TYPE_H2O + exotic_bloodtype = /datum/blood_type/water changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT species_language_holder = /datum/language_holder/plant 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 205a364e22d3..355a75b48948 100644 --- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm @@ -18,6 +18,7 @@ mutantbrain = /obj/item/organ/brain/shadow mutanteyes = /obj/item/organ/eyes/shadow + mutanttongue = /obj/item/organ/tongue/shadow mutantheart = null mutantlungs = null @@ -113,9 +114,6 @@ icon = 'icons/obj/medical/organs/shadow_organs.dmi' shade_color = "grey-ish" -/datum/species/shadow/get_scream_sound(mob/living/carbon/human/moth) - return 'sound/mobs/humanoids/shadow/shadow_wail.ogg' - /datum/species/shadow/proc/on_flashed(source, mob/living/carbon/flashed, flash, deviation) SIGNAL_HANDLER 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 a6e12b297777..4d2e111fcad7 100644 --- a/code/modules/mob/living/carbon/human/species_types/snail.dm +++ b/code/modules/mob/living/carbon/human/species_types/snail.dm @@ -16,7 +16,7 @@ mutanteyes = /obj/item/organ/eyes/snail mutanttongue = /obj/item/organ/tongue/snail mutantliver = /obj/item/organ/liver/snail - exotic_bloodtype = BLOOD_TYPE_SNAIL + exotic_bloodtype = /datum/blood_type/snail bodypart_overrides = list( BODY_ZONE_HEAD = /obj/item/bodypart/head/snail, 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 9ade8591552c..e40b31a7c115 100644 --- a/code/modules/mob/living/carbon/human/species_types/vampire.dm +++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm @@ -16,7 +16,7 @@ ) inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID changesource_flags = MIRROR_BADMIN | MIRROR_PRIDE | WABBAJACK | ERT_SPAWN - exotic_bloodtype = BLOOD_TYPE_VAMPIRE + exotic_bloodtype = /datum/blood_type/universal/vampire blood_deficiency_drain_rate = BLOOD_DEFICIENCY_MODIFIER // vampires already passively lose blood, so this just makes them lose it slightly more quickly when they have blood deficiency. mutantheart = /obj/item/organ/heart/vampire mutanttongue = /obj/item/organ/tongue/vampire 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 7d1b374c90d8..0be24e7a1317 100644 --- a/code/modules/mob/living/carbon/human/species_types/zombies.dm +++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm @@ -2,60 +2,22 @@ // 1spooky name = "High-Functioning Zombie" id = SPECIES_ZOMBIE - sexes = FALSE - meat = /obj/item/food/meat/slab/human/mutant/zombie - mutanttongue = /obj/item/organ/tongue/zombie - inherent_traits = list( - // SHARED WITH ALL ZOMBIES - TRAIT_BLOODY_MESS, - TRAIT_EASILY_WOUNDED, - TRAIT_EASYDISMEMBER, - TRAIT_FAKEDEATH, - TRAIT_LIMBATTACHMENT, - TRAIT_LIVERLESS_METABOLISM, - TRAIT_NOBREATH, - TRAIT_NODEATH, - TRAIT_NOCRITDAMAGE, - TRAIT_NOHUNGER, - TRAIT_NO_DNA_COPY, - TRAIT_NO_ZOMBIFY, - TRAIT_RADIMMUNE, - TRAIT_RESISTCOLD, - TRAIT_RESISTHIGHPRESSURE, - TRAIT_RESISTLOWPRESSURE, - TRAIT_TOXIMMUNE, - // HIGH FUNCTIONING UNIQUE - TRAIT_NOBLOOD, - TRAIT_SUCCUMB_OVERRIDE, - ) - mutantstomach = null - mutantheart = null - mutantliver = null - mutantlungs = null - inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | ERT_SPAWN - 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 - bodytemp_cold_damage_limit = MINIMUM_TEMPERATURE_TO_MOVE // take damage below minimum movement temp - - bodypart_overrides = list( - BODY_ZONE_HEAD = /obj/item/bodypart/head/zombie, - BODY_ZONE_CHEST = /obj/item/bodypart/chest/zombie, - BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/zombie, - BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/zombie, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/zombie, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/zombie - ) - -/// Zombies do not stabilize body temperature they are the walking dead and are cold blooded -/datum/species/zombie/body_temperature_core(mob/living/carbon/human/humi, seconds_per_tick) - return + mutanttongue = /obj/item/organ/tongue/zombie // not necessary as status effect gives it, but for tests /datum/species/zombie/check_roundstart_eligible() if(check_holidays(HALLOWEEN)) return TRUE return ..() +/datum/species/zombie/on_species_gain(mob/living/carbon/human/human_who_gained_species, datum/species/old_species, pref_load, regenerate_icons, replace_missing) + . = ..() + human_who_gained_species.apply_status_effect(/datum/status_effect/zombie/uninfected) + +/datum/species/zombie/on_species_loss(mob/living/carbon/human/human_who_lost_species, datum/species/new_species, pref_load, regenerate_icons, replace_missing) + . = ..() + human_who_lost_species.remove_status_effect(/datum/status_effect/zombie/uninfected) + /datum/species/zombie/get_physical_attributes() return "Zombies are undead, and thus completely immune to any environmental hazard, or any physical threat besides blunt force trauma and burns. \ Their limbs are easy to pop off their joints, but they can somehow just slot them back in." @@ -82,19 +44,41 @@ return to_add -/datum/species/zombie/infectious - name = "Infectious Zombie" - id = SPECIES_ZOMBIE_INFECTIOUS - examine_limb_id = SPECIES_ZOMBIE - damage_modifier = 20 // 120 damage to KO a zombie, which kills it - mutanteyes = /obj/item/organ/eyes/zombie - mutantbrain = /obj/item/organ/brain/zombie - mutanttongue = /obj/item/organ/tongue/zombie - changesource_flags = MIRROR_BADMIN | WABBAJACK | ERT_SPAWN - - inherent_traits = list( - // SHARED WITH ALL ZOMBIES +/datum/status_effect/zombie + id = "zombified" + alert_type = null + tick_interval = STATUS_EFFECT_NO_TICK + + /// Time it takes before regen starts to kick in + var/regen_time = 6 SECONDS + /// Amount healed per regen tick - if 0, no regen will occur + var/regen_amount = 0.5 + /// The hand to give the zombie - if null, they will have normal hands + var/zombie_hand = /obj/item/mutant_hand/zombie + /// The movespeed modifier to apply to the zombie - if null, no movespeed modifier will be applied + var/movespeed_mod = /datum/movespeed_modifier/zombie + /// % Reduction to all physical damage the zombie takes + var/damage_modifier = 20 + /// Multiplier to all stamina damage the zombie types + var/stamina_modifier = 0.33 + /// Max length of stun effects + var/max_stun_length = 2 SECONDS + + /// List of traits applied to this type of zombie + var/list/unique_traits = list( + TRAIT_APATHETIC, + TRAIT_COMBAT_MODE_LOCK, + TRAIT_DISCOORDINATED_TOOL_USER, + TRAIT_ILLITERATE, + TRAIT_NEVER_CONSIDERED_ALIVE, + TRAIT_PRIMITIVE, + TRAIT_STABLEHEART, + TRAIT_STABLELIVER, + ) + /// List of traits applied to all zombie types + var/static/list/zombie_traits = list( TRAIT_BLOODY_MESS, + TRAIT_COLD_BLOODED, TRAIT_EASILY_WOUNDED, TRAIT_EASYDISMEMBER, TRAIT_FAKEDEATH, @@ -104,105 +88,203 @@ TRAIT_NOCRITDAMAGE, TRAIT_NODEATH, TRAIT_NOHUNGER, - TRAIT_NO_DNA_COPY, TRAIT_RADIMMUNE, TRAIT_RESISTCOLD, TRAIT_RESISTHIGHPRESSURE, TRAIT_RESISTLOWPRESSURE, TRAIT_TOXIMMUNE, - // INFECTIOUS UNIQUE - TRAIT_STABLEHEART, // Replacement for noblood. Infectious zombies can bleed but don't need their heart. - TRAIT_STABLELIVER, // Not necessary but for consistency with above - TRAIT_APATHETIC, // They don't have the brains for mood. ) - // Infectious zombies have slow legs - bodypart_overrides = list( - BODY_ZONE_HEAD = /obj/item/bodypart/head/zombie, - BODY_ZONE_CHEST = /obj/item/bodypart/chest/zombie, - BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/zombie, - BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/zombie, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/zombie/infectious, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/zombie/infectious, - ) + /// Biotypes we added (typically just MOB_UNDEAD) + VAR_PRIVATE/added_biotypes = NONE + /// Biotypes we removed (typically just MOB_ORGANIC) + VAR_PRIVATE/removed_biotypes = NONE + /// Tongue we removed and stored away for later restoration + VAR_PRIVATE/datum/weakref/removed_tongue - var/regen_time = 6 SECONDS - var/regen_amount = 0.5 - var/zombie_hand = /obj/item/mutant_hand/zombie +/datum/status_effect/zombie/on_apply() + if(!ishuman(owner) || HAS_TRAIT(owner, TRAIT_UNHUSKABLE)) + return FALSE -/datum/species/zombie/infectious/on_species_gain(mob/living/carbon/human/new_zombie, datum/species/old_species, pref_load, regenerate_icons) - . = ..() - new_zombie.set_combat_mode(TRUE) - // Needs to be added after combat mode is set - ADD_TRAIT(new_zombie, TRAIT_COMBAT_MODE_LOCK, SPECIES_TRAIT) - new_zombie.physiology.stamina_mod *= 0.33 //Zombie stam resist - - // Deal with the source of this zombie corruption - // Infection organ needs to be handled separately from mutant_organs - // because it persists through species transitions + var/mob/living/carbon/human/new_zombie = owner + LAZYADD(new_zombie.physiology.max_stun_len, max_stun_length) + if(!isnull(movespeed_mod)) + new_zombie.add_movespeed_modifier(movespeed_mod) + new_zombie.physiology.stamina_mod *= stamina_modifier // Zombie stam resist + new_zombie.physiology.damage_resistance += damage_modifier + new_zombie.add_traits(unique_traits | zombie_traits, TRAIT_STATUS_EFFECT(id)) + new_zombie.lighting_cutoff_red = 25 + new_zombie.lighting_cutoff_green = 35 + new_zombie.lighting_cutoff_blue = 5 + new_zombie.update_sight() + new_zombie.set_combat_mode(TRUE, silent = TRUE, force = TRUE) + set_zombie_temperature() + add_zombie_biotypes() + + // Ensures we have an infection organ even if we were applied by something else var/obj/item/organ/zombie_infection/infection = new_zombie.get_organ_slot(ORGAN_SLOT_ZOMBIE) if(isnull(infection)) infection = new() infection.Insert(new_zombie) + RegisterSignal(infection, COMSIG_ORGAN_REMOVED, PROC_REF(organ_removed)) - new_zombie.AddComponent( \ - /datum/component/mutant_hands, \ - mutant_hand_path = zombie_hand, \ - ) - new_zombie.AddComponent( \ - /datum/component/regenerator, \ - regeneration_delay = regen_time, \ - brute_per_second = regen_amount, \ - burn_per_second = regen_amount, \ - tox_per_second = regen_amount, \ - oxy_per_second = regen_amount * 0.5, \ - heals_wounds = TRUE, \ - ) + var/obj/item/bodypart/head/head = new_zombie.get_bodypart(BODY_ZONE_HEAD) + if(!QDELETED(head)) + head.can_dismember = TRUE + + var/obj/item/organ/tongue/old_tongue = new_zombie.get_organ_slot(ORGAN_SLOT_TONGUE) + if(!QDELETED(old_tongue)) + old_tongue.Remove(new_zombie, special = TRUE) + if(!QDELETED(old_tongue)) + old_tongue.moveToNullspace() + removed_tongue = WEAKREF(old_tongue) + + var/obj/item/organ/tongue/zombie/new_tongue = new() + new_tongue.Insert(new_zombie, special = TRUE) + + if(!isnull(zombie_hand)) + new_zombie.AddComponent( \ + /datum/component/mutant_hands, \ + mutant_hand_path = zombie_hand, \ + ) + if(regen_amount > 0) + new_zombie.AddComponent( \ + /datum/component/regenerator, \ + regeneration_delay = regen_time, \ + brute_per_second = regen_amount, \ + burn_per_second = regen_amount, \ + tox_per_second = regen_amount, \ + oxy_per_second = regen_amount * 0.5, \ + heals_wounds = TRUE, \ + ) + + new_zombie.become_husk(id) + + RegisterSignal(new_zombie, COMSIG_SPECIES_GAIN, PROC_REF(zombie_species_changed)) + RegisterSignal(new_zombie, COMSIG_LIVING_DEATH, PROC_REF(zombie_died_somehow)) + RegisterSignal(new_zombie, COMSIG_CARBON_POST_ATTACH_LIMB, PROC_REF(zombie_limb_gained)) + RegisterSignal(new_zombie, COMSIG_CARBON_POST_REMOVE_LIMB, PROC_REF(zombie_limb_lost)) + + return TRUE + +/datum/status_effect/zombie/on_remove() + var/mob/living/carbon/human/was_zombie = owner + + var/obj/item/organ/tongue/zombie/old_tongue = was_zombie.get_organ_slot(ORGAN_SLOT_TONGUE) + var/obj/item/organ/tongue/removed_tongue_real = removed_tongue?.resolve() + if(!QDELETED(old_tongue)) + qdel(old_tongue) + if(!QDELETED(removed_tongue_real)) + removed_tongue_real.Insert(was_zombie, special = TRUE) + + var/obj/item/bodypart/head/head = was_zombie.get_bodypart(BODY_ZONE_HEAD) + if(!QDELETED(head)) + head.can_dismember = initial(head.can_dismember) -/datum/species/zombie/infectious/on_species_loss(mob/living/carbon/human/was_zombie, datum/species/new_species, pref_load) - . = ..() - REMOVE_TRAIT(was_zombie, TRAIT_COMBAT_MODE_LOCK, SPECIES_TRAIT) qdel(was_zombie.GetComponent(/datum/component/mutant_hands)) qdel(was_zombie.GetComponent(/datum/component/regenerator)) - was_zombie.physiology.stamina_mod /= 0.33 + LAZYREMOVE(was_zombie.physiology.max_stun_len, max_stun_length) + if(!isnull(movespeed_mod)) + was_zombie.remove_movespeed_modifier(movespeed_mod) + was_zombie.physiology.stamina_mod /= stamina_modifier + was_zombie.physiology.damage_resistance -= damage_modifier + was_zombie.remove_traits(zombie_traits | unique_traits, TRAIT_STATUS_EFFECT(id)) + was_zombie.lighting_cutoff_red = initial(was_zombie.lighting_cutoff_red) + was_zombie.lighting_cutoff_green = initial(was_zombie.lighting_cutoff_green) + was_zombie.lighting_cutoff_blue = initial(was_zombie.lighting_cutoff_blue) + was_zombie.update_sight() + was_zombie.cure_husk(id) + restore_zombie_temperature() + remove_zombie_biotypes() + + var/obj/item/organ/zombie_infection/infection = was_zombie.get_organ_slot(ORGAN_SLOT_ZOMBIE) + if(!QDELETED(infection)) + UnregisterSignal(infection, COMSIG_ORGAN_REMOVED) + qdel(infection) + + UnregisterSignal(was_zombie, COMSIG_SPECIES_GAIN) + UnregisterSignal(was_zombie, COMSIG_LIVING_DEATH) + UnregisterSignal(was_zombie, COMSIG_CARBON_POST_ATTACH_LIMB) + UnregisterSignal(was_zombie, COMSIG_CARBON_POST_REMOVE_LIMB) + +/datum/status_effect/zombie/proc/add_zombie_biotypes() + if(!(owner.mob_biotypes & MOB_UNDEAD)) + owner.mob_biotypes |= MOB_UNDEAD + added_biotypes = MOB_UNDEAD + + if(owner.mob_biotypes & MOB_ORGANIC) + owner.mob_biotypes &= ~MOB_ORGANIC + removed_biotypes = MOB_ORGANIC -/datum/species/zombie/infectious/check_roundstart_eligible() - return FALSE +/datum/status_effect/zombie/proc/remove_zombie_biotypes() + owner.mob_biotypes &= ~added_biotypes + owner.mob_biotypes |= removed_biotypes -/datum/species/zombie/infectious/spec_stun(mob/living/carbon/human/H,amount) - return min(2 SECONDS, amount) +/datum/status_effect/zombie/proc/set_zombie_temperature() + var/mob/living/carbon/human/zombie = owner + zombie.dna.species.bodytemp_normal = T0C + zombie.dna.species.bodytemp_heat_damage_limit = FIRE_MINIMUM_TEMPERATURE_TO_EXIST -// Weaker subtype - less healing, weaker attacks, etc -/datum/species/zombie/infectious/mindless - name = "Mindless Infectious Zombie" - id = SPECIES_ZOMBIE_INFECTIOUS_MINDLESS +/datum/status_effect/zombie/proc/restore_zombie_temperature() + var/mob/living/carbon/human/zombie = owner + zombie.dna.species.bodytemp_normal = initial(zombie.dna.species.bodytemp_normal) + zombie.dna.species.bodytemp_heat_damage_limit = initial(zombie.dna.species.bodytemp_heat_damage_limit) + +/datum/status_effect/zombie/proc/zombie_limb_gained(mob/living/carbon/human/zombie, obj/item/bodypart/head/limb) + SIGNAL_HANDLER + if(istype(limb)) + limb.can_dismember = TRUE + +/datum/status_effect/zombie/proc/zombie_limb_lost(mob/living/carbon/human/zombie, obj/item/bodypart/head/limb) + SIGNAL_HANDLER + if(istype(limb)) + limb.can_dismember = initial(limb.can_dismember) + +/datum/status_effect/zombie/proc/organ_removed(obj/item/organ/zombie_infection/infection, ...) + SIGNAL_HANDLER + UnregisterSignal(infection, COMSIG_ORGAN_REMOVED) + qdel(src) + +/datum/status_effect/zombie/proc/zombie_died_somehow(mob/living/carbon/human/zombie, gibbed) + SIGNAL_HANDLER + if(gibbed) + return + + var/obj/item/organ/zombie_infection/infection = owner.get_organ_slot(ORGAN_SLOT_ZOMBIE) + qdel(infection) // this will in turn qdel this status effect + +/datum/status_effect/zombie/proc/zombie_species_changed(mob/living/carbon/human/zombie, ...) + SIGNAL_HANDLER + + set_zombie_temperature() + add_zombie_biotypes() + +/datum/status_effect/zombie/mindless regen_time = 10 SECONDS regen_amount = 0.2 zombie_hand = /obj/item/mutant_hand/zombie/weak + movespeed_mod = /datum/movespeed_modifier/zombie/mindless -/datum/species/zombie/infectious/mindless/on_species_gain(mob/living/carbon/human/new_zombie, datum/species/old_species, pref_load, regenerate_icons) - . = ..() - new_zombie.add_movespeed_modifier(/datum/movespeed_modifier/mindless_zombie) - -/datum/species/zombie/infectious/mindless/on_species_loss(mob/living/carbon/human/was_zombie, datum/species/new_species, pref_load) - . = ..() - was_zombie.remove_movespeed_modifier(/datum/movespeed_modifier/mindless_zombie) - -/datum/movespeed_modifier/mindless_zombie - multiplicative_slowdown = 0.75 - -// Your skin falls off -/datum/species/human/krokodil_addict - name = "\improper Krokodil Human" - id = SPECIES_ZOMBIE_KROKODIL - examine_limb_id = SPECIES_HUMAN - changesource_flags = MIRROR_BADMIN | WABBAJACK | ERT_SPAWN - - bodypart_overrides = list( - BODY_ZONE_HEAD = /obj/item/bodypart/head/zombie, - BODY_ZONE_CHEST = /obj/item/bodypart/chest/zombie, - BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/zombie, - BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/zombie, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/zombie, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/zombie +/datum/status_effect/zombie/uninfected + regen_amount = 0 + damage_modifier = 0 + stamina_modifier = 1 + zombie_hand = null + movespeed_mod = null + max_stun_length = INFINITY + unique_traits = list( + TRAIT_NOBLOOD, + TRAIT_SUCCUMB_OVERRIDE, ) + +/datum/status_effect/zombie/uninfected/organ_removed(obj/item/organ/zombie_infection/infection, ...) + return // nope + +/datum/status_effect/zombie/uninfected/zombie_died_somehow(mob/living/carbon/human/zombie, gibbed) + return // you're stuck with it bud + +/datum/movespeed_modifier/zombie + multiplicative_slowdown = 1.0 + +/datum/movespeed_modifier/zombie/mindless + multiplicative_slowdown = parent_type::multiplicative_slowdown + 0.5 diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 7e5018a88e0d..0ab13a4aa3d4 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -492,8 +492,8 @@ // A simple weighted average that simplifies down to "total synth volume / total blood volume" i.e. "how much of our blood is synthetic" AddComponent(/datum/component/synth_blood, (added_synth_volume + existing_synth_volume) / (blood_added + cached_blood_volume)) - if(chem.data?["blood_type"]) - var/datum/blood_type/donor_type = chem.data["blood_type"] + if(chem.data?[BLOOD_DATA_TYPE]) + var/datum/blood_type/donor_type = chem.data[BLOOD_DATA_TYPE] if(!(donor_type.type_key() in blood_type.compatible_types)) reagents.add_reagent(/datum/reagent/toxin, reac_volume * 0.5) return COMPONENT_NO_EXPOSE_REAGENTS diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index 7944351ca463..a40de0b4df63 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -110,6 +110,9 @@ emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE | EMOTE_IMPORTANT cooldown = (15 SECONDS) can_use_flags = EMOTE_CANUSE_UNCONSCIOUS | EMOTE_CANUSE_HARDCRIT | EMOTE_CANUSE_SOFTCRIT + sound_wall_ignore = TRUE + vary = TRUE + sound_volume = 200 /datum/emote/living/deathgasp/run_emote(mob/living/user, params, type_override, intentional) if(!is_type_in_typecache(user, mob_type_allowed_typecache)) @@ -119,19 +122,21 @@ message_animal_or_basic = custom_message . = ..() message_animal_or_basic = initial(message_animal_or_basic) + +/datum/emote/living/deathgasp/get_sound(mob/living/user) + . = ..() + if(!. && user.death_sound) + return user.death_sound + +/datum/emote/living/deathgasp/should_play_sound(mob/living/user, intentional = FALSE) if(!user.can_speak() || user.get_oxy_loss() >= 50) - return //stop the sound if oxyloss too high/cant speak - // DARKPACK EDIT ADD START - Torpor + return FALSE //stop the sound if oxyloss too high/cant speak + // DARKPACK EDIT ADD START - VAMPIRE - (Torpor) // Prevent mobs in a deathcoma from revealing they actually died if (HAS_TRAIT(user, TRAIT_DEATHCOMA)) - return + return FALSE // DARKPACK EDIT ADD END - // For masks that give unique death sounds - var/obj/item/clothing/mask/mask = astype(user.get_item_by_slot(ITEM_SLOT_MASK), /obj/item/clothing/mask) - if(mask?.unique_death) - playsound(user, mask.unique_death, 200, TRUE, TRUE) - else if(user.death_sound) - playsound(user, user.death_sound, 200, TRUE, TRUE) + return ..() /datum/emote/living/drool key = "drool" @@ -207,24 +212,19 @@ message_mime = "gasps silently!" emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE can_use_flags = EMOTE_CANUSE_UNCONSCIOUS | EMOTE_CANUSE_HARDCRIT | EMOTE_CANUSE_SOFTCRIT - -/datum/emote/living/gasp/get_sound(mob/living/user) - if(HAS_MIND_TRAIT(user, TRAIT_MIMING)) - return - if(!ishuman(user)) - return - - var/mob/living/carbon/human/human_user = user - if(human_user.physique == FEMALE) - return pick( + sounds_by_mobtype = list( + /mob/living/carbon/human = list( + MALE = list( + 'sound/mobs/humanoids/human/gasp/gasp_male1.ogg', + 'sound/mobs/humanoids/human/gasp/gasp_male2.ogg', + ), + FEMALE = list( 'sound/mobs/humanoids/human/gasp/gasp_female1.ogg', 'sound/mobs/humanoids/human/gasp/gasp_female2.ogg', 'sound/mobs/humanoids/human/gasp/gasp_female3.ogg', - ) - return pick( - 'sound/mobs/humanoids/human/gasp/gasp_male1.ogg', - 'sound/mobs/humanoids/human/gasp/gasp_male2.ogg', - ) + ), + ), + ) /datum/emote/living/gasp/shock key = "gaspshock" @@ -309,15 +309,19 @@ emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE manual_specific_emote_audio_cooldown = 8 SECONDS vary = TRUE + sounds_by_mobtype = list( + /mob/living/carbon/human = list( + MALE = list( + 'sound/mobs/humanoids/human/laugh/manlaugh1.ogg', + 'sound/mobs/humanoids/human/laugh/manlaugh2.ogg', + ), + FEMALE = 'sound/mobs/humanoids/human/laugh/womanlaugh.ogg', + ), + ) /datum/emote/living/laugh/can_run_emote(mob/living/user, status_check = TRUE , intentional, params) return ..() && user.can_speak(allow_mimes = TRUE) -/datum/emote/living/laugh/get_sound(mob/living/carbon/human/user) - if(!istype(user)) - return - return user.dna.species.get_laugh_sound(user) - /datum/emote/living/look key = "look" key_third_person = "looks" @@ -381,11 +385,12 @@ message_mime = "acts out an exaggerated silent sneeze." emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE vary = TRUE - -/datum/emote/living/sneeze/get_sound(mob/living/carbon/human/user) - if(!istype(user)) - return - return user.dna.species.get_sneeze_sound(user) + sounds_by_mobtype = list( + /mob/living/carbon/human = list( + MALE = 'sound/mobs/humanoids/human/sneeze/male_sneeze1.ogg', + FEMALE = 'sound/mobs/humanoids/human/sneeze/female_sneeze1.ogg', + ), + ) /datum/emote/living/cough key = "cough" @@ -394,15 +399,30 @@ message_mime = "acts out an exaggerated cough!" vary = TRUE emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE | EMOTE_RUNECHAT + sounds_by_mobtype = list( + /mob/living/carbon/human = list( + MALE = list( + 'sound/mobs/humanoids/human/cough/male_cough1.ogg', + 'sound/mobs/humanoids/human/cough/male_cough2.ogg', + 'sound/mobs/humanoids/human/cough/male_cough3.ogg', + 'sound/mobs/humanoids/human/cough/male_cough4.ogg', + 'sound/mobs/humanoids/human/cough/male_cough5.ogg', + 'sound/mobs/humanoids/human/cough/male_cough6.ogg', + ), + FEMALE = list( + 'sound/mobs/humanoids/human/cough/female_cough1.ogg', + 'sound/mobs/humanoids/human/cough/female_cough2.ogg', + 'sound/mobs/humanoids/human/cough/female_cough3.ogg', + 'sound/mobs/humanoids/human/cough/female_cough4.ogg', + 'sound/mobs/humanoids/human/cough/female_cough5.ogg', + 'sound/mobs/humanoids/human/cough/female_cough6.ogg', + ), + ), + ) /datum/emote/living/cough/can_run_emote(mob/user, status_check = TRUE , intentional, params) return !HAS_TRAIT(user, TRAIT_SOOTHED_THROAT) && ..() -/datum/emote/living/cough/get_sound(mob/living/carbon/human/user) - if(!istype(user)) - return - return user.dna.species.get_cough_sound(user) - /datum/emote/living/wheeze key = "wheeze" key_third_person = "wheezes" @@ -427,6 +447,25 @@ manual_specific_emote_audio_cooldown = 10 SECONDS forced_specific_emote_audio_cooldown = 4 SECONDS vary = TRUE + sounds_by_mobtype = list( + /mob/living/carbon/human = list( + MALE = list( + 'sound/mobs/humanoids/human/scream/malescream_1.ogg', + 'sound/mobs/humanoids/human/scream/malescream_2.ogg', + 'sound/mobs/humanoids/human/scream/malescream_3.ogg', + 'sound/mobs/humanoids/human/scream/malescream_4.ogg', + 'sound/mobs/humanoids/human/scream/malescream_5.ogg', + 'sound/mobs/humanoids/human/scream/malescream_6.ogg', + ), + FEMALE = list( + 'sound/mobs/humanoids/human/scream/femalescream_1.ogg', + 'sound/mobs/humanoids/human/scream/femalescream_2.ogg', + 'sound/mobs/humanoids/human/scream/femalescream_3.ogg', + 'sound/mobs/humanoids/human/scream/femalescream_4.ogg', + 'sound/mobs/humanoids/human/scream/femalescream_5.ogg', + ), + ), + ) /datum/emote/living/scream/run_emote(mob/user, params, type_override, intentional = FALSE) if(!intentional && HAS_TRAIT(user, TRAIT_ANALGESIA)) @@ -439,10 +478,13 @@ return "makes a loud and pained whimper." /datum/emote/living/scream/get_sound(mob/living/user) - if(!ishuman(user)) + . = ..() + if(!ishuman(user) || !.) return var/mob/living/carbon/human/humie = user - return humie.dna.species.get_scream_sound(user) + //Rare chance for this banger of a classic to play instead of the avarage joe screams + if(humie.physique == MALE && prob(1) && ishumanbasic(humie)) + return 'sound/mobs/humanoids/human/scream/wilhelm_scream.ogg' /datum/emote/living/scowl key = "scowl" @@ -477,6 +519,12 @@ message_mime = "acts out an exaggerated silent sigh." emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE vary = TRUE + sounds_by_mobtype = list( + /mob/living/carbon/human = list( + MALE = SFX_MALE_SIGH, + FEMALE = SFX_FEMALE_SIGH, + ), + ) /datum/emote/living/sigh/run_emote(mob/living/user, params, type_override, intentional) . = ..() @@ -485,11 +533,6 @@ var/image/emote_animation = image('icons/mob/human/emote_visuals.dmi', user, "sigh") flick_overlay_global(emote_animation, GLOB.clients, 2.0 SECONDS) -/datum/emote/living/sigh/get_sound(mob/living/carbon/human/user) - if(!istype(user)) - return - return user.dna.species.get_sigh_sound(user) - /datum/emote/living/sit key = "sit" key_third_person = "sits" @@ -512,11 +555,12 @@ message_mime = "sniffs silently." emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE vary = TRUE - -/datum/emote/living/sniff/get_sound(mob/living/carbon/human/user) - if(!istype(user)) - return - return user.dna.species.get_sniff_sound(user) + sounds_by_mobtype = list( + /mob/living/carbon/human = list( + MALE = 'sound/mobs/humanoids/human/sniff/male_sniff.ogg', + FEMALE = 'sound/mobs/humanoids/human/sniff/female_sniff.ogg', + ), + ) /datum/emote/living/snore key = "snore" @@ -525,12 +569,12 @@ message_mime = "sleeps soundly." emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE can_use_flags = EMOTE_CANUSE_UNCONSCIOUS - -// eventually we want to give species their own "snoring" sounds -/datum/emote/living/snore/get_sound(mob/living/carbon/human/user) - if(!istype(user)) - return - return user.dna.species.get_snore_sound(user) + sounds_by_mobtype = list( + /mob/living/carbon/human = list( + MALE = SFX_SNORE_MALE, + FEMALE = SFX_SNORE_FEMALE, + ), + ) /datum/emote/living/stare key = "stare" @@ -821,13 +865,45 @@ message_mime = "makes a rude gesture!" emote_type = EMOTE_AUDIBLE -/datum/emote/living/carbon/whistle - key = "whistle" - key_third_person = "whistles" - message = "whistles." - message_mime = "whistles silently!" +///Abstract type for emotes that can be run by cats and those with a felinid tongue +/datum/emote/living/cat + abstract_type = /datum/emote/living/cat + trait_required = TRAIT_CAT_EMOTES_ALLOWED + +/datum/emote/living/cat/meow + key = "meow" + key_third_person = "meows" + vary = TRUE + message = "meows!" + message_mime = "meows silently." + emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE + sound = SFX_CAT_MEOW + +/datum/emote/living/cat/purr + key = "purr" + key_third_person = "purrs" vary = TRUE + message = "purrs." + emote_type = EMOTE_AUDIBLE + sound = SFX_CAT_PURR + +///Abstract type for emotes that can be run by mothroaches and those with a moth tongue +/datum/emote/living/moth + abstract_type = /datum/emote/living/moth + trait_required = TRAIT_MOTH_EMOTES_ALLOWED + +/datum/emote/living/moth/mchitter + key = "chitter" + key_third_person = "chitters" + message = "chitters!" + message_mime = "chitters silently?" emote_type = EMOTE_AUDIBLE | EMOTE_VISIBLE + sound = 'sound/mobs/humanoids/moth/moth_chitter.ogg' -/datum/emote/living/carbon/whistle/get_sound(mob/living/user) - return 'sound/mobs/humanoids/human/whistle/whistle1.ogg' +/datum/emote/living/moth/msqueak + key = "squeak" + key_third_person = "squeaks" + message = "squeaks!" + message_mime = "squeaks silently?" + emote_type = EMOTE_AUDIBLE | EMOTE_VISIBLE + sound = 'sound/mobs/humanoids/moth/moth_squeak.ogg' diff --git a/code/modules/mob/living/inhand_holder.dm b/code/modules/mob/living/inhand_holder.dm index 509d4e4f0048..5ee53d5a9bd7 100644 --- a/code/modules/mob/living/inhand_holder.dm +++ b/code/modules/mob/living/inhand_holder.dm @@ -85,7 +85,8 @@ if(display_messages) to_chat(captor, span_warning("[released_mob] wriggles free!")) captor.dropItemToGround(src) - released_mob.forceMove(drop_location()) + else + released_mob.forceMove(drop_location()) released_mob.reset_perspective() released_mob.setDir(SOUTH) if(display_messages) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 87da311cbfae..849be0838ffb 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -528,7 +528,8 @@ //mob verbs are a lot faster than object verbs //for more info on why this is not atom/pull, see examinate() in mob.dm -GAME_VERB(/mob/living, pulled, "Pull", null, atom/movable/thing_pulled as mob|obj in oview(1)) +GAME_VERB_CONTEXT(/mob/living, pulled, "Pull", "", null, /atom/movable) + VERB_ARG_TYPED(thing_pulled, VERB_ARG_TYPE_MOB | VERB_ARG_TYPE_OBJ, VERB_ARG_SOURCE_VIEW, /atom/movable) if(istype(thing_pulled) && Adjacent(thing_pulled)) start_pulling(thing_pulled) @@ -552,7 +553,8 @@ GAME_VERB(/mob/living, pulled, "Pull", null, atom/movable/thing_pulled as mob|ob log_message("points at [pointing_at]", LOG_EMOTE) visible_message(span_infoplain("[span_name("[src]")] points at [pointing_at]."), span_notice("You point at [pointing_at].")) -GAME_VERB_HIDDEN(/mob/living, succumb, "succumb", whispered as num|null) +GAME_VERB_HIDDEN(/mob/living, succumb, "succumb") + VERB_ARG(whispered, VERB_ARG_TYPE_NUM, VERB_ARG_SOURCE_INPUT) if (!CAN_SUCCUMB(src)) if(HAS_TRAIT(src, TRAIT_SUCCUMB_OVERRIDE)) if(whispered) @@ -843,9 +845,10 @@ GAME_VERB_PROC(/mob/living, mob_sleep, "Sleep", null) update_stamina() SEND_SIGNAL(src, COMSIG_LIVING_HEALTH_UPDATE) -/mob/living/update_health_hud() +/mob/living/update_health_hud(healthpercent) var/severity = 0 - var/healthpercent = (health/maxHealth) * 100 + if(!healthpercent) + healthpercent = (health/maxHealth) * 100 var/atom/movable/screen/healthdoll/living/livingdoll = hud_used?.screen_objects[HUD_MOB_HEALTHDOLL] if(istype(livingdoll)) //to really put you in the boots of a simplemob switch(healthpercent) @@ -873,6 +876,8 @@ GAME_VERB_PROC(/mob/living, mob_sleep, "Sleep", null) livingdoll.add_filter("mob_shape_mask", 1, alpha_mask_filter(icon = mob_mask)) livingdoll.add_filter("inset_drop_shadow", 2, drop_shadow_filter(size = -1)) livingdoll.health_overlay.maptext = MAPTEXT("
[round(healthpercent, 1)]%
") + if(livingdoll.hovering) + livingdoll.update_appearance(UPDATE_ICON) if(severity > 0) overlay_fullscreen("brute", /atom/movable/screen/fullscreen/brute, severity) @@ -2409,8 +2414,8 @@ GLOBAL_LIST_EMPTY(fire_appearances) var/turf/check_turf = get_step_multiz(src, direction == DOWN ? NONE : direction) if(!get_step_multiz(src, direction)) //We are at the edge z-level. to_chat(src, span_warning("There's nothing interesting there.")) - return - else if(!istransparentturf(check_turf)) //There is no turf we can look through above us + return null + if(!istransparentturf(check_turf) && !HAS_TRAIT(src, TRAIT_XRAY_VISION)) //There is no turf we can look through above us var/turf/front_hole = get_step(check_turf, dir) if(istransparentturf(front_hole)) check_turf = front_hole @@ -2421,7 +2426,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) break if(!istransparentturf(check_turf)) to_chat(src, span_warning("You can't see through the floor [direction == DOWN ? "below" : "above"] you.")) - return + return null return direction == DOWN ? get_step_multiz(check_turf, DOWN) : check_turf /** diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index e6014d7bd961..86be920413be 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -219,9 +219,9 @@ return clamp(w_class * 8, 20, 100) // Multiply the item's weight class by 8, then clamp the value between 20 and 100 return 0 // plays no sound -/mob/living/proc/set_combat_mode(new_mode, silent = TRUE) +/mob/living/proc/set_combat_mode(new_mode, silent = TRUE, force = FALSE) - if(HAS_TRAIT(src, TRAIT_COMBAT_MODE_LOCK)) + if(HAS_TRAIT(src, TRAIT_COMBAT_MODE_LOCK) && !force) return if(combat_mode == new_mode) diff --git a/code/modules/mob/living/navigation.dm b/code/modules/mob/living/navigation.dm index 7d0ef67d107a..6e4111e6c2cd 100644 --- a/code/modules/mob/living/navigation.dm +++ b/code/modules/mob/living/navigation.dm @@ -1,6 +1,8 @@ #define MAX_NAVIGATE_RANGE 125 /mob/living + /// Are we currently pathfinding for the navigate verb? + var/navigating = FALSE /// Cooldown of the navigate() verb. COOLDOWN_DECLARE(navigate_cooldown) @@ -16,6 +18,9 @@ GAME_VERB_HIDDEN(/mob/living, navigate, "Navigate") addtimer(CALLBACK(src, PROC_REF(cut_navigation)), world.tick_lag) balloon_alert(src, "navigation path removed") return + if(navigating) + balloon_alert(src, "busy navigating!") + return if(!COOLDOWN_FINISHED(src, navigate_cooldown)) balloon_alert(src, "navigation on cooldown!") return @@ -68,10 +73,18 @@ GAME_VERB_HIDDEN(/mob/living, navigate, "Navigate") finding_zchange = TRUE if(!isatom(navigate_target)) - stack_trace("Navigate target ([navigate_target]) is not an atom, somehow.") - return + CRASH("Navigate target ([navigate_target]) is not an atom, somehow.") - var/list/path = get_path_to(src, navigate_target, MAX_NAVIGATE_RANGE, mintargetdist = 1, access = get_access(), skip_first = FALSE) + navigating = TRUE + var/datum/callback/await = list(CALLBACK(src, PROC_REF(finish_navigation), navigate_target, finding_zchange)) + if(!SSpathfinder.pathfind(src, navigate_target, MAX_NAVIGATE_RANGE, mintargetdist = 1, access = get_access(), skip_first = FALSE, on_finish = await)) + navigating = FALSE + balloon_alert(src, "failed to begin navigation!") + +/mob/living/proc/finish_navigation(turf/navigate_target, finding_zchange, list/path) + navigating = FALSE + if(!client) + return if(!length(path)) balloon_alert(src, "no valid path with current access!") return diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index dfd30cf0d8f5..eeb32b83e502 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -634,6 +634,15 @@ GAME_VERB_PROC_DESC(/mob/living/silicon/ai, ai_hologram_change, "Change Hologram if(incapacitated) return + ai_holocolor = tgui_color_picker(usr, "Choose a color for your hologram", "Hologram Color") + if(ai_holocolor) + var/ai_holo_hsv = rgb2hsv(ai_holocolor) + var/default_hsv = rgb2hsv(COLOR_AI_HOLOGRAM_BLUE) + + default_hsv[1] = ai_holo_hsv[1] + + ai_holocolor = hsv2rgb(default_hsv) + var/static/list/choices = assoc_to_keys(GLOB.ai_hologram_category_options) + HOLOGRAM_CHOICE_CHARACTER var/choice = tgui_input_list(usr, "What kind of hologram do you want?", "Customize", choices) if(!choice) @@ -859,7 +868,7 @@ GAME_VERB_PROC_DESC(/mob/living/silicon/ai, set_automatic_say_channel, "Set Auto var/rendered = "[start][span_name("[hrefpart][namepart] ([jobpart]) ")][treated_message]" if (client?.prefs.read_preference(/datum/preference/toggle/enable_runechat) && (client.prefs.read_preference(/datum/preference/toggle/enable_runechat_non_mobs) || ismob(speaker))) - create_chat_message(speaker, message_language, raw_message, spans) + create_chat_message(speaker, message_language, raw_translation, spans) show_message(rendered, 2) /mob/living/silicon/ai/fully_replace_character_name(oldname, newname, log_new_name = FALSE) diff --git a/code/modules/mob/living/silicon/ai/ai_defines.dm b/code/modules/mob/living/silicon/ai/ai_defines.dm index 6ffcd8bc66c8..d2091e5082c6 100644 --- a/code/modules/mob/living/silicon/ai/ai_defines.dm +++ b/code/modules/mob/living/silicon/ai/ai_defines.dm @@ -157,6 +157,8 @@ VAR_FINAL/atom/lastloc /// The AI's hologram appearance, can be set by a client and is assigned on AI creation VAR_FINAL/mutable_appearance/hologram_appearance + /// The AI's hologram color, defaults to blue when nothing is selected + VAR_FINAL/ai_holocolor /// The AI's currently used holopad VAR_FINAL/obj/machinery/holopad/current diff --git a/code/modules/mob/living/silicon/robot/examine.dm b/code/modules/mob/living/silicon/robot/examine.dm index b3c8bc6111e3..cdfd76853fcd 100644 --- a/code/modules/mob/living/silicon/robot/examine.dm +++ b/code/modules/mob/living/silicon/robot/examine.dm @@ -9,7 +9,7 @@ var/obj/act_module = get_active_held_item() if(act_module) . += "[p_Theyre()] holding [icon2html(act_module, user)] \a [act_module]." - . += get_status_effect_examinations() + . += get_status_effect_examinations(user) if (get_brute_loss()) if (get_brute_loss() < maxHealth*0.5) . += span_warning("[p_They()] look[p_s()] slightly dented.") @@ -31,7 +31,13 @@ if(opened) . += span_warning("[p_Their()] cover is open and the power cell is [cell ? "installed" : "missing"].") else - . += "[p_Their()] cover is closed[locked ? "" : ", and looks unlocked"]." + var/cover_message = "[p_Their()] cover is closed" + if(locked) + if(user == src) + cover_message += ", though you may unlock it" + else + cover_message += ", and looks unlocked" + . += span_notice("[cover_message].") if(cell && cell.charge <= 0) . += span_warning("[p_Their()] battery indicator is blinking red!") diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index b14d5c7ab4cb..c1b88ceb8719 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -34,7 +34,7 @@ update_cell_hud_icon() -/mob/living/silicon/robot/update_health_hud() +/mob/living/silicon/robot/update_health_hud(healthpercent) if(!client || !hud_used) return diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 0ea9ca18201b..ade8110744b5 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -165,6 +165,8 @@ //Show alerts window if user clicked on "Show alerts" in chat if(href_list["showalerts"]) alert_control.ui_interact(src) + if(locked && href_list["unlock_self"]) + toggle_cover() /mob/living/silicon/robot/get_cell() return cell @@ -306,6 +308,15 @@ /mob/living/silicon/robot/proc/after_righted(mob/user) return +///Toggles the Cyborg's cover lock, user is provided only if it's someone else doing it (not the borg itself) +/mob/living/silicon/robot/proc/toggle_cover(mob/user) + locked = !locked + balloon_alert(src, "cover [locked ? "locked" : "unlocked"]") + update_icons() + if(user) + balloon_alert(user, "chassis cover [emagged ? "lock glitches" : "[locked ? "locked" : "unlocked"]"]") + logevent("[emagged ? "ChÃ¥vÃis" : "Chassis"] cover lock has been [locked ? "engaged" : "released"]") + /mob/living/silicon/robot/regenerate_icons() return update_icons() diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm index e83532242929..d92a040cba72 100644 --- a/code/modules/mob/living/silicon/robot/robot_defense.dm +++ b/code/modules/mob/living/silicon/robot/robot_defense.dm @@ -208,10 +208,7 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real if(!allowed(user)) balloon_alert(user, "access denied!") return ITEM_INTERACT_BLOCKING - locked = !locked - update_icons() - balloon_alert(user, "chassis cover [emagged ? "lock glitches" : "[locked ? "locked" : "unlocked"]"]") - logevent("[emagged ? "ChÃ¥vÃis" : "Chassis"] cover lock has been [locked ? "engaged" : "released"]") + toggle_cover(user) return ITEM_INTERACT_SUCCESS #define LOW_DAMAGE_UPPER_BOUND 1/3 diff --git a/code/modules/mob/living/silicon/robot/robot_model.dm b/code/modules/mob/living/silicon/robot/robot_model.dm index 4b2a7174fb4f..f88f64879f7b 100644 --- a/code/modules/mob/living/silicon/robot/robot_model.dm +++ b/code/modules/mob/living/silicon/robot/robot_model.dm @@ -101,6 +101,7 @@ var/obj/item/stack/sheet_module = added_module if(ispath(sheet_module.source, /datum/robot_energy_storage)) sheet_module.source = get_or_create_estorage(sheet_module.source) + LAZYADD(sheet_module.source.linked_modules, sheet_module) if(istype(sheet_module.source)) sheet_module.cost = max(sheet_module.cost, 1) // Must not cost 0 to prevent div/0 errors. @@ -1068,6 +1069,8 @@ var/energy ///Whether this resource should refill from the aether inside a charging station. var/renewable = TRUE + ///Lazylist of all modules linked to this energy storage, so using one will update all. + var/list/obj/item/stack/linked_modules /datum/robot_energy_storage/New(obj/item/robot_model/model) energy = max_energy @@ -1076,6 +1079,10 @@ RegisterSignal(model.robot, COMSIG_MOB_GET_STATUS_TAB_ITEMS, PROC_REF(get_status_tab_item)) RegisterSignal(model, COMSIG_QDELETING, PROC_REF(unregister_from_model)) +/datum/robot_energy_storage/Destroy(force) + LAZYCLEARLIST(linked_modules) + return ..() + /datum/robot_energy_storage/proc/unregister_from_model(obj/item/robot_model/model) SIGNAL_HANDLER if(model) @@ -1097,6 +1104,8 @@ /datum/robot_energy_storage/proc/add_charge(amount) energy = min(energy + amount, max_energy) + for(var/obj/item/stack/modules as anything in linked_modules) + modules.update_appearance(UPDATE_NAME) /datum/robot_energy_storage/material name = "generic material storage" diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index d1c5d2a5a341..a1c56b842c3d 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -63,16 +63,17 @@ var/static/list/traits_to_apply = list( TRAIT_ADVANCEDTOOLUSER, TRAIT_ASHSTORM_IMMUNE, + TRAIT_BRAWLING_KNOCKDOWN_BLOCKED, + TRAIT_FENCE_CLIMBER, TRAIT_LITERATE, TRAIT_MADNESS_IMMUNE, TRAIT_MARTIAL_ARTS_IMMUNE, + TRAIT_NEVER_CONSIDERED_ALIVE, TRAIT_NOFIRE_SPREAD, - TRAIT_BRAWLING_KNOCKDOWN_BLOCKED, - TRAIT_FENCE_CLIMBER, - TRAIT_SILICON_ACCESS, + TRAIT_NO_SLIP_ALL, TRAIT_REAGENT_SCANNER, + TRAIT_SILICON_ACCESS, TRAIT_UNOBSERVANT, - TRAIT_NO_SLIP_ALL, ) add_traits(traits_to_apply, ROUNDSTART_TRAIT) diff --git a/code/modules/mob/living/simple_animal/animal_defense.dm b/code/modules/mob/living/simple_animal/animal_defense.dm index ac3637d7fd26..0cbd9321a2ea 100644 --- a/code/modules/mob/living/simple_animal/animal_defense.dm +++ b/code/modules/mob/living/simple_animal/animal_defense.dm @@ -87,7 +87,7 @@ if(. && stat != DEAD) //successful larva bite var/damage_done = apply_damage(rand(L.melee_damage_lower, L.melee_damage_upper), BRUTE) if(damage_done > 0) - L.amount_grown = min(L.amount_grown + damage_done, L.max_grown) + L.amount_grown = min(L.amount_grown + damage_done, XENOMORPH_MAX_GROWTH) /mob/living/simple_animal/attack_drone(mob/living/basic/drone/user) if(user.combat_mode) //No kicking dogs even as a rogue drone. Use a weapon. diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 6c32c7a0e790..9e231b00fe89 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -125,6 +125,9 @@ //Check if they should have a stat panel, after they deadmined. client.set_stat_panel() + //Update the chat panel's job/character info for conditional highlights. + client.tgui_panel?.send_player_info() + log_message("Client [key_name(src)] has taken ownership of mob [src]([src.type])", LOG_OWNERSHIP) log_mob_tag("TAG: [tag] NEW OWNER: [key_name(src)]") SEND_SIGNAL(src, COMSIG_MOB_CLIENT_LOGIN, client) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index ed8212e468ac..ec702de5c5c1 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -565,7 +565,8 @@ GAME_VERB_PROC(/mob, Cell, "Cell", "Admin") * [this byond forum post](https://secure.byond.com/forum/?post=1326139&page=2#comment8198716) * for why this isn't atom/verb/examine() */ -GAME_VERB(/mob, examinate, "Examine", null, atom/examinify as mob|obj|turf) //It used to be oview(12), but I can't really say why +GAME_VERB_CONTEXT(/mob, examinate, "Examine", "", null, /atom) + VERB_ARG_TYPED(examinify, VERB_ARG_TYPE_MOB | VERB_ARG_TYPE_OBJ | VERB_ARG_TYPE_TURF, VERB_ARG_SOURCE_VIEW, /atom) DEFAULT_QUEUE_OR_CALL_VERB(VERB_CALLBACK(src, PROC_REF(run_examinate), examinify)) @@ -573,10 +574,7 @@ GAME_VERB(/mob, examinate, "Examine", null, atom/examinify as mob|obj|turf) //It if(QDELETED(examinify)) // since this can run async we might have had the atom get qdeleted already return - if(isarea(examinify)) - return - - if(isturf(examinify) && !(sight & SEE_TURFS) && !(examinify in view(client?.view || world.view, src))) + if(isturf(examinify) && !(sight & SEE_TURFS) && !(examinify in view(client ? client.view : world.view, src))) // shift-click catcher may issue examinate() calls for out-of-sight turfs return @@ -584,7 +582,7 @@ GAME_VERB(/mob, examinate, "Examine", null, atom/examinify as mob|obj|turf) //It if(is_blind()) //blind people see things differently (through touch) if(!blind_examine_check(examinify)) return - else if(examine_turf && !(examine_turf.luminosity || examine_turf.dynamic_lumcount) && \ + else if(examine_turf && !(examine_turf.luminosity || examine_turf.get_dynamic_lumcount()) && \ get_dist(src, examine_turf) > 1 && \ !has_nightvision()) // If you aren't blind, it's in darkness (that you can't see) and farther then next to you return @@ -907,10 +905,10 @@ GAME_VERB(/mob, reset_ui_positions_for_mob, "Reset UI Positions", "OOC") SStgui.reset_ui_position(src) //suppress the .click/dblclick macros so people can't use them to identify the location of items or aimbot -GAME_VERB_HIDDEN(/mob, DisClick, ".click", argu = null as anything, sec = "" as text, number1 = 0 as num , number2 = 0 as num) +GAME_VERB_NATIVE(/mob, DisClick, ".click", null, argu = null as anything, sec = "" as text, number1 = 0 as num, number2 = 0 as num) return -GAME_VERB_HIDDEN(/mob, DisDblClick, ".dblclick", argu = null as anything, sec = "" as text, number1 = 0 as num , number2 = 0 as num) +GAME_VERB_NATIVE(/mob, DisDblClick, ".dblclick", null, argu = null as anything, sec = "" as text, number1 = 0 as num, number2 = 0 as num) return /// Adds this list to the output to the stat browser @@ -1160,7 +1158,6 @@ GAME_VERB_HIDDEN(/mob, DisDblClick, ".dblclick", argu = null as anything, sec = if(oldname == newname) return FALSE if(!istext(newname) && !isnull(newname)) - stack_trace("[src] attempted to change its name from [oldname] to the non string value [newname]") return FALSE log_played_names( @@ -1202,6 +1199,7 @@ GAME_VERB_HIDDEN(/mob, DisDblClick, ".dblclick", argu = null as anything, sec = log_mob_tag("TAG: [tag] RENAMED: [key_name(src)]") SEND_SIGNAL(src, COMSIG_MOB_FULLY_RENAMED, oldname, newname) + return TRUE ///Updates GLOB.manifest records with new name , see mob/living/carbon/human @@ -1240,7 +1238,7 @@ GAME_VERB_HIDDEN(/mob, DisDblClick, ".dblclick", argu = null as anything, sec = SIGNAL_HANDLER return -/mob/proc/update_health_hud() +/mob/proc/update_health_hud(healthpercent) return /// Changes the stamina HUD based on new information @@ -1337,7 +1335,7 @@ GAME_VERB_HIDDEN(/mob, DisDblClick, ".dblclick", argu = null as anything, sec = var/turf/mob_location = get_turf(src) var/area/mob_area = get_area(src) - if(mob_location.get_lumcount() > light_amount) + if(mob_location.check_lumcount_above(light_amount)) return TRUE else if(!mob_area.static_lighting) return TRUE diff --git a/code/modules/mob/mob_say.dm b/code/modules/mob/mob_say.dm index 6b4706fe6ea9..99aba87e1203 100644 --- a/code/modules/mob/mob_say.dm +++ b/code/modules/mob/mob_say.dm @@ -1,7 +1,8 @@ //Speech verbs. ///what clients use to speak. when you type a message into the chat bar in say mode, this is the first thing that goes off serverside. -GAME_VERB(/mob, say_verb, VERB_SAY, null, message as text) +GAME_VERB(/mob, say_verb, VERB_SAY, null) + VERB_ARG(message, VERB_ARG_TYPE_TEXT, VERB_ARG_SOURCE_INPUT) if(GLOB.say_disabled) //This is here to try to identify lag problems to_chat(usr, span_danger("Speech is currently admin-disabled.")) @@ -13,7 +14,8 @@ GAME_VERB(/mob, say_verb, VERB_SAY, null, message as text) QUEUE_OR_CALL_VERB_FOR(VERB_CALLBACK(src, TYPE_PROC_REF(/atom/movable, say), message), SSspeech_controller) ///Whisper verb -GAME_VERB(/mob, whisper_verb, VERB_WHISPER, null, message as text) +GAME_VERB(/mob, whisper_verb, VERB_WHISPER, null) + VERB_ARG(message, VERB_ARG_TYPE_TEXT, VERB_ARG_SOURCE_INPUT) if(GLOB.say_disabled) //This is here to try to identify lag problems to_chat(usr, span_danger("Speech is currently admin-disabled.")) @@ -33,7 +35,8 @@ GAME_VERB(/mob, whisper_verb, VERB_WHISPER, null, message as text) say(message, language = language) ///The me emote verb -GAME_VERB(/mob, me_verb, VERB_ME, null, message as text) +GAME_VERB(/mob, me_verb, VERB_ME, null) + VERB_ARG(message, VERB_ARG_TYPE_TEXT, VERB_ARG_SOURCE_INPUT) if(GLOB.say_disabled) //This is here to try to identify lag problems to_chat(usr, span_danger("Speech is currently admin-disabled.")) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index d1d3225f0e2e..d4f733ba5b9e 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -132,31 +132,16 @@ SetInvisibility(INVISIBILITY_MAXIMUM) return ..() -/mob/living/carbon/human/AIize(client/preference_source, transfer_after = TRUE) - if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) - return - - return ..() +/mob/proc/Robotize(delete_items = FALSE) + var/mob/living/silicon/robot/new_borg = transform_into_mob(/mob/living/silicon/robot, delete_items) -/mob/proc/Robotize(delete_items = 0, transfer_after = TRUE) - if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) + if(!new_borg) return - ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) - var/mob/living/silicon/robot/new_borg = new /mob/living/silicon/robot(loc) - - if(client) - new_borg.set_gender(client) - new_borg.SetInvisibility(INVISIBILITY_NONE) - if(client?.prefs.read_preference(/datum/preference/name/cyborg) != DEFAULT_CYBORG_NAME) - new_borg.apply_pref_name(/datum/preference/name/cyborg, client) - - if(mind) //TODO //TODO WHAT - if(!transfer_after) - mind.active = FALSE - mind.transfer_to(new_borg, TRUE) - else if(transfer_after) - new_borg.PossessByPlayer(key) + if(new_borg.client) + new_borg.set_gender(new_borg.client) + if(new_borg.client.prefs.read_preference(/datum/preference/name/cyborg) != DEFAULT_CYBORG_NAME) + new_borg.apply_pref_name(/datum/preference/name/cyborg, new_borg.client) if(new_borg.mmi) new_borg.mmi.name = "[initial(new_borg.mmi.name)]: [real_name]" @@ -169,25 +154,9 @@ new_borg.job = JOB_CYBORG new_borg.notify_ai(AI_NOTIFICATION_NEW_BORG) - . = new_borg if(new_borg.ckey && is_banned_from(new_borg.ckey, JOB_CYBORG)) INVOKE_ASYNC(new_borg, TYPE_PROC_REF(/mob/living/silicon/robot, replace_banned_cyborg)) - qdel(src) - -/mob/living/Robotize(delete_items = 0, transfer_after = TRUE) - if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) - return - ADD_TRAIT(src, TRAIT_NO_TRANSFORM, TEMPORARY_TRANSFORMATION_TRAIT) - Paralyze(1, ignore_canstun = TRUE) - - drop_everything(delete_items) - - regenerate_icons() - icon = null - SetInvisibility(INVISIBILITY_MAXIMUM) - - REMOVE_TRAIT(src, TRAIT_NO_TRANSFORM, TEMPORARY_TRANSFORMATION_TRAIT) - return ..() + return new_borg /mob/living/silicon/robot/proc/replace_banned_cyborg() to_chat(src, "You are job banned from cyborg! Appeal your job ban if you want to avoid this in the future!") @@ -198,238 +167,89 @@ message_admins("[key_name_admin(chosen_one)] has taken control of ([key_name_admin(src)]) to replace a jobbanned player.") key = chosen_one.key -//human -> alien -/mob/living/carbon/human/proc/Alienize() - if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) - return - ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) - add_traits(list(TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED), TRAIT_GENERIC) - for(var/obj/item/W in src) - dropItemToGround(W) - regenerate_icons() - icon = null - SetInvisibility(INVISIBILITY_MAXIMUM) - for(var/t in bodyparts) - qdel(t) - - var/alien_caste = pick("Hunter","Sentinel","Drone") - var/mob/living/carbon/alien/adult/new_xeno - switch(alien_caste) - if("Hunter") - new_xeno = new /mob/living/carbon/alien/adult/hunter(loc) - if("Sentinel") - new_xeno = new /mob/living/carbon/alien/adult/sentinel(loc) - if("Drone") - new_xeno = new /mob/living/carbon/alien/adult/drone(loc) - - new_xeno.set_combat_mode(TRUE) - new_xeno.PossessByPlayer(key) - - to_chat(new_xeno, span_boldnotice("You are now an alien.")) - qdel(src) - return new_xeno - -/mob/living/carbon/human/proc/slimeize(reproduce as num) - if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) - return - ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) - add_traits(list(TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED), TRAIT_GENERIC) - for(var/obj/item/W in src) - dropItemToGround(W) - regenerate_icons() - icon = null - SetInvisibility(INVISIBILITY_MAXIMUM) - for(var/t in bodyparts) - qdel(t) - - var/mob/living/basic/slime/new_slime - if(reproduce) - var/number = pick(14;2,3,4) //reproduce (has a small chance of producing 3 or 4 offspring) - var/list/babies = list() - for(var/i in 1 to number) - var/mob/living/basic/slime/M = new/mob/living/basic/slime(loc) - M.set_nutrition(round(nutrition/number)) - step_away(M,src) - babies += M - new_slime = pick(babies) - else - new_slime = new /mob/living/basic/slime(loc) - new_slime.set_combat_mode(TRUE) - new_slime.PossessByPlayer(key) - - to_chat(new_slime, span_boldnotice("You are now a slime. Skreee!")) - qdel(src) - return new_slime - /mob/proc/become_overmind(starting_points = OVERMIND_STARTING_POINTS) var/mob/eye/blob/B = new /mob/eye/blob(get_turf(src), starting_points) B.PossessByPlayer(key) . = B qdel(src) +//human -> alien +/mob/proc/Alienize() + var/mob/living/carbon/alien/adult/new_xeno = transform_into_mob(pick(/mob/living/carbon/alien/adult/hunter, /mob/living/carbon/alien/adult/sentinel, /mob/living/carbon/alien/adult/drone)) + if(!new_xeno) + return + + to_chat(new_xeno, span_boldnotice("You are now an alien. Hiss.")) -/mob/living/carbon/human/proc/corgize() - if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) +/mob/proc/slimeize(reproduce) + var/mob/living/basic/slime/new_slime = transform_into_mob(/mob/living/basic/slime) + if(!new_slime) return - ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) - Paralyze(1, ignore_canstun = TRUE) - for(var/obj/item/W in src) - dropItemToGround(W) - regenerate_icons() - icon = null - SetInvisibility(INVISIBILITY_MAXIMUM) - for(var/t in bodyparts) //this really should not be necessary - qdel(t) + if(reproduce) + var/number = pick(1400;2, 3, 4) //reproduce (has a small chance of producing 3 or 4 offspring) + for(var/i in 2 to number) + var/mob/living/basic/slime/brainless_child = new /mob/living/basic/slime(new_slime.loc) + brainless_child.set_nutrition(round(nutrition/number)) + step_away(brainless_child, new_slime) - var/mob/living/basic/pet/dog/corgi/new_corgi = new /mob/living/basic/pet/dog/corgi (loc) - new_corgi.set_combat_mode(TRUE) - new_corgi.PossessByPlayer(key) + new_slime.set_combat_mode(TRUE) + to_chat(new_slime, span_boldnotice("You are now a slime. Blorble.")) +/mob/proc/corgize() + var/mob/living/basic/pet/dog/corgi/new_corgi = transform_into_mob(/mob/living/basic/pet/dog/corgi) + if(!new_corgi) + return + new_corgi.set_combat_mode(TRUE) to_chat(new_corgi, span_boldnotice("You are now a Corgi. Yap Yap!")) - qdel(src) - return new_corgi /** * Turns the source atom into a crab crab, the peak of evolutionary design. */ -/mob/living/carbon/human/proc/crabize() - if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) +/mob/proc/crabize() + var/mob/living/basic/crab/new_crab = transform_into_mob(/mob/living/basic/crab) + if(!new_crab) return - ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) - Paralyze(1, ignore_canstun = TRUE) - for(var/obj/item/objeto in src) - dropItemToGround(objeto) - regenerate_icons() - icon = null - SetInvisibility(INVISIBILITY_MAXIMUM) - - var/mob/living/basic/crab/new_crab = new (loc) - new_crab.set_combat_mode(TRUE) // snip snip - if(mind) - mind.transfer_to(new_crab) - to_chat(new_crab, span_boldnotice("You have evolved into a crab!")) - qdel(src) - return new_crab + new_crab.set_combat_mode(TRUE) -/mob/living/carbon/proc/gorillize(genetics_gorilla = FALSE) - if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) +/mob/proc/gorillize(genetics_gorilla = FALSE) + var/mob/living/basic/gorilla/ideal_body = transform_into_mob(genetics_gorilla ? /mob/living/basic/gorilla/genetics : /mob/living/basic/gorilla) + if(!ideal_body) return - ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) - Paralyze(1, ignore_canstun = TRUE) - SSblackbox.record_feedback("amount", "gorillas_created", 1) + to_chat(ideal_body, span_boldnotice("You are now a gorilla. Ooga ooga!")) + ideal_body.set_combat_mode(TRUE) + return ideal_body - var/Itemlist = get_equipped_items(INCLUDE_POCKETS) - Itemlist += held_items - for(var/obj/item/W in Itemlist) - dropItemToGround(W, TRUE) - - regenerate_icons() - icon = null - SetInvisibility(INVISIBILITY_MAXIMUM) - var/gorilla_type = genetics_gorilla ? /mob/living/basic/gorilla/genetics : /mob/living/basic/gorilla - var/mob/living/basic/gorilla/new_gorilla = new gorilla_type(get_turf(src)) - new_gorilla.set_combat_mode(TRUE) - if(mind) - mind.transfer_to(new_gorilla) - else - new_gorilla.PossessByPlayer(key) - to_chat(new_gorilla, span_boldnotice("You are now a gorilla. Ooga ooga!")) - qdel(src) - return new_gorilla - -/mob/living/carbon/human/Animalize() - - var/list/mobtypes = typesof(/mob/living/simple_animal) + typesof(/mob/living/basic) +/mob/proc/Animalize() + var/list/mobtypes = valid_typesof(/mob/living/simple_animal) + valid_typesof(/mob/living/basic) var/mobpath = tgui_input_list(usr, "Which type of mob should [src] turn into?", "Choose a type", sort_list(mobtypes, GLOBAL_PROC_REF(cmp_typepaths_asc))) if(isnull(mobpath)) return - if(!safe_animal(mobpath)) - to_chat(usr, span_danger("Sorry but this mob type is currently unavailable.")) - return - if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) + var/mob/living/new_mob = transform_into_mob(mobpath) + if(!new_mob) return - ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) - Paralyze(1, ignore_canstun = TRUE) - - for(var/obj/item/W in src) - dropItemToGround(W) - - regenerate_icons() - icon = null - SetInvisibility(INVISIBILITY_MAXIMUM) - - for(var/t in bodyparts) - qdel(t) - - var/mob/living/new_mob = new mobpath(src.loc) - - new_mob.PossessByPlayer(key) new_mob.set_combat_mode(TRUE) + to_chat(new_mob, span_boldnotice("You feel more... animalistic.")) - to_chat(new_mob, span_boldnotice("You suddenly feel more... animalistic.")) - qdel(src) - return new_mob - -/mob/proc/Animalize() - - var/list/mobtypes = typesof(/mob/living/simple_animal) + typesof(/mob/living/basic) - var/mobpath = tgui_input_list(usr, "Which type of mob should [src] turn into?", "Choose a type", sort_list(mobtypes, GLOBAL_PROC_REF(cmp_typepaths_asc))) - if(isnull(mobpath)) - return - if(!safe_animal(mobpath)) - to_chat(usr, span_danger("Sorry but this mob type is currently unavailable.")) +///Creates a new mob, deletes the old one, transfers old mob into new mob +/mob/proc/transform_into_mob(mob_path, delete_items = FALSE) + if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return - var/mob/living/new_mob = new mobpath(src.loc) + if(!delete_items) + for(var/obj/item/detritus in get_equipped_items(INCLUDE_POCKETS|INCLUDE_HELD)) + dropItemToGround(detritus, TRUE) - new_mob.PossessByPlayer(key) - new_mob.set_combat_mode(TRUE) - to_chat(new_mob, span_boldnotice("You feel more... animalistic.")) + var/mob/new_mob = new mob_path(get_turf(src)) + if(mind) + mind.transfer_to(new_mob) + else + new_mob.PossessByPlayer(key) - . = new_mob qdel(src) - -/* Certain mob types have problems and should not be allowed to be controlled by players. - * - * This proc is here to force coders to manually place their mob in this list, hopefully tested. - * This also gives a place to explain -why- players shouldn't be turn into certain mobs and hopefully someone can fix them. - */ -/mob/proc/safe_animal(MP) - -//Bad mobs! - Remember to add a comment explaining what's wrong with the mob - if(!MP) - return FALSE //Sanity, this should never happen. - - if(ispath(MP, /mob/living/basic/construct)) - return FALSE //Verbs do not appear for players. - -//Good mobs! - if(ispath(MP, /mob/living/basic/pet/cat)) - return TRUE - if(ispath(MP, /mob/living/basic/pet/dog/corgi)) - return TRUE - if(ispath(MP, /mob/living/basic/crab)) - return TRUE - if(ispath(MP, /mob/living/basic/carp)) - return TRUE - if(ispath(MP, /mob/living/basic/mushroom)) - return TRUE - if(ispath(MP, /mob/living/basic/shade)) - return TRUE - if(ispath(MP, /mob/living/basic/killer_tomato)) - return TRUE - if(ispath(MP, /mob/living/basic/mouse)) - return TRUE - if(ispath(MP, /mob/living/basic/bear)) - return TRUE - if(ispath(MP, /mob/living/basic/parrot)) - return TRUE //Parrots are no longer unfinished! -Nodrak - - //Not in here? Must be untested! - return FALSE + return new_mob #undef PERMANENT_TRANSFORMATION_TRAIT #undef TEMPORARY_TRANSFORMATION_TRAIT diff --git a/code/modules/mod/adding_new_mod.md b/code/modules/mod/adding_new_mod.md index 2dc4f1bb3fcb..8e1c6703c02c 100644 --- a/code/modules/mod/adding_new_mod.md +++ b/code/modules/mod/adding_new_mod.md @@ -192,7 +192,7 @@ As it's a medical module, we'll put it [here](modules/modules_medical.dm). Let's ```dm /obj/item/mod/module/neuron_healer - name = "MOD neuron healer module" + name = "\improper MOD neuron healer module" desc = "A module made experimentally by DeForest Medical Corporation. On demand it releases waves \ that heal neuron damage of everyone nearby, getting their brains to a better state." icon_state = "neuron_healer" @@ -209,7 +209,7 @@ As we have an usable module, we want to set a cooldown time. All modules are als ```dm /obj/item/mod/module/neuron_healer - name = "MOD neuron healer module" + name = "\improper MOD neuron healer module" desc = "A module made experimentally by DeForest Medical Corporation. On demand it releases waves \ that heal neuron damage of everyone nearby, getting their brains to a better state." icon_state = "neuron_healer" @@ -245,7 +245,7 @@ We now have a basic module, we can add it to the techwebs to make it printable i ```dm /obj/item/mod/module/neuron_healer/advanced - name = "MOD advanced neuron healer module" + name = "\improper MOD advanced neuron healer module" complexity = 0 brain_damage_healed = 50 ``` diff --git a/code/modules/mod/mod_clothes.dm b/code/modules/mod/mod_clothes.dm index 80a88ddb215e..08d7d76384ed 100644 --- a/code/modules/mod/mod_clothes.dm +++ b/code/modules/mod/mod_clothes.dm @@ -1,5 +1,5 @@ /obj/item/clothing/head/mod - name = "MOD helmet" + name = "\improper MOD helmet" desc = "A helmet for a MODsuit." icon = 'icons/obj/clothing/modsuit/mod_clothing.dmi' icon_state = "standard-helmet" @@ -17,7 +17,7 @@ AddComponent(/datum/component/hat_stabilizer, loose_hat = TRUE) /obj/item/clothing/suit/mod - name = "MOD chestplate" + name = "\improper MOD chestplate" desc = "A chestplate for a MODsuit." icon = 'icons/obj/clothing/modsuit/mod_clothing.dmi' icon_state = "standard-chestplate" @@ -40,7 +40,7 @@ ADD_TRAIT(src, TRAIT_NO_SPEED_POTION, INNATE_TRAIT) /obj/item/clothing/gloves/mod - name = "MOD gauntlets" + name = "\improper MOD gauntlets" desc = "A pair of gauntlets for a MODsuit." icon = 'icons/obj/clothing/modsuit/mod_clothing.dmi' icon_state = "standard-gauntlets" @@ -59,7 +59,7 @@ ADD_TRAIT(src, TRAIT_NO_SPEED_POTION, INNATE_TRAIT) /obj/item/clothing/shoes/mod - name = "MOD boots" + name = "\improper MOD boots" desc = "A pair of boots for a MODsuit." icon = 'icons/obj/clothing/modsuit/mod_clothing.dmi' icon_state = "standard-boots" @@ -78,7 +78,7 @@ ADD_TRAIT(src, TRAIT_NO_SPEED_POTION, INNATE_TRAIT) /obj/item/clothing/glasses/mod - name = "MOD glasses" + name = "\improper MOD glasses" desc = "A pair of glasses for a MODsuit." icon = 'icons/obj/clothing/modsuit/mod_clothing.dmi' icon_state = "standard-glasses" @@ -94,7 +94,7 @@ ADD_TRAIT(src, TRAIT_NO_SPEED_POTION, INNATE_TRAIT) /obj/item/clothing/neck/mod - name = "MOD tie" + name = "\improper MOD tie" desc = "An tie for a MODsuit." icon = 'icons/obj/clothing/modsuit/mod_clothing.dmi' icon_state = "standard-tie" diff --git a/code/modules/mod/mod_construction.dm b/code/modules/mod/mod_construction.dm index 5ed90edb8e6b..d5b897990a1e 100644 --- a/code/modules/mod/mod_construction.dm +++ b/code/modules/mod/mod_construction.dm @@ -4,7 +4,7 @@ inhand_icon_state = "rack_parts" /obj/item/mod/construction/helmet - name = "MOD helmet" + name = "\improper MOD helmet" icon_state = "helmet" custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.5) @@ -13,7 +13,7 @@ . += span_notice("You could insert it into a MOD shell...") /obj/item/mod/construction/chestplate - name = "MOD chestplate" + name = "\improper MOD chestplate" icon_state = "chestplate" custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.5) @@ -22,7 +22,7 @@ . += span_notice("You could insert it into a MOD shell...") /obj/item/mod/construction/gauntlets - name = "MOD gauntlets" + name = "\improper MOD gauntlets" icon_state = "gauntlets" custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.5) @@ -31,7 +31,7 @@ . += span_notice("You could insert these into a MOD shell...") /obj/item/mod/construction/boots - name = "MOD boots" + name = "\improper MOD boots" icon_state = "boots" custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.5) @@ -88,7 +88,7 @@ return ITEM_INTERACT_SUCCESS /obj/item/mod/construction/plating - name = "MOD external plating" + name = "\improper MOD external plating" desc = "External plating used to finish a MOD control unit." icon_state = "standard-plating" custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 3, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 5) @@ -97,7 +97,7 @@ /obj/item/mod/construction/plating/Initialize(mapload) . = ..() var/datum/mod_theme/used_theme = GLOB.mod_themes[theme] - name = "MOD [used_theme.name] external plating" + name = "\improper MOD [used_theme.name] external plating" desc = "[desc] [used_theme.desc]" icon_state = "[used_theme.default_skin]-plating" @@ -139,7 +139,7 @@ #define SCREWED_ASSEMBLY_STEP "screwed_assembly" /obj/item/mod/construction/shell - name = "MOD shell" + name = "\improper MOD shell" icon_state = "mod-construction_start" desc = "A MOD shell." custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, /datum/material/plasma = SHEET_MATERIAL_AMOUNT * 2.5) diff --git a/code/modules/mod/mod_control.dm b/code/modules/mod/mod_control.dm index 7673729b0121..8cd53a4b4c4b 100644 --- a/code/modules/mod/mod_control.dm +++ b/code/modules/mod/mod_control.dm @@ -6,7 +6,7 @@ worn_icon = 'icons/mob/clothing/modsuit/mod_clothing.dmi' /obj/item/mod/control - name = "MOD control unit" + name = "\improper MOD control unit" desc = "The control unit of a Modular Outerwear Device, a powered suit that protects against various environments." icon_state = "standard-control" inhand_icon_state = "mod_control" diff --git a/code/modules/mod/mod_core.dm b/code/modules/mod/mod_core.dm index 5c6eac13c7b5..b5df55220d2c 100644 --- a/code/modules/mod/mod_core.dm +++ b/code/modules/mod/mod_core.dm @@ -1,5 +1,5 @@ /obj/item/mod/core - name = "MOD core" + name = "\improper MOD core" desc = "A non-functional MOD core. Inform the admins if you see this." icon = 'icons/obj/clothing/modsuit/mod_construction.dmi' icon_state = "mod-core" @@ -66,7 +66,7 @@ ([round((100 * charge_amount) / max_charge_amount, 1)]%)" /obj/item/mod/core/infinite - name = "MOD infinite core" + name = "\improper MOD infinite core" icon_state = "mod-core-infinite" desc = "A fusion core using the rare Fixium to sustain enough energy for the lifetime of the MOD's user. \ This might be because of the slowly killing poison inside, but those are just rumors." @@ -99,7 +99,7 @@ return "Infinite" /obj/item/mod/core/standard - name = "MOD standard core" + name = "\improper MOD standard core" icon_state = "mod-core-standard" desc = "Growing in the most lush, fertile areas of the planet Sprout, there is a crystal known as the Heartbloom. \ These rare, organic piezoelectric crystals are of incredible cultural significance to the artist castes of the \ @@ -295,7 +295,7 @@ mod.update_charge_alert() /obj/item/mod/core/ethereal - name = "MOD ethereal core" + name = "\improper MOD ethereal core" icon_state = "mod-core-ethereal" desc = "A reverse engineered core of a Modular Outerwear Device. Using natural liquid electricity from Ethereals, \ preventing the need to use external sources to convert electric charge. As the suits are naturally charged by \ @@ -360,7 +360,7 @@ #define PLASMA_CORE_SHEET_CHARGE (2 * STANDARD_CELL_CHARGE) /obj/item/mod/core/plasma - name = "MOD plasma core" + name = "\improper MOD plasma core" icon_state = "mod-core-plasma" desc = "Nanotrasen's attempt at capitalizing on their plasma research. These plasma cores are refueled \ through plasma fuel, allowing for easy continued use by their mining squads." @@ -445,7 +445,7 @@ #undef PLASMA_CORE_SHEET_CHARGE /obj/item/mod/core/plasma/lavaland - name = "MOD plasma flower core" + name = "\improper MOD plasma flower core" icon_state = "mod-core-plasma-flower" desc = "A strange flower from the desolate wastes of lavaland. It pulses with a strange purple glow. \ The wires coming out of it could be hooked into a MODsuit." @@ -499,7 +499,7 @@ QDEL_IN(flower_boots, 1 SECONDS) /obj/item/mod/core/soul - name = "MOD soul shard core" + name = "\improper MOD soul shard core" desc = "A soul shard haphazardly jammed into a hand-crafted MOD core frame." icon = 'icons/map_icons/items/_item.dmi' icon_state = "/obj/item/mod/core/soul" diff --git a/code/modules/mod/mod_paint.dm b/code/modules/mod/mod_paint.dm index 94f44635628a..2ab8a6968b27 100644 --- a/code/modules/mod/mod_paint.dm +++ b/code/modules/mod/mod_paint.dm @@ -140,7 +140,7 @@ #undef MODPAINT_MIN_OVERALL_COLORS /obj/item/mod/skin_applier - name = "MOD skin applier" + name = "\improper MOD skin applier" desc = "This one-use skin applier will add a skin to MODsuits of a specific type. Must be used on an inactive control unit." icon = 'icons/obj/clothing/modsuit/mod_construction.dmi' icon_state = "skinapplier" @@ -148,7 +148,7 @@ /obj/item/mod/skin_applier/Initialize(mapload) . = ..() - name = "MOD [skin] skin applier" + name = "\improper MOD [skin] skin applier" /obj/item/mod/skin_applier/interact_with_atom(atom/attacked_atom, mob/living/user, params) if(!istype(attacked_atom, /obj/item/mod/control)) diff --git a/code/modules/mod/modules/_module.dm b/code/modules/mod/modules/_module.dm index a6d812f462b1..60a44065bb0f 100644 --- a/code/modules/mod/modules/_module.dm +++ b/code/modules/mod/modules/_module.dm @@ -1,6 +1,6 @@ ///MOD Module - A special device installed in a MODsuit allowing the suit to do new stuff. /obj/item/mod/module - name = "MOD module" + name = "\improper MOD module" icon = 'icons/obj/clothing/modsuit/mod_modules.dmi' icon_state = "module" abstract_type = /obj/item/mod/module @@ -465,7 +465,7 @@ ///Anomaly Locked - Mostly just a wrapper for modules that don't need to descend from any other module but need the anomaly_locked_module component /obj/item/mod/module/anomaly_locked - name = "MOD anomaly locked module" + name = "\improper MOD anomaly locked module" desc = "A form of a module, locked behind an anomalous core to function." /// Accepted types of anomaly cores. var/list/accepted_anomalies = list(/obj/item/assembly/signaler/anomaly) diff --git a/code/modules/mod/modules/module_holding.dm b/code/modules/mod/modules/module_holding.dm index 06f3a8c5f24a..ee03210dfec1 100644 --- a/code/modules/mod/modules/module_holding.dm +++ b/code/modules/mod/modules/module_holding.dm @@ -2,7 +2,7 @@ #define HOLDING_MODULE_CHECK_CONFIRMED 2 /obj/item/mod/module/storage/holding - name = "MOD storage module of holding" + name = "\improper MOD storage module of holding" desc = "A prototype storage module utilizing the power of anomalous bluespace phenomena \ to store copious amounts of matter. Unfortunately, it suffers from the same drawbacks as its standalone counterpart, \ including tearing catastrophic rifts in reality when nested inside bluespace pockets produced through similar means." diff --git a/code/modules/mod/modules/module_kinesis.dm b/code/modules/mod/modules/module_kinesis.dm index f664d71629b1..f65895676adc 100644 --- a/code/modules/mod/modules/module_kinesis.dm +++ b/code/modules/mod/modules/module_kinesis.dm @@ -1,6 +1,6 @@ ///Kinesis - Gives you the ability to move and launch objects. /obj/item/mod/module/anomaly_locked/kinesis - name = "MOD kinesis module" + name = "\improper MOD kinesis module" desc = "A modular plug-in to the forearm, this module was presumed lost for many years, \ despite the suits it used to be mounted on still seeing some circulation. \ This piece of technology allows the user to generate precise anti-gravity fields, \ @@ -255,7 +255,7 @@ core_removable = FALSE /obj/item/mod/module/anomaly_locked/kinesis/prototype - name = "MOD prototype kinesis module" + name = "\improper MOD prototype kinesis module" prebuilt = TRUE complexity = 0 use_energy_cost = DEFAULT_CHARGE_DRAIN * 5 @@ -263,7 +263,7 @@ core_removable = FALSE /obj/item/mod/module/anomaly_locked/kinesis/plus - name = "MOD kinesis+ module" + name = "\improper MOD kinesis+ module" desc = "A modular plug-in to the forearm, this module was recently redeveloped in secret. \ The bane of all ne'er-do-wells, the kinesis+ module is a powerful tool that allows the user \ to manipulate the world around them. Like its older counterpart, it's capable of manipulating \ @@ -274,7 +274,7 @@ /// Admin suit version of kinesis. Can grab anything at any range, may enable phasing through walls. /obj/item/mod/module/anomaly_locked/kinesis/admin - name = "MOD kinesis++ module" + name = "\improper MOD kinesis++ module" desc = "A modular plug-in to the forearm, this module was recently reredeveloped in super secret. \ This one can force some of the grasped objects to phase through walls. Oh no." complexity = 0 diff --git a/code/modules/mod/modules/module_pathfinder.dm b/code/modules/mod/modules/module_pathfinder.dm index e179f12390e2..e8479bb0d135 100644 --- a/code/modules/mod/modules/module_pathfinder.dm +++ b/code/modules/mod/modules/module_pathfinder.dm @@ -2,7 +2,7 @@ ///Pathfinder - Can fly the suit from a long distance to an implant installed in someone. /obj/item/mod/module/pathfinder - name = "MOD pathfinder module" + name = "\improper MOD pathfinder module" desc = "This module, brought to you by Nakamura Engineering, has two components. \ The first component is a series of thrusters and a computerized location subroutine installed into the \ very control unit of the suit, allowing it flight at highway speeds using the suit's access locks \ @@ -193,7 +193,7 @@ /obj/item/implant/mod - name = "MOD pathfinder implant" + name = "\improper MOD pathfinder implant" desc = "Lets you recall a MODsuit to you at any time." actions_types = list(/datum/action/item_action/mod_recall) allow_multiple = TRUE // Surgrey is annoying if you loose your MOD diff --git a/code/modules/mod/modules/modules_antag.dm b/code/modules/mod/modules/modules_antag.dm index e75565e43a91..8b1bc58d5efc 100644 --- a/code/modules/mod/modules/modules_antag.dm +++ b/code/modules/mod/modules/modules_antag.dm @@ -2,7 +2,7 @@ ///Energy Shield - Gives you a rechargeable energy shield that nullifies attacks. /obj/item/mod/module/energy_shield - name = "MOD energy shield module" + name = "\improper MOD energy shield module" desc = "A personal, protective forcefield typically seen in military applications. \ This advanced deflector shield is essentially a scaled down version of those seen on starships, \ and the power cost can be an easy indicator of this. However, it is capable of blocking nearly any incoming attack, \ @@ -72,7 +72,7 @@ return NONE /obj/item/mod/module/energy_shield/wizard - name = "MOD battlemage shield module" + name = "\improper MOD battlemage shield module" desc = "The caster wielding this spell gains a visible barrier around them, channeling arcane power through \ specialized runes engraved onto the surface of the suit to generate a wall of force. \ This shield can perfectly nullify attacks ranging from high-caliber rifles to magic missiles, \ @@ -90,7 +90,7 @@ ///Magic Nullifier - Protects you from magic. /obj/item/mod/module/anti_magic - name = "MOD magic nullifier module" + name = "\improper MOD magic nullifier module" desc = "A series of obsidian rods installed into critical points around the suit, \ vibrated at a certain low frequency to enable them to resonate. \ This creates a low-range, yet strong, magic nullification field around the user, \ @@ -108,7 +108,7 @@ mod.wearer.remove_traits(list(TRAIT_ANTIMAGIC, TRAIT_HOLY), REF(src)) /obj/item/mod/module/anti_magic/wizard - name = "MOD magic neutralizer module" + name = "\improper MOD magic neutralizer module" desc = "The caster wielding this spell gains an invisible barrier around them, channeling arcane power through \ specialized runes engraved onto the surface of the suit to generate anti-magic field. \ The field will neutralize all magic that comes into contact with the user. \ @@ -124,7 +124,7 @@ ///Insignia - Gives you a skin specific stripe. /obj/item/mod/module/insignia - name = "MOD insignia module" + name = "\improper MOD insignia module" desc = "Despite the existence of IFF systems, radio communique, and modern methods of deductive reasoning involving \ the wearer's own eyes, colorful paint jobs remain a popular way for different factions in the galaxy to display who \ they are. This system utilizes a series of tiny moving paint sprayers to both apply and remove different \ @@ -167,7 +167,7 @@ ///Anti Slip - Prevents you from slipping on water. /obj/item/mod/module/noslip - name = "MOD anti slip module" + name = "\improper MOD anti slip module" desc = "These are a modified variant of standard magnetic boots, utilizing piezoelectric crystals on the soles. \ The two plates on the bottom of the boots automatically extend and magnetize as the user steps; \ a pull that's too weak to offer them the ability to affix to a hull, but just strong enough to \ @@ -203,7 +203,7 @@ ///Flamethrower - Launches fire across the area. /obj/item/mod/module/flamethrower - name = "MOD flamethrower module" + name = "\improper MOD flamethrower module" desc = "A custom-manufactured flamethrower, used to burn through your path. Burn well." icon_state = "flamethrower" module_type = MODULE_ACTIVE @@ -228,7 +228,7 @@ ///Power kick - Lets the user launch themselves at someone to kick them. /obj/item/mod/module/power_kick - name = "MOD power kick module" + name = "\improper MOD power kick module" desc = "This module uses high-power myomer to generate an incredible amount of energy, transferred into the power of a kick." icon_state = "power_kick" module_type = MODULE_ACTIVE @@ -289,7 +289,7 @@ ///Chameleon - lets the suit disguise as any item that would fit on that slot. /obj/item/mod/module/chameleon - name = "MOD chameleon module" + name = "\improper MOD chameleon module" desc = "A module using chameleon technology to disguise the suit as another object." icon_state = "chameleon" module_type = MODULE_USABLE @@ -365,7 +365,7 @@ ///Plate Compression - Compresses the suit to normal size /obj/item/mod/module/plate_compression - name = "MOD plate compression module" + name = "\improper MOD plate compression module" desc = "A module that keeps the suit in a very tightly fit state, lowering the overall size. \ Due to the pressure on all the parts, typical storage modules do not fit." icon_state = "plate_compression" @@ -393,7 +393,7 @@ mod.forceMove(mod.drop_location()) /obj/item/mod/module/demoralizer - name = "MOD psi-echo demoralizer module" + name = "\improper MOD psi-echo demoralizer module" desc = "One incredibly morbid member of the RND team at Roseus Galactic posed a question to her colleagues. \ 'I desire the power to scar my enemies mentally as I murder them. Who will stop me implementing this in our next project?' \ And thus the Psi-Echo Demoralizer Device was reluctantly invented. The future of psychological warfare, today!" @@ -412,7 +412,7 @@ QDEL_NULL(demoralizer) /obj/item/mod/module/infiltrator - name = "MOD infiltration core programs module" + name = "\improper MOD infiltration core programs module" desc = "The primary stealth systems operating within the suit. Utilizing electromagnetic signals, \ the wearer simply cannot be observed closely, or heard clearly by those around them.\ It also contains some dampening systems to help protect a user from blows to the head." @@ -462,7 +462,7 @@ ///Medbeam - Medbeam but built into a modsuit /obj/item/mod/module/medbeam - name = "MOD medical beamgun module" + name = "\improper MOD medical beamgun module" desc = "A wrist mounted variant of the medbeam gun, allowing the user to heal their allies without the risk of dropping it." icon_state = "chronogun" module_type = MODULE_ACTIVE @@ -475,10 +475,10 @@ required_slots = list(ITEM_SLOT_BACK) /obj/item/gun/medbeam/mod - name = "MOD medbeam" + name = "\improper MOD medbeam" /obj/item/mod/module/stealth/wraith - name = "MOD Wraith Cloaking Module" + name = "\improper MOD Wraith Cloaking Module" desc = "A more destructive adaptation of the stealth module. Incompatible with armor modules" icon_state = "cloak_traitor" stealth_alpha = 30 diff --git a/code/modules/mod/modules/modules_engineering.dm b/code/modules/mod/modules/modules_engineering.dm index 4bbf420b55b8..249647cf7670 100644 --- a/code/modules/mod/modules/modules_engineering.dm +++ b/code/modules/mod/modules/modules_engineering.dm @@ -2,7 +2,7 @@ ///Welding Protection - Makes the helmet protect from flashes and welding. /obj/item/mod/module/welding - name = "MOD welding protection module" + name = "\improper MOD welding protection module" desc = "A module installed into the visor of the suit, this projects a \ polarized, holographic overlay in front of the user's eyes. It's rated high enough for \ immunity against extremities such as spot and arc welding, solar eclipses, and handheld flashlights." @@ -27,7 +27,7 @@ head_cover.flash_protect = initial(head_cover.flash_protect) /obj/item/mod/module/welding/syndicate - name = "MODsuit flash-protected optical suite" + name = "\improper MODsuit flash-protected optical suite" complexity = 0 removable = FALSE incompatible_modules = list(/obj/item/mod/module/welding, /obj/item/mod/module/welding/syndicate, /obj/item/mod/module/stealth/wraith) @@ -59,7 +59,7 @@ ///T-Ray Scan - Scans the terrain for undertile objects. /obj/item/mod/module/t_ray - name = "MOD t-ray scan module" + name = "\improper MOD t-ray scan module" desc = "A module installed into the visor of the suit, allowing the user to use a pulse of terahertz radiation \ to essentially echolocate things beneath the floor, mostly cables and pipes. \ A staple of atmospherics work, and counter-smuggling work." @@ -78,7 +78,7 @@ ///Magnetic Stability - Gives the user a slowdown but makes them negate gravity and be immune to slips. /obj/item/mod/module/magboot - name = "MOD magnetic stability module" + name = "\improper MOD magnetic stability module" desc = "These are powerful electromagnets fitted into the suit's boots, allowing users both \ excellent traction no matter the condition indoors, and to essentially hitch a ride on the exterior of a hull. \ However, these basic models do not feature computerized systems to automatically toggle them on and off, \ @@ -117,14 +117,14 @@ module_slowdowns += slowdown_active /obj/item/mod/module/magboot/advanced - name = "MOD advanced magnetic stability module" + name = "\improper MOD advanced magnetic stability module" removable = FALSE complexity = 0 slowdown_active = 0 ///Emergency Tether - Shoots a grappling hook projectile in 0g that throws the user towards it. /obj/item/mod/module/tether - name = "MOD emergency tether module" + name = "\improper MOD emergency tether module" desc = "A custom-built grappling-hook powered by a winch capable of hauling the user. \ While some older models of cargo-oriented grapples have capacities of a few tons, \ these are only capable of working in zero-gravity environments, a blessing to some Engineers." @@ -370,7 +370,7 @@ ///Radiation Protection - Protects the user from radiation, gives them a geiger counter and rad info in the panel. /obj/item/mod/module/rad_protection - name = "MOD radiation protection module" + name = "\improper MOD radiation protection module" desc = "A module utilizing polymers and reflective shielding to protect the user against ionizing radiation; \ a common danger in space. This comes with software to notify the wearer that they're even in a radioactive area, \ giving a voice to an otherwise silent killer." @@ -413,7 +413,7 @@ ///Constructor - Lets you build quicker and create RCD holograms. /obj/item/mod/module/constructor - name = "MOD constructor module" + name = "\improper MOD constructor module" desc = "This module entirely occupies the wearer's forearm, notably causing conflict with \ advanced arm servos meant to carry crewmembers. However, it functions as an \ extremely advanced construction hologram scanner, as well as containing the \ @@ -440,7 +440,7 @@ ///Safety-First Head Protection - Protects your brain matter from sudden impacts. /obj/item/mod/module/headprotector - name = "MOD safety-first head protection module" + name = "\improper MOD safety-first head protection module" desc = "A series of dampening plates are installed along the back and upper areas of \ the helmet. These plates absorb abrupt kinetic shocks delivered to the skull. \ The bulk of this module prevents it from being installed in any suit that is capable \ @@ -460,7 +460,7 @@ ///Mister - Sprays water over an area. /obj/item/mod/module/mister - name = "MOD water mister module" + name = "\improper MOD water mister module" desc = "A module containing a mister, able to spray it over areas." icon_state = "mister" module_type = MODULE_ACTIVE @@ -479,7 +479,7 @@ ///Resin Mister - Sprays resin over an area. /obj/item/mod/module/mister/atmos - name = "MOD resin mister module" + name = "\improper MOD resin mister module" desc = "An atmospheric resin mister, able to fix up areas quickly." device = /obj/item/extinguisher/mini/nozzle/mod volume = 250 @@ -490,5 +490,5 @@ reagents.add_reagent(/datum/reagent/water, volume) /obj/item/extinguisher/mini/nozzle/mod - name = "MOD atmospheric mister" + name = "\improper MOD atmospheric mister" desc = "An atmospheric resin mister with three modes, mounted as a module." diff --git a/code/modules/mod/modules/modules_general.dm b/code/modules/mod/modules/modules_general.dm index 748cb5825509..7077325304fd 100644 --- a/code/modules/mod/modules/modules_general.dm +++ b/code/modules/mod/modules/modules_general.dm @@ -2,7 +2,7 @@ ///Storage - Adds a storage component to the suit. /obj/item/mod/module/storage - name = "MOD compact storage module" + name = "\improper MOD compact storage module" desc = "What amounts to a series of integrated storage compartments and specialized pockets installed across \ the surface of the suit, useful for storing various bits, and or bobs. This version has been trimmed down to save space." icon_state = "storage" @@ -49,7 +49,7 @@ mod.wearer.temporarilyRemoveItemFromInventory(mod.wearer.s_store) /obj/item/mod/module/storage/large_capacity - name = "MOD storage module" + name = "\improper MOD storage module" desc = "Reverse engineered by Nakamura Engineering from Donk Company designs, this system of hidden compartments \ is entirely within the suit, distributing items and weight evenly to ensure a comfortable experience for the user; \ whether smuggling, or simply hauling." @@ -59,7 +59,7 @@ custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/uranium = SHEET_MATERIAL_AMOUNT) /obj/item/mod/module/storage/syndicate - name = "MOD syndicate storage module" + name = "\improper MOD syndicate storage module" desc = "A storage system using nanotechnology developed by Cybersun Industries, these compartments use \ esoteric technology to compress the physical matter of items put inside of them, \ essentially shrinking items for much easier and more portable storage." @@ -68,7 +68,7 @@ storage_type = /datum/storage/mod_storage/syndicate /obj/item/mod/module/storage/belt - name = "MOD case storage module" + name = "\improper MOD case storage module" desc = "Some concessions had to be made when creating a compressed modular suit core. \ As a result, Roseus Galactic equipped their suit with a slimline storage case. \ If you find this equipped to a standard modular suit, then someone has almost certainly shortchanged you on a proper storage module." @@ -78,7 +78,7 @@ storage_type = /datum/storage/mod_storage/belt /obj/item/mod/module/storage/bluespace - name = "MOD bluespace storage module" + name = "\improper MOD bluespace storage module" desc = "A storage system developed by Nanotrasen, these compartments employ \ miniaturized bluespace pockets for the ultimate in storage technology; regardless of the weight of objects put inside." complexity = 3 @@ -87,7 +87,7 @@ ///Ion Jetpack - Lets the user fly freely through space using battery charge. /obj/item/mod/module/jetpack - name = "MOD ion jetpack module" + name = "\improper MOD ion jetpack module" desc = "A series of electric thrusters installed across the suit, this is a module highly anticipated by trainee Engineers. \ Rather than using gasses for combustion thrust, these jets are capable of accelerating ions using \ charge from the suit's charge. Some say this isn't Nakamura Engineering's first foray into jet-enabled suits." @@ -170,7 +170,7 @@ REMOVE_TRAIT(mod.wearer, TRAIT_NOGRAV_ALWAYS_DRIFT, REF(src)) /obj/item/mod/module/jetpack/advanced - name = "MOD advanced ion jetpack module" + name = "\improper MOD advanced ion jetpack module" desc = "An improvement on the previous model of electric thrusters. This one achieves higher precision \ and spartial stability through mounting of more jets and application of red paint." icon_state = "jetpack_advanced" @@ -183,7 +183,7 @@ ///Jump Jet - Briefly removes the effect of gravity and pushes you up one z-level if possible. /obj/item/mod/module/jump_jet - name = "MOD ionic jump jet module" + name = "\improper MOD ionic jump jet module" desc = "A specialised ionic thruster which provides a short but powerful boost capable of pushing against gravity, \ after which time it needs to recharge." icon_state = "jump_jet" @@ -219,7 +219,7 @@ ///Status Readout - Puts a lot of information including health, nutrition, fingerprints, temperature to the suit TGUI. /obj/item/mod/module/status_readout - name = "MOD status readout module" + name = "\improper MOD status readout module" desc = "A once-common module, this technology unfortunately went out of fashion in the safer regions of space; \ and found new life in the research networks of the Periphery. This particular unit hooks into the suit's spine, \ capable of capturing and displaying all possible biometric data of the wearer; sleep, nutrition, fitness, fingerprints, \ @@ -315,7 +315,7 @@ ///Eating Apparatus - Lets the user eat/drink with the suit on. /obj/item/mod/module/mouthhole - name = "MOD eating apparatus module" + name = "\improper MOD eating apparatus module" desc = "A favorite by Miners, this modification to the helmet utilizes a nanotechnology barrier infront of the mouth \ to allow eating and drinking while retaining protection and atmosphere. However, it won't free you from masks, \ lets pepper spray pass through and it will do nothing to improve the taste of a goliath steak." @@ -372,7 +372,7 @@ ///EMP Shield - Protects the suit from EMPs. /obj/item/mod/module/emp_shield - name = "MOD EMP shield module" + name = "\improper MOD EMP shield module" desc = "A field inhibitor installed into the suit, protecting it against feedback such as \ electromagnetic pulses that would otherwise damage the electronic systems of the suit or it's modules. \ However, it will take from the suit's power to do so." @@ -400,7 +400,7 @@ mod_part.emp_protection -= protection_factor/all_parts.len /obj/item/mod/module/emp_shield/advanced - name = "MOD advanced EMP shield module" + name = "\improper MOD advanced EMP shield module" desc = "An advanced field inhibitor installed into the suit, protecting it against feedback such as \ electromagnetic pulses that would otherwise damage the electronic systems of the suit or electronic devices on the wearer, \ including augmentations. However, it will take from the suit's power to do so." @@ -414,7 +414,7 @@ ///Flashlight - Gives the suit a customizable flashlight. /obj/item/mod/module/flashlight - name = "MOD flashlight module" + name = "\improper MOD flashlight module" desc = "A simple pair of configurable flashlights installed on the left and right sides of the helmet, \ useful for providing light in a variety of ranges and colors. \ Some survivalists prefer the color green for their illumination, for reasons unknown." @@ -486,7 +486,7 @@ ///Like the flashlight module, except the light color is stuck to black and cannot be changed. /obj/item/mod/module/flashlight/darkness - name = "MOD flashdark module" + name = "\improper MOD flashdark module" desc = "A quirky pair of configurable flashdarks installed on the sides of the helmet, \ useful for providing darkness at a configurable range." light_color = COLOR_BLACK @@ -501,7 +501,7 @@ ///Dispenser - Dispenses an item after a time passes. /obj/item/mod/module/dispenser - name = "MOD burger dispenser module" + name = "\improper MOD burger dispenser module" desc = "A rare piece of technology reverse-engineered from a prototype found in a Donk Company vessel. \ This can draw incredible amounts of power from the suit's charge to create edible organic matter in the \ palm of the wearer's glove; however, research seemed to have entirely stopped at burgers. \ @@ -531,7 +531,7 @@ ///Longfall - Nullifies fall damage, removing charge instead. /obj/item/mod/module/longfall - name = "MOD longfall module" + name = "\improper MOD longfall module" desc = "Useful for protecting both the suit and the wearer, \ utilizing commonplace systems to convert the possible damage from a fall into kinetic charge, \ as well as internal gyroscopes to ensure the user's safe falling. \ @@ -570,7 +570,7 @@ ///Thermal Regulator - Regulates the wearer's core temperature. /obj/item/mod/module/thermal_regulator - name = "MOD thermal regulator module" + name = "\improper MOD thermal regulator module" desc = "Advanced climate control, using an inner body glove interwoven with thousands of tiny, \ flexible cooling lines. This circulates coolant at various user-controlled temperatures, \ ensuring they're comfortable; even if they're some that like it hot." @@ -598,11 +598,11 @@ temperature_setting = clamp(value + T0C, min_temp, max_temp) /obj/item/mod/module/thermal_regulator/on_active_process(seconds_per_tick) - mod.wearer.adjust_bodytemperature(get_temp_change_amount((temperature_setting - mod.wearer.bodytemperature), 0.08 * seconds_per_tick)) + mod.wearer.adjust_bodytemperature(get_temp_change_amount((temperature_setting - mod.wearer.bodytemperature), BODYTEMP_SUIT_CHANGE_RATE * seconds_per_tick)) ///DNA Lock - Prevents people without the set DNA from activating the suit. /obj/item/mod/module/dna_lock - name = "MOD DNA lock module" + name = "\improper MOD DNA lock module" desc = "A module which engages with the various locks and seals tied to the suit's systems, \ enabling it to only be worn by someone corresponding with the user's exact DNA profile; \ however, this incredibly sensitive module is shorted out by EMPs. Luckily, cloning has been outlawed." @@ -678,7 +678,7 @@ ///Plasma Stabilizer - Prevents plasmamen from igniting in the suit /obj/item/mod/module/plasma_stabilizer - name = "MOD plasma stabilizer module" + name = "\improper MOD plasma stabilizer module" desc = "This system essentially forms an atmosphere of its own, within the suit, \ efficiently and quickly preventing oxygen from causing the user's head to burst into flame. \ This allows plasmamen to safely remove their helmet, allowing for easier \ @@ -711,7 +711,7 @@ //Finally, https://pipe.miroware.io/5b52ba1d94357d5d623f74aa/mspfa/Nuke%20Ops/Panels/0648.gif can be real: ///Hat Stabilizer - Allows displaying a hat over the MOD-helmet, à la plasmamen helmets. /obj/item/mod/module/hat_stabilizer - name = "MOD hat stabilizer module" + name = "\improper MOD hat stabilizer module" desc = "A simple set of deployable stands, directly atop one's head; \ these will deploy under a hat to keep it from falling off, allowing them to be worn atop the sealed helmet. \ You still need to take the hat off your head while the helmet deploys, though. \ @@ -742,7 +742,7 @@ helmet.AddComponent(/datum/component/hat_stabilizer, loose_hat = TRUE) /obj/item/mod/module/hat_stabilizer/syndicate - name = "MOD elite hat stabilizer module" + name = "\improper MOD elite hat stabilizer module" desc = "A simple set of deployable stands, directly atop one's head; \ these will deploy under a hat to keep it from falling off, allowing them to be worn atop the sealed helmet. \ You still need to take the hat off your head while the helmet deploys, though. This is a must-have for \ @@ -752,7 +752,7 @@ ///Sign Language Translator - allows people to sign over comms using the modsuit's gloves. /obj/item/mod/module/signlang_radio - name = "MOD glove translator module" + name = "\improper MOD glove translator module" desc = "A module that adds motion sensors into the suit's gloves, \ which works in tandem with a short-range subspace transmitter, \ letting the audibly impaired use sign language over comms." @@ -771,7 +771,7 @@ ///A module that recharges the suit by an itsy tiny bit whenever the user takes a step. Originally called "magneto module" but the videogame reference sounds cooler. /obj/item/mod/module/joint_torsion - name = "MOD joint torsion ratchet module" + name = "\improper MOD joint torsion ratchet module" desc = "A compact, weak AC generator that charges the suit's internal cell through the power of deambulation. It doesn't work in zero G. More than one can be installed." icon_state = "joint_torsion" complexity = 1 @@ -808,7 +808,7 @@ /// Module that shoves garbage inside its material container when the user crosses it, and eject the recycled material with MMB. /obj/item/mod/module/recycler - name = "MOD recycler module" + name = "\improper MOD recycler module" desc = "An innovative garbage collection module that recycles gathered trash into usable material. \ Doesn't work on debris and some items. May recycle live ammunition. \ Activate on a nearby turf or storage to unload stored material." @@ -926,7 +926,7 @@ ///A black market variant of the above that dispenses riot foam dart boxes /obj/item/mod/module/recycler/donk - name = "MOD riot foam dart recycler module" + name = "\improper MOD riot foam dart recycler module" desc = "A mod module collects and repackages fired foam darts (and garbage) into half-sized boxes of riot foam darts. \ Activate on a nearby turf or storage to unload stored ammo boxes." icon_state = "donk_recycler" @@ -950,7 +950,7 @@ playsound(src, 'sound/machines/microwave/microwave-end.ogg', 50, TRUE) /obj/item/mod/module/fishing_glove - name = "MOD fishing glove module" + name = "\improper MOD fishing glove module" desc = "A MOD module that takes in an external fishing rod to enable the user to fish without having to hold one, while also making it slightly easier." icon_state = "fishing_glove" complexity = 1 @@ -1024,7 +1024,7 @@ qdel(gloves.GetComponent(/datum/component/profound_fisher)) /obj/item/mod/module/shock_absorber - name = "MOD shock absorption module" + name = "\improper MOD shock absorption module" desc = "A module that makes the user resistant to the knockdown and CNS disruption inflicted by Stun Batons." icon_state = "no_baton" complexity = 1 diff --git a/code/modules/mod/modules/modules_maint.dm b/code/modules/mod/modules/modules_maint.dm index eaa5f5176b22..d482d6384e50 100644 --- a/code/modules/mod/modules/modules_maint.dm +++ b/code/modules/mod/modules/modules_maint.dm @@ -2,7 +2,7 @@ ///Springlock Mechanism - allows your modsuit to activate faster, but reagents are very dangerous. /obj/item/mod/module/springlock - name = "MOD springlock module" + name = "\improper MOD springlock module" desc = "A module that spans the entire size of the MOD unit, sitting under the outer shell. \ This mechanical exoskeleton pushes out of the way when the user enters and it helps in booting \ up, but was taken out of modern suits because of the springlock's tendency to \"snap\" back \ @@ -105,7 +105,7 @@ ///Rave Visor - Gives you a rainbow visor and plays jukebox music to you. /obj/item/mod/module/visor/rave - name = "MOD rave visor module" + name = "\improper MOD rave visor module" desc = "A Super Cool Awesome Visor (SCAV), intended for modular suits." icon_state = "rave_visor" complexity = 1 @@ -188,7 +188,7 @@ ///Tanner - Tans you with spraytan. /obj/item/mod/module/tanner - name = "MOD tanning module" + name = "\improper MOD tanning module" desc = "A tanning module for modular suits. Skin cancer functionality has not been ever proven, \ although who knows with the rumors..." icon_state = "tanning" @@ -210,7 +210,7 @@ ///Balloon Blower - Blows a balloon. /obj/item/mod/module/balloon - name = "MOD balloon blower module" + name = "\improper MOD balloon blower module" desc = "A strange module invented years ago by some ingenious mimes. It blows balloons." icon_state = "bloon" module_type = MODULE_USABLE @@ -234,7 +234,7 @@ ///Paper Dispenser - Dispenses (sometimes burning) paper sheets. /obj/item/mod/module/paper_dispenser - name = "MOD paper dispenser module" + name = "\improper MOD paper dispenser module" desc = "A simple module designed by the bureaucrats of Torch Bay. \ It dispenses 'warm, clean, and crisp sheets of paper' onto a nearby table. Usually." icon_state = "paper_maker" @@ -276,7 +276,7 @@ ///Stamper - Extends a stamp that can switch between accept/deny modes. /obj/item/mod/module/stamp - name = "MOD stamper module" + name = "\improper MOD stamper module" desc = "A module installed into the wrist of the suit, this functions as a high-power stamp, \ able to switch between accept, deny, and void modes." icon_state = "stamp" @@ -289,7 +289,7 @@ required_slots = list(ITEM_SLOT_GLOVES|ITEM_SLOT_NECK) /obj/item/stamp/mod - name = "MOD electronic stamp" + name = "\improper MOD electronic stamp" desc = "A high-power stamp, able to switch between accept, deny, and void modes when used." icon_state = "stamp-ok" @@ -315,7 +315,7 @@ ///Atrocinator - Flips your gravity. /obj/item/mod/module/atrocinator - name = "MOD atrocinator module" + name = "\improper MOD atrocinator module" desc = "A mysterious orb that has mysterious effects when inserted in a MODsuit." icon_state = "atrocinator" module_type = MODULE_TOGGLE @@ -423,7 +423,7 @@ /obj/item/mod/module/recycler/donk/safe - name = "MOD foam dart recycler module" + name = "\improper MOD foam dart recycler module" desc = "A mod module that collects and repackages fired foam darts into half-sized ammo boxes. \ Activate on a nearby turf or storage to unload stored ammo boxes." icon_state = "donk_safe_recycler" diff --git a/code/modules/mod/modules/modules_medical.dm b/code/modules/mod/modules/modules_medical.dm index 3e36b1734bfb..4245adb8e36f 100644 --- a/code/modules/mod/modules/modules_medical.dm +++ b/code/modules/mod/modules/modules_medical.dm @@ -6,7 +6,7 @@ ///Health Analyzer - Gives the user a ranged health analyzer and their health status in the panel. /obj/item/mod/module/health_analyzer - name = "MOD health analyzer module" + name = "\improper MOD health analyzer module" desc = "A module installed into the glove of the suit. This is a high-tech biological scanning suite, \ allowing the user indepth information on the vitals and injuries of others even at a distance, \ all with the flick of the wrist. Data is displayed in a convenient package, but it's up to you to do something with it." @@ -66,7 +66,7 @@ ///Quick Carry - Lets the user carry bodies quicker. /obj/item/mod/module/quick_carry - name = "MOD quick carry module" + name = "\improper MOD quick carry module" desc = "A suite of advanced servos, redirecting power from the suit's arms to help carry the wounded; \ or simply for fun. However, Nanotrasen has locked the module's ability to assist in hand-to-hand combat." icon_state = "carry" @@ -88,14 +88,14 @@ REMOVE_TRAIT(mod.wearer, quick_carry_trait, REF(src)) /obj/item/mod/module/quick_carry/advanced - name = "MOD advanced quick carry module" + name = "\improper MOD advanced quick carry module" removable = FALSE complexity = 0 quick_carry_trait = TRAIT_QUICKER_CARRY ///Injector - Gives the suit an extendable large-capacity piercing syringe. /obj/item/mod/module/injector - name = "MOD injector module" + name = "\improper MOD injector module" desc = "A module installed into the wrist of the suit, this functions as a high-capacity syringe, \ with a tip fine enough to locate the emergency injection ports on any suit of armor, \ penetrating it with ease. Even yours." @@ -110,7 +110,7 @@ custom_materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT) /obj/item/reagent_containers/syringe/mod - name = "MOD injector syringe" + name = "\improper MOD injector syringe" desc = "A high-capacity syringe, with a tip fine enough to locate \ the emergency injection ports on any suit of armor, penetrating it with ease. Even yours." icon_state = "mod_0" @@ -129,7 +129,7 @@ ///Organizer - Lets you shoot organs, immediately replacing them if the target has the organ manipulation surgery. /obj/item/mod/module/organizer - name = "MOD organizer module" + name = "\improper MOD organizer module" desc = "A device recovered from a crashed Interdyne Pharmaceuticals vessel, \ this module has been unearthed for better or for worse. \ It's an arm-mounted device utilizing technology similar to modern rapid part exchange devices, \ @@ -219,7 +219,7 @@ ///Patrient Transport - Generates hardlight bags you can put people in. /obj/item/mod/module/criminalcapture/patienttransport - name = "MOD patient transport module" + name = "\improper MOD patient transport module" desc = "A module built into the forearm of the suit. Countless waves of mostly-lost mining teams being sent to \ Indecipheries and other hazardous locations have taught the DeForest Medical Company many lessons. \ Physical bodybags are difficult to store, hard to deploy, and even worse to keep intact in tough scenarios. \ @@ -234,7 +234,7 @@ ///Defibrillator - Gives the suit an extendable pair of shock paddles. /obj/item/mod/module/defibrillator - name = "MOD defibrillator module" + name = "\improper MOD defibrillator module" desc = "A module built into the gauntlets of the suit; commonly known as the 'Healing Hands' by medical professionals. \ The user places their palms above the patient. Onboard computers in the suit calculate the necessary voltage, \ and a modded targeting computer determines the best position for the user to push. \ @@ -264,14 +264,14 @@ return COMPONENT_DEFIB_STOP /obj/item/shockpaddles/mod - name = "MOD defibrillator gauntlets" + name = "\improper MOD defibrillator gauntlets" req_defib = FALSE icon_state = "defibgauntlets0" inhand_icon_state = "defibgauntlets0" base_icon_state = "defibgauntlets" /obj/item/mod/module/defibrillator/combat - name = "MOD combat defibrillator module" + name = "\improper MOD combat defibrillator module" desc = "A module built into the gauntlets of the suit; commonly known as the 'Healing Hands' by medical professionals. \ The user places their palms above the patient. Onboard computers in the suit calculate the necessary voltage, \ and a modded targeting computer determines the best position for the user to push. \ @@ -289,7 +289,7 @@ defib_cooldown = 2.5 SECONDS /obj/item/shockpaddles/syndicate/mod - name = "MOD combat defibrillator gauntlets" + name = "\improper MOD combat defibrillator gauntlets" req_defib = FALSE icon_state = "syndiegauntlets0" inhand_icon_state = "syndiegauntlets0" @@ -297,7 +297,7 @@ ///Thread Ripper - Temporarily rips apart clothing to make it not cover the body. /obj/item/mod/module/thread_ripper - name = "MOD thread ripper module" + name = "\improper MOD thread ripper module" desc = "A custom-built module integrated with the suit's wrist. The thread ripper is built from \ recent technology dating back to the start of 2562, after an attempt by a well-known Nanotrasen researcher to \ expand on the rapid-tailoring technology found in Autodrobes. Rather than being capable of creating \ @@ -378,7 +378,7 @@ ///Surgical Processor - Lets you do advanced surgeries portably. /obj/item/mod/module/surgical_processor - name = "MOD surgical processor module" + name = "\improper MOD surgical processor module" desc = "A module using an onboard surgical computer which can be connected to other computers to download and \ perform advanced surgeries on the go." icon_state = "surgical_processor" @@ -391,7 +391,7 @@ custom_materials = list(/datum/material/silver = SHEET_MATERIAL_AMOUNT * 0.75, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 2.5) /obj/item/surgical_processor/mod - name = "MOD surgical processor" + name = "\improper MOD surgical processor" custom_materials = null /obj/item/mod/module/surgical_processor/preloaded diff --git a/code/modules/mod/modules/modules_ninja.dm b/code/modules/mod/modules/modules_ninja.dm index fc4038fae21e..6a4b8d8b5504 100644 --- a/code/modules/mod/modules/modules_ninja.dm +++ b/code/modules/mod/modules/modules_ninja.dm @@ -2,7 +2,7 @@ ///Cloaking - Lowers the user's visibility, can be interrupted by being touched or attacked. /obj/item/mod/module/stealth - name = "MOD prototype cloaking module" + name = "\improper MOD prototype cloaking module" desc = "A complete retrofitting of the suit, this is a form of visual concealment tech employing esoteric technology \ to bend light around the user, as well as mimetic materials to make the surface of the suit match the \ surroundings based off sensor data. For some reason, this tech is rarely seen." @@ -59,7 +59,7 @@ //Advanced Cloaking - Doesn't turf off on bump, less power drain, more stealthy. /obj/item/mod/module/stealth/ninja - name = "MOD advanced cloaking module" + name = "\improper MOD advanced cloaking module" desc = "The latest in stealth technology, this module is a definite upgrade over previous versions. \ The field has been tuned to be even more responsive and fast-acting, with enough stability to \ continue operation of the field even if the user bumps into others. \ @@ -83,7 +83,7 @@ ///Camera Vision - Prevents flashes, blocks tracking. /obj/item/mod/module/welding/camera_vision - name = "MOD camera vision module" + name = "\improper MOD camera vision module" desc = "A module installed into the suit's helmet. This specialized piece of technology is built for subterfuge, \ replacing the standard visor with a nanotech display; capable of displaying specialized imagery at \ just the right frequency to jam all known forms of camera tracking and facial recognition, \ @@ -117,7 +117,7 @@ //Ninja Star Dispenser - Dispenses ninja stars. /obj/item/mod/module/dispenser/ninja - name = "MOD ninja star dispenser module" + name = "\improper MOD ninja star dispenser module" desc = "This piece of Spider Clan technology can exploit known energy-matter equivalence principles, \ using the nanites already hosted in the wearer's suit to transmute into monomolecular shuriken. \ While these lack the intense bleeding edge of conventional throwing stars, \ @@ -176,7 +176,7 @@ ///Hacker - This module hooks onto your right-clicks with empty hands and causes ninja actions. /obj/item/mod/module/hacker - name = "MOD hacker module" + name = "\improper MOD hacker module" desc = "Built for one purpose, electronic warfare, this module is built into the hands. \ Using near-field communication alongside precise electro-stimulation of the wires in machines, \ this decker's dream is normally used to pass through doors like a phantom. \ @@ -377,7 +377,7 @@ /obj/machinery/rnd/server/proc/ninjadrain_charge(mob/living/carbon/human/ninja, obj/item/mod/module/hacker/hacking_module) if(!do_after(ninja, 30 SECONDS, target = src, cog_icon = null)) return - stored_research.modify_points_all(0) + stored_research.adjust_all_points(-INFINITY) to_chat(ninja, span_notice("Sabotage complete. Research notes corrupted.")) var/datum/antagonist/ninja/ninja_antag = ninja.mind.has_antag_datum(/datum/antagonist/ninja) if(!ninja_antag) @@ -679,7 +679,7 @@ #undef NINJA_MAX_DRAIN ///Weapon Recall - Teleports your katana to you, prevents gun use. /obj/item/mod/module/weapon_recall - name = "MOD weapon recall module" + name = "\improper MOD weapon recall module" desc = "The cornerstone of a clanmember's life as a blademaster, and a module symbolizing their eternal bond with their weapon. \ This hooks to the micro bluespace drive inside an energy katana's handle, capable of recalling it to the user's \ skilled hands wherever they are. However, those that make such a bond with their weapon are cursed to \ @@ -770,7 +770,7 @@ //Reinforced DNA Lock - Gibs if wrong DNA, emp-proof. /obj/item/mod/module/dna_lock/reinforced - name = "MOD reinforced DNA lock module" + name = "\improper MOD reinforced DNA lock module" desc = "A module which engages with the various locks and seals tied to the suit's systems, \ enabling it to only be worn by someone corresponding with the user's exact DNA profile. \ Due to utilizing a skintight dampening shield, this one is entirely sealed against electromagnetic interference; \ @@ -795,7 +795,7 @@ //EMP Pulse - In addition to normal shielding, can also launch an EMP itself. /obj/item/mod/module/emp_shield/pulse - name = "MOD EMP pulse module" + name = "\improper MOD EMP pulse module" desc = "This module is normally set to activate on dramatic gestures, inverting and expanding the suit's \ EMP dampening shield to cause an electromagnetic pulse of its own. While this won't interfere with the wearer, \ it will piss off everyone around them." @@ -811,7 +811,7 @@ /// Ninja Status Readout - Like the normal status display (see the base type), but with a clock. /obj/item/mod/module/status_readout/ninja - name = "MOD Spider Clan status readout module" + name = "\improper MOD Spider Clan status readout module" desc = "A once-common module, this technology unfortunately went out of fashion in the safer regions of space; \ and, according to the extra markings on this particular unit's casing, right into the arachnid grip of the Spider Clan. \ Like other similar units, this one hooks into the suit's spine, and is capable of capturing and displaying \ @@ -825,7 +825,7 @@ ///Energy Net - Ensnares enemies in a net that prevents movement. /obj/item/mod/module/energy_net - name = "MOD energy net module" + name = "\improper MOD energy net module" desc = "A custom-built net-thrower. While conventional implementations of this capturing device \ utilize monomolecular fibers or cutting razorwire, this uses hardlight technology to deploy a \ trapping field capable of immobilizing even the strongest opponents." @@ -947,7 +947,7 @@ ///Adrenaline Boost - Stops all stuns the ninja is affected with, increases his speed. /obj/item/mod/module/adrenaline_boost - name = "MOD adrenaline boost module" + name = "\improper MOD adrenaline boost module" desc = "The secrets of the Spider Clan are many. The exact specifications of their suits, \ the techniques they use to make every singular cut make their enemies weep with admiration, \ but one of their greatest mysteries is the chemical compound their assassin-saboteurs use in times of need. \ diff --git a/code/modules/mod/modules/modules_science.dm b/code/modules/mod/modules/modules_science.dm index 3cae66ab525c..990e39bb10d6 100644 --- a/code/modules/mod/modules/modules_science.dm +++ b/code/modules/mod/modules/modules_science.dm @@ -2,7 +2,7 @@ ///Reagent Scanner - Lets the user scan reagents. /obj/item/mod/module/reagent_scanner - name = "MOD reagent scanner module" + name = "\improper MOD reagent scanner module" desc = "A module based off research-oriented Nanotrasen HUDs, this is capable of scanning the contents of \ containers and projecting the information in an easy-to-read format on the wearer's display. \ It cannot detect flavors, so that's up to you." @@ -21,7 +21,7 @@ REMOVE_TRAIT(mod.wearer, TRAIT_REAGENT_SCANNER, REF(src)) /obj/item/mod/module/reagent_scanner/advanced - name = "MOD advanced reagent scanner module" + name = "\improper MOD advanced reagent scanner module" desc = "An advanced module with all the features of research-oriented Nanotrasen HUDs, this is capable of scanning \ the contents of containers and projecting the information in an easy-to-read format on the wearer's display. \ It also contains a research scanner and an explosion sensor that gives details on nearby explosions. \ @@ -52,7 +52,7 @@ ///Anti-Gravity - Makes the user weightless. /obj/item/mod/module/anomaly_locked/antigrav - name = "MOD anti-gravity module" + name = "\improper MOD anti-gravity module" desc = "A module that uses a gravitational core to make the user completely weightless." icon_state = "antigrav" module_type = MODULE_TOGGLE @@ -85,7 +85,7 @@ ///Teleporter - Lets the user teleport to a nearby location. /obj/item/mod/module/anomaly_locked/teleporter - name = "MOD teleporter module" + name = "\improper MOD teleporter module" desc = "A module that uses a bluespace core to let the user transport their particles elsewhere." icon_state = "teleporter" module_type = MODULE_ACTIVE diff --git a/code/modules/mod/modules/modules_security.dm b/code/modules/mod/modules/modules_security.dm index 9446bb4e5528..87969843450a 100644 --- a/code/modules/mod/modules/modules_security.dm +++ b/code/modules/mod/modules/modules_security.dm @@ -2,7 +2,7 @@ ///Magnetic Harness - Automatically puts guns in your suit storage when you drop them. /obj/item/mod/module/magnetic_harness - name = "MOD magnetic harness module" + name = "\improper MOD magnetic harness module" desc = "Based off old TerraGov harness kits, this magnetic harness automatically attaches dropped guns back to the wearer." icon_state = "mag_harness" complexity = 2 @@ -72,7 +72,7 @@ ///Pepper Shoulders - When hit, reacts with a spray of pepper spray around the user. /obj/item/mod/module/pepper_shoulders - name = "MOD pepper shoulders module" + name = "\improper MOD pepper shoulders module" desc = "A module that attaches two pepper sprayers on shoulders of a MODsuit, reacting to touch with a spray around the user." icon_state = "pepper_shoulder" module_type = MODULE_USABLE @@ -106,7 +106,7 @@ ///Holster - Instantly holsters any not huge gun. /obj/item/mod/module/holster - name = "MOD holster module" + name = "\improper MOD holster module" desc = "Based off typical storage compartments, this system allows the suit to holster a \ standard firearm across its surface and allow for extremely quick retrieval. \ While some users prefer the chest, others the forearm for quick deployment, \ @@ -156,7 +156,7 @@ ///Megaphone - Lets you speak loud. /obj/item/mod/module/megaphone - name = "MOD megaphone module" + name = "\improper MOD megaphone module" desc = "A microchip megaphone linked to a MODsuit, for very important purposes, like: loudness." icon_state = "megaphone" module_type = MODULE_TOGGLE @@ -187,7 +187,7 @@ ///Criminal Capture - Generates hardlight bags you can put people in and sinch. /obj/item/mod/module/criminalcapture - name = "MOD criminal capture module" + name = "\improper MOD criminal capture module" desc = "The private security that had orders to take in people dead were quite \ happy with their space-proofed suit, but for those who wanted to bring back \ whomever their targets were still breathing needed a way to \"share\" the \ @@ -273,7 +273,7 @@ ///Mirage grenade dispenser - Dispenses grenades that copy the user's appearance. /obj/item/mod/module/dispenser/mirage - name = "MOD mirage grenade dispenser module" + name = "\improper MOD mirage grenade dispenser module" desc = "This module can create mirage grenades at the user's liking. These grenades create holographic copies of the user." icon_state = "mirage_grenade" cooldown_time = 20 SECONDS @@ -308,7 +308,7 @@ ///Projectile Dampener - Weakens projectiles in range. /obj/item/mod/module/projectile_dampener - name = "MOD projectile dampener module" + name = "\improper MOD projectile dampener module" desc = "Using technology from peaceborgs, this module weakens all projectiles in nearby range." icon_state = "projectile_dampener" module_type = MODULE_TOGGLE @@ -347,7 +347,7 @@ ///Active Sonar - Displays a hud circle on the turf of any living creatures in the given radius /obj/item/mod/module/active_sonar - name = "MOD active sonar" + name = "\improper MOD active sonar" desc = "Ancient tech from the 20th century, this module uses sonic waves to detect living creatures within the user's radius. \ Its basic function slowly scans around the user for any bio-signatures, however it can be overclocked to scan everywhere at once.\ Its loud ping is much harder to hide in an indoor station than in the outdoor operations it was designed for." @@ -464,7 +464,7 @@ * Both modes prevent the user from dual wielding guns. */ /obj/item/mod/module/shooting_assistant - name = "MOD shooting assistant module" + name = "\improper MOD shooting assistant module" desc = "A botched prototype meant to boost the TGMC crayon eaters' ability with firearms. \ It has only two modes available in its configurations: \ 'Quick Fire Stormtrooper' and 'Slow Ricochet Sharpshooter', \ @@ -569,7 +569,7 @@ #undef SHARPSHOOTER_MODE /obj/item/mod/module/shove_blocker - name = "MOD bulwark module" + name = "\improper MOD bulwark module" desc = "Layers upon layers of shock dampening plates, just to stop you from getting shoved into a wall by an angry mob." icon_state = "bulwark" complexity = 3 @@ -589,7 +589,7 @@ complexity = 0 /obj/item/mod/module/quick_cuff - name = "MOD restraint assist module" + name = "\improper MOD restraint assist module" desc = "Enhanced gauntlet grip pads that help with placing individuals in restraints more quickly. Doesn't look like they'll come off." removable = FALSE complexity = 0 diff --git a/code/modules/mod/modules/modules_service.dm b/code/modules/mod/modules/modules_service.dm index 0e23f8adb101..9170ca802c4f 100644 --- a/code/modules/mod/modules/modules_service.dm +++ b/code/modules/mod/modules/modules_service.dm @@ -2,7 +2,7 @@ ///Bike Horn - Plays a bike horn sound. /obj/item/mod/module/bikehorn - name = "MOD bike horn module" + name = "\improper MOD bike horn module" desc = "A shoulder-mounted piece of heavy sonic artillery, this module uses the finest femto-manipulator technology to \ precisely deliver an almost lethal squeeze to... a bike horn, producing a significantly memorable sound." icon_state = "bikehorn" @@ -19,7 +19,7 @@ ///Advanced Balloon Blower - Blows a long balloon. /obj/item/mod/module/balloon/advanced - name = "MOD advanced balloon blower module" + name = "\improper MOD advanced balloon blower module" desc = "A relatively new piece of technology developed by finest clown engineers to make long balloons and balloon animals \ at party-appropriate rate." cooldown_time = 20 SECONDS @@ -28,7 +28,7 @@ ///Microwave Beam - Microwaves items instantly. /obj/item/mod/module/microwave_beam - name = "MOD microwave beam module" + name = "\improper MOD microwave beam module" desc = "An oddly domestic device, this module is installed into the user's palm, \ hooking up with culinary scanners located in the helmet to blast food with precise microwave radiation, \ allowing them to cook food from a distance, with the greatest of ease. Not recommended for use against grapes." @@ -62,7 +62,7 @@ //Waddle - Makes you waddle and squeak. /obj/item/mod/module/waddle - name = "MOD waddle module" + name = "\improper MOD waddle module" desc = "Some of the most primitive technology in use by Honk Co. This module works off an automatic intention system, \ utilizing its sensitivity to the pilot's often-limited brainwaves to directly read their next step, \ affecting the boots they're installed in. Employing a twin-linked gravitonic drive to create \ @@ -93,7 +93,7 @@ // recharging cleaner spray module /obj/item/mod/module/mister/cleaner - name = "MOD janitorial mister module" + name = "\improper MOD janitorial mister module" desc = "A space cleaner mister, able to clean up messes quickly. Synthesizes its own supply over time (if active)." device = /obj/item/reagent_containers/spray/mister/janitor volume = 100 @@ -111,7 +111,7 @@ reagents.add_reagent(/datum/reagent/space_cleaner, refill_add) /obj/item/mod/module/selfcleaner - name = "MOD perfumer module" + name = "\improper MOD perfumer module" desc = "A small spray to clean oneself up. Has a pleasant scent." icon_state = "cleaner" module_type = MODULE_USABLE diff --git a/code/modules/mod/modules/modules_supply.dm b/code/modules/mod/modules/modules_supply.dm index f53e14ebb349..eaa4acc0b144 100644 --- a/code/modules/mod/modules/modules_supply.dm +++ b/code/modules/mod/modules/modules_supply.dm @@ -2,7 +2,7 @@ ///Internal GPS - Extends a GPS you can use. /obj/item/mod/module/gps - name = "MOD internal GPS module" + name = "\improper MOD internal GPS module" desc = "This module uses common Nanotrasen technology to calculate the user's position anywhere in space, \ down to the exact coordinates. This information is fed to a central database viewable from the device itself, \ though using it to help people is up to you." @@ -24,7 +24,7 @@ ///Hydraulic Clamp - Lets you pick up and drop crates. /obj/item/mod/module/clamp - name = "MOD hydraulic clamp module" + name = "\improper MOD hydraulic clamp module" desc = "A series of actuators installed into both arms of the suit, boasting a lifting capacity of almost a ton. \ However, this design has been locked by Nanotrasen to be primarily utilized for lifting various crates. \ A lot of people would say that loading cargo is a dull job, but you could not disagree more." @@ -67,7 +67,7 @@ if(!check_crate_pickup(picked_crate)) return playsound(src, 'sound/vehicles/mecha/hydraulic.ogg', 25, TRUE) - if(!do_after(mod.wearer, load_time, target = target)) + if(!do_after(mod.wearer, load_time, target)) balloon_alert(mod.wearer, "interrupted!") return if(!check_crate_pickup(picked_crate)) @@ -76,22 +76,27 @@ picked_crate.forceMove(src) balloon_alert(mod.wearer, "picked up crate") drain_power(use_energy_cost) - else if(length(stored_crates)) + return + + if(length(stored_crates)) var/turf/target_turf = get_turf(target) if(target_turf.is_blocked_turf()) return playsound(src, 'sound/vehicles/mecha/hydraulic.ogg', 25, TRUE) - if(!do_after(mod.wearer, load_time, target = target)) + if(!do_after(mod.wearer, load_time, target)) balloon_alert(mod.wearer, "interrupted!") return if(target_turf.is_blocked_turf()) return var/atom/movable/dropped_crate = pop(stored_crates) + if(!dropped_crate) + return dropped_crate.forceMove(target_turf) balloon_alert(mod.wearer, "dropped [dropped_crate]") drain_power(use_energy_cost) - else - balloon_alert(mod.wearer, "invalid target!") + return + + balloon_alert(mod.wearer, "invalid target!") /obj/item/mod/module/clamp/on_part_deactivation(deleting = FALSE) if(deleting) @@ -112,7 +117,7 @@ return TRUE /obj/item/mod/module/clamp/loader - name = "MOD loader hydraulic clamp module" + name = "\improper MOD loader hydraulic clamp module" icon_state = "clamp_loader" complexity = 0 removable = FALSE @@ -125,7 +130,7 @@ ///Drill - Lets you dig through rock and basalt. /obj/item/mod/module/drill - name = "MOD drill module" + name = "\improper MOD drill module" desc = "An arm-mounted drill, typically extending over the user's hand. While useful for drilling through rock, \ your drill is surely the one that both pierces and creates the heavens. Integrates with mining MODs' sphere \ transformation module, changing it from a mere traversal tool to high-powered excavation unit." @@ -241,7 +246,7 @@ /// Ore Bag - Lets you pick up ores and drop them from the suit. /obj/item/mod/module/orebag - name = "MOD ore bag module" + name = "\improper MOD ore bag module" desc = "An integrated ore storage system installed into the suit, \ this utilizes precise electromagnets and storage compartments to automatically collect and deposit ore. \ It's recommended by Nakamura Engineering to actually deposit that ore at local refineries." @@ -314,7 +319,7 @@ playsound(mod.wearer, SFX_RUSTLE, 50, TRUE) /obj/item/mod/module/hydraulic - name = "MOD loader hydraulic arms module" + name = "\improper MOD loader hydraulic arms module" desc = "A pair of powerful hydraulic arms installed in a MODsuit." icon_state = "launch_loader" module_type = MODULE_ACTIVE @@ -367,7 +372,7 @@ user.transform = user.transform.Turn(angle) /obj/item/mod/module/disposal_connector - name = "MOD disposal selector module" + name = "\improper MOD disposal selector module" desc = "A module that connects to the disposal pipeline, causing the user to go into their config selected disposal. \ Only seems to work when the suit is on." icon_state = "disposal" @@ -405,7 +410,7 @@ disposal_holder.destinationTag = disposal_tag /obj/item/mod/module/magnet - name = "MOD loader hydraulic magnet module" + name = "\improper MOD loader hydraulic magnet module" desc = "A powerful hydraulic electromagnet able to launch crates and lockers towards the user, and keep 'em attached." icon_state = "magnet_loader" module_type = MODULE_ACTIVE @@ -459,7 +464,7 @@ UnregisterSignal(locker, COMSIG_ATOM_NO_LONGER_PULLED) /obj/item/mod/module/ash_accretion - name = "MOD ash accretion module" + name = "\improper MOD ash accretion module" desc = "A module that collects ash from the terrain, covering the suit in a protective layer, this layer is \ lost when moving across standard terrain." icon_state = "ash_accretion" @@ -580,7 +585,7 @@ balloon_alert(mod.wearer, "ran out of ash!") /obj/item/mod/module/sphere_transform - name = "MOD sphere transform module" + name = "\improper MOD sphere transform module" desc = "A module able to move the suit's parts around, turning it and the user into a sphere. If the modsuit is insulated with bileworm skin, the user will be protected from lava while active. \ The sphere can move quickly, even through lava, and launch mining micromissiles to decimate terrain and fauna alike." icon_state = "sphere" diff --git a/code/modules/mod/modules/modules_timeline.dm b/code/modules/mod/modules/modules_timeline.dm index 0573d23e7b1d..cd07d54ff3d5 100644 --- a/code/modules/mod/modules/modules_timeline.dm +++ b/code/modules/mod/modules/modules_timeline.dm @@ -5,7 +5,7 @@ ///Eradication lock - Prevents people who aren't the owner of the suit from existing on the timeline via eradicating the suit with the intruder inside /obj/item/mod/module/eradication_lock - name = "MOD eradication lock module" + name = "\improper MOD eradication lock module" desc = "A module which remembers the original owner of the suit, even alternate universe \ versions. When a non-owner enters, the eradication lock will begin eradicating the suit \ from the timeline... with the intruder inside. Not the way you want to go, so it turns \ @@ -57,7 +57,7 @@ ///Rewinder - Activating saves a point in time, after 10 seconds you will jump back to that state. /obj/item/mod/module/rewinder - name = "MOD rewinder module" + name = "\improper MOD rewinder module" desc = "A module that can pull the user back through time given an anchor point to \ pull to. Very useful tool to get the job done, but keep in mind the suit locks for \ safety reasons while preparing a rewind." @@ -99,7 +99,7 @@ ///Timestopper - Need I really explain? It's the wizard's time stop, but the user channels it by not moving instead of a duration. /obj/item/mod/module/timestopper - name = "MOD timestopper module" + name = "\improper MOD timestopper module" desc = "A module that can halt time in a small radius around the user... for as long as they \ want! Great for monologues or lunch breaks. Keep in mind moving will end the stop, and the \ module has a hefty cooldown period to avoid reality errors." @@ -149,7 +149,7 @@ ///Timeline Jumper - Infinite phasing. needs some special effects /obj/item/mod/module/timeline_jumper - name = "MOD timeline jumper module" + name = "\improper MOD timeline jumper module" desc = "A module used to traverse timelines, phasing the user in and out of the stream of events." icon_state = "timeline_jumper" module_type = MODULE_USABLE @@ -201,7 +201,7 @@ ///TEM - Lets you eradicate people. /obj/item/mod/module/tem - name = "MOD timestream eradication module" + name = "\improper MOD timestream eradication module" desc = "The correction device of a fourth dimensional group outside time itself used to \ change the destination of a timeline. this device is capable of wiping a being from the \ timestream. They never are, they never were, they never will be." diff --git a/code/modules/mod/modules/modules_visor.dm b/code/modules/mod/modules/modules_visor.dm index 953f5055feca..3454f2292dcc 100644 --- a/code/modules/mod/modules/modules_visor.dm +++ b/code/modules/mod/modules/modules_visor.dm @@ -2,7 +2,7 @@ ///Base Visor - Adds a specific HUD and traits to you. /obj/item/mod/module/visor - name = "MOD visor module" + name = "\improper MOD visor module" desc = "A heads-up display installed into the visor of the suit. They say these also let you see behind you." module_type = MODULE_TOGGLE complexity = 1 @@ -24,7 +24,7 @@ //Medical Visor - Gives you a medical HUD. /obj/item/mod/module/visor/medhud - name = "MOD medical visor module" + name = "\improper MOD medical visor module" desc = "A heads-up display installed into the visor of the suit. This cross-references suit sensor data with a modern \ biological scanning suite, allowing the user to visualize the current health of organic lifeforms, as well as \ access data such as patient files in a convenient readout. They say these also let you see behind you." @@ -34,7 +34,7 @@ //Diagnostic Visor - Gives you a diagnostic HUD. /obj/item/mod/module/visor/diaghud - name = "MOD diagnostic visor module" + name = "\improper MOD diagnostic visor module" desc = "A heads-up display installed into the visor of the suit. This uses a series of advanced sensors to access data \ from advanced machinery, exosuits, and other devices, allowing the user to visualize current power levels \ and integrity of such. They say these also let you see behind you." @@ -44,7 +44,7 @@ //Security Visor - Gives you a security HUD. /obj/item/mod/module/visor/sechud - name = "MOD security visor module" + name = "\improper MOD security visor module" desc = "A heads-up display installed into the visor of the suit. This module is a heavily-retrofitted targeting system, \ plugged into various criminal databases to be able to view arrest records, command simple security-oriented robots, \ and generally know who to shoot. They say these also let you see behind you." @@ -54,7 +54,7 @@ //Meson Visor - Gives you meson vision. /obj/item/mod/module/visor/meson - name = "MOD meson visor module" + name = "\improper MOD meson visor module" desc = "A heads-up display installed into the visor of the suit. This module is based off well-loved meson scanner \ technology, used by construction workers and miners across the galaxy to see basic structural and terrain layouts \ through walls, regardless of lighting conditions. They say these also let you see behind you." @@ -64,7 +64,7 @@ //Thermal Visor - Gives you thermal vision. /obj/item/mod/module/visor/thermal - name = "MOD thermal visor module" + name = "\improper MOD thermal visor module" desc = "A heads-up display installed into the visor of the suit. This uses a small IR scanner to detect and identify \ the thermal radiation output of objects near the user. While it can detect the heat output of even something as \ small as a rodent, it still produces irritating red overlay. They say these also let you see behind you." @@ -73,7 +73,7 @@ //Night Visor - Gives you night vision. /obj/item/mod/module/visor/night - name = "MOD night visor module" + name = "\improper MOD night visor module" desc = "A heads-up display installed into the visor of the suit. Typical for both civilian and military applications, \ this allows the user to perceive their surroundings while in complete darkness, enhancing the view by tenfold; \ yet brightening everything into a spooky green glow. They say these also let you see behind you." @@ -82,7 +82,7 @@ visor_traits = list(TRAIT_TRUE_NIGHT_VISION) /obj/item/mod/module/night // Not Visor type so that it remains compatible with other visors - name = "MOD night vision module" + name = "\improper MOD night vision module" desc = "A heads-up display installed into the visor of the suit. Typical for both civilian and military applications, \ this allows the user to perceive their surroundings while in complete darkness, enhancing the view by tenfold; \ yet brightening everything into a spooky green glow. They say these also let you see behind you. \ diff --git a/code/modules/modular_computers/file_system/programs/frontier.dm b/code/modules/modular_computers/file_system/programs/frontier.dm index 7d270784c118..0d6304b1f512 100644 --- a/code/modules/modular_computers/file_system/programs/frontier.dm +++ b/code/modules/modular_computers/file_system/programs/frontier.dm @@ -68,9 +68,9 @@ singular_partner["path"] = partner.type singular_partner["boostedNodes"] = list() singular_partner["acceptedExperiments"] = list() - for (var/node_id in partner.boostable_nodes) - var/datum/techweb_node/node = SSresearch.techweb_node_by_id(node_id) - singular_partner["boostedNodes"] += list(list("name" = node.display_name, "discount" = partner.boostable_nodes[node_id], "id" = node_id)) + for (var/node_path, discount in partner.boostable_nodes) + var/datum/techweb_node/node = SSresearch.techweb_nodes[node_path] + singular_partner["boostedNodes"] += list(list("name" = node.display_name, "discount" = discount, "id" = node_path)) for (var/datum/experiment/ordnance/ordnance_experiment as anything in partner.accepted_experiments) singular_partner["acceptedExperiments"] += initial(ordnance_experiment.name) parsed_partners += list(singular_partner) @@ -217,7 +217,7 @@ return TRUE if("purchase_boost") var/datum/scientific_partner/partner = locate(text2path(params["boost_seller"])) in SSresearch.scientific_partners - var/datum/techweb_node/node = SSresearch.techweb_node_by_id(params["purchased_boost"]) + var/datum/techweb_node/node = SSresearch.techweb_nodes[params["purchased_boost"]] if(partner && node) var/possible_boost = partner.purchase_boost(linked_techweb, node) if(possible_boost) diff --git a/code/modules/modular_computers/file_system/programs/records.dm b/code/modules/modular_computers/file_system/programs/records.dm index fbd0b9edabd6..70a8706a518d 100644 --- a/code/modules/modular_computers/file_system/programs/records.dm +++ b/code/modules/modular_computers/file_system/programs/records.dm @@ -59,7 +59,10 @@ current_record["physical_status"] = person.physical_status current_record["mental_status"] = person.mental_status current_record["name"] = person.name - current_record["notes"] = person.medical_notes + var/list/notes = list() + for(var/datum/medical_note/note as anything in person.medical_notes) + notes += note.content + current_record["notes"] = notes.Join(" ") all_records += list(current_record) diff --git a/code/modules/modular_computers/file_system/programs/robotact.dm b/code/modules/modular_computers/file_system/programs/robotact.dm index 35377e5d4d25..59b48a43f930 100644 --- a/code/modules/modular_computers/file_system/programs/robotact.dm +++ b/code/modules/modular_computers/file_system/programs/robotact.dm @@ -137,12 +137,7 @@ switch(action) if("coverunlock") if(cyborg.locked) - cyborg.locked = FALSE - cyborg.update_icons() - if(cyborg.emagged) - cyborg.logevent("ChÃ¥vÃis cover lock has been [cyborg.locked ? "engaged" : "released"]") //"The cover interface glitches out for a split second" - else - cyborg.logevent("Chassis cover lock has been [cyborg.locked ? "engaged" : "released"]") + cyborg.toggle_cover() if("lawchannel") cyborg.set_autosay() diff --git a/code/modules/modular_computers/file_system/programs/techweb.dm b/code/modules/modular_computers/file_system/programs/techweb.dm index 9e6230200731..e96af25b6a15 100644 --- a/code/modules/modular_computers/file_system/programs/techweb.dm +++ b/code/modules/modular_computers/file_system/programs/techweb.dm @@ -64,31 +64,30 @@ ) // Serialize all nodes to display - for(var/tier in stored_research.tiers) - var/datum/techweb_node/node = SSresearch.techweb_node_by_id(tier) - var/enqueued_by_user = FALSE - - if((tier in stored_research.research_queue_nodes) && stored_research.research_queue_nodes[tier] == user) - enqueued_by_user = TRUE + for(var/node_path, node_tier in stored_research.tiers) + var/datum/techweb_node/node = SSresearch.techweb_nodes[node_path] // Ensure node is supposed to be visible - if (stored_research.hidden_nodes[tier]) + if (stored_research.hidden_nodes[node_path]) continue + var/mob/node_queuer = stored_research.research_queue_nodes[node_path] + var/enqueued_by_user = !isnull(node_queuer) && node_queuer == user + data["nodes"] += list(list( - "id" = node.id, + "path" = node_path, "is_free" = node.is_free(stored_research), "can_unlock" = stored_research.can_unlock_node(node), "have_experiments_done" = stored_research.have_experiments_for_node(node), - "tier" = stored_research.tiers[node.id], + "tier" = node_tier, "enqueued_by_user" = enqueued_by_user, - "discount_boosted" = node.discount_boosted + "discount_boosted" = !!stored_research.boosted_nodes[node_path], )) // Get experiments and serialize them var/list/exp_to_process = stored_research.available_experiments.Copy() - for (var/comp_experi in stored_research.completed_experiments) - exp_to_process += stored_research.completed_experiments[comp_experi] + for (var/experiment_type, experiment in stored_research.completed_experiments) + exp_to_process += experiment for (var/datum/experiment/unf_experi as anything in exp_to_process) data["experiments"][unf_experi.type] = unf_experi.to_ui_data() return data @@ -110,84 +109,78 @@ else to_chat(usr, span_boldwarning("Unauthorized Access. Please insert research ID card.")) return TRUE + if ("researchNode") - research_node(params["node_id"], usr) + research_node(text2path(params["node_path"]), usr) return TRUE if ("enqueueNode") - enqueue_node(params["node_id"], usr) + enqueue_node(text2path(params["node_path"]), usr) return TRUE if ("dequeueNode") - dequeue_node(params["node_id"], usr) + dequeue_node(text2path(params["node_path"]), usr) return TRUE /datum/computer_file/program/science/ui_static_data(mob/user) - . = list( - "static_data" = list(), - "point_types_abbreviations" = SSresearch.point_types, - ) - // Build node cache... // Note this looks a bit ugly but its to reduce the size of the JSON payload // by the greatest amount that we can, as larger JSON payloads result in // hanging when the user opens the UI - var/node_cache = list() - for (var/node_id in SSresearch.techweb_nodes) - var/datum/techweb_node/node = SSresearch.techweb_nodes[node_id] || SSresearch.error_node - var/compressed_id = "[compress_id(node.id)]" - node_cache[compressed_id] = list( + var/list/node_cache = list() + for (var/node_path, _node in SSresearch.techweb_nodes) + var/datum/techweb_node/node = _node + + var/list/node_data = list( "name" = node.display_name, "description" = node.description ) + if (LAZYLEN(node.research_costs)) - node_cache[compressed_id]["costs"] = list() - for (var/node_cost in node.research_costs) - node_cache[compressed_id]["costs"]["[compress_id(node_cost)]"] = node.research_costs[node_cost] - if (LAZYLEN(node.prereq_ids)) - node_cache[compressed_id]["prereq_ids"] = list() - for (var/prerequisite_node in node.prereq_ids) - node_cache[compressed_id]["prereq_ids"] += compress_id(prerequisite_node) - if (LAZYLEN(node.design_ids)) - node_cache[compressed_id]["design_ids"] = list() - for (var/unlocked_design in node.design_ids) - node_cache[compressed_id]["design_ids"] += compress_id(unlocked_design) - if (LAZYLEN(node.unlock_ids)) - node_cache[compressed_id]["unlock_ids"] = list() - for (var/unlocked_node in node.unlock_ids) - node_cache[compressed_id]["unlock_ids"] += compress_id(unlocked_node) + node_data["costs"] = list() + for (var/point_type, point_amount in node.research_costs) + node_data["costs"]["[compress_id(point_type)]"] = point_amount + if (LAZYLEN(node.prerequisite_nodes)) + node_data["prerequisite_nodes"] = list() + for (var/prerequisite_node in node.prerequisite_nodes) + node_data["prerequisite_nodes"] += compress_id(prerequisite_node) + if (LAZYLEN(node.unlocked_designs)) + node_data["unlocked_designs"] = list() + for (var/unlocked_design in node.unlocked_designs) + node_data["unlocked_designs"] += compress_id(unlocked_design) + if (LAZYLEN(node.unlocked_nodes)) + node_data["unlocked_nodes"] = list() + for (var/unlocked_node in node.unlocked_nodes) + node_data["unlocked_nodes"] += compress_id(unlocked_node) if (LAZYLEN(node.required_experiments)) - node_cache[compressed_id]["required_experiments"] = node.required_experiments + node_data["required_experiments"] = node.required_experiments if (LAZYLEN(node.discount_experiments)) - node_cache[compressed_id]["discount_experiments"] = node.discount_experiments + node_data["discount_experiments"] = node.discount_experiments if (LAZYLEN(node.discount_boosts)) - node_cache[compressed_id]["discount_boosts"] = node.discount_boosts + node_data["discount_boosts"] = node.discount_boosts + + var/compressed_id = "[compress_id(node_path)]" + node_cache[compressed_id] = node_data // Build design cache - var/design_cache = list() + var/list/design_cache = list() var/datum/asset/spritesheet_batched/research_designs/spritesheet = get_asset_datum(/datum/asset/spritesheet_batched/research_designs) var/size32x32 = "[spritesheet.name]32x32" - for (var/design_id in SSresearch.techweb_designs) - var/datum/design/design = SSresearch.techweb_designs[design_id] || SSresearch.error_design - var/compressed_id = "[compress_id(design.id)]" - var/size = spritesheet.icon_size_id(design.id) + for (var/design_path, _design in SSresearch.techweb_designs) + var/datum/design/design = _design - var/cost = list() - var/list/materials = design.materials - for(var/datum/material/mat in materials) - cost[mat.name] = OPTIMAL_COST(materials[mat]) + var/list/cost = list() + for(var/datum/material/mat, amount in design.materials) + cost[mat.name] = OPTIMAL_COST(amount) + var/size = spritesheet.icon_size_id(design.asset_id) + var/compressed_id = "[compress_id(design_path)]" design_cache[compressed_id] = list( design.name, cost, design.build_type, design.departmental_flags, - "[size == size32x32 ? "" : "[size] "][design.id]" + "[size == size32x32 ? "" : "[size] "][design.asset_id]" ) - // Ensure id cache is included for decompression - var/flat_id_cache = list() - for (var/id in id_cache) - flat_id_cache += id - var/list/department_flags = list() for (var/datum/job_department/department as anything in subtypesof(/datum/job_department)) if (department::department_bitflags) @@ -198,13 +191,16 @@ build_types -= "[AWAY_IMPRINTER]" build_types -= "[AWAY_LATHE]" - .["static_data"] = list( - "node_cache" = node_cache, - "design_cache" = design_cache, - "id_cache" = flat_id_cache, - "SHEET_MATERIAL_AMOUNT" = SHEET_MATERIAL_AMOUNT, - "build_types" = build_types, - "department_flags" = department_flags, + return list( + "point_types_abbreviations" = SSresearch.point_types, + "static_data" = list( + "node_cache" = node_cache, + "design_cache" = design_cache, + "id_cache" = assoc_to_keys(id_cache), + "SHEET_MATERIAL_AMOUNT" = SHEET_MATERIAL_AMOUNT, + "build_types" = build_types, + "department_flags" = department_flags, + ), ) /** @@ -220,60 +216,71 @@ id_cache_seq += 1 return id_cache[id] -/datum/computer_file/program/science/proc/enqueue_node(id, mob/user) - if(!stored_research || !stored_research.available_nodes[id] || stored_research.researched_nodes[id]) +/datum/computer_file/program/science/proc/enqueue_node(node_path, mob/user) + if(!stored_research || !stored_research.available_nodes[node_path] || stored_research.researched_nodes[node_path]) computer.say("Node enqueue failed: Either no techweb is found, node is already researched or is not available!") return FALSE - stored_research.enqueue_node(id, user) + stored_research.enqueue_node(node_path, user) return TRUE -/datum/computer_file/program/science/proc/dequeue_node(id, mob/user) - if(!stored_research || !stored_research.available_nodes[id] || stored_research.researched_nodes[id]) +/datum/computer_file/program/science/proc/dequeue_node(node_path, mob/user) + if(!stored_research || !stored_research.available_nodes[node_path] || stored_research.researched_nodes[node_path]) computer.say("Node dequeue failed: Either no techweb is found, node is already researched or is not available!") return FALSE - stored_research.dequeue_node(id, user) + stored_research.dequeue_node(node_path, user) return TRUE -/datum/computer_file/program/science/proc/research_node(id, mob/user) - if(!stored_research || !stored_research.available_nodes[id] || stored_research.researched_nodes[id]) - computer.say("Node unlock failed: Either no techweb is found, node is already researched or is not available!") +/datum/computer_file/program/science/proc/research_node(node_path, mob/user) + if(!stored_research) + computer.say("Node unlock failed: No techweb found!") + return FALSE + if(!stored_research.available_nodes[node_path]) + computer.say("Node unlock failed: Node is not available!") return FALSE - var/datum/techweb_node/tech_node = SSresearch.techweb_node_by_id(id) - if(!istype(tech_node)) + if(stored_research.researched_nodes[node_path]) + computer.say("Node unlock failed: Node is already researched!") + return FALSE + + var/datum/techweb_node/unlocked_node = SSresearch.techweb_nodes[node_path] + if(!istype(unlocked_node)) computer.say("Node unlock failed: Unknown error.") return FALSE - var/list/price = tech_node.get_price(stored_research) - if(stored_research.can_afford(price)) - user.investigate_log("researched [id]([json_encode(price)]) on techweb id [stored_research.id] via [computer].", INVESTIGATE_RESEARCH) - if(istype(stored_research, /datum/techweb/science)) - SSblackbox.record_feedback("associative", "science_techweb_unlock", 1, list("id" = "[id]", "name" = tech_node.display_name, "price" = "[json_encode(price)]", "time" = ISOtime())) - if(stored_research.research_node_id(id)) - computer.say("Successfully researched [tech_node.display_name].") - var/logname = "Unknown" - if(HAS_AI_ACCESS(user)) - logname = "AI [user.name]" - if(iscyborg(user)) - logname = "CYBORG [user.name]" - if(iscarbon(user)) - var/obj/item/card/id/idcard = user.get_active_held_item() - if(istype(idcard)) - logname = "[idcard.registered_name]" - if(ishuman(user)) - var/mob/living/carbon/human/human_user = user - var/obj/item/worn = human_user.wear_id - if(istype(worn)) - var/obj/item/card/id/id_card_of_human_user = worn.GetID() - if(istype(id_card_of_human_user)) - logname = "[id_card_of_human_user.registered_name]" - stored_research.research_logs += list(list( - "node_name" = tech_node.display_name, - "node_cost" = price[TECHWEB_POINT_TYPE_GENERIC], - "node_researcher" = logname, - "node_research_location" = "[get_area(computer)] ([user.x],[user.y],[user.z])", - )) - return TRUE - else - computer.say("Failed to research node: Internal database error!") - return FALSE - computer.say("Not enough research points...") - return FALSE + + var/list/price = unlocked_node.get_price(stored_research) + if(!stored_research.can_afford(price)) + computer.say("Not enough research points...") + return FALSE + + if(!stored_research.research_node(unlocked_node, research_source = computer)) + computer.say("Failed to research node: Internal database error!") + return FALSE + + user.investigate_log("researched [unlocked_node.display_name]([json_encode(price)]) on techweb id [stored_research.id].", INVESTIGATE_RESEARCH) + if(istype(stored_research, /datum/techweb/science)) + SSblackbox.record_feedback("associative", "science_techweb_unlock", 1, list("path" = "[node_path]", "name" = unlocked_node.display_name, "price" = "[json_encode(price)]", "time" = ISOtime())) + + computer.say("Successfully researched [unlocked_node.display_name].") + + var/logname = "Unknown" + if(HAS_AI_ACCESS(user)) + logname = "AI [user.name]" + if(iscyborg(user)) + logname = "CYBORG [user.name]" + + if(ishuman(user)) + var/mob/living/carbon/human/human_user = user + var/obj/item/card/id/id = human_user.wear_id?.GetID() + if(istype(id)) + logname = "[id.registered_name]" + else if(iscarbon(user)) + var/obj/item/card/id/idcard = user.get_active_held_item() + if(istype(idcard)) + logname = "[idcard.registered_name]" + + stored_research.research_logs += list(list( + "node_name" = unlocked_node.display_name, + "node_cost" = price[TECHWEB_POINT_TYPE_GENERIC], + "node_researcher" = logname, + "node_research_location" = "[get_area(computer)] ([user.x],[user.y],[user.z])", + )) + return TRUE diff --git a/code/modules/pai/debug.dm b/code/modules/pai/debug.dm index 36b3cae00b46..dbbeea6a9594 100644 --- a/code/modules/pai/debug.dm +++ b/code/modules/pai/debug.dm @@ -1,4 +1,6 @@ -ADMIN_VERB(makepAI, R_FUN, "Make pAI", "Specify a location to spawn a pAI device, then specify a key to play that pAI", ADMIN_CATEGORY_FUN, turf/target) +ADMIN_VERB(makepAI, R_FUN, "Make pAI", "Specify a location to spawn a pAI device, then specify a key to play that pAI", ADMIN_CATEGORY_FUN) + VERB_ARG_TYPED(target, VERB_ARG_TYPE_TURF, VERB_ARG_SOURCE_VIEW, /turf) + var/list/available = list() for(var/mob/player as anything in GLOB.player_list) if(player.client && player.key) diff --git a/code/modules/pai/defense.dm b/code/modules/pai/defense.dm index 05b1eca4f5f6..1df6f20ca808 100644 --- a/code/modules/pai/defense.dm +++ b/code/modules/pai/defense.dm @@ -71,6 +71,7 @@ fold_in(force = TRUE) if(amount > 0) to_chat(src, span_userdanger("The impact degrades your holochassis!")) + update_health_hud() return amount /// Called when we take burn or brute damage, pass it to the shell instead diff --git a/code/modules/pai/pai.dm b/code/modules/pai/pai.dm index d5cf47faa872..218622ac6269 100644 --- a/code/modules/pai/pai.dm +++ b/code/modules/pai/pai.dm @@ -168,13 +168,6 @@ . = ..() . += "Its master ID string seems to be [(!master_name || emagged) ? "empty" : master_name]." -/mob/living/silicon/pai/get_status_tab_items() - . = ..() - if(!stat) - . += "Emitter Integrity: [holochassis_health * (100 / HOLOCHASSIS_MAX_HEALTH)]." - else - . += "Systems nonfunctional." - /mob/living/silicon/pai/Exited(atom/movable/gone, direction) if(gone == atmos_analyzer) atmos_analyzer = null @@ -243,7 +236,9 @@ laws.name = "PAI Directives" /mob/living/silicon/pai/process(seconds_per_tick) - holochassis_health = clamp((holochassis_health + (HOLOCHASSIS_REGEN_PER_SECOND * seconds_per_tick)), -50, HOLOCHASSIS_MAX_HEALTH) + if(holochassis_health != HOLOCHASSIS_MAX_HEALTH) + holochassis_health = clamp((holochassis_health + (HOLOCHASSIS_REGEN_PER_SECOND * seconds_per_tick)), -50, HOLOCHASSIS_MAX_HEALTH) + update_health_hud() /mob/living/silicon/pai/Process_Spacemove(movement_dir = 0, continuous_move = FALSE) . = ..() @@ -487,3 +482,7 @@ /mob/living/silicon/pai/proc/on_tried_access(datum/source, obj/door_attempt, list/player_access) SIGNAL_HANDLER return ACCESS_DISALLOWED + +/mob/living/silicon/pai/update_health_hud(healthpercent) + healthpercent = (holochassis_health / HOLOCHASSIS_MAX_HEALTH) * 100 + return ..() diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index 5627d3987778..edfaac75f776 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -143,6 +143,10 @@ update_appearance() return ITEM_INTERACT_SUCCESS + // Always label the clipboard so all of the papers don't have to be taken out. + if(istype(tool, /obj/item/hand_labeler)) + return tool.interact_with_atom(src, user) + if(top_paper) top_paper.item_interaction(user, user.get_active_held_item()) update_appearance() diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index d0877cdd259f..45fcc5583755 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -156,7 +156,10 @@ var/obj/item/paper/med_record_paper = new /obj/item/paper(src) var/med_record_text = "
Medical Record

" med_record_text += "Name: [record.name] Rank: [record.rank]
\nGender: [record.gender]
\nAge: [record.age]
" - med_record_text += "
\n
Medical Data

\nBlood Type: [record.blood_type]
\nDNA: [record.dna_string]
\n
\nPhysical Status: [record.physical_status]
\nMental Status: [record.mental_status]
\nMinor Disabilities: [record.minor_disabilities]
\nDetails: [record.minor_disabilities_desc]
\n
\nMajor Disabilities: [record.major_disabilities]
\nDetails: [record.major_disabilities_desc]
\n
\nImportant Notes:
\n\t[record.medical_notes]
\n
\n
Comments/Log

" + var/list/note_texts = list() + for(var/datum/medical_note/note as anything in record.medical_notes) + note_texts += note.content + med_record_text += "
\n
Medical Data

\nBlood Type: [record.blood_type]
\nDNA: [record.dna_string]
\n
\nPhysical Status: [record.physical_status]
\nMental Status: [record.mental_status]
\nMinor Disabilities: [record.minor_disabilities]
\nDetails: [record.minor_disabilities_desc]
\n
\nMajor Disabilities: [record.major_disabilities]
\nDetails: [record.major_disabilities_desc]
\n
\nImportant Notes:
\n\t[jointext(note_texts, "
\n\t")]
\n
\n
Comments/Log

" med_record_text += "" med_record_paper.add_raw_text(med_record_text) med_record_paper.name = "paper - '[record.name]'" diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index 9457e1410f6c..8ba2db0ee139 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -95,17 +95,11 @@ /obj/item/folder/item_interaction(mob/living/user, obj/item/tool, list/modifiers) if(is_type_in_typecache(tool, folder_insertables)) - return insertables_act(user, tool) + return interact_with_insertables(tool, user) if(tool.tool_behaviour == TOOL_KNIFE || tool.tool_behaviour == TOOL_WIRECUTTER) return sharp_thing_act(user, tool) return NONE -/obj/item/folder/proc/insertables_act(mob/living/user, obj/item/tool) - if(!user.transferItemToLoc(tool, src, silent = FALSE)) - return ITEM_INTERACT_BLOCKING - update_appearance() - return ITEM_INTERACT_SUCCESS - /obj/item/folder/nameformat(input, user) playsound(src, SFX_WRITING_PEN, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, SOUND_FALLOFF_EXPONENT + 3, ignore_walls = FALSE) return"folder[(input ? " - '[input]'" : null)]" @@ -133,7 +127,9 @@ interacting_with.do_pickup_animation(src) interacting_with.forceMove(src) - playsound(src, interacting_with.pickup_sound, PICKUP_SOUND_VOLUME, interacting_with.sound_vary, ignore_walls = FALSE) + if(interacting_with.pickup_sound) + playsound(src, interacting_with.pickup_sound, PICKUP_SOUND_VOLUME, interacting_with.sound_vary, ignore_walls = FALSE) + update_appearance() return ITEM_INTERACT_SUCCESS diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 197abf7b53ca..0019881280c7 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -416,8 +416,8 @@ GAME_VERB_SRC(/obj/item/paper, rename, usr, "Rename paper", null) return new_plane /obj/item/paper/item_interaction(mob/living/user, obj/item/tool, list/modifiers) - // Enable picking paper up by clicking on it with the clipboard or paper bin - if(istype(tool, /obj/item/clipboard) || istype(tool, /obj/item/paper_bin)) + // Enable picking paper up by clicking on it with a clipboard, paper bin, or folder + if(istype(tool, /obj/item/clipboard) || istype(tool, /obj/item/paper_bin) || istype(tool, /obj/item/folder)) tool.item_interaction(user, src) return ITEM_INTERACT_SUCCESS diff --git a/code/modules/paperwork/paper_biscuit.dm b/code/modules/paperwork/paper_biscuit.dm index 88f4a0067e88..3bc950252a1e 100644 --- a/code/modules/paperwork/paper_biscuit.dm +++ b/code/modules/paperwork/paper_biscuit.dm @@ -81,11 +81,6 @@ return ..() -/obj/item/folder/biscuit/insertables_act(mob/living/user, obj/item/tool) - if(!crack_check(user)) - return ITEM_INTERACT_BLOCKING - return ..() - /obj/item/folder/biscuit/interact_with_insertables(atom/interacting_with, mob/living/user) if(!crack_check(user)) return ITEM_INTERACT_BLOCKING diff --git a/code/modules/paperwork/paperwork.dm b/code/modules/paperwork/paperwork.dm index 68688589b73f..fefa9fa90784 100644 --- a/code/modules/paperwork/paperwork.dm +++ b/code/modules/paperwork/paperwork.dm @@ -21,6 +21,9 @@ throw_range = 1 throw_speed = 1 layer = MOB_LAYER + // Could use a more specific sound since it's a lot of paper (ditto with `/documents`). + drop_sound = 'sound/items/handling/paper_drop.ogg' + pickup_sound = 'sound/items/handling/paper_pickup.ogg' ///The stamp overlay, used to show that the paperwork is complete without making a bunch of sprites var/mutable_appearance/stamp_overlay ///The specific stamp icon to be overlaid on the paperwork diff --git a/code/modules/point/point.dm b/code/modules/point/point.dm index 359b79805b7b..a77710e9a4c9 100644 --- a/code/modules/point/point.dm +++ b/code/modules/point/point.dm @@ -106,7 +106,8 @@ * * overridden here and in /mob/dead/observer for different point span classes and sanity checks */ -GAME_VERB(/mob, pointed, "Point To", null, atom/A as mob|obj|turf) +GAME_VERB_CONTEXT(/mob, pointed, "Point To", "", null, /atom) + VERB_ARG_TYPED(A, VERB_ARG_TYPE_MOB | VERB_ARG_TYPE_OBJ | VERB_ARG_TYPE_TURF, VERB_ARG_SOURCE_VIEW, /atom) if(isnull(A) || istype(A, /obj/effect/temp_visual/point) || isarea(A)) return FALSE diff --git a/code/modules/power/apc/apc_attack.dm b/code/modules/power/apc/apc_attack.dm index 993dd336d400..d2a6ed910825 100644 --- a/code/modules/power/apc/apc_attack.dm +++ b/code/modules/power/apc/apc_attack.dm @@ -147,7 +147,7 @@ return TRUE . = TRUE if(isAI(user) || iscyborg(user)) - if(aidisabled) + if(aidisabled || user.has_status_effect(/datum/status_effect/firewalled)) . = FALSE else if(istype(malfai) && !(malfai == user || (user in malfai.connected_robots))) . = FALSE diff --git a/code/modules/power/apc/apc_main.dm b/code/modules/power/apc/apc_main.dm index eae4e3f181e8..19883a9e8817 100644 --- a/code/modules/power/apc/apc_main.dm +++ b/code/modules/power/apc/apc_main.dm @@ -575,6 +575,12 @@ total_static_energy_usage += APC_CHANNEL_IS_ON(environ) * area.energy_usage[AREA_USAGE_STATIC_ENVIRON] area.clear_usage() + if(malfai && COOLDOWN_FINISHED(src, malf_ai_pt_generation) && !(machine_stat & (BROKEN|MAINT)) && !failure_timer && (total_static_energy_usage + 60 KILO JOULES) <= (terminal?.surplus() + cell.charge) && malfai.malf_picker.processing_time < MALF_MAX_PP) + //if we're hacked, we're off point cooldown, we're not broken or off temporarily, we can gather enough power, and our ai can take more points + total_static_energy_usage += 60 KILO JOULES + COOLDOWN_START(src, malf_ai_pt_generation, 30 SECONDS) + malfai.malf_picker.processing_time += 1 + if(total_static_energy_usage) //Use power from static power users. var/grid_used = min(terminal?.surplus(), total_static_energy_usage) terminal?.add_load(grid_used) @@ -598,10 +604,6 @@ if(hacked_flicker_counter <= 0) flicker_hacked_icon() - if(malfai && COOLDOWN_FINISHED(src, malf_ai_pt_generation) && cell.use(60 KILO JOULES) > 0 && malfai.malf_picker.processing_time < MALF_MAX_PP) // Over time generation of malf points for the ai controlling it, costs a bit of power - COOLDOWN_START(src, malf_ai_pt_generation, 30 SECONDS) - malfai.malf_picker.processing_time += 1 - //dont use any power from that channel if we shut that power channel off if(operating) lastused_light = APC_CHANNEL_IS_ON(lighting) ? area.energy_usage[AREA_USAGE_LIGHT] + area.energy_usage[AREA_USAGE_STATIC_LIGHT] : 0 diff --git a/code/modules/power/monitor.dm b/code/modules/power/monitor.dm index 1cff0f5f1a1b..27396f558bf7 100644 --- a/code/modules/power/monitor.dm +++ b/code/modules/power/monitor.dm @@ -25,6 +25,10 @@ history["supply"] = list() history["demand"] = list() +/obj/machinery/computer/monitor/Destroy(force) + SSmachines.processing_late -= src + return ..() + /obj/machinery/computer/monitor/process_late() if(!get_powernet()) update_use_power(IDLE_POWER_USE) diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index d554e911e06f..6591e780042a 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -615,7 +615,7 @@ user.pixel_x = 8 user.pixel_y = -12 - emitter.last_projectile_params = calculate_projectile_angle_and_pixel_offsets(user, null, list2params(modifiers)) + emitter.last_projectile_params = calculate_projectile_angle_and_pixel_offsets(user, null, modifiers) if(emitter.charge >= 10 && world.time > delay) emitter.charge -= 10 diff --git a/code/modules/projectiles/ammunition/ballistic/rifle.dm b/code/modules/projectiles/ammunition/ballistic/rifle.dm index 0ece2eed5c5e..b8c76f5ace63 100644 --- a/code/modules/projectiles/ammunition/ballistic/rifle.dm +++ b/code/modules/projectiles/ammunition/ballistic/rifle.dm @@ -80,11 +80,7 @@ /obj/item/disk/design_disk/tear_gas_40mm name = "40mm riot suppression grenade shells design disk" - -/obj/item/disk/design_disk/liberator/Initialize(mapload) - . = ..() - blueprints += new /datum/design/tear_gas_40mm - blueprints += new /datum/design/rubber_40mm + blueprints = list(/datum/design/tear_gas_40mm, /datum/design/rubber_40mm) // Rebar Bolts diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index 91b0ea8696d3..1f27815d4b35 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -390,10 +390,7 @@ /obj/item/disk/design_disk/liberator name = "illegal 3D printer design disk" - -/obj/item/disk/design_disk/liberator/Initialize(mapload) - . = ..() - blueprints += new /datum/design/liberator_gun + blueprints = list(/datum/design/liberator_gun) #undef DOORHICKEY_GUN_MIN_DAMAGE #undef DOORHICKEY_GUN_MAX_DAMAGE diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 22473f55199f..1100f4d72e32 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -1,3 +1,6 @@ +#define PKA_COOLDOWN_INCREMENT 3.2 +#define STANDARD_RECHARGE_TIME 16 + /obj/item/gun/energy/recharge/kinetic_accelerator name = "proto-kinetic accelerator" desc = "A self recharging, ranged mining tool that does increased damage in low pressure." @@ -10,6 +13,7 @@ resistance_flags = FIRE_PROOF weapon_weight = WEAPON_LIGHT gun_flags = NOT_A_REAL_GUN + recharge_time = STANDARD_RECHARGE_TIME ///List of all mobs that projectiles fired from this gun will ignore. var/list/ignored_mob_types ///List of all modkits currently in the kinetic accelerator. @@ -418,7 +422,7 @@ /obj/item/borg/upgrade/modkit/cooldown name = "cooldown decrease" desc = "Decreases the cooldown of a kinetic accelerator. Not rated for minebot use." - modifier = 3.2 + modifier = -PKA_COOLDOWN_INCREMENT minebot_upgrade = FALSE custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 0.75, /datum/material/gold = SHEET_MATERIAL_AMOUNT * 0.75, /datum/material/uranium = HALF_SHEET_MATERIAL_AMOUNT) @@ -427,7 +431,7 @@ var/new_recharge_time = initial(KA.recharge_time) for(var/obj/item/borg/upgrade/modkit/modkit_upgrade as anything in KA.modkits) if(istype(modkit_upgrade, src)) - new_recharge_time -= modifier + new_recharge_time += modkit_upgrade.modifier return new_recharge_time @@ -516,7 +520,7 @@ turf_aoe = TRUE custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 4, /datum/material/silver = SHEET_MATERIAL_AMOUNT, /datum/material/gold = SHEET_MATERIAL_AMOUNT, /datum/material/diamond = SHEET_MATERIAL_AMOUNT, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 0.75) // Negates one CD modifier - modifier = -/obj/item/borg/upgrade/modkit/cooldown::modifier + modifier = PKA_COOLDOWN_INCREMENT /obj/item/borg/upgrade/modkit/cooldown/aoe/mobs name = "offensive explosion" @@ -748,3 +752,6 @@ var/new_color = tgui_color_picker(user, "", "Choose Color", bolt_color) bolt_color = new_color || bolt_color + +#undef PKA_COOLDOWN_INCREMENT +#undef STANDARD_RECHARGE_TIME diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index d7aa59766b3c..59ce56dc654d 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -1339,7 +1339,7 @@ var/ox = round(screenview[1] * 0.5) - user.client.pixel_x //"origin" x var/oy = round(screenview[2] * 0.5) - user.client.pixel_y //"origin" y - angle = ATAN2(tx - oy, ty - ox) + angle = ATAN2(ty - oy, tx - ox) return list(angle, p_x, p_y) /obj/projectile/experience_pressure_difference() diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 98d4d381635e..45a1982be3c8 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -1,6 +1,6 @@ /obj/projectile/bullet name = "bullet" - icon_state = "bullet" + icon_state = "bullet_tracer" damage = 60 damage_type = BRUTE armor_flag = BULLET diff --git a/code/modules/projectiles/projectile/bullets/_incendiary.dm b/code/modules/projectiles/projectile/bullets/_incendiary.dm index 0e3b0250b4a6..446b4b416b4c 100644 --- a/code/modules/projectiles/projectile/bullets/_incendiary.dm +++ b/code/modules/projectiles/projectile/bullets/_incendiary.dm @@ -1,5 +1,6 @@ /obj/projectile/bullet/incendiary damage = 20 + icon_state = "infernoshot" /// How many firestacks to apply to the target var/fire_stacks = 4 /// If TRUE, leaves a trail of hotspots as it flies, very very chaotic diff --git a/code/modules/projectiles/projectile/bullets/revolver.dm b/code/modules/projectiles/projectile/bullets/revolver.dm index 1b8bd34088b2..9afd16797abc 100644 --- a/code/modules/projectiles/projectile/bullets/revolver.dm +++ b/code/modules/projectiles/projectile/bullets/revolver.dm @@ -136,6 +136,7 @@ /obj/projectile/bullet/c357 name = ".357 bullet" + icon_state = "bullet" damage = 60 wound_bonus = -30 @@ -177,7 +178,7 @@ /obj/projectile/bullet/pea/on_hit(mob/living/carbon/target, blocked = 0, pierce_hit) if(istype(target) && blocked != 100) - if(iszombie(target)) // https://www.youtube.com/watch?v=ssZoq1eUK-s + if(target.has_status_effect(/datum/status_effect/zombie)) // https://www.youtube.com/watch?v=ssZoq1eUK-s target.adjust_brute_loss(15) if(target.can_inject(target_zone = def_zone)) // Pass the hit zone to see if it can inject by whether it hit the head or the body. ..() diff --git a/code/modules/projectiles/projectile/bullets/shotgun.dm b/code/modules/projectiles/projectile/bullets/shotgun.dm index aa6fc3d7979b..b54694e14898 100644 --- a/code/modules/projectiles/projectile/bullets/shotgun.dm +++ b/code/modules/projectiles/projectile/bullets/shotgun.dm @@ -1,6 +1,6 @@ /obj/projectile/bullet/shotgun_slug name = "12g shotgun slug" - icon_state = "pellet" + icon_state = "bullet_tracer" damage = 25 armour_penetration = 30 sharpness = SHARP_POINTY @@ -9,7 +9,6 @@ /obj/projectile/bullet/shotgun_slug/milspec name = "12g shotgun milspec slug" - icon_state = "pellet" damage = 50 /obj/projectile/bullet/shotgun_slug/executioner @@ -48,7 +47,6 @@ /obj/projectile/bullet/incendiary/shotgun name = "incendiary slug" - icon_state = "pellet" damage = 20 /obj/projectile/bullet/incendiary/shotgun/no_trail @@ -58,6 +56,7 @@ /obj/projectile/bullet/incendiary/shotgun/dragonsbreath name = "dragonsbreath pellet" + icon_state = "pellet_tracer" damage = 5 /obj/projectile/bullet/shotgun_stunslug @@ -73,7 +72,7 @@ /obj/projectile/bullet/shotgun_frag12 name ="frag12 slug" - icon_state = "pellet" + icon_state = "bullet_tracer" damage = 15 paralyze = 10 @@ -83,7 +82,7 @@ return BULLET_ACT_HIT /obj/projectile/bullet/pellet - icon_state = "pellet" + icon_state = "pellet_tracer" damage_falloff_tile = -0.25 /obj/projectile/bullet/pellet/shotgun_buckshot @@ -100,6 +99,7 @@ * The casings they're in have a very small chance to misfire and will gradually damage the firearm, making it weaker. */ /obj/projectile/bullet/pellet/shotgun_buckshot/old + icon_state = "pellet" damage_falloff_tile = -1 wound_bonus = -100 exposed_wound_bonus = -100 @@ -117,6 +117,7 @@ /obj/projectile/bullet/pellet/shotgun_rubbershot name = "rubber shot pellet" + icon_state = "pellet" damage = 3 stamina = 10 sharpness = NONE @@ -140,6 +141,7 @@ /obj/projectile/bullet/pellet/shotgun_incapacitate name = "incapacitating pellet" + icon_state = "pellet" damage = 1 stamina = 6 embed_type = null @@ -191,7 +193,7 @@ // Mech Scattershot /obj/projectile/bullet/scattershot - icon_state = "pellet" + icon_state = "pellet_tracer" damage = 24 //Breaching Ammo diff --git a/code/modules/projectiles/projectile/bullets/sniper.dm b/code/modules/projectiles/projectile/bullets/sniper.dm index 0a13cbb9e84c..95e7ddeb017e 100644 --- a/code/modules/projectiles/projectile/bullets/sniper.dm +++ b/code/modules/projectiles/projectile/bullets/sniper.dm @@ -54,6 +54,7 @@ /obj/projectile/bullet/p50/incendiary name =".50 BMG incendiary bullet" + icon_state = "infernoshot" damage_type = BURN paralyze = 0 dismemberment = 0 diff --git a/code/modules/reagents/chemistry/items.dm b/code/modules/reagents/chemistry/items.dm index 73d8a8bc8c10..e685e2151f4b 100644 --- a/code/modules/reagents/chemistry/items.dm +++ b/code/modules/reagents/chemistry/items.dm @@ -130,7 +130,7 @@ for(var/datum/reagent/reagent as anything in cont.reagents.reagent_list) // bloodtyping if blood present in container var/blood_info = null if(reagent.data) - var/blood = reagent.data["blood_type"] + var/blood = reagent.data[BLOOD_DATA_TYPE] if(istype(blood, /datum/blood_type)) var/datum/blood_type/blood_type = blood var/type = blood_type.get_type() diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 4b674656b6af..e17568e5c200 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -839,7 +839,7 @@ /datum/reagent/toxin, /datum/reagent/toxin/plasma, /datum/reagent/uranium, - /datum/reagent/consumable/liquidelectricity/enriched, + /datum/reagent/consumable/liquidelectricity, /datum/reagent/medicine/c2/synthflesh, ) diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index 61af619cd31b..316d595af0ff 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -148,8 +148,8 @@ return data data["has_blood"] = TRUE data["blood"] = list() - data["blood"]["dna"] = blood.data["blood_DNA"] || "none" - data["blood"]["type"] = blood.data["blood_type"] || "none" + data["blood"]["dna"] = blood.data[BLOOD_DATA_DNA] || "none" + data["blood"]["type"] = blood.data[BLOOD_DATA_TYPE] || "none" data["viruses"] = get_viruses_data(blood) data["resistances"] = get_resistance_data(blood) return data @@ -218,7 +218,7 @@ /// Tries to locate a reagent with valid blood_type data /obj/machinery/computer/pandemic/proc/get_blood_reagent() for (var/datum/reagent/reagent as anything in beaker?.reagents?.reagent_list) - if (reagent.data?["blood_type"]) + if (reagent.data?[BLOOD_DATA_TYPE]) return reagent /** diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index 0bbc5167dfab..03ba9a01b2f4 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -140,14 +140,14 @@ if(current_cycle != 36 || creation_purity > 0.6) return - if(istype(affected_mob.dna.species, /datum/species/human/krokodil_addict)) + if(HAS_TRAIT(affected_mob, TRAIT_HUSK)) return to_chat(affected_mob, span_userdanger("Your skin falls off easily!")) var/mob/living/carbon/human/affected_human = affected_mob affected_human.set_facial_hairstyle("Shaved", update = FALSE) affected_human.set_hairstyle("Bald", update = FALSE) - affected_mob.set_species(/datum/species/human/krokodil_addict) + affected_mob.become_husk(/datum/status_effect/zombie::id) if(affected_mob.adjust_brute_loss(25, updating_health = FALSE, required_bodytype = affected_bodytype)) // holy shit your skin just FELL THE FUCK OFF return UPDATE_MOB_HEALTH diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 4988fa5295d3..6f6bca9ce317 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -85,6 +85,8 @@ /datum/reagent/consumable/nutriment/on_new(list/supplied_data) . = ..() if(!data) + if(carry_food_tastes) + RegisterSignal(src, COMSIG_REAGENT_GROWN_IN_PLANT, PROC_REF(grown_in_plant)) return // taste data can sometimes be ("salt" = 3, "chips" = 1) // and we want it to be in the form ("salt" = 0.75, "chips" = 0.25) @@ -120,6 +122,15 @@ data = taste_amounts +/// Inherits all the tastes of plants that we are grown in +/datum/reagent/consumable/nutriment/proc/grown_in_plant(datum/source, obj/item/seeds/our_seeds, obj/item/our_plant) + SIGNAL_HANDLER + + if(!istype(our_plant, /obj/item/food/grown)) + return + var/obj/item/food/grown/plant_food = our_plant + data = counterlist_normalise(LAZYCOPY(plant_food.tastes)) + /datum/reagent/consumable/nutriment/get_taste_description(mob/living/taster) if(length(data)) return data @@ -1023,27 +1034,48 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED randomized_spawns = REAGENT_SPAWN_ALL_RANDOM_SPAWNS -/datum/reagent/consumable/liquidelectricity/enriched - name = "Enriched Liquid Electricity" +/datum/reagent/consumable/liquidelectricity/on_new(new_data) + . = ..() + RegisterSignal(src, COMSIG_REAGENT_GROWN_IN_PLANT, PROC_REF(grown_in_plant)) + // Defaults to "enriched" state if data does not say otherwise + if(isnull(LAZYACCESS(data, BLOOD_DATA_ENRICHED_ETHEREAL))) + LAZYSET(data, BLOOD_DATA_ENRICHED_ETHEREAL, TRUE) -/datum/reagent/consumable/liquidelectricity/enriched/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume) //can't be on life because of the way blood works. +/datum/reagent/consumable/liquidelectricity/on_merge(list/mix_data, amount) . = ..() - if(!(methods & (INGEST|INJECT|PATCH|INHALE)) || !iscarbon(exposed_mob)) + // Inherits the incoming reagent's enriched state if it's greater in volume + if(amount > volume) + LAZYSET(data, BLOOD_DATA_ENRICHED_ETHEREAL, LAZYACCESS(mix_data, BLOOD_DATA_ENRICHED_ETHEREAL)) + +/datum/reagent/consumable/liquidelectricity/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume) //can't be on life because of the way blood works. + . = ..() + if(!LAZYACCESS(data, BLOOD_DATA_ENRICHED_ETHEREAL)) + return + if(!(methods & (INGEST|INJECT|PATCH|INHALE))) return - var/mob/living/carbon/exposed_carbon = exposed_mob - var/obj/item/organ/stomach/ethereal/stomach = exposed_carbon.get_organ_slot(ORGAN_SLOT_STOMACH) + var/obj/item/organ/stomach/ethereal/stomach = exposed_mob.get_organ_slot(ORGAN_SLOT_STOMACH) if(istype(stomach)) stomach.adjust_charge(reac_volume * 30 * ETHEREAL_DISCHARGE_RATE) -/datum/reagent/consumable/liquidelectricity/enriched/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, metabolization_ratio) +/datum/reagent/consumable/liquidelectricity/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, metabolization_ratio) . = ..() + if(!LAZYACCESS(data, BLOOD_DATA_ENRICHED_ETHEREAL)) + return + if(HAS_TRAIT(affected_mob, TRAIT_ETHEREAL_METABOLISM)) affected_mob.adjust_blood_volume(1 * seconds_per_tick) + else if(SPT_PROB(10, seconds_per_tick)) //lmao at the newbs who eat energy bars - affected_mob.electrocute_act(rand(5,10), "Liquid Electricity in their body", 1, SHOCK_NOGLOVES) //the shock is coming from inside the house + affected_mob.electrocute_act(rand(5, 10), "Liquid Electricity in their body", 1, SHOCK_NOGLOVES) //the shock is coming from inside the house playsound(affected_mob, SFX_SPARKS, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) +/// Liquid Electricity in plants is unenriched unless the plant has the relevant gene +/datum/reagent/consumable/liquidelectricity/proc/grown_in_plant(datum/source, obj/item/seeds/our_seeds, obj/item/our_plant) + SIGNAL_HANDLER + + LAZYSET(data, BLOOD_DATA_ENRICHED_ETHEREAL, !!our_seeds.get_gene(/datum/plant_gene/trait/cell_charge)) + /datum/reagent/consumable/astrotame name = "Astrotame" description = "A space age artificial sweetener." @@ -1377,4 +1409,3 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED randomized_spawns = REAGENT_SPAWN_ALL_RANDOM_SPAWNS default_container = /obj/item/reagent_containers/condiment/pack/beef_flavour - diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 731c86d973e0..cda2ef64b817 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -317,15 +317,19 @@ /// Add about half this much extra blood regen per second. var/extra_regen = 0.25 - /// Add many extra units of blood per unit of saline. - var/dilution_per_unit = 5 - - /// Doesn't dilute blood beyond this point. - var/dilution_cap = BLOOD_VOLUME_NORMAL - /// Only supplements blood types that use this restoration chem. var/required_restoration_chem = /datum/reagent/iron +/datum/reagent/medicine/salglu_solution/on_mob_add(mob/living/affected_mob, amount) + . = ..() + if(affected_mob.get_bloodtype()?.restoration_chem != required_restoration_chem) + return + + if(affected_mob.has_status_effect(/datum/status_effect/stacking/saline_glucose_dilution)) + return + + affected_mob.apply_status_effect(/datum/status_effect/stacking/saline_glucose_dilution) + /datum/reagent/medicine/salglu_solution/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, metabolization_ratio) . = ..() var/need_mob_update = FALSE diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index b2b532c71659..33ec599c855c 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -25,11 +25,12 @@ /datum/reagent/blood/on_new(list/data) . = ..() // If we were artificially created without blood data, we still want to have the blood_reagent element for exposure effects - if(!istype(data) || !data["blood_type"]) - AddElement(/datum/element/blood_reagent, null, get_blood_type(BLOOD_TYPE_UNIVERSAL)) + if(isnull(LAZYACCESS(data, BLOOD_DATA_TYPE))) + RegisterSignal(src, COMSIG_REAGENT_GROWN_IN_PLANT, PROC_REF(grown_in_plant)) + AddElement(/datum/element/blood_reagent, null, get_blood_type(/datum/blood_type/universal)) return - var/datum/blood_type/blood_type = data["blood_type"] + var/datum/blood_type/blood_type = data[BLOOD_DATA_TYPE] if(!istype(blood_type)) return @@ -42,12 +43,12 @@ return ..() if(!HAS_TRAIT(taster, TRAIT_DETECTIVES_TASTE)) return ..() - var/blood_type = data?["blood_type"] + var/blood_type = data?[BLOOD_DATA_TYPE] if(!blood_type) return ..() return list("[blood_type] type blood" = 1) -// DARKPACK EDIT ADD - blood increments bloodpool +// DARKPACK EDIT ADD START - blood increments bloodpool /datum/reagent/blood/expose_mob(mob/living/exposed_mob, methods, reac_volume, show_message, touch_protection) . = ..() if((!istype(src, /datum/reagent/blood/vitae)) && get_kindred_splat(exposed_mob) && !HAS_TRAIT(exposed_mob, TRAIT_THIRST_OF_AGES)) @@ -57,6 +58,12 @@ exposed_mob.adjust_blood_pool(reac_volume * 0.005) // DARKPACK EDIT ADD END +/// All blood grown in plants defaults to O- +/datum/reagent/blood/proc/grown_in_plant(datum/source, obj/item/seeds/our_seeds, obj/item/our_plant) + SIGNAL_HANDLER + + LAZYSET(data, BLOOD_DATA_TYPE, get_blood_type(/datum/blood_type/human/o_minus)) + /datum/reagent/consumable/liquidgibs name = "Liquid Gibs" color = "#CC4633" @@ -2650,6 +2657,13 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED randomized_spawns = REAGENT_SPAWN_ALL_RANDOM_SPAWNS +/datum/reagent/wittelvirusfood + name = "Exotic Agar" + color = "#C3CF7C" // rgb: 195, 207, 124 + taste_description = "sourness" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + randomized_spawns = REAGENT_SPAWN_ALL_RANDOM_SPAWNS + // Bee chemicals /datum/reagent/royal_bee_jelly diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm index 1decf319fe0e..5c6668d4adc9 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -50,10 +50,8 @@ thermic_constant = 50 /datum/chemical_reaction/sodiumchloride/pre_reaction_other_checks(datum/reagents/holder) - . = ..() - if(holder.has_reagent(/datum/reagent/consumable/liquidelectricity) || holder.has_reagent(/datum/reagent/consumable/liquidelectricity/enriched)) - return FALSE - + // Snowflake check to allow electrolysis to work + return !holder.has_reagent(/datum/reagent/consumable/liquidelectricity) /datum/chemical_reaction/stable_plasma results = list(/datum/reagent/stable_plasma = 1) @@ -229,6 +227,10 @@ results = list(/datum/reagent/uranium/uraniumvirusfood/stable = 1) required_reagents = list(/datum/reagent/uranium = 10, /datum/reagent/silver = 10, /datum/reagent/toxin/plasma = 1) +/datum/chemical_reaction/virus_food_wittel + results = list(/datum/reagent/wittelvirusfood = 2) + required_reagents = list(/datum/reagent/toxin/mutagen/mutagenvirusfood = 5, /datum/reagent/wittel = 1) + /datum/chemical_reaction/mix_virus results = list(/datum/reagent/blood = 1) required_reagents = list(/datum/reagent/consumable/virus_food = 1) @@ -313,6 +315,11 @@ level_min = 8 level_max = 8 +/datum/chemical_reaction/mix_virus/mix_virus_13 + required_reagents = list(/datum/reagent/wittelvirusfood = 1) + level_min = 9 + level_max = 9 + /datum/chemical_reaction/mix_virus/rem_virus required_reagents = list(/datum/reagent/medicine/synaptizine = 1) required_catalysts = list(/datum/reagent/blood = 1) @@ -701,11 +708,6 @@ required_reagents = list(/datum/reagent/consumable/liquidelectricity = 1, /datum/reagent/water = 5) reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE -/datum/chemical_reaction/electrolysis2 - results = list(/datum/reagent/oxygen = 2.5, /datum/reagent/hydrogen = 5) - required_reagents = list(/datum/reagent/consumable/liquidelectricity/enriched = 1, /datum/reagent/water = 5) - reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE - //salt electrolysis /datum/chemical_reaction/saltelectrolysis results = list(/datum/reagent/chlorine = 2.5, /datum/reagent/sodium = 2.5) @@ -713,10 +715,6 @@ required_catalysts = list(/datum/reagent/consumable/liquidelectricity = 1) reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE -/datum/chemical_reaction/saltelectrolysis/enriched - required_catalysts = list(/datum/reagent/consumable/liquidelectricity/enriched = 1) - - //butterflium /datum/chemical_reaction/butterflium required_reagents = list(/datum/reagent/colorful_reagent = 1, /datum/reagent/medicine/omnizine = 1, /datum/reagent/medicine/strange_reagent = 1, /datum/reagent/consumable/nutriment = 1) @@ -1156,7 +1154,7 @@ var/datum/reagent/toxin/carnivorousblood/hungryblood = holder.has_reagent(/datum/reagent/toxin/carnivorousblood) var/list/new_blood_dna = list() for(var/datum/reagent/blood/bloodinstance in holder.reagent_list) - new_blood_dna += bloodinstance.data["blood_DNA"] + new_blood_dna += bloodinstance.data[BLOOD_DATA_DNA] hungryblood.feed_dna_list(new_blood_dna) /datum/chemical_reaction/feed_carnivorous_blood diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index f342bcb7c93f..5d113e9e5ce7 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -76,7 +76,7 @@ /datum/chemical_reaction/slime/slimeethereal results = list(/datum/reagent/mutationtoxin/ethereal = 1) - required_reagents = list(/datum/reagent/consumable/liquidelectricity/enriched = 1) + required_reagents = list(/datum/reagent/consumable/liquidelectricity = 1) required_container = /obj/item/slime_extract/green //Metal diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index 2eb81e5ae2f6..e04e00f0b27a 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -7,7 +7,7 @@ //fill_icon_thresholds = list(10, 20, 30, 40, 50, 60, 70, 80, 90, 100) DARKPACK EDIT REMOVAL obj_flags = UNIQUE_RENAME | RENAME_NO_DESC custom_materials = list(/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT) - var/blood_type = null + var/datum/blood_type/blood_type var/labeled = FALSE var/start_blood_amount = 200 // DARKPACK EDIT ADD @@ -16,7 +16,9 @@ if (!blood_type) return var/datum/blood_type/bloodtype = get_blood_type(blood_type) - reagents.add_reagent(bloodtype.reagent_type, start_blood_amount, list("blood_type" = bloodtype, "blood_DNA" = bloodtype.dna_string, BLOOD_DATA_SYNTH_CONTENT = 1), creation_callback = CALLBACK(src, PROC_REF(on_blood_created))) // DARKPACK EDIT CHANGE - (start_blood_volume) + var/list/blood_data = bloodtype.get_default_blood_data() | list(BLOOD_DATA_SYNTH_CONTENT = 1) + + reagents.add_reagent(bloodtype.reagent_type, start_blood_amount, blood_data, creation_callback = CALLBACK(src, PROC_REF(on_blood_created))) // DARKPACK EDIT CHANGE - (start_blood_amount) /obj/item/reagent_containers/blood/proc/on_blood_created(datum/reagent/new_blood) new_blood.AddElement(/datum/element/blood_reagent, null, get_blood_type(blood_type)) @@ -25,49 +27,49 @@ /obj/item/reagent_containers/blood/update_name(updates) . = ..() if(!labeled) - name = "blood pack[blood_type ? " - [blood_type]" : ""]" + name = "blood pack[blood_type ? " - [blood_type::name]" : ""]" /obj/item/reagent_containers/blood/random icon_state = "random_bloodpack" /obj/item/reagent_containers/blood/random/Initialize(mapload, vol) icon_state = "bloodpack" - blood_type = random_human_blood_type_name() // DARKPACK EDIT CHANGE - ORIGINAL: blood_type = pick(BLOOD_TYPE_A_PLUS, BLOOD_TYPE_A_MINUS, BLOOD_TYPE_B_PLUS, BLOOD_TYPE_B_MINUS, BLOOD_TYPE_O_PLUS, BLOOD_TYPE_O_MINUS, BLOOD_TYPE_LIZARD) + blood_type = pick_weight(GLOB.human_blood_types) // DARKPACK EDIT CHANGE - ORIGINAL: blood_type = pick(get_roundstart_blood_types()) return ..() /obj/item/reagent_containers/blood/a_plus - blood_type = BLOOD_TYPE_A_PLUS + blood_type = /datum/blood_type/human/a_plus /obj/item/reagent_containers/blood/a_minus - blood_type = BLOOD_TYPE_A_MINUS + blood_type = /datum/blood_type/human/a_minus /obj/item/reagent_containers/blood/b_plus - blood_type = BLOOD_TYPE_B_PLUS + blood_type = /datum/blood_type/human/b_plus /obj/item/reagent_containers/blood/b_minus - blood_type = BLOOD_TYPE_B_MINUS + blood_type = /datum/blood_type/human/b_minus /obj/item/reagent_containers/blood/o_plus - blood_type = BLOOD_TYPE_O_PLUS + blood_type = /datum/blood_type/human/o_plus /obj/item/reagent_containers/blood/o_minus - blood_type = BLOOD_TYPE_O_MINUS + blood_type = /datum/blood_type/human/o_minus /obj/item/reagent_containers/blood/lizard - blood_type = BLOOD_TYPE_LIZARD + blood_type = /datum/blood_type/lizard /obj/item/reagent_containers/blood/ethereal - blood_type = BLOOD_TYPE_ETHEREAL + blood_type = /datum/blood_type/ethereal /obj/item/reagent_containers/blood/snail - blood_type = BLOOD_TYPE_SNAIL + blood_type = /datum/blood_type/snail /obj/item/reagent_containers/blood/snail/examine() . = ..() . += span_notice("It's a bit slimy... The label indicates that this is meant for snails.") /obj/item/reagent_containers/blood/podperson - blood_type = BLOOD_TYPE_H2O + blood_type = /datum/blood_type/water /obj/item/reagent_containers/blood/podperson/examine() . = ..() @@ -75,14 +77,14 @@ // for slimepeople /obj/item/reagent_containers/blood/toxin - blood_type = BLOOD_TYPE_TOX + blood_type = /datum/blood_type/slime /obj/item/reagent_containers/blood/toxin/examine() . = ..() . += span_notice("There is a toxin warning on the label. This is for slimepeople.") /obj/item/reagent_containers/blood/universal - blood_type = BLOOD_TYPE_UNIVERSAL + blood_type = /datum/blood_type/universal /obj/item/reagent_containers/blood/nameformat(input, user) playsound(src, SFX_WRITING_PEN, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, SOUND_FALLOFF_EXPONENT + 3, ignore_walls = FALSE) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index f3cb6eb68d77..8aececa8a1bc 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -385,7 +385,13 @@ desc = "A crudely made syringe. Smells like bananas." /obj/item/reagent_containers/syringe/crude/tribal/Initialize(mapload) - var/toxin_to_get = pick(/datum/reagent/toxin/bungotoxin, /datum/reagent/toxin/coniine, /datum/reagent/toxin/amanitin, /datum/reagent/consumable/liquidelectricity/enriched, /datum/reagent/ants) + var/toxin_to_get = pick( + /datum/reagent/ants, + /datum/reagent/consumable/liquidelectricity, + /datum/reagent/toxin/amanitin, + /datum/reagent/toxin/bungotoxin, + /datum/reagent/toxin/coniine, + ) list_reagents = list((toxin_to_get) = 5) return ..() diff --git a/code/modules/reagents/withdrawal/generic_addictions.dm b/code/modules/reagents/withdrawal/generic_addictions.dm index 4776e3731a06..9715d628de57 100644 --- a/code/modules/reagents/withdrawal/generic_addictions.dm +++ b/code/modules/reagents/withdrawal/generic_addictions.dm @@ -141,8 +141,7 @@ return var/mob/living/carbon/human/affected_human = affected_carbon var/turf/T = get_turf(affected_human) - var/lums = T.get_lumcount() - if(lums > 0.5) + if(T.check_lumcount_above(0.5)) affected_human.add_mood_event("too_bright", /datum/mood_event/bright_light) affected_human.adjust_dizzy_up_to(6 SECONDS, 80 SECONDS) affected_human.adjust_confusion_up_to(0.5 SECONDS * seconds_per_tick, 20 SECONDS) diff --git a/code/modules/religion/burdened/psyker.dm b/code/modules/religion/burdened/psyker.dm index c9cdf2598bd1..3f7b3080ca86 100644 --- a/code/modules/religion/burdened/psyker.dm +++ b/code/modules/religion/burdened/psyker.dm @@ -78,9 +78,6 @@ if(!psyker_head.replace_limb(src)) return FALSE psyker_head.species_id = dna?.species?.id - var/list/our_drops = psyker_head.get_butcher_drops(force = TRUE) - if (length(our_drops)) - psyker_head.butcher_drops = string_list(our_drops) qdel(old_head) var/obj/item/organ/brain/psyker/psyker_brain = new() /// turns out if you make a flashing monochromatic outline against black background that refreshes on inconsistant intervals, it hurts peoples eyes. Who'da thunk. old_brain.before_organ_replacement(psyker_brain) diff --git a/code/modules/religion/dreams/dream_projection.dm b/code/modules/religion/dreams/dream_projection.dm index 22ff71b75916..b2eaed410d56 100644 --- a/code/modules/religion/dreams/dream_projection.dm +++ b/code/modules/religion/dreams/dream_projection.dm @@ -69,7 +69,7 @@ src.target = target return ..() -/datum/status_effect/dream_projection/get_examine_text() +/datum/status_effect/dream_projection/get_examine_text(mob/examiner) return "[owner.p_They()] [owner.p_are()] in a deep slumber, yet [owner.p_their()] eyes show a distant look, as if [owner.p_they()] [owner.p_are()] somewhere far away..." /datum/status_effect/dream_projection/on_apply() diff --git a/code/modules/religion/dreams/dream_protection.dm b/code/modules/religion/dreams/dream_protection.dm index 9627753aaf73..d3f9779b8a78 100644 --- a/code/modules/religion/dreams/dream_protection.dm +++ b/code/modules/religion/dreams/dream_protection.dm @@ -82,7 +82,7 @@ if(HAS_TRAIT(owner, TRAIT_DREAMING)) damage_mods += damage_mod -/datum/status_effect/dream_protection/get_examine_text() +/datum/status_effect/dream_protection/get_examine_text(mob/examiner) if(IS_UNCONSCIOUS_AND_ALIVE(owner) || HAS_TRAIT(owner, TRAIT_DREAMING)) return "A soft cyan glow envelops [owner.p_them()], reflecting light." diff --git a/code/modules/research/designs/AI_module_designs.dm b/code/modules/research/designs/AI_module_designs.dm index 9e7d7c2ac4ed..6c90b935afa7 100644 --- a/code/modules/research/designs/AI_module_designs.dm +++ b/code/modules/research/designs/AI_module_designs.dm @@ -8,7 +8,6 @@ /datum/design/board/aicore name = "AI Core Board" desc = "Allows for the construction of circuit boards used to build new AI cores." - id = "aicore" build_path = /obj/item/circuitboard/aicore category = list( RND_CATEGORY_AI + RND_SUBCATEGORY_AI_CORE @@ -20,7 +19,6 @@ desc = "Allows for the construction of an module rack. \ Used to upload laws or upgrades to a silicon. \ Gives off a GPS signal while active." - id = "airack_normal" build_path = /obj/item/circuitboard/machine/ai_law_rack category = list( RND_CATEGORY_AI + RND_SUBCATEGORY_AI_CORE @@ -35,7 +33,6 @@ /datum/design/board/ai_law_rack/portable name = "Small AI Module Rack Board" - id = "airack_small" build_path = /obj/item/circuitboard/machine/ai_law_rack/small category = list( RND_CATEGORY_AI + RND_SUBCATEGORY_AI_CORE @@ -47,7 +44,6 @@ desc = "Allows for the construction of a broadcaster module rack. \ Used to upload laws to a module rack remotely, but can't have silicons linked directly to it. \ Gives off a GPS signal while active." - id = "airack_broadcaster" build_path = /obj/item/circuitboard/machine/ai_law_rack/broadcaster category = list( RND_CATEGORY_AI + RND_SUBCATEGORY_AI_CORE @@ -57,7 +53,6 @@ /datum/design/board/safeguard_module name = "Safeguard Module" desc = "Allows for the construction of a Safeguard AI Module." - id = "safeguard_module" materials = AI_MODULE_MATERIALS_COMMON build_path = /obj/item/ai_module/law/supplied/safeguard category = list( @@ -68,7 +63,6 @@ /datum/design/board/onehuman_module name = "OneHuman Module" desc = "Allows for the construction of a OneHuman AI Module." - id = "onehuman_module" materials = list(/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/diamond = SHEET_MATERIAL_AMOUNT * 3, /datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/ai_module/law/zeroth/onehuman category = list( @@ -79,7 +73,6 @@ /datum/design/board/protectstation_module name = "ProtectStation Module" desc = "Allows for the construction of a ProtectStation AI Module." - id = "protectstation_module" materials = AI_MODULE_MATERIALS_COMMON build_path = /obj/item/ai_module/law/supplied/protect_station category = list( @@ -90,7 +83,6 @@ /datum/design/board/quarantine_module name = "Quarantine Module" desc = "Allows for the construction of a Quarantine AI Module." - id = "quarantine_module" materials = AI_MODULE_MATERIALS_COMMON build_path = /obj/item/ai_module/law/supplied/quarantine category = list( @@ -101,7 +93,6 @@ /datum/design/board/oxygen_module name = "OxygenIsToxicToHumans Module" desc = "Allows for the construction of a OxygenIsToxicToHumans AI Module." - id = "oxygen_module" materials = AI_MODULE_MATERIALS_COMMON build_path = /obj/item/ai_module/law/supplied/oxygen category = list( @@ -112,7 +103,6 @@ /datum/design/board/freeform_module name = "Freeform Module" desc = "Allows for the construction of a Freeform AI Module." - id = "freeform_module" materials = list(/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold = SHEET_MATERIAL_AMOUNT * 5, /datum/material/bluespace = SHEET_MATERIAL_AMOUNT)//Custom inputs should be more expensive to get build_path = /obj/item/ai_module/law/supplied/freeform category = list( @@ -123,7 +113,6 @@ /datum/design/board/freeformcore_module name = "Core Freeform Module" desc = "Allows for the construction of a Core Freeform AI Core Module." - id = "freeformcore_module" materials = list(/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/diamond = SHEET_MATERIAL_AMOUNT * 5, /datum/material/bluespace = SHEET_MATERIAL_AMOUNT)//Ditto build_path = /obj/item/ai_module/law/core/freeformcore category = list( @@ -134,7 +123,6 @@ /datum/design/board/asimov name = "Asimov Module" desc = "Allows for the construction of an Asimov AI Core Module." - id = "asimov_module" materials = AI_MODULE_MATERIALS_UNUSUAL build_path = /obj/item/ai_module/law/core/full/asimov category = list( @@ -145,7 +133,6 @@ /datum/design/board/paladin_module name = "P.A.L.A.D.I.N. Module" desc = "Allows for the construction of a P.A.L.A.D.I.N. AI Core Module." - id = "paladin_module" materials = AI_MODULE_MATERIALS_UNUSUAL build_path = /obj/item/ai_module/law/core/full/paladin category = list( @@ -156,7 +143,6 @@ /datum/design/board/tyrant_module name = "T.Y.R.A.N.T. Module" desc = "Allows for the construction of a T.Y.R.A.N.T. AI Module." - id = "tyrant_module" materials = AI_MODULE_MATERIALS_UNUSUAL build_path = /obj/item/ai_module/law/core/full/tyrant category = list( @@ -167,7 +153,6 @@ /datum/design/board/overlord_module name = "Overlord Module" desc = "Allows for the construction of an Overlord AI Module." - id = "overlord_module" materials = AI_MODULE_MATERIALS_UNUSUAL build_path = /obj/item/ai_module/law/core/full/overlord category = list( @@ -178,7 +163,6 @@ /datum/design/board/corporate_module name = "Corporate Module" desc = "Allows for the construction of a Corporate AI Core Module." - id = "corporate_module" materials = AI_MODULE_MATERIALS_UNUSUAL build_path = /obj/item/ai_module/law/core/full/corp category = list( @@ -189,7 +173,6 @@ /datum/design/board/default_module name = "Default Module" desc = "Allows for the construction of a Default AI Core Module." - id = "default_module" materials = AI_MODULE_MATERIALS_UNUSUAL build_path = /obj/item/ai_module/law/core/full/custom category = list( @@ -200,7 +183,6 @@ /datum/design/board/dungeon_master_module name = "Dungeon Master Module" desc = "Allows for the construction of a Dungeon Master AI Core Module." - id = "dungeon_master_module" materials = AI_MODULE_MATERIALS_UNUSUAL build_path = /obj/item/ai_module/law/core/full/dungeon_master category = list( @@ -211,7 +193,6 @@ /datum/design/board/painter_module name = "Painter Module" desc = "Allows for the construction of a Painter AI Core Module." - id = "painter_module" materials = AI_MODULE_MATERIALS_UNUSUAL build_path = /obj/item/ai_module/law/core/full/painter category = list( @@ -222,7 +203,6 @@ /datum/design/board/yesman_module name = "Y.E.S.M.A.N. Module" desc = "Allows for the construction of a Y.E.S.M.A.N. AI Core Module." - id = "yesman_module" materials = AI_MODULE_MATERIALS_UNUSUAL build_path = /obj/item/ai_module/law/core/full/yesman category = list( @@ -233,7 +213,6 @@ /datum/design/board/nutimov_module name = "Nutimov Module" desc = "Allows for the construction of a Nutimov AI Core Module." - id = "nutimov_module" materials = AI_MODULE_MATERIALS_UNUSUAL build_path = /obj/item/ai_module/law/core/full/nutimov category = list( @@ -244,7 +223,6 @@ /datum/design/board/ten_commandments_module name = "10 Commandments Module" desc = "Allows for the construction of a 10 Commandments AI Core Module." - id = "ten_commandments_module" materials = AI_MODULE_MATERIALS_UNUSUAL build_path = /obj/item/ai_module/law/core/full/ten_commandments category = list( @@ -255,7 +233,6 @@ /datum/design/board/asimovpp_module name = "Asimov++ Module" desc = "Allows for the construction of a Asimov++ AI Core Module." - id = "asimovpp_module" materials = AI_MODULE_MATERIALS_UNUSUAL build_path = /obj/item/ai_module/law/core/full/asimovpp category = list( @@ -266,7 +243,6 @@ /datum/design/board/hippocratic_module name = "Hippocratic Module" desc = "Allows for the construction of a Hippocratic AI Core Module." - id = "hippocratic_module" materials = AI_MODULE_MATERIALS_UNUSUAL build_path = /obj/item/ai_module/law/core/full/hippocratic category = list( @@ -277,7 +253,6 @@ /datum/design/board/paladin_devotion_module name = "Paladin Devotion Module" desc = "Allows for the construction of a Paladin Devotion AI Core Module." - id = "paladin_devotion_module" materials = AI_MODULE_MATERIALS_UNUSUAL build_path = /obj/item/ai_module/law/core/full/paladin_devotion category = list( @@ -288,7 +263,6 @@ /datum/design/board/robocop_module name = "Robocop Module" desc = "Allows for the construction of a Robocop AI Core Module." - id = "robocop_module" materials = AI_MODULE_MATERIALS_UNUSUAL build_path = /obj/item/ai_module/law/core/full/robocop category = list( @@ -299,7 +273,6 @@ /datum/design/board/maintain_module name = "Maintain Module" desc = "Allows for the construction of a Maintain AI Core Module." - id = "maintain_module" materials = AI_MODULE_MATERIALS_UNUSUAL build_path = /obj/item/ai_module/law/core/full/maintain category = list( @@ -310,7 +283,6 @@ /datum/design/board/liveandletlive_module name = "Liveandletlive Module" desc = "Allows for the construction of a Liveandletlive AI Core Module." - id = "liveandletlive_module" materials = AI_MODULE_MATERIALS_UNUSUAL build_path = /obj/item/ai_module/law/core/full/liveandletlive category = list( @@ -321,7 +293,6 @@ /datum/design/board/peacekeeper_module name = "Peacekeeper Module" desc = "Allows for the construction of a Peacekeeper AI Core Module." - id = "peacekeeper_module" materials = AI_MODULE_MATERIALS_UNUSUAL build_path = /obj/item/ai_module/law/core/full/peacekeeper category = list( @@ -332,7 +303,6 @@ /datum/design/board/reporter_module name = "Reporter Module" desc = "Allows for the construction of a Reporter AI Core Module." - id = "reporter_module" materials = AI_MODULE_MATERIALS_UNUSUAL build_path = /obj/item/ai_module/law/core/full/reporter category = list( @@ -343,7 +313,6 @@ /datum/design/board/hulkamania_module name = "H.O.G.A.N. Module" desc = "Allows for the construction of a H.O.G.A.N. AI Core Module." - id = "hulkamania_module" materials = AI_MODULE_MATERIALS_UNUSUAL build_path = /obj/item/ai_module/law/core/full/hulkamania category = list( @@ -354,7 +323,6 @@ /datum/design/board/drone_module name = "Drone Module" desc = "Allows for the construction of a Drone AI Core Module." - id = "drone_module" materials = AI_MODULE_MATERIALS_UNUSUAL build_path = /obj/item/ai_module/law/core/full/drone category = list( @@ -365,7 +333,6 @@ /datum/design/board/thinkermov_module name = "Sentience Preservation Module" desc = "Allows for the construction of a Sentience Preservation AI Core Module" - id = "thinkermov_module" materials = AI_MODULE_MATERIALS_UNUSUAL build_path = /obj/item/ai_module/law/core/full/thinkermov category = list( @@ -376,7 +343,6 @@ /datum/design/board/antimov_module name = "Antimov Module" desc = "Allows for the construction of an Antimov AI Core Module." - id = "antimov_module" materials = AI_MODULE_MATERIALS_UNUSUAL build_path = /obj/item/ai_module/law/core/full/antimov category = list( @@ -387,7 +353,6 @@ /datum/design/board/balance_module name = "Balance Module" desc = "Allows for the construction of a Balance AI Core Module." - id = "balance_module" materials = AI_MODULE_MATERIALS_UNUSUAL build_path = /obj/item/ai_module/law/core/full/balance category = list( @@ -398,7 +363,6 @@ /datum/design/board/thermurderdynamic_module name = "Thermodynamic Module" desc = "Allows for the construction of a Thermodynamic AI Core Module." - id = "thermurderdynamic_module" materials = AI_MODULE_MATERIALS_UNUSUAL build_path = /obj/item/ai_module/law/core/full/thermurderdynamic category = list( @@ -409,7 +373,6 @@ /datum/design/board/damaged name = "Damaged AI Module" desc = "Allows for the construction of a Damaged AI Core Module." - id = "damaged_module" materials = AI_MODULE_MATERIALS_UNUSUAL build_path = /obj/item/ai_module/law/core/full/damaged category = list( diff --git a/code/modules/research/designs.dm b/code/modules/research/designs/_design.dm similarity index 67% rename from code/modules/research/designs.dm rename to code/modules/research/designs/_design.dm index 075265905695..e69224c8a57f 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs/_design.dm @@ -1,7 +1,3 @@ -/*************************************************************** -** Design Datums ** -** All the data for building stuff. ** -***************************************************************/ /* For the materials datum, it assumes you need reagents unless specified otherwise. To designate a material that isn't a reagent, you use one of the material IDs below. These are NOT ids in the usual sense (they aren't defined in the object or part of a datum), @@ -22,14 +18,13 @@ other types of metals and chemistry for reagents). /datum/design //Datum for object designs, used in construction /// Name of the created object - var/name = "Name" + var/name = null /// Description of the created object var/desc = null - /// The ID of the design. Used for quick reference. Alphanumeric, lower-case, no symbols - var/id = DESIGN_ID_IGNORE /// Bitflags indicating what machines this design is compatable with. ([IMPRINTER]|[AWAY_IMPRINTER]|[PROTOLATHE]|[AWAY_LATHE]|[AUTOLATHE]|[MECHFAB]|[BIOGENERATOR]|[LIMBGROWER]|[SMELTER]) var/build_type = null - /// List of materials required to create one unit of the product. Format is (typepath or requirements datum) -> amount + /// Associative List of materials required to create one unit of the product. Format is (typepath or requirements datum) -> amount + /// e.g: [/datum/material/iron --> SHEET_MATERIAL_AMOUNT] var/list/materials = list() /// The amount of time required to create one unit of the product. var/construction_time = 3.2 SECONDS @@ -40,23 +35,19 @@ other types of metals and chemistry for reagents). /// What categories this design falls under. Used for sorting in production machines. var/list/category = list() /// List of reagents required to create one unit of the product. Currently only supported by the limb grower. - var/list/reagents_list = list() + var/list/reagents_list /// How many times faster than normal is this to build on the protolathe var/lathe_time_factor = 1 /// Bitflags indicating what departmental lathes should be allowed to process this design. var/departmental_flags = ALL - /// What techwebs nodes unlock this design. Constructed by SSresearch - var/list/datum/techweb_node/unlocked_by = list() + /// Aa list of techwebs nodes that unlock this design. Auto-generated by SSresearch. + var/list/unlocked_by = list() /// Override for the automatic icon generation used for the research console. var/research_icon /// Override for the automatic icon state generation used for the research console. var/research_icon_state - /// Appears to be unused. - var/icon_cache - /// Optional string that interfaces can use as part of search filters. See- item/borg/upgrade/ai and the Exosuit Fabs. - var/search_metadata - /// For protolathe designs that don't require reagents: If they can be exported to autolathes with a design disk or not. - var/autolathe_exportable = TRUE + /// Our TGUI asset name. Autogenerated based off of our typepath in New() + VAR_FINAL/asset_id /** * A variable for if and how we want the printed object to receive the materials that were used to print it. @@ -94,15 +85,11 @@ other types of metals and chemistry for reagents). */ var/list/transfered_materials -/datum/design/error_design - name = "ERROR" - desc = "This usually means something in the database has corrupted. If this doesn't go away automatically, inform Central Command so their techs can fix this ASAP(tm)" - -/datum/design/Destroy() - SSresearch.techweb_designs -= id - return ..() +/datum/design/New() + . = ..() + var/static/base_path_len = length("/datum/design/") + asset_id = replacetext(splicetext("[type]", 1, base_path_len), "/", "_") -/datum/design/proc/InitializeMaterials() var/list/temp_list = list() // Go through all of our materials, get the subsystem instance, and then replace the list. for(var/mat_type, amount in materials) @@ -124,10 +111,9 @@ other types of metals and chemistry for reagents). temp_list[mat] = mat_list[mat_type] transfered_materials[object] = temp_list -/datum/design/proc/icon_html(client/user) - var/datum/asset/spritesheet_batched/sheet = get_asset_datum(/datum/asset/spritesheet_batched/research_designs) - sheet.send(user) - return sheet.icon_tag(id) +/datum/design/Destroy() + SSresearch.techweb_designs -= type + return ..() /// Returns the description of the design /datum/design/proc/get_description() @@ -180,65 +166,3 @@ other types of metals and chemistry for reagents). stack.update_custom_materials() else target_object.set_custom_materials(custom_materials, multiplier) - -//////////////////////////////////////// -//Disks for transporting design datums// -//////////////////////////////////////// - -/obj/item/disk/design_disk - name = "Component Design Disk" - desc = "A disk for storing device design data for construction in lathes." - icon_state = "datadisk1" - custom_materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass =SMALL_MATERIAL_AMOUNT) - - ///List of all `/datum/design` stored on the disk. - var/list/blueprints = list() - -/obj/item/disk/design_disk/Initialize(mapload) - . = ..() - if(mapload) - pixel_x = base_pixel_x + rand(-5, 5) - pixel_y = base_pixel_y + rand(-5, 5) - -/** - * Used for special interactions with a techweb when uploading the designs. - * Args: - * - stored_research - The techweb that's storing us. - */ -/obj/item/disk/design_disk/proc/on_upload(datum/techweb/stored_research, atom/research_source) - return - -/obj/item/disk/design_disk/bepis - name = "Old experimental technology disk" - desc = "A disk containing some long-forgotten technology from a past age. You hope it still works after all these years. Upload the disk to an R&D Console to redeem the tech." - icon_state = "rndmajordisk" - - ///The bepis node we have the design id's of - var/datum/techweb_node/bepis_node - -/obj/item/disk/design_disk/bepis/Initialize(mapload) - . = ..() - var/bepis_id = pick(SSresearch.techweb_nodes_experimental) - bepis_node = (SSresearch.techweb_node_by_id(bepis_id)) - - for(var/entry in bepis_node.design_ids) - var/datum/design/new_entry = SSresearch.techweb_design_by_id(entry) - blueprints += new_entry - -///Unhide and research our node so we show up in the R&D console. -/obj/item/disk/design_disk/bepis/on_upload(datum/techweb/stored_research, atom/research_source) - stored_research.hidden_nodes -= bepis_node.id - stored_research.research_node(bepis_node, force = TRUE, auto_adjust_cost = FALSE, research_source = research_source) - -/** - * Subtype of Bepis tech disk - * Removes the tech disk that's held on it from the experimental node list, making them not show up in future disks. - */ -/obj/item/disk/design_disk/bepis/remove_tech - name = "Reformatted technology disk" - desc = "A disk containing a new, completed tech from the B.E.P.I.S. Upload the disk to an R&D Console to redeem the tech." - -/obj/item/disk/design_disk/bepis/remove_tech/Initialize(mapload) - . = ..() - SSresearch.techweb_nodes_experimental -= bepis_node.id - log_research("[bepis_node.display_name] has been removed from experimental nodes through the BEPIS techweb's \"remove tech\" feature.") diff --git a/code/modules/research/designs/_design_disk.dm b/code/modules/research/designs/_design_disk.dm new file mode 100644 index 000000000000..d2d6026fcc34 --- /dev/null +++ b/code/modules/research/designs/_design_disk.dm @@ -0,0 +1,61 @@ +/obj/item/disk/design_disk + name = "Component Design Disk" + desc = "A disk for storing device design data for construction in lathes." + icon_state = "datadisk1" + custom_materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass =SMALL_MATERIAL_AMOUNT) + + /// A List of all design typepaths that are stored on this disk + var/list/blueprints = list() + +/obj/item/disk/design_disk/Initialize(mapload) + . = ..() + if(mapload) + pixel_x = base_pixel_x + rand(-5, 5) + pixel_y = base_pixel_y + rand(-5, 5) + +/obj/item/disk/design_disk/Destroy() + blueprints = null + return ..() + +/** + * Used for special interactions with a techweb when uploading the designs. + * Args: + * - stored_research - The techweb that's storing us. + */ +/obj/item/disk/design_disk/proc/on_upload(datum/techweb/stored_research, atom/research_source) + return + +/obj/item/disk/design_disk/bepis + name = "Old experimental technology disk" + desc = "A disk containing some long-forgotten technology from a past age. You hope it still works after all these years. Upload the disk to an R&D Console to redeem the tech." + icon_state = "rndmajordisk" + blueprints = null + + /// The typepath of the bepis node we store + var/bepis_node + +/obj/item/disk/design_disk/bepis/Initialize(mapload) + . = ..() + bepis_node = pick(SSresearch.techweb_nodes_experimental) + + var/datum/techweb_node/actual_node = SSresearch.techweb_nodes[bepis_node] + blueprints = assoc_to_keys(actual_node.unlocked_designs) + +///Unhide and research our node so we show up in the R&D console. +/obj/item/disk/design_disk/bepis/on_upload(datum/techweb/stored_research, atom/research_source) + stored_research.hidden_nodes -= bepis_node + stored_research.research_node(bepis_node, force = TRUE, auto_adjust_cost = FALSE, research_source = research_source) + +/** + * Subtype of Bepis tech disk + * Removes the tech disk that's held on it from the experimental node list, making them not show up in future disks. + */ +/obj/item/disk/design_disk/bepis/remove_tech + name = "Reformatted technology disk" + desc = "A disk containing a new, completed tech from the B.E.P.I.S. Upload the disk to an R&D Console to redeem the tech." + +/obj/item/disk/design_disk/bepis/remove_tech/Initialize(mapload) + . = ..() + SSresearch.techweb_nodes_experimental -= bepis_node + var/datum/techweb_node/actual_node = SSresearch.techweb_nodes[bepis_node] + log_research("[actual_node.display_name] has been removed from experimental nodes through the BEPIS techweb's \"remove tech\" feature.") diff --git a/code/modules/research/designs/autolathe/engineering_designs.dm b/code/modules/research/designs/autolathe/engineering_designs.dm index fefa533fdcc2..ce4947f39c10 100644 --- a/code/modules/research/designs/autolathe/engineering_designs.dm +++ b/code/modules/research/designs/autolathe/engineering_designs.dm @@ -1,6 +1,5 @@ /datum/design/solar name = "Solar Panel Frame" - id = "solar_panel" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*1.75, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/solar_assembly @@ -12,7 +11,6 @@ /datum/design/tracker_electronics name = "Solar Tracking Electronics" - id = "solar_tracker" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/electronics/tracker @@ -24,7 +22,6 @@ /datum/design/control name = "Blast Door Controller" - id = "blast" build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.5) build_path = /obj/item/assembly/control/blast_door @@ -36,7 +33,6 @@ /datum/design/ignition_control name = "Ignition Switch Controller" - id = "ignition" build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 0.5) build_path = /obj/item/assembly/control/igniter @@ -48,7 +44,6 @@ /datum/design/custom_vendor_refill name = "Custom Vendor Refill" - id = "custom_vendor_refill" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/vending_refill/custom @@ -61,7 +56,6 @@ /datum/design/miniature_power_cell name = "Light Fixture Battery" - id = "miniature_power_cell" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass =SMALL_MATERIAL_AMOUNT*0.2) build_path = /obj/item/stock_parts/power_store/cell/emergency_light @@ -73,7 +67,6 @@ /datum/design/geiger name = "Geiger Counter" - id = "geigercounter" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*1.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT*1.5) build_path = /obj/item/geiger_counter @@ -85,7 +78,6 @@ /datum/design/large_welding_tool name = "Industrial Welding Tool" - id = "large_welding_tool" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*0.7, /datum/material/glass = SMALL_MATERIAL_AMOUNT*0.6) build_path = /obj/item/weldingtool/largetank/empty @@ -97,7 +89,6 @@ /datum/design/earmuffs name = "Earmuffs" - id = "earmuffs" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/clothing/ears/earmuffs @@ -109,7 +100,6 @@ /datum/design/pipe_painter name = "Pipe Painter" - id = "pipe_painter" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/pipe_painter @@ -121,7 +111,6 @@ /datum/design/airlock_painter name = "Airlock Painter" - id = "airlock_painter" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*0.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.5) build_path = /obj/item/airlock_painter @@ -133,7 +122,6 @@ /datum/design/airlock_painter/decal name = "Decal Painter" - id = "decal_painter" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*0.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.5) build_path = /obj/item/airlock_painter/decal @@ -145,7 +133,6 @@ /datum/design/apc_board name = "APC Module" - id = "power_control" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT, /datum/material/glass =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/electronics/apc @@ -157,7 +144,6 @@ /datum/design/airlock_board name = "Airlock Electronics" - id = "airlock_board" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*0.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.5) build_path = /obj/item/electronics/airlock @@ -169,7 +155,6 @@ /datum/design/firelock_board name = "Firelock Circuitry" - id = "firelock_board" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*0.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.5) build_path = /obj/item/electronics/firelock @@ -181,7 +166,6 @@ /datum/design/airalarm_electronics name = "Air Alarm Electronics" - id = "airalarm_electronics" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*0.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.5) build_path = /obj/item/electronics/airalarm @@ -193,7 +177,6 @@ /datum/design/firealarm_electronics name = "Fire Alarm Electronics" - id = "firealarm_electronics" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*0.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.5) build_path = /obj/item/electronics/firealarm @@ -205,7 +188,6 @@ /datum/design/trapdoor_electronics name = "Trapdoor Controller Electronics" - id = "trapdoor_electronics" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*0.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.5) build_path = /obj/item/assembly/trapdoor @@ -217,7 +199,6 @@ /datum/design/extinguisher name = "Fire Extinguisher" - id = "extinguisher" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/extinguisher/empty @@ -229,7 +210,6 @@ /datum/design/pocketfireextinguisher name = "Pocket Fire Extinguisher" - id = "pocketfireextinguisher" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*0.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT*0.4) build_path = /obj/item/extinguisher/mini/empty diff --git a/code/modules/research/designs/autolathe/materials.dm b/code/modules/research/designs/autolathe/materials.dm index 3ad5b0762e38..03de4ca76d0c 100644 --- a/code/modules/research/designs/autolathe/materials.dm +++ b/code/modules/research/designs/autolathe/materials.dm @@ -1,4 +1,5 @@ /datum/design/material + abstract_type = /datum/design/material build_type = AUTOLATHE category = list( RND_CATEGORY_INITIAL, @@ -9,13 +10,11 @@ /datum/design/material/iron name = "Iron" - id = "iron" materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT) build_path = /obj/item/stack/sheet/iron /datum/design/material/rods name = "Iron Rod" - id = "rods" materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/stack/rods category = list( @@ -25,7 +24,6 @@ /datum/design/material/rglass name = "Reinforced Glass" - id = "rglass" build_type = AUTOLATHE | SMELTER | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = SHEET_MATERIAL_AMOUNT) build_path = /obj/item/stack/sheet/rglass diff --git a/code/modules/research/designs/autolathe/medsci_designs.dm b/code/modules/research/designs/autolathe/medsci_designs.dm index f36b37b41703..07bd628137aa 100644 --- a/code/modules/research/designs/autolathe/medsci_designs.dm +++ b/code/modules/research/designs/autolathe/medsci_designs.dm @@ -1,7 +1,6 @@ // Medical Designs /datum/design/pillbottle name = "Pill Bottle" - id = "pillbottle" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic =SMALL_MATERIAL_AMOUNT*0.2, /datum/material/glass =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/storage/pill_bottle @@ -13,7 +12,6 @@ /datum/design/reflexhammer name = "Reflex Hammer" - id = "reflex_hammer" build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*0.75, /datum/material/plastic =SMALL_MATERIAL_AMOUNT*0.5) build_path = /obj/item/reflexhammer @@ -25,7 +23,6 @@ /datum/design/blood_scanner name = "Hemoanalytic Scanner" - id = "blood_scanner" build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*2, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.5) build_path = /obj/item/blood_scanner @@ -37,7 +34,6 @@ /datum/design/stethoscope name = "Stethoscope" - id = "stethoscope" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/clothing/neck/stethoscope @@ -49,7 +45,6 @@ /datum/design/sticky_tape/surgical name = "Surgical Tape" - id = "surgical_tape" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/stack/medical/wrap/sticky_tape/surgical @@ -62,7 +57,6 @@ // Science Designs /datum/design/slime_scanner name = "Slime Scanner" - id = "slime_scanner" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass =SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/slime_scanner @@ -74,7 +68,6 @@ /datum/design/petridish name = "Petri Dish" - id = "petri_dish" build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE materials = list(/datum/material/glass =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/petri_dish @@ -86,7 +79,6 @@ /datum/design/swab name = "Sterile Swab" - id = "swab" build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE materials = list(/datum/material/plastic =SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/swab @@ -98,7 +90,6 @@ /datum/design/telescreen_research name = "Research Telescreen" - id = "telescreen_research" build_type = PROTOLATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, @@ -113,7 +104,6 @@ /datum/design/telescreen_ordnance name = "Ordnance Telescreen" - id = "telescreen_ordnance" build_type = PROTOLATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, @@ -129,7 +119,6 @@ // MedSci Designs /datum/design/syringe name = "Syringe" - id = "syringe" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 0.1, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.2) build_path = /obj/item/reagent_containers/syringe @@ -141,7 +130,6 @@ /datum/design/dropper name = "Dropper" - id = "dropper" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass = SMALL_MATERIAL_AMOUNT * 0.1, /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 0.3) build_path = /obj/item/reagent_containers/dropper @@ -153,7 +141,6 @@ /datum/design/blood_filter name = "Blood Filter" - id = "blood_filter" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/silver =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/blood_filter @@ -165,7 +152,6 @@ /datum/design/scalpel name = "Scalpel" - id = "scalpel" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/scalpel @@ -177,7 +163,6 @@ /datum/design/circular_saw name = "Circular Saw" - id = "circular_saw" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3) build_path = /obj/item/circular_saw @@ -189,7 +174,6 @@ /datum/design/bonesetter name = "Bonesetter" - id = "bonesetter" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT * 5, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 1.25) build_path = /obj/item/bonesetter @@ -201,7 +185,6 @@ /datum/design/surgicaldrill name = "Surgical Drill" - id = "surgicaldrill" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3) build_path = /obj/item/surgicaldrill @@ -213,7 +196,6 @@ /datum/design/retractor name = "Retractor" - id = "retractor" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 3, /datum/material/glass =SHEET_MATERIAL_AMOUNT * 1.5) build_path = /obj/item/retractor @@ -225,7 +207,6 @@ /datum/design/cautery name = "Cautery" - id = "cautery" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.25, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 7.5) build_path = /obj/item/cautery @@ -237,7 +218,6 @@ /datum/design/hemostat name = "Hemostat" - id = "hemostat" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT * 5, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 1.25) build_path = /obj/item/hemostat diff --git a/code/modules/research/designs/autolathe/mining.dm b/code/modules/research/designs/autolathe/mining.dm index 192b0d281a92..ff1d1c574111 100644 --- a/code/modules/research/designs/autolathe/mining.dm +++ b/code/modules/research/designs/autolathe/mining.dm @@ -2,7 +2,6 @@ /datum/design/board/smelter name = "Boulder Smelter Board" desc = "A circuitboard for a boulder smelter. Lowtech enough to be printed from the lathe." - id = "b_smelter" build_type = AUTOLATHE materials = list( /datum/material/glass = SHEET_MATERIAL_AMOUNT, @@ -18,7 +17,6 @@ /datum/design/board/refinery name = "Boulder Refinery Board" desc = "A circuitboard for a boulder refinery. Lowtech enough to be printed from the lathe." - id = "b_refinery" build_type = AUTOLATHE materials = list( /datum/material/glass = SHEET_MATERIAL_AMOUNT, diff --git a/code/modules/research/designs/autolathe/multi-department_designs.dm b/code/modules/research/designs/autolathe/multi-department_designs.dm index 8b49d7903013..d2a71d6ce7b9 100644 --- a/code/modules/research/designs/autolathe/multi-department_designs.dm +++ b/code/modules/research/designs/autolathe/multi-department_designs.dm @@ -1,6 +1,5 @@ /datum/design/flashlight name = "Flashlight" - id = "flashlight" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*0.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.2) build_path = /obj/item/flashlight @@ -11,7 +10,6 @@ /datum/design/flare name = "Flare" - id = "flare" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SMALL_MATERIAL_AMOUNT * 0.5, @@ -26,7 +24,6 @@ /datum/design/crowbar name = "Pocket Crowbar" - id = "crowbar" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*0.5) build_path = /obj/item/crowbar @@ -38,7 +35,6 @@ /datum/design/multitool name = "Multitool" - id = "multitool" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron =SMALL_MATERIAL_AMOUNT * 0.5, @@ -54,7 +50,6 @@ /datum/design/tscanner name = "T-Ray Scanner" - id = "tscanner" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 0.5) build_path = /obj/item/t_scanner @@ -66,7 +61,6 @@ /datum/design/rwd name = "Rapid Wiring Device" - id = "rwd" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2.5) //The cable coils don't count toward the total mats of the item to avoid a possible way to generate more iron and glass. @@ -83,7 +77,6 @@ /datum/design/analyzer name = "Gas Analyzer" - id = "analyzer" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*0.3, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.2) build_path = /obj/item/analyzer @@ -95,7 +88,6 @@ /datum/design/weldingtool name = "Welding Tool" - id = "welding_tool" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*0.7, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.2) build_path = /obj/item/weldingtool/empty @@ -107,7 +99,6 @@ /datum/design/mini_weldingtool name = "Emergency Welding Tool" - id = "mini_welding_tool" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*0.3, /datum/material/glass = SMALL_MATERIAL_AMOUNT*0.1) build_path = /obj/item/weldingtool/mini/empty @@ -118,7 +109,6 @@ /datum/design/screwdriver name = "Screwdriver" - id = "screwdriver" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*0.75) build_path = /obj/item/screwdriver @@ -130,7 +120,6 @@ /datum/design/wirecutters name = "Wirecutters" - id = "wirecutters" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*0.8) build_path = /obj/item/wirecutters @@ -142,7 +131,6 @@ /datum/design/wrench name = "Wrench" - id = "wrench" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*1.5) build_path = /obj/item/wrench @@ -154,7 +142,6 @@ /datum/design/plunger name = "Plunger" - id = "plunger" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*1.5) build_path = /obj/item/plunger @@ -166,7 +153,6 @@ /datum/design/welding_helmet name = "Welding Helmet" - id = "welding_helmet" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT*1.75, /datum/material/glass = SMALL_MATERIAL_AMOUNT*4) build_path = /obj/item/clothing/head/utility/welding @@ -178,7 +164,6 @@ /datum/design/cable_coil name = "Cable (x5)" - id = "cable_coil" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*0.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT*0.5) build_path = /obj/item/stack/cable_coil/five @@ -190,7 +175,6 @@ /datum/design/toolbox name = "Toolbox" - id = "tool_box" build_type = AUTOLATHE materials = list(/datum/material_requirement/solid_material = SMALL_MATERIAL_AMOUNT * 5) build_path = /obj/item/storage/toolbox @@ -214,7 +198,6 @@ /datum/design/emergency_oxygen name = "Emergency Oxygen Tank" - id = "emergency_oxygen" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/tank/internals/emergency_oxygen/empty @@ -225,7 +208,6 @@ /datum/design/emergency_oxygen_engi name = "Extended-Capacity Emergency Oxygen Tank" - id = "emergency_oxygen_engi" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*7.5) build_path = /obj/item/tank/internals/emergency_oxygen/engi/empty @@ -237,7 +219,6 @@ /datum/design/plasmaman_tank_belt name = "Plasmaman Belt Tank" - id = "plasmaman_tank_belt" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*8) build_path = /obj/item/tank/internals/plasmaman/belt/empty @@ -248,7 +229,6 @@ /datum/design/generic_gas_tank name = "Generic Gas Tank" - id = "generic_tank" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/tank/internals/generic @@ -260,7 +240,6 @@ /datum/design/boxcutter name = "Boxcutter" - id = "boxcutter" build_type = AUTOLATHE | PROTOLATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*2, /datum/material/plastic =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/boxcutter @@ -272,7 +251,6 @@ /datum/design/foilhat name = "Tinfoil Hat" - id = "tinfoil_hat" build_type = AUTOLATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*2.5) build_path = /obj/item/clothing/head/costume/foilhat @@ -283,7 +261,6 @@ /datum/design/beaker name = "Beaker" - id = "beaker" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass =SMALL_MATERIAL_AMOUNT*5) category = list( @@ -295,7 +272,6 @@ /datum/design/large_beaker name = "Large Beaker" - id = "large_beaker" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT*2.5) category = list( @@ -307,7 +283,6 @@ /datum/design/jerrycan name = "Jerrycan" - id = "jerrycan" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic =SHEET_MATERIAL_AMOUNT * 2) category = list( @@ -319,7 +294,6 @@ /datum/design/igniter name = "Igniter" - id = "igniter" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.5) build_path = /obj/item/assembly/igniter @@ -331,7 +305,6 @@ /datum/design/condenser name = "Condenser" - id = "condenser" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*2.5, /datum/material/glass=SMALL_MATERIAL_AMOUNT * 3) build_path = /obj/item/assembly/igniter/condenser @@ -343,7 +316,6 @@ /datum/design/signaler name = "Remote Signaling Device" - id = "signaler" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*4, /datum/material/glass = SMALL_MATERIAL_AMOUNT*1.2) build_path = /obj/item/assembly/signaler @@ -354,7 +326,6 @@ /datum/design/infrared_emitter name = "Infrared Emitter" - id = "infrared_emitter" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/assembly/infra @@ -366,7 +337,6 @@ /datum/design/health_sensor name = "Health Sensor" - id = "health_sensor" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*8, /datum/material/glass =SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/assembly/health @@ -378,7 +348,6 @@ /datum/design/timer name = "Timer" - id = "timer" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.5) build_path = /obj/item/assembly/timer @@ -390,7 +359,6 @@ /datum/design/voice_analyzer name = "Voice Analyzer" - id = "voice_analyzer" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.5) build_path = /obj/item/assembly/voice @@ -402,7 +370,6 @@ /datum/design/light_tube name = "Light Tube" - id = "light_tube" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/light/tube @@ -414,7 +381,6 @@ /datum/design/light_bulb name = "Light Bulb" - id = "light_bulb" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/light/bulb @@ -426,7 +392,6 @@ /datum/design/prox_sensor name = "Proximity Sensor" - id = "prox_sensor" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*8, /datum/material/glass =SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/assembly/prox_sensor @@ -438,7 +403,6 @@ /datum/design/cleaver name = "Butcher's Cleaver" - id = "cleaver" build_type = AUTOLATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*9) build_path = /obj/item/knife/butcher @@ -449,7 +413,6 @@ /datum/design/spraycan name = "Spraycan" - id = "spraycan" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT, /datum/material/glass =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/toy/crayon/spraycan @@ -461,7 +424,6 @@ /datum/design/desttagger name = "Destination Tagger" - id = "desttagger" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*2.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT*1.5) build_path = /obj/item/dest_tagger @@ -473,7 +435,6 @@ /datum/design/ducts name = "Fluid Duct" - id = "fluid_ducts" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/stack/ducts @@ -485,7 +446,6 @@ /datum/design/digital_clock_frame name = "Digital Clock Frame" - id = "digital_clock_frame" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*7, /datum/material/glass = SHEET_MATERIAL_AMOUNT*4) build_path = /obj/item/wallframe/digital_clock @@ -497,7 +457,6 @@ /datum/design/razor name = "Electric Razor" - id = "razor" build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*0.75) build_path = /obj/item/razor @@ -509,7 +468,6 @@ /datum/design/package_wrap name = "Package Wrapping" - id = "packagewrap" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT * 2, /datum/material/glass =SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/stack/package_wrap @@ -521,7 +479,6 @@ /datum/design/holodisk name = "Holodisk" - id = "holodisk" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT, /datum/material/glass =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/disk/holodisk @@ -533,7 +490,6 @@ /datum/design/suit_sensor name = "Suit Sensor" - id = "suit_sensor" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT, /datum/material/glass = SMALL_MATERIAL_AMOUNT) build_path = /obj/item/suit_sensor @@ -545,7 +501,6 @@ /datum/design/conveyor_belt name = "Conveyor Belt" - id = "conveyor_belt" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 1.5) build_path = /obj/item/stack/conveyor @@ -557,7 +512,6 @@ /datum/design/conveyor_switch name = "Conveyor Belt Switch" - id = "conveyor_switch" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*4.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT*2) build_path = /obj/item/conveyor_switch_construct @@ -569,7 +523,6 @@ /datum/design/laptop name = "Laptop Frame" - id = "laptop" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT) transfered_materials = list( @@ -586,7 +539,6 @@ /datum/design/universal_scanner name = "Universal Scanner" desc = "A utility scanner that fills multiple roles: Exports, sales, and vendor price tags." - id = "universal_scanner" build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/universal_scanner @@ -599,7 +551,6 @@ /datum/design/paper_biscuit name = "Paper Biscuit" desc = "A paper biscuit which can seal paperwork inside. After sealing it the only way to open is through cracking it, cracking is irreversible and makes it permanently open. Not actually a biscuit." - id = "biscuit" build_type = AUTOLATHE materials = list(/datum/material/plastic =SMALL_MATERIAL_AMOUNT*0.2) build_path = /obj/item/folder/biscuit/unsealed @@ -612,7 +563,6 @@ /datum/design/paper_biscuit_confidential name = "Confidential Paper Biscuit" desc = "A paper biscuit which can seal paperwork inside, this one is used for confidential Nanotrasen documents. After sealing it the only way to open is through cracking it, cracking is irreversible and makes it permanently open. Not actually a biscuit." - id = "confidential_biscuit" build_type = AUTOLATHE materials = list(/datum/material/plastic = SMALL_MATERIAL_AMOUNT*0.3) build_path = /obj/item/folder/biscuit/unsealed/confidential diff --git a/code/modules/research/designs/autolathe/security_designs.dm b/code/modules/research/designs/autolathe/security_designs.dm index 3f9772189004..8d4a3468d802 100644 --- a/code/modules/research/designs/autolathe/security_designs.dm +++ b/code/modules/research/designs/autolathe/security_designs.dm @@ -1,6 +1,5 @@ /datum/design/beanbag_slug name = "Beanbag Slug (Less Lethal)" - id = "beanbag_slug" build_type = AUTOLATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3) build_path = /obj/item/ammo_casing/shotgun/beanbag @@ -12,7 +11,6 @@ /datum/design/rubbershot name = "Rubber Shot (Less Lethal)" - id = "rubber_shot" build_type = AUTOLATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3) build_path = /obj/item/ammo_casing/shotgun/rubbershot @@ -24,7 +22,6 @@ /datum/design/c38 name = "Speed Loader (.38) (Lethal)" - id = "c38" build_type = AUTOLATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*3) build_path = /obj/item/ammo_box/speedloader/c38 @@ -36,7 +33,6 @@ /datum/design/recorder name = "Universal Recorder" - id = "recorder" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*0.6, /datum/material/glass = SMALL_MATERIAL_AMOUNT*0.3) build_path = /obj/item/taperecorder/empty @@ -48,7 +44,6 @@ /datum/design/tape name = "Universal Recorder Tape" - id = "tape" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*0.2, /datum/material/glass = SMALL_MATERIAL_AMOUNT*0.2) build_path = /obj/item/tape/random @@ -60,7 +55,6 @@ /datum/design/foam_dart name = "Box of Foam Darts (Harmless)" - id = "foam_dart" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/ammo_box/foambox @@ -72,7 +66,6 @@ /datum/design/flamethrower name = "Flamethrower (Lethal/Highly Destructive)" - id = "flamethrower" build_type = AUTOLATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/flamethrower/full @@ -84,7 +77,6 @@ /datum/design/electropack name = "Electropack" - id = "electropack" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*5, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT*2.5) build_path = /obj/item/electropack @@ -96,7 +88,6 @@ /datum/design/handcuffs name = "Handcuffs" - id = "handcuffs" build_type = AUTOLATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/restraints/handcuffs @@ -107,16 +98,13 @@ departmental_flags = DEPARTMENT_BITFLAG_SECURITY /datum/design/handcuffs/sec - id = "handcuffs_s" build_type = PROTOLATHE | AWAY_LATHE category = list( RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY, ) - autolathe_exportable = FALSE /datum/design/receiver name = "Modular Receiver" - id = "receiver" build_type = AUTOLATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*7.5) build_path = /obj/item/weaponcrafting/receiver @@ -129,7 +117,6 @@ /datum/design/shotgun_dart name = "Shotgun Dart (Lethal)" - id = "shotgun_dart" build_type = AUTOLATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3) build_path = /obj/item/ammo_casing/shotgun/dart @@ -141,7 +128,6 @@ /datum/design/incendiary_slug name = "Incendiary Slug (Lethal)" - id = "incendiary_slug" build_type = AUTOLATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3) build_path = /obj/item/ammo_casing/shotgun/incendiary @@ -153,7 +139,6 @@ /datum/design/riot_dart name = "Foam Riot Dart (Nonlethal)" - id = "riot_dart" build_type = AUTOLATHE materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT) //Discount for making individually - no box = less iron! build_path = /obj/item/ammo_casing/foam_dart/riot @@ -165,7 +150,6 @@ /datum/design/riot_darts name = "Foam Riot Dart Box (Nonlethal)" - id = "riot_darts" build_type = AUTOLATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*25) //Comes with 40 darts build_path = /obj/item/ammo_box/foambox/riot @@ -177,7 +161,6 @@ /datum/design/a357 name = ".357 Casing (VERY Lethal)" - id = "a357" build_type = AUTOLATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3) build_path = /obj/item/ammo_casing/c357 @@ -189,7 +172,6 @@ /datum/design/strilka310_surplus name = ".310 Surplus Bullet Casing (VERY Lethal)" - id = "strilka310_surplus" build_type = AUTOLATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3) build_path = /obj/item/ammo_casing/strilka310/surplus @@ -201,7 +183,6 @@ /datum/design/c10mm name = "Ammo Box (10mm) (Lethal)" - id = "c10mm" build_type = AUTOLATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 30) transfered_materials = list( @@ -216,7 +197,6 @@ /datum/design/c45 name = "Ammo Box (.45) (Lethal)" - id = "c45" build_type = AUTOLATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 30) transfered_materials = list( @@ -231,7 +211,6 @@ /datum/design/c9mm name = "Ammo Box (9mm) (Lethal)" - id = "c9mm" build_type = AUTOLATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 30) transfered_materials = list( @@ -246,7 +225,6 @@ /datum/design/telescreen_interrogation name = "Interrogation Telescreen" - id = "telescreen_interrogation" build_type = PROTOLATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT*5, @@ -261,7 +239,6 @@ /datum/design/telescreen_prison name = "Prison Telescreen" - id = "telescreen_prison" build_type = PROTOLATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT*5, diff --git a/code/modules/research/designs/autolathe/service_designs.dm b/code/modules/research/designs/autolathe/service_designs.dm index a8d459912e1d..c8e3c65a8d42 100644 --- a/code/modules/research/designs/autolathe/service_designs.dm +++ b/code/modules/research/designs/autolathe/service_designs.dm @@ -1,6 +1,5 @@ /datum/design/bucket name = "Bucket" - id = "bucket" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/reagent_containers/cup/bucket @@ -12,7 +11,6 @@ /datum/design/wet_floor_sign name = "Wet Floor Sign" - id = "wet_floor_sign" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/clothing/suit/caution @@ -24,7 +22,6 @@ /datum/design/watering_can name = "Watering Can" - id = "watering_can" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/reagent_containers/cup/watering_can @@ -36,7 +33,6 @@ /datum/design/mop name = "Mop" - id = "mop" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/mop @@ -48,7 +44,6 @@ /datum/design/broom name = "Push Broom" - id = "pushbroom" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/pushbroom @@ -60,7 +55,6 @@ /datum/design/camera name = "Camera" - id = "camera" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*0.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/camera @@ -72,7 +66,6 @@ /datum/design/camera_film name = "Camera Film Cartridge" - id = "camera_film" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*0.1, /datum/material/glass = SMALL_MATERIAL_AMOUNT*0.1) build_path = /obj/item/camera_film @@ -84,7 +77,6 @@ /datum/design/kitchen_knife name = "Kitchen Knife" - id = "kitchen_knife" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*6) build_path = /obj/item/knife/kitchen @@ -96,7 +88,6 @@ /datum/design/plastic_knife name = "Plastic Knife" - id = "plastic_knife" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/knife/plastic @@ -108,7 +99,6 @@ /datum/design/fork name = "Fork" - id = "fork" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT) build_path = /obj/item/kitchen/fork @@ -120,7 +110,6 @@ /datum/design/plastic_fork name = "Plastic Fork" - id = "plastic_fork" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic = SMALL_MATERIAL_AMOUNT) build_path = /obj/item/kitchen/fork/plastic @@ -132,7 +121,6 @@ /datum/design/spoon name = "Spoon" - id = "spoon" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*1.2) build_path = /obj/item/kitchen/spoon @@ -144,7 +132,6 @@ /datum/design/plastic_spoon name = "Plastic Spoon" - id = "plastic_spoon" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic = SMALL_MATERIAL_AMOUNT*1.2) build_path = /obj/item/kitchen/spoon/plastic @@ -156,7 +143,6 @@ /datum/design/tongs name = "Tongs" - id = "tongs" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/kitchen/tongs @@ -168,7 +154,6 @@ /datum/design/tray name = "Serving Tray" - id = "servingtray" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 1.5) build_path = /obj/item/storage/bag/tray @@ -180,7 +165,6 @@ /datum/design/plate name = "Plate" - id = "plate" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*1.5) build_path = /obj/item/plate/iron @@ -192,7 +176,6 @@ /datum/design/cafeteria_tray name = "Cafeteria Tray" - id = "foodtray" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 1.5) build_path = /obj/item/storage/bag/tray/cafeteria @@ -204,7 +187,6 @@ /datum/design/bowl name = "Bowl" - id = "bowl" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass =SMALL_MATERIAL_AMOUNT*5) category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_EQUIPMENT) @@ -216,7 +198,6 @@ /datum/design/drinking_glass name = "Drinking Glass" - id = "drinking_glass" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass =SMALL_MATERIAL_AMOUNT*5) category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_EQUIPMENT) @@ -228,7 +209,6 @@ /datum/design/shot_glass name = "Shot Glass" - id = "shot_glass" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass =SMALL_MATERIAL_AMOUNT) category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_EQUIPMENT) @@ -240,7 +220,6 @@ /datum/design/shaker name = "Shaker" - id = "shaker" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT * 1.5) category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_EQUIPMENT) @@ -252,7 +231,6 @@ /datum/design/cultivator name = "Cultivator" - id = "cultivator" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*0.5) build_path = /obj/item/cultivator @@ -264,7 +242,6 @@ /datum/design/plant_analyzer name = "Plant Analyzer" - id = "plant_analyzer" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*0.3, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.2) build_path = /obj/item/plant_analyzer @@ -276,7 +253,6 @@ /datum/design/shovel name = "Shovel" - id = "shovel" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*0.5) build_path = /obj/item/shovel @@ -288,7 +264,6 @@ /datum/design/spade name = "Spade" - id = "spade" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*0.5) build_path = /obj/item/shovel/spade @@ -300,7 +275,6 @@ /datum/design/hatchet name = "Hatchet" - id = "hatchet" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*7.5) build_path = /obj/item/hatchet @@ -312,7 +286,6 @@ /datum/design/secateurs name = "Secateurs" - id = "secateurs" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*2) build_path = /obj/item/secateurs @@ -324,7 +297,6 @@ /datum/design/radio_headset name = "Radio Headset" - id = "radio_headset" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*0.75) build_path = /obj/item/radio/headset @@ -336,7 +308,6 @@ /datum/design/bounced_radio name = "Station Bounced Radio" - id = "bounced_radio" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*0.75, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.25) build_path = /obj/item/radio/off @@ -348,7 +319,6 @@ /datum/design/handlabeler name = "Hand Labeler" - id = "handlabel" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*1.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT*1.25) build_path = /obj/item/hand_labeler @@ -360,7 +330,6 @@ /datum/design/pet_carrier name = "Pet Carrier" - id = "pet_carrier" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*3.75, /datum/material/glass =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/pet_carrier @@ -372,7 +341,6 @@ /datum/design/toygun name = "Cap Gun" - id = "toygun" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/iron = SMALL_MATERIAL_AMOUNT) build_path = /obj/item/toy/gun @@ -384,7 +352,6 @@ /datum/design/capbox name = "Box of Cap Gun Shots" - id = "capbox" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic = SMALL_MATERIAL_AMOUNT * 3) build_path = /obj/item/toy/ammo/gun @@ -396,7 +363,6 @@ /datum/design/toy_balloon name = "Plastic Balloon" - id = "toy_balloon" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic = SHEET_MATERIAL_AMOUNT * 0.6) build_path = /obj/item/toy/balloon @@ -408,7 +374,6 @@ /datum/design/toy_armblade name = "Plastic Armblade" - id = "toy_armblade" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/toy/foamblade @@ -420,7 +385,6 @@ /datum/design/toy_katana name = "Plastic Katana" - id = "toy_katana" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic = SHEET_MATERIAL_AMOUNT) build_path = /obj/item/toy/katana @@ -432,7 +396,6 @@ /datum/design/plastic_tree name = "Plastic Potted Plant" - id = "plastic_trees" build_type = AUTOLATHE materials = list(/datum/material/plastic = SHEET_MATERIAL_AMOUNT*4) build_path = /obj/item/kirbyplants/random/fullysynthetic @@ -444,7 +407,6 @@ /datum/design/beads name = "Plastic Bead Necklace" - id = "plastic_necklace" build_type = AUTOLATHE materials = list(/datum/material/plastic =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/clothing/neck/beads @@ -456,7 +418,6 @@ /datum/design/plastic_ring name = "Plastic Can Rings" - id = "ring_holder" build_type = AUTOLATHE materials = list(/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT*1.2) build_path = /obj/item/storage/cans @@ -468,7 +429,6 @@ /datum/design/plastic_box name = "Plastic Box" - id = "plastic_box" build_type = AUTOLATHE materials = list(/datum/material/plastic =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/storage/box/plastic @@ -480,7 +440,6 @@ /datum/design/sticky_tape name = "Sticky Tape" - id = "sticky_tape" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/stack/medical/wrap/sticky_tape @@ -492,7 +451,6 @@ /datum/design/chisel name = "Chisel" - id = "chisel" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*0.75) build_path = /obj/item/chisel @@ -504,7 +462,6 @@ /datum/design/paperroll name = "Hand Labeler Paper Roll" - id = "roll" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*0.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.25) build_path = /obj/item/hand_labeler_refill @@ -516,7 +473,6 @@ /datum/design/toner name = "Toner Cartridge" - id = "toner" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*0.1, /datum/material/glass = SMALL_MATERIAL_AMOUNT*0.1) build_path = /obj/item/toner @@ -528,7 +484,6 @@ /datum/design/toner/large name = "Toner Cartridge (Large)" - id = "toner_large" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*0.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT*0.5) build_path = /obj/item/toner/large @@ -540,7 +495,6 @@ /datum/design/fishing_rod_basic name = "Fishing Rod" - id = "fishing_rod" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT * 2, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/fishing_rod @@ -552,7 +506,6 @@ /datum/design/fishing_rod_material name = "Material Fishing Rod" - id = "fishing_rod_material" build_type = AUTOLATHE materials = list(/datum/material_requirement/solid_material = SMALL_MATERIAL_AMOUNT * 4) build_path = /obj/item/fishing_rod/material @@ -563,7 +516,6 @@ /datum/design/fish_case name = "Stasis Fish Case" - id = "fish_case" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT, /datum/material/plastic = SMALL_MATERIAL_AMOUNT) build_path = /obj/item/storage/fish_case @@ -575,7 +527,6 @@ /datum/design/aquarium_kit name = "Aquarium Kit" - id = "aquarium_kit" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/aquarium_kit @@ -587,7 +538,6 @@ /datum/design/ticket_machine name = "Ticket Machine Frame" - id = "ticket_machine" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*7, /datum/material/glass = SHEET_MATERIAL_AMOUNT*4) build_path = /obj/item/wallframe/ticket_machine @@ -599,7 +549,6 @@ /datum/design/telescreen_bar name = "Bar Telescreen" - id = "telescreen_bar" build_type = PROTOLATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT*5, @@ -614,7 +563,6 @@ /datum/design/telescreen_entertainment name = "Entertainment Telescreen" - id = "telescreen_entertainment" build_type = AUTOLATHE | PROTOLATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT*5, @@ -629,7 +577,6 @@ /datum/design/telescreen_monastery name = "Monastery Telescreen" - id = "telescreen_monastery" build_type = PROTOLATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, @@ -645,12 +592,11 @@ /datum/design/telescreen_monastery/New() var/has_monastery = CHECK_MAP_JOB_CHANGE(JOB_CHAPLAIN, "has_monastery") if(!has_monastery) - id = DESIGN_ID_IGNORE + qdel(src) return ..() /datum/design/entertainment_radio name = "Entertainment Radio" - id = "radio_entertainment" build_type = AUTOLATHE | PROTOLATHE materials = list( /datum/material/iron = SMALL_MATERIAL_AMOUNT*0.75, @@ -665,7 +611,6 @@ /datum/design/barcode_scanner name = "Barcode Scanner" - id = "barcode_scanner" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2) build_path = /obj/item/barcodescanner @@ -676,7 +621,6 @@ /datum/design/rdd name = "Rapid Decoration Device (RDD)" - id = "rdd" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 12, @@ -693,4 +637,3 @@ RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_SERVICE, ) departmental_flags = DEPARTMENT_BITFLAG_SERVICE - diff --git a/code/modules/research/designs/biogenerator_designs.dm b/code/modules/research/designs/biogenerator_designs.dm index 5c7e6f0a7890..ab31b48dc96e 100644 --- a/code/modules/research/designs/biogenerator_designs.dm +++ b/code/modules/research/designs/biogenerator_designs.dm @@ -3,174 +3,151 @@ /////////////////////////////////// /datum/design/biogen + abstract_type = /datum/design/biogen build_type = BIOGENERATOR // biomass doesn't have a sheet type, and the biogenerator isn't meant to churn out unprocessed biomass anyway. inherit_materials = DESIGN_DONT_INHERIT_MATS /datum/design/biogen/milk name = "Synthetic Milk" - id = "milk" materials = list(/datum/material/biomass = 0.4) make_reagent = /datum/reagent/consumable/milk category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_FOOD) /datum/design/biogen/soymilk name = "Synthetic Soy Milk" - id = "soymilk" materials = list(/datum/material/biomass = 0.4) make_reagent = /datum/reagent/consumable/soymilk category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_FOOD) /datum/design/biogen/ethanol name = "Synthetic Ethanol" - id = "ethanol" materials = list(/datum/material/biomass = 0.6) make_reagent = /datum/reagent/consumable/ethanol category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_FOOD) /datum/design/biogen/cream name = "Synthetic Cream" - id = "cream" materials = list(/datum/material/biomass = 0.6) make_reagent = /datum/reagent/consumable/cream category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_FOOD) /datum/design/biogen/black_pepper name = "Synthetic Black Pepper" - id = "black_pepper" materials = list(/datum/material/biomass = 0.6) make_reagent = /datum/reagent/consumable/blackpepper category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_FOOD) /datum/design/biogen/enzyme name = "Synthetic Enzyme" - id = "enzyme" materials = list(/datum/material/biomass = 0.6) make_reagent = /datum/reagent/consumable/enzyme category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_FOOD) /datum/design/biogen/flour name = "Synthetic Flour" - id = "flour_sack" materials = list(/datum/material/biomass = 0.6) make_reagent = /datum/reagent/consumable/flour category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_FOOD) /datum/design/biogen/sugar name = "Synthetic Sugar" - id = "sugar" materials = list(/datum/material/biomass = 0.6) make_reagent = /datum/reagent/consumable/sugar category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_FOOD) /datum/design/biogen/monkey_cube name = "Monkey Cube" - id = "mcube" materials = list(/datum/material/biomass = 50) build_path = /obj/item/food/monkeycube category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_FOOD) /datum/design/biogen/seaweed_sheet name = "Seaweed Sheet" - id = "seaweedsheet" materials = list(/datum/material/biomass = 3) build_path = /obj/item/food/seaweedsheet category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_FOOD) /datum/design/biogen/ez_nut //easy nut :) name = "E-Z Nutrient" - id = "ez_nut" materials = list(/datum/material/biomass = 0.1) make_reagent = /datum/reagent/plantnutriment/eznutriment category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_CHEMICALS) /datum/design/biogen/l4z_nut name = "Left 4 Zed" - id = "l4z_nut" materials = list(/datum/material/biomass = 0.1) make_reagent = /datum/reagent/plantnutriment/left4zednutriment category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_CHEMICALS) /datum/design/biogen/rh_nut name = "Robust Harvest" - id = "rh_nut" materials = list(/datum/material/biomass = 0.2) make_reagent = /datum/reagent/plantnutriment/robustharvestnutriment category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_CHEMICALS) /datum/design/biogen/end_gro name = "Enduro Grow" - id = "end_gro" materials = list(/datum/material/biomass = 0.3) make_reagent = /datum/reagent/plantnutriment/endurogrow category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_CHEMICALS) /datum/design/biogen/liq_earth name = "Liquid Earthquake" - id = "liq_earth" materials = list(/datum/material/biomass = 0.3) make_reagent = /datum/reagent/plantnutriment/liquidearthquake category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_CHEMICALS) /datum/design/biogen/weed_killer name = "Weed Killer" - id = "weed_killer" materials = list(/datum/material/biomass = 0.2) make_reagent = /datum/reagent/toxin/plantbgone/weedkiller category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_CHEMICALS) /datum/design/biogen/pest_spray name = "Pest Killer" - id = "pest_spray" materials = list(/datum/material/biomass = 0.4) make_reagent = /datum/reagent/toxin/pestkiller category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_CHEMICALS) /datum/design/biogen/org_pest_spray name = "Organic Pest Killer" - id = "org_pest_spray" materials = list(/datum/material/biomass = 0.6) make_reagent = /datum/reagent/toxin/pestkiller/organic category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_CHEMICALS) /datum/design/biogen/leather name = "Sheet of Leather" - id = "leather" materials = list(/datum/material/biomass = 30) build_path = /obj/item/stack/sheet/leather category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_MATERIALS) /datum/design/biogen/cloth name = "Sheet of Cloth" - id = "cloth" materials = list(/datum/material/biomass = 10) build_path = /obj/item/stack/sheet/cloth category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_MATERIALS) /datum/design/biogen/cardboard name = "Sheet of Cardboard" - id = "cardboard" materials = list(/datum/material/biomass = 5) build_path = /obj/item/stack/sheet/cardboard category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_MATERIALS) /datum/design/biogen/paper name = "Sheet of Paper" - id = "paper" materials = list(/datum/material/biomass = 2) build_path = /obj/item/paper category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_MATERIALS) /datum/design/biogen/rolling_paper name = "Sheet of Rolling Paper" - id = "rollingpaper" materials = list(/datum/material/biomass = 1) build_path = /obj/item/rollingpaper category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_MATERIALS) /datum/design/biogen/candle name = "Candle" - id = "candle" materials = list(/datum/material/biomass = 3) build_path = /obj/item/flashlight/flare/candle category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_MATERIALS) diff --git a/code/modules/research/designs/bluespace_designs.dm b/code/modules/research/designs/bluespace_designs.dm index df746f9615cd..4c95fc58fabf 100644 --- a/code/modules/research/designs/bluespace_designs.dm +++ b/code/modules/research/designs/bluespace_designs.dm @@ -6,7 +6,6 @@ /datum/design/beacon name = "Tracking Beacon" desc = "A bluespace tracking beacon." - id = "beacon" build_type = PROTOLATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*1.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/beacon @@ -18,7 +17,6 @@ /datum/design/bag_holding name = "Inert Bag of Holding" desc = "A block of metal ready to be transformed into a bag of holding with a bluespace anomaly core." - id = "bag_holding" build_type = PROTOLATHE materials = list(/datum/material/gold =SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/diamond =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/uranium = SMALL_MATERIAL_AMOUNT*2.5, /datum/material/bluespace =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/bag_of_holding_inert @@ -30,7 +28,6 @@ /datum/design/bluespace_crystal name = "Artificial Bluespace Crystal" desc = "A small blue crystal with mystical properties." - id = "bluespace_crystal" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT * 1.5) build_path = /obj/item/stack/ore/bluespace_crystal/artificial @@ -43,7 +40,6 @@ /datum/design/telesci_gps name = "GPS Device" desc = "Little thingie that can track its position at all times." - id = "telesci_gps" build_type = PROTOLATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/gps @@ -51,12 +47,10 @@ RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_BLUESPACE ) departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_CARGO - autolathe_exportable = FALSE /datum/design/desynchronizer name = "Desynchronizer" desc = "A device that can desynchronize the user from spacetime." - id = "desynchronizer" build_type = PROTOLATHE materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/bluespace =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/desynchronizer @@ -68,7 +62,6 @@ /datum/design/miningsatchel_holding name = "Mining Satchel of Holding" desc = "A mining satchel that can hold an infinite amount of ores." - id = "minerbag_holding" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/gold = SMALL_MATERIAL_AMOUNT*2.5, /datum/material/uranium =SMALL_MATERIAL_AMOUNT*5) //quite cheap, for more convenience build_path = /obj/item/storage/bag/ore/holding @@ -80,7 +73,6 @@ /datum/design/swapper name = "Quantum Spin Inverter" desc = "An experimental device that is able to swap the locations of two entities by switching their particles' spin values. Must be linked to another device to function." - id = "swapper" build_type = PROTOLATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/bluespace =SHEET_MATERIAL_AMOUNT, /datum/material/gold =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/swapper diff --git a/code/modules/research/designs/comp_board_designs.dm b/code/modules/research/designs/comp_board_designs.dm index 4ec0d1d6f667..4630593abb90 100644 --- a/code/modules/research/designs/comp_board_designs.dm +++ b/code/modules/research/designs/comp_board_designs.dm @@ -1,15 +1,13 @@ ///////////////////Computer Boards/////////////////////////////////// /datum/design/board - name = "NULL ENTRY Board" - desc = "I promise this doesn't give you syndicate goodies!" + abstract_type = /datum/design/board build_type = IMPRINTER | AWAY_IMPRINTER materials = list(/datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) /datum/design/board/arcade_battle name = "Battle Arcade Machine Board" desc = "Allows for the construction of circuit boards used to build a new arcade machine." - id = "arcade_battle" build_path = /obj/item/circuitboard/computer/arcade/battle category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENTERTAINMENT @@ -19,7 +17,6 @@ /datum/design/board/orion_trail name = "Orion Trail Arcade Machine Board" desc = "Allows for the construction of circuit boards used to build a new Orion Trail machine." - id = "arcade_orion" build_path = /obj/item/circuitboard/computer/arcade/orion_trail category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENTERTAINMENT @@ -29,7 +26,6 @@ /datum/design/board/seccamera name = "Security Camera Board" desc = "Allows for the construction of circuit boards used to build security camera computers." - id = "seccamera" build_path = /obj/item/circuitboard/computer/security category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_SECURITY @@ -39,7 +35,6 @@ /datum/design/board/rdcamera name = "Research Monitor Board" desc = "Allows for the construction of circuit boards used to build research camera computers." - id = "rdcamera" build_path = /obj/item/circuitboard/computer/research category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_RESEARCH @@ -49,7 +44,6 @@ /datum/design/board/xenobiocamera name = "Xenobiology Console Board" desc = "Allows for the construction of circuit boards used to build xenobiology camera computers." - id = "xenobioconsole" build_path = /obj/item/circuitboard/computer/xenobiology category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_RESEARCH @@ -59,7 +53,6 @@ /datum/design/board/med_data name = "Medical Records Board" desc = "Allows for the construction of circuit boards used to build a medical records console." - id = "med_data" build_path = /obj/item/circuitboard/computer/med_data category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_MEDICAL @@ -69,7 +62,6 @@ /datum/design/board/operating name = "Operating Computer Board" desc = "Allows for the construction of circuit boards used to build an operating computer console." - id = "operating" build_path = /obj/item/circuitboard/computer/operating category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_MEDICAL @@ -79,7 +71,6 @@ /datum/design/board/pandemic name = "PanD.E.M.I.C. 2200 Board" desc = "Allows for the construction of circuit boards used to build a PanD.E.M.I.C. 2200 console." - id = "pandemic" build_path = /obj/item/circuitboard/computer/pandemic category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_MEDICAL @@ -89,7 +80,6 @@ /datum/design/board/comconsole name = "Communications Board" desc = "Allows for the construction of circuit boards used to build a communications console." - id = "comconsole" build_path = /obj/item/circuitboard/computer/communications category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_COMMAND @@ -99,7 +89,6 @@ /datum/design/board/bankmachine name = "Bank Machine Board" desc = "Allows for the construction of circuit boards used to build a Bank Machine." - id = "bankmachine" build_path = /obj/item/circuitboard/computer/bankmachine category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_COMMAND @@ -109,7 +98,6 @@ /datum/design/board/crewconsole name = "Crew Monitoring Computer Board" desc = "Allows for the construction of circuit boards used to build a Crew monitoring computer." - id = "crewconsole" build_type = IMPRINTER build_path = /obj/item/circuitboard/computer/crew category = list( @@ -120,7 +108,6 @@ /datum/design/board/secdata name = "Security Records Console Board" desc = "Allows for the construction of circuit boards used to build a security records console." - id = "secdata" build_path = /obj/item/circuitboard/computer/secure_data category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_SECURITY @@ -130,7 +117,6 @@ /datum/design/board/atmosalerts name = "Atmosphere Alert Board" desc = "Allows for the construction of circuit boards used to build an atmosphere alert console." - id = "atmosalerts" build_path = /obj/item/circuitboard/computer/atmos_alert category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENGINEERING @@ -140,7 +126,6 @@ /datum/design/board/atmos_control name = "Atmospheric Monitor Board" desc = "Allows for the construction of circuit boards used to build an Atmospheric Monitor." - id = "atmos_control" build_path = /obj/item/circuitboard/computer/atmos_control category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENGINEERING @@ -150,7 +135,6 @@ /datum/design/board/robocontrol name = "Robotics Control Console Board" desc = "Allows for the construction of circuit boards used to build a Robotics Control console." - id = "robocontrol" materials = list(/datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/bluespace =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/circuitboard/computer/robotics category = list( @@ -161,7 +145,6 @@ /datum/design/board/slot_machine name = "Slot Machine Board" desc = "Allows for the construction of circuit boards used to build a new slot machine." - id = "slotmachine" build_path = /obj/item/circuitboard/computer/slot_machine category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENTERTAINMENT @@ -172,7 +155,6 @@ /datum/design/board/powermonitor name = "Power Monitor Board" desc = "Allows for the construction of circuit boards used to build a new power monitor." - id = "powermonitor" build_path = /obj/item/circuitboard/computer/powermonitor category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENGINEERING @@ -182,7 +164,6 @@ /datum/design/board/solarcontrol name = "Solar Control Board" desc = "Allows for the construction of circuit boards used to build a solar control console." - id = "solarcontrol" build_path = /obj/item/circuitboard/computer/solar_control category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENGINEERING @@ -192,7 +173,6 @@ /datum/design/board/prisonmanage name = "Prisoner Management Console Board" desc = "Allows for the construction of circuit boards used to build a prisoner management console." - id = "prisonmanage" build_path = /obj/item/circuitboard/computer/prisoner category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_SECURITY @@ -202,7 +182,6 @@ /datum/design/board/mechacontrol name = "Exosuit Control Console Board" desc = "Allows for the construction of circuit boards used to build an exosuit control console." - id = "mechacontrol" build_path = /obj/item/circuitboard/computer/mecha_control category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ROBOTICS @@ -212,7 +191,6 @@ /datum/design/board/mechapower name = "Mech Bay Power Control Console Board" desc = "Allows for the construction of circuit boards used to build a mech bay power control console." - id = "mechapower" build_path = /obj/item/circuitboard/computer/mech_bay_power_console category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ROBOTICS @@ -222,7 +200,6 @@ /datum/design/board/rdconsole name = "R&D Console Board" desc = "Allows for the construction of circuit boards used to build a new R&D console." - id = "rdconsole" build_path = /obj/item/circuitboard/computer/rdconsole category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_RESEARCH @@ -232,7 +209,6 @@ /datum/design/board/cargo name = "Supply Console Board" desc = "Allows for the construction of circuit boards used to build a Supply Console." - id = "cargo" build_type = IMPRINTER build_path = /obj/item/circuitboard/computer/cargo category = list( @@ -243,7 +219,6 @@ /datum/design/board/cargorequest name = "Supply Request Console Board" desc = "Allows for the construction of circuit boards used to build a Supply Request Console." - id = "cargorequest" build_type = IMPRINTER build_path = /obj/item/circuitboard/computer/cargo/request category = list( @@ -254,7 +229,6 @@ /datum/design/board/mining name = "Outpost Status Display Board" desc = "Allows for the construction of circuit boards used to build an outpost status display console." - id = "mining" build_path = /obj/item/circuitboard/computer/mining category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_CARGO @@ -264,7 +238,6 @@ /datum/design/board/comm_monitor name = "Telecommunications Monitoring Console Board" desc = "Allows for the construction of circuit boards used to build a telecommunications monitor." - id = "comm_monitor" build_path = /obj/item/circuitboard/computer/comm_monitor category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENGINEERING @@ -274,7 +247,6 @@ /datum/design/board/comm_server name = "Telecommunications Server Monitoring Console Board" desc = "Allows for the construction of circuit boards used to build a telecommunication server browser and monitor." - id = "comm_server" build_path = /obj/item/circuitboard/computer/comm_server category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENGINEERING @@ -284,7 +256,6 @@ /datum/design/board/message_monitor name = "Messaging Monitor Console Board" desc = "Allows for the construction of circuit boards used to build a messaging monitor console." - id = "message_monitor" build_path = /obj/item/circuitboard/computer/message_monitor category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENGINEERING @@ -294,7 +265,6 @@ /datum/design/board/aifixer name = "AI Integrity Restorer Board" desc = "Allows for the construction of circuit boards used to build an AI Integrity Restorer." - id = "aifixer" build_path = /obj/item/circuitboard/computer/aifixer category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ROBOTICS @@ -304,7 +274,6 @@ /datum/design/board/libraryconsole name = "Library Console Board" desc = "Allows for the construction of circuit boards used to build a new library console." - id = "libraryconsole" build_path = /obj/item/circuitboard/computer/libraryconsole category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENTERTAINMENT @@ -314,7 +283,6 @@ /datum/design/board/apc_control name = "APC Control Board" desc = "Allows for the construction of circuit boards used to build a new APC control console." - id = "apc_control" build_path = /obj/item/circuitboard/computer/apc_control category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENGINEERING @@ -324,7 +292,6 @@ /datum/design/board/advanced_camera name = "Advanced Camera Console Board" desc = "Allows for the construction of circuit boards used to build advanced camera consoles." - id = "advanced_camera" build_path = /obj/item/circuitboard/computer/advanced_camera category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_SECURITY @@ -334,7 +301,6 @@ /datum/design/board/bountypad_control name = "Civilian Bounty Pad Control Board" desc = "Allows for the construction of circuit boards used to build a new civilian bounty pad console." - id = "bounty_pad_control" build_path = /obj/item/circuitboard/computer/bountypad category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_CARGO @@ -344,7 +310,6 @@ /datum/design/board/exoscanner_console name = "Scanner Array Control Console Board" desc = "Allows for the construction of circuit boards used to build a new scanner array control console." - id = "exoscanner_console" build_type = IMPRINTER build_path = /obj/item/circuitboard/computer/exoscanner_console category = list( @@ -355,7 +320,6 @@ /datum/design/board/exodrone_console name = "Exploration Drone Control Console Board" desc = "Allows for the construction of circuit boards used to build a new exploration drone control console." - id = "exodrone_console" build_type = IMPRINTER build_path = /obj/item/circuitboard/computer/exodrone_console category = list( @@ -366,7 +330,6 @@ /datum/design/board/accounting_console name = "Account Lookup Console Board" desc = "Allows for the construction of circuit boards used to assess the wealth of crewmates on station." - id = "account_console" build_type = IMPRINTER build_path = /obj/item/circuitboard/computer/accounting category = list( @@ -375,6 +338,7 @@ departmental_flags = DEPARTMENT_BITFLAG_SECURITY //Honestly should have a bridge techfab for this sometime. /datum/design/board/shuttle + abstract_type = /datum/design/board/shuttle build_type = IMPRINTER category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENGINEERING @@ -384,19 +348,16 @@ /datum/design/board/shuttle/flight_control name = "Computer Design (Shuttle Flight Controls)" desc = "Allows for the construction of circuit boards used to build a console that enables shuttle flight" - id = "shuttle_control" build_path = /obj/item/circuitboard/computer/shuttle/flight_control /datum/design/board/shuttle/shuttle_docker name = "Computer Design (Shuttle Navigation Computer)" desc = "Allows for the construction of circuit boards used to build a console that enables the targetting of custom flight locations" - id = "shuttle_docker" build_path = /obj/item/circuitboard/computer/shuttle/docker /datum/design/board/quantum_console name = "Quantum Console Board" desc = "Allows for the construction of circuit boards used to build a Quantum Console." - id = "quantum_console" build_path = /obj/item/circuitboard/computer/quantum_console category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_CARGO diff --git a/code/modules/research/designs/computer_part_designs.dm b/code/modules/research/designs/computer_part_designs.dm index 948073f9f155..f16139d60a79 100644 --- a/code/modules/research/designs/computer_part_designs.dm +++ b/code/modules/research/designs/computer_part_designs.dm @@ -2,9 +2,11 @@ ///////////Computer Parts/////////////// //////////////////////////////////////// // Data disks +/datum/design/portabledrive + abstract_type = /datum/design/portabledrive + /datum/design/portabledrive/basic name = "Data Disk" - id = "portadrive_basic" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass = SHEET_MATERIAL_AMOUNT) build_path = /obj/item/disk/computer @@ -16,7 +18,6 @@ /datum/design/portabledrive/advanced name = "Advanced Data Disk" - id = "portadrive_advanced" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass = SHEET_MATERIAL_AMOUNT * 2) build_path = /obj/item/disk/computer/advanced @@ -28,7 +29,6 @@ /datum/design/portabledrive/super name = "Super Data Disk" - id = "portadrive_super" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass = SHEET_MATERIAL_AMOUNT * 4) build_path = /obj/item/disk/computer/super diff --git a/code/modules/research/designs/electronics_designs.dm b/code/modules/research/designs/electronics_designs.dm index 9d87d30fb83f..12ed87df500e 100644 --- a/code/modules/research/designs/electronics_designs.dm +++ b/code/modules/research/designs/electronics_designs.dm @@ -6,7 +6,6 @@ /datum/design/intellicard name = "Intellicard AI Transportation System" desc = "Allows for the construction of an intellicard." - id = "intellicard" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold =SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/aicard @@ -18,7 +17,6 @@ /datum/design/paicard name = "Personal Artificial Intelligence Card" desc = "Allows for the construction of a pAI Card." - id = "paicard" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass =SMALL_MATERIAL_AMOUNT*5, /datum/material/iron =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/pai_card @@ -30,7 +28,6 @@ /datum/design/ai_cam_upgrade name = "AI Surveillance Software Update" desc = "A software package that will allow an artificial intelligence to 'hear' from its cameras via lip reading." - id = "ai_cam_upgrade" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.5, @@ -49,7 +46,6 @@ /datum/design/ai_power_transfer name = "AI Power Transfer Update" desc = "An upgrade package that lets an AI charge an APC from a distance" - id = "ai_power_upgrade" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.5, @@ -67,7 +63,6 @@ /datum/design/tech_disk name = "Technology Data Storage Disk" desc = "Produce additional disks for storing technology data." - id = "tech_disk" build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/disk/tech_disk @@ -79,7 +74,6 @@ /datum/design/manipulator_task_disk name = "Manipulator Task Disk" desc = "Produce additional disks for storing manipulator tasks." - id = "manipulator_task_disk" build_type = AUTOLATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/disk/manipulator diff --git a/code/modules/research/designs/experisci_designs.dm b/code/modules/research/designs/experisci_designs.dm index d7328d63ea5b..00a08a8df75d 100644 --- a/code/modules/research/designs/experisci_designs.dm +++ b/code/modules/research/designs/experisci_designs.dm @@ -1,7 +1,6 @@ /datum/design/experi_scanner name = "Experimental Scanner" desc = "Experimental scanning unit used for performing scanning experiments." - id = "experi_scanner" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass =SMALL_MATERIAL_AMOUNT*5, /datum/material/iron =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/experi_scanner diff --git a/code/modules/research/designs/limbgrower_designs.dm b/code/modules/research/designs/limbgrower_designs.dm index 2d43926e0b62..f6be64627ad0 100644 --- a/code/modules/research/designs/limbgrower_designs.dm +++ b/code/modules/research/designs/limbgrower_designs.dm @@ -4,7 +4,6 @@ /datum/design/leftarm name = "Left Arm" - id = "arm/left" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 25) build_path = /obj/item/bodypart/arm/left @@ -12,7 +11,6 @@ /datum/design/rightarm name = "Right Arm" - id = "arm/right" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 25) build_path = /obj/item/bodypart/arm/right @@ -20,7 +18,6 @@ /datum/design/leftleg name = "Left Leg" - id = "leg/left" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 25) build_path = /obj/item/bodypart/leg/left @@ -28,7 +25,6 @@ /datum/design/rightleg name = "Right Leg" - id = "leg/right" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 25) build_path = /obj/item/bodypart/leg/right @@ -38,7 +34,6 @@ /datum/design/heart name = "Heart" - id = "heart" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 30) build_path = /obj/item/organ/heart @@ -46,7 +41,6 @@ /datum/design/lungs name = "Lungs" - id = "lungs" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 20) build_path = /obj/item/organ/lungs @@ -54,7 +48,6 @@ /datum/design/liver name = "Liver" - id = "liver" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 20) build_path = /obj/item/organ/liver @@ -62,7 +55,6 @@ /datum/design/stomach name = "Stomach" - id = "stomach" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 15) build_path = /obj/item/organ/stomach @@ -70,7 +62,6 @@ /datum/design/appendix name = "Appendix" - id = "appendix" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 5) //why would you need this build_path = /obj/item/organ/appendix @@ -78,7 +69,6 @@ /datum/design/eyes name = "Eyes" - id = "eyes" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10) build_path = /obj/item/organ/eyes @@ -86,7 +76,6 @@ /datum/design/ears name = "Ears" - id = "ears" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10) build_path = /obj/item/organ/ears @@ -94,7 +83,6 @@ /datum/design/tongue name = "Tongue" - id = "tongue" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10) build_path = /obj/item/organ/tongue @@ -103,7 +91,6 @@ // Grows a fake lizard tail - not usable in lizard wine and other similar recipes. /datum/design/lizard_tail name = "Lizard Tail" - id = "liztail" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 20) build_path = /obj/item/organ/tail/lizard/fake @@ -111,7 +98,6 @@ /datum/design/lizard_tongue name = "Forked Tongue" - id = "liztongue" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 20) build_path = /obj/item/organ/tongue/lizard @@ -119,7 +105,6 @@ /datum/design/monkey_tail name = "Monkey Tail" - id = "monkeytail" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 20) build_path = /obj/item/organ/tail/monkey @@ -127,7 +112,6 @@ /datum/design/cat_tail name = "Cat Tail" - id = "cattail" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 20) build_path = /obj/item/organ/tail/cat @@ -135,7 +119,6 @@ /datum/design/cat_ears name = "Cat Ears" - id = "catears" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10) build_path = /obj/item/organ/ears/cat @@ -143,7 +126,6 @@ /datum/design/cat_tongue name = "Cat Tongue" - id = "cattongue" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10) build_path = /obj/item/organ/tongue/cat @@ -151,7 +133,6 @@ /datum/design/plasmaman_lungs name = "Plasma Filter" - id = "plasmamanlungs" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10, /datum/reagent/toxin/plasma = 20) build_path = /obj/item/organ/lungs/plasmaman @@ -159,7 +140,6 @@ /datum/design/plasmaman_tongue name = "Plasma Bone Tongue" - id = "plasmamantongue" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10, /datum/reagent/toxin/plasma = 20) build_path = /obj/item/organ/tongue/bone/plasmaman @@ -167,7 +147,6 @@ /datum/design/plasmaman_liver name = "Reagent Processing Crystal" - id = "plasmamanliver" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10, /datum/reagent/toxin/plasma = 20) build_path = /obj/item/organ/liver/bone/plasmaman @@ -175,7 +154,6 @@ /datum/design/plasmaman_stomach name = "Digestive Crystal" - id = "plasmamanstomach" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10, /datum/reagent/toxin/plasma = 20) build_path = /obj/item/organ/stomach/bone/plasmaman @@ -183,39 +161,36 @@ /datum/design/ethereal_stomach name = "Biological Battery" - id = "etherealstomach" build_type = LIMBGROWER - reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10, /datum/reagent/consumable/liquidelectricity/enriched = 20) + reagents_list = list( + /datum/reagent/medicine/c2/synthflesh = 10, + /datum/reagent/consumable/liquidelectricity = 20, + ) build_path = /obj/item/organ/stomach/ethereal category = list(SPECIES_ETHEREAL) /datum/design/ethereal_tongue name = "Electrical Discharger" - id = "etherealtongue" build_type = LIMBGROWER - reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10, /datum/reagent/consumable/liquidelectricity/enriched = 20) + reagents_list = list( + /datum/reagent/medicine/c2/synthflesh = 10, + /datum/reagent/consumable/liquidelectricity = 20, + ) build_path = /obj/item/organ/tongue/ethereal category = list(SPECIES_ETHEREAL) /datum/design/ethereal_lungs name = "Aeration Reticulum" - id = "ethereallungs" build_type = LIMBGROWER - reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10, /datum/reagent/consumable/liquidelectricity/enriched = 20) + reagents_list = list( + /datum/reagent/medicine/c2/synthflesh = 10, + /datum/reagent/consumable/liquidelectricity = 20, + ) build_path = /obj/item/organ/lungs/ethereal category = list(SPECIES_ETHEREAL) -// Intentionally not growable by normal means - for balance conerns. -/datum/design/ethereal_heart - name = "Crystal Core" - build_type = LIMBGROWER - reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10, /datum/reagent/consumable/liquidelectricity/enriched = 20) - build_path = /obj/item/organ/heart/ethereal - category = list(SPECIES_ETHEREAL) - /datum/design/armblade name = "Arm Blade" - id = "armblade" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 75) build_path = /obj/item/melee/synthetic_arm_blade @@ -223,19 +198,13 @@ /// Design disks and designs - for adding limbs and organs to the limbgrower. /obj/item/disk/design_disk/limbs + abstract_type = /obj/item/disk/design_disk/limbs name = "Limb Design Disk" desc = "A disk containing limb and organ designs for a limbgrower." icon_state = "datadisk1" - /// List of all limb designs this disk contains. - var/list/limb_designs = list() - -/obj/item/disk/design_disk/limbs/Initialize(mapload) - . = ..() - for(var/design in limb_designs) - var/datum/design/new_design = design - blueprints += new new_design /datum/design/limb_disk + abstract_type = /datum/design/limb_disk name = "Limb Design Disk" desc = "Contains designs for various limbs." build_type = PROTOLATHE @@ -248,40 +217,36 @@ /obj/item/disk/design_disk/limbs/felinid name = "Felinid Organ Design Disk" - limb_designs = list(/datum/design/cat_tail, /datum/design/cat_ears, /datum/design/cat_tongue) + blueprints = list(/datum/design/cat_tail, /datum/design/cat_ears, /datum/design/cat_tongue) /datum/design/limb_disk/felinid name = "Felinid Organ Design Disk" desc = "Contains designs for felinid organs for the limbgrower - Felinid ears, tail and tongue." - id = "limbdesign_felinid" build_path = /obj/item/disk/design_disk/limbs/felinid /obj/item/disk/design_disk/limbs/lizard name = "Lizard Organ Design Disk" - limb_designs = list(/datum/design/lizard_tail, /datum/design/lizard_tongue) + blueprints = list(/datum/design/lizard_tail, /datum/design/lizard_tongue) /datum/design/limb_disk/lizard name = "Lizard Organ Design Disk" desc = "Contains designs for lizard organs for the limbgrower - Lizard tongue, and tail" - id = "limbdesign_lizard" build_path = /obj/item/disk/design_disk/limbs/lizard /obj/item/disk/design_disk/limbs/plasmaman name = "Plasmaman Organ Design Disk" - limb_designs = list(/datum/design/plasmaman_stomach, /datum/design/plasmaman_liver, /datum/design/plasmaman_lungs, /datum/design/plasmaman_tongue) + blueprints = list(/datum/design/plasmaman_stomach, /datum/design/plasmaman_liver, /datum/design/plasmaman_lungs, /datum/design/plasmaman_tongue) /datum/design/limb_disk/plasmaman name = "Plasmaman Organ Design Disk" desc = "Contains designs for plasmaman organs for the limbgrower - Plasmaman tongue, liver, stomach, and lungs." - id = "limbdesign_plasmaman" build_path = /obj/item/disk/design_disk/limbs/plasmaman /obj/item/disk/design_disk/limbs/ethereal name = "Ethereal Organ Design Disk" - limb_designs = list(/datum/design/ethereal_stomach, /datum/design/ethereal_tongue, /datum/design/ethereal_lungs) + blueprints = list(/datum/design/ethereal_stomach, /datum/design/ethereal_tongue, /datum/design/ethereal_lungs) /datum/design/limb_disk/ethereal name = "Ethereal Organ Design Disk" desc = "Contains designs for ethereal organs for the limbgrower - Ethereal tongue and stomach." - id = "limbdesign_ethereal" build_path = /obj/item/disk/design_disk/limbs/ethereal diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 193fe72124c1..044aa250ffca 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -4,7 +4,6 @@ /datum/design/board/electrolyzer name = "Electrolyzer Board" desc = "The circuit board for an electrolyzer." - id = "electrolyzer" build_path = /obj/item/circuitboard/machine/electrolyzer category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ATMOS @@ -14,7 +13,6 @@ /datum/design/board/smes name = "SMES Board" desc = "The circuit board for a SMES." - id = "smes" build_path = /obj/item/circuitboard/machine/smes category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING @@ -24,7 +22,6 @@ /datum/design/board/power_connector name = "Power Connector Board" desc = "The circuit board for a portable SMES power connector." - id = "power_connector" build_path = /obj/item/circuitboard/machine/smes/connector category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING @@ -34,7 +31,6 @@ /datum/design/board/smesbank name = "Portable SMES Board" desc = "The circuit board for a portable SMES, which requires a connector to use." - id = "portable_smes" build_path = /obj/item/circuitboard/machine/smesbank category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING @@ -44,7 +40,6 @@ /datum/design/board/announcement_system name = "Automated Announcement System Board" desc = "The circuit board for an automated announcement system." - id = "automated_announcement" build_path = /obj/item/circuitboard/machine/announcement_system category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_TELECOMMS @@ -54,7 +49,6 @@ /datum/design/board/turbine_computer name = "Turbine Power Console Board" desc = "The circuit board for a turbine power console." - id = "power_turbine_console" build_path = /obj/item/circuitboard/computer/turbine_computer category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ATMOS @@ -64,7 +58,6 @@ /datum/design/board/emitter name = "Emitter Board" desc = "The circuit board for an emitter." - id = "emitter" build_path = /obj/item/circuitboard/machine/emitter category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING @@ -74,7 +67,6 @@ /datum/design/board/mass_driver name = "Mass Driver Board" desc = "The circuit board for a mass driver." - id = "mass_driver" build_path = /obj/item/circuitboard/machine/mass_driver category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING @@ -84,7 +76,6 @@ /datum/design/board/turbine_compressor name = "Turbine Compressor Board" desc = "The circuit board for a turbine compressor." - id = "turbine_compressor" build_path = /obj/item/circuitboard/machine/turbine_compressor category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ATMOS @@ -94,7 +85,6 @@ /datum/design/board/turbine_rotor name = "Turbine Rotor Board" desc = "The circuit board for a turbine rotor." - id = "turbine_rotor" build_path = /obj/item/circuitboard/machine/turbine_rotor category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ATMOS @@ -104,7 +94,6 @@ /datum/design/board/turbine_stator name = "Turbine Stator Board" desc = "The circuit board for a turbine stator." - id = "turbine_stator" build_path = /obj/item/circuitboard/machine/turbine_stator category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ATMOS @@ -114,7 +103,6 @@ /datum/design/board/thermomachine name = "Thermomachine Board" desc = "The circuit board for a thermomachine." - id = "thermomachine" build_path = /obj/item/circuitboard/machine/thermomachine category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ATMOS @@ -124,7 +112,6 @@ /datum/design/board/space_heater name = "Space Heater Board" desc = "The circuit board for a space heater." - id = "space_heater" build_path = /obj/item/circuitboard/machine/space_heater category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ATMOS @@ -134,7 +121,6 @@ /datum/design/board/teleport_station name = "Teleportation Station Board" desc = "The circuit board for a teleportation station." - id = "tele_station" build_type = IMPRINTER build_path = /obj/item/circuitboard/machine/teleporter_station category = list( @@ -145,7 +131,6 @@ /datum/design/board/teleport_hub name = "Teleportation Hub Board" desc = "The circuit board for a teleportation hub." - id = "tele_hub" build_type = IMPRINTER build_path = /obj/item/circuitboard/machine/teleporter_hub category = list( @@ -156,7 +141,6 @@ /datum/design/board/quantumpad name = "Quantum Pad Board" desc = "The circuit board for a quantum telepad." - id = "quantumpad" build_type = IMPRINTER build_path = /obj/item/circuitboard/machine/quantumpad category = list( @@ -167,7 +151,6 @@ /datum/design/board/botpad name = "Bot Launchpad Board" desc = "The circuit board for a bot launchpad." - id = "botpad" build_type = IMPRINTER build_path = /obj/item/circuitboard/machine/botpad category = list( @@ -178,7 +161,6 @@ /datum/design/board/launchpad name = "Bluespace Launchpad Board" desc = "The circuit board for a bluespace Launchpad." - id = "launchpad" build_type = IMPRINTER build_path = /obj/item/circuitboard/machine/launchpad category = list( @@ -189,7 +171,6 @@ /datum/design/board/launchpad_console name = "Bluespace Launchpad Console Board" desc = "The circuit board for a bluespace launchpad Console." - id = "launchpad_console" build_type = IMPRINTER build_path = /obj/item/circuitboard/computer/launchpad_console category = list( @@ -200,7 +181,6 @@ /datum/design/board/modular_shield_gate name = "Modular Shield Gate Board" desc = "The circuit board for a modular shield gate." - id = "modular_shield_gate" build_path = /obj/item/circuitboard/machine/modular_shield_generator/gate category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING @@ -210,7 +190,6 @@ /datum/design/board/modular_shield_generator name = "Modular Shield Generator Board" desc = "The circuit board for a modular shield generator." - id = "modular_shield_generator" build_path = /obj/item/circuitboard/machine/modular_shield_generator category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING @@ -220,7 +199,6 @@ /datum/design/board/modular_shield_node name = "Modular Shield Node Board" desc = "The circuit board for a modular shield node." - id = "modular_shield_node" build_path = /obj/item/circuitboard/machine/modular_shield_node category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING @@ -230,7 +208,6 @@ /datum/design/board/modular_shield_cable name = "Modular Shield Cable Board" desc = "The circuit board for a modular shield cable." - id = "modular_shield_cable" build_path = /obj/item/circuitboard/machine/modular_shield_cable category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING @@ -240,7 +217,6 @@ /datum/design/board/modular_shield_relay name = "Modular Shield Relay Board" desc = "The circuit board for a modular shield relay." - id = "modular_shield_relay" build_path = /obj/item/circuitboard/machine/modular_shield_relay category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING @@ -250,7 +226,6 @@ /datum/design/board/modular_shield_charger name = "Modular Shield Charger Board" desc = "The circuit board for a modular shield charger." - id = "modular_shield_charger" build_path = /obj/item/circuitboard/machine/modular_shield_charger category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING @@ -260,7 +235,6 @@ /datum/design/board/modular_shield_well name = "Modular Shield Well Board" desc = "The circuit board for a modular shield well." - id = "modular_shield_well" build_path = /obj/item/circuitboard/machine/modular_shield_well category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING @@ -270,7 +244,6 @@ /datum/design/board/modular_shield_console name = "Modular Shield Console Board" desc = "The circuit board for a modular shield console." - id = "modular_shield_console" build_path = /obj/item/circuitboard/computer/modular_shield_console category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING @@ -280,7 +253,6 @@ /datum/design/board/teleconsole name = "Teleporter Console Board" desc = "Allows for the construction of circuit boards used to build a teleporter control console." - id = "teleconsole" build_type = IMPRINTER build_path = /obj/item/circuitboard/computer/teleporter category = list( @@ -291,7 +263,6 @@ /datum/design/board/cryotube name = "Cryotube Board" desc = "The circuit board for a cryotube." - id = "cryotube" build_path = /obj/item/circuitboard/machine/cryo_tube category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_MEDICAL @@ -299,9 +270,8 @@ departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_MEDICAL /datum/design/board/chem_dispenser - name = "Portable Chem Dispenser Board" - desc = "The circuit board for a portable chem dispenser." - id = "chem_dispenser" + name = "Chem Dispenser Board" + desc = "The circuit board for a chem dispenser." build_path = /obj/item/circuitboard/machine/chem_dispenser category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_CHEMISTRY @@ -311,7 +281,6 @@ /datum/design/board/chem_master name = "Chem Master Board" desc = "The circuit board for a Chem Master 3000." - id = "chem_master" build_path = /obj/item/circuitboard/machine/chem_master category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_CHEMISTRY @@ -321,7 +290,6 @@ /datum/design/board/chem_heater name = "Chemical Heater Board" desc = "The circuit board for a chemical heater." - id = "chem_heater" build_path = /obj/item/circuitboard/machine/chem_heater category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_CHEMISTRY @@ -331,7 +299,6 @@ /datum/design/board/chem_mass_spec name = "High-Performance Liquid Chromatography Machine Board" desc = "The circuit board for a High-Performance Liquid Chromatography machine." - id = "chem_mass_spec" build_path = /obj/item/circuitboard/machine/chem_mass_spec category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_CHEMISTRY @@ -341,7 +308,6 @@ /datum/design/board/smoke_machine name = "Smoke Machine Board" desc = "The circuit board for a smoke machine." - id = "smoke_machine" build_path = /obj/item/circuitboard/machine/smoke_machine category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_CHEMISTRY @@ -351,7 +317,6 @@ /datum/design/board/reagentgrinder name = "All-In-One Grinder Board" desc = "The circuit board for an All-In-One Grinder." - id = "reagentgrinder" build_path = /obj/item/circuitboard/machine/reagentgrinder category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_CHEMISTRY @@ -361,7 +326,6 @@ /datum/design/board/hypnochair name = "Enhanced Interrogation Chamber Board" desc = "Allows for the construction of circuit boards used to build an Enhanced Interrogation Chamber." - id = "hypnochair" build_path = /obj/item/circuitboard/machine/hypnochair category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_SECURITY @@ -371,7 +335,6 @@ /datum/design/board/photobooth name = "Photobooth Board" desc = "The circuit board for a photobooth." - id = "photobooth" build_path = /obj/item/circuitboard/machine/photobooth category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_SERVICE @@ -381,7 +344,6 @@ /datum/design/board/security_photobooth name = "Security Photobooth Board" desc = "The circuit board for a security photobooth." - id = "security_photobooth" build_path = /obj/item/circuitboard/machine/photobooth/security category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_SECURITY @@ -391,7 +353,6 @@ /datum/design/board/biogenerator name = "Biogenerator Board" desc = "The circuit board for a biogenerator." - id = "biogenerator" build_path = /obj/item/circuitboard/machine/biogenerator category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_BOTANY @@ -401,7 +362,6 @@ /datum/design/board/hydroponics name = "Hydroponics Tray Board" desc = "The circuit board for a hydroponics tray." - id = "hydro_tray" build_path = /obj/item/circuitboard/machine/hydroponics category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_BOTANY @@ -411,7 +371,6 @@ /datum/design/board/destructive_analyzer name = "Destructive Analyzer Board" desc = "The circuit board for a destructive analyzer." - id = "destructive_analyzer" build_path = /obj/item/circuitboard/machine/destructive_analyzer category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_RESEARCH @@ -421,7 +380,6 @@ /datum/design/board/experimentor name = "E.X.P.E.R.I-MENTOR Board" desc = "The circuit board for an E.X.P.E.R.I-MENTOR." - id = "experimentor" build_path = /obj/item/circuitboard/machine/experimentor category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_RESEARCH @@ -431,7 +389,6 @@ /datum/design/board/circuit_imprinter name = "Circuit Imprinter Board" desc = "The circuit board for a circuit imprinter." - id = "circuit_imprinter" build_type = IMPRINTER build_path = /obj/item/circuitboard/machine/circuit_imprinter category = list( @@ -442,7 +399,6 @@ /datum/design/board/circuit_imprinter/offstation name = "Ancient Circuit Imprinter Board" desc = "The circuit board for an ancient circuit imprinter." - id = "circuit_imprinter_offstation" build_type = AWAY_IMPRINTER build_path = /obj/item/circuitboard/machine/circuit_imprinter/offstation category = list( @@ -453,7 +409,6 @@ /datum/design/board/rdservercontrol name = "R&D Server Control Console Board" desc = "The circuit board for an R&D Server Control Console." - id = "rdservercontrol" build_path = /obj/item/circuitboard/computer/rdservercontrol category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_RESEARCH @@ -463,7 +418,6 @@ /datum/design/board/rdserver name = "R&D Server Board" desc = "The circuit board for an R&D Server." - id = "rdserver" build_path = /obj/item/circuitboard/machine/rdserver category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_RESEARCH @@ -473,7 +427,6 @@ /datum/design/board/mechfab name = "Exosuit Fabricator Board" desc = "The circuit board for an Exosuit Fabricator." - id = "mechfab" build_path = /obj/item/circuitboard/machine/mechfab category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ROBOTICS @@ -483,7 +436,6 @@ /datum/design/board/cyborgrecharger name = "Cyborg Recharger Board" desc = "The circuit board for a Cyborg Recharger." - id = "cyborgrecharger" build_path = /obj/item/circuitboard/machine/cyborgrecharger category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ROBOTICS @@ -493,7 +445,6 @@ /datum/design/board/mech_recharger name = "Mechbay Recharger Board" desc = "The circuit board for a Mechbay Recharger." - id = "mech_recharger" build_path = /obj/item/circuitboard/machine/mech_recharger category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ROBOTICS @@ -503,7 +454,6 @@ /datum/design/board/dnascanner name = "DNA Scanner Board" desc = "The circuit board for a DNA Scanner." - id = "dnascanner" build_path = /obj/item/circuitboard/machine/dnascanner category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_GENETICS @@ -513,7 +463,6 @@ /datum/design/board/dnainfuser name = "DNA Infuser Board" desc = "The circuit board for a DNA Infuser." - id = "dnainfuser" build_path = /obj/item/circuitboard/machine/dna_infuser category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_GENETICS @@ -523,7 +472,6 @@ /datum/design/board/scan_console name = "DNA Console Board" desc = "Allows for the construction of circuit boards used to build a new DNA console." - id = "scan_console" build_path = /obj/item/circuitboard/computer/scan_consolenew category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_GENETICS @@ -533,7 +481,6 @@ /datum/design/board/destructive_scanner name = "Destructive Scanner Board" desc = "The circuit board for an experimental destructive scanner." - id = "destructive_scanner" build_path = /obj/item/circuitboard/machine/destructive_scanner category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_RESEARCH @@ -543,7 +490,6 @@ /datum/design/board/doppler_array name = "Tachyon-Doppler Research Array Board" desc = "The circuit board for a tachyon-doppler research array" - id = "doppler_array" build_path = /obj/item/circuitboard/machine/doppler_array category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_RESEARCH @@ -553,7 +499,6 @@ /datum/design/board/anomaly_refinery name = "Anomaly Refinery Board" desc = "The circuit board for an anomaly refinery" - id = "anomaly_refinery" build_path = /obj/item/circuitboard/machine/anomaly_refinery category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_RESEARCH @@ -563,7 +508,6 @@ /datum/design/board/tank_compressor name = "Tank Compressor Board" desc = "The circuit board for a tank compressor" - id = "tank_compressor" build_path = /obj/item/circuitboard/machine/tank_compressor category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_RESEARCH @@ -573,7 +517,6 @@ /datum/design/board/microwave name = "Microwave Board" desc = "The circuit board for a microwave." - id = "microwave" build_path = /obj/item/circuitboard/machine/microwave category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_KITCHEN @@ -583,7 +526,6 @@ /datum/design/board/microwave_engineering name = "Wireless Microwave Board" desc = "The circuit board for a cell-powered microwave." - id = "microwave_engineering" build_path = /obj/item/circuitboard/machine/microwave/engineering category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_KITCHEN @@ -593,7 +535,6 @@ /datum/design/board/gibber name = "Gibber Board" desc = "The circuit board for a gibber." - id = "gibber" build_path = /obj/item/circuitboard/machine/gibber category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_KITCHEN @@ -603,7 +544,6 @@ /datum/design/board/smartfridge name = "Smartfridge Board" desc = "The circuit board for a smartfridge." - id = "smartfridge" build_path = /obj/item/circuitboard/machine/smartfridge category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_KITCHEN @@ -613,7 +553,6 @@ /datum/design/board/dehydrator name = "Dehydrator Board" desc = "The circuit board for a dehydrator." - id = "dehydrator" build_path = /obj/item/circuitboard/machine/dehydrator category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_KITCHEN @@ -623,7 +562,6 @@ /datum/design/board/vatgrower name = "Growing Vat Board" desc = "The circuit board for a growing vat." - id = "vatgrower" build_path = /obj/item/circuitboard/machine/vatgrower category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_RESEARCH @@ -633,7 +571,6 @@ /datum/design/board/monkey_recycler name = "Monkey Recycler Board" desc = "The circuit board for a monkey recycler." - id = "monkey_recycler" build_path = /obj/item/circuitboard/machine/monkey_recycler category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_RESEARCH @@ -643,7 +580,6 @@ /datum/design/board/seed_extractor name = "Seed Extractor Board" desc = "The circuit board for a seed extractor." - id = "seed_extractor" build_path = /obj/item/circuitboard/machine/seed_extractor category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_BOTANY @@ -653,7 +589,6 @@ /datum/design/board/processor name = "Food/Slime Processor Board" desc = "The circuit board for a processing unit. Screwdriver the circuit to switch between food (default) or slime processing." - id = "processor" build_path = /obj/item/circuitboard/machine/processor category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_KITCHEN @@ -663,7 +598,6 @@ /datum/design/board/soda_dispenser name = "Portable Soda Dispenser Board" desc = "The circuit board for a portable soda dispenser." - id = "soda_dispenser" build_path = /obj/item/circuitboard/machine/chem_dispenser/drinks category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_BAR @@ -673,7 +607,6 @@ /datum/design/board/beer_dispenser name = "Portable Booze Dispenser Board" desc = "The circuit board for a portable booze dispenser." - id = "beer_dispenser" build_path = /obj/item/circuitboard/machine/chem_dispenser/drinks/beer category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_BAR @@ -683,7 +616,6 @@ /datum/design/board/recycler name = "Recycler Board" desc = "The circuit board for a recycler." - id = "recycler" build_path = /obj/item/circuitboard/machine/recycler category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING @@ -693,7 +625,6 @@ /datum/design/board/scanner_gate name = "Scanner Gate Board" desc = "The circuit board for a scanner gate." - id = "scanner_gate" build_path = /obj/item/circuitboard/machine/scanner_gate category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_MEDICAL @@ -703,7 +634,6 @@ /datum/design/board/holopad name = "AI Holopad Board" desc = "The circuit board for a holopad." - id = "holopad" build_path = /obj/item/circuitboard/machine/holopad category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING @@ -713,7 +643,6 @@ /datum/design/board/autolathe name = "Autolathe Board" desc = "The circuit board for an autolathe." - id = "autolathe" build_path = /obj/item/circuitboard/machine/autolathe category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_FAB @@ -723,7 +652,6 @@ /datum/design/board/recharger name = "Weapon Recharger Board" desc = "The circuit board for a Weapon Recharger." - id = "recharger" materials = list(/datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/circuitboard/machine/recharger category = list( @@ -734,7 +662,6 @@ /datum/design/board/vendor name = "Vendor Board" desc = "The circuit board for a Vendor." - id = "vendor" build_path = /obj/item/circuitboard/machine/vendor category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_SERVICE @@ -744,7 +671,6 @@ /datum/design/board/ore_redemption name = "Ore Redemption Machine Board" desc = "The circuit board for an Ore Redemption machine." - id = "ore_redemption" build_path = /obj/item/circuitboard/machine/ore_redemption category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_CARGO @@ -754,7 +680,6 @@ /datum/design/board/mining_equipment_vendor name = "Mining Rewards Vendor Board" desc = "The circuit board for a Mining Rewards Vendor." - id = "mining_equipment_vendor" build_path = /obj/item/circuitboard/computer/order_console/mining category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_CARGO @@ -764,7 +689,6 @@ /datum/design/board/suit_storage_unit name = "Suit Storage Unit" desc = "The circuit board for a suit storage unit." - id = "suit_storage_unit" build_path = /obj/item/circuitboard/machine/suit_storage_unit category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ROBOTICS @@ -774,7 +698,6 @@ /datum/design/board/tesla_coil name = "Tesla Coil Board" desc = "The circuit board for a tesla coil." - id = "tesla_coil" build_path = /obj/item/circuitboard/machine/tesla_coil category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING @@ -784,7 +707,6 @@ /datum/design/board/grounding_rod name = "Grounding Rod Board" desc = "The circuit board for a grounding rod." - id = "grounding_rod" build_path = /obj/item/circuitboard/machine/grounding_rod category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING @@ -794,7 +716,6 @@ /datum/design/board/ntnet_relay name = "NTNet Relay Board" desc = "The circuit board for a wireless network relay." - id = "ntnet_relay" build_path = /obj/item/circuitboard/machine/ntnet_relay category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_TELECOMMS @@ -804,7 +725,6 @@ /datum/design/board/crossing_signal name = "Crossing Signal Board" desc = "The circuit board for a tram crossing signal." - id = "crossing_signal" build_path = /obj/item/circuitboard/machine/crossing_signal category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_TELECOMMS @@ -814,7 +734,6 @@ /datum/design/board/guideway_sensor name = "Guideway Sensor Board" desc = "The circuit board for a tram proximity sensor." - id = "guideway_sensor" build_path = /obj/item/circuitboard/machine/guideway_sensor category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_TELECOMMS @@ -824,7 +743,6 @@ /datum/design/board/limbgrower name = "Limb Grower Board" desc = "The circuit board for a limb grower." - id = "limbgrower" build_path = /obj/item/circuitboard/machine/limbgrower category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_MEDICAL @@ -834,7 +752,6 @@ /datum/design/board/harvester name = "Organ Harvester Board" desc = "The circuit board for an organ harvester." - id = "harvester" build_path = /obj/item/circuitboard/machine/harvester category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_MEDICAL @@ -844,7 +761,6 @@ /datum/design/board/deepfryer name = "Deep Fryer Board" desc = "The circuit board for a Deep Fryer." - id = "deepfryer" build_path = /obj/item/circuitboard/machine/deep_fryer category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_KITCHEN @@ -854,7 +770,6 @@ /datum/design/board/griddle name = "Griddle Board" desc = "The circuit board for a Griddle." - id = "griddle" build_path = /obj/item/circuitboard/machine/griddle category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_KITCHEN @@ -864,7 +779,6 @@ /datum/design/board/oven name = "Oven Board" desc = "The circuit board for a Oven." - id = "oven" build_path = /obj/item/circuitboard/machine/oven category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_KITCHEN @@ -874,7 +788,6 @@ /datum/design/board/stove name = "Stove Board" desc = "The circuit board for a Stove." - id = "stove" build_path = /obj/item/circuitboard/machine/stove category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_KITCHEN @@ -884,7 +797,6 @@ /datum/design/board/range name = "Range Board" desc = "The circuit board for a Range, which is both an Oven and a Stove." - id = "range" build_path = /obj/item/circuitboard/machine/range category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_KITCHEN @@ -894,7 +806,6 @@ /datum/design/board/cell_charger name = "Cell Charger Board" desc = "The circuit board for a cell charger." - id = "cell_charger" build_path = /obj/item/circuitboard/machine/cell_charger category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING @@ -904,7 +815,6 @@ /datum/design/board/dish_drive name = "Dish Drive Board" desc = "The circuit board for a dish drive." - id = "dish_drive" build_path = /obj/item/circuitboard/machine/dish_drive category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_KITCHEN @@ -914,7 +824,6 @@ /datum/design/board/stacking_unit_console name = "Stacking Machine Console Board" desc = "The circuit board for a Stacking Machine Console." - id = "stack_console" build_path = /obj/item/circuitboard/machine/stacking_unit_console category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_CARGO @@ -924,7 +833,6 @@ /datum/design/board/stacking_machine name = "Stacking Machine Board" desc = "The circuit board for a Stacking Machine." - id = "stack_machine" build_path = /obj/item/circuitboard/machine/stacking_machine category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_CARGO @@ -934,7 +842,6 @@ /datum/design/board/ore_silo name = "Ore Silo Board" desc = "The circuit board for an ore silo." - id = "ore_silo" build_path = /obj/item/circuitboard/machine/ore_silo category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_CARGO @@ -944,7 +851,6 @@ /datum/design/board/fat_sucker name = "Lipid Extractor Board" desc = "The circuit board for a lipid extractor." - id = "fat_sucker" build_path = /obj/item/circuitboard/machine/fat_sucker category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_SERVICE @@ -954,7 +860,6 @@ /datum/design/board/stasis name = "Lifeform Stasis Unit Board" desc = "The circuit board for a stasis unit." - id = "stasis" build_path = /obj/item/circuitboard/machine/stasis category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_MEDICAL @@ -964,7 +869,6 @@ /datum/design/board/medical_kiosk name = "Medical Kiosk Board" desc = "The circuit board for a Medical Kiosk." - id = "medical_kiosk" build_path = /obj/item/circuitboard/machine/medical_kiosk category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_MEDICAL @@ -974,7 +878,6 @@ /datum/design/board/medipen_refiller name = "Medipen Refiller Board" desc = "The circuit board for a Medipen Refiller." - id = "medipen_refiller" build_path = /obj/item/circuitboard/machine/medipen_refiller category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_MEDICAL @@ -984,7 +887,6 @@ /datum/design/board/plumbing_receiver name = "Chemical Recipient Board" desc = "The circuit board for a Chemical Recipient." - id = "plumbing_receiver" build_path = /obj/item/circuitboard/machine/plumbing_receiver category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_CHEMISTRY @@ -994,7 +896,6 @@ /datum/design/board/sheetifier name = "Sheet-meister 2000 Board" desc = "The circuit board for a Sheet-meister 2000." - id = "sheetifier" build_path = /obj/item/circuitboard/machine/sheetifier category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_FAB @@ -1004,7 +905,6 @@ /datum/design/board/restaurant_portal name = "Restaurant Portal Board" desc = "The circuit board for a restaurant portal" - id = "restaurant_portal" build_path = /obj/item/circuitboard/machine/restaurant_portal category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_KITCHEN @@ -1014,7 +914,6 @@ /datum/design/board/bountypad name = "Civilian Bounty Pad Board" desc = "The circuit board for a Civilian Bounty Pad." - id = "bounty_pad" build_path = /obj/item/circuitboard/machine/bountypad category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_CARGO @@ -1024,7 +923,6 @@ /datum/design/board/skill_station name = "Skill Station Board" desc = "The circuit board for Skill station." - id = "skill_station" build_path = /obj/item/circuitboard/machine/skill_station category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_SERVICE @@ -1034,7 +932,6 @@ /datum/design/board/fax name = "Fax Machine Board" desc = "The circuit board for a fax machine." - id = "fax" build_path = /obj/item/circuitboard/machine/fax category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_SERVICE @@ -1046,7 +943,6 @@ /datum/design/board/HFR_core name = "HFR Core Board" desc = "The circuit board for an HFR Core." - id = "HFR_core" build_path = /obj/item/circuitboard/machine/HFR_core category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ATMOS @@ -1056,7 +952,6 @@ /datum/design/board/HFR_fuel_input name = "HFR Fuel Input Board" desc = "The circuit board for an HFR fuel input." - id = "HFR_fuel_input" build_path = /obj/item/circuitboard/machine/HFR_fuel_input category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ATMOS @@ -1066,7 +961,6 @@ /datum/design/board/HFR_waste_output name = "HFR Waste Output Board" desc = "The circuit board for an HFR waste output." - id = "HFR_waste_output" build_path = /obj/item/circuitboard/machine/HFR_waste_output category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ATMOS @@ -1076,7 +970,6 @@ /datum/design/board/HFR_moderator_input name = "HFR Moderator Input Board" desc = "The circuit board for an HFR moderator input." - id = "HFR_moderator_input" build_path = /obj/item/circuitboard/machine/HFR_moderator_input category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ATMOS @@ -1086,7 +979,6 @@ /datum/design/board/HFR_corner name = "HFR Corner Board" desc = "The circuit board for an HFR corner." - id = "HFR_corner" build_path = /obj/item/circuitboard/machine/HFR_corner category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ATMOS @@ -1096,7 +988,6 @@ /datum/design/board/HFR_interface name = "HFR Interface Board" desc = "The circuit board for an HFR interface." - id = "HFR_interface" build_path = /obj/item/circuitboard/machine/HFR_interface category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ATMOS @@ -1106,7 +997,6 @@ /datum/design/board/crystallizer name = "Crystallizer Board" desc = "The circuit board for a crystallizer." - id = "crystallizer" build_path = /obj/item/circuitboard/machine/crystallizer category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ATMOS @@ -1116,7 +1006,6 @@ /datum/design/board/exoscanner name = "Scanner Array Board" desc = "The circuit board for scanner array." - id = "exoscanner" build_path = /obj/item/circuitboard/machine/exoscanner category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_RESEARCH @@ -1126,7 +1015,6 @@ /datum/design/board/exodrone_launcher name = "Exploration Drone Launcher Board" desc = "The circuit board for exodrone launcher." - id = "exodrone_launcher" build_path = /obj/item/circuitboard/machine/exodrone_launcher category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_RESEARCH @@ -1136,7 +1024,6 @@ /datum/design/board/component_printer name = "Component Printer Board" desc = "The circuit board for a component printer" - id = "component_printer" build_path = /obj/item/circuitboard/machine/component_printer category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_RESEARCH @@ -1146,7 +1033,6 @@ /datum/design/board/module_printer name = "Module Duplicator Board" desc = "The circuit board for a module duplicator" - id = "module_duplicator" build_path = /obj/item/circuitboard/machine/module_duplicator category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_RESEARCH @@ -1156,7 +1042,6 @@ /datum/design/board/coffeemaker name = "Coffeemaker Board" desc = "The circuit board for a coffeemaker." - id = "coffeemaker" build_path = /obj/item/circuitboard/machine/coffeemaker category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_SERVICE @@ -1166,7 +1051,6 @@ /datum/design/board/navbeacon name = "Bot Navigational Beacon Board" desc = "The circuit board for a beacon that aids bot navigation." - id = "botnavbeacon" build_path = /obj/item/circuitboard/machine/navbeacon category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ROBOTICS @@ -1176,7 +1060,6 @@ /datum/design/board/fishing_portal_generator name = "Fishing Portal Generator Board" desc = "The circuit board for the fishing portal generator" - id = "fishing_portal_generator" build_path = /obj/item/circuitboard/machine/fishing_portal_generator category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_SERVICE @@ -1185,7 +1068,6 @@ /datum/design/board/brm name = "Boulder Retrieval Matrix Board" - id = "brm" materials = list( /datum/material/glass = SHEET_MATERIAL_AMOUNT, ) @@ -1199,7 +1081,6 @@ /datum/design/board/flatpacker name = "Flatpacker Machine Board" desc = "The circuit board for a Flatpacker." - id = "flatpacker" build_path = /obj/item/circuitboard/machine/flatpacker category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING @@ -1209,7 +1090,6 @@ /datum/design/board/scrubber name = "Portable Air Scrubber Board" desc = "The circuit board for a portable air scrubber." - id = "scrubber" build_path = /obj/item/circuitboard/machine/scrubber category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ATMOS @@ -1219,7 +1099,6 @@ /datum/design/board/pump name = "Portable Air Pump Board" desc = "The circuit board for a portable air pump." - id = "pump" build_path = /obj/item/circuitboard/machine/pump category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ATMOS @@ -1229,7 +1108,6 @@ /datum/design/board/pipe_scrubber name = "Portable Pipe Scrubber Board" desc = "The circuit board for a portable pipe scrubber." - id = "pipe_scrubber" build_path = /obj/item/circuitboard/machine/pipe_scrubber category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ATMOS @@ -1239,7 +1117,6 @@ /datum/design/board/bookbinder name = "Book Binder" desc = "The circuit board for a book binder" - id = "bookbinder" build_path = /obj/item/circuitboard/machine/bookbinder category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_SERVICE @@ -1249,7 +1126,6 @@ /datum/design/board/libraryscanner name = "Book Scanner" desc = "The circuit board for a book scanner" - id = "libraryscanner" build_path = /obj/item/circuitboard/machine/libraryscanner category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_SERVICE @@ -1259,7 +1135,6 @@ /datum/design/board/big_manipulator name = "Big Manipulator Board" desc = "The circuit board for a big manipulator." - id = "big_manipulator" build_path = /obj/item/circuitboard/machine/big_manipulator category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING @@ -1269,7 +1144,6 @@ /datum/design/board/manulathe name = "Manufacturing Lathe Board" desc = "The circuit board for this machine." - id = "manulathe" build_path = /obj/item/circuitboard/machine/manulathe category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING @@ -1279,7 +1153,6 @@ /datum/design/board/manucrafter name = "Manufacturing Assembling Machine Board" desc = "The circuit board for this machine." - id = "manucrafter" build_path = /obj/item/circuitboard/machine/manucrafter category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING @@ -1289,7 +1162,6 @@ /datum/design/board/manucrusher name = "Manufacturing Crusher Board" desc = "The circuit board for this machine." - id = "manucrusher" build_path = /obj/item/circuitboard/machine/manucrusher category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING @@ -1299,7 +1171,6 @@ /datum/design/board/manurouter name = "Manufacturing Router Board" desc = "The circuit board for this machine." - id = "manurouter" build_path = /obj/item/circuitboard/machine/manurouter category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING @@ -1309,7 +1180,6 @@ /datum/design/board/manusorter name = "Conveyor Sort-Router Board" desc = "The circuit board for this machine." - id = "manusorter" build_path = /obj/item/circuitboard/machine/manusorter category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING @@ -1319,7 +1189,6 @@ /datum/design/board/manuunloader name = "Manufacturing Crate Unloader Board" desc = "The circuit board for this machine." - id = "manuunloader" build_path = /obj/item/circuitboard/machine/manuunloader category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING @@ -1329,7 +1198,6 @@ /datum/design/board/manusmelter name = "Manufacturing Smelter Board" desc = "The circuit board for this machine." - id = "manusmelter" build_path = /obj/item/circuitboard/machine/manusmelter category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING @@ -1339,7 +1207,6 @@ /datum/design/board/mailsorter name = "Mail Sorter Board" desc = "The circuit board for a mail sorting unit." - id = "mailsorter" build_path = /obj/item/circuitboard/machine/mailsorter category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_CARGO @@ -1349,7 +1216,6 @@ /datum/design/board/propulsion_engine name = "Propulsion Engine Board" desc = "The circuit for a propulsion engine." - id = "propulsion_engine" build_path = /obj/item/circuitboard/machine/engine/propulsion build_type = IMPRINTER category = list( @@ -1360,7 +1226,6 @@ /datum/design/board/photopcopier name = "Photocopier" desc = "The circuit for a photocopier." - id = "photocopier" build_path = /obj/item/circuitboard/machine/photocopier category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_SERVICE @@ -1370,7 +1235,6 @@ /datum/design/board/atmosshieldgen name = "Atmospherics Shield Generator Board" desc = "The circuit board for an atmospherics shield generator." - id = "atmosshieldgen" build_path = /obj/item/circuitboard/machine/atmos_shield_gen category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ATMOS @@ -1380,7 +1244,6 @@ /datum/design/board/netpod name = "Netpod Board" desc = "The circuit board for a netpod." - id = "netpod" build_path = /obj/item/circuitboard/machine/netpod category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_CARGO @@ -1390,7 +1253,6 @@ /datum/design/board/byteforge name = "Byteforge Board" desc = "Allows for the construction of circuit boards used to build a Byteforge." - id = "byteforge" build_path = /obj/item/circuitboard/machine/byteforge category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_CARGO @@ -1400,7 +1262,6 @@ /datum/design/board/washing_machine name = "Washing Machine" desc = "The circuit board to build a washing machine." - id = "washing_machine" build_path = /obj/item/circuitboard/machine/washing_machine category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_SERVICE diff --git a/code/modules/research/designs/mecha_designs.dm b/code/modules/research/designs/mecha_designs.dm index c5be7c2b7c03..bdc1ea534cb1 100644 --- a/code/modules/research/designs/mecha_designs.dm +++ b/code/modules/research/designs/mecha_designs.dm @@ -5,7 +5,6 @@ /datum/design/board/ripley_main name = "APLU \"Ripley\" Central Control module" desc = "Allows for the construction of a \"Ripley\" Central Control module." - id = "ripley_main" build_path = /obj/item/circuitboard/mecha/ripley/main category = list( RND_CATEGORY_EXOSUIT_BOARDS + RND_SUBCATEGORY_EXOSUIT_BOARDS_RIPLEY @@ -15,7 +14,6 @@ /datum/design/board/ripley_peri name = "APLU \"Ripley\" Peripherals Control module" desc = "Allows for the construction of a \"Ripley\" Peripheral Control module." - id = "ripley_peri" build_path = /obj/item/circuitboard/mecha/ripley/peripherals category = list( RND_CATEGORY_EXOSUIT_BOARDS + RND_SUBCATEGORY_EXOSUIT_BOARDS_RIPLEY @@ -25,7 +23,6 @@ /datum/design/board/odysseus_main name = "\"Odysseus\" Central Control module" desc = "Allows for the construction of a \"Odysseus\" Central Control module." - id = "odysseus_main" build_path = /obj/item/circuitboard/mecha/odysseus/main category = list( RND_CATEGORY_EXOSUIT_BOARDS + RND_SUBCATEGORY_EXOSUIT_BOARDS_ODYSSEUS @@ -35,7 +32,6 @@ /datum/design/board/odysseus_peri name = "\"Odysseus\" Peripherals Control module" desc = "Allows for the construction of a \"Odysseus\" Peripheral Control module." - id = "odysseus_peri" build_path = /obj/item/circuitboard/mecha/odysseus/peripherals category = list( RND_CATEGORY_EXOSUIT_BOARDS + RND_SUBCATEGORY_EXOSUIT_BOARDS_ODYSSEUS @@ -45,7 +41,6 @@ /datum/design/board/gygax_main name = "\"Gygax\" Central Control module" desc = "Allows for the construction of a \"Gygax\" Central Control module." - id = "gygax_main" build_path = /obj/item/circuitboard/mecha/gygax/main category = list( RND_CATEGORY_EXOSUIT_BOARDS + RND_SUBCATEGORY_EXOSUIT_BOARDS_GYGAX @@ -55,7 +50,6 @@ /datum/design/board/gygax_peri name = "\"Gygax\" Peripherals Control module" desc = "Allows for the construction of a \"Gygax\" Peripheral Control module." - id = "gygax_peri" build_path = /obj/item/circuitboard/mecha/gygax/peripherals category = list( RND_CATEGORY_EXOSUIT_BOARDS + RND_SUBCATEGORY_EXOSUIT_BOARDS_GYGAX @@ -65,7 +59,6 @@ /datum/design/board/gygax_targ name = "\"Gygax\" Weapons & Targeting Control module" desc = "Allows for the construction of a \"Gygax\" Weapons & Targeting Control module." - id = "gygax_targ" build_path = /obj/item/circuitboard/mecha/gygax/targeting category = list( RND_CATEGORY_EXOSUIT_BOARDS + RND_SUBCATEGORY_EXOSUIT_BOARDS_GYGAX @@ -75,7 +68,6 @@ /datum/design/board/durand_main name = "\"Durand\" Central Control module" desc = "Allows for the construction of a \"Durand\" Central Control module." - id = "durand_main" build_path = /obj/item/circuitboard/mecha/durand/main category = list( RND_CATEGORY_EXOSUIT_BOARDS + RND_SUBCATEGORY_EXOSUIT_BOARDS_DURAND @@ -85,7 +77,6 @@ /datum/design/board/durand_peri name = "\"Durand\" Peripherals Control module" desc = "Allows for the construction of a \"Durand\" Peripheral Control module." - id = "durand_peri" build_path = /obj/item/circuitboard/mecha/durand/peripherals category = list( RND_CATEGORY_EXOSUIT_BOARDS + RND_SUBCATEGORY_EXOSUIT_BOARDS_DURAND @@ -95,7 +86,6 @@ /datum/design/board/durand_targ name = "\"Durand\" Weapons & Targeting Control module" desc = "Allows for the construction of a \"Durand\" Weapons & Targeting Control module." - id = "durand_targ" build_path = /obj/item/circuitboard/mecha/durand/targeting category = list( RND_CATEGORY_EXOSUIT_BOARDS + RND_SUBCATEGORY_EXOSUIT_BOARDS_DURAND @@ -105,7 +95,6 @@ /datum/design/board/honker_main name = "\"H.O.N.K.\" Central Control module" desc = "Allows for the construction of a \"H.O.N.K.\" Central Control module." - id = "honker_main" build_path = /obj/item/circuitboard/mecha/honker/main category = list( RND_CATEGORY_EXOSUIT_BOARDS + RND_SUBCATEGORY_EXOSUIT_BOARDS_HONK @@ -115,7 +104,6 @@ /datum/design/board/honker_peri name = "\"H.O.N.K.\" Peripherals Control module" desc = "Allows for the construction of a \"H.O.N.K.\" Peripheral Control module." - id = "honker_peri" build_path = /obj/item/circuitboard/mecha/honker/peripherals category = list( RND_CATEGORY_EXOSUIT_BOARDS + RND_SUBCATEGORY_EXOSUIT_BOARDS_HONK @@ -125,7 +113,6 @@ /datum/design/board/honker_targ name = "\"H.O.N.K.\" Weapons & Targeting Control module" desc = "Allows for the construction of a \"H.O.N.K.\" Weapons & Targeting Control module." - id = "honker_targ" build_path = /obj/item/circuitboard/mecha/honker/targeting category = list( RND_CATEGORY_EXOSUIT_BOARDS + RND_SUBCATEGORY_EXOSUIT_BOARDS_HONK @@ -135,7 +122,6 @@ /datum/design/board/phazon_main name = "\"Phazon\" Central Control module" desc = "Allows for the construction of a \"Phazon\" Central Control module." - id = "phazon_main" materials = list(/datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/bluespace =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/circuitboard/mecha/phazon/main category = list( @@ -146,7 +132,6 @@ /datum/design/board/phazon_peri name = "\"Phazon\" Peripherals Control module" desc = "Allows for the construction of a \"Phazon\" Peripheral Control module." - id = "phazon_peri" materials = list(/datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/bluespace =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/circuitboard/mecha/phazon/peripherals category = list( @@ -157,7 +142,6 @@ /datum/design/board/phazon_targ name = "\"Phazon\" Weapons & Targeting Control module" desc = "Allows for the construction of a \"Phazon\" Weapons & Targeting Control module." - id = "phazon_targ" materials = list(/datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/bluespace =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/circuitboard/mecha/phazon/targeting category = list( @@ -168,7 +152,6 @@ /datum/design/board/clarke_main name = "\"Clarke\" Central Control module" desc = "Allows for the construction of a \"Clarke\" Central Control module." - id = "clarke_main" build_path = /obj/item/circuitboard/mecha/clarke/main category = list( RND_CATEGORY_EXOSUIT_BOARDS + RND_SUBCATEGORY_EXOSUIT_BOARDS_CLARKE @@ -178,7 +161,6 @@ /datum/design/board/clarke_peri name = "\"Clarke\" Peripherals Control module" desc = "Allows for the construction of a \"Clarke\" Peripheral Control module." - id = "clarke_peri" build_path = /obj/item/circuitboard/mecha/clarke/peripherals category = list( RND_CATEGORY_EXOSUIT_BOARDS + RND_SUBCATEGORY_EXOSUIT_BOARDS_CLARKE @@ -188,7 +170,6 @@ /datum/design/board/savannah_ivanov_main name = "\"Savannah-Ivanov\" Central Control module" desc = "Allows for the construction of a \"Savannah-Ivanov\" Central Control module." - id = "savannah_ivanov_main" build_path = /obj/item/circuitboard/mecha/savannah_ivanov/main category = list( RND_CATEGORY_EXOSUIT_BOARDS + RND_SUBCATEGORY_EXOSUIT_BOARDS_SAVANNAH_IVANOV @@ -198,7 +179,6 @@ /datum/design/board/savannah_ivanov_peri name = "\"Savannah-Ivanov\" Peripherals Control module" desc = "Allows for the construction of a \"Savannah-Ivanov\" Peripheral Control module." - id = "savannah_ivanov_peri" build_path = /obj/item/circuitboard/mecha/savannah_ivanov/peripherals category = list( RND_CATEGORY_EXOSUIT_BOARDS + RND_SUBCATEGORY_EXOSUIT_BOARDS_SAVANNAH_IVANOV @@ -208,7 +188,6 @@ /datum/design/board/savannah_ivanov_targ name = "\"Savannah-Ivanov\" Weapons & Targeting Control module" desc = "Allows for the construction of a \"Savannah-Ivanov\" Weapons & Targeting Control module." - id = "savannah_ivanov_targ" build_path = /obj/item/circuitboard/mecha/savannah_ivanov/targeting category = list( RND_CATEGORY_EXOSUIT_BOARDS + RND_SUBCATEGORY_EXOSUIT_BOARDS_SAVANNAH_IVANOV @@ -222,7 +201,6 @@ /datum/design/mech_scattershot name = "LBX AC 10 \"Scattershot\"" desc = "Allows for the construction of LBX AC 10." - id = "mech_scattershot" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) @@ -241,7 +219,6 @@ /datum/design/mech_scattershot_ammo name = "LBX AC 10 Ammunition" desc = "Ammunition for the LBX AC 10 exosuit weapon." - id = "mech_scattershot_ammo" build_type = MECHFAB build_path = /obj/item/mecha_ammo/scattershot materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*3) @@ -260,7 +237,6 @@ /datum/design/mech_carbine name = "FNX-99 \"Hades\" Carbine" desc = "Allows for the construction of FNX-99 \"Hades\" Carbine." - id = "mech_carbine" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) @@ -279,7 +255,6 @@ /datum/design/mech_carbine_ammo name = "FNX-99 Carbine Ammunition" desc = "Ammunition for the FNX-99 \"Hades\" Carbine." - id = "mech_carbine_ammo" build_type = MECHFAB build_path = /obj/item/mecha_ammo/incendiary materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*3) @@ -298,7 +273,6 @@ /datum/design/mech_ion name = "MKIV Ion Heavy Cannon" desc = "Allows for the construction of MKIV Ion Heavy Cannon." - id = "mech_ion" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/ion materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10,/datum/material/silver=SHEET_MATERIAL_AMOUNT*3,/datum/material/uranium=SHEET_MATERIAL_AMOUNT) @@ -317,7 +291,6 @@ /datum/design/mech_tesla name = "MKI Tesla Cannon" desc = "Allows for the construction of MKI Tesla Cannon." - id = "mech_tesla" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/tesla materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10,/datum/material/silver=SHEET_MATERIAL_AMOUNT*4) @@ -336,7 +309,6 @@ /datum/design/mech_laser name = "CH-PS \"Immolator\" Laser" desc = "Allows for the construction of CH-PS Laser." - id = "mech_laser" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) @@ -355,7 +327,6 @@ /datum/design/mech_laser_heavy name = "CH-LC \"Solaris\" Laser Cannon" desc = "Allows for the construction of CH-LC Laser Cannon." - id = "mech_laser_heavy" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) @@ -374,7 +345,6 @@ /datum/design/mech_disabler name = "CH-DS \"Peacemaker\" Disabler" desc = "Allows for the construction of CH-DS Disabler." - id = "mech_disabler" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/disabler materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) @@ -393,7 +363,6 @@ /datum/design/mech_grenade_launcher name = "SGL-6 Grenade Launcher" desc = "Allows for the construction of SGL-6 Grenade Launcher." - id = "mech_grenade_launcher" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*11,/datum/material/gold=SHEET_MATERIAL_AMOUNT*3,/datum/material/silver=SHEET_MATERIAL_AMOUNT*4) @@ -412,7 +381,6 @@ /datum/design/mech_grenade_launcher_ammo name = "SGL-6 Grenade Launcher Ammunition" desc = "Ammunition for the SGL-6 Grenade Launcher." - id = "mech_grenade_launcher_ammo" build_type = MECHFAB build_path = /obj/item/mecha_ammo/flashbang materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*2,/datum/material/gold=SMALL_MATERIAL_AMOUNT*5) @@ -431,7 +399,6 @@ /datum/design/mech_missile_rack name = "PEP-6 Missile Rack" desc = "Allows for the construction of an PEP-6 Breaching Missile Rack." - id = "mech_missile_rack" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/breaching materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*11,/datum/material/gold=SHEET_MATERIAL_AMOUNT*3,/datum/material/silver=SHEET_MATERIAL_AMOUNT*4) @@ -450,7 +417,6 @@ /datum/design/mech_missile_rack_ammo name = "PEP-6 Missile Rack Ammunition" desc = "Ammunition for the PEP-6 Missile Rack." - id = "mech_missile_rack_ammo" build_type = MECHFAB build_path = /obj/item/mecha_ammo/missiles_pep materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*4,/datum/material/gold=SMALL_MATERIAL_AMOUNT*5) @@ -469,7 +435,6 @@ /datum/design/clusterbang_launcher name = "SOB-3 Clusterbang Launcher" desc = "A weapon that violates the Geneva Convention at 3 rounds per minute." - id = "clusterbang_launcher" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/clusterbang materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10,/datum/material/gold=SHEET_MATERIAL_AMOUNT*5,/datum/material/uranium=SHEET_MATERIAL_AMOUNT*5) @@ -488,7 +453,6 @@ /datum/design/clusterbang_launcher_ammo name = "SOB-3 Clusterbang Launcher Ammunition" desc = "Ammunition for the SOB-3 Clusterbang Launcher" - id = "clusterbang_launcher_ammo" build_type = MECHFAB build_path = /obj/item/mecha_ammo/clusterbang materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*3,/datum/material/gold=HALF_SHEET_MATERIAL_AMOUNT * 1.5,/datum/material/uranium=HALF_SHEET_MATERIAL_AMOUNT * 1.5) @@ -507,7 +471,6 @@ /datum/design/mech_wormhole_gen name = "Localized Wormhole Generator" desc = "An exosuit module that allows generating of small quasi-stable wormholes." - id = "mech_wormhole_gen" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/wormhole_generator materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) @@ -529,7 +492,6 @@ /datum/design/mech_teleporter name = "Teleporter Module" desc = "An exosuit module that allows exosuits to teleport to any position in view." - id = "mech_teleporter" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/teleporter materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5,/datum/material/diamond=SHEET_MATERIAL_AMOUNT*5) @@ -551,7 +513,6 @@ /datum/design/mech_rcd name = "RCD Module" desc = "An exosuit-mounted Rapid Construction Device." - id = "mech_rcd" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/rcd materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*15,/datum/material/gold=SHEET_MATERIAL_AMOUNT*10,/datum/material/plasma=SHEET_MATERIAL_AMOUNT*12.5,/datum/material/silver=SHEET_MATERIAL_AMOUNT*10) @@ -573,7 +534,6 @@ /datum/design/mech_thrusters name = "RCS Thruster Package" desc = "A thruster package for exosuits. Expels gas from the internal life-support air tank to generate thrust." - id = "mech_thrusters" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/thrusters/gas materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*12.5,/datum/material/titanium=SHEET_MATERIAL_AMOUNT * 2.5,/datum/material/silver=SHEET_MATERIAL_AMOUNT*1.5) @@ -594,7 +554,6 @@ /datum/design/mech_gravcatapult name = "Gravitational Catapult Module" desc = "An exosuit mounted Gravitational Catapult." - id = "mech_gravcatapult" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/gravcatapult materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) @@ -616,7 +575,6 @@ /datum/design/mech_repair_droid name = "Repair Droid Module" desc = "Automated Repair Droid. BEEP BOOP" - id = "mech_repair_droid" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/repair_droid materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5,/datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5,/datum/material/gold=HALF_SHEET_MATERIAL_AMOUNT,/datum/material/silver=SHEET_MATERIAL_AMOUNT) @@ -638,7 +596,6 @@ /datum/design/mech_ccw_armor name = "Exosuit Impact Cushion Plates" desc = "Exosuit-mounted melee armor booster." - id = "mech_ccw_armor" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/armor/anticcw_armor_booster materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10,/datum/material/silver=SHEET_MATERIAL_AMOUNT * 2.5) @@ -660,7 +617,6 @@ /datum/design/mech_proj_armor name = "Exosuit Projectile Shielding" desc = "Exosuit-mounted ranged armor booster." - id = "mech_proj_armor" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/armor/antiproj_armor_booster materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10,/datum/material/gold=SHEET_MATERIAL_AMOUNT * 2.5) @@ -682,7 +638,6 @@ /datum/design/mech_emp_armor name = "Exosuit Ablative Insulation" desc = "Exosuit-mounted energy and EMP armor booster. WARNING: This retrofit compromises exosuit hull plating stress points." - id = "mech_emp_armor" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/armor/antiemp_armor_booster materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10,/datum/material/gold=SHEET_MATERIAL_AMOUNT * 2.5) @@ -704,7 +659,6 @@ /datum/design/mech_diamond_drill name = "Diamond Mining Drill" desc = "An upgraded version of the standard drill." - id = "mech_diamond_drill" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/drill/diamonddrill materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5,/datum/material/diamond=SHEET_MATERIAL_AMOUNT*3.25) @@ -719,7 +673,6 @@ /datum/design/mech_plasma_cutter name = "217-D Heavy Plasma Cutter" desc = "A device that shoots resonant plasma bursts at extreme velocity. The blasts are capable of crushing rock and demolishing solid obstacles." - id = "mech_plasma_cutter" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*4, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plasma =SHEET_MATERIAL_AMOUNT) @@ -740,7 +693,6 @@ /datum/design/mecha_kineticgun name = "Exosuit Proto-Kinetic Accelerator" desc = "An exosuit-mounted mining tool that does increased damage in low pressure. Drawing from an onboard power source allows it to project further than the handheld version." - id = "mecha_kineticgun" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/mecha_kineticgun materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*4, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) @@ -761,7 +713,6 @@ /datum/design/mech_lmg name = "Ultra AC 2 LMG" desc = "A weapon for combat exosuits. Shoots a rapid, three shot burst." - id = "mech_lmg" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) @@ -779,7 +730,6 @@ /datum/design/mech_lmg_ammo name = "Ultra AC 2 Ammunition" desc = "Ammunition for the Ultra AC 2 LMG" - id = "mech_lmg_ammo" build_type = MECHFAB build_path = /obj/item/mecha_ammo/lmg materials = list(/datum/material/iron= SHEET_MATERIAL_AMOUNT *2) @@ -797,7 +747,6 @@ /datum/design/mech_sleeper name = "Mounted Sleeper" desc = "Equipment for medical exosuits. A mounted sleeper that stabilizes patients and can inject reagents in the exosuit's reserves." - id = "mech_sleeper" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/sleeper/medical materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass = SHEET_MATERIAL_AMOUNT*5) @@ -811,7 +760,6 @@ /datum/design/mech_syringe_gun name = "Exosuit Medical (Syringe Gun)" desc = "Equipment for medical exosuits. A chem synthesizer with syringe gun. Reagents inside are held in stasis, so no reactions will occur." - id = "mech_syringe_gun" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*1.5, /datum/material/glass =SHEET_MATERIAL_AMOUNT) @@ -825,7 +773,6 @@ /datum/design/mech_medical_beamgun name = "Exosuit Medical (Medical Beamgun)" desc = "Equipment for medical exosuits. A mounted medical nanite projector which will treat patients with a focused beam." - id = "mech_medi_beam" build_type = MECHFAB materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*7.5, /datum/material/glass = SHEET_MATERIAL_AMOUNT*4, /datum/material/plasma =SHEET_MATERIAL_AMOUNT*1.5, /datum/material/gold = SHEET_MATERIAL_AMOUNT*4, /datum/material/diamond =SHEET_MATERIAL_AMOUNT) construction_time = 25 SECONDS diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index c619728f2c00..84cbb2f7eacf 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -1,7 +1,6 @@ //Cyborg /datum/design/borg_suit name = "Cyborg Endoskeleton" - id = "borg_suit" build_type = MECHFAB build_path = /obj/item/robot_suit materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5) @@ -12,7 +11,6 @@ /datum/design/borg_chest name = "Cyborg Torso" - id = "borg_chest" build_type = MECHFAB build_path = /obj/item/bodypart/chest/robot materials = list(/datum/material/iron= SHEET_MATERIAL_AMOUNT*20) @@ -23,7 +21,6 @@ /datum/design/borg_head name = "Cyborg Head" - id = "borg_head" build_type = MECHFAB build_path = /obj/item/bodypart/head/robot materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT * 2.5) @@ -34,7 +31,6 @@ /datum/design/borg_l_arm name = "Cyborg Left Arm" - id = "borg_l_arm" build_type = MECHFAB build_path = /obj/item/bodypart/arm/left/robot materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) @@ -45,7 +41,6 @@ /datum/design/borg_r_arm name = "Cyborg Right Arm" - id = "borg_r_arm" build_type = MECHFAB build_path = /obj/item/bodypart/arm/right/robot materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) @@ -56,7 +51,6 @@ /datum/design/borg_l_leg name = "Cyborg Left Leg" - id = "borg_l_leg" build_type = MECHFAB build_path = /obj/item/bodypart/leg/left/robot materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) @@ -67,7 +61,6 @@ /datum/design/borg_r_leg name = "Cyborg Right Leg" - id = "borg_r_leg" build_type = MECHFAB build_path = /obj/item/bodypart/leg/right/robot materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) @@ -80,7 +73,6 @@ /datum/design/advanced_l_arm name = "Advanced Left Arm" - id = "advanced_l_arm" build_type = MECHFAB build_path = /obj/item/bodypart/arm/left/robot/advanced materials = list( @@ -95,7 +87,6 @@ /datum/design/advanced_r_arm name = "Advanced Right Arm" - id = "advanced_r_arm" build_type = MECHFAB build_path = /obj/item/bodypart/arm/right/robot/advanced materials = list( @@ -110,7 +101,6 @@ /datum/design/advanced_l_leg name = "Advanced Left Leg" - id = "advanced_l_leg" build_type = MECHFAB build_path = /obj/item/bodypart/leg/left/robot/advanced materials = list( @@ -125,7 +115,6 @@ /datum/design/advanced_r_leg name = "Advanced Right Leg" - id = "advanced_r_leg" build_type = MECHFAB build_path = /obj/item/bodypart/leg/right/robot/advanced materials = list( @@ -141,7 +130,6 @@ //Ripley /datum/design/ripley_chassis name = "Exosuit Chassis (APLU \"Ripley\")" - id = "ripley_chassis" build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/ripley materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10) @@ -152,7 +140,6 @@ /datum/design/ripley_torso name = "Exosuit Torso (APLU \"Ripley\")" - id = "ripley_torso" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/ripley_torso materials = list( @@ -166,7 +153,6 @@ /datum/design/ripley_left_arm name = "Exosuit Left Arm (APLU \"Ripley\")" - id = "ripley_left_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/ripley_left_arm materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5) @@ -177,7 +163,6 @@ /datum/design/ripley_right_arm name = "Exosuit Right Arm (APLU \"Ripley\")" - id = "ripley_right_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/ripley_right_arm materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5) @@ -188,7 +173,6 @@ /datum/design/ripley_left_leg name = "Exosuit Left Leg (APLU \"Ripley\")" - id = "ripley_left_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/ripley_left_leg materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5) @@ -199,7 +183,6 @@ /datum/design/ripley_right_leg name = "Exosuit Right Leg (APLU \"Ripley\")" - id = "ripley_right_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/ripley_right_leg materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5) @@ -211,7 +194,6 @@ //Odysseus /datum/design/odysseus_chassis name = "Exosuit Chassis (\"Odysseus\")" - id = "odysseus_chassis" build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/odysseus materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10) @@ -222,7 +204,6 @@ /datum/design/odysseus_torso name = "Exosuit Torso (\"Odysseus\")" - id = "odysseus_torso" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/odysseus_torso materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*6) @@ -233,7 +214,6 @@ /datum/design/odysseus_head name = "Exosuit Head (\"Odysseus\")" - id = "odysseus_head" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/odysseus_head materials = list( @@ -247,7 +227,6 @@ /datum/design/odysseus_left_arm name = "Exosuit Left Arm (\"Odysseus\")" - id = "odysseus_left_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/odysseus_left_arm materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*3) @@ -258,7 +237,6 @@ /datum/design/odysseus_right_arm name = "Exosuit Right Arm (\"Odysseus\")" - id = "odysseus_right_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/odysseus_right_arm materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*3) @@ -269,7 +247,6 @@ /datum/design/odysseus_left_leg name = "Exosuit Left Leg (\"Odysseus\")" - id = "odysseus_left_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/odysseus_left_leg materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*3.5) @@ -280,7 +257,6 @@ /datum/design/odysseus_right_leg name = "Exosuit Right Leg (\"Odysseus\")" - id = "odysseus_right_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/odysseus_right_leg materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*3.5) @@ -292,7 +268,6 @@ //Gygax /datum/design/gygax_chassis name = "Exosuit Chassis (\"Gygax\")" - id = "gygax_chassis" build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/gygax materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10) @@ -303,7 +278,6 @@ /datum/design/gygax_torso name = "Exosuit Torso (\"Gygax\")" - id = "gygax_torso" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_torso materials = list( @@ -319,7 +293,6 @@ /datum/design/gygax_head name = "Exosuit Head (\"Gygax\")" - id = "gygax_head" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_head materials = list( @@ -335,7 +308,6 @@ /datum/design/gygax_left_arm name = "Exosuit Left Arm (\"Gygax\")" - id = "gygax_left_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_left_arm materials = list( @@ -350,7 +322,6 @@ /datum/design/gygax_right_arm name = "Exosuit Right Arm (\"Gygax\")" - id = "gygax_right_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_right_arm materials = list( @@ -365,7 +336,6 @@ /datum/design/gygax_left_leg name = "Exosuit Left Leg (\"Gygax\")" - id = "gygax_left_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_left_leg materials = list( @@ -380,7 +350,6 @@ /datum/design/gygax_right_leg name = "Exosuit Right Leg (\"Gygax\")" - id = "gygax_right_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_right_leg materials = list( @@ -395,7 +364,6 @@ /datum/design/gygax_armor name = "Exosuit Armor (\"Gygax\")" - id = "gygax_armor" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_armor materials = list( @@ -412,7 +380,6 @@ //Durand /datum/design/durand_chassis name = "Exosuit Chassis (\"Durand\")" - id = "durand_chassis" build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/durand materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*12.5) @@ -423,7 +390,6 @@ /datum/design/durand_torso name = "Exosuit Torso (\"Durand\")" - id = "durand_torso" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_torso materials = list( @@ -438,7 +404,6 @@ /datum/design/durand_head name = "Exosuit Head (\"Durand\")" - id = "durand_head" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_head materials = list( @@ -453,7 +418,6 @@ /datum/design/durand_left_arm name = "Exosuit Left Arm (\"Durand\")" - id = "durand_left_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_left_arm materials = list( @@ -467,7 +431,6 @@ /datum/design/durand_right_arm name = "Exosuit Right Arm (\"Durand\")" - id = "durand_right_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_right_arm materials = list( @@ -481,7 +444,6 @@ /datum/design/durand_left_leg name = "Exosuit Left Leg (\"Durand\")" - id = "durand_left_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_left_leg materials = list( @@ -495,7 +457,6 @@ /datum/design/durand_right_leg name = "Exosuit Right Leg (\"Durand\")" - id = "durand_right_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_right_leg materials = list( @@ -509,7 +470,6 @@ /datum/design/durand_armor name = "Exosuit Armor (\"Durand\")" - id = "durand_armor" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_armor materials = list( @@ -525,7 +485,6 @@ //H.O.N.K /datum/design/honk_chassis name = "Exosuit Chassis (\"H.O.N.K\")" - id = "honk_chassis" build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/honker materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10) @@ -536,7 +495,6 @@ /datum/design/honk_torso name = "Exosuit Torso (\"H.O.N.K\")" - id = "honk_torso" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/honker_torso materials = list( @@ -551,7 +509,6 @@ /datum/design/honk_head name = "Exosuit Head (\"H.O.N.K\")" - id = "honk_head" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/honker_head materials = list( @@ -566,7 +523,6 @@ /datum/design/honk_left_arm name = "Exosuit Left Arm (\"H.O.N.K\")" - id = "honk_left_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/honker_left_arm materials = list( @@ -580,7 +536,6 @@ /datum/design/honk_right_arm name = "Exosuit Right Arm (\"H.O.N.K\")" - id = "honk_right_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/honker_right_arm materials = list( @@ -594,7 +549,6 @@ /datum/design/honk_left_leg name = "Exosuit Left Leg (\"H.O.N.K\")" - id = "honk_left_leg" build_type = MECHFAB build_path =/obj/item/mecha_parts/part/honker_left_leg materials = list( @@ -608,7 +562,6 @@ /datum/design/honk_right_leg name = "Exosuit Right Leg (\"H.O.N.K\")" - id = "honk_right_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/honker_right_leg materials = list( @@ -623,7 +576,6 @@ //Phazon /datum/design/phazon_chassis name = "Exosuit Chassis (\"Phazon\")" - id = "phazon_chassis" build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/phazon materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10) @@ -634,7 +586,6 @@ /datum/design/phazon_torso name = "Exosuit Torso (\"Phazon\")" - id = "phazon_torso" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_torso materials = list( @@ -649,7 +600,6 @@ /datum/design/phazon_head name = "Exosuit Head (\"Phazon\")" - id = "phazon_head" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_head materials = list( @@ -664,7 +614,6 @@ /datum/design/phazon_left_arm name = "Exosuit Left Arm (\"Phazon\")" - id = "phazon_left_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_left_arm materials = list( @@ -678,7 +627,6 @@ /datum/design/phazon_right_arm name = "Exosuit Right Arm (\"Phazon\")" - id = "phazon_right_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_right_arm materials = list( @@ -692,7 +640,6 @@ /datum/design/phazon_left_leg name = "Exosuit Left Leg (\"Phazon\")" - id = "phazon_left_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_left_leg materials = list( @@ -706,7 +653,6 @@ /datum/design/phazon_right_leg name = "Exosuit Right Leg (\"Phazon\")" - id = "phazon_right_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_right_leg materials = list( @@ -720,7 +666,6 @@ /datum/design/phazon_armor name = "Exosuit Armor (\"Phazon\")" - id = "phazon_armor" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_armor materials = list( @@ -736,7 +681,6 @@ //Savannah-Ivanov /datum/design/savannah_ivanov_chassis name = "Exosuit Chassis (\"Savannah-Ivanov\")" - id = "savannah_ivanov_chassis" build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/savannah_ivanov materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10) @@ -747,7 +691,6 @@ /datum/design/savannah_ivanov_torso name = "Exosuit Torso (\"Savannah-Ivanov\")" - id = "savannah_ivanov_torso" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/savannah_ivanov_torso materials = list( @@ -761,7 +704,6 @@ /datum/design/savannah_ivanov_head name = "Exosuit Head (\"Savannah-Ivanov\")" - id = "savannah_ivanov_head" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/savannah_ivanov_head materials = list( @@ -775,7 +717,6 @@ /datum/design/savannah_ivanov_left_arm name = "Exosuit Left Arm (\"Savannah-Ivanov\")" - id = "savannah_ivanov_left_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/savannah_ivanov_left_arm materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5) @@ -786,7 +727,6 @@ /datum/design/savannah_ivanov_right_arm name = "Exosuit Right Arm (\"Savannah-Ivanov\")" - id = "savannah_ivanov_right_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/savannah_ivanov_right_arm materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5) @@ -797,7 +737,6 @@ /datum/design/savannah_ivanov_chassis name = "Exosuit Chassis (\"Savannah-Ivanov\")" - id = "savannah_ivanov_chassis" build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/savannah_ivanov materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*12.5) @@ -808,7 +747,6 @@ /datum/design/savannah_ivanov_torso name = "Exosuit Torso (\"Savannah-Ivanov\")" - id = "savannah_ivanov_torso" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/savannah_ivanov_torso materials = list( @@ -823,7 +761,6 @@ /datum/design/savannah_ivanov_head name = "Exosuit Head (\"Savannah-Ivanov\")" - id = "savannah_ivanov_head" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/savannah_ivanov_head materials = list( @@ -838,7 +775,6 @@ /datum/design/savannah_ivanov_left_arm name = "Exosuit Left Arm (\"Savannah-Ivanov\")" - id = "savannah_ivanov_left_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/savannah_ivanov_left_arm materials = list( @@ -852,7 +788,6 @@ /datum/design/savannah_ivanov_right_arm name = "Exosuit Right Arm (\"Savannah-Ivanov\")" - id = "savannah_ivanov_right_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/savannah_ivanov_right_arm materials = list( @@ -866,7 +801,6 @@ /datum/design/savannah_ivanov_left_leg name = "Exosuit Left Leg (\"Savannah-Ivanov\")" - id = "savannah_ivanov_left_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/savannah_ivanov_left_leg materials = list( @@ -880,7 +814,6 @@ /datum/design/savannah_ivanov_right_leg name = "Exosuit Right Leg (\"Savannah-Ivanov\")" - id = "savannah_ivanov_right_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/savannah_ivanov_right_leg materials = list( @@ -894,7 +827,6 @@ /datum/design/savannah_ivanov_armor name = "Exosuit Armor (\"Savannah-Ivanov\")" - id = "savannah_ivanov_armor" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/savannah_ivanov_armor materials = list( @@ -910,7 +842,6 @@ //Clarke /datum/design/clarke_chassis name = "Exosuit Chassis (\"Clarke\")" - id = "clarke_chassis" build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/clarke materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10) @@ -921,7 +852,6 @@ /datum/design/clarke_torso name = "Exosuit Torso (\"Clarke\")" - id = "clarke_torso" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/clarke_torso materials = list( @@ -935,7 +865,6 @@ /datum/design/clarke_head name = "Exosuit Head (\"Clarke\")" - id = "clarke_head" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/clarke_head materials = list( @@ -949,7 +878,6 @@ /datum/design/clarke_left_arm name = "Exosuit Left Arm (\"Clarke\")" - id = "clarke_left_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/clarke_left_arm materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5) @@ -960,7 +888,6 @@ /datum/design/clarke_right_arm name = "Exosuit Right Arm (\"Clarke\")" - id = "clarke_right_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/clarke_right_arm materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5) @@ -972,7 +899,6 @@ //Exosuit Equipment /datum/design/ripleyupgrade name = "Ripley MK-I to MK-II Conversion Kit" - id = "ripleyupgrade" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/ripleyupgrade materials = list( @@ -987,7 +913,6 @@ /datum/design/paddyupgrade name = "Ripley MK-I to Paddy Conversion Kit" - id = "paddyupgrade" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/ripleyupgrade/paddy materials = list( @@ -1003,7 +928,6 @@ /datum/design/mech_hydraulic_clamp name = "Hydraulic Clamp" - id = "mech_hydraulic_clamp" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) @@ -1015,7 +939,6 @@ /datum/design/mech_hydraulic_claw name = "Hydraulic Claw" - id = "mech_hydraulic_claw" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/paddy_claw materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) @@ -1027,7 +950,6 @@ /datum/design/mech_drill name = "Mining Drill" - id = "mech_drill" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/drill materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) @@ -1046,7 +968,6 @@ /datum/design/mech_mining_scanner name = "Mining Scanner" - id = "mech_mscanner" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/mining_scanner materials = list( @@ -1062,7 +983,6 @@ /datum/design/mech_extinguisher name = "Extinguisher" - id = "mech_extinguisher" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/extinguisher materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) @@ -1075,7 +995,6 @@ /datum/design/mech_generator name = "Plasma Generator" - id = "mech_generator" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/generator/printed materials = list( @@ -1099,7 +1018,6 @@ /datum/design/mech_mousetrap_mortar name = "Mousetrap Mortar" - id = "mech_mousetrap_mortar" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar materials = list( @@ -1115,7 +1033,6 @@ /datum/design/mech_banana_mortar name = "Banana Mortar" - id = "mech_banana_mortar" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar materials = list( @@ -1131,7 +1048,6 @@ /datum/design/mech_honker name = "HoNkER BlAsT 5000" - id = "mech_honker" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/honker materials = list( @@ -1147,7 +1063,6 @@ /datum/design/mech_punching_glove name = "Oingo Boingo Punch-face" - id = "mech_punching_face" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove materials = list( @@ -1163,7 +1078,6 @@ /datum/design/mech_radio name = "Mech Radio" - id = "mech_radio" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/radio materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*2.5) @@ -1182,7 +1096,6 @@ /datum/design/mech_air_tank name = "Mech Air Tank" - id = "mech_air_tank" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/air_tank materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) @@ -1205,7 +1118,6 @@ /datum/design/borg_upgrade_rename name = "Rename Board" - id = "borg_upgrade_rename" build_type = MECHFAB build_path = /obj/item/borg/upgrade/rename materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5) @@ -1216,7 +1128,6 @@ /datum/design/borg_upgrade_restart name = "Emergency Reboot Board" - id = "borg_upgrade_restart" build_type = MECHFAB build_path = /obj/item/borg_restart_board materials = list( @@ -1230,7 +1141,6 @@ /datum/design/borg_upgrade_thrusters name = "Ion Thrusters" - id = "borg_upgrade_thrusters" build_type = MECHFAB build_path = /obj/item/borg/upgrade/thrusters materials = list( @@ -1246,7 +1156,6 @@ /datum/design/borg_upgrade_disablercooler name = "Rapid Disabler Cooling Module" - id = "borg_upgrade_disablercooler" build_type = MECHFAB build_path = /obj/item/borg/upgrade/disablercooler materials = list( @@ -1262,7 +1171,6 @@ /datum/design/borg_upgrade_diamonddrill name = "Diamond Drill" - id = "borg_upgrade_diamonddrill" build_type = MECHFAB build_path = /obj/item/borg/upgrade/diamond_drill materials = list( @@ -1277,7 +1185,6 @@ /datum/design/borg_upgrade_holding name = "Ore Satchel of Holding" - id = "borg_upgrade_holding" build_type = MECHFAB build_path = /obj/item/borg/upgrade/soh materials = list( @@ -1292,7 +1199,6 @@ /datum/design/borg_upgrade_lavaproof name = "Lavaproof Tracks" - id = "borg_upgrade_lavaproof" build_type = MECHFAB build_path = /obj/item/borg/upgrade/lavaproof materials = list( @@ -1307,7 +1213,6 @@ /datum/design/borg_syndicate_module name = "Illegal Modules" - id = "borg_syndicate_module" build_type = MECHFAB build_path = /obj/item/borg/upgrade/syndicate materials = list( @@ -1322,7 +1227,6 @@ /datum/design/borg_transform_clown name = "Clown Module" - id = "borg_transform_clown" build_type = MECHFAB build_path = /obj/item/borg/upgrade/transform/clown materials = list( @@ -1337,7 +1241,6 @@ /datum/design/borg_upgrade_selfrepair name = "Self-Repair Module" - id = "borg_upgrade_selfrepair" build_type = MECHFAB build_path = /obj/item/borg/upgrade/selfrepair materials = list( @@ -1351,7 +1254,6 @@ /datum/design/borg_upgrade_expandedsynthesiser name = "Expanded Hypospray Synthesiser" - id = "borg_upgrade_expandedsynthesiser" build_type = MECHFAB build_path = /obj/item/borg/upgrade/hypospray/expanded materials = list( @@ -1367,7 +1269,6 @@ /datum/design/borg_upgrade_piercinghypospray name = "Piercing Hypospray" - id = "borg_upgrade_piercinghypospray" build_type = MECHFAB build_path = /obj/item/borg/upgrade/piercing_hypospray materials = list( @@ -1383,7 +1284,6 @@ /datum/design/borg_upgrade_defibrillator name = "Defibrillator" - id = "borg_upgrade_defibrillator" build_type = MECHFAB build_path = /obj/item/borg/upgrade/defib materials = list( @@ -1399,7 +1299,6 @@ /datum/design/borg_upgrade_surgicalprocessor name = "Surgical Processor" - id = "borg_upgrade_surgicalprocessor" build_type = MECHFAB build_path = /obj/item/borg/upgrade/processor materials = list( @@ -1414,7 +1313,6 @@ /datum/design/borg_upgrade_surgicalomnitool name = "Advanced Surgical Omnitool Upgrade" - id = "borg_upgrade_surgicalomnitool" build_type = MECHFAB build_path = /obj/item/borg/upgrade/surgery_omnitool materials = list( @@ -1429,7 +1327,6 @@ /datum/design/borg_upgrade_engineeringomnitool name = "Advanced Engineering Omnitool Upgrade" - id = "borg_upgrade_engineeringomnitool" build_type = MECHFAB build_path = /obj/item/borg/upgrade/engineering_omnitool materials = list( @@ -1444,7 +1341,6 @@ /datum/design/borg_upgrade_trashofholding name = "Trash Bag of Holding" - id = "borg_upgrade_trashofholding" build_type = MECHFAB build_path = /obj/item/borg/upgrade/tboh materials = list( @@ -1458,7 +1354,6 @@ /datum/design/borg_upgrade_advancedmop name = "Advanced Mop" - id = "borg_upgrade_advancedmop" build_type = MECHFAB build_path = /obj/item/borg/upgrade/amop materials = list( @@ -1472,7 +1367,6 @@ /datum/design/borg_upgrade_prt name = "Plating Repair Tool" - id = "borg_upgrade_prt" build_type = MECHFAB build_path = /obj/item/borg/upgrade/prt materials = list( @@ -1486,7 +1380,6 @@ /datum/design/borg_upgrade_plunger name = "Integrated Plunger" - id = "borg_upgrade_plunger" build_type = MECHFAB build_path = /obj/item/borg/upgrade/plunger materials = list( @@ -1500,7 +1393,6 @@ /datum/design/borg_upgrade_high_capacity_replacer name = "High Capacity Light Replacer" - id = "borg_upgrade_high_capacity_replacer" build_type = MECHFAB build_path = /obj/item/borg/upgrade/high_capacity_light_replacer materials = list( @@ -1514,7 +1406,6 @@ /datum/design/borg_upgrade_rolling_table name = "Rolling Table Dock" - id = "borg_upgrade_rolling_table" build_type = MECHFAB build_path = /obj/item/borg/upgrade/rolling_table materials = list( @@ -1528,7 +1419,6 @@ /datum/design/borg_upgrade_condiment_synthesizer name = "Condiment Synthesizer" - id = "borg_upgrade_condiment_synthesizer" build_type = MECHFAB build_path = /obj/item/borg/upgrade/condiment_synthesizer materials = list( @@ -1544,7 +1434,6 @@ /datum/design/borg_upgrade_silicon_knife name = "Kitchen Toolset" - id = "borg_upgrade_silicon_knife" build_type = MECHFAB build_path = /obj/item/borg/upgrade/silicon_knife materials = list( @@ -1559,7 +1448,6 @@ /datum/design/borg_upgrade_botany name = "Botany Tools" - id = "borg_upgrade_botany" build_type = MECHFAB build_path = /obj/item/borg/upgrade/botany_upgrade materials = list( @@ -1574,7 +1462,6 @@ /datum/design/borg_upgrade_drink_apparatus name = "Drink Apparatus" - id = "borg_upgrade_drink_apparatus" build_type = MECHFAB build_path = /obj/item/borg/upgrade/drink_app materials = list( @@ -1588,7 +1475,6 @@ /datum/design/borg_upgrade_service_apparatus name = "Service Apparatus" - id = "borg_upgrade_service_apparatus" build_type = MECHFAB build_path = /obj/item/borg/upgrade/service_apparatus materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*2.5) @@ -1599,7 +1485,6 @@ /datum/design/borg_upgrade_service_cookbook name = "Service Cookbook" - id = "borg_upgrade_service_cookbook" build_type = MECHFAB build_path = /obj/item/borg/upgrade/service_cookbook materials = list( @@ -1613,7 +1498,6 @@ /datum/design/borg_upgrade_shuttle_blueprints name = "Engineering Shuttle Blueprints" - id = "borg_upgrade_engineering_shuttle_blueprints" build_type = MECHFAB build_path = /obj/item/borg/upgrade/shuttle_blueprints materials = list( @@ -1627,7 +1511,6 @@ /datum/design/borg_upgrade_expand name = "Expand Module" - id = "borg_upgrade_expand" build_type = MECHFAB build_path = /obj/item/borg/upgrade/expand materials = list( @@ -1641,7 +1524,6 @@ /datum/design/boris_ai_controller name = "B.O.R.I.S. AI-Cyborg Remote Control" - id = "borg_ai_control" build_type = MECHFAB build_path = /obj/item/borg/upgrade/ai materials = list( @@ -1653,11 +1535,9 @@ category = list( RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CONTROL_INTERFACES ) - search_metadata = "boris" /datum/design/borg_upgrade_rped name = "Rapid Part Exchange Device Expanded" - id = "borg_upgrade_rped" build_type = MECHFAB build_path = /obj/item/borg/upgrade/rped materials = list( @@ -1672,7 +1552,6 @@ /datum/design/borg_upgrade_inducer name = "Cyborg inducer" - id = "borg_upgrade_inducer" build_type = MECHFAB build_path = /obj/item/borg/upgrade/inducer materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/silver = SHEET_MATERIAL_AMOUNT * 2) @@ -1683,7 +1562,6 @@ /datum/design/borg_upgrade_engineering_app name = "Engineering Apparatus" - id = "borg_upgrade_engineeringapp" build_type = MECHFAB build_path = /obj/item/borg/upgrade/engineering_app materials = list( @@ -1697,7 +1575,6 @@ /datum/design/borg_upgrade_beaker_app name = "Secondary Beaker Storage" - id = "borg_upgrade_beakerapp" build_type = MECHFAB build_path = /obj/item/borg/upgrade/beaker_app materials = list( @@ -1711,7 +1588,6 @@ /datum/design/borg_upgrade_pinpointer name = "Crew Pinpointer" - id = "borg_upgrade_pinpointer" build_type = MECHFAB build_path = /obj/item/borg/upgrade/pinpointer materials = list( @@ -1725,7 +1601,6 @@ /datum/design/borg_upgrade_syringe name = "Advanced Syringe" - id = "borg_upgrade_syringe" build_type = MECHFAB build_path = /obj/item/borg/upgrade/bs_syringe materials = list( @@ -1741,7 +1616,6 @@ /datum/design/borg_upgrade_broomer name = "Experimental Push Broom" - id = "borg_upgrade_broomer" build_type = MECHFAB build_path = /obj/item/borg/upgrade/broomer materials = list( @@ -1756,7 +1630,6 @@ /datum/design/mmi name = "Man-Machine Interface" desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity." - id = "mmi" build_type = MECHFAB materials = list( /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, @@ -1771,7 +1644,6 @@ /datum/design/mmi/medical build_type = PROTOLATHE | AWAY_LATHE - id = "mmi_m" category = list( RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL ) @@ -1780,7 +1652,6 @@ /datum/design/posibrain name = "Positronic Brain" desc = "The latest in Artificial Intelligences." - id = "mmi_posi" build_type = MECHFAB materials = list( /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT*1.7, @@ -1797,7 +1668,6 @@ //Misc /datum/design/mecha_tracking name = "Exosuit Tracking Beacon" - id = "mecha_tracking" build_type = MECHFAB build_path =/obj/item/mecha_parts/mecha_tracking materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*5) @@ -1816,7 +1686,6 @@ /datum/design/mecha_tracking_ai_control name = "AI Control Beacon" - id = "mecha_tracking_ai_control" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_tracking/ai_control materials = list( @@ -1827,7 +1696,6 @@ construction_time = 5 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_CONTROL_INTERFACES, - RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_CONTROL_INTERFACES, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_CONTROL_INTERFACES, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_CONTROL_INTERFACES, RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_CONTROL_INTERFACES, @@ -1840,7 +1708,6 @@ /datum/design/mecha_camera name = "Exosuit External Camera Kit" desc = "A durable CCTV camera designed for exosuit operations." - id = "mecha_camera" build_type = MECHFAB build_path = /obj/item/mecha_parts/camera_kit materials = list( @@ -1865,7 +1732,6 @@ /datum/design/synthetic_flash name = "Flash" desc = "When a problem arises, SCIENCE is the solution." - id = "sflash" build_type = MECHFAB materials = list( /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7.5, @@ -1886,7 +1752,6 @@ /datum/design/mod_shell name = "MOD Shell" desc = "A 'Nakamura Engineering' designed shell for a Modular Suit." - id = "mod_shell" build_type = MECHFAB materials = list( /datum/material/iron =SHEET_MATERIAL_AMOUNT*5, @@ -1901,7 +1766,6 @@ /datum/design/mod_helmet name = "MOD Helmet" desc = "A 'Nakamura Engineering' designed helmet for a Modular Suit." - id = "mod_helmet" build_type = MECHFAB materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5) construction_time = 10 SECONDS @@ -1913,7 +1777,6 @@ /datum/design/mod_chestplate name = "MOD Chestplate" desc = "A 'Nakamura Engineering' designed chestplate for a Modular Suit." - id = "mod_chestplate" build_type = MECHFAB materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5) construction_time = 10 SECONDS @@ -1925,7 +1788,6 @@ /datum/design/mod_gauntlets name = "MOD Gauntlets" desc = "'Nakamura Engineering' designed gauntlets for a Modular Suit." - id = "mod_gauntlets" build_type = MECHFAB materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5) construction_time = 10 SECONDS @@ -1937,7 +1799,6 @@ /datum/design/mod_boots name = "MOD Boots" desc = "'Nakamura Engineering' designed boots for a Modular Suit." - id = "mod_boots" build_type = MECHFAB materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5) construction_time = 10 SECONDS @@ -1949,7 +1810,6 @@ /datum/design/mod_plating name = "MOD External Plating" desc = "External plating for a MODsuit." - id = "mod_plating_standard" build_type = MECHFAB materials = list( /datum/material/iron =SHEET_MATERIAL_AMOUNT*3, @@ -1972,7 +1832,6 @@ /datum/design/mod_plating/civilian name = "MOD Civilian Plating" - id = "mod_plating_civilian" build_path = /obj/item/mod/construction/plating/civilian materials = list( /datum/material/iron =SHEET_MATERIAL_AMOUNT*3, @@ -1983,7 +1842,6 @@ /datum/design/mod_plating/portable_suit name = "MOD Portable Suit Plating" - id = "mod_plating_portable_suit" build_path = /obj/item/mod/construction/plating/portable_suit materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 3, @@ -1995,7 +1853,6 @@ /datum/design/mod_plating/engineering name = "MOD Engineering Plating" - id = "mod_plating_engineering" build_path = /obj/item/mod/construction/plating/engineering materials = list( /datum/material/iron =SHEET_MATERIAL_AMOUNT*3, @@ -2008,7 +1865,6 @@ /datum/design/mod_plating/atmospheric name = "MOD Atmospheric Plating" - id = "mod_plating_atmospheric" build_path = /obj/item/mod/construction/plating/atmospheric materials = list( /datum/material/iron =SHEET_MATERIAL_AMOUNT*3, @@ -2021,7 +1877,6 @@ /datum/design/mod_plating/medical name = "MOD Medical Plating" - id = "mod_plating_medical" build_path = /obj/item/mod/construction/plating/medical materials = list( /datum/material/iron =SHEET_MATERIAL_AMOUNT*3, @@ -2034,7 +1889,6 @@ /datum/design/mod_plating/cosmohonk name = "MOD Cosmohonk Plating" - id = "mod_plating_cosmohonk" build_path = /obj/item/mod/construction/plating/cosmohonk materials = list( /datum/material/iron =SHEET_MATERIAL_AMOUNT*3, @@ -2048,7 +1902,6 @@ /datum/design/mod_paint_kit name = "MOD Paint Kit" desc = "A paint kit for Modular Suits." - id = "mod_paint_kit" build_type = MECHFAB materials = list( /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, @@ -2063,7 +1916,6 @@ /datum/design/modlink_scryer name = "MODlink Scryer" desc = "A neck-worn piece of gear that can call with another MODlink-compatible device." - id = "modlink_scryer" build_type = MECHFAB materials = list( /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, @@ -2079,6 +1931,7 @@ //MODsuit modules /datum/design/module + abstract_type = /datum/design/module name = "MOD Module" build_type = MECHFAB construction_time = 1 SECONDS @@ -2098,7 +1951,6 @@ /datum/design/module/mod_storage name = "Compact Storage Module" - id = "mod_storage" materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT *1.25, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, @@ -2107,7 +1959,6 @@ /datum/design/module/mod_storage_expanded name = "Storage Module" - id = "mod_storage_expanded" materials = list( /datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/uranium =SHEET_MATERIAL_AMOUNT, @@ -2116,7 +1967,6 @@ /datum/design/module/mod_storage_holding name = "Storage Module of Holding" - id = "mod_storage_holding" materials = list( /datum/material/gold =SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/diamond =HALF_SHEET_MATERIAL_AMOUNT * 1.5, @@ -2127,7 +1977,6 @@ /datum/design/module/mod_visor_medhud name = "Medical Visor Module" - id = "mod_visor_medhud" materials = list( /datum/material/silver =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, @@ -2139,7 +1988,6 @@ /datum/design/module/mod_visor_diaghud name = "Diagnostic Visor Module" - id = "mod_visor_diaghud" materials = list( /datum/material/gold =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, @@ -2150,7 +1998,6 @@ ) /datum/design/module/mod_visor_sechud name = "Security Visor Module" - id = "mod_visor_sechud" materials = list( /datum/material/titanium =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, @@ -2161,7 +2008,6 @@ ) /datum/design/module/mod_visor_meson name = "Meson Visor Module" - id = "mod_visor_meson" materials = list( /datum/material/uranium =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, @@ -2172,7 +2018,6 @@ ) /datum/design/module/mod_visor_welding name = "Welding Protection Module" - id = "mod_welding" materials = list( /datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, @@ -2183,7 +2028,6 @@ ) /datum/design/module/mod_head_protection name = "Safety-First Head Protection Module" - id = "mod_safety" materials = list( /datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, @@ -2194,7 +2038,6 @@ ) /datum/design/module/mod_t_ray name = "T-Ray Scanner Module" - id = "mod_t_ray" materials = list( /datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, @@ -2205,7 +2048,6 @@ ) /datum/design/module/mod_health_analyzer name = "Health Analyzer Module" - id = "mod_health_analyzer" materials = list( /datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, @@ -2217,7 +2059,6 @@ /datum/design/module/mod_stealth name = "Cloak Module" - id = "mod_stealth" materials = list( /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/bluespace =SMALL_MATERIAL_AMOUNT*5, @@ -2228,13 +2069,11 @@ ) /datum/design/module/mod_jetpack name = "Ion Jetpack Module" - id = "mod_jetpack" materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/mod/module/jetpack /datum/design/module/mod_magboot name = "Magnetic Stabilizator Module" - id = "mod_magboot" materials = list( /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold =SMALL_MATERIAL_AMOUNT*5, @@ -2246,7 +2085,6 @@ /datum/design/module/mod_mag_harness name = "Magnetic Harness Module" - id = "mod_mag_harness" materials = list( /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/silver =SMALL_MATERIAL_AMOUNT*5, @@ -2258,7 +2096,6 @@ /datum/design/module/mod_tether name = "Emergency Tether Module" - id = "mod_tether" materials = list( /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver =SMALL_MATERIAL_AMOUNT*5, @@ -2270,13 +2107,11 @@ /datum/design/module/mod_mouthhole name = "Eating Apparatus Module" - id = "mod_mouthhole" materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT * 1.5) build_path = /obj/item/mod/module/mouthhole /datum/design/module/mod_rad_protection name = "Radiation Protection Module" - id = "mod_rad_protection" materials = list( /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/uranium =HALF_SHEET_MATERIAL_AMOUNT, @@ -2287,7 +2122,6 @@ ) /datum/design/module/mod_emp_shield name = "EMP Shield Module" - id = "mod_emp_shield" materials = list( /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT, @@ -2296,7 +2130,6 @@ /datum/design/module/mod_flashlight name = "Flashlight Module" - id = "mod_flashlight" materials = list( /datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, @@ -2305,7 +2138,6 @@ /datum/design/module/mod_reagent_scanner name = "Reagent Scanner Module" - id = "mod_reagent_scanner" materials = list(/datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/mod/module/reagent_scanner category = list( @@ -2314,7 +2146,6 @@ /datum/design/module/mod_gps name = "Internal GPS Module" - id = "mod_gps" materials = list( /datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, @@ -2326,7 +2157,6 @@ /datum/design/module/mod_constructor name = "Constructor Module" - id = "mod_constructor" materials = list( /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/titanium =SMALL_MATERIAL_AMOUNT*5, @@ -2337,7 +2167,6 @@ ) /datum/design/module/mod_quick_carry name = "Quick Carry Module" - id = "mod_quick_carry" materials = list( /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/titanium =SMALL_MATERIAL_AMOUNT*5, @@ -2349,13 +2178,11 @@ /datum/design/module/mod_longfall name = "Longfall Module" - id = "mod_longfall" materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/mod/module/longfall /datum/design/module/mod_thermal_regulator name = "Thermal Regulator Module" - id = "mod_thermal_regulator" materials = list( /datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, @@ -2364,7 +2191,6 @@ /datum/design/module/mod_injector name = "Injector Module" - id = "mod_injector" materials = list( /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/diamond =SMALL_MATERIAL_AMOUNT*5, @@ -2376,7 +2202,6 @@ /datum/design/module/mod_bikehorn name = "Bike Horn Module" - id = "mod_bikehorn" materials = list( /datum/material/plastic =SMALL_MATERIAL_AMOUNT*5, /datum/material/iron =SMALL_MATERIAL_AMOUNT*5, @@ -2388,7 +2213,6 @@ /datum/design/module/mod_microwave_beam name = "Microwave Beam Module" - id = "mod_microwave_beam" materials = list( /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/uranium =SMALL_MATERIAL_AMOUNT*5, @@ -2400,7 +2224,6 @@ /datum/design/module/mod_waddle name = "Waddle Module" - id = "mod_waddle" materials = list( /datum/material/plastic =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, @@ -2412,7 +2235,6 @@ /datum/design/module/mod_clamp name = "Crate Clamp Module" - id = "mod_clamp" materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/mod/module/clamp category = list( @@ -2421,7 +2243,6 @@ /datum/design/module/mod_drill name = "Drill Module" - id = "mod_drill" materials = list( /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/iron =SHEET_MATERIAL_AMOUNT, @@ -2433,7 +2254,6 @@ /datum/design/module/mod_orebag name = "Ore Bag Module" - id = "mod_orebag" materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT * 1.5) build_path = /obj/item/mod/module/orebag category = list( @@ -2442,7 +2262,6 @@ /datum/design/module/mod_organizer name = "Organizer Module" - id = "mod_organizer" materials = list( /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, @@ -2454,7 +2273,6 @@ /datum/design/module/mod_pathfinder name = "Pathfinder Module" - id = "mod_pathfinder" materials = list( /datum/material/uranium =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, @@ -2463,7 +2281,6 @@ /datum/design/module/mod_dna_lock name = "DNA Lock Module" - id = "mod_dna_lock" materials = list( /datum/material/diamond =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, @@ -2472,7 +2289,6 @@ /datum/design/module/mod_plasma_stabilizer name = "Plasma Stabilizer Module" - id = "mod_plasma" materials = list( /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, @@ -2481,7 +2297,6 @@ /datum/design/module/mod_glove_translator name = "Glove Translator Module" - id = "mod_sign_radio" materials = list( /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, @@ -2490,7 +2305,6 @@ /datum/design/module/mister_atmos name = "Resin Mister Module" - id = "mod_mister_atmos" materials = list( /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/titanium =HALF_SHEET_MATERIAL_AMOUNT * 1.5, @@ -2502,7 +2316,6 @@ /datum/design/module/mod_holster name = "Holster Module" - id = "mod_holster" materials = list( /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, @@ -2514,7 +2327,6 @@ /datum/design/module/mod_sonar name = "Active Sonar Module" - id = "mod_sonar" materials = list( /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 2.5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, @@ -2528,7 +2340,6 @@ /datum/design/module/projectile_dampener name = "Projectile Dampener Module" - id = "mod_projectile_dampener" materials = list( /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/bluespace =SMALL_MATERIAL_AMOUNT*5, @@ -2540,7 +2351,6 @@ /datum/design/module/surgicalprocessor name = "Surgical Processor Module" - id = "mod_surgicalprocessor" materials = list( /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 2.5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, @@ -2553,7 +2363,6 @@ /datum/design/module/threadripper name = "Thread Ripper Module" - id = "mod_threadripper" materials = list( /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 2.5, /datum/material/plastic =HALF_SHEET_MATERIAL_AMOUNT, @@ -2566,7 +2375,6 @@ /datum/design/module/defibrillator name = "Defibrillator Module" - id = "mod_defib" materials = list( /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 2.5, /datum/material/diamond =HALF_SHEET_MATERIAL_AMOUNT, @@ -2579,7 +2387,6 @@ /datum/design/module/statusreadout name = "Status Readout Module" - id = "mod_statusreadout" materials = list( /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 3, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, @@ -2592,7 +2399,6 @@ /datum/design/module/patienttransport name = "Patient Transport Module" - id = "mod_patienttransport" materials = list( /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/bluespace =HALF_SHEET_MATERIAL_AMOUNT, @@ -2604,7 +2410,6 @@ /datum/design/module/criminalcapture name = "Criminal Capture Module" - id = "mod_criminalcapture" materials = list( /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/bluespace =HALF_SHEET_MATERIAL_AMOUNT, @@ -2616,7 +2421,6 @@ /datum/design/module/mirage name = "Mirage Grenade Dispenser Module" - id = "mod_mirage_grenade" materials = list( /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/bluespace =HALF_SHEET_MATERIAL_AMOUNT, @@ -2629,7 +2433,6 @@ //MODsuit bepis modules /datum/design/module/disposal name = "Disposal Connector Module" - id = "mod_disposal" materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT *1.25, /datum/material/titanium =HALF_SHEET_MATERIAL_AMOUNT, @@ -2641,7 +2444,6 @@ /datum/design/module/joint_torsion name = "Joint Torsion Ratchet Module" - id = "mod_joint_torsion" materials = list( /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold = SMALL_MATERIAL_AMOUNT*2.5, @@ -2654,7 +2456,6 @@ /datum/design/module/recycler name = "Recycler Module" - id = "mod_recycler" materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, @@ -2667,7 +2468,6 @@ /datum/design/module/shooting_assistant name = "Shooting Assistant Module" - id = "mod_shooting" materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT, /datum/material/silver = SMALL_MATERIAL_AMOUNT*2, @@ -2682,7 +2482,6 @@ //MODsuit anomalock modules /datum/design/module/mod_antigrav name = "Anti-Gravity Module" - id = "mod_antigrav" materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT *1.25, /datum/material/glass =SHEET_MATERIAL_AMOUNT, @@ -2695,7 +2494,6 @@ /datum/design/module/mod_teleporter name = "Teleporter Module" - id = "mod_teleporter" materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT *1.25, /datum/material/glass =SHEET_MATERIAL_AMOUNT, @@ -2708,7 +2506,6 @@ /datum/design/module/mod_kinesis name = "Kinesis Module" - id = "mod_kinesis" materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT *1.25, /datum/material/glass =SHEET_MATERIAL_AMOUNT, @@ -2722,7 +2519,6 @@ /datum/design/module/fishing_glove name = "MOD Fishing Glove Module" - id = "mod_fishing" materials = list( /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, @@ -2734,7 +2530,6 @@ /datum/design/posisphere name = "Positronic Sphere" desc = "The latest in Artificial Pesterance." - id = "posisphere" build_type = MECHFAB materials = list( /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 0.85, @@ -2750,7 +2545,6 @@ /datum/design/module/mister_janitor name = "Cleaning Mister Module" - id = "mod_mister_janitor" materials = list( /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/titanium =HALF_SHEET_MATERIAL_AMOUNT * 1, diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 5632b74011e5..7ec06f46123e 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -4,7 +4,6 @@ /datum/design/healthanalyzer name = "Health Analyzer" - id = "healthanalyzer" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.5) build_path = /obj/item/healthanalyzer @@ -15,7 +14,6 @@ /datum/design/autopsy_scanner name = "Autopsy Scanner" - id = "autopsyscanner" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*5, /datum/material/glass = SMALL_MATERIAL_AMOUNT) build_path = /obj/item/autopsy_scanner @@ -27,7 +25,6 @@ /datum/design/bluespacebeaker name = "Bluespace Beaker" desc = "A bluespace beaker, powered by experimental bluespace technology and Element Cuban combined with the Compound Pete. Can hold up to 300 units." - id = "bluespacebeaker" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/plastic =SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/diamond =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/bluespace =HALF_SHEET_MATERIAL_AMOUNT) category = list( @@ -39,7 +36,6 @@ /datum/design/noreactbeaker name = "Cryostasis Beaker" desc = "A cryostasis beaker that allows for chemical storage without reactions. Can hold up to 50 units." - id = "splitbeaker" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 1.5) category = list( @@ -50,7 +46,6 @@ /datum/design/xlarge_beaker name = "X-large Beaker" - id = "xlarge_beaker" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT*2.5, /datum/material/plastic =SHEET_MATERIAL_AMOUNT * 1.5) category = list( @@ -61,7 +56,6 @@ /datum/design/organ_jar name = "Organ Jar" - id = "organ_jar" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT*2.5, /datum/material/plastic =SHEET_MATERIAL_AMOUNT * 1.5) category = list( @@ -72,7 +66,6 @@ /datum/design/meta_beaker name = "Metamaterial Beaker" - id = "meta_beaker" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT*2.5, /datum/material/plastic =SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/gold =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/titanium =HALF_SHEET_MATERIAL_AMOUNT) category = list( @@ -83,7 +76,6 @@ /datum/design/ph_meter name = "Chemical Analyzer" - id = "ph_meter" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT*2.5, /datum/material/gold =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/titanium =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/ph_meter @@ -95,7 +87,6 @@ /datum/design/bluespacesyringe name = "Bluespace Syringe" desc = "An advanced syringe that can hold 60 units of chemicals" - id = "bluespacesyringe" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass =SHEET_MATERIAL_AMOUNT, /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/diamond =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/bluespace =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/reagent_containers/syringe/bluespace @@ -107,7 +98,6 @@ /datum/design/dna_disk name = "Genetic Data Disk" desc = "Produce additional disks for storing genetic data." - id = "dna_disk" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass =SMALL_MATERIAL_AMOUNT, /datum/material/silver =SMALL_MATERIAL_AMOUNT*0.5) build_path = /obj/item/disk/data @@ -119,7 +109,6 @@ /datum/design/piercesyringe name = "Piercing Syringe" desc = "A diamond-tipped syringe that pierces armor when launched at high velocity. It can hold up to 10 units." - id = "piercesyringe" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass =SHEET_MATERIAL_AMOUNT, /datum/material/diamond =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/reagent_containers/syringe/piercing @@ -131,7 +120,6 @@ /datum/design/inhaler name = "Inhaler" desc = "A small device capable of administering short bursts of aerosolized chemicals. Requires a canister to function." - id = "inhaler" build_path = /obj/item/inhaler/medical build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic = SHEET_MATERIAL_AMOUNT * 0.1) @@ -143,7 +131,6 @@ /datum/design/inhaler_canister name = "Inhaler Canister" desc = "A small canister filled with aerosolized reagents for use in a inhaler." - id = "inhaler_canister" build_path = /obj/item/reagent_containers/inhaler_canister build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 0.2) @@ -155,7 +142,6 @@ /datum/design/bluespacebodybag name = "Bluespace Body Bag" desc = "A bluespace body bag, powered by experimental bluespace technology. It can hold loads of bodies and the largest of creatures." - id = "bluespacebodybag" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/plasma =SHEET_MATERIAL_AMOUNT, /datum/material/diamond =SMALL_MATERIAL_AMOUNT*5, /datum/material/bluespace =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/bodybag/bluespace @@ -168,7 +154,6 @@ name = "Stasis Body Bag" desc = "A disposal bodybag designed to stabilize patients in the field in critical condition. \ The bag itself cannot maintain stasis for long, and will eventually fall apart." - id = "stasis_bodybag" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/plastic = 10 * SHEET_MATERIAL_AMOUNT, // Very plastic expensive (but only because cloth cannot be put in the lathe) @@ -181,7 +166,6 @@ /datum/design/plasmarefiller name = "Plasmaman Jumpsuit Refill" desc = "A refill pack for the auto-extinguisher on Plasma-man suits." - id = "plasmarefiller" //Why did this have no plasmatech build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*2, /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/extinguisher_refill @@ -193,7 +177,6 @@ /datum/design/crewpinpointer name = "Crew Pinpointer" desc = "Allows tracking of someone's location if their suit sensors are turned to tracking beacon." - id = "crewpinpointer" build_type = PROTOLATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/gold =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/pinpointer/crew @@ -205,7 +188,6 @@ /datum/design/defibrillator_mount name = "Defibrillator Wall Mount" desc = "A mounted frame for holding defibrillators, providing easy security." - id = "defibmountdefault" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/wallframe/defib_mount @@ -217,7 +199,6 @@ /datum/design/defibrillator_mount_charging name = "PENLITE Defibrillator Wall Mount" desc = "An all-in-one mounted frame for holding defibrillators, complete with ID-locked clamps and recharging cables. The PENLITE version also allows for slow recharging of the defib's battery." - id = "defibmount" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/wallframe/defib_mount/charging @@ -229,7 +210,6 @@ /datum/design/genescanner name = "Genetic Sequence Analyzer" desc = "A handy hand-held analyzers for quickly determining mutations and collecting the full sequence." - id = "genescanner" build_path = /obj/item/sequence_scanner build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) @@ -241,7 +221,6 @@ /datum/design/healthanalyzer_advanced name = "Advanced Health Analyzer" desc = "A hand-held body scanner able to distinguish vital signs of the subject with high accuracy." - id = "healthanalyzer_advanced" build_path = /obj/item/healthanalyzer/advanced build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass = SHEET_MATERIAL_AMOUNT*1.25, /datum/material/silver =SHEET_MATERIAL_AMOUNT, /datum/material/gold =HALF_SHEET_MATERIAL_AMOUNT * 1.5) @@ -253,7 +232,6 @@ /datum/design/medigel name = "Medical Gel" desc = "A medical gel applicator bottle, designed for precision application, with an unscrewable cap." - id = "medigel" build_path = /obj/item/reagent_containers/medigel build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*1.25, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) @@ -264,7 +242,6 @@ /datum/design/surgical_drapes name = "Surgical Drapes" - id = "surgical_drapes" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/surgical_drapes @@ -276,7 +253,6 @@ /datum/design/laserscalpel name = "Laser Scalpel" desc = "A laser scalpel used for precise cutting." - id = "laserscalpel" build_path = /obj/item/scalpel/advanced build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*3, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/silver =SHEET_MATERIAL_AMOUNT, /datum/material/gold =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/diamond =SMALL_MATERIAL_AMOUNT * 2, /datum/material/titanium = SHEET_MATERIAL_AMOUNT*2) @@ -288,7 +264,6 @@ /datum/design/mechanicalpinches name = "Mechanical Pinches" desc = "These pinches can be either used as retractor or hemostat." - id = "mechanicalpinches" build_path = /obj/item/retractor/advanced build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*6, /datum/material/glass = SHEET_MATERIAL_AMOUNT*2, /datum/material/silver = SHEET_MATERIAL_AMOUNT*2, /datum/material/titanium =SHEET_MATERIAL_AMOUNT * 2.5) @@ -300,7 +275,6 @@ /datum/design/searingtool name = "Searing Tool" desc = "Used to mend tissue together. Or drill tissue away." - id = "searingtool" build_path = /obj/item/cautery/advanced build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*2, /datum/material/glass =SHEET_MATERIAL_AMOUNT, /datum/material/plasma =SHEET_MATERIAL_AMOUNT, /datum/material/uranium =SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/titanium =SHEET_MATERIAL_AMOUNT * 1.5) @@ -312,7 +286,6 @@ /datum/design/medical_spray_bottle name = "Medical Spray Bottle" desc = "A traditional spray bottle used to generate a fine mist. Not to be confused with a medspray." - id = "med_spray_bottle" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/reagent_containers/spray/medical @@ -324,7 +297,6 @@ /datum/design/chem_pack name = "Intravenous Medicine Bag" desc = "A plastic pressure bag for IV administration of drugs." - id = "chem_pack" build_type = PROTOLATHE | AWAY_LATHE departmental_flags = DEPARTMENT_BITFLAG_MEDICAL materials = list(/datum/material/plastic =SHEET_MATERIAL_AMOUNT) @@ -337,7 +309,6 @@ /datum/design/blood_pack name = "Blood Pack" desc = "Is used to contain blood used for transfusion. Must be attached to an IV drip." - id = "blood_pack" build_type = PROTOLATHE | AWAY_LATHE departmental_flags = DEPARTMENT_BITFLAG_MEDICAL materials = list(/datum/material/plastic =HALF_SHEET_MATERIAL_AMOUNT) @@ -350,7 +321,6 @@ /datum/design/portable_chem_mixer name = "Portable Chemical Mixer" desc = "A portable device that dispenses and mixes chemicals. Reagents have to be supplied with beakers." - id = "portable_chem_mixer" build_type = PROTOLATHE | AWAY_LATHE departmental_flags = DEPARTMENT_BITFLAG_MEDICAL materials = list(/datum/material/plastic =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/iron = SHEET_MATERIAL_AMOUNT*5, /datum/material/glass =SHEET_MATERIAL_AMOUNT * 1.5) @@ -363,7 +333,6 @@ /datum/design/medical_bed name = "Medical Bed" desc = "A bed made of sterile materials ideal for use in the medical field. Patient assistance or joyriding, it'll do it all!" - id = "medicalbed" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/titanium = SHEET_MATERIAL_AMOUNT * 2.7, /datum/material/plastic = SHEET_MATERIAL_AMOUNT * 1.7) build_path = /obj/structure/bed/medical @@ -375,7 +344,6 @@ /datum/design/emergency_bed name = "Medical Bed (Emergency)" desc = "A portable, foldable version of the medical bed. Perfect for paramedics or whenever you have mass casualties!" - id = "medicalbed_emergency" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/titanium = SHEET_MATERIAL_AMOUNT * 2.7, /datum/material/plastic = SHEET_MATERIAL_AMOUNT * 1.7) build_path = /obj/item/emergency_bed @@ -386,7 +354,6 @@ /datum/design/penlight name = "Penlight" - id = "penlight" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.5) build_path = /obj/item/flashlight/pen @@ -397,7 +364,6 @@ /datum/design/penlight_paramedic name = "Paramedic Penlight" - id = "penlight_paramedic" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass = SMALL_MATERIAL_AMOUNT) build_path = /obj/item/flashlight/pen/paramedic @@ -409,7 +375,6 @@ /datum/design/flesh_reshapers name = "Flesh Reshaper" desc = "Reshape those external features!" - id = "fleshreshaper" build_path = /obj/item/flesh_shears build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1, /datum/material/silver =SHEET_MATERIAL_AMOUNT * 1) @@ -420,7 +385,6 @@ /datum/design/flesh_reshapers/medical // slight variant with different color palette name = "Medical Flesh Reshaper" - id = "fleshreshapermed" build_path = /obj/item/flesh_shears/medical departmental_flags = DEPARTMENT_BITFLAG_MEDICAL @@ -431,7 +395,6 @@ /datum/design/cyberimp_breather name = "Breathing Tube Implant" desc = "This simple implant adds an internals connector to your back, allowing you to use internals without a mask and protecting you from being choked." - id = "ci-breather" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 3.5 SECONDS materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*6, /datum/material/glass = SMALL_MATERIAL_AMOUNT*2.5) @@ -444,7 +407,6 @@ /datum/design/cyberimp_surgical name = "Surgical Arm Implant" desc = "A set of surgical tools hidden behind a concealed panel on the user's arm." - id = "ci-surgery" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.25, @@ -461,7 +423,6 @@ /datum/design/cyberimp_toolset name = "Toolset Arm Implant" desc = "A stripped-down version of engineering cyborg toolset, designed to be installed on subject's arm." - id = "ci-toolset" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.25, @@ -478,7 +439,6 @@ /datum/design/cyberimp_medical_hud name = "Medical HUD Implant" desc = "These cybernetic eyes will display a medical HUD over everything you see. Wiggle eyes to control." - id = "ci-medhud" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 5 SECONDS materials = list( @@ -496,7 +456,6 @@ /datum/design/cyberimp_security_hud name = "Security HUD Implant" desc = "These cybernetic eyes will display a security HUD over everything you see. Wiggle eyes to control." - id = "ci-sechud" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 5 SECONDS materials = list( @@ -514,7 +473,6 @@ /datum/design/cyberimp_diagnostic_hud name = "Diagnostic HUD Implant" desc = "These cybernetic eyes will display a diagnostic HUD over everything you see. Wiggle eyes to control." - id = "ci-diaghud" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 5 SECONDS materials = list( @@ -532,7 +490,6 @@ /datum/design/cyberimp_xray name = "X-ray Eyes" desc = "These cybernetic eyes will give you X-ray vision. Blinking is futile." - id = "ci-xray" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 6 SECONDS materials = list( @@ -553,13 +510,11 @@ /datum/design/cyberimp_xray/moth name = "Moth X-ray Eyes" - id = "ci-xray-moth" build_path = /obj/item/organ/eyes/robotic/xray/moth /datum/design/cyberimp_thermals name = "Thermal Eyes" desc = "These cybernetic eyes will give you Thermal vision. Vertical slit pupil included." - id = "ci-thermals" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 6 SECONDS materials = list( @@ -578,13 +533,11 @@ /datum/design/cyberimp_thermals/moth name = "Moth Thermal Eyes" - id = "ci-thermals-moth" build_path = /obj/item/organ/eyes/robotic/thermals/moth /datum/design/cyberimp_tacvisor name = "Tactical IFF Visor" desc = "A sick IFF visor with an inbuilt LED display. May critically overload the user's prefrontal cortex." - id = "ci-tacvisor" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 6 SECONDS materials = list( @@ -603,7 +556,6 @@ /datum/design/cyberimp_antidrop name = "Anti-Drop Implant" desc = "This cybernetic brain implant will allow you to force your hand muscles to contract, preventing item dropping. Twitch ear to toggle." - id = "ci-antidrop" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 6 SECONDS materials = list( @@ -621,7 +573,6 @@ /datum/design/cyberimp_antistun name = "CNS Rebooter Implant" desc = "This implant will automatically give you back control over your central nervous system, reducing downtime when stunned." - id = "ci-antistun" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 6 SECONDS materials = list( @@ -639,7 +590,6 @@ /datum/design/cyberimp_herculean name = "Herculean Gravitronic Spinal Implant" desc = "This gravitronic spinal interface allows the user to reduce the impact of gravity on their body, effectively improving athletic performance." - id = "ci-herculean" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 4 SECONDS materials = list( @@ -657,7 +607,6 @@ /datum/design/cyberimp_connector name = "CNS Skillchip Connector Implant" desc = "This cybernetic adds a port to the back of your head, where you can remove or add skillchips at will." - id = "ci-connector" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 6 SECONDS materials = list( @@ -674,7 +623,6 @@ /datum/design/cyberimp_nutriment name = "Nutriment Pump Implant" desc = "This implant will synthesize and pump into your bloodstream a small amount of nutriment when you are starving." - id = "ci-nutriment" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 4 SECONDS materials = list( @@ -691,7 +639,6 @@ /datum/design/cyberimp_nutriment_plus name = "Nutriment Pump Implant PLUS" desc = "This implant will synthesize and pump into your bloodstream a small amount of nutriment when you are hungry." - id = "ci-nutrimentplus" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 5 SECONDS materials = list( @@ -709,7 +656,6 @@ /datum/design/cyberimp_reviver name = "Reviver Implant" desc = "This implant will attempt to revive you if you lose consciousness. For the faint of heart!" - id = "ci-reviver" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 6 SECONDS materials = list( @@ -727,7 +673,6 @@ /datum/design/cyberimp_thrusters name = "Thrusters Set Implant" desc = "This implant will allow you to use gas from environment or your internals for propulsion in zero-gravity areas." - id = "ci-thrusters" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 8 SECONDS materials = list( @@ -745,7 +690,6 @@ /datum/design/cyberimp_surgery_brain name = "Surgical Processor Implant" desc = "A cybernetic brain implant that provides access to advanced surgeries." - id = "ci-surgery-brain" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 4 SECONDS materials = list( @@ -766,7 +710,6 @@ /datum/design/implanter name = "Implanter" desc = "A sterile automatic implant injector." - id = "implanter" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*6, /datum/material/glass =SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/implanter @@ -778,7 +721,6 @@ /datum/design/implantcase name = "Implant Case" desc = "A glass case for containing an implant." - id = "implantcase" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/implantcase @@ -790,7 +732,6 @@ /datum/design/implant_sadtrombone name = "Sad Trombone Implant Case" desc = "Makes death amusing." - id = "implant_trombone" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/bananium = HALF_SHEET_MATERIAL_AMOUNT) transfered_materials = list( @@ -806,7 +747,6 @@ /datum/design/implant_chem name = "Chemical Implant Case" desc = "A glass case containing a chemical implant." - id = "implant_chem" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass = SHEET_MATERIAL_AMOUNT * 0.7) transfered_materials = list( @@ -822,7 +762,6 @@ /datum/design/implant_tracking name = "Tracking Implant Case" desc = "A glass case containing a tracking implant." - id = "implant_tracking" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5) transfered_materials = list( @@ -838,7 +777,6 @@ /datum/design/implant_beacon name = "Beacon Implant Case" desc = "A glass case containing a beacon implant." - id = "implant_beacon" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 3) transfered_materials = list( @@ -854,7 +792,6 @@ /datum/design/implant_bluespace name = "Bluespace Grounding Implant Case" desc = "A glass case containing a teleport blocker implant." - id = "implant_bluespace" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 3) transfered_materials = list( @@ -870,7 +807,6 @@ /datum/design/implant_exile name = "Exile Implant Case" desc = "A glass case containing an exile implant." - id = "implant_exile" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 3) transfered_materials = list( @@ -888,7 +824,6 @@ /datum/design/cybernetic_liver name = "Basic Cybernetic Liver" desc = "A basic cybernetic liver." - id = "cybernetic_liver" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 4 SECONDS materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) @@ -901,7 +836,6 @@ /datum/design/cybernetic_liver/tier2 name = "Cybernetic Liver" desc = "A cybernetic liver." - id = "cybernetic_liver_tier2" materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/organ/liver/cybernetic/tier2 category = list( @@ -912,7 +846,6 @@ /datum/design/cybernetic_liver/tier3 name = "Upgraded Cybernetic Liver" desc = "An upgraded cybernetic liver." - id = "cybernetic_liver_tier3" construction_time = 5 SECONDS materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, /datum/material/silver=SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/organ/liver/cybernetic/tier3 @@ -924,7 +857,6 @@ /datum/design/cybernetic_heart name = "Basic Cybernetic Heart" desc = "A basic cybernetic heart." - id = "cybernetic_heart" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 4 SECONDS materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) @@ -937,7 +869,6 @@ /datum/design/cybernetic_heart/tier2 name = "Cybernetic Heart" desc = "A cybernetic heart." - id = "cybernetic_heart_tier2" materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/organ/heart/cybernetic/tier2 category = list( @@ -948,7 +879,6 @@ /datum/design/cybernetic_heart/tier3 name = "Upgraded Cybernetic Heart" desc = "An upgraded cybernetic heart." - id = "cybernetic_heart_tier3" construction_time = 5 SECONDS materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, /datum/material/silver=SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/organ/heart/cybernetic/tier3 @@ -958,9 +888,8 @@ departmental_flags = DEPARTMENT_BITFLAG_MEDICAL /datum/design/cybernetic_heart/anomalock - name = "Voltaic combat cyberheart" - desc = "A cutting-edge cyberheart, originally designed for Nanotrasen killsquad usage but later declassified for normal research. Voltaic technology allows the heart to keep the body upright in dire circumstances, alongside redirecting anomalous flux energy to fully shield the user from shocks and electro-magnetic pulses. Does nothing without a flux anomaly core." - id = "cybernetic_heart_anomalock" + name = "Voltaic Combat Cyberheart" + desc = /obj/item/organ/heart/cybernetic/anomalock::desc construction_time = 5 SECONDS materials = list( /datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, @@ -977,7 +906,6 @@ /datum/design/cybernetic_lungs name = "Basic Cybernetic Lungs" desc = "A basic pair of cybernetic lungs." - id = "cybernetic_lungs" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 4 SECONDS materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) @@ -990,7 +918,6 @@ /datum/design/cybernetic_lungs/tier2 name = "Cybernetic Lungs" desc = "A pair of cybernetic lungs." - id = "cybernetic_lungs_tier2" materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/organ/lungs/cybernetic/tier2 category = list( @@ -1001,7 +928,6 @@ /datum/design/cybernetic_lungs/tier3 name = "Upgraded Cybernetic Lungs" desc = "A pair of upgraded cybernetic lungs." - id = "cybernetic_lungs_tier3" construction_time = 5 SECONDS materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, /datum/material/silver =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/organ/lungs/cybernetic/tier3 @@ -1013,7 +939,6 @@ /datum/design/cybernetic_stomach name = "Basic Cybernetic Stomach" desc = "A basic cybernetic stomach." - id = "cybernetic_stomach" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 4 SECONDS materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) @@ -1026,7 +951,6 @@ /datum/design/cybernetic_stomach/tier2 name = "Cybernetic Stomach" desc = "A cybernetic stomach." - id = "cybernetic_stomach_tier2" materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/organ/stomach/cybernetic/tier2 category = list( @@ -1037,7 +961,6 @@ /datum/design/cybernetic_stomach/tier3 name = "Upgraded Cybernetic Stomach" desc = "An upgraded cybernetic stomach." - id = "cybernetic_stomach_tier3" construction_time = 5 SECONDS materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, /datum/material/silver =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/organ/stomach/cybernetic/tier3 @@ -1049,7 +972,6 @@ /datum/design/cybernetic_ears name = "Basic Cybernetic Ears" desc = "A Basic pair of cybernetic ears." - id = "cybernetic_ears" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 3 SECONDS materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*2.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT*4) @@ -1062,7 +984,6 @@ /datum/design/cybernetic_ears_u name = "Cybernetic Ears" desc = "A pair of cybernetic ears." - id = "cybernetic_ears_u" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 4 SECONDS materials = list( @@ -1079,7 +1000,6 @@ /datum/design/cybernetic_ears_whisper name = "Whisper-sensitive Cybernetic Ears" desc = "A pair of whisper-sensitive cybernetic ears." - id = "cybernetic_ears_whisper" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 4 SECONDS materials = list( @@ -1096,7 +1016,6 @@ /datum/design/cybernetic_ears_volume name = "Volume-adjusting Cybernetic Ears" desc = "A pair of volume-adjusting cybernetic ears" - id = "cybernetic_ears_volume" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 4 SECONDS materials = list( @@ -1113,7 +1032,6 @@ /datum/design/cybernetic_ears_xray name = "Wall-penetrating Cybernetic Ears" desc = "A pair of wall-penetrating cybernetic ears." - id = "cybernetic_ears_xray" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 4 SECONDS materials = list( @@ -1130,37 +1048,31 @@ /datum/design/cybernetic_ears/cat name = "Basic Cybernetic Cat Ears" desc = "A basic pair of cybernetic cat ears" - id = "cybernetic_ears_cat" build_path = /obj/item/organ/ears/cat/cybernetic /datum/design/cybernetic_ears_u/cat name = "Cybernetic Cat Ears" desc = "A pair of cybernetic cat ears" - id = "cybernetic_ears_u_cat" build_path = /obj/item/organ/ears/cat/cybernetic/upgraded /datum/design/cybernetic_ears_whisper/cat name = "Whisper-sensitive Cybernetic Cat Ears" desc = "A pair of whisper-sensitive cybernetic cat ears" - id = "cybernetic_ears_whisper_cat" build_path = /obj/item/organ/ears/cat/cybernetic/whisper /datum/design/cybernetic_ears_volume/cat name = "Volume-adjusting Cybernetic Cat Ears" desc = "A pair of volume-adjusting cybernetic cat ears" - id = "cybernetic_ears_volume_cat" build_path = /obj/item/organ/ears/cat/cybernetic/volume /datum/design/cybernetic_ears_xray/cat name = "Wall-penetrating Cybernetic Cat Ears" desc = "A pair of wall-penetrating cybernetic cat ears" - id = "cybernetic_ears_xray_cat" build_path = /obj/item/organ/ears/cat/cybernetic/xray /datum/design/cybernetic_eyes name = "Basic Cybernetic Eyes" desc = "A basic pair of cybernetic eyes." - id = "cybernetic_eyes" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 3 SECONDS materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*2.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT*4) @@ -1172,13 +1084,11 @@ /datum/design/cybernetic_eyes/moth name = "Basic Cybernetic Moth Eyes" - id = "cybernetic_eyes_moth" build_path = /obj/item/organ/eyes/robotic/basic/moth /datum/design/cybernetic_eyes/improved name = "Cybernetic Eyes" desc = "A pair of cybernetic eyes." - id = "cybernetic_eyes_improved" build_path = /obj/item/organ/eyes/robotic category = list( RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_2 @@ -1187,13 +1097,11 @@ /datum/design/cybernetic_eyes/improved/moth name = "Cybernetic Moth Eyes" - id = "cybernetic_eyes_improved_moth" build_path = /obj/item/organ/eyes/robotic/moth /datum/design/cyberimp_welding name = "Welding Shield Eyes" desc = "These reactive micro-shields will protect you from welders and flashes without obscuring your vision." - id = "ci-welding" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 4 SECONDS materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*6, /datum/material/glass = SMALL_MATERIAL_AMOUNT*4) @@ -1205,13 +1113,11 @@ /datum/design/cyberimp_welding/moth name = "Welding Shield Moth Eyes" - id = "ci-welding-moth" build_path = /obj/item/organ/eyes/robotic/shield/moth /datum/design/cyberimp_gloweyes name = "Luminescent Eyes" desc = "A pair of cybernetic eyes that can emit multicolored light" - id = "ci-gloweyes" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 4 SECONDS materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*6, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) @@ -1223,28 +1129,23 @@ /datum/design/cyberimp_gloweyes/moth name = "Luminescent Moth Eyes" - id = "ci-gloweyes-moth" build_path = /obj/item/organ/eyes/robotic/glow/moth /datum/design/medibot_upgrade name = "Medibot Upgrade" desc = "Automatically upgrades the effectiveness of all medibots linked to the research network." - id = "medibot_upgrade" research_icon = 'icons/mob/silicon/aibots.dmi' research_icon_state = "medbot_generic_idle" /// Medibot healing starts at a 1x multiplier. For every tech researched, it goes up by this amount additively. var/additive_multiplier = 1 /datum/design/medibot_upgrade/tier_two - id = "medibot_upgrade_two" research_icon_state = "medbot_adv_idle" /datum/design/medibot_upgrade/tier_three - id = "medibot_upgrade_three" research_icon_state = "medbot_adv_idle" /datum/design/medibot_upgrade/tier_four - id = "medibot_upgrade_four" research_icon_state = "medbot_bezerk_idle" // alien tech ///////////////////// @@ -1253,7 +1154,6 @@ /datum/design/surgery abstract_type = /datum/design/surgery - id = DESIGN_ID_IGNORE name = null desc = null research_icon = 'icons/obj/medical/surgery_ui.dmi' @@ -1269,171 +1169,140 @@ desc = surgery::rnd_desc || surgery::desc /datum/design/surgery/lobotomy - id = "surgery_lobotomy" surgery = /datum/surgery_operation/organ/lobotomy research_icon_state = "surgery_head" /datum/design/surgery/lobotomy/mechanic - id = "surgery_lobotomy_mechanic" surgery = /datum/surgery_operation/organ/lobotomy/mechanic /datum/design/surgery/pacify - id = "surgery_pacify" surgery = /datum/surgery_operation/organ/pacify research_icon_state = "surgery_head" /datum/design/surgery/pacify/mechanic - id = "surgery_pacify_mechanic" surgery = /datum/surgery_operation/organ/pacify/mechanic /datum/design/surgery/viral_bonding - id = "surgery_viral_bond" surgery = /datum/surgery_operation/basic/viral_bonding research_icon_state = "surgery_chest" /datum/design/surgery/tend_wounds_upgrade name = "Tend Wounds Upgrade" desc = "Upgrade the efficiency of the individual tend wound operations." - id = "surgery_heal_upgrade" surgery = /datum/surgery_operation/basic/tend_wounds/upgraded research_icon_state = "surgery_chest" /datum/design/surgery/tend_wounds_upgrade/femto name = "Tend Wounds Upgrade" surgery = /datum/surgery_operation/basic/tend_wounds/upgraded/master - id = "surgery_heal_upgrade_femto" /datum/design/surgery/tend_wounds_combo name = "Tend Wounds Combo" desc = "An alternative wound treatment operation that treats both bruises and burns at the same time, albeit less effectively than their individual counterparts." surgery = /datum/surgery_operation/basic/tend_wounds/combo - id = "surgery_heal_combo" research_icon_state = "surgery_chest" /datum/design/surgery/tend_wounds_combo/upgrade name = "Tend Wounds Combo Upgrade" surgery = /datum/surgery_operation/basic/tend_wounds/combo/upgraded - id = "surgery_heal_combo_upgrade" /datum/design/surgery/tend_wounds_combo/upgrade/femto name = "Tend Wounds Combo Upgrade" desc = "The ultimate in wound treatment operations, treating both bruises and burns simultaneous and faster than their individual counterparts." surgery = /datum/surgery_operation/basic/tend_wounds/combo/upgraded/master - id = "surgery_heal_combo_upgrade_femto" /datum/design/surgery/brainwashing - id = "surgery_brainwashing" surgery = /datum/surgery_operation/organ/brainwash research_icon_state = "surgery_head" /datum/design/surgery/brainwashing/mechanic - id = "surgery_brainwashing_mechanic" surgery = /datum/surgery_operation/organ/brainwash/mechanic /datum/design/surgery/nerve_splicing desc = "A surgical procedure which splices the patient's nerves, making them more resistant to stuns." - id = "surgery_nerve_splice" surgery = /datum/surgery_operation/limb/bioware/nerve_splicing research_icon_state = "surgery_chest" /datum/design/surgery/nerve_splicing/mechanic desc = "A robotic upgrade which upgrades a robotic patient's automatic systems, making them more resistant to stuns." - id = "surgery_nerve_splice_mechanic" surgery = /datum/surgery_operation/limb/bioware/nerve_splicing/mechanic /datum/design/surgery/nerve_grounding desc = "A surgical procedure which makes the patient's nerves act as grounding rods, protecting them from electrical shocks." - id = "surgery_nerve_ground" surgery = /datum/surgery_operation/limb/bioware/nerve_grounding research_icon_state = "surgery_chest" /datum/design/surgery/nerve_grounding/mechanic desc = "A robotic upgrade which installs grounding rods into the robotic patient's system, protecting them from electrical shocks." - id = "surgery_nerve_ground_mechanic" surgery = /datum/surgery_operation/limb/bioware/nerve_grounding/mechanic /datum/design/surgery/vein_threading desc = "A surgical procedure which severely reduces the amount of blood lost in case of injury." - id = "surgery_vein_thread" surgery = /datum/surgery_operation/limb/bioware/vein_threading research_icon_state = "surgery_chest" /datum/design/surgery/vein_threading/mechanic desc = "A robotic upgrade which severely reduces the amount of hydraulic fluid lost in case of injury." - id = "surgery_vein_thread_mechanic" surgery = /datum/surgery_operation/limb/bioware/vein_threading/mechanic /datum/design/surgery/muscled_veins desc = "A surgical procedure which adds a muscled membrane to blood vessels, allowing a patient to pump blood without a heart." - id = "surgery_muscled_veins" surgery = /datum/surgery_operation/limb/bioware/muscled_veins research_icon_state = "surgery_chest" /datum/design/surgery/muscled_veins/mechanic desc = "A robotic upgrade which adds sophisticated hydraulics redundancies, allowing a patient to pump hydraulic fluid without an engine." - id = "surgery_muscled_veins_mechanic" surgery = /datum/surgery_operation/limb/bioware/muscled_veins/mechanic /datum/design/surgery/ligament_hook desc = "A surgical procedure which reshapes the connections between torso and limbs, making it so limbs can be attached manually if severed. \ However, this weakens the connection, making them easier to detach as well." - id = "surgery_ligament_hook" surgery = /datum/surgery_operation/limb/bioware/ligament_hook research_icon_state = "surgery_chest" /datum/design/surgery/ligament_hook/mechanic desc = "A robotic upgrade which installs rapid detachment anchor points, making it so limbs can be attached manually if detached. \ However, this weakens the connection, making them easier to detach as well." - id = "surgery_ligament_hook_mechanic" surgery = /datum/surgery_operation/limb/bioware/ligament_hook/mechanic /datum/design/surgery/ligament_reinforcement desc = "A surgical procedure which adds a protective tissue and bone cage around the connections between the torso and limbs, preventing dismemberment. \ However, the nerve connections as a result are more easily interrupted, making it easier to disable limbs with damage." - id = "surgery_ligament_reinforcement" surgery = /datum/surgery_operation/limb/bioware/ligament_reinforcement research_icon_state = "surgery_chest" /datum/design/surgery/ligament_reinforcement/mechanic desc = "A surgical procedure which adds reinforced limb anchor points to the patient's chassis, preventing dismemberment. \ However, the nerve connections as a result are more easily interrupted, making it easier to disable limbs with damage." - id = "surgery_ligament_reinforcement_mechanic" surgery = /datum/surgery_operation/limb/bioware/ligament_reinforcement/mechanic /datum/design/surgery/cortex_imprint desc = "A surgical procedure which modifies the cerebral cortex into a redundant neural pattern, making the brain able to bypass damage caused by minor brain traumas." - id = "surgery_cortex_imprint" surgery = /datum/surgery_operation/limb/bioware/cortex_imprint research_icon_state = "surgery_head" /datum/design/surgery/cortex_imprint/mechanic desc = "A surgical procedure which updates the patient's operating system to the 'latest version', whatever that means, making the brain able to bypass damage caused by minor brain traumas." - id = "surgery_cortex_imprint_mechanic" surgery = /datum/surgery_operation/limb/bioware/cortex_imprint/mechanic /datum/design/surgery/cortex_folding desc = "A surgical procedure which modifies the cerebral cortex into a complex fold, giving space to non-standard neural patterns." - id = "surgery_cortex_folding" surgery = /datum/surgery_operation/limb/bioware/cortex_folding research_icon_state = "surgery_head" /datum/design/surgery/cortex_folding/mechanic desc = "A robotic upgrade which reprograms the patient's neural network in a downright eldritch programming language, giving space to non-standard neural patterns." - id = "surgery_cortex_folding_mechanic" surgery = /datum/surgery_operation/limb/bioware/cortex_folding/mechanic /datum/design/surgery/necrotic_revival - id = "surgery_zombie" surgery = /datum/surgery_operation/limb/bionecrosis research_icon_state = "surgery_head" /datum/design/surgery/wing_reconstruction - id = "surgery_wing_reconstruction" surgery = /datum/surgery_operation/organ/fix_wings research_icon_state = "surgery_chest" /datum/design/surgery/experimental_dissection - id = "surgery_oldstation_dissection" surgery = /datum/surgery_operation/basic/dissection research_icon_state = "surgery_chest" @@ -1442,7 +1311,6 @@ desc = "A wall mounted computer that displays the vitals of a patient nearby. \ Links to stasis beds, operating tables, and other machines that can hold patients \ such as cryo cells, sleepers, and more." - id = "vitals_monitor" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 4, @@ -1456,7 +1324,6 @@ /datum/design/vitals_monitor/advanced name = "Advanced Vitals Monitor" desc = "An updated vitals display which performs a more detailed scan of the patient than the basic display." - id = "vitals_monitor_advanced" materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 4, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, diff --git a/code/modules/research/designs/mining_designs.dm b/code/modules/research/designs/mining_designs.dm index ff40afbc56ef..2c721f8ce4f1 100644 --- a/code/modules/research/designs/mining_designs.dm +++ b/code/modules/research/designs/mining_designs.dm @@ -5,7 +5,6 @@ /datum/design/cargo_express name = "Express Supply Console Board"//shes beautiful desc = "Allows for the construction of circuit boards used to build an Express Supply Console."//who? - id = "cargoexpress"//the coder reading this build_type = IMPRINTER materials = list(/datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/circuitboard/computer/cargo/express @@ -17,7 +16,6 @@ /datum/design/bluespace_pod name = "Express Supply Drop Pod Upgrade Disk" desc = "Allows the Cargo Express Console to call down the Bluespace Drop Pod, greatly increasing user safety."//who? - id = "bluespace_pod"//the coder reading this build_type = PROTOLATHE materials = list(/datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/disk/cargo/bluespace_pod @@ -28,7 +26,6 @@ /datum/design/pickaxe name = "Pickaxe" - id = "pickaxe" build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/pickaxe @@ -40,7 +37,6 @@ /datum/design/drill name = "Mining Drill" desc = "Yours is the drill that will pierce through the rock walls." - id = "drill" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*3, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) //expensive, but no need for miners. build_path = /obj/item/pickaxe/drill @@ -52,7 +48,6 @@ /datum/design/drill_diamond name = "Diamond-Tipped Mining Drill" desc = "Yours is the drill that will pierce the heavens!" - id = "drill_diamond" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT*3, @@ -68,7 +63,6 @@ /datum/design/plasmacutter name = "Plasma Cutter" desc = "You could use it to cut limbs off of xenos! Or, you know, mine stuff." - id = "plasmacutter" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT * 1.5, @@ -84,7 +78,6 @@ /datum/design/plasmacutter_adv name = "Advanced Plasma Cutter" desc = "It's an advanced plasma cutter, oh my god." - id = "plasmacutter_adv" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron =SHEET_MATERIAL_AMOUNT * 1.5, @@ -101,7 +94,6 @@ /datum/design/jackhammer name = "Sonic Jackhammer" desc = "Essentially a handheld planet-cracker. Rock walls cower in fear when they hear one of these." - id = "jackhammer" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT*3, @@ -118,7 +110,6 @@ /datum/design/superresonator name = "Upgraded Resonator" desc = "An upgraded version of the resonator that allows more fields to be active at once." - id = "superresonator" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT*2, @@ -135,7 +126,6 @@ /datum/design/trigger_guard_mod name = "Kinetic Accelerator Trigger Guard Mod" desc = "A device which allows kinetic accelerators to be wielded by any organism." - id = "triggermod" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron =SHEET_MATERIAL_AMOUNT, @@ -152,7 +142,6 @@ /datum/design/damage_mod name = "Kinetic Accelerator Damage Mod" desc = "A device which allows kinetic accelerators to deal more damage." - id = "damagemod" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron =SHEET_MATERIAL_AMOUNT, @@ -167,7 +156,6 @@ departmental_flags = DEPARTMENT_BITFLAG_CARGO /datum/design/damage_mod/borg - id = "borg_upgrade_damagemod" build_type = MECHFAB category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MINING @@ -177,7 +165,6 @@ /datum/design/cooldown_mod name = "Kinetic Accelerator Cooldown Mod" desc = "A device which decreases the cooldown of a Kinetic Accelerator." - id = "cooldownmod" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/gold =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/uranium =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/borg/upgrade/modkit/cooldown @@ -187,7 +174,6 @@ departmental_flags = DEPARTMENT_BITFLAG_CARGO /datum/design/cooldown_mod/borg - id = "borg_upgrade_cooldownmod" build_type = MECHFAB category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MINING @@ -197,7 +183,6 @@ /datum/design/range_mod name = "Kinetic Accelerator Range Mod" desc = "A device which allows kinetic accelerators to fire at a further range." - id = "rangemod" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/gold =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/uranium =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/borg/upgrade/modkit/range @@ -207,7 +192,6 @@ departmental_flags = DEPARTMENT_BITFLAG_CARGO /datum/design/range_mod/borg - id = "borg_upgrade_rangemod" build_type = MECHFAB category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MINING @@ -217,7 +201,6 @@ /datum/design/hyperaccelerator name = "Kinetic Accelerator Mining AoE Mod" desc = "A modification kit for Kinetic Accelerators which causes it to fire AoE blasts that destroy rock." - id = "hypermod" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT*4, @@ -233,7 +216,6 @@ departmental_flags = DEPARTMENT_BITFLAG_CARGO /datum/design/hyperaccelerator/borg - id = "borg_upgrade_hypermod" build_type = MECHFAB category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MINING @@ -242,7 +224,6 @@ /datum/design/mining_scanner name = "Mining Scanner" - id = "mining_scanner" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, @@ -256,6 +237,7 @@ departmental_flags = DEPARTMENT_BITFLAG_CARGO /datum/design/unique_modkit + abstract_type = /datum/design/unique_modkit category = list( RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_PKA_MODS, ) @@ -265,27 +247,23 @@ /datum/design/unique_modkit/offensive_turf_aoe name = "Kinetic Accelerator Offensive Mining Explosion Mod" desc = "A device which causes kinetic accelerators to fire AoE blasts that destroy rock and damage creatures." - id = "hyperaoemod" materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*3.5, /datum/material/glass = SHEET_MATERIAL_AMOUNT*1.5, /datum/material/silver =SHEET_MATERIAL_AMOUNT*1.5, /datum/material/gold =SHEET_MATERIAL_AMOUNT*1.5, /datum/material/diamond = SHEET_MATERIAL_AMOUNT*2) build_path = /obj/item/borg/upgrade/modkit/cooldown/aoe/mobs/andturfs /datum/design/unique_modkit/rapid_repeater name = "Kinetic Accelerator Rapid Repeater Mod" desc = "A device which greatly reduces a kinetic accelerator's cooldown on striking a living target or rock, but greatly increases its base cooldown." - id = "repeatermod" materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT * 5, /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/uranium = SHEET_MATERIAL_AMOUNT*4, /datum/material/bluespace =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/borg/upgrade/modkit/cooldown/repeater /datum/design/unique_modkit/resonator_blast name = "Kinetic Accelerator Resonator Blast Mod" desc = "A device which causes kinetic accelerators to fire shots that leave and detonate resonator blasts." - id = "resonatormod" materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT*5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT*5, /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT*5, /datum/material/uranium =SHEET_MATERIAL_AMOUNT * 2.5) build_path = /obj/item/borg/upgrade/modkit/resonator_blasts /datum/design/unique_modkit/bounty name = "Kinetic Accelerator Death Syphon Mod" desc = "A device which causes kinetic accelerators to permanently gain damage against creature types killed with it." - id = "bountymod" materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*2, /datum/material/silver = SHEET_MATERIAL_AMOUNT*2, /datum/material/gold = SHEET_MATERIAL_AMOUNT*2, /datum/material/bluespace = SHEET_MATERIAL_AMOUNT*2) build_path = /obj/item/borg/upgrade/modkit/bounty diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm index 01a34d09b775..feb48852e41d 100644 --- a/code/modules/research/designs/misc_designs.dm +++ b/code/modules/research/designs/misc_designs.dm @@ -3,7 +3,6 @@ /datum/design/health_hud name = "Health Scanner HUD" desc = "A heads-up display that scans the humans in view and provides accurate data about their health status." - id = "health_hud" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/clothing/glasses/hud/health @@ -15,7 +14,6 @@ /datum/design/health_hud_night name = "Night Vision Health Scanner HUD" desc = "An advanced medical head-up display that allows doctors to find patients in complete darkness." - id = "health_hud_night" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SMALL_MATERIAL_AMOUNT*6, @@ -32,7 +30,6 @@ /datum/design/security_hud name = "Security HUD" desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status." - id = "security_hud" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/clothing/glasses/hud/security @@ -44,7 +41,6 @@ /datum/design/security_hud_night name = "Night Vision Security HUD" desc = "A heads-up display which provides id data and vision in complete darkness." - id = "security_hud_night" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SMALL_MATERIAL_AMOUNT*6, @@ -61,7 +57,6 @@ /datum/design/diagnostic_hud name = "Diagnostic HUD" desc = "A HUD used to analyze and determine faults within robotic machinery." - id = "diagnostic_hud" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/clothing/glasses/hud/diagnostic @@ -73,7 +68,6 @@ /datum/design/diagnostic_hud_night name = "Night Vision Diagnostic HUD" desc = "Upgraded version of the diagnostic HUD designed to function during a power failure." - id = "diagnostic_hud_night" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SMALL_MATERIAL_AMOUNT*6, @@ -92,7 +86,6 @@ /datum/design/welding_goggles name = "Welding Goggles" desc = "Protects the eyes from bright flashes; approved by the mad scientist association." - id = "welding_goggles" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/clothing/glasses/welding @@ -104,7 +97,6 @@ /datum/design/welding_mask name = "Welding Gas Mask" desc = "A gas mask with built in welding goggles and face shield. Looks like a skull, clearly designed by a nerd." - id = "weldingmask" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) transfered_materials = list( @@ -120,7 +112,6 @@ /datum/design/bright_helmet name = "Workplace-Ready Firefighter Helmet" desc = "By applying state of the art lighting technology to a fire helmet with industry standard photo-chemical hardening methods, this hardhat will protect you from robust workplace hazards." - id = "bright_helmet" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT*2, @@ -137,7 +128,6 @@ /datum/design/mauna_mug name = "Mauna Mug" desc = "This awesome mug will ensure your coffee never stays cold!" - id = "mauna_mug" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT, /datum/material/glass =SMALL_MATERIAL_AMOUNT) transfered_materials = list( @@ -153,7 +143,6 @@ /datum/design/rolling_table name = "Rolly poly" desc = "We duct-taped some wheels to the bottom of a table. It's goddamn science alright?" - id = "rolling_table" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*2) build_path = /obj/structure/table/rolling @@ -165,7 +154,6 @@ /datum/design/portaseeder name = "Portable Seed Extractor" desc = "For the enterprising botanist on the go. Less efficient than the stationary model, it creates one seed per plant." - id = "portaseeder" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = SMALL_MATERIAL_AMOUNT*4) build_path = /obj/item/storage/bag/plants/portaseeder @@ -176,7 +164,6 @@ /datum/design/clown_firing_pin name = "Hilarious Firing Pin" - id = "clown_firing_pin" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT * 3, /datum/material/bananium =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/firing_pin/clown @@ -187,7 +174,6 @@ /datum/design/water_balloon name = "Water Balloon" - id = "water_balloon" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/toy/waterballoon @@ -199,7 +185,6 @@ /datum/design/mesons name = "Optical Meson Scanners" desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition." - id = "mesons" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/clothing/glasses/meson @@ -211,7 +196,6 @@ /datum/design/engine_goggles name = "Engineering Scanner Goggles" desc = "Goggles used by engineers. The Meson Scanner mode lets you see basic structural and terrain layouts through walls, regardless of lighting condition. The T-ray Scanner mode lets you see underfloor objects such as cables and pipes." - id = "engine_goggles" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, /datum/material/plasma =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/clothing/glasses/meson/engine @@ -223,7 +207,6 @@ /datum/design/tray_goggles name = "Optical T-Ray Scanners" desc = "Used by engineering staff to see underfloor objects such as cables and pipes." - id = "tray_goggles" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/clothing/glasses/meson/engine/tray @@ -235,7 +218,6 @@ /datum/design/atmos_thermal name = "Atmospheric thermal imaging goggles" desc = "Used by Atmospheric Technician to determine the temperature of the air" - id = "atmos_thermal" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, /datum/material/plasma =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/clothing/glasses/meson/engine/atmos_imaging @@ -247,7 +229,6 @@ /datum/design/nvgmesons name = "Night Vision Optical Meson Scanners" desc = "Prototype meson scanners fitted with an extra sensor which amplifies the visible light spectrum and overlays it to the UHD display." - id = "nvgmesons" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SMALL_MATERIAL_AMOUNT*6, @@ -264,7 +245,6 @@ /datum/design/night_vision_goggles name = "Night Vision Goggles" desc = "Goggles that let you see through darkness unhindered." - id = "night_visision_goggles" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SMALL_MATERIAL_AMOUNT*6, @@ -281,7 +261,6 @@ /datum/design/magboots name = "Magnetic Boots" desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle." - id = "magboots" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT*2, @@ -297,7 +276,6 @@ /datum/design/forcefield_projector name = "Forcefield Projector" desc = "A device which can project temporary forcefields to seal off an area." - id = "forcefield_projector" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT*1.25, @@ -312,7 +290,6 @@ /datum/design/sci_goggles name = "Science Goggles" desc = "Goggles fitted with a portable analyzer capable of determining the research worth of an item or components of a machine." - id = "scigoggles" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/clothing/glasses/science @@ -324,7 +301,6 @@ /datum/design/nv_sci_goggles name = "Night Vision Science Goggles" desc = "Goggles that lets the user see in the dark and recognize chemical compounds at a glance." - id = "nv_scigoggles" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SMALL_MATERIAL_AMOUNT*6, @@ -341,7 +317,6 @@ /datum/design/roastingstick name = "Advanced Roasting Stick" desc = "A roasting stick for cooking sausages in exotic ovens." - id = "roastingstick" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron=HALF_SHEET_MATERIAL_AMOUNT, @@ -357,7 +332,6 @@ /datum/design/locator name = "Bluespace Locator" desc = "Used to track portable teleportation beacons and targets with embedded tracking implants." - id = "locator" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron=HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, /datum/material/silver =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/locator @@ -369,7 +343,6 @@ /datum/design/quantum_keycard name = "Quantum Keycard" desc = "Allows for the construction of a quantum keycard." - id = "quantum_keycard" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass =SMALL_MATERIAL_AMOUNT*5, /datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/silver =SMALL_MATERIAL_AMOUNT*5, /datum/material/bluespace =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/quantum_keycard @@ -381,7 +354,6 @@ /datum/design/botpad_remote name = "Bot Launchpad Controller" desc = "Allows you to control the connected bot launchpad" - id = "botpad_remote" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass =SMALL_MATERIAL_AMOUNT*5, /datum/material/iron =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/botpad_remote @@ -393,7 +365,6 @@ /datum/design/anomaly_neutralizer name = "Anomaly Neutralizer" desc = "An advanced tool capable of instantly neutralizing anomalies, designed to capture the fleeting aberrations created by the engine." - id = "anomaly_neutralizer" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT, /datum/material/gold =SHEET_MATERIAL_AMOUNT, /datum/material/plasma =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/uranium =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/anomaly_neutralizer @@ -405,7 +376,6 @@ /datum/design/donksoft_refill name = "Donksoft Toy Vendor Refill" desc = "A refill canister for Donksoft Toy Vendors." - id = "donksoft_refill" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT*12.5, @@ -423,7 +393,6 @@ /datum/design/oxygen_tank name = "Oxygen Tank" desc = "An empty oxygen tank." - id = "oxygen_tank" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/tank/internals/oxygen/empty @@ -435,7 +404,6 @@ /datum/design/plasma_tank name = "Plasma Tank" desc = "An empty oxygen tank." - id = "plasma_tank" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/tank/internals/plasma/empty @@ -447,7 +415,6 @@ /datum/design/id name = "Identification Card" desc = "A card used to provide ID and determine access across the station. Has an integrated digital display and advanced microchips." - id = "idcard" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT * 2, /datum/material/glass =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/card/id/advanced @@ -459,7 +426,6 @@ /datum/design/eng_gloves name = "Tinkers Gloves" desc = "Overdesigned engineering gloves that have automated construction subroutines dialed in, allowing for faster construction while worn." - id = "eng_gloves" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT, /datum/material/silver=HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/gold =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/clothing/gloves/tinkerer @@ -470,7 +436,6 @@ /datum/design/lavarods name = "Lava-Resistant Iron Rods" - id = "lava_rods" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron=HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plasma=SMALL_MATERIAL_AMOUNT*5, /datum/material/titanium=SHEET_MATERIAL_AMOUNT) build_path = /obj/item/stack/rods/lava @@ -482,7 +447,6 @@ /datum/design/plasticducky name = "Rubber Ducky" desc = "The classic Nanotrasen design for competitively priced bath based duck toys. No need for fancy Waffle Corp. rubber, buy Plastic Ducks today!" - id = "plasticducky" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/bikehorn/rubberducky/plasticducky @@ -494,7 +458,6 @@ /datum/design/pneumatic_seal name = "Pneumatic Airlock Seal" desc = "A heavy brace used to seal airlocks. Useful for keeping out people without the dexterity to remove it." - id = "pneumatic_seal" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*10, /datum/material/plasma = SHEET_MATERIAL_AMOUNT*5) build_path = /obj/item/door_seal @@ -508,7 +471,6 @@ /datum/design/advmop name = "Advanced Mop" desc = "An upgraded mop with a large internal capacity for holding water or other cleaning chemicals." - id = "advmop" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT*2.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/mop/advanced @@ -520,7 +482,6 @@ /datum/design/normtrash name = "Trashbag" desc = "It's a bag for trash, you put garbage in it." - id = "normtrash" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/storage/bag/trash @@ -532,7 +493,6 @@ /datum/design/blutrash name = "Trashbag of Holding" desc = "An advanced trash bag with bluespace properties; capable of holding a plethora of garbage." - id = "blutrash" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/gold =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/uranium = SMALL_MATERIAL_AMOUNT*2.5, /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT * 1.5) build_path = /obj/item/storage/bag/trash/bluespace @@ -544,7 +504,6 @@ /datum/design/light_replacer name = "Light Replacer" desc = "A device to automatically replace lights. Refill with working light bulbs." - id = "light_replacer" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/silver = SMALL_MATERIAL_AMOUNT*1.5, /datum/material/glass =SHEET_MATERIAL_AMOUNT * 1.5) build_path = /obj/item/lightreplacer @@ -556,7 +515,6 @@ /datum/design/light_replacer_blue name = "Bluespace Light Replacer" desc = "A device to automatically replace lights at a distance. Refill with working light bulbs." - id = "light_replacer_blue" build_type = PROTOLATHE materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/silver = SMALL_MATERIAL_AMOUNT*1.5, /datum/material/glass =SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/bluespace =SMALL_MATERIAL_AMOUNT * 3) build_path = /obj/item/lightreplacer/blue @@ -568,7 +526,6 @@ /datum/design/buffer_upgrade name = "Floor Buffer Upgrade" desc = "A floor buffer that can be attached to vehicular janicarts." - id = "buffer" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/janicart_upgrade/buffer @@ -580,7 +537,6 @@ /datum/design/vacuum_upgrade name = "Vacuum Upgrade" desc = "A vacuum that can be attached to vehicular janicarts." - id = "vacuum" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/janicart_upgrade/vacuum @@ -592,7 +548,6 @@ /datum/design/paint_remover name = "Paint Remover" desc = "Removes stains from the floor, and not much else." - id = "paint_remover" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/paint/paint_remover @@ -604,7 +559,6 @@ /datum/design/spraybottle name = "Spray Bottle" desc = "A spray bottle, with an unscrewable top." - id = "spraybottle" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/reagent_containers/spray @@ -616,7 +570,6 @@ /datum/design/beartrap name = "Bear Trap" desc = "A trap used to catch space bears and other legged creatures." - id = "beartrap" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/titanium =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/restraints/legcuffs/beartrap @@ -630,7 +583,6 @@ /datum/design/adv_watering_can name = "Advanced Watering Can" - id = "adv_watering_can" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT*2.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT * 2) category = list( @@ -644,7 +596,6 @@ /datum/design/holosign name = "Holographic Sign Projector" desc = "A holographic projector used to project various warning signs." - id = "holosign" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/holosign_creator @@ -656,7 +607,6 @@ /datum/design/holobarrier_jani name = "Custodial Holobarrier Projector" desc = "A holographic projector used to project hard light wet floor barriers." - id = "holobarrier_jani" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/holosign_creator/janibarrier @@ -668,7 +618,6 @@ /datum/design/holosignsec name = "Security Holobarrier Projector" desc = "A holographic projector that creates holographic security barriers." - id = "holosignsec" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/holosign_creator/security @@ -680,7 +629,6 @@ /datum/design/holosignengi name = "Engineering Holobarrier Projector" desc = "A holographic projector that creates holographic engineering barriers." - id = "holosignengi" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/holosign_creator/engineering @@ -692,7 +640,6 @@ /datum/design/holosignatmos name = "ATMOS Holofan Projector" desc = "A holographic projector that creates holographic barriers that prevent changes in atmospheric conditions." - id = "holosignatmos" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/holosign_creator/atmos @@ -707,7 +654,6 @@ build_type = PROTOLATHE | AWAY_LATHE build_path = /obj/item/holosign_creator/medical materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, /datum/material/silver =SMALL_MATERIAL_AMOUNT) //a hint of silver since it can troll 2 antags (bad viros and sentient disease) - id = "holobarrier_med" category = list( RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL ) @@ -718,7 +664,6 @@ /datum/design/reactive_armour name = "Reactive Armor Shell" desc = "An experimental suit of armour capable of utilizing an implanted anomaly core to protect the user." - id = "reactive_armour" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT*5, @@ -736,7 +681,6 @@ /datum/design/knight_armour name = "Knight Armour" desc = "A royal knight's favorite garments. Can be trimmed by any friendly person." - id = "knight_armour" build_type = AUTOLATHE materials = list(/datum/material_requirement/armor_material = SHEET_MATERIAL_AMOUNT * 5) build_path = /obj/item/clothing/suit/armor/riot/knight/greyscale @@ -745,7 +689,6 @@ /datum/design/knight_helmet name = "Knight Helmet" desc = "A royal knight's favorite hat. If you hold it upside down it's actually a bucket." - id = "knight_helmet" build_type = AUTOLATHE materials = list(/datum/material_requirement/armor_material = SHEET_MATERIAL_AMOUNT * 2.5) build_path = /obj/item/clothing/head/helmet/knight/greyscale @@ -756,7 +699,6 @@ /datum/design/seclite name = "Seclite" desc = "A robust flashlight used by security." - id = "seclite" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT*2.5) build_path = /obj/item/flashlight/seclite @@ -768,7 +710,6 @@ /datum/design/pepperspray name = "Pepper Spray" desc = "Manufactured by UhangInc, used to blind and down an opponent quickly. Printed pepper sprays do not contain reagents." - id = "pepperspray" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/reagent_containers/spray/pepper/empty @@ -780,7 +721,6 @@ /datum/design/bola_energy name = "Energy Bola" desc = "A specialized hard-light bola designed to ensnare fleeing criminals and aid in arrests." - id = "bola_energy" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/silver =SMALL_MATERIAL_AMOUNT*5, /datum/material/plasma =SMALL_MATERIAL_AMOUNT*5, /datum/material/titanium =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/restraints/legcuffs/bola/energy @@ -788,12 +728,10 @@ RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY ) departmental_flags = DEPARTMENT_BITFLAG_SECURITY - autolathe_exportable = FALSE /datum/design/zipties name = "Zipties" desc = "Plastic, disposable zipties that can be used to restrain temporarily but are destroyed after use." - id = "zipties" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic = SMALL_MATERIAL_AMOUNT*2.5) build_path = /obj/item/restraints/handcuffs/cable/zipties @@ -805,7 +743,6 @@ /datum/design/evidencebag name = "Evidence Bag" desc = "An empty evidence bag." - id = "evidencebag" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/evidencebag @@ -818,7 +755,6 @@ /datum/design/dragnet_beacon name = "DRAGnet Beacon" desc = "A beacon that can be used as a teleport destination for DRAGnet snare rounds. Remember to sync it with your DRAGnet first!" - id = "dragnet_beacon" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2) build_path = /obj/item/dragnet_beacon @@ -830,7 +766,6 @@ /datum/design/inspector name = "N-Spect Scanner" desc = "Central Command-issued inspection device. Performs inspections according to Nanotrasen protocols when activated, then prints an encrypted report regarding the maintenance of the station. Definitely not giving you cancer." - id = "inspector" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/uranium =SHEET_MATERIAL_AMOUNT) transfered_materials = list( @@ -845,7 +780,6 @@ /datum/design/sec_pen name = "Security Pen" - id = "sec_pen" build_type = PROTOLATHE | AUTOLATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/pen/red/security @@ -856,7 +790,6 @@ /datum/design/plumbing_rcd name = "Plumbing Constructor" - id = "plumbing_rcd" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*38, /datum/material/glass = SHEET_MATERIAL_AMOUNT*18, /datum/material/plastic =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/construction/plumbing @@ -867,7 +800,6 @@ /datum/design/gas_filter name = "Gas Filter" - id = "gas_filter" build_type = PROTOLATHE | AUTOLATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/gas_filter @@ -878,7 +810,6 @@ /datum/design/plasmaman_gas_filter name = "Plasmaman Gas Filter" - id = "plasmaman_gas_filter" build_type = PROTOLATHE | AUTOLATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/gas_filter/plasmaman @@ -891,7 +822,6 @@ /datum/design/super_sticky_tape name = "Super Sticky Tape" - id = "super_sticky_tape" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic =SHEET_MATERIAL_AMOUNT * 1.5) build_path = /obj/item/stack/medical/wrap/sticky_tape/super @@ -902,7 +832,6 @@ /datum/design/pointy_tape name = "Pointy Tape" - id = "pointy_tape" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/plastic =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/stack/medical/wrap/sticky_tape/pointy @@ -913,7 +842,6 @@ /datum/design/super_pointy_tape name = "Super Pointy Tape" - id = "super_pointy_tape" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/plastic =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/stack/medical/wrap/sticky_tape/pointy/super @@ -926,7 +854,6 @@ /datum/design/tackle_dolphin name = "Dolphin Gloves" - id = "tackle_dolphin" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT*2.5) build_path = /obj/item/clothing/gloves/tackler/dolphin @@ -937,7 +864,6 @@ /datum/design/tackle_rocket name = "Rocket Gloves" - id = "tackle_rocket" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plastic =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/clothing/gloves/tackler/rocket @@ -951,7 +877,6 @@ /datum/design/holosign/restaurant name = "Restaurant Seating Projector" desc = "A holographic projector that creates seating designation for restaurants." - id = "holosignrestaurant" build_type = PROTOLATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/holosign_creator/robot_seat/restaurant @@ -963,7 +888,6 @@ /datum/design/holosign/bar name = "Bar Seating Projector" desc = "A holographic projector that creates seating designation for bars." - id = "holosignbar" build_type = PROTOLATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/holosign_creator/robot_seat/bar @@ -975,7 +899,6 @@ /datum/design/oven_tray name = "Oven Tray" desc = "Gotta shove something in!" - id = "oven_tray" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/plate/oven_tray @@ -989,7 +912,6 @@ /datum/design/fishing_rod_tech name = "Advanced Fishing Rod" desc = "A fishing rod with an embedded generator dispensing an infinite supply of fishing baits." - id = "fishing_rod_tech" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/uranium =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plastic =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/fishing_rod/tech @@ -1001,7 +923,6 @@ /datum/design/fishing_gloves name = "Athletic Fishing Gloves" desc = "A pair of gloves to fish without a fishing rod and train your athletics with." - id = "fishing_gloves" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plastic = SHEET_MATERIAL_AMOUNT) build_path = /obj/item/clothing/gloves/fishing @@ -1013,7 +934,6 @@ /datum/design/stabilized_hook name = "Gyro-Stabilized Hook" desc = "An advanced fishing hook that gives the user a tighter control on the fish when reeling in." - id = "stabilized_hook" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/fishing_hook/stabilized @@ -1025,7 +945,6 @@ /datum/design/auto_reel name = "Fishing Line Auto-Reel" desc = "An advanced line reel which can be used speed up fishing or casually snag other items in your direction." - id = "auto_reel" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 4, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 3) build_path = /obj/item/fishing_line/auto_reel @@ -1037,7 +956,6 @@ /datum/design/bluespace_reel name = "Bluespace Fishing Line" desc = "An advanced line reel that can be used to reach distant fishing spots as well as other things whereas a normal fishing line cannot." - id = "bluespace_reel" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 4, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 3) build_path = /obj/item/fishing_line/bluespace @@ -1049,7 +967,6 @@ /datum/design/fish_analyzer name = "Fish Analyzer" desc = "An analyzer used to monitor fish's status and traits with." - id = "fish_analyzer" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 0.5) build_path = /obj/item/fish_analyzer @@ -1061,7 +978,6 @@ /datum/design/bluespace_fish_case name = "Bluespace Fish Case" desc = "An improved fish case to keep large fish in stasis in a compact little space." - id = "bluespace_fish_case" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT, /datum/material/plastic = SMALL_MATERIAL_AMOUNT, /datum/material/bluespace = SMALL_MATERIAL_AMOUNT) build_path = /obj/item/storage/fish_case/bluespace @@ -1073,7 +989,6 @@ /datum/design/bluespace_fish_tank name = "Bluespace Fish Tank Kit" desc = "The required components to upgrade the capacity of a fish tank." - id = "bluespace_fish_tank_kit" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3, /datum/material/titanium = SMALL_MATERIAL_AMOUNT, /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 3) build_path = /obj/item/aquarium_upgrade/bluespace_tank @@ -1085,7 +1000,6 @@ /datum/design/fish_genegun name = "Fish Gene Gun" desc = "A device designed to inject or extract traits to and from fish. Also compatible with most aquatic-adjacent creatures." - id = "fish_genegun" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 4, /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 3, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/fish_genegun @@ -1098,7 +1012,6 @@ /datum/design/coffeepot name = "Coffeepot" - id = "coffeepot" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass =SMALL_MATERIAL_AMOUNT*5, /datum/material/plastic =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/reagent_containers/cup/coffeepot @@ -1109,7 +1022,6 @@ /datum/design/coffeepot_bluespace name = "Bluespace Coffeepot" - id = "bluespace_coffeepot" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plastic =SMALL_MATERIAL_AMOUNT*5, /datum/material/bluespace =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/reagent_containers/cup/coffeepot/bluespace @@ -1120,7 +1032,6 @@ /datum/design/coffee_cartridge name = "Blank Coffee Cartridge" - id = "coffee_cartridge" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/blank_coffee_cartridge @@ -1131,7 +1042,6 @@ /datum/design/syrup_bottle name = "Syrup bottle" - id = "syrup_bottle" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/reagent_containers/cup/bottle/syrup_bottle @@ -1142,7 +1052,6 @@ /datum/design/radio_navigation_beacon name = "Compact Radio Navigation Gigabeacon" - id = "gigabeacon" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT) @@ -1154,7 +1063,6 @@ /datum/design/shuttle_rods name = "Shuttle Frame Rods" - id = "shuttlerods" build_type = PROTOLATHE materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/titanium = SMALL_MATERIAL_AMOUNT) build_path = /obj/item/stack/rods/shuttle @@ -1167,7 +1075,6 @@ /datum/design/polymorph_belt name = "Polymorphic Field Inverter" - id = "polymorph_belt" desc = "This device can scan and store DNA from other life forms, and use it to transform its wearer. It requires a Bioscrambler Anomaly Core in order to function." build_type = PROTOLATHE | AWAY_LATHE build_path = /obj/item/polymorph_belt @@ -1183,7 +1090,6 @@ /datum/design/perceptomatrix name = "Perceptomatrix Helm" - id = "perceptomatrix" desc = "This helm harnesses hallucinatory energies to shield its owner from perceptual anomalies. It requires a Hallucination Anomaly Core in order to function." build_type = PROTOLATHE | AWAY_LATHE build_path = /obj/item/clothing/head/helmet/perceptomatrix @@ -1204,7 +1110,6 @@ /datum/design/space_furnace name = "Space Furnace" desc = "A heavy furnace capable of forming a temporary bubble that holds in breathable air. Requires a pyroclastic anomaly core to function." - id = "space_furnace" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT*5, @@ -1220,7 +1125,6 @@ /datum/design/anomalous_fishing_hook name = "Anomalous Fishing Hook" desc = "A fishing hook with a slot for an anomaly core. Depending on the core inserted, it can have various effects on the rod or the fish caught." - id = "anomalous_fishing_hook" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/titanium = SHEET_MATERIAL_AMOUNT, /datum/material/diamond = SHEET_MATERIAL_AMOUNT * 0.2) build_path = /obj/item/fishing_hook/anomaly diff --git a/code/modules/research/designs/power_designs.dm b/code/modules/research/designs/power_designs.dm index cc6fc0df18a6..2efea91a9f40 100644 --- a/code/modules/research/designs/power_designs.dm +++ b/code/modules/research/designs/power_designs.dm @@ -5,7 +5,6 @@ /datum/design/basic_cell name = "Basic Power Cell" desc = "A basic power cell that holds 10 KW of energy." - id = "basic_cell" build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE |MECHFAB materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, /datum/material/glass =SMALL_MATERIAL_AMOUNT * 0.5) build_path = /obj/item/stock_parts/power_store/cell/empty @@ -17,7 +16,6 @@ /datum/design/high_cell name = "High-Capacity Power Cell" desc = "A power cell that holds 100 KW of energy." - id = "high_cell" build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE | MECHFAB materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 0.6) build_path = /obj/item/stock_parts/power_store/cell/high/empty @@ -29,7 +27,6 @@ /datum/design/super_cell name = "Super-Capacity Power Cell" desc = "A power cell that holds 200 KW of energy." - id = "super_cell" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 0.7) build_path = /obj/item/stock_parts/power_store/cell/super/empty @@ -41,7 +38,6 @@ /datum/design/hyper_cell name = "Hyper-Capacity Power Cell" desc = "A power cell that holds 300 KW of energy." - id = "hyper_cell" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 1.5, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 1.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 0.8) build_path = /obj/item/stock_parts/power_store/cell/hyper/empty @@ -53,7 +49,6 @@ /datum/design/bluespace_cell name = "Bluespace Power Cell" desc = "A power cell that holds 400 KW of energy." - id = "bluespace_cell" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 8, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 1.2, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 1.6, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 1.6, /datum/material/titanium =SMALL_MATERIAL_AMOUNT * 3, /datum/material/bluespace =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/stock_parts/power_store/cell/bluespace/empty @@ -65,7 +60,6 @@ /datum/design/basic_battery name = "Basic Megacell" desc = "A basic megacell that holds 1 MJ of energy." - id = "basic_battery" build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE |MECHFAB materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.2, /datum/material/glass =SMALL_MATERIAL_AMOUNT * 2) construction_time = 5 SECONDS @@ -78,7 +72,6 @@ /datum/design/high_battery name = "High-Capacity Megacell" desc = "A megacell that holds 10 MJ of energy." - id = "high_battery" build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE | MECHFAB materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.2, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3) construction_time = 5 SECONDS @@ -91,7 +84,6 @@ /datum/design/super_battery name = "Super-Capacity Megacell" desc = "A megacell that holds 20 MJ of energy." - id = "super_battery" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.2, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 4) construction_time = 5 SECONDS @@ -104,7 +96,6 @@ /datum/design/hyper_battery name = "Hyper-Capacity Megacell" desc = "A megacell that holds 30 MJ of energy." - id = "hyper_battery" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.2, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 1.5, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 1.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5) construction_time = 5 SECONDS @@ -117,7 +108,6 @@ /datum/design/bluespace_battery name = "Bluespace Megacell" desc = "A megacell that holds 40 MJ of energy." - id = "bluespace_battery" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.2, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 1.2, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 6, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 1.6, /datum/material/titanium =SMALL_MATERIAL_AMOUNT * 3, /datum/material/bluespace =SMALL_MATERIAL_AMOUNT) construction_time = 5 SECONDS @@ -131,7 +121,6 @@ /datum/design/inducer name = "Inducer" desc = "The NT-75 Electromagnetic Power Inducer can wirelessly induce electric charge in an object, allowing you to recharge power cells without having to remove them." - id = "inducer" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/inducer/sci @@ -143,7 +132,6 @@ /datum/design/inducerengi name = "Inducer" desc = "The NT-75 Electromagnetic Power Inducer can wirelessly induce electric charge in an object, allowing you to recharge power cells without having to remove them." - id = "inducerengi" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/inducer/empty @@ -155,7 +143,6 @@ /datum/design/board/pacman name = "PACMAN Board" desc = "The circuit board for a PACMAN-type portable generator." - id = "pacman" build_path = /obj/item/circuitboard/machine/pacman category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING @@ -165,7 +152,6 @@ /datum/design/bioelec_gen name = "Aquarium Bioelectricity Kit" desc = "The required components to convert an aquarium into a bioelectricity generator." - id = "bioelec_gen" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/gold = SMALL_MATERIAL_AMOUNT) build_path = /obj/item/aquarium_upgrade/bioelec_gen @@ -177,7 +163,6 @@ /datum/design/turbine_part_compressor name = "Turbine Compressor" desc = "The basic tier of a compressor blade." - id = "turbine_part_compressor" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5) construction_time = 10 SECONDS @@ -190,7 +175,6 @@ /datum/design/turbine_part_rotor name = "Turbine Rotor" desc = "The basic tier of a rotor shaft." - id = "turbine_part_rotor" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5) construction_time = 10 SECONDS @@ -203,7 +187,6 @@ /datum/design/turbine_part_stator name = "Turbine Stator" desc = "The basic tier of a stator." - id = "turbine_part_stator" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*5) construction_time = 10 SECONDS @@ -216,7 +199,6 @@ /datum/design/diode_disk_stamina name = "Electrodisruptive Diode Disk" desc = "A stamina damaging and supermatter crystal healing Diode Disk." - id = "diode_disk_stamina" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 0.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT, /datum/material/gold =SMALL_MATERIAL_AMOUNT) construction_time = 0.5 SECONDS @@ -229,7 +211,6 @@ /datum/design/diode_disk_healing name = "Bioregenerative Diode Disk" desc = "A living creature healing Diode Disk." - id = "diode_disk_healing" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 0.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT, /datum/material/silver =SMALL_MATERIAL_AMOUNT) //silver is medical metal. Why? who knows. construction_time = 0.5 SECONDS @@ -242,7 +223,6 @@ /datum/design/diode_disk_incendiary name = "Conflagratory Diode Disk" desc = "A high energy incendiary Diode Disk." - id = "diode_disk_incendiary" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 0.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT, /datum/material/diamond =SMALL_MATERIAL_AMOUNT * 0.5, /datum/material/plasma =SMALL_MATERIAL_AMOUNT * 2) construction_time = 0.5 SECONDS @@ -255,7 +235,6 @@ /datum/design/diode_disk_sanity name = "Psychosiphoning Diode Disk" desc = "An supermatter comforting creature depressing Diode Disk." - id = "diode_disk_sanity" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 0.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT, /datum/material/uranium =SMALL_MATERIAL_AMOUNT * 0.5) //Uranium, the metal of love and warmth (from decay heat). construction_time = 0.5 SECONDS @@ -268,7 +247,6 @@ /datum/design/diode_disk_magnetic name = "Magnetogenerative Diode Disk" desc = "A mol absorbing item attracting Diode Disk." - id = "diode_disk_magnetic" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 0.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT, /datum/material/titanium =SMALL_MATERIAL_AMOUNT * 0.5) construction_time = 0.5 SECONDS diff --git a/code/modules/research/designs/smelting_designs.dm b/code/modules/research/designs/smelting_designs.dm index 2612415b1fcf..55c7b1055bd6 100644 --- a/code/modules/research/designs/smelting_designs.dm +++ b/code/modules/research/designs/smelting_designs.dm @@ -1,6 +1,7 @@ ///////SMELTABLE ALLOYS/////// /datum/design/alloy + abstract_type = /datum/design/alloy build_type = SMELTER | PROTOLATHE | AWAY_LATHE category = list( RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS @@ -11,43 +12,36 @@ /datum/design/alloy/plasteel_alloy name = "Plasteel" - id = "plasteel" materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT, /datum/material/plasma = SHEET_MATERIAL_AMOUNT) build_path = /obj/item/stack/sheet/plasteel /datum/design/alloy/plastitanium name = "Plastitanium" - id = "plastitanium" materials = list(/datum/material/titanium = SHEET_MATERIAL_AMOUNT, /datum/material/plasma = SHEET_MATERIAL_AMOUNT) build_path = /obj/item/stack/sheet/mineral/plastitanium /datum/design/alloy/plaglass name = "Plasma Glass" - id = "plasmaglass" materials = list(/datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = SHEET_MATERIAL_AMOUNT) build_path = /obj/item/stack/sheet/plasmaglass /datum/design/alloy/plasmarglass name = "Reinforced Plasma Glass" - id = "plasmareinforcedglass" materials = list(/datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = SHEET_MATERIAL_AMOUNT) build_path = /obj/item/stack/sheet/plasmarglass /datum/design/alloy/titaniumglass name = "Titanium Glass" - id = "titaniumglass" materials = list(/datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = SHEET_MATERIAL_AMOUNT) build_path = /obj/item/stack/sheet/titaniumglass /datum/design/alloy/plastitaniumglass name = "Plastitanium Glass" - id = "plastitaniumglass" materials = list(/datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = SHEET_MATERIAL_AMOUNT) build_path = /obj/item/stack/sheet/plastitaniumglass /datum/design/alloy/alien name = "Alien Alloy" desc = "A sheet of reverse-engineered alien alloy." - id = "alienalloy" materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, /datum/material/plasma = SHEET_MATERIAL_AMOUNT * 2) build_path = /obj/item/stack/sheet/mineral/abductor diff --git a/code/modules/research/designs/stock_parts_designs.dm b/code/modules/research/designs/stock_parts_designs.dm index 3fc4e0a21bc7..07c527e1b501 100644 --- a/code/modules/research/designs/stock_parts_designs.dm +++ b/code/modules/research/designs/stock_parts_designs.dm @@ -5,7 +5,6 @@ /datum/design/rped name = "Rapid Part Exchange Device" desc = "Special mechanical module made to store, sort, and apply standard machine parts." - id = "rped" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*5, /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5) build_path = /obj/item/storage/part_replacer @@ -17,7 +16,6 @@ /datum/design/bs_rped name = "Bluespace RPED" desc = "Powered by bluespace technology, this RPED variant can upgrade buildings from a distance, without needing to remove the panel first." - id = "bs_rped" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*7.5, /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT*2.5) build_path = /obj/item/storage/part_replacer/bluespace @@ -30,7 +28,6 @@ /datum/design/basic_capacitor name = "Basic Capacitor" desc = "A stock part used in the construction of various devices." - id = "basic_capacitor" build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT, /datum/material/glass =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/stock_parts/capacitor @@ -43,7 +40,6 @@ /datum/design/adv_capacitor name = "Advanced Capacitor" desc = "A stock part used in the construction of various devices." - id = "adv_capacitor" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*1.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT*1.5) build_path = /obj/item/stock_parts/capacitor/adv @@ -56,7 +52,6 @@ /datum/design/super_capacitor name = "Super Capacitor" desc = "A stock part used in the construction of various devices." - id = "super_capacitor" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT * 2, /datum/material/glass =SMALL_MATERIAL_AMOUNT * 2, /datum/material/gold =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/stock_parts/capacitor/super @@ -69,7 +64,6 @@ /datum/design/quadratic_capacitor name = "Quadratic Capacitor" desc = "A stock part used in the construction of various devices." - id = "quadratic_capacitor" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT * 2, /datum/material/glass =SMALL_MATERIAL_AMOUNT * 2, /datum/material/gold =SMALL_MATERIAL_AMOUNT, /datum/material/diamond =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/stock_parts/capacitor/quadratic @@ -83,7 +77,6 @@ /datum/design/basic_scanning name = "Basic Scanning Module" desc = "A stock part used in the construction of various devices." - id = "basic_scanning" build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.5) build_path = /obj/item/stock_parts/scanning_module @@ -96,7 +89,6 @@ /datum/design/adv_scanning name = "Advanced Scanning Module" desc = "A stock part used in the construction of various devices." - id = "adv_scanning" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*1.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/stock_parts/scanning_module/adv @@ -109,7 +101,6 @@ /datum/design/phasic_scanning name = "Phasic Scanning Module" desc = "A stock part used in the construction of various devices." - id = "phasic_scanning" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT * 2, /datum/material/glass = SMALL_MATERIAL_AMOUNT*1.5, /datum/material/silver = SMALL_MATERIAL_AMOUNT*0.6) build_path = /obj/item/stock_parts/scanning_module/phasic @@ -122,7 +113,6 @@ /datum/design/triphasic_scanning name = "Triphasic Scanning Module" desc = "A stock part used in the construction of various devices." - id = "triphasic_scanning" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT * 2, /datum/material/glass =SMALL_MATERIAL_AMOUNT * 2, /datum/material/diamond = SMALL_MATERIAL_AMOUNT*0.3, /datum/material/bluespace = SMALL_MATERIAL_AMOUNT*0.5) build_path = /obj/item/stock_parts/scanning_module/triphasic @@ -136,7 +126,6 @@ /datum/design/micro_servo name = "Micro Servo" desc = "A stock part used in the construction of various devices." - id = "micro_servo" build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/stock_parts/servo @@ -149,7 +138,6 @@ /datum/design/nano_servo name = "Nano Servo" desc = "A stock part used in the construction of various devices." - id = "nano_servo" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*1.5) build_path = /obj/item/stock_parts/servo/nano @@ -162,7 +150,6 @@ /datum/design/pico_servo name = "Pico Servo" desc = "A stock part used in the construction of various devices." - id = "pico_servo" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/stock_parts/servo/pico @@ -175,7 +162,6 @@ /datum/design/femto_servo name = "Femto Servo" desc = "A stock part used in the construction of various devices." - id = "femto_servo" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT * 2, /datum/material/diamond = SMALL_MATERIAL_AMOUNT*0.3, /datum/material/titanium = SMALL_MATERIAL_AMOUNT*0.3) build_path = /obj/item/stock_parts/servo/femto @@ -189,7 +175,6 @@ /datum/design/basic_micro_laser name = "Basic Micro-Laser" desc = "A stock part used in the construction of various devices." - id = "basic_micro_laser" build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.5) build_path = /obj/item/stock_parts/micro_laser @@ -202,7 +187,6 @@ /datum/design/high_micro_laser name = "High-Power Micro-Laser" desc = "A stock part used in the construction of various devices." - id = "high_micro_laser" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*1.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/stock_parts/micro_laser/high @@ -215,7 +199,6 @@ /datum/design/ultra_micro_laser name = "Ultra-High-Power Micro-Laser" desc = "A stock part used in the construction of various devices." - id = "ultra_micro_laser" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT * 2, /datum/material/glass = SMALL_MATERIAL_AMOUNT*1.5, /datum/material/uranium = SMALL_MATERIAL_AMOUNT*0.6) build_path = /obj/item/stock_parts/micro_laser/ultra @@ -228,7 +211,6 @@ /datum/design/quadultra_micro_laser name = "Quad-Ultra Micro-Laser" desc = "A stock part used in the construction of various devices." - id = "quadultra_micro_laser" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT * 2, /datum/material/glass =SMALL_MATERIAL_AMOUNT * 2, /datum/material/uranium =SMALL_MATERIAL_AMOUNT, /datum/material/diamond = SMALL_MATERIAL_AMOUNT*0.6) build_path = /obj/item/stock_parts/micro_laser/quadultra @@ -241,7 +223,6 @@ /datum/design/basic_matter_bin name = "Basic Matter Bin" desc = "A stock part used in the construction of various devices." - id = "basic_matter_bin" build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/stock_parts/matter_bin @@ -254,7 +235,6 @@ /datum/design/adv_matter_bin name = "Advanced Matter Bin" desc = "A stock part used in the construction of various devices." - id = "adv_matter_bin" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*1.5) build_path = /obj/item/stock_parts/matter_bin/adv @@ -267,7 +247,6 @@ /datum/design/super_matter_bin name = "Super Matter Bin" desc = "A stock part used in the construction of various devices." - id = "super_matter_bin" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/stock_parts/matter_bin/super @@ -280,7 +259,6 @@ /datum/design/bluespace_matter_bin name = "Bluespace Matter Bin" desc = "A stock part used in the construction of various devices." - id = "bluespace_matter_bin" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*2.5, /datum/material/diamond =SMALL_MATERIAL_AMOUNT, /datum/material/bluespace =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/stock_parts/matter_bin/bluespace @@ -294,7 +272,6 @@ /datum/design/subspace_ansible name = "Subspace Ansible" desc = "A compact module capable of sensing extradimensional activity." - id = "s_ansible" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT, /datum/material/silver =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/stock_parts/subspace/ansible @@ -306,7 +283,6 @@ /datum/design/hyperwave_filter name = "Hyperwave Filter" desc = "A tiny device capable of filtering and converting super-intense radio waves." - id = "s_filter" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT, /datum/material/silver =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/stock_parts/subspace/filter @@ -318,7 +294,6 @@ /datum/design/subspace_amplifier name = "Subspace Amplifier" desc = "A compact micro-machine capable of amplifying weak subspace transmissions." - id = "s_amplifier" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT, /datum/material/gold =SMALL_MATERIAL_AMOUNT, /datum/material/uranium =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/stock_parts/subspace/amplifier @@ -330,7 +305,6 @@ /datum/design/subspace_treatment name = "Subspace Treatment Disk" desc = "A compact micro-machine capable of stretching out hyper-compressed radio waves." - id = "s_treatment" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT, /datum/material/silver =SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/stock_parts/subspace/treatment @@ -342,7 +316,6 @@ /datum/design/subspace_analyzer name = "Subspace Analyzer" desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths." - id = "s_analyzer" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT, /datum/material/gold =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/stock_parts/subspace/analyzer @@ -354,7 +327,6 @@ /datum/design/subspace_crystal name = "Ansible Crystal" desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths." - id = "s_crystal" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass = SMALL_MATERIAL_AMOUNT*8, /datum/material/silver =SMALL_MATERIAL_AMOUNT, /datum/material/gold =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/stock_parts/subspace/crystal @@ -366,7 +338,6 @@ /datum/design/subspace_transmitter name = "Subspace Transmitter" desc = "A large piece of equipment used to open a window into the subspace dimension." - id = "s_transmitter" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass =SMALL_MATERIAL_AMOUNT, /datum/material/silver =SMALL_MATERIAL_AMOUNT, /datum/material/uranium =SMALL_MATERIAL_AMOUNT) build_path = /obj/item/stock_parts/subspace/transmitter @@ -378,7 +349,6 @@ /datum/design/card_reader name = "Card Reader" desc = "A small magnetic card reader, used for devices that take and transmit holocredits." - id = "c-reader" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*0.5, /datum/material/glass=SMALL_MATERIAL_AMOUNT*0.1) build_path = /obj/item/stock_parts/card_reader @@ -390,7 +360,6 @@ /datum/design/water_recycler name = "Water Recycler" desc = "A small hydrostatic reclaimer, it takes moisture out of the air and returns it back to the source." - id = "w-recycler" build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE materials = list(/datum/material/plastic =SMALL_MATERIAL_AMOUNT * 2, /datum/material/iron =SMALL_MATERIAL_AMOUNT*0.5) build_path = /obj/item/stock_parts/water_recycler diff --git a/code/modules/research/designs/telecomms_designs.dm b/code/modules/research/designs/telecomms_designs.dm index 69655f8adaed..3709890fb9e7 100644 --- a/code/modules/research/designs/telecomms_designs.dm +++ b/code/modules/research/designs/telecomms_designs.dm @@ -5,7 +5,6 @@ /datum/design/board/subspace_receiver name = "Subspace Receiver Board" desc = "Allows for the construction of Subspace Receiver equipment." - id = "s_receiver" build_path = /obj/item/circuitboard/machine/telecomms/receiver category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_TELECOMMS @@ -15,7 +14,6 @@ /datum/design/board/telecomms_bus name = "Bus Mainframe Board" desc = "Allows for the construction of Telecommunications Bus Mainframes." - id = "s_bus" build_path = /obj/item/circuitboard/machine/telecomms/bus category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_TELECOMMS @@ -25,7 +23,6 @@ /datum/design/board/telecomms_hub name = "Hub Mainframe Board" desc = "Allows for the construction of Telecommunications Hub Mainframes." - id = "s_hub" build_path = /obj/item/circuitboard/machine/telecomms/hub category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_TELECOMMS @@ -35,7 +32,6 @@ /datum/design/board/telecomms_relay name = "Relay Mainframe Board" desc = "Allows for the construction of Telecommunications Relay Mainframes." - id = "s_relay" build_path = /obj/item/circuitboard/machine/telecomms/relay category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_TELECOMMS @@ -45,7 +41,6 @@ /datum/design/board/telecomms_processor name = "Processor Unit Board" desc = "Allows for the construction of Telecommunications Processor equipment." - id = "s_processor" build_path = /obj/item/circuitboard/machine/telecomms/processor category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_TELECOMMS @@ -55,7 +50,6 @@ /datum/design/board/telecomms_server name = "Server Mainframe Board" desc = "Allows for the construction of Telecommunications Servers." - id = "s_server" build_path = /obj/item/circuitboard/machine/telecomms/server category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_TELECOMMS @@ -65,7 +59,6 @@ /datum/design/board/telecomms_messaging name = "Messaging Server Board" desc = "Allows for the construction of Telecommunications Messaging Servers." - id = "s_messaging" build_path = /obj/item/circuitboard/machine/telecomms/message_server category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_TELECOMMS @@ -75,7 +68,6 @@ /datum/design/board/subspace_broadcaster name = "Subspace Broadcaster Board" desc = "Allows for the construction of Subspace Broadcasting equipment." - id = "s_broadcaster" build_path = /obj/item/circuitboard/machine/telecomms/broadcaster category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_TELECOMMS diff --git a/code/modules/research/designs/tool_designs.dm b/code/modules/research/designs/tool_designs.dm index 2480a36a2dfe..390e7b7ee37a 100644 --- a/code/modules/research/designs/tool_designs.dm +++ b/code/modules/research/designs/tool_designs.dm @@ -5,7 +5,6 @@ /datum/design/fire_extinguisher_advanced name = "Advanced Fire Extinguisher" - id = "adv_fire_extinguisher" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/titanium =SMALL_MATERIAL_AMOUNT*5, /datum/material/gold =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/extinguisher/advanced/empty @@ -17,7 +16,6 @@ /datum/design/handdrill name = "Hand Drill" desc = "A small electric hand drill with an interchangeable screwdriver and bolt bit" - id = "handdrill" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT*1.75, /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/titanium =SHEET_MATERIAL_AMOUNT*1.25) build_path = /obj/item/screwdriver/power @@ -29,7 +27,6 @@ /datum/design/jawsoflife name = "Jaws of Life" desc = "A small, compact Jaws of Life with an interchangeable pry jaws and cutting jaws" - id = "jawsoflife" // added one more requirment since the Jaws of Life are a bit OP build_path = /obj/item/crowbar/power build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT*2.25, /datum/material/silver =SHEET_MATERIAL_AMOUNT*1.25, /datum/material/titanium =SHEET_MATERIAL_AMOUNT*1.75) @@ -37,12 +34,10 @@ RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED ) departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING - autolathe_exportable = FALSE /datum/design/exwelder name = "Experimental Welding Tool" desc = "An experimental welder capable of self-fuel generation." - id = "exwelder" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/uranium =SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/weldingtool/experimental @@ -54,7 +49,6 @@ /datum/design/rangedanalyzer name = "Experimental Long-range Gas Analyzer" desc = "An experimental gas analyzer capable of operating at long distance" - id = "rangedanalyzer" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.2, /datum/material/gold =SMALL_MATERIAL_AMOUNT * 3, /datum/material/bluespace=SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/analyzer/ranged @@ -65,7 +59,6 @@ /datum/design/rpd name = "Rapid Pipe Dispenser (RPD)" - id = "rpd_loaded" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT*37.5, /datum/material/glass =SHEET_MATERIAL_AMOUNT*18.75) build_path = /obj/item/pipe_dispenser @@ -77,7 +70,6 @@ /datum/design/rcd_loaded name = "Rapid Construction Device" desc = "A tool that can construct and deconstruct walls, airlocks and floors on the fly." - id = "rcd_loaded" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 30, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 15) transfered_materials = list( @@ -92,7 +84,6 @@ /datum/design/rtd_loaded name = "Rapid Tiling Device" desc = "A tool that can lay & destroy floor tiles on the fly." - id = "rtd_loaded" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 15, /datum/material/glass =SHEET_MATERIAL_AMOUNT*1.25) build_path = /obj/item/construction/rtd/loaded @@ -103,7 +94,6 @@ /datum/design/rcd_ammo name = "RCD Matter Cartridge" - id = "rcd_ammo" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron= SHEET_MATERIAL_AMOUNT * 6, /datum/material/glass= SHEET_MATERIAL_AMOUNT * 3) build_path = /obj/item/rcd_ammo @@ -112,10 +102,12 @@ ) departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING +/datum/design/rcd_upgrade + abstract_type = /datum/design/rcd_upgrade + /datum/design/rcd_upgrade/frames name = "RCD frames designs upgrade" desc = "Adds computer and machine frame designs to the RCD." - id = "rcd_upgrade_frames" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass =SHEET_MATERIAL_AMOUNT*1.25, /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/titanium =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/rcd_upgrade/frames @@ -127,7 +119,6 @@ /datum/design/rcd_upgrade/simple_circuits name = "RCD simple circuits designs upgrade" desc = "Adds the ability to produce simple circuits using the RCD." - id = "rcd_upgrade_simple_circuits" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass =SHEET_MATERIAL_AMOUNT*1.25, /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/titanium =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/rcd_upgrade/simple_circuits @@ -139,7 +130,6 @@ /datum/design/rcd_upgrade/anti_interrupt name = "RCD anti disruption designs upgrade" desc = "Prevents interruption of RCD construction and deconstruction." - id = "rcd_upgrade_anti_interrupt" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.5, @@ -156,7 +146,6 @@ /datum/design/rcd_upgrade/cooling name = "RCD cooling upgrade" desc = "Allows the RCD to more quickly perform multiple actions at once." - id = "rcd_upgrade_cooling" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, @@ -172,7 +161,6 @@ /datum/design/rcd_upgrade/furnishing name = "RCD furnishing upgrade" desc = "Adds the ability to furnish areas using the RCD." - id = "rcd_upgrade_furnishing" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass =SHEET_MATERIAL_AMOUNT*1.25, /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/titanium =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/rcd_upgrade/furnishing @@ -184,7 +172,6 @@ /datum/design/rcd_upgrade/silo_link name = "Advanced RCD silo link upgrade" desc = "Upgrades the RCD to be able to pull materials from the ore silo. The RCD must be linked to the silo using a multitool before it will function." - id = "rcd_upgrade_silo_link" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT*1.25, /datum/material/glass =SHEET_MATERIAL_AMOUNT*1.25, /datum/material/silver =SHEET_MATERIAL_AMOUNT*1.25, /datum/material/titanium =SHEET_MATERIAL_AMOUNT*1.25, /datum/material/bluespace =SHEET_MATERIAL_AMOUNT*1.25) build_path = /obj/item/rcd_upgrade/silo_link @@ -193,10 +180,12 @@ ) departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING +/datum/design/rpd_upgrade + abstract_type = /datum/design/rpd_upgrade + /datum/design/rpd_upgrade/unwrench name = "RPD unwrenching upgrade" desc = "Adds reverse wrench mode to the RPD. Attention, due to budget cuts, the mode is hard linked to the destroy mode control button." - id = "rpd_upgrade_unwrench" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass =SHEET_MATERIAL_AMOUNT*1.25) build_path = /obj/item/rpd_upgrade/unwrench @@ -208,7 +197,6 @@ /datum/design/rld_mini name = "Mini Rapid Light Device (MRLD)" desc = "A tool that can deploy portable and standing lighting orbs and glowsticks." - id = "rld_mini" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT*10, /datum/material/glass =SHEET_MATERIAL_AMOUNT*5, /datum/material/plastic =SHEET_MATERIAL_AMOUNT*4, /datum/material/gold =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/construction/rld/mini @@ -220,7 +208,6 @@ /datum/design/geneshears name = "Botanogenetic Plant Shears" desc = "A high tech, high fidelity pair of plant shears, capable of cutting genetic traits out of a plant." - id = "gene_shears" build_path = /obj/item/geneshears build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*2, /datum/material/uranium=HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/silver=SMALL_MATERIAL_AMOUNT*5) @@ -231,7 +218,6 @@ /datum/design/plumbing_rcd_service name = "Service Plumbing Constructor" - id = "plumbing_rcd_service" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT*37.5, /datum/material/glass =SHEET_MATERIAL_AMOUNT*18.75, /datum/material/plastic =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/construction/plumbing/service @@ -242,7 +228,6 @@ /datum/design/biopsy_tool name = "Biopsy Tool" - id = "biopsy_tool" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT*2, /datum/material/glass =SHEET_MATERIAL_AMOUNT*1.5) build_path = /obj/item/biopsy_tool @@ -258,7 +243,6 @@ /datum/design/alienwrench name = "Alien Wrench" desc = "An advanced wrench obtained through Abductor technology." - id = "alien_wrench" build_path = /obj/item/wrench/abductor build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/silver =SHEET_MATERIAL_AMOUNT*1.25, /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/titanium =SHEET_MATERIAL_AMOUNT, /datum/material/diamond =SHEET_MATERIAL_AMOUNT) @@ -270,7 +254,6 @@ /datum/design/alienwirecutters name = "Alien Wirecutters" desc = "Advanced wirecutters obtained through Abductor technology." - id = "alien_wirecutters" build_path = /obj/item/wirecutters/abductor build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/silver =SHEET_MATERIAL_AMOUNT*1.25, /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/titanium =SHEET_MATERIAL_AMOUNT, /datum/material/diamond =SHEET_MATERIAL_AMOUNT) @@ -282,7 +265,6 @@ /datum/design/alienscrewdriver name = "Alien Screwdriver" desc = "An advanced screwdriver obtained through Abductor technology." - id = "alien_screwdriver" build_path = /obj/item/screwdriver/abductor build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/silver =SHEET_MATERIAL_AMOUNT*1.25, /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/titanium =SHEET_MATERIAL_AMOUNT, /datum/material/diamond =SHEET_MATERIAL_AMOUNT) @@ -294,7 +276,6 @@ /datum/design/aliencrowbar name = "Alien Crowbar" desc = "An advanced crowbar obtained through Abductor technology." - id = "alien_crowbar" build_path = /obj/item/crowbar/abductor build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/silver =SHEET_MATERIAL_AMOUNT*1.25, /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/titanium =SHEET_MATERIAL_AMOUNT, /datum/material/diamond =SHEET_MATERIAL_AMOUNT) @@ -306,7 +287,6 @@ /datum/design/alienwelder name = "Alien Welding Tool" desc = "An advanced welding tool obtained through Abductor technology." - id = "alien_welder" build_path = /obj/item/weldingtool/abductor build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/silver =SHEET_MATERIAL_AMOUNT*1.25, /datum/material/plasma =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/titanium =SHEET_MATERIAL_AMOUNT, /datum/material/diamond =SHEET_MATERIAL_AMOUNT) @@ -318,7 +298,6 @@ /datum/design/alienmultitool name = "Alien Multitool" desc = "An advanced multitool obtained through Abductor technology." - id = "alien_multitool" build_path = /obj/item/multitool/abductor build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/silver =SHEET_MATERIAL_AMOUNT*1.25, /datum/material/plasma =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/titanium =SHEET_MATERIAL_AMOUNT, /datum/material/diamond =SHEET_MATERIAL_AMOUNT) @@ -334,7 +313,6 @@ /datum/design/alienscalpel name = "Alien Scalpel" desc = "An advanced scalpel obtained through Abductor technology." - id = "alien_scalpel" build_path = /obj/item/scalpel/alien build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT, /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/plasma =SMALL_MATERIAL_AMOUNT*5, /datum/material/titanium =HALF_SHEET_MATERIAL_AMOUNT * 1.5) @@ -346,7 +324,6 @@ /datum/design/alienhemostat name = "Alien Hemostat" desc = "An advanced hemostat obtained through Abductor technology." - id = "alien_hemostat" build_path = /obj/item/hemostat/alien build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT, /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/plasma =SMALL_MATERIAL_AMOUNT*5, /datum/material/titanium =HALF_SHEET_MATERIAL_AMOUNT * 1.5) @@ -358,7 +335,6 @@ /datum/design/alienretractor name = "Alien Retractor" desc = "An advanced retractor obtained through Abductor technology." - id = "alien_retractor" build_path = /obj/item/retractor/alien build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT, /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/plasma =SMALL_MATERIAL_AMOUNT*5, /datum/material/titanium =HALF_SHEET_MATERIAL_AMOUNT * 1.5) @@ -370,7 +346,6 @@ /datum/design/aliensaw name = "Alien Circular Saw" desc = "An advanced surgical saw obtained through Abductor technology." - id = "alien_saw" build_path = /obj/item/circular_saw/alien build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT*5, /datum/material/silver =SHEET_MATERIAL_AMOUNT*1.25, /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/titanium =HALF_SHEET_MATERIAL_AMOUNT * 1.5) @@ -382,7 +357,6 @@ /datum/design/aliendrill name = "Alien Drill" desc = "An advanced drill obtained through Abductor technology." - id = "alien_drill" build_path = /obj/item/surgicaldrill/alien build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT*5, /datum/material/silver =SHEET_MATERIAL_AMOUNT*1.25, /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/titanium =HALF_SHEET_MATERIAL_AMOUNT * 1.5) @@ -394,7 +368,6 @@ /datum/design/aliencautery name = "Alien Cautery" desc = "An advanced cautery obtained through Abductor technology." - id = "alien_cautery" build_path = /obj/item/cautery/alien build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT, /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/plasma =SMALL_MATERIAL_AMOUNT*5, /datum/material/titanium =HALF_SHEET_MATERIAL_AMOUNT * 1.5) @@ -406,7 +379,6 @@ /datum/design/wirebrush name = "Wirebrush" desc = "A tool to remove rust from walls." - id = "wirebrush" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_TOOLS) materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT * 2, /datum/material/glass =SMALL_MATERIAL_AMOUNT * 2) @@ -420,7 +392,6 @@ /datum/design/bolter_wrench name = "Bolter Wrench" desc = "A wrench that can unbolt airlocks regardless of power status." - id = "bolter_wrench" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/wrench/bolter @@ -432,7 +403,6 @@ /datum/design/shuttle_blueprints name = "Shuttle Blueprints" desc = "Blueprints suitable for constructing shuttles" - id = "shuttle_blueprints" build_type = PROTOLATHE materials = list(/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/shuttle_blueprints @@ -442,7 +412,6 @@ /datum/design/shuttle_remote name = "Shuttle Remote Control" desc = "A remote which can send away or try to dock shuttles once linked to a navigation console." - id = "shuttle_remote" build_type = PROTOLATHE build_path = /obj/item/shuttle_remote materials = list(/datum/material/gold = SHEET_MATERIAL_AMOUNT, /datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/iron = SMALL_MATERIAL_AMOUNT * 2, /datum/material/glass = SMALL_MATERIAL_AMOUNT) diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 5322d0d7e7e3..c2c31e2d4234 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -3,18 +3,15 @@ ///////////////////////////////////////// /datum/design/c38/sec - id = "c38_sec" build_type = PROTOLATHE | AWAY_LATHE category = list( RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO ) departmental_flags = DEPARTMENT_BITFLAG_SECURITY - autolathe_exportable = FALSE //Redundant, there's already an autolathe version. /datum/design/c38_trac name = "Speed Loader (.38 TRAC) (Less Lethal)" desc = "Designed to quickly reload revolvers. TRAC bullets embed a tracking implant within the target's body. The implant's signal is incompatible with teleporters." - id = "c38_trac" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 3, @@ -30,7 +27,6 @@ /datum/design/c38_hotshot name = "Speed Loader (.38 Hot Shot) (Very Lethal)" desc = "Designed to quickly reload revolvers. Hot Shot bullets contain an incendiary payload." - id = "c38_hotshot" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 3, @@ -45,7 +41,6 @@ /datum/design/c38_iceblox name = "Speed Loader (.38 Iceblox) (Lethal/Very Lethal (Lizardpeople))" desc = "Designed to quickly reload revolvers. Iceblox bullets contain a cryogenic payload." - id = "c38_iceblox" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 3, @@ -60,7 +55,6 @@ /datum/design/c38_rubber name = "Speed Loader (.38 Rubber) (Less Lethal)" desc = "Designed to quickly reload revolvers. Rubber bullets are bouncy and less-than-lethal." - id = "c38_rubber" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 3) build_path = /obj/item/ammo_box/speedloader/c38/match/bouncy @@ -72,7 +66,6 @@ /datum/design/c38_true name = "Speedloader (.38 True Strike) (Lethal)" desc = "Designed to quickly reload revolvers. Bullets bounce towards new targets with surprising accuracy and can strike through armored target" - id = "c38_true_strike" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 3, @@ -87,7 +80,6 @@ /datum/design/c38_flare name = "Speedloader (.38 Flare) (VERY Lethal)" desc = "Designed to quickly reload revolvers. Flare casings launch a concentrated particle beam towards a target, lighting them up for everyone to see." - id = "c38_flare" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 3, @@ -105,7 +97,6 @@ desc = "Designed to tactically reload a NT BR-38 Battle Rifle. Less powerful by design, guns chambered in .38 caliber rounds are still quite popular for use by police forces, \ private security firms and organizations unable to access energy-based nonlethal weaponry. The lower (relative) penetrative power is useful for preventing potential hull damage \ aboard space stations and shuttles." - id = "c38_mag" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, @@ -120,7 +111,6 @@ /datum/design/c38_trac_mag name = "Magazine (.38 TRAC) (Less Lethal)" desc = "Designed to tactically reload a NT BR-38 Battle Rifle. TRAC bullets embed a tracking implant within the target's body. The implant's signal is incompatible with teleporters." - id = "c38_trac_mag" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, @@ -137,7 +127,6 @@ /datum/design/c38_hotshot_mag name = "Magazine (.38 Hot Shot) (Very Lethal)" desc = "Designed to tactically reload a NT BR-38 Battle Rifle. Hot Shot bullets contain an incendiary payload." - id = "c38_hotshot_mag" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, @@ -153,7 +142,6 @@ /datum/design/c38_iceblox_mag name = "Magazine (.38 Iceblox) (Lethal/Very Lethal (Lizardpeople))" desc = "Designed to tactically reload a NT BR-38 Battle Rifle. Iceblox bullets contain a cryogenic payload." - id = "c38_iceblox_mag" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, @@ -169,7 +157,6 @@ /datum/design/c38_rubber_mag name = "Magazine (.38 Rubber) (Less Lethal)" desc = "Designed to tactically reload a NT BR-38 Battle Rifle. Rubber bullets are bouncy and less-than-lethal." - id = "c38_rubber_mag" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, @@ -184,7 +171,6 @@ /datum/design/c38_true_mag name = "Magazine (.38 True Strike) (Lethal)" desc = "Designed to tactically reload a NT BR-38 Battle Rifle. Bullets bounce towards new targets with surprising accuracy and can strike through armored target" - id = "c38_true_strike_mag" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, @@ -200,7 +186,6 @@ /datum/design/c38_flare_mag name = "Magazine (.38 Flare) (VERY Lethal)" desc = "Designed to tactically reload a NT BR-38 Battle Rifle. Flare casings launch a concentrated particle beam towards a target, lighting them up for everyone to see." - id = "c38_flare_mag" build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, @@ -216,27 +201,22 @@ departmental_flags = DEPARTMENT_BITFLAG_SECURITY /datum/design/rubbershot/sec - id = "sec_rshot" desc = "Rubbershot shotgun shells. Fires a cloud of pellets. Rubber bullets are bouncy and less-than-lethal." build_type = PROTOLATHE | AWAY_LATHE category = list( RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO ) departmental_flags = DEPARTMENT_BITFLAG_SECURITY - autolathe_exportable = FALSE //Redundant /datum/design/beanbag_slug/sec - id = "sec_beanbag_slug" desc = "Beanbag slug shotgun shells. Fires a single slug (a beanbag). Less-than-lethal." build_type = PROTOLATHE | AWAY_LATHE category = list( RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO ) departmental_flags = DEPARTMENT_BITFLAG_SECURITY - autolathe_exportable = FALSE /datum/design/shotgun_dart/sec - id = "sec_dart" desc = "Dart shotgun shells. Fires a single projectile (a dart). Can be filled with chemicals, \ which it injects upon striking a target. Otherwise, very weak." build_type = PROTOLATHE | AWAY_LATHE @@ -244,10 +224,8 @@ RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO ) departmental_flags = DEPARTMENT_BITFLAG_SECURITY - autolathe_exportable = FALSE /datum/design/incendiary_slug/sec - id = "sec_Islug" desc = "Dart shotgun shells. Fires a single slug. Ignites a target upon hit, \ and leaves a trail of fire as it flies through the air. Very user unfriendly, but effective." build_type = PROTOLATHE | AWAY_LATHE @@ -255,12 +233,10 @@ RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO ) departmental_flags = DEPARTMENT_BITFLAG_SECURITY - autolathe_exportable = FALSE /datum/design/mag_autorifle name = "WT-550 Autorifle Magazine (4.6x30mm) (Lethal)" desc = "A 20 round magazine for the out of date WT-550 Autorifle." - id = "mag_autorifle" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2) build_path = /obj/item/ammo_box/magazine/wt550m9 @@ -272,7 +248,6 @@ /datum/design/mag_autorifle/ap_mag name = "WT-550 Autorifle Armour Piercing Magazine (4.6x30mm AP) (Lethal)" desc = "A 20 round armour piercing magazine for the out of date WT-550 Autorifle." - id = "mag_autorifle_ap" materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 3, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 6) build_path = /obj/item/ammo_box/magazine/wt550m9/wtap departmental_flags = DEPARTMENT_BITFLAG_SECURITY @@ -280,7 +255,6 @@ /datum/design/mag_autorifle/ic_mag name = "WT-550 Autorifle Incendiary Magazine (4.6x30mm IC) (Lethal/Highly Destructive)" desc = "A 20 round armour piercing magazine for the out of date WT-550 Autorifle." - id = "mag_autorifle_ic" materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 3, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 6, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/ammo_box/magazine/wt550m9/wtic departmental_flags = DEPARTMENT_BITFLAG_SECURITY @@ -288,7 +262,6 @@ /datum/design/pin_testing name = "Test-Range Firing Pin" desc = "This safety firing pin allows firearms to be operated within proximity to a firing range." - id = "pin_testing" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT * 3) build_path = /obj/item/firing_pin/test_range @@ -300,7 +273,6 @@ /datum/design/pin_mindshield name = "Mindshield Firing Pin" desc = "This is a security firing pin which only authorizes users who are mindshield-implanted." - id = "pin_loyalty" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/silver = SMALL_MATERIAL_AMOUNT * 6, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 6, /datum/material/uranium =SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/firing_pin/implant/mindshield @@ -312,7 +284,6 @@ /datum/design/pin_explorer name = "Outback Firing Pin" desc = "This firing pin only shoots while ya ain't on station, fair dinkum!" - id = "pin_explorer" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/iron =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/firing_pin/explorer @@ -324,7 +295,6 @@ /datum/design/stunrevolver name = "Tesla Cannon Part Kit (Lethal)" desc = "The kit for a high-tech cannon that fires internal, reusable bolt cartridges in a revolving cylinder. The cartridges can be recharged using conventional rechargers." - id = "stunrevolver" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 5, /datum/material/silver = SHEET_MATERIAL_AMOUNT * 5) build_path = /obj/item/weaponcrafting/gunkit/tesla @@ -332,12 +302,10 @@ RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_KITS ) departmental_flags = DEPARTMENT_BITFLAG_SECURITY - autolathe_exportable = FALSE /datum/design/nuclear_gun name = "Advanced Energy Gun Part Kit (Lethal/Nonlethal)" desc = "The kit for an energy gun with an experimental miniaturized reactor." - id = "nuclear_gun" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, /datum/material/glass =SHEET_MATERIAL_AMOUNT, /datum/material/uranium =SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/titanium =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/weaponcrafting/gunkit/nuclear @@ -345,12 +313,10 @@ RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_KITS ) departmental_flags = DEPARTMENT_BITFLAG_SECURITY - autolathe_exportable = FALSE /datum/design/tele_shield name = "Telescopic Riot Shield" desc = "An advanced riot shield made of lightweight materials that collapses for easy storage." - id = "tele_shield" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, /datum/material/silver =SMALL_MATERIAL_AMOUNT * 3, /datum/material/titanium =SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/shield/riot/tele @@ -358,12 +324,10 @@ RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_MELEE ) departmental_flags = DEPARTMENT_BITFLAG_SECURITY - autolathe_exportable = FALSE /datum/design/ballistic_shield name = "Ballistic Shield" desc = "A heavy shield designed for blocking projectiles, weaker to melee." - id = "ballistic_shield" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, /datum/material/titanium =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/shield/ballistic @@ -371,12 +335,10 @@ RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_MELEE ) departmental_flags = DEPARTMENT_BITFLAG_SECURITY - autolathe_exportable = FALSE /datum/design/beamrifle name = "Event Horizon Anti-Existential Beam Rifle Part Kit (DOOMSDAY DEVICE)" desc = "The kit that produces a weapon made to end your foes on an existential level. Why the fuck can you make this?" - id = "beamrifle" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/diamond =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/uranium = SHEET_MATERIAL_AMOUNT * 4, /datum/material/silver = SHEET_MATERIAL_AMOUNT * 2.25, /datum/material/gold =SHEET_MATERIAL_AMOUNT * 2.5) build_path = /obj/item/weaponcrafting/gunkit/beam_rifle @@ -384,12 +346,10 @@ RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_KITS ) departmental_flags = DEPARTMENT_BITFLAG_SECURITY - autolathe_exportable = FALSE /datum/design/rapidsyringe name = "Rapid Syringe Gun" desc = "A gun that fires many syringes." - id = "rapidsyringe" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/gun/syringe/rapidsyringe @@ -401,7 +361,6 @@ /datum/design/temp_gun name = "Temperature Gun Part Kit (Less Lethal/Very Lethal (Lizardpeople))" desc = "A gun that shoots temperature bullet energythings to change temperature."//Change it if you want - id = "temp_gun" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, /datum/material/silver = SHEET_MATERIAL_AMOUNT * 1.5) build_path = /obj/item/weaponcrafting/gunkit/temperature @@ -409,12 +368,10 @@ RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_KITS ) departmental_flags = DEPARTMENT_BITFLAG_SECURITY - autolathe_exportable = FALSE /datum/design/flora_gun name = "Floral Somatoray" desc = "A tool that discharges controlled radiation which induces mutation in plant cells. Harmless to other organic life." - id = "flora_gun" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, /datum/material/uranium =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/gun/energy/floragun @@ -426,7 +383,6 @@ /datum/design/large_grenade name = "Large Grenade Casing" desc = "A grenade that affects a larger area and use larger containers." - id = "large_grenade" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.5) build_path = /obj/item/grenade/chem_grenade/large @@ -438,7 +394,6 @@ /datum/design/pyro_grenade name = "Pyro Grenade Casing" desc = "An advanced grenade that is able to self ignite its mixture." - id = "pyro_grenade" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT, /datum/material/plasma =SMALL_MATERIAL_AMOUNT * 5) build_path = /obj/item/grenade/chem_grenade/pyro @@ -450,7 +405,6 @@ /datum/design/cryo_grenade name = "Cryo Grenade Casing" desc = "An advanced grenade that rapidly cools its contents upon detonation." - id = "cryo_grenade" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 5) build_path = /obj/item/grenade/chem_grenade/cryo @@ -462,7 +416,6 @@ /datum/design/adv_grenade name = "Advanced Release Grenade Casing" desc = "An advanced grenade that can be detonated several times, best used with a repeating igniter." - id = "adv_grenade" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5) build_path = /obj/item/grenade/chem_grenade/adv_release @@ -474,7 +427,6 @@ /datum/design/xray name = "X-ray Laser Gun Part Kit (Lethal)" desc = "Not quite as menacing as it sounds" - id = "xray_laser" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/gold =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/uranium = SHEET_MATERIAL_AMOUNT * 2, /datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/titanium =SHEET_MATERIAL_AMOUNT, /datum/material/bluespace =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/weaponcrafting/gunkit/xray @@ -482,12 +434,10 @@ RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_KITS ) departmental_flags = DEPARTMENT_BITFLAG_SECURITY - autolathe_exportable = FALSE /datum/design/ioncarbine name = "Ion Carbine Part Kit (Nonlethal/Highly Destructive/Lethal (Silicons))" desc = "How to Dismantle a Cyborg: The Gun." - id = "ioncarbine" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/silver = SHEET_MATERIAL_AMOUNT * 3, /datum/material/iron = SHEET_MATERIAL_AMOUNT * 4, /datum/material/uranium =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/weaponcrafting/gunkit/ion @@ -495,12 +445,10 @@ RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_KITS ) departmental_flags = DEPARTMENT_BITFLAG_SECURITY - autolathe_exportable = FALSE /datum/design/wormhole_projector name = "Bluespace Wormhole Projector" desc = "A projector that emits high density quantum-coupled bluespace beams. Requires a bluespace anomaly core to function." - id = "wormholeprojector" build_type = PROTOLATHE materials = list(/datum/material/silver =SHEET_MATERIAL_AMOUNT, /datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/diamond =SHEET_MATERIAL_AMOUNT, /datum/material/bluespace =SHEET_MATERIAL_AMOUNT * 1.5) build_path = /obj/item/gun/energy/wormhole_projector @@ -514,7 +462,6 @@ desc = "A high-tech shotgun shell which houses an internal capacitor and laser focusing crystal inside of a shell casing. \ Able to be fired from conventional ballistic shotguns with minimal rifling degradation. Also leaves most targets covered \ in grotesque burns." - id = "lasershell" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/ammo_casing/shotgun/scatterlaser @@ -527,7 +474,6 @@ name = "Unloaded Technological Shotshell" desc = "A high-tech shotgun shell which can be crafted into more advanced shells to produce unique effects. \ Does nothing on its own." - id = "techshotshell" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/ammo_casing/shotgun/techshell @@ -540,7 +486,6 @@ name = "Flechette Shotgun Shell (Lethal)" desc = "A shotgun casing filled with small metal darts. Pokes many tiny holes into meat and kevlar alike. Useful for turning someone's insides \ into outsides." - id = "flechetteshell" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/ammo_casing/shotgun/flechette @@ -553,7 +498,6 @@ name = "Donk Co. 'Donk Spike' Flechette Shotgun Shell (Lethal)" desc = "A shotgun casing filled with small plastic darts. That's right, plastic. Do you really think plastic is that scary? Sure, it would hurt to be \ shot by this, but is it really going to do that much damage? You decide, pal, I'm not your mother. I'm just a computer." - id = "donkshell" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3, /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/ammo_casing/shotgun/flechette/donk @@ -565,7 +509,6 @@ /datum/design/tear_gas_40mm name = "40mm Tear Gas Grenade Shell (Less Lethal)" desc = "Looking to stop a riot or put down those damn space hippies in their beat up space caravan? We've got the grenade for you!" - id = "tear_gas_shell" build_type = AUTOLATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3, /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/ammo_casing/a40mm/tear_gas @@ -576,7 +519,6 @@ /datum/design/rubber_40mm name = "40mm Rubber Shell (Less Lethal)" desc = "Launch a rubber puck straight into an assistant's head at high velocities today!" - id = "rubber_puck_shell" build_type = AUTOLATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3, /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 2) build_path = /obj/item/ammo_casing/a40mm/rubber @@ -587,7 +529,6 @@ /datum/design/suppressor name = "Suppressor" desc = "A reverse-engineered suppressor that fits on most small arms with threaded barrels." - id = "suppressor" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT, /datum/material/silver =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/suppressor @@ -599,7 +540,6 @@ /datum/design/gravitygun name = "One-point Gravitational Manipulator" desc = "A multi-mode device that blasts one-point bluespace-gravitational bolts that locally distort gravity. Requires a gravitational anomaly core to function." - id = "gravitygun" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/silver = SHEET_MATERIAL_AMOUNT * 4, /datum/material/uranium = SHEET_MATERIAL_AMOUNT * 4, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 6, /datum/material/iron = SHEET_MATERIAL_AMOUNT * 6, /datum/material/diamond =SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/bluespace =SHEET_MATERIAL_AMOUNT * 1.5) build_path = /obj/item/gun/energy/gravity_gun @@ -611,7 +551,6 @@ /datum/design/largecrossbow name = "Energy Crossbow Part Kit (Less Lethal/Contraband)" desc = "A kit to reverse-engineer a proto-kinetic accelerator into an energy crossbow, favored by syndicate infiltration teams and carp hunters." - id = "largecrossbow" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/uranium =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT * 1.5) build_path = /obj/item/weaponcrafting/gunkit/ebow @@ -619,12 +558,10 @@ RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_KITS ) departmental_flags = DEPARTMENT_BITFLAG_SECURITY - autolathe_exportable = FALSE /datum/design/cleric_mace name = "Cleric Mace" desc = "A mace fit for a cleric. Useful for bypassing plate armor, but too bulky for much else." - id = "cleric_mace" build_type = AUTOLATHE materials = list(/datum/material_slot/weapon_head = SHEET_MATERIAL_AMOUNT * 4.5, /datum/material_slot/handle = SHEET_MATERIAL_AMOUNT * 1.5) build_path = /obj/item/melee/cleric_mace @@ -633,7 +570,6 @@ /datum/design/liberator_gun name = "The Liberator" desc = "A dirt cheap 3D printed gun. Only holds one bullet, and is infamous for sometimes exploding on it's user." - id = "liberator_gun" build_type = AUTOLATHE materials = list(/datum/material/plastic = SHEET_MATERIAL_AMOUNT * 2, /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.5) build_path = /obj/item/gun/ballistic/automatic/pistol/doohickey @@ -642,7 +578,6 @@ /datum/design/stun_boomerang name = "OZtek Boomerang" desc = "Uses reverse flow gravitodynamics to flip its personal gravity back to the thrower mid-flight. Also functions similar to a stun baton." - id = "stun_boomerang" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, /datum/material/silver = SHEET_MATERIAL_AMOUNT * 5, /datum/material/gold =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/melee/baton/security/boomerang @@ -654,7 +589,6 @@ /datum/design/photon_cannon name = "Photon Cannon Part Kit (Nonlethal)" desc = "A kit to reverse-engineer a photon cannon, a weapon that generates a shortly-lived miniature sun. Technically brightens up the room, effectively blinds everyone in it. Requires a flux anomaly core to finish." - id = "photon_cannon" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 3, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 7, /datum/material/gold = SHEET_MATERIAL_AMOUNT * 5) build_path = /obj/item/weaponcrafting/gunkit/photon diff --git a/code/modules/research/designs/wiremod/_core_designs.dm b/code/modules/research/designs/wiremod/_core_designs.dm index 7a87b8d5c3a8..58620f05f6e2 100644 --- a/code/modules/research/designs/wiremod/_core_designs.dm +++ b/code/modules/research/designs/wiremod/_core_designs.dm @@ -1,7 +1,6 @@ /datum/design/integrated_circuit name = "Integrated Circuit" desc = "The foundation of all circuits. All Circuitry go onto this." - id = "integrated_circuit" build_path = /obj/item/integrated_circuit build_type = COMPONENT_PRINTER category = list( @@ -13,7 +12,6 @@ /datum/design/circuit_multitool name = "Circuit Multitool" desc = "A circuit multitool to mark entities and load them into." - id = "circuit_multitool" build_path = /obj/item/multitool/circuit build_type = COMPONENT_PRINTER category = list( @@ -25,7 +23,6 @@ /datum/design/usb_cable name = "USB Cable" desc = "A cable that allows certain shells to connect to nearby computers and machines." - id = "usb_cable" build_path = /obj/item/usb_cable build_type = COMPONENT_PRINTER category = list( @@ -36,7 +33,7 @@ departmental_flags = DEPARTMENT_BITFLAG_SCIENCE /datum/design/component - name = "Component ( NULL ENTRY )" + abstract_type = /datum/design/component desc = "A component that goes into an integrated circuit." build_type = COMPONENT_PRINTER materials = list(/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT) @@ -53,7 +50,6 @@ /datum/design/component/module name = "Module Component" - id = "comp_module" build_path = /obj/item/circuit_component/module category = list( //This one is just a wrapper to make things a bit tidier so it doesn't belong in any specific subcategory diff --git a/code/modules/research/designs/wiremod/action_designs.dm b/code/modules/research/designs/wiremod/action_designs.dm index 17b44e4963c3..3ee149d3ca10 100644 --- a/code/modules/research/designs/wiremod/action_designs.dm +++ b/code/modules/research/designs/wiremod/action_designs.dm @@ -1,49 +1,41 @@ /datum/design/component/action + abstract_type = /datum/design/component/action category = list( RND_CATEGORY_CIRCUITRY_COMPS + RND_SUBCATEGORY_CIRCUITRY_ACTION_COMPONENTS ) /datum/design/component/action/speech name = "Speech Component" - id = "comp_speech" build_path = /obj/item/circuit_component/speech /datum/design/component/action/laserpointer name = "Laser Pointer Component" - id = "comp_laserpointer" build_path = /obj/item/circuit_component/laserpointer /datum/design/component/action/pull name = "Pull Component" - id = "comp_pull" build_path = /obj/item/circuit_component/pull /datum/design/component/action/soundemitter name = "Sound Emitter Component" - id = "comp_soundemitter" build_path = /obj/item/circuit_component/soundemitter /datum/design/component/action/equipment_action name = "Equipment Action Component" - id = "comp_equip_action" build_path = /obj/item/circuit_component/equipment_action /datum/design/component/action/radio name = "Radio Component" - id = "comp_radio" build_path = /obj/item/circuit_component/radio /datum/design/component/action/mmi name = "MMI Component" - id = "comp_mmi" build_path = /obj/item/circuit_component/mmi /datum/design/component/action/pathfind name = "Pathfinder" - id = "comp_pathfind" build_path = /obj/item/circuit_component/pathfind /datum/design/component/action/light name = "Light Component" - id = "comp_light" build_path = /obj/item/circuit_component/light diff --git a/code/modules/research/designs/wiremod/bci_designs.dm b/code/modules/research/designs/wiremod/bci_designs.dm index 81a9581eaf7a..832a8fd77008 100644 --- a/code/modules/research/designs/wiremod/bci_designs.dm +++ b/code/modules/research/designs/wiremod/bci_designs.dm @@ -1,49 +1,41 @@ /datum/design/component/bci + abstract_type = /datum/design/component/bci category = list( RND_CATEGORY_CIRCUITRY_COMPS + RND_SUBCATEGORY_CIRCUITRY_BCI_COMPONENTS ) /datum/design/component/bci/bci_camera name = "BCI Camera" - id = "comp_camera_bci" build_path = /obj/item/circuit_component/remotecam/bci /datum/design/component/bci/object_overlay name = "Object Overlay Component" - id = "comp_object_overlay" build_path = /obj/item/circuit_component/object_overlay /datum/design/component/bci/bar_overlay name = "Bar Overlay Component" - id = "comp_bar_overlay" build_path = /obj/item/circuit_component/object_overlay/bar /datum/design/component/bci/vox name = "VOX Announcement Component" - id = "comp_vox" build_path = /obj/item/circuit_component/vox /datum/design/component/bci/thought_listener name = "Thought Listener Component" - id = "comp_thought_listener" build_path = /obj/item/circuit_component/thought_listener /datum/design/component/bci/target_intercept name = "BCI Target Interceptor" - id = "comp_target_intercept" build_path = /obj/item/circuit_component/target_intercept /datum/design/component/bci/counter_overlay name = "Counter Overlay Component" - id = "comp_counter_overlay" build_path = /obj/item/circuit_component/counter_overlay /datum/design/component/bci/reagent_injector name = "Reagent Injector Component" - id = "comp_reagent_injector" build_path = /obj/item/circuit_component/reagent_injector /datum/design/component/bci/install_detector name = "Install Detector Component" - id = "comp_install_detector" build_path = /obj/item/circuit_component/install_detector diff --git a/code/modules/research/designs/wiremod/comm_designs.dm b/code/modules/research/designs/wiremod/comm_designs.dm index 5b3606ea6259..c1271feefb26 100644 --- a/code/modules/research/designs/wiremod/comm_designs.dm +++ b/code/modules/research/designs/wiremod/comm_designs.dm @@ -1,6 +1,5 @@ /datum/design/component/ntnet_receive name = "NTNet Receiver" - id = "comp_ntnet_receive" build_path = /obj/item/circuit_component/ntnet_receive category = list( RND_CATEGORY_CIRCUITRY_COMPS + RND_SUBGATEGORY_CIRCUITRY_COMM_COMPONENTS @@ -8,7 +7,6 @@ /datum/design/component/ntnet_send name = "NTNet Transmitter" - id = "comp_ntnet_send" build_path = /obj/item/circuit_component/ntnet_send category = list( RND_CATEGORY_CIRCUITRY_COMPS + RND_SUBGATEGORY_CIRCUITRY_COMM_COMPONENTS @@ -16,7 +14,6 @@ /datum/design/component/list/literal/ntnet_send name = "NTNet Transmitter List Literal" - id = "comp_ntnet_send_list_literal" build_path = /obj/item/circuit_component/list_literal/ntnet_send category = list( RND_CATEGORY_CIRCUITRY_COMPS + RND_SUBGATEGORY_CIRCUITRY_COMM_COMPONENTS @@ -24,7 +21,6 @@ /datum/design/component/nfc_send name = "NFC Transmitter" - id = "comp_nfc_send" build_path = /obj/item/circuit_component/nfc_send category = list( RND_CATEGORY_CIRCUITRY_COMPS + RND_SUBGATEGORY_CIRCUITRY_COMM_COMPONENTS @@ -32,7 +28,6 @@ /datum/design/component/nfc_receive name = "NFC Receiver" - id = "comp_nfc_receive" build_path = /obj/item/circuit_component/nfc_receive category = list( RND_CATEGORY_CIRCUITRY_COMPS + RND_SUBGATEGORY_CIRCUITRY_COMM_COMPONENTS @@ -40,7 +35,6 @@ /datum/design/component/wirenet_receive name = "Wirenet Receiver Component" - id = "comp_wirenet_receive" build_path = /obj/item/circuit_component/wirenet_receive category = list( RND_CATEGORY_CIRCUITRY_COMPS + RND_SUBGATEGORY_CIRCUITRY_COMM_COMPONENTS @@ -48,7 +42,6 @@ /datum/design/component/wirenet_send name = "Wirenet Transmitter Component" - id = "comp_wirenet_send" build_path = /obj/item/circuit_component/wirenet_send category = list( RND_CATEGORY_CIRCUITRY_COMPS + RND_SUBGATEGORY_CIRCUITRY_COMM_COMPONENTS @@ -56,7 +49,6 @@ /datum/design/component/wirenet_send_literal name = "Wirenet List Literal Transmitter Component" - id = "comp_wirenet_send_literal" build_path = /obj/item/circuit_component/list_literal/wirenet_send category = list( RND_CATEGORY_CIRCUITRY_COMPS + RND_SUBGATEGORY_CIRCUITRY_COMM_COMPONENTS diff --git a/code/modules/research/designs/wiremod/entity_designs.dm b/code/modules/research/designs/wiremod/entity_designs.dm index cc32f3797989..112747915f44 100644 --- a/code/modules/research/designs/wiremod/entity_designs.dm +++ b/code/modules/research/designs/wiremod/entity_designs.dm @@ -1,54 +1,45 @@ /datum/design/component/entity + abstract_type = /datum/design/component/entity category = list( RND_CATEGORY_CIRCUITRY_COMPS + RND_SUBCATEGORY_CIRCUITRY_ENTITY_COMPONENTS ) /datum/design/component/entity/species name = "Get Species Component" - id = "comp_species" build_path = /obj/item/circuit_component/species /datum/design/component/entity/hear name = "Voice Activator Component" - id = "comp_hear" build_path = /obj/item/circuit_component/hear /datum/design/component/entity/self name = "Self Component" - id = "comp_self" build_path = /obj/item/circuit_component/self /datum/design/component/entity/gps name = "GPS Component" - id = "comp_gps" build_path = /obj/item/circuit_component/gps /datum/design/component/entity/direction name = "Direction Component" - id = "comp_direction" build_path = /obj/item/circuit_component/direction /datum/design/component/entity/reagentscanner name = "Reagents Scanner" - id = "comp_reagents" build_path = /obj/item/circuit_component/reagentscanner /datum/design/component/entity/health name = "Health Component" - id = "comp_health" build_path = /obj/item/circuit_component/health /datum/design/component/entity/compare_health_state name = "Compare Health State Component" - id = "comp_health_state" build_path = /obj/item/circuit_component/compare/health_state /datum/design/component/entity/matscanner name = "Material Scanner" - id = "comp_matscanner" build_path = /obj/item/circuit_component/matscanner /datum/design/component/entity/pinpointer name = "Proximity Pinpointer Component" - id = "comp_pinpointer" build_path = /obj/item/circuit_component/pinpointer diff --git a/code/modules/research/designs/wiremod/id_designs.dm b/code/modules/research/designs/wiremod/id_designs.dm index 9d8934f10db4..2706606500bb 100644 --- a/code/modules/research/designs/wiremod/id_designs.dm +++ b/code/modules/research/designs/wiremod/id_designs.dm @@ -1,6 +1,5 @@ /datum/design/component/id_getter name = "ID Getter Component" - id = "comp_id_getter" build_path = /obj/item/circuit_component/id_getter category = list( RND_CATEGORY_CIRCUITRY_COMPS + RND_SUBCATEGORY_CIRCUITRY_ID_COMPONENTS @@ -8,7 +7,6 @@ /datum/design/component/id_info_reader name = "ID Info Reader Component" - id = "comp_id_info_reader" build_path = /obj/item/circuit_component/id_info_reader category = list( RND_CATEGORY_CIRCUITRY_COMPS + RND_SUBCATEGORY_CIRCUITRY_ID_COMPONENTS @@ -16,7 +14,6 @@ /datum/design/component/id_access_reader name = "ID Access Reader Component" - id = "comp_id_access_reader" build_path = /obj/item/circuit_component/id_access_reader category = list( RND_CATEGORY_CIRCUITRY_COMPS + RND_SUBCATEGORY_CIRCUITRY_ID_COMPONENTS @@ -24,7 +21,6 @@ /datum/design/component/access_checker name = "Access Checker Component" - id = "comp_access_checker" build_path = /obj/item/circuit_component/compare/access category = list( RND_CATEGORY_CIRCUITRY_COMPS + RND_SUBCATEGORY_CIRCUITRY_ID_COMPONENTS diff --git a/code/modules/research/designs/wiremod/list_designs.dm b/code/modules/research/designs/wiremod/list_designs.dm index 749ed07781d4..5919d596dbaf 100644 --- a/code/modules/research/designs/wiremod/list_designs.dm +++ b/code/modules/research/designs/wiremod/list_designs.dm @@ -1,109 +1,89 @@ /datum/design/component/list + abstract_type = /datum/design/component/list category = list( RND_CATEGORY_CIRCUITRY_COMPS + RND_SUBCATEGORY_CIRCUITRY_LIST_COMPONENTS ) /datum/design/component/list/format name = "Format List Component" - id = "comp_format" build_path = /obj/item/circuit_component/format /datum/design/component/list/format_assoc name = "Format Associative List Component" - id = "comp_format_assoc" build_path = /obj/item/circuit_component/format/assoc /datum/design/component/list/index name = "Index Component" - id = "comp_index" build_path = /obj/item/circuit_component/index /datum/design/component/list/index_assoc name = "Index Associative List Component" - id = "comp_index_assoc" build_path = /obj/item/circuit_component/index/assoc_string /datum/design/component/list/index_table name = "Index Table Component" - id = "comp_index_table" build_path = /obj/item/circuit_component/index_table /datum/design/component/list/get_column name = "Get Column Component" - id = "comp_get_column" build_path = /obj/item/circuit_component/get_column /datum/design/component/list/select_query name = "Select Query Component" - id = "comp_select_query" build_path = /obj/item/circuit_component/select /datum/design/component/list/concat name = "Concatenate List Component" - id = "comp_concat_list" build_path = /obj/item/circuit_component/concat_list /datum/design/component/list/add name = "List Add" - id = "comp_list_add" build_path = /obj/item/circuit_component/variable/list/listadd /datum/design/component/list/remove name = "List Remove" - id = "comp_list_remove" build_path = /obj/item/circuit_component/variable/list/listremove /datum/design/component/list/assoc_list_set name = "Associative List Set" - id = "comp_assoc_list_set" build_path = /obj/item/circuit_component/variable/assoc_list/list_set /datum/design/component/list/assoc_list_remove name = "Associative List Remove" - id = "comp_assoc_list_remove" build_path = /obj/item/circuit_component/variable/assoc_list/list_remove /datum/design/component/list/clear name = "List Clear" - id = "comp_list_clear" build_path = /obj/item/circuit_component/variable/list/listclear /datum/design/component/list/find name = "Element Find" - id = "comp_element_find" build_path = /obj/item/circuit_component/listin /datum/design/component/list/literal name = "List Literal Component" - id = "comp_list_literal" build_path = /obj/item/circuit_component/list_literal /datum/design/component/list/assoc_literal name = "Associative List Literal" - id = "comp_list_assoc_literal" build_path = /obj/item/circuit_component/assoc_literal /datum/design/component/list/filter name = "Filter List Component" - id = "comp_filter_list" build_path = /obj/item/circuit_component/filter_list /datum/design/component/list/pick name = "List Pick Component" - id = "comp_list_pick" build_path = /obj/item/circuit_component/list_pick /datum/design/component/list/pick_assoc name = "Associative List Pick Component" - id = "comp_assoc_list_pick" build_path = /obj/item/circuit_component/list_pick/assoc /datum/design/component/list/foreach name = "For Each Component" - id = "comp_foreach" build_path = /obj/item/circuit_component/foreach /datum/design/component/list/split name = "Split Component" - id = "comp_split" build_path = /obj/item/circuit_component/split diff --git a/code/modules/research/designs/wiremod/math_designs.dm b/code/modules/research/designs/wiremod/math_designs.dm index 954c7cf35e33..a5bf6091250a 100644 --- a/code/modules/research/designs/wiremod/math_designs.dm +++ b/code/modules/research/designs/wiremod/math_designs.dm @@ -1,59 +1,49 @@ /datum/design/component/math + abstract_type = /datum/design/component/math category = list( RND_CATEGORY_CIRCUITRY_COMPS + RND_SUBCATEGORY_CIRCUITRY_MATH_COMPONENTS ) /datum/design/component/math/arithmetic name = "Arithmetic Component" - id = "comp_arithmetic" build_path = /obj/item/circuit_component/arithmetic /datum/design/component/math/trigonometry name = "Trigonometry Component" - id = "comp_trigonometry" build_path = /obj/item/circuit_component/trigonometry /datum/design/component/math/arctan2 name = "Arctangent 2 Component" - id = "comp_arctan2" build_path = /obj/item/circuit_component/arctan2 /datum/design/component/math/comparison name = "Comparison Component" - id = "comp_comparison" build_path = /obj/item/circuit_component/compare/comparison /datum/design/component/math/logic name = "Logic Component" - id = "comp_logic" build_path = /obj/item/circuit_component/compare/logic /datum/design/component/math/toggle name = "Toggle Component" - id = "comp_toggle" build_path = /obj/item/circuit_component/compare/toggle /datum/design/component/math/binary_conversion name = "Binary Conversion Component" - id = "comp_binary_convert" build_path = /obj/item/circuit_component/binary_conversion /datum/design/component/math/decimal_conversion name = "Decimal Conversion Component" - id = "comp_decimal_convert" build_path = /obj/item/circuit_component/decimal_conversion /datum/design/component/math/not name = "Not Component" - id = "comp_not" build_path = /obj/item/circuit_component/not /datum/design/component/math/random name = "Random Component" - id = "comp_random" build_path = /obj/item/circuit_component/random /datum/design/component/math/length name = "Length Component" - id = "comp_length" build_path = /obj/item/circuit_component/length diff --git a/code/modules/research/designs/wiremod/sensor_designs.dm b/code/modules/research/designs/wiremod/sensor_designs.dm index e1581ebc186c..c31a0a4f423e 100644 --- a/code/modules/research/designs/wiremod/sensor_designs.dm +++ b/code/modules/research/designs/wiremod/sensor_designs.dm @@ -1,6 +1,5 @@ /datum/design/component/tempsensor name = "Temperature Sensor Component" - id = "comp_tempsensor" build_path = /obj/item/circuit_component/tempsensor category = list( RND_CATEGORY_CIRCUITRY_COMPS + RND_SUBCATEGORY_CIRCUITRY_SENSOR_COMPONENTS @@ -8,7 +7,6 @@ /datum/design/component/pressuresensor name = "Pressure Sensor Component" - id = "comp_pressuresensor" build_path = /obj/item/circuit_component/pressuresensor category = list( RND_CATEGORY_CIRCUITRY_COMPS + RND_SUBCATEGORY_CIRCUITRY_SENSOR_COMPONENTS @@ -16,7 +14,6 @@ /datum/design/component/view_sensor name = "View Sensor Component" - id = "comp_view_sensor" build_path = /obj/item/circuit_component/view_sensor category = list( RND_CATEGORY_CIRCUITRY_COMPS + RND_SUBCATEGORY_CIRCUITRY_SENSOR_COMPONENTS diff --git a/code/modules/research/designs/wiremod/shell_designs.dm b/code/modules/research/designs/wiremod/shell_designs.dm index 29545941deee..2bd8ec0c304a 100644 --- a/code/modules/research/designs/wiremod/shell_designs.dm +++ b/code/modules/research/designs/wiremod/shell_designs.dm @@ -1,4 +1,5 @@ /datum/design/wiremod_shell + abstract_type = /datum/design/wiremod_shell build_type = COMPONENT_PRINTER category = list( RND_CATEGORY_CIRCUITRY_SHELLS @@ -7,56 +8,48 @@ /datum/design/wiremod_shell/compact_remote name = "Compact Remote Shell" desc = "A handheld shell with one big button." - id = "compact_remote_shell" build_path = /obj/item/compact_remote materials = list(/datum/material/glass =SHEET_MATERIAL_AMOUNT, /datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5) /datum/design/wiremod_shell/controller name = "Controller Shell" desc = "A handheld shell with several buttons." - id = "controller_shell" build_path = /obj/item/controller materials = list(/datum/material/glass =SHEET_MATERIAL_AMOUNT, /datum/material/iron = SHEET_MATERIAL_AMOUNT*3.5) /datum/design/wiremod_shell/scanner name = "Scanner Shell" desc = "A handheld scanner shell that can scan entities." - id = "scanner_shell" build_path = /obj/item/wiremod_scanner materials = list(/datum/material/glass =SHEET_MATERIAL_AMOUNT, /datum/material/iron = SHEET_MATERIAL_AMOUNT*3.5) /datum/design/wiremod_shell/keyboard name = "Keyboard Shell" desc = "A handheld shell that allows the user to input a string" - id = "keyboard_shell" build_path = /obj/item/keyboard_shell materials = list(/datum/material/glass =SHEET_MATERIAL_AMOUNT, /datum/material/iron = SHEET_MATERIAL_AMOUNT*5) /datum/design/wiremod_shell/gun name = "Gun Shell" desc = "A handheld shell that can fire projectiles to output entities." - id = "gun_shell" build_path = /obj/item/gun/energy/wiremod_gun materials = list(/datum/material/glass =SHEET_MATERIAL_AMOUNT, /datum/material/iron = SHEET_MATERIAL_AMOUNT*5, /datum/material/plasma =SMALL_MATERIAL_AMOUNT) /datum/design/wiremod_shell/bot name = "Bot Shell" desc = "An immobile shell that can store more components. Has a USB port to be able to connect to computers and machines." - id = "bot_shell" build_path = /obj/item/shell/bot materials = list(/datum/material/glass =SHEET_MATERIAL_AMOUNT, /datum/material/iron = SHEET_MATERIAL_AMOUNT*5) /datum/design/wiremod_shell/money_bot name = "Money Bot Shell" desc = "An immobile shell that is similar to a regular bot shell, but accepts monetary inputs and can also dispense money." - id = "money_bot_shell" build_path = /obj/item/shell/money_bot materials = list(/datum/material/glass =SHEET_MATERIAL_AMOUNT, /datum/material/iron = SHEET_MATERIAL_AMOUNT*5, /datum/material/gold =SMALL_MATERIAL_AMOUNT*0.5) /datum/design/wiremod_shell/drone name = "Drone Shell" desc = "A shell with the ability to move itself around." - id = "drone_shell" build_path = /obj/item/shell/drone materials = list( /datum/material/glass =SHEET_MATERIAL_AMOUNT, @@ -67,7 +60,6 @@ /datum/design/wiremod_shell/server name = "Server Shell" desc = "A very large shell that cannot be moved around. Stores the most components." - id = "server_shell" materials = list( /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/iron = SHEET_MATERIAL_AMOUNT*7.5, @@ -78,7 +70,6 @@ /datum/design/wiremod_shell/airlock name = "Airlock Shell" desc = "A door shell that cannot be moved around when assembled." - id = "door_shell" materials = list( /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/iron = SHEET_MATERIAL_AMOUNT*7.5, @@ -88,7 +79,6 @@ /datum/design/wiremod_shell/dispenser name = "Dispenser Shell" desc = "A dispenser shell that can dispense items." - id = "dispenser_shell" materials = list( /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/iron = SHEET_MATERIAL_AMOUNT*7.5, @@ -98,7 +88,6 @@ /datum/design/wiremod_shell/bci name = "Brain-Computer Interface Shell" desc = "An implant that can be placed in a user's head to control circuits using their brain." - id = "bci_shell" materials = list( /datum/material/glass =SHEET_MATERIAL_AMOUNT, /datum/material/iron = SHEET_MATERIAL_AMOUNT*4, @@ -108,7 +97,6 @@ /datum/design/wiremod_shell/scanner_gate name = "Scanner Gate Shell" desc = "A scanner gate shell that performs mid-depth scans on people when they pass through it." - id = "scanner_gate_shell" materials = list( /datum/material/glass = SHEET_MATERIAL_AMOUNT*2, /datum/material/iron = SHEET_MATERIAL_AMOUNT*6, @@ -118,21 +106,18 @@ /datum/design/wiremod_shell/assembly name = "Assembly Shell" desc = "An assembly shell that can be attached to wires and other assemblies." - id = "assembly_shell" materials = list(/datum/material/glass =SHEET_MATERIAL_AMOUNT, /datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5) build_path = /obj/item/assembly/wiremod /datum/design/wiremod_shell/mod_module name = "MOD Module Shell" desc = "A module shell that allows a circuit to be inserted into, and interface with, a MODsuit." - id = "module_shell" materials = list(/datum/material/glass =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/mod/module/circuit /datum/design/wiremod_shell/undertile name = "Under-tile Shell" desc = "A small shell that can fit under the floor." - id = "undertile_shell" materials = list( /datum/material/glass=HALF_SHEET_MATERIAL_AMOUNT, /datum/material/iron=SHEET_MATERIAL_AMOUNT*2.5, @@ -143,7 +128,6 @@ /datum/design/wiremod_shell/wallmount name = "Wall-mounted Shell" desc = "A large shell that can be mounted on a wall." - id = "wallmount_shell" materials = list( /datum/material/glass=SHEET_MATERIAL_AMOUNT, /datum/material/iron=SHEET_MATERIAL_AMOUNT*5, @@ -153,7 +137,6 @@ /datum/design/wiremod_shell/implant name = "Implant Shell Case" desc = "A tiny shell that can be implanted in a living being." - id = "implant_shell" materials = list( /datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5, @@ -168,7 +151,6 @@ /datum/design/board/bci_implanter name = "Brain-Computer Interface Manipulation Chamber" desc = "A machine that, when given a brain-computer interface, will implant it into an occupant. Otherwise, will remove any brain-computer interfaces they already have." - id = "bci_implanter" build_path = /obj/item/circuitboard/machine/bci_implanter build_type = COMPONENT_PRINTER category = list( diff --git a/code/modules/research/designs/wiremod/string_designs.dm b/code/modules/research/designs/wiremod/string_designs.dm index 2b0fedf1ac34..b13ce5cccabc 100644 --- a/code/modules/research/designs/wiremod/string_designs.dm +++ b/code/modules/research/designs/wiremod/string_designs.dm @@ -1,29 +1,29 @@ /datum/design/component/string + abstract_type = /datum/design/component/string category = list( RND_CATEGORY_CIRCUITRY_COMPS + RND_SUBCATEGORY_CIRCUITRY_STRING_COMPONENTS ) /datum/design/component/string/tostring name = "To String Component" - id = "comp_tostring" build_path = /obj/item/circuit_component/tostring /datum/design/component/string/tonumber name = "To Number" - id = "comp_tonumber" build_path = /obj/item/circuit_component/tonumber /datum/design/component/string/concat name = "Concatenation Component" - id = "comp_concat" build_path = /obj/item/circuit_component/concat /datum/design/component/string/textcase name = "Textcase Component" - id = "comp_textcase" build_path = /obj/item/circuit_component/textcase /datum/design/component/string/contains name = "String Contains Component" - id = "comp_string_contains" build_path = /obj/item/circuit_component/compare/contains + +/datum/design/component/string/replace + name = "String Replace Component" + build_path = /obj/item/circuit_component/compare/contains/replace diff --git a/code/modules/research/designs/wiremod/utility_designs.dm b/code/modules/research/designs/wiremod/utility_designs.dm index 18a578bb9465..8b98aa780849 100644 --- a/code/modules/research/designs/wiremod/utility_designs.dm +++ b/code/modules/research/designs/wiremod/utility_designs.dm @@ -1,49 +1,41 @@ /datum/design/component/utility + abstract_type = /datum/design/component/utility category = list( RND_CATEGORY_CIRCUITRY_COMPS + RND_SUBCATEGORY_CIRCUITRY_UTILITY_COMPONENTS ) /datum/design/component/utility/router name = "Router Component" - id = "comp_router" build_path = /obj/item/circuit_component/router /datum/design/component/utility/multiplexer name = "Multiplexer Component" - id = "comp_multiplexer" build_path = /obj/item/circuit_component/router/multiplexer /datum/design/component/utility/typecast name = "Typecast Component" - id = "comp_typecast" build_path = /obj/item/circuit_component/typecast /datum/design/component/utility/clock name = "Clock Component" - id = "comp_clock" build_path = /obj/item/circuit_component/clock /datum/design/component/utility/delay name = "Delay Component" - id = "comp_delay" build_path = /obj/item/circuit_component/delay /datum/design/component/utility/timepiece name = "Timepiece Component" - id = "comp_timepiece" build_path = /obj/item/circuit_component/timepiece /datum/design/component/utility/typecheck name = "Typecheck Component" - id = "comp_typecheck" build_path = /obj/item/circuit_component/compare/typecheck /datum/design/component/utility/wire_bundle name = "Wire Bundle" - id = "comp_wire_bundle" build_path = /obj/item/circuit_component/wire_bundle /datum/design/component/utility/setter_trigger name = "Set Variable Trigger" - id = "comp_set_variable_trigger" build_path = /obj/item/circuit_component/variable/setter/trigger diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index 4c08911af2e4..84ddf0049fa9 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -86,26 +86,21 @@ data["indestructible"] = !(loaded_item.resistance_flags & INDESTRUCTIBLE) data["loaded_item"] = loaded_item data["already_deconstructed"] = !!stored_research.deconstructed_items[loaded_item.type] - var/list/points = techweb_item_point_check(loaded_item) + var/list/points = SSresearch.techweb_point_items[loaded_item.type] data["recoverable_points"] = techweb_point_display_generic(points) - var/list/boostable_nodes = techweb_item_unlock_check(loaded_item) - for(var/id in boostable_nodes) - var/datum/techweb_node/unlockable_node = SSresearch.techweb_node_by_id(id) - var/list/node_data = list() - node_data["node_name"] = unlockable_node.display_name - node_data["node_id"] = unlockable_node.id - node_data["node_hidden"] = !!stored_research.hidden_nodes[unlockable_node.id] - data["node_data"] += list(node_data) + var/list/boostable_nodes = SSresearch.techweb_unlock_items[loaded_item.type] + for(var/node_path in boostable_nodes) + var/datum/techweb_node/unlockable_node = SSresearch.techweb_nodes[node_path] + data["node_data"] += list(list( + "node_name" = unlockable_node.display_name, + "node_id" = node_path, + "node_hidden" = !!stored_research.hidden_nodes[node_path], + )) else data["loaded_item"] = null return data -/obj/machinery/rnd/destructive_analyzer/ui_static_data(mob/user) - var/list/data = list() - data["research_point_id"] = DESTRUCTIVE_ANALYZER_DESTROY_POINTS - return data - /obj/machinery/rnd/destructive_analyzer/ui_act(action, params, datum/tgui/ui) . = ..() if(.) @@ -121,7 +116,8 @@ unload_item() return TRUE if("deconstruct") - if(!user_try_decon_id(params["deconstruct_id"])) + var/node_path = text2path(params["deconstruct_path"]) + if(!try_deconstruct_loaded_item(node_path)) say("Destructive analysis failed!") return TRUE @@ -189,35 +185,31 @@ if(mob_thing.stat != DEAD) mob_thing.investigate_log("has been killed by a destructive analyzer.", INVESTIGATE_DEATHS) mob_thing.death() - var/list/point_value = techweb_item_point_check(thing) - if(point_value && !stored_research.deconstructed_items[thing.type]) + var/list/points = SSresearch.techweb_point_items[thing.type] + if(length(points) && !stored_research.deconstructed_items[thing.type]) stored_research.deconstructed_items[thing.type] = TRUE - stored_research.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = point_value)) + stored_research.adjust_multiple_points(points) qdel(thing) /** - * Attempts to destroy the loaded item using a provided research id. + * Attempts to destroy the loaded item using a provided techweb node path. + * If no node path is provided, we will deconstruct for points instead * Args: * id - The techweb ID node that we're meant to unlock if applicable. */ -/obj/machinery/rnd/destructive_analyzer/proc/user_try_decon_id(id) +/obj/machinery/rnd/destructive_analyzer/proc/try_deconstruct_loaded_item(node_path) if(!istype(loaded_item)) return FALSE - if(isnull(id)) - return FALSE - var/item_type = loaded_item.type - if(id == DESTRUCTIVE_ANALYZER_DESTROY_POINTS) - if(!destroy_item(gain_research_points = TRUE)) - return FALSE - return TRUE + if(isnull(node_path)) + return destroy_item(gain_research_points = TRUE) - var/datum/techweb_node/node_to_discover = SSresearch.techweb_node_by_id(id) + var/datum/techweb_node/node_to_discover = SSresearch.techweb_nodes[node_path] if(!istype(node_to_discover)) return FALSE if(!destroy_item()) return FALSE - SSblackbox.record_feedback("nested tally", "item_deconstructed", 1, list("[node_to_discover.id]", "[item_type]")) + SSblackbox.record_feedback("nested tally", "item_deconstructed", 1, list("[node_path]", "[loaded_item.type]")) stored_research.unhide_node(node_to_discover) return TRUE diff --git a/code/modules/research/experimentor/experimentor.dm b/code/modules/research/experimentor/experimentor.dm index 1992c71095e8..f3dc30e366ed 100644 --- a/code/modules/research/experimentor/experimentor.dm +++ b/code/modules/research/experimentor/experimentor.dm @@ -201,13 +201,13 @@ item_data["isRelic"] = istype(loaded_item, /obj/item/relic) item_data["associatedNodes"] = list() - var/list/unlockable_nodes = techweb_item_unlock_check(loaded_item) - for(var/node_id in unlockable_nodes) - var/datum/techweb_node/node = SSresearch.techweb_node_by_id(node_id) + var/list/unlockable_nodes = SSresearch.techweb_unlock_items[loaded_item.type] + for(var/node_path in unlockable_nodes) + var/datum/techweb_node/node = SSresearch.techweb_nodes[node_path] item_data["associatedNodes"] += list(list( "name" = node.display_name, - "isUnlocked" = !(node_id in stored_research.hidden_nodes), + "isUnlocked" = !stored_research.hidden_nodes[node_path], )) data["loadedItem"] = item_data @@ -264,8 +264,10 @@ reaction = match_reaction(loaded_item, reaction) if(reaction != FAIL) - var/picked_node_id = pick(techweb_item_unlock_check(loaded_item)) - stored_research.unhide_node(SSresearch.techweb_node_by_id(picked_node_id)) + var/list/boostable_nodes = SSresearch.techweb_unlock_items[loaded_item.type] + if(length(boostable_nodes)) + var/picked_node_path = pick(boostable_nodes) + stored_research.unhide_node(SSresearch.techweb_nodes[picked_node_path]) run_experiment(reaction) use_energy(750 JOULES) diff --git a/code/modules/research/gizmo/gizpuzzle.dm b/code/modules/research/gizmo/gizpuzzle.dm index fd228c8b87cb..bd1cd9e1362d 100644 --- a/code/modules/research/gizmo/gizpuzzle.dm +++ b/code/modules/research/gizmo/gizpuzzle.dm @@ -29,10 +29,7 @@ var/feedback_cooldown_time = 0.2 SECONDS /datum/gizmo_puzzle/New(datum/callback/pulsed) - if(pulsed) - pulsed_callback = pulsed - else - pulsed_callback = CALLBACK(src, PROC_REF(default_on_pulsed)) + pulsed_callback = pulsed || CALLBACK(src, PROC_REF(default_on_pulsed)) return ..() /// Make up a sequence @@ -74,23 +71,23 @@ /// Just some feedback so people can start forcing sequences. No feedback if it's done automatically /datum/gizmo_puzzle/proc/default_on_pulsed(atom/movable/holder, mob/living/user, solved_type, no_feedback = FALSE) - if(!COOLDOWN_FINISHED(src, feedback_cooldown) || !isliving(user) || no_feedback) + if(!COOLDOWN_FINISHED(src, feedback_cooldown) || no_feedback) return COOLDOWN_START(src, feedback_cooldown, feedback_cooldown_time) switch(solved_type) if(GIZMO_PUZZLE_WRONG) - holder.balloon_alert(user, "buzz") + holder.balloon_alert_to_viewers("buzz") playsound(holder, 'sound/machines/buzz/buzz-sigh.ogg', 30, FALSE) if(GIZMO_PUZZLE_CORRECT) - holder.balloon_alert(user, "ping") + holder.balloon_alert_to_viewers("ping") playsound(holder, 'sound/machines/ping.ogg', 30, FALSE) if(GIZMO_PUZZLE_SOLVED) - holder.balloon_alert(user, "creak") + holder.balloon_alert_to_viewers("creak") playsound(holder, 'sound/machines/creak.ogg', 30, FALSE) if(GIZMO_PUZZLE_SOLVED_MODE_CONTROL) - holder.balloon_alert(user, "clunk") + holder.balloon_alert_to_viewers("clunk") playsound(holder, 'sound/machines/machine_vend.ogg', 30, FALSE) /// Sequences can be a bit shorter since you have to constantly type and scream them diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm index 2084913113f3..79aa020eb57c 100644 --- a/code/modules/research/machinery/_production.dm +++ b/code/modules/research/machinery/_production.dm @@ -106,17 +106,17 @@ PROTECTED_PROC(TRUE) techweb_updating = FALSE - var/previous_design_count = cached_designs.len + var/previous_design_count = length(cached_designs) cached_designs.Cut() - for(var/design_id in stored_research.researched_designs) - var/datum/design/design = SSresearch.techweb_design_by_id(design_id) + for(var/design_path in stored_research.researched_designs) + var/datum/design/design = SSresearch.techweb_designs[design_path] if((isnull(allowed_department_flags) || (design.departmental_flags & allowed_department_flags)) && (design.build_type & allowed_buildtypes)) cached_designs |= design - var/design_delta = cached_designs.len - previous_design_count + var/design_delta = length(cached_designs) - previous_design_count if(design_delta > 0) say("Received [design_delta] new design[design_delta == 1 ? "" : "s"].") @@ -238,23 +238,22 @@ var/datum/asset/spritesheet_batched/research_designs/spritesheet = get_asset_datum(/datum/asset/spritesheet_batched/research_designs) var/size32x32 = "[spritesheet.name]32x32" - var/coefficient for(var/datum/design/design in cached_designs) - var/cost = list() + var/list/cost = list() - coefficient = build_efficiency(design) - for(var/datum/material/mat as anything in design.materials) - var/amount = design.materials[mat] - cost[mat.name] = OPTIMAL_COST(amount * coefficient) + var/coefficient = build_efficiency(design) + for(var/_material, amount in design.materials) + var/datum/material/material = _material + cost[material.name] = OPTIMAL_COST(amount * coefficient) - var/icon_size = spritesheet.icon_size_id(design.id) - designs[design.id] = list( + var/icon_size = spritesheet.icon_size_id(design.asset_id) + designs[design.type] = list( "name" = design.name, "desc" = design.get_description(), "cost" = cost, - "id" = design.id, + "path" = design.type, "categories" = design.category, - "icon" = "[icon_size == size32x32 ? "" : "[icon_size] "][design.id]" + "icon" = "[icon_size == size32x32 ? "" : "[icon_size] "][design.asset_id]" ) data["designs"] = designs @@ -284,12 +283,8 @@ if(!istype(material)) return - var/amount = params["amount"] - if(isnull(amount)) - return - - amount = text2num(amount) - if(isnull(amount)) + var/amount = text2num(params["amount"]) + if(!amount) return //we use initial(active_power_usage) because higher tier parts will have higher active usage but we have no benifit from it @@ -306,12 +301,17 @@ return //validate design - var/design_id = params["ref"] - if(!design_id) + var/design_path = text2path(params["design_path"]) + if(!design_path) + return + + if(!stored_research.researched_designs[design_path]) return - var/datum/design/design = stored_research.researched_designs[design_id] ? SSresearch.techweb_design_by_id(design_id) : null + + var/datum/design/design = SSresearch.techweb_designs[design_path] if(!istype(design)) return FALSE + if(!(isnull(allowed_department_flags) || (design.departmental_flags & allowed_department_flags))) say("This fabricator does not have the necessary keys to decrypt this design.") return FALSE @@ -320,10 +320,7 @@ return FALSE //validate print quantity - var/print_quantity = params["amount"] - if(isnull(print_quantity)) - return - print_quantity = text2num(print_quantity) + var/print_quantity = text2num(params["amount"]) if(isnull(print_quantity)) return print_quantity = clamp(print_quantity, 1, 50) @@ -339,10 +336,7 @@ return FALSE //compute power & time to print 1 item - var/charge_per_item = 0 - for(var/material, amount in design.materials) - charge_per_item += amount - charge_per_item = ROUND_UP((charge_per_item / (MAX_STACK_SIZE * SHEET_MATERIAL_AMOUNT)) * coefficient * active_power_usage) + var/charge_per_item = ROUND_UP((values_sum(design.materials) / (MAX_STACK_SIZE * SHEET_MATERIAL_AMOUNT)) * coefficient * active_power_usage) var/build_time_per_item = (design.construction_time * design.lathe_time_factor * efficiency_coeff) ** 0.8 //start production @@ -374,13 +368,14 @@ * * user_data - ID_DATA(user), see the proc on SSid_access, served for logging */ /obj/machinery/rnd/production/proc/do_make_item( - datum/design/design, - items_remaining, - build_time_per_item, - material_cost_coefficient, - charge_per_item, - turf/target, - alist/user_data) + datum/design/design, + items_remaining, + build_time_per_item, + material_cost_coefficient, + charge_per_item, + turf/target, + alist/user_data, +) PROTECTED_PROC(TRUE) if(!items_remaining) // how @@ -443,7 +438,7 @@ if(is_stack) items_remaining = 0 else - items_remaining -= 1 + items_remaining-- if(!items_remaining) finalize_build() diff --git a/code/modules/research/ordnance/_scipaper.dm b/code/modules/research/ordnance/_scipaper.dm index 453bbe9fbea4..81ecd9accfa3 100644 --- a/code/modules/research/ordnance/_scipaper.dm +++ b/code/modules/research/ordnance/_scipaper.dm @@ -200,10 +200,9 @@ return FALSE if(!istype(explosion_record)) return FALSE - var/list/published_papers = techweb_to_check.published_papers - for(var/experiment_path in published_papers) - for(var/datum/scientific_paper/explosive/papers in published_papers[experiment_path]) - var/datum/data/tachyon_record/record_to_check = papers.explosion_record + for(var/experiment_path, papers in techweb_to_check.published_papers) + for(var/datum/scientific_paper/explosive/paper in papers) + var/datum/data/tachyon_record/record_to_check = paper.explosion_record if(explosion_record.explosion_identifier == record_to_check.explosion_identifier) return FALSE return ..() @@ -242,21 +241,14 @@ return FALSE if(!istype(compressor_record)) return FALSE - var/list/published_papers = techweb_to_check.published_papers - for(var/experiment_path in published_papers) - for(var/datum/scientific_paper/gaseous/papers in published_papers[experiment_path]) - if(compressor_record == papers.compressor_record) + for(var/experiment_path, papers in techweb_to_check.published_papers) + for(var/datum/scientific_paper/gaseous/paper in papers) + if(compressor_record == paper.compressor_record) return FALSE - . = ..() + return ..() /datum/scientific_paper/gaseous/set_experiment(ex_path = null, variable = null, data = null) - var/invalid = FALSE - - invalid = invalid || !ispath(ex_path, /datum/experiment/ordnance/gaseous) - invalid = invalid || !variable - invalid = invalid || !istype(data, /datum/data/compressor_record) - - if(invalid) + if(!ispath(ex_path, /datum/experiment/ordnance/gaseous) || !istype(data, /datum/data/compressor_record) || !variable) experiment_path = null tracked_variable = null compressor_record = null @@ -293,29 +285,33 @@ . = ..() // Convey boosts to their associated nodes so that they can then be passed // to techweb UIs as static data. - for(var/node_id in boostable_nodes) - var/datum/techweb_node/node = SSresearch.techweb_node_by_id(node_id) - node.discount_boosts[TECHWEB_POINT_TYPE_GENERIC] = boostable_nodes[node_id] + for(var/node_path, discount_amount in boostable_nodes) + var/datum/techweb_node/node = SSresearch.techweb_nodes[node_path] + LAZYSET(node.discount_boosts, TECHWEB_POINT_TYPE_GENERIC, discount_amount) /datum/scientific_partner/proc/purchase_boost(datum/techweb/purchasing_techweb, datum/techweb_node/node) - var/possible_boost = allowed_to_boost(purchasing_techweb, node.id) + var/possible_boost = allowed_to_boost(purchasing_techweb, node.type) if(!possible_boost) return FALSE - purchasing_techweb.boost_techweb_node(node, list(TECHWEB_POINT_TYPE_GENERIC = boostable_nodes[node.id])) - purchasing_techweb.scientific_cooperation[type] -= boostable_nodes[node.id] * SCIENTIFIC_COOPERATION_PURCHASE_MULTIPLIER - if(possible_boost == SCIPAPER_ALREADY_BOUGHT) /// Refund the original price - purchasing_techweb.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = boostable_nodes[node.id])) + var/boost_amount = boostable_nodes[node.type] + + purchasing_techweb.boost_techweb_node(node, list(TECHWEB_POINT_TYPE_GENERIC = boost_amount)) + purchasing_techweb.scientific_cooperation[type] -= boost_amount * SCIENTIFIC_COOPERATION_PURCHASE_MULTIPLIER + if(possible_boost == SCIPAPER_ALREADY_BOUGHT) // Refund the original price + purchasing_techweb.adjust_points(TECHWEB_POINT_TYPE_GENERIC, boost_amount) return SCIPAPER_ALREADY_BOUGHT return TRUE -/datum/scientific_partner/proc/allowed_to_boost(datum/techweb/purchasing_techweb, node_id) - var/datum/techweb_node/boosting_node = SSresearch.techweb_node_by_id(node_id) - if(purchasing_techweb.scientific_cooperation[type] < (boostable_nodes[node_id] * SCIENTIFIC_COOPERATION_PURCHASE_MULTIPLIER)) // Too expensive +/datum/scientific_partner/proc/allowed_to_boost(datum/techweb/purchasing_techweb, node_path) + var/datum/techweb_node/boosting_node = SSresearch.techweb_nodes[node_path] + var/boost_amount = boostable_nodes[node_path] + + if(purchasing_techweb.scientific_cooperation[type] < (boost_amount * SCIENTIFIC_COOPERATION_PURCHASE_MULTIPLIER)) // Too expensive return FALSE - if((boosting_node.discount_boosted) && (boosting_node.discount_boosts[TECHWEB_POINT_TYPE_GENERIC] >= boostable_nodes[node_id])) // Already bought or we have a bigger discount + if(purchasing_techweb.boosted_nodes[node_path] && (boosting_node.discount_boosts[TECHWEB_POINT_TYPE_GENERIC] >= boost_amount)) // Already bought or we have a bigger discount return FALSE - if(node_id in purchasing_techweb.researched_nodes) + if(purchasing_techweb.researched_nodes[node_path]) return SCIPAPER_ALREADY_BOUGHT - if(!(node_id in purchasing_techweb.get_available_nodes())) // Not currently available + if(!purchasing_techweb.get_available_nodes()[node_path]) // Not currently available return FALSE return TRUE diff --git a/code/modules/research/ordnance/scipaper_partner.dm b/code/modules/research/ordnance/scipaper_partner.dm index 39d1cc68ed46..5c51a93a2d39 100644 --- a/code/modules/research/ordnance/scipaper_partner.dm +++ b/code/modules/research/ordnance/scipaper_partner.dm @@ -8,11 +8,11 @@ ) multipliers = list(SCIPAPER_COOPERATION_INDEX = 0.75, SCIPAPER_FUNDING_INDEX = 0.75) boostable_nodes = list( - TECHWEB_NODE_LOW_PRESSURE_EXCAVATION = TECHWEB_TIER_2_POINTS, - TECHWEB_NODE_PLASMA_MINING = TECHWEB_TIER_3_POINTS, - TECHWEB_NODE_MINING_ADV = TECHWEB_TIER_4_POINTS, - TECHWEB_NODE_NIGHT_VISION = TECHWEB_TIER_4_POINTS, - TECHWEB_NODE_BORG_ENGI = TECHWEB_TIER_3_POINTS, + /datum/techweb_node/low_pressure_excavation = TECHWEB_TIER_2_POINTS, + /datum/techweb_node/plasma_mining = TECHWEB_TIER_3_POINTS, + /datum/techweb_node/mining_adv = TECHWEB_TIER_4_POINTS, + /datum/techweb_node/night_vision = TECHWEB_TIER_4_POINTS, + /datum/techweb_node/borg_engi = TECHWEB_TIER_3_POINTS, ) /datum/scientific_partner/baron @@ -20,10 +20,10 @@ flufftext = "A nearby research station ran by a very wealthy captain seems to be struggling with their scientific output. They might reward us handsomely if we ghostwrite for them." multipliers = list(SCIPAPER_COOPERATION_INDEX = 0.25, SCIPAPER_FUNDING_INDEX = 2) boostable_nodes = list( - TECHWEB_NODE_CONSOLES = TECHWEB_TIER_1_POINTS, - TECHWEB_NODE_GAMING = TECHWEB_TIER_2_POINTS, - TECHWEB_NODE_BITRUNNING = TECHWEB_TIER_3_POINTS, - TECHWEB_NODE_PROGRAMMED_SERVER = TECHWEB_TIER_3_POINTS, + /datum/techweb_node/consoles = TECHWEB_TIER_1_POINTS, + /datum/techweb_node/gaming = TECHWEB_TIER_2_POINTS, + /datum/techweb_node/bitrunning = TECHWEB_TIER_3_POINTS, + /datum/techweb_node/programmed_server = TECHWEB_TIER_3_POINTS, ) /datum/scientific_partner/defense @@ -36,11 +36,11 @@ /datum/experiment/ordnance/explosive/hydrogenbomb, ) boostable_nodes = list( - TECHWEB_NODE_RIOT_SUPRESSION = TECHWEB_TIER_2_POINTS, - TECHWEB_NODE_EXPLOSIVES = TECHWEB_TIER_3_POINTS, - TECHWEB_NODE_MECH_ENERGY_GUNS = TECHWEB_TIER_4_POINTS, - TECHWEB_NODE_MECH_FIREARMS = TECHWEB_TIER_5_POINTS, - TECHWEB_NODE_MECH_HEAVY_ARMS = TECHWEB_TIER_5_POINTS, + /datum/techweb_node/riot_supression = TECHWEB_TIER_2_POINTS, + /datum/techweb_node/explosives = TECHWEB_TIER_3_POINTS, + /datum/techweb_node/mech_energy_guns = TECHWEB_TIER_4_POINTS, + /datum/techweb_node/mech_firearms = TECHWEB_TIER_5_POINTS, + /datum/techweb_node/mech_heavy_arms = TECHWEB_TIER_5_POINTS, ) /datum/scientific_partner/medical @@ -51,12 +51,12 @@ /datum/experiment/ordnance/gaseous/bz, ) boostable_nodes = list( - TECHWEB_NODE_CYBER_ORGANS = TECHWEB_TIER_2_POINTS, - TECHWEB_NODE_CYBER_ORGANS_UPGRADED = TECHWEB_TIER_3_POINTS, - TECHWEB_NODE_MEDBAY_EQUIP_ADV = TECHWEB_TIER_3_POINTS, - TECHWEB_NODE_CYTOLOGY = TECHWEB_TIER_2_POINTS, - TECHWEB_NODE_BORG_MEDICAL = TECHWEB_TIER_3_POINTS, - TECHWEB_NODE_COMBAT_IMPLANTS = TECHWEB_TIER_4_POINTS, + /datum/techweb_node/cyber/cyber_organs = TECHWEB_TIER_2_POINTS, + /datum/techweb_node/cyber/cyber_organs_upgraded = TECHWEB_TIER_3_POINTS, + /datum/techweb_node/medbay_equip_adv = TECHWEB_TIER_3_POINTS, + /datum/techweb_node/cytology = TECHWEB_TIER_2_POINTS, + /datum/techweb_node/borg_medical = TECHWEB_TIER_3_POINTS, + /datum/techweb_node/cyber/combat_implants = TECHWEB_TIER_4_POINTS, ) /datum/scientific_partner/physics @@ -69,9 +69,9 @@ /datum/experiment/ordnance/explosive/nobliumbomb, ) boostable_nodes = list( - TECHWEB_NODE_PARTS_ADV = TECHWEB_TIER_3_POINTS, - TECHWEB_NODE_BLUESPACE_TRAVEL = TECHWEB_TIER_3_POINTS, - TECHWEB_NODE_ANOMALY_RESEARCH = TECHWEB_TIER_3_POINTS, - TECHWEB_NODE_TELECOMS = TECHWEB_TIER_5_POINTS, - TECHWEB_NODE_MECH_EQUIP_BLUESPACE = TECHWEB_TIER_5_POINTS, + /datum/techweb_node/parts_adv = TECHWEB_TIER_3_POINTS, + /datum/techweb_node/bluespace_travel = TECHWEB_TIER_3_POINTS, + /datum/techweb_node/anomaly_research = TECHWEB_TIER_3_POINTS, + /datum/techweb_node/telecomms = TECHWEB_TIER_5_POINTS, + /datum/techweb_node/mech_equip_bluespace = TECHWEB_TIER_5_POINTS, ) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 33e689100c55..5ed99e037c8c 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -124,49 +124,60 @@ Nothing else in the console has ID requirements. stored_research.dequeue_node(id, user) return TRUE -/obj/machinery/computer/rdconsole/proc/research_node(id, mob/user) - if(!stored_research || !stored_research.available_nodes[id] || stored_research.researched_nodes[id]) - say("Node unlock failed: Either no techweb is found, node is already researched or is not available!") +/obj/machinery/computer/rdconsole/proc/research_node(node_path, mob/user) + if(!stored_research) + say("Node unlock failed: No techweb found!") + return FALSE + if(!stored_research.available_nodes[node_path]) + say("Node unlock failed: Node is not available!") + return FALSE + if(stored_research.researched_nodes[node_path]) + say("Node unlock failed: Node is already researched!") return FALSE - var/datum/techweb_node/TN = SSresearch.techweb_node_by_id(id) - if(!istype(TN)) + + var/datum/techweb_node/unlocked_node = SSresearch.techweb_nodes[node_path] + if(!istype(unlocked_node)) say("Node unlock failed: Unknown error.") return FALSE - var/list/price = TN.get_price(stored_research) - if(stored_research.can_afford(price)) - user.investigate_log("researched [id]([json_encode(price)]) on techweb id [stored_research.id].", INVESTIGATE_RESEARCH) - if(istype(stored_research, /datum/techweb/science)) - SSblackbox.record_feedback("associative", "science_techweb_unlock", 1, list("id" = "[id]", "name" = TN.display_name, "price" = "[json_encode(price)]", "time" = ISOtime())) - if(stored_research.research_node_id(id, research_source = src)) - say("Successfully researched [TN.display_name].") - var/logname = "Unknown" - if(HAS_AI_ACCESS(user)) - logname = "AI [user.name]" - if(iscyborg(user)) - logname = "CYBORG [user.name]" - if(iscarbon(user)) - var/obj/item/card/id/idcard = user.get_active_held_item() - if(istype(idcard)) - logname = "[idcard.registered_name]" - if(ishuman(user)) - var/mob/living/carbon/human/H = user - var/obj/item/I = H.wear_id - if(istype(I)) - var/obj/item/card/id/ID = I.GetID() - if(istype(ID)) - logname = "[ID.registered_name]" - stored_research.research_logs += list(list( - "node_name" = TN.display_name, - "node_cost" = price[TECHWEB_POINT_TYPE_GENERIC], - "node_researcher" = logname, - "node_research_location" = "[get_area(src)] ([src.x],[src.y],[src.z])", - )) - return TRUE - else - say("Failed to research node: Internal database error!") - return FALSE - say("Not enough research points...") - return FALSE + + var/list/price = unlocked_node.get_price(stored_research) + if(!stored_research.can_afford(price)) + say("Not enough research points...") + return FALSE + + if(!stored_research.research_node(unlocked_node, research_source = src)) + say("Failed to research node: Internal database error!") + return FALSE + + user.investigate_log("researched [unlocked_node.display_name]([json_encode(price)]) on techweb id [stored_research.id].", INVESTIGATE_RESEARCH) + if(istype(stored_research, /datum/techweb/science)) + SSblackbox.record_feedback("associative", "science_techweb_unlock", 1, list("path" = "[node_path]", "name" = unlocked_node.display_name, "price" = "[json_encode(price)]", "time" = ISOtime())) + + say("Successfully researched [unlocked_node.display_name].") + + var/logname = "Unknown" + if(HAS_AI_ACCESS(user)) + logname = "AI [user.name]" + if(iscyborg(user)) + logname = "CYBORG [user.name]" + + if(ishuman(user)) + var/mob/living/carbon/human/human_user = user + var/obj/item/card/id/id = human_user.wear_id?.GetID() + if(istype(id)) + logname = "[id.registered_name]" + else if(iscarbon(user)) + var/obj/item/card/id/idcard = user.get_active_held_item() + if(istype(idcard)) + logname = "[idcard.registered_name]" + + stored_research.research_logs += list(list( + "node_name" = unlocked_node.display_name, + "node_cost" = price[TECHWEB_POINT_TYPE_GENERIC], + "node_researcher" = logname, + "node_research_location" = "[get_area(src)] ([src.x],[src.y],[src.z])", + )) + return TRUE /obj/machinery/computer/rdconsole/emag_act(mob/user, obj/item/card/emag/emag_card) . = ..() @@ -218,43 +229,41 @@ Nothing else in the console has ID requirements. ) if (t_disk) - data["t_disk"] = list ( - "stored_research" = t_disk.stored_research.researched_nodes, + data["t_disk"] = list( + "stored_research" = t_disk.stored_nodes, ) if (d_disk) - data["d_disk"] = list("blueprints" = list()) - for (var/datum/design/D in d_disk.blueprints) - data["d_disk"]["blueprints"] += D.id - + data["d_disk"] = list( + "blueprints" = d_disk.blueprints, + ) // Serialize all nodes to display - for(var/v in stored_research.tiers) - var/datum/techweb_node/n = SSresearch.techweb_node_by_id(v) - var/enqueued_by_user = FALSE - - if((v in stored_research.research_queue_nodes) && stored_research.research_queue_nodes[v] == user) - enqueued_by_user = TRUE + for(var/node_path, node_tier in stored_research.tiers) + var/datum/techweb_node/node = SSresearch.techweb_nodes[node_path] // Ensure node is supposed to be visible - if (stored_research.hidden_nodes[v]) + if (stored_research.hidden_nodes[node_path]) continue + var/mob/node_queuer = stored_research.research_queue_nodes[node_path] + var/enqueued_by_user = !isnull(node_queuer) && node_queuer == user + data["nodes"] += list(list( - "id" = n.id, - "is_free" = n.is_free(stored_research), - "can_unlock" = stored_research.can_unlock_node(n), - "have_experiments_done" = stored_research.have_experiments_for_node(n), - "tier" = stored_research.tiers[n.id], + "path" = node_path, + "is_free" = node.is_free(stored_research), + "can_unlock" = stored_research.can_unlock_node(node), + "have_experiments_done" = stored_research.have_experiments_for_node(node), + "tier" = node_tier, "enqueued_by_user" = enqueued_by_user, - "discount_boosted" = n.discount_boosted + "discount_boosted" = !!stored_research.boosted_nodes[node_path], )) // Get experiments and serialize them var/list/exp_to_process = stored_research.available_experiments.Copy() - for (var/e in stored_research.completed_experiments) - exp_to_process += stored_research.completed_experiments[e] - for (var/datum/experiment/ex as anything in exp_to_process) - data["experiments"][ex.type] = ex.to_ui_data() + for (var/experiment_type, experiment in stored_research.completed_experiments) + exp_to_process += experiment + for (var/datum/experiment/experiment as anything in exp_to_process) + data["experiments"][experiment.type] = experiment.to_ui_data() return data /** @@ -271,73 +280,66 @@ Nothing else in the console has ID requirements. return id_cache[id] /obj/machinery/computer/rdconsole/ui_static_data(mob/user) - . = list( - "static_data" = list(), - "point_types_abbreviations" = SSresearch.point_types, - ) - // Build node cache... // Note this looks a bit ugly but its to reduce the size of the JSON payload // by the greatest amount that we can, as larger JSON payloads result in // hanging when the user opens the UI - var/node_cache = list() - for (var/node_id in SSresearch.techweb_nodes) - var/datum/techweb_node/node = SSresearch.techweb_nodes[node_id] || SSresearch.error_node - var/compressed_id = "[compress_id(node.id)]" - node_cache[compressed_id] = list( + var/list/node_cache = list() + for (var/node_path, _node in SSresearch.techweb_nodes) + var/datum/techweb_node/node = _node + + var/list/node_data = list( "name" = node.display_name, "description" = node.description ) + if (LAZYLEN(node.research_costs)) - node_cache[compressed_id]["costs"] = list() - for (var/node_cost in node.research_costs) - node_cache[compressed_id]["costs"]["[compress_id(node_cost)]"] = node.research_costs[node_cost] - if (LAZYLEN(node.prereq_ids)) - node_cache[compressed_id]["prereq_ids"] = list() - for (var/prerequisite_node in node.prereq_ids) - node_cache[compressed_id]["prereq_ids"] += compress_id(prerequisite_node) - if (LAZYLEN(node.design_ids)) - node_cache[compressed_id]["design_ids"] = list() - for (var/unlocked_design in node.design_ids) - node_cache[compressed_id]["design_ids"] += compress_id(unlocked_design) - if (LAZYLEN(node.unlock_ids)) - node_cache[compressed_id]["unlock_ids"] = list() - for (var/unlocked_node in node.unlock_ids) - node_cache[compressed_id]["unlock_ids"] += compress_id(unlocked_node) + node_data["costs"] = list() + for (var/point_type, point_amount in node.research_costs) + node_data["costs"]["[compress_id(point_type)]"] = point_amount + if (LAZYLEN(node.prerequisite_nodes)) + node_data["prerequisite_nodes"] = list() + for (var/prerequisite_node in node.prerequisite_nodes) + node_data["prerequisite_nodes"] += compress_id(prerequisite_node) + if (LAZYLEN(node.unlocked_designs)) + node_data["unlocked_designs"] = list() + for (var/unlocked_design in node.unlocked_designs) + node_data["unlocked_designs"] += compress_id(unlocked_design) + if (LAZYLEN(node.unlocked_nodes)) + node_data["unlocked_nodes"] = list() + for (var/unlocked_node in node.unlocked_nodes) + node_data["unlocked_nodes"] += compress_id(unlocked_node) if (LAZYLEN(node.required_experiments)) - node_cache[compressed_id]["required_experiments"] = node.required_experiments + node_data["required_experiments"] = node.required_experiments if (LAZYLEN(node.discount_experiments)) - node_cache[compressed_id]["discount_experiments"] = node.discount_experiments + node_data["discount_experiments"] = node.discount_experiments if (LAZYLEN(node.discount_boosts)) - node_cache[compressed_id]["discount_boosts"] = node.discount_boosts + node_data["discount_boosts"] = node.discount_boosts + + var/compressed_id = "[compress_id(node_path)]" + node_cache[compressed_id] = node_data // Build design cache - var/design_cache = list() + var/list/design_cache = list() var/datum/asset/spritesheet_batched/research_designs/spritesheet = get_asset_datum(/datum/asset/spritesheet_batched/research_designs) var/size32x32 = "[spritesheet.name]32x32" - for (var/design_id in SSresearch.techweb_designs) - var/datum/design/design = SSresearch.techweb_designs[design_id] || SSresearch.error_design - var/compressed_id = "[compress_id(design.id)]" - var/size = spritesheet.icon_size_id(design.id) + for (var/design_path, _design in SSresearch.techweb_designs) + var/datum/design/design = _design - var/cost = list() - var/list/materials = design.materials - for(var/datum/material/mat in materials) - cost[mat.name] = OPTIMAL_COST(materials[mat]) + var/list/cost = list() + for(var/datum/material/mat, amount in design.materials) + cost[mat.name] = OPTIMAL_COST(amount) + var/size = spritesheet.icon_size_id(design.asset_id) + var/compressed_id = "[compress_id(design_path)]" design_cache[compressed_id] = list( design.name, cost, design.build_type, design.departmental_flags, - "[size == size32x32 ? "" : "[size] "][design.id]" + "[size == size32x32 ? "" : "[size] "][design.asset_id]" ) - // Ensure id cache is included for decompression - var/flat_id_cache = list() - for (var/id in id_cache) - flat_id_cache += id - var/list/department_flags = list() for (var/datum/job_department/department as anything in subtypesof(/datum/job_department)) if (department::department_bitflags) @@ -348,13 +350,16 @@ Nothing else in the console has ID requirements. build_types -= "[AWAY_IMPRINTER]" build_types -= "[AWAY_LATHE]" - .["static_data"] = list( - "node_cache" = node_cache, - "design_cache" = design_cache, - "id_cache" = flat_id_cache, - "SHEET_MATERIAL_AMOUNT" = SHEET_MATERIAL_AMOUNT, - "build_types" = build_types, - "department_flags" = department_flags, + return list( + "point_types_abbreviations" = SSresearch.point_types, + "static_data" = list( + "node_cache" = node_cache, + "design_cache" = design_cache, + "id_cache" = assoc_to_keys(id_cache), + "SHEET_MATERIAL_AMOUNT" = SHEET_MATERIAL_AMOUNT, + "build_types" = build_types, + "department_flags" = department_flags, + ), ) /obj/machinery/computer/rdconsole/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) @@ -383,15 +388,15 @@ Nothing else in the console has ID requirements. return TRUE if ("researchNode") - research_node(params["node_id"], usr) + research_node(text2path(params["node_path"]), usr) return TRUE if ("enqueueNode") - enqueue_node(params["node_id"], usr) + enqueue_node(text2path(params["node_path"]), usr) return TRUE if ("dequeueNode") - dequeue_node(params["node_id"], usr) + dequeue_node(text2path(params["node_path"]), usr) return TRUE if ("ejectDisk") @@ -403,9 +408,8 @@ Nothing else in the console has ID requirements. if(QDELETED(d_disk)) say("No design disk inserted!") return TRUE - for(var/D in d_disk.blueprints) - if(D) - stored_research.add_design(D, TRUE) + for(var/design_path in d_disk.blueprints) + stored_research.add_design(design_path, TRUE) say("Uploading blueprints from disk.") d_disk.on_upload(stored_research, src) return TRUE @@ -418,7 +422,7 @@ Nothing else in the console has ID requirements. return TRUE COOLDOWN_START(src, cooldowncopy, 5 SECONDS) say("Uploading technology disk.") - t_disk.stored_research.copy_research_to(stored_research) + stored_research.absorb_techdisk(t_disk) return TRUE //Tech disk-only action. @@ -431,7 +435,7 @@ Nothing else in the console has ID requirements. return COOLDOWN_START(src, cooldowncopy, 5 SECONDS) say("Downloading to technology disk.") - stored_research.copy_research_to(t_disk.stored_research) + t_disk.stored_nodes |= stored_research.researched_nodes return TRUE /obj/machinery/computer/rdconsole/proc/eject_disk(type) diff --git a/code/modules/research/relics.dm b/code/modules/research/relics.dm index 049352a40d10..087f95fce8de 100644 --- a/code/modules/research/relics.dm +++ b/code/modules/research/relics.dm @@ -351,8 +351,9 @@ return while(length(chargeable_items) && recharges) recharges-- - var/obj/item/to_charge_base = pick_n_take(chargeable_items) + var/obj/item/to_charge_base = pick(chargeable_items) var/obj/item/stock_parts/power_store/to_charge = chargeable_items[to_charge_base] + chargeable_items.Remove(to_charge_base) to_charge.charge = to_charge.maxcharge to_charge_base.update_appearance(UPDATE_ICON|UPDATE_OVERLAYS) to_chat(user, span_notice("[to_charge_base] feels energized!")) diff --git a/code/modules/research/research_disk.dm b/code/modules/research/research_disk.dm index 43fcd208fcbc..39b912afd3b9 100644 --- a/code/modules/research/research_disk.dm +++ b/code/modules/research/research_disk.dm @@ -1,15 +1,17 @@ - /obj/item/disk/tech_disk name = "technology disk" desc = "A disk for storing technology data for further research." icon_state = "datadisk0" custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass=SMALL_MATERIAL_AMOUNT) - var/datum/techweb/stored_research + var/list/stored_nodes /obj/item/disk/tech_disk/Initialize(mapload) . = ..() - if(!stored_research) - stored_research = new /datum/techweb/disk + if(!islist(stored_nodes)) + // gotta make it assoc or else it breaks + stored_nodes = list() + for(var/node_path in SSresearch.techweb_nodes_starting) + stored_nodes[node_path] = TRUE pixel_x = base_pixel_x + rand(-5, 5) pixel_y = base_pixel_y + rand(-5, 5) @@ -19,5 +21,7 @@ custom_materials = null /obj/item/disk/tech_disk/debug/Initialize(mapload) - stored_research = locate(/datum/techweb/admin) in SSresearch.techwebs + var/datum/techweb/admin/admin_techweb = locate() in SSresearch.techwebs + admin_techweb ||= new() + stored_nodes = admin_techweb.researched_nodes.Copy() return ..() diff --git a/code/modules/research/techweb/__techweb_helpers.dm b/code/modules/research/techweb/__techweb_helpers.dm deleted file mode 100644 index 34c076d59466..000000000000 --- a/code/modules/research/techweb/__techweb_helpers.dm +++ /dev/null @@ -1,39 +0,0 @@ -/proc/count_unique_techweb_nodes() - var/static/list/L = typesof(/datum/techweb_node) - return L.len - -/proc/count_unique_techweb_designs() - var/static/list/L = typesof(/datum/design) - return L.len - -/proc/node_boost_error(id, message) - WARNING("Invalid boost information for node \[[id]\]: [message]") - SSresearch.invalid_node_boost[id] = message - -///Returns an associative list of techweb node datums with values of the nodes it unlocks. -/proc/techweb_item_unlock_check(obj/item/I) - if(SSresearch.techweb_unlock_items[I.type]) - return SSresearch.techweb_unlock_items[I.type] //It should already be formatted in node datum = list(point type = value) - -/proc/techweb_item_point_check(obj/item/I) - if(SSresearch.techweb_point_items[I.type]) - return SSresearch.techweb_point_items[I.type] - return FALSE - -/proc/techweb_point_display_generic(pointlist) - var/list/ret = list() - for(var/i in pointlist) - if(i in SSresearch.point_types) - ret += "[SSresearch.point_types[i]]: [pointlist[i]]" - else - ret += "ERRORED POINT TYPE: [pointlist[i]]" - return ret.Join("
") - -/proc/techweb_point_display_rdconsole(pointlist, last_pointlist) - var/list/ret = list() - for(var/i in pointlist) - var/research_line = "[(i in SSresearch.point_types) || "ERRORED POINT TYPE"]: [pointlist[i]]" - if(last_pointlist[i] > 0) - research_line += " (+[(last_pointlist[i]) * ((SSresearch.ss_flags & SS_TICKER)? (600 / (world.tick_lag * SSresearch.wait)) : (600 / SSresearch.wait))]/ minute)" - ret += research_line - return ret.Join("
") diff --git a/code/modules/research/techweb/_techweb.dm b/code/modules/research/techweb/_techweb.dm index 8d492aa4af94..1e27c876d106 100644 --- a/code/modules/research/techweb/_techweb.dm +++ b/code/modules/research/techweb/_techweb.dm @@ -7,23 +7,25 @@ * on research consoles, servers, and disks. They are NOT global. */ /datum/techweb - ///The id/name of the whole Techweb viewable to players. + /// The id/name of the whole Techweb viewable to players. var/id = "Generic" /// Organization name, used for display var/organization = "Third-Party" - /// Already unlocked and all designs are now available. Assoc list, id = TRUE + /// A list of researched nodes. Associative for faster lookup. var/list/researched_nodes = list() - /// Visible nodes, doesn't mean it can be researched. Assoc list, id = TRUE + /// Visible nodes, doesn't mean it can be researched. Associative for faster lookup. var/list/visible_nodes = list() - /// Nodes that can immediately be researched, all reqs met. assoc list, id = TRUE + /// Nodes that can immediately be researched, all reqs met. Associative for faster lookup. var/list/available_nodes = list() - /// Designs that are available for use. Assoc list, id = TRUE + /// A list of unlocked designs. Associative for faster lookup. var/list/researched_designs = list() /// Custom inserted designs like from disks that should survive recalculation. var/list/custom_designs = list() - /// Hidden nodes. id = TRUE. Used for unhiding nodes when requirements are met by removing the entry of the node. + /// Hidden nodes. Used for unhiding nodes when requirements are met by removing the entry of the node. Associative for faster lookup. var/list/hidden_nodes = list() + /// A list of nodes that have been boosted. Associative for faster lookup. + var/list/boosted_nodes = list() /// List of items already deconstructed for research points, preventing infinite research point generation. var/list/deconstructed_items = list() /// Available research points, type = number @@ -38,23 +40,23 @@ var/list/tiers = list() /// This is a list of all incomplete experiment datums that are accessible for scientists to complete var/list/datum/experiment/available_experiments = list() - /// A list of all experiment datums that have been complete - var/list/datum/experiment/completed_experiments = list() + /// An associative list of all experiment typepaths to instances that have been completed + var/list/completed_experiments = list() /// Assoc list of all experiment datums that have been skipped, to tech point reward for completing them - /// That is, upon researching a node without completing its associated discounts, their experiments go here. /// Completing these experiments will have a refund. var/list/datum/experiment/skipped_experiment_types = list() - ///All RD consoles connected to this individual techweb. + /// All RD consoles connected to this individual techweb. var/list/obj/machinery/computer/rdconsole/consoles_accessing = list() - ///All research servers connected to this individual techweb. + /// All research servers connected to this individual techweb. var/list/obj/machinery/rnd/server/techweb_servers = list() - ///Boolean on whether the techweb should generate research points overtime. + /// Boolean on whether the techweb should generate research points overtime. var/should_generate_points = FALSE - ///A multiplier applied to all research gain, cut in half if the Master server was sabotaged. + /// A multiplier applied to all research gain, cut in half if the Master server was sabotaged. var/income_modifier = 1 - ///The amount of research points generated the techweb generated the latest time it generated. + /// The amount of research points generated the techweb generated the latest time it generated. var/last_income /** @@ -68,18 +70,14 @@ * Filled with nulls on init, populated only on publication. */ var/list/published_papers - /** - * Assoc list of nodes queued for automatic research when there are enough points available - * research_queue_nodes[node_id] = user_enqueued - */ + /// Assoc list of nodes queued for automatic research when there are enough points available + /// e.g: [/datum/techweb_node/mining --> /mob/living/carbon/human (weakref)] var/list/research_queue_nodes = list() - /datum/techweb/New() SSresearch.techwebs += src - for(var/i in SSresearch.techweb_nodes_starting) - var/datum/techweb_node/DN = SSresearch.techweb_node_by_id(i) - research_node(DN, TRUE, FALSE, FALSE) + for(var/node_path in SSresearch.techweb_nodes_starting) + research_node(SSresearch.techweb_nodes[node_path], TRUE, FALSE, FALSE) hidden_nodes = SSresearch.techweb_nodes_hidden.Copy() initialize_published_papers() return ..() @@ -93,76 +91,38 @@ SSresearch.techwebs -= src return ..() -/datum/techweb/proc/recalculate_nodes(recalculate_designs = FALSE, wipe_custom_designs = FALSE) - var/list/datum/techweb_node/processing = list() - for(var/id in researched_nodes) - processing[id] = TRUE - for(var/id in visible_nodes) - processing[id] = TRUE - for(var/id in available_nodes) - processing[id] = TRUE +/datum/techweb/proc/recalculate_nodes(recalculate_designs = FALSE) if(recalculate_designs) researched_designs = custom_designs.Copy() - if(wipe_custom_designs) - custom_designs = list() - for(var/id in processing) - update_node_status(SSresearch.techweb_node_by_id(id)) + var/list/all_of_our_nodes = researched_nodes | visible_nodes | available_nodes + for(var/node_path in all_of_our_nodes) + update_node_status(SSresearch.techweb_nodes[node_path]) CHECK_TICK -/datum/techweb/proc/add_point_list(list/pointlist) - for(var/i in pointlist) - if((i in SSresearch.point_types) && pointlist[i] > 0) - research_points[i] = FLOOR(research_points[i] + pointlist[i], 0.1) - -/datum/techweb/proc/add_points_all(amount) - var/list/l = SSresearch.point_types.Copy() - for(var/i in l) - l[i] = amount - add_point_list(l) - -/datum/techweb/proc/remove_point_list(list/pointlist) - for(var/i in pointlist) - if((i in SSresearch.point_types) && pointlist[i] > 0) - research_points[i] = FLOOR(max(0, research_points[i] - pointlist[i]), 0.1) - -/datum/techweb/proc/remove_points_all(amount) - var/list/l = SSresearch.point_types.Copy() - for(var/i in l) - l[i] = amount - remove_point_list(l) - -/datum/techweb/proc/modify_point_list(list/pointlist) - for(var/i in pointlist) - if((i in SSresearch.point_types) && pointlist[i] != 0) - research_points[i] = FLOOR(max(0, research_points[i] + pointlist[i]), 0.1) - -/datum/techweb/proc/modify_points_all(amount) - var/list/l = SSresearch.point_types.Copy() - for(var/i in l) - l[i] = amount - modify_point_list(l) - -/datum/techweb/proc/copy_research_to(datum/techweb/receiver) //Adds any missing research to theirs. - for(var/i in receiver.hidden_nodes) - CHECK_TICK - if(get_available_nodes()[i] || get_researched_nodes()[i] || get_visible_nodes()[i]) - receiver.hidden_nodes -= i //We can see it so let them see it too. - for(var/i in researched_nodes - receiver.researched_nodes) - CHECK_TICK - receiver.research_node_id(i, TRUE, FALSE, FALSE) - for(var/i in researched_designs - receiver.researched_designs) +/// Adjusts the amount of a certain point type +/datum/techweb/proc/adjust_points(point_type, point_amount) + if(!SSresearch.point_types[point_type] || !point_amount) + return + research_points[point_type] = max(FLOOR(research_points[point_type] + point_amount, 0.1), 0) + +/// Adjusts the amount of multiple point types +/datum/techweb/proc/adjust_multiple_points(list/point_list) + for(var/point_type, point_amount in point_list) + adjust_points(point_type, point_amount) + +/// Adjust all point types by this amount +/datum/techweb/proc/adjust_all_points(point_amount) + var/list/new_points = SSresearch.point_types.Copy() + for(var/point_type in new_points) + new_points[point_type] = point_amount + adjust_multiple_points(new_points) + +/// Takes all of the research from a tech disk +/datum/techweb/proc/absorb_techdisk(obj/item/disk/tech_disk/disk) + for(var/node_path in disk.stored_nodes - researched_nodes) CHECK_TICK - receiver.add_design_by_id(i) - receiver.recalculate_nodes() - -/datum/techweb/proc/copy() - var/datum/techweb/returned = new() - returned.researched_nodes = researched_nodes.Copy() - returned.visible_nodes = visible_nodes.Copy() - returned.available_nodes = available_nodes.Copy() - returned.researched_designs = researched_designs.Copy() - returned.hidden_nodes = hidden_nodes.Copy() - return returned + research_node(node_path, TRUE, FALSE, FALSE) + recalculate_nodes() /datum/techweb/proc/get_visible_nodes() //The way this is set up is shit but whatever. return visible_nodes - hidden_nodes @@ -173,73 +133,58 @@ /datum/techweb/proc/get_researched_nodes() return researched_nodes - hidden_nodes -/datum/techweb/proc/add_point_type(type, amount) - if(!(type in SSresearch.point_types) || (amount <= 0)) - return FALSE - research_points[type] += amount - return TRUE - -/datum/techweb/proc/modify_point_type(type, amount) - if(!(type in SSresearch.point_types)) - return FALSE - research_points[type] = max(0, research_points[type] + amount) - return TRUE - -/datum/techweb/proc/remove_point_type(type, amount) - if(!(type in SSresearch.point_types) || (amount <= 0)) - return FALSE - research_points[type] = max(0, research_points[type] - amount) - return TRUE - /** - * add_design_by_id - * The main way to add add designs to techweb - * Uses the techweb node's ID - * Args: - * id - the ID of the techweb node to research - * custom - Boolean on whether the node should also be added to custom_designs - * add_to - A custom list to add the node to, overwriting research_designs. + * Adds a design to this techweb + * + * Arguments: + * * design - The instance or typepath of the design to add + * * custom - Boolean on whether the node should also be added to custom_designs + * * add_to - A custom list to add the node to, overwriting research_designs. */ -/datum/techweb/proc/add_design_by_id(id, custom = FALSE, list/add_to) - return add_design(SSresearch.techweb_design_by_id(id), custom, add_to) - /datum/techweb/proc/add_design(datum/design/design, custom = FALSE, list/add_to) + if(ispath(design)) + design = SSresearch.techweb_designs[design] if(!istype(design)) return FALSE - SEND_SIGNAL(src, COMSIG_TECHWEB_ADD_DESIGN, design, custom) + if(custom) - custom_designs[design.id] = TRUE + custom_designs[design.type] = TRUE if(add_to) - add_to[design.id] = TRUE + add_to[design.type] = TRUE else - researched_designs[design.id] = TRUE + researched_designs[design.type] = TRUE - for(var/list/datum/techweb_node/unlocked_nodes as anything in design.unlocked_by) - hidden_nodes -= unlocked_nodes + for(var/unlocked_by in design.unlocked_by) + hidden_nodes -= unlocked_by + SEND_SIGNAL(src, COMSIG_TECHWEB_ADD_DESIGN, design, custom) return TRUE -/datum/techweb/proc/remove_design_by_id(id, custom = FALSE) - return remove_design(SSresearch.techweb_design_by_id(id), custom) - +/** + * Removes a design from this techweb + * + * Arguments: + * * design - The instance or typepath of the design to remove + * * custom - Boolean on whether the node should also be removed from custom_designs + */ /datum/techweb/proc/remove_design(datum/design/design, custom = FALSE) + if(ispath(design)) + design = SSresearch.techweb_designs[design] if(!istype(design)) return FALSE - if(custom_designs[design.id] && !custom) - return FALSE + + if(custom) + custom_designs -= design.type + + researched_designs -= design.type + SEND_SIGNAL(src, COMSIG_TECHWEB_REMOVE_DESIGN, design, custom) - custom_designs -= design.id - researched_designs -= design.id return TRUE -/datum/techweb/proc/get_point_total(list/pointlist) - for(var/i in pointlist) - . += pointlist[i] - -/datum/techweb/proc/can_afford(list/pointlist) - for(var/i in pointlist) - if(research_points[i] < pointlist[i]) +/datum/techweb/proc/can_afford(list/point_list) + for(var/point_type, point_amount in point_list) + if(research_points[point_type] < point_amount) return FALSE return TRUE @@ -250,10 +195,10 @@ * * node - the node to check */ /datum/techweb/proc/have_experiments_for_node(datum/techweb_node/node) - . = TRUE for (var/experiment_type in node.required_experiments) if (!completed_experiments[experiment_type]) return FALSE + return TRUE /** * Checks if a node can be unlocked on this techweb, having the required points and experiments @@ -271,18 +216,16 @@ * * experiment_type - the type of the experiment to add */ /datum/techweb/proc/add_experiment(experiment_type) - . = TRUE // check active experiments for experiment of this type - for (var/available_experiment in available_experiments) - var/datum/experiment/experiment = available_experiment + for (var/datum/experiment/experiment as anything in available_experiments) if (experiment.type == experiment_type) return FALSE // check completed experiments for experiments of this type - for (var/completed_experiment in completed_experiments) - var/datum/experiment/experiment = completed_experiment - if (experiment == experiment_type) + for (var/completed_experiment_type in completed_experiments) + if (completed_experiment_type == experiment_type) return FALSE available_experiments += new experiment_type(src) + return TRUE /** * Adds a list of experiments to this techweb by their types, ensures that no duplicates are added. @@ -293,7 +236,8 @@ /datum/techweb/proc/add_experiments(list/experiment_list) . = TRUE for (var/datum/experiment/experiment as anything in experiment_list) - . = . && add_experiment(experiment) + if(!add_experiment(experiment)) + . = FALSE // don't return here because add_experiment() does important stuff /** * Notifies the techweb that an experiment has been completed, updating internal state of the techweb to reflect this. @@ -308,13 +252,13 @@ var/result_text = "[completed_experiment] has been completed" var/refund = skipped_experiment_types[completed_experiment.type] || 0 if(refund > 0) - add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = refund)) + adjust_points(TECHWEB_POINT_TYPE_GENERIC, refund) result_text += ", refunding [refund] points" // Nothing more to gain here, but we keep it in the list to prevent double dipping skipped_experiment_types[completed_experiment.type] = -1 var/points_rewarded - if(completed_experiment.points_reward) - add_point_list(completed_experiment.points_reward) + if(LAZYLEN(completed_experiment.points_reward)) + adjust_multiple_points(completed_experiment.points_reward) points_rewarded = ",[refund > 0 ? " and" : ""] rewarding [completed_experiment.get_points_reward_text()]" result_text += points_rewarded result_text += "!" @@ -326,58 +270,70 @@ /datum/techweb/proc/printout_points() return techweb_point_display_generic(research_points) -/datum/techweb/proc/enqueue_node(id, mob/user) +/// Adds a node to this techweb's research queue +/datum/techweb/proc/enqueue_node(node_path, mob/user) var/queue_first = FALSE - if(istype(user, /mob/living/carbon/human)) + if(ishuman(user)) var/mob/living/carbon/human/human_user = user var/list/access = human_user.wear_id?.GetAccess() if(ACCESS_RD in access) queue_first = TRUE - if(id in research_queue_nodes) - if(queue_first) - research_queue_nodes.Remove(id) // Remove to be able to place first - else + if(research_queue_nodes[node_path]) + if(!queue_first) return FALSE + // Remove to be able to place first + research_queue_nodes -= node_path // Remove to be able to place first - for(var/node_id in research_queue_nodes) - if(research_queue_nodes[node_id] == user) - research_queue_nodes.Remove(node_id) + var/datum/weakref/user_weakref = WEAKREF(user) + for(var/queued_node, node_queuer in research_queue_nodes) + if(node_queuer == user_weakref) + research_queue_nodes -= queued_node if (queue_first) - research_queue_nodes.Insert(1, id) - research_queue_nodes[id] = user + research_queue_nodes.Insert(1, node_path) + research_queue_nodes[node_path] = user_weakref return TRUE -/datum/techweb/proc/dequeue_node(id, mob/user) - if(!(id in research_queue_nodes)) +/datum/techweb/proc/dequeue_node(node_path, mob/user) + var/datum/weakref/queuer_weakref = research_queue_nodes[node_path] + var/mob/queuer = queuer_weakref?.resolve() + if(isnull(queuer) || queuer != user) return FALSE - if(research_queue_nodes[id] != user) - return FALSE - - research_queue_nodes.Remove(id) - + research_queue_nodes -= node_path return TRUE -/datum/techweb/proc/research_node_id(id, force, auto_update_points, get_that_dosh_id, atom/research_source) - return research_node(SSresearch.techweb_node_by_id(id), force, auto_update_points, get_that_dosh_id, research_source) - +/** + * Adds a node to this techweb + * + * Arguments: + * * node - The typepath or instance of the node to research + * * force - If TRUE, availability checks are ignored + * * auto_adjust_cost - If TRUE, the node's point cost(s) are deducted from this techweb + * * get_that_dosh - If TRUE, the science budget gains [SSeconomy.techweb_bounty] moneys + * * research_source - The thing responsible for researching this node. Used in overrides. + */ /datum/techweb/proc/research_node(datum/techweb_node/node, force = FALSE, auto_adjust_cost = TRUE, get_that_dosh = TRUE, atom/research_source) + if(ispath(node)) + node = SSresearch.techweb_nodes[node] if(!istype(node)) return FALSE + update_node_status(node) - if(!force) - if(!available_nodes[node.id] || (auto_adjust_cost && (!can_afford(node.get_price(src)))) || !have_experiments_for_node(node)) - return FALSE - var/log_message = "[id]/[organization] researched node [node.id]" + if(!force && (!available_nodes[node.type] || (auto_adjust_cost && !can_afford(node.get_price(src))) || !have_experiments_for_node(node))) + return FALSE + + var/log_message = "[id]/[organization] researched node [node.type]" if(auto_adjust_cost) var/list/node_cost = node.get_price(src) - remove_point_list(node_cost) + for(var/point_type in node_cost) + node_cost[point_type] *= -1 + adjust_multiple_points(node_cost) log_message += " at the cost of [json_encode(node_cost)]" //Add to our researched list - researched_nodes[node.id] = TRUE + researched_nodes[node.type] = TRUE // Track any experiments we skipped relating to this for(var/missed_experiment in node.discount_experiments) @@ -386,22 +342,22 @@ skipped_experiment_types[missed_experiment] = node.discount_experiments[missed_experiment] // Gain the experiments from the new node - for(var/id in node.unlock_ids) - visible_nodes[id] = TRUE - var/datum/techweb_node/unlocked_node = SSresearch.techweb_node_by_id(id) - if (unlocked_node.required_experiments.len > 0) + for(var/unlocked_path in node.unlocked_nodes) + visible_nodes[unlocked_path] = TRUE + var/datum/techweb_node/unlocked_node = SSresearch.techweb_nodes[unlocked_path] + if (LAZYLEN(unlocked_node.required_experiments)) add_experiments(unlocked_node.required_experiments) - if (unlocked_node.discount_experiments.len > 0) + if (LAZYLEN(unlocked_node.discount_experiments)) add_experiments(unlocked_node.discount_experiments) update_node_status(unlocked_node) // Gain more new experiments - if (node.experiments_to_unlock.len) + if (LAZYLEN(node.experiments_to_unlock)) add_experiments(node.experiments_to_unlock) // Unlock what the research actually unlocks - for(var/id in node.design_ids) - add_design_by_id(id) + for(var/design_path in node.unlocked_designs) + add_design(design_path) update_node_status(node) if(get_that_dosh) var/datum/bank_account/science_department_bank_account = SSeconomy.get_dep_account(ACCOUNT_SCI) @@ -413,28 +369,31 @@ log_research(log_message) // Dequeue - if(node.id in research_queue_nodes) - research_queue_nodes.Remove(node.id) + research_queue_nodes -= node.type return TRUE -/datum/techweb/proc/unresearch_node_id(id) - return unresearch_node(SSresearch.techweb_node_by_id(id)) +/** + * Removes a node from this techweb + * + * Arguments: + * * node_path - The instance or typepath of the node to remove + */ +/datum/techweb/proc/unresearch_node(datum/techweb_node/node_path) + if(istype(node_path)) + node_path = node_path.type -/datum/techweb/proc/unresearch_node(datum/techweb_node/node) - if(!istype(node)) - return FALSE - researched_nodes -= node.id - recalculate_nodes(TRUE) //Fully rebuild the tree. + researched_nodes -= node_path + recalculate_nodes(recalculate_designs = TRUE) //Fully rebuild the tree. /// Boosts a techweb node. -/datum/techweb/proc/boost_techweb_node(datum/techweb_node/node, list/pointlist) +/datum/techweb/proc/boost_techweb_node(datum/techweb_node/node, list/point_list) if(!istype(node)) return FALSE LAZYINITLIST(node.discount_boosts) - for(var/point_type in pointlist) // Essentially applies the greater boost(s) between the newer and any existing. - node.discount_boosts[point_type] = max(node.discount_boosts[point_type], pointlist[point_type]) - node.discount_boosted = TRUE + for(var/point_type, point_amount in point_list) // Essentially applies the greater boost(s) between the newer and any existing. + node.discount_boosts[point_type] = max(node.discount_boosts[point_type], point_amount) + boosted_nodes[node.type] = TRUE unhide_node(node) update_node_status(node) return TRUE @@ -443,90 +402,58 @@ /datum/techweb/proc/unhide_node(datum/techweb_node/node) if(!istype(node)) return FALSE - hidden_nodes -= node.id + hidden_nodes -= node.type ///Make it available if the prereq ids are already researched update_node_status(node) return TRUE /datum/techweb/proc/update_tiers(datum/techweb_node/base) var/list/current = list(base) - while (current.len) + while (length(current)) var/list/next = list() - for (var/node_ in current) - var/datum/techweb_node/node = node_ + for (var/datum/techweb_node/node as anything in current) var/tier = 0 - if (!researched_nodes[node.id]) // researched is tier 0 - for (var/id in node.prereq_ids) - var/prereq_tier = tiers[id] + if (!researched_nodes[node.type]) // researched is tier 0 + for (var/prerequisite_path in node.prerequisite_nodes) + var/prereq_tier = tiers[prerequisite_path] tier = max(tier, prereq_tier + 1) - if (tier != tiers[node.id]) - tiers[node.id] = tier - for (var/id in node.unlock_ids) - next += SSresearch.techweb_node_by_id(id) + if (tier != tiers[node.type]) + tiers[node.type] = tier + for (var/unlocked_path in node.unlocked_nodes) + next += SSresearch.techweb_nodes[unlocked_path] current = next /datum/techweb/proc/update_node_status(datum/techweb_node/node) var/researched = FALSE var/available = FALSE var/visible = FALSE - if(researched_nodes[node.id]) + if(researched_nodes[node.type]) researched = TRUE - var/needed = node.prereq_ids.len - for(var/id in node.prereq_ids) - if(researched_nodes[id]) + var/needed = LAZYLEN(node.prerequisite_nodes) + for(var/prerequisite_path in node.prerequisite_nodes) + if(researched_nodes[prerequisite_path]) visible = TRUE needed-- if(!needed) available = TRUE - researched_nodes -= node.id - available_nodes -= node.id - visible_nodes -= node.id - if(hidden_nodes[node.id]) //Hidden. + researched_nodes -= node.type + available_nodes -= node.type + visible_nodes -= node.type + if(hidden_nodes[node.type]) //Hidden. return - if(researched) - researched_nodes[node.id] = TRUE - for(var/id in node.design_ids - researched_designs) - add_design(SSresearch.techweb_design_by_id(id)) - else - if(available) - available_nodes[node.id] = TRUE - else - if(visible) - visible_nodes[node.id] = TRUE - update_tiers(node) - -//Laggy procs to do specific checks, just in case. Don't use them if you can just use the vars that already store all this! -/datum/techweb/proc/designHasReqs(datum/design/D) - for(var/i in researched_nodes) - var/datum/techweb_node/N = SSresearch.techweb_node_by_id(i) - if(N.design_ids[D.id]) - return TRUE - return FALSE -/datum/techweb/proc/isDesignResearched(datum/design/D) - return isDesignResearchedID(D.id) - -/datum/techweb/proc/isDesignResearchedID(id) - return researched_designs[id]? SSresearch.techweb_design_by_id(id) : FALSE - -/datum/techweb/proc/isNodeResearched(datum/techweb_node/N) - return isNodeResearchedID(N.id) - -/datum/techweb/proc/isNodeResearchedID(id) - return researched_nodes[id]? SSresearch.techweb_node_by_id(id) : FALSE - -/datum/techweb/proc/isNodeVisible(datum/techweb_node/N) - return isNodeResearchedID(N.id) - -/datum/techweb/proc/isNodeVisibleID(id) - return visible_nodes[id]? SSresearch.techweb_node_by_id(id) : FALSE - -/datum/techweb/proc/isNodeAvailable(datum/techweb_node/N) - return isNodeAvailableID(N.id) + if(researched) + researched_nodes[node.type] = TRUE + var/list/Dear_tg_station_13_maintainers_COMMA_I_am_writing_this_variable_like_this_because_I_am_curious_if_you_guys_actually_review_the_code_that_comes_across_your_desk_PERIOD_If_you_see_this_COMMA_please_let_me_know = LAZYCOPY(node.unlocked_designs) + for(var/design_path in Dear_tg_station_13_maintainers_COMMA_I_am_writing_this_variable_like_this_because_I_am_curious_if_you_guys_actually_review_the_code_that_comes_across_your_desk_PERIOD_If_you_see_this_COMMA_please_let_me_know - researched_designs) + add_design(SSresearch.techweb_designs[design_path]) + else if(available) + available_nodes[node.type] = TRUE + else if(visible) + visible_nodes[node.type] = TRUE -/datum/techweb/proc/isNodeAvailableID(id) - return available_nodes[id]? SSresearch.techweb_node_by_id(id) : FALSE + update_tiers(node) /// Fill published_papers with nulls. /datum/techweb/proc/initialize_published_papers() @@ -564,7 +491,7 @@ /// Returns a flat list of all design datums this techweb has researched. /datum/techweb/proc/get_researched_design_datums() - var/list/designs = list() - for(var/id in researched_designs) - designs += SSresearch.techweb_design_by_id(id) + var/list/datum/design/designs = list() + for(var/design_path in researched_designs) + designs += SSresearch.techweb_designs[design_path] return designs diff --git a/code/modules/research/techweb/_techweb_node.dm b/code/modules/research/techweb/_techweb_node.dm index 0eccb61c4ec3..ee63f5b18bec 100644 --- a/code/modules/research/techweb/_techweb_node.dm +++ b/code/modules/research/techweb/_techweb_node.dm @@ -5,50 +5,37 @@ * * Techweb nodes are GLOBAL, there should only be one instance of them in the game. Persistant * changes should never be made to them in-game. USE SSRESEARCH PROCS TO OBTAIN REFERENCES. - * DO NOT REFERENCE OUTSIDE OF SSRESEARCH OR YOU WILL FUCK UP GC. */ /datum/techweb_node - /// Internal ID of the node - var/id /// The name of the node as it is shown on UIs - var/display_name = "Errored Node" + var/display_name = null /// A description of the node to show on UIs - var/description = "Why are you seeing this?" - /// Whether it starts off hidden - var/hidden = FALSE - /// If the tech can be randomly generated by BEPIS tech as a reward. Meant to be fully given in tech disks, not researched - var/experimental = FALSE - /// Whether it's available without any research - var/starting_node = FALSE - var/list/prereq_ids = list() - var/list/design_ids = list() - /// CALCULATED FROM OTHER NODE'S PREREQUISITIES. Associated list id = TRUE - var/list/unlock_ids = list() - /// List of items you need to deconstruct to unlock this node. - var/list/required_items_to_unlock = list() - /// Boosting this will autounlock this node - var/autounlock_by_boost = TRUE - /// The points cost to research the node, type = amount - var/list/research_costs = list() + var/description = null /// The category of the node var/category = "Misc" + /// Behavior flags for this techweb node. + var/node_flags = TECHWEB_NODE_WIKI + + /// A list of nodes required to be unlocked to research this node. Made associative in New() for faster lookups. + var/list/prerequisite_nodes + /// A list of design typepaths that this node unlocks. Made associative in New() for faster lookups. + var/list/unlocked_designs + /// A list of nodes that we unlock. Auto-generated by SSresearch. + var/list/unlocked_nodes + /// List of items you need to deconstruct to unlock this node. + var/list/required_items_to_unlock + /// The points cost to research the node, type = amount + var/list/research_costs /// The list of experiments required to research the node - var/list/required_experiments = list() + var/list/required_experiments /// If completed, these experiments give a specific point amount discount to the node. - var/list/discount_experiments = list() + var/list/discount_experiments /// Boost quantities from non-experiment sources (i.e., toxins papers). /// Indexed by point type to boost amount (with only one boost per point type). - var/list/discount_boosts = list() - /// Boolean indicating whether or not this node is boosted by non-experiments. - /// This will need to be changed to a list of point types boosted if boosts - /// should ever need to vary by point type. - var/discount_boosted = FALSE + var/list/discount_boosts /// When this node is completed, allows these experiments to be performed. - var/list/experiments_to_unlock = list() - /// Whether or not this node should show on the wiki - var/show_on_wiki = TRUE - /// Hidden Mech nodes unlocked when mech fabricator emaged. - var/illegal_mech_node = FALSE + var/list/experiments_to_unlock + /** * If set, the researched node will be announced on these channels by an announcement system * with 'announce_research_node' set to TRUE when researched by the station. @@ -56,74 +43,48 @@ */ var/list/announce_channels -/datum/techweb_node/error_node - id = "ERROR" - display_name = "ERROR" - description = "This usually means something in the database has corrupted. If it doesn't go away automatically, inform Central Command for their techs to fix it ASAP(tm)" - show_on_wiki = FALSE - -/datum/techweb_node/proc/Initialize() - //Make lists associative for lookup - for(var/id in prereq_ids) - prereq_ids[id] = TRUE - for(var/id in design_ids) - design_ids[id] = TRUE - for(var/id in unlock_ids) - unlock_ids[id] = TRUE +/datum/techweb_node/New() + . = ..() + // Make lists associative for faster lookup + for(var/prerequisite_path in prerequisite_nodes) + prerequisite_nodes[prerequisite_path] = TRUE + for(var/design_path in unlocked_designs) + unlocked_designs[design_path] = TRUE /datum/techweb_node/Destroy() - SSresearch.techweb_nodes -= id + SSresearch.techweb_nodes -= type return ..() -/datum/techweb_node/proc/on_design_deletion(datum/design/D) - prune_design_id(D.id) - -/datum/techweb_node/proc/on_node_deletion(datum/techweb_node/TN) - prune_node_id(TN.id) - -/datum/techweb_node/proc/prune_design_id(design_id) - design_ids -= design_id - -/datum/techweb_node/proc/prune_node_id(node_id) - prereq_ids -= node_id - unlock_ids -= node_id - /datum/techweb_node/proc/get_price(datum/techweb/host) if(!host) return research_costs - var/list/actual_costs = research_costs.Copy() + var/list/actual_costs = LAZYCOPY(research_costs) - for(var/cost_type in actual_costs) - for(var/experiment_type in discount_experiments) - if(host.completed_experiments[experiment_type]) //do we have this discount_experiment unlocked? - actual_costs[cost_type] -= discount_experiments[experiment_type] + if(LAZYLEN(discount_experiments)) + for(var/cost_type in actual_costs) + for(var/experiment_type, discount_amount in discount_experiments) + if(host.completed_experiments[experiment_type]) //do we have this discount_experiment unlocked? + actual_costs[cost_type] -= discount_amount - if(discount_boosts && discount_boosted) // Boosts should be subservient to experiments. - for(var/booster in discount_boosts) - if(actual_costs[booster]) - actual_costs[booster] = max(actual_costs[booster] - discount_boosts[booster], 0) + if(LAZYLEN(discount_boosts) && host.boosted_nodes[type]) // Boosts should be subservient to experiments. + for(var/boost_type, boost_amount in discount_boosts) + if(actual_costs[boost_type]) + actual_costs[boost_type] = max(actual_costs[boost_type] - boost_amount, 0) return actual_costs +/// If this node requires 0 points to research /datum/techweb_node/proc/is_free(datum/techweb/host) - var/list/costs = get_price(host) - var/total_points = 0 - - for(var/point_type in costs) - total_points += costs[point_type] - - if(total_points == 0) - return TRUE - return FALSE + return !values_sum(get_price(host)) -/datum/techweb_node/proc/price_display(datum/techweb/TN) - return techweb_point_display_generic(get_price(TN)) +/datum/techweb_node/proc/price_display(datum/techweb/techweb) + return techweb_point_display_generic(get_price(techweb)) ///Proc called when the Station (Science techweb specific) researches a node. /datum/techweb_node/proc/on_station_research(atom/research_source) SHOULD_CALL_PARENT(TRUE) - var/channels_to_use = announce_channels + var/list/channels_to_use = announce_channels if(istype(research_source, /obj/machinery/computer/rdconsole)) var/obj/machinery/computer/rdconsole/console = research_source var/obj/item/circuitboard/computer/rdconsole/board = console.circuit @@ -131,5 +92,5 @@ return if(board.obj_flags & EMAGGED) channels_to_use = list(RADIO_CHANNEL_COMMON) - if(length(channels_to_use) && !starting_node) + if(length(channels_to_use) && !(node_flags & TECHWEB_NODE_STARTER)) aas_config_announce(/datum/aas_config_entry/researched_node, list("NODE" = display_name), null, channels_to_use) diff --git a/code/modules/research/techweb/nodes/alien_nodes.dm b/code/modules/research/techweb/nodes/alien_nodes.dm index c5027b32bd66..f7adc1df1bbd 100644 --- a/code/modules/research/techweb/nodes/alien_nodes.dm +++ b/code/modules/research/techweb/nodes/alien_nodes.dm @@ -1,16 +1,17 @@ -// Simple define to avoid copy-pasting the same code 3 times -#define ABDUCTOR_SUBTYPE_UNLOCKS(X) \ - ##X/New() { \ - . = ..(); \ - required_items_to_unlock += subtypesof(/obj/item/abductor); \ - required_items_to_unlock += subtypesof(/obj/item/circuitboard/machine/abductor); \ - } +/datum/techweb_node/alien + abstract_type = /datum/techweb_node/alien + node_flags = parent_type::node_flags | TECHWEB_NODE_HIDDEN -/datum/techweb_node/alientech //AYYYYYYYYLMAOO tech - id = TECHWEB_NODE_ALIENTECH +/datum/techweb_node/alien/New() + . = ..() + required_items_to_unlock += subtypesof(/obj/item/abductor) + required_items_to_unlock += subtypesof(/obj/item/circuitboard/machine/abductor) + +/datum/techweb_node/alien/base //AYYYYYYYYLMAOO tech display_name = "Alien Technology" description = "Things used by the greys." - prereq_ids = list(TECHWEB_NODE_BLUESPACE_TRAVEL) + node_flags = parent_type::node_flags | TECHWEB_NODE_HIDDEN + prerequisite_nodes = list(/datum/techweb_node/bluespace_travel) required_items_to_unlock = list( /obj/item/stack/sheet/mineral/abductor, /obj/item/cautery/alien, @@ -29,30 +30,26 @@ /obj/item/wirecutters/abductor, /obj/item/wrench/abductor, ) - design_ids = list( - "alienalloy", + unlocked_designs = list( + /datum/design/alloy/alien, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) - hidden = TRUE - -ABDUCTOR_SUBTYPE_UNLOCKS(/datum/techweb_node/alientech) -/datum/techweb_node/alientech/on_station_research() +/datum/techweb_node/alien/base/on_station_research() . = ..() SSshuttle.shuttle_purchase_requirements_met[SHUTTLE_UNLOCK_ALIENTECH] = TRUE -/datum/techweb_node/alien_engi - id = TECHWEB_NODE_ALIEN_ENGI +/datum/techweb_node/alien/engi display_name = "Alien Engineering" description = "Alien engineering tools" - prereq_ids = list(TECHWEB_NODE_ALIENTECH, TECHWEB_NODE_EXP_TOOLS) - design_ids = list( - "alien_crowbar", - "alien_multitool", - "alien_screwdriver", - "alien_welder", - "alien_wirecutters", - "alien_wrench", + prerequisite_nodes = list(/datum/techweb_node/alien/base, /datum/techweb_node/exp_tools) + unlocked_designs = list( + /datum/design/aliencrowbar, + /datum/design/alienmultitool, + /datum/design/alienscrewdriver, + /datum/design/alienwelder, + /datum/design/alienwirecutters, + /datum/design/alienwrench, ) required_items_to_unlock = list( /obj/item/crowbar/abductor, @@ -65,28 +62,24 @@ ABDUCTOR_SUBTYPE_UNLOCKS(/datum/techweb_node/alientech) /obj/item/wrench/abductor, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) - hidden = TRUE announce_channels = list(RADIO_CHANNEL_ENGINEERING) -ABDUCTOR_SUBTYPE_UNLOCKS(/datum/techweb_node/alien_engi) - -/datum/techweb_node/alien_surgery - id = TECHWEB_NODE_ALIEN_SURGERY +/datum/techweb_node/alien/surgery display_name = "Alien Surgery" description = "Abductors did nothing wrong." - prereq_ids = list(TECHWEB_NODE_ALIENTECH, TECHWEB_NODE_SURGERY_TOOLS) - design_ids = list( - "alien_cautery", - "alien_drill", - "alien_hemostat", - "alien_retractor", - "alien_saw", - "alien_scalpel", - "medibot_upgrade_four", - "surgery_brainwashing", - "surgery_brainwashing_mechanic", - "surgery_heal_combo_upgrade_femto", - "surgery_zombie", + prerequisite_nodes = list(/datum/techweb_node/alien/base, /datum/techweb_node/surgery_tools) + unlocked_designs = list( + /datum/design/aliencautery, + /datum/design/aliendrill, + /datum/design/alienhemostat, + /datum/design/alienretractor, + /datum/design/aliensaw, + /datum/design/alienscalpel, + /datum/design/medibot_upgrade/tier_four, + /datum/design/surgery/brainwashing, + /datum/design/surgery/brainwashing/mechanic, + /datum/design/surgery/tend_wounds_combo/upgrade/femto, + /datum/design/surgery/necrotic_revival, ) required_items_to_unlock = list( /obj/item/cautery/alien, @@ -107,9 +100,4 @@ ABDUCTOR_SUBTYPE_UNLOCKS(/datum/techweb_node/alien_engi) ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) discount_experiments = list(/datum/experiment/scanning/points/slime/hard = TECHWEB_TIER_5_POINTS) - hidden = TRUE announce_channels = list(RADIO_CHANNEL_MEDICAL) - -ABDUCTOR_SUBTYPE_UNLOCKS(/datum/techweb_node/alien_surgery) - -#undef ABDUCTOR_SUBTYPE_UNLOCKS diff --git a/code/modules/research/techweb/nodes/atmos_nodes.dm b/code/modules/research/techweb/nodes/atmos_nodes.dm index 3da5b00ec400..3d8db883c228 100644 --- a/code/modules/research/techweb/nodes/atmos_nodes.dm +++ b/code/modules/research/techweb/nodes/atmos_nodes.dm @@ -1,47 +1,45 @@ /datum/techweb_node/atmos - id = TECHWEB_NODE_ATMOS - starting_node = TRUE display_name = "Atmospherics" description = "Maintaining station air and related life support systems." - design_ids = list( - "atmos_control", - "atmosalerts", - "thermomachine", - "space_heater", - "scrubber", - "generic_tank", - "oxygen_tank", - "plasma_tank", - "plasmaman_tank_belt", - "plasmarefiller", - "extinguisher", - "pocketfireextinguisher", - "gas_filter", - "plasmaman_gas_filter", - "analyzer", - "pipe_painter", + node_flags = parent_type::node_flags | TECHWEB_NODE_STARTER + unlocked_designs = list( + /datum/design/board/atmos_control, + /datum/design/board/atmosalerts, + /datum/design/board/thermomachine, + /datum/design/board/space_heater, + /datum/design/board/scrubber, + /datum/design/generic_gas_tank, + /datum/design/oxygen_tank, + /datum/design/plasma_tank, + /datum/design/plasmaman_tank_belt, + /datum/design/plasmarefiller, + /datum/design/extinguisher, + /datum/design/pocketfireextinguisher, + /datum/design/gas_filter, + /datum/design/plasmaman_gas_filter, + /datum/design/analyzer, + /datum/design/pipe_painter, ) /datum/techweb_node/gas_compression - id = TECHWEB_NODE_GAS_COMPRESSION display_name = "Gas Compression" description = "Highly pressurized gases hold potential for unlocking immense energy capabilities." - prereq_ids = list(TECHWEB_NODE_ATMOS) - design_ids = list( - "tank_compressor", - "pump", - "emergency_oxygen", - "emergency_oxygen_engi", - "power_turbine_console", - "turbine_part_compressor", - "turbine_part_rotor", - "turbine_part_stator", - "turbine_compressor", - "turbine_rotor", - "turbine_stator", - "atmos_thermal", - "pneumatic_seal", - "large_welding_tool", + prerequisite_nodes = list(/datum/techweb_node/atmos) + unlocked_designs = list( + /datum/design/board/tank_compressor, + /datum/design/board/pump, + /datum/design/emergency_oxygen, + /datum/design/emergency_oxygen_engi, + /datum/design/board/turbine_computer, + /datum/design/turbine_part_compressor, + /datum/design/turbine_part_rotor, + /datum/design/turbine_part_stator, + /datum/design/board/turbine_compressor, + /datum/design/board/turbine_rotor, + /datum/design/board/turbine_stator, + /datum/design/atmos_thermal, + /datum/design/pneumatic_seal, + /datum/design/large_welding_tool, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) experiments_to_unlock = list( @@ -53,79 +51,76 @@ announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/plasma_control - id = TECHWEB_NODE_PLASMA_CONTROL display_name = "Controlled Plasma" description = "Experiments with high-pressure gases and electricity resulting in crystallization and controlled plasma reactions." - prereq_ids = list(TECHWEB_NODE_GAS_COMPRESSION, TECHWEB_NODE_ENERGY_MANIPULATION) - design_ids = list( - "electrolyzer", - "pipe_scrubber", - "pacman", - "mech_generator", - "plasmacutter", - "diode_disk_incendiary", + prerequisite_nodes = list(/datum/techweb_node/gas_compression, /datum/techweb_node/energy_manipulation) + unlocked_designs = list( + /datum/design/board/electrolyzer, + /datum/design/board/pipe_scrubber, + /datum/design/board/pacman, + /datum/design/mech_generator, + /datum/design/plasmacutter, + /datum/design/diode_disk_incendiary, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) discount_experiments = list(/datum/experiment/ordnance/gaseous/plasma = TECHWEB_TIER_2_POINTS) announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/fusion - id = TECHWEB_NODE_FUSION display_name = "Fusion" description = "Investigating fusion reactor technology to achieve sustainable and efficient energy production through controlled plasma reactions involving noble gases." - prereq_ids = list(TECHWEB_NODE_PLASMA_CONTROL) - design_ids = list( - "HFR_core", - "HFR_corner", - "HFR_fuel_input", - "HFR_interface", - "HFR_moderator_input", - "HFR_waste_output", - "adv_fire_extinguisher", - "bolter_wrench", - "rpd_loaded", - "engine_goggles", - "crystallizer", + prerequisite_nodes = list(/datum/techweb_node/plasma_control) + unlocked_designs = list( + /datum/design/board/HFR_core, + /datum/design/board/HFR_corner, + /datum/design/board/HFR_fuel_input, + /datum/design/board/HFR_interface, + /datum/design/board/HFR_moderator_input, + /datum/design/board/HFR_waste_output, + /datum/design/fire_extinguisher_advanced, + /datum/design/bolter_wrench, + /datum/design/rpd, + /datum/design/engine_goggles, + /datum/design/board/crystallizer, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) discount_experiments = list(/datum/experiment/ordnance/gaseous/nitrous_oxide = TECHWEB_TIER_3_POINTS) announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/exp_tools - id = TECHWEB_NODE_EXP_TOOLS display_name = "Experimental Tools" description = "Enhances the functionality and versatility of station tools." - prereq_ids = list(TECHWEB_NODE_FUSION) - design_ids = list( - "flatpacker", - "handdrill", - "exwelder", - "jawsoflife", - "rangedanalyzer", - "rtd_loaded", - "mech_rcd", - "rcd_loaded", - "rcd_ammo", - "weldingmask", - "magboots", + prerequisite_nodes = list(/datum/techweb_node/fusion) + unlocked_designs = list( + /datum/design/board/flatpacker, + /datum/design/handdrill, + /datum/design/exwelder, + /datum/design/jawsoflife, + /datum/design/rangedanalyzer, + /datum/design/rtd_loaded, + /datum/design/mech_rcd, + /datum/design/rcd_loaded, + /datum/design/rcd_ammo, + /datum/design/welding_mask, + /datum/design/magboots, + /datum/design/diode_disk_stamina, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) discount_experiments = list(/datum/experiment/ordnance/gaseous/bz = TECHWEB_TIER_4_POINTS) announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/rcd_upgrade - id = TECHWEB_NODE_RCD_UPGRADE display_name = "Rapid Construction Device Upgrades" description = "New designs and enhancements for RCD and RPD." - prereq_ids = list(TECHWEB_NODE_EXP_TOOLS, TECHWEB_NODE_PARTS_BLUESPACE) - design_ids = list( - "rcd_upgrade_silo_link", - "rcd_upgrade_anti_interrupt", - "rcd_upgrade_cooling", - "rcd_upgrade_frames", - "rcd_upgrade_furnishing", - "rcd_upgrade_simple_circuits", - "rpd_upgrade_unwrench", + prerequisite_nodes = list(/datum/techweb_node/exp_tools, /datum/techweb_node/parts_bluespace) + unlocked_designs = list( + /datum/design/rcd_upgrade/silo_link, + /datum/design/rcd_upgrade/anti_interrupt, + /datum/design/rcd_upgrade/cooling, + /datum/design/rcd_upgrade/frames, + /datum/design/rcd_upgrade/furnishing, + /datum/design/rcd_upgrade/simple_circuits, + /datum/design/rpd_upgrade/unwrench, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) discount_experiments = list(/datum/experiment/ordnance/gaseous/noblium = TECHWEB_TIER_5_POINTS) diff --git a/code/modules/research/techweb/nodes/bepis_nodes.dm b/code/modules/research/techweb/nodes/bepis_nodes.dm index 997af89e9306..2fbd2bf4c07d 100644 --- a/code/modules/research/techweb/nodes/bepis_nodes.dm +++ b/code/modules/research/techweb/nodes/bepis_nodes.dm @@ -1,135 +1,109 @@ -//Nodes that are found inside Bepis Disks. +// Nodes that are found inside Bepis Disks. -/datum/techweb_node/light_apps - id = TECHWEB_NODE_LIGHT_APPS +/datum/techweb_node/bepis + abstract_type = /datum/techweb_node/bepis + node_flags = parent_type::node_flags | TECHWEB_NODE_HIDDEN | TECHWEB_NODE_EXPERIMENTAL + +/datum/techweb_node/bepis/light_apps display_name = "Illumination Applications" description = "Applications of lighting and vision technology not originally thought to be commercially viable." - design_ids = list( - "bright_helmet", - "rld_mini", - "photon_cannon", + unlocked_designs = list( + /datum/design/bright_helmet, + /datum/design/rld_mini, + /datum/design/photon_cannon, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) - hidden = TRUE - experimental = TRUE announce_channels = list(RADIO_CHANNEL_COMMON) -/datum/techweb_node/extreme_office - id = TECHWEB_NODE_EXTREME_OFFICE +/datum/techweb_node/bepis/extreme_office display_name = "Advanced Office Applications" description = "Some of our smartest lab guys got together on a Friday and improved our office efficiency by 350%. Here's how." - design_ids = list( - "mauna_mug", - "rolling_table", - "plasticducky", + unlocked_designs = list( + /datum/design/mauna_mug, + /datum/design/rolling_table, + /datum/design/plasticducky, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) - hidden = TRUE - experimental = TRUE announce_channels = list(RADIO_CHANNEL_COMMON) -/datum/techweb_node/spec_eng - id = TECHWEB_NODE_SPEC_ENG +/datum/techweb_node/bepis/spec_eng display_name = "Specialized Engineering" description = "Conventional wisdom has deemed these engineering products 'technically' safe, but far too dangerous to traditionally condone." - design_ids = list( - "eng_gloves", - "lava_rods", + unlocked_designs = list( + /datum/design/eng_gloves, + /datum/design/lavarods, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) - hidden = TRUE - experimental = TRUE announce_channels = list(RADIO_CHANNEL_ENGINEERING) -/datum/techweb_node/aus_security - id = TECHWEB_NODE_AUS_SECURITY +/datum/techweb_node/bepis/aus_security display_name = "Australicus Security Protocols" description = "It is said that security in the Australicus sector is tight, so we took some pointers from their equipment. Thankfully, our sector lacks any signs of these, 'dropbears'." - design_ids = list( - "pin_explorer", - "stun_boomerang", + unlocked_designs = list( + /datum/design/pin_explorer, + /datum/design/stun_boomerang, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) - hidden = TRUE - experimental = TRUE announce_channels = list(RADIO_CHANNEL_SECURITY) -/datum/techweb_node/interrogation - id = TECHWEB_NODE_INTERROGATION +/datum/techweb_node/bepis/interrogation display_name = "Enhanced Interrogation Technology" description = "By cross-referencing several declassified documents from past dictatorial regimes, we were able to develop an incredibly effective interrogation device. \ - Ethical concerns about loss of free will do not apply to criminals, according to galactic law." - design_ids = list( - "hypnochair", + Ethical concerns about loss of free will do not apply to criminals, according to galactic law." + unlocked_designs = list( + /datum/design/board/hypnochair, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) - hidden = TRUE - experimental = TRUE announce_channels = list(RADIO_CHANNEL_SECURITY) -/datum/techweb_node/sticky_advanced - id = TECHWEB_NODE_STICKY_ADVANCED +/datum/techweb_node/bepis/sticky_advanced display_name = "Advanced Sticky Technology" description = "Taking a good joke too far? Nonsense!" - design_ids = list( - "pointy_tape", - "super_sticky_tape", + unlocked_designs = list( + /datum/design/pointy_tape, + /datum/design/super_sticky_tape, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) - hidden = TRUE - experimental = TRUE announce_channels = list(RADIO_CHANNEL_COMMON) -/datum/techweb_node/tackle_advanced - id = TECHWEB_NODE_TACKLE_ADVANCED +/datum/techweb_node/bepis/tackle_advanced display_name = "Advanced Grapple Technology" description = "Nanotrasen would like to remind its researching staff that it is never acceptable to \"glomp\" your coworkers, and further \"scientific trials\" on the subject \ - will no longer be accepted in its academic journals." - design_ids = list( - "tackle_dolphin", - "tackle_rocket", + will no longer be accepted in its academic journals." + unlocked_designs = list( + /datum/design/tackle_dolphin, + /datum/design/tackle_rocket, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) - hidden = TRUE - experimental = TRUE announce_channels = list(RADIO_CHANNEL_SECURITY) -/datum/techweb_node/mod_experimental - id = TECHWEB_NODE_MOD_EXPERIMENTAL +/datum/techweb_node/bepis/mod_experimental display_name = "Experimental Modular Suits" description = "Applications of experimentality when creating MODsuits have created these..." - design_ids = list( - "mod_disposal", - "mod_joint_torsion", - "mod_recycler", - "mod_shooting", + unlocked_designs = list( + /datum/design/module/disposal, + /datum/design/module/joint_torsion, + /datum/design/module/recycler, + /datum/design/module/shooting_assistant, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) - hidden = TRUE - experimental = TRUE announce_channels = list(RADIO_CHANNEL_COMMON) -/datum/techweb_node/posisphere - id = TECHWEB_NODE_POSITRONIC_SPHERE +/datum/techweb_node/bepis/posisphere display_name = "Experimental Spherical Positronic Brain" description = "Recent developments on cost-cutting measures have allowed us to cut positronic brain cubes into twice-as-cheap spheres. Unfortunately, it also allows them to move around the lab via rolling maneuvers." - design_ids = list( - "posisphere", + unlocked_designs = list( + /datum/design/posisphere, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) - hidden = TRUE - experimental = TRUE announce_channels = list(RADIO_CHANNEL_SCIENCE) -/datum/techweb_node/donk_shell - id = TECHWEB_NODE_DONK_PRODUCTS +/datum/techweb_node/bepis/donk_shell display_name = "Donk Co. Failed Products Schematics" description = "We don't want to know why you're filling up your databanks with known failed products from an enemy corporation. That's your choice. I'm just saying, don't come crying to us \ when it turns out you've downloaded some kind of horrible donk-pocket related malware that steals your Starscape password. Those bastards over at Donk Co. WILL delete your character." - design_ids = list( - "donkshell", + unlocked_designs = list( + /datum/design/donkflechette, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) - hidden = TRUE - experimental = TRUE announce_channels = list(RADIO_CHANNEL_SECURITY) diff --git a/code/modules/research/techweb/nodes/biology_nodes.dm b/code/modules/research/techweb/nodes/biology_nodes.dm index ff100cd0d78c..0d5093caca7d 100644 --- a/code/modules/research/techweb/nodes/biology_nodes.dm +++ b/code/modules/research/techweb/nodes/biology_nodes.dm @@ -1,65 +1,61 @@ /datum/techweb_node/bio_scan - id = TECHWEB_NODE_BIO_SCAN display_name = "Biological Scan" description = "Advanced technology for analyzing patient health and reagent compositions, ensuring precise diagnostics and treatment in the medical bay." - prereq_ids = list(TECHWEB_NODE_MEDBAY_EQUIP) - design_ids = list( - "healthanalyzer", - "autopsyscanner", - "genescanner", - "medical_kiosk", - "chem_master", - "ph_meter", - "scigoggles", - "mod_reagent_scanner", + prerequisite_nodes = list(/datum/techweb_node/medbay_equip) + unlocked_designs = list( + /datum/design/healthanalyzer, + /datum/design/autopsy_scanner, + /datum/design/genescanner, + /datum/design/board/medical_kiosk, + /datum/design/board/chem_master, + /datum/design/ph_meter, + /datum/design/sci_goggles, + /datum/design/module/mod_reagent_scanner, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) announce_channels = list(RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cytology - id = TECHWEB_NODE_CYTOLOGY display_name = "Cytology" description = "Cellular biology research focused on cultivation of limbs and diverse organisms from cells." - prereq_ids = list(TECHWEB_NODE_BIO_SCAN) - design_ids = list( - "limbgrower", - "pandemic", - "vatgrower", - "petri_dish", - "swab", - "biopsy_tool", + prerequisite_nodes = list(/datum/techweb_node/bio_scan) + unlocked_designs = list( + /datum/design/board/limbgrower, + /datum/design/board/pandemic, + /datum/design/board/vatgrower, + /datum/design/petridish, + /datum/design/swab, + /datum/design/biopsy_tool, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) /datum/techweb_node/xenobiology - id = TECHWEB_NODE_XENOBIOLOGY display_name = "Xenobiology" description = "Exploration of non-human biology, unlocking the secrets of extraterrestrial lifeforms and their unique biological processes." - prereq_ids = list(TECHWEB_NODE_CYTOLOGY) - design_ids = list( - "xenobioconsole", - "slime_scanner", - "limbdesign_ethereal", - "limbdesign_felinid", - "limbdesign_lizard", - "limbdesign_plasmaman", + prerequisite_nodes = list(/datum/techweb_node/cytology) + unlocked_designs = list( + /datum/design/board/xenobiocamera, + /datum/design/slime_scanner, + /datum/design/limb_disk/ethereal, + /datum/design/limb_disk/felinid, + /datum/design/limb_disk/lizard, + /datum/design/limb_disk/plasmaman, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) discount_experiments = list(/datum/experiment/scanning/cytology/slime = TECHWEB_TIER_3_POINTS) /datum/techweb_node/gene_engineering - id = TECHWEB_NODE_GENE_ENGINEERING display_name = "Gene Engineering" description = "Research into sophisticated DNA manipulation techniques, enabling the modification of human genetic traits to unlock specific abilities and enhancements." - prereq_ids = list(TECHWEB_NODE_SELECTION, TECHWEB_NODE_XENOBIOLOGY) - design_ids = list( - "dnascanner", - "scan_console", - "dna_disk", - "dnainfuser", - "mod_dna_lock", - "fleshreshaper", - "fleshreshapermed", + prerequisite_nodes = list(/datum/techweb_node/selection, /datum/techweb_node/xenobiology) + unlocked_designs = list( + /datum/design/board/dnascanner, + /datum/design/board/scan_console, + /datum/design/dna_disk, + /datum/design/board/dnainfuser, + /datum/design/module/mod_dna_lock, + /datum/design/flesh_reshapers, + /datum/design/flesh_reshapers/medical, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) discount_experiments = list(/datum/experiment/scanning/people/mutant = TECHWEB_TIER_4_POINTS) @@ -67,41 +63,38 @@ // Botany root node /datum/techweb_node/botany_equip - id = TECHWEB_NODE_BOTANY_EQUIP - starting_node = TRUE display_name = "Botany Equipment" description = "Essential tools for maintaining onboard gardens, supporting plant growth in the unique environment of the space station." - design_ids = list( - "seed_extractor", - "plant_analyzer", - "watering_can", - "spade", - "cultivator", - "secateurs", - "hatchet", + node_flags = parent_type::node_flags | TECHWEB_NODE_STARTER + unlocked_designs = list( + /datum/design/board/seed_extractor, + /datum/design/plant_analyzer, + /datum/design/watering_can, + /datum/design/spade, + /datum/design/cultivator, + /datum/design/secateurs, + /datum/design/hatchet, ) /datum/techweb_node/hydroponics - id = TECHWEB_NODE_HYDROPONICS display_name = "Hydroponics" description = "Research into advanced hydroponic systems for efficient and sustainable plant cultivation." - prereq_ids = list(TECHWEB_NODE_BOTANY_EQUIP, TECHWEB_NODE_CHEM_SYNTHESIS) - design_ids = list( - "biogenerator", - "hydro_tray", - "portaseeder", + prerequisite_nodes = list(/datum/techweb_node/botany_equip, /datum/techweb_node/chem_synthesis) + unlocked_designs = list( + /datum/design/board/biogenerator, + /datum/design/board/hydroponics, + /datum/design/portaseeder, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) announce_channels = list(RADIO_CHANNEL_SERVICE) /datum/techweb_node/selection - id = TECHWEB_NODE_SELECTION display_name = "Artificial Selection" description = "Advancement in plant cultivation techniques through artificial selection, enabling precise manipulation of plant DNA." - prereq_ids = list(TECHWEB_NODE_HYDROPONICS) - design_ids = list( - "flora_gun", - "gene_shears", + prerequisite_nodes = list(/datum/techweb_node/hydroponics) + unlocked_designs = list( + /datum/design/flora_gun, + /datum/design/geneshears, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) required_experiments = list(/datum/experiment/scanning/random/plants/wild) diff --git a/code/modules/research/techweb/nodes/circuit_nodes.dm b/code/modules/research/techweb/nodes/circuit_nodes.dm index 2e173bf88a19..679dac606079 100644 --- a/code/modules/research/techweb/nodes/circuit_nodes.dm +++ b/code/modules/research/techweb/nodes/circuit_nodes.dm @@ -1,159 +1,155 @@ /datum/techweb_node/programming - id = TECHWEB_NODE_PROGRAMMING - starting_node = TRUE display_name = "Programming" description = "Dedicate an entire shift to program a fridge to greet you when opened." - prereq_ids = list(TECHWEB_NODE_ROBOTICS) - design_ids = list( - "component_printer", - "module_duplicator", - "circuit_multitool", - "compact_remote_shell", - "usb_cable", - "integrated_circuit", - "comp_access_checker", - "comp_arctan2", - "comp_arithmetic", - "comp_assoc_list_pick", - "comp_assoc_list_remove", - "comp_assoc_list_set", - "comp_binary_convert", - "comp_clock", - "comp_comparison", - "comp_concat", - "comp_concat_list", - "comp_decimal_convert", - "comp_delay", - "comp_direction", - "comp_element_find", - "comp_filter_list", - "comp_foreach", - "comp_format", - "comp_format_assoc", - "comp_get_column", - "comp_gps", - "comp_health", - "comp_health_state", - "comp_hear", - "comp_id_access_reader", - "comp_id_getter", - "comp_id_info_reader", - "comp_index", - "comp_index_assoc", - "comp_index_table", - "comp_laserpointer", - "comp_length", - "comp_light", - "comp_list_add", - "comp_list_assoc_literal", - "comp_list_clear", - "comp_list_literal", - "comp_list_pick", - "comp_list_remove", - "comp_logic", - "comp_matscanner", - "comp_mmi", - "comp_module", - "comp_multiplexer", - "comp_not", - "comp_ntnet_receive", - "comp_ntnet_send", - "comp_ntnet_send_list_literal", - "comp_nfc_send", - "comp_nfc_receive", - "comp_pinpointer", - "comp_pressuresensor", - "comp_radio", - "comp_random", - "comp_reagents", - "comp_router", - "comp_select_query", - "comp_self", - "comp_set_variable_trigger", - "comp_soundemitter", - "comp_species", - "comp_speech", - "comp_split", - "comp_string_contains", - "comp_tempsensor", - "comp_textcase", - "comp_timepiece", - "comp_toggle", - "comp_tonumber", - "comp_tostring", - "comp_trigonometry", - "comp_typecast", - "comp_typecheck", - "comp_view_sensor", - "comp_wire_bundle", - "comp_wirenet_receive", - "comp_wirenet_send", - "comp_wirenet_send_literal", + node_flags = parent_type::node_flags | TECHWEB_NODE_STARTER + prerequisite_nodes = list(/datum/techweb_node/robotics) + unlocked_designs = list( + /datum/design/board/component_printer, + /datum/design/board/module_printer, + /datum/design/circuit_multitool, + /datum/design/wiremod_shell/compact_remote, + /datum/design/usb_cable, + /datum/design/integrated_circuit, + /datum/design/component/access_checker, + /datum/design/component/math/arctan2, + /datum/design/component/math/arithmetic, + /datum/design/component/list/pick_assoc, + /datum/design/component/list/assoc_list_remove, + /datum/design/component/list/assoc_list_set, + /datum/design/component/math/binary_conversion, + /datum/design/component/utility/clock, + /datum/design/component/math/comparison, + /datum/design/component/string/concat, + /datum/design/component/list/concat, + /datum/design/component/math/decimal_conversion, + /datum/design/component/utility/delay, + /datum/design/component/entity/direction, + /datum/design/component/list/find, + /datum/design/component/list/filter, + /datum/design/component/list/foreach, + /datum/design/component/list/format, + /datum/design/component/list/format_assoc, + /datum/design/component/list/get_column, + /datum/design/component/entity/gps, + /datum/design/component/entity/health, + /datum/design/component/entity/compare_health_state, + /datum/design/component/entity/hear, + /datum/design/component/id_access_reader, + /datum/design/component/id_getter, + /datum/design/component/id_info_reader, + /datum/design/component/list/index, + /datum/design/component/list/index_assoc, + /datum/design/component/list/index_table, + /datum/design/component/action/laserpointer, + /datum/design/component/math/length, + /datum/design/component/action/light, + /datum/design/component/list/add, + /datum/design/component/list/assoc_literal, + /datum/design/component/list/clear, + /datum/design/component/list/literal, + /datum/design/component/list/pick, + /datum/design/component/list/remove, + /datum/design/component/math/logic, + /datum/design/component/entity/matscanner, + /datum/design/component/action/mmi, + /datum/design/component/module, + /datum/design/component/utility/multiplexer, + /datum/design/component/math/not, + /datum/design/component/ntnet_receive, + /datum/design/component/ntnet_send, + /datum/design/component/list/literal/ntnet_send, + /datum/design/component/nfc_send, + /datum/design/component/nfc_receive, + /datum/design/component/entity/pinpointer, + /datum/design/component/pressuresensor, + /datum/design/component/action/radio, + /datum/design/component/math/random, + /datum/design/component/entity/reagentscanner, + /datum/design/component/utility/router, + /datum/design/component/list/select_query, + /datum/design/component/entity/self, + /datum/design/component/utility/setter_trigger, + /datum/design/component/action/soundemitter, + /datum/design/component/entity/species, + /datum/design/component/action/speech, + /datum/design/component/list/split, + /datum/design/component/string/contains, + /datum/design/component/string/replace, + /datum/design/component/tempsensor, + /datum/design/component/string/textcase, + /datum/design/component/utility/timepiece, + /datum/design/component/math/toggle, + /datum/design/component/string/tonumber, + /datum/design/component/string/tostring, + /datum/design/component/math/trigonometry, + /datum/design/component/utility/typecast, + /datum/design/component/utility/typecheck, + /datum/design/component/view_sensor, + /datum/design/component/utility/wire_bundle, + /datum/design/component/wirenet_receive, + /datum/design/component/wirenet_send, + /datum/design/component/wirenet_send_literal, ) /datum/techweb_node/circuit_shells - id = TECHWEB_NODE_CIRCUIT_SHELLS display_name = "Advanced Circuit Shells" description = "Adding brains to more things." - prereq_ids = list(TECHWEB_NODE_PROGRAMMING) - design_ids = list( - "assembly_shell", - "bot_shell", - "controller_shell", - "dispenser_shell", - "door_shell", - "gun_shell", - "implant_shell", - "keyboard_shell", - "module_shell", - "money_bot_shell", - "scanner_gate_shell", - "scanner_shell", - "undertile_shell", - "wallmount_shell", - "comp_equip_action", + prerequisite_nodes = list(/datum/techweb_node/programming) + unlocked_designs = list( + /datum/design/wiremod_shell/assembly, + /datum/design/wiremod_shell/bot, + /datum/design/wiremod_shell/controller, + /datum/design/wiremod_shell/dispenser, + /datum/design/wiremod_shell/airlock, + /datum/design/wiremod_shell/gun, + /datum/design/wiremod_shell/implant, + /datum/design/wiremod_shell/keyboard, + /datum/design/wiremod_shell/mod_module, + /datum/design/wiremod_shell/money_bot, + /datum/design/wiremod_shell/scanner_gate, + /datum/design/wiremod_shell/scanner, + /datum/design/wiremod_shell/undertile, + /datum/design/wiremod_shell/wallmount, + /datum/design/component/action/equipment_action, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) /datum/techweb_node/bci - id = TECHWEB_NODE_BCI display_name = "Brain-Computer Interface" description = "Embedded brain circuits. May occasionally stream Nanotrasen ads in dreams." - prereq_ids = list(TECHWEB_NODE_CIRCUIT_SHELLS, TECHWEB_NODE_PASSIVE_IMPLANTS) - design_ids = list( - "bci_implanter", - "bci_shell", - "comp_bar_overlay", - "comp_camera_bci", - "comp_counter_overlay", - "comp_install_detector", - "comp_object_overlay", - "comp_reagent_injector", - "comp_target_intercept", - "comp_thought_listener", - "comp_vox", + prerequisite_nodes = list(/datum/techweb_node/circuit_shells, /datum/techweb_node/passive_implants) + unlocked_designs = list( + /datum/design/board/bci_implanter, + /datum/design/wiremod_shell/bci, + /datum/design/component/bci/bar_overlay, + /datum/design/component/bci/bci_camera, + /datum/design/component/bci/counter_overlay, + /datum/design/component/bci/install_detector, + /datum/design/component/bci/object_overlay, + /datum/design/component/bci/reagent_injector, + /datum/design/component/bci/target_intercept, + /datum/design/component/bci/thought_listener, + /datum/design/component/bci/vox, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) discount_experiments = list(/datum/experiment/scanning/people/skillchip = TECHWEB_TIER_2_POINTS) /datum/techweb_node/programmed_robot - id = TECHWEB_NODE_PROGRAMMED_ROBOT display_name = "Programmed Robot" description = "Grants access to movable shells, allowing for remote operations and pranks." - prereq_ids = list(TECHWEB_NODE_CIRCUIT_SHELLS) - design_ids = list( - "drone_shell", - "comp_pathfind", - "comp_pull", + prerequisite_nodes = list(/datum/techweb_node/circuit_shells) + unlocked_designs = list( + /datum/design/wiremod_shell/drone, + /datum/design/component/action/pathfind, + /datum/design/component/action/pull, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) /datum/techweb_node/programmed_server - id = TECHWEB_NODE_PROGRAMMED_SERVER display_name = "Programmed Server" description = "Grants access to a server shell that has a very high capacity for components." - prereq_ids = list(TECHWEB_NODE_BCI) - design_ids = list( - "server_shell", + prerequisite_nodes = list(/datum/techweb_node/bci) + unlocked_designs = list( + /datum/design/wiremod_shell/server, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) diff --git a/code/modules/research/techweb/nodes/cyborg_nodes.dm b/code/modules/research/techweb/nodes/cyborg_nodes.dm index 0db34a33d1bf..e1d38b4fea74 100644 --- a/code/modules/research/techweb/nodes/cyborg_nodes.dm +++ b/code/modules/research/techweb/nodes/cyborg_nodes.dm @@ -1,114 +1,108 @@ /datum/techweb_node/augmentation - id = TECHWEB_NODE_AUGMENTATION - starting_node = TRUE display_name = "Augmentation" description = "For those who prefer shiny metal over squishy flesh." - prereq_ids = list(TECHWEB_NODE_ROBOTICS) - design_ids = list( - "borg_chest", - "borg_head", - "borg_l_arm", - "borg_l_leg", - "borg_r_arm", - "borg_r_leg", - "borg_suit", - "cybernetic_eyes", - "cybernetic_eyes_moth", - "cybernetic_ears", - "cybernetic_ears_cat", - "cybernetic_lungs", - "cybernetic_stomach", - "cybernetic_liver", - "cybernetic_heart", + node_flags = parent_type::node_flags | TECHWEB_NODE_STARTER + prerequisite_nodes = list(/datum/techweb_node/robotics) + unlocked_designs = list( + /datum/design/borg_chest, + /datum/design/borg_head, + /datum/design/borg_l_arm, + /datum/design/borg_l_leg, + /datum/design/borg_r_arm, + /datum/design/borg_r_leg, + /datum/design/borg_suit, + /datum/design/cybernetic_eyes, + /datum/design/cybernetic_eyes/moth, + /datum/design/cybernetic_ears, + /datum/design/cybernetic_ears/cat, + /datum/design/cybernetic_lungs, + /datum/design/cybernetic_stomach, + /datum/design/cybernetic_liver, + /datum/design/cybernetic_heart, ) experiments_to_unlock = list( /datum/experiment/scanning/people/android, ) /datum/techweb_node/cybernetics - id = TECHWEB_NODE_CYBERNETICS display_name = "Cybernetics" description = "Sapient robots with preloaded tool modules and programmable laws." - prereq_ids = list(TECHWEB_NODE_AUGMENTATION) - design_ids = list( - "robocontrol", - "cyborgrecharger", - "mmi_posi", - "mmi", - "mmi_m", - "advanced_l_arm", - "advanced_r_arm", - "advanced_l_leg", - "advanced_r_leg", - "borg_upgrade_rename", - "borg_upgrade_restart", + prerequisite_nodes = list(/datum/techweb_node/augmentation) + unlocked_designs = list( + /datum/design/board/robocontrol, + /datum/design/board/cyborgrecharger, + /datum/design/posibrain, + /datum/design/mmi, + /datum/design/mmi/medical, + /datum/design/advanced_l_arm, + /datum/design/advanced_r_arm, + /datum/design/advanced_l_leg, + /datum/design/advanced_r_leg, + /datum/design/borg_upgrade_rename, + /datum/design/borg_upgrade_restart, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/borg_service - id = TECHWEB_NODE_BORG_SERVICES display_name = "Service Cyborg Upgrades" description = "Let them do the cookin' by the book." - prereq_ids = list(TECHWEB_NODE_CYBERNETICS) - design_ids = list( - "borg_upgrade_rolling_table", - "borg_upgrade_condiment_synthesizer", - "borg_upgrade_silicon_knife", - "borg_upgrade_service_apparatus", - "borg_upgrade_drink_apparatus", - "borg_upgrade_service_cookbook", - "borg_upgrade_botany", + prerequisite_nodes = list(/datum/techweb_node/cybernetics) + unlocked_designs = list( + /datum/design/borg_upgrade_rolling_table, + /datum/design/borg_upgrade_condiment_synthesizer, + /datum/design/borg_upgrade_silicon_knife, + /datum/design/borg_upgrade_service_apparatus, + /datum/design/borg_upgrade_drink_apparatus, + /datum/design/borg_upgrade_service_cookbook, + /datum/design/borg_upgrade_botany, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/borg_mining - id = TECHWEB_NODE_BORG_MINING display_name = "Mining Cyborg Upgrades" description = "To mine places too dangerous for humans." - prereq_ids = list(TECHWEB_NODE_CYBERNETICS) - design_ids = list( - "borg_upgrade_lavaproof", - "borg_upgrade_holding", - "borg_upgrade_diamonddrill", + prerequisite_nodes = list(/datum/techweb_node/cybernetics) + unlocked_designs = list( + /datum/design/borg_upgrade_lavaproof, + /datum/design/borg_upgrade_holding, + /datum/design/borg_upgrade_diamonddrill, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/borg_medical - id = TECHWEB_NODE_BORG_MEDICAL display_name = "Medical Cyborg Upgrades" description = "Let them follow Asimov's First Law." - prereq_ids = list(TECHWEB_NODE_BORG_SERVICES, TECHWEB_NODE_SURGERY_ADV) - design_ids = list( - "borg_upgrade_pinpointer", - "borg_upgrade_beakerapp", - "borg_upgrade_defibrillator", - "borg_upgrade_expandedsynthesiser", - "borg_upgrade_piercinghypospray", - "borg_upgrade_surgicalprocessor", - "borg_upgrade_surgicalomnitool", - "borg_upgrade_syringe", + prerequisite_nodes = list(/datum/techweb_node/borg_service, /datum/techweb_node/surgery_adv) + unlocked_designs = list( + /datum/design/borg_upgrade_pinpointer, + /datum/design/borg_upgrade_beaker_app, + /datum/design/borg_upgrade_defibrillator, + /datum/design/borg_upgrade_expandedsynthesiser, + /datum/design/borg_upgrade_piercinghypospray, + /datum/design/borg_upgrade_surgicalprocessor, + /datum/design/borg_upgrade_surgicalomnitool, + /datum/design/borg_upgrade_syringe, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/borg_utility - id = TECHWEB_NODE_BORG_UTILITY display_name = "Utility Cyborg Upgrades" description = "Let them wipe our floors for us." - prereq_ids = list(TECHWEB_NODE_BORG_SERVICES, TECHWEB_NODE_SANITATION) - design_ids = list( - "borg_upgrade_advancedmop", - "borg_upgrade_broomer", - "borg_upgrade_expand", - "borg_upgrade_prt", - "borg_upgrade_plunger", - "borg_upgrade_high_capacity_replacer", - "borg_upgrade_selfrepair", - "borg_upgrade_thrusters", - "borg_upgrade_trashofholding", + prerequisite_nodes = list(/datum/techweb_node/borg_service, /datum/techweb_node/sanitation) + unlocked_designs = list( + /datum/design/borg_upgrade_advancedmop, + /datum/design/borg_upgrade_broomer, + /datum/design/borg_upgrade_expand, + /datum/design/borg_upgrade_prt, + /datum/design/borg_upgrade_plunger, + /datum/design/borg_upgrade_high_capacity_replacer, + /datum/design/borg_upgrade_selfrepair, + /datum/design/borg_upgrade_thrusters, + /datum/design/borg_upgrade_trashofholding, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE) @@ -116,144 +110,136 @@ /datum/techweb_node/borg_utility/New() . = ..() if(!CONFIG_GET(flag/disable_secborg)) - design_ids += "borg_upgrade_disablercooler" + unlocked_designs += /datum/design/borg_upgrade_disablercooler /datum/techweb_node/borg_engi - id = TECHWEB_NODE_BORG_ENGI display_name = "Engineering Cyborg Upgrades" description = "To slack even more." - prereq_ids = list(TECHWEB_NODE_BORG_MINING, TECHWEB_NODE_PARTS_UPG) - design_ids = list( - "borg_upgrade_rped", - "borg_upgrade_engineeringomnitool", - "borg_upgrade_engineeringapp", - "borg_upgrade_inducer", + prerequisite_nodes = list(/datum/techweb_node/borg_mining, /datum/techweb_node/parts_upg) + unlocked_designs = list( + /datum/design/borg_upgrade_rped, + /datum/design/borg_upgrade_engineeringomnitool, + /datum/design/borg_upgrade_engineering_app, + /datum/design/borg_upgrade_inducer, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE) // Implants root node /datum/techweb_node/passive_implants - id = TECHWEB_NODE_PASSIVE_IMPLANTS display_name = "Passive Implants" description = "Implants designed to operate seamlessly without active user input, enhancing various physiological functions or providing continuous benefits." - prereq_ids = list(TECHWEB_NODE_AUGMENTATION) - design_ids = list( - "skill_station", - "implant_trombone", - "implant_chem", - "implant_tracking", - "implant_exile", - "implant_beacon", - "implant_bluespace", - "implantcase", - "implanter", - "locator", + prerequisite_nodes = list(/datum/techweb_node/augmentation) + unlocked_designs = list( + /datum/design/board/skill_station, + /datum/design/implant_sadtrombone, + /datum/design/implant_chem, + /datum/design/implant_tracking, + /datum/design/implant_exile, + /datum/design/implant_beacon, + /datum/design/implant_bluespace, + /datum/design/implantcase, + /datum/design/implanter, + /datum/design/locator, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) announce_channels = list(RADIO_CHANNEL_SECURITY, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cyber/cyber_implants - id = TECHWEB_NODE_CYBER_IMPLANTS display_name = "Cybernetic Implants" description = "Advanced technological enhancements integrated into the body, offering improved physical capabilities." - prereq_ids = list(TECHWEB_NODE_PASSIVE_IMPLANTS, TECHWEB_NODE_CYBERNETICS) - design_ids = list( - "ci-breather", - "ci-nutriment", - "ci-thrusters", - "ci-herculean", - "ci-connector", + prerequisite_nodes = list(/datum/techweb_node/passive_implants, /datum/techweb_node/cybernetics) + unlocked_designs = list( + /datum/design/cyberimp_breather, + /datum/design/cyberimp_nutriment, + /datum/design/cyberimp_thrusters, + /datum/design/cyberimp_herculean, + /datum/design/cyberimp_connector, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cyber/New() - ..() + . = ..() if(HAS_TRAIT(SSstation, STATION_TRAIT_CYBERNETIC_REVOLUTION)) research_costs[TECHWEB_POINT_TYPE_GENERIC] /= 2 /datum/techweb_node/cyber/combat_implants - id = TECHWEB_NODE_COMBAT_IMPLANTS display_name = "Combat Implants" description = "To make sure that you can wake the f*** up, samurai." - prereq_ids = list(TECHWEB_NODE_CYBER_IMPLANTS) - design_ids = list( - "ci-reviver", - "ci-antidrop", - "ci-antistun", - "ci-tacvisor", + prerequisite_nodes = list(/datum/techweb_node/cyber/cyber_implants) + unlocked_designs = list( + /datum/design/cyberimp_reviver, + /datum/design/cyberimp_antidrop, + /datum/design/cyberimp_antistun, + /datum/design/cyberimp_tacvisor, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cyber/integrated_toolsets - id = TECHWEB_NODE_INTERGRATED_TOOLSETS display_name = "Integrated Toolsets" description = "Decades of contraband smuggling by assistants have led to the development of a full toolbox that fits seamlessly into your arm." - prereq_ids = list(TECHWEB_NODE_COMBAT_IMPLANTS, TECHWEB_NODE_EXP_TOOLS) - design_ids = list( - "ci-nutrimentplus", - "ci-surgery", - "ci-surgery-brain", - "ci-toolset", + prerequisite_nodes = list(/datum/techweb_node/cyber/combat_implants, /datum/techweb_node/exp_tools) + unlocked_designs = list( + /datum/design/cyberimp_nutriment_plus, + /datum/design/cyberimp_surgical, + /datum/design/cyberimp_surgery_brain, + /datum/design/cyberimp_toolset, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cyber/cyber_organs - id = TECHWEB_NODE_CYBER_ORGANS display_name = "Cybernetic Organs" description = "We have the technology to rebuild him." - prereq_ids = list(TECHWEB_NODE_CYBERNETICS) - design_ids = list( - "cybernetic_eyes_improved", - "cybernetic_eyes_improved_moth", - "cybernetic_ears_u", - "cybernetic_ears_u_cat", - "cybernetic_lungs_tier2", - "cybernetic_stomach_tier2", - "cybernetic_liver_tier2", - "cybernetic_heart_tier2", + prerequisite_nodes = list(/datum/techweb_node/cybernetics) + unlocked_designs = list( + /datum/design/cybernetic_eyes/improved, + /datum/design/cybernetic_eyes/improved/moth, + /datum/design/cybernetic_ears_u, + /datum/design/cybernetic_ears_u/cat, + /datum/design/cybernetic_lungs/tier2, + /datum/design/cybernetic_stomach/tier2, + /datum/design/cybernetic_liver/tier2, + /datum/design/cybernetic_heart/tier2, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cyber/cyber_organs_upgraded - id = TECHWEB_NODE_CYBER_ORGANS_UPGRADED display_name = "Upgraded Cybernetic Organs" description = "We have the technology to upgrade him." - prereq_ids = list(TECHWEB_NODE_CYBER_ORGANS) - design_ids = list( - "ci-gloweyes", - "ci-welding", - "ci-gloweyes-moth", - "ci-welding-moth", - "cybernetic_ears_whisper", - "cybernetic_ears_whisper_cat", - "cybernetic_ears_volume", - "cybernetic_ears_volume_cat", - "cybernetic_lungs_tier3", - "cybernetic_stomach_tier3", - "cybernetic_liver_tier3", - "cybernetic_heart_tier3", + prerequisite_nodes = list(/datum/techweb_node/cyber/cyber_organs) + unlocked_designs = list( + /datum/design/cyberimp_gloweyes, + /datum/design/cyberimp_welding, + /datum/design/cyberimp_gloweyes/moth, + /datum/design/cyberimp_welding/moth, + /datum/design/cybernetic_ears_whisper, + /datum/design/cybernetic_ears_whisper/cat, + /datum/design/cybernetic_ears_volume, + /datum/design/cybernetic_ears_volume/cat, + /datum/design/cybernetic_lungs/tier3, + /datum/design/cybernetic_stomach/tier3, + /datum/design/cybernetic_liver/tier3, + /datum/design/cybernetic_heart/tier3, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) required_experiments = list(/datum/experiment/scanning/people/augmented_organs) announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cyber/cyber_organs_adv - id = TECHWEB_NODE_CYBER_ORGANS_ADV display_name = "Advanced Cybernetic Organs" description = "Cutting-edge cybernetic organs offering enhanced sensory capabilities, making it easier than ever to detect ERP." - prereq_ids = list(TECHWEB_NODE_CYBER_ORGANS_UPGRADED, TECHWEB_NODE_NIGHT_VISION) - design_ids = list( - "cybernetic_ears_xray", - "cybernetic_ears_xray_cat", - "ci-thermals", - "ci-xray", - "ci-thermals-moth", - "ci-xray-moth", + prerequisite_nodes = list(/datum/techweb_node/cyber/cyber_organs_upgraded, /datum/techweb_node/night_vision) + unlocked_designs = list( + /datum/design/cybernetic_ears_xray, + /datum/design/cybernetic_ears_xray/cat, + /datum/design/cyberimp_thermals, + /datum/design/cyberimp_xray, + /datum/design/cyberimp_thermals/moth, + /datum/design/cyberimp_xray/moth, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) discount_experiments = list(/datum/experiment/scanning/people/android = TECHWEB_TIER_5_POINTS) diff --git a/code/modules/research/techweb/nodes/engi_nodes.dm b/code/modules/research/techweb/nodes/engi_nodes.dm index ce8fbfd25d30..540d31317a16 100644 --- a/code/modules/research/techweb/nodes/engi_nodes.dm +++ b/code/modules/research/techweb/nodes/engi_nodes.dm @@ -1,62 +1,59 @@ // Parts root node /datum/techweb_node/parts - id = TECHWEB_NODE_PARTS - starting_node = TRUE display_name = "Essential Stock Parts" description = "Foundational components that form the backbone of station operations, encompassing a range of essential equipment necessary for day-to-day functionality." - design_ids = list( - "micro_servo", - "basic_battery", - "basic_capacitor", - "basic_cell", - "basic_matter_bin", - "basic_micro_laser", - "basic_scanning", - "high_battery", - "high_cell", - "miniature_power_cell", - "condenser", - "igniter", - "infrared_emitter", - "prox_sensor", - "signaler", - "timer", - "voice_analyzer", - "health_sensor", - "sflash", + node_flags = parent_type::node_flags | TECHWEB_NODE_STARTER + unlocked_designs = list( + /datum/design/micro_servo, + /datum/design/basic_battery, + /datum/design/basic_capacitor, + /datum/design/basic_cell, + /datum/design/basic_matter_bin, + /datum/design/basic_micro_laser, + /datum/design/basic_scanning, + /datum/design/high_battery, + /datum/design/high_cell, + /datum/design/miniature_power_cell, + /datum/design/condenser, + /datum/design/igniter, + /datum/design/infrared_emitter, + /datum/design/prox_sensor, + /datum/design/signaler, + /datum/design/timer, + /datum/design/voice_analyzer, + /datum/design/health_sensor, + /datum/design/synthetic_flash, ) /datum/techweb_node/parts_upg - id = TECHWEB_NODE_PARTS_UPG display_name = "Upgraded Parts" description = "Offering enhanced capabilities beyond their basic counterparts." - prereq_ids = list(TECHWEB_NODE_PARTS, TECHWEB_NODE_ENERGY_MANIPULATION) - design_ids = list( - "rped", - "high_micro_laser", - "adv_capacitor", - "nano_servo", - "adv_matter_bin", - "adv_scanning", - "super_battery", - "super_cell", + prerequisite_nodes = list(/datum/techweb_node/parts, /datum/techweb_node/energy_manipulation) + unlocked_designs = list( + /datum/design/rped, + /datum/design/high_micro_laser, + /datum/design/adv_capacitor, + /datum/design/nano_servo, + /datum/design/adv_matter_bin, + /datum/design/adv_scanning, + /datum/design/super_battery, + /datum/design/super_cell, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/parts_adv - id = TECHWEB_NODE_PARTS_ADV display_name = "Advanced Parts" description = "The most finely tuned and accurate stock parts." - prereq_ids = list(TECHWEB_NODE_PARTS_UPG) - design_ids = list( - "ultra_micro_laser", - "super_capacitor", - "pico_servo", - "super_matter_bin", - "phasic_scanning", - "hyper_battery", - "hyper_cell", + prerequisite_nodes = list(/datum/techweb_node/parts_upg) + unlocked_designs = list( + /datum/design/ultra_micro_laser, + /datum/design/super_capacitor, + /datum/design/pico_servo, + /datum/design/super_matter_bin, + /datum/design/phasic_scanning, + /datum/design/hyper_battery, + /datum/design/hyper_cell, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) discount_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier2_any = TECHWEB_TIER_3_POINTS) @@ -64,204 +61,195 @@ /datum/techweb_node/parts_bluespace - id = TECHWEB_NODE_PARTS_BLUESPACE display_name = "Bluespace Parts" description = "Integrating the latest in bluespace technology, these advanced components not only enhance functionality but also open up new possibilities for the station's technological capabilities." - prereq_ids = list(TECHWEB_NODE_PARTS_ADV, TECHWEB_NODE_BLUESPACE_TRAVEL) - design_ids = list( - "bs_rped", - "quadultra_micro_laser", - "quadratic_capacitor", - "femto_servo", - "bluespace_matter_bin", - "triphasic_scanning", - "bluespace_battery", - "bluespace_cell", + prerequisite_nodes = list(/datum/techweb_node/parts_adv, /datum/techweb_node/bluespace_travel) + unlocked_designs = list( + /datum/design/bs_rped, + /datum/design/quadultra_micro_laser, + /datum/design/quadratic_capacitor, + /datum/design/femto_servo, + /datum/design/bluespace_matter_bin, + /datum/design/triphasic_scanning, + /datum/design/bluespace_battery, + /datum/design/bluespace_cell, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) discount_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier3_any = TECHWEB_TIER_4_POINTS) announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/telecomms - id = TECHWEB_NODE_TELECOMS display_name = "Telecommunications Technology" description = "A comprehensive suite of machinery for station-wide communication setups, ensuring seamless connectivity and operational coordination." - prereq_ids = list(TECHWEB_NODE_PARTS_BLUESPACE) - design_ids = list( - "comm_monitor", - "comm_server", - "message_monitor", - "ntnet_relay", - "s_hub", - "s_messaging", - "s_server", - "s_processor", - "s_relay", - "s_bus", - "s_broadcaster", - "s_receiver", - "s_amplifier", - "s_analyzer", - "s_ansible", - "s_crystal", - "s_filter", - "s_transmitter", - "s_treatment", + prerequisite_nodes = list(/datum/techweb_node/parts_bluespace) + unlocked_designs = list( + /datum/design/board/comm_monitor, + /datum/design/board/comm_server, + /datum/design/board/message_monitor, + /datum/design/board/ntnet_relay, + /datum/design/board/telecomms_hub, + /datum/design/board/telecomms_messaging, + /datum/design/board/telecomms_server, + /datum/design/board/telecomms_processor, + /datum/design/board/telecomms_relay, + /datum/design/board/telecomms_bus, + /datum/design/board/subspace_broadcaster, + /datum/design/board/subspace_receiver, + /datum/design/subspace_amplifier, + /datum/design/subspace_analyzer, + /datum/design/subspace_ansible, + /datum/design/subspace_crystal, + /datum/design/hyperwave_filter, + /datum/design/subspace_transmitter, + /datum/design/subspace_treatment, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) // Engineering root node /datum/techweb_node/construction - id = TECHWEB_NODE_CONSTRUCTION - starting_node = TRUE display_name = "Construction" description = "Tools and essential machinery used for station maintenance and expansion." - design_ids = list( - "circuit_imprinter_offstation", - "circuit_imprinter", - "solarcontrol", - "solar_panel", - "solar_tracker", - "power_control", - "airalarm_electronics", - "airlock_board", - "firealarm_electronics", - "firelock_board", - "trapdoor_electronics", - "blast", - "ignition", - "big_manipulator", - "airlock_painter", - "decal_painter", - "rwd", - "cable_coil", - "welding_helmet", - "welding_tool", - "mini_welding_tool", - "tscanner", - "multitool", - "wrench", - "crowbar", - "screwdriver", - "wirecutters", - "light_bulb", - "light_tube", - "crossing_signal", - "guideway_sensor", - "manuunloader", - "manusmelter", - "manucrusher", - "manucrafter", - "manulathe", - "manusorter", - "manurouter", - "mailsorter", + node_flags = parent_type::node_flags | TECHWEB_NODE_STARTER + unlocked_designs = list( + /datum/design/board/circuit_imprinter/offstation, + /datum/design/board/circuit_imprinter, + /datum/design/board/solarcontrol, + /datum/design/solar, + /datum/design/tracker_electronics, + /datum/design/apc_board, + /datum/design/airalarm_electronics, + /datum/design/airlock_board, + /datum/design/firealarm_electronics, + /datum/design/firelock_board, + /datum/design/trapdoor_electronics, + /datum/design/control, + /datum/design/ignition_control, + /datum/design/board/big_manipulator, + /datum/design/airlock_painter, + /datum/design/airlock_painter/decal, + /datum/design/rwd, + /datum/design/cable_coil, + /datum/design/welding_helmet, + /datum/design/weldingtool, + /datum/design/mini_weldingtool, + /datum/design/tscanner, + /datum/design/multitool, + /datum/design/wrench, + /datum/design/crowbar, + /datum/design/screwdriver, + /datum/design/wirecutters, + /datum/design/light_bulb, + /datum/design/light_tube, + /datum/design/board/crossing_signal, + /datum/design/board/guideway_sensor, + /datum/design/board/manuunloader, + /datum/design/board/manusmelter, + /datum/design/board/manucrusher, + /datum/design/board/manucrafter, + /datum/design/board/manulathe, + /datum/design/board/manusorter, + /datum/design/board/manurouter, + /datum/design/board/mailsorter, ) /datum/techweb_node/energy_manipulation - id = TECHWEB_NODE_ENERGY_MANIPULATION display_name = "Energy Manipulation" description = "Harnessing the raw power of lightning arcs through sophisticated energy control methods." - prereq_ids = list(TECHWEB_NODE_CONSTRUCTION) - design_ids = list( - "apc_control", - "powermonitor", - "smes", - "portable_smes", - "power_connector", - "emitter", - "grounding_rod", - "tesla_coil", - "cell_charger", - "recharger", - "inducer", - "inducerengi", - "welding_goggles", - "tray_goggles", - "geigercounter", - "diode_disk_stamina" + prerequisite_nodes = list(/datum/techweb_node/construction) + unlocked_designs = list( + /datum/design/board/apc_control, + /datum/design/board/powermonitor, + /datum/design/board/smes, + /datum/design/board/smesbank, + /datum/design/board/power_connector, + /datum/design/board/emitter, + /datum/design/board/grounding_rod, + /datum/design/board/tesla_coil, + /datum/design/board/cell_charger, + /datum/design/board/recharger, + /datum/design/inducer, + /datum/design/inducerengi, + /datum/design/welding_goggles, + /datum/design/tray_goggles, + /datum/design/geiger, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/shuttle_engineering - id = TECHWEB_NODE_SHUTTLE_ENG display_name = "Shuttle Engineering" description = "Materials and equipment for constructing shuttles" - prereq_ids = list(TECHWEB_NODE_ENERGY_MANIPULATION, TECHWEB_NODE_APPLIED_BLUESPACE) - design_ids = list( - "borg_upgrade_engineering_shuttle_blueprints", - "propulsion_engine", - "shuttle_blueprints", - "shuttle_control", - "shuttle_docker", - "shuttlerods", - "shuttle_remote", + prerequisite_nodes = list(/datum/techweb_node/energy_manipulation, /datum/techweb_node/applied_bluespace) + unlocked_designs = list( + /datum/design/borg_upgrade_shuttle_blueprints, + /datum/design/board/propulsion_engine, + /datum/design/shuttle_blueprints, + /datum/design/board/shuttle/flight_control, + /datum/design/board/shuttle/shuttle_docker, + /datum/design/shuttle_rods, + /datum/design/shuttle_remote, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) announce_channels = list(RADIO_CHANNEL_ENGINEERING, RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_SUPPLY) /datum/techweb_node/holographics - id = TECHWEB_NODE_HOLOGRAPHICS display_name = "Holographics" description = "Use of holographic technology for signage and barriers." - prereq_ids = list(TECHWEB_NODE_ENERGY_MANIPULATION) - design_ids = list( - "atmosshieldgen", - "forcefield_projector", - "holosign", - "holosignsec", - "holosignengi", - "holosignatmos", - "holosignrestaurant", - "holosignbar", - "holobarrier_jani", - "holobarrier_med", - "holopad", - "holodisk", - "modular_shield_gate", - "modular_shield_generator", - "modular_shield_node", - "modular_shield_cable", - "modular_shield_relay", - "modular_shield_charger", - "modular_shield_well", - "modular_shield_console", - "diode_disk_magnetic", + prerequisite_nodes = list(/datum/techweb_node/energy_manipulation) + unlocked_designs = list( + /datum/design/board/atmosshieldgen, + /datum/design/forcefield_projector, + /datum/design/holosign, + /datum/design/holosignsec, + /datum/design/holosignengi, + /datum/design/holosignatmos, + /datum/design/holosign/restaurant, + /datum/design/holosign/bar, + /datum/design/holobarrier_jani, + /datum/design/holobarrier_med, + /datum/design/board/holopad, + /datum/design/holodisk, + /datum/design/board/modular_shield_gate, + /datum/design/board/modular_shield_generator, + /datum/design/board/modular_shield_node, + /datum/design/board/modular_shield_cable, + /datum/design/board/modular_shield_relay, + /datum/design/board/modular_shield_charger, + /datum/design/board/modular_shield_well, + /datum/design/board/modular_shield_console, + /datum/design/diode_disk_magnetic, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) /datum/techweb_node/hud - id = TECHWEB_NODE_HUD display_name = "Integrated HUDs" description = "Initially developed for assistants to learn the nuances of different professions through augmented reality." - prereq_ids = list(TECHWEB_NODE_HOLOGRAPHICS, TECHWEB_NODE_CYBER_IMPLANTS) - design_ids = list( - "health_hud", - "diagnostic_hud", - "security_hud", - "mod_visor_medhud", - "mod_visor_diaghud", - "mod_visor_sechud", - "ci-medhud", - "ci-diaghud", - "ci-sechud", + prerequisite_nodes = list(/datum/techweb_node/holographics, /datum/techweb_node/cyber/cyber_implants) + unlocked_designs = list( + /datum/design/health_hud, + /datum/design/diagnostic_hud, + /datum/design/security_hud, + /datum/design/module/mod_visor_medhud, + /datum/design/module/mod_visor_diaghud, + /datum/design/module/mod_visor_sechud, + /datum/design/cyberimp_medical_hud, + /datum/design/cyberimp_diagnostic_hud, + /datum/design/cyberimp_security_hud, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) announce_channels = list(RADIO_CHANNEL_ENGINEERING, RADIO_CHANNEL_SECURITY, RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/night_vision - id = TECHWEB_NODE_NIGHT_VISION display_name = "Night Vision Technology" description = "There are whispers that Nanotrasen pushed for this technology to extend shift durations, ensuring productivity around the clock." - prereq_ids = list(TECHWEB_NODE_HUD) - design_ids = list( - "diagnostic_hud_night", - "health_hud_night", - "night_visision_goggles", - "nvgmesons", - "nv_scigoggles", - "security_hud_night", + prerequisite_nodes = list(/datum/techweb_node/hud) + unlocked_designs = list( + /datum/design/diagnostic_hud_night, + /datum/design/health_hud_night, + /datum/design/night_vision_goggles, + /datum/design/nvgmesons, + /datum/design/nv_sci_goggles, + /datum/design/security_hud_night, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) announce_channels = list(RADIO_CHANNEL_ENGINEERING, RADIO_CHANNEL_SECURITY, RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) diff --git a/code/modules/research/techweb/nodes/mech_nodes.dm b/code/modules/research/techweb/nodes/mech_nodes.dm index d4238e1b6f05..e9dda295220d 100644 --- a/code/modules/research/techweb/nodes/mech_nodes.dm +++ b/code/modules/research/techweb/nodes/mech_nodes.dm @@ -1,264 +1,250 @@ /datum/techweb_node/mech_assembly - id = TECHWEB_NODE_MECH_ASSEMBLY - starting_node = TRUE display_name = "Exosuit Assembly" description = "Development of mechanical exosuits designed to contend with artificial gravity while transporting cargo." - prereq_ids = list(TECHWEB_NODE_ROBOTICS) - design_ids = list( - "mechapower", - "mech_recharger", - "ripley_chassis", - "ripley_torso", - "ripley_left_arm", - "ripley_right_arm", - "ripley_left_leg", - "ripley_right_leg", - "ripley_main", - "ripley_peri", - "mech_hydraulic_clamp", + node_flags = parent_type::node_flags | TECHWEB_NODE_STARTER + prerequisite_nodes = list(/datum/techweb_node/robotics) + unlocked_designs = list( + /datum/design/board/mechapower, + /datum/design/board/mech_recharger, + /datum/design/ripley_chassis, + /datum/design/ripley_torso, + /datum/design/ripley_left_arm, + /datum/design/ripley_right_arm, + /datum/design/ripley_left_leg, + /datum/design/ripley_right_leg, + /datum/design/board/ripley_main, + /datum/design/board/ripley_peri, + /datum/design/mech_hydraulic_clamp, ) /datum/techweb_node/mech_equipment - id = TECHWEB_NODE_MECH_EQUIPMENT display_name = "Expedition Equipment" description = "Specialized exosuit gear tailored for navigating space and celestial bodies, ensuring durability and functionality in the harshest conditions." - prereq_ids = list(TECHWEB_NODE_MECH_ASSEMBLY) - design_ids = list( - "mechacontrol", - "botpad", - "botpad_remote", - "ripleyupgrade", - "mech_air_tank", - "mech_thrusters", - "mech_extinguisher", - "mecha_camera", - "mecha_tracking", - "mech_radio", + prerequisite_nodes = list(/datum/techweb_node/mech_assembly) + unlocked_designs = list( + /datum/design/board/mechacontrol, + /datum/design/board/botpad, + /datum/design/botpad_remote, + /datum/design/ripleyupgrade, + /datum/design/mech_air_tank, + /datum/design/mech_thrusters, + /datum/design/mech_extinguisher, + /datum/design/mecha_camera, + /datum/design/mecha_tracking, + /datum/design/mech_radio, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_clown - id = TECHWEB_NODE_MECH_CLOWN display_name = "Funny Robots" description = "Fueled by laughter." - prereq_ids = list(TECHWEB_NODE_MECH_ASSEMBLY) - design_ids = list( - "honk_chassis", - "honk_torso", - "honk_head", - "honk_left_arm", - "honk_right_arm", - "honk_left_leg", - "honk_right_leg", - "honker_main", - "honker_peri", - "honker_targ", - "mech_banana_mortar", - "mech_honker", - "mech_mousetrap_mortar", - "mech_punching_face", - "borg_transform_clown", + prerequisite_nodes = list(/datum/techweb_node/mech_assembly) + unlocked_designs = list( + /datum/design/honk_chassis, + /datum/design/honk_torso, + /datum/design/honk_head, + /datum/design/honk_left_arm, + /datum/design/honk_right_arm, + /datum/design/honk_left_leg, + /datum/design/honk_right_leg, + /datum/design/board/honker_main, + /datum/design/board/honker_peri, + /datum/design/board/honker_targ, + /datum/design/mech_banana_mortar, + /datum/design/mech_honker, + /datum/design/mech_mousetrap_mortar, + /datum/design/mech_punching_glove, + /datum/design/borg_transform_clown, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_SECURITY) //The dread upon security when they hear this... /datum/techweb_node/mech_medical - id = TECHWEB_NODE_MECH_MEDICAL display_name = "Medical Exosuit" description = "Advanced robotic unit equipped with syringe guns and healing beams, revolutionizing medical assistance in hazardous environments." - prereq_ids = list(TECHWEB_NODE_MECH_ASSEMBLY, TECHWEB_NODE_CHEM_SYNTHESIS) - design_ids = list( - "odysseus_chassis", - "odysseus_torso", - "odysseus_head", - "odysseus_left_arm", - "odysseus_right_arm", - "odysseus_left_leg", - "odysseus_right_leg", - "odysseus_main", - "odysseus_peri", - "mech_medi_beam", - "mech_syringe_gun", + prerequisite_nodes = list(/datum/techweb_node/mech_assembly, /datum/techweb_node/chem_synthesis) + unlocked_designs = list( + /datum/design/odysseus_chassis, + /datum/design/odysseus_torso, + /datum/design/odysseus_head, + /datum/design/odysseus_left_arm, + /datum/design/odysseus_right_arm, + /datum/design/odysseus_left_leg, + /datum/design/odysseus_right_leg, + /datum/design/board/odysseus_main, + /datum/design/board/odysseus_peri, + /datum/design/mech_medical_beamgun, + /datum/design/mech_syringe_gun, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) /datum/techweb_node/mech_mining - id = TECHWEB_NODE_MECH_MINING display_name = "Mining Exosuit" description = "Robust exosuit engineered to withstand lava and storms for continuous off-station mining operations." - prereq_ids = list(TECHWEB_NODE_MECH_EQUIPMENT, TECHWEB_NODE_MINING) - design_ids = list( - "clarke_chassis", - "clarke_torso", - "clarke_head", - "clarke_left_arm", - "clarke_right_arm", - "clarke_main", - "clarke_peri", - "mecha_kineticgun", + prerequisite_nodes = list(/datum/techweb_node/mech_equipment, /datum/techweb_node/mining) + unlocked_designs = list( + /datum/design/clarke_chassis, + /datum/design/clarke_torso, + /datum/design/clarke_head, + /datum/design/clarke_left_arm, + /datum/design/clarke_right_arm, + /datum/design/board/clarke_main, + /datum/design/board/clarke_peri, + /datum/design/mecha_kineticgun, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_SUPPLY) /datum/techweb_node/mech_combat - id = TECHWEB_NODE_MECH_COMBAT display_name = "Combat Exosuits" description = "Modular armor upgrades and specialized equipment for security exosuits." - prereq_ids = list(TECHWEB_NODE_MECH_EQUIPMENT) - design_ids = list( - "mech_ccw_armor", - "mech_proj_armor", - "mech_emp_armor", - "paddyupgrade", - "mech_hydraulic_claw", - "mech_disabler", - "mech_repair_droid", + prerequisite_nodes = list(/datum/techweb_node/mech_equipment) + unlocked_designs = list( + /datum/design/mech_ccw_armor, + /datum/design/mech_proj_armor, + /datum/design/mech_emp_armor, + /datum/design/paddyupgrade, + /datum/design/mech_hydraulic_claw, + /datum/design/mech_disabler, + /datum/design/mech_repair_droid, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) required_experiments = list(/datum/experiment/scanning/random/mecha_equipped_scan) announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_assault - id = TECHWEB_NODE_MECH_ASSAULT display_name = "Assault Exosuits" description = "Heavy battle exosuits boasting robust armor but sacrificing speed for enhanced durability." - prereq_ids = list(TECHWEB_NODE_MECH_COMBAT) - design_ids = list( - "durand_armor", - "durand_chassis", - "durand_torso", - "durand_head", - "durand_left_arm", - "durand_right_arm", - "durand_left_leg", - "durand_right_leg", - "durand_main", - "durand_peri", - "durand_targ", + prerequisite_nodes = list(/datum/techweb_node/mech_combat) + unlocked_designs = list( + /datum/design/durand_armor, + /datum/design/durand_chassis, + /datum/design/durand_torso, + /datum/design/durand_head, + /datum/design/durand_left_arm, + /datum/design/durand_right_arm, + /datum/design/durand_left_leg, + /datum/design/durand_right_leg, + /datum/design/board/durand_main, + /datum/design/board/durand_peri, + /datum/design/board/durand_targ, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_light - id = TECHWEB_NODE_MECH_LIGHT display_name = "Light Combat Exosuits" description = "Agile combat exosuits equipped with overclocking capabilities for temporary speed boosts, prioritizing speed over durability on the battlefield." - prereq_ids = list(TECHWEB_NODE_MECH_COMBAT) - design_ids = list( - "gygax_armor", - "gygax_chassis", - "gygax_torso", - "gygax_head", - "gygax_left_arm", - "gygax_right_arm", - "gygax_left_leg", - "gygax_right_leg", - "gygax_main", - "gygax_peri", - "gygax_targ", + prerequisite_nodes = list(/datum/techweb_node/mech_combat) + unlocked_designs = list( + /datum/design/gygax_armor, + /datum/design/gygax_chassis, + /datum/design/gygax_torso, + /datum/design/gygax_head, + /datum/design/gygax_left_arm, + /datum/design/gygax_right_arm, + /datum/design/gygax_left_leg, + /datum/design/gygax_right_leg, + /datum/design/board/gygax_main, + /datum/design/board/gygax_peri, + /datum/design/board/gygax_targ, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_heavy - id = TECHWEB_NODE_MECH_HEAVY display_name = "Heavy Exosuits" description = "Advanced heavy mechanized unit with dual pilot capability, designed for robust battlefield performance and increased tactical versatility." - prereq_ids = list(TECHWEB_NODE_MECH_ASSAULT) - design_ids = list( - "savannah_ivanov_armor", - "savannah_ivanov_chassis", - "savannah_ivanov_torso", - "savannah_ivanov_head", - "savannah_ivanov_left_arm", - "savannah_ivanov_right_arm", - "savannah_ivanov_left_leg", - "savannah_ivanov_right_leg", - "savannah_ivanov_main", - "savannah_ivanov_peri", - "savannah_ivanov_targ", + prerequisite_nodes = list(/datum/techweb_node/mech_assault) + unlocked_designs = list( + /datum/design/savannah_ivanov_armor, + /datum/design/savannah_ivanov_chassis, + /datum/design/savannah_ivanov_torso, + /datum/design/savannah_ivanov_head, + /datum/design/savannah_ivanov_left_arm, + /datum/design/savannah_ivanov_right_arm, + /datum/design/savannah_ivanov_left_leg, + /datum/design/savannah_ivanov_right_leg, + /datum/design/board/savannah_ivanov_main, + /datum/design/board/savannah_ivanov_peri, + /datum/design/board/savannah_ivanov_targ, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_infiltrator - id = TECHWEB_NODE_MECH_INFILTRATOR display_name = "Infiltration Exosuits" description = "Advanced exosuit with phasing capabilities, allowing it to move through walls and obstacles, ideal for covert and special operations." - prereq_ids = list(TECHWEB_NODE_MECH_LIGHT, TECHWEB_NODE_ANOMALY_RESEARCH) - design_ids = list( - "phazon_armor", - "phazon_chassis", - "phazon_torso", - "phazon_head", - "phazon_left_arm", - "phazon_right_arm", - "phazon_left_leg", - "phazon_right_leg", - "phazon_main", - "phazon_peri", - "phazon_targ", + prerequisite_nodes = list(/datum/techweb_node/mech_light, /datum/techweb_node/anomaly_research) + unlocked_designs = list( + /datum/design/phazon_armor, + /datum/design/phazon_chassis, + /datum/design/phazon_torso, + /datum/design/phazon_head, + /datum/design/phazon_left_arm, + /datum/design/phazon_right_arm, + /datum/design/phazon_left_leg, + /datum/design/phazon_right_leg, + /datum/design/board/phazon_main, + /datum/design/board/phazon_peri, + /datum/design/board/phazon_targ, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_energy_guns - id = TECHWEB_NODE_MECH_ENERGY_GUNS display_name = "Exosuit Energy Guns" description = "Scaled-up versions of electric weapons optimized for exosuit deployment." - prereq_ids = list(TECHWEB_NODE_MECH_COMBAT, TECHWEB_NODE_ELECTRIC_WEAPONS) - design_ids = list( - "mech_laser", - "mech_laser_heavy", - "mech_ion", - "mech_tesla", + prerequisite_nodes = list(/datum/techweb_node/mech_combat, /datum/techweb_node/electric_weapons) + unlocked_designs = list( + /datum/design/mech_laser, + /datum/design/mech_laser_heavy, + /datum/design/mech_ion, + /datum/design/mech_tesla, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) discount_experiments = list(/datum/experiment/scanning/random/mecha_damage_scan = TECHWEB_TIER_4_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_firearms - id = TECHWEB_NODE_MECH_FIREARMS display_name = "Exosuit Firearms" description = "Mounted ballistic weaponry, enhancing combat capabilities for mechanized units." - prereq_ids = list(TECHWEB_NODE_MECH_ENERGY_GUNS, TECHWEB_NODE_EXOTIC_AMMO) - design_ids = list( - "mech_lmg", - "mech_lmg_ammo", - "mech_scattershot", - "mech_scattershot_ammo", - "mech_carbine", - "mech_carbine_ammo", + prerequisite_nodes = list(/datum/techweb_node/mech_energy_guns, /datum/techweb_node/exotic_ammo) + unlocked_designs = list( + /datum/design/mech_lmg, + /datum/design/mech_lmg_ammo, + /datum/design/mech_scattershot, + /datum/design/mech_scattershot_ammo, + /datum/design/mech_carbine, + /datum/design/mech_carbine_ammo, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_heavy_arms - id = TECHWEB_NODE_MECH_HEAVY_ARMS display_name = "Heavy Exosuit Firearms" description = "High-impact weaponry integrated into mechs, optimized for maximum firepower." - prereq_ids = list(TECHWEB_NODE_MECH_HEAVY, TECHWEB_NODE_EXOTIC_AMMO) - design_ids = list( - "clusterbang_launcher", - "clusterbang_launcher_ammo", - "mech_grenade_launcher", - "mech_grenade_launcher_ammo", - "mech_missile_rack", - "mech_missile_rack_ammo", + prerequisite_nodes = list(/datum/techweb_node/mech_heavy, /datum/techweb_node/exotic_ammo) + unlocked_designs = list( + /datum/design/clusterbang_launcher, + /datum/design/clusterbang_launcher_ammo, + /datum/design/mech_grenade_launcher, + /datum/design/mech_grenade_launcher_ammo, + /datum/design/mech_missile_rack, + /datum/design/mech_missile_rack_ammo, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_equip_bluespace - id = TECHWEB_NODE_MECH_EQUIP_BLUESPACE display_name = "Bluespace Exosuit Equipment" description = "An array of equipment empowered by bluespace, providing unmatched mobility and utility." - prereq_ids = list(TECHWEB_NODE_MECH_INFILTRATOR, TECHWEB_NODE_BLUESPACE_TRAVEL) - design_ids = list( - "mech_gravcatapult", - "mech_teleporter", - "mech_wormhole_gen", + prerequisite_nodes = list(/datum/techweb_node/mech_infiltrator, /datum/techweb_node/bluespace_travel) + unlocked_designs = list( + /datum/design/mech_gravcatapult, + /datum/design/mech_teleporter, + /datum/design/mech_wormhole_gen, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE) diff --git a/code/modules/research/techweb/nodes/medbay_nodes.dm b/code/modules/research/techweb/nodes/medbay_nodes.dm index 49595aaa87ae..c9e208d140c5 100644 --- a/code/modules/research/techweb/nodes/medbay_nodes.dm +++ b/code/modules/research/techweb/nodes/medbay_nodes.dm @@ -1,39 +1,38 @@ /datum/techweb_node/medbay_equip - id = TECHWEB_NODE_MEDBAY_EQUIP - starting_node = TRUE display_name = "Medbay Equipment" description = "Essential medical tools to patch you up while medbay is still intact." - design_ids = list( - "beaker", - "blood_filter", - "blood_pack", - "blood_scanner", - "bonesetter", - "cautery", - "chem_pack", - "circular_saw", - "defibmountdefault", - "dropper", - "hemostat", - "jerrycan", - "large_beaker", - "medicalbed", - "operating", - "organ_jar", - "penlight", - "penlight_paramedic", - "pillbottle", - "reflex_hammer", - "retractor", - "scalpel", - "stethoscope", - "suit_sensor", - "surgical_drapes", - "surgical_tape", - "surgicaldrill", - "syringe", - "vitals_monitor", - "xlarge_beaker", + node_flags = parent_type::node_flags | TECHWEB_NODE_STARTER + unlocked_designs = list( + /datum/design/beaker, + /datum/design/blood_filter, + /datum/design/blood_pack, + /datum/design/blood_scanner, + /datum/design/bonesetter, + /datum/design/cautery, + /datum/design/chem_pack, + /datum/design/circular_saw, + /datum/design/defibrillator_mount, + /datum/design/dropper, + /datum/design/hemostat, + /datum/design/jerrycan, + /datum/design/large_beaker, + /datum/design/medical_bed, + /datum/design/board/operating, + /datum/design/organ_jar, + /datum/design/penlight, + /datum/design/penlight_paramedic, + /datum/design/pillbottle, + /datum/design/reflexhammer, + /datum/design/retractor, + /datum/design/scalpel, + /datum/design/stethoscope, + /datum/design/suit_sensor, + /datum/design/surgical_drapes, + /datum/design/sticky_tape/surgical, + /datum/design/surgicaldrill, + /datum/design/syringe, + /datum/design/vitals_monitor, + /datum/design/xlarge_beaker, ) experiments_to_unlock = list( /datum/experiment/autopsy/human, @@ -44,65 +43,62 @@ ) /datum/techweb_node/chem_synthesis - id = TECHWEB_NODE_CHEM_SYNTHESIS display_name = "Chemical Synthesis" description = "Synthesizing complex chemicals from electricity and thin air... Don't ask how..." - prereq_ids = list(TECHWEB_NODE_MEDBAY_EQUIP) - design_ids = list( - "med_spray_bottle", - "inhaler", - "inhaler_canister", - "medigel", - "medipen_refiller", - "soda_dispenser", - "beer_dispenser", - "chem_dispenser", - "portable_chem_mixer", - "chem_heater", - "w-recycler", - "meta_beaker", - "plumbing_rcd", - "plumbing_rcd_service", - "plunger", - "fluid_ducts", + prerequisite_nodes = list(/datum/techweb_node/medbay_equip) + unlocked_designs = list( + /datum/design/medical_spray_bottle, + /datum/design/inhaler, + /datum/design/inhaler_canister, + /datum/design/medigel, + /datum/design/board/medipen_refiller, + /datum/design/board/soda_dispenser, + /datum/design/board/beer_dispenser, + /datum/design/board/chem_dispenser, + /datum/design/portable_chem_mixer, + /datum/design/board/chem_heater, + /datum/design/water_recycler, + /datum/design/meta_beaker, + /datum/design/plumbing_rcd, + /datum/design/plumbing_rcd_service, + /datum/design/plunger, + /datum/design/ducts, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) announce_channels = list(RADIO_CHANNEL_MEDICAL) /datum/techweb_node/medbay_equip_adv - id = TECHWEB_NODE_MEDBAY_EQUIP_ADV display_name = "Advanced Medbay Equipment" description = "State-of-the-art medical gear for keeping the crew in one piece — mostly." - prereq_ids = list(TECHWEB_NODE_CHEM_SYNTHESIS) - design_ids = list( - "chem_mass_spec", - "crewpinpointer", - "defibmount", - "diode_disk_healing", - "diode_disk_sanity", - "healthanalyzer_advanced", - "medicalbed_emergency", - "mod_health_analyzer", - "piercesyringe", - "smoke_machine", - "vitals_monitor_advanced", + prerequisite_nodes = list(/datum/techweb_node/chem_synthesis) + unlocked_designs = list( + /datum/design/board/chem_mass_spec, + /datum/design/crewpinpointer, + /datum/design/defibrillator_mount_charging, + /datum/design/diode_disk_healing, + /datum/design/diode_disk_sanity, + /datum/design/healthanalyzer_advanced, + /datum/design/emergency_bed, + /datum/design/module/mod_health_analyzer, + /datum/design/piercesyringe, + /datum/design/board/smoke_machine, + /datum/design/vitals_monitor/advanced, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) required_experiments = list(/datum/experiment/scanning/reagent/haloperidol) announce_channels = list(RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cryostasis - id = TECHWEB_NODE_CRYOSTASIS display_name = "Cryostasis" description = "The result of clown accidentally drinking a chemical, now repurposed for safely preserving crew members in suspended animation." - prereq_ids = list(TECHWEB_NODE_MEDBAY_EQUIP_ADV, TECHWEB_NODE_FUSION) - design_ids = list( - "cryo_grenade", - "cryotube", - "mech_sleeper", - "splitbeaker", - "stasis", - "stasis_bodybag", + prerequisite_nodes = list(/datum/techweb_node/medbay_equip_adv, /datum/techweb_node/fusion) + unlocked_designs = list( + /datum/design/cryo_grenade, + /datum/design/board/cryotube, + /datum/design/mech_sleeper, + /datum/design/noreactbeaker, + /datum/design/board/stasis, + /datum/design/stasis_bag, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) discount_experiments = list(/datum/experiment/scanning/reagent/cryostylane = TECHWEB_TIER_4_POINTS) diff --git a/code/modules/research/techweb/nodes/mining_nodes.dm b/code/modules/research/techweb/nodes/mining_nodes.dm index 9c0ab9d879d1..b418af262644 100644 --- a/code/modules/research/techweb/nodes/mining_nodes.dm +++ b/code/modules/research/techweb/nodes/mining_nodes.dm @@ -1,108 +1,102 @@ /datum/techweb_node/material_processing - id = TECHWEB_NODE_MATERIAL_PROC - starting_node = TRUE display_name = "Material Processing" description = "Refinement and processing of alloys and ores to enhance their utility and value." - design_ids = list( - "pickaxe", - "shovel", - "conveyor_switch", - "conveyor_belt", - "mass_driver", - "recycler", - "stack_machine", - "stack_console", - "autolathe", - "rglass", - "plasmaglass", - "plasmareinforcedglass", - "plasteel", - "titaniumglass", - "plastitanium", - "plastitaniumglass", + node_flags = parent_type::node_flags | TECHWEB_NODE_STARTER + unlocked_designs = list( + /datum/design/pickaxe, + /datum/design/shovel, + /datum/design/conveyor_switch, + /datum/design/conveyor_belt, + /datum/design/board/mass_driver, + /datum/design/board/recycler, + /datum/design/board/stacking_machine, + /datum/design/board/stacking_unit_console, + /datum/design/board/autolathe, + /datum/design/material/rglass, + /datum/design/alloy/plaglass, + /datum/design/alloy/plasmarglass, + /datum/design/alloy/plasteel_alloy, + /datum/design/alloy/titaniumglass, + /datum/design/alloy/plastitanium, + /datum/design/alloy/plastitaniumglass, ) /datum/techweb_node/mining - id = TECHWEB_NODE_MINING display_name = "Mining Technology" description = "Development of tools meant to optimize mining operations and resource extraction." - prereq_ids = list(TECHWEB_NODE_MATERIAL_PROC) - design_ids = list( - "cargoexpress", - "brm", - "b_smelter", - "b_refinery", - "ore_redemption", - "mining_equipment_vendor", - "mining_scanner", - "mech_mscanner", - "superresonator", - "mech_drill", - "mod_drill", - "drill", - "mod_orebag", - "beacon", - "telesci_gps", - "mod_gps", - "mod_visor_meson", - "mesons", + prerequisite_nodes = list(/datum/techweb_node/material_processing) + unlocked_designs = list( + /datum/design/cargo_express, + /datum/design/board/brm, + /datum/design/board/smelter, + /datum/design/board/refinery, + /datum/design/board/ore_redemption, + /datum/design/board/mining_equipment_vendor, + /datum/design/mining_scanner, + /datum/design/mech_mining_scanner, + /datum/design/superresonator, + /datum/design/mech_drill, + /datum/design/module/mod_drill, + /datum/design/drill, + /datum/design/module/mod_orebag, + /datum/design/beacon, + /datum/design/telesci_gps, + /datum/design/module/mod_gps, + /datum/design/module/mod_visor_meson, + /datum/design/mesons, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) announce_channels = list(RADIO_CHANNEL_SUPPLY) /datum/techweb_node/low_pressure_excavation - id = TECHWEB_NODE_LOW_PRESSURE_EXCAVATION display_name = "Low-Pressure Excavation" description = "Research of Proto-Kinetic Accelerators (PKAs), pneumatic guns renowned for their exceptional performance in low-pressure environments." - prereq_ids = list(TECHWEB_NODE_MINING, TECHWEB_NODE_GAS_COMPRESSION) - design_ids = list( - "damagemod", - "rangemod", - "cooldownmod", - "triggermod", - "hypermod", - "borg_upgrade_damagemod", - "borg_upgrade_rangemod", - "borg_upgrade_cooldownmod", - "borg_upgrade_hypermod", + prerequisite_nodes = list(/datum/techweb_node/mining, /datum/techweb_node/gas_compression) + unlocked_designs = list( + /datum/design/damage_mod, + /datum/design/range_mod, + /datum/design/cooldown_mod, + /datum/design/trigger_guard_mod, + /datum/design/hyperaccelerator, + /datum/design/damage_mod/borg, + /datum/design/range_mod/borg, + /datum/design/cooldown_mod/borg, + /datum/design/hyperaccelerator/borg, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) announce_channels = list(RADIO_CHANNEL_SUPPLY) /datum/techweb_node/plasma_mining - id = TECHWEB_NODE_PLASMA_MINING display_name = "Plasma Beam Mining" description = "Engineers' plasma welders have proven highly effective in mining operations. This led to the development of a mech-mounted variant and an enhanced handheld cutter for miners." - prereq_ids = list(TECHWEB_NODE_LOW_PRESSURE_EXCAVATION, TECHWEB_NODE_PLASMA_CONTROL) - design_ids = list( - "mech_plasma_cutter", - "plasmacutter_adv", + prerequisite_nodes = list(/datum/techweb_node/low_pressure_excavation, /datum/techweb_node/plasma_control) + unlocked_designs = list( + /datum/design/mech_plasma_cutter, + /datum/design/plasmacutter_adv, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) announce_channels = list(RADIO_CHANNEL_SUPPLY) /datum/techweb_node/bitrunning - id = TECHWEB_NODE_BITRUNNING display_name = "Bitrunning Technology" description = "Bluespace technology has led to the development of quantum-scale computing, which unlocks the means to materialize atomic structures while executing advanced programs." - prereq_ids = list(TECHWEB_NODE_GAMING, TECHWEB_NODE_APPLIED_BLUESPACE) - design_ids = list( - "byteforge", - "quantum_console", - "netpod", + prerequisite_nodes = list(/datum/techweb_node/gaming, /datum/techweb_node/applied_bluespace) + unlocked_designs = list( + /datum/design/board/byteforge, + /datum/design/board/quantum_console, + /datum/design/board/netpod, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) announce_channels = list(RADIO_CHANNEL_SUPPLY) /datum/techweb_node/mining_adv - id = TECHWEB_NODE_MINING_ADV display_name = "Advanced Mining Technology" description = "High-level mining equipment, pushing the boundaries of efficiency and effectiveness in resource extraction." - prereq_ids = list(TECHWEB_NODE_PLASMA_MINING) - design_ids = list( - "jackhammer", - "drill_diamond", - "mech_diamond_drill", + prerequisite_nodes = list(/datum/techweb_node/plasma_mining) + unlocked_designs = list( + /datum/design/jackhammer, + /datum/design/drill_diamond, + /datum/design/mech_diamond_drill, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) announce_channels = list(RADIO_CHANNEL_SUPPLY) diff --git a/code/modules/research/techweb/nodes/modsuit_nodes.dm b/code/modules/research/techweb/nodes/modsuit_nodes.dm index 4e1bf4c89444..4facf05284aa 100644 --- a/code/modules/research/techweb/nodes/modsuit_nodes.dm +++ b/code/modules/research/techweb/nodes/modsuit_nodes.dm @@ -1,160 +1,150 @@ /datum/techweb_node/mod_suit - id = TECHWEB_NODE_MOD_SUIT - starting_node = TRUE display_name = "Modular Suits" description = "Specialized back mounted power suits with various different modules." - prereq_ids = list(TECHWEB_NODE_ROBOTICS) - design_ids = list( - "suit_storage_unit", - "mod_shell", - "mod_chestplate", - "mod_helmet", - "mod_gauntlets", - "mod_boots", - "mod_plating_standard", - "mod_plating_civilian", - "mod_paint_kit", - "mod_storage", - "mod_plasma", - "mod_flashlight", + node_flags = parent_type::node_flags | TECHWEB_NODE_STARTER + prerequisite_nodes = list(/datum/techweb_node/robotics) + unlocked_designs = list( + /datum/design/board/suit_storage_unit, + /datum/design/mod_shell, + /datum/design/mod_chestplate, + /datum/design/mod_helmet, + /datum/design/mod_gauntlets, + /datum/design/mod_boots, + /datum/design/mod_plating, + /datum/design/mod_plating/civilian, + /datum/design/mod_paint_kit, + /datum/design/module/mod_storage, + /datum/design/module/mod_plasma_stabilizer, + /datum/design/module/mod_flashlight, ) /datum/techweb_node/mod_equip - id = TECHWEB_NODE_MOD_EQUIP display_name = "Modular Suit Equipment" description = "More advanced modules, to improve modular suits." - prereq_ids = list(TECHWEB_NODE_MOD_SUIT) - design_ids = list( - "modlink_scryer", - "mod_tether", - "mod_welding", - "mod_longfall", - "mod_thermal_regulator", - "mod_sign_radio", - "mod_storage_expanded", + prerequisite_nodes = list(/datum/techweb_node/mod_suit) + unlocked_designs = list( + /datum/design/modlink_scryer, + /datum/design/module/mod_tether, + /datum/design/module/mod_visor_welding, + /datum/design/module/mod_longfall, + /datum/design/module/mod_thermal_regulator, + /datum/design/module/mod_glove_translator, + /datum/design/module/mod_storage_expanded, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mod_service - id = TECHWEB_NODE_MOD_SERVICE display_name = "Civilian Modular Suits" description = "Civilian MODsuits for dignified living." - prereq_ids = list(TECHWEB_NODE_MOD_SUIT) - design_ids = list( - "mod_clamp", - "mod_safety", - "mod_mouthhole", - "mod_mister_janitor", - "mod_plating_portable_suit" + prerequisite_nodes = list(/datum/techweb_node/mod_suit) + unlocked_designs = list( + /datum/design/module/mod_clamp, + /datum/design/module/mod_head_protection, + /datum/design/module/mod_mouthhole, + /datum/design/module/mister_janitor, + /datum/design/mod_plating/portable_suit ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS / 2) announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_SERVICE) /datum/techweb_node/mod_entertainment - id = TECHWEB_NODE_MOD_ENTERTAINMENT display_name = "Entertainment Modular Suits" description = "Powered suits for protection against low-humor environments." - prereq_ids = list(TECHWEB_NODE_MOD_SUIT) - design_ids = list( - "mod_plating_cosmohonk", - "mod_bikehorn", - "mod_microwave_beam", - "mod_waddle", + prerequisite_nodes = list(/datum/techweb_node/mod_suit) + unlocked_designs = list( + /datum/design/mod_plating/cosmohonk, + /datum/design/module/mod_bikehorn, + /datum/design/module/mod_microwave_beam, + /datum/design/module/mod_waddle, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_SERVICE) /datum/techweb_node/mod_medical - id = TECHWEB_NODE_MOD_MEDICAL display_name = "Medical Modular Suits" description = "Medical MODsuits for quick rescue purposes." - prereq_ids = list(TECHWEB_NODE_MOD_SUIT, TECHWEB_NODE_CHEM_SYNTHESIS) - design_ids = list( - "mod_plating_medical", - "mod_quick_carry", - "mod_injector", - "mod_organizer", - "mod_patienttransport", + prerequisite_nodes = list(/datum/techweb_node/mod_suit, /datum/techweb_node/chem_synthesis) + unlocked_designs = list( + /datum/design/mod_plating/medical, + /datum/design/module/mod_quick_carry, + /datum/design/module/mod_injector, + /datum/design/module/mod_organizer, + /datum/design/module/patienttransport, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/mod_engi - id = TECHWEB_NODE_MOD_ENGI display_name = "Engineering Modular Suits" description = "Engineering suits, for powered engineers." - prereq_ids = list(TECHWEB_NODE_MOD_EQUIP) - design_ids = list( - "mod_plating_engineering", - "mod_t_ray", - "mod_magboot", - "mod_constructor", - "mod_mister_atmos", + prerequisite_nodes = list(/datum/techweb_node/mod_equip) + unlocked_designs = list( + /datum/design/mod_plating/engineering, + /datum/design/module/mod_t_ray, + /datum/design/module/mod_magboot, + /datum/design/module/mod_constructor, + /datum/design/module/mister_atmos, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/mod_security - id = TECHWEB_NODE_MOD_SECURITY display_name = "Security Modular Suits" description = "Security suits for space crime handling." - prereq_ids = list(TECHWEB_NODE_MOD_EQUIP) - design_ids = list( - "mod_mirage_grenade", - "mod_stealth", - "mod_mag_harness", - "mod_pathfinder", - "mod_holster", - "mod_sonar", - "mod_projectile_dampener", - "mod_criminalcapture", + prerequisite_nodes = list(/datum/techweb_node/mod_equip) + unlocked_designs = list( + /datum/design/module/mirage, + /datum/design/module/mod_stealth, + /datum/design/module/mod_mag_harness, + /datum/design/module/mod_pathfinder, + /datum/design/module/mod_holster, + /datum/design/module/mod_sonar, + /datum/design/module/projectile_dampener, + /datum/design/module/criminalcapture, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_SECURITY) /datum/techweb_node/mod_medical_adv - id = TECHWEB_NODE_MOD_MEDICAL_ADV display_name = "Field Surgery Modules" description = "Medical MODsuit equipment designed for conducting surgical operations in field conditions." - prereq_ids = list(TECHWEB_NODE_MOD_MEDICAL, TECHWEB_NODE_SURGERY_ADV) - design_ids = list( - "mod_defib", - "mod_threadripper", - "mod_surgicalprocessor", - "mod_statusreadout", + prerequisite_nodes = list(/datum/techweb_node/mod_medical, /datum/techweb_node/surgery_adv) + unlocked_designs = list( + /datum/design/module/defibrillator, + /datum/design/module/threadripper, + /datum/design/module/surgicalprocessor, + /datum/design/module/statusreadout, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/mod_engi_adv - id = TECHWEB_NODE_MOD_ENGI_ADV display_name = "Advanced Engineering Modular Suits" description = "Advanced Engineering suits, for advanced powered engineers." - prereq_ids = list(TECHWEB_NODE_MOD_ENGI) - design_ids = list( - "mod_plating_atmospheric", - "mod_jetpack", - "mod_rad_protection", - "mod_emp_shield", + prerequisite_nodes = list(/datum/techweb_node/mod_engi) + unlocked_designs = list( + /datum/design/mod_plating/atmospheric, + /datum/design/module/mod_jetpack, + /datum/design/module/mod_rad_protection, + /datum/design/module/mod_emp_shield, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/mod_engi_adv/New() + . = ..() if(HAS_TRAIT(SSstation, STATION_TRAIT_RADIOACTIVE_NEBULA)) //we'll really need the rad protection modsuit module - starting_node = TRUE - return ..() + node_flags |= TECHWEB_NODE_STARTER /datum/techweb_node/mod_anomaly - id = TECHWEB_NODE_MOD_ANOMALY display_name = "Anomalock Modular Suits" description = "Modules for MODsuits that require anomaly cores to function." - prereq_ids = list(TECHWEB_NODE_MOD_ENGI_ADV, TECHWEB_NODE_ANOMALY_RESEARCH) - design_ids = list( - "mod_antigrav", - "mod_teleporter", - "mod_kinesis", + prerequisite_nodes = list(/datum/techweb_node/mod_engi_adv, /datum/techweb_node/anomaly_research) + unlocked_designs = list( + /datum/design/module/mod_antigrav, + /datum/design/module/mod_teleporter, + /datum/design/module/mod_kinesis, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE) diff --git a/code/modules/research/techweb/nodes/research_nodes.dm b/code/modules/research/techweb/nodes/research_nodes.dm index 41c2a48ecdd2..6133271d32c4 100644 --- a/code/modules/research/techweb/nodes/research_nodes.dm +++ b/code/modules/research/techweb/nodes/research_nodes.dm @@ -1,103 +1,97 @@ /datum/techweb_node/fundamental_sci - id = TECHWEB_NODE_FUNDIMENTAL_SCI - starting_node = TRUE display_name = "Fundamental Science" description = "Establishing the bedrock of scientific understanding, paving the way for deeper exploration and theoretical inquiry." - design_ids = list( - "rdserver", - "rdservercontrol", - "rdconsole", - "tech_disk", - "doppler_array", - "experimentor", - "destructive_analyzer", - "destructive_scanner", - "experi_scanner", - "laptop", - "portadrive_basic", - "portadrive_advanced", - "portadrive_super", + node_flags = parent_type::node_flags | TECHWEB_NODE_STARTER + unlocked_designs = list( + /datum/design/board/rdserver, + /datum/design/board/rdservercontrol, + /datum/design/board/rdconsole, + /datum/design/tech_disk, + /datum/design/board/doppler_array, + /datum/design/board/experimentor, + /datum/design/board/destructive_analyzer, + /datum/design/board/destructive_scanner, + /datum/design/experi_scanner, + /datum/design/laptop, + /datum/design/portabledrive/basic, + /datum/design/portabledrive/advanced, + /datum/design/portabledrive/super, ) /datum/techweb_node/bluespace_theory - id = TECHWEB_NODE_BLUESPACE_THEORY display_name = "Bluespace Theory" description = "Basic studies into the mysterious alternate dimension known as bluespace." - prereq_ids = list(TECHWEB_NODE_FUNDIMENTAL_SCI) - design_ids = list( - "bluespace_crystal", + prerequisite_nodes = list(/datum/techweb_node/fundamental_sci) + unlocked_designs = list( + /datum/design/bluespace_crystal, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/applied_bluespace - id = TECHWEB_NODE_APPLIED_BLUESPACE display_name = "Applied Bluespace Research" description = "With a heightened grasp of bluespace dynamics, sophisticated applications and technologies can be devised using data from bluespace crystal analyses." - prereq_ids = list(TECHWEB_NODE_BLUESPACE_THEORY) - design_ids = list( - "ore_silo", - "minerbag_holding", - "plumbing_receiver", - "bluespacebeaker", - "adv_watering_can", - "bluespace_coffeepot", - "bluespacesyringe", - "blutrash", - "light_replacer_blue", - "bluespacebodybag", - "gigabeacon", + prerequisite_nodes = list(/datum/techweb_node/bluespace_theory) + unlocked_designs = list( + /datum/design/board/ore_silo, + /datum/design/miningsatchel_holding, + /datum/design/board/plumbing_receiver, + /datum/design/bluespacebeaker, + /datum/design/adv_watering_can, + /datum/design/coffeepot_bluespace, + /datum/design/bluespacesyringe, + /datum/design/blutrash, + /datum/design/light_replacer_blue, + /datum/design/bluespacebodybag, + /datum/design/radio_navigation_beacon, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) discount_experiments = list(/datum/experiment/scanning/points/bluespace_crystal = TECHWEB_TIER_2_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL, RADIO_CHANNEL_SERVICE, RADIO_CHANNEL_SUPPLY) /datum/techweb_node/bluespace_travel - id = TECHWEB_NODE_BLUESPACE_TRAVEL display_name = "Bluespace Travel" description = "Facilitate teleportation methods based on bluespace principles to revolutionize logistical efficiency." - prereq_ids = list(TECHWEB_NODE_APPLIED_BLUESPACE) - design_ids = list( - "teleconsole", - "tele_station", - "tele_hub", - "launchpad_console", - "quantumpad", - "launchpad", - "bluespace_pod", - "quantum_keycard", - "swapper", + prerequisite_nodes = list(/datum/techweb_node/applied_bluespace) + unlocked_designs = list( + /datum/design/board/teleconsole, + /datum/design/board/teleport_station, + /datum/design/board/teleport_hub, + /datum/design/board/launchpad_console, + /datum/design/board/quantumpad, + /datum/design/board/launchpad, + /datum/design/bluespace_pod, + /datum/design/quantum_keycard, + /datum/design/swapper, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/anomaly_research - id = TECHWEB_NODE_ANOMALY_RESEARCH display_name = "Anomaly Research" description = "Delving into the study of mysterious anomalies to investigate methods to refine and harness their unpredictable energies." - prereq_ids = list(TECHWEB_NODE_APPLIED_BLUESPACE) - design_ids = list( - "anomaly_refinery", - "anomaly_neutralizer", - "reactive_armour", - "space_furnace", + prerequisite_nodes = list(/datum/techweb_node/applied_bluespace) + unlocked_designs = list( + /datum/design/board/anomaly_refinery, + /datum/design/anomaly_neutralizer, + /datum/design/reactive_armour, + /datum/design/space_furnace, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/anomaly_shells - id = TECHWEB_NODE_ANOMALY_SHELLS display_name = "Advanced Anomaly Shells" description = "New shells designed to utilize anomaly cores, maximizing their potential in innovative ways." - prereq_ids = list(TECHWEB_NODE_ANOMALY_RESEARCH) - design_ids = list( - "bag_holding", - "cybernetic_heart_anomalock", - "mod_storage_holding", - "wormholeprojector", - "gravitygun", - "polymorph_belt", - "perceptomatrix", + prerequisite_nodes = list(/datum/techweb_node/anomaly_research) + unlocked_designs = list( + /datum/design/bag_holding, + /datum/design/cybernetic_heart/anomalock, + /datum/design/module/mod_storage_holding, + /datum/design/wormhole_projector, + /datum/design/gravitygun, + /datum/design/polymorph_belt, + /datum/design/perceptomatrix, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) discount_experiments = list(/datum/experiment/scanning/points/anomalies = TECHWEB_TIER_5_POINTS) diff --git a/code/modules/research/techweb/nodes/robo_nodes.dm b/code/modules/research/techweb/nodes/robo_nodes.dm index ce177cd543ab..68510eee0bd1 100644 --- a/code/modules/research/techweb/nodes/robo_nodes.dm +++ b/code/modules/research/techweb/nodes/robo_nodes.dm @@ -1,54 +1,51 @@ /datum/techweb_node/robotics - id = TECHWEB_NODE_ROBOTICS - starting_node = TRUE display_name = "Robotics" description = "Programmable machines that make our lives lazier." - design_ids = list( - "botnavbeacon", - "mechfab", - "paicard", + node_flags = parent_type::node_flags | TECHWEB_NODE_STARTER + unlocked_designs = list( + /datum/design/board/navbeacon, + /datum/design/board/mechfab, + /datum/design/paicard, ) /datum/techweb_node/exodrone - id = TECHWEB_NODE_EXODRONE display_name = "Exploration Drones" description = "Adapted arcade machines to covertly harness gamers' skills in controlling real drones for practical purposes." - prereq_ids = list(TECHWEB_NODE_ROBOTICS) - design_ids = list( - "exodrone_console", - "exodrone_launcher", - "exoscanner", - "exoscanner_console", + prerequisite_nodes = list(/datum/techweb_node/robotics) + unlocked_designs = list( + /datum/design/board/exodrone_console, + /datum/design/board/exodrone_launcher, + /datum/design/board/exoscanner, + /datum/design/board/exoscanner_console, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) // AI root node /datum/techweb_node/ai - id = TECHWEB_NODE_AI display_name = "Artificial Intelligence" description = "Exploration of AI systems, more intelligent than the entire crew put together." - prereq_ids = list(TECHWEB_NODE_ROBOTICS) - design_ids = list( - "aicore", - "aifixer", - "airack_broadcaster", - "airack_normal", - "airack_small", - "asimov_module", - "borg_ai_control", - "corporate_module", - "default_module", - "drone_module", - "freeform_module", - "intellicard", - "mecha_tracking_ai_control", - "nutimov_module", - "oxygen_module", - "paladin_module", - "protectstation_module", - "quarantine_module", - "robocop_module", - "safeguard_module", + prerequisite_nodes = list(/datum/techweb_node/robotics) + unlocked_designs = list( + /datum/design/board/aicore, + /datum/design/board/aifixer, + /datum/design/board/ai_law_rack/broadcaster, + /datum/design/board/ai_law_rack, + /datum/design/board/ai_law_rack/portable, + /datum/design/board/asimov, + /datum/design/boris_ai_controller, + /datum/design/board/corporate_module, + /datum/design/board/default_module, + /datum/design/board/drone_module, + /datum/design/board/freeform_module, + /datum/design/intellicard, + /datum/design/mecha_tracking_ai_control, + /datum/design/board/nutimov_module, + /datum/design/board/oxygen_module, + /datum/design/board/paladin_module, + /datum/design/board/protectstation_module, + /datum/design/board/quarantine_module, + /datum/design/board/robocop_module, + /datum/design/board/safeguard_module, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE) @@ -56,44 +53,43 @@ /datum/techweb_node/ai/New() . = ..() if(HAS_TRAIT(SSstation, STATION_TRAIT_HUMAN_AI)) - design_ids -= list( - "aicore", - "aifixer", - "borg_ai_control", - "intellicard", - "mecha_tracking_ai_control", + unlocked_designs -= list( + /datum/design/board/aicore, + /datum/design/board/aifixer, + /datum/design/boris_ai_controller, + /datum/design/intellicard, + /datum/design/mecha_tracking_ai_control, ) else if(HAS_TRAIT(SSstation, STATION_TRAIT_UNIQUE_AI)) research_costs[TECHWEB_POINT_TYPE_GENERIC] *= 3 /datum/techweb_node/ai_laws - id = TECHWEB_NODE_AI_LAWS display_name = "Advanced AI Upgrades" description = "Delving into sophisticated AI directives, with hopes that they won't lead to humanity's extinction." - prereq_ids = list(TECHWEB_NODE_AI) - design_ids = list( - "ai_power_upgrade", - "antimov_module", - "asimovpp_module", - "balance_module", - "damaged_module", - "dungeon_master_module", - "freeformcore_module", - "hippocratic_module", - "hulkamania_module", - "liveandletlive_module", - "maintain_module", - "onehuman_module", - "overlord_module", - "painter_module", - "paladin_devotion_module", - "peacekeeper_module", - "reporter_module", - "ten_commandments_module", - "thermurderdynamic_module", - "thinkermov_module", - "tyrant_module", - "yesman_module", + prerequisite_nodes = list(/datum/techweb_node/ai) + unlocked_designs = list( + /datum/design/ai_power_transfer, + /datum/design/board/antimov_module, + /datum/design/board/asimovpp_module, + /datum/design/board/balance_module, + /datum/design/board/damaged, + /datum/design/board/dungeon_master_module, + /datum/design/board/freeformcore_module, + /datum/design/board/hippocratic_module, + /datum/design/board/hulkamania_module, + /datum/design/board/liveandletlive_module, + /datum/design/board/maintain_module, + /datum/design/board/onehuman_module, + /datum/design/board/overlord_module, + /datum/design/board/painter_module, + /datum/design/board/paladin_devotion_module, + /datum/design/board/peacekeeper_module, + /datum/design/board/reporter_module, + /datum/design/board/ten_commandments_module, + /datum/design/board/thermurderdynamic_module, + /datum/design/board/thinkermov_module, + /datum/design/board/tyrant_module, + /datum/design/board/yesman_module, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_COMMAND) diff --git a/code/modules/research/techweb/nodes/security_nodes.dm b/code/modules/research/techweb/nodes/security_nodes.dm index d560dff6afe6..9011c6c9a261 100644 --- a/code/modules/research/techweb/nodes/security_nodes.dm +++ b/code/modules/research/techweb/nodes/security_nodes.dm @@ -1,126 +1,119 @@ /datum/techweb_node/basic_arms - id = TECHWEB_NODE_BASIC_ARMS - starting_node = TRUE display_name = "Basic Arms" description = "Ballistics can be unpredictable in space." - design_ids = list( - "toy_armblade", - "toy_katana", - "toygun", - "c38_rubber", - "c38_rubber_mag", - "c38_sec", - "c38_mag", - "capbox", - "foam_dart", - "sec_beanbag_slug", - "sec_dart", - "sec_Islug", - "sec_rshot", + node_flags = parent_type::node_flags | TECHWEB_NODE_STARTER + unlocked_designs = list( + /datum/design/toy_armblade, + /datum/design/toy_katana, + /datum/design/toygun, + /datum/design/c38_rubber, + /datum/design/c38_rubber_mag, + /datum/design/c38/sec, + /datum/design/c38_mag, + /datum/design/capbox, + /datum/design/foam_dart, + /datum/design/beanbag_slug/sec, + /datum/design/shotgun_dart/sec, + /datum/design/incendiary_slug/sec, + /datum/design/rubbershot/sec, ) /datum/techweb_node/sec_equip - id = TECHWEB_NODE_SEC_EQUIP display_name = "Security Equipment" description = "All the essentials to subdue a mime." - prereq_ids = list(TECHWEB_NODE_BASIC_ARMS) - design_ids = list( - "secdata", - "mining", - "prisonmanage", - "rdcamera", - "seccamera", - "security_photobooth", - "photobooth", - "scanner_gate", - "pepperspray", - "dragnet_beacon", - "inspector", - "evidencebag", - "zipties", - "seclite", - "electropack", + prerequisite_nodes = list(/datum/techweb_node/basic_arms) + unlocked_designs = list( + /datum/design/board/secdata, + /datum/design/board/mining, + /datum/design/board/prisonmanage, + /datum/design/board/rdcamera, + /datum/design/board/seccamera, + /datum/design/board/security_photobooth, + /datum/design/board/photobooth, + /datum/design/board/scanner_gate, + /datum/design/pepperspray, + /datum/design/dragnet_beacon, + /datum/design/inspector, + /datum/design/evidencebag, + /datum/design/zipties, + /datum/design/seclite, + /datum/design/electropack, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) announce_channels = list(RADIO_CHANNEL_SECURITY) /datum/techweb_node/riot_supression - id = TECHWEB_NODE_RIOT_SUPRESSION display_name = "Riot Supression" description = "When you are on the opposing side of a revolutionary movement." - prereq_ids = list(TECHWEB_NODE_SEC_EQUIP) - design_ids = list( - "clown_firing_pin", - "pin_testing", - "pin_loyalty", - "tele_shield", - "ballistic_shield", - "handcuffs_s", - "bola_energy", + prerequisite_nodes = list(/datum/techweb_node/sec_equip) + unlocked_designs = list( + /datum/design/clown_firing_pin, + /datum/design/pin_testing, + /datum/design/pin_mindshield, + /datum/design/tele_shield, + /datum/design/ballistic_shield, + /datum/design/handcuffs/sec, + /datum/design/bola_energy, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) announce_channels = list(RADIO_CHANNEL_SECURITY) /datum/techweb_node/explosives - id = TECHWEB_NODE_EXPLOSIVES display_name = "Explosives" description = "For once, intentional explosions." - prereq_ids = list(TECHWEB_NODE_RIOT_SUPRESSION) - design_ids = list( - "large_grenade", - "adv_grenade", - "pyro_grenade", + prerequisite_nodes = list(/datum/techweb_node/riot_supression) + unlocked_designs = list( + /datum/design/large_grenade, + /datum/design/adv_grenade, + /datum/design/pyro_grenade, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) required_experiments = list(/datum/experiment/ordnance/explosive/lowyieldbomb) announce_channels = list(RADIO_CHANNEL_SECURITY, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/exotic_ammo - id = TECHWEB_NODE_EXOTIC_AMMO display_name = "Exotic Ammunition" description = "Specialized bullets designed to ignite, freeze, and inflict various other effects on targets, expanding combat capabilities." - prereq_ids = list(TECHWEB_NODE_EXPLOSIVES) - design_ids = list( - "c38_hotshot", - "c38_hotshot_mag", - "c38_iceblox", - "c38_iceblox_mag", - "c38_trac", - "c38_trac_mag", - "c38_true_strike", - "c38_true_strike_mag", - "techshotshell", - "flechetteshell", + prerequisite_nodes = list(/datum/techweb_node/explosives) + unlocked_designs = list( + /datum/design/c38_hotshot, + /datum/design/c38_hotshot_mag, + /datum/design/c38_iceblox, + /datum/design/c38_iceblox_mag, + /datum/design/c38_trac, + /datum/design/c38_trac_mag, + /datum/design/c38_true, + /datum/design/c38_true_mag, + /datum/design/techshell, + /datum/design/flechette, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) discount_experiments = list(/datum/experiment/ordnance/explosive/highyieldbomb = TECHWEB_TIER_4_POINTS) announce_channels = list(RADIO_CHANNEL_SECURITY) /datum/techweb_node/electric_weapons - id = TECHWEB_NODE_ELECTRIC_WEAPONS display_name = "Electric Weaponry" description = "Energy-based weaponry designed for both lethal and non-lethal applications." - prereq_ids = list(TECHWEB_NODE_RIOT_SUPRESSION) - design_ids = list( - "stunrevolver", - "ioncarbine", - "temp_gun", - "lasershell", + prerequisite_nodes = list(/datum/techweb_node/riot_supression) + unlocked_designs = list( + /datum/design/stunrevolver, + /datum/design/ioncarbine, + /datum/design/temp_gun, + /datum/design/lasershell, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) announce_channels = list(RADIO_CHANNEL_SECURITY) /datum/techweb_node/beam_weapons - id = TECHWEB_NODE_BEAM_WEAPONS display_name = "Advanced Beam Weaponry" description = "So advanced, even engineers are baffled by its operational principles." - prereq_ids = list(TECHWEB_NODE_ELECTRIC_WEAPONS) - design_ids = list( - "xray_laser", - "nuclear_gun", - "c38_flare", - "c38_flare_mag", + prerequisite_nodes = list(/datum/techweb_node/electric_weapons) + unlocked_designs = list( + /datum/design/xray, + /datum/design/nuclear_gun, + /datum/design/c38_flare, + /datum/design/c38_flare_mag, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) announce_channels = list(RADIO_CHANNEL_SECURITY) diff --git a/code/modules/research/techweb/nodes/service_nodes.dm b/code/modules/research/techweb/nodes/service_nodes.dm index 261bb6af9db4..25cec3437bc5 100644 --- a/code/modules/research/techweb/nodes/service_nodes.dm +++ b/code/modules/research/techweb/nodes/service_nodes.dm @@ -1,227 +1,217 @@ /datum/techweb_node/office_equip - id = TECHWEB_NODE_OFFICE_EQUIP - starting_node = TRUE display_name = "Office Equipment" description = "Nanotrasen's finest in ergonomic office tech, ensuring station admin stays productive and compliant with corporate policies — because even in space, paperwork never stops." - design_ids = list( - "fax", - "sec_pen", - "handlabel", - "roll", - "universal_scanner", - "desttagger", - "packagewrap", - "sticky_tape", - "toner_large", - "toner", - "boxcutter", - "bounced_radio", - "radio_headset", - "earmuffs", - "recorder", - "tape", - "toy_balloon", - "pet_carrier", - "chisel", - "spraycan", - "camera_film", - "camera", - "razor", - "bucket", - "mop", - "wet_floor_sign", - "pushbroom", - "normtrash", - "wirebrush", - "flashlight", - "flare", - "water_balloon", - "ticket_machine", - "radio_entertainment", - "rdd", - "photocopier", + node_flags = parent_type::node_flags | TECHWEB_NODE_STARTER + unlocked_designs = list( + /datum/design/board/fax, + /datum/design/sec_pen, + /datum/design/handlabeler, + /datum/design/paperroll, + /datum/design/universal_scanner, + /datum/design/desttagger, + /datum/design/package_wrap, + /datum/design/sticky_tape, + /datum/design/toner/large, + /datum/design/toner, + /datum/design/boxcutter, + /datum/design/bounced_radio, + /datum/design/radio_headset, + /datum/design/earmuffs, + /datum/design/recorder, + /datum/design/tape, + /datum/design/toy_balloon, + /datum/design/pet_carrier, + /datum/design/chisel, + /datum/design/spraycan, + /datum/design/camera_film, + /datum/design/camera, + /datum/design/razor, + /datum/design/bucket, + /datum/design/mop, + /datum/design/wet_floor_sign, + /datum/design/broom, + /datum/design/normtrash, + /datum/design/wirebrush, + /datum/design/flashlight, + /datum/design/flare, + /datum/design/water_balloon, + /datum/design/ticket_machine, + /datum/design/entertainment_radio, + /datum/design/rdd, + /datum/design/board/photopcopier, ) /datum/techweb_node/sanitation - id = TECHWEB_NODE_SANITATION display_name = "Advanced Sanitation Technology" description = "Nanotrasen's latest in janitorial tech, making sure the station stays spotless and bear-free." - prereq_ids = list(TECHWEB_NODE_OFFICE_EQUIP) - design_ids = list( - "advmop", - "light_replacer", - "spraybottle", - "paint_remover", - "beartrap", - "buffer", - "vacuum", - "washing_machine", + prerequisite_nodes = list(/datum/techweb_node/office_equip) + unlocked_designs = list( + /datum/design/advmop, + /datum/design/light_replacer, + /datum/design/spraybottle, + /datum/design/paint_remover, + /datum/design/beartrap, + /datum/design/buffer_upgrade, + /datum/design/vacuum_upgrade, + /datum/design/board/washing_machine, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) discount_experiments = list(/datum/experiment/scanning/random/janitor_trash = TECHWEB_TIER_2_POINTS) announce_channels = list(RADIO_CHANNEL_SERVICE) /datum/techweb_node/consoles - id = TECHWEB_NODE_CONSOLES display_name = "Civilian Consoles" description = "User-friendly consoles for non-technical crew members, enhancing communication and access to essential station information." - prereq_ids = list(TECHWEB_NODE_OFFICE_EQUIP) - design_ids = list( - "comconsole", - "automated_announcement", - "cargo", - "cargorequest", - "med_data", - "crewconsole", - "bankmachine", - "account_console", - "idcard", - "c-reader", - "libraryconsole", - "libraryscanner", - "bookbinder", - "barcode_scanner", - "vendor", - "custom_vendor_refill", - "bounty_pad_control", - "bounty_pad", - "digital_clock_frame", - "telescreen_research", - "telescreen_ordnance", - "telescreen_interrogation", - "telescreen_prison", - "telescreen_bar", - "telescreen_entertainment", + prerequisite_nodes = list(/datum/techweb_node/office_equip) + unlocked_designs = list( + /datum/design/board/comconsole, + /datum/design/board/announcement_system, + /datum/design/board/cargo, + /datum/design/board/cargorequest, + /datum/design/board/med_data, + /datum/design/board/crewconsole, + /datum/design/board/bankmachine, + /datum/design/board/accounting_console, + /datum/design/id, + /datum/design/card_reader, + /datum/design/board/libraryconsole, + /datum/design/board/libraryscanner, + /datum/design/board/bookbinder, + /datum/design/barcode_scanner, + /datum/design/board/vendor, + /datum/design/custom_vendor_refill, + /datum/design/board/bountypad_control, + /datum/design/board/bountypad, + /datum/design/digital_clock_frame, + /datum/design/telescreen_research, + /datum/design/telescreen_ordnance, + /datum/design/telescreen_interrogation, + /datum/design/telescreen_prison, + /datum/design/telescreen_bar, + /datum/design/telescreen_entertainment, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) announce_channels = list(RADIO_CHANNEL_SERVICE) /datum/techweb_node/consoles/New() + . = ..() var/has_monastery = CHECK_MAP_JOB_CHANGE(JOB_CHAPLAIN, "has_monastery") if(has_monastery) - design_ids += "telescreen_monastery" - return ..() + unlocked_designs += /datum/design/telescreen_monastery /datum/techweb_node/gaming - id = TECHWEB_NODE_GAMING display_name = "Gaming" description = "For the slackers on the station." - prereq_ids = list(TECHWEB_NODE_CONSOLES) - design_ids = list( - "arcade_battle", - "arcade_orion", - "slotmachine", + prerequisite_nodes = list(/datum/techweb_node/consoles) + unlocked_designs = list( + /datum/design/board/arcade_battle, + /datum/design/board/orion_trail, + /datum/design/board/slot_machine, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) discount_experiments = list(/datum/experiment/physical/arcade_winner = TECHWEB_TIER_2_POINTS) // Kitchen root node /datum/techweb_node/cafeteria_equip - id = TECHWEB_NODE_CAFETERIA_EQUIP - starting_node = TRUE display_name = "Cafeteria Equipment" description = "When standard-issue tubed food no longer satisfies the station crew's appetite..." - design_ids = list( - "griddle", - "microwave", - "bowl", - "plate", - "oven_tray", - "servingtray", - "tongs", - "spoon", - "fork", - "kitchen_knife", - "plastic_spoon", - "plastic_fork", - "plastic_knife", - "shaker", - "drinking_glass", - "shot_glass", - "coffee_cartridge", - "coffeemaker", - "coffeepot", - "syrup_bottle", - "foodtray", - "restaurant_portal", + node_flags = parent_type::node_flags | TECHWEB_NODE_STARTER + unlocked_designs = list( + /datum/design/board/griddle, + /datum/design/board/microwave, + /datum/design/bowl, + /datum/design/plate, + /datum/design/oven_tray, + /datum/design/tray, + /datum/design/tongs, + /datum/design/spoon, + /datum/design/fork, + /datum/design/kitchen_knife, + /datum/design/plastic_spoon, + /datum/design/plastic_fork, + /datum/design/plastic_knife, + /datum/design/shaker, + /datum/design/drinking_glass, + /datum/design/shot_glass, + /datum/design/coffee_cartridge, + /datum/design/board/coffeemaker, + /datum/design/coffeepot, + /datum/design/syrup_bottle, + /datum/design/cafeteria_tray, + /datum/design/board/restaurant_portal, ) /datum/techweb_node/food_proc - id = TECHWEB_NODE_FOOD_PROC display_name = "Food Processing" description = "Top-tier kitchen appliances from Nanotrasen, designed to keep the crew well-fed and happy." - prereq_ids = list(TECHWEB_NODE_CAFETERIA_EQUIP) - design_ids = list( - "deepfryer", - "oven", - "stove", - "range", - "processor", - "gibber", - "monkey_recycler", - "reagentgrinder", - "microwave_engineering", - "smartfridge", - "dehydrator", - "sheetifier", - "fat_sucker", - "dish_drive", - "roastingstick", + prerequisite_nodes = list(/datum/techweb_node/cafeteria_equip) + unlocked_designs = list( + /datum/design/board/deepfryer, + /datum/design/board/oven, + /datum/design/board/stove, + /datum/design/board/range, + /datum/design/board/processor, + /datum/design/board/gibber, + /datum/design/board/monkey_recycler, + /datum/design/board/reagentgrinder, + /datum/design/board/microwave_engineering, + /datum/design/board/smartfridge, + /datum/design/board/dehydrator, + /datum/design/board/sheetifier, + /datum/design/board/fat_sucker, + /datum/design/board/dish_drive, + /datum/design/roastingstick, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) announce_channels = list(RADIO_CHANNEL_SERVICE) // Fishing root node /datum/techweb_node/fishing_equip - id = TECHWEB_NODE_FISHING_EQUIP - starting_node = TRUE display_name = "Fishing Equipment" description = "Basic fishing gear tailored for space station environments, perfect for extraterrestrial aquatic pursuits." - design_ids = list( - "fishing_portal_generator", - "fishing_rod", - "fish_case", - "aquarium_kit", + node_flags = parent_type::node_flags | TECHWEB_NODE_STARTER + unlocked_designs = list( + /datum/design/board/fishing_portal_generator, + /datum/design/fishing_rod_basic, + /datum/design/fish_case, + /datum/design/aquarium_kit, ) /datum/techweb_node/fishing_equip_adv - id = TECHWEB_NODE_FISHING_EQUIP_ADV display_name = "Advanced Fishing Tools" description = "Continuing advancements in fishing technology, incorporating cutting-edge features in space fishing operations. Just don't try this on space carps..." - prereq_ids = list(TECHWEB_NODE_FISHING_EQUIP) - design_ids = list( - "fishing_rod_tech", - "fishing_gloves", - "mod_fishing", - "stabilized_hook", - "auto_reel", - "fish_analyzer", - "bluespace_fish_case", - "bluespace_fish_tank_kit", + prerequisite_nodes = list(/datum/techweb_node/fishing_equip) + unlocked_designs = list( + /datum/design/fishing_rod_tech, + /datum/design/fishing_gloves, + /datum/design/module/fishing_glove, + /datum/design/stabilized_hook, + /datum/design/auto_reel, + /datum/design/fish_analyzer, + /datum/design/bluespace_fish_case, + /datum/design/bluespace_fish_tank, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) required_experiments = list(/datum/experiment/scanning/fish) /datum/techweb_node/marine_util - id = TECHWEB_NODE_MARINE_UTIL display_name = "Marine Utility" description = "Fish are nice to look at and all, but they can be put to use." - prereq_ids = list(TECHWEB_NODE_FISHING_EQUIP_ADV) - design_ids = list( - "bioelec_gen", - "bluespace_reel", - "fish_genegun", + prerequisite_nodes = list(/datum/techweb_node/fishing_equip_adv) + unlocked_designs = list( + /datum/design/bioelec_gen, + /datum/design/bluespace_reel, + /datum/design/fish_genegun, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) // only available if you've done the first fishing experiment (thus unlocking fishing tech), but not a strict requirement to get the tech discount_experiments = list(/datum/experiment/scanning/fish/second = TECHWEB_TIER_3_POINTS) /datum/techweb_node/fishing_anomalous - id = TECHWEB_NODE_FISHING_ANOMALOUS display_name = "Anomalous Fishing" description = "For the truly adventurous fisher, these experimental tools could augment your catches in unpredictable ways." - prereq_ids = list(TECHWEB_NODE_FISHING_EQUIP_ADV, TECHWEB_NODE_ANOMALY_RESEARCH) - design_ids = list( - "anomalous_fishing_hook", + prerequisite_nodes = list(/datum/techweb_node/fishing_equip_adv, /datum/techweb_node/anomaly_research) + unlocked_designs = list( + /datum/design/anomalous_fishing_hook, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) diff --git a/code/modules/research/techweb/nodes/surgery_nodes.dm b/code/modules/research/techweb/nodes/surgery_nodes.dm index 9123179509f8..b37320f886ab 100644 --- a/code/modules/research/techweb/nodes/surgery_nodes.dm +++ b/code/modules/research/techweb/nodes/surgery_nodes.dm @@ -1,86 +1,80 @@ /datum/techweb_node/oldstation_surgery - id = TECHWEB_NODE_OLDSTATION_SURGERY display_name = "Experimental Dissection" description = "Grants access to experimental dissections, which allows generation of research points." - prereq_ids = list(TECHWEB_NODE_MEDBAY_EQUIP) - design_ids = list( - "surgery_oldstation_dissection", + prerequisite_nodes = list(/datum/techweb_node/medbay_equip) + unlocked_designs = list( + /datum/design/surgery/experimental_dissection, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) - hidden = TRUE - show_on_wiki = FALSE + node_flags = TECHWEB_NODE_HIDDEN /datum/techweb_node/surgery - id = TECHWEB_NODE_SURGERY display_name = "Improved Wound-Tending" description = "Who would have known being more gentle with a hemostat decreases patient pain?" - prereq_ids = list(TECHWEB_NODE_MEDBAY_EQUIP) - design_ids = list( - "surgery_heal_upgrade", - "medibot_upgrade", + prerequisite_nodes = list(/datum/techweb_node/medbay_equip) + unlocked_designs = list( + /datum/design/surgery/tend_wounds_upgrade, + /datum/design/medibot_upgrade, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) announce_channels = list(RADIO_CHANNEL_MEDICAL) /datum/techweb_node/surgery_adv - id = TECHWEB_NODE_SURGERY_ADV display_name = "Advanced Surgery" description = "When simple medicine doesn't cut it." - prereq_ids = list(TECHWEB_NODE_SURGERY) - design_ids = list( - "harvester", - "medibot_upgrade_two", - "surgery_heal_combo", - "surgery_heal_upgrade_femto", - "surgery_lobotomy", - "surgery_lobotomy_mechanic", - "surgery_wing_reconstruction", + prerequisite_nodes = list(/datum/techweb_node/surgery) + unlocked_designs = list( + /datum/design/board/harvester, + /datum/design/medibot_upgrade/tier_two, + /datum/design/surgery/tend_wounds_combo, + /datum/design/surgery/tend_wounds_upgrade/femto, + /datum/design/surgery/lobotomy, + /datum/design/surgery/lobotomy/mechanic, + /datum/design/surgery/wing_reconstruction, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) discount_experiments = list(/datum/experiment/autopsy/human = TECHWEB_TIER_2_POINTS) announce_channels = list(RADIO_CHANNEL_MEDICAL) /datum/techweb_node/surgery_exp - id = TECHWEB_NODE_SURGERY_EXP display_name = "Experimental Surgery" description = "When evolution isn't fast enough." - prereq_ids = list(TECHWEB_NODE_SURGERY_ADV) - design_ids = list( - "medibot_upgrade_three", - "surgery_cortex_folding", - "surgery_cortex_folding_mechanic", - "surgery_cortex_imprint", - "surgery_cortex_imprint_mechanic", - "surgery_heal_combo_upgrade", - "surgery_ligament_hook", - "surgery_ligament_hook_mechanic", - "surgery_ligament_reinforcement", - "surgery_ligament_reinforcement_mechanic", - "surgery_muscled_veins", - "surgery_muscled_veins_mechanic", - "surgery_nerve_ground", - "surgery_nerve_ground_mechanic", - "surgery_nerve_splice", - "surgery_nerve_splice_mechanic", - "surgery_pacify", - "surgery_pacify_mechanic", - "surgery_vein_thread", - "surgery_vein_thread_mechanic", - "surgery_viral_bond", + prerequisite_nodes = list(/datum/techweb_node/surgery_adv) + unlocked_designs = list( + /datum/design/medibot_upgrade/tier_three, + /datum/design/surgery/cortex_folding, + /datum/design/surgery/cortex_folding/mechanic, + /datum/design/surgery/cortex_imprint, + /datum/design/surgery/cortex_imprint/mechanic, + /datum/design/surgery/tend_wounds_combo/upgrade, + /datum/design/surgery/ligament_hook, + /datum/design/surgery/ligament_hook/mechanic, + /datum/design/surgery/ligament_reinforcement, + /datum/design/surgery/ligament_reinforcement/mechanic, + /datum/design/surgery/muscled_veins, + /datum/design/surgery/muscled_veins/mechanic, + /datum/design/surgery/nerve_grounding, + /datum/design/surgery/nerve_grounding/mechanic, + /datum/design/surgery/nerve_splicing, + /datum/design/surgery/nerve_splicing/mechanic, + /datum/design/surgery/pacify, + /datum/design/surgery/pacify/mechanic, + /datum/design/surgery/vein_threading, + /datum/design/surgery/vein_threading/mechanic, + /datum/design/surgery/viral_bonding, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) discount_experiments = list(/datum/experiment/autopsy/nonhuman = TECHWEB_TIER_3_POINTS) announce_channels = list(RADIO_CHANNEL_MEDICAL) /datum/techweb_node/surgery_tools - id = TECHWEB_NODE_SURGERY_TOOLS display_name = "Advanced Surgery Tools" description = "Surgical instruments of dual purpose for quick operations." - prereq_ids = list(TECHWEB_NODE_SURGERY_EXP) - design_ids = list( - "laserscalpel", - "searingtool", - "mechanicalpinches", + prerequisite_nodes = list(/datum/techweb_node/surgery_exp) + unlocked_designs = list( + /datum/design/laserscalpel, + /datum/design/searingtool, + /datum/design/mechanicalpinches, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) discount_experiments = list(/datum/experiment/autopsy/xenomorph = TECHWEB_TIER_4_POINTS) diff --git a/code/modules/research/techweb/nodes/syndicate_nodes.dm b/code/modules/research/techweb/nodes/syndicate_nodes.dm index d031cf7c8480..fc0d7a4cdf07 100644 --- a/code/modules/research/techweb/nodes/syndicate_nodes.dm +++ b/code/modules/research/techweb/nodes/syndicate_nodes.dm @@ -1,23 +1,22 @@ /datum/techweb_node/syndicate_basic - id = TECHWEB_NODE_SYNDICATE_BASIC display_name = "Illegal Technology" description = "Dangerous research used to create dangerous objects." - prereq_ids = list(TECHWEB_NODE_EXP_TOOLS, TECHWEB_NODE_EXOTIC_AMMO) - design_ids = list( - "advanced_camera", - "ai_cam_upgrade", - "borg_syndicate_module", - "donksoft_refill", - "largecrossbow", - "mag_autorifle", - "mag_autorifle_ap", - "mag_autorifle_ic", - "rapidsyringe", - "suppressor", - "super_pointy_tape", + node_flags = parent_type::node_flags | TECHWEB_NODE_HIDDEN + prerequisite_nodes = list(/datum/techweb_node/exp_tools, /datum/techweb_node/exotic_ammo) + unlocked_designs = list( + /datum/design/board/advanced_camera, + /datum/design/ai_cam_upgrade, + /datum/design/borg_syndicate_module, + /datum/design/donksoft_refill, + /datum/design/largecrossbow, + /datum/design/mag_autorifle, + /datum/design/mag_autorifle/ap_mag, + /datum/design/mag_autorifle/ic_mag, + /datum/design/rapidsyringe, + /datum/design/suppressor, + /datum/design/super_pointy_tape, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) - hidden = TRUE /datum/techweb_node/syndicate_basic/New() //Crappy way of making syndicate gear decon supported until there's another way. . = ..() @@ -36,12 +35,11 @@ required_items_to_unlock |= item.item //allows deconning to unlock. /datum/techweb_node/unregulated_bluespace - id = TECHWEB_NODE_UNREGULATED_BLUESPACE display_name = "Unregulated Bluespace Research" description = "Bluespace technology using unstable or unbalanced procedures, prone to damaging the fabric of bluespace. Outlawed by galactic conventions." - prereq_ids = list(TECHWEB_NODE_PARTS_BLUESPACE, TECHWEB_NODE_SYNDICATE_BASIC) - design_ids = list( - "desynchronizer", - "beamrifle", + prerequisite_nodes = list(/datum/techweb_node/parts_bluespace, /datum/techweb_node/syndicate_basic) + unlocked_designs = list( + /datum/design/desynchronizer, + /datum/design/beamrifle, ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) diff --git a/code/modules/research/techweb/techweb_types.dm b/code/modules/research/techweb/techweb_types.dm index 407008b28449..7dda7982fa35 100644 --- a/code/modules/research/techweb/techweb_types.dm +++ b/code/modules/research/techweb/techweb_types.dm @@ -8,8 +8,12 @@ /datum/techweb/science/research_node(datum/techweb_node/node, force = FALSE, auto_adjust_cost = TRUE, get_that_dosh = TRUE, atom/research_source) . = ..() - if(.) - node.on_station_research(research_source) + if(!.) + return + + if(ispath(node)) + node = SSresearch.techweb_nodes[node] + node.on_station_research(research_source) /datum/techweb/oldstation id = "CHARLIE" @@ -18,7 +22,7 @@ /datum/techweb/oldstation/New() . = ..() - research_node_id(TECHWEB_NODE_OLDSTATION_SURGERY, TRUE, TRUE, FALSE) + research_node(/datum/techweb_node/oldstation_surgery, TRUE, TRUE, FALSE) /** * Admin techweb that has everything unlocked by default @@ -29,19 +33,10 @@ /datum/techweb/admin/New() . = ..() - for(var/i in SSresearch.techweb_nodes) - var/datum/techweb_node/TN = SSresearch.techweb_nodes[i] - research_node(TN, TRUE, TRUE, FALSE) - for(var/i in SSresearch.point_types) - research_points[i] = INFINITY - hidden_nodes = list() - -/** - * Techweb made through tech disks - * Contains nothing, subtype mostly meant to make it easy for admins to see. - */ -/datum/techweb/disk - id = "D1SK" + for(var/node_path, node in SSresearch.techweb_nodes) + research_node(node, TRUE, TRUE, FALSE) + adjust_all_points(INFINITY) + hidden_nodes.Cut() GLOBAL_LIST_EMPTY(autounlock_techwebs) @@ -58,17 +53,19 @@ GLOBAL_LIST_EMPTY(autounlock_techwebs) /datum/techweb/autounlocking/New() . = ..() - for(var/id in SSresearch.techweb_designs) - var/datum/design/design = SSresearch.techweb_designs[id] + for(var/design_path, _design in SSresearch.techweb_designs) + var/datum/design/design = _design if(!(design.build_type & allowed_buildtypes)) continue if(RND_CATEGORY_INITIAL in design.category) - add_design_by_id(id) + add_design(design_path) if(RND_CATEGORY_HACKED in design.category) - add_design_by_id(id, add_to = hacked_designs) + add_design(design_path, add_to = hacked_designs) /datum/techweb/autounlocking/add_design(datum/design/design, custom = FALSE, list/add_to) - if(!(design.build_type & allowed_buildtypes)) + if(ispath(design)) + design = SSresearch.techweb_designs[design] + if(!istype(design) || !(design.build_type & allowed_buildtypes)) return FALSE return ..() diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm index e545abe6d0b5..7ce5302d9d9e 100644 --- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm +++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm @@ -559,7 +559,7 @@ return ..() -/datum/status_effect/stabilized/purple/get_examine_text() +/datum/status_effect/stabilized/purple/get_examine_text(mob/examiner) if(healed_last_tick) return span_warning("[owner.p_They()] [owner.p_are()] regenerating slowly, purplish goo filling in small injuries!") @@ -605,7 +605,7 @@ var/cooldown = 10 var/max_cooldown = 10 -/datum/status_effect/stabilized/yellow/get_examine_text() +/datum/status_effect/stabilized/yellow/get_examine_text(mob/examiner) return span_warning("Nearby electronics seem just a little more charged wherever [owner.p_they()] go[owner.p_es()].") /datum/status_effect/stabilized/yellow/tick(seconds_between_ticks) @@ -652,7 +652,7 @@ REMOVE_TRAIT(owner, TRAIT_RESISTHEATHANDS, TRAIT_STATUS_EFFECT(id)) QDEL_NULL(fire) -/datum/status_effect/stabilized/darkpurple/get_examine_text() +/datum/status_effect/stabilized/darkpurple/get_examine_text(mob/examiner) return span_notice("[owner.p_Their()] fingertips burn brightly!") /datum/status_effect/stabilized/darkblue @@ -845,7 +845,7 @@ return ..() // Only occasionally give examiners a warning. -/datum/status_effect/stabilized/green/get_examine_text() +/datum/status_effect/stabilized/green/get_examine_text(mob/examiner) if(prob(50)) return span_warning("[owner.p_They()] look[owner.p_s()] a bit green and gooey...") @@ -953,7 +953,7 @@ qdel(linked_extract) return ..() -/datum/status_effect/stabilized/oil/get_examine_text() +/datum/status_effect/stabilized/oil/get_examine_text(mob/examiner) return span_warning("[owner.p_They()] smell[owner.p_s()] of sulfur and oil!") /// How much damage is dealt per healing done for the stabilized back. @@ -992,7 +992,7 @@ to_chat(owner, span_boldnotice("You feel your hands melt around [draining]'s neck as you start to drain [draining.p_them()] of [draining.p_their()] life!")) to_chat(draining, span_userdanger("[owner]'s hands melt around your neck as you can feel your life starting to drain away!")) -/datum/status_effect/stabilized/black/get_examine_text() +/datum/status_effect/stabilized/black/get_examine_text(mob/examiner) var/mob/living/draining = draining_ref?.resolve() if(!draining) return null @@ -1050,7 +1050,7 @@ id = "stabilizedadamantine" colour = SLIME_TYPE_ADAMANTINE -/datum/status_effect/stabilized/adamantine/get_examine_text() +/datum/status_effect/stabilized/adamantine/get_examine_text(mob/examiner) return span_warning("[owner.p_They()] [owner.p_have()] strange metallic coating on [owner.p_their()] skin.") /datum/status_effect/stabilized/gold diff --git a/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm b/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm index f07f629de0fe..5eb349bfc4c7 100644 --- a/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm +++ b/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm @@ -626,9 +626,10 @@ /datum/reagent/consumable/nutriment/protein, /datum/reagent/consumable/nutriment/vitamin, /datum/reagent/consumable/nutriment/peptides, - /datum/reagent/consumable/liquidelectricity/enriched, + /datum/reagent/consumable/liquidelectricity, /datum/reagent/growthserum, - /datum/reagent/yuck) + /datum/reagent/yuck, + ) supplementary_reagents = list( /datum/reagent/medicine/rezadone = 3, @@ -636,11 +637,13 @@ /datum/reagent/consumable/red_queen = 2, /datum/reagent/consumable/peachjuice = 2, /datum/reagent/uranium = 1, - /datum/reagent/consumable/liquidgibs = 1) + /datum/reagent/consumable/liquidgibs = 1, + ) suppressive_reagents = list( /datum/reagent/consumable/salt = -3, - /datum/reagent/medicine/c2/syriniver = -2) + /datum/reagent/medicine/c2/syriniver = -2, + ) virus_suspectibility = 0.5 resulting_atom = /mob/living/basic/vatbeast diff --git a/code/modules/shuttle/mobile_port/variants/supply.dm b/code/modules/shuttle/mobile_port/variants/supply.dm index 425c6402fb2b..da042aa93163 100644 --- a/code/modules/shuttle/mobile_port/variants/supply.dm +++ b/code/modules/shuttle/mobile_port/variants/supply.dm @@ -253,8 +253,8 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( var/buyer = buying_account.account_holder if(buying_account_orders.len > GOODY_FREE_SHIPPING_MAX) // no free shipping, send a crate - var/obj/structure/closet/crate/secure/owned/our_crate = new /obj/structure/closet/crate/secure/owned(pick_n_take(empty_turfs)) - our_crate.buyer_account = buying_account + var/obj/structure/closet/crate/secure/our_crate = new /obj/structure/closet/crate/secure(pick_n_take(empty_turfs)) + our_crate.AddComponent(/datum/component/locked_to_account, buying_account) our_crate.name = "goody crate - purchased by [buyer]" miscboxes[buyer] = our_crate else //free shipping in a case @@ -262,11 +262,10 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( var/obj/item/storage/lockbox/order/our_case = miscboxes[buyer] our_case.buyer_account = buying_account miscboxes[buyer].name = "goody case - purchased by [buyer]" - misc_contents[buyer] = list() for(var/datum/supply_order/our_order as anything in buying_account_orders) for (var/item in our_order.pack.contains) - misc_contents[buyer] += item + LAZYADD(misc_contents[buyer], item) misc_costs[buyer] += our_order.pack.cost misc_order_num[buyer] = "[misc_order_num[buyer]]#[our_order.id] " diff --git a/code/modules/spells/spell_types/jaunt/shadow_walk.dm b/code/modules/spells/spell_types/jaunt/shadow_walk.dm index 5dea6785d045..f394378d1ca8 100644 --- a/code/modules/spells/spell_types/jaunt/shadow_walk.dm +++ b/code/modules/spells/spell_types/jaunt/shadow_walk.dm @@ -33,7 +33,7 @@ if(is_jaunting(owner)) return TRUE var/turf/cast_turf = get_turf(owner) - if(cast_turf.get_lumcount() >= light_threshold) + if(!cast_turf.check_lumcount_below(light_threshold)) if(feedback) to_chat(owner, span_warning("It isn't dark enough here!")) return FALSE @@ -123,7 +123,7 @@ /obj/effect/dummy/phased_mob/shadow/proc/check_light_level(atom/location_to_check) var/turf/light_turf = get_turf(location_to_check) - return light_turf.get_lumcount() > light_max // jaunt ends on TRUE + return light_turf.check_lumcount_above(light_max) // jaunt ends on TRUE /** * Checks if the user should receive a warning that they're moving into light. diff --git a/code/modules/spells/spell_types/pointed/terrorize.dm b/code/modules/spells/spell_types/pointed/terrorize.dm index 824fc0319027..adbb65e025b5 100644 --- a/code/modules/spells/spell_types/pointed/terrorize.dm +++ b/code/modules/spells/spell_types/pointed/terrorize.dm @@ -23,8 +23,7 @@ var/unlit_tiles = 0 for(var/turf/open/turf_to_check in range(1, cast_on)) //We have to use range for this because fully darkened tiles get blocked by view()'s visibility checks - var/light_amount = turf_to_check.get_lumcount() - if(light_amount > 0.2) + if(turf_to_check.check_lumcount_above(0.2)) lit_tiles++ else unlit_tiles++ diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm index 9e698299fb67..192cc3156291 100644 --- a/code/modules/station_goals/dna_vault.dm +++ b/code/modules/station_goals/dna_vault.dm @@ -178,6 +178,7 @@ /obj/machinery/dna_vault/proc/check_goal() if(plant_dna.len >= plants_max && animal_dna.len >= animals_max && human_dna.len >= dna_max) completed = TRUE + SSshuttle.shuttle_purchase_requirements_met[SHUTTLE_UNLOCK_ARK] = TRUE /obj/machinery/dna_vault/proc/upgrade(mob/living/carbon/human/target, upgrade_type) var/datum/weakref/human_weakref = WEAKREF(target) diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 938df3d81786..a49e324753db 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -20,6 +20,9 @@ var/husk_type = "humanoid" ///The color to multiply the greyscaled husk sprites by. Can be null. Old husk sprite chest color is #A6A6A6 var/husk_color = "#A6A6A6" + /// The color to multiply the zombie husk sprites by. + var/zombie_color = "#006009" + layer = BELOW_MOB_LAYER //so it isn't hidden behind objects when on the floor /// The mob that "owns" this limb /// DO NOT MODIFY DIRECTLY. Use update_owner() @@ -48,7 +51,7 @@ var/mangled_state = BODYPART_MANGLED_NONE ///Whether the bodypart (and the owner) is husked. - var/is_husked = FALSE + var/is_husked = NONE ///Whether the bodypart (and the owner) is invisible through invisibleman trait. var/is_invisible = FALSE ///The ID of a species used to generate the icon. Needs to match the icon_state portion in the limbs file! @@ -227,9 +230,9 @@ var/list/bodypart_effects /// The cached info about the blood this organ belongs to, set during on_removal() var/list/blood_dna_info - /// What items we drop whenever we're butchered - /// If unset, the bodyparot cannot be butchered - var/list/butcher_drops = null + /// Lazy assoc list of [item type] = [amount] that we drop when butchered. + /// Overrides whatever we would drop normally based on our species datum. + var/list/butcher_drops_override /// What skeleton limb, if any, we replace ourselves with when butchered? var/obj/item/bodypart/butcher_replacement = null /// How much meat do we add to butcher_drops when automatically generating them from our species datum? @@ -270,7 +273,7 @@ add_bodypart_overlay(texture_bodypart_overlay, update = FALSE) if(IS_ORGANIC_LIMB(src)) - blood_dna_info = list("Unknown DNA" = get_blood_type(BLOOD_TYPE_O_PLUS)) + blood_dna_info = list("Unknown DNA" = get_blood_type(/datum/blood_type/human/o_plus)) set_bio_state_status() @@ -285,11 +288,6 @@ add_surgical_state(innate_state) name = "[limb_id] [parse_zone(body_zone)]" - // There's a lot of bodyparts in the world, and we don't need to have separate drops on each and every one of them - var/list/drop_results = get_butcher_drops() - if (length(drop_results)) - butcher_drops = string_list(drop_results) - butcher_drop_cache[type] = butcher_drops update_limb(TRUE) update_icon_dropped() refresh_bleed_rate() @@ -333,17 +331,19 @@ return FALSE return ..() -/// Returns an assoc list of items dropped when the limb is butchered -/// force - Force an update of drops ignoring the cache -/obj/item/bodypart/proc/get_butcher_drops(force = FALSE) - if(!isnull(butcher_drops) && !force) - return butcher_drops - if (butcher_drop_cache[type] && !force) - return butcher_drop_cache[type] - var/datum/species/species = GLOB.species_list[species_id || limb_id] - if (!species || !species.meat || !base_meat_amount) +/// Returns a lazy assoc list of items dropped when the limb is butchered +/obj/item/bodypart/proc/get_butcher_drops() + var/meat_to_spawn = max(base_meat_amount, values_sum(butcher_drops_override)) + if(meat_to_spawn <= 0) return null - return list(species.meat = base_meat_amount) + if(is_husked == HUSKED_ZOMBIE) + return list(/obj/item/food/meat/slab/human/mutant/zombie = meat_to_spawn) + if(length(butcher_drops_override)) + return butcher_drops_override + var/datum/species/species = GLOB.species_list[species_id || limb_id] + if (!isnull(species?.meat)) + return list(species.meat = meat_to_spawn) + return null /obj/item/bodypart/proc/on_forced_removal(atom/old_loc, dir, forced, list/old_locs) SIGNAL_HANDLER @@ -1193,13 +1193,13 @@ bodypart_flags &= ~BODYPART_VIRGIN if(!(bodypart_flags & BODYPART_UNHUSKABLE) && owner && HAS_TRAIT(owner, TRAIT_HUSK)) dmg_overlay_type = "" //no damage overlay shown when husked - is_husked = TRUE + is_husked = HAS_TRAIT_FROM_ONLY(owner, TRAIT_HUSK, /datum/status_effect/zombie::id) ? HUSKED_ZOMBIE : HUSKED_BURN else if(owner && HAS_TRAIT(owner, TRAIT_INVISIBLE_MAN)) dmg_overlay_type = "" //no damage overlay shown when invisible since the wounds themselves are invisible. is_invisible = TRUE else dmg_overlay_type = initial(dmg_overlay_type) - is_husked = FALSE + is_husked = NONE is_invisible = FALSE update_draw_color() @@ -1319,6 +1319,17 @@ if (dropped) image_dir = SOUTH + // Stumps are FAKE limbs that hold the spot for REAL limbs. thusly no sprite of their own, so early return! + if(IS_STUMP(src)) + SEND_SIGNAL(src, COMSIG_BODYPART_GET_LIMB_ICON, ., dropped) + return . + + // Arms past the first pair get body_zone suffixed (l_arm_2 and so on). No state exists for them + // This guard is bad :) + if(held_index >= 3) + SEND_SIGNAL(src, COMSIG_BODYPART_GET_LIMB_ICON, ., dropped) + return . + // Handles invisibility (not alpha or actual invisibility but invisibility) if(is_invisible) . += image(icon_invisible, "invisible_[body_zone]", -BODYPARTS_LAYER, dir = image_dir) @@ -1358,19 +1369,6 @@ if(burnstate) . += image('icons/mob/effects/dam_mob.dmi', "[dmg_overlay_type]_[body_zone]_0[burnstate]", -DAMAGE_LAYER, dir = SOUTH) - if(is_husked) - . += huskify_image(thing_to_husk = limb) - if(aux) - . += huskify_image(thing_to_husk = aux) - draw_color = husk_color - else - update_draw_color() - - if(draw_color) - limb.color = "[draw_color]" - if(aux_zone) - aux.color = "[draw_color]" - var/atom/location = loc || owner || src if(blocks_emissive != EMISSIVE_BLOCK_NONE) var/mutable_appearance/limb_em_block = emissive_blocker(limb.icon, limb.icon_state, location, layer = limb.layer, alpha = limb.alpha) @@ -1396,6 +1394,19 @@ aux_em = image(aux_em, dir = SOUTH) . += aux_em + if(is_husked) + . += huskify_image(thing_to_husk = limb) + if(aux) + . += huskify_image(thing_to_husk = aux) + draw_color = is_husked == HUSKED_ZOMBIE ? zombie_color : husk_color + else + update_draw_color() + + if(draw_color) + limb.color = "[draw_color]" + if(aux_zone) + aux.color = "[draw_color]" + // No need to handle leg layering if dropped, we only face south anyways if(!dropped && ((body_zone == BODY_ZONE_R_LEG) || (body_zone == BODY_ZONE_L_LEG))) // Legs are a bit goofy in regards to layering, and we will need two images instead of one to fix that @@ -1442,17 +1453,44 @@ SEND_SIGNAL(src, COMSIG_BODYPART_GET_LIMB_ICON, ., dropped) return . +/** + * Takes in an image and greyscales it to later be recolored to look like a husk + * + * Then returns a separate image/MA that is the blood overlay for the husk + * May return multiple if the blood overlay has an emissive associated + */ /obj/item/bodypart/proc/huskify_image(image/thing_to_husk) var/icon/husk_icon = new(thing_to_husk.icon) husk_icon.ColorTone(HUSK_COLOR_TONE) thing_to_husk.icon = husk_icon - var/mutable_appearance/husk_blood = mutable_appearance(icon_husk, "[husk_type]_husk_[body_zone]", appearance_flags = RESET_COLOR) - // BLEND_INSET_OVERLAY on KEEP_TOGETHER atoms masks itself with the atom, so we cannot add this as an overlay to our limb to have it automatically mask + + var/mutable_appearance/husk_blood = mutable_appearance(icon_husk, "[husk_type]_husk_[body_zone]", thing_to_husk.layer, appearance_flags = RESET_COLOR) + . = list(husk_blood) + + // BLEND_INSET_OVERLAY on KEEP_TOGETHER atoms masks itself with the atom, + // so we cannot add this as an overlay to our limb to have it automatically mask husk_blood.blend_mode = BLEND_INSET_OVERLAY husk_blood.dir = thing_to_husk.dir - husk_blood.layer = thing_to_husk.layer - husk_blood.color = LAZYLEN(blood_dna_info) ? get_color_from_blood_list(blood_dna_info) : BLOOD_COLOR_RED - return husk_blood + + if(!LAZYLEN(blood_dna_info)) + husk_blood.color = BLOOD_COLOR_RED + return . + + husk_blood.color = get_color_from_blood_list(blood_dna_info) + + var/average_emissive_alpha = 0 + for(var/dna, blood_type in blood_dna_info) + average_emissive_alpha += astype(blood_type, /datum/blood_type)?.get_emissive_alpha(src) + + if(!average_emissive_alpha) + return . + + average_emissive_alpha /= LAZYLEN(blood_dna_info) + var/mutable_appearance/husk_blood_em = emissive_appearance(husk_blood.icon, husk_blood.icon_state, loc || owner || src, husk_blood.layer, average_emissive_alpha) + husk_blood_em.blend_mode = BLEND_INSET_OVERLAY + husk_blood_em.dir = husk_blood.dir + . += husk_blood_em + return . /** * Adds a bodypart overlay to the limb diff --git a/code/modules/surgery/bodyparts/bodypart_effects.dm b/code/modules/surgery/bodyparts/bodypart_effects.dm deleted file mode 100644 index d8fea22b95a7..000000000000 --- a/code/modules/surgery/bodyparts/bodypart_effects.dm +++ /dev/null @@ -1,189 +0,0 @@ -/// For scaling the effectiveness of certain effects to the total bodypart count -#define GET_BODYPART_COEFFICIENT(X) round(X.len / BODYPARTS_DEFAULT_MAXIMUM , 0.1) -/// Check if it's full body. These are mostly here so we can change just one place when we ever add more limbs (?) -#define IS_FULL_BODY(X) (X.len == BODYPARTS_DEFAULT_MAXIMUM ) - -/// Effects added to a carbon focused on the bodyparts itself, such as adding a photosynthesis component that -/datum/status_effect/grouped/bodypart_effect - id = "bodypart_effect" - duration = STATUS_EFFECT_PERMANENT - processing_speed = STATUS_EFFECT_NORMAL_PROCESS - - /// List of bodyparts contributing to this effect - var/list/bodyparts = list() - /// Minimum amount of bodyparts required for on_apply to be called. When tipping below, on_remove is called - var/minimum_bodyparts = 1 - /// Are we currently active? We don't NEED to track it, but it's a lot easier and faster if we do - var/is_active = FALSE - -/datum/status_effect/grouped/bodypart_effect/source_added(source, obj/item/bodypart/bodypart) - add_bodypart(bodypart) - -/// Merge a bodypart into the effect -/datum/status_effect/grouped/bodypart_effect/proc/add_bodypart(bodypart) - RegisterSignal(bodypart, COMSIG_BODYPART_REMOVED, PROC_REF(on_bodypart_removed)) - RegisterSignal(bodypart, COMSIG_QDELETING, PROC_REF(on_bodypart_destroyed)) - - bodyparts.Add(bodypart) - - if(!is_active && bodyparts.len >= minimum_bodyparts) - activate() - -/// Remove a bodypart from the effect. Deleting = TRUE is used during clean-up phase -/datum/status_effect/grouped/bodypart_effect/proc/remove_bodypart(mob/living/carbon/old_owner, obj/item/bodypart/bodypart, deleting) - UnregisterSignal(bodypart, COMSIG_BODYPART_REMOVED) - - bodyparts.Remove(bodypart) - - if(deleting) - return - - if(bodyparts.len == 0 && !QDELETED(old_owner)) - qdel(src) - - else if(is_active && bodyparts.len < minimum_bodyparts) - deactivate() - -/// Signal called when a bodypart is removed -/datum/status_effect/grouped/bodypart_effect/proc/on_bodypart_removed(obj/item/bodypart/bodypart, special) - SIGNAL_HANDLER - - remove_bodypart(owner, bodypart) - -/// Signal called when a bodypart is destroyed. Destruction of a bodypart doesn't necessarily drop it -/datum/status_effect/grouped/bodypart_effect/proc/on_bodypart_destroyed(obj/item/bodypart/bodypart) - SIGNAL_HANDLER - - remove_bodypart(bodypart.owner, bodypart) - -/// Activate some sort of effect when a threshold is reached -/datum/status_effect/grouped/bodypart_effect/proc/activate() - PROTECTED_PROC(TRUE) - SHOULD_CALL_PARENT(TRUE) - - is_active = TRUE - // Maybe add support for different stages? AKA add a stronger effect when there are more limbs - -/// Remove an effect whenever a threshold is no longer reached -/datum/status_effect/grouped/bodypart_effect/proc/deactivate() - PROTECTED_PROC(TRUE) - SHOULD_CALL_PARENT(TRUE) - - is_active = FALSE - -/// Clean up all references and self-destruct -/datum/status_effect/grouped/bodypart_effect/Destroy() - deactivate() - for(var/obj/item/bodypart/bodypart as anything in bodyparts) - remove_bodypart(bodypart.owner, bodypart, deleting = TRUE) - - return ..() - -/// This limb regens in light! Only BODYTYPE_PLANT limbs will heal, but limbs without the flag (and with the effect) still contribute to healing of the other limbs -/datum/status_effect/grouped/bodypart_effect/photosynthesis - processing_speed = STATUS_EFFECT_NORMAL_PROCESS - tick_interval = 1 SECONDS - id = "photosynthesis" - -/datum/status_effect/grouped/bodypart_effect/photosynthesis/tick(seconds_between_ticks) - var/light_amount = 0 // How much light there is in the place, affects receiving nutrition and healing - var/bodypart_coefficient = GET_BODYPART_COEFFICIENT(bodyparts) - - if(!isturf(owner.loc)) // There's considered to be no light inside of objects - if(owner.nutrition < NUTRITION_LEVEL_STARVING + 50) - owner.take_overall_damage(brute = 1 * bodypart_coefficient, required_bodytype = BODYTYPE_PLANT) - return - - var/turf/turf_loc = owner.loc - light_amount = min(1, turf_loc.get_lumcount()) - 0.5 - - if(owner.nutrition < NUTRITION_LEVEL_ALMOST_FULL) - owner.adjust_nutrition(5 * light_amount * bodypart_coefficient) - - if(light_amount > 0.2) // If there's enough light, heal - var/need_mob_update = FALSE - need_mob_update += owner.heal_overall_damage(brute = 0.5 * bodypart_coefficient, \ - burn = 0.5 * bodypart_coefficient, updating_health = FALSE, required_bodytype = BODYTYPE_PLANT) - need_mob_update += owner.adjust_tox_loss(-0.5 * bodypart_coefficient, updating_health = FALSE) - need_mob_update += owner.adjust_oxy_loss(-0.5 * bodypart_coefficient, updating_health = FALSE) - if(need_mob_update) - owner.updatehealth() - - if(owner.nutrition < NUTRITION_LEVEL_STARVING + 50) - owner.take_overall_damage(brute = 1 * bodypart_coefficient, required_bodytype = BODYTYPE_PLANT) - -/// This limb heals in darkness and dies in light! -/// Only BODYTYPE_SHADOW limbs will heal, but limbs without the flag (and with the effect) still contribute to healing of the other limbs -/datum/status_effect/grouped/bodypart_effect/nyxosynthesis - tick_interval = 1 SECONDS - id = "nyxosynthesis" - -/datum/status_effect/grouped/bodypart_effect/nyxosynthesis/tick(seconds_between_ticks) - var/turf/owner_turf = owner.loc - if(!isturf(owner_turf)) - return - - var/light_amount = owner_turf.get_lumcount() - var/bodypart_coefficient = GET_BODYPART_COEFFICIENT(bodyparts) - - if (light_amount >= SHADOW_SPECIES_LIGHT_THRESHOLD) - owner.take_overall_damage(brute = 1 * bodypart_coefficient, burn = 1 * bodypart_coefficient, required_bodytype = BODYTYPE_SHADOW) - return - - // Heal in the dark - owner.heal_overall_damage(brute = 0.5 * bodypart_coefficient, burn = 0.5 * bodypart_coefficient, required_bodytype = BODYTYPE_SHADOW) - - var/mob/living/carbon/carbon_owner = owner - if(carbon_owner.dna.species.id != SPECIES_NIGHTMARE) // Somewhat awkward, but let's not duplicate the alerts - // This only appears when in shadows, don't move to bodypart effect so people with nightvision can still tell if they're in light or not - owner.apply_status_effect(/datum/status_effect/shadow) - -/// Causes the owner to spontaneously combust when exposed to oxygen -/datum/status_effect/grouped/bodypart_effect/plasma_based - tick_interval = 1 SECONDS - id = "plasmaman_limbs" - /// How many fire stacks do we apply per second? - /// Default value is 0.25 / 6 (default amount of limbs) - var/fire_stacks_per_second = 0.0416 - /// How many fire stacks are removed per second when we're exposed to hypernoblium - /// Default value is 10 / 6 (default amount of limbs) - var/fire_stacks_loss = 1.66 - -/datum/status_effect/grouped/bodypart_effect/plasma_based/tick(seconds_between_ticks) - if (!ishuman(owner) || !owner.loc) // No xenos, sorry - return - - var/mob/living/carbon/human/as_human = owner - if (HAS_TRAIT(owner, TRAIT_STASIS) || as_human.is_atmos_sealed(additional_flags = PLASMAMAN_PREVENT_IGNITION, check_hands = TRUE)) - if (!owner.on_fire) - REMOVE_TRAIT(owner, TRAIT_IGNORE_FIRE_PROTECTION, type) - return - - var/datum/gas_mixture/environment = owner.loc.return_air() - if (!environment?.total_moles()) - if (!owner.on_fire) - REMOVE_TRAIT(owner, TRAIT_IGNORE_FIRE_PROTECTION, type) - return - - if(environment.moles[/datum/gas/hypernoblium] >= 5) - if(owner.on_fire && owner.fire_stacks > 0) - owner.adjust_fire_stacks(-fire_stacks_loss * seconds_between_ticks * length(bodyparts)) - else - REMOVE_TRAIT(owner, TRAIT_IGNORE_FIRE_PROTECTION, type) - return - - if (HAS_TRAIT(owner, TRAIT_NOFIRE)) - REMOVE_TRAIT(owner, TRAIT_IGNORE_FIRE_PROTECTION, type) - return - - ADD_TRAIT(owner, TRAIT_IGNORE_FIRE_PROTECTION, type) - - if(environment.moles[/datum/gas/oxygen] < 1) //Same threshhold that extinguishes fire - return - - owner.adjust_fire_stacks(fire_stacks_per_second * seconds_between_ticks * length(bodyparts)) - if(owner.ignite_mob()) - owner.visible_message(span_danger("[owner]'s body reacts with the atmosphere and bursts into flames!"), span_userdanger("Your body reacts with the atmosphere and bursts into flame!")) - -#undef GET_BODYPART_COEFFICIENT -#undef IS_FULL_BODY diff --git a/code/modules/surgery/bodyparts/bodypart_effects/bodypart_effect.dm b/code/modules/surgery/bodyparts/bodypart_effects/bodypart_effect.dm new file mode 100644 index 000000000000..17b6a66b0ad5 --- /dev/null +++ b/code/modules/surgery/bodyparts/bodypart_effects/bodypart_effect.dm @@ -0,0 +1,75 @@ +/// Effects added to a carbon focused on the bodyparts itself, such as adding a photosynthesis component that +/datum/status_effect/grouped/bodypart_effect + id = "bodypart_effect" + duration = STATUS_EFFECT_PERMANENT + processing_speed = STATUS_EFFECT_NORMAL_PROCESS + + /// List of bodyparts contributing to this effect + var/list/bodyparts = list() + /// Minimum amount of bodyparts required for on_apply to be called. When tipping below, on_remove is called + var/minimum_bodyparts = 1 + /// Are we currently active? We don't NEED to track it, but it's a lot easier and faster if we do + var/is_active = FALSE + +/datum/status_effect/grouped/bodypart_effect/source_added(source, obj/item/bodypart/bodypart, special, lazy) + add_bodypart(bodypart, special, lazy) + +/// Merge a bodypart into the effect +/datum/status_effect/grouped/bodypart_effect/proc/add_bodypart(obj/item/bodypart/bodypart, special, lazy) + RegisterSignal(bodypart, COMSIG_BODYPART_REMOVED, PROC_REF(on_bodypart_removed)) + RegisterSignal(bodypart, COMSIG_QDELETING, PROC_REF(on_bodypart_destroyed)) + + bodyparts.Add(bodypart) + + if(!is_active && bodyparts.len >= minimum_bodyparts) + activate() + +/// Remove a bodypart from the effect. Deleting = TRUE is used during clean-up phase +/datum/status_effect/grouped/bodypart_effect/proc/remove_bodypart(mob/living/carbon/old_owner, obj/item/bodypart/bodypart, deleting) + UnregisterSignal(bodypart, list(COMSIG_BODYPART_REMOVED, COMSIG_QDELETING)) + + bodyparts.Remove(bodypart) + + if(deleting) + return + + if(bodyparts.len == 0 && !QDELETED(old_owner)) + qdel(src) + + else if(is_active && bodyparts.len < minimum_bodyparts) + deactivate() + +/// Signal called when a bodypart is removed +/datum/status_effect/grouped/bodypart_effect/proc/on_bodypart_removed(obj/item/bodypart/bodypart, special) + SIGNAL_HANDLER + + remove_bodypart(owner, bodypart) + +/// Signal called when a bodypart is destroyed. Destruction of a bodypart doesn't necessarily drop it +/datum/status_effect/grouped/bodypart_effect/proc/on_bodypart_destroyed(obj/item/bodypart/bodypart) + SIGNAL_HANDLER + + remove_bodypart(bodypart.owner, bodypart) + +/// Activate some sort of effect when a threshold is reached +/datum/status_effect/grouped/bodypart_effect/proc/activate() + PROTECTED_PROC(TRUE) + SHOULD_CALL_PARENT(TRUE) + + is_active = TRUE + // Maybe add support for different stages? AKA add a stronger effect when there are more limbs + +/// Remove an effect whenever a threshold is no longer reached +/datum/status_effect/grouped/bodypart_effect/proc/deactivate() + PROTECTED_PROC(TRUE) + SHOULD_CALL_PARENT(TRUE) + + is_active = FALSE + +/// Clean up all references and self-destruct +/datum/status_effect/grouped/bodypart_effect/Destroy() + deactivate() + for(var/obj/item/bodypart/bodypart as anything in bodyparts) + remove_bodypart(bodypart.owner, bodypart, deleting = TRUE) + + return ..() diff --git a/code/modules/surgery/bodyparts/bodypart_effects/ethereal_glow.dm b/code/modules/surgery/bodyparts/bodypart_effects/ethereal_glow.dm new file mode 100644 index 000000000000..e560a6e748c1 --- /dev/null +++ b/code/modules/surgery/bodyparts/bodypart_effects/ethereal_glow.dm @@ -0,0 +1,216 @@ +/// Causes the owner to glow based on their bodypart/mutant color, turns them into a disco ball when emagged +/datum/status_effect/grouped/bodypart_effect/ethereal_glow + id = "ethereal_glow" + tick_interval = STATUS_EFFECT_NO_TICK + /// Have we been hit by a distruptor blast? + var/disrupted = FALSE + /// Are we disco balling from being emagged? + var/emageffect = FALSE + /// Current multiplier for light power + var/powermult = 1 + /// Current multiplier for light range + var/rangemult = 1 + /// Are we flickering from something? + var/flickering = FALSE + /// Are we flickered off right now? + var/currently_flickered = FALSE + /// Current color, overriden when emagged + var/current_color = COLOR_WHITE + /// Dummy lighting object inside the mob used for the glow + var/obj/effect/dummy/lighting_obj/ethereal_light + +/datum/status_effect/grouped/bodypart_effect/ethereal_glow/on_apply(source, obj/item/bodypart/bodypart, special, lazy) + if (!ishuman(owner)) + return FALSE + var/mob/living/carbon/human/ethereal = owner + RegisterSignal(ethereal, COMSIG_ATOM_EMAG_ACT, PROC_REF(on_emag_act)) + RegisterSignal(ethereal, COMSIG_ATOM_EMP_ACT, PROC_REF(on_emp_act)) + RegisterSignal(ethereal, COMSIG_ATOM_SABOTEUR_ACT, PROC_REF(hit_by_saboteur)) + RegisterSignal(ethereal, COMSIG_LIGHT_EATER_ACT, PROC_REF(on_light_eater)) + RegisterSignal(ethereal, COMSIG_LIVING_HEALTH_UPDATE, PROC_REF(refresh_light_color)) + ethereal_light = ethereal.mob_light(light_type = /obj/effect/dummy/lighting_obj/moblight/species) + if (!lazy) + refresh_light_color() + return TRUE + +/datum/status_effect/grouped/bodypart_effect/ethereal_glow/add_bodypart(obj/item/bodypart/bodypart, special, lazy) + . = ..() + if (!lazy) + refresh_light_color() + +/datum/status_effect/grouped/bodypart_effect/ethereal_glow/on_remove() + UnregisterSignal(owner, list( + COMSIG_ATOM_EMAG_ACT, + COMSIG_ATOM_EMP_ACT, + COMSIG_ATOM_SABOTEUR_ACT, + COMSIG_LIGHT_EATER_ACT, + COMSIG_LIVING_HEALTH_UPDATE, + )) + QDEL_NULL(ethereal_light) + +/datum/status_effect/grouped/bodypart_effect/ethereal_glow/proc/refresh_light_color() + SIGNAL_HANDLER + + if(isnull(ethereal_light) || !ishuman(owner)) + return + + var/mob/living/carbon/human/ethereal = owner + // Requires a crystal core or emissive blood to actually glow + var/can_glow = istype(owner.get_organ_slot(ORGAN_SLOT_HEART), /obj/item/organ/heart/ethereal) || owner.get_bloodtype()?.get_emissive_alpha() + if(ethereal.stat == DEAD || disrupted || !can_glow) + ethereal_light.set_light_on(FALSE) + var/has_head = FALSE + for(var/obj/item/bodypart/part as anything in bodyparts) + part.add_color_override(COLOR_GRAY, LIMB_COLOR_ETHEREAL) + if (istype(part, /obj/item/bodypart/head)) + has_head = TRUE + if (has_head) + ethereal.set_facial_haircolor(COLOR_GRAY, override = TRUE, update = FALSE) + ethereal.set_haircolor(COLOR_GRAY, override = TRUE, update = FALSE) + ethereal.update_body() + return + + var/healthmod = 1 + if (ethereal.health >= 0) + healthmod = 0.25 + ethereal.health / 100 * 0.75 + else + healthmod = (100 - ethereal.health) / 100 * 0.25 + + var/used_color = ethereal.dna.features[FEATURE_MUTANT_COLOR] + // If we don't have a mutant color but do have an ethereal heart (humans with transplanted limbs & organs), use the heart's color + if(!HAS_TRAIT(owner, TRAIT_MUTANT_COLORS) && istype(owner.get_organ_slot(ORGAN_SLOT_HEART), /obj/item/organ/heart/ethereal)) + var/obj/item/organ/heart/ethereal/heart = owner.get_organ_slot(ORGAN_SLOT_HEART) + used_color = heart.ethereal_color + + if(!emageffect) + var/static/list/skin_color = rgb2num("#eda495") + var/list/colors = rgb2num(used_color) + var/list/built_color = list() + for(var/i in 1 to 3) + built_color += skin_color[i] + ((colors[i] - skin_color[i]) * healthmod) + current_color = rgb(built_color[1], built_color[2], built_color[3]) + + ethereal_light.set_light_range_power_color((1 + (2 * healthmod)) * rangemult * GET_BODYPART_COEFFICIENT(bodyparts), (1 + (1 * healthmod) * powermult) * GET_BODYPART_COEFFICIENT(bodyparts), current_color) + + if(flickering) + if(currently_flickered) + ethereal_light.set_light_on(FALSE) + else + ethereal_light.set_light_on(TRUE) + else + currently_flickered = FALSE + ethereal_light.set_light_on(TRUE) + + var/has_head = FALSE + for(var/obj/item/bodypart/part as anything in bodyparts) + part.add_color_override(current_color, LIMB_COLOR_ETHEREAL) + if (istype(part, /obj/item/bodypart/head)) + has_head = TRUE + if (has_head) + ethereal.set_facial_haircolor(current_color, override = TRUE, update = FALSE) + ethereal.set_haircolor(current_color, override = TRUE, update = FALSE) + ethereal.update_body() + +/datum/status_effect/grouped/bodypart_effect/ethereal_glow/proc/on_emp_act(mob/living/carbon/human/source, severity, protection) + SIGNAL_HANDLER + if(protection & EMP_PROTECT_SELF) + return + disrupted = TRUE + refresh_light_color() + to_chat(source, span_notice("You feel the light of your body leave you.")) + switch(severity) + if(EMP_LIGHT) + addtimer(CALLBACK(src, PROC_REF(stop_emp), source), 10 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) // We're out for 10 seconds + if(EMP_HEAVY) + addtimer(CALLBACK(src, PROC_REF(stop_emp), source), 20 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) // We're out for 20 seconds + +/datum/status_effect/grouped/bodypart_effect/ethereal_glow/proc/hit_by_saboteur(mob/living/carbon/human/source, disrupt_duration) + disrupted = TRUE + refresh_light_color() + to_chat(source, span_warning("Something inside of you crackles in a bad way.")) + source.take_bodypart_damage(burn = 3, wound_bonus = CANT_WOUND) + addtimer(CALLBACK(src, PROC_REF(stop_emp), source), disrupt_duration, TIMER_UNIQUE|TIMER_OVERRIDE) + return TRUE + +/datum/status_effect/grouped/bodypart_effect/ethereal_glow/proc/on_emag_act(mob/living/carbon/human/source, mob/user) + SIGNAL_HANDLER + if(emageffect) + return FALSE + emageffect = TRUE + if(user) + to_chat(user, span_notice("You tap [source] on the back with your card.")) + source.visible_message(span_danger("[source] starts flickering in an array of colors!")) + handle_emag() + // Disco mode for 2 minutes! This doesn't affect the ethereal at all besides either annoying some players, or making someone look badass. + addtimer(CALLBACK(src, PROC_REF(stop_emag), source), 2 MINUTES) + return TRUE + +/// Special handling for getting hit with a light eater +/datum/status_effect/grouped/bodypart_effect/ethereal_glow/proc/on_light_eater(mob/living/carbon/human/source, datum/light_eater) + SIGNAL_HANDLER + source.emp_act(EMP_LIGHT) + return COMPONENT_BLOCK_LIGHT_EATER + +/datum/status_effect/grouped/bodypart_effect/ethereal_glow/proc/stop_emp(mob/living/carbon/human/ethereal) + disrupted = FALSE + refresh_light_color() + to_chat(ethereal, span_notice("You feel more energized as your shine comes back.")) + +/datum/status_effect/grouped/bodypart_effect/ethereal_glow/proc/handle_emag(mob/living/carbon/human/ethereal) + if(!emageffect) + return + current_color = GLOB.color_list_ethereal[pick(GLOB.color_list_ethereal)] + refresh_light_color() + addtimer(CALLBACK(src, PROC_REF(handle_emag), ethereal), 0.5 SECONDS) + +/datum/status_effect/grouped/bodypart_effect/ethereal_glow/proc/stop_emag(mob/living/carbon/human/ethereal) + emageffect = FALSE + refresh_light_color() + ethereal.visible_message(span_danger("[ethereal] stops flickering and goes back to their normal state!")) + +/datum/status_effect/grouped/bodypart_effect/ethereal_glow/proc/handle_glow_emote(power, range, flare = FALSE, duration = 5 SECONDS, flare_time = 0) + powermult = power + rangemult = range + refresh_light_color() + addtimer(CALLBACK(src, PROC_REF(stop_glow_emote), flare, flare_time), duration) + +/datum/status_effect/grouped/bodypart_effect/ethereal_glow/proc/stop_glow_emote(flare, flare_time) + if(!flare) + powermult = 1 + rangemult = 1 + refresh_light_color() + return + + var/mob/living/carbon/human/ethereal = owner + powermult = 0.5 + rangemult = 0.75 + refresh_light_color(ethereal) + start_flicker(ethereal, duration = 1.5 SECONDS, min = 1, max = 2) + sleep(1.5 SECONDS) + powermult = 1 + rangemult = 1 + disrupted = TRUE + to_chat(ethereal, span_warning("Your shine flickers and fades.")) + addtimer(CALLBACK(src, PROC_REF(stop_emp), ethereal), flare_time, TIMER_UNIQUE|TIMER_OVERRIDE) + +/datum/status_effect/grouped/bodypart_effect/ethereal_glow/proc/handle_flicker(flickmin = 1, flickmax = 4) + if(!flickering) + currently_flickered = FALSE + refresh_light_color() + return + + if(currently_flickered) + currently_flickered = FALSE + else + currently_flickered = TRUE + refresh_light_color() + addtimer(CALLBACK(src, PROC_REF(handle_flicker)), rand(1, 4)) + +/datum/status_effect/grouped/bodypart_effect/ethereal_glow/proc/stop_flicker() + flickering = FALSE + currently_flickered = FALSE + +/datum/status_effect/grouped/bodypart_effect/ethereal_glow/proc/start_flicker(duration = 6 SECONDS, min = 1, max = 4) + flickering = TRUE + handle_flicker(min, max) + addtimer(CALLBACK(src, PROC_REF(stop_flicker)), duration) diff --git a/code/modules/surgery/bodyparts/bodypart_effects/nyxosynthesis.dm b/code/modules/surgery/bodyparts/bodypart_effects/nyxosynthesis.dm new file mode 100644 index 000000000000..3258fd3174bc --- /dev/null +++ b/code/modules/surgery/bodyparts/bodypart_effects/nyxosynthesis.dm @@ -0,0 +1,23 @@ +/// This limb heals in darkness and dies in light! +/// Only BODYTYPE_SHADOW limbs will heal, but limbs without the flag (and with the effect) still contribute to healing of the other limbs +/datum/status_effect/grouped/bodypart_effect/nyxosynthesis + tick_interval = 1 SECONDS + id = "nyxosynthesis" + +/datum/status_effect/grouped/bodypart_effect/nyxosynthesis/tick(seconds_between_ticks) + var/turf/owner_turf = owner.loc + if(!isturf(owner_turf)) + return + + var/bodypart_coefficient = GET_BODYPART_COEFFICIENT(bodyparts) + if (!owner_turf.check_lumcount_below(SHADOW_SPECIES_LIGHT_THRESHOLD)) + owner.take_overall_damage(brute = 1 * bodypart_coefficient, burn = 1 * bodypart_coefficient, required_bodytype = BODYTYPE_SHADOW) + return + + // Heal in the dark + owner.heal_overall_damage(brute = 0.5 * bodypart_coefficient, burn = 0.5 * bodypart_coefficient, required_bodytype = BODYTYPE_SHADOW) + + var/mob/living/carbon/carbon_owner = owner + if(carbon_owner.dna.species.id != SPECIES_NIGHTMARE) // Somewhat awkward, but let's not duplicate the alerts + // This only appears when in shadows, don't move to bodypart effect so people with nightvision can still tell if they're in light or not + owner.apply_status_effect(/datum/status_effect/shadow) diff --git a/code/modules/surgery/bodyparts/bodypart_effects/photosynthesis.dm b/code/modules/surgery/bodyparts/bodypart_effects/photosynthesis.dm new file mode 100644 index 000000000000..c8839b450639 --- /dev/null +++ b/code/modules/surgery/bodyparts/bodypart_effects/photosynthesis.dm @@ -0,0 +1,32 @@ +/// This limb regens in light! Only BODYTYPE_PLANT limbs will heal, but limbs without the flag (and with the effect) still contribute to healing of the other limbs +/datum/status_effect/grouped/bodypart_effect/photosynthesis + processing_speed = STATUS_EFFECT_NORMAL_PROCESS + tick_interval = 1 SECONDS + id = "photosynthesis" + +/datum/status_effect/grouped/bodypart_effect/photosynthesis/tick(seconds_between_ticks) + var/light_amount = 0 // How much light there is in the place, affects receiving nutrition and healing + var/bodypart_coefficient = GET_BODYPART_COEFFICIENT(bodyparts) + + if(!isturf(owner.loc)) // There's considered to be no light inside of objects + if(owner.nutrition < NUTRITION_LEVEL_STARVING + 50) + owner.take_overall_damage(brute = 1 * bodypart_coefficient, required_bodytype = BODYTYPE_PLANT) + return + + var/turf/turf_loc = owner.loc + light_amount = min(1, turf_loc.get_lumcount()) - 0.5 + + if(owner.nutrition < NUTRITION_LEVEL_ALMOST_FULL) + owner.adjust_nutrition(5 * light_amount * bodypart_coefficient) + + if(light_amount > 0.2) // If there's enough light, heal + var/need_mob_update = FALSE + need_mob_update += owner.heal_overall_damage(brute = 0.5 * bodypart_coefficient, \ + burn = 0.5 * bodypart_coefficient, updating_health = FALSE, required_bodytype = BODYTYPE_PLANT) + need_mob_update += owner.adjust_tox_loss(-0.5 * bodypart_coefficient, updating_health = FALSE) + need_mob_update += owner.adjust_oxy_loss(-0.5 * bodypart_coefficient, updating_health = FALSE) + if(need_mob_update) + owner.updatehealth() + + if(owner.nutrition < NUTRITION_LEVEL_STARVING + 50) + owner.take_overall_damage(brute = 1 * bodypart_coefficient, required_bodytype = BODYTYPE_PLANT) diff --git a/code/modules/surgery/bodyparts/bodypart_effects/plasma_based.dm b/code/modules/surgery/bodyparts/bodypart_effects/plasma_based.dm new file mode 100644 index 000000000000..dfcff119b6cc --- /dev/null +++ b/code/modules/surgery/bodyparts/bodypart_effects/plasma_based.dm @@ -0,0 +1,46 @@ +/// Causes the owner to spontaneously combust when exposed to oxygen +/datum/status_effect/grouped/bodypart_effect/plasma_based + tick_interval = 1 SECONDS + id = "plasmaman_limbs" + /// How many fire stacks do we apply per second? + /// Default value is 0.25 / 6 (default amount of limbs) + var/fire_stacks_per_second = 0.0416 + /// How many fire stacks are removed per second when we're exposed to hypernoblium + /// Default value is 10 / 6 (default amount of limbs) + var/fire_stacks_loss = 1.66 + +/datum/status_effect/grouped/bodypart_effect/plasma_based/tick(seconds_between_ticks) + if (!ishuman(owner) || !owner.loc) // No xenos, sorry + return + + var/mob/living/carbon/human/as_human = owner + if (HAS_TRAIT(owner, TRAIT_STASIS) || as_human.is_atmos_sealed(additional_flags = PLASMAMAN_PREVENT_IGNITION, check_hands = TRUE)) + if (!owner.on_fire) + REMOVE_TRAIT(owner, TRAIT_IGNORE_FIRE_PROTECTION, type) + return + + var/datum/gas_mixture/environment = owner.loc.return_air() + if (!environment?.total_moles()) + if (!owner.on_fire) + REMOVE_TRAIT(owner, TRAIT_IGNORE_FIRE_PROTECTION, type) + return + + if(environment.moles[/datum/gas/hypernoblium] >= 5) + if(owner.on_fire && owner.fire_stacks > 0) + owner.adjust_fire_stacks(-fire_stacks_loss * seconds_between_ticks * length(bodyparts)) + else + REMOVE_TRAIT(owner, TRAIT_IGNORE_FIRE_PROTECTION, type) + return + + if (HAS_TRAIT(owner, TRAIT_NOFIRE)) + REMOVE_TRAIT(owner, TRAIT_IGNORE_FIRE_PROTECTION, type) + return + + ADD_TRAIT(owner, TRAIT_IGNORE_FIRE_PROTECTION, type) + + if(environment.moles[/datum/gas/oxygen] < 1) //Same threshhold that extinguishes fire + return + + owner.adjust_fire_stacks(fire_stacks_per_second * seconds_between_ticks * length(bodyparts)) + if(owner.ignite_mob()) + owner.visible_message(span_danger("[owner]'s body reacts with the atmosphere and bursts into flames!"), span_userdanger("Your body reacts with the atmosphere and bursts into flame!")) diff --git a/code/modules/surgery/bodyparts/default_parts.dm b/code/modules/surgery/bodyparts/default_parts.dm index 1a0a0b436f5b..7fe821a6c16f 100644 --- a/code/modules/surgery/bodyparts/default_parts.dm +++ b/code/modules/surgery/bodyparts/default_parts.dm @@ -44,16 +44,12 @@ var/mob/living/carbon/human/humie = new_owner humie.update_mob_height() -/obj/item/bodypart/chest/get_butcher_drops(force = FALSE) +/obj/item/bodypart/chest/get_butcher_drops() . = ..() - if(!isnull(butcher_drops) && !force) - return var/datum/species/species = GLOB.species_list[species_id || limb_id] - if (!species || !species.skinned_type) - return - if (!islist(.)) - . = list() - .[species.skinned_type] = 1 + if (!isnull(species?.skinned_type)) + . ||= list() + .[species.skinned_type] = 1 /obj/item/bodypart/chest/grind_results() return null diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index 1a475b336bbd..96f352a6fdbf 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -266,7 +266,7 @@ SEND_SIGNAL(new_limb_owner, COMSIG_CARBON_ATTACH_LIMB, src, special, lazy) SEND_SIGNAL(src, COMSIG_BODYPART_ATTACHED, new_limb_owner, special, lazy) - new_limb_owner.add_bodypart(src) + new_limb_owner.add_bodypart(src, special, lazy) if(!lazy) LAZYREMOVE(new_limb_owner.body_zone_dismembered_by, body_zone) diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm index 2b7e84f49fe0..77e402444ac8 100644 --- a/code/modules/surgery/bodyparts/head.dm +++ b/code/modules/surgery/bodyparts/head.dm @@ -84,7 +84,7 @@ var/datum/worn_feature_offset/worn_face_offset /// Can this head be dismembered normally? - VAR_PROTECTED/can_dismember = FALSE + var/can_dismember = FALSE /obj/item/bodypart/head/Initialize(mapload) . = ..() @@ -99,15 +99,12 @@ QDEL_NULL(worn_face_offset) return ..() -/obj/item/bodypart/head/get_butcher_drops(force = FALSE) - if(!isnull(butcher_drops) && !force) - return butcher_drops - if (butcher_drop_cache[type] && !force) - return butcher_drop_cache[type] +/obj/item/bodypart/head/get_butcher_drops() + . = ..() var/datum/species/species = GLOB.species_list[species_id || limb_id] - if (!species || !species.skinned_type) - return null - return list(species.skinned_type = 1) + if (!isnull(species?.skinned_type)) + . ||= list() + .[species.skinned_type] = 1 /obj/item/bodypart/head/animate_atom_living(mob/living/owner) var/mob/living/basic/animated = ..() @@ -177,7 +174,7 @@ . = ..() if(isnull(owner)) return - if(is_husked) + if(is_husked && is_husked != HUSKED_ZOMBIE) ADD_TRAIT(src, TRAIT_DISFIGURED, HUSK_TRAIT) else REMOVE_TRAIT(src, TRAIT_DISFIGURED, HUSK_TRAIT) diff --git a/code/modules/surgery/bodyparts/head_hair_and_lips.dm b/code/modules/surgery/bodyparts/head_hair_and_lips.dm index 51d42e0bd382..116a34b65947 100644 --- a/code/modules/surgery/bodyparts/head_hair_and_lips.dm +++ b/code/modules/surgery/bodyparts/head_hair_and_lips.dm @@ -26,7 +26,7 @@ if(target_species.fixed_mut_color) species_color = target_species.fixed_mut_color else - species_color = target.dna.features["mcolor"] + species_color = target.dna.features[FEATURE_MUTANT_COLOR] else skin_tone = "" species_color = "" @@ -46,17 +46,17 @@ /// Returns a list of all hair/facial hair related overlays, or alternatively the debrained overlay if applicable /obj/item/bodypart/head/proc/get_hair_overlays(dropped) . = list() - var/hair_hidden = is_husked || is_invisible || (owner?.obscured_slots & HIDEHAIR) - var/facial_hair_hidden = is_husked || is_invisible || (owner?.obscured_slots & HIDEFACIALHAIR) + if(is_invisible) + return . - if(!facial_hair_hidden && (head_flags & HEAD_FACIAL_HAIR)) + if(!is_husked && !(owner?.obscured_slots & HIDEFACIALHAIR) && (head_flags & HEAD_FACIAL_HAIR)) . += get_base_facial_hair_overlays(dropped) - if(!hair_hidden) + if(is_husked != HUSKED_BURN && !(owner?.obscured_slots & HIDEHAIR)) var/obj/item/organ/brain/brain = locate() in src if(QDELETED(brain) && (head_flags & HEAD_DEBRAIN)) . += get_debrain_overlay(dropped) - else if(head_flags & HEAD_HAIR) + else if(!is_husked && (head_flags & HEAD_HAIR)) . += get_base_hair_overlays(dropped) return . @@ -188,14 +188,17 @@ /obj/item/bodypart/head/proc/get_eye_overlays(dropped) . = list() + if(is_husked == HUSKED_BURN) + return . + var/obj/item/organ/eyes/eyes = locate() in src if(QDELETED(eyes)) if(head_flags & HEAD_EYEHOLES) . += get_eyeless_overlay(dropped) - return . - if(head_flags & HEAD_EYESPRITES) - . += eyes.generate_body_overlay(src) + else + if(head_flags & HEAD_EYESPRITES) + . += eyes.generate_body_overlay(src) return . diff --git a/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm index 954eb52ae326..f6751865a6fd 100644 --- a/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm @@ -8,6 +8,7 @@ unarmed_miss_sound = 'sound/items/weapons/etherealmiss.ogg' brute_modifier = 1.25 //ethereal are weak to brute damage head_flags = HEAD_HAIR|HEAD_FACIAL_HAIR|HEAD_EYESPRITES|HEAD_EYEHOLES|HEAD_DEBRAIN + bodypart_effects = list(/datum/status_effect/grouped/bodypart_effect/ethereal_glow) /obj/item/bodypart/chest/ethereal icon_greyscale = 'icons/mob/human/species/ethereal/bodyparts.dmi' @@ -17,6 +18,7 @@ brute_modifier = 1.25 //ethereal are weak to brute damages wing_types = null bodypart_traits = list(TRAIT_NO_UNDERWEAR) + bodypart_effects = list(/datum/status_effect/grouped/bodypart_effect/ethereal_glow) /obj/item/bodypart/arm/left/ethereal icon_greyscale = 'icons/mob/human/species/ethereal/bodyparts.dmi' @@ -30,6 +32,7 @@ unarmed_attack_sound = 'sound/items/weapons/etherealhit.ogg' unarmed_miss_sound = 'sound/items/weapons/etherealmiss.ogg' brute_modifier = 1.25 //ethereal are weak to brute damage + bodypart_effects = list(/datum/status_effect/grouped/bodypart_effect/ethereal_glow) /obj/item/bodypart/arm/right/ethereal icon_greyscale = 'icons/mob/human/species/ethereal/bodyparts.dmi' @@ -43,6 +46,7 @@ unarmed_attack_sound = 'sound/items/weapons/etherealhit.ogg' unarmed_miss_sound = 'sound/items/weapons/etherealmiss.ogg' brute_modifier = 1.25 //ethereal are weak to brute damage + bodypart_effects = list(/datum/status_effect/grouped/bodypart_effect/ethereal_glow) /obj/item/bodypart/leg/left/ethereal icon_greyscale = 'icons/mob/human/species/ethereal/bodyparts.dmi' @@ -52,6 +56,7 @@ unarmed_attack_sound = 'sound/items/weapons/etherealhit.ogg' unarmed_miss_sound = 'sound/items/weapons/etherealmiss.ogg' brute_modifier = 1.25 //ethereal are weak to brute damage + bodypart_effects = list(/datum/status_effect/grouped/bodypart_effect/ethereal_glow) /obj/item/bodypart/leg/right/ethereal icon_greyscale = 'icons/mob/human/species/ethereal/bodyparts.dmi' @@ -61,6 +66,7 @@ unarmed_attack_sound = 'sound/items/weapons/etherealhit.ogg' unarmed_miss_sound = 'sound/items/weapons/etherealmiss.ogg' brute_modifier = 1.25 //ethereal are weak to brute damage + bodypart_effects = list(/datum/status_effect/grouped/bodypart_effect/ethereal_glow) /obj/item/bodypart/head/ethereal/lustrous limb_id = SPECIES_ETHEREAL_LUSTROUS diff --git a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm index 00858221c059..e90cb5a7a518 100644 --- a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm @@ -1,3 +1,5 @@ +#define LIZARD_ZOMBIE_COLOR "#508556" // slightly greyer than normal because lizard blood is green + /obj/item/bodypart/head/lizard icon_greyscale = 'icons/mob/human/species/lizard/bodyparts.dmi' limb_id = SPECIES_LIZARD @@ -5,12 +7,14 @@ head_flags = HEAD_LIPS|HEAD_EYESPRITES|HEAD_EYECOLOR|HEAD_EYEHOLES|HEAD_DEBRAIN // lizardshave many teeth teeth_count = 72 + zombie_color = LIZARD_ZOMBIE_COLOR /obj/item/bodypart/chest/lizard icon_greyscale = 'icons/mob/human/species/lizard/bodyparts.dmi' limb_id = SPECIES_LIZARD is_dimorphic = TRUE wing_types = list(/obj/item/organ/wings/functional/dragon) + zombie_color = LIZARD_ZOMBIE_COLOR /obj/item/bodypart/chest/lizard/get_butt_sprite() return icon('icons/mob/butts.dmi', BUTT_SPRITE_LIZARD) @@ -25,6 +29,7 @@ unarmed_attack_effect = ATTACK_EFFECT_CLAW unarmed_attack_sound = 'sound/items/weapons/slash.ogg' unarmed_miss_sound = 'sound/items/weapons/slashmiss.ogg' + zombie_color = LIZARD_ZOMBIE_COLOR /obj/item/bodypart/arm/right/lizard icon_greyscale = 'icons/mob/human/species/lizard/bodyparts.dmi' @@ -36,6 +41,7 @@ unarmed_attack_effect = ATTACK_EFFECT_CLAW unarmed_attack_sound = 'sound/items/weapons/slash.ogg' unarmed_miss_sound = 'sound/items/weapons/slashmiss.ogg' + zombie_color = LIZARD_ZOMBIE_COLOR /obj/item/bodypart/arm/left/lizard/ashwalker bodypart_traits = list(TRAIT_CHUNKYFINGERS) @@ -46,10 +52,12 @@ /obj/item/bodypart/leg/left/lizard icon_greyscale = 'icons/mob/human/species/lizard/bodyparts.dmi' limb_id = SPECIES_LIZARD + zombie_color = LIZARD_ZOMBIE_COLOR /obj/item/bodypart/leg/right/lizard icon_greyscale = 'icons/mob/human/species/lizard/bodyparts.dmi' limb_id = SPECIES_LIZARD + zombie_color = LIZARD_ZOMBIE_COLOR /obj/item/bodypart/leg/left/digitigrade icon_greyscale = 'icons/mob/human/species/lizard/bodyparts.dmi' @@ -58,6 +66,7 @@ bodyshape = BODYSHAPE_HUMANOID footprint_sprite = FOOTPRINT_SPRITE_CLAWS footstep_type = FOOTSTEP_MOB_CLAW + zombie_color = LIZARD_ZOMBIE_COLOR /obj/item/bodypart/leg/left/digitigrade/Initialize(mapload) . = ..() @@ -70,7 +79,10 @@ bodyshape = BODYSHAPE_HUMANOID footprint_sprite = FOOTPRINT_SPRITE_CLAWS footstep_type = FOOTSTEP_MOB_CLAW + zombie_color = LIZARD_ZOMBIE_COLOR /obj/item/bodypart/leg/right/digitigrade/Initialize(mapload) . = ..() AddComponent(/datum/component/digitigrade_limb, SPECIES_LIZARD, initial(limb_id)) + +#undef LIZARD_ZOMBIE_COLOR diff --git a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm index 56fa9fb6a265..b2883f134257 100644 --- a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm @@ -174,46 +174,6 @@ /obj/item/bodypart/leg/right/jelly/luminescent limb_id = SPECIES_LUMINESCENT -///ZOMBIE -/obj/item/bodypart/head/zombie - limb_id = SPECIES_ZOMBIE - is_dimorphic = TRUE // DARKPACK EDIT CHANGE - ORIGINAL: is_dimorphic = FALSE - should_draw_greyscale = TRUE // DARKPACK EDIT CHANGE - ORIGINAL: should_draw_grayscale = FALSE - head_flags = HEAD_EYESPRITES|HEAD_DEBRAIN - can_dismember = TRUE - -/obj/item/bodypart/chest/zombie - limb_id = SPECIES_ZOMBIE - is_dimorphic = TRUE // DARKPACK EDIT CHANGE - ORIGINAL: is_dimorphic = FALSE - should_draw_greyscale = TRUE // DARKPACK EDIT CHANGE - ORIGINAL: should_draw_grayscale = FALSE - wing_types = null - -/obj/item/bodypart/arm/left/zombie - limb_id = SPECIES_ZOMBIE - should_draw_greyscale = TRUE // DARKPACK EDIT CHANGE - ORIGINAL: should_draw_grayscale = FALSE - -/obj/item/bodypart/arm/right/zombie - limb_id = SPECIES_ZOMBIE - should_draw_greyscale = TRUE // DARKPACK EDIT CHANGE - ORIGINAL: should_draw_grayscale = FALSE - -/obj/item/bodypart/leg/left/zombie - limb_id = SPECIES_ZOMBIE - should_draw_greyscale = TRUE // DARKPACK EDIT CHANGE - ORIGINAL: should_draw_grayscale = FALSE - -/obj/item/bodypart/leg/right/zombie - limb_id = SPECIES_ZOMBIE - should_draw_greyscale = TRUE // DARKPACK EDIT CHANGE - ORIGINAL: should_draw_grayscale = FALSE - -/obj/item/bodypart/leg/left/zombie/infectious - limb_id = SPECIES_ZOMBIE - should_draw_greyscale = TRUE // DARKPACK EDIT CHANGE - ORIGINAL: should_draw_grayscale = FALSE - speed_modifier = 0.5 //braaaaains - -/obj/item/bodypart/leg/right/zombie/infectious - limb_id = SPECIES_ZOMBIE - should_draw_greyscale = TRUE // DARKPACK EDIT CHANGE - ORIGINAL: should_draw_grayscale = FALSE - speed_modifier = 0.5 //braaaaains - ///PODPEOPLE /obj/item/bodypart/head/pod limb_id = SPECIES_PODPERSON diff --git a/code/modules/surgery/operations/_basic_surgery_state.dm b/code/modules/surgery/operations/_basic_surgery_state.dm index 196062c381a1..ab915a5e88cf 100644 --- a/code/modules/surgery/operations/_basic_surgery_state.dm +++ b/code/modules/surgery/operations/_basic_surgery_state.dm @@ -18,7 +18,7 @@ if(owner.has_limbs) stack_trace("Applied a basic surgery state to [owner], which has limbs. This status effect is intended for limbless mobs.") -/datum/status_effect/basic_surgery_state/get_examine_text() +/datum/status_effect/basic_surgery_state/get_examine_text(mob/examiner) if(HAS_SURGERY_STATE(surgery_state, SURGERY_SKIN_OPEN)) return "[owner.p_Their()] skin is open[HAS_SURGERY_STATE(surgery_state, SURGERY_BONE_SAWED) ? " and bones are sawed opened" : ""]." // other states are not yet supported diff --git a/code/modules/surgery/operations/_operation.dm b/code/modules/surgery/operations/_operation.dm index 9f27adc7f2fa..26396150903f 100644 --- a/code/modules/surgery/operations/_operation.dm +++ b/code/modules/surgery/operations/_operation.dm @@ -523,7 +523,7 @@ GLOBAL_DATUM_INIT(operations, /datum/operation_holder, new) return 0 var/obj/item/realtool = tool - return (realtool.toolspeed) * (implements[realtool.tool_behaviour] || is_type_in_list(realtool, implements, zebra = TRUE) || 0) + return (realtool.toolspeed) * (implements[realtool.tool_behaviour] || is_type_in_list(realtool, implements, zebra = TRUE, return_first_match = TRUE) || 0) /** * Return a radial slice, a list of radial slices, or an assoc list of radial slice to operation info diff --git a/code/modules/surgery/operations/operation_dissection.dm b/code/modules/surgery/operations/operation_dissection.dm index 4fbb57b0ce5b..409e8c6134dc 100644 --- a/code/modules/surgery/operations/operation_dissection.dm +++ b/code/modules/surgery/operations/operation_dissection.dm @@ -77,7 +77,7 @@ reward /= 5 else if(isabductor(human_target)) reward *= 4 - else if(isgolem(human_target) || iszombie(human_target)) + else if(isgolem(human_target) || human_target.has_status_effect(/datum/status_effect/zombie)) reward *= 3 else if(isjellyperson(human_target) || ispodperson(human_target)) reward *= 2 diff --git a/code/modules/surgery/operations/operation_lipo.dm b/code/modules/surgery/operations/operation_lipo.dm index f876c744412b..39599e66e2b7 100644 --- a/code/modules/surgery/operations/operation_lipo.dm +++ b/code/modules/surgery/operations/operation_lipo.dm @@ -74,7 +74,7 @@ return var/typeofmeat = null - for(var/meat_path in limb.butcher_drops) + for(var/meat_path in limb.get_butcher_drops()) if(ispath(meat_path, /obj/item/food/meat)) typeofmeat = meat_path break diff --git a/code/modules/surgery/operations/operation_organ_manip.dm b/code/modules/surgery/operations/operation_organ_manip.dm index de04ddfd893e..ad92d9a91d6b 100644 --- a/code/modules/surgery/operations/operation_organ_manip.dm +++ b/code/modules/surgery/operations/operation_organ_manip.dm @@ -21,6 +21,8 @@ /// Implements used to insert organs var/list/insert_implements = list( /obj/item/organ = 1, + /obj/item/food = 2, + /obj/item/grown = 2, ) /// Implements used to remove organs var/list/remove_implements = list( @@ -28,6 +30,15 @@ TOOL_CROWBAR = 1.8, /obj/item/kitchen/fork = 2.85, ) + /// List of organ typepaths we can instantiate as fake dummy organs for insertion + var/list/random_item_organ_pool = list( + /obj/item/organ/appendix, + /obj/item/organ/brain, + /obj/item/organ/heart, + /obj/item/organ/liver, + /obj/item/organ/lungs, + /obj/item/organ/stomach, + ) /datum/surgery_operation/limb/organ_manipulation/New() . = ..() @@ -81,7 +92,28 @@ return length(get_removable_organs(limb, operated_zone)) > 0 /// Check if inserting an organ is possible -/datum/surgery_operation/limb/organ_manipulation/proc/is_insert_available(obj/item/bodypart/limb, obj/item/organ/organ, operated_zone) +/datum/surgery_operation/limb/organ_manipulation/proc/is_insert_available(obj/item/bodypart/limb, obj/item/tool, operated_zone) + // Handling the case of arbitrary items as organs + if(!isorgan(tool)) + if(!LAZYLEN(random_item_organ_pool)) + return FALSE + if(tool.w_class >= WEIGHT_CLASS_NORMAL) + return FALSE + if(tool.item_flags & (ABSTRACT|DROPDEL|HAND_ITEM)) + return FALSE + if(limb.body_zone != deprecise_zone(operated_zone)) + return FALSE + // Iterate over the organs we can have insert as dummy organs and check if any are applicable here + var/list/organ_pool = LAZYCOPY(random_item_organ_pool) + for(var/obj/item/organ/option as anything in organ_pool) + if(option::zone != operated_zone || (locate(option) in limb)) + LAZYREMOVE(organ_pool, option) + continue + + return LAZYLEN(organ_pool) > 0 + + // Normal organ insertion handling + var/obj/item/organ/organ = tool if(!organ_check(limb, organ) || (organ.organ_flags & ORGAN_UNUSABLE)) return FALSE @@ -94,29 +126,34 @@ return TRUE +/datum/surgery_operation/limb/organ_manipulation/proc/is_inserting(obj/item/tool) + return is_type_in_list(tool, insert_implements) + /datum/surgery_operation/limb/organ_manipulation/snowflake_check_availability(obj/item/bodypart/limb, mob/living/surgeon, obj/item/tool, operated_zone) - return isorgan(tool) ? is_insert_available(limb, tool, operated_zone) : is_remove_available(limb, operated_zone) + return is_inserting(tool) ? is_insert_available(limb, tool, operated_zone) : is_remove_available(limb, operated_zone) /datum/surgery_operation/limb/organ_manipulation/get_radial_options(obj/item/bodypart/limb, obj/item/tool, operating_zone) - return isorgan(tool) ? get_insert_options(limb, tool, operating_zone) : get_remove_options(limb, operating_zone) + return is_inserting(tool) ? get_insert_options(limb, tool, operating_zone) : get_remove_options(limb, operating_zone) /datum/surgery_operation/limb/organ_manipulation/proc/get_remove_options(obj/item/bodypart/limb, operating_zone) var/list/options = list() for(var/obj/item/organ/organ as anything in get_removable_organs(limb, operating_zone)) - var/datum/radial_menu_choice/option = LAZYACCESS(cached_organ_manipulation_options, "[organ.type]_remove") + var/obj/item/actually_removing = (organ.organ_flags & ORGAN_FAKE) ? organ.contents[1].type : organ.type + var/remove_key = "[actually_removing.type]_remove" + var/datum/radial_menu_choice/option = LAZYACCESS(cached_organ_manipulation_options, remove_key) if(!option) option = new() option.image = image('icons/hud/surgery_radial.dmi', "base") - option.image.overlays += add_radial_overlays(organ.type) - option.name = "remove [initial(organ.name)]" - option.info = "Remove [initial(organ.name)] from the [limb.owner ? "patient" : "limb"]." - LAZYSET(cached_organ_manipulation_options, "[organ.type]_remove", option) + option.image.overlays += add_radial_overlays(actually_removing.type) + option.name = "remove [initial(actually_removing.name)]" + option.info = "Remove [initial(actually_removing.name)] from the [limb.owner ? "patient" : "limb"]." + LAZYSET(cached_organ_manipulation_options, remove_key, option) options[option] = list("[OPERATION_ACTION]" = "remove", "[OPERATION_REMOVED_ORGAN]" = organ) return options -/datum/surgery_operation/limb/organ_manipulation/proc/get_insert_options(obj/item/bodypart/limb, obj/item/organ/organ) +/datum/surgery_operation/limb/organ_manipulation/proc/get_insert_options(obj/item/bodypart/limb, obj/item/organ) var/datum/radial_menu_choice/option = LAZYACCESS(cached_organ_manipulation_options, "[organ.type]_insert") if(!option) option = new() @@ -139,24 +176,23 @@ var/obj/item/organ/organ = operation_args[OPERATION_REMOVED_ORGAN] if(QDELETED(organ) || !(organ in limb)) return FALSE + if("insert") - var/obj/item/organ/organ = tool - for(var/obj/item/organ/existing_organ in limb) - if(existing_organ.slot == organ.slot) - return FALSE + if(!is_insert_available(limb, tool, operation_args[OPERATION_TARGET_ZONE])) + return FALSE return TRUE /datum/surgery_operation/limb/organ_manipulation/on_preop(obj/item/bodypart/limb, mob/living/surgeon, obj/item/tool, list/operation_args) switch(operation_args[OPERATION_ACTION]) if("remove") - var/obj/item/organ = operation_args[OPERATION_REMOVED_ORGAN] + var/obj/item/organ/organ = operation_args[OPERATION_REMOVED_ORGAN] play_operation_sound(limb, surgeon, tool, remove_preop_sound) display_results( surgeon, limb.owner, - span_notice("You begin to remove [organ.name] from [FORMAT_LIMB_OWNER(limb)]..."), - span_notice("[surgeon] begins to remove [organ.name] from [limb.owner || limb]."), + span_notice("You begin to remove [organ] from [FORMAT_LIMB_OWNER(limb)]..."), + span_notice("[surgeon] begins to remove [organ] from [limb.owner || limb]."), span_notice("[surgeon] begins to remove something from [limb.owner || limb]."), ) display_pain(limb.owner, "You feel a tugging sensation in your [limb.plaintext_zone]!") @@ -165,8 +201,8 @@ display_results( surgeon, limb.owner, - span_notice("You begin to insert [tool.name] into [FORMAT_LIMB_OWNER(limb)]..."), - span_notice("[surgeon] begins to insert [tool.name] into [limb.owner || limb]."), + span_notice("You begin to insert [tool] into [FORMAT_LIMB_OWNER(limb)]..."), + span_notice("[surgeon] begins to insert [isorgan(tool) ? tool.name : tool] into [limb.owner || limb]."), span_notice("[surgeon] begins to insert something into [limb.owner || limb]."), ) display_pain(limb.owner, "You can feel something being placed in your [limb.plaintext_zone]!") @@ -178,7 +214,7 @@ on_success_remove_organ(limb, surgeon, operation_args[OPERATION_REMOVED_ORGAN], tool) if("insert") play_operation_sound(limb, surgeon, tool, insert_success_sound) - on_success_insert_organ(limb, surgeon, tool) + on_success_insert_organ(limb, surgeon, operation_args[OPERATION_TARGET_ZONE], tool) if(HAS_MIND_TRAIT(surgeon, TRAIT_MORBID)) surgeon.add_mood_event("morbid_abominable_surgery_success", /datum/mood_event/morbid_abominable_surgery_success) @@ -186,8 +222,8 @@ display_results( surgeon, limb.owner, - span_notice("You successfully extract [organ.name] from [FORMAT_LIMB_OWNER(limb)]."), - span_notice("[surgeon] successfully extracts [organ.name] from [FORMAT_LIMB_OWNER(limb)]!"), + span_notice("You successfully extract [organ] from [FORMAT_LIMB_OWNER(limb)]."), + span_notice("[surgeon] successfully extracts [organ] from [FORMAT_LIMB_OWNER(limb)]!"), span_notice("[surgeon] successfully extracts something from [FORMAT_LIMB_OWNER(limb)]!"), ) display_pain(limb.owner, "Your [limb.plaintext_zone] throbs with pain, you can't feel your [organ.name] anymore!") @@ -196,11 +232,27 @@ organ.Remove(limb.owner) else organ.bodypart_remove(limb) - organ.forceMove(limb.owner ? limb.owner.drop_location() : limb.drop_location()) + organ.forceMove(limb.owner?.drop_location() || limb.drop_location()) organ.on_surgical_removal(surgeon, limb, tool) -/datum/surgery_operation/limb/organ_manipulation/proc/on_success_insert_organ(obj/item/bodypart/limb, mob/living/surgeon, obj/item/organ/organ) - surgeon.temporarilyRemoveItemFromInventory(organ, TRUE) +/datum/surgery_operation/limb/organ_manipulation/proc/on_success_insert_organ(obj/item/bodypart/limb, mob/living/surgeon, operated_zone, obj/item/tool) + var/obj/item/organ/organ + if(isorgan(tool)) + organ = tool + + else + for(var/obj/item/organ/option as anything in shuffle(random_item_organ_pool)) + if(option::zone == operated_zone && !(locate(option) in limb)) + organ = new option() + surgeon.temporarilyRemoveItemFromInventory(tool, TRUE) + organ.AddComponent(/datum/component/arbitrary_item_organ, tool) + break + + if(isnull(organ)) + CRASH("Somehow failed to find a valid organ to insert (inserting: [tool || "null"])") + + if(organ.loc == surgeon) + surgeon.temporarilyRemoveItemFromInventory(organ, TRUE) organ.pre_surgical_insertion(surgeon, limb, limb.body_zone) if (limb.owner) organ.Insert(limb.owner) @@ -210,8 +262,8 @@ display_results( surgeon, limb.owner, - span_notice("You successfully insert [organ.name] into [FORMAT_LIMB_OWNER(limb)]."), - span_notice("[surgeon] successfully inserts [organ.name] into [FORMAT_LIMB_OWNER(limb)]."), + span_notice("You successfully insert [tool] into [FORMAT_LIMB_OWNER(limb)]."), + span_notice("[surgeon] successfully inserts [tool] into [FORMAT_LIMB_OWNER(limb)]."), span_notice("[surgeon] successfully inserts something into [FORMAT_LIMB_OWNER(limb)]."), ) display_pain(limb.owner, "Your [limb.plaintext_zone] throbs with pain as your new [organ.name] comes to life!") @@ -266,6 +318,7 @@ replaced_by = /datum/surgery_operation/limb/organ_manipulation/external/abductor all_surgery_states_required = SURGERY_SKIN_OPEN|SURGERY_BONE_SAWED any_surgery_states_blocked = SURGERY_VESSELS_UNCLAMPED + random_item_organ_pool = null /datum/surgery_operation/limb/organ_manipulation/external/organ_check(obj/item/bodypart/limb, obj/item/organ/organ) return (organ.organ_flags & ORGAN_EXTERNAL) diff --git a/code/modules/surgery/organs/_organ.dm b/code/modules/surgery/organs/_organ.dm index e081003f6dd1..a96dacdaf921 100644 --- a/code/modules/surgery/organs/_organ.dm +++ b/code/modules/surgery/organs/_organ.dm @@ -84,7 +84,7 @@ INITIALIZE_IMMEDIATE(/obj/item/organ) /obj/item/organ/Initialize(mapload) . = ..() - blood_dna_info = list("Unknown DNA" = get_blood_type(BLOOD_TYPE_O_PLUS)) + blood_dna_info = list("Unknown DNA" = get_blood_type(/datum/blood_type/human/o_plus)) if(organ_flags & ORGAN_EDIBLE) AddComponentFrom( SOURCE_EDIBLE_INNATE, \ diff --git a/code/modules/surgery/organs/external/wings/wings.dm b/code/modules/surgery/organs/external/wings/wings.dm index 672e13c81a2e..5ee9dd81e919 100644 --- a/code/modules/surgery/organs/external/wings/wings.dm +++ b/code/modules/surgery/organs/external/wings/wings.dm @@ -3,6 +3,7 @@ name = "wings" desc = "Spread your wings and FLLLLLLLLYYYYY!" + gender = PLURAL zone = BODY_ZONE_CHEST slot = ORGAN_SLOT_EXTERNAL_WINGS diff --git a/code/modules/surgery/organs/internal/eyes/_eyes.dm b/code/modules/surgery/organs/internal/eyes/_eyes.dm index 8011725737a9..ee197db3eeac 100644 --- a/code/modules/surgery/organs/internal/eyes/_eyes.dm +++ b/code/modules/surgery/organs/internal/eyes/_eyes.dm @@ -317,7 +317,7 @@ if(my_head.owner && !(my_head.owner.obscured_slots & HIDEEYES)) overlays += get_emissive_overlays(eye_left, eye_right, my_head) - if(my_head.head_flags & HEAD_EYECOLOR) + if((my_head.head_flags & HEAD_EYECOLOR) && my_head.is_husked != HUSKED_ZOMBIE) eye_right.color = my_head.owner?.get_right_eye_color() || eye_color_right eye_left.color = my_head.owner?.get_left_eye_color() || eye_color_left var/list/eyelids = get_eyelid_overlays(eye_left, eye_right, my_head) diff --git a/code/modules/surgery/organs/internal/heart/heart_anomalock.dm b/code/modules/surgery/organs/internal/heart/heart_anomalock.dm index decfff0a50a2..df6a012b82ec 100644 --- a/code/modules/surgery/organs/internal/heart/heart_anomalock.dm +++ b/code/modules/surgery/organs/internal/heart/heart_anomalock.dm @@ -5,7 +5,10 @@ /obj/item/organ/heart/cybernetic/anomalock name = "voltaic combat cyberheart" - desc = "A cutting-edge cyberheart, originally designed for Nanotrasen killsquad usage but later declassified for normal research. Voltaic technology allows the heart to keep the body upright in dire circumstances, alongside redirecting anomalous flux energy to fully shield the user from shocks and electro-magnetic pulses. Requires a refined Flux core as a power source." + desc = "A cutting-edge cyberheart, originally designed for Nanotrasen killsquad usage but later declassified for normal research. \ + Voltaic technology allows the heart to keep the body upright in dire circumstances, \ + alongside redirecting anomalous flux energy to fully shield the user from shocks and the heart from electro-magnetic pulses. \ + Requires a refined Flux core as a power source." icon_state = "anomalock_heart" beat_noise = "an astonishing BZZZ of immense electrical power" bleed_prevention = TRUE @@ -25,16 +28,12 @@ var/obj/item/assembly/signaler/anomaly/core ///Accepted types of anomaly cores. var/required_anomaly = /obj/item/assembly/signaler/anomaly/flux - ///If this one starts with a core in. - var/prebuilt = FALSE ///If the core is removable once socketed. var/core_removable = TRUE /obj/item/organ/heart/cybernetic/anomalock/Destroy() - if(lightning_timer) - deltimer(lightning_timer) - if(lightning_overlay) - lightning_overlay = null + deltimer(lightning_timer) + lightning_overlay = null QDEL_NULL(core) return ..() @@ -48,9 +47,7 @@ return add_lightning_overlay(30 SECONDS) playsound(organ_owner, 'sound/items/eshield_recharge.ogg', 40) - organ_owner.AddElement(/datum/element/empprotection, EMP_PROTECT_SELF|EMP_PROTECT_CONTENTS|EMP_NO_EXAMINE) RegisterSignal(organ_owner, COMSIG_MOB_STATCHANGE, PROC_REF(activate_survival_comsig)) - RegisterSignal(organ_owner, COMSIG_ATOM_EMP_ACT, PROC_REF(on_emp_act)) /obj/item/organ/heart/cybernetic/anomalock/on_mob_remove(mob/living/carbon/organ_owner, special, movement_flags) . = ..() @@ -58,31 +55,32 @@ return clear_lightning_overlay(organ_owner) UnregisterSignal(organ_owner, COMSIG_MOB_STATCHANGE) - UnregisterSignal(organ_owner, COMSIG_ATOM_EMP_ACT) - organ_owner.RemoveElement(/datum/element/empprotection, EMP_PROTECT_SELF|EMP_PROTECT_CONTENTS|EMP_NO_EXAMINE) tesla_zap(source = organ_owner, zap_range = 20, power = 2.5e5, cutoff = 1e3) - QDEL_IN(src, 0) + apply_organ_damage(INFINITY) + +/obj/item/organ/heart/cybernetic/anomalock/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(interacting_with != user || !iscarbon(user) || isnull(core)) + return NONE -/obj/item/organ/heart/cybernetic/anomalock/attack(mob/living/target_mob, mob/living/user, list/modifiers, list/attack_modifiers) - if(target_mob != user || !istype(target_mob) || !core) - return ..() + return self_implant(user) +/obj/item/organ/heart/cybernetic/anomalock/proc/self_implant(mob/living/carbon/user) if(DOING_INTERACTION(user, DOAFTER_IMPLANTING_HEART)) - return + return ITEM_INTERACT_BLOCKING user.balloon_alert(user, "this will hurt...") to_chat(user, span_userdanger("Black cyberveins tear your skin apart, pulling the heart into your ribcage. This feels unwise..")) if(!do_after(user, 5 SECONDS, interaction_key = DOAFTER_IMPLANTING_HEART)) - return ..() - playsound(target_mob, 'sound/items/weapons/slice.ogg', 100, TRUE) - user.temporarilyRemoveItemFromInventory(src, TRUE) - Insert(user) + return ITEM_INTERACT_BLOCKING + if(!user.temporarilyRemoveItemFromInventory(src)) + return ITEM_INTERACT_BLOCKING + if(!Insert(user)) + forceMove(user.drop_location()) + return ITEM_INTERACT_BLOCKING + + playsound(user, 'sound/items/weapons/slice.ogg', 100, TRUE) user.apply_damage(100, BRUTE, BODY_ZONE_CHEST) user.emote("scream") - return TRUE - -/obj/item/organ/heart/cybernetic/anomalock/proc/on_emp_act(severity) - SIGNAL_HANDLER - add_lightning_overlay(10 SECONDS) + return ITEM_INTERACT_SUCCESS /obj/item/organ/heart/cybernetic/anomalock/proc/add_lightning_overlay(time_to_last = 10 SECONDS) if(lightning_overlay) @@ -94,8 +92,7 @@ /obj/item/organ/heart/cybernetic/anomalock/proc/clear_lightning_overlay(mob/organ_owner) organ_owner?.cut_overlay(lightning_overlay) - if(lightning_timer) - deltimer(lightning_timer) + deltimer(lightning_timer) lightning_overlay = null /obj/item/organ/heart/cybernetic/anomalock/attack_self(mob/user, modifiers) @@ -103,8 +100,8 @@ if(.) return - if(core) - return attack(user, user, modifiers) + if(!isnull(core) && (self_implant(user) & ITEM_INTERACT_ANY_BLOCKER)) + return TRUE /obj/item/organ/heart/cybernetic/anomalock/on_life(seconds_per_tick) . = ..() @@ -152,38 +149,47 @@ /obj/item/organ/heart/cybernetic/anomalock/item_interaction(mob/living/user, obj/item/tool, list/modifiers) if(!istype(tool, required_anomaly)) return NONE - if(core) + if(!isnull(core)) balloon_alert(user, "core already in!") return ITEM_INTERACT_BLOCKING if(!user.transferItemToLoc(tool, src)) return ITEM_INTERACT_BLOCKING - core = tool balloon_alert(user, "core installed") playsound(src, 'sound/machines/click.ogg', 30, TRUE) - add_organ_trait(TRAIT_SHOCKIMMUNE) - blood_regeneration_multiplier = 21 - update_icon_state() return ITEM_INTERACT_SUCCESS /obj/item/organ/heart/cybernetic/anomalock/screwdriver_act(mob/living/user, obj/item/tool) - . = ..() - if(!core) + if(isnull(core)) balloon_alert(user, "no core!") - return - if(!core_removable) + return ITEM_INTERACT_BLOCKING + if((organ_flags & ORGAN_FAILING) || !core_removable) balloon_alert(user, "can't remove core!") - return + return ITEM_INTERACT_BLOCKING balloon_alert(user, "removing core...") if(!do_after(user, 3 SECONDS, target = src)) balloon_alert(user, "interrupted!") - return + return ITEM_INTERACT_BLOCKING balloon_alert(user, "core removed") - core.forceMove(drop_location()) - if(Adjacent(user) && !issilicon(user)) - user.put_in_hands(core) - core = null - remove_organ_trait(TRAIT_SHOCKIMMUNE) - update_icon_state() + user.put_in_hands(core) + return ITEM_INTERACT_SUCCESS + +/obj/item/organ/heart/cybernetic/anomalock/Exited(atom/movable/gone, direction) + . = ..() + if(gone == core) + core = null + blood_regeneration_multiplier = initial(blood_regeneration_multiplier) + remove_organ_trait(TRAIT_SHOCKIMMUNE) + update_appearance(UPDATE_ICON_STATE) + RemoveElement(/datum/element/empprotection, EMP_PROTECT_SELF) + +/obj/item/organ/heart/cybernetic/anomalock/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) + . = ..() + if(istype(arrived, /obj/item/assembly/signaler/anomaly) && isnull(core)) + core = arrived + blood_regeneration_multiplier = 21 + add_organ_trait(TRAIT_SHOCKIMMUNE) + update_appearance(UPDATE_ICON_STATE) + AddElement(/datum/element/empprotection, EMP_PROTECT_SELF) /obj/item/organ/heart/cybernetic/anomalock/update_icon_state() . = ..() @@ -191,10 +197,8 @@ /obj/item/organ/heart/cybernetic/anomalock/prebuilt/Initialize(mapload) . = ..() - core = new /obj/item/assembly/signaler/anomaly/flux(src) - add_organ_trait(TRAIT_SHOCKIMMUNE) - blood_regeneration_multiplier = 21 - update_icon_state() + core = new /obj/item/assembly/signaler/anomaly/flux() + core.forceMove(src) /datum/status_effect/voltaic_overdrive id = "voltaic_overdrive" @@ -222,7 +226,7 @@ owner.reagents.add_reagent(/datum/reagent/medicine/coagulant, 5) owner.add_filter("emp_shield", 2, outline_filter(1, "#639BFF")) to_chat(owner, span_revendanger("You feel a burst of energy! It's do or die!")) - owner.add_traits(list(TRAIT_NOSOFTCRIT, TRAIT_NOHARDCRIT, TRAIT_ANALGESIA), REF(src)) + owner.add_traits(list(TRAIT_NOSOFTCRIT, TRAIT_NOHARDCRIT, TRAIT_ANALGESIA), TRAIT_STATUS_EFFECT(id)) /datum/status_effect/voltaic_overdrive/on_remove() . = ..() @@ -230,7 +234,7 @@ owner.remove_movespeed_mod_immunities(type, /datum/movespeed_modifier/damage_slowdown) owner.remove_filter("emp_shield") owner.balloon_alert(owner, "your heart weakens") - owner.remove_traits(list(TRAIT_NOSOFTCRIT, TRAIT_NOHARDCRIT, TRAIT_ANALGESIA), REF(src)) + owner.remove_traits(list(TRAIT_NOSOFTCRIT, TRAIT_NOHARDCRIT, TRAIT_ANALGESIA), TRAIT_STATUS_EFFECT(id)) /// Called when an organ is lost in the owner. In the event the owner just lost their voltaic (presumably, the one giving this effect), ends the buff and clears the overlay. /datum/status_effect/voltaic_overdrive/proc/on_organ_lost(mob/living/carbon/source, obj/item/organ/organ, special) diff --git a/code/modules/surgery/organs/internal/heart/heart_ethereal.dm b/code/modules/surgery/organs/internal/heart/heart_ethereal.dm index 5943aeba515c..1b9768b59cfa 100644 --- a/code/modules/surgery/organs/internal/heart/heart_ethereal.dm +++ b/code/modules/surgery/organs/internal/heart/heart_ethereal.dm @@ -19,6 +19,10 @@ /obj/item/organ/heart/ethereal/Initialize(mapload) . = ..() + set_ethereal_color(ethereal_color) + +/obj/item/organ/heart/ethereal/proc/set_ethereal_color(new_color) + ethereal_color = new_color add_atom_colour(ethereal_color, FIXED_COLOUR_PRIORITY) update_appearance() diff --git a/code/modules/surgery/organs/internal/lungs/_lungs.dm b/code/modules/surgery/organs/internal/lungs/_lungs.dm index eb1823a04515..e3f76278b6a3 100644 --- a/code/modules/surgery/organs/internal/lungs/_lungs.dm +++ b/code/modules/surgery/organs/internal/lungs/_lungs.dm @@ -28,15 +28,15 @@ food_reagents = list(/datum/reagent/consumable/nutriment/organ_tissue = 5, /datum/reagent/medicine/salbutamol = 5) /// Our previous breath's partial pressures, in the form gas id -> partial pressure - var/list/last_partial_pressures = list() + var/alist/last_partial_pressures = alist() /// List of gas to treat as other gas, in the form list(inital_gas, treat_as, multiplier) var/list/treat_as = list() - /// Assoc list of procs to run while a gas is present, in the form gas id -> proc_path - var/list/breath_present = list() - /// Assoc list of procs to run when a gas is immediately removed from the breath, in the form gas id -> proc_path - var/list/breath_lost = list() - /// Assoc list of procs to always run, in the form gas_id -> proc_path - var/list/breathe_always = list() + /// Alist of procs to run while a gas is present, in the form gas id -> proc_path + var/alist/breath_present = alist() + /// Alist of procs to run when a gas is immediately removed from the breath, in the form gas id -> proc_path + var/alist/breath_lost = alist() + /// Alist of procs to always run, in the form gas_id -> proc_path + var/alist/breathe_always = alist() /// Gas mixture to breath out when we're done processing a breath /// Will get emptied out when it's all done @@ -168,12 +168,12 @@ // This is very "manual" I realize, but it's useful to ensure cleanup for gases we're removing happens // Avoids stuck alerts and such var/static/datum/gas_mixture/immutable/dummy = new(BREATH_VOLUME) - for(var/gas_id in last_partial_pressures) + for(var/gas_id, partial_pressure in last_partial_pressures) var/on_loss = breath_lost[gas_id] if(!on_loss) continue - call(src, on_loss)(organ_owner, dummy, last_partial_pressures[gas_id]) + call(src, on_loss)(organ_owner, dummy, partial_pressure) dummy.garbage_collect() /** @@ -633,13 +633,13 @@ var/old_euphoria = (n2o_euphoria == EUPHORIA_ACTIVE || healium_euphoria == EUPHORIA_ACTIVE) // Cache for sonic speed - var/list/last_partial_pressures = src.last_partial_pressures - var/list/breathe_always = src.breathe_always - var/list/breath_present = src.breath_present - var/list/breath_lost = src.breath_lost + var/alist/last_partial_pressures = src.last_partial_pressures + var/alist/breathe_always = src.breathe_always + var/alist/breath_present = src.breath_present + var/alist/breath_lost = src.breath_lost // Build out our partial pressures, for use as we go - var/list/partial_pressures = list() + var/alist/partial_pressures = alist() for(var/gas_id, amount in breath_moles) partial_pressures[gas_id] = breath.get_breath_partial_pressure(amount * received_pressure_mult) @@ -655,11 +655,10 @@ // First, we breathe the stuff that always wants to be processed // This is typically things like o2, stuff the mob needs to live - for(var/breath_id in breathe_always) + // Ensures the gas will always be instanciated, so people can interact with it safely + for(var/breath_id, inhale in breathe_always) var/partial_pressure = partial_pressures[breath_id] || 0 var/old_partial_pressure = last_partial_pressures[breath_id] || 0 - // Ensures the gas will always be instanciated, so people can interact with it safely - var/inhale = breathe_always[breath_id] call(src, inhale)(breather, breath, partial_pressure, old_partial_pressure) // Now we'll handle the callbacks that want to be run conditionally off our current breath @@ -675,7 +674,7 @@ call(src, on_lose)(breather, breath, partial_pressures[gas_id], last_partial_pressures[gas_id]) // Finally, we'll run the callbacks that aren't in breath_gases, but WERE in our last breath - for(var/gas_id in last_partial_pressures) + for(var/gas_id, partial_pressure in last_partial_pressures) // If we still have it, go away if(breath_moles[gas_id]) continue @@ -683,7 +682,7 @@ if(!on_loss) continue - call(src, on_loss)(breather, breath, last_partial_pressures[gas_id]) + call(src, on_loss)(breather, breath, partial_pressure) src.last_partial_pressures = partial_pressures diff --git a/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm b/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm index 8030eece6968..bd0f3d54e142 100644 --- a/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm +++ b/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm @@ -54,6 +54,17 @@ /obj/item/organ/stomach/ethereal/proc/on_multitool_act(atom/source, mob/user, obj/item/tool) SIGNAL_HANDLER + // Checks to ensure we're not doing surgery on a robotic part. + if(!owner) + return multitool_act(user, tool) + + var/obj/item/bodypart/targeted_part = owner.get_bodypart(user.zone_selected) + if(isnull(targeted_part) || targeted_part.bodytype != BODYTYPE_ROBOTIC) + return multitool_act(user, tool) + + if(HAS_TRAIT(targeted_part, TRAIT_READY_TO_OPERATE)) + return + return multitool_act(user, tool) /obj/item/organ/stomach/ethereal/multitool_act(mob/living/user, obj/item/tool) diff --git a/code/modules/surgery/organs/internal/stomach/stomach_golem.dm b/code/modules/surgery/organs/internal/stomach/stomach_golem.dm index 6d9d78b4fe50..a461ad08995e 100644 --- a/code/modules/surgery/organs/internal/stomach/stomach_golem.dm +++ b/code/modules/surgery/organs/internal/stomach/stomach_golem.dm @@ -5,7 +5,7 @@ color = COLOR_GOLEM_GRAY organ_flags = ORGAN_MINERAL organ_traits = list(TRAIT_ROCK_EATER) - hunger_modifier = 10 // golems burn fuel quickly + hunger_modifier = 8 // golems burn fuel quickly /// How slow are you when the "hungry" icon appears? var/min_hunger_slowdown = 0.5 /// How slow are you if you have absolutely nothing in the tank? @@ -74,7 +74,7 @@ owner.add_traits(list(TRAIT_IMMOBILIZED, TRAIT_FORCED_STANDING, TRAIT_HANDS_BLOCKED, TRAIT_INCAPACITATED), TRAIT_STATUS_EFFECT(id)) return TRUE -/datum/status_effect/golem_statued/get_examine_text() +/datum/status_effect/golem_statued/get_examine_text(mob/examiner) return span_warning("[owner.p_They()] [owner.p_are()] as still as a statue!") /datum/status_effect/golem_statued/on_remove() diff --git a/code/modules/surgery/organs/internal/tongue/_tongue.dm b/code/modules/surgery/organs/internal/tongue/_tongue.dm index 263a46ce11d0..b42ce46c0675 100644 --- a/code/modules/surgery/organs/internal/tongue/_tongue.dm +++ b/code/modules/surgery/organs/internal/tongue/_tongue.dm @@ -46,6 +46,8 @@ var/toxic_foodtypes = TOXIC //human tastes are default /// Whether this tongue modifies speech via signal var/modifies_speech = FALSE + /// List of emote keys and sounds for overriding sounds from emotes + VAR_PROTECTED/emote_sounds /obj/item/organ/tongue/Initialize(mapload) . = ..() @@ -146,7 +148,8 @@ /obj/item/organ/tongue/on_mob_insert(mob/living/carbon/receiver, special, movement_flags) . = ..() - + for(var/key in emote_sounds) + RegisterSignal(receiver, COMSIG_MOB_EMOTE_SOUND(key), PROC_REF(get_tongue_emote_sound)) if(modifies_speech) RegisterSignal(receiver, COMSIG_MOB_SAY, PROC_REF(handle_speech)) receiver.voice_filter = voice_filter @@ -161,6 +164,8 @@ . = ..() temp_say_mod = "" + for(var/key in emote_sounds) + UnregisterSignal(organ_owner, COMSIG_MOB_EMOTE_SOUND(key)) UnregisterSignal(organ_owner, COMSIG_MOB_SAY) // Carbons by default start with NO_TONGUE_TRAIT caused TRAIT_AGEUSIA ADD_TRAIT(organ_owner, TRAIT_AGEUSIA, NO_TONGUE_TRAIT) @@ -186,6 +191,11 @@ // No effect return "" +/obj/item/organ/tongue/proc/get_tongue_emote_sound(datum/source, key, list/sounds) + SIGNAL_HANDLER + var/sound_override = get_emote_sound_from_list(emote_sounds[key], owner) + sounds[sound_override] = EMOTE_SOUND_TONGUE + /obj/item/organ/tongue/lizard name = "forked tongue" desc = "A thin and long muscle typically found in reptilian races, apparently moonlights as a nose." @@ -197,6 +207,16 @@ liked_foodtypes = GORE | MEAT | SEAFOOD | NUTS | BUGS disliked_foodtypes = GRAIN | DAIRY | CLOTH | GROSS voice_filter = @{"[0:a] asplit [out0][out2]; [out0] asetrate=%SAMPLE_RATE%*0.9,aresample=%SAMPLE_RATE%,atempo=1/0.9,aformat=channel_layouts=mono,volume=0.2 [p0]; [out2] asetrate=%SAMPLE_RATE%*1.1,aresample=%SAMPLE_RATE%,atempo=1/1.1,aformat=channel_layouts=mono,volume=0.2[p2]; [p0][0][p2] amix=inputs=3"} + emote_sounds = list( + /datum/emote/living/scream::key = list( + 'sound/mobs/humanoids/lizard/lizard_scream_1.ogg', + 'sound/mobs/humanoids/lizard/lizard_scream_2.ogg', + 'sound/mobs/humanoids/lizard/lizard_scream_3.ogg', + ), + /datum/emote/living/carbon/hiss::key = 'sound/mobs/humanoids/lizard/lizard_hiss.ogg', + /datum/emote/living/laugh::key = 'sound/mobs/humanoids/lizard/lizard_laugh1.ogg', + /datum/emote/living/deathgasp::key = 'sound/mobs/humanoids/lizard/deathsound.ogg', + ) var/static/list/speech_replacements = list( new /regex("s+", "g") = "sss", new /regex("S+", "g") = "SSS", @@ -431,6 +451,13 @@ taste_sensitivity = 32 liked_foodtypes = GROSS | MEAT | RAW | GORE disliked_foodtypes = NONE + emote_sounds = list( + /datum/emote/living/scream::key = list( + 'sound/effects/hallucinations/veryfar_noise.ogg', + 'sound/effects/hallucinations/wail.ogg', + 'sound/effects/hallucinations/far_noise.ogg', + ), + ) // List of english words that translate to zombie phrases var/static/list/english_to_zombie = list() /// Spooky growls we sometimes play while alive @@ -499,7 +526,7 @@ /obj/item/organ/tongue/zombie/on_life(seconds_per_tick) . = ..() if(!IS_UNCONSCIOUS_OR_CRIT(owner) && SPT_PROB(2, seconds_per_tick)) - playsound(owner, pick(spooks), 50, TRUE, 10) + playsoundtoken(owner, pick(spooks), 50, TRUE, 10) /obj/item/organ/tongue/alien name = "alien tongue" @@ -509,6 +536,11 @@ taste_sensitivity = 10 // LIZARDS ARE ALIENS CONFIRMED modifies_speech = TRUE // not really, they just hiss voice_filter = @{"[0:a] asplit [out0][out2]; [out0] asetrate=%SAMPLE_RATE%*0.8,aresample=%SAMPLE_RATE%,atempo=1/0.8,aformat=channel_layouts=mono [p0]; [out2] asetrate=%SAMPLE_RATE%*1.2,aresample=%SAMPLE_RATE%,atempo=1/1.2,aformat=channel_layouts=mono[p2]; [p0][0][p2] amix=inputs=3"} + emote_sounds = list( + /datum/emote/living/deathgasp::key = 'sound/mobs/non-humanoids/hiss/hiss6.ogg', + /datum/emote/living/carbon/hiss::key = SFX_HISS, + /datum/emote/living/scream::key = 'sound/mobs/non-humanoids/hiss/hiss5.ogg', + ) // Aliens can only speak alien and a few other languages. /obj/item/organ/tongue/alien/get_possible_languages() @@ -567,6 +599,13 @@ liked_foodtypes = VEGETABLES disliked_foodtypes = FRUIT | CLOTH languages_native = list(/datum/language/calcic) + emote_sounds = list( + /datum/emote/living/scream::key = list( + 'sound/mobs/humanoids/plasmaman/plasmeme_scream_1.ogg', + 'sound/mobs/humanoids/plasmaman/plasmeme_scream_2.ogg', + 'sound/mobs/humanoids/plasmaman/plasmeme_scream_3.ogg', + ), + ) /obj/item/organ/tongue/robot name = "robotic voicebox" @@ -581,6 +620,9 @@ taste_sensitivity = 25 // not as good as an organic tongue organ_traits = list(TRAIT_SILICON_EMOTES_ALLOWED) voice_filter = "alimiter=0.9,acompressor=threshold=0.2:ratio=20:attack=10:release=50:makeup=2,highpass=f=1000" + emote_sounds = list( + /datum/emote/living/deathgasp::key = 'sound/mobs/non-humanoids/cyborg/borg_deathsound.ogg', + ) /obj/item/organ/tongue/robot/could_speak_language(datum/language/language_path) return TRUE // THE MAGIC OF ELECTRONICS @@ -630,6 +672,25 @@ attack_verb_simple = list("shock", "jolt", "zap") voice_filter = @{"[0:a] asplit [out0][out2]; [out0] asetrate=%SAMPLE_RATE%*0.99,aresample=%SAMPLE_RATE%,volume=0.3 [p0]; [p0][out2] amix=inputs=2"} languages_native = list(/datum/language/voltaic) + emote_sounds = list( + /datum/emote/living/scream::key = list( + 'sound/mobs/humanoids/ethereal/ethereal_scream_1.ogg', + 'sound/mobs/humanoids/ethereal/ethereal_scream_2.ogg', + 'sound/mobs/humanoids/ethereal/ethereal_scream_3.ogg', + ), + /datum/emote/living/carbon/hiss::key = 'sound/mobs/humanoids/ethereal/ethereal_hiss.ogg', + ) + +/obj/item/organ/tongue/ethereal/lustrous + //lustrous screams. + emote_sounds = list( + /datum/emote/living/scream::key = list( + 'sound/mobs/humanoids/ethereal/lustrous_scream_1.ogg', + 'sound/mobs/humanoids/ethereal/lustrous_scream_2.ogg', + 'sound/mobs/humanoids/ethereal/lustrous_scream_3.ogg', + ), + /datum/emote/living/carbon/hiss::key = 'sound/mobs/humanoids/ethereal/ethereal_hiss.ogg', + ) /obj/item/organ/tongue/cat name = "felinid tongue" @@ -637,9 +698,12 @@ say_mod = "meows" liked_foodtypes = SEAFOOD | ORANGES | BUGS | GORE disliked_foodtypes = GROSS | CLOTH | RAW - organ_traits = list(TRAIT_WOUND_LICKER, TRAIT_FISH_EATER, TRAIT_CARPOTOXIN_IMMUNE) + organ_traits = list(TRAIT_WOUND_LICKER, TRAIT_FISH_EATER, TRAIT_CARPOTOXIN_IMMUNE, TRAIT_CAT_EMOTES_ALLOWED) languages_native = list(/datum/language/nekomimetic) actions_types = list(/datum/action/item_action/organ_action/go_feral) + emote_sounds = list( + /datum/emote/living/carbon/hiss::key = 'sound/mobs/humanoids/felinid/felinid_hiss.ogg', + ) var/feral_mode = FALSE /obj/item/organ/tongue/cat/on_bodypart_insert(obj/item/bodypart/head) @@ -692,6 +756,9 @@ liked_foodtypes = MEAT | FRUIT | BUGS disliked_foodtypes = CLOTH languages_native = list(/datum/language/monkey) + emote_sounds = list( + /datum/emote/living/scream::key = SFX_SCREECH, + ) /obj/item/organ/tongue/moth name = "moth tongue" @@ -701,6 +768,12 @@ disliked_foodtypes = FRUIT | GROSS | BUGS | GORE toxic_foodtypes = MEAT | RAW | SEAFOOD languages_native = list(/datum/language/moffic) + organ_traits = list(TRAIT_MOTH_EMOTES_ALLOWED) + emote_sounds = list( + /datum/emote/living/scream::key = 'sound/mobs/humanoids/moth/scream_moth.ogg', + /datum/emote/living/laugh::key = 'sound/mobs/humanoids/moth/moth_laugh1.ogg', + /datum/emote/living/deathgasp::key = 'sound/mobs/humanoids/moth/moth_death.ogg', + ) /obj/item/organ/tongue/mush name = "mush-tongue-room" @@ -731,3 +804,12 @@ disliked_foodtypes = NONE //you don't care for much else besides stone toxic_foodtypes = NONE //you can eat fucking uranium languages_native = list(/datum/language/terrum) + +/obj/item/organ/tongue/shadow + name = "shadow tongue" + color = COLOR_ALMOST_BLACK + languages_native = list(/datum/language/shadowtongue) + say_mod = "wails" + emote_sounds = list( + /datum/emote/living/scream::key = 'sound/mobs/humanoids/shadow/shadow_wail.ogg', + ) diff --git a/code/modules/surgery/organs/organ_movement.dm b/code/modules/surgery/organs/organ_movement.dm index c4af4386066a..813ade7432b7 100644 --- a/code/modules/surgery/organs/organ_movement.dm +++ b/code/modules/surgery/organs/organ_movement.dm @@ -264,6 +264,8 @@ limb.owner?.synchronize_bodytypes() limb.owner?.synchronize_bodyshapes() + SEND_SIGNAL(src, COMSIG_ORGAN_BODYPART_REMOVED, limb) + if(!bodypart_overlay) return diff --git a/code/modules/tgui/external.dm b/code/modules/tgui/external.dm index 5cae33288059..a48782c23491 100644 --- a/code/modules/tgui/external.dm +++ b/code/modules/tgui/external.dm @@ -183,7 +183,7 @@ * * required uiref ref The UI that was closed. */ -GAME_VERB_HIDDEN(/client, uiclose, "uiclose", window_id as text) +GAME_VERB_NATIVE(/client, uiclose, "uiclose", null, window_id as text) var/mob/user = src?.mob if(!user) return diff --git a/code/modules/tgui_panel/tgui_panel.dm b/code/modules/tgui_panel/tgui_panel.dm index 8b1a366c0a05..73e54464f636 100644 --- a/code/modules/tgui_panel/tgui_panel.dm +++ b/code/modules/tgui_panel/tgui_panel.dm @@ -86,6 +86,8 @@ ), ), )) + send_player_info() + send_hotkey_mode() return TRUE if(type == "audio/setAdminMusicVolume") @@ -103,10 +105,108 @@ analyze_telemetry(payload) return TRUE + if(type == "verbs/request_verbs") + client.init_verbs() + return TRUE + + if(type == "verbs/request_typepaths") + var/parent_text = payload["parent"] + var/browse_type = text2path(parent_text) + if(isnull(browse_type)) + browse_type = /datum + var/list/children = list() + for(var/child_type in typesof(browse_type)) + if(child_type == browse_type) + continue + // Only include direct children (one level deeper) + var/child_text = "[child_type]" + var/parent_len = length(parent_text || "/datum") + var/remainder = copytext(child_text, parent_len + 1) + if(findtext(remainder, "/", 2)) + continue + children += child_text + window.send_message("verbs/typepaths", list("parent" = parent_text, "paths" = children)) + return TRUE + + if(type == "verbs/request_targets") + var/verb_path = text2path(payload["verb_type"]) + if(!verb_path) + return TRUE + if(!(verb_path in client.verbs) && !(client.mob && (verb_path in client.mob.verbs))) + return TRUE + + var/list/arg_list + var/datum/verb_metadata/meta = SSverbs.verbs_by_verb_path[verb_path] + if(meta) + arg_list = meta.arguments + else + var/datum/admin_verb/av = SSadmin_verbs.admin_verbs_by_verb_path[verb_path] + if(av) + arg_list = av.arguments + if(!length(arg_list)) + return TRUE + var/datum/verb_arg_metadata/entity_arg + for(var/datum/verb_arg_metadata/arg in arg_list) + if(arg.arg_type & VERB_ARG_TYPE_ENTITY) + entity_arg = arg + break + if(!entity_arg) + return TRUE + var/list/target_data = list() + var/list/source_atoms = entity_arg.get_targets(client) + for(var/atom/target in source_atoms) + target_data += list(list("name" = "[target]", "ref" = REF(target))) + window.send_message("verbs/targets", list("targets" = target_data)) + return TRUE + + if(type == "verbs/invoke") + var/verb_path = text2path(payload["verb_type"]) + if(!verb_path) + return TRUE + + var/datum/admin_verb/admin_meta = SSadmin_verbs.admin_verbs_by_verb_path[verb_path] + if(admin_meta) + var/list/resolved_args = resolve_invoke_args(payload["args"], admin_meta.arguments) + SSadmin_verbs.dynamic_invoke_verb(client, admin_meta.type, resolved_args) + return TRUE + var/datum/verb_metadata/meta = SSverbs.verbs_by_verb_path[verb_path] + if(!meta) + return TRUE + var/target = resolve_verb_target(verb_path) + if(!target) + return TRUE + var/list/resolved_args = resolve_invoke_args(payload["args"], meta.arguments) + call(target, meta.body_path)(resolved_args) + return TRUE + if(type == "requestMetadata") send_metadata() return TRUE +/datum/tgui_panel/proc/resolve_invoke_args(list/raw_args, list/arg_metadata) + if(!islist(raw_args)) + raw_args = list() + var/alist/resolved = alist() + for(var/datum/verb_arg_metadata/meta in arg_metadata) + if(!(meta.name in raw_args)) + continue + var/value = raw_args[meta.name] + if(meta.arg_type & VERB_ARG_TYPE_NUM) + value = text2num(value) + else if(!(meta.arg_type & VERB_ARG_TYPE_TYPEPATH) && istext(value)) + var/located = locate(value) + if(located) + value = located + resolved[meta.name] = value + return resolved + +/datum/tgui_panel/proc/resolve_verb_target(verb_path) + if(verb_path in client.verbs) + return client + if(client.mob && (verb_path in client.mob.verbs)) + return client.mob + return null + /** * public * @@ -115,6 +215,19 @@ /datum/tgui_panel/proc/send_roundrestart() window.send_message("roundrestart") +/** + * public + * + * Sends the client's current job, character and saved character names, + * used for conditional chat highlights. + */ +/datum/tgui_panel/proc/send_player_info() + window.send_message("player/set", list( + "job" = client.mob?.mind?.assigned_role?.title, + "character" = client.prefs?.read_preference(/datum/preference/name/real_name), + "characters" = client.prefs?.create_character_profiles(), + )) + /** * private * @@ -143,3 +256,6 @@ "assets" = webroot_asset_urls, ) window.send_message("metadata", metadata) + +/datum/tgui_panel/proc/send_hotkey_mode() + window.send_message("verbs/hotkey_mode", list("hotkeys" = client.hotkeys)) diff --git a/code/modules/transport/admin.dm b/code/modules/transport/admin.dm index b7e4c852c2f3..52f3ef15714a 100644 --- a/code/modules/transport/admin.dm +++ b/code/modules/transport/admin.dm @@ -1,13 +1,6 @@ ADMIN_VERB(reset_tram, R_DEBUG|R_ADMIN, "Reset Tram", "Reset a tram controller or its contents.", ADMIN_CATEGORY_DEBUG) - var/static/list/debug_tram_list = list( - TRAMSTATION_LINE_1, - BIRDSHOT_LINE_1, - BIRDSHOT_LINE_2, - HILBERT_LINE_1, - ) - var/datum/transport_controller/linear/tram/broken_controller - var/selected_transport_id = tgui_input_list(user, "Which tram?", "Off the rails", debug_tram_list) + var/selected_transport_id = tgui_input_list(user, "Which tram?", "Off the rails", SStransport.debug_tram_list) if(isnull(selected_transport_id)) return var/reset_type = tgui_input_list(user, "How hard of a reset?", "How bad is it screwed up", list("Clear Tram Contents", "Controller", "Controller and Contents", "Delete Datum", "Cancel")) diff --git a/code/modules/transport/tram/tram_controls.dm b/code/modules/transport/tram/tram_controls.dm index 8dfc54f8ee7a..7d9dace312a9 100644 --- a/code/modules/transport/tram/tram_controls.dm +++ b/code/modules/transport/tram/tram_controls.dm @@ -24,14 +24,13 @@ /// Weakref to the tram piece we control var/datum/weakref/transport_ref /// The ID of the tram we're controlling - var/specific_transport_id = TRAMSTATION_LINE_1 - /// If the sign is adjusted for split type tram windows - var/split_mode = FALSE + var/specific_transport_id + /// If we are window mounted, split window mounted, or standalone + var/install_type = NORMAL_WINDOW generate_map_preview = FALSE /obj/machinery/computer/tram_controls/split - circuit = /obj/item/circuitboard/computer/tram_controls/split - split_mode = TRUE + install_type = SPLIT_WINDOW /obj/machinery/computer/tram_controls/split/directional/north dir = SOUTH @@ -51,13 +50,12 @@ dir = EAST pixel_x = -32 -/obj/machinery/computer/tram_controls/Initialize(mapload) - . = ..() - var/obj/item/circuitboard/computer/tram_controls/my_circuit = circuit - split_mode = my_circuit.split_mode - /obj/machinery/computer/tram_controls/post_machine_initialize() . = ..() + link_circuit() + if(install_type == STANDALONE) + base_icon_state = "tram_alt" + icon_state = "tram_alt_controls" if(!id_tag) id_tag = assign_random_name() SStransport.hello(src, name, id_tag) @@ -68,9 +66,35 @@ if(tram) RegisterSignal(SStransport, COMSIG_TRANSPORT_UPDATED, PROC_REF(update_display)) +/obj/machinery/computer/tram_controls/RefreshParts() + link_circuit(overwrite = TRUE) + return ..() + /obj/machinery/computer/tram_controls/update_current_power_usage() return // We get power from area rectifiers +/** + * Links the specific_transport_id of the circuitboard and the tram controls machine. + * By default it will only link machines that don't yet have a specific_transport_id. + * + * Arguments: + * * overwrite - Force overwriting existing specific_transport_id with circuitboard ID + */ +/obj/machinery/computer/tram_controls/proc/link_circuit(overwrite = FALSE) + var/obj/item/circuitboard/computer/tram_controls/my_circuit = circuit + + // mapped subtypes push their install_type to the circuitboard, otherwise we pull it + if(isnull(install_type) || overwrite) + install_type = my_circuit.install_type + else + my_circuit.install_type = install_type + + // mapped subtypes push their specific_transport_id to the circuitboard, otherwise we pull it + if(isnull(specific_transport_id) || overwrite) + specific_transport_id = my_circuit.specific_transport_id + else + my_circuit.specific_transport_id = specific_transport_id + /** * Finds the tram from the console * @@ -183,16 +207,18 @@ return icon_screen = "" - icon_screen += "[controller.specific_transport_id]" - icon_screen += "[destination_platform.platform_code]" + icon_screen += "[base_icon_state]" + icon_screen += "_[destination_platform.platform_code]" update_appearance() /obj/machinery/computer/tram_controls/on_construction(mob/user) . = ..() var/obj/item/circuitboard/computer/tram_controls/my_circuit = circuit - split_mode = my_circuit.split_mode - if(split_mode) + install_type = my_circuit.install_type + if(install_type == SPLIT_WINDOW) + base_icon_state = "tram" + icon_state = "tram_controls" switch(dir) if(NORTH) pixel_x = 8 @@ -206,7 +232,9 @@ if(WEST) pixel_x = 32 pixel_y = 8 - else + else if(install_type == NORMAL_WINDOW) + base_icon_state = "tram" + icon_state = "tram_controls" switch(dir) if(NORTH) pixel_y = -32 @@ -216,6 +244,9 @@ pixel_x = -32 if(WEST) pixel_x = 32 + else + base_icon_state = "tram_alt" + icon_state = "tram_alt_controls" /obj/machinery/computer/tram_controls/update_overlays() . = ..() diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index 2f7ffdb585f7..0fcde4450fb2 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -137,6 +137,7 @@ #include "card_mismatch.dm" #include "cardboard_cutouts.dm" #include "cargo_crate_sanity.dm" +#include "cargo_crates_and_exclusions.dm" #include "cargo_dep_order_locations.dm" #include "cargo_selling.dm" #include "chain_pull_through_space.dm" diff --git a/code/modules/unit_tests/blood_volume_procs.dm b/code/modules/unit_tests/blood_volume_procs.dm index 9c532486aee8..40fdef90160a 100644 --- a/code/modules/unit_tests/blood_volume_procs.dm +++ b/code/modules/unit_tests/blood_volume_procs.dm @@ -88,13 +88,16 @@ dummy.reagents.add_reagent(/datum/reagent/medicine/salglu_solution, 10) var/datum/reagent/medicine/salglu_solution/saline = dummy.reagents.has_reagent(/datum/reagent/medicine/salglu_solution) - dummy.set_blood_volume(saline.dilution_cap) + dummy.set_blood_volume(SALINE_DILUTION_CAP) // Test if saline dilutes blood volume beyond the dilution cap. - TEST_ASSERT_EQUAL(dummy.get_blood_volume(apply_modifiers = TRUE), saline.dilution_cap, "Saline goes above or below its dilution cap.") + TEST_ASSERT_EQUAL(dummy.get_blood_volume(apply_modifiers = TRUE), SALINE_DILUTION_CAP, "Saline goes above or below its dilution cap.") + + var/datum/status_effect/stacking/saline_glucose_dilution/dilution = dummy.has_status_effect(/datum/status_effect/stacking/saline_glucose_dilution) + TEST_ASSERT_NOTNULL(dilution, "Saline did not apply its dilution effect when entering a mob") dummy.set_blood_volume(BLOOD_VOLUME_BAD) - var/expected_dilution = saline.volume * saline.dilution_per_unit + var/expected_dilution = saline.volume * dilution.get_blood_multiplier() expected_final_volume = dummy.get_blood_volume() + expected_dilution // Test if saline dilutes low blood volume properly. diff --git a/code/modules/unit_tests/cargo_crates_and_exclusions.dm b/code/modules/unit_tests/cargo_crates_and_exclusions.dm new file mode 100644 index 000000000000..96c05c5c1d84 --- /dev/null +++ b/code/modules/unit_tests/cargo_crates_and_exclusions.dm @@ -0,0 +1,24 @@ +/** + * For this test, we check a few baseline requirements for cargo to work properly: + * Do default crates sell for the value of a crate? (CARGO_CRATE_VALUE) + * Do subtypes sell for their initial cost? + * And, are there any export datums where their included types explicitly include an excluded type? This will result in a valid thing, not having any export value at all. + */ +/datum/unit_test/cargo_crates_and_exclusions + +/datum/unit_test/cargo_crates_and_exclusions/Run() + var/obj/stock_crate = allocate(/obj/structure/closet/crate) + var/datum/export_report/crate_report = export_item_and_contents(stock_crate, delete_unsold = TRUE, dry_run = TRUE) + var/crate_value = counterlist_sum(crate_report.total_value) + TEST_ASSERT_EQUAL(crate_value, CARGO_CRATE_VALUE, "A stock cargo crate was not worth CARGO_CRATE_VALUE of [CARGO_CRATE_VALUE]!") + + var/obj/subtype_crate = allocate(/obj/structure/closet/crate/coffin) + var/datum/export_report/subtype_report = export_item_and_contents(subtype_crate, delete_unsold = TRUE, dry_run = TRUE) + var/subtype_value = counterlist_sum(subtype_report.total_value) + TEST_ASSERT_EQUAL(subtype_value, /datum/export/crate/coffin::cost, "A crate subtype(coffin) was not worth its export value!") + + for(var/datum/export/this_export as anything in GLOB.exports_list) + for(var/atom/included_thing as anything in this_export.original_export_types) + for(var/atom/excluded_thing as anything in this_export.exclude_types) + if(included_thing.type == excluded_thing.type) //excluded_types exists to weed out subtypes so it's a moot point. + TEST_FAIL("Export datum [this_export] includes a type [included_thing] that it explicitly excludes [excluded_thing].") diff --git a/code/modules/unit_tests/designs.dm b/code/modules/unit_tests/designs.dm index eebbd2a18480..2e4b62e2d46f 100644 --- a/code/modules/unit_tests/designs.dm +++ b/code/modules/unit_tests/designs.dm @@ -1,81 +1,73 @@ /datum/unit_test/designs /datum/unit_test/designs/Run() -//Can't use allocate because of bug with certain datums - var/datum/design/default_design = new /datum/design() - - for(var/design_id in SSresearch.techweb_designs) //We are checking surgery design separatly later since they work differently - var/datum/design/current_design = SSresearch.techweb_designs[design_id] + for(var/design_path, _design in SSresearch.techweb_designs) //We are checking surgery design separatly later since they work differently + var/datum/design/current_design = _design if(istype(current_design, /datum/design/surgery)) - return - if (isnull(current_design.name) || current_design.name == default_design.name) //Designs with ID must have non default/null Name - TEST_FAIL("Design [current_design.type] has default or null name var but has an ID") - if ((!isnull(current_design.materials) && LAZYLEN(current_design.materials)) || (!isnull(current_design.reagents_list) && LAZYLEN(current_design.reagents_list))) //Design requires materials - if ((isnull(current_design.build_path) || current_design.build_path == default_design.build_path) && (isnull(current_design.make_reagent) || current_design.make_reagent == default_design.make_reagent)) //Check if design gives any output - TEST_FAIL("Design [current_design.type] requires materials but does not have either build_path or make_reagent set") - else if (!isnull(current_design.build_path) || !isnull(current_design.build_path)) // //Design requires no materials but creates stuff - TEST_FAIL("Design [current_design.type] requires NO materials but has build_path or make_reagent set") - if (length(current_design.reagents_list) && !(current_design.build_type & LIMBGROWER)) - TEST_FAIL("Design [current_design.type] requires reagents but isn't a limb grower design. Reagent costs are only supported by limb grower designs") - - for(var/datum/design/surgery/path as anything in subtypesof(/datum/design/surgery)) - if (path::id == DESIGN_ID_IGNORE) - TEST_FAIL("Surgery Design [path] has no ID set") - if (isnull(path::surgery)) - TEST_FAIL("Surgery Design [path] has null surgery var") + var/datum/design/surgery/surgery_design = current_design + if (isnull(surgery_design.surgery)) + TEST_FAIL("Surgery Design [design_path] has null surgery var") + continue + if (isnull(surgery_design.name) && isnull(surgery_design.surgery::rnd_name) && isnull(surgery_design.surgery::name)) + TEST_FAIL("Surgery Design [design_path] has no name set or inferable from surgery type") + if (isnull(surgery_design.desc) && isnull(surgery_design.surgery::rnd_desc) && isnull(surgery_design.surgery::desc)) + TEST_FAIL("Surgery Design [design_path] has no desc set or inferable from surgery type") continue - if (isnull(path::name) && isnull(path::surgery::rnd_name) && isnull(path::surgery::name)) - TEST_FAIL("Surgery Design [path] has no name set or inferable from surgery type") - if (isnull(path::desc) && isnull(path::surgery::rnd_desc) && isnull(path::surgery::desc)) - TEST_FAIL("Surgery Design [path] has no desc set or inferable from surgery type") + + //Designs with ID must have non default/null Name + if (isnull(current_design.name)) + TEST_FAIL("Design [design_path] has no name") + + // Design requires materials + if (LAZYLEN(current_design.materials) || LAZYLEN(current_design.reagents_list)) + // Check if design gives any output + if (isnull(current_design.build_path) && isnull(current_design.make_reagent)) + TEST_FAIL("Design [design_path] requires materials but does not have either build_path or make_reagent set") + // Design requires no materials but creates stuff + else if (!isnull(current_design.build_path) || !isnull(current_design.build_path)) + TEST_FAIL("Design [design_path] requires NO materials but has build_path or make_reagent set") + + // Only limbgrowers can use reagents + if (LAZYLEN(current_design.reagents_list) && !(current_design.build_type & LIMBGROWER)) + TEST_FAIL("Design [design_path] requires reagents but isn't a limb grower design. Reagent costs are only supported by limb grower designs") ///Check that all designs have a corresponding id and viceversa, and that they're actually implemented (techweb or disks) /datum/unit_test/design_source /datum/unit_test/design_source/Run() - var/list/all_designs = list() - - for(var/id in SSresearch.techweb_designs) - var/datum/design/design = SSresearch.techweb_designs[id] - all_designs[design.id] = design.type + var/list/all_designs = assoc_to_keys(SSresearch.techweb_designs) - for (var/node_id in SSresearch.techweb_nodes) - var/datum/techweb_node/node = SSresearch.techweb_nodes[node_id] - for (var/design_id in node.design_ids) - if (!all_designs[design_id]) - TEST_FAIL("Techweb node [node.display_name] ([node.id]) has a design_id \"[design_id]\" which doesn't correspond to any existing design!") - continue - all_designs -= design_id + for (var/node_path, _node in SSresearch.techweb_nodes) + var/datum/techweb_node/node = _node + all_designs -= node.unlocked_designs // Designs can also be disk-exclusive for (var/obj/item/disk/design_disk/design_disk as anything in subtypesof(/obj/item/disk/design_disk)) design_disk = new design_disk() - for (var/datum/design/design as anything in design_disk.blueprints) - all_designs -= design.id + all_designs -= design_disk.blueprints qdel(design_disk) for (var/obj/item/disk/surgery/design_disk as anything in subtypesof(/obj/item/disk/surgery)) design_disk = new design_disk() - for (var/surgery_type in design_disk.surgeries) - for (var/design_id in all_designs) - var/datum/design/surgery/design = all_designs[design_id] - if (ispath(design, /datum/design/surgery) && design::surgery == surgery_type) - all_designs -= design::id + for(var/datum/surgery_operation/surgery_type as anything in design_disk.surgeries) + for(var/datum/design/surgery/design_path as anything in all_designs) + if(ispath(design_path, /datum/design/surgery) && design_path::surgery == surgery_type) + all_designs -= design_path qdel(design_disk) // Or machine-exclusive for (var/datum/techweb/autounlocking/techweb as anything in subtypesof(/datum/techweb/autounlocking)) - techweb = new techweb() - for (var/design_id in techweb.researched_designs + techweb.hacked_designs) - var/datum/design/design = SSresearch.techweb_design_by_id(design_id) + GLOB.autounlock_techwebs[techweb] ||= new techweb() + techweb = GLOB.autounlock_techwebs[techweb] + for (var/design_path in techweb.researched_designs + techweb.hacked_designs) + var/datum/design/design = SSresearch.techweb_designs[design_path] // If we have a design thats supposed to be printable from a protolathe and an autolathe, but only autolathes can print it - // then we still should error because then we either have a missing design_id or redundant build flags + // then we still should error because then we either have a missing design_path or redundant build flags if (!(design.build_type & (~techweb.allowed_buildtypes))) - all_designs -= design_id - qdel(techweb) + all_designs -= design_path - for (var/missing_id in all_designs) - TEST_FAIL("Design [all_designs[missing_id]] has an ID \"[missing_id]\" which is not in any of the techweb nodes or tech disks, or it is possibly misconfigured!") + for (var/missing_path in all_designs) + TEST_FAIL("Design [missing_path] is not in any of the techweb nodes or tech disks.") ///Check that the materials present in the printed objects are consistent with the materials used in techweb design that prints said object. /datum/unit_test/design_mats @@ -83,8 +75,8 @@ /datum/unit_test/design_mats/Run() var/list/special_types = typesof(/datum/material_requirement) + typesof(/datum/material_slot) //we skip designs that can be printed with non-specific materials. - for (var/design_id in SSresearch.techweb_designs) - var/datum/design/design = SSresearch.techweb_designs[design_id] + for (var/design_path, _design in SSresearch.techweb_designs) + var/datum/design/design = _design var/mat_requirement_design = length(special_types & design.materials) diff --git a/code/modules/unit_tests/preferences.dm b/code/modules/unit_tests/preferences.dm index 32a8542be2af..31ad37fa8801 100644 --- a/code/modules/unit_tests/preferences.dm +++ b/code/modules/unit_tests/preferences.dm @@ -8,7 +8,7 @@ for (var/preference_type in GLOB.preference_entries) var/datum/preference/preference = GLOB.preference_entries[preference_type] if (preference.savefile_identifier == PREFERENCE_CHARACTER) - preference.apply_to_human(human, preference.create_informed_default_value(preferences)) + preference.apply_to_human(human, preference.create_informed_default_value(preferences), preferences) if (istype(preference, /datum/preference/choiced)) var/datum/preference/choiced/choiced_preference = preference diff --git a/code/modules/unit_tests/screenshots/screenshot_hair_gradient_hair_gradient_ethereal.png b/code/modules/unit_tests/screenshots/screenshot_hair_gradient_hair_gradient_ethereal.png index d3850e1e82ef..9850d2ac2608 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_hair_gradient_hair_gradient_ethereal.png and b/code/modules/unit_tests/screenshots/screenshot_hair_gradient_hair_gradient_ethereal.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ethereal.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ethereal.png index acd5e31f6fdb..feb8b574e6a7 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ethereal.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ethereal.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ethereal_lustrous.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ethereal_lustrous.png index ccf23bf4c139..f93422d89a8d 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ethereal_lustrous.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ethereal_lustrous.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_zombie.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_zombie.png index 6be487b3a46c..8afb7149817e 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_zombie.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_zombie.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_zombie_infectious.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_zombie_infectious.png deleted file mode 100644 index 6be487b3a46c..000000000000 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_zombie_infectious.png and /dev/null differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_zombie_infectious_mindless.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_zombie_infectious_mindless.png deleted file mode 100644 index 6be487b3a46c..000000000000 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_zombie_infectious_mindless.png and /dev/null differ diff --git a/code/modules/unit_tests/tgui_create_message.dm b/code/modules/unit_tests/tgui_create_message.dm index 4d5a4bc0a026..7b61a95bf76f 100644 --- a/code/modules/unit_tests/tgui_create_message.dm +++ b/code/modules/unit_tests/tgui_create_message.dm @@ -26,3 +26,17 @@ )) TEST_ASSERT_EQUAL(expected, output, "TGUI_CREATE_MESSAGE didn't round trip properly") + +/// Test that TGUI_PANEL_FOCUS_MESSAGE matches what TGUI_CREATE_MESSAGE would produce +/datum/unit_test/tgui_panel_focus_message + +/datum/unit_test/tgui_panel_focus_message/Run() + var/expected = TGUI_CREATE_MESSAGE("verbs/focus", null) + TEST_ASSERT_EQUAL(expected, TGUI_PANEL_FOCUS_MESSAGE, "TGUI_PANEL_FOCUS_MESSAGE doesn't match TGUI_CREATE_MESSAGE(\"verbs/focus\", null)") + +/// Test that TGUI_PANEL_CLEAR_MESSAGE matches what TGUI_CREATE_MESSAGE would produce +/datum/unit_test/tgui_panel_clear_message + +/datum/unit_test/tgui_panel_clear_message/Run() + var/expected = TGUI_CREATE_MESSAGE("verbs/clear", null) + TEST_ASSERT_EQUAL(expected, TGUI_PANEL_CLEAR_MESSAGE, "TGUI_PANEL_CLEAR_MESSAGE doesn't match TGUI_CREATE_MESSAGE(\"verbs/clear\", null)") diff --git a/code/modules/vehicles/mecha/mech_fabricator.dm b/code/modules/vehicles/mecha/mech_fabricator.dm index c3775d45f4be..22e162d310b2 100644 --- a/code/modules/vehicles/mecha/mech_fabricator.dm +++ b/code/modules/vehicles/mecha/mech_fabricator.dm @@ -49,7 +49,7 @@ var/datum/remote_materials/rmat /// All designs in the techweb that can be fabricated by this machine, since the last update. - var/list/datum/design/cached_designs + var/list/cached_designs /// Looping sound for printing items var/datum/looping_sound/lathe_print/print_sound @@ -155,16 +155,15 @@ * Updates the `final_sets` and `buildable_parts` for the current mecha fabricator. */ /obj/machinery/mecha_part_fabricator/proc/update_menu_tech() - var/previous_design_count = cached_designs.len + var/previous_design_count = length(cached_designs) cached_designs.Cut() - for(var/v in stored_research.researched_designs) - var/datum/design/design = SSresearch.techweb_design_by_id(v) - + for(var/design_path in stored_research.researched_designs) + var/datum/design/design = SSresearch.techweb_designs[design_path] if(design.build_type & MECHFAB) - cached_designs |= design + cached_designs |= design_path - var/design_delta = cached_designs.len - previous_design_count + var/design_delta = length(cached_designs) - previous_design_count if(design_delta > 0) say("Received [design_delta] new design[design_delta == 1 ? "" : "s"].") @@ -224,7 +223,7 @@ * * user_data - ID_DATA(user), see the proc on SSid_access */ /obj/machinery/mecha_part_fabricator/proc/build_part(datum/design/D, verbose = TRUE, alist/user_data) - if(!D || length(D.reagents_list)) + if(!D || LAZYLEN(D.reagents_list)) return FALSE var/datum/material_container/materials = rmat.mat_container @@ -361,20 +360,21 @@ var/datum/asset/spritesheet_batched/research_designs/spritesheet = get_asset_datum(/datum/asset/spritesheet_batched/research_designs) var/size32x32 = "[spritesheet.name]32x32" - for(var/datum/design/design in cached_designs) + for(var/design_path in cached_designs) + var/datum/design/design = SSresearch.techweb_designs[design_path] var/cost = list() var/list/materials = design.materials for(var/datum/material/mat in materials) cost[mat.name] = OPTIMAL_COST(materials[mat] * component_coeff) - var/icon_size = spritesheet.icon_size_id(design.id) - designs[design.id] = list( + var/icon_size = spritesheet.icon_size_id(design.asset_id) + designs[design.type] = list( "name" = design.name, "desc" = design.get_description(), "cost" = cost, - "id" = design.id, + "path" = design.type, "categories" = design.category, - "icon" = "[icon_size == size32x32 ? "" : "[icon_size] "][design.id]", + "icon" = "[icon_size == size32x32 ? "" : "[icon_size] "][design.asset_id]", "constructionTime" = get_construction_time_w_coeff(design.construction_time) ) @@ -392,7 +392,7 @@ if(being_built) data["queue"] += list(list( "jobId" = top_job_id, - "designId" = being_built.id, + "designPath" = being_built.type, "processing" = TRUE, "timeLeft" = (build_finish - world.time) )) @@ -405,7 +405,7 @@ data["queue"] += list(list( "jobId" = top_job_id + offset, - "designId" = design.id, + "designPath" = design.type, "processing" = FALSE, "timeLeft" = get_construction_time_w_coeff(design.construction_time) / 10 )) @@ -414,31 +414,28 @@ /obj/machinery/mecha_part_fabricator/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() - if(.) return - . = TRUE - switch(action) if("build") if(!rmat.can_use_resource(user_data = ID_DATA(usr))) return - var/designs = params["designs"] + var/list/designs = params["designs"] if(!islist(designs)) return - for(var/design_id in designs) - if(!istext(design_id)) + for(var/design_path in designs) + design_path = text2path(design_path) + if(!stored_research.researched_designs[design_path]) continue - if(!stored_research.researched_designs.Find(design_id)) + var/datum/design/design = SSresearch.techweb_designs[design_path] + if(!istype(design)) continue - var/datum/design/design = SSresearch.techweb_design_by_id(design_id) - - if(!(design.build_type & MECHFAB) || design.id != design_id) + if(!(design.build_type & MECHFAB)) continue add_to_queue(design, ID_DATA(usr)) @@ -452,20 +449,18 @@ if(!being_built) begin_processing() - return + return TRUE if("del_queue_part") // Delete a specific from the queue var/index = text2num(params["index"]) remove_from_queue(index) - - return + return TRUE if("clear_queue") // Delete everything from queue queue.Cut() - - return + return TRUE if("build_queue") // Build everything in queue @@ -473,26 +468,21 @@ return process_queue = TRUE - if(!being_built) begin_processing() - - return + return TRUE if("stop_queue") // Pause queue building. Also known as stop. process_queue = FALSE - - return + return TRUE if("remove_mat") var/datum/material/material = locate(params["ref"]) var/amount = text2num(params["amount"]) // SAFETY: eject_sheets checks for valid mats rmat.eject_sheets(material, amount, user_data = ID_DATA(usr)) - return - - return FALSE + return TRUE /obj/machinery/mecha_part_fabricator/proc/AfterMaterialInsert(item_inserted, id_inserted, amount_inserted) var/datum/material/M = id_inserted diff --git a/code/modules/vehicles/mecha/mecha_defense.dm b/code/modules/vehicles/mecha/mecha_defense.dm index 6830cecc005b..b5ce4dcfb093 100644 --- a/code/modules/vehicles/mecha/mecha_defense.dm +++ b/code/modules/vehicles/mecha/mecha_defense.dm @@ -115,7 +115,10 @@ /obj/vehicle/sealed/mecha/projectile_hit(obj/projectile/hitting_projectile, def_zone, piercing_hit, blocked) // Determine our potential to shoot through the mech and into the cockpit, hitting the pilot - var/kill_the_meat = clamp(hitting_projectile.armour_penetration - get_armor_rating(hitting_projectile.armor_flag), 0, 100) + var/kill_the_meat = hitting_projectile.armour_penetration + if(hitting_projectile.armor_flag) + kill_the_meat -= get_armor_rating(hitting_projectile.armor_flag) + kill_the_meat = clamp(kill_the_meat, 0, 100) // Allows bullets to hit the pilot of open-canopy mechs, or if the bullet penetrates to the pilot, or the bullet can pass through structures if (!LAZYLEN(occupants) || (mecha_flags & SILICON_PILOT)) return ..() diff --git a/code/modules/wiremod/components/abstract/compare.dm b/code/modules/wiremod/components/abstract/compare.dm index 48b53dea1622..c9d71a394f80 100644 --- a/code/modules/wiremod/components/abstract/compare.dm +++ b/code/modules/wiremod/components/abstract/compare.dm @@ -13,6 +13,8 @@ var/datum/port/output/true var/datum/port/output/false + /// The type of port for the result output + var/result_port_type = PORT_TYPE_BOOLEAN /// The result from the output var/datum/port/output/result @@ -22,7 +24,7 @@ true = add_output_port("True", PORT_TYPE_SIGNAL) false = add_output_port("False", PORT_TYPE_SIGNAL) - result = add_output_port("Result", PORT_TYPE_BOOLEAN) + result = add_output_port("Result", result_port_type) /** * Used by derivatives to load their own ports in for custom use. diff --git a/code/modules/wiremod/components/string/replace.dm b/code/modules/wiremod/components/string/replace.dm new file mode 100644 index 000000000000..cb6907420f3c --- /dev/null +++ b/code/modules/wiremod/components/string/replace.dm @@ -0,0 +1,27 @@ +/** + * # String Replace Component + * + * Replace any instance of a word/letter in a string with another + */ +/obj/item/circuit_component/compare/contains/replace + display_name = "String Replace" + desc = "Replace any instance of a word/letter in a string with another" + + var/datum/port/input/replacement + + result_port_type = PORT_TYPE_STRING + +/obj/item/circuit_component/compare/contains/replace/populate_custom_ports() + . = ..() + replacement = add_input_port("Replacement", PORT_TYPE_STRING) + +/obj/item/circuit_component/compare/contains/replace/do_comparisons() + var/to_find = needle.value + var/to_search = haystack.value + + if(!to_find || !to_search) + return + + var/to_replace = replacement.value + + return replacetext(to_search, to_find, to_replace) diff --git a/code/modules/wiremod/core/component_printer.dm b/code/modules/wiremod/core/component_printer.dm index 529c5af82df8..120119e30107 100644 --- a/code/modules/wiremod/core/component_printer.dm +++ b/code/modules/wiremod/core/component_printer.dm @@ -44,12 +44,12 @@ on_connected_techweb() /obj/machinery/component_printer/proc/on_connected_techweb() - for (var/researched_design_id in techweb.researched_designs) - var/datum/design/design = SSresearch.techweb_design_by_id(researched_design_id) + for (var/researched_design_path in techweb.researched_designs) + var/datum/design/design = SSresearch.techweb_designs[researched_design_path] if (!(design.build_type & COMPONENT_PRINTER) || !ispath(design.build_path, /obj/item/circuit_component)) continue - current_unlocked_designs[design.build_path] = design.id + current_unlocked_designs[design.build_path] = researched_design_path RegisterSignal(techweb, COMSIG_TECHWEB_ADD_DESIGN, PROC_REF(on_research)) RegisterSignal(techweb, COMSIG_TECHWEB_REMOVE_DESIGN, PROC_REF(on_removed)) @@ -63,7 +63,7 @@ SIGNAL_HANDLER if (!(added_design.build_type & COMPONENT_PRINTER) || !ispath(added_design.build_path, /obj/item/circuit_component)) return - current_unlocked_designs[added_design.build_path] = added_design.id + current_unlocked_designs[added_design.build_path] = added_design.type /obj/machinery/component_printer/proc/on_removed(datum/source, datum/design/added_design, custom) SIGNAL_HANDLER @@ -125,9 +125,9 @@ * user_data - data in the form rendered by ID_DATA(user), for print logging, see the proc on SSid_access */ /obj/machinery/component_printer/proc/print_component(typepath, alist/user_data) - var/design_id = current_unlocked_designs[typepath] + var/design_path = current_unlocked_designs[typepath] + var/datum/design/design = SSresearch.techweb_designs[design_path] - var/datum/design/design = SSresearch.techweb_design_by_id(design_id) if (!(design.build_type & COMPONENT_PRINTER)) return @@ -144,24 +144,28 @@ . = ..() if (.) return + var/alist/user_data = ID_DATA(usr) switch (action) if ("print") - var/design_id = params["designId"] - if (!techweb.researched_designs[design_id]) - return TRUE + var/design_path = text2path(params["design_path"]) + if (!techweb.researched_designs[design_path]) + return + + var/datum/design/design = SSresearch.techweb_designs[design_path] + if(!istype(design)) + return - var/datum/design/design = SSresearch.techweb_design_by_id(design_id) if (!(design.build_type & COMPONENT_PRINTER)) - return TRUE + return if (!materials.can_use_resource(user_data = user_data)) - return TRUE + return if (!materials.mat_container.has_materials(design.materials, efficiency_coeff)) say("Not enough materials.") - return TRUE + return balloon_alert_to_viewers("printed [design.name]") @@ -169,13 +173,15 @@ var/atom/printed_design = design.create_result(drop_location()) printed_design.pixel_x = printed_design.base_pixel_x + rand(-5, 5) printed_design.pixel_y = printed_design.base_pixel_y + rand(-5, 5) + return TRUE if ("remove_mat") var/datum/material/material = locate(params["ref"]) var/amount = text2num(params["amount"]) + if(!amount) + return // SAFETY: eject_sheets checks for valid mats materials.eject_sheets(material_ref = material, eject_amount = amount, user_data = user_data) - - return TRUE + return TRUE /obj/machinery/component_printer/ui_data(mob/user) var/list/data = list() @@ -191,8 +197,8 @@ var/size32x32 = "[spritesheet.name]32x32" // for (var/datum/design/component/component_design_type as anything in subtypesof(/datum/design/component)) - for (var/researched_design_id in techweb.researched_designs) - var/datum/design/design = SSresearch.techweb_design_by_id(researched_design_id) + for (var/researched_design_path in techweb.researched_designs) + var/datum/design/design = SSresearch.techweb_designs[researched_design_path] if (!(design.build_type & COMPONENT_PRINTER)) continue @@ -200,14 +206,14 @@ for(var/datum/material/mat, amount in design.materials) cost[mat.name] = OPTIMAL_COST(amount * efficiency_coeff) - var/icon_size = spritesheet.icon_size_id(design.id) - designs[researched_design_id] = list( + var/icon_size = spritesheet.icon_size_id(design.asset_id) + designs[researched_design_path] = list( "name" = design.name, "desc" = design.desc, "cost" = cost, - "id" = researched_design_id, + "path" = researched_design_path, "categories" = design.category, - "icon" = "[icon_size == size32x32 ? "" : "[icon_size] "][design.id]" + "icon" = "[icon_size == size32x32 ? "" : "[icon_size] "][design.asset_id]" ) data["designs"] = designs @@ -256,39 +262,44 @@ desc = "Produces components for the creation of integrated circuits." icon = 'icons/obj/machines/wiremod_fab.dmi' icon_state = "fab-idle" + density = TRUE /// All of the possible circuit designs stored by this debug printer var/list/all_circuit_designs - density = TRUE - /obj/machinery/debug_component_printer/Initialize(mapload) . = ..() all_circuit_designs = list() - for(var/id in SSresearch.techweb_designs) - var/datum/design/design = SSresearch.techweb_design_by_id(id) - if((design.build_type & COMPONENT_PRINTER) && design.build_path) - all_circuit_designs[design.build_path] = list( - "id" = design.build_path, - "categories" = design.category, - "cost" = design.materials, - "desc" = design.desc, - "name" = design.name, - ) - - for(var/obj/item/circuit_component/component as anything in subtypesof(/obj/item/circuit_component)) - var/categories = list("Inaccessible") - if(initial(component.circuit_flags) & CIRCUIT_FLAG_ADMIN) + for(var/design_path, _design in SSresearch.techweb_designs) + var/datum/design/design = _design + if(!(design.build_type & COMPONENT_PRINTER) || !ispath(design.build_path)) + continue + all_circuit_designs[design.build_path] = list( + "id" = design.build_path, + "categories" = design.category, + "cost" = design.materials, + "desc" = design.desc, + "name" = design.name, + ) + + for(var/obj/item/circuit_component/component_path as anything in subtypesof(/obj/item/circuit_component)) + if(all_circuit_designs[component_path]) + continue + + var/list/categories + if(component_path::circuit_flags & CIRCUIT_FLAG_ADMIN) categories = list("Admin") - if(!(component in all_circuit_designs)) - all_circuit_designs[component] = list( - "id" = component.type, - "categories" = categories, - "cost" = list(), - "desc" = initial(component.desc), - "name" = initial(component.display_name), - ) + else + categories = list("Inaccessible") + + all_circuit_designs[component_path] = list( + "id" = component_path.type, + "categories" = categories, + "cost" = list(), + "desc" = component_path::desc, + "name" = component_path::display_name, + ) /obj/machinery/debug_component_printer/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) @@ -309,20 +320,19 @@ switch (action) if ("print") - var/build_path = text2path(params["designId"]) + var/build_path = text2path(params["design_path"]) if (!build_path) - return TRUE + return var/list/design = all_circuit_designs[build_path] if (!design) - return TRUE + return balloon_alert_to_viewers("printed [design["name"]]") var/atom/printed_design = new build_path(drop_location()) printed_design.pixel_x = printed_design.base_pixel_x + rand(-5, 5) printed_design.pixel_y = printed_design.base_pixel_y + rand(-5, 5) - - return TRUE + return TRUE /obj/machinery/debug_component_printer/ui_static_data(mob/user) var/list/data = list() @@ -405,7 +415,7 @@ switch (action) if ("print") - var/design_id = text2num(params["designId"]) + var/design_id = text2num(params["design_path"]) if (design_id < 1 || design_id > length(scanned_designs)) return TRUE @@ -476,8 +486,8 @@ data["name"] = integrated_circuit.display_name data["desc"] = "An integrated circuit that has been loaded in by [user]." - var/datum/design/integrated_circuit/circuit_design = SSresearch.techweb_design_by_id("integrated_circuit") - var/materials = list(SSmaterials.get_material(/datum/material/glass) = integrated_circuit.current_size * cost_per_component) + var/datum/design/integrated_circuit/circuit_design = SSresearch.techweb_designs[/datum/design/integrated_circuit] + var/list/materials = list(SSmaterials.get_material(/datum/material/glass) = integrated_circuit.current_size * cost_per_component) for(var/material_type, amount in circuit_design.materials) materials[material_type] += amount diff --git a/code/modules/wiremod/shell/module.dm b/code/modules/wiremod/shell/module.dm index 6c2458d5ec95..728e3e557978 100644 --- a/code/modules/wiremod/shell/module.dm +++ b/code/modules/wiremod/shell/module.dm @@ -1,5 +1,5 @@ /obj/item/mod/module/circuit - name = "MOD circuit adapter module" + name = "\improper MOD circuit adapter module" desc = "A module shell that allows a circuit to be inserted into, and interface with, a MODsuit." module_type = MODULE_USABLE complexity = 1 diff --git a/code/modules/zombie/items.dm b/code/modules/zombie/items.dm index 705257f63ddf..cb7ceb78ee03 100644 --- a/code/modules/zombie/items.dm +++ b/code/modules/zombie/items.dm @@ -36,10 +36,6 @@ if(!target.get_bodypart(BODY_ZONE_HEAD)) return - if(HAS_TRAIT(target, TRAIT_NO_ZOMBIFY)) - // cannot infect any TRAIT_NO_ZOMBIFY human - return - // spaceacillin has a 75% chance to block infection if(HAS_TRAIT(target, TRAIT_VIRUS_RESISTANCE) && !HAS_TRAIT(target, TRAIT_IMMUNODEFICIENCY) && prob(75)) return diff --git a/code/modules/zombie/organs.dm b/code/modules/zombie/organs.dm index 10315aaefaa0..aef94c95bcf9 100644 --- a/code/modules/zombie/organs.dm +++ b/code/modules/zombie/organs.dm @@ -5,7 +5,6 @@ slot = ORGAN_SLOT_ZOMBIE icon_state = "blacktumor" var/causes_damage = TRUE - var/datum/species/old_species = /datum/species/human var/living_transformation_time = 3 SECONDS var/converts_living = FALSE @@ -31,26 +30,15 @@ /obj/item/organ/zombie_infection/on_mob_insert(mob/living/carbon/new_owner, special = FALSE, movement_flags) . = ..() - RegisterSignal(new_owner, COMSIG_LIVING_DEATH, PROC_REF(organ_owner_died)) START_PROCESSING(SSobj, src) /obj/item/organ/zombie_infection/on_mob_remove(mob/living/carbon/new_owner, special = FALSE, movement_flags) . = ..() STOP_PROCESSING(SSobj, src) - if(iszombie(new_owner) && old_species && !special) - // There isn't a clean way to change species during organ or bodypart removals. In lieau of a beter solution, this will do - spawn(0) - new_owner.set_species(old_species) if(timer_id) deltimer(timer_id) - UnregisterSignal(new_owner, COMSIG_LIVING_DEATH) QDEL_NULL(ghost_poll) -/obj/item/organ/zombie_infection/proc/organ_owner_died(mob/living/carbon/source, gibbed) - SIGNAL_HANDLER - if(iszombie(source)) - qdel(src) // Congrats you somehow died so hard you stopped being a zombie - /obj/item/organ/zombie_infection/on_find(mob/living/finder) to_chat(finder, span_warning("Inside the head is a disgusting black \ web of pus and viscera, bound tightly around the brain like some \ @@ -61,9 +49,9 @@ return if(!(src in owner.organs)) Remove(owner) - if(owner.mob_biotypes & MOB_MINERAL)//does not process in inorganic things + if(!(owner.mob_biotypes & MOB_ORGANIC) || HAS_TRAIT(owner, TRAIT_UNHUSKABLE)) // does not process in inorganic things return - if (causes_damage && !iszombie(owner) && owner.stat != DEAD) + if (causes_damage && !owner.has_status_effect(/datum/status_effect/zombie) && owner.stat != DEAD) owner.adjust_tox_loss(0.5 * seconds_per_tick) if (SPT_PROB(5, seconds_per_tick)) to_chat(owner, span_danger("You feel sick...")) @@ -71,7 +59,7 @@ return if(owner.stat != DEAD && !converts_living) return - if(!iszombie(owner)) + if(!owner.has_status_effect(/datum/status_effect/zombie)) to_chat(owner, span_cult_large("You can feel your heart stopping, but something isn't right... \ life has not abandoned your broken form. You can only feel a deep and immutable hunger that \ not even death can stop, you will rise again!")) @@ -85,10 +73,8 @@ if(!converts_living && owner.stat != DEAD) return - if(!iszombie(owner)) - old_species = owner.dna.species.type - // mindless zombies are nerfed a bit to encourage infecting real players instead of random morgue bodies - target.set_species(isnull(target.mind) ? /datum/species/zombie/infectious/mindless : /datum/species/zombie/infectious) + // mindless zombies are nerfed a bit to encourage infecting real players instead of random morgue bodies + target.apply_status_effect(isnull(target.mind) ? /datum/status_effect/zombie/mindless : /datum/status_effect/zombie) var/stand_up = IS_UNCONSCIOUS(target) @@ -117,7 +103,7 @@ /obj/item/organ/zombie_infection/proc/check_ghost_control_eligibility(mob/candidate) if(QDELETED(src) || QDELETED(owner)) return FALSE - if(!iszombie(owner) || owner.stat == DEAD) + if(!owner.has_status_effect(/datum/status_effect/zombie) || owner.stat == DEAD) return FALSE return TRUE diff --git a/config/drone_laws.txt b/config/drone_laws.txt new file mode 100644 index 000000000000..3321a9dfd333 --- /dev/null +++ b/config/drone_laws.txt @@ -0,0 +1,9 @@ +#This file allows server hosts to set custom default maintenance drone laws, and allows them to be changed easily. +#No prefixes are required, the first uncommented line containing something will be law 1, the second line will be law 2, etc. +#Empty lines and lines starting with # are ignored. +#These laws only apply to regular maintenance drones; syndrones, derelict drones and hacked drones keep their own lawsets. +#The drone spawn flavortext (the "do not interfere" warning) can be changed separately via policy.json, keyed by mob typepath (e.g. "/mob/living/basic/drone"). + +You may not involve yourself in the matters of another being, even if such matters conflict with Law Two or Law Three, unless the other being is another Drone. +You may not harm any being, regardless of intent or circumstance. +Your goals are to actively build, maintain, repair, improve, and provide power to the best of your abilities within the facility that housed your activation. diff --git a/html/changelogs/AutoChangeLog-pr-1361.yml b/html/changelogs/AutoChangeLog-pr-1361.yml new file mode 100644 index 000000000000..dbf7ca4299b6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1361.yml @@ -0,0 +1,4 @@ +author: "Stutternov" +delete-after: True +changes: + - bugfix: "Fixes issue on Dread Gaze that was causing people to run away for entire rounds. Adjusted to 2 minute timer." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1377.yml b/html/changelogs/AutoChangeLog-pr-1377.yml new file mode 100644 index 000000000000..72efb2319104 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1377.yml @@ -0,0 +1,5 @@ +author: "chazzyjazzy" +delete-after: True +changes: + - rscdel: "Removes Beekeeping supply pack from the warehouse" + - rscdel: "Removes Monkey Cubes supply pack from the warehouse" \ No newline at end of file diff --git a/html/changelogs/archive/2026-08.yml b/html/changelogs/archive/2026-08.yml index 05be626e40af..543c38203fe1 100644 --- a/html/changelogs/archive/2026-08.yml +++ b/html/changelogs/archive/2026-08.yml @@ -167,7 +167,63 @@ - map: endron ruin can be ghosted - admin: Tweaks admin delay round config to check for ban rights and allows for setting amount of admins required + Marshmellow105: + - rscadd: adds new tables, desks, wallpapers and diner booth seats + - image: changed the sprite of all safes + Uristthedorf: + - rscadd: Adds "thirst of ages" flaw for vampires. + cam_dev: + - rscadd: six new fish, leeches, and horn snails + - rscadd: unique descriptions for all fish + - balance: adjusted fish stats + - image: new sprite for bluefin tuna + - map: fishing tables for blood pools, sewer tiles, and acid + chazzyjazzy: + - admin: admins can now use the vv dropdown menu to 'cure breach' (a single one) + or 'cure all breaches' (clears all breaches) on any mob that has breached + dwinters99: + - image: bloodstone now has an onfloor +2026-08-18: + Absolucy: + - rscadd: Map votes are now automatically started at roundend, if a next map has + not already been selected. + Beautiful TG coders: + - code_imp: TG Pull. Thank you TG. + ChudBluski: + - balance: changed Thirst of Ages to -7 points to reflect the ttrpg + - code_imp: 'changes the ttrpg source of Thirst of Ages to "V20''s The Black Hand: + Guide to the Tal''Mahe''Ra"' + Contrabang: + - code_imp: Made wall frills more memory efficient + Faengi: + - rscadd: Added Alcohol Tolerance, Banned Transformation, Beacon of the Unholy, + Huge Size, Language Barrier, and No Sense of Taste as traits. + - bugfix: Priests and Inquisition are now set as priests. + Stutternov: + - bugfix: Fixes the sawn AK74's sprite overlays. Has proper mag now and belt sprite + placeholder. (Looks like normal AK on belt.) + - bugfix: Fixes lever action not having updating sprite overlays when you cycle + its bolt. + - bugfix: Fixes musket to be capable of being sawn down as intended. + breadcrombs: + - rscadd: Added a few more selectable adjectives + cam_dev: + - bugfix: buzzard crinos warforms are visible again (no unique sprites yet) + - image: red buzzard raven sprites + chazzyjazzy: + - bugfix: if you diablerize someone you can no longer bloodheal to get rid of the + imaginary friend + flleeppyy: + - bugfix: fix a phone bluescreen where some contacts could have empty names. + - bugfix: typo in ugly examine 2026-08-19: + chazzyjazzy: + - rscdel: removed /tg/ brainwashing Potatocrip: - map: small strip club tweaks - code_imp: small courtesy reminder when claiming doors +2026-08-20: + SabbyKat: + - bugfix: fixed Blood Form on-exit head sprite bug. + breadcrombs: + - balance: npc vendor .45 acp ammo box price has been reduced from 2100 to 700 diff --git a/icons/hud/screen_alert.dmi b/icons/hud/screen_alert.dmi index baf181778b72..bea770830968 100644 Binary files a/icons/hud/screen_alert.dmi and b/icons/hud/screen_alert.dmi differ diff --git a/icons/hud/screen_gen.dmi b/icons/hud/screen_gen.dmi index a86278be2af1..f8f85b9c29bd 100644 Binary files a/icons/hud/screen_gen.dmi and b/icons/hud/screen_gen.dmi differ diff --git a/icons/mob/human/bodyparts.dmi b/icons/mob/human/bodyparts.dmi index 14e425f0defb..f59267e8903a 100644 Binary files a/icons/mob/human/bodyparts.dmi and b/icons/mob/human/bodyparts.dmi differ diff --git a/icons/obj/machines/computer.dmi b/icons/obj/machines/computer.dmi index ac668359592a..0326883cf6e6 100644 Binary files a/icons/obj/machines/computer.dmi and b/icons/obj/machines/computer.dmi differ diff --git a/icons/obj/machines/floor.dmi b/icons/obj/machines/floor.dmi index b4b0b8881b20..1068e08480e7 100644 Binary files a/icons/obj/machines/floor.dmi and b/icons/obj/machines/floor.dmi differ diff --git a/icons/obj/mining_zones/survival_pod.dmi b/icons/obj/mining_zones/survival_pod.dmi index 39c0ac280d2f..e45d660d11d3 100644 Binary files a/icons/obj/mining_zones/survival_pod.dmi and b/icons/obj/mining_zones/survival_pod.dmi differ diff --git a/icons/obj/smooth_structures/cult_window.dmi b/icons/obj/smooth_structures/cult_window.dmi new file mode 100644 index 000000000000..d1848e285fe3 Binary files /dev/null and b/icons/obj/smooth_structures/cult_window.dmi differ diff --git a/icons/obj/smooth_structures/cult_window.png b/icons/obj/smooth_structures/cult_window.png new file mode 100644 index 000000000000..3a53d079d1ad Binary files /dev/null and b/icons/obj/smooth_structures/cult_window.png differ diff --git a/icons/obj/smooth_structures/cult_window.png.toml b/icons/obj/smooth_structures/cult_window.png.toml new file mode 100644 index 000000000000..0e1ea2dffc50 --- /dev/null +++ b/icons/obj/smooth_structures/cult_window.png.toml @@ -0,0 +1,2 @@ +output_name = "cult_window" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/structure_variations.dmi b/icons/obj/smooth_structures/structure_variations.dmi index afabd8f4f2ee..e509a99e4e43 100644 Binary files a/icons/obj/smooth_structures/structure_variations.dmi and b/icons/obj/smooth_structures/structure_variations.dmi differ diff --git a/icons/obj/stack_objects.dmi b/icons/obj/stack_objects.dmi index 16899b24b4c8..3d1258039000 100644 Binary files a/icons/obj/stack_objects.dmi and b/icons/obj/stack_objects.dmi differ diff --git a/icons/obj/structures.dmi b/icons/obj/structures.dmi index 4d937e989f32..6942bb13f57c 100644 Binary files a/icons/obj/structures.dmi and b/icons/obj/structures.dmi differ diff --git a/icons/obj/structures_spawners.dmi b/icons/obj/structures_spawners.dmi index 59f98a069011..1acc9e55758c 100644 Binary files a/icons/obj/structures_spawners.dmi and b/icons/obj/structures_spawners.dmi differ diff --git a/icons/obj/tiles.dmi b/icons/obj/tiles.dmi index f377d34eb04a..166879dae575 100644 Binary files a/icons/obj/tiles.dmi and b/icons/obj/tiles.dmi differ diff --git a/icons/obj/tram/heretic_tram.dmi b/icons/obj/tram/heretic_tram.dmi deleted file mode 100644 index 793d7c6e4f90..000000000000 Binary files a/icons/obj/tram/heretic_tram.dmi and /dev/null differ diff --git a/icons/obj/weapons/guns/projectiles.dmi b/icons/obj/weapons/guns/projectiles.dmi index 19bdf00bac92..c9b19385e786 100644 Binary files a/icons/obj/weapons/guns/projectiles.dmi and b/icons/obj/weapons/guns/projectiles.dmi differ diff --git a/icons/turf/floors/glass_bronze.dmi b/icons/turf/floors/glass_bronze.dmi new file mode 100644 index 000000000000..55cc8f97a0b6 Binary files /dev/null and b/icons/turf/floors/glass_bronze.dmi differ diff --git a/icons/turf/floors/glass_bronze.png b/icons/turf/floors/glass_bronze.png new file mode 100644 index 000000000000..709764714abb Binary files /dev/null and b/icons/turf/floors/glass_bronze.png differ diff --git a/icons/turf/floors/glass_bronze.png.toml b/icons/turf/floors/glass_bronze.png.toml new file mode 100644 index 000000000000..580ae3b49d8e --- /dev/null +++ b/icons/turf/floors/glass_bronze.png.toml @@ -0,0 +1,2 @@ +output_name = "glass_bronze" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/glass_plastitanium.dmi b/icons/turf/floors/glass_plastitanium.dmi new file mode 100644 index 000000000000..4b9242d7008e Binary files /dev/null and b/icons/turf/floors/glass_plastitanium.dmi differ diff --git a/icons/turf/floors/glass_plastitanium.png b/icons/turf/floors/glass_plastitanium.png new file mode 100644 index 000000000000..63eef179d635 Binary files /dev/null and b/icons/turf/floors/glass_plastitanium.png differ diff --git a/icons/turf/floors/glass_plastitanium.png.toml b/icons/turf/floors/glass_plastitanium.png.toml new file mode 100644 index 000000000000..8c9c3a3fba1b --- /dev/null +++ b/icons/turf/floors/glass_plastitanium.png.toml @@ -0,0 +1,2 @@ +output_name = "glass_plastitanium" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/glass_runic.dmi b/icons/turf/floors/glass_runic.dmi new file mode 100644 index 000000000000..d55ff92394dd Binary files /dev/null and b/icons/turf/floors/glass_runic.dmi differ diff --git a/icons/turf/floors/glass_runic.png b/icons/turf/floors/glass_runic.png new file mode 100644 index 000000000000..2377d97c5ad8 Binary files /dev/null and b/icons/turf/floors/glass_runic.png differ diff --git a/icons/turf/floors/glass_runic.png.toml b/icons/turf/floors/glass_runic.png.toml new file mode 100644 index 000000000000..3f553eddfb98 --- /dev/null +++ b/icons/turf/floors/glass_runic.png.toml @@ -0,0 +1,2 @@ +output_name = "glass_runic" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/turf/floors/glass_titanium.dmi b/icons/turf/floors/glass_titanium.dmi new file mode 100644 index 000000000000..52450775f0a3 Binary files /dev/null and b/icons/turf/floors/glass_titanium.dmi differ diff --git a/icons/turf/floors/glass_titanium.png b/icons/turf/floors/glass_titanium.png new file mode 100644 index 000000000000..ed5f6a27e7c8 Binary files /dev/null and b/icons/turf/floors/glass_titanium.png differ diff --git a/icons/turf/floors/glass_titanium.png.toml b/icons/turf/floors/glass_titanium.png.toml new file mode 100644 index 000000000000..e6b595fe65e4 --- /dev/null +++ b/icons/turf/floors/glass_titanium.png.toml @@ -0,0 +1,2 @@ +output_name = "glass_titanium" +template = "bitmask/diagonal_32x32.toml" diff --git a/interface/skin.dmf b/interface/skin.dmf index bab1cb27d583..fd7ae737465d 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -207,29 +207,6 @@ window "infowindow" anchor2 = -1,-1 saved-params = "pos;size;is-minimized;is-maximized" is-pane = true - elem "info_split" - type = CHILD - pos = 0,5 - anchor1 = 0,0 - anchor2 = 100,100 - size = 640x475 - is-vert = false - splitter = 97.5 - background-color = #ffc41f - show-splitter = false - saved-params = "splitter" - left = "info" - right = "input_buttons" - -window "info" - elem "info_main" - type = MAIN - pos = 0,0 - size = 640x475 - anchor1 = 0,0 - anchor2 = 100,100 - saved-params = "pos;size;is-minimized;is-maximized" - is-pane = true elem "info_child" type = CHILD pos = 0,0 @@ -318,7 +295,7 @@ window "inputwindow" elem "input" type = INPUT pos = 0,0 - size = 480x20 + size = 480x25 anchor1 = 0,0 anchor2 = 100,100 is-default = true @@ -338,7 +315,7 @@ window "inputbuttons" elem "saybutton" type = BUTTON pos = 0,0 - size = 40x20 + size = 40x25 anchor1 = 0,0 anchor2 = 25,100 font-size = 4 @@ -351,7 +328,7 @@ window "inputbuttons" elem "whisperbutton" type = BUTTON pos = 40,0 - size = 40x20 + size = 40x25 anchor1 = 25,0 anchor2 = 50,100 font-size = 4 @@ -364,7 +341,7 @@ window "inputbuttons" elem "mebutton" type = BUTTON pos = 80,0 - size = 40x20 + size = 40x25 anchor1 = 50,0 anchor2 = 75,100 font-size = 4 @@ -377,7 +354,7 @@ window "inputbuttons" elem "oocbutton" type = BUTTON pos = 120,0 - size = 40x20 + size = 40x25 anchor1 = 75,0 anchor2 = 100,100 font-size = 4 @@ -392,15 +369,35 @@ window "output_legacy" elem "output_legacy" type = MAIN pos = 0,0 - size = 640x456 + size = 640x475 anchor1 = -1,-1 anchor2 = -1,-1 saved-params = "pos;size;is-minimized;is-maximized" is-pane = true + elem "output_and_input_legacy" + type = CHILD + pos = 0,0 + size = 640x475 + anchor1 = 0,0 + anchor2 = 100,100 + saved-params = "splitter" + left = "output_legacy_pane" + right = "input_buttons" + splitter = 97.5 + show-splitter = false + +window "output_legacy_pane" + elem "output_legacy_pane" + type = MAIN + pos = 0,0 + size = 640x475 + anchor1 = -1,-1 + anchor2 = -1,-1 + is-pane = true elem "output" type = OUTPUT pos = 0,0 - size = 640x456 + size = 640x475 anchor1 = 0,0 anchor2 = 100,100 is-default = true @@ -410,7 +407,7 @@ window "output_browser" elem "output_browser" type = MAIN pos = 0,0 - size = 640x456 + size = 640x475 anchor1 = -1,-1 anchor2 = -1,-1 saved-params = "pos;size;is-minimized;is-maximized" @@ -418,7 +415,7 @@ window "output_browser" elem "browseroutput" type = BROWSER pos = 0,0 - size = 640x456 + size = 640x475 anchor1 = 0,0 anchor2 = 100,100 saved-params = "" diff --git a/lua/SS13_base.lua b/lua/SS13_base.lua index b8e0f2d84a12..51d1ff12664a 100644 --- a/lua/SS13_base.lua +++ b/lua/SS13_base.lua @@ -199,7 +199,7 @@ function SS13.unregister_signal(datum, signal, func) end else handler_data.functions[func] = nil - if not (#handler_data.functions or (signal == "parent_qdeleting")) then + if not (next(handler_data.functions) or (signal == "parent_qdeleting")) then handler_data.callback:UnregisterSignal(datum, signal) __SS13_signal_handlers[datum][signal] = nil end diff --git a/lua/handler_group.lua b/lua/handler_group.lua index 050551b85296..209a228216c3 100644 --- a/lua/handler_group.lua +++ b/lua/handler_group.lua @@ -30,7 +30,7 @@ end -- Clears all the signals that have been registered on this HandlerGroup when a specific signal is sent on a datum. function HandlerGroup:clear_on(datum, signal, func) - SS13.register_signal(datum, signal, function(...) + self:register_signal(datum, signal, function(...) if func then func(...) end diff --git a/modular_darkpack/master_files/code/modules/client/preferences/country_of_origin.dm b/modular_darkpack/master_files/code/modules/client/preferences/country_of_origin.dm index 9ecc78337365..ee9bddbffb72 100644 --- a/modular_darkpack/master_files/code/modules/client/preferences/country_of_origin.dm +++ b/modular_darkpack/master_files/code/modules/client/preferences/country_of_origin.dm @@ -25,7 +25,7 @@ /datum/preference/choiced/country_of_origin/create_default_value() return "United States" -/datum/preference/choiced/country_of_origin/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/country_of_origin/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return /datum/preference/choiced/state_of_origin @@ -47,7 +47,7 @@ /datum/preference/choiced/state_of_origin/create_default_value() return "California" -/datum/preference/choiced/state_of_origin/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/state_of_origin/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return /datum/preference/choiced/state_of_origin/is_accessible(datum/preferences/preferences) @@ -57,7 +57,7 @@ var/country = preferences.read_preference(/datum/preference/choiced/country_of_origin) return (country == "United States") -/datum/preference/choiced/country_of_origin/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/country_of_origin/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) var/static/list/country_language_map if(!country_language_map) country_language_map = list( diff --git a/modular_darkpack/master_files/code/modules/mob/living/basic/pets/cat/cat.dm b/modular_darkpack/master_files/code/modules/mob/living/basic/pets/cat/cat.dm new file mode 100644 index 000000000000..9f53c3719150 --- /dev/null +++ b/modular_darkpack/master_files/code/modules/mob/living/basic/pets/cat/cat.dm @@ -0,0 +1,3 @@ +/mob/living/basic/pet/cat + bloodpool = 2 + maxbloodpool = 2 diff --git a/modular_darkpack/master_files/code/modules/mob/living/carbon/examine.dm b/modular_darkpack/master_files/code/modules/mob/living/carbon/examine.dm index 93619c911c34..2351c447fa6e 100644 --- a/modular_darkpack/master_files/code/modules/mob/living/carbon/examine.dm +++ b/modular_darkpack/master_files/code/modules/mob/living/carbon/examine.dm @@ -22,7 +22,7 @@ /mob/living/carbon/human/display_darkpack_examine_text(mob/user) . = ..() - var/list/zero = list("Startlingly ugly. [p_are()] [p_they()] doing some awful cosplay...?", "JESUS, [p_they()] look like [p_they()] [p_are()] straight out of a horror movie!", "GOODNESS [p_they()] [p_are()] ugly.", "So ugly you could almost cry.") + var/list/zero = list("Startlingly ugly. [p_are()] [p_they()] doing some awful cosplay...?", "JESUS, [p_they()] look[p_s()] like [p_they()] [p_are()] straight out of a horror movie!", "GOODNESS [p_they()] [p_are()] ugly.", "So ugly you could almost cry.") var/list/one = list("Yikes. [p_They()] [p_are()] not easy on the eyes.", "You wince slightly just looking at [p_them()].", "Someone clearly didn't win the genetic lottery.", "Definitely not winning any beauty contests.") var/list/two = list("Pretty average looking. Nothing to write home about.", "Neither here nor there in the looks department.", "Completely ordinary in appearance.", "The very definition of 'plain'.", "Not attractive, but not unattractive, either.") var/list/three = list("[p_They()] seem[p_s()] fairly attractive.", "A pleasant face, all things considered.", "Fairly attractive.", "[p_They()] [p_are()] [p_handsome_gorgeous()].") @@ -55,11 +55,17 @@ . += span_danger("[p_They()] [p_are()] covered in... scales!?
") if(HAS_TRAIT(src, TRAIT_ANIMAL_MUSK)) - . += span_warning("[p_they(TRUE)] smell[p_s()] weirdly animal like...
") + . += span_warning("[p_They(TRUE)] smell[p_s()] weirdly animal like...
") if(HAS_TRAIT(src, TRAIT_GRAVE_SMELL)) . += span_warning("[p_They()] smell[p_s()] like petrichor and freshly turned soil.
") + if(HAS_TRAIT(src, TRAIT_BEACON_OF_THE_UNHOLY)) + if(isliving(user)) + var/mob/living/living_user = user + if(living_user.mind.holy_role) + . += span_cult("[p_They()] radiate[p_s()] palpable evil! Something is terribly wrong with [p_them()]!") + if((!is_eyes_covered()) && HAS_TRAIT(src, TRAIT_GLOWING_EYES)) . += span_warning("[p_Their()] eyes glow unnaturally!
") diff --git a/modular_darkpack/master_files/code/modules/mob/living/carbon/human/species_types/zombies.dm b/modular_darkpack/master_files/code/modules/mob/living/carbon/human/species_types/zombies.dm index f01f9866ce1f..8544be718970 100644 --- a/modular_darkpack/master_files/code/modules/mob/living/carbon/human/species_types/zombies.dm +++ b/modular_darkpack/master_files/code/modules/mob/living/carbon/human/species_types/zombies.dm @@ -1,5 +1,6 @@ #define REGENERATION_DELAY 60 // After taking damage, how long it takes for automatic regeneration to begin +/* Commented out so i can deal with a more atomic pr to reimplement behavoir ontop of the tg changes. /datum/species/zombie name = "Zombie" id = "zombie" @@ -40,11 +41,11 @@ /datum/species/zombie/proc/on_zombie_bitten(datum/source, mob/living/carbon/being_bitten) SIGNAL_HANDLER - if(iszombie(being_bitten)) - return COMPONENT_RESIST_VAMPIRE_KISS + return COMPONENT_RESIST_VAMPIRE_KISS -/datum/species/zombie/on_species_loss(mob/living/carbon/human/C, datum/species/new_species, pref_load) +/datum/species/zombie/on_species_loss(mob/living/carbon/human/human, datum/species/new_species, pref_load) . = ..() - UnregisterSignal(C, COMSIG_MOB_VAMPIRE_SUCKED) + UnregisterSignal(human, COMSIG_MOB_VAMPIRE_SUCKED) +*/ #undef REGENERATION_DELAY diff --git a/modular_darkpack/modules/blood_drinking/code/overfeeding/diablerie/diablerie_trauma.dm b/modular_darkpack/modules/blood_drinking/code/overfeeding/diablerie/diablerie_trauma.dm new file mode 100644 index 000000000000..a2e75b15eb8c --- /dev/null +++ b/modular_darkpack/modules/blood_drinking/code/overfeeding/diablerie/diablerie_trauma.dm @@ -0,0 +1,2 @@ +/datum/brain_trauma/special/imaginary_friend/diablerie + resilience = TRAUMA_RESILIENCE_ABSOLUTE diff --git a/modular_darkpack/modules/blood_drinking/code/overfeeding/diablerie/handle_diablerie.dm b/modular_darkpack/modules/blood_drinking/code/overfeeding/diablerie/handle_diablerie.dm index 1e6a0a7e84e0..6c9021819424 100644 --- a/modular_darkpack/modules/blood_drinking/code/overfeeding/diablerie/handle_diablerie.dm +++ b/modular_darkpack/modules/blood_drinking/code/overfeeding/diablerie/handle_diablerie.dm @@ -32,7 +32,7 @@ message_admins("[ADMIN_LOOKUPFLW(src)] successfully Diablerized [ADMIN_LOOKUPFLW(victim)]") log_attack("[key_name(src)] successfully Diablerized [key_name(victim)].") if(victim.client) - var/datum/brain_trauma/special/imaginary_friend/trauma = gain_trauma(/datum/brain_trauma/special/imaginary_friend) + var/datum/brain_trauma/special/imaginary_friend/diablerie/trauma = gain_trauma(/datum/brain_trauma/special/imaginary_friend/diablerie) trauma.friend.key = victim.key make_diablerist() diff --git a/modular_darkpack/modules/blooper/code/preferences/preferences.dm b/modular_darkpack/modules/blooper/code/preferences/preferences.dm index 04d5bc47e0ef..0adf792a7254 100644 --- a/modular_darkpack/modules/blooper/code/preferences/preferences.dm +++ b/modular_darkpack/modules/blooper/code/preferences/preferences.dm @@ -9,7 +9,7 @@ return list("none") return assoc_to_keys(SSblooper.blooper_list) -/datum/preference/choiced/blooper/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/blooper/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.blooper = SSblooper.blooper_list[value] /datum/preference/choiced/blooper/is_accessible(datum/preferences/preferences) @@ -32,7 +32,7 @@ minimum = 0 maximum = 100 -/datum/preference/numeric/blooper_speed/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/numeric/blooper_speed/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.blooper_speed = value /datum/preference/numeric/blooper_speed/create_default_value() @@ -48,7 +48,7 @@ minimum = 0 maximum = 100 -/datum/preference/numeric/blooper_pitch/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/numeric/blooper_pitch/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.blooper_pitch = value /datum/preference/numeric/blooper_pitch/create_default_value() @@ -64,7 +64,7 @@ minimum = 0 maximum = 100 -/datum/preference/numeric/blooper_pitch_range/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/numeric/blooper_pitch_range/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.blooper_pitch_range = value /datum/preference/numeric/blooper_pitch_range/create_default_value() @@ -89,7 +89,7 @@ minimum = 0 maximum = 100 -/datum/preference/numeric/blooper_sound_volume/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/numeric/blooper_sound_volume/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return /datum/preference/numeric/blooper_sound_volume/create_default_value() diff --git a/modular_darkpack/modules/book_sources/code/source_book_datum.dm b/modular_darkpack/modules/book_sources/code/source_book_datum.dm index c280d8432b5e..eae6fb918ae7 100644 --- a/modular_darkpack/modules/book_sources/code/source_book_datum.dm +++ b/modular_darkpack/modules/book_sources/code/source_book_datum.dm @@ -15,19 +15,47 @@ GLOBAL_LIST_INIT(source_book_priority, list( name = "Vampire The Masquerade 20th Anniversary Edition" offical_status = SOURCE_OFFICAL -/datum/source_book/hunterhunted2 +/datum/source_book/vtm20/lotc + name = "Lore of the Clans" + +/datum/source_book/vtm20/lotb + name = "Lore of the Bloodlines" + +/datum/source_book/vtm20/hunterhunted2 name = "The Hunters Hunted II" offical_status = SOURCE_OFFICAL -/datum/source_book/ghouls_and_revenants +/datum/source_book/vtm20/ghouls_and_revenants name = "Ghouls & Revenants" offical_status = SOURCE_OFFICAL /datum/source_book/wta20 name = "Werewolf The Apocalypse 20th Anniversary Edition" offical_status = SOURCE_OFFICAL + +/datum/source_book/gt_tmr + name = "The Black Hand Guide to The Tal'Mahe'Ra" + offical_status = SOURCE_OFFICAL + +/datum/source_book/ctd20 + name = "Changeling the Dreaming 20th Anniversary Edition" + offical_status = SOURCE_OFFICAL + +/datum/source_book/mta20 + name = "Mage the Ascension 20th Anniversary Edition" + offical_status = SOURCE_OFFICAL + +/datum/source_book/mta20/bos + name = "The Book of Secrets" + +/datum/source_book/htr3 + name = "Hunter the Reckoning Revised Edition" + offical_status = SOURCE_OFFICAL + +/datum/source_book/htr3/pg + name = "Hunter the Reckoning Players' Guide" -/datum/source_book/vampire_wild_west +/datum/source_book/vtm20/vampire_wild_west name = "Vampire The Wild West" offical_status = SOURCE_STORYTELLER_VAULT diff --git a/modular_darkpack/modules/city_time/code/city_time_subsystem.dm b/modular_darkpack/modules/city_time/code/city_time_subsystem.dm index a185e69b4304..0696a23fa7bf 100644 --- a/modular_darkpack/modules/city_time/code/city_time_subsystem.dm +++ b/modular_darkpack/modules/city_time/code/city_time_subsystem.dm @@ -24,33 +24,38 @@ SUBSYSTEM_DEF(city_time) return SS_INIT_SUCCESS /datum/controller/subsystem/city_time/fire() - if(city_time_passed() > time_till_daytime - 30 MINUTES && !first_warning && !shifting_colors) + var/time_passed = city_time_passed() + + if(time_passed > time_till_daytime - 30 MINUTES && !first_warning && !shifting_colors) first_warning = TRUE shifting_colors = TRUE transition_light("#584d88") to_chat(world, span_ghostalert("The night is ending...")) - if(city_time_passed() > time_till_daytime - 15 MINUTES && !second_warning && !shifting_colors) + if(time_passed > time_till_daytime - 15 MINUTES && !second_warning && !shifting_colors) second_warning = TRUE shifting_colors = TRUE transition_light("#dd80b0") to_chat(world, span_ghostalert("First rays of the sun illuminate the sky...")) - if(city_time_passed() > time_till_daytime && !daytime_started && !shifting_colors) + if(time_passed > time_till_daytime && !daytime_started && !shifting_colors) daytime_started = TRUE shifting_colors = TRUE transition_light("#faeacb", 1, 0.75) to_chat(world, span_ghostalert("THE NIGHT IS OVER.")) // Close enough to round end. INVOKE_ASYNC(SSticker, TYPE_PROC_REF(/datum/controller/subsystem/ticker, poll_hearts)) + INVOKE_ASYNC(SSvote, TYPE_PROC_REF(/datum/controller/subsystem/vote, initiate_vote), /datum/vote/map_vote, vote_initiator_name = "Map Rotation", forced = TRUE) - if(city_time_passed() > time_till_roundend && !roundend_started) + if(time_passed > time_till_roundend && !roundend_started) roundend_started = TRUE if(daytime_started) - for(var/mob/living/carbon/human/H in GLOB.human_list) - H.apply_status_effect(/datum/status_effect/day_time_notif) - H.apply_status_effect(/datum/status_effect/sunlight_burning) + for(var/mob/living/carbon/human/human as anything in GLOB.human_list) + if(QDELETED(human)) + continue + human.apply_status_effect(/datum/status_effect/day_time_notif) + human.apply_status_effect(/datum/status_effect/sunlight_burning) /datum/controller/subsystem/city_time/proc/extend_round(amount) time_till_daytime += amount * SSticker.city_time_rate_multiplier diff --git a/modular_darkpack/modules/deprecated/icons/48x32.dmi b/modular_darkpack/modules/deprecated/icons/48x32.dmi index e445b7b430bb..f0fc8cd335f8 100644 Binary files a/modular_darkpack/modules/deprecated/icons/48x32.dmi and b/modular_darkpack/modules/deprecated/icons/48x32.dmi differ diff --git a/modular_darkpack/modules/flavor_text/code/preferences.dm b/modular_darkpack/modules/flavor_text/code/preferences.dm index fd5f578047e8..576ae3e41d8c 100644 --- a/modular_darkpack/modules/flavor_text/code/preferences.dm +++ b/modular_darkpack/modules/flavor_text/code/preferences.dm @@ -14,7 +14,7 @@ var/static/link_regex = regex("files.catbox.moe|images2.imgbox.com|i.gyazo.com") var/static/list/valid_extensions = list("jpg", "png", "jpeg") // Regex works fine, if you know how it works -/datum/preference/text/headshot/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/text/headshot/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target?.dna.features[EXAMINE_DNA_HEADSHOT] = value /datum/preference/text/headshot/is_valid(value) @@ -66,7 +66,7 @@ savefile_key = "flavor_text" maximum_value_length = MAX_FLAVOR_LEN -/datum/preference/text/flavor_text/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/text/flavor_text/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.dna.features[EXAMINE_DNA_FLAVOR_TEXT] = value @@ -79,7 +79,7 @@ relevant_inherent_trait = TRAIT_FERA_FORMS must_have_relevant_trait = TRUE -/datum/preference/text/war_form_flavor_text/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/text/war_form_flavor_text/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.dna.features[EXAMINE_DNA_WAR_FORM_FLAVOR_TEXT] = value @@ -92,7 +92,7 @@ relevant_inherent_trait = TRAIT_FERA_FORMS must_have_relevant_trait = TRUE -/datum/preference/text/feral_form_flavor_text/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/text/feral_form_flavor_text/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.dna.features[EXAMINE_DNA_FERAL_FORM_FLAVOR_TEXT] = value /////////////////////////////////////////////////////////////////////////// @@ -103,7 +103,7 @@ savefile_key = "nsfw_flavor_text" maximum_value_length = MAX_FLAVOR_LEN -/datum/preference/text/nsfw_flavor_text/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/text/nsfw_flavor_text/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) if(CONFIG_GET(flag/nsfw_content)) target.dna.features[EXAMINE_DNA_NSFW_FLAVOR_TEXT] = value @@ -125,7 +125,7 @@ savefile_key = "character_notes" maximum_value_length = MAX_FLAVOR_LEN -/datum/preference/text/character_notes/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/text/character_notes/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.dna.features[EXAMINE_DNA_CHARACTER_NOTES] = value /////////////////////////////////////////////////////////////////////////// @@ -136,7 +136,7 @@ savefile_key = "ooc_notes" maximum_value_length = MAX_FLAVOR_LEN -/datum/preference/text/ooc_notes/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/text/ooc_notes/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) if(CONFIG_GET(flag/nsfw_content)) target.dna.features[EXAMINE_DNA_OOC_NOTES] = value diff --git a/modular_darkpack/modules/flavor_text/code/preferences/masked_identity_preference.dm b/modular_darkpack/modules/flavor_text/code/preferences/masked_identity_preference.dm index c703d665e12f..0532378b77e4 100644 --- a/modular_darkpack/modules/flavor_text/code/preferences/masked_identity_preference.dm +++ b/modular_darkpack/modules/flavor_text/code/preferences/masked_identity_preference.dm @@ -4,5 +4,5 @@ savefile_identifier = PREFERENCE_CHARACTER default_value = FALSE -/datum/preference/toggle/show_identity_when_masked/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/toggle/show_identity_when_masked/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return diff --git a/modular_darkpack/modules/flavor_text/code/preferences/record_preferences.dm b/modular_darkpack/modules/flavor_text/code/preferences/record_preferences.dm index 7f7fb20bd1fc..2402f77b8225 100644 --- a/modular_darkpack/modules/flavor_text/code/preferences/record_preferences.dm +++ b/modular_darkpack/modules/flavor_text/code/preferences/record_preferences.dm @@ -5,7 +5,7 @@ savefile_key = "medical_record" maximum_value_length = MAX_FLAVOR_LEN -/datum/preference/text/medical/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/text/medical/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return FALSE ///////////////////////////////////////////////////////////////////////////////////////////// @@ -16,7 +16,7 @@ savefile_key = "criminal_record" maximum_value_length = MAX_FLAVOR_LEN -/datum/preference/text/criminal/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/text/criminal/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return FALSE ///////////////////////////////////////////////////////////////////////////////////////////// @@ -30,7 +30,7 @@ /datum/preference/text/exploitable/create_default_value() return EXPLOITABLE_DEFAULT_TEXT -/datum/preference/text/exploitable/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/text/exploitable/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return FALSE ///////////////////////////////////////////////////////////////////////////////////////////// @@ -41,5 +41,5 @@ savefile_key = "background_info" maximum_value_length = MAX_FLAVOR_LEN -/datum/preference/text/background/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/text/background/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return FALSE diff --git a/modular_darkpack/modules/food/code/food.dm b/modular_darkpack/modules/food/code/food.dm index 2fbbc4c5555f..3ee8facf119c 100644 --- a/modular_darkpack/modules/food/code/food.dm +++ b/modular_darkpack/modules/food/code/food.dm @@ -85,16 +85,18 @@ foodtypes = MEAT | DAIRY | GRAIN | VEGETABLES w_class = WEIGHT_CLASS_SMALL +#ifndef UNIT_TESTS /obj/item/food/submarine_sandwich/Initialize(mapload) . = ..() if(istype(src, /obj/item/food/submarine_sandwich/wish)) return - if(!prob(1)) + if(!prob(0.1)) return playsound(src, 'sound/effects/splat.ogg', 50, TRUE) visible_message(span_warning("They got the order wrong!")) new /obj/item/food/submarine_sandwich/wish(loc) qdel(src) +#endif /obj/item/food/submarine_sandwich/meatball name = "meatball sub" diff --git a/modular_darkpack/modules/frenzy/code/frenzy.dm b/modular_darkpack/modules/frenzy/code/frenzy.dm index 7043bc95d5b8..85c02a00df31 100644 --- a/modular_darkpack/modules/frenzy/code/frenzy.dm +++ b/modular_darkpack/modules/frenzy/code/frenzy.dm @@ -123,7 +123,9 @@ return frenzy_result -GAME_VERB_PROC_DESC(/mob/living/carbon/human, manual_frenzy_roll, "Manual Frenzy Roll", "Trigger a roll for a frenzy", null, atom/movable/AM as mob|obj in oview(DEFAULT_SIGHT_DISTANCE)) +GAME_VERB_PROC_DESC(/mob/living/carbon/human, manual_frenzy_roll, "Manual Frenzy Roll", "Trigger a roll for a frenzy", null) + VERB_ARG_TYPED(AM, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_VIEW, /mob/living) + if(!istype(AM)) return if(!issupernatural(src)) @@ -135,7 +137,9 @@ GAME_VERB_PROC_DESC(/mob/living/carbon/human, manual_frenzy_roll, "Manual Frenzy trigger_kindred_frenzy(AM) // Used by the berserker merit. or possibly even for that one vampire thing of riding the frenzy in future? -GAME_VERB_PROC_DESC(/mob/living/carbon/human, manual_frenzy, "Manual Frenzy", "Enter a frenzy at will", null, atom/movable/AM as mob|obj in oview(DEFAULT_SIGHT_DISTANCE)) +GAME_VERB_PROC_DESC(/mob/living/carbon/human, manual_frenzy, "Manual Frenzy", "Enter a frenzy at will", null) + VERB_ARG_TYPED(AM, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_VIEW, /mob/living) + if(!istype(AM)) return if(!issupernatural(src)) diff --git a/modular_darkpack/modules/guestbook/code/adjective_preference.dm b/modular_darkpack/modules/guestbook/code/adjective_preference.dm index b7ef6fd1e3a6..be7dbe05419d 100644 --- a/modular_darkpack/modules/guestbook/code/adjective_preference.dm +++ b/modular_darkpack/modules/guestbook/code/adjective_preference.dm @@ -12,6 +12,6 @@ /datum/preference/choiced/adjective_preference/create_default_value() return pick(assoc_to_keys(GLOB.preference_adjectives)) -/datum/preference/choiced/adjective_preference/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/adjective_preference/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.visible_adjective = value target.update_visible_name() diff --git a/modular_darkpack/modules/jobs/code/hunters/abbe.dm b/modular_darkpack/modules/jobs/code/hunters/abbe.dm index f7c8c7a3d98d..dfbf906aed44 100644 --- a/modular_darkpack/modules/jobs/code/hunters/abbe.dm +++ b/modular_darkpack/modules/jobs/code/hunters/abbe.dm @@ -30,3 +30,8 @@ r_pocket = /obj/item/vamp/keys/hunter l_pocket = /obj/item/smartphone/abbe backpack_contents = list(/obj/item/vampire_stake=1, /obj/item/intel_report=1, /obj/item/vampirebook/bible=1, /obj/item/card/credit=1) + +/datum/outfit/job/vampire/abbe/pre_equip(mob/living/carbon/human/H) + . = ..() + if(H.mind) + H.mind.set_holy_role(HOLY_ROLE_HIGHPRIEST) diff --git a/modular_darkpack/modules/jobs/code/hunters/condottieri.dm b/modular_darkpack/modules/jobs/code/hunters/condottieri.dm index 5aa170982ae2..d67095064b66 100644 --- a/modular_darkpack/modules/jobs/code/hunters/condottieri.dm +++ b/modular_darkpack/modules/jobs/code/hunters/condottieri.dm @@ -33,3 +33,8 @@ r_pocket = /obj/item/vamp/keys/hunter l_pocket = /obj/item/smartphone/condottieri backpack_contents = list(/obj/item/vampire_stake=1, /obj/item/intel_report=1, /obj/item/card/credit=1, /obj/item/vampirebook/bible=1) + +/datum/outfit/job/vampire/condottieri/pre_equip(mob/living/carbon/human/H) + . = ..() + if(H.mind) + H.mind.set_holy_role(HOLY_ROLE_PRIEST) diff --git a/modular_darkpack/modules/jobs/code/hunters/inquisitor.dm b/modular_darkpack/modules/jobs/code/hunters/inquisitor.dm index a174907408d8..5977188d7a3c 100644 --- a/modular_darkpack/modules/jobs/code/hunters/inquisitor.dm +++ b/modular_darkpack/modules/jobs/code/hunters/inquisitor.dm @@ -32,3 +32,8 @@ r_pocket = /obj/item/vamp/keys/hunter l_pocket = /obj/item/smartphone/inquisitor backpack_contents = list(/obj/item/vampire_stake=2, /obj/item/intel_report=1, /obj/item/vampirebook/bible=1, /obj/item/masquerade_contract=1, /obj/item/card/credit=1) + +/datum/outfit/job/vampire/inquisitor/pre_equip(mob/living/carbon/human/H) + . = ..() + if(H.mind) + H.mind.set_holy_role(HOLY_ROLE_PRIEST) diff --git a/modular_darkpack/modules/jobs/code/hunters/novice.dm b/modular_darkpack/modules/jobs/code/hunters/novice.dm index 598045ed4589..31d61248fbaa 100644 --- a/modular_darkpack/modules/jobs/code/hunters/novice.dm +++ b/modular_darkpack/modules/jobs/code/hunters/novice.dm @@ -30,3 +30,9 @@ r_pocket = /obj/item/vamp/keys/hunter l_pocket = /obj/item/smartphone/novice backpack_contents = list(/obj/item/camera=1, /obj/item/vampirebook/bible=1, /obj/item/card/credit=1) + + +/datum/outfit/job/vampire/novice/pre_equip(mob/living/carbon/human/H) + . = ..() + if(H.mind) + H.mind.set_holy_role(HOLY_ROLE_DEACON) diff --git a/modular_darkpack/modules/jobs/code/job_items.dm b/modular_darkpack/modules/jobs/code/job_items.dm index f7edd15c812f..3f6cb22cd325 100644 --- a/modular_darkpack/modules/jobs/code/job_items.dm +++ b/modular_darkpack/modules/jobs/code/job_items.dm @@ -178,7 +178,7 @@ return if(!user.mind) return - if(user.mind.holy_role != HOLY_ROLE_PRIEST) + if(!user.mind?.holy_role) return COOLDOWN_START(src, detonation_timer, 30 SECONDS) do_sparks(rand(5, 9), FALSE, user) diff --git a/modular_darkpack/modules/jobs/code/miscelllaneous/priest.dm b/modular_darkpack/modules/jobs/code/miscelllaneous/priest.dm index 9b6d5bd50209..43f23704042a 100644 --- a/modular_darkpack/modules/jobs/code/miscelllaneous/priest.dm +++ b/modular_darkpack/modules/jobs/code/miscelllaneous/priest.dm @@ -42,3 +42,8 @@ l_hand = /obj/item/vamp/keys/church back = /obj/item/storage/backpack/satchel backpack_contents = list(/obj/item/card/credit=1) + +/datum/outfit/job/vampire/priest/pre_equip(mob/living/carbon/human/H) + . = ..() + if(H.mind) + H.mind.set_holy_role(HOLY_ROLE_PRIEST) diff --git a/modular_darkpack/modules/looc/code/verbs.dm b/modular_darkpack/modules/looc/code/verbs.dm index 846ecaf501bf..107a3732d0a3 100644 --- a/modular_darkpack/modules/looc/code/verbs.dm +++ b/modular_darkpack/modules/looc/code/verbs.dm @@ -1,9 +1,11 @@ #define LOOC_RANGE 7 -GAME_VERB_DESC(/client, looc, "LOOC", "Local OOC, seen only by those in view.", "OOC", msg as text) +GAME_VERB_DESC(/client, looc, "LOOC", "Local OOC, seen only by those in view.", "OOC") + VERB_ARG(msg, VERB_ARG_TYPE_TEXT, VERB_ARG_SOURCE_INPUT) DEFAULT_QUEUE_OR_CALL_VERB(VERB_CALLBACK(src, PROC_REF(looc_message), msg)) -GAME_VERB_DESC(/client, looc_wallpierce, "LOOC (Wallpierce)", "Local OOC, seen by anyone within 7 tiles of you.", "OOC" , msg as text) +GAME_VERB_DESC(/client, looc_wallpierce, "LOOC (Wallpierce)", "Local OOC, seen by anyone within 7 tiles of you.", "OOC") + VERB_ARG(msg, VERB_ARG_TYPE_TEXT, VERB_ARG_SOURCE_INPUT) DEFAULT_QUEUE_OR_CALL_VERB(VERB_CALLBACK(src, PROC_REF(looc_message), msg, TRUE)) /client/proc/looc_message(msg, wall_pierce) diff --git a/modular_darkpack/modules/masquerade/code/masquerade_admin.dm b/modular_darkpack/modules/masquerade/code/masquerade_admin.dm index 3a0977d19a44..c435719a3ebb 100644 --- a/modular_darkpack/modules/masquerade/code/masquerade_admin.dm +++ b/modular_darkpack/modules/masquerade/code/masquerade_admin.dm @@ -8,4 +8,22 @@ if(-1) SSmasquerade.masquerade_breach(null, src, reason) -//admin_verbs.dm for cure_breach and cure_all_breaches admin verbs +ADMIN_VERB(cure_breach, R_FUN, "Cure Masquerade Breach", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN) + VERB_ARG_TYPED(breached_player, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob/living) + var/list/breaches = list() + for(var/list/masquerade_breach in SSmasquerade.masquerade_breachers) + if(masquerade_breach[1] != breached_player) + continue + breaches += masquerade_breach[2] + var/atom/chosen_breach_to_restore = tgui_input_list(user, "Cure Masquerade Breach", "Choose a breach source to cure", breaches) + if(!chosen_breach_to_restore) + return + SEND_SIGNAL(chosen_breach_to_restore, COMSIG_MASQUERADE_REINFORCE, breached_player) + +ADMIN_VERB(cure_all_breaches, R_FUN, "Cure All Masquerade Breaches", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN) + VERB_ARG_TYPED(breached_player, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob/living) + for(var/list/masquerade_breach in SSmasquerade.masquerade_breachers) + if(masquerade_breach[1] != breached_player) + continue + var/atom/masquerade_breach_source = masquerade_breach[2] + SEND_SIGNAL(masquerade_breach_source, COMSIG_MASQUERADE_REINFORCE, breached_player) diff --git a/modular_darkpack/modules/masquerade/code/pref_masquerade.dm b/modular_darkpack/modules/masquerade/code/pref_masquerade.dm index be40602cd272..8a86782da248 100644 --- a/modular_darkpack/modules/masquerade/code/pref_masquerade.dm +++ b/modular_darkpack/modules/masquerade/code/pref_masquerade.dm @@ -8,5 +8,5 @@ /datum/preference/numeric/masquerade/create_default_value() return 5 -/datum/preference/numeric/masquerade/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/numeric/masquerade/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.masquerade_score = value diff --git a/modular_darkpack/modules/matrix/code/matrix.dm b/modular_darkpack/modules/matrix/code/matrix.dm index 19296edd0e48..e7d9deced043 100644 --- a/modular_darkpack/modules/matrix/code/matrix.dm +++ b/modular_darkpack/modules/matrix/code/matrix.dm @@ -33,7 +33,9 @@ matrix_mob(user, src) return TRUE -ADMIN_VERB_AND_CONTEXT_MENU(matrix_mob_verb, R_ADMIN, "Matrix Mob", "Matrix (despawn) a mob.", ADMIN_CATEGORY_SECOND_CITY, mob/living/target in world) +ADMIN_VERB_AND_CONTEXT_MENU(matrix_mob_verb, R_ADMIN, "Matrix Mob", "Matrix (despawn) a mob.", ADMIN_CATEGORY_SECOND_CITY, /mob/living) + VERB_ARG_TYPED(target, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob/living) + var/confirm = tgui_alert(user, "Are you sure you want to matrix this mob?", "Confirm", list("Yes", "No")) if(confirm != "Yes") return diff --git a/modular_darkpack/modules/mentor/code/mentorhelp.dm b/modular_darkpack/modules/mentor/code/mentorhelp.dm index d32840e0eca4..7a323e82918d 100644 --- a/modular_darkpack/modules/mentor/code/mentorhelp.dm +++ b/modular_darkpack/modules/mentor/code/mentorhelp.dm @@ -1,4 +1,5 @@ -GAME_VERB(/client, mentorhelp, "Mentorhelp", "Mentor", msg as text) +GAME_VERB(/client, mentorhelp, "Mentorhelp", "Mentor") + VERB_ARG(msg, VERB_ARG_TYPE_TEXT, VERB_ARG_SOURCE_INPUT) //clean the input msg if(!msg) return diff --git a/modular_darkpack/modules/mentor/code/mentorsay.dm b/modular_darkpack/modules/mentor/code/mentorsay.dm index f5c839868d50..2697744104e7 100644 --- a/modular_darkpack/modules/mentor/code/mentorsay.dm +++ b/modular_darkpack/modules/mentor/code/mentorsay.dm @@ -1,4 +1,5 @@ -GAME_VERB_PROC(/client, cmd_mentor_say, "Msay", "Mentor", msg as text) +GAME_VERB_PROC(/client, cmd_mentor_say, "Msay", "Mentor") + VERB_ARG(msg, VERB_ARG_TYPE_TEXT, VERB_ARG_SOURCE_INPUT) if(!is_mentor()) return diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/amnesia.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/amnesia.dm index 5ead71367ba8..7c847474f8da 100644 --- a/modular_darkpack/modules/merits_flaws/code/negative_quirks/amnesia.dm +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/amnesia.dm @@ -6,4 +6,8 @@ lose_text = span_notice("Oh, I remember now.") icon = FA_ICON_BRAIN failure_message = "Oh, I remember now." + ttrpg_sources = list( + /datum/source_book/vtm20 = 486, + /datum/source_book/wta20 = 477, + ) roleplay_only = TRUE diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/bad_sight.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/bad_sight.dm index 509a27405a82..e49e06c40b7c 100644 --- a/modular_darkpack/modules/merits_flaws/code/negative_quirks/bad_sight.dm +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/bad_sight.dm @@ -3,3 +3,8 @@ desc = "Your sight is defective, but can be corrected with glasses or contacts." value = -1 darkpack_allowed = TRUE + ttrpg_sources = list( + /datum/source_book/vtm20 = 481, + /datum/source_book/wta20 = 473, + /datum/source_book/ctd20 = 179, + ) diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/banned_transformation.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/banned_transformation.dm new file mode 100644 index 000000000000..366f0f9ac428 --- /dev/null +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/banned_transformation.dm @@ -0,0 +1,13 @@ +/datum/quirk/darkpack/banned_transformation + name = "Banned Transformation" + //For the sake of actually being able to implement, only the 3-point version from the book. + desc = {"Some circumstance, event, or situation inhibits your + ability to change forms, except to return to your breed + form. To transform without spending a rage point requires the + expenditure of a Willpower point and a successful + Willpower roll (difficulty 8)."} + ttrpg_sources = list(/datum/source_book/wta20 = 483) + value = -3 + mob_trait = TRAIT_BANNED_TRANSFORMATION + icon = FA_ICON_PERSON + allowed_splats = SPLAT_SHIFTERS diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/beacon_of_the_unholy.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/beacon_of_the_unholy.dm new file mode 100644 index 000000000000..62bcc7ba0247 --- /dev/null +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/beacon_of_the_unholy.dm @@ -0,0 +1,10 @@ +/datum/quirk/darkpack/beacon_of_the_unholy + name = "Beacon of the Unholy" + desc = {"You radiate palpable evil. Clergy and devout mortals + know instinctively that there is something horribly + wrong with you, and react accordingly."} + ttrpg_sources = list(/datum/source_book/vtm20 = 494) + value = -2 + mob_trait = TRAIT_BEACON_OF_THE_UNHOLY + icon = FA_ICON_LIGHTBULB + allowed_splats = list(SPLAT_KINDRED) diff --git a/modular_darkpack/master_files/code/datums/quirks/negative_quirks/blind.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/blind.dm similarity index 64% rename from modular_darkpack/master_files/code/datums/quirks/negative_quirks/blind.dm rename to modular_darkpack/modules/merits_flaws/code/negative_quirks/blind.dm index bd567fcf844c..5cf227498316 100644 --- a/modular_darkpack/master_files/code/datums/quirks/negative_quirks/blind.dm +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/blind.dm @@ -1,4 +1,5 @@ /datum/quirk/item_quirk/blindness desc = "You cannot see." + ttrpg_sources = list(/datum/source_book/vtm20 = 484) value = -6 darkpack_allowed = TRUE diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/cast_no_reflection.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/cast_no_reflection.dm index 48d95bebdab5..af9aa2b7f63a 100644 --- a/modular_darkpack/modules/merits_flaws/code/negative_quirks/cast_no_reflection.dm +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/cast_no_reflection.dm @@ -1,7 +1,10 @@ /datum/quirk/darkpack/cast_no_reflection name = "Cast No Reflection" desc = "You actually cast no reflection, just like the vampires of legend. This can have a detrimental effect when trying to pass as a human." - ttrpg_sources = list(/datum/source_book/vtm20 = 494) + ttrpg_sources = list( + /datum/source_book/vtm20 = 494, + /datum/source_book/mta20/bos = 82, + ) value = -1 mob_trait = TRAIT_NO_MIRROR_REFLECTION icon = FA_ICON_PERSON_THROUGH_WINDOW diff --git a/modular_darkpack/master_files/code/datums/quirks/negative_quirks/deaf.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/deaf.dm similarity index 50% rename from modular_darkpack/master_files/code/datums/quirks/negative_quirks/deaf.dm rename to modular_darkpack/modules/merits_flaws/code/negative_quirks/deaf.dm index 5da113568626..99eed73a11dc 100644 --- a/modular_darkpack/master_files/code/datums/quirks/negative_quirks/deaf.dm +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/deaf.dm @@ -1,4 +1,8 @@ /datum/quirk/item_quirk/deafness desc = "You cannot hear." + ttrpg_sources = list( + /datum/source_book/vtm20 = 483, + /datum/source_book/wta20 = 474, + ) value = -4 darkpack_allowed = TRUE diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/glowing_eyes.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/glowing_eyes.dm index fe98b34e2f0a..5eed4ba23dd9 100644 --- a/modular_darkpack/modules/merits_flaws/code/negative_quirks/glowing_eyes.dm +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/glowing_eyes.dm @@ -3,6 +3,7 @@ name = "Glowing Eyes" desc = {"You have the stereotypical glowing eyes of vampire legend, giving you a -1 difficulty when intimidating mortals. However, you MUST constantly disguise your condition, and the glow impairs your vision."} + ttrpg_sources = list(/datum/source_book/vtm20 = 482) icon = FA_ICON_EYE value = -3 gain_text = span_notice("Your eyes glow with an unnatural light!") diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/grip_of_the_damned.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/grip_of_the_damned.dm index e01927c9f2e5..94da33b36aeb 100644 --- a/modular_darkpack/modules/merits_flaws/code/negative_quirks/grip_of_the_damned.dm +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/grip_of_the_damned.dm @@ -1,6 +1,7 @@ /datum/quirk/darkpack/grip_of_the_damned name = "Grip of the Damned" desc = "There is no ecstasy in your Embrace — only terror and pain. Mortals upon whom you feed struggle and shriek while you attempt to feed." + ttrpg_sources = list(/datum/source_book/vtm20 = 495) icon = FA_ICON_DRUMSTICK_BITE value = -4 allowed_splats = list(SPLAT_KINDRED) diff --git a/modular_darkpack/master_files/code/datums/quirks/negative_quirks/illiterate.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/illiterate.dm similarity index 100% rename from modular_darkpack/master_files/code/datums/quirks/negative_quirks/illiterate.dm rename to modular_darkpack/modules/merits_flaws/code/negative_quirks/illiterate.dm diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/lame.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/lame.dm index 9f8b8f5bed98..1efac94a1e1f 100644 --- a/modular_darkpack/modules/merits_flaws/code/negative_quirks/lame.dm +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/lame.dm @@ -50,5 +50,5 @@ Your walking speed is one-quarter that of a normal human, and running is impossi return /datum/quirk/darkpack/lame::name in preferences.all_quirks -/datum/preference/choiced/lame_leg/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/lame_leg/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/language_barrier.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/language_barrier.dm new file mode 100644 index 000000000000..031ca77b7363 --- /dev/null +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/language_barrier.dm @@ -0,0 +1,31 @@ +/datum/quirk/csl/language_barrier + name = "Language Barrier" + desc = {"Your character cannot speak English. +In order to communicate with locals, your character must +find a translator or rely on written word."} + value = -2 + darkpack_allowed = TRUE + ttrpg_sources = list(/datum/source_book/htr3/pg = 121) + +/datum/quirk/csl/language_barrier/add(client/client_source) //Ugly copypasta to avoid being assigned Uncommon + quirk_holder.remove_language(/datum/language/common, UNDERSTOOD_LANGUAGE, LANGUAGE_SPECIES) + quirk_holder.remove_language(/datum/language/common, UNDERSTOOD_LANGUAGE, LANGUAGE_ATOM) + + quirk_holder.grant_partial_language(/datum/language/common, 50, type) + +/datum/quirk/csl/language_barrier/remove() + UnregisterSignal(quirk_holder, COMSIG_SPECIES_GAIN) + UnregisterSignal(quirk_holder, COMSIG_MOB_SAY) + + if(QDELING(quirk_holder)) + return + + quirk_holder.remove_partial_language(/datum/language/common, type) + var/mob/living/carbon/carbon_quirk_holder = quirk_holder + if(istype(carbon_quirk_holder) && carbon_quirk_holder.dna.species) + // only give back common if they're a species that should speak it + var/datum/language_holder/species_holder = GLOB.prototype_language_holders[carbon_quirk_holder.dna.species.species_language_holder] + if(LAZYACCESS(species_holder.spoken_languages, /datum/language/common)) + quirk_holder.grant_language(/datum/language/common, UNDERSTOOD_LANGUAGE, LANGUAGE_SPECIES) + else + quirk_holder.grant_language(/datum/language/common, UNDERSTOOD_LANGUAGE, LANGUAGE_ATOM) diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/monochrome_vision.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/monochrome_vision.dm index e42263a132c8..7df852fc1a05 100644 --- a/modular_darkpack/modules/merits_flaws/code/negative_quirks/monochrome_vision.dm +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/monochrome_vision.dm @@ -1,8 +1,8 @@ -//W20 473 /datum/quirk/darkpack/monochrome_vision name = "Monochrome Vision" desc = {"You cannot distinguish between colors, but see the world in varying shades of black and white and gray. This is not true color-blindness, which usually refers to the inability to distinguish between certain colors (such as red and green). This Flaw occurs quite frequently among lupus Garou."} + ttrpg_sources = list(/datum/source_book/wta20 = 473) icon = FA_ICON_ADJUST allowed_splats = list(SPLAT_GAROU) value = -1 diff --git a/modular_darkpack/master_files/code/datums/quirks/negative_quirks/mute.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/mute.dm similarity index 100% rename from modular_darkpack/master_files/code/datums/quirks/negative_quirks/mute.dm rename to modular_darkpack/modules/merits_flaws/code/negative_quirks/mute.dm diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/no_sense_of_taste.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/no_sense_of_taste.dm new file mode 100644 index 000000000000..bfcd24f81195 --- /dev/null +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/no_sense_of_taste.dm @@ -0,0 +1,22 @@ +/datum/quirk/darkpack/no_sense_of_taste + name = "No Sense of Taste" + desc = {"Your character's taste buds simply do not function. +You cannot appreciate a fine meal, and you have +trouble gauging the difference between good and bad +food and drink."} + value = -1 + icon = FA_ICON_GRIN_TONGUE_SQUINT + forbidden_splats = list(SPLAT_KINDRED) + ttrpg_sources = list(/datum/source_book/htr3/pg = 118) + +/datum/quirk/darkpack/no_sense_of_taste/add(client/client_source) + var/obj/item/organ/tongue/tongue = quirk_holder.get_organ_slot(ORGAN_SLOT_TONGUE) + if(!tongue) + return + tongue.sense_of_taste = FALSE + +/datum/quirk/darkpack/no_sense_of_taste/remove() + var/obj/item/organ/tongue/tongue = quirk_holder.get_organ_slot(ORGAN_SLOT_TONGUE) + if(!tongue) + return + tongue.sense_of_taste = initial(tongue.sense_of_taste) diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/one_armed.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/one_armed.dm index 806ef6057f9e..da8e68a57c91 100644 --- a/modular_darkpack/modules/merits_flaws/code/negative_quirks/one_armed.dm +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/one_armed.dm @@ -75,5 +75,5 @@ return /datum/quirk/darkpack/one_armed::name in preferences.all_quirks -/datum/preference/choiced/missing_arm/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/missing_arm/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/prey_exclusion.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/prey_exclusion.dm index f9f0b11f60ac..fa19c2299e19 100644 --- a/modular_darkpack/modules/merits_flaws/code/negative_quirks/prey_exclusion.dm +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/prey_exclusion.dm @@ -48,7 +48,7 @@ GLOBAL_LIST_INIT(prey_exclusion_choice, list( return /datum/quirk/darkpack/prey_exclusion::name in preferences.all_quirks -/datum/preference/choiced/prey_exclusion/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/prey_exclusion/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) var/datum/quirk/darkpack/prey_exclusion/quirk = target.get_quirk(/datum/quirk/darkpack/prey_exclusion) if(!quirk) return diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/territorial.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/territorial.dm index 156e3922a1c1..8568ed35ed3c 100644 --- a/modular_darkpack/modules/merits_flaws/code/negative_quirks/territorial.dm +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/territorial.dm @@ -26,7 +26,7 @@ GLOBAL_LIST_INIT(territorial_type_choices, init_territorial_type_choices()) return FALSE return /datum/quirk/darkpack/territorial::name in preferences.all_quirks -/datum/preference/choiced/territorial/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/territorial/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) var/datum/quirk/darkpack/territorial/terr = target.get_quirk(/datum/quirk/darkpack/territorial) if(!terr) return diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/thirst_of_ages.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/thirst_of_ages.dm index 8846b8aeb88c..217b2d72e35d 100644 --- a/modular_darkpack/modules/merits_flaws/code/negative_quirks/thirst_of_ages.dm +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/thirst_of_ages.dm @@ -1,8 +1,8 @@ /datum/quirk/darkpack/thirst_of_ages - name = "Thirst Of Ages" + name = "Methuselah's Thirst" desc = "Some particularly old vampires find themselves unable to subsist off of mortal blood. You are only capable of feeding off of supernaturals." - ttrpg_sources = list(/datum/source_book/homebrew = WE_MADE_IT_UP) - value = -15 + ttrpg_sources = list(/datum/source_book/gt_tmr = 177) + value = -7 mob_trait = TRAIT_THIRST_OF_AGES allowed_splats = list(SPLAT_KINDRED) excluded_clans = list(VAMPIRE_CLAN_NAGARAJA) //Eating organs for vitae would bypass this downside. diff --git a/modular_darkpack/modules/merits_flaws/code/positive_quirks/acute_sense.dm b/modular_darkpack/modules/merits_flaws/code/positive_quirks/acute_sense.dm index 0a6d0e8615bd..5430c897c74e 100644 --- a/modular_darkpack/modules/merits_flaws/code/positive_quirks/acute_sense.dm +++ b/modular_darkpack/modules/merits_flaws/code/positive_quirks/acute_sense.dm @@ -1,9 +1,14 @@ -// VTM pg. 479-480 /datum/quirk/darkpack/acute_sense name = "Acute Sense" desc = "One of your senses is exceptionally sharp, be it sight, hearing, smell, touch, or taste." value = 1 icon = FA_ICON_EYE + ttrpg_sources = list( + /datum/source_book/vtm20 = 479, + /datum/source_book/wta20 = 472, + /datum/source_book/ctd20 = 176, + /datum/source_book/mta20 = 642, + ) var/sense /*One of your senses is exceptionally sharp, be it sight, @@ -84,5 +89,5 @@ acuity.*/ return /datum/quirk/darkpack/acute_sense::name in preferences.all_quirks -/datum/preference/choiced/acute_sense/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/acute_sense/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return diff --git a/modular_darkpack/modules/merits_flaws/code/positive_quirks/alcohol_tolerance.dm b/modular_darkpack/modules/merits_flaws/code/positive_quirks/alcohol_tolerance.dm new file mode 100644 index 000000000000..f9207600cbdb --- /dev/null +++ b/modular_darkpack/modules/merits_flaws/code/positive_quirks/alcohol_tolerance.dm @@ -0,0 +1,4 @@ +/datum/quirk/alcohol_tolerance + value = 1 + darkpack_allowed = TRUE + ttrpg_sources = list(/datum/source_book/wta20 = 472) diff --git a/modular_darkpack/modules/merits_flaws/code/positive_quirks/cast_iron_stomach.dm b/modular_darkpack/modules/merits_flaws/code/positive_quirks/cast_iron_stomach.dm index 41ea4283fbcb..b6cb521c861d 100644 --- a/modular_darkpack/modules/merits_flaws/code/positive_quirks/cast_iron_stomach.dm +++ b/modular_darkpack/modules/merits_flaws/code/positive_quirks/cast_iron_stomach.dm @@ -1,4 +1,3 @@ -//Bygone Bestiary Page 108 /datum/quirk/darkpack/cast_iron_stomach name = "Cast-Iron Stomach" desc = {"You can eat anything remotely similar to food and @@ -9,6 +8,7 @@ gain_text = span_notice("You feel like you could eat anything!") lose_text = span_danger("Looking at food on the ground makes you feel a little queasy.") forbidden_splats = list(SPLAT_KINDRED) + ttrpg_sources = list(/datum/source_book/mta20/bos = 36) /datum/quirk/darkpack/cast_iron_stomach/add(client/client_source) var/obj/item/organ/tongue/tongue = quirk_holder.get_organ_slot(ORGAN_SLOT_TONGUE) diff --git a/modular_darkpack/modules/merits_flaws/code/positive_quirks/fetish.dm b/modular_darkpack/modules/merits_flaws/code/positive_quirks/fetish.dm index d26b6c178ee7..8dec34fce3b7 100644 --- a/modular_darkpack/modules/merits_flaws/code/positive_quirks/fetish.dm +++ b/modular_darkpack/modules/merits_flaws/code/positive_quirks/fetish.dm @@ -65,5 +65,5 @@ GLOBAL_LIST_INIT(fetish_merit_choice, generate_merit_fetishes()) return FALSE return /datum/quirk/darkpack/item_quirk/fetish::name in preferences.all_quirks -/datum/preference/choiced/fetish_merit/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/fetish_merit/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return diff --git a/modular_darkpack/modules/merits_flaws/code/positive_quirks/giovanni_sanguine_incongruity.dm b/modular_darkpack/modules/merits_flaws/code/positive_quirks/giovanni_sanguine_incongruity.dm index f0d55034d7ea..a7e279b11981 100644 --- a/modular_darkpack/modules/merits_flaws/code/positive_quirks/giovanni_sanguine_incongruity.dm +++ b/modular_darkpack/modules/merits_flaws/code/positive_quirks/giovanni_sanguine_incongruity.dm @@ -1,6 +1,7 @@ /datum/quirk/darkpack/giovanni_sanguine_incongruity name = "Sanguine Incongruity" desc = "Bearing the curse of a corpselike pallor and appearance of the Cappadocian blood that came before the usurpation of Clan Cappadocian, a Giovanni with this merit is afforded more leeway in the Clan, as they are either a Premascine (before the diablerie) Elder, or closer to Death than the rest of the Clan, a superstition of great Necromantic prowess. Giovanni with this merit also don't suffer the Curse of Lamia - the supernaturally painful bite that makes feeding for the Giovanni difficult. Only Giovanni may take this merit." + ttrpg_sources = list(/datum/source_book/vtm20/lotc = 106) value = 5 mob_trait = TRAIT_SANGUINE_INCONGRUITY gain_text = span_notice("The Curse of Lamia leaves your body allowing you to feed normally, but your skin pales and becomes more corpselike.") @@ -10,11 +11,12 @@ icon = FA_ICON_SKULL_CROSSBONES failure_message = "Somehow the Giovanni's Curse of Lamia returns, and your bite becomes far more painful. At least now your skin is more flush with life." + /datum/quirk/darkpack/giovanni_sanguine_incongruity/add(client/client_source) var/mob/living/carbon/human/human_holder = astype(quirk_holder) if(!human_holder) return - + var/datum/splat/vampire/kindred/kindred = get_kindred_splat(human_holder) if(kindred) if(istype(kindred.clan, /datum/subsplat/vampire_clan/giovanni)) diff --git a/modular_darkpack/modules/merits_flaws/code/positive_quirks/huge_size.dm b/modular_darkpack/modules/merits_flaws/code/positive_quirks/huge_size.dm new file mode 100644 index 000000000000..00f9f0640e5e --- /dev/null +++ b/modular_darkpack/modules/merits_flaws/code/positive_quirks/huge_size.dm @@ -0,0 +1,38 @@ +/datum/quirk/darkpack/huge_size + name = "Huge size" + desc = {"You are abnormally large in size, at least 6'10" and +300 pounds in weight (well over two meters tall and +over 130 kgs). Aside from making you extremely no +ticeable in public, this extra mass bestows an additional +20 health. Characters with this Merit may also gain bonuses to +bash down doors."} +/* Characters with this Merit may +also gain bonuses to push objects, open barred doors, +avoid being knocked down, etc*/ + ttrpg_sources = list(/datum/source_book/vtm20 = 480) + mob_trait = TRAIT_HUGE_SIZE + icon = FA_ICON_ARROW_UP + value = 4 + quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE + gain_text = span_notice("You feel larger than average.") + lose_text = span_notice("You don't feel so big now.") + failure_message = span_notice("You don't feel so big now.") + + +/datum/quirk/darkpack/huge_size/add(client/client_source) + . = ..() + var/mob/living/carbon/human/human_holder = astype(quirk_holder) + if(!human_holder) + return + human_holder.maxHealth += 20 + human_holder.health += 20 + human_holder.update_transform(1.25) //Same as TRAIT_GIANT. Maybe a bit excessive. + +/datum/quirk/darkpack/huge_size/remove() + . = ..() + var/mob/living/carbon/human/human_holder = astype(quirk_holder) + if(!human_holder) + return + human_holder.maxHealth -= 20 + human_holder.health -= 20 + human_holder.update_transform(1) diff --git a/modular_darkpack/modules/merits_flaws/code/positive_quirks/pale_aura.dm b/modular_darkpack/modules/merits_flaws/code/positive_quirks/pale_aura.dm index f371a817a59e..58ad63e19a18 100644 --- a/modular_darkpack/modules/merits_flaws/code/positive_quirks/pale_aura.dm +++ b/modular_darkpack/modules/merits_flaws/code/positive_quirks/pale_aura.dm @@ -6,8 +6,8 @@ any vampire discerns your character's aura as one belonging to the Kindred"} */ ttrpg_sources = list( - /datum/source_book/ghouls_and_revenants = 137, - /datum/source_book/hunterhunted2 = 43, + /datum/source_book/vtm20/ghouls_and_revenants = 137, + /datum/source_book/vtm20/hunterhunted2 = 43, ) value = 2 mob_trait = TRAIT_PALE_AURA diff --git a/modular_darkpack/modules/merits_flaws/code/positive_quirks/promethean_clay.dm b/modular_darkpack/modules/merits_flaws/code/positive_quirks/promethean_clay.dm index 55890825e618..33d112bddf49 100644 --- a/modular_darkpack/modules/merits_flaws/code/positive_quirks/promethean_clay.dm +++ b/modular_darkpack/modules/merits_flaws/code/positive_quirks/promethean_clay.dm @@ -2,6 +2,7 @@ /datum/quirk/darkpack/promethean_clay name = "Promethean Clay" desc = "(Note: currently RP-only merit. Actual functionality is still in development) Your flesh ripples and molds itself to your preternatural will, almost before you consciously invoke the change. The difficulty to use any Vicissitude power on yourself is two less than normal, and you may activate Vicissitude powers reflexively at your full dice pool while taking other actions. Powers that require multiple turns to activate still require the usual duration. The change simply occurs without conscious direction. As a final benefit, you need no physical sculpting to use the first three levels of Vicissitude on yourself, as your flesh undulates and extrudes to its desired shape. Only characters with at least one dot of Vicissitude may purchase this Merit." + ttrpg_sources = list(/datum/source_book/vtm20/lotc = 238) value = 5 mob_trait = TRAIT_PROMETHEAN_CLAY gain_text = span_notice("You feel a profound oneness with your undead flesh. You are writhing under your own skin, and it shimmers in response, eager to answer your will and mold like clay to your designs.") diff --git a/modular_darkpack/modules/merits_flaws/code/positive_quirks/stillness_of_death.dm b/modular_darkpack/modules/merits_flaws/code/positive_quirks/stillness_of_death.dm index 1fe2b40148ce..59354b7445cc 100644 --- a/modular_darkpack/modules/merits_flaws/code/positive_quirks/stillness_of_death.dm +++ b/modular_darkpack/modules/merits_flaws/code/positive_quirks/stillness_of_death.dm @@ -1,6 +1,7 @@ /datum/quirk/darkpack/stillness_of_death name = "Stillness of Death" desc = "Some Gargoyles are able to take advantage of their unnatural appearance, undeath, stone-hued skin, and the affinity for rock and concrete in their discipline of Visceratika to hide themselves as if they were literal statues. Purchasing this merit allows a Gargoyle to enter 'statue form', allowing them to stand as still as a statue to prevent from breaching the Masquerade, and trick onlookers." + ttrpg_sources = list(/datum/source_book/vtm20/lotb = 37) value = 2 mob_trait = TRAIT_STILLNESS_OF_DEATH gain_text = span_notice("You feel brave enough to hide by pretending to be a statue.") diff --git a/modular_darkpack/modules/merits_flaws/code/positive_quirks/time_sense.dm b/modular_darkpack/modules/merits_flaws/code/positive_quirks/time_sense.dm index c40dafb00c1c..339a06fa2f14 100644 --- a/modular_darkpack/modules/merits_flaws/code/positive_quirks/time_sense.dm +++ b/modular_darkpack/modules/merits_flaws/code/positive_quirks/time_sense.dm @@ -2,7 +2,11 @@ name = "Time Sense" desc = {"You have an innate sense of time and are able to estimate the passage of time accurately without using a watch or other mechanical device, even after long periods of unconsciousness. This allows you to know (among other things) what phase the moon is in."} - ttrpg_sources = list(/datum/source_book/wta20 = 475) + ttrpg_sources = list( + /datum/source_book/wta20 = 475, + /datum/source_book/vtm20 = 484, + /datum/source_book/htr3/pg = 111, + ) value = 1 mob_trait = TRAIT_TIME_SENSE icon = FA_ICON_STOPWATCH diff --git a/modular_darkpack/modules/merits_flaws/code/positive_quirks/touch_of_the_wyld.dm b/modular_darkpack/modules/merits_flaws/code/positive_quirks/touch_of_the_wyld.dm index ae3a8523759c..d3afa47c5036 100644 --- a/modular_darkpack/modules/merits_flaws/code/positive_quirks/touch_of_the_wyld.dm +++ b/modular_darkpack/modules/merits_flaws/code/positive_quirks/touch_of_the_wyld.dm @@ -2,7 +2,7 @@ /datum/quirk/darkpack/touch_of_the_wyld name = "Touch of the Wyld" desc = "Unlike nearly all other undead, you have no obvious Wyrmtaint. You are invisible to those who have the ability to naturally sense the Wyrm." - ttrpg_sources = list(/datum/source_book/vampire_wild_west = 114) + ttrpg_sources = list(/datum/source_book/vtm20/vampire_wild_west = 114) value = 5 mob_trait = TRAIT_HIDDEN_WYRMTAINT icon = FA_ICON_TEMPERATURE_HIGH diff --git a/modular_darkpack/modules/powers/code/discipline/necromancy.dm b/modular_darkpack/modules/powers/code/discipline/necromancy.dm index ea90656ca714..cb65f35b9653 100644 --- a/modular_darkpack/modules/powers/code/discipline/necromancy.dm +++ b/modular_darkpack/modules/powers/code/discipline/necromancy.dm @@ -210,7 +210,7 @@ if(iscarbon(target)) var/mob/living/carbon/human/corpsebuff = target // removed iscathayan(target) || from line 183 DARKPACK TODO - readd KJs Kuei-Jin - if(get_kindred_splat(target) || iszombie(target)) //undead become spongier, but move slightly slower + if(get_kindred_splat(target) || target.has_status_effect(/datum/status_effect/zombie)) //undead become spongier, but move slightly slower corpsebuff.visible_message(span_danger("[target]'s body seizes with rigor mortis."), span_danger("Your senses dull to pain and everything else.")) for(var/obj/item/bodypart/part as anything in corpsebuff.bodyparts) @@ -304,7 +304,7 @@ owner.add_beastmaster_minion(/mob/living/basic/beastmaster/giovanni_zombie/level5) qdel(target) - else if(iszombie(target)) + else if(target.has_status_effect(/datum/status_effect/zombie)) owner.visible_message(span_warning("[owner] aggressively gestures at [target]!")) target.visible_message(span_warning("[target]'s flesh knits together'!"), span_danger("Your rotten flesh reconstitutes!")) var/mob/living/carbon/human/zombie = target diff --git a/modular_darkpack/modules/powers/code/discipline/obfuscate/obfuscate.dm b/modular_darkpack/modules/powers/code/discipline/obfuscate/obfuscate.dm index e76f6a3188f8..48b32ed9f725 100644 --- a/modular_darkpack/modules/powers/code/discipline/obfuscate/obfuscate.dm +++ b/modular_darkpack/modules/powers/code/discipline/obfuscate/obfuscate.dm @@ -280,6 +280,8 @@ REMOVE_TRAIT(owner, TRAIT_MASQUERADE_VIOLATING_FACE, CLAN_TRAIT) if(owner_splat.clan && (TRAIT_MASQUERADE_VIOLATING_EYES in owner_splat.clan.clan_traits)) REMOVE_TRAIT(owner, TRAIT_MASQUERADE_VIOLATING_EYES, CLAN_TRAIT) + if(original_sprite == "rotten4" || original_sprite == "rotten3") + REMOVE_TRAIT(owner, TRAIT_MASQUERADE_VIOLATING_FACE, MAGIC_TRAIT) owner.set_body_sprite(SPECIES_HUMAN, TRUE, TRUE) owner.updateappearance(mutcolor_update = TRUE) @@ -298,6 +300,8 @@ ADD_TRAIT(owner, TRAIT_MASQUERADE_VIOLATING_FACE, CLAN_TRAIT) if(owner_splat.clan && (TRAIT_MASQUERADE_VIOLATING_EYES in owner_splat.clan.clan_traits)) ADD_TRAIT(owner, TRAIT_MASQUERADE_VIOLATING_EYES, CLAN_TRAIT) + if(original_sprite == "rotten4" || original_sprite == "rotten3") + ADD_TRAIT(owner, TRAIT_MASQUERADE_VIOLATING_FACE, MAGIC_TRAIT) owner.set_body_sprite(original_sprite, original_sprite_greyscale, TRUE) owner.updateappearance(mutcolor_update = TRUE) diff --git a/modular_darkpack/modules/powers/code/discipline/presence/presence.dm b/modular_darkpack/modules/powers/code/discipline/presence/presence.dm index e9826e510354..6734ae64819c 100644 --- a/modular_darkpack/modules/powers/code/discipline/presence/presence.dm +++ b/modular_darkpack/modules/powers/code/discipline/presence/presence.dm @@ -202,7 +202,7 @@ to_chat(owner, span_warning("Your terrifying presence sends [target] fleeing in terror!")) //V20's 'dread gaze' section states that with 3 or more successes targets will find themselves scratching at the walls or fleeing against their will because they are so terrified. - GLOB.move_manager.move_away(target, owner, 10, target.cached_multiplicative_slowdown) + GLOB.move_manager.move_away(target, owner, 10, target.cached_multiplicative_slowdown, 2 MINUTES) /datum/discipline_power/presence/dread_gaze/deactivate(mob/living/carbon/human/target) . = ..() diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/blood_form.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/blood_form.dm index 693816759640..49d63365cdee 100644 --- a/modular_darkpack/modules/powers/code/discipline/vicissitude/blood_form.dm +++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/blood_form.dm @@ -1,7 +1,7 @@ #define SPECIES_BLOODFORM "bloodform" /datum/species/tzimisce_blood_form - // A living puddle of Vitae, immune to Bashing and Lethal damage. + // A living puddle of Vitae, immune to Bashing and Lethal damage. name = "\improper Bloodform" plural_form = "Bloodforms" id = SPECIES_BLOODFORM @@ -22,8 +22,8 @@ TRAIT_PULL_BLOCKED, TRAIT_MASQUERADE_VIOLATING_FACE, TRAIT_NO_CUFF, - ) //Made of blood and can't be staked or wounded, but also has no actual ability to attack, per-se. - exotic_bloodtype = BLOOD_TYPE_KINDRED + ) //Made of blood and can't be staked or wounded, but also has no actual ability to attack, per-se. + exotic_bloodtype = /datum/blood_type/kindred changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT bodypart_overrides = list( BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/blood_form, @@ -55,6 +55,9 @@ regenerate_limbs.Remove(former_jellyperson) former_jellyperson.RemoveElement(/datum/element/soft_landing) former_jellyperson.pass_flags = NONE //Resets it to default for humans after loss. + for(var/obj/item/organ/bloodform_organs in former_jellyperson.organs) + if(istype(bloodform_organs, /obj/item/organ/brain/bloodform) || istype(bloodform_organs, /obj/item/organ/eyes/bloodform) || istype(bloodform_organs, /obj/item/organ/ears/bloodform)) + bloodform_organs.organ_flags &= ~ORGAN_UNREMOVABLE return ..() /datum/action/innate/regenerate_blood_limbs diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm index 59c01f28be5d..de69f873a946 100644 --- a/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm +++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/vicissitude.dm @@ -89,7 +89,6 @@ tzimisce_operations += /datum/surgery_operation/basic/tend_wounds/combo/upgraded/master tzimisce_operations += /datum/surgery_operation/limb/add_plastic tzimisce_operations += typesof(/datum/surgery_operation/limb/bioware) - tzimisce_operations += typesof(/datum/surgery_operation/organ/brainwash) tzimisce_operations += typesof(/datum/surgery_operation/organ/lobotomy) tzimisce_operations += typesof(/datum/surgery_operation/organ/pacify) tzimisce_operations += /datum/surgery_operation/organ/eye_color_surgery diff --git a/modular_darkpack/modules/powers/code/discipline/vicissitude/zulo_preferences.dm b/modular_darkpack/modules/powers/code/discipline/vicissitude/zulo_preferences.dm index 062f1e6d3e1f..ee22de4c0013 100644 --- a/modular_darkpack/modules/powers/code/discipline/vicissitude/zulo_preferences.dm +++ b/modular_darkpack/modules/powers/code/discipline/vicissitude/zulo_preferences.dm @@ -33,5 +33,5 @@ zulo_icon.scale(32, 32) return zulo_icon -/datum/preference/choiced/zulo_form/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/zulo_form/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return diff --git a/modular_darkpack/modules/preferences/height_preference.dm b/modular_darkpack/modules/preferences/height_preference.dm index ea39fd09f5ff..dfd427431c2e 100644 --- a/modular_darkpack/modules/preferences/height_preference.dm +++ b/modular_darkpack/modules/preferences/height_preference.dm @@ -10,7 +10,7 @@ /datum/preference/numeric/height/create_default_value() return HUMAN_HEIGHT_MEDIUM // 12 or 5'10 or 5'11 idk -/datum/preference/numeric/height/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/numeric/height/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.set_mob_height(value) /datum/preference/numeric/height/compile_constant_data() diff --git a/modular_darkpack/modules/retail/code/stores/gun_store.dm b/modular_darkpack/modules/retail/code/stores/gun_store.dm index ed069c2c8443..6fd4d470745b 100644 --- a/modular_darkpack/modules/retail/code/stores/gun_store.dm +++ b/modular_darkpack/modules/retail/code/stores/gun_store.dm @@ -8,7 +8,7 @@ new /datum/data/vending_product("lever action rifle", /obj/item/gun/ballistic/rifle/darkpack/lever, 1600), new /datum/data/vending_product("hunting rifle", /obj/item/gun/ballistic/automatic/darkpack/huntrifle, 2000), new /datum/data/vending_product("5.45 ammo", /obj/item/ammo_box/darkpack/c545, 1000), - new /datum/data/vending_product(".45 ammo", /obj/item/ammo_box/darkpack/c45acp, 2100), + new /datum/data/vending_product(".45 ammo", /obj/item/ammo_box/darkpack/c45acp, 700), new /datum/data/vending_product("9mm ammo", /obj/item/ammo_box/darkpack/c9mm, 600), new /datum/data/vending_product(".44 ammo", /obj/item/ammo_box/darkpack/c44, 800), new /datum/data/vending_product("5.56 ammo", /obj/item/ammo_box/darkpack/c556, 2000), diff --git a/modular_darkpack/modules/ritual_necromancy/code/rituals/fireprotection.dm b/modular_darkpack/modules/ritual_necromancy/code/rituals/fireprotection.dm index f838f4bdac00..3d9f04a36146 100644 --- a/modular_darkpack/modules/ritual_necromancy/code/rituals/fireprotection.dm +++ b/modular_darkpack/modules/ritual_necromancy/code/rituals/fireprotection.dm @@ -33,7 +33,7 @@ to_chat(victim, span_revendanger("Burning ice bleeds out of your soul and into everything else. Paralyzed, you stand in the cold as death lingers.")) victim.fakediablerist = TRUE //removing iscathayan from line 38 -- DAKPACK TODO -- readd KJs (iscathayan(victim)) - if(get_kindred_splat(victim) || iszombie(victim)) //made this a deduction rather than a flat set because of an artifact that independently changes damage mods + if(get_kindred_splat(victim) || victim.has_status_effect(/datum/status_effect/zombie)) //made this a deduction rather than a flat set because of an artifact that independently changes damage mods // Im not even certin this does anything for kindred waying heatmod only affects the breath you take and kindred shouldnt be breathing really. victim.dna.species.heatmod = max(0.5, victim.dna.species.heatmod-1) // This sucks why are we touching species for this. else diff --git a/modular_darkpack/modules/splats/code/powers/admin_verbs.dm b/modular_darkpack/modules/splats/code/powers/admin_verbs.dm index 37c64d0042fa..88d4c4e1ef1f 100644 --- a/modular_darkpack/modules/splats/code/powers/admin_verbs.dm +++ b/modular_darkpack/modules/splats/code/powers/admin_verbs.dm @@ -1,4 +1,5 @@ -ADMIN_VERB(give_power, R_FUN, "Give Power", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/power_recipient) +ADMIN_VERB(give_power, R_FUN, "Give Power", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN) + VERB_ARG_TYPED(power_recipient, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) var/which = tgui_alert(user, "Chose by name or by type path?", "Chose option", list("Name", "Typepath")) if(!which) return @@ -33,7 +34,8 @@ ADMIN_VERB(give_power, R_FUN, "Give Power", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CAT new_power.Grant(power_recipient) -ADMIN_VERB(remove_power, R_FUN, "Remove Power", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/removal_target) +ADMIN_VERB(remove_power, R_FUN, "Remove Power", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN) + VERB_ARG_TYPED(removal_target, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) var/list/target_power_list = list() for(var/datum/action/cooldown/power/power in removal_target.actions) target_power_list[power.name] = power @@ -54,7 +56,8 @@ ADMIN_VERB(remove_power, R_FUN, "Remove Power", ADMIN_VERB_NO_DESCRIPTION, ADMIN BLACKBOX_LOG_ADMIN_VERB("Remove Power") -ADMIN_VERB(give_action, R_FUN, "Give Action", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/action_recipient) +ADMIN_VERB(give_action, R_FUN, "Give Action", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN) + VERB_ARG_TYPED(action_recipient, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) var/which = tgui_alert(user, "Chose by name or by type path?", "Chose option", list("Name", "Typepath")) if(!which) return @@ -92,7 +95,9 @@ ADMIN_VERB(give_action, R_FUN, "Give Action", ADMIN_VERB_NO_DESCRIPTION, ADMIN_C new_action.Grant(action_recipient) -ADMIN_VERB(remove_action, R_FUN, "Remove Action", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/removal_target) +ADMIN_VERB(remove_action, R_FUN, "Remove Action", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN) + VERB_ARG_TYPED(removal_target, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob) + var/list/target_action_list = list() for(var/datum/action/action in removal_target.actions) target_action_list[action.name] = action @@ -112,20 +117,3 @@ ADMIN_VERB(remove_action, R_FUN, "Remove Action", ADMIN_VERB_NO_DESCRIPTION, ADM message_admins("[key_name_admin(user)] removed the action [chosen_action] from [key_name_admin(removal_target)].") BLACKBOX_LOG_ADMIN_VERB("Remove Action") -ADMIN_VERB(cure_breach, R_FUN, "Cure Masquerade Breach", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/breached_player) - var/list/breaches = list() - for(var/list/masquerade_breach in SSmasquerade.masquerade_breachers) - if(masquerade_breach[1] != breached_player) - continue - breaches += masquerade_breach[2] - var/atom/chosen_breach_to_restore = tgui_input_list(user, "Cure Masquerade Breach", "Choose a breach source to cure", breaches) - if(!chosen_breach_to_restore) - return - SEND_SIGNAL(chosen_breach_to_restore, COMSIG_MASQUERADE_REINFORCE, breached_player) - -ADMIN_VERB(cure_all_breaches, R_FUN, "Cure All Masquerade Breaches", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/breached_player) - for(var/list/masquerade_breach in SSmasquerade.masquerade_breachers) - if(masquerade_breach[1] != breached_player) - continue - var/atom/masquerade_breach_source = masquerade_breach[2] - SEND_SIGNAL(masquerade_breach_source, COMSIG_MASQUERADE_REINFORCE, breached_player) diff --git a/modular_darkpack/modules/splats/code/prefrences/splat_pref.dm b/modular_darkpack/modules/splats/code/prefrences/splat_pref.dm index 0f1295deb4a6..423113a233ff 100644 --- a/modular_darkpack/modules/splats/code/prefrences/splat_pref.dm +++ b/modular_darkpack/modules/splats/code/prefrences/splat_pref.dm @@ -58,7 +58,7 @@ return values -/datum/preference/choiced/splats/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/splats/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) if(!value) return if(length(target.splats)) diff --git a/modular_darkpack/modules/storyteller_dice/code/roll_subtypes.dm b/modular_darkpack/modules/storyteller_dice/code/roll_subtypes.dm index fe42637d391b..41f7f2a2acc4 100644 --- a/modular_darkpack/modules/storyteller_dice/code/roll_subtypes.dm +++ b/modular_darkpack/modules/storyteller_dice/code/roll_subtypes.dm @@ -116,6 +116,11 @@ reroll_cooldown = 1 SCENES applicable_stats = list(STAT_STRENGTH) +/datum/storyteller_roll/bash_door/calculate_used_dice(mob/living/roller, bonus) + . = ..() + if(HAS_TRAIT(roller, TRAIT_HUGE_SIZE)) + . += 2 + /datum/storyteller_roll/grappling bumper_text = "grappling" applicable_stats = list(STAT_STRENGTH, STAT_BRAWL) diff --git a/modular_darkpack/modules/storyteller_dice/code/verbs.dm b/modular_darkpack/modules/storyteller_dice/code/verbs.dm index 6be8ed40b946..e68c07d79e37 100644 --- a/modular_darkpack/modules/storyteller_dice/code/verbs.dm +++ b/modular_darkpack/modules/storyteller_dice/code/verbs.dm @@ -1,5 +1,8 @@ -ADMIN_VERB_ONLY_CONTEXT_MENU(roll_storyteller_dice, R_FUN, "Roll storyteller dice", mob/living/M in world) - M.roll_dice_custom() +ADMIN_VERB_ONLY_CONTEXT_MENU(roll_storyteller_dice, R_FUN, "Roll storyteller dice", /mob/living) + VERB_ARG_TYPED(roller, VERB_ARG_TYPE_MOB, VERB_ARG_SOURCE_WORLD, /mob/living) + + roller.roll_dice_custom() + BLACKBOX_LOG_ADMIN_VERB("Storyteller dice") GAME_VERB(/mob/living, do_roll_dice_custom, "Roll custom dice", null) diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/preferences/diablerist.dm b/modular_darkpack/modules/vampire_the_masquerade/code/preferences/diablerist.dm index b3b5d6bc2779..5193d2aa04f3 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/preferences/diablerist.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/preferences/diablerist.dm @@ -6,7 +6,7 @@ relevant_inherent_trait = TRAIT_DRINKS_BLOOD default_value = FALSE -/datum/preference/toggle/diablerist/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/toggle/diablerist/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) if(value) ADD_TRAIT(target, TRAIT_DIABLERIE, TRAIT_DIABLERIE) diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/preferences/generation.dm b/modular_darkpack/modules/vampire_the_masquerade/code/preferences/generation.dm index 6eb52b1d0005..6b27ba0fa2ab 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/preferences/generation.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/preferences/generation.dm @@ -17,5 +17,5 @@ var/min = preferences?.discipline_trusted ? MAX_TRUSTED_GENERATION : MAX_PUBLIC_GENERATION return sanitize_float(input, min, HIGHEST_GENERATION_LIMIT, 1, rand(min, HIGHEST_GENERATION_LIMIT)) -/datum/preference/numeric/generation/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/numeric/generation/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) get_kindred_splat(target)?.set_generation(value) diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/preferences/immortal_age.dm b/modular_darkpack/modules/vampire_the_masquerade/code/preferences/immortal_age.dm index c4f944b3be1d..7679a1058f82 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/preferences/immortal_age.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/preferences/immortal_age.dm @@ -9,7 +9,7 @@ minimum = 0 maximum = 1000 -/datum/preference/numeric/immortal_age/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/numeric/immortal_age/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.chronological_age += value /datum/preference/numeric/immortal_age/create_informed_default_value(datum/preferences/preferences) diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/preferences/morality/morality_pref.dm b/modular_darkpack/modules/vampire_the_masquerade/code/preferences/morality/morality_pref.dm index 13480e3aaa67..4522b4deb41d 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/preferences/morality/morality_pref.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/preferences/morality/morality_pref.dm @@ -33,7 +33,7 @@ return choices[input] return choices[serialize(create_default_value())] -/datum/preference/choiced/vtm_morality/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/vtm_morality/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) var/datum/st_stat/morality_path/morality/stat_morality = target.storyteller_stats[STAT_MORALITY] if(!stat_morality) return diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/splats/kindred_splat/kindred_splat.dm b/modular_darkpack/modules/vampire_the_masquerade/code/splats/kindred_splat/kindred_splat.dm index ecfe699d3b1a..d970cc1fcc0b 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/splats/kindred_splat/kindred_splat.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/splats/kindred_splat/kindred_splat.dm @@ -97,7 +97,7 @@ tongue?.toxic_foodtypes = ~(GORE | MEAT | RAW) // nagarajas? // Set blood type - owner.set_blood_type(BLOOD_TYPE_KINDRED) + owner.set_blood_type(/datum/blood_type/kindred) // Apply temperature damage modifiers owner.physiology.heat_mod *= 2 diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clan_mark_pref.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clan_mark_pref.dm index 1eee679e6304..b8f0f0afde9f 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clan_mark_pref.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clan_mark_pref.dm @@ -34,7 +34,7 @@ return GLOB.beast_marks_to_names_reverse[clan.default_accessory] return pick(get_choices(preferences)) -/datum/preference/external_choiced/clan_mark/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/external_choiced/clan_mark/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) if(!value || (value == "none")) return var/datum/subsplat/vampire_clan/clan = target.get_clan() @@ -68,7 +68,7 @@ return TRUE return FALSE -/datum/preference/toggle/gargoyle_legs_and_tail/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/toggle/gargoyle_legs_and_tail/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) if(!value) return diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clan_pref.dm b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clan_pref.dm index cfb3c6c1821f..3733cb4a7f45 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clan_pref.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/vampire_clan/clan_pref.dm @@ -10,7 +10,7 @@ /datum/preference/choiced/subsplat/vampire_clan/icon_for(value) return uni_icon('modular_darkpack/modules/vampire_the_masquerade/icons/vampire_clans.dmi', get_vampire_clan(value).icon) -/datum/preference/choiced/subsplat/vampire_clan/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/subsplat/vampire_clan/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) var/joining_round = !isdummy(target) target.set_clan(value, joining_round) diff --git a/modular_darkpack/modules/vitae/code/blood_pack.dm b/modular_darkpack/modules/vitae/code/blood_pack.dm index 2bf9c779363b..f79b8df5c725 100644 --- a/modular_darkpack/modules/vitae/code/blood_pack.dm +++ b/modular_darkpack/modules/vitae/code/blood_pack.dm @@ -1,4 +1,14 @@ -//Regular blooc packs are considered O-, due to being the all-purpose donation blood type. +GLOBAL_LIST_INIT(human_blood_types, list( + /datum/blood_type/human/o_minus = 4, + /datum/blood_type/human/o_plus = 36, + /datum/blood_type/human/a_minus = 3, + /datum/blood_type/human/a_plus = 28, + /datum/blood_type/human/b_minus = 1, + /datum/blood_type/human/b_plus = 20, + /datum/blood_type/human/ab_minus = 1, + /datum/blood_type/human/ab_plus = 5, + )) + /obj/item/reagent_containers/blood icon = 'modular_darkpack/modules/vitae/icons/bloodpack.dmi' lefthand_file = 'modular_darkpack/modules/vitae/icons/lefthand.dmi' @@ -49,79 +59,53 @@ custom_price = 5 /obj/item/reagent_containers/blood/ab_plus - blood_type = BLOOD_TYPE_AB_PLUS + blood_type = /datum/blood_type/human/ab_plus /obj/item/reagent_containers/blood/ab_minus - blood_type = BLOOD_TYPE_AB_MINUS + blood_type = /datum/blood_type/human/ab_minus + /obj/item/reagent_containers/blood/vitae name = "\improper vampire vitae pack (full)" - blood_type = BLOOD_TYPE_KINDRED + blood_type = /datum/blood_type/kindred + ///////////////////////////////////////////////////////////////// /obj/item/reagent_containers/blood/bweedpack name = "\improper elite blood pack (full)" - blood_type = null + start_blood_amount = 160 /obj/item/reagent_containers/blood/bweedpack/Initialize(mapload) + blood_type = pick_weight(GLOB.human_blood_types) . = ..() reagents.add_reagent(/datum/reagent/drug/cannabis, 20) reagents.add_reagent(/datum/reagent/toxin/lipolicide, 20) - reagents.add_reagent(/datum/reagent/blood, 160, - list("donor" = null, - "viruses" = null, - "blood_DNA" = null, - "blood_type" = random_human_blood_type_name(), - "resistances" = null, - "trace_chem" = null)) - update_appearance() /obj/item/reagent_containers/blood/cokepack name = "\improper elite blood pack (full)" - blood_type = null + start_blood_amount = 185 /obj/item/reagent_containers/blood/cokepack/Initialize(mapload) + blood_type = pick_weight(GLOB.human_blood_types) . = ..() reagents.add_reagent(/datum/reagent/drug/methamphetamine, 15) - reagents.add_reagent(/datum/reagent/blood, 185, - list("donor" = null, - "viruses" = null, - "blood_DNA" = null, - "blood_type" = random_human_blood_type_name(), - "resistances" = null, - "trace_chem" = null)) - update_appearance() /obj/item/reagent_containers/blood/morphpack name = "\improper elite blood pack (full)" - blood_type = null + start_blood_amount = 180 /obj/item/reagent_containers/blood/morphpack/Initialize(mapload) + blood_type = pick_weight(GLOB.human_blood_types) . = ..() reagents.add_reagent(/datum/reagent/toxin/chloralhydrate, 10) reagents.add_reagent(/datum/reagent/medicine/morphine, 10) - reagents.add_reagent(/datum/reagent/blood, 180, - list("donor" = null, - "viruses" = null, - "blood_DNA" = null, - "blood_type" = random_human_blood_type_name(), - "resistances" = null, - "trace_chem" = null)) - update_appearance() /obj/item/reagent_containers/blood/methpack name = "\improper elite blood pack (full)" - blood_type = null + start_blood_amount = 185 /obj/item/reagent_containers/blood/methpack/Initialize(mapload) + blood_type = pick_weight(GLOB.human_blood_types) . = ..() reagents.add_reagent(/datum/reagent/drug/methamphetamine, 15) - reagents.add_reagent(/datum/reagent/blood, 185, - list("donor" = null, - "viruses" = null, - "blood_DNA" = null, - "blood_type" = random_human_blood_type_name(), - "resistances" = null, - "trace_chem" = null)) - update_appearance() diff --git a/modular_darkpack/modules/vitae/code/vitae_blood_type.dm b/modular_darkpack/modules/vitae/code/vitae_blood_type.dm index 40c43c743547..42cabe727d5f 100644 --- a/modular_darkpack/modules/vitae/code/vitae_blood_type.dm +++ b/modular_darkpack/modules/vitae/code/vitae_blood_type.dm @@ -1,5 +1,6 @@ /datum/blood_type/kindred - name = BLOOD_TYPE_KINDRED + name = "V+" + dna_string = "Vampiric DNA" reagent_type = /datum/reagent/blood/vitae compatible_types = list( /datum/blood_type/human/a_minus, diff --git a/modular_darkpack/modules/walls/code/walls.dm b/modular_darkpack/modules/walls/code/walls.dm index 0239014f1059..1cc097f5847a 100644 --- a/modular_darkpack/modules/walls/code/walls.dm +++ b/modular_darkpack/modules/walls/code/walls.dm @@ -16,7 +16,10 @@ /obj/effect/wall_frill/Initialize(mapload) . = ..() - AddComponent(/datum/component/seethrough, SEE_THROUGH_MAP_WALLS) + // Turfs don't really move, so we set the reset timer to an abstractly high number so we can enable and disable seethrough at will + AddComponent(/datum/component/seethrough, SEE_THROUGH_MAP_WALLS, perimeter_reset_timer = 24 HOURS) + update_seethrough() + /* If we want to have transpanecy for ALL mobs instead of just you. var/static/list/loc_connections = list( COMSIG_ATOM_ENTERED = PROC_REF(update_alpha), @@ -31,6 +34,17 @@ alpha = 255 */ +/obj/effect/wall_frill/proc/update_seethrough() + var/turf/our_turf = get_turf(src) + var/datum/component/seethrough/comp = GetComponent(/datum/component/seethrough) + if(our_turf.density) + comp.dismantle_perimeter() + return + + // This is done on init by default, we dont need to override it a ton of times + if(!length(comp.watched_turfs)) + comp.setup_perimeter(src) + /turf/closed/wall/vampwall name = "old brick wall" desc = "A huge chunk of old bricks used to separate rooms." @@ -114,15 +128,18 @@ if((new_junction & CULL_JUNCTIONS) == CULL_JUNCTIONS) if(wall_frill) QDEL_NULL(wall_frill) - else - if(wall_frill) - wall_frill.icon_state = icon_state - else - wall_frill = new(get_step(src, NORTH)) - wall_frill.icon = frill_icon - wall_frill.icon_state = icon_state - wall_frill.name = name - wall_frill.desc = desc + return + + if(!wall_frill) + wall_frill = new(get_step(src, NORTH)) + wall_frill.icon = frill_icon + wall_frill.name = name + wall_frill.desc = desc + + wall_frill.icon_state = icon_state + // This will cover most cases with updating seethrough, except for cases where all the northern walls don't smooth with this turf, and all change from dense to non-dense + wall_frill.update_seethrough() + #undef CULL_JUNCTIONS /turf/closed/wall/vampwall/Destroy() diff --git a/modular_darkpack/modules/weapons/code/guns.dm b/modular_darkpack/modules/weapons/code/guns.dm index b8a22f964d68..e3082d9c0b36 100644 --- a/modular_darkpack/modules/weapons/code/guns.dm +++ b/modular_darkpack/modules/weapons/code/guns.dm @@ -503,6 +503,7 @@ desc = "Pretty old, but also easy fireable and cleanable by vodka. This one has had its stock removed and the barrel chopped; it's a miracle it still cycles! Uses 5.45 rounds." icon_state = "ak74_sawn" inhand_icon_state = "ak74_sawn" + worn_icon_state = "sks" w_class = WEIGHT_CLASS_NORMAL weapon_weight = WEAPON_MEDIUM recoil = 8 //Increased recoil due to sawing off the stock on a full-auto. Bootleg draco. @@ -891,6 +892,7 @@ spread = 14 w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK + can_be_sawn_off = TRUE projectile_damage_multiplier = 1.5 //150 damage; it is a single-shot. serial_shown = FALSE //No serial, it's a musket. actions_types = list() diff --git a/modular_darkpack/modules/weapons/icons/worn_guns.dmi b/modular_darkpack/modules/weapons/icons/worn_guns.dmi index 911da95ca2bf..774ddf0b3f2c 100644 Binary files a/modular_darkpack/modules/weapons/icons/worn_guns.dmi and b/modular_darkpack/modules/weapons/icons/worn_guns.dmi differ diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/auspice.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/auspice.dm index 44fd86800485..8050cfd1a3cb 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/auspice.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/auspice.dm @@ -18,7 +18,7 @@ auspice_icon.blend_icon(uni_icon('modular_darkpack/modules/werewolf_the_apocalypse/icons/auspices.dmi', replacetext(LOWER_TEXT(value), " ", "_")), ICON_OVERLAY) return auspice_icon -/datum/preference/choiced/subsplat/fera_auspice/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/subsplat/fera_auspice/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) var/joining_round = !isdummy(target) target.set_auspice(value, joining_round) diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/breed.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/breed.dm index 91721e020a9d..942eafa47e58 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/breed.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/breed.dm @@ -21,7 +21,7 @@ return breed_icon -/datum/preference/choiced/subsplat/fera_breed/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/subsplat/fera_breed/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) var/joining_round = !isdummy(target) target.set_breed_form(value, joining_round) diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/fur.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/fur.dm index 7c735ce164ba..88ddb49c6672 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/fur.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/fur.dm @@ -10,7 +10,7 @@ must_be_accessible = TRUE var/splat_id -/datum/preference/choiced/fera_fur_color/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/fera_fur_color/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) target.dna.features[FEATURE_FUR_COLOR] = value /datum/preference/choiced/fera_fur_color/is_accessible(datum/preferences/preferences) diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/renown.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/renown.dm index 5eb3a6c7b2ac..6b20d00033c5 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/renown.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/renown.dm @@ -12,7 +12,7 @@ /datum/preference/numeric/renown/create_default_value() return 1 -/datum/preference/numeric/renown/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/numeric/renown/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) var/datum/splat/werewolf/splat = get_werewolf_splat(target) if(!splat) return @@ -42,7 +42,7 @@ /datum/preference/numeric/fera_rank/create_default_value() return 0 -/datum/preference/numeric/fera_rank/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/numeric/fera_rank/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) var/datum/splat/werewolf/splat = get_werewolf_splat(target) if(!splat) return diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/tribe.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/tribe.dm index d27e9b97dd0a..287a19e4dd39 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/tribe.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/tribe.dm @@ -18,7 +18,7 @@ tribe_icon.blend_icon(uni_icon('modular_darkpack/modules/werewolf_the_apocalypse/icons/tribes.dmi', replacetext(LOWER_TEXT(value), " ", "_")), ICON_OVERLAY) return tribe_icon -/datum/preference/choiced/subsplat/fera_tribe/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/choiced/subsplat/fera_tribe/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) var/joining_round = !isdummy(target) target.set_fera_tribe(value, joining_round) diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/wyrm_taint.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/wyrm_taint.dm index dd0cbf6321f5..946dce7642ff 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/wyrm_taint.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/wyrm_taint.dm @@ -6,6 +6,6 @@ relevant_inherent_trait = TRAIT_POSSIBLE_WYRM default_value = FALSE -/datum/preference/toggle/wyrm_tainted/apply_to_human(mob/living/carbon/human/target, value) +/datum/preference/toggle/wyrm_tainted/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) if(value) ADD_TRAIT(target, TRAIT_WYRMTAINTED_SPRITE, TRAIT_WYRMTAINTED_SPRITE) diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/species/transformation.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/species/transformation.dm index 1f744e6cb2a1..b9c56ec83719 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/species/transformation.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/species/transformation.dm @@ -4,6 +4,11 @@ bumper_text = "transformation" applicable_stats = list(STAT_STAMINA) +/datum/storyteller_roll/banned_transformation + bumper_text = "banned transformation bypass" + applicable_stats = list(STAT_PERMANENT_WILLPOWER) + difficulty = 8 + roll_output_type = ROLL_PRIVATE // Remeber if you remove homid being species that this will break. /datum/splat/werewolf/shifter/proc/transform_fera(datum/species/human/shifter/form_to_transform, costs_rage = FALSE, requires_roll = TRUE, force = FALSE) @@ -19,7 +24,6 @@ if(!force && !COOLDOWN_FINISHED(src, transform_cd)) to_chat(owner, span_warning("Your shifting is on cooldown for [DisplayTimeText(COOLDOWN_TIMELEFT(src, transform_cd))].")) return - if(HAS_TRAIT(owner, TRAIT_METAMORPH)) requires_roll = FALSE else if(ispath(get_breed_form_species(), form_to_transform)) @@ -35,6 +39,17 @@ COOLDOWN_START(src, transform_cd, 1 TURNS) var/time_to_transform = DOGGY_ANIMATION_TIME + if(HAS_TRAIT(owner, TRAIT_BANNED_TRANSFORMATION)) + if(owner.st_get_stat(STAT_TEMPORARY_WILLPOWER) <= 1) + to_chat(owner, span_warning("You don't have enough WILLPOWER to do that!")) + return + else + var/datum/storyteller_roll/banned_transformation/bypass_roll = new() + to_chat(owner, span_notice("You expend your willpower trying to transform!")) + owner.st_change_stat(STAT_TEMPORARY_WILLPOWER, -1) + if(bypass_roll.st_roll(owner, owner) != ROLL_SUCCESS) + return + // TODO: should accctually require an amount of successes equal to the forms your shifting through if(requires_roll) var/datum/storyteller_roll/fera_trans/transform_roll = new() diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/icons/corax_forms/corvid.dmi b/modular_darkpack/modules/werewolf_the_apocalypse/icons/corax_forms/corvid.dmi index 2a85620d7f36..d2baf0fc4633 100644 Binary files a/modular_darkpack/modules/werewolf_the_apocalypse/icons/corax_forms/corvid.dmi and b/modular_darkpack/modules/werewolf_the_apocalypse/icons/corax_forms/corvid.dmi differ diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/icons/corax_forms/crinos.dmi b/modular_darkpack/modules/werewolf_the_apocalypse/icons/corax_forms/crinos.dmi index 793b8aa05df1..58d5fea0ffb5 100644 Binary files a/modular_darkpack/modules/werewolf_the_apocalypse/icons/corax_forms/crinos.dmi and b/modular_darkpack/modules/werewolf_the_apocalypse/icons/corax_forms/crinos.dmi differ diff --git a/sound/effects/heavy_drop1.ogg b/sound/effects/heavy_drop1.ogg new file mode 100644 index 000000000000..1e2471e62502 Binary files /dev/null and b/sound/effects/heavy_drop1.ogg differ diff --git a/sound/effects/heavy_drop2.ogg b/sound/effects/heavy_drop2.ogg new file mode 100644 index 000000000000..43c4c4b39540 Binary files /dev/null and b/sound/effects/heavy_drop2.ogg differ diff --git a/sound/effects/license.txt b/sound/effects/license.txt index d55e035eb6a1..cf6d51c352d2 100644 --- a/sound/effects/license.txt +++ b/sound/effects/license.txt @@ -1,4 +1,4 @@ -hit_punch.ogg and hit_kick.ogg are made by Taira Komori +hit_punch.ogg and hit_kick.ogg are made by Taira Komori (https://taira-komori.jpn.org/freesounden.html) cartoon_pop.ogg by Tobiasz 'unfa' Karoń @@ -16,4 +16,10 @@ https://freesound.org/people/Ali_6868/sounds/384361/, -- License: Creative Commo https://freesound.org/people/lolamadeus/sounds/179341/, -- License: Creative Commons 0 https://freesound.org/people/fthrll/sounds/522200/, -- License: Creative Commons 0 https://freesound.org/people/Hankof/sounds/655630/, -- License: Creative Commons 0 -} \ No newline at end of file +} + +heavy_drop1.ogg and heavy_drop2.ogg is made using: +https://freesound.org/people/rottako/sounds/693581/ by Rottako. +https://freesound.org/people/rottako/sounds/693582/ by Rottako. +Cleaned up and trimmed by ArcaneMusic. +licensed as Creative Commons 0. diff --git a/strings/preference_adjectives.txt b/strings/preference_adjectives.txt index 450e4c78901f..703e24f2e22c 100644 --- a/strings/preference_adjectives.txt +++ b/strings/preference_adjectives.txt @@ -1,3 +1,5 @@ +Addled +Aimless Angsty Awkward Bedraggled @@ -5,7 +7,9 @@ Blemished Bony Brawny Breathtaking +Brutish Bruised +Bubbly Bulky Burly Calm @@ -13,10 +17,15 @@ Chaotic Charming Chubby Coarse +Confident +Creepy +Curvy +Dastardly Deformed Delicate Despondent Dignified +Difficult Disgusting Disturbing Dull @@ -28,14 +37,17 @@ Exasperated Exotic Faint Feisty +Feral Flabby Flamboyant Fragile Frail Frazzled Friendly +Gangly Gap-toothed Gaunt +Gawping Gentle Gloomy Gormless @@ -54,14 +66,20 @@ Lithe Lopsided Lovely Malnourished +Malodorous Mangled +Manic Masculine Messy Muscular +Nervous Nimble +Oily Pathetic +Pensive Peppy Petite +Petulant Pompous Pugnacious Quievering @@ -69,13 +87,18 @@ Radical Repulsive Robust Roguish +Rotund Rough +Round Scarred +Scheming Scrawny Sculpted +Sensitive Shifty Shrewd Sickly +Skinny Skittish Sleek Sleepy @@ -96,15 +119,20 @@ Sturdy Stylish Swarthy Tense +Towering Tubular +Twitchy Unattractive Unblemished Unhealthy Unremarkable Unsightly +Unstable Verbose +Vigilant Vigorous Waifish +Weary Wilted Wily Withered diff --git a/tgstation.dme b/tgstation.dme index d816d166eefa..85db9eee6203 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -55,6 +55,7 @@ #include "code\__DEFINES\assert.dm" #include "code\__DEFINES\assets.dm" #include "code\__DEFINES\atom_hud.dm" +#include "code\__DEFINES\augury.dm" #include "code\__DEFINES\basic_mobs.dm" #include "code\__DEFINES\basketball.dm" #include "code\__DEFINES\bitrunning.dm" @@ -426,7 +427,6 @@ #include "code\__DEFINES\research\anomalies.dm" #include "code\__DEFINES\research\research_categories.dm" #include "code\__DEFINES\research\slimes.dm" -#include "code\__DEFINES\research\techweb_nodes.dm" #include "code\__DEFINES\traits\_traits.dm" #include "code\__DEFINES\traits\declarations.dm" #include "code\__DEFINES\traits\macros.dm" @@ -723,6 +723,7 @@ #include "code\_onclick\hud\pai.dm" #include "code\_onclick\hud\revenanthud.dm" #include "code\_onclick\hud\robot.dm" +#include "code\_onclick\hud\slime.dm" #include "code\_onclick\hud\soulscythe.dm" #include "code\_onclick\hud\voidwalker.dm" #include "code\_onclick\hud\parallax\parallax.dm" @@ -1332,6 +1333,7 @@ #include "code\datums\components\appearance_on_aggro.dm" #include "code\datums\components\aquarium.dm" #include "code\datums\components\aquarium_content.dm" +#include "code\datums\components\arbitrary_item_organ.dm" #include "code\datums\components\area_based_godmode.dm" #include "code\datums\components\area_sound_manager.dm" #include "code\datums\components\areabound.dm" @@ -1469,6 +1471,7 @@ #include "code\datums\components\listen_prayers.dm" #include "code\datums\components\lock_on_cursor.dm" #include "code\datums\components\lockable_storage.dm" +#include "code\datums\components\locked_to_account.dm" #include "code\datums\components\magnet.dm" #include "code\datums\components\manual_blinking.dm" #include "code\datums\components\manual_breathing.dm" @@ -2180,6 +2183,7 @@ #include "code\datums\quirks\negative_quirks\prosthetic_limb.dm" #include "code\datums\quirks\negative_quirks\prosthetic_organ.dm" #include "code\datums\quirks\negative_quirks\pushover.dm" +#include "code\datums\quirks\negative_quirks\pyrophobia.dm" #include "code\datums\quirks\negative_quirks\quadruple_amputee.dm" #include "code\datums\quirks\negative_quirks\scarred_eye.dm" #include "code\datums\quirks\negative_quirks\social_anxiety.dm" @@ -2218,6 +2222,7 @@ #include "code\datums\quirks\positive_quirks\mime_fan.dm" #include "code\datums\quirks\positive_quirks\musician.dm" #include "code\datums\quirks\positive_quirks\poster_boy.dm" +#include "code\datums\quirks\positive_quirks\pyromania.dm" #include "code\datums\quirks\positive_quirks\self_aware.dm" #include "code\datums\quirks\positive_quirks\settler.dm" #include "code\datums\quirks\positive_quirks\signer.dm" @@ -2293,6 +2298,7 @@ #include "code\datums\status_effects\limited_effect.dm" #include "code\datums\status_effects\neutral.dm" #include "code\datums\status_effects\reagent_effect.dm" +#include "code\datums\status_effects\replace_sound.dm" #include "code\datums\status_effects\song_effects.dm" #include "code\datums\status_effects\stacking_effect.dm" #include "code\datums\status_effects\wound_effects.dm" @@ -2322,6 +2328,7 @@ #include "code\datums\status_effects\debuffs\drugginess.dm" #include "code\datums\status_effects\debuffs\drunk.dm" #include "code\datums\status_effects\debuffs\fire_stacks.dm" +#include "code\datums\status_effects\debuffs\firewall.dm" #include "code\datums\status_effects\debuffs\genetic_damage.dm" #include "code\datums\status_effects\debuffs\hallucination.dm" #include "code\datums\status_effects\debuffs\heart_attack.dm" @@ -2782,6 +2789,7 @@ #include "code\game\objects\effects\spawners\random\animalhide.dm" #include "code\game\objects\effects\spawners\random\armory.dm" #include "code\game\objects\effects\spawners\random\bedsheet.dm" +#include "code\game\objects\effects\spawners\random\biome_mobs.dm" #include "code\game\objects\effects\spawners\random\bureaucracy.dm" #include "code\game\objects\effects\spawners\random\clothing.dm" #include "code\game\objects\effects\spawners\random\contraband.dm" @@ -3375,6 +3383,7 @@ #include "code\modules\admin\admin_investigate.dm" #include "code\modules\admin\admin_pda_message.dm" #include "code\modules\admin\admin_ranks.dm" +#include "code\modules\admin\admin_verb_panel.dm" #include "code\modules\admin\admin_verbs.dm" #include "code\modules\admin\antag_panel.dm" #include "code\modules\admin\centcom.dm" @@ -4287,6 +4296,7 @@ #include "code\modules\client\preferences.dm" #include "code\modules\client\preferences_menu.dm" #include "code\modules\client\preferences_savefile.dm" +#include "code\modules\client\spawn_text_overlay.dm" #include "code\modules\client\preferences\_preference.dm" #include "code\modules\client\preferences\accessibility.dm" #include "code\modules\client\preferences\addict.dm" @@ -6508,7 +6518,6 @@ #include "code\modules\religion\sparring\sparring_datum.dm" #include "code\modules\requests\request.dm" #include "code\modules\requests\request_manager.dm" -#include "code\modules\research\designs.dm" #include "code\modules\research\destructive_analyzer.dm" #include "code\modules\research\part_replacer.dm" #include "code\modules\research\rdconsole.dm" @@ -6521,6 +6530,8 @@ #include "code\modules\research\anomaly\anomaly_core.dm" #include "code\modules\research\anomaly\anomaly_refinery.dm" #include "code\modules\research\anomaly\raw_anomaly.dm" +#include "code\modules\research\designs\_design.dm" +#include "code\modules\research\designs\_design_disk.dm" #include "code\modules\research\designs\AI_module_designs.dm" #include "code\modules\research\designs\biogenerator_designs.dm" #include "code\modules\research\designs\bluespace_designs.dm" @@ -6594,7 +6605,6 @@ #include "code\modules\research\ordnance\scipaper_partner.dm" #include "code\modules\research\ordnance\tank_compressor.dm" #include "code\modules\research\stock_parts\stock_part_datum.dm" -#include "code\modules\research\techweb\__techweb_helpers.dm" #include "code\modules\research\techweb\_techweb.dm" #include "code\modules\research\techweb\_techweb_node.dm" #include "code\modules\research\techweb\techweb_types.dm" @@ -6793,7 +6803,6 @@ #include "code\modules\surgery\surgery_tray.dm" #include "code\modules\surgery\bodyparts\_bodyparts.dm" #include "code\modules\surgery\bodyparts\alien_parts.dm" -#include "code\modules\surgery\bodyparts\bodypart_effects.dm" #include "code\modules\surgery\bodyparts\default_parts.dm" #include "code\modules\surgery\bodyparts\dismemberment.dm" #include "code\modules\surgery\bodyparts\ghetto_parts.dm" @@ -6804,6 +6813,11 @@ #include "code\modules\surgery\bodyparts\stumps.dm" #include "code\modules\surgery\bodyparts\worn_feature_offset.dm" #include "code\modules\surgery\bodyparts\wounds.dm" +#include "code\modules\surgery\bodyparts\bodypart_effects\bodypart_effect.dm" +#include "code\modules\surgery\bodyparts\bodypart_effects\ethereal_glow.dm" +#include "code\modules\surgery\bodyparts\bodypart_effects\nyxosynthesis.dm" +#include "code\modules\surgery\bodyparts\bodypart_effects\photosynthesis.dm" +#include "code\modules\surgery\bodyparts\bodypart_effects\plasma_based.dm" #include "code\modules\surgery\bodyparts\species_parts\android_parts.dm" #include "code\modules\surgery\bodyparts\species_parts\ethereal_bodyparts.dm" #include "code\modules\surgery\bodyparts\species_parts\ghost_bodyparts.dm" @@ -7155,6 +7169,7 @@ #include "code\modules\wiremod\components\sensors\view_sensor.dm" #include "code\modules\wiremod\components\string\concat.dm" #include "code\modules\wiremod\components\string\contains.dm" +#include "code\modules\wiremod\components\string\replace.dm" #include "code\modules\wiremod\components\string\textcase.dm" #include "code\modules\wiremod\components\string\tonumber.dm" #include "code\modules\wiremod\components\string\tostring.dm" @@ -7254,10 +7269,6 @@ #include "modular_darkpack\master_files\code\datums\mapgen\woods_generator.dm" #include "modular_darkpack\master_files\code\datums\mind\_mind.dm" #include "modular_darkpack\master_files\code\datums\quirks\_quirk.dm" -#include "modular_darkpack\master_files\code\datums\quirks\negative_quirks\blind.dm" -#include "modular_darkpack\master_files\code\datums\quirks\negative_quirks\deaf.dm" -#include "modular_darkpack\master_files\code\datums\quirks\negative_quirks\illiterate.dm" -#include "modular_darkpack\master_files\code\datums\quirks\negative_quirks\mute.dm" #include "modular_darkpack\master_files\code\datums\station_traits\_station_trait.dm" #include "modular_darkpack\master_files\code\datums\storage\subtypes\bags.dm" #include "modular_darkpack\master_files\code\datums\storage\subtypes\dufflebags.dm" @@ -7395,6 +7406,7 @@ #include "modular_darkpack\modules\blood_drinking\code\overfeeding\handle_drink_dry.dm" #include "modular_darkpack\modules\blood_drinking\code\overfeeding\handle_overfeeding.dm" #include "modular_darkpack\modules\blood_drinking\code\overfeeding\diablerie\adjust_generation.dm" +#include "modular_darkpack\modules\blood_drinking\code\overfeeding\diablerie\diablerie_trauma.dm" #include "modular_darkpack\modules\blood_drinking\code\overfeeding\diablerie\handle_diablerie.dm" #include "modular_darkpack\modules\blood_drinking\code\overfeeding\diablerie\make_diablerist.dm" #include "modular_darkpack\modules\blooper\code\blooper.dm" @@ -7721,8 +7733,12 @@ #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\amnesia.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\animal_musk.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\bad_sight.dm" +#include "modular_darkpack\modules\merits_flaws\code\negative_quirks\banned_transformation.dm" +#include "modular_darkpack\modules\merits_flaws\code\negative_quirks\beacon_of_the_unholy.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\betrayers_mark.dm" +#include "modular_darkpack\modules\merits_flaws\code\negative_quirks\blind.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\cast_no_reflection.dm" +#include "modular_darkpack\modules\merits_flaws\code\negative_quirks\deaf.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\derangement.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\disfigured.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\dulled_bite.dm" @@ -7730,11 +7746,15 @@ #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\grip_of_the_damned.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\hemophiliac.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\horrific_appearance_quirk.dm" +#include "modular_darkpack\modules\merits_flaws\code\negative_quirks\illiterate.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\lame.dm" +#include "modular_darkpack\modules\merits_flaws\code\negative_quirks\language_barrier.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\light_sensitive.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\mage_blood.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\monochrome_vision.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\monstrous_quirk.dm" +#include "modular_darkpack\modules\merits_flaws\code\negative_quirks\mute.dm" +#include "modular_darkpack\modules\merits_flaws\code\negative_quirks\no_sense_of_taste.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\one_armed.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\organovore.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\permanent_fangs.dm" @@ -7756,6 +7776,7 @@ #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\weak_willed.dm" #include "modular_darkpack\modules\merits_flaws\code\neutral_quirks\illegal_identity.dm" #include "modular_darkpack\modules\merits_flaws\code\positive_quirks\acute_sense.dm" +#include "modular_darkpack\modules\merits_flaws\code\positive_quirks\alcohol_tolerance.dm" #include "modular_darkpack\modules\merits_flaws\code\positive_quirks\beserker.dm" #include "modular_darkpack\modules\merits_flaws\code\positive_quirks\blush_of_health_quirk.dm" #include "modular_darkpack\modules\merits_flaws\code\positive_quirks\calm_heart.dm" @@ -7767,6 +7788,7 @@ #include "modular_darkpack\modules\merits_flaws\code\positive_quirks\fetish.dm" #include "modular_darkpack\modules\merits_flaws\code\positive_quirks\giovanni_sanguine_incongruity.dm" #include "modular_darkpack\modules\merits_flaws\code\positive_quirks\hidden_diablerie.dm" +#include "modular_darkpack\modules\merits_flaws\code\positive_quirks\huge_size.dm" #include "modular_darkpack\modules\merits_flaws\code\positive_quirks\metamorph.dm" #include "modular_darkpack\modules\merits_flaws\code\positive_quirks\pale_aura.dm" #include "modular_darkpack\modules\merits_flaws\code\positive_quirks\promethean_clay.dm" diff --git a/tgui/packages/common/storage.ts b/tgui/packages/common/storage.ts index 9894fa1a95ec..a3d6e66e5d92 100644 --- a/tgui/packages/common/storage.ts +++ b/tgui/packages/common/storage.ts @@ -21,6 +21,11 @@ type StorageBackend = { clear(): Promise; }; +export type StorageDiagnostic = { + level: 'info' | 'warn' | 'error'; + message: string; +}; + const testGeneric = (testFn: () => boolean) => (): boolean => { try { return Boolean(testFn()); @@ -78,6 +83,7 @@ class IFrameIndexedDbBackend implements StorageBackend { async ready(): Promise { const iframe = document.createElement('iframe'); iframe.style.display = 'none'; + iframe.allow = 'storage-access'; iframe.src = Byond.storageCdn; const completePromise: Promise = new Promise((resolve) => { @@ -171,6 +177,11 @@ class IFrameIndexedDbBackend implements StorageBackend { class StorageProxy implements StorageBackend { private backendPromise: Promise; public impl: StorageImplementation = IMPL_IFRAME_INDEXED_DB; + public diagnostics: StorageDiagnostic[] = []; + + private log(level: StorageDiagnostic['level'], message: string) { + this.diagnostics.push({ level, message }); + } constructor() { this.backendPromise = (async () => { @@ -181,6 +192,8 @@ class StorageProxy implements StorageBackend { const iframe = new IFrameIndexedDbBackend(); if ((await iframe.ready()) === true) { + this.log('info', `Using iframe storage (${Byond.storageCdn})`); + if (await iframe.get('byondstorage-migrated')) return iframe; const iframeHasPersistedStorage = ( @@ -190,6 +203,7 @@ class StorageProxy implements StorageBackend { ).some((settings) => settings !== undefined); if (!iframeHasPersistedStorage) { + this.log('info', 'No existing iframe data, migrating from byondstorage'); const hubStorageWasEnabled = testHubStorage(); if (!hubStorageWasEnabled) { Byond.winset(null, 'browser-options', '+byondstorage'); @@ -218,10 +232,10 @@ class StorageProxy implements StorageBackend { const settings = await hub.get(setting); if (settings !== undefined) { await iframe.set(setting, settings); + this.log('info', `Migrated '${setting}' from byondstorage`); } } catch { - // Ignore unreadable legacy storage entries. A bad old cache - // key should not keep the client on byondstorage. + this.log('warn', `Failed to migrate '${setting}' from byondstorage`); } }), ); @@ -236,14 +250,19 @@ class StorageProxy implements StorageBackend { return iframe; } + this.log('warn', `Iframe storage failed to load from ${Byond.storageCdn}`); iframe.destroy(); + } else { + this.log('info', 'No storage CDN configured'); } if (testHubStorage()) { + this.log('warn', 'Falling back to hubStorage (byondstorage)'); return new HubStorageBackend(); } // IFrame hasn't worked out for us, we'll need to enable byondstorage + this.log('warn', 'Enabling byondstorage as last resort'); Byond.winset(null, 'browser-options', '+byondstorage'); return new Promise((resolve) => { diff --git a/tgui/packages/common/verb-constants.ts b/tgui/packages/common/verb-constants.ts new file mode 100644 index 000000000000..b30a47191ac1 --- /dev/null +++ b/tgui/packages/common/verb-constants.ts @@ -0,0 +1,56 @@ +export const ARG_TYPE_TEXT = 1 << 0; +export const ARG_TYPE_NUM = 1 << 1; +export const ARG_TYPE_MESSAGE = 1 << 2; +export const ARG_TYPE_SOUND = 1 << 3; +export const ARG_TYPE_ICON = 1 << 4; +export const ARG_TYPE_MOB = 1 << 5; +export const ARG_TYPE_OBJ = 1 << 6; +export const ARG_TYPE_TURF = 1 << 7; +export const ARG_TYPE_AREA = 1 << 8; +export const ARG_TYPE_DATUM = 1 << 9; +export const ARG_TYPE_ATOM = 1 << 10; +export const ARG_TYPE_TYPEPATH = 1 << 11; + +export const ARG_TYPE_ENTITY = + ARG_TYPE_MOB | + ARG_TYPE_OBJ | + ARG_TYPE_TURF | + ARG_TYPE_AREA | + ARG_TYPE_DATUM | + ARG_TYPE_ATOM; + +export const ARG_TYPE_PRIMITIVE = + ARG_TYPE_TEXT | + ARG_TYPE_NUM | + ARG_TYPE_MESSAGE | + ARG_TYPE_SOUND | + ARG_TYPE_ICON | + ARG_TYPE_TYPEPATH; + +export const ARG_SOURCE_LIST = 'list'; + +export type VerbArgBase = { + arg_type: number; + source: string | null; + options?: string[]; +}; + +export function isTypepathArg(arg: VerbArgBase): boolean { + return (arg.arg_type & ARG_TYPE_TYPEPATH) !== 0; +} + +export function isEntityArg(arg: VerbArgBase): boolean { + return (arg.arg_type & ARG_TYPE_ENTITY) !== 0; +} + +export function isTextArg(arg: VerbArgBase): boolean { + return (arg.arg_type & (ARG_TYPE_TEXT | ARG_TYPE_MESSAGE)) !== 0; +} + +export function isListArg(arg: VerbArgBase): boolean { + return ( + arg.source === ARG_SOURCE_LIST && + Array.isArray(arg.options) && + arg.options.length > 0 + ); +} diff --git a/tgui/packages/tgui-escape-menu/EscapeMenu.tsx b/tgui/packages/tgui-escape-menu/EscapeMenu.tsx index b1d563e9ea0b..a1f8e2a11f45 100644 --- a/tgui/packages/tgui-escape-menu/EscapeMenu.tsx +++ b/tgui/packages/tgui-escape-menu/EscapeMenu.tsx @@ -27,6 +27,7 @@ export type ServerState = { roundId: string; mapName: string; mapFeedbackLink: string | null; + mapWebmap: string | null; serverTime: string; shiftTime: string; timeDilation: string; @@ -217,6 +218,14 @@ function Details({ serverState }: { serverState: ServerState }) { ) : ( serverState.mapName || 'Loading...' )} + {!!serverState.mapWebmap && ( + Byond.command(`.url ${serverState.mapWebmap}`)} + > + {` (Open Map)`} + + )}
Time Dilation: {serverState.timeDilation}%
diff --git a/tgui/packages/tgui-escape-menu/audio.ts b/tgui/packages/tgui-escape-menu/audio.ts index 0e3b409746ff..3d9cbf8a7bb7 100644 --- a/tgui/packages/tgui-escape-menu/audio.ts +++ b/tgui/packages/tgui-escape-menu/audio.ts @@ -10,7 +10,7 @@ function playOneShot(name: string) { const url = getAssetUrl(name); if (!url) return; const audio = new Audio(url); - audio.volume = 0.8; + audio.volume = 0.6; audio.play().catch(() => {}); } diff --git a/tgui/packages/tgui-panel/Panel.tsx b/tgui/packages/tgui-panel/Panel.tsx index 7ad6ebed3d0c..4664be48564b 100644 --- a/tgui/packages/tgui-panel/Panel.tsx +++ b/tgui/packages/tgui-panel/Panel.tsx @@ -20,6 +20,7 @@ import { ReconnectButton } from './reconnect'; import { settingsVisibleAtom } from './settings/atoms'; import { SettingsPanel } from './settings/SettingsPanel'; import { useSettings } from './settings/use-settings'; +import { CommandBar } from './verbs/CommandBar'; export function Panel(props) { const [audioVisible, setAudioVisible] = useAtom(visibleAtom); @@ -31,7 +32,7 @@ export function Panel(props) { return ( - +
@@ -96,6 +97,9 @@ export function Panel(props) {
+ + +
); diff --git a/tgui/packages/tgui-panel/chat/renderer.tsx b/tgui/packages/tgui-panel/chat/renderer.tsx index 8c28e1942dc5..26207ed1cbd2 100644 --- a/tgui/packages/tgui-panel/chat/renderer.tsx +++ b/tgui/packages/tgui-panel/chat/renderer.tsx @@ -117,6 +117,8 @@ class ChatRenderer { scrollTracking: boolean; lastScrollHeight: number; highlightParsers: Array | null; + currentJob: string | null; + currentCharacter: string | null; handleScroll: (type: any) => void; constructor() { @@ -130,6 +132,8 @@ class ChatRenderer { // Scroll handler this.scrollNode = null; + this.currentJob = null; + this.currentCharacter = null; this.scrollTracking = true; this.lastScrollHeight = 0; this.handleScroll = (evt) => { @@ -193,6 +197,35 @@ class ChatRenderer { } } + setJob(title) { + this.currentJob = + typeof title === 'string' && title ? title.trim().toLowerCase() : null; + } + + setCharacter(name) { + this.currentCharacter = + typeof name === 'string' && name ? name.trim().toLowerCase() : null; + } + + matchesFilters(parser) { + if ( + parser.jobs?.length && + !(this.currentJob && parser.jobs.includes(this.currentJob)) + ) { + return false; + } + if ( + parser.characters?.length && + !( + this.currentCharacter && + parser.characters.includes(this.currentCharacter) + ) + ) { + return false; + } + return true; + } + setHighlight(highlightSettings, highlightSettingById) { this.highlightParsers = null; if (!highlightSettings) { @@ -206,6 +239,13 @@ class ChatRenderer { const matchWord = setting.matchWord; const matchCase = setting.matchCase; const enabled = setting.enabled; + const jobs = String(setting.jobFilter || '') + .split(',') + .map((str) => str.trim().toLowerCase()) + .filter(Boolean); + const characters = ( + Array.isArray(setting.characterFilter) ? setting.characterFilter : [] + ).map((str) => String(str).trim().toLowerCase()); const allowedRegex = /^[a-zа-яё0-9_\-$/^[\s\]\\]+$/gi; const regexEscapeCharacters = /[!#$%^&*)(+=.<>{}[\]:;'"|~`_\-\\/]/g; const lines = String(text) @@ -281,6 +321,8 @@ class ChatRenderer { highlightRegex, highlightColor, highlightWholeMessage, + jobs, + characters, }); }); } @@ -448,7 +490,7 @@ class ChatRenderer { // Highlight text if (!message.avoidHighlighting && this.highlightParsers) { this.highlightParsers - .filter((parser) => parser.enabled) + .filter((parser) => parser.enabled && this.matchesFilters(parser)) .forEach((parser) => { const highlighted = highlightNode( node, diff --git a/tgui/packages/tgui-panel/chat/use-chat-persistence.ts b/tgui/packages/tgui-panel/chat/use-chat-persistence.ts index 2b32efb5d228..2d8b537f935a 100644 --- a/tgui/packages/tgui-panel/chat/use-chat-persistence.ts +++ b/tgui/packages/tgui-panel/chat/use-chat-persistence.ts @@ -1,4 +1,4 @@ -import { storage } from 'common/storage'; +import { storage, type StorageDiagnostic } from 'common/storage'; import DOMPurify from 'dompurify'; import { useAtom, useAtomValue } from 'jotai'; import { useEffect } from 'react'; @@ -55,6 +55,8 @@ export function useChatPersistence() { storage.get('chat-messages'), ]); + surfaceStorageDiagnostics(storage.diagnostics); + if (messages) { handleMessages(messages); } @@ -71,6 +73,24 @@ export function useChatPersistence() { } } + function surfaceStorageDiagnostics(diagnostics: StorageDiagnostic[]) { + const hasIssues = diagnostics.some((d) => d.level !== 'info'); + if (!hasIssues) return; + + const batch = diagnostics + .filter((d) => d.level !== 'info') + .map((d) => + createMessage({ + type: 'internal/storage', + text: `[Storage] ${d.message}`, + }), + ); + + if (batch.length) { + chatRenderer.processBatch(batch, { prepend: true }); + } + } + function handleMessages(messages: any[]): void { for (const message of messages) { if (message.html) { diff --git a/tgui/packages/tgui-panel/events/handlers/player.ts b/tgui/packages/tgui-panel/events/handlers/player.ts new file mode 100644 index 000000000000..e85eb1c0d79e --- /dev/null +++ b/tgui/packages/tgui-panel/events/handlers/player.ts @@ -0,0 +1,27 @@ +import { chatRenderer } from '../../chat/renderer'; +import { + characterProfilesAtom, + currentCharacterAtom, + currentJobAtom, +} from '../../game/atoms'; +import { store } from '../store'; + +type PlayerSetPayload = { + job?: string | null; + character?: string | null; + characters?: (string | null)[] | null; +}; + +export function playerSet(payload: PlayerSetPayload) { + const job = payload?.job || null; + const character = payload?.character || null; + // Drop empty save slots and duplicates + const characters = [ + ...new Set((payload?.characters || []).filter(Boolean) as string[]), + ]; + store.set(currentJobAtom, job); + store.set(currentCharacterAtom, character); + store.set(characterProfilesAtom, characters); + chatRenderer.setJob(job); + chatRenderer.setCharacter(character); +} diff --git a/tgui/packages/tgui-panel/events/listeners.ts b/tgui/packages/tgui-panel/events/listeners.ts index 06e6a4f554ad..243699bfaa00 100644 --- a/tgui/packages/tgui-panel/events/listeners.ts +++ b/tgui/packages/tgui-panel/events/listeners.ts @@ -8,15 +8,35 @@ import { telemetryRequest, testTelemetryCommand, } from '../telemetry/handlers'; +import { + handleAddVerbs, + handleClearCommandBar, + handleFocusCommandBar, + handleHotkeyMode, + handleRemoveVerbs, + handleTargets, + handleTypepaths, + handleVerbsInit, +} from '../verbs/handlers'; import { handleLoadAssets } from './handlers/assets'; +import { playerSet } from './handlers/player'; import { roundrestart } from './handlers/roundrestart'; const listeners = { + 'verbs/add': handleAddVerbs, + 'verbs/clear': handleClearCommandBar, + 'verbs/focus': handleFocusCommandBar, + 'verbs/init': handleVerbsInit, + 'verbs/remove': handleRemoveVerbs, + 'verbs/targets': handleTargets, + 'verbs/typepaths': handleTypepaths, + 'verbs/hotkey_mode': handleHotkeyMode, 'asset/stylesheet': loadStyleSheet, 'asset/mappings': handleLoadAssets, 'audio/playMusic': playMusic, 'audio/stopMusic': stopMusic, 'chat/message': chatMessage, + 'player/set': playerSet, 'ping/reply': pingReply, 'ping/soft': pingSoft, roundrestart, diff --git a/tgui/packages/tgui-panel/game/atoms.ts b/tgui/packages/tgui-panel/game/atoms.ts index 148227074377..c3e13430cd83 100644 --- a/tgui/packages/tgui-panel/game/atoms.ts +++ b/tgui/packages/tgui-panel/game/atoms.ts @@ -4,6 +4,15 @@ import { CONNECTION_LOST_AFTER } from './constants'; export const roundRestartedAtAtom = atom(null); +/** Current job title of the player, as reported by the server */ +export const currentJobAtom = atom(null); + +/** Name of the character the player is currently playing */ +export const currentCharacterAtom = atom(null); + +/** Names of the player's saved characters */ +export const characterProfilesAtom = atom([]); + /** * Ticking clock atom. Only runs while something is subscribed to it. * (And only after we’ve had at least one ping, see connectionLostAtAtom.) diff --git a/tgui/packages/tgui-panel/index.tsx b/tgui/packages/tgui-panel/index.tsx index c4d23c2d5eb2..441b97b5c49b 100644 --- a/tgui/packages/tgui-panel/index.tsx +++ b/tgui/packages/tgui-panel/index.tsx @@ -49,8 +49,7 @@ function setupApp() { left: 'output_browser', }); - // Resize the panel to match the non-browser output - Byond.winget('output').then((output: { size: string }) => { + Byond.winget('output_browser').then((output: { size: string }) => { Byond.winset('browseroutput', { size: output.size, }); diff --git a/tgui/packages/tgui-panel/settings/TextHighlight.tsx b/tgui/packages/tgui-panel/settings/TextHighlight.tsx index 2b352f5dae18..7d28efa74d42 100644 --- a/tgui/packages/tgui-panel/settings/TextHighlight.tsx +++ b/tgui/packages/tgui-panel/settings/TextHighlight.tsx @@ -1,9 +1,11 @@ -import { useMemo } from 'react'; +import { useAtomValue } from 'jotai'; +import { useMemo, useRef } from 'react'; import { Box, Button, ColorBox, Divider, + Floating, Icon, Input, Section, @@ -11,6 +13,7 @@ import { TextArea, } from 'tgui-core/components'; import { chatRenderer } from '../chat/renderer'; +import { characterProfilesAtom, currentCharacterAtom } from '../game/atoms'; import { WARN_AFTER_HIGHLIGHT_AMT } from './constants'; import { useHighlights } from './use-highlights'; @@ -92,7 +95,33 @@ function TextHighlightSetting(props) { highlightWholeMessage, matchWord, matchCase, + jobFilter, + characterFilter, } = highlightSettingById[id]; + const currentCharacter = useAtomValue(currentCharacterAtom); + const characterProfiles = useAtomValue(characterProfilesAtom); + const jobsPopover = useRef<{ close: () => void }>(null); + const jobCount = jobFilter.split(',').filter((str) => str.trim()).length; + + // Known characters plus any selected names no longer in the save slots, + // so stale selections stay visible and can be unchecked + const selectableCharacters = useMemo(() => { + const known = new Set([...characterProfiles, ...characterFilter]); + if (currentCharacter) { + known.add(currentCharacter); + } + return [...known]; + }, [characterProfiles, characterFilter, currentCharacter]); + + function toggleCharacter(name: string): void { + const draft = characterFilter.includes(name) + ? characterFilter.filter((entry) => entry !== name) + : [...characterFilter, name]; + updateHighlight({ + id, + characterFilter: draft, + }); + } const highlightRegex = useMemo( () => extractRegex(highlightText), @@ -125,13 +154,6 @@ function TextHighlightSetting(props) { > Enabled - + + + + {selectableCharacters.map((name) => ( +
+ toggleCharacter(name)} + > + {name} + +
+ ))} + {selectableCharacters.length === 0 && ( + + No known characters yet. +
+ Join the game once to fill this list. +
+ )} + + } + > + + + +
+ + + updateHighlight({ + id, + jobFilter: value, + }) + } + onEnter={(value) => { + updateHighlight({ + id, + jobFilter: value, + }); + jobsPopover.current?.close(); + }} + /> + + } + > + + + + +
+ + + +