diff --git a/.github/workflows/autowiki.yml b/.github/workflows/autowiki.yml new file mode 100644 index 000000000000..72c5b8816ce0 --- /dev/null +++ b/.github/workflows/autowiki.yml @@ -0,0 +1,57 @@ +name: Autowiki +on: + schedule: + - cron: "5 4 * * *" + workflow_dispatch: + +permissions: + contents: read + +jobs: + autowiki: + runs-on: ubuntu-20.04 + steps: + - name: "Check for AUTOWIKI_USERNAME" + id: secrets_set + env: + ENABLER_SECRET: ${{ secrets.AUTOWIKI_USERNAME }} + run: | + unset SECRET_EXISTS + if [ -n "$ENABLER_SECRET" ]; then SECRET_EXISTS=true ; fi + echo "SECRETS_ENABLED=$SECRET_EXISTS" >> $GITHUB_OUTPUT + - name: Checkout + if: steps.secrets_set.outputs.SECRETS_ENABLED + uses: actions/checkout@v3 + - name: Restore BYOND cache + if: steps.secrets_set.outputs.SECRETS_ENABLED + uses: actions/cache@v3 + with: + path: ~/BYOND + key: ${{ runner.os }}-byond-${{ secrets.CACHE_PURGE_KEY }} + - name: Install rust-g + if: steps.secrets_set.outputs.SECRETS_ENABLED + run: | + sudo dpkg --add-architecture i386 + sudo apt update || true + sudo apt install -o APT::Immediate-Configure=false libssl1.1:i386 + bash tools/ci/install_rust_g.sh + - name: Install auxmos + if: steps.secrets_set.outputs.SECRETS_ENABLED + run: | + bash tools/ci/install_auxmos.sh + - name: Compile and generate Autowiki files + if: steps.secrets_set.outputs.SECRETS_ENABLED + run: | + bash tools/ci/install_byond.sh + source $HOME/BYOND/byond/bin/byondsetup + tools/build/build --ci autowiki + - name: Run Autowiki + if: steps.secrets_set.outputs.SECRETS_ENABLED + env: + USERNAME: ${{ secrets.AUTOWIKI_USERNAME }} + PASSWORD: ${{ secrets.AUTOWIKI_PASSWORD }} + run: | + cd tools/autowiki + npm install + cd ../.. + node tools/autowiki/autowiki.js data/autowiki_edits.txt data/autowiki_files/ diff --git a/.github/workflows/compile_changelogs.yml b/.github/workflows/compile_changelogs.yml index 0c789db80adb..70b4ac9a9331 100644 --- a/.github/workflows/compile_changelogs.yml +++ b/.github/workflows/compile_changelogs.yml @@ -3,20 +3,21 @@ name: Compile changelogs on: schedule: - cron: "0 0 * * *" + workflow_dispatch: jobs: compile: name: "Compile changelogs" runs-on: ubuntu-20.04 steps: - - name: "Check for ACTION_ENABLER secret and pass true to output if it exists to be checked by later steps" + - name: "Check for ACTION_ENABLER secret and pass it to output if it exists to be checked by later steps" id: value_holder env: ENABLER_SECRET: ${{ secrets.CHANGELOG_ENABLER }} run: | unset SECRET_EXISTS if [ -n "$ENABLER_SECRET" ]; then SECRET_EXISTS=true ; fi - echo "::set-output name=ACTIONS_ENABLED::$SECRET_EXISTS" + echo "ACTIONS_ENABLED=$SECRET_EXISTS" >> $GITHUB_OUTPUT - name: "Setup python" if: steps.value_holder.outputs.ACTIONS_ENABLED uses: actions/setup-python@v4 @@ -33,6 +34,7 @@ jobs: uses: actions/checkout@v3 with: fetch-depth: 25 + persist-credentials: false - name: "Compile" if: steps.value_holder.outputs.ACTIONS_ENABLED run: | @@ -49,4 +51,4 @@ jobs: if: steps.value_holder.outputs.ACTIONS_ENABLED uses: ad-m/github-push-action@master with: - github_token: ${{ secrets.CHANGELOG_TOKEN }} + github_token: ${{ secrets.CHANGELOG_TOKEN || secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/make_changelogs.yml b/.github/workflows/make_changelogs.yml index 9eb0b97f326a..aceb4aee3130 100644 --- a/.github/workflows/make_changelogs.yml +++ b/.github/workflows/make_changelogs.yml @@ -24,8 +24,7 @@ jobs: pip install ruamel.yaml PyGithub - name: Make CL env: - #GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} Use this instead if you have unprotected branches - GITHUB_TOKEN: ${{ secrets.CHANGELOG_TOKEN }} + GITHUB_TOKEN: ${{ secrets.CHANGELOG_TOKEN || secrets.GITHUB_TOKEN }} GIT_EMAIL: "action@github.com" GIT_NAME: "Changelogs" run: python tools/changelog/generate_cl.py diff --git a/.gitignore b/.gitignore index 6a5d235a316b..35df6d730a28 100644 --- a/.gitignore +++ b/.gitignore @@ -200,9 +200,8 @@ Temporary Items # JavaScript tools **/node_modules -# Screenshot tests -/artifacts - # tool-generated files check_regex_output.txt +# Autowiki +/tools/autowiki/node_modules diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 3e21a9cf446c..1e74feb64306 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -5,6 +5,8 @@ "EditorConfig.EditorConfig", "arcanis.vscode-zipfs", "dbaeumer.vscode-eslint", + "stylemistake.auto-comment-blocks", + "Donkie.vscode-tgstation-test-adapter", "anturk.dmi-editor", "esbenp.prettier-vscode" ] diff --git a/.vscode/launch.json b/.vscode/launch.json index b74e0acda049..42a293a33380 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -15,6 +15,18 @@ "preLaunchTask": "Build All", "dmb": "${workspaceFolder}/${command:CurrentDMB}", "dreamDaemon": true + }, + { + "name": "Debug External Libraries", + "type": "cppvsdbg", + "request": "launch", + "program": "${command:dreammaker.returnDreamDaemonPath}", + "cwd": "${workspaceRoot}", + "args": [ + "${command:dreammaker.getFilenameDmb}", + "-trusted" + ], + "preLaunchTask": "Build All" } ] } diff --git a/.vscode/tasks.json b/.vscode/tasks.json index e5f15008212b..84e86d496519 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -7,7 +7,16 @@ "windows": { "command": ".\\tools\\build\\build.bat" }, - "problemMatcher": ["$dreammaker", "$eslint-stylish"], + "options": { + "env": { + "DM_EXE": "${config:dreammaker.byondPath}" + } + }, + "problemMatcher": [ + "$dreammaker", + "$tsc", + "$eslint-stylish" + ], "group": { "kind": "build", "isDefault": true @@ -18,24 +27,81 @@ { "type": "dreammaker", "dme": "shiptest.dme", - "problemMatcher": ["$dreammaker"], + "problemMatcher": [ + "$dreammaker" + ], + "group": "build", + "label": "dm: build - tgstation.dme" + }, + { + "command": "${command:dreammaker.reparse}", "group": "build", - "label": "dm: build - shiptest.dme" + "label": "dm: reparse" }, { "type": "shell", - "command": "tgui/bin/tgui", + "command": "bin/tgui-build", "windows": { - "command": ".\\tgui\\bin\\tgui.bat" + "command": ".\\bin\\tgui-build.cmd" }, - "problemMatcher": ["$eslint-stylish"], + "problemMatcher": [ + "$tsc", + "$eslint-stylish" + ], "group": "build", "label": "tgui: build" }, { - "command": "${command:dreammaker.reparse}", + "type": "shell", + "command": "bin/tgui-dev", + "windows": { + "command": ".\\bin\\tgui-dev.cmd" + }, + "problemMatcher": [ + "$tsc", + "$eslint-stylish" + ], "group": "build", - "label": "dm: reparse" + "label": "tgui: dev server" + }, + { + "type": "shell", + "command": "bin/tgui-bench", + "windows": { + "command": ".\\bin\\tgui-bench.cmd" + }, + "problemMatcher": [ + "$tsc", + "$eslint-stylish" + ], + "group": "build", + "label": "tgui: bench" + }, + { + "type": "shell", + "command": "bin/tgui-sonar", + "windows": { + "command": ".\\bin\\tgui-sonar.cmd" + }, + "problemMatcher": [ + "$tsc", + "$eslint-stylish" + ], + "group": "build", + "label": "tgui: sonar" + }, + { + "type": "shell", + "command": "bin/tgfont", + "windows": { + "command": ".\\bin\\tgfont.cmd" + }, + "problemMatcher": [ + "$tsc", + "$eslint-stylish" + ], + "group": "build", + "label": "tgui: rebuild tgfont" } ] } diff --git a/README.md b/README.md index 0c3f8281189c..7b45a824099d 100644 --- a/README.md +++ b/README.md @@ -57,5 +57,3 @@ The TGS DMAPI API is licensed as a subproject under the MIT license. See the footer of [code/\_\_DEFINES/tgs.dm](./code/__DEFINES/tgs.dm) and [code/modules/tgs/LICENSE](./code/modules/tgs/LICENSE) for the MIT license. All assets including icons and sound are under a [Creative Commons 3.0 BY-SA license](https://creativecommons.org/licenses/by-sa/3.0/) unless otherwise indicated. - -All assets located in the `goon` and `whitesands/goon` directory are under a [Creative Commons 3.0 BY-NC-SA license](https://creativecommons.org/licenses/by-nc-sa/3.0/). Assets created by Goonstation. diff --git a/_maps/RandomRuins/BeachRuins/beach_knights_rest.dmm b/_maps/RandomRuins/BeachRuins/beach_knights_rest.dmm index f3e7acecbea7..53ffd17a3299 100644 --- a/_maps/RandomRuins/BeachRuins/beach_knights_rest.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_knights_rest.dmm @@ -509,7 +509,7 @@ /turf/open/floor/plating/dirt, /area/ruin/beachplanet/knight) "Bk" = ( -/obj/structure/closet/crate/grave{ +/obj/structure/closet/crate/grave/loot{ icon_state = "grave_lead"; desc = "An marked patch of soil, showing signs of a burial. The headstone cannot be read, its' message torn away by age." }, diff --git a/_maps/RandomRuins/BeachRuins/beach_ocean_town.dmm b/_maps/RandomRuins/BeachRuins/beach_ocean_town.dmm index 27ed10f7b271..151248e75019 100644 --- a/_maps/RandomRuins/BeachRuins/beach_ocean_town.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_ocean_town.dmm @@ -51,6 +51,11 @@ }, /turf/open/water/beach, /area/ruin/beach/oceantown) +"aK" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/bananalamp, +/turf/open/floor/carpet, +/area/ruin/beach/oceantown) "aM" = ( /obj/machinery/door/airlock{ name = "Employees Only" @@ -527,6 +532,11 @@ /obj/structure/flora/ausbushes/leafybush, /turf/open/floor/plating/grass/beach/lit, /area/ruin/beach/oceantown) +"gp" = ( +/obj/structure/table/wood, +/obj/machinery/light/small/directional/west, +/turf/open/floor/carpet/green, +/area/ruin/beach/oceantown) "gu" = ( /obj/effect/turf_decal/sand/plating{ light_range = 2 @@ -1264,10 +1274,6 @@ }, /turf/open/floor/plating/asteroid/sand/lit, /area/ruin/beach/oceantown) -"qJ" = ( -/obj/machinery/light/small/directional/west, -/turf/open/floor/plating/grass/beach/lit, -/area/ruin/beach/oceantown) "qW" = ( /obj/structure/chair/wood{ dir = 4 @@ -1775,6 +1781,12 @@ }, /turf/open/floor/plating/grass/beach/lit, /area/ruin/beach/oceantown) +"xu" = ( +/obj/structure/table/wood, +/obj/item/book/manual/ripley_build_and_repair, +/obj/machinery/light/small/directional/north, +/turf/open/floor/wood, +/area/ruin/beach/oceantown) "xx" = ( /obj/structure/flora/tree/palm{ icon_state = "palm2" @@ -1886,11 +1898,6 @@ light_range = 2 }, /area/ruin/beach/oceantown) -"yC" = ( -/obj/structure/table/wood, -/obj/machinery/light/small/directional/north, -/turf/open/floor/carpet/green, -/area/ruin/beach/oceantown) "yD" = ( /obj/effect/turf_decal/corner/opaque/white/diagonal{ dir = 8 @@ -2148,11 +2155,6 @@ /obj/structure/flora/ausbushes/ywflowers, /turf/open/floor/plating/grass/beach/lit, /area/ruin/beach/oceantown) -"BQ" = ( -/obj/structure/flora/ausbushes/fullgrass, -/obj/machinery/light/small/directional/west, -/turf/open/floor/plating/grass/beach/lit, -/area/ruin/beach/oceantown) "BV" = ( /obj/structure/filingcabinet, /turf/open/floor/plasteel/grimy, @@ -2498,12 +2500,6 @@ light_range = 2 }, /area/ruin/beach/oceantown) -"EX" = ( -/obj/structure/table/wood, -/obj/item/book/manual/ripley_build_and_repair, -/obj/machinery/light/small/directional/north, -/turf/open/floor/wood, -/area/ruin/beach/oceantown) "FA" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -2641,12 +2637,6 @@ light_range = 2 }, /area/ruin/beach/oceantown) -"Gz" = ( -/obj/structure/table/wood, -/obj/item/book/manual/wiki/medical_cloning, -/obj/machinery/light/small/directional/west, -/turf/open/floor/wood, -/area/ruin/beach/oceantown) "GA" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -2731,6 +2721,11 @@ light_range = 2 }, /area/ruin/beach/oceantown) +"Hk" = ( +/obj/effect/turf_decal/weather/sand, +/obj/effect/turf_decal/weather/sand, +/turf/open/water/beach, +/area/ruin/beach/oceantown) "Hp" = ( /obj/structure/table/wood, /obj/machinery/chem_dispenser/drinks/beer/fullupgrade{ @@ -3035,11 +3030,6 @@ light_range = 2 }, /area/ruin/beach/oceantown) -"Kr" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/bananalamp, -/turf/open/floor/carpet, -/area/ruin/beach/oceantown) "Kx" = ( /obj/effect/turf_decal/road/stripes, /obj/effect/turf_decal/road/stripes{ @@ -3313,6 +3303,12 @@ light_range = 2 }, /area/ruin/beach/oceantown) +"Ni" = ( +/obj/structure/table/wood, +/obj/item/book/manual/wiki/medical_cloning, +/obj/machinery/light/small/directional/west, +/turf/open/floor/wood, +/area/ruin/beach/oceantown) "Np" = ( /turf/open/floor/plasteel, /area/ruin/beach/oceantown) @@ -3756,11 +3752,6 @@ /obj/effect/spawner/lootdrop/donut/jelly, /turf/open/floor/plasteel/patterned/grid, /area/ruin/beach/oceantown/shop) -"SV" = ( -/obj/structure/table/wood, -/obj/machinery/light/small/directional/west, -/turf/open/floor/carpet/green, -/area/ruin/beach/oceantown) "SY" = ( /obj/structure/chair/comfy/brown{ dir = 1 @@ -3918,26 +3909,11 @@ "UX" = ( /turf/closed/wall/mineral/wood/nonmetal, /area/ruin/beach/oceantown/shop) -"Vb" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/wood{ - light_range = 2 - }, -/area/ruin/beach/oceantown) "Vf" = ( /obj/structure/closet/secure_closet/freezer/fridge, /obj/effect/turf_decal/box, /turf/open/floor/plasteel/white, /area/ruin/beach/oceantown/bar) -"Vn" = ( -/obj/machinery/light/small/directional/west, -/turf/open/floor/concrete/pavement{ - light_range = 2 - }, -/area/ruin/beach/oceantown) "Vr" = ( /obj/structure/bed, /obj/item/bedsheet/dorms, @@ -4249,6 +4225,11 @@ /obj/structure/closet/crate/bin, /turf/open/floor/plating/asteroid/sand/lit, /area/ruin/beach/oceantown) +"Zc" = ( +/obj/structure/table/wood, +/obj/machinery/light/small/directional/north, +/turf/open/floor/carpet/green, +/area/ruin/beach/oceantown) "Zf" = ( /obj/machinery/door/airlock{ name = "Bathroom" @@ -6048,7 +6029,7 @@ Ru Ru Ru Ru -Vn +Ru Ru Ru Ru @@ -6117,11 +6098,11 @@ xo xo xo xo -Vb -Vb -Vb xo -Vb +xo +xo +xo +xo xo xo xo @@ -6190,10 +6171,10 @@ uC FF Wl Wl -qJ -qJ -qJ -qJ +Wl +Wl +Wl +Wl Wl Wl Wl @@ -6266,8 +6247,8 @@ pB Wl Wl FF -BQ -BQ +FF +FF Wl rl qw @@ -6510,14 +6491,14 @@ rl FF FF xh -SV +gp xF im dT IU VZ sj -Gz +Ni lc Al sp @@ -6896,7 +6877,7 @@ PC qw xh KO -Kr +aK sy xh ao @@ -8471,7 +8452,7 @@ YU YU "} (55,1,1) = {" -qp +Hk sa sa sa @@ -8548,7 +8529,7 @@ YU YU "} (56,1,1) = {" -ev +qp sa sa sa @@ -8625,7 +8606,7 @@ YU YU "} (57,1,1) = {" -ev +qp sa sa sa @@ -8702,7 +8683,7 @@ YU YU "} (58,1,1) = {" -ev +qp sa sa sa @@ -9228,7 +9209,7 @@ Ru fG Wl xh -EX +xu dT zl bu @@ -9767,7 +9748,7 @@ Ru fG gn xh -yC +Zc im Pm dT diff --git a/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm b/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm index 757931fd667f..7e941ad57cba 100644 --- a/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm @@ -212,7 +212,7 @@ }, /area/ruin/unpowered) "ie" = ( -/obj/structure/closet/crate/grave{ +/obj/structure/closet/crate/grave/loot{ desc = "Here lies our great brother and infamous pirate" }, /obj/effect/decal/cleanable/dirt/dust, diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_icecropolis.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_icecropolis.dmm index d2d296cc1d8c..529c6f52abcf 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_icecropolis.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_icecropolis.dmm @@ -2062,7 +2062,7 @@ /area/ruin/unpowered/icecropolis/gold) "LQ" = ( /obj/structure/stone_tile/slab, -/obj/structure/chair/bronze{ +/obj/structure/chair/comfy/shuttle/bronze{ dir = 8 }, /turf/open/indestructible/boss/air, @@ -2178,7 +2178,7 @@ /turf/open/indestructible/boss/air, /area/ruin/unpowered/icecropolis/gold) "Os" = ( -/obj/structure/chair/bronze{ +/obj/structure/chair/comfy/shuttle/bronze{ dir = 8 }, /turf/open/floor/wood/icecropolis, diff --git a/_maps/RandomRuins/JungleRuins/jungle_demon.dmm b/_maps/RandomRuins/JungleRuins/jungle_demon.dmm index 5c518ed7dd51..e375a1a0d12c 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_demon.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_demon.dmm @@ -175,7 +175,7 @@ /turf/open/floor/plasteel/dark, /area/ruin/powered) "rc" = ( -/obj/structure/closet/crate/grave, +/obj/structure/closet/crate/grave/loot, /turf/open/floor/plating/dirt/jungle/lit, /area/ruin/unpowered) "rx" = ( diff --git a/_maps/RandomRuins/JungleRuins/jungle_medtech_outbreak.dmm b/_maps/RandomRuins/JungleRuins/jungle_medtech_outbreak.dmm index 65068fa3fe27..022e5a8b1d7b 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_medtech_outbreak.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_medtech_outbreak.dmm @@ -1534,7 +1534,7 @@ /turf/open/floor/plating/dirt/jungle/wasteland/lit, /area/ruin/jungle) "yW" = ( -/obj/structure/closet/crate/grave, +/obj/structure/closet/crate/grave/loot, /turf/open/floor/plating/dirt/jungle/wasteland/lit, /area/ruin/jungle) "yZ" = ( diff --git a/_maps/RandomRuins/JungleRuins/jungle_seedling.dmm b/_maps/RandomRuins/JungleRuins/jungle_seedling.dmm index f4bd9c4fe94a..4a4dc539f877 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_seedling.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_seedling.dmm @@ -57,7 +57,6 @@ /obj/item/organ/cyberimp/arm/surgery, /obj/item/organ/eyes/night_vision/mushroom, /obj/item/organ/heart/cybernetic/tier3, -/obj/item/organ/liver/dwarf, /obj/item/organ/liver/plasmaman, /obj/item/organ/tongue/robot, /obj/item/organ/moth_wings, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_comm_outpost.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_comm_outpost.dmm index fd8b2f0dd6b9..8bd664c74a07 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_comm_outpost.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_comm_outpost.dmm @@ -158,7 +158,7 @@ }, /area/ruin/unpowered/syndicate_outpost) "MK" = ( -/obj/structure/closet/crate/grave, +/obj/structure/closet/crate/grave/loot, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/syndicate_outpost) "NT" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_elephant_graveyard.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_elephant_graveyard.dmm index 59daf228c50c..4e45afdabceb 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_elephant_graveyard.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_elephant_graveyard.dmm @@ -10,7 +10,7 @@ /area/ruin/unpowered/elephant_graveyard) "ad" = ( /obj/effect/decal/cleanable/cobweb, -/obj/structure/closet/crate/grave/lead_researcher, +/obj/structure/closet/crate/grave/loot/lead_researcher, /obj/effect/decal/cleanable/blood/gibs/old, /obj/effect/mob_spawn/human/skeleton, /turf/open/floor/plating/asteroid/basalt/wasteland, @@ -383,7 +383,7 @@ /area/ruin/unpowered/elephant_graveyard) "bM" = ( /obj/item/storage/fancy/cigarettes/cigpack_mindbreaker, -/obj/structure/closet/crate/grave, +/obj/structure/closet/crate/grave/loot, /turf/open/floor/plating/asteroid/basalt/wasteland, /area/ruin/unpowered/elephant_graveyard) "bN" = ( @@ -505,7 +505,7 @@ /turf/open/floor/plating/asteroid/basalt/wasteland, /area/ruin/unpowered/elephant_graveyard) "cl" = ( -/obj/structure/closet/crate/grave, +/obj/structure/closet/crate/grave/loot, /obj/effect/mob_spawn/human/skeleton, /turf/open/floor/plating/asteroid/basalt/wasteland, /area/ruin/unpowered/elephant_graveyard) @@ -558,7 +558,7 @@ /turf/open/floor/mineral/titanium/white, /area/ruin/powered/graveyard_shuttle) "cw" = ( -/obj/structure/closet/crate/grave, +/obj/structure/closet/crate/grave/loot, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/mob_spawn/human/skeleton, /turf/open/floor/plating/asteroid/basalt/wasteland, diff --git a/_maps/RandomRuins/ReebeRuins/reebe_arena.dmm b/_maps/RandomRuins/ReebeRuins/reebe_arena.dmm index 54d5adb49d9f..448690c0e77a 100644 --- a/_maps/RandomRuins/ReebeRuins/reebe_arena.dmm +++ b/_maps/RandomRuins/ReebeRuins/reebe_arena.dmm @@ -27,7 +27,7 @@ /turf/open/floor/bronze, /area/ruin/reebe) "hO" = ( -/obj/structure/chair/bronze{ +/obj/structure/chair/comfy/shuttle/bronze{ dir = 4 }, /turf/open/floor/bronze, @@ -55,7 +55,7 @@ /turf/open/floor/bronze, /area/ruin/reebe) "qC" = ( -/obj/structure/chair/bronze, +/obj/structure/chair/comfy/shuttle/bronze, /obj/item/nullrod/spear, /turf/open/floor/bronze, /area/ruin/reebe) @@ -84,7 +84,7 @@ /turf/open/chasm/reebe_void, /area/ruin/reebe) "zu" = ( -/obj/structure/chair/bronze{ +/obj/structure/chair/comfy/shuttle/bronze{ dir = 8 }, /turf/open/floor/bronze, @@ -170,7 +170,7 @@ /turf/open/floor/bronze, /area/ruin/reebe) "JC" = ( -/obj/structure/chair/bronze{ +/obj/structure/chair/comfy/shuttle/bronze{ dir = 1 }, /turf/open/floor/bronze, diff --git a/_maps/RandomRuins/RockRuins/rockplanet_clock.dmm b/_maps/RandomRuins/RockRuins/rockplanet_clock.dmm index 754fd1664c38..3a8da9995006 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_clock.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_clock.dmm @@ -75,7 +75,7 @@ /area/ruin/powered) "kd" = ( /obj/structure/fluff/clockwork/alloy_shards/medium_gearbit, -/obj/structure/chair/bronze{ +/obj/structure/chair/comfy/shuttle/bronze{ dir = 4 }, /turf/open/floor/bronze, @@ -90,7 +90,7 @@ /turf/open/floor/bronze, /area/ruin/powered) "mG" = ( -/obj/structure/chair/bronze, +/obj/structure/chair/comfy/shuttle/bronze, /turf/open/floor/bronze, /area/ruin/powered) "nM" = ( @@ -173,11 +173,11 @@ /area/ruin/powered) "xt" = ( /obj/structure/fluff/clockwork/alloy_shards/medium_gearbit, -/obj/structure/closet/crate/grave, +/obj/structure/closet/crate/grave/loot, /turf/open/floor/plating/asteroid/rockplanet/lit, /area/overmap_encounter/planetoid/rockplanet/explored) "xV" = ( -/obj/structure/chair/bronze{ +/obj/structure/chair/comfy/shuttle/bronze{ dir = 4 }, /obj/effect/decal/cleanable/blood/old, @@ -188,7 +188,7 @@ /turf/open/floor/bronze, /area/ruin/powered) "zz" = ( -/obj/structure/chair/bronze, +/obj/structure/chair/comfy/shuttle/bronze, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/bronze, /area/ruin/powered) @@ -212,7 +212,7 @@ /turf/open/floor/bronze, /area/ruin/powered) "EB" = ( -/obj/structure/closet/crate/grave, +/obj/structure/closet/crate/grave/loot, /turf/open/floor/plating/asteroid/rockplanet/lit, /area/overmap_encounter/planetoid/rockplanet/explored) "FE" = ( @@ -297,7 +297,7 @@ /turf/closed/wall/mineral/bronze, /area/ruin/powered) "Rt" = ( -/obj/structure/chair/bronze{ +/obj/structure/chair/comfy/shuttle/bronze{ dir = 4 }, /turf/open/floor/bronze, @@ -365,7 +365,7 @@ /turf/open/floor/plating/asteroid/rockplanet/lit, /area/overmap_encounter/planetoid/rockplanet/explored) "ZY" = ( -/obj/structure/chair/bronze{ +/obj/structure/chair/comfy/shuttle/bronze{ dir = 8 }, /turf/open/floor/bronze, diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm index df1ba2082d3e..3a1b95cb19ca 100644 --- a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm +++ b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm @@ -42,7 +42,7 @@ }, /area/whitesands/surface/outdoors) "bO" = ( -/obj/structure/closet/crate/grave, +/obj/structure/closet/crate/grave/loot, /obj/item/ammo_casing/shotgun/meteorslug, /turf/open/floor/plating/asteroid/whitesands{ light_range = 2 @@ -211,7 +211,7 @@ }, /area/whitesands/surface/outdoors) "ig" = ( -/obj/structure/closet/crate/grave, +/obj/structure/closet/crate/grave/loot, /turf/open/floor/plating/asteroid/whitesands{ light_range = 2 }, diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_saloon.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_saloon.dmm index 6c16dc5b7c7b..c9c0252fd786 100644 --- a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_saloon.dmm +++ b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_saloon.dmm @@ -544,7 +544,7 @@ /turf/open/floor/wood, /area/ruin/whitesands/saloon) "ph" = ( -/obj/structure/closet/crate/grave, +/obj/structure/closet/crate/grave/loot, /obj/item/gun/ballistic/derringer/traitor, /turf/open/floor/plating/asteroid/whitesands/grass/lit, /area/ruin/whitesands/saloon) @@ -1515,7 +1515,7 @@ }, /area/ruin/whitesands/saloon) "Ux" = ( -/obj/structure/closet/crate/grave, +/obj/structure/closet/crate/grave/loot, /obj/item/gun/ballistic/derringer, /turf/open/floor/plating/asteroid/whitesands/grass/lit, /area/ruin/whitesands/saloon) diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_pod.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_pod.dmm index f369cee46c4d..e62116ca468c 100644 --- a/_maps/RandomRuins/WasteRuins/wasteplanet_pod.dmm +++ b/_maps/RandomRuins/WasteRuins/wasteplanet_pod.dmm @@ -3,7 +3,7 @@ /turf/template_noop, /area/template_noop) "f" = ( -/obj/structure/closet/crate/grave, +/obj/structure/closet/crate/grave/loot, /turf/open/floor/plating/asteroid/wasteplanet, /area/overmap_encounter/planetoid/rockplanet/explored) "g" = ( diff --git a/_maps/configs/independent_beluga.json b/_maps/configs/independent_beluga.json index 8894d6bd1c9a..dcbcba91b54d 100644 --- a/_maps/configs/independent_beluga.json +++ b/_maps/configs/independent_beluga.json @@ -5,6 +5,13 @@ "namelists": ["CRUISE", "NATURAL"], "map_short_name": "Beluga-class", "map_path": "_maps/shuttles/shiptest/independent_beluga.dmm", + "description": "The Beluga-Class is a transport vessel for those with especially rich blood. Featuring a modest kitchen, hired Inteq security, and luxurious decoration, the Beluga is a first choice pick for many wealthy spacers trying to get from point A to B. The independent ship features several rooms for its guests and a well furnished meeting room for any corporate occassion.", + "tags": [ + "RP Focus", + "Riot", + "Service" + ], + "starting_funds": 4000, "limit": 2, "roundstart": true, "job_slots": { @@ -28,11 +35,20 @@ }, "High-Class Passenger": { "outfit": "/datum/outfit/job/lawyer/passenger", - "slots" : 4 + "slots": 4 }, - "Bartender": 1, - "Janitor": 1, - "Assistant": 2 + "Bartender": { + "outfit": "/datum/outfit/job/bartender", + "slots": 1 + }, + "Janitor": { + "outfit": "/datum/outfit/job/janitor", + "slots": 1 + }, + "Assistant": { + "outfit": "/datum/outfit/job/assistant", + "slots": 2 + } }, "enabled": true } diff --git a/_maps/configs/independent_box.json b/_maps/configs/independent_box.json index 351180269be7..f4a836900702 100644 --- a/_maps/configs/independent_box.json +++ b/_maps/configs/independent_box.json @@ -2,6 +2,10 @@ "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Box-class Hospital Ship", "map_short_name": "Box-class", + "description": "An early exemplar of several modern shipbuilding techniques that have since become standard, the Box is effectively a tiny spaceborne hospital, loaded with medical equipment that can often be difficult to source in Frontier space. Unusually, Boxes come equipped with medical cryo tubes, which have become a particular rarity on the Frontier due to their delicate nature and steep upkeep costs. Boxes are often found in surprisingly good repair for their age, and they have received several upgrades over the decades that have kept them well abreast of advances in medical science.", + "tags": [ + "Medical" + ], "map_path": "_maps/shuttles/shiptest/independent_box.dmm", "namelists": [ "GENERAL", @@ -10,13 +14,22 @@ ], "prefix": "ISV", "job_slots": { - "Chief Medical Officer": 1, + "Chief Medical Officer": { + "outfit": "/datum/outfit/job/cmo", + "slots": 1 + }, "Medical Doctor": { "outfit": "/datum/outfit/job/doctor", "slots": 3 }, - "Paramedic": 2, - "Assistant": 3 + "Paramedic": { + "outfit": "/datum/outfit/job/paramedic", + "slots": 2 + }, + "Assistant": { + "outfit": "/datum/outfit/job/assistant", + "slots": 3 + } }, "enabled": true } diff --git a/_maps/configs/independent_boyardee.json b/_maps/configs/independent_boyardee.json index cb830aea99cc..f5f14556d842 100644 --- a/_maps/configs/independent_boyardee.json +++ b/_maps/configs/independent_boyardee.json @@ -2,11 +2,18 @@ "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Boyardee-class Entertainment Vessel", "prefix": "ISV", + "description": "Named for an ancient Solarian folk hero known for providing food to the masses shortly after the Night of Fire, the Boyardee-class is a remarkably popular civilian vessel, and a welcome sight to any weary travelers tired of synthesized tap water and stale rations for breakfast, lunch and dinner every day. The Boyardee-class features a full bar, an advanced hydroponics setup, a large kitchen and an expansive seating area, perfect for serving hungry customers and thirsty colonists. During the early days of the Syndicate, associated organizations would often create their own retrofits of the Boyardee to serve as recruiting centers or “shore-leave” posts, though these variants have mostly ceased to exist in the Frontier.", + "tags": [ + "Service", + "Botany", + "RP Focus" + ], "namelists": [ "GENERAL", "SPACE", "MERCANTILE" ], + "starting_funds": 5000, "map_short_name": "Boyardee-class", "map_path": "_maps/shuttles/shiptest/independent_boyardee.dmm", "job_slots": { @@ -14,9 +21,18 @@ "outfit": "/datum/outfit/job/bartender", "slots": 1 }, - "Cook": 3, - "Botanist": 2, - "Janitor": 1, + "Cook": { + "outfit": "/datum/outfit/job/cook", + "slots": 3 + }, + "Botanist": { + "outfit": "/datum/outfit/job/botanist", + "slots": 2 + }, + "Janitor": { + "outfit": "/datum/outfit/job/janitor", + "slots": 1 + }, "Waiter": { "outfit": "/datum/outfit/job/assistant/waiter", "slots": 2 diff --git a/_maps/configs/independent_bubble.json b/_maps/configs/independent_bubble.json index f1f385274bf3..6c94b80564ee 100644 --- a/_maps/configs/independent_bubble.json +++ b/_maps/configs/independent_bubble.json @@ -3,6 +3,11 @@ "map_name": "Bubble-class Colonial Ship", "map_short_name": "Bubble-class", "map_path": "_maps/shuttles/shiptest/independent_bubble.dmm", + "description": "While the most famous colony ships were hulking, highly-advanced affairs designed to ferry hundreds-if-not-thousands of settlers to far-off worlds and create cities in a matter of months – the Kalixcian Moonlight, the Candor, the First Train to Fort Sol – the Bubble-class is designed to cater to homesteaders aiming to establish a small ranch or village out in the great vastness of space. The Bubble-class is highly compact but complete with all the necessities for colony creation – extensive R&D equipment, robust mining gear, and a small selection of personal arms for fending off hostile fauna. While the Bubble-class has been historically utilized by the Solarian Federation for colony efforts, their proprietary version has recently been phased out of operation.", + "tags": [ + "Generalist", + "Construction" + ], "namelists": [ "GENERAL", "SPACE" @@ -10,11 +15,26 @@ "prefix": "ISV", "limit": 1, "job_slots": { - "Captain": 1, - "Scientist": 1, - "Station Engineer": 1, - "Shaft Miner": 1, - "Assistant": 3 + "Captain": { + "outfit": "/datum/outfit/job/captain", + "slots": 1 + }, + "Scientist": { + "outfit": "/datum/outfit/job/scientist", + "slots": 1 + }, + "Station Engineer": { + "outfit": "/datum/outfit/job/engineer", + "slots": 1 + }, + "Shaft Miner": { + "outfit": "/datum/outfit/job/miner", + "slots": 1 + }, + "Assistant": { + "outfit": "/datum/outfit/job/assistant", + "slots": 3 + } }, "enabled": false } diff --git a/_maps/configs/independent_byo.json b/_maps/configs/independent_byo.json index 50f78396cf0d..36fc8718678a 100644 --- a/_maps/configs/independent_byo.json +++ b/_maps/configs/independent_byo.json @@ -3,6 +3,11 @@ "map_name": "BYO-class Do-It-Yourself Enthusiast Special", "map_short_name": "BYO-class", "map_path": "_maps/shuttles/shiptest/independent_byo.dmm", + "description": "The BYO can barely be considered a “ship” when initially deployed; more of a construction platform launched hazardously into space. The only thing that separates crews on a BYO from breathable safety and the cold vacuum of space are typically little airtight flaps of plastic. Equipped with a plethora of building material and tools fit for construction, BYO vessels are seen in a variety of shapes and sizes, and almost never with any consistency of form.", + "tags": [ + "Engineering", + "Construction" + ], "namelists": [ "ENGINEERING", "GENERAL" diff --git a/_maps/configs/independent_caravan.json b/_maps/configs/independent_caravan.json index d4e64be8ac6b..3e244cbf49b5 100644 --- a/_maps/configs/independent_caravan.json +++ b/_maps/configs/independent_caravan.json @@ -4,6 +4,11 @@ "map_short_name": "Caravan-class", "map_path": "_maps/shuttles/shiptest/independent_caravan.dmm", "prefix": "ISV", + "description": "The Caravan is a relatively new freighter pattern, designed around a modular pod system that enables the ship to serve in a variety of roles beyond simple transportation. These pods are designed around a quick-release mechanism that allows the main hull to bluespace jump in, detach the pods, and load a new set of empty Caravan-type pods in a matter of minutes. While impressive in theory, the lack of empty compatible cargo pods in Frontier space renders the quick-detach system useless. Additionally, the modular attachment system is prone to wear and tear, necessitating more frequent and costly maintenance than other freighters. Despite these shortcomings, the Caravan has still earned a reputation as a versatile platform for a variety of missions. The main hull features a robust power pack and respectable crew accommodations, and most examples on the Frontier carry pods loaded for mining and survey duties.", + "tags": [ + "Generalist", + "Engineering" + ], "namelists": [ "GENERAL", "SPACE", @@ -33,7 +38,10 @@ "outfit": "/datum/outfit/job/scientist", "slots": 1 }, - "Assistant": 1 + "Assistant": { + "outfit": "/datum/outfit/job/assistant", + "slots": 1 + } }, "enabled": true } diff --git a/_maps/configs/independent_dwayne.json b/_maps/configs/independent_dwayne.json index 128c73aaad41..2d312fabc045 100644 --- a/_maps/configs/independent_dwayne.json +++ b/_maps/configs/independent_dwayne.json @@ -10,6 +10,11 @@ ], "map_short_name": "Mk.II Dwayne-class ", "map_path": "_maps/shuttles/shiptest/independent_dwayne.dmm", + "description": "The Dwayne is one of the older classes of ships commonly seen on the Frontier, and one of the few such classes that doesn’t also carry a reputation for nightmarish conditions or high accident rates. Originally conceived of as a “mothership” for Nanotrasen mining shuttles that could enable long-duration mining missions at minimal cost, severe budget overruns and issues with the mining shuttle docking system left Nanotrasen with a massive number of mostly-completed hulls upon the project’s cancellation. These hulls were then quickly refurbished and sold on the civilian market, where they proved an immediate success on the Frontier. Contemporary Dwaynes can typically be found carrying a variety of mining equipment and extensive modifications unique to their captains. Recently-available aftermarket modifications have solved the Dwayne’s longstanding shuttle dock issues, allowing modern Dwaynes to finally serve their original design purpose, provided the captain is able to source a shuttle.", + "tags": [ + "Mining", + "Generalist" + ], "roundstart": true, "limit": 1, "job_slots": { diff --git a/_maps/configs/independent_halftrack.json b/_maps/configs/independent_halftrack.json index 69c63948ffa0..65d63f6df6cc 100644 --- a/_maps/configs/independent_halftrack.json +++ b/_maps/configs/independent_halftrack.json @@ -7,9 +7,17 @@ "WEAPONS" ], "map_short_name": "Halftrack-Class", + "description": "A rare sight in the Frontier (but a welcome one), the Halftrack-class is a heavily retrofitted variant of the Li Tieguai-class Rescue Ship, used as a mobile firearms shop by enterprising arms dealers everywhere. While initial variants of the vessel were more obviously just the Li Tieguai with the medical fixtures stripped out and replaced with gun racks and ammunition lockers, the modern iteration of the Halftrack comes complete with a firing range, an Inteq-certified security compliment and a centralized sales floor perfect for showing off the wares while keeping them safe at the same time.", + "tags": [ + "Combat", + "Cargo" + ], "map_path": "_maps/shuttles/shiptest/independent_halftrack.dmm", "job_slots": { - "Captain": 1, + "Captain": { + "outfit": "/datum/outfit/job/captain", + "slots": 1 + }, "IRMG Vanguard": { "outfit": "/datum/outfit/job/captain/inteq", "officer": true, diff --git a/_maps/configs/independent_junker.json b/_maps/configs/independent_junker.json new file mode 100644 index 000000000000..26d3ab445766 --- /dev/null +++ b/_maps/configs/independent_junker.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", + "map_name": "Junker-class Salvaged Ship", + "prefix": "ISV", + "namelists": [ + "GENERAL", + "SPACE" + ], + "map_short_name": "Junker-class", + "description": "The Junker-class is not an official class, but rather the name for a general group of designs crafted from the ruins of old ships or stations. These ships became a common sight during the ICW, as deserters fled areas of conflict on these 'junkers', unprepared for the challenges of spacer life. They have since become a rare sight, and the few surviving crews of these ships typically bear a sense of disdain to ordinary power structures, and usually have no defined captain, or even owner, of the vessel.", + "tags": [ + "Survival Challenge" + ], + "starting_funds": 0, + "map_path": "_maps/shuttles/shiptest/independent_junker.dmm", + "limit": 1, + "job_slots": { + "Assistant": { + "outfit": "/datum/outfit/job/assistant", + "slots": 4 + } + }, + "enabled": true +} diff --git a/_maps/configs/independent_kilo.json b/_maps/configs/independent_kilo.json index b840570c84ba..7877bbfcd08e 100644 --- a/_maps/configs/independent_kilo.json +++ b/_maps/configs/independent_kilo.json @@ -1,6 +1,10 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Kilo-class Mining Ship", + "description": "The Kilo-class is a miniscule mining ship that stretches the definition of an independently-capable spacecraft. Beginning life long ago as a series of purpose-built mining shuttles intended for use on Frontier outposts, progressive cycles of over-engineering for a longer mission duration eventually produced the lumpen, claustrophobic Kilo seen today. Once quite numerous, Kilos are still a common “barn find” on abandoned stations and forgotten storage bays, and their extreme age and poor storage conditions typically leaves them in especially poor condition. Kilo crews are often considered to be quite eccentric even by Frontier standards, and some spacers insist even a well-balanced spacer will quickly come unglued in the Kilo’s “unique” environment.", + "tags": [ + "Generalist" + ], "prefix": "ISV", "namelists": [ "GENERAL", @@ -8,6 +12,7 @@ "NATURAL" ], "map_short_name": "Kilo-class", + "starting_funds": 1500, "map_path": "_maps/shuttles/shiptest/independent_kilo.dmm", "job_slots": { "Captain": { diff --git a/_maps/configs/independent_lagoon.json b/_maps/configs/independent_lagoon.json index 725f16a6c32f..3be6a5d95b74 100644 --- a/_maps/configs/independent_lagoon.json +++ b/_maps/configs/independent_lagoon.json @@ -2,29 +2,63 @@ "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Lagoon-class Cruise Ship", "prefix": "ISV", + "description": "An unusual sight in the relatively impoverished Frontier, the Lagoon-class is a large pleasure vessel dedicated to transporting its passengers to any number of exotic locales. Lagoons found on the Frontier tend to contain crews and passengers of a particularly daring – or foolhardy – character, willing to pay out the nose for a tour of some of the most dangerous regions in known space. Accordingly, Lagoons in these regions typically include a small but respectably equipped security contingent to protect (and, when necessary, rein in) the passengers, and come with a surprisingly powerful thermo-electric generator to move the ship’s prodigious bulk across vast expanses of space.", + "tags": [ + "RP Focus", + "Service", + "Engineering" + ], "namelists": [ "CRUISE" ], "map_short_name": "Lagoon-class", "map_path": "_maps/shuttles/shiptest/independent_lagoon.dmm", + "starting_funds": 3000, "job_slots": { - "Captain": 1, + "Captain": { + "outfit": "/datum/outfit/job/captain", + "slots": 1 + }, "Cruise Director": { "outfit": "/datum/outfit/job/head_of_personnel", "slots": 1 }, - "Security Officer": 2, - "Medical Doctor": 1, + "Security Officer": { + "outfit": "/datum/outfit/job/security", + "slots": 2 + }, + "Medical Doctor": { + "outfit": "/datum/outfit/job/doctor", + "slots": 1 + }, "Ship Engineer": { "outfit": "/datum/outfit/job/atmos", "slots": 1 }, - "Bartender": 1, - "Cook": 1, - "Botanist": 1, - "Curator": 1, - "Chaplain": 1, - "Janitor": 1, + "Bartender": { + "outfit": "/datum/outfit/job/bartender", + "slots": 1 + }, + "Cook": { + "outfit": "/datum/outfit/job/cook", + "slots": 1 + }, + "Botanist": { + "outfit": "/datum/outfit/job/botanist", + "slots": 1 + }, + "Curator": { + "outfit": "/datum/outfit/job/curator", + "slots": 1 + }, + "Chaplain": { + "outfit": "/datum/outfit/job/chaplain", + "slots": 1 + }, + "Janitor": { + "outfit": "/datum/outfit/job/janitor", + "slots": 1 + }, "Passenger": { "outfit": "/datum/outfit/job/assistant/corporate", "slots": 10 diff --git a/_maps/configs/independent_litieguai.json b/_maps/configs/independent_litieguai.json index aadf6e7a460c..8128d3f6c980 100644 --- a/_maps/configs/independent_litieguai.json +++ b/_maps/configs/independent_litieguai.json @@ -2,6 +2,10 @@ "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Li Tieguai-class Rescue Ship", "map_short_name": "Li Tieguai-class", + "description": "A small, nimble, and exceptionally well-built medical response vessel, the Li Tieguai is a recent addition to Cybersun’s fleet, forming a critical component of their Frontier stabilization program. Li Tieguais come equipped with high-end medical equipment, including a selection of Cybersun augments and prosthetics, as well as weaponry and armor sufficient to protect its personnel in the often-dangerous Frontier sectors, so that they can offer premium healthcare (at premium prices) in even the most dangerous of scenarios.", + "tags": [ + "Medical" + ], "map_path": "_maps/shuttles/shiptest/independent_litieguai.dmm", "namelists": [ "SPACE", @@ -9,7 +13,10 @@ "NATURAL_AGGRESSIVE" ], "job_slots": { - "Captain": 1, + "Captain": { + "outfit": "/datum/outfit/job/captain", + "slots": 1 + }, "Chief Medical Officer": { "outfit": "/datum/outfit/job/cmo/medicaldirector", "officer": true, diff --git a/_maps/configs/independent_masinyane.json b/_maps/configs/independent_masinyane.json index fb5d2c35f907..4c4cdd330ecb 100644 --- a/_maps/configs/independent_masinyane.json +++ b/_maps/configs/independent_masinyane.json @@ -2,6 +2,10 @@ "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Masinyane-Class Personal Shuttle", "map_short_name": "Masinyane-Class", + "description": "The Masinyane is the sports car of space, with the price tag to match. Staggeringly fast and equipped with top of the line gear, Masinyanes are generally found in the hands of lone pilots with far more money than sense. The Masinyane was only ever produced in very limited numbers, and a series of fraud investigations involving a complex web of production contractors and shell companies have effectively put a halt to any further production. As such, they are exceedingly rare even in the core worlds – on the Frontier, they are practically non-existent.", + "tags": [ + "Generalist" + ], "prefix": "ISV", "namelists": [ "MYTHOLOGICAL", diff --git a/_maps/configs/independent_meta.json b/_maps/configs/independent_meta.json index 8b9b7c990467..26bd1504b3a9 100644 --- a/_maps/configs/independent_meta.json +++ b/_maps/configs/independent_meta.json @@ -3,6 +3,11 @@ "map_name": "Meta-class Freighter", "prefix": "ISV", "map_short_name": "Meta-class", + "description": "The Meta-class is a small freight vessel, and even before the ICW was a common sight on the Frontier as a tramp freighter, running independent contracts between the myriad outposts of the area (with, occasionally, some smuggling or mining on the side). Since the collapse of Nanotrasen’s logistics network in the Frontier region, Meta-classes operating in this capacity have exploded in popularity, and are likely to remain a very common sight wherever larger corporations such as Donk! Co. have yet to establish market dominance.", + "tags": [ + "Generalist", + "Cargo" + ], "namelists": [ "GENERAL", "SPACE", @@ -10,15 +15,30 @@ ], "map_path": "_maps/shuttles/shiptest/independent_meta.dmm", "job_slots": { - "Captain": 1, - "Quartermaster": 1, + "Captain": { + "outfit": "/datum/outfit/job/captain", + "slots": 1 + }, + "Quartermaster": { + "outfit": "/datum/outfit/job/quartermaster", + "slots": 1 + }, "Medical Doctor": { "outfit": "/datum/outfit/job/doctor", "slots": 1 }, - "Station Engineer": 1, - "Shaft Miner": 1, - "Assistant": 3 + "Station Engineer": { + "outfit": "/datum/outfit/job/engineer", + "slots": 1 + }, + "Shaft Miner": { + "outfit": "/datum/outfit/job/miner", + "slots": 1 + }, + "Assistant": { + "outfit": "/datum/outfit/job/assistant", + "slots": 3 + } }, "enabled": true } diff --git a/_maps/configs/independent_metis.json b/_maps/configs/independent_metis.json index 516cc255280a..ce0cb6fa7151 100644 --- a/_maps/configs/independent_metis.json +++ b/_maps/configs/independent_metis.json @@ -2,12 +2,19 @@ "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Metis-class Experimental Extrasolar Pathfinder", "map_short_name": "Metis-class", + "description": "The elderly Metis-class is effectively a mobile research barge, a large and ungainly hunk of titanium outfitted with a wide variety of scientific facilities and equipment. While the specifics of any given Metis are subject to extreme variance, common features include AI facilities, xenobiological research chambers, and robotics equipment. Due to the dangerous and often tenuously-legal research typically pursued on the Frontier as well as tight budgets and low safety investment common to independent research teams, the Metis-class has earned a reputation for disaster, and abandoned Metises overrun with xenofauna or rogue machines are a disturbingly common sight in some parts of the Frontier.", + "tags": [ + "Science", + "Robotics", + "Survival Challenge" + ], "map_path": "_maps/shuttles/shiptest/independent_metis.dmm", "prefix": "ISV", "namelists": [ "SPACE" ], - "limit": 2, + "limit": 1, + "starting_funds": 500, "job_slots": { "Extraterrestrial Exploratory Project Supervisor": { "outfit": "/datum/outfit/job/rd", diff --git a/_maps/configs/independent_nemo.json b/_maps/configs/independent_nemo.json index 200450ae7f23..38a86fbcb523 100644 --- a/_maps/configs/independent_nemo.json +++ b/_maps/configs/independent_nemo.json @@ -8,9 +8,19 @@ "SPACE" ], "map_short_name": "Nemo-class", + "description": "The Nemo-Class is an eccentric collector’s dream vessel, perfectly suited to all the journalists, antiquarians and kooks of the Frontier. Featuring a comfortable study, a full robotics workshop (perfectly suited to building yourself some assistants!) and a host of esoteric weapons suitable for hunting creatures to mount above your fireplace. Other highlights include a compact-yet-functional medical bay, a reasonably well-designed engineering bay and a large array of mining equipment.", + "tags": [ + "Engineering", + "Mining", + "Robotics" + ], + "starting_funds": 500, "map_path": "_maps/shuttles/shiptest/independent_nemo.dmm", "job_slots": { - "Research Director": 1, + "Research Director": { + "outfit": "/datum/outfit/job/rd", + "slots": 1 + }, "Fauna Researcher": { "outfit": "/datum/outfit/job/scientist", "slots": 1 @@ -31,9 +41,18 @@ "outfit": "/datum/outfit/job/engineer/maintenancetechnician", "slots": 1 }, - "Atmospheric Technician": 1, - "Curator": 1, - "Assistant": 1 + "Atmospheric Technician": { + "outfit": "/datum/outfit/job/atmos", + "slots": 1 + }, + "Curator": { + "outfit": "/datum/outfit/job/curator", + "slots": 1 + }, + "Assistant": { + "outfit": "/datum/outfit/job/assistant", + "slots": 1 + } }, "enabled": true } diff --git a/_maps/configs/independent_pill.json b/_maps/configs/independent_pill.json index 07e72b82bb9b..18b1a3968033 100644 --- a/_maps/configs/independent_pill.json +++ b/_maps/configs/independent_pill.json @@ -7,10 +7,18 @@ "PIRATES" ], "map_short_name": "Pillbottle-class", + "description": "The “Pillbottle,” as a class, should not rightfully exist. Tell-tale signs indicate that these ships originated as bulk carriers and tugs, but they have since been haphazardly converted into a carrier of sorts for a wing of Pill-class escape pods. As with the Pills, Pillbottles are crewed entirely by escaped prisoners, and as a rule, they operate in a state of complete anarchy. The only consistent aspect of Pillbottle crews is their inconsistency, but the realities of prison life tend to make the worst out of anyone.", + "tags": [ + "Specialist" + ], "map_path": "_maps/shuttles/shiptest/independent_pillbottle.dmm", "limit":1, + "starting_funds": 0, "job_slots": { - "Prisoner": 10 + "Prisoner": { + "outfit": "/datum/outfit/job/prisoner", + "slots": 10 + } }, "enabled": false } diff --git a/_maps/configs/independent_rigger.json b/_maps/configs/independent_rigger.json index c43efcdc7f0e..ed778696bd74 100644 --- a/_maps/configs/independent_rigger.json +++ b/_maps/configs/independent_rigger.json @@ -9,6 +9,13 @@ "NATURAL_AGGRESSIVE" ], "map_short_name": "Riggs-class", + "description": "The Rigger-class is Kasagi-Fischer Partnership’s mainstay in the independent ship market. Spacious, affordable, and versatile, Riggers offer basic capabilities for everything a Frontier spacer might need in a convenient, easy-to-modify platform, and by default come equipped with a basic medbay, a small security office, atmospherics recycling and equipment to support an APLU utility mech. Thanks to this versatility, Riggers have become extremely popular among moderately-wealthy independent captains, and can be found doing everything from mining to shipping to surveying Frontier planets.", + "tags": [ + "Mining", + "Medical", + "Robotics", + "Generalist" + ], "map_path": "_maps/shuttles/shiptest/independent_rigger.dmm", "roundstart": true, "limit": 2, diff --git a/_maps/configs/independent_rube_goldberg.json b/_maps/configs/independent_rube_goldberg.json index 82a3fdaebfed..8f538bed67a5 100644 --- a/_maps/configs/independent_rube_goldberg.json +++ b/_maps/configs/independent_rube_goldberg.json @@ -7,6 +7,8 @@ ], "map_name": "Rube Goldberg-class Engineering Project", "map_short_name": "Rube Goldberg-class", + "description": "The Rube Goldberg-class Engineering Project is an experience, and a monument to insanity. Featuring a powerful supermatter engine in combination with an Escher-esque structural layout, complicated pipe and wire network, and utter disregard for basic safety procedures and common sense, this ship is a disaster waiting to happen.", + "tags": ["Engineering", "Construction"], "map_path": "_maps/shuttles/shiptest/independent_rube_goldberg.dmm", "limit": 1, "job_slots": { diff --git a/_maps/configs/independent_scav.json b/_maps/configs/independent_scav.json index 75601ca7d448..0564e6182766 100644 --- a/_maps/configs/independent_scav.json +++ b/_maps/configs/independent_scav.json @@ -3,6 +3,10 @@ "map_name": "Scav-class Drifter", "map_short_name": "Scav-class", "prefix": "ISV", + "description": "One of the cheapest (and yet, inexplicably popular) offerings from Miskilamo Spacefaring, the Scav-class is a compact, speedy vessel purpose-built for enterprising scrappers and looters looking to salvage bombed-out ruins and harvest boatloads of ore. Featuring an ‘innovative’ open-floor plan, a charitable supply of EVA/ruin raiding equipment, and some exotic implements of healing or death-dealing, the Scav-class just keeps on chuggin’!", + "tags": [ + "Generalist" + ], "namelists": [ "NATURAL", "SPACE" diff --git a/_maps/configs/independent_schmiedeberg.json b/_maps/configs/independent_schmiedeberg.json index cb12580f483c..457b8d602f4f 100644 --- a/_maps/configs/independent_schmiedeberg.json +++ b/_maps/configs/independent_schmiedeberg.json @@ -3,6 +3,12 @@ "map_name": "Schmiedeberg-class Pharmacology Ship", "prefix": "IMV", "map_short_name": "Schmiedeberg-class", + "description": "Interested in pharmacological science, but tired of sitting in front of a chemistry dispenser and pushing buttons all day? Eager to combine the culinary arts with the narcotic ones? Hoping to combine all of these qualities with the most important activity of all: making fat stacks of dosh? Then the Schmiedeberg-class is for you! Host to a robust ghetto chemistry lab, a high-efficiency botanical set-up and a complete kitchen-and-storefront, the Schmiedeberg is perfect for back-alley chemists and botanists everywhere.", + "tags": [ + "Botany", + "Medical", + "Chemistry" + ], "map_path": "_maps/shuttles/shiptest/independent_schmiedeberg.dmm", "namelists": [ "SUNS", diff --git a/_maps/configs/independent_shepherd.json b/_maps/configs/independent_shepherd.json index 652209151a7d..69c44f33341b 100644 --- a/_maps/configs/independent_shepherd.json +++ b/_maps/configs/independent_shepherd.json @@ -2,15 +2,30 @@ "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Shepherd-Class Space Monastery", "map_short_name": "Shepherd-class", + "description": "Best suited to the vast array of the galaxy’s pilgrims, proselytizers and prophets, the Shephard-class is, in essence, a massive mobile monastery. With a great grassy grove dominating the center of the ship, a torturously tempered temple and a brutalist, yet bountiful botany set-up, the Shepherd is well suited to a large crew eager to preach, purify and pull in new followers.", + "tags": [ + "RP Focus", + "Botany", + "Service" + ], "map_path": "_maps/shuttles/shiptest/independent_shepherd.dmm", "prefix": "ISV", "namelists": [ "MYTHOLOGICAL" ], "job_slots": { - "Chaplain": 1, - "Curator": 1, - "Station Engineer": 1, + "Chaplain": { + "outfit": "/datum/outfit/job/chaplain", + "slots": 1 + }, + "Curator": { + "outfit": "/datum/outfit/job/curator", + "slots": 1 + }, + "Station Engineer": { + "outfit": "/datum/outfit/job/engineer", + "slots": 1 + }, "Acolyte": { "outfit": "/datum/outfit/job/assistant/intern", "slots": 6 diff --git a/_maps/configs/independent_shetland.json b/_maps/configs/independent_shetland.json index 0267ca69494c..fc2741514879 100644 --- a/_maps/configs/independent_shetland.json +++ b/_maps/configs/independent_shetland.json @@ -7,11 +7,21 @@ "NATURAL" ], "map_short_name": "Shetland-class", + "description": "The Shetland is Miskilamo Spacefaring’s flagship offer and one of their only truly original designs: A huge frigate offering a diverse array of facilities with ample room for expansion at a fraction of the price of the competition. Optimistic customers soon discover the haphazard workmanship and extreme cost-cutting measures common to Miskilamo ships. While Shetlands have plenty of room and a theoretically diverse array of facilities, they come with the minimal amount of equipment needed for those facilities, and a wide array of design deficiencies have given them a grim reputation for driving their crews to paranoid extremes. The waste disposal catapult is a frequent feature of such tales, and supposedly a great many Shetland crewmates have met their end by ejection.", + "tags": [ + "Generalist", + "Service", + "Medical" + ], "map_path": "_maps/shuttles/shiptest/independent_shetland.dmm", "map_id": "independent_shetland", "roundstart": true, "job_slots": { - "Captain": 1, + "Captain": { + "outfit": "/datum/outfit/job/captain", + "officer": true, + "slots": 1 + }, "Lieutenant": { "outfit": "/datum/outfit/job/lieutenant", "officer": true, @@ -22,13 +32,22 @@ "officer": true, "slots": 1 }, - "Medical Doctor": 1, - "Paramedic": 1, + "Medical Doctor": { + "outfit": "/datum/outfit/job/doctor", + "slots": 1 + }, + "Paramedic": { + "outfit": "/datum/outfit/job/paramedic", + "slots": 1 + }, "Ship's Engineer": { "outfit": "/datum/outfit/job/engineer", "slots": 1 }, - "Atmospheric Technician": 1, + "Atmospheric Technician": { + "outfit": "/datum/outfit/job/atmos", + "slots": 1 + }, "Asteroid Miner": { "outfit": "/datum/outfit/job/miner/hazard", "slots": 2 @@ -37,8 +56,14 @@ "outfit": "/datum/outfit/job/security", "slots": 1 }, - "Detective": 1, - "Janitor": 1, + "Detective": { + "outfit": "/datum/outfit/job/detective", + "slots": 1 + }, + "Janitor": { + "outfit": "/datum/outfit/job/janitor", + "slots": 1 + }, "Deckhand": { "outfit": "/datum/outfit/job/assistant", "slots": 5 diff --git a/_maps/configs/independent_tranquility.json b/_maps/configs/independent_tranquility.json index 2b81ce8e08bc..0d86be477344 100644 --- a/_maps/configs/independent_tranquility.json +++ b/_maps/configs/independent_tranquility.json @@ -8,6 +8,12 @@ "NATURAL" ], "map_short_name": "Tranquility-class", + "description": "While most vessels have some form of clear utility in mind – research, mining, cargo hauling, and so on – the Tranquility-class is a notable exception to this rule. The Tranquility is, fittingly, a fairly calm and level-headed affair, modeled around traditional apartment complexes. Fitted with several independent quarters, a large communal canteen and very little in the way of industrial equipment or self-defense tools, Tranquility-classes are often found cruising lazily around the Frontier, getting up to sitcom-esque antics and eschewing the more focused approach of many of their contemporaries.", + "tags": [ + "RP Focus", + "Service", + "Generalist" + ], "map_path": "_maps/shuttles/shiptest/independent_tranquility.dmm", "job_slots": { "Captain": { diff --git a/_maps/configs/inteq_colossus.json b/_maps/configs/inteq_colossus.json index a5a6602a5cb0..3447d5c54034 100644 --- a/_maps/configs/inteq_colossus.json +++ b/_maps/configs/inteq_colossus.json @@ -2,6 +2,11 @@ "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Colossus-Class Armored Frigate", "prefix": "IRMV", + "description": "The mainstay of Inteq’s mercenary fleet, the Colossus is a professionally-militarized freighter like most of Inteq’s ships, and is designed to operate independently for some time, serving IRMG’s interests and providing vital mercenary services wherever they are needed. Key features include a secure and well-stocked armory and ample crew space, as well as a spacious cargo bay, which crews often refurbish into additional recreational or training space.", + "tags": [ + "Combat", + "Riot" + ], "namelists": [ "MYTHOLOGICAL", "BEASTS", diff --git a/_maps/configs/inteq_hound.json b/_maps/configs/inteq_hound.json index e201f74e3dd4..9e41959ae6b9 100644 --- a/_maps/configs/inteq_hound.json +++ b/_maps/configs/inteq_hound.json @@ -8,6 +8,10 @@ "INTEQ" ], "map_short_name": "Hound-class", + "description": "A light, fast picket and interceptor ship operated by Inteq Risk Management, the Hound offers modest crew space sufficient for a 3-man fireteam of Inteq enforcers, a small cargo bay, powerful engines, a well-stocked armory for its size, and little else. Hounds can typically be found on picket and patrol duty, escorting larger and more vulnerable IRMG ships, or performing any duty that calls for a lightning-fast ship and a handful of very well-armed individuals.", + "tags": [ + "Combat" + ], "map_path": "_maps/shuttles/shiptest/inteq_hound.dmm", "map_id": "inteq_hound", "limit": 2, diff --git a/_maps/configs/inteq_talos.json b/_maps/configs/inteq_talos.json index a05aada7748f..4ec40fe76812 100644 --- a/_maps/configs/inteq_talos.json +++ b/_maps/configs/inteq_talos.json @@ -2,6 +2,11 @@ "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Talos-Class Command Clipper", "prefix": "IRMV", + "description": "The Talos is a command and support ship, and a rare example of a purpose-built Inteq ship. Outfitted with an abundance of construction and engineering equipment and a private bluespace communications suite capable of networking IRMG ships across any given system, Taloses are often the lynchpin of coordinated IRMG operations in a system, and offer construction and repair services as part of IRMG’s mercenary offerings. As Talos crews place a larger emphasis on support personnel, they tend to be less well-armed than other Inteq crews. One unusual feature of the Talos is its depressurized “wings” filled with redundant baffles, intended to provide extra durability in the case of impacts or weapons fire. They also double as auxiliary storage space and potential room for modification by their enterprising Artificer crews.", + "tags": [ + "Engineer", + "Telecomms" + ], "namelists": [ "MYTHOLOGICAL", "BEASTS", diff --git a/_maps/configs/minutemen_asclepius.json b/_maps/configs/minutemen_asclepius.json index f6c61c9a4f44..26a145841792 100644 --- a/_maps/configs/minutemen_asclepius.json +++ b/_maps/configs/minutemen_asclepius.json @@ -2,6 +2,11 @@ "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Asclepius-Class Hospital Ship", "prefix": "CMSV", + "description": "The Asclepius is a medical vessel employed by the CMM. Much in CMM fashion it features tight hallways and moderately sized personal quarters. Well stocked in medical supplies, this vessel is known for its capability of fulfilling extensive treatment for patients in sectors where such treatment is otherwise scarce. Stocked with a cryo lab, a morgue, a chemlab, and surgery room, the Asclepius rarely finds difficulty when provided all measures both preventative and restorative.", + "tags": [ + "Medical", + "Chemistry" + ], "namelists": [ "COLONIAL MINUTEMEN", "CMM-BARD", diff --git a/_maps/configs/minutemen_cepheus.json b/_maps/configs/minutemen_cepheus.json index 16fd03ba6afe..8712a34b127a 100644 --- a/_maps/configs/minutemen_cepheus.json +++ b/_maps/configs/minutemen_cepheus.json @@ -2,6 +2,10 @@ "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Cepheus-Class Mech Carrier", "prefix": "CMSV", + "description": "The Cepheus is the go-to for the CMM whenever it wishes to deploy vessels capable of creating anything in the realm robotica. These vessels are deployed to sectors full of scrap and salvageable material, stocked with armament for their salvagers and a mechanical laboratory for their mechanical engineers. Crews on Cepheus ships are typically treated to somewhat crammed together quarters and tight schedules of collection and production.", + "tags": [ + "Robotics" + ], "namelists": [ "COLONIAL MINUTEMEN", "MYTHOLOGICAL" diff --git a/_maps/configs/minutemen_corvus.json b/_maps/configs/minutemen_corvus.json index 914a6d53bf91..355669e158fd 100644 --- a/_maps/configs/minutemen_corvus.json +++ b/_maps/configs/minutemen_corvus.json @@ -1,7 +1,12 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", - "map_name": "Corvus-Class Response Vessel", + "map_name": "Corvus-class Response Vessel", "prefix": "CMSV", + "description": "A lightly equipped patrol vessel used by the Minutemen for extended operations in the Frontier. In many systems, a lone Corvus is the only sign of Minutemen presence, an image that is not helped by their widespread usage. The Corvus was originally a light personal vessel retrofitted for combat usage by the Colonial Militia, which was later adopted as their official remote infantry patrol ship as a symbol of colonial ingenuity and grit. First designated the Wallaby-class, until the crew of a now-legendary Wallaby-class known as the CMSV Corvus single handedly destroyed a Frontiersmen capital ship in 392.", + "tags": [ + "Combot", + "Riot" + ], "namelists": [ "COLONIAL MINUTEMEN", "MYTHOLOGICAL" diff --git a/_maps/configs/minutemen_vela.json b/_maps/configs/minutemen_vela.json new file mode 100644 index 000000000000..4829166a56d6 --- /dev/null +++ b/_maps/configs/minutemen_vela.json @@ -0,0 +1,57 @@ + { + "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", + "map_name": "Vela-Class Industrial Cruiser", + "prefix": "CMGSV", + "namelists": ["GENERAL", "MYTHOLOGICAL", "BEASTS"], + "description": "The Vela-Class is the designation for a series of semi-modular industrial cruisers created by the Colonial Minutemen in the early 440s. While the original design was created almost exclusively for extracting minerals from asteroid belts, modern examples tend to take on a multi-mission role, with the most common configuration being a mech hanger, and research pod. The ship itself often sees long deployments that encourage modification, leading to Velas taking on a personality as their crews leave their mark.", + "tags": [ + "Robotics", + "Construction", + "Science" + ], + "map_short_name": "Vela-Class", + "starting_funds": 1000, + "map_path": "_maps/shuttles/shiptest/minutemen_vela.dmm", + "limit": 1, + "job_slots": { + "Captain": { + "outfit": "/datum/outfit/job/captain/minutemen", + "officer": true, + "slots": 1 + }, + "Foreman": { + "outfit": "/datum/outfit/job/ce/minutemen", + "officer": true, + "slots": 1 + }, + "Bridge Officer": { + "outfit": "/datum/outfit/job/head_of_personnel/minutemen", + "slots": 1 + }, + "Mech Pilot": { + "outfit": "/datum/outfit/job/miner/hazard/minutemen", + "slots": 4 + }, + "Mech Technician": { + "outfit": "/datum/outfit/job/roboticist/technician/minutemen", + "slots": 2 + }, + "Engineer": { + "outfit": "/datum/outfit/job/engineer/minutemen", + "slots": 2 + }, + "Minuteman": { + "outfit": "/datum/outfit/job/security/minutemen", + "slots": 2 + }, + "Scientist": { + "outfit": "/datum/outfit/job/scientist/minutemen", + "slots": 2 + }, + "Cadet": { + "outfit": "/datum/outfit/job/assistant/minutemen", + "slots": 1 + } + }, + "enabled": true +} diff --git a/_maps/configs/nanotrasen_delta.json b/_maps/configs/nanotrasen_delta.json index 58028acf586d..6f81f5972a22 100644 --- a/_maps/configs/nanotrasen_delta.json +++ b/_maps/configs/nanotrasen_delta.json @@ -10,19 +10,31 @@ "NANOTRASEN" ], "map_short_name": "Delta-class", + "description": "The Delta is a compact and advanced mining ship that supplements its comparatively small organic crew with a full suite of robotics facilities, including an AI and a host of mining and logistics drones and cyborgs. While much-loved by Nanotrasen logisticians for their minimal upkeep and high cost efficiency, Deltas are far less popular among the crews chosen to operate them, as they are severely lacking in crew accommodations and defensive armament.", + "tags": [ + "Science", + "Robotics" + ], "map_path": "_maps/shuttles/shiptest/nanotrasen_delta.dmm", + "starting_funds": 4000, "job_slots": { "Captain": { "outfit": "/datum/outfit/job/captain/nt", "officer": true, "slots": 1 }, - "Roboticist": 2, + "Roboticist": { + "outfit": "/datum/outfit/job/roboticist", + "slots": 2 + }, "Engineer": { "outfit": "/datum/outfit/job/engineer/nt", "slots": 1 }, - "Assistant": 3 + "Assistant": { + "outfit": "/datum/outfit/job/assistant", + "slots": 3 + } }, "enabled": true } diff --git a/_maps/configs/nanotrasen_gecko.json b/_maps/configs/nanotrasen_gecko.json index b2726550a759..f7f0791f7cb1 100644 --- a/_maps/configs/nanotrasen_gecko.json +++ b/_maps/configs/nanotrasen_gecko.json @@ -9,7 +9,13 @@ ], "map_short_name": "Gecko-class", "map_path": "_maps/shuttles/shiptest/nanotrasen_gecko.dmm", + "description": "A bulky, robust, and exceedingly ugly salvage ship. The Gecko is nothing less than a flying brick full of redundant maintenance spaces and open-to-space salvage bays, powered by a temperamental TEG system, with a cramped crew space sandwiched in between. Due to its deeply obsolete design and the dangerous nature of salvage work, Geckos are often the final resting point for the careers of officers that have stepped on too many toes in the corporate world without doing anything outright criminal. Despite these shortcomings, Geckos offer a large amount of open space and a good supply of engineering equipment, which is all an enterprising engineer truly needs.", + "tags": [ + "Mining", + "Engineering" + ], "limit": 2, + "starting_funds": 5000, "job_slots": { "Captain": { "outfit": "/datum/outfit/job/captain/nt", diff --git a/_maps/configs/nanotrasen_mimir.json b/_maps/configs/nanotrasen_mimir.json index 863e2b8ac09b..310b9962b63d 100644 --- a/_maps/configs/nanotrasen_mimir.json +++ b/_maps/configs/nanotrasen_mimir.json @@ -7,7 +7,14 @@ "BEASTS" ], "map_name": "Mimir-Class Rehabillitation Vessel", - "map_short_name": "Mimir-Class", + "map_short_name": "Mimir-class", + "description": "The Mimir-class are Nanotrasen “patient” transfer and holding ships. Nanotrasen deploys Mimirs to hold those they’ve interned, often in ruined or otherwise out-of-the-way sectors. This both minimizes the chances of the “patients” escaping and drastically lowers the incentive to do so in the first place, as it keeps them stuck in the middle of nowhere until Central Command is ready to pick them up and process them. While “patients” are largely kept in cryogenic storage, regulations and medical necessity both require occasional thawing. As such, the Mimir comes with a host of “rehabilitative” activities for the “patients” as well as a light security detail to manage them.", + "tags": [ + "Riot", + "Service", + "Generalist", + "Specialist" + ], "map_path": "_maps/shuttles/shiptest/nanotrasen_mimir.dmm", "limit": 1, "job_slots": { diff --git a/_maps/configs/nanotrasen_osprey.json b/_maps/configs/nanotrasen_osprey.json index 8a0c9f510a7c..feea5e777c69 100644 --- a/_maps/configs/nanotrasen_osprey.json +++ b/_maps/configs/nanotrasen_osprey.json @@ -10,7 +10,10 @@ ], "map_short_name": "Osprey-class", "map_path": "_maps/shuttles/shiptest/nanotrasen_osprey.dmm", + "description": "Some of the most modern ships in Nanotrasen’s fleet and a prestigious assignment for their captains, the famed Osprey of the ICW’s most dramatic astronautical engagements lives on as a very well-appointed exploration ship. Extensively refurbished from their origins as Bluespace Artillery platforms, the contemporary Osprey repurposes military-grade sensor equipment and AI systems for exploration and scientific work. Features include respectably-equipped medical, culinary, and scientific facilities and an AI core, as well as a ship-wide disposals and delivery system and a very spacious cargo bay. However, the powerful (if temperamental) supermatter engines that powered the initial batch of Ospreys were stripped out during their rebuilds, and the replacement generator banks have left contemporary Ospreys somewhat power-starved.", + "tags": ["Cargo", "Robotics", "Generalist"], "limit": 1, + "starting_funds": 4000, "job_slots": { "Captain": { "outfit": "/datum/outfit/job/captain/nt", @@ -22,23 +25,50 @@ "officer": true, "slots": 1 }, - "Scientist": 2, - "Medical Doctor": 1, - "Paramedic": 1, + "Scientist": { + "outfit": "/datum/outfit/job/scientist", + "slots": 2 + }, + "Medical Doctor": { + "outfit": "/datum/outfit/job/doctor", + "slots": 1 + }, + "Paramedic": { + "outfit": "/datum/outfit/job/paramedic", + "slots": 1 + }, "Engineer": { "outfit": "/datum/outfit/job/engineer/nt", "slots": 1 }, - "Atmospheric Technician": 1, - "Quartermaster": 1, - "Cargo Technician": 1, + "Atmospheric Technician": { + "outfit": "/datum/outfit/job/atmos", + "slots": 1 + }, + "Quartermaster": { + "outfit": "/datum/outfit/job/quartermaster", + "slots": 1 + }, + "Cargo Technician": { + "outfit": "/datum/outfit/job/cargo_tech", + "slots": 1 + }, "Shaft Miner": { "outfit": "/datum/outfit/job/miner/classic", "slots": 1 }, - "Cook": 1, - "Janitor": 1, - "Assistant": 3 + "Cook": { + "outfit": "/datum/outfit/job/cook", + "slots": 1 + }, + "Janitor": { + "outfit": "/datum/outfit/job/janitor", + "slots": 1 + }, + "Assistant": { + "outfit": "/datum/outfit/job/assistant", + "slots": 3 + } }, "enabled": true } diff --git a/_maps/configs/nanotrasen_powerrangers.json b/_maps/configs/nanotrasen_powerrangers.json index a80db9f68c12..4549e153a81b 100644 --- a/_maps/configs/nanotrasen_powerrangers.json +++ b/_maps/configs/nanotrasen_powerrangers.json @@ -1,13 +1,23 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "prefix": "NTSV", + "map_name": "Nanotrasen Ranger-class Aid Vessel", "namelists": [ "NANOTRASEN", "NATURAL_AGGRESSIVE", "WEAPONS" ], - "map_name": "Nanotrasen Ranger-Class Aid Vessel", "map_short_name": "Ranger-class", + "description": "A Nanotrasen rescue and aid vessel. Equipped with an AI core, moderate combat gear, and equipment fit for rescue and general aid operations. Nanotrasen often deploys these ships in lieu of a proper ERT to aid their allies in the Frontier without committing their full might. The shipowner is the Lieutenant of a Loss Prevention squad, with a Commissioner to aid with operations on the ship proper.", + "tags": [ + "Combat", + "Riot", + "Robotics", + "Medical", + "Telecomms", + "Generalist" + ], + "starting_funds": 4000, "map_path": "_maps/shuttles/shiptest/nanotrasen_powerrangers.dmm", "limit": 1, "job_slots": { diff --git a/_maps/configs/nanotrasen_skipper.json b/_maps/configs/nanotrasen_skipper.json index 29e7b42dfeef..501ddf7b1afa 100644 --- a/_maps/configs/nanotrasen_skipper.json +++ b/_maps/configs/nanotrasen_skipper.json @@ -11,6 +11,12 @@ "MERCANTILE" ], "map_path": "_maps/shuttles/shiptest/nanotrasen_skipper.dmm", + "description": "An example of one of Nanotrasen’s “standard-pattern” cruisers. The Skipper-class is well-equipped by Frontier standards, with ample room for engineering equipment, well-appointed crew accommodations, and a decent supply of defensive weaponry. Notably, the Skipper comes with a larger command section than average, and the officers on Skippers tend to be better-equipped than their peers. Though not as prestigious as a position aboard an Osprey, few Nanotrasen captains would turn down a position commanding a Skipper.", + "tags": [ + "Engineering", + "Mining" + ], + "starting_funds": 4000, "roundstart": true, "job_slots": { "Captain": { @@ -37,7 +43,10 @@ "outfit": "/datum/outfit/job/security/nanotrasen", "slots": 1 }, - "Assistant": 3 + "Assistant": { + "outfit": "/datum/outfit/job/assistant", + "slots": 3 + } }, "enabled": true } diff --git a/_maps/configs/pirate_ember.json b/_maps/configs/pirate_ember.json index 061ef8ecd83a..ef23ccd8ef3b 100644 --- a/_maps/configs/pirate_ember.json +++ b/_maps/configs/pirate_ember.json @@ -8,6 +8,13 @@ ], "map_short_name": "Ember-class", "map_path": "_maps/shuttles/shiptest/pirate_ember.dmm", + "description": "The Ember class is a red flag in any sector. A giant, slow moving, safety hazard of a ship, makeshift in almost every regard, finds itself favored amongst the most ruthless and cutthroat of pirates and scoundrels galaxy-wide. Simply to be willing to exist on one of these ships shows a hardiness not typically found in most spacers. The best way to deal with Ember vessels is to simply give them a wide berth.", + "tags": [ + "Combat", + "Riot", + "Combat", + "Engineering" + ], "limit": 1, "job_slots": { "Captain": { diff --git a/_maps/configs/pirate_libertatia.json b/_maps/configs/pirate_libertatia.json index 05036b38235d..196f8652753f 100644 --- a/_maps/configs/pirate_libertatia.json +++ b/_maps/configs/pirate_libertatia.json @@ -3,8 +3,15 @@ "map_name": "Libertatia-class Hauler", "map_short_name": "Libertatia-class", "map_path": "_maps/shuttles/shiptest/pirate_libertatia.dmm", + "description": "A widely-available and dirt-cheap courier ship by Miskilamo Spacefaring, Libertatias are shoddy overhauls of old civilian atmospheric ships or the burned-out wrecks of other Libertatias, made nominally space worthy and capable of carrying a modest cargo at blistering speeds. While marketed as courier ships and short-range cargo shuttles, the Libertatia found its true target market in the hands of smugglers, blockade runners, and pirates, who find its speed, low sensor signature, and rock-bottom price point extremely attractive. In recent years, it’s become far more common to see Libertatias captained by pirates than anyone else, especially in the loosely-patrolled Frontier sectors. Surprisingly enough, the more organized Frontiersmen pirate group shows little love for the humble Libertatia, instead preferring larger and more threatening ships.", + "tags": [ + "Combat" + ], "prefix": "ISV", - "namelists": ["PIRATES", "NATURAL_AGGRESSIVE"], + "namelists": [ + "PIRATES", + "NATURAL_AGGRESSIVE" + ], "job_slots": { "Captain": { "outfit": "/datum/outfit/job/captain/pirate", diff --git a/_maps/configs/pirate_noderider.json b/_maps/configs/pirate_noderider.json index 62134af5306f..4a004bdee87e 100644 --- a/_maps/configs/pirate_noderider.json +++ b/_maps/configs/pirate_noderider.json @@ -3,8 +3,18 @@ "map_name": "Jupiter-Class Stormrider", "map_short_name": "Jupiter-Class", "prefix": "ISV", - "namelists": ["INSTALLATION", "PIRATES"], + "namelists": [ + "INSTALLATION", + "PIRATES" + ], "map_path": "_maps/shuttles/shiptest/pirate_noderider.dmm", + "description": "The Jupiter-class Stormrider is a specialist design originating from the Silicon Elevation Council, typically used for sustained missions in the Frontier. While habitable to organic life (typically as a matter of convenience), the ship is designed with silicons in mind, and features an AI core built into its hull. Many captains have been quoted as being “frightened” (although “piss-pants scared” was the exact statement) by one suddenly appearing out of a storm, IFF loudly declaring who they were, or in worse conditions, not functioning at all. Some examples have been known to find their way into pirate hands, who leverage the ship to spring ambushes on unsuspecting traders.", + "tags": [ + "Robotics", + "Specialist", + "Riot", + "Combat" + ], "job_slots": { "Command Node": { "outfit": "/datum/outfit/job/captain/aipirate", diff --git a/_maps/configs/radio.json b/_maps/configs/radio.json index 074ce6e0a17a..e1ae13e64abf 100644 --- a/_maps/configs/radio.json +++ b/_maps/configs/radio.json @@ -3,7 +3,12 @@ "map_name": "Radio Broadcasting Ship", "map_short_name": "Radio-class", "map_path": "_maps/shuttles/shiptest/radio_funny.dmm", + "description": "Whether through divine intervention or hellish creation by the hands of sapient-kind, reports of this “ship” plague some sectors more than others. The Radio Broadcasting Ship is an anomalous thing in its own right. It is a “ship” equipped with nothing but radios and reality warping engines. There exist many reports of this vessel being totally destroyed and showing back up in a sector just hours later. The only thing you can do about these vessels is pray the pilot doesn’t have bad taste.", + "tags": ["Specialist"], "job_slots": { - "Assistant": 6 + "Assistant": { + "outfit": "/datum/outfit/job/assistant", + "slots": 6 + } } } diff --git a/_maps/configs/solgov_chronicle.json b/_maps/configs/solgov_chronicle.json new file mode 100644 index 000000000000..aed35c98daa0 --- /dev/null +++ b/_maps/configs/solgov_chronicle.json @@ -0,0 +1,47 @@ +{ + "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", + "map_name": "Chronicle-class Sensor Frigate", + "prefix": "SGSV", + "namelists": [ + "SOLGOV", + "SPACE", + "BRITISH_NAVY", + "NATURAL" + ], + "map_short_name": "Chronicle-class", + "map_path": "_maps/shuttles/shiptest/solgov_chronicle.dmm", + "description": "Equipped with a sophisticated sensors suite and powerful data utilities, the Chronicle is a clerical workhorse, able to collect and process vast amounts of information. Often employed for census duties and interstellar exploration, the Chronicle is also a favorite of Evidenzkompanien, employed often for intelligence operations. With this fact in mind, Chronicle-class vessels are often placed under increased scrutiny by patrols, somewhat mitigating their effectiveness as a spymaster's tool.", + "tags": [ + "Specialist" + ], + "limit": 1, + "job_slots": { + "Captain": { + "outfit": "/datum/outfit/job/solgov/captain", + "officer": true, + "slots": 1 + }, + "Overseer": { + "outfit": "/datum/outfit/job/solgov/overseer", + "officer": true, + "slots": 1 + }, + "Sonnensöldner": { + "outfit": "/datum/outfit/job/solgov/sonnensoldner", + "slots": 1 + }, + "Ship Engineer": { + "outfit": "/datum/outfit/job/solgov/engineer", + "slots": 2 + }, + "Field Engineer": { + "outfit": "/datum/outfit/job/solgov/miner", + "slots": 2 + }, + "Scribe": { + "outfit": "/datum/outfit/job/solgov/assistant", + "slots" : 1 + } + }, + "enabled": false +} diff --git a/_maps/configs/srm_glaive.json b/_maps/configs/srm_glaive.json index 6748037dcdaa..093e28107e2c 100644 --- a/_maps/configs/srm_glaive.json +++ b/_maps/configs/srm_glaive.json @@ -2,14 +2,23 @@ "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "SRM Glaive-class Hunter Vessel", "prefix": "SRSV", - "namelists": ["SAINT-ROUMAIN", "BEASTS"], + "namelists": [ + "SAINT-ROUMAIN", + "BEASTS" + ], "map_short_name": "Glaive-class", "map_path": "_maps/shuttles/shiptest/srm_glaive.dmm", + "description": "A standard issue vessel to the highest ranks of the Saint-Roumain Militia. While “standard”, this class of vessel is unique to the Montagne that owns it. Each ship is designed around a central garden consisting of plants, soil, and a tree from the owning Montagnes’ home planet. As a highly religious ascetic order, the SRM supplies each Glaive with supplies to farm, raise animals, and perform medicine in more “natural” ways, using herbs and plants grown in house. Alongside this, the ship has a decent amount of mining equipment, and supplies required to begin the manufacturing of SRM-pattern firearms as is standard for Hunter’s Pride. The ship is captained by a Montagne, who oversees a team of Hunters, and Shadows apprenticing them.", + "tags": [ + "Mining", + "Combat", + "Specialist" + ], "map_id": "srm_glaive", "limit": 1, "job_slots": { "Hunter Montagne": { - "outfit": "/datum/outfit/job/chaplain/roumain", + "outfit": "/datum/outfit/job/hos/roumain", "officer": true, "slots": 1 }, diff --git a/_maps/configs/syndicate_aegis.json b/_maps/configs/syndicate_aegis.json index 1ccdb7f2b176..1a7804bee932 100644 --- a/_maps/configs/syndicate_aegis.json +++ b/_maps/configs/syndicate_aegis.json @@ -3,6 +3,12 @@ "map_name": "Aegis-class Long Term Care Ship", "map_short_name": "Aegis-class", "map_path": "_maps/shuttles/shiptest/syndicate_aegis.dmm", + "description": "Approximately a third of the way through the ICW, it became apparent that the Syndicate could not muster the sheer throwaway manpower that Nanotrasen could with its swaths of mercenaries and disposable personnel. Instead, the Syndicate began to adopt a much more conservative approach to maintaining personnel, by establishing an initiative to create a host of medical vessels designed to rescue and rehabilitate the fallen. While the Li Tieguai filled the rescue role, the Aegis-Class was to fill the rehabilitation role. Featuring a host of ‘quality of life’ features for long-term patients (a full bar, a hydroponics setup, and so on), an expansive medical bay and an array of comfort fixtures like couches and gardens, the Aegis is perfect for aspiring doctors or wounded patients.", + "tags": [ + "Botany", + "Medical", + "RP Focus" + ], "map_id": "syndicate_aegis", "namelists": [ "SUNS", diff --git a/_maps/configs/syndicate_cybersun_kansatsu.json b/_maps/configs/syndicate_cybersun_kansatsu.json index f6ffd153a0d8..784dab0483cb 100644 --- a/_maps/configs/syndicate_cybersun_kansatsu.json +++ b/_maps/configs/syndicate_cybersun_kansatsu.json @@ -7,6 +7,10 @@ "NATURAL_AGGRESSIVE" ], "map_name": "Kansatsu-Class Scout Courier", + "description": "The Kansatsu-class is a Cybersun remodel of the old Type-S SolGov Courier, rebuilt for rapid package ferrying and light surveillance operations in the Frontier. While fairly cramped, it excels at its design goals, with rapid surveys, scouting, and espionage flowing from its presence. Syndicate deployments typically include a deployment of 5, with a recommended max of 7. This is broken down into 1 captain, an intelligence officer for coordinating the field agents, an engineer, and 2 field agents. The simplicity of the hull has led to the ship becoming a widespread indicator of Syndicate interest in locations, and some models have found their way into private purchasers' hands.", + "tags": [ + "Specialist" + ], "map_short_name": "Kansatsu-Class", "map_path": "_maps/shuttles/shiptest/syndicate_cybersun_kansatsu.dmm", "map_id": "cybersun_kansatsu", diff --git a/_maps/configs/syndicate_gorlex_hyena.json b/_maps/configs/syndicate_gorlex_hyena.json index afc26246e022..2c0d12a29a45 100644 --- a/_maps/configs/syndicate_gorlex_hyena.json +++ b/_maps/configs/syndicate_gorlex_hyena.json @@ -9,6 +9,11 @@ "ACLF" ], "map_name": "Hyena-class Wrecking Tug", + "description": "The Hyena is a common salvage tug, frequently operated by the Gorlex Marauders for “salvage” missions on ICW-era Nanotrasen derelicts (and occasionally occupied outposts and ships). The Hyena features a fairly compact floor plan with a dedicated secure armory space and a fairly large cargo bay for its size, as well as a complement of high-grade hardsuits and mining equipment. The Hyena’s low cost and high demand in its niche has made it a very common sight on the Frontier in the years following the ICW, and despite their tight finances nearly all Gorlex Marauder splinter factions continue to acquire more.", + "tags": [ + "Mining", + "Combat" + ], "map_short_name": "Hyena-class", "map_path": "_maps/shuttles/shiptest/syndicate_gorlex_hyena.dmm", "job_slots": { @@ -27,7 +32,7 @@ "slots": 1 }, "Wrecker": { - "outfit": "/datum/outfit/job/miner/syndicate", + "outfit": "/datum/outfit/job/miner/syndicate/gorlex", "slots": 2 }, "Junior Agent": { diff --git a/_maps/configs/syndicate_gorlex_komodo.json b/_maps/configs/syndicate_gorlex_komodo.json index 414ba6eea211..f65d05a44e60 100644 --- a/_maps/configs/syndicate_gorlex_komodo.json +++ b/_maps/configs/syndicate_gorlex_komodo.json @@ -8,6 +8,12 @@ ], "map_name": "Komodo-class Warship", "map_short_name": "Komodo-class", + "description": "An ICW-era design, the Komodo is a dedicated warship operated by the Gorlex Marauders. Contemporaries of the legendary Starfury-class, Komodos were the backbone of Gorlex and ACLF fleets during the ICW, and saw significant combat service – not always to a tragic end like their Cybersun companions. Contemporary examples often still bear the scars of ICW-period combat, and the dire financial straits of most Gorlex splinter factions means many of those survivors are in a state of poor repair. Despite the stresses of age, they remain capable ships, and often still have the heavier armament associated with their ICW deployments in storage.", + "tags": [ + "RP Focus", + "Combat", + "Engineering" + ], "map_path": "_maps/shuttles/shiptest/syndicate_gorlex_komodo.dmm", "map_id": "syndicate_gorlex_komodo", "limit": 1, diff --git a/_maps/configs/syndicate_lugol.json b/_maps/configs/syndicate_lugol.json index 37e54aaea03c..891a19641252 100644 --- a/_maps/configs/syndicate_lugol.json +++ b/_maps/configs/syndicate_lugol.json @@ -2,7 +2,16 @@ "map_name": "Lugol-class GEC Engineering Project", "prefix": "SEV", "map_short_name": "Lugol-class", - "namelists": ["ENGINEERING", "GEC", "SPACE"], + "description": "The Lugol is effectively an enormous Galactic Engineers Concordat research barge, used as a test bed for refinements to power systems, new technologies, and so on. As it offers freedom from the usual constraints of working aboard vessels belonging to other Syndicate factions, Lugols are especially popular among the GEC’s more radical members. Accordingly, they have a reputation for either accomplishing the impossible or generating the equivalent of a new star when they inevitably melt down. Lugols are generally only found on the Frontier, where the collateral damage from potential accidents can be kept to a minimum and secrecy, when needed, can be better maintained.", + "tags": [ + "Engineering", + "Construction" + ], + "namelists": [ + "ENGINEERING", + "GEC", + "SPACE" + ], "map_path": "_maps/shuttles/shiptest/syndicate_gec_lugol.dmm", "map_id": "gec_lugol", "limit": 2, diff --git a/_maps/configs/syndicate_luxembourg.json b/_maps/configs/syndicate_luxembourg.json index 4ec565bceb17..40fe900ae3d6 100644 --- a/_maps/configs/syndicate_luxembourg.json +++ b/_maps/configs/syndicate_luxembourg.json @@ -1,11 +1,21 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "prefix": "SSV", - "namelists": ["DONK", "MERCANTILE", "SPACE"], + "namelists": [ + "DONK", + "MERCANTILE", + "SPACE" + ], "map_name": "Luxembourg-class Delivery Vessel", + "description": "A dual-purpose delivery vessel and mobile storefront, Luxembourgs make up a substantial portion of Donk! Co.’s fleet on the Frontier, where the ever-opportunistic corporation has begun to fill the gaps left behind by the collapse of Nanotrasen’s logistics network. Donk! Co. managers have a great degree of autonomy, and so any given Luxembourg will often bear substantial modifications to the sales floor and on-board cafe, the better to entice new customers in an unstable yet lucrative region of space.", + "tags": [ + "Robotics", + "Cargo" + ], "map_short_name": "Luxembourg-class", "map_path": "_maps/shuttles/shiptest/syndicate_luxembourg.dmm", "limit": 1, + "starting_funds": 6000, "job_slots": { "Manager": { "outfit": "/datum/outfit/job/quartermaster/donk", diff --git a/_maps/configs/syndicate_twinkleshine.json b/_maps/configs/syndicate_twinkleshine.json index ef8b076cc4ea..24b55c7bd35c 100644 --- a/_maps/configs/syndicate_twinkleshine.json +++ b/_maps/configs/syndicate_twinkleshine.json @@ -1,8 +1,19 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "prefix": "SSV", - "namelists": ["GORLEX", "SPACE", "ACLF"], + "namelists": [ + "GORLEX", + "SPACE", + "ACLF" + ], "map_name": "Twinkleshine-class Battle Cruiser", + "description": "After the destruction of the larger Starfury-class Battle Cruisers during the Inter-Corporate War, Cybersun engineered the Twinkleshine as a replacement to fill the now-vacant flagship role. However, the war came to a close before any examples of this class could see combat. Now, they are kept as a valuable symbol of the Syndicate’s might and unity – in theory. As with the Starfury-class, Twinkleshine crews contain a mix of all Syndicate member factions as a matter of political necessity – none would consent to Cybersun operating such powerful ships alone. While Twinkleshine crews are supposedly selected for more diplomatic tendencies than one might expect, the political situation aboard a Twinkleshine is often delicate, particularly as tensions between the Syndicate’s corporate and anti-corporate elements continue to build. Nevertheless, they remain the most potent singular assets in the Syndicate’s combined arsenal, and frequently serve the role of power projection in Frontier space.", + "tags": [ + "Engineering", + "Combat", + "Service", + "Medical" + ], "map_short_name": "Twinkleshine-class", "map_path": "_maps/shuttles/shiptest/syndicate_twinkleshine.dmm", "job_slots": { diff --git a/_maps/deprecated/Ships/Syndicate_Cascade.dmm b/_maps/deprecated/Ships/Syndicate_Cascade.dmm index 06dea507ef25..1b12f271ef22 100644 --- a/_maps/deprecated/Ships/Syndicate_Cascade.dmm +++ b/_maps/deprecated/Ships/Syndicate_Cascade.dmm @@ -3016,7 +3016,6 @@ pixel_x = -3 }, /obj/item/clothing/under/rank/medical/doctor/red, -/obj/item/clothing/under/rank/medical/chief_medical_officer/surgeon_general, /obj/item/clothing/under/syndicate/sniper, /obj/item/clothing/under/utility/skirt, /obj/item/clothing/under/utility, diff --git a/_maps/example_ship_config.json b/_maps/example_ship_config.json index 4b8b820fd92d..4dabf60293d2 100644 --- a/_maps/example_ship_config.json +++ b/_maps/example_ship_config.json @@ -6,6 +6,8 @@ "namelists": ["GENERAL", "SPACE", "MYTHOLOGICAL", "WEAPONS"], "map_path": "_maps/shuttles/shiptest/null.dmm", "limit": 2, + "spawn_time_coeff": 1.5, + "officer_time_coeff": 0.5, "job_slots": { "The First Slot will always be the 'captain' that the purchaser becomes.": { "outfit": "/datum/outfit/job/captain", diff --git a/_maps/ship_config_schema.json b/_maps/ship_config_schema.json index df80b6c2818c..e0e1b4eb8ce0 100644 --- a/_maps/ship_config_schema.json +++ b/_maps/ship_config_schema.json @@ -2,6 +2,7 @@ "$schema": "https://json-schema.org/draft-04/schema", "title": "Ship Configuration Schema", "description": "A ship configuration, used for defining new ship classes.", + "tags": "A list of tags, used for searching ships by quality.", "type": "object", "properties": { @@ -21,6 +22,11 @@ "type": "string", "description": "A description of the ship class, currently only shown to admins on the shuttle manipulator, but will likely be shown to players before ship purchase in the future." }, + "tags": { + "title": "Ship Tags", + "type": "array", + "description": "A list of tags describing the ship's niche, converted into searchable strings." + }, "prefix": { "title": "Ship Default Prefix", "type": [ "null", "string" ], @@ -123,6 +129,28 @@ "maximum": 100, "default": 2 }, + "starting_funds":{ + "title": "Ship Starting Funds", + "Type": "integer", + "description": "The amount of money a ship's bank account starts with", + "minimum": 0, + "maximum": 20000, + "default": 2000 + }, + "spawn_time_coeff": { + "title": "Required Spawn Playtime Coefficient", + "type": "number", + "description": "A multiplier used, along with the config value SHIP_SPAWN_BASE_EXP_MIN, to determine the amount of time a player must have spent as Living to spawn this ship from the join menu.", + "minimum": 0, + "default": 1 + }, + "officer_time_coeff": { + "title": "Required Officer Playtime Coefficient", + "type": "number", + "description": "A multiplier used, along with the config value OFFICER_JOIN_BASE_EXP_MIN, to determine the amount of time a player must have spent as Living to spawn as an officer job on this ship AFTER it has been spawned.", + "minimum": 0, + "default": 1 + }, "enabled": { "title": "Selectable", "type": "boolean", diff --git a/_maps/ship_tags_descriptions_guide.txt b/_maps/ship_tags_descriptions_guide.txt new file mode 100644 index 000000000000..6bd86164ba41 --- /dev/null +++ b/_maps/ship_tags_descriptions_guide.txt @@ -0,0 +1,27 @@ +When adding a ship to the game you need to add a description and a set of tags based on what the ship is equipped with. +The description should describe what the ship is used for, what it's conditions are typically like, and possibly some lore tidbits for it. +When creating a description you'll need to run it by the lore team to make sure it is compliant and meets up to our standards. + +For tags you will add them in the following format: +"tags": ["Tag One", "Tag Two", "Tag Three"], + +All individual words in tags must be capitalized. +Here is the list of tags: + +"Combat" - A ship containing significant lethal weaponry, is generally lethally armed, or has a ruin or pvp focus. +"Generalist" - A ship containing 4 or more focus tags or very little in a lot of categories without enough to constitute tagging it as such. +"Construction" - A ship built for building or construction projects. +"Robotics" - A ship with AI's, Borgs, or a robotics setup in general. +"Science" - A ship containing a research focus, this includes RnD and XenoBio. +"Service" - A ship with a bar or kitchen setup, a ship focused around the service department. +"Chemistry" - A ship containing a chemistry and/or plumbing setup. +"Medical" - A ship with more than just a few medkits an a surgery kit, a ship based around medical gameplay. +"RP Focus" - A ship that's meant to facilitate a lot of RP. IE cruise ships, apartment ships, bar-rp ships, etc. +"Mining" - A ship with more than a modest amount of mining equipment. Having an ORM, multiple harsuits, protos, etc. +"Cargo" - A ship that is meant to either act as a merchant or a cargo vessel. This is judged on a ship to ship basis. +"Engineering" - A ship with a lot of engineering gear. +"Subshuttle" - A ship that contains a subshuttle. +"Survival Challenge" - A ship that is actively hostile to start on. +"Telecomms" - A ship with a telecomms setup comprising of 3 or more machines. +"Botany" - A ship that has more than a couple trays and a mild selection of seeds. Has a considerable amount of botany equipment. +"Specialist" - A ship that is special, doesn't fit any other tag, or has a special niche. Judged on a ship to ship basis. \ No newline at end of file diff --git a/_maps/shuttles/shiptest/independent_beluga.dmm b/_maps/shuttles/shiptest/independent_beluga.dmm index 4d1e348e4bb4..6431371844ce 100644 --- a/_maps/shuttles/shiptest/independent_beluga.dmm +++ b/_maps/shuttles/shiptest/independent_beluga.dmm @@ -956,7 +956,9 @@ dir = 4 }, /obj/effect/turf_decal/steeldecal/steel_decals10, -/obj/machinery/door/airlock/engineering/glass, +/obj/machinery/door/airlock/engineering/glass{ + dir = 4 + }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 }, diff --git a/_maps/shuttles/shiptest/independent_box.dmm b/_maps/shuttles/shiptest/independent_box.dmm index 2f826995a898..22f7bcbc1360 100644 --- a/_maps/shuttles/shiptest/independent_box.dmm +++ b/_maps/shuttles/shiptest/independent_box.dmm @@ -687,6 +687,7 @@ name = "Egnine shutter"; pixel_y = 28 }, +/obj/machinery/light/small/broken/directional/south, /turf/open/floor/plating, /area/ship/engineering) "cJ" = ( @@ -1647,15 +1648,15 @@ dir = 1; id = "whiteship_windows"; name = "Windows Blast Door Control"; - pixel_x = -5; - pixel_y = -27 + pixel_x = -7; + pixel_y = -22 }, /obj/machinery/button/door{ dir = 1; id = "whiteship_bridge"; name = "Bridge Blast Door Control"; pixel_x = 5; - pixel_y = -27 + pixel_y = -22 }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 1 @@ -1665,13 +1666,13 @@ id = "emergencybay_blastdoors"; name = "Emergency Bay Blastdoors"; pixel_x = 5; - pixel_y = -40 + pixel_y = -33 }, /obj/machinery/button/shieldwallgen{ dir = 1; id = "box_cargo"; pixel_x = -5; - pixel_y = -38 + pixel_y = -31 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/carpet/nanoweave/blue, @@ -1775,13 +1776,10 @@ /obj/effect/turf_decal/corner/opaque/blue{ dir = 4 }, -/obj/structure/sign/poster/official/mini_energy_gun{ - pixel_y = -32 - }, /obj/machinery/computer/cargo/express{ dir = 1 }, -/obj/machinery/firealarm/directional/west, +/obj/machinery/firealarm/directional/south, /turf/open/floor/plasteel/dark, /area/ship/bridge) "vE" = ( @@ -1960,7 +1958,6 @@ /turf/open/floor/plasteel/white, /area/ship/medical) "yA" = ( -/obj/machinery/light/small/directional/south, /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 4 }, @@ -1972,7 +1969,7 @@ dir = 8 }, /obj/machinery/advanced_airlock_controller{ - pixel_y = -28 + pixel_y = -20 }, /obj/effect/turf_decal/arrows, /turf/open/floor/plating, @@ -1994,6 +1991,7 @@ name = "Egnine shutter"; pixel_y = -28 }, +/obj/machinery/light/small/directional/north, /turf/open/floor/plating, /area/ship/engineering) "yN" = ( @@ -2057,9 +2055,8 @@ layer = 2.35 }, /obj/machinery/advanced_airlock_controller{ - pixel_y = 28 + pixel_y = 24 }, -/obj/machinery/light/small/broken/directional/north, /turf/open/floor/plating, /area/ship/engineering) "AL" = ( @@ -2166,7 +2163,6 @@ /obj/item/clothing/accessory/armband/medblue, /obj/item/clothing/accessory/armband/med, /obj/item/clothing/accessory/armband/med, -/obj/item/clothing/under/rank/medical/psychiatrist/blue, /obj/item/clothing/accessory/pocketprotector, /obj/item/clothing/accessory/pocketprotector, /obj/item/clothing/accessory/pocketprotector, @@ -2504,7 +2500,7 @@ pixel_x = -32 }, /obj/item/storage/box/pillbottles, -/obj/item/clothing/under/rank/medical/chemist/pharmacist, +/obj/item/clothing/under/rank/medical/chemist/, /obj/item/clothing/suit/longcoat/chemist, /obj/item/reagent_containers/dropper, /obj/item/clothing/head/beret/chem, diff --git a/_maps/shuttles/shiptest/independent_boyardee.dmm b/_maps/shuttles/shiptest/independent_boyardee.dmm index b2978137f068..ede51c9a219c 100644 --- a/_maps/shuttles/shiptest/independent_boyardee.dmm +++ b/_maps/shuttles/shiptest/independent_boyardee.dmm @@ -1,16 +1,4 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ai" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/vending/clothing, -/obj/machinery/light/directional/east, -/obj/effect/turf_decal/siding/wood{ - dir = 8; - color = "#543C30" - }, -/turf/open/floor/wood/walnut, -/area/ship/crew) "ao" = ( /obj/machinery/power/smes/engineering, /obj/machinery/atmospherics/pipe/simple/orange/hidden{ @@ -112,6 +100,26 @@ /obj/machinery/newscaster/directional/west, /turf/open/floor/plasteel/patterned/brushed, /area/ship/crew/canteen) +"cZ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/light_switch{ + pixel_x = -25; + pixel_y = 25 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 2; + color = "#543C30" + }, +/turf/open/floor/wood/walnut, +/area/ship/crew) "dh" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 1 @@ -123,6 +131,17 @@ /obj/item/toy/cards/deck/kotahi, /turf/open/floor/carpet/red_gold, /area/ship/crew/canteen) +"dr" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/airalarm/directional/east, +/obj/effect/turf_decal/siding/wood{ + dir = 8; + color = "#543C30" + }, +/turf/open/floor/wood/walnut, +/area/ship/crew) "dt" = ( /obj/structure/urinal{ pixel_y = 32 @@ -156,6 +175,22 @@ /obj/machinery/suit_storage_unit/standard_unit, /turf/open/floor/plasteel/dark, /area/ship/crew/canteen) +"dP" = ( +/obj/machinery/vending/cigarette, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"dU" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/chair/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) "dV" = ( /turf/closed/wall, /area/ship/maintenance) @@ -186,26 +221,6 @@ }, /turf/open/floor/plasteel/dark, /area/ship/storage) -"ef" = ( -/obj/structure/table/wood, -/obj/item/paper_bin, -/obj/item/pen/fountain, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 6 - }, -/obj/item/megaphone{ - pixel_x = 3; - pixel_y = 1 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 2; - color = "#543C30" - }, -/turf/open/floor/wood/walnut, -/area/ship/crew) "ej" = ( /obj/structure/table/reinforced, /obj/item/storage/box/donkpockets, @@ -231,6 +246,18 @@ }, /turf/open/floor/plasteel/dark, /area/ship/bridge) +"ev" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) "ex" = ( /obj/machinery/airalarm/directional/south, /turf/open/floor/plasteel, @@ -298,15 +325,19 @@ /obj/structure/catwalk/over/plated_catwalk, /turf/open/floor/plating, /area/ship/crew/hydroponics) -"fl" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/turf/open/floor/wood, -/area/ship/crew/canteen) "fs" = ( /turf/open/floor/plasteel, /area/ship/crew/hydroponics) +"fz" = ( +/obj/machinery/cryopod{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood/corner{ + color = "#543C30"; + dir = 4 + }, +/turf/open/floor/wood/walnut, +/area/ship/crew) "fG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 @@ -326,6 +357,12 @@ }, /turf/open/floor/plasteel/mono/white, /area/ship/bridge) +"gq" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) "gL" = ( /obj/effect/turf_decal/number/two, /turf/open/floor/plating/airless, @@ -363,6 +400,14 @@ }, /turf/open/floor/plating/airless, /area/ship/external) +"hJ" = ( +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/siding/wood{ + dir = 1; + color = "#543C30" + }, +/turf/open/floor/wood/walnut, +/area/ship/crew) "hL" = ( /obj/structure/bed, /obj/item/bedsheet/random, @@ -390,25 +435,10 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/plating, /area/ship/maintenance) -"iA" = ( -/obj/structure/bed, -/obj/item/bedsheet/random, -/obj/structure/curtain/bounty, -/obj/effect/turf_decal/siding/wood{ - dir = 1; - color = "#543C30" - }, -/turf/open/floor/wood/walnut, -/area/ship/crew) "iB" = ( /obj/machinery/status_display/shuttle, /turf/closed/wall, /area/ship/storage) -"iR" = ( -/obj/machinery/light/directional/south, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/wood, -/area/ship/crew/canteen) "ja" = ( /obj/machinery/door/poddoor{ id = "windowlockdown"; @@ -442,49 +472,24 @@ /obj/structure/catwalk/over/plated_catwalk, /turf/open/floor/plating, /area/ship/cargo) -"jL" = ( -/obj/structure/chair/office{ - dir = 1 +"jA" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 }, -/obj/effect/turf_decal/siding/wood{ - dir = 4; - color = "#543C30" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 }, -/turf/open/floor/wood/walnut, -/area/ship/crew) +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) "jN" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 8 }, /turf/open/floor/plasteel, /area/ship/cargo) -"kf" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/airalarm/directional/east, -/obj/effect/turf_decal/siding/wood{ - dir = 8; - color = "#543C30" - }, -/turf/open/floor/wood/walnut, -/area/ship/crew) -"kh" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green{ - pixel_x = -6; - pixel_y = 10 - }, -/obj/item/folder, -/obj/machinery/computer/cryopod/directional/north{ - pixel_y = 17 - }, -/obj/item/radio/intercom/directional/west, -/obj/effect/turf_decal/siding/wood/corner{ - color = "#543C30" - }, -/turf/open/floor/wood/walnut, -/area/ship/crew) "kr" = ( /obj/structure/sign/warning/chemdiamond, /turf/closed/wall, @@ -596,16 +601,6 @@ /obj/item/spacecash/bundle/c1000, /turf/open/floor/plasteel/dark, /area/ship/bridge) -"lY" = ( -/obj/machinery/cryopod{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood/corner{ - color = "#543C30"; - dir = 4 - }, -/turf/open/floor/wood/walnut, -/area/ship/crew) "me" = ( /obj/structure/window/reinforced/spawner/west, /obj/machinery/power/smes/shuttle/precharged{ @@ -661,13 +656,6 @@ /obj/item/stack/sheet/mineral/plasma/five, /turf/open/floor/plating, /area/ship/maintenance) -"mX" = ( -/obj/machinery/vending/cigarette, -/obj/effect/turf_decal/siding/wood{ - dir = 6 - }, -/turf/open/floor/wood, -/area/ship/crew/canteen) "nc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/effect/turf_decal/industrial/warning{ @@ -694,6 +682,18 @@ /obj/effect/turf_decal/corner/opaque/white/half, /turf/open/floor/plasteel/mono/dark, /area/ship/bridge) +"ny" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) "nA" = ( /obj/effect/turf_decal/industrial/warning/corner{ dir = 1 @@ -726,20 +726,37 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/plasteel/freezer, /area/ship/storage) -"op" = ( -/obj/structure/table/reinforced, +"oX" = ( +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"pb" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/table/wood/fancy/black, +/obj/item/reagent_containers/food/condiment/saltshaker{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/reagent_containers/food/condiment/peppermill, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"pg" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 }, -/obj/item/areaeditor/shuttle{ - pixel_x = -11 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 }, -/obj/item/radio/intercom/wideband/table{ - dir = 8; - canhear_range = 5 +/obj/effect/turf_decal/siding/wood{ + dir = 4 }, -/turf/open/floor/plasteel/mono/white, -/area/ship/bridge) +/turf/open/floor/wood, +/area/ship/crew/canteen) "ph" = ( /obj/structure/chair/comfy/shuttle{ dir = 4 @@ -767,16 +784,6 @@ /obj/machinery/status_display/shuttle, /turf/closed/wall/r_wall, /area/ship/bridge) -"pH" = ( -/obj/structure/bed, -/obj/item/bedsheet/random, -/obj/structure/curtain/bounty, -/obj/effect/turf_decal/siding/wood/corner{ - color = "#543C30"; - dir = 1 - }, -/turf/open/floor/wood/walnut, -/area/ship/crew) "pN" = ( /obj/machinery/atmospherics/components/binary/valve/digital, /obj/structure/cable{ @@ -826,6 +833,24 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/ship/crew/hydroponics) +"qB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/structure/chair/sofa/right{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"qE" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/chair/stool/bar{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) "qO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 6 @@ -841,10 +866,30 @@ }, /turf/open/floor/plating, /area/ship/maintenance) +"qZ" = ( +/obj/structure/bed, +/obj/item/bedsheet/random, +/obj/structure/curtain/bounty, +/obj/effect/turf_decal/siding/wood{ + dir = 1; + color = "#543C30" + }, +/turf/open/floor/wood/walnut, +/area/ship/crew) "rj" = ( /obj/structure/ore_box, /turf/open/floor/plasteel/dark, /area/ship/cargo) +"rk" = ( +/obj/machinery/computer/helm/viewscreen/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/chair/sofa/left{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) "rm" = ( /obj/structure/urinal{ pixel_y = 32 @@ -885,6 +930,16 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/plasteel/dark, /area/ship/crew/canteen) +"rz" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4; + color = "#543C30" + }, +/turf/open/floor/wood/walnut, +/area/ship/crew) "rA" = ( /obj/structure/sink/kitchen{ dir = 4; @@ -898,52 +953,27 @@ }, /turf/open/floor/plasteel/mono/dark, /area/ship/bridge) -"rH" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating, -/area/ship/maintenance) -"rM" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/wood, -/area/ship/crew/canteen) -"rR" = ( +"rC" = ( +/obj/structure/table/reinforced, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/wood, -/area/ship/crew/canteen) -"rY" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 +/obj/item/areaeditor/shuttle{ + pixel_x = -11 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 +/obj/item/radio/intercom/wideband/table{ + dir = 8; + canhear_range = 5 }, +/turf/open/floor/plasteel/mono/white, +/area/ship/bridge) +"rH" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/wood, -/area/ship/crew/canteen) +/turf/open/floor/plating, +/area/ship/maintenance) "sg" = ( /turf/closed/wall, /area/ship/storage) @@ -979,8 +1009,13 @@ /obj/machinery/status_display/shuttle, /turf/closed/wall, /area/ship/cargo) -"sT" = ( -/obj/effect/turf_decal/siding/wood, +"sR" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/chair/wood{ + dir = 8 + }, /turf/open/floor/wood, /area/ship/crew/canteen) "sU" = ( @@ -1008,25 +1043,14 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/plasteel/patterned, /area/ship/crew/canteen) -"tz" = ( -/obj/item/radio, -/obj/item/radio, -/obj/item/radio, -/obj/item/radio, -/obj/item/radio, -/obj/item/radio, -/obj/structure/closet/crate, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/item/radio/intercom/directional/east, -/obj/effect/turf_decal/siding/wood/corner{ - color = "#543C30"; +"tC" = ( +/obj/docking_port/stationary{ + width = 15; + height = 15; dir = 8 }, -/turf/open/floor/wood/walnut, -/area/ship/crew) +/turf/closed/wall, +/area/ship/crew/canteen) "tP" = ( /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 @@ -1053,19 +1077,6 @@ }, /turf/open/floor/carpet/red_gold, /area/ship/crew/canteen) -"tW" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 10 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/wood, -/area/ship/crew/canteen) "ua" = ( /obj/effect/turf_decal/industrial/warning/corner{ dir = 4 @@ -1073,13 +1084,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/plasteel, /area/ship/cargo) -"uC" = ( -/obj/machinery/airalarm/directional/south, -/obj/effect/turf_decal/siding/wood{ - dir = 6 - }, -/turf/open/floor/wood, -/area/ship/crew/canteen) "uI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 1 @@ -1091,7 +1095,7 @@ /obj/structure/catwalk/over/plated_catwalk, /turf/open/floor/plating, /area/ship/crew/hydroponics) -"uN" = ( +"uP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 }, @@ -1099,17 +1103,13 @@ dir = 8 }, /obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "1-4" + icon_state = "4-8" }, /obj/effect/turf_decal/siding/wood{ - dir = 8; - color = "#543C30" + dir = 8 }, -/turf/open/floor/wood/walnut, -/area/ship/crew) +/turf/open/floor/wood, +/area/ship/crew/canteen) "uR" = ( /turf/closed/wall, /area/ship/crew) @@ -1125,6 +1125,21 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/plasteel/mono/dark, /area/ship/bridge) +"vi" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) "vw" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 @@ -1156,13 +1171,26 @@ /obj/machinery/holopad/emergency/kitchen, /turf/open/floor/plasteel/mono/white, /area/ship/bridge) -"wG" = ( -/obj/machinery/light/directional/north, +"wF" = ( +/obj/structure/table/wood, +/obj/item/paper_bin, +/obj/item/pen/fountain, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/item/megaphone{ + pixel_x = 3; + pixel_y = 1 + }, /obj/effect/turf_decal/siding/wood{ - dir = 5 + dir = 2; + color = "#543C30" }, -/turf/open/floor/wood, -/area/ship/crew/canteen) +/turf/open/floor/wood/walnut, +/area/ship/crew) "wO" = ( /obj/machinery/seed_extractor, /obj/effect/turf_decal/box, @@ -1232,9 +1260,15 @@ /obj/item/storage/pill_bottle/dice, /turf/open/floor/carpet/red_gold, /area/ship/crew/canteen) -"xC" = ( +"xH" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/turf/open/floor/plasteel/mono, +/area/ship/bridge) +"xO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 @@ -1243,16 +1277,11 @@ icon_state = "4-8" }, /obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ship/crew/canteen) -"xH" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 10 + dir = 4; + color = "#543C30" }, -/turf/open/floor/plasteel/mono, -/area/ship/bridge) +/turf/open/floor/wood/walnut, +/area/ship/crew) "xX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 @@ -1262,16 +1291,6 @@ }, /turf/open/floor/plasteel, /area/ship/crew/canteen) -"yg" = ( -/obj/machinery/light/directional/west, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/chair/stool/bar{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ship/crew/canteen) "yi" = ( /turf/open/floor/plating/airless, /area/ship/external) @@ -1342,17 +1361,6 @@ }, /turf/open/floor/plasteel/mono/white, /area/ship/bridge) -"zs" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 - }, -/obj/effect/turf_decal/siding/wood, -/obj/machinery/newscaster/directional/south, -/turf/open/floor/wood, -/area/ship/crew/canteen) "zu" = ( /obj/machinery/gibber, /obj/machinery/power/apc/auto_name/directional/west, @@ -1455,19 +1463,15 @@ /obj/item/toy/cards/deck/syndicate, /turf/open/floor/carpet/red_gold, /area/ship/crew/canteen) -"Bp" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ship/crew/canteen) -"Bq" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 10 +"Bk" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 }, -/obj/structure/chair/sofa/right{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 }, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/newscaster/directional/south, /turf/open/floor/wood, /area/ship/crew/canteen) "BC" = ( @@ -1524,22 +1528,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/ship/bridge) -"CF" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4; - color = "#543C30" - }, -/turf/open/floor/wood/walnut, -/area/ship/crew) "CP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 @@ -1613,20 +1601,8 @@ /obj/item/toy/cards/deck/cas{ pixel_y = 8 }, -/obj/item/toy/cards/deck/cas/black, -/turf/open/floor/carpet/red_gold, -/area/ship/crew/canteen) -"Dk" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/wood, +/obj/item/toy/cards/deck/cas/black, +/turf/open/floor/carpet/red_gold, /area/ship/crew/canteen) "Ds" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ @@ -1660,6 +1636,15 @@ /obj/effect/turf_decal/box, /turf/open/floor/plasteel/mono/dark, /area/ship/bridge) +"DC" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/chair/stool/bar{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) "DD" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 4 @@ -1694,15 +1679,6 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/plasteel, /area/ship/cargo) -"DM" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/chair/sofa{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ship/crew/canteen) "DV" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; @@ -1734,13 +1710,9 @@ /obj/structure/catwalk/over/plated_catwalk, /turf/open/floor/plating, /area/ship/cargo) -"Eb" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/chair/wood{ - dir = 8 - }, +"Ed" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/siding/wood, /turf/open/floor/wood, /area/ship/crew/canteen) "Ei" = ( @@ -1778,13 +1750,6 @@ }, /turf/open/floor/plating, /area/ship/crew/canteen) -"Ey" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood/corner, -/turf/open/floor/wood, -/area/ship/crew/canteen) "EF" = ( /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 @@ -1862,6 +1827,16 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/plasteel/dark, /area/ship/bridge) +"FD" = ( +/obj/machinery/cryopod{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4; + color = "#543C30" + }, +/turf/open/floor/wood/walnut, +/area/ship/crew) "FE" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 @@ -1981,13 +1956,11 @@ }, /turf/open/floor/plating, /area/ship/maintenance) -"HT" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/chair/stool/bar{ - dir = 8 +"HG" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 }, +/obj/effect/turf_decal/siding/wood/corner, /turf/open/floor/wood, /area/ship/crew/canteen) "HY" = ( @@ -2016,6 +1989,18 @@ /obj/structure/table/reinforced, /turf/open/floor/plasteel/dark, /area/ship/crew/canteen) +"Ix" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/vending/clothing, +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/siding/wood{ + dir = 8; + color = "#543C30" + }, +/turf/open/floor/wood/walnut, +/area/ship/crew) "IC" = ( /obj/effect/turf_decal/ihejirika_small{ dir = 8 @@ -2050,6 +2035,22 @@ /obj/machinery/status_display/shuttle, /turf/closed/wall, /area/ship/crew/canteen) +"JE" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = -6; + pixel_y = 10 + }, +/obj/item/folder, +/obj/machinery/computer/cryopod/directional/north{ + pixel_y = 17 + }, +/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/siding/wood/corner{ + color = "#543C30" + }, +/turf/open/floor/wood/walnut, +/area/ship/crew) "JR" = ( /turf/closed/wall/r_wall, /area/ship/crew) @@ -2256,23 +2257,6 @@ }, /turf/open/floor/plasteel/dark, /area/ship/crew) -"Pi" = ( -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/siding/wood{ - dir = 1; - color = "#543C30" - }, -/turf/open/floor/wood/walnut, -/area/ship/crew) -"PY" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/chair/wood{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ship/crew/canteen) "Qc" = ( /obj/structure/table/reinforced, /obj/effect/spawner/lootdrop/donkpockets, @@ -2312,16 +2296,6 @@ }, /turf/open/floor/plating, /area/ship/maintenance) -"QQ" = ( -/obj/machinery/computer/helm/viewscreen/directional/west, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/chair/sofa/left{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ship/crew/canteen) "QR" = ( /obj/item/storage/toolbox/electrical, /obj/item/storage/toolbox/electrical, @@ -2346,18 +2320,6 @@ /obj/structure/catwalk/over/plated_catwalk, /turf/open/floor/plating, /area/ship/cargo) -"Rk" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/wood, -/area/ship/crew/canteen) "Ro" = ( /obj/machinery/smartfridge/food, /turf/closed/wall/mineral/titanium/nodiagonal, @@ -2375,6 +2337,16 @@ }, /turf/open/floor/plasteel/mono/white, /area/ship/bridge) +"RU" = ( +/obj/structure/bed, +/obj/item/bedsheet/random, +/obj/structure/curtain/bounty, +/obj/effect/turf_decal/siding/wood/corner{ + color = "#543C30"; + dir = 1 + }, +/turf/open/floor/wood/walnut, +/area/ship/crew) "Sa" = ( /turf/open/floor/plasteel, /area/ship/crew/canteen) @@ -2426,6 +2398,13 @@ }, /turf/open/floor/plasteel, /area/ship/crew/canteen) +"SM" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) "SO" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /obj/structure/closet/secure_closet/freezer/meat/open, @@ -2464,11 +2443,27 @@ }, /turf/open/floor/plating/airless, /area/ship/external) -"TB" = ( -/obj/machinery/light/directional/west, -/obj/effect/turf_decal/siding/wood{ +"To" = ( +/obj/item/radio, +/obj/item/radio, +/obj/item/radio, +/obj/item/radio, +/obj/item/radio, +/obj/item/radio, +/obj/structure/closet/crate, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/item/radio/intercom/directional/east, +/obj/effect/turf_decal/siding/wood/corner{ + color = "#543C30"; dir = 8 }, +/turf/open/floor/wood/walnut, +/area/ship/crew) +"Tp" = ( +/obj/effect/turf_decal/siding/wood, /turf/open/floor/wood, /area/ship/crew/canteen) "TD" = ( @@ -2501,15 +2496,6 @@ /obj/structure/catwalk/over/plated_catwalk, /turf/open/floor/plating, /area/ship/cargo) -"Uk" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/chair/stool/bar{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ship/crew/canteen) "Um" = ( /obj/machinery/chem_master/condimaster, /obj/item/storage/box/beakers, @@ -2538,6 +2524,22 @@ }, /turf/open/floor/plasteel, /area/ship/cargo) +"Uy" = ( +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/chair/stool/bar{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"UC" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) "UI" = ( /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 @@ -2635,6 +2637,15 @@ /obj/effect/turf_decal/box, /turf/open/floor/plasteel/dark, /area/ship/crew/hydroponics) +"WA" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/chair/sofa{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) "WH" = ( /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 @@ -2647,26 +2658,6 @@ }, /turf/open/floor/plasteel/dark, /area/ship/crew/canteen) -"WJ" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/light_switch{ - pixel_x = -25; - pixel_y = 25 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 2; - color = "#543C30" - }, -/turf/open/floor/wood/walnut, -/area/ship/crew) "WP" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /turf/open/floor/plasteel, @@ -2733,6 +2724,15 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/plasteel/dark, /area/ship/crew) +"Yr" = ( +/obj/docking_port/stationary{ + width = 30; + height = 15; + dir = 8; + dwidth = 15 + }, +/turf/template_noop, +/area/template_noop) "YC" = ( /obj/machinery/door/airlock/external{ dir = 8 @@ -2743,10 +2743,23 @@ /obj/machinery/light_switch{ dir = 1; pixel_x = 25; - pixel_y = -25 + pixel_y = -20 }, /turf/open/floor/plasteel, /area/ship/cargo) +"YT" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/ship/crew/canteen) "YZ" = ( /obj/machinery/door/poddoor{ id = "bridgelockdown"; @@ -2755,18 +2768,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/ship/bridge) -"Zd" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/table/wood/fancy/black, -/obj/item/reagent_containers/food/condiment/saltshaker{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/reagent_containers/food/condiment/peppermill, -/turf/open/floor/wood, -/area/ship/crew/canteen) "Zm" = ( /obj/machinery/door/airlock{ dir = 4 @@ -2796,16 +2797,13 @@ /obj/machinery/light/directional/south, /turf/open/floor/plasteel/dark, /area/ship/crew/hydroponics) -"ZB" = ( -/obj/machinery/cryopod{ - dir = 1 - }, +"ZG" = ( +/obj/machinery/airalarm/directional/south, /obj/effect/turf_decal/siding/wood{ - dir = 4; - color = "#543C30" + dir = 6 }, -/turf/open/floor/wood/walnut, -/area/ship/crew) +/turf/open/floor/wood, +/area/ship/crew/canteen) "ZQ" = ( /obj/machinery/light_switch{ dir = 1; @@ -2814,14 +2812,25 @@ }, /turf/open/floor/plasteel/mono, /area/ship/bridge) -"ZW" = ( -/obj/docking_port/stationary{ - width = 15; - height = 15; +"ZY" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 }, -/turf/template_noop, -/area/template_noop) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8; + color = "#543C30" + }, +/turf/open/floor/wood/walnut, +/area/ship/crew) (1,1,1) = {" vZ @@ -2829,7 +2838,7 @@ vZ vZ vZ vZ -ZW +Yr vZ vZ vZ @@ -3019,7 +3028,7 @@ Qm sU CP rt -sU +tC XQ sU sU @@ -3036,28 +3045,28 @@ vZ (11,1,1) = {" vZ cC -fl -TB -rY -Uk -yg -Rk -QQ -DM -Bq +UC +oX +uP +DC +Uy +ny +rk +WA +qB uR -kh -jL -CF -ZB -lY +JE +rz +xO +FD +fz JR vZ "} (12,1,1) = {" vZ xr -PY +dU qO Se Od @@ -3065,20 +3074,20 @@ Dj DD Da tT -zs +Bk uR -ef +wF XB Ei IV -Pi +hJ JR vZ "} (13,1,1) = {" vZ xr -Zd +pb FE Af UO @@ -3086,20 +3095,20 @@ xy ro hZ XU -tW +YT Yj -WJ +cZ dy AF ct -iA +qZ eS vZ "} (14,1,1) = {" vZ xr -Eb +sR my jj Bc @@ -3107,28 +3116,28 @@ di st Wf az -iR +Ed uR -tz -ai -kf -uN -pH +To +Ix +dr +ZY +RU eS vZ "} (15,1,1) = {" vZ xr -PY -rR -Ey -HT -HT -Bp -Bp -Dk -uC +dU +ev +HG +qE +qE +gq +gq +pg +ZG uR uR uR @@ -3141,9 +3150,9 @@ vZ (16,1,1) = {" vZ xr -Zd -rM -sT +pb +jA +Tp WH kS kS @@ -3162,9 +3171,9 @@ vZ (17,1,1) = {" vZ xr -Eb -rM -sT +sR +jA +Tp sp cy sn @@ -3183,9 +3192,9 @@ vZ (18,1,1) = {" vZ cC -wG -xC -mX +SM +vi +dP sp aV NM @@ -3337,7 +3346,7 @@ FA Sf Lj Qc -op +rC cA Lj ZQ diff --git a/_maps/shuttles/shiptest/independent_dwayne.dmm b/_maps/shuttles/shiptest/independent_dwayne.dmm index d532599831ec..99e8b9f1e0c5 100644 --- a/_maps/shuttles/shiptest/independent_dwayne.dmm +++ b/_maps/shuttles/shiptest/independent_dwayne.dmm @@ -425,6 +425,9 @@ /obj/effect/turf_decal/corner/opaque/blue{ dir = 4 }, +/obj/structure/closet/emcloset/wall{ + pixel_y = 28 + }, /turf/open/floor/plasteel/white{ dir = 1 }, @@ -886,49 +889,6 @@ "tq" = ( /turf/closed/wall/r_wall, /area/ship/engineering) -"tG" = ( -/obj/item/clothing/suit/hazardvest{ - desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; - name = "emergency lifejacket"; - pixel_x = -4; - pixel_y = -4 - }, -/obj/item/clothing/suit/hazardvest{ - desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; - name = "emergency lifejacket" - }, -/obj/item/clothing/suit/hazardvest{ - desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; - name = "emergency lifejacket"; - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/clothing/head/hardhat/mining{ - pixel_x = -4; - pixel_y = -4 - }, -/obj/item/clothing/head/hardhat/mining, -/obj/item/clothing/head/hardhat/mining{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/gps/mining, -/obj/item/gps/mining, -/obj/item/gps/mining, -/obj/item/clothing/glasses/meson/prescription, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/meson, -/obj/item/t_scanner/adv_mining_scanner/lesser, -/obj/item/gun/energy/kinetic_accelerator, -/obj/item/pickaxe/silver, -/obj/item/pickaxe/silver, -/obj/item/storage/bag/ore, -/obj/item/storage/bag/ore, -/obj/structure/closet/wall{ - name = "equipment closet" - }, -/turf/closed/wall/r_wall, -/area/ship/cargo) "tX" = ( /obj/structure/ore_box, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ @@ -1154,10 +1114,6 @@ }, /turf/open/floor/plasteel/mono/dark, /area/ship/bridge) -"zn" = ( -/obj/structure/closet/emcloset/wall, -/turf/closed/wall, -/area/ship/medical) "zq" = ( /obj/structure/catwalk, /obj/machinery/atmospherics/components/unary/outlet_injector/on/layer4{ @@ -1509,6 +1465,47 @@ /turf/open/floor/plasteel/mono, /area/ship/medical) "IZ" = ( +/obj/item/clothing/suit/hazardvest{ + desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; + name = "emergency lifejacket"; + pixel_x = -4; + pixel_y = -4 + }, +/obj/item/clothing/suit/hazardvest{ + desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; + name = "emergency lifejacket" + }, +/obj/item/clothing/suit/hazardvest{ + desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; + name = "emergency lifejacket"; + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/clothing/head/hardhat/mining{ + pixel_x = -4; + pixel_y = -4 + }, +/obj/item/clothing/head/hardhat/mining, +/obj/item/clothing/head/hardhat/mining{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/gps/mining, +/obj/item/gps/mining, +/obj/item/gps/mining, +/obj/item/clothing/glasses/meson/prescription, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson, +/obj/item/t_scanner/adv_mining_scanner/lesser, +/obj/item/gun/energy/kinetic_accelerator, +/obj/item/pickaxe/silver, +/obj/item/pickaxe/silver, +/obj/item/storage/bag/ore, +/obj/item/storage/bag/ore, +/obj/structure/closet/wall{ + name = "equipment closet"; + pixel_y = 28 + }, /obj/effect/turf_decal/industrial/warning/corner{ dir = 1 }, @@ -2594,7 +2591,7 @@ FP nL kM YJ -tG +YJ IZ lv dK @@ -2654,7 +2651,7 @@ ei ei ei ei -zn +oC kb lv pt diff --git a/_maps/shuttles/shiptest/independent_junker.dmm b/_maps/shuttles/shiptest/independent_junker.dmm new file mode 100644 index 000000000000..41e443a3040e --- /dev/null +++ b/_maps/shuttles/shiptest/independent_junker.dmm @@ -0,0 +1,3504 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ai" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/north, +/obj/machinery/light_switch{ + pixel_y = -20; + dir = 1; + pixel_x = -6 + }, +/obj/structure/cable{ + icon_state = "5-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/plating/rust, +/area/ship/storage) +"al" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/rack, +/obj/item/crowbar, +/obj/item/weldingtool/mini, +/obj/item/stack/cable_coil/random, +/obj/item/stack/packageWrap, +/obj/item/analyzer, +/obj/item/toner, +/turf/open/floor/plating/rust, +/area/ship/storage) +"an" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-9" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/plating/rust, +/area/ship/maintenance/port) +"aq" = ( +/obj/item/trash/sosjerky, +/obj/effect/spawner/lootdrop/maintenance, +/obj/item/areaeditor/shuttle{ + pixel_y = 7 + }, +/obj/item/stack/tape/industrial{ + pixel_x = -6; + pixel_y = 7 + }, +/obj/item/spacecash/bundle/c50, +/obj/item/radio/intercom/wideband/directional/east, +/obj/structure/table/reinforced, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating, +/area/ship/bridge) +"ay" = ( +/obj/structure/rack, +/obj/item/storage/backpack/explorer, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/lootdrop/maintenance/two, +/obj/item/pickaxe/rusted, +/turf/open/floor/plating, +/area/ship/engineering/electrical) +"aE" = ( +/obj/structure/rack, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/broken/directional/north, +/obj/effect/spawner/lootdrop/maintenance/three, +/obj/item/flashlight/pen, +/turf/open/floor/wood/walnut{ + icon_state = "wood-broken" + }, +/area/ship/storage) +"aN" = ( +/obj/structure/table/chem, +/obj/item/reagent_containers/food/snacks/meat/slab{ + pixel_y = 6; + pixel_x = -3 + }, +/obj/item/reagent_containers/food/snacks/meat/slab{ + pixel_x = 4; + pixel_y = 9 + }, +/obj/item/kitchen/knife{ + pixel_y = -3; + pixel_x = 10 + }, +/obj/item/cutting_board, +/turf/open/floor/plastic, +/area/ship/crew/canteen/kitchen) +"aX" = ( +/obj/structure/cable{ + icon_state = "6-10" + }, +/obj/machinery/computer/helm/retro, +/obj/item/paper/construction{ + info = "Yeah, just so you know, I left the fuel and air pumps OFF when I dropped this thing of for you, you're gonna have to go outside and turn em on to start up the engines

The pumps are outside on the tank things to the left and right on the back of the ship, there's also one in each engine room you'll need to get going." + }, +/turf/open/floor/plating, +/area/ship/bridge) +"bc" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-10" + }, +/turf/open/floor/plating, +/area/ship/maintenance/port) +"bf" = ( +/turf/closed/wall/rust, +/area/ship/storage) +"br" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-6" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/maintenance/port) +"bt" = ( +/obj/machinery/door/airlock/engineering/glass{ + dir = 4; + req_access_txt = "10" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 4 + }, +/turf/open/floor/pod/dark, +/area/ship/crew/office) +"bF" = ( +/obj/structure/table, +/obj/machinery/door/poddoor/shutters{ + id = "loby"; + dir = 4 + }, +/turf/open/floor/pod/dark, +/area/ship/crew/office) +"bG" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/decal/cleanable/garbage, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/plating/rust, +/area/ship/maintenance/central) +"bP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/broken/directional/north, +/obj/machinery/pipedispenser, +/turf/open/floor/wood/walnut{ + icon_state = "wood-broken4" + }, +/area/ship/storage) +"cN" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/obj/effect/decal/cleanable/blood/footprints, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-6" + }, +/turf/open/floor/plating, +/area/ship/maintenance/port) +"cQ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/wood/walnut{ + icon_state = "wood-broken3" + }, +/area/ship/maintenance/starboard) +"dm" = ( +/turf/closed/wall/mineral/titanium/survival, +/area/ship/cargo) +"dx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/wood/walnut{ + icon_state = "wood-broken5" + }, +/area/ship/maintenance/starboard) +"ep" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/ship/maintenance/starboard) +"er" = ( +/obj/structure/sign/poster/contraband/tools, +/turf/closed/wall/mineral/titanium/survival/nodiagonal, +/area/ship/storage) +"eF" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/pod/dark, +/area/ship/maintenance/starboard) +"eG" = ( +/obj/structure/sign/warning/nosmoking/circle{ + pixel_x = 22 + }, +/obj/effect/decal/cleanable/ash, +/obj/effect/decal/cleanable/ash{ + pixel_y = -2; + pixel_x = 5 + }, +/obj/effect/decal/cleanable/ash{ + pixel_y = -3; + pixel_x = -6 + }, +/obj/item/cigbutt{ + pixel_y = 3 + }, +/obj/item/cigbutt/roach{ + pixel_y = -3; + pixel_x = -11 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable{ + icon_state = "0-10" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/conf_haz, +/area/ship/maintenance/fore) +"eH" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/vending/assist, +/obj/item/trash/can{ + pixel_y = -7; + pixel_x = 15 + }, +/turf/open/floor/pod/dark, +/area/ship/storage/eva) +"eI" = ( +/turf/closed/wall/r_wall/rust, +/area/ship/maintenance/fore) +"eP" = ( +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "Tcargotide2" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/ship/engineering/electrical) +"eS" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/closed/wall/r_wall/rust, +/area/ship/maintenance/fore) +"fb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/item/assembly/signaler{ + pixel_y = 11 + }, +/obj/item/assembly/signaler{ + pixel_y = 11; + pixel_x = -9 + }, +/obj/item/hand_labeler{ + pixel_y = 11; + pixel_x = 9 + }, +/obj/item/storage/toolbox{ + pixel_x = 3; + pixel_y = 5 + }, +/obj/item/storage/toolbox, +/obj/item/hand_labeler_refill{ + pixel_y = -3; + pixel_x = 12 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/wood/walnut{ + icon_state = "wood-broken5" + }, +/area/ship/storage) +"fg" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/chair/plastic{ + dir = 4 + }, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"fm" = ( +/obj/machinery/cryopod/poor{ + dir = 4; + icon = 'icons/obj/crates.dmi'; + icon_state = "freezeropen"; + close_state = "freezer"; + open_state = "freezeropen" + }, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plastic, +/area/ship/crew/canteen/kitchen) +"fW" = ( +/obj/structure/window/reinforced/fulltile, +/obj/structure/girder/reinforced, +/turf/open/floor/plating, +/area/ship/bridge) +"gh" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/industrial/warning/dust, +/obj/machinery/airalarm/directional/east, +/obj/item/paper/construction{ + info = "

Airlock Instructions


Because none of you numbnuts can remember them


1: Bolt the door behind you so you dont bump into it and lose all our air.
Bolt is the LEFT BUTTON
2: Go to the air alarm, set it to siphon
3: When at least most of the gas is out, turn OFF siphon
4: You can now open the shutters
I shouldnt have to tell you this, but theyre the RIGHT button

To go back IN


1: Close the shutters behind you
2: Set the air alarm to SIPHON again
3: When all of the dangerous gas is out, set the air alarm to FILL
3: Once the pressure is at least 50 kpa, you can set the air alarm back to normal, and unbolt the door

I still can't fucking believe I have to write this." + }, +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/ship/cargo) +"go" = ( +/obj/machinery/atmospherics/pipe/simple/purple/hidden, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/insectguts, +/turf/open/floor/pod/dark, +/area/ship/storage/eva) +"gM" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/plastic, +/area/ship/crew/canteen/kitchen) +"gN" = ( +/obj/effect/decal/cleanable/robot_debris, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/decal/cleanable/glass, +/obj/item/shard, +/obj/structure/cable{ + icon_state = "5-6" + }, +/turf/open/floor/plating, +/area/ship/construction) +"gR" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/lootdrop/maintenance/two, +/turf/open/floor/plating, +/area/ship/engineering/electrical) +"hb" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/closed/wall/mineral/titanium/survival/nodiagonal, +/area/ship/maintenance/central) +"hm" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/ship/maintenance/starboard) +"hq" = ( +/obj/structure/cable{ + icon_state = "1-10" + }, +/obj/effect/decal/cleanable/dirt/dust, +/mob/living/simple_animal/hostile/cockroach, +/obj/machinery/light/dim/directional/east, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/ship/maintenance/starboard) +"hy" = ( +/obj/structure/girder/reinforced, +/obj/structure/barricade/wooden/crude, +/obj/structure/sign/warning/fire{ + pixel_x = 22 + }, +/obj/structure/sign/warning/fire{ + pixel_x = -22 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/walnut, +/area/ship/engineering/electrical) +"hz" = ( +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"hG" = ( +/obj/machinery/button/massdriver{ + dir = 4; + pixel_x = -20; + id = "junk_driver" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/vomit, +/obj/item/trash/can/food/beans{ + pixel_y = 17; + pixel_x = -11 + }, +/obj/item/trash/candy{ + pixel_y = 12 + }, +/obj/item/trash/candy{ + pixel_y = 3 + }, +/obj/item/trash/can/food{ + pixel_y = -3; + pixel_x = -10 + }, +/obj/effect/decal/cleanable/cobweb, +/mob/living/simple_animal/hostile/cockroach, +/turf/open/floor/wood/walnut{ + icon_state = "wood-broken6" + }, +/area/ship/maintenance/central) +"hP" = ( +/obj/structure/poddoor_assembly{ + dir = 4 + }, +/obj/item/reagent_containers/glass/bottle/welding_fuel{ + pixel_x = 12; + pixel_y = -12 + }, +/turf/open/floor/plating/airless, +/area/ship/maintenance/external) +"hV" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/ship/construction) +"ip" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/effect/decal/cleanable/generic, +/obj/structure/chair/plastic, +/obj/machinery/light/small/directional/north, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"ir" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/effect/decal/cleanable/insectguts, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/ship/maintenance/port) +"is" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/wood/walnut{ + icon_state = "wood-broken6" + }, +/area/ship/maintenance/starboard) +"it" = ( +/turf/closed/wall/mineral/wood, +/area/ship/maintenance/central) +"iV" = ( +/turf/closed/wall/rust, +/area/ship/crew/canteen/kitchen) +"iY" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/maintenance_hatch{ + id_tag = "lockin" + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"jj" = ( +/obj/structure/sign/warning/testchamber, +/turf/closed/wall/r_wall, +/area/ship/cargo) +"jz" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/power/smes/engineering, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/ship/engineering/electrical) +"jE" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/table, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/item/stack/ore/salvage/scrapuranium{ + pixel_y = 2; + pixel_x = -4 + }, +/obj/item/screwdriver{ + pixel_x = -12 + }, +/obj/item/flashlight{ + pixel_y = -3; + pixel_x = 15; + light_on = 1 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"jO" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/door/firedoor/border_only{ + dir = 2 + }, +/obj/machinery/door/airlock/maintenance_hatch, +/turf/open/floor/plating, +/area/ship/maintenance/port) +"kj" = ( +/obj/structure/closet/secure_closet/personal{ + req_access = list(11) + }, +/obj/item/stack/sheet/metal/five, +/obj/item/circuitboard/machine/paystand, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/item/stock_parts/scanning_module, +/obj/item/stock_parts/manipulator, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/reagent_containers/glass/bottle/welding_fuel, +/obj/item/clothing/under/misc/assistantformal, +/obj/item/clothing/shoes/laceup, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/item/floor_painter, +/turf/open/floor/plating, +/area/ship/construction) +"kv" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/reagent_containers/glass/bucket, +/obj/effect/decal/cleanable/vomit/old, +/obj/machinery/shower{ + dir = 8 + }, +/obj/effect/decal/cleanable/food/plant_smudge, +/obj/item/reagent_containers/food/snacks/urinalcake{ + pixel_y = -9; + pixel_x = -13 + }, +/turf/open/floor/plastic, +/area/ship/crew/canteen/kitchen) +"lf" = ( +/obj/effect/decal/cleanable/oil, +/obj/effect/decal/cleanable/oil/streak, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/glass, +/obj/item/stack/tape/industrial/electrical, +/obj/item/stack/tape/industrial, +/obj/item/wirecutters/old, +/obj/item/clothing/mask/gas, +/obj/item/reagent_containers/glass/bottle/welding_fuel{ + desc = "A small bottle. Pour on engine in case of emergency." + }, +/obj/structure/closet/firecloset/empty{ + name = "emergency repair closet"; + desc = "It's a storage unit for repair supplies."; + req_access_txt = "10" + }, +/obj/item/extinguisher/mini, +/turf/open/floor/plating, +/area/ship/maintenance/port) +"ls" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "Tcargotide2" + }, +/obj/structure/cable{ + icon_state = "5-8" + }, +/turf/open/floor/plating, +/area/ship/engineering/electrical) +"lA" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/ship/maintenance/starboard) +"lC" = ( +/obj/structure/kitchenspike, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/gibspawner/generic/animal, +/obj/machinery/light/dim/directional/west, +/turf/open/floor/plastic, +/area/ship/crew/canteen/kitchen) +"lQ" = ( +/obj/machinery/portable_atmospherics/canister, +/obj/machinery/atmospherics/components/unary/portables_connector{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 10 + }, +/obj/item/reagent_containers/glass/bottle/welding_fuel{ + pixel_y = 16; + pixel_x = -4; + name = "precariously balanced welding fuel bottle" + }, +/obj/machinery/light/small/broken/directional/north, +/turf/open/floor/plating/rust/conf_haz, +/area/ship/maintenance/fore) +"md" = ( +/obj/machinery/door/firedoor/border_only, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/purple/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/oil, +/turf/open/floor/pod/dark, +/area/ship/storage/eva) +"mo" = ( +/obj/machinery/atmospherics/components/unary/portables_connector{ + dir = 4 + }, +/obj/item/reagent_containers/glass/bottle/welding_fuel, +/obj/machinery/door/poddoor{ + dir = 4; + id = "tankl" + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating/airless, +/area/ship/maintenance/external) +"mF" = ( +/turf/closed/wall/r_wall, +/area/ship/engineering/electrical) +"mK" = ( +/turf/closed/wall/mineral/titanium/survival, +/area/ship/maintenance/external) +"mN" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/hydroponics/soil, +/obj/structure/bed/dogbed, +/mob/living/simple_animal/hostile/retaliate/goose/vomit, +/obj/machinery/light/small/built/directional/south, +/obj/effect/decal/cleanable/vomit, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"mZ" = ( +/obj/machinery/atmospherics/components/unary/tank/air{ + dir = 8; + piping_layer = 2 + }, +/obj/machinery/door/poddoor{ + dir = 4; + id = "tankr" + }, +/turf/open/floor/plating/airless, +/area/ship/maintenance/external) +"nb" = ( +/obj/machinery/door/airlock/engineering, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/pod/dark, +/area/ship/maintenance/port) +"nn" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/purple/hidden, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 20; + pixel_y = 7 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/turf/open/floor/pod/dark, +/area/ship/crew/office) +"nE" = ( +/obj/structure/girder/reinforced, +/obj/structure/window/fulltile, +/turf/open/floor/plating, +/area/ship/maintenance/fore) +"nU" = ( +/obj/structure/girder/reinforced, +/obj/structure/window/fulltile, +/turf/open/floor/plating, +/area/ship/maintenance/starboard) +"nY" = ( +/obj/structure/girder/reinforced, +/obj/structure/window/fulltile, +/turf/open/floor/plating, +/area/ship/maintenance/port) +"oj" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/frame/machine, +/turf/open/floor/plating, +/area/ship/engineering/electrical) +"oQ" = ( +/obj/structure/girder/reinforced, +/obj/structure/barricade/wooden/crude, +/turf/open/floor/plating, +/area/ship/storage) +"pc" = ( +/turf/closed/wall/r_wall, +/area/ship/maintenance/starboard) +"pC" = ( +/turf/closed/wall/mineral/titanium/survival/nodiagonal, +/area/ship/maintenance/external) +"pG" = ( +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 10 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/pod/dark, +/area/ship/crew/office) +"qc" = ( +/obj/machinery/atmospherics/components/unary/portables_connector{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/pump, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/light_switch{ + pixel_y = -20; + dir = 1; + pixel_x = 6 + }, +/turf/open/floor/plating/rust/conf_haz, +/area/ship/maintenance/fore) +"qm" = ( +/obj/structure/rack, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/lootdrop/maintenance/three, +/obj/item/reagent_containers/food/snacks/canned/peaches/maint, +/turf/open/floor/plating, +/area/ship/construction) +"qt" = ( +/obj/machinery/door/poddoor/shutters{ + id = "coms"; + dir = 4 + }, +/obj/structure/table, +/turf/open/floor/plating, +/area/ship/construction) +"qR" = ( +/turf/closed/wall/r_wall, +/area/ship/cargo) +"rB" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/door/airlock/freezer{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/ship/crew/canteen/kitchen) +"rD" = ( +/obj/machinery/atmospherics/pipe/manifold/general/hidden{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/glass, +/obj/machinery/atmospherics/components/trinary/filter/layer4{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/conf_haz, +/area/ship/maintenance/fore) +"rO" = ( +/obj/machinery/button/door{ + id = "Tcargotide2"; + pixel_x = -23; + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/footprints, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/ship/maintenance/starboard) +"rV" = ( +/turf/closed/wall/mineral/wood, +/area/ship/storage) +"sd" = ( +/obj/machinery/atmospherics/pipe/simple/general/hidden{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/trinary/filter/layer4{ + dir = 1 + }, +/turf/open/floor/plating/rust/conf_haz, +/area/ship/maintenance/fore) +"sh" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/shuttle/heater{ + dir = 1; + CanAtmosPass = 0 + }, +/turf/open/floor/pod/light, +/area/ship/maintenance/aft) +"sk" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"sv" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/trash/candy{ + pixel_y = 6; + pixel_x = -7 + }, +/obj/item/trash/pistachios, +/obj/machinery/airalarm/directional/west, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/pod/dark, +/area/ship/crew/office) +"sB" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/components/binary/pump, +/obj/machinery/door/airlock/hatch, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/pod/light, +/area/ship/maintenance/aft) +"sF" = ( +/obj/machinery/button/door{ + id = "Tcargotide1"; + pixel_y = -20; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/trash/semki, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/maintenance/starboard) +"sK" = ( +/obj/machinery/atmospherics/components/binary/pump, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/airlock/hatch, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/item/assembly/mousetrap/armed, +/obj/effect/mapping_helpers/airlock/abandoned, +/turf/open/floor/pod/light, +/area/ship/maintenance/aft) +"sY" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ship/maintenance/port) +"te" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/cryopod/poor{ + dir = 4; + icon = 'icons/obj/crates.dmi'; + icon_state = "freezeropen"; + close_state = "freezer"; + open_state = "freezeropen" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plastic, +/area/ship/crew/canteen/kitchen) +"to" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/structure/cable{ + icon_state = "0-6" + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/obj/effect/decal/cleanable/garbage, +/obj/structure/cable{ + icon_state = "6-9" + }, +/obj/structure/cable{ + icon_state = "6-8" + }, +/turf/open/floor/plating, +/area/ship/maintenance/port) +"tr" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/wrench{ + pixel_x = -11 + }, +/obj/item/wrench/crescent{ + pixel_x = -5 + }, +/obj/item/wrench/medical{ + pixel_x = 2 + }, +/obj/item/wrench/syndie{ + pixel_x = 7 + }, +/turf/open/floor/plating, +/area/ship/construction) +"ts" = ( +/obj/structure/salvageable/computer{ + desc = "Someone clearly punched the screen of this console. It's broken beyond repair. You may be able to salvage something from this." + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = -7 + }, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating, +/area/ship/bridge) +"tw" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/mob/living/simple_animal/hostile/cockroach, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"tB" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/clothing/head/radiation, +/obj/item/clothing/suit/radiation, +/obj/item/clothing/head/radiation, +/obj/item/clothing/suit/radiation, +/obj/item/geiger_counter, +/obj/item/geiger_counter, +/obj/machinery/light/small/directional/east, +/obj/structure/closet/crate/secure/engineering{ + req_access = list(11) + }, +/turf/open/floor/pod/dark, +/area/ship/storage/eva) +"ua" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/item/screwdriver/old{ + pixel_y = -3; + pixel_x = -10 + }, +/obj/item/crowbar/old{ + pixel_y = 15; + pixel_x = -7 + }, +/obj/item/stack/medical/ointment{ + pixel_y = 12; + pixel_x = 17 + }, +/obj/structure/cable{ + icon_state = "4-10" + }, +/obj/item/wirecutters/old{ + pixel_y = 4; + pixel_x = 18 + }, +/obj/item/clothing/gloves/color/fyellow, +/turf/open/floor/plating, +/area/ship/maintenance/port) +"uU" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4 + }, +/obj/machinery/button/door{ + id = "tankl"; + pixel_x = -23; + dir = 4; + pixel_y = -26 + }, +/turf/open/floor/engine/hull, +/area/ship/maintenance/external) +"uW" = ( +/turf/closed/wall/mineral/wood, +/area/ship/maintenance/starboard) +"vd" = ( +/turf/closed/wall/mineral/titanium/survival/nodiagonal, +/area/ship/maintenance/starboard) +"vj" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/mob/living/simple_animal/hostile/cockroach, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plastic, +/area/ship/crew/canteen/kitchen) +"vk" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/door/airlock/maintenance_hatch{ + welded = 1 + }, +/obj/structure/barricade/wooden/crude, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "5-6" + }, +/obj/effect/mapping_helpers/airlock/abandoned, +/turf/open/floor/plating, +/area/ship/maintenance/fore) +"vr" = ( +/obj/structure/cable{ + icon_state = "5-8" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/maintenance/port) +"vu" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/salvageable/machine{ + name = "broken fax machine" + }, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/pod/dark, +/area/ship/crew/office) +"vO" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/airalarm/directional/east, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/ship/maintenance/starboard) +"vY" = ( +/turf/closed/wall/r_wall, +/area/ship/construction) +"vZ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/glass, +/obj/structure/table/chem, +/obj/structure/sink/kitchen{ + dir = 8; + pixel_x = 12; + pixel_y = 3 + }, +/obj/effect/decal/cleanable/food/tomato_smudge, +/turf/open/floor/plastic, +/area/ship/crew/canteen/kitchen) +"we" = ( +/mob/living/simple_animal/bot/firebot/rockplanet{ + icon_state = "firebot1" + }, +/obj/structure/sign/warning/chemdiamond{ + pixel_y = 32 + }, +/obj/structure/sign/warning{ + pixel_x = -22 + }, +/obj/structure/sign/warning{ + pixel_x = 22 + }, +/obj/structure/bed/dogbed, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/spawner/lootdrop/maintenance/eight, +/obj/structure/safe/floor{ + number_of_tumblers = 5 + }, +/obj/item/card/id/captains_spare, +/obj/item/circuitboard/machine/autolathe/reployer, +/turf/open/floor/plating/rust, +/area/ship/engineering/electrical) +"wi" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4 + }, +/turf/open/floor/engine/hull, +/area/ship/maintenance/external) +"wk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-10" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/item/trash/can/food/peaches/maint{ + pixel_y = -10; + pixel_x = -17 + }, +/turf/open/floor/plating, +/area/ship/storage) +"wt" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/airalarm/directional/west, +/obj/machinery/atmospherics/pipe/manifold/purple/hidden{ + dir = 8 + }, +/obj/item/broken_bottle{ + pixel_y = -11; + pixel_x = -9 + }, +/turf/open/floor/pod/light, +/area/ship/maintenance/aft) +"wG" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"xr" = ( +/obj/machinery/atmospherics/components/unary/shuttle/heater{ + dir = 1; + CanAtmosPass = 0 + }, +/turf/open/floor/plating, +/area/ship/maintenance/aft) +"xt" = ( +/obj/machinery/door/airlock/engineering, +/obj/machinery/atmospherics/pipe/simple/purple/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "2-5" + }, +/obj/effect/decal/cleanable/oil/slippery, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/pod/dark, +/area/ship/storage/eva) +"xx" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/light/small/directional/east, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/flashlight/glowstick{ + pixel_x = -11; + pixel_y = 9 + }, +/obj/item/flashlight/glowstick/orange{ + pixel_y = 5; + pixel_x = -3 + }, +/obj/item/flashlight/glowstick/cyan{ + pixel_x = -9; + pixel_y = 4 + }, +/obj/item/reagent_containers/food/drinks/bottle/hooch{ + pixel_x = 3; + pixel_y = -11 + }, +/obj/effect/decal/cleanable/vomit/old, +/obj/item/reagent_containers/glass/bottle/welding_fuel{ + pixel_x = 10; + pixel_y = -10; + name = "medicine bottle" + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/pod/light, +/area/ship/maintenance/aft) +"xJ" = ( +/turf/closed/wall/r_wall/rust, +/area/ship/maintenance/starboard) +"xP" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"yp" = ( +/turf/closed/wall/rust, +/area/ship/engineering/electrical) +"yt" = ( +/obj/structure/girder/reinforced, +/obj/structure/barricade/wooden/crude, +/obj/structure/sign/warning/hottemp, +/turf/open/floor/wood/walnut, +/area/ship/engineering/electrical) +"yz" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/trash/candy, +/obj/effect/decal/cleanable/plastic, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/light/small/broken/directional/north, +/obj/machinery/light_switch{ + pixel_x = -7; + pixel_y = 23 + }, +/obj/structure/cable{ + icon_state = "8-9" + }, +/turf/open/floor/plating, +/area/ship/construction) +"yD" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/door/airlock/maintenance_hatch, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/ship/bridge) +"zz" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light_switch{ + pixel_x = -7; + pixel_y = 21 + }, +/obj/machinery/suit_storage_unit/independent, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/item/trash/can{ + pixel_x = 11; + pixel_y = -15 + }, +/turf/open/floor/pod/dark, +/area/ship/storage/eva) +"zB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/space_heater, +/turf/open/floor/wood/walnut{ + icon_state = "wood-broken4" + }, +/area/ship/maintenance/starboard) +"zY" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/ship/construction) +"Ae" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/rust, +/area/ship/maintenance/port) +"AJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/wood/walnut{ + icon_state = "wood-broken4" + }, +/area/ship/maintenance/port) +"AO" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/maintenance/port) +"AR" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/closed/wall/r_wall/rust, +/area/ship/cargo) +"Bi" = ( +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 4 + }, +/obj/structure/girder/reinforced, +/obj/structure/window/plasma/reinforced/plastitanium, +/turf/open/floor/plating, +/area/ship/crew/office) +"Bl" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/button/door{ + id = "loby"; + pixel_y = 23; + pixel_x = 7 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/salvageable/computer, +/obj/effect/decal/cleanable/glass, +/obj/machinery/light/small/broken/directional/north, +/turf/open/floor/pod/dark, +/area/ship/crew/office) +"By" = ( +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/effect/decal/cleanable/vomit, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"BH" = ( +/obj/machinery/atmospherics/pipe/layer_manifold, +/turf/closed/wall/r_wall/rust, +/area/ship/maintenance/fore) +"BL" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/rust, +/area/ship/maintenance/port) +"BZ" = ( +/turf/template_noop, +/area/template_noop) +"Cg" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/insectguts, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"Cj" = ( +/obj/machinery/computer/cryopod/retro/directional/north, +/obj/effect/decal/cleanable/food/egg_smudge, +/turf/open/floor/plastic, +/area/ship/crew/canteen/kitchen) +"Cw" = ( +/turf/open/floor/plating/airless, +/area/ship/maintenance/external) +"Cy" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/suit_storage_unit/inherit, +/obj/item/clothing/suit/syndicatefake, +/obj/item/clothing/head/syndicatefake, +/obj/machinery/light_switch{ + pixel_x = 10; + pixel_y = 23 + }, +/obj/effect/decal/cleanable/cobweb, +/obj/machinery/light/dim/directional/west, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"Db" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating, +/area/ship/maintenance/port) +"Df" = ( +/turf/closed/wall/mineral/titanium/survival, +/area/ship/maintenance/starboard) +"Dj" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 20; + pixel_y = -7 + }, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/ship/maintenance/port) +"DE" = ( +/obj/structure/sign/warning/testchamber, +/turf/closed/wall/mineral/titanium/survival, +/area/ship/cargo) +"DM" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "8-9" + }, +/turf/open/floor/plating, +/area/ship/maintenance/port) +"DR" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "2-6" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/turf/open/floor/wood/walnut{ + icon_state = "wood-broken7" + }, +/area/ship/maintenance/central) +"Eb" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating{ + icon_state = "platingdmg2" + }, +/area/ship/maintenance/starboard) +"El" = ( +/obj/machinery/vending/sustenance, +/obj/effect/decal/cleanable/glass, +/obj/machinery/light/small/broken/directional/south, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"EG" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/ship/maintenance/starboard) +"EH" = ( +/obj/effect/decal/cleanable/dirt, +/turf/closed/wall/r_wall, +/area/ship/storage) +"EM" = ( +/obj/structure/table, +/obj/item/trash/waffles, +/obj/item/storage/toolbox/electrical, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"ER" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/gibspawner/human, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 3 + }, +/obj/effect/turf_decal/industrial/warning/dust, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"ET" = ( +/turf/closed/wall/mineral/titanium/survival/nodiagonal, +/area/ship/maintenance/aft) +"EZ" = ( +/obj/machinery/suit_storage_unit/independent/engineering, +/obj/effect/decal/cleanable/oil/streak, +/obj/item/trash/candy{ + pixel_y = -11; + pixel_x = -13 + }, +/turf/open/floor/pod/dark, +/area/ship/storage/eva) +"Fi" = ( +/turf/closed/wall/r_wall/rust, +/area/ship/bridge) +"Ft" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/closet/crate, +/obj/effect/decal/cleanable/wrapping, +/obj/structure/disposalpipe/trunk, +/obj/item/reagent_containers/glass/bottle/welding_fuel, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/spawner/lootdrop/maintenance/two, +/turf/open/floor/plating, +/area/ship/storage/eva) +"Fz" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/light/dim/directional/south, +/turf/open/floor/plating, +/area/ship/maintenance/port) +"Go" = ( +/obj/machinery/atmospherics/pipe/simple/purple/hidden, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/plastic, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/turf/open/floor/pod/dark, +/area/ship/crew/office) +"Gq" = ( +/obj/structure/closet/secure_closet/freezer/kitchen/maintenance{ + req_access = list(11) + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = -7 + }, +/turf/open/floor/plastic, +/area/ship/crew/canteen/kitchen) +"GG" = ( +/obj/effect/turf_decal/industrial/warning/dust, +/turf/open/floor/plating{ + icon_state = "platingdmg2" + }, +/area/ship/cargo) +"GI" = ( +/obj/structure/cable{ + icon_state = "5-10" + }, +/obj/item/kitchen/knife{ + pixel_y = 1; + pixel_x = 8 + }, +/obj/structure/cable{ + icon_state = "5-8" + }, +/obj/item/bot_assembly/cleanbot, +/turf/open/floor/pod/dark, +/area/ship/maintenance/starboard) +"GU" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/turf/closed/wall/mineral/titanium/survival/nodiagonal, +/area/ship/storage/eva) +"Hj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/lootdrop/maintenance/two, +/obj/item/decal_painter, +/obj/item/storage/box/mousetraps, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/structure/closet/toolcloset{ + secure = 1; + req_access = list(11) + }, +/turf/open/floor/plating, +/area/ship/storage) +"Hu" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light_switch{ + pixel_x = -7; + pixel_y = 22 + }, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"HB" = ( +/turf/closed/wall/mineral/titanium/survival/nodiagonal, +/area/ship/crew/office) +"HJ" = ( +/turf/closed/wall/r_wall/rust, +/area/ship/cargo) +"Ii" = ( +/obj/machinery/mass_driver{ + dir = 8; + id = "junk_driver" + }, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/plating, +/area/ship/maintenance/central) +"Im" = ( +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/machinery/firealarm/directional/south, +/obj/effect/decal/cleanable/vomit, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"Iu" = ( +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/seeds/tobacco{ + pixel_y = -11; + pixel_x = 11 + }, +/obj/item/trash/pistachios{ + pixel_y = -6; + pixel_x = 5 + }, +/obj/item/trash/chips{ + pixel_y = 2; + pixel_x = 12 + }, +/turf/open/floor/pod/light, +/area/ship/maintenance/aft) +"Ix" = ( +/obj/machinery/atmospherics/components/unary/heat_exchanger{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/light/small/directional/north, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/conf_haz, +/area/ship/maintenance/fore) +"IE" = ( +/turf/closed/wall/rust, +/area/ship/construction) +"IR" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/grille, +/turf/open/floor/plating, +/area/ship/maintenance/starboard) +"IX" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/airalarm/directional/south, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"Je" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/purple/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/greenglow/filled, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/turf/open/floor/pod/dark, +/area/ship/crew/office) +"Jh" = ( +/obj/structure/girder/reinforced, +/obj/structure/barricade/wooden/crude, +/obj/structure/sign/warning/fire{ + pixel_x = -22 + }, +/obj/structure/sign/warning/explosives{ + pixel_y = -32 + }, +/turf/open/floor/wood/walnut, +/area/ship/engineering/electrical) +"Jn" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/components/binary/pump/layer2{ + dir = 8 + }, +/obj/machinery/button/door{ + dir = 8; + id = "tankr"; + normaldoorcontrol = 1; + pixel_x = 23; + pixel_y = -26; + specialfunctions = 4 + }, +/turf/open/floor/engine/hull, +/area/ship/maintenance/external) +"Jo" = ( +/obj/structure/disposalpipe/broken{ + dir = 8 + }, +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/generic, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/item/assembly/mousetrap/armed, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/turf/open/floor/plating, +/area/ship/maintenance/central) +"JG" = ( +/obj/effect/decal/cleanable/blood/footprints, +/obj/structure/cable{ + icon_state = "1-10" + }, +/obj/machinery/light/dim/directional/east, +/turf/open/floor/plating, +/area/ship/maintenance/starboard) +"JP" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/footprints, +/obj/effect/mob_spawn/human/corpse/charredskeleton, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/plating/rust, +/area/ship/engineering/electrical) +"JQ" = ( +/turf/closed/wall/mineral/titanium/survival, +/area/ship/maintenance/aft) +"JS" = ( +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table, +/obj/item/clipboard{ + pixel_y = 6; + pixel_x = 9 + }, +/obj/item/toy/crayon/black{ + pixel_x = 9; + pixel_y = 7 + }, +/obj/item/storage/fancy/candle_box{ + pixel_y = -1; + pixel_x = -5 + }, +/obj/item/paper_bin/construction{ + pixel_x = -6 + }, +/turf/open/floor/pod/dark, +/area/ship/crew/office) +"JZ" = ( +/obj/structure/rack, +/obj/machinery/light/small/broken/directional/west, +/obj/effect/spawner/lootdrop/maintenance/three, +/obj/item/toner, +/obj/item/clothing/neck/stethoscope, +/turf/open/floor/plating, +/area/ship/maintenance/starboard) +"Lb" = ( +/obj/structure/cable/yellow, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/greenglow/filled, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/ship/engineering/electrical) +"LG" = ( +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/item/wrench, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/power/port_gen/pacman/super/not_very, +/turf/open/floor/plating, +/area/ship/engineering/electrical) +"Ma" = ( +/obj/structure/tank_dispenser, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating, +/area/ship/maintenance/port) +"Me" = ( +/turf/closed/wall/r_wall/rust, +/area/ship/construction) +"Mh" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/engine/hull, +/area/ship/maintenance/external) +"Mr" = ( +/obj/structure/closet/crate/trashcart, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/machinery/light/small/directional/north, +/obj/effect/spawner/lootdrop/maintenance/two, +/turf/open/floor/wood/walnut{ + icon_state = "wood-broken3" + }, +/area/ship/maintenance/central) +"Mt" = ( +/obj/structure/girder/reinforced, +/obj/structure/barricade/wooden/crude, +/turf/open/floor/plating, +/area/ship/crew/canteen/kitchen) +"Mu" = ( +/obj/machinery/atmospherics/components/unary/relief_valve/atmos/atmos_waste{ + dir = 8 + }, +/turf/open/floor/engine/hull, +/area/template_noop) +"MW" = ( +/obj/docking_port/stationary{ + dwidth = 15; + width = 30; + height = 15; + dir = 2 + }, +/turf/template_noop, +/area/template_noop) +"Ng" = ( +/obj/structure/table, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/storage/bag/tray/cafeteria{ + pixel_y = 7; + pixel_x = 3 + }, +/obj/item/reagent_containers/food/snacks/donkpocket/warm{ + pixel_y = 14 + }, +/obj/item/reagent_containers/food/snacks/donkpocket/warm/pizza{ + pixel_y = 11; + pixel_x = 5 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"No" = ( +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/pod/dark, +/area/ship/maintenance/starboard) +"Og" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/stack/cable_coil/cut/red{ + pixel_x = -15; + pixel_y = -8 + }, +/obj/item/paper/crumpled{ + pixel_y = 4; + pixel_x = -23; + info = "Attempt 301. Longitudinal traction was applied to the upper protruding flesh appendage. Muffled screaming (possibly Jeff?) was observed. Spontaneous amputation occurred and the screaming ceased. Duct tape applied.

Results: Reployer remains unfunctioning." + }, +/obj/item/paper/crumpled{ + pixel_y = -12; + pixel_x = -3; + info = "Attempt 1180. Salt circle was established with regular rituals. 30mL of blood was dripped directly onto the reployer, and chanting begun 1 minute after the beginning of the attempt. Despite using only lighting from tallow candles, soapbucket scrying was ineffective in troubleshooting the problem.

Results: Reployer remains unfunctioning." + }, +/obj/effect/decal/cleanable/greenglow/filled, +/obj/item/screwdriver/old{ + pixel_y = -2; + pixel_x = -15 + }, +/obj/effect/decal/cleanable/blood, +/obj/machinery/light/small/directional/east, +/obj/item/trash/candle{ + pixel_y = 17; + pixel_x = -10 + }, +/obj/item/trash/candle{ + pixel_y = 17; + pixel_x = 10 + }, +/obj/structure/salvageable/protolathe/reployer, +/turf/open/floor/pod/dark, +/area/ship/crew/office) +"Ol" = ( +/turf/closed/wall/mineral/titanium/survival/nodiagonal, +/area/ship/crew/canteen) +"On" = ( +/obj/machinery/door/airlock/engineering{ + dir = 4; + req_access_txt = "10" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/structure/cable{ + icon_state = "4-9" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ship/storage) +"OA" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/food/flour, +/turf/open/floor/plastic, +/area/ship/crew/canteen/kitchen) +"OW" = ( +/obj/machinery/door/poddoor/shutters{ + id = "Tcargotide1" + }, +/turf/open/floor/plating, +/area/ship/engineering/electrical) +"OZ" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/closed/wall/r_wall/rust, +/area/ship/maintenance/central) +"Pi" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/ship/maintenance/port) +"PE" = ( +/obj/machinery/power/shuttle/engine/fueled/plasma{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ship/external) +"PR" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/holopad/emergency/buddy, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/ship/bridge) +"Qt" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/turf/open/floor/plastic, +/area/ship/crew/canteen/kitchen) +"QE" = ( +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 1 + }, +/mob/living/simple_animal/hostile/cockroach/glockroach, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/pod/light, +/area/ship/maintenance/aft) +"QM" = ( +/turf/closed/wall/r_wall, +/area/ship/bridge) +"QN" = ( +/obj/machinery/atmospherics/pipe/layer_manifold{ + dir = 4 + }, +/turf/closed/wall/mineral/titanium/survival/nodiagonal, +/area/ship/storage/eva) +"QU" = ( +/obj/structure/girder/reinforced, +/obj/structure/window/fulltile, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/turf/open/floor/plating, +/area/ship/maintenance/fore) +"QW" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "8-9" + }, +/obj/item/gun/ballistic/automatic/pistol/disposable, +/obj/item/reagent_containers/food/drinks/bottle/hooch, +/obj/machinery/light/dim/directional/south, +/obj/structure/closet/wall/blue{ + dir = 8; + pixel_x = 32; + welded = 1 + }, +/turf/open/floor/plating, +/area/ship/bridge) +"Rg" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/effect/decal/cleanable/glass, +/obj/structure/safe/floor, +/obj/item/circuitboard/computer/cargo/express, +/turf/open/floor/pod/dark, +/area/ship/crew/office) +"Rj" = ( +/turf/closed/wall/r_wall, +/area/ship/maintenance/port) +"Ro" = ( +/obj/machinery/pipedispenser/disposal, +/obj/item/reagent_containers/food/drinks/mug/tea{ + pixel_y = 8; + pixel_x = -7 + }, +/obj/item/trash/can{ + pixel_y = 8; + pixel_x = 12 + }, +/obj/effect/decal/cleanable/glass, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 20; + pixel_y = 7 + }, +/obj/structure/cable{ + icon_state = "1-9" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ship/maintenance/central) +"RQ" = ( +/turf/closed/wall/mineral/titanium/survival/nodiagonal, +/area/ship/maintenance/central) +"RU" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/airalarm/directional/east, +/obj/machinery/atmospherics/pipe/manifold/purple/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/pod/light, +/area/ship/maintenance/aft) +"RX" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/turf/closed/wall/r_wall/rust, +/area/ship/maintenance/fore) +"Sr" = ( +/turf/closed/wall/r_wall, +/area/ship/maintenance/fore) +"Td" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"Ty" = ( +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/closed/wall/mineral/titanium/survival/nodiagonal, +/area/ship/crew/office) +"Uo" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 6 + }, +/obj/effect/decal/cleanable/oil/streak, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/turf/open/floor/pod/dark, +/area/ship/crew/office) +"Ux" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-5" + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/machinery/airalarm/directional/west, +/obj/structure/chair/office{ + dir = 1 + }, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating, +/area/ship/bridge) +"UO" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "6-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/abandoned, +/turf/open/floor/plating, +/area/ship/maintenance/central) +"US" = ( +/obj/structure/cable{ + icon_state = "2-9" + }, +/obj/effect/decal/cleanable/oil, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plating, +/area/ship/maintenance/port) +"Va" = ( +/turf/closed/wall/mineral/wood, +/area/ship/engineering/electrical) +"VM" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/footprints, +/turf/open/floor/plating/rust, +/area/ship/maintenance/starboard) +"VY" = ( +/obj/machinery/atmospherics/pipe/simple/purple/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/pod/dark, +/area/ship/storage/eva) +"Wg" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/girder/reinforced, +/obj/structure/window/plasma/reinforced/plastitanium, +/turf/open/floor/plating, +/area/ship/maintenance/starboard) +"Wh" = ( +/obj/machinery/door/poddoor/shutters, +/turf/open/floor/plating, +/area/ship/engineering/electrical) +"Wj" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 6 + }, +/obj/effect/decal/cleanable/sprayweb, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/spawner/lootdrop/maintenance/two, +/turf/open/floor/pod/light, +/area/ship/maintenance/aft) +"Wv" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/mob/living/simple_animal/hostile/cockroach, +/turf/open/floor/plating/rust, +/area/ship/construction) +"Ww" = ( +/obj/structure/cable{ + icon_state = "4-6" + }, +/obj/structure/cable{ + icon_state = "6-9" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/turf/open/floor/plating, +/area/ship/maintenance/port) +"WC" = ( +/obj/machinery/atmospherics/pipe/manifold/purple/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table, +/obj/item/analyzer{ + pixel_y = 9 + }, +/obj/item/trash/chips{ + pixel_y = 16; + pixel_x = -4 + }, +/obj/item/reagent_containers/food/snacks/cheesiehonkers{ + pixel_y = 5; + pixel_x = 6 + }, +/obj/item/assembly/signaler{ + pixel_y = -7; + pixel_x = -10 + }, +/obj/item/stack/cable_coil/cut{ + pixel_x = -2; + pixel_y = -3 + }, +/turf/open/floor/pod/dark, +/area/ship/crew/office) +"Xe" = ( +/turf/closed/wall/r_wall/rust, +/area/ship/engineering/electrical) +"Xi" = ( +/obj/machinery/door/airlock/engineering{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/pod/dark, +/area/ship/maintenance/starboard) +"Xl" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/closed/wall/mineral/wood, +/area/ship/maintenance/central) +"XF" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/oil/slippery, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/effect/landmark/observer_start, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"XM" = ( +/turf/closed/wall/r_wall/rust, +/area/ship/maintenance/central) +"XS" = ( +/turf/closed/wall/mineral/titanium/survival/nodiagonal, +/area/ship/storage/eva) +"XT" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/closed/wall/mineral/titanium/survival/nodiagonal, +/area/ship/storage/eva) +"XV" = ( +/obj/structure/cable{ + icon_state = "5-10" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/button/door{ + pixel_y = 25 + }, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/ship/maintenance/starboard) +"Yb" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/insectguts, +/obj/machinery/light/small/broken/directional/south, +/turf/open/floor/plating, +/area/ship/construction) +"Ye" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/machinery/light/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/button/door{ + id = "lockin"; + pixel_y = 21; + pixel_x = -7; + specialfunctions = 4; + normaldoorcontrol = 1 + }, +/obj/machinery/button/door{ + id = "lockout"; + pixel_y = 21; + pixel_x = 7 + }, +/obj/machinery/disposal/deliveryChute, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/light/broken/directional/east, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/ship/cargo) +"Yr" = ( +/obj/machinery/door/poddoor{ + id = "lockout"; + name = "Cargo Bay Blast Door" + }, +/turf/open/floor/engine/hull/interior, +/area/ship/cargo) +"Yz" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/closed/wall/mineral/wood, +/area/ship/maintenance/central) +"YB" = ( +/obj/structure/window/reinforced/fulltile, +/obj/docking_port/mobile{ + launch_status = 0; + port_direction = 2 + }, +/obj/structure/girder/reinforced, +/turf/open/floor/plating, +/area/ship/bridge) +"YC" = ( +/obj/machinery/button/door{ + id = "coms"; + pixel_y = 23; + pixel_x = 7 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/ship/construction) +"YK" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/salvageable/autolathe, +/turf/open/floor/pod/dark, +/area/ship/crew/office) +"YO" = ( +/obj/machinery/atmospherics/pipe/manifold/purple/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/photocopier, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/pod/dark, +/area/ship/crew/office) +"YS" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/old, +/turf/closed/wall/rust, +/area/ship/construction) +"YU" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/ship/maintenance/starboard) +"Zl" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/machinery/door/firedoor, +/turf/open/floor/plating, +/area/ship/maintenance/port) +"ZK" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/ship/maintenance/starboard) +"ZN" = ( +/turf/closed/wall/mineral/titanium/survival/nodiagonal, +/area/ship/storage) +"ZS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ship/storage) +"ZW" = ( +/obj/machinery/atmospherics/components/unary/tank/toxins{ + dir = 4 + }, +/obj/machinery/door/poddoor{ + dir = 4; + id = "tankl" + }, +/turf/open/floor/plating/airless, +/area/ship/maintenance/external) + +(1,1,1) = {" +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +"} +(2,1,1) = {" +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +"} +(3,1,1) = {" +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +"} +(4,1,1) = {" +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +"} +(5,1,1) = {" +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +mK +pC +pC +pC +mK +BZ +BZ +BZ +BZ +BZ +"} +(6,1,1) = {" +BZ +BZ +BZ +BZ +Rj +nY +vY +Me +Me +BZ +BZ +BZ +BZ +BZ +BZ +BZ +pC +ZW +mo +ZW +pC +BZ +BZ +BZ +BZ +BZ +"} +(7,1,1) = {" +eI +nE +Sr +eI +Rj +Db +gN +zY +Me +Me +XM +Ii +Xl +BZ +BZ +BZ +BZ +wi +Mh +uU +BZ +BZ +BZ +BZ +BZ +BZ +"} +(8,1,1) = {" +RX +Ix +qc +eS +Ma +ua +YS +yz +Wv +qm +XM +XM +Yz +hb +RQ +HB +HB +Bi +Ty +Bi +HB +JQ +BZ +BZ +BZ +BZ +"} +(9,1,1) = {" +QU +rD +sd +vk +cN +ir +IE +kj +hV +tr +XM +hG +DR +bG +RQ +vu +sv +pG +YO +WC +JS +ET +JQ +JQ +JQ +BZ +"} +(10,1,1) = {" +Sr +lQ +eG +BH +to +DM +IE +IE +YC +Yb +XM +Mr +Jo +Ro +RQ +Bl +Rg +Uo +nn +Go +Je +sB +wt +Iu +xr +PE +"} +(11,1,1) = {" +Sr +nE +eI +eI +Pi +Ww +lf +IE +qt +qt +OZ +it +UO +RQ +RQ +bF +bF +bt +HB +YK +Og +JQ +xx +sh +PE +BZ +"} +(12,1,1) = {" +BZ +BZ +BZ +Rj +AO +vr +US +Zl +Dj +sY +jO +AJ +br +an +nb +Cg +fg +IX +Ol +dm +dm +dm +dm +DE +BZ +BZ +"} +(13,1,1) = {" +BZ +BZ +BZ +Rj +bc +iV +iV +iV +iV +rB +bf +aE +er +On +Ol +xP +EM +sk +El +dm +Cy +ER +Yr +BZ +BZ +BZ +"} +(14,1,1) = {" +BZ +BZ +BZ +nY +BL +iV +fm +lC +Gq +vj +bf +rV +ZN +ai +Ol +ip +jE +wG +Td +iY +XF +GG +Yr +BZ +BZ +MW +"} +(15,1,1) = {" +BZ +BZ +BZ +Rj +Fz +iV +Cj +OA +Qt +gM +bf +fb +wk +ZS +Ol +Hu +Ng +By +mN +qR +Ye +gh +Yr +BZ +BZ +BZ +"} +(16,1,1) = {" +BZ +BZ +BZ +Rj +Ae +iV +te +aN +vZ +kv +bf +bP +al +Hj +Ol +tw +hz +Im +Ol +HJ +AR +HJ +HJ +jj +BZ +BZ +"} +(17,1,1) = {" +QM +QM +Fi +Fi +lA +iV +Mt +iV +iV +iV +rV +rV +EH +oQ +Xe +vd +Xi +XS +XS +Ft +eH +JQ +Wj +sh +PE +BZ +"} +(18,1,1) = {" +fW +ts +Ux +QM +YU +OW +LG +jz +yp +we +hy +Jh +mF +oj +Wh +eF +No +xt +VY +go +md +sK +RU +QE +xr +PE +"} +(19,1,1) = {" +YB +aX +PR +yD +EG +OW +gR +Lb +yp +yp +Va +yt +Xe +ay +Wh +Eb +GI +XT +zz +tB +EZ +ET +JQ +JQ +JQ +BZ +"} +(20,1,1) = {" +fW +aq +QW +Fi +sF +yp +eP +ls +yp +JZ +dx +zB +Xe +mF +mF +XV +vd +QN +XS +GU +XS +JQ +BZ +BZ +BZ +BZ +"} +(21,1,1) = {" +Fi +Fi +Fi +Fi +vO +rO +JG +VM +JP +is +cQ +ep +hm +IR +hq +ZK +vd +Mu +BZ +Jn +BZ +BZ +BZ +BZ +BZ +BZ +"} +(22,1,1) = {" +BZ +BZ +BZ +xJ +xJ +xJ +pc +pc +nU +uW +uW +vd +Wg +vd +vd +vd +Df +BZ +hP +mZ +pC +BZ +BZ +BZ +BZ +BZ +"} +(23,1,1) = {" +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +Cw +pC +pC +mK +BZ +BZ +BZ +BZ +BZ +"} +(24,1,1) = {" +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +"} +(25,1,1) = {" +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +"} +(26,1,1) = {" +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +"} +(27,1,1) = {" +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +BZ +"} diff --git a/_maps/shuttles/shiptest/independent_kilo.dmm b/_maps/shuttles/shiptest/independent_kilo.dmm index 8c99232b6954..ead3f5a0ef26 100644 --- a/_maps/shuttles/shiptest/independent_kilo.dmm +++ b/_maps/shuttles/shiptest/independent_kilo.dmm @@ -1963,10 +1963,7 @@ /turf/open/floor/plating, /area/ship/cargo) "PW" = ( -/obj/machinery/porta_turret/centcom_shuttle/weak{ - dir = 4; - name = "Old Mining Turret" - }, +/obj/machinery/porta_turret/ship/weak, /turf/closed/wall/mineral/titanium, /area/ship/bridge) "Qw" = ( @@ -2213,10 +2210,7 @@ /turf/open/floor/mineral/plastitanium, /area/ship/bridge) "Vq" = ( -/obj/machinery/porta_turret/centcom_shuttle/weak{ - dir = 4; - name = "Old Mining Turret" - }, +/obj/machinery/porta_turret/ship/weak, /turf/closed/wall/mineral/titanium, /area/ship/crew/canteen/kitchen) "Vx" = ( diff --git a/_maps/shuttles/shiptest/independent_litieguai.dmm b/_maps/shuttles/shiptest/independent_litieguai.dmm index d290a28d565d..478ec4c12cc3 100644 --- a/_maps/shuttles/shiptest/independent_litieguai.dmm +++ b/_maps/shuttles/shiptest/independent_litieguai.dmm @@ -222,26 +222,6 @@ }, /turf/open/floor/plating, /area/ship/maintenance/port) -"fn" = ( -/obj/machinery/firealarm/directional/west, -/obj/machinery/airalarm/directional/south, -/obj/structure/closet/crate/freezer/surplus_limbs{ - name = "organ freezer" - }, -/obj/item/organ/stomach, -/obj/item/organ/stomach, -/obj/item/organ/lungs, -/obj/item/organ/liver, -/obj/item/organ/liver, -/obj/item/organ/eyes, -/obj/item/organ/eyes, -/obj/item/organ/heart, -/obj/item/organ/heart, -/obj/item/organ/ears, -/obj/item/organ/ears, -/obj/effect/turf_decal/industrial/hatch/red, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/medical) "fp" = ( /turf/closed/wall/mineral/titanium, /area/ship/maintenance/port) @@ -340,24 +320,6 @@ /obj/effect/turf_decal/corner/opaque/white/mono, /turf/open/floor/plasteel/white, /area/ship/medical) -"ir" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/obj/machinery/firealarm/directional/west, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/industrial/warning, -/obj/machinery/button/door{ - dir = 4; - id = "traumaenginer"; - name = "Engine Shutter Control"; - pixel_x = -25; - pixel_y = -6 - }, -/turf/open/floor/plating, -/area/ship/maintenance/starboard) "iA" = ( /turf/closed/wall/mineral/titanium, /area/ship/crew) @@ -930,12 +892,12 @@ /obj/item/storage/backpack/satchel/med, /obj/item/storage/backpack/satchel/med, /obj/item/storage/backpack/satchel/med, -/obj/item/clothing/under/rank/medical/doctor/junior_doctor/skirt, -/obj/item/clothing/under/rank/medical/doctor/junior_doctor/skirt, -/obj/item/clothing/under/rank/medical/doctor/junior_doctor/skirt, -/obj/item/clothing/under/rank/medical/doctor/junior_doctor, -/obj/item/clothing/under/rank/medical/doctor/junior_doctor, -/obj/item/clothing/under/rank/medical/doctor/junior_doctor, +/obj/item/clothing/under/rank/medical, +/obj/item/clothing/under/rank/medical, +/obj/item/clothing/under/rank/medical, +/obj/item/clothing/under/rank/medical, +/obj/item/clothing/under/rank/medical, +/obj/item/clothing/under/rank/medical, /obj/item/clothing/shoes/sneakers/blue, /obj/item/clothing/shoes/sneakers/blue, /obj/item/clothing/shoes/sneakers/blue, @@ -1402,24 +1364,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/plasteel/white, /area/ship/medical) -"Gm" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 - }, -/obj/machinery/firealarm/directional/east, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/industrial/warning, -/obj/machinery/button/door{ - dir = 8; - id = "traumaenginel"; - name = "Engine Shutter Control"; - pixel_x = 25; - pixel_y = -6 - }, -/turf/open/floor/plating, -/area/ship/maintenance/port) "Go" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -1704,6 +1648,26 @@ }, /turf/template_noop, /area/template_noop) +"Mx" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/obj/machinery/firealarm/directional/west{ + pixel_y = 6 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/industrial/warning, +/obj/machinery/button/door{ + dir = 4; + id = "traumaenginer"; + name = "Engine Shutter Control"; + pixel_x = -22; + pixel_y = -8 + }, +/turf/open/floor/plating, +/area/ship/maintenance/starboard) "MK" = ( /obj/effect/turf_decal/industrial/outline/red, /obj/structure/rack, @@ -1757,7 +1721,6 @@ /area/ship/bridge) "Nq" = ( /obj/item/clothing/gloves/color/latex/nitrile, -/obj/item/clothing/under/suit/cmo, /obj/item/clothing/suit/toggle/labcoat/cmo, /obj/item/clothing/shoes/sneakers/white, /obj/item/storage/belt/medical, @@ -1808,6 +1771,13 @@ }, /turf/open/floor/plating, /area/ship/maintenance/starboard) +"OA" = ( +/obj/machinery/firealarm/directional/west, +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/industrial/hatch/red, +/obj/structure/closet/crate/freezer/surplus_limbs/organs, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/medical) "OB" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -2457,6 +2427,26 @@ /obj/item/bedsheet/blue, /turf/open/floor/carpet/cyan, /area/ship/crew) +"XX" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/machinery/firealarm/directional/east{ + pixel_y = 6 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/industrial/warning, +/obj/machinery/button/door{ + dir = 8; + id = "traumaenginel"; + name = "Engine Shutter Control"; + pixel_x = 22; + pixel_y = -7 + }, +/turf/open/floor/plating, +/area/ship/maintenance/port) "Yb" = ( /obj/structure/cable{ icon_state = "4-8" @@ -2650,7 +2640,7 @@ Lh vT IE CX -Gm +XX KD dR Jn @@ -2763,7 +2753,7 @@ Vu Po DU lj -fn +OA YM YM JA @@ -3070,7 +3060,7 @@ Ps yi nl Xb -ir +Mx Hq VM Dj diff --git a/_maps/shuttles/shiptest/independent_meta.dmm b/_maps/shuttles/shiptest/independent_meta.dmm index eddc82500cfe..b8d92e02f05b 100644 --- a/_maps/shuttles/shiptest/independent_meta.dmm +++ b/_maps/shuttles/shiptest/independent_meta.dmm @@ -162,40 +162,6 @@ /obj/machinery/light/small/built/directional/west, /turf/open/floor/plating, /area/ship/crew) -"au" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/closet/secure_closet/personal, -/obj/effect/decal/cleanable/dirt/dust, -/obj/item/gun/energy/e_gun/mini, -/obj/item/stock_parts/cell/gun/mini, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 4 - }, -/obj/machinery/airalarm/directional/north, -/obj/machinery/light/small/built/directional/west, -/turf/open/floor/plasteel/dark, -/area/ship/crew) -"av" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/bed, -/obj/item/bedsheet/brown, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/plasteel/dark, -/area/ship/crew) -"aw" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/bed, -/obj/item/bedsheet/brown, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 6 - }, -/obj/machinery/light/small/built/directional/west, -/turf/open/floor/plasteel/dark, -/area/ship/crew) "ax" = ( /obj/machinery/power/shuttle/engine/electric{ dir = 4 @@ -267,14 +233,6 @@ /obj/effect/turf_decal/industrial/outline/yellow, /turf/open/floor/plating, /area/ship/engineering) -"aD" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) "aE" = ( /obj/structure/closet/crate{ name = "food crate" @@ -309,17 +267,6 @@ /obj/effect/turf_decal/box/corners, /turf/open/floor/plasteel/dark, /area/ship/cargo) -"aG" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/closet/firecloset/full{ - anchored = 1 - }, -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) "aH" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/suit_storage_unit/standard_unit, @@ -342,32 +289,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plating, /area/ship/crew) -"aJ" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/door/airlock{ - name = "Cabin 1" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/dark, -/area/ship/crew) -"aK" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/door/airlock{ - name = "Cabin 2" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/dark, -/area/ship/crew) "aL" = ( /obj/machinery/power/shuttle/engine/fueled/plasma{ dir = 4 @@ -470,192 +391,6 @@ }, /turf/open/floor/plating, /area/ship/cargo) -"aR" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) -"aT" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) -"aU" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) -"aW" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/crew) -"aX" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/machinery/airalarm/directional/north, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/crew) -"aY" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/crew) -"aZ" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/door/airlock/glass{ - name = "Crew Quarters"; - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/crew) -"ba" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/firealarm/directional/north, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/machinery/light/small/built/directional/south, -/obj/effect/turf_decal/corner/transparent/neutral{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/ship/crew) -"bb" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, -/obj/effect/turf_decal/corner/transparent/neutral{ - dir = 5 - }, -/turf/open/floor/plasteel, -/area/ship/crew) -"bc" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/airalarm/directional/north, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/corner/transparent/neutral{ - dir = 5 - }, -/turf/open/floor/plasteel, -/area/ship/crew) -"bd" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/effect/turf_decal/corner/transparent/neutral{ - dir = 5 - }, -/turf/open/floor/plasteel, -/area/ship/crew) -"be" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 10 - }, -/obj/machinery/light/small/built/directional/north, -/obj/effect/turf_decal/corner/transparent/neutral{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/ship/crew) "bf" = ( /obj/docking_port/stationary{ dwidth = 15; @@ -711,17 +446,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plating, /area/ship/engineering) -"bk" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/rack, -/obj/item/storage/belt/utility, -/obj/item/weldingtool, -/obj/item/clothing/head/welding, -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) "bm" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/box/corners{ @@ -729,15 +453,6 @@ }, /turf/open/floor/plasteel/dark, /area/ship/cargo) -"bn" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) "bo" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/box/corners{ @@ -745,19 +460,6 @@ }, /turf/open/floor/plasteel/dark, /area/ship/cargo) -"bp" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/rack, -/obj/item/storage/box/lights/bulbs, -/obj/item/stack/cable_coil/red{ - pixel_x = 2 - }, -/obj/item/stock_parts/cell/high/plus, -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) "bq" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/rack, @@ -775,16 +477,6 @@ /obj/machinery/light/small/built/directional/west, /turf/open/floor/plasteel/dark, /area/ship/crew) -"br" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/crew) "bs" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/closet/emcloset/anchored, @@ -850,15 +542,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/dark, /area/ship/cargo) -"bB" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/arrows, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) "bC" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/built/directional/east, @@ -867,23 +550,6 @@ "bD" = ( /turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/crew/canteen) -"bE" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/door/airlock/public/glass{ - name = "Bar" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/crew/canteen) "bF" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/curtain, @@ -924,17 +590,6 @@ /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plasteel/dark, /area/ship/engineering) -"bI" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/engineering) "bJ" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/rack, @@ -947,13 +602,6 @@ /obj/machinery/light/small/built/directional/east, /turf/open/floor/plasteel/dark, /area/ship/engineering) -"bL" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/arrows, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) "bM" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/table, @@ -1028,36 +676,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel, /area/ship/crew/canteen) -"bP" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/vending/cigarette, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/sign/poster/contraband/random{ - pixel_x = 32 - }, -/obj/machinery/light/small/built/directional/east, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/crew/canteen) "bQ" = ( /turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/bridge) -"bS" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 - }, -/obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/engineering) "bT" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, @@ -1082,23 +703,6 @@ }, /turf/open/floor/plating, /area/ship/cargo) -"bV" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/closet/secure_closet/personal, -/obj/effect/decal/cleanable/dirt/dust, -/obj/item/gun/energy/e_gun/mini, -/obj/item/stock_parts/cell/gun/mini, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 - }, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/plasteel/dark, -/area/ship/crew) -"bW" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) "bX" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/closet/crate, @@ -1149,18 +753,6 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/plasteel, /area/ship/crew/canteen) -"cd" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/vending/coffee, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/sign/poster/contraband/random{ - pixel_x = 32 - }, -/obj/machinery/computer/helm/viewscreen/directional/north, -/obj/machinery/light/small/built/directional/east, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/crew/canteen) "ce" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt/dust, @@ -1270,22 +862,6 @@ }, /turf/open/floor/plating, /area/ship/engineering) -"ck" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/engineering) "cl" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, @@ -1298,15 +874,6 @@ }, /turf/open/floor/plasteel/dark, /area/ship/engineering) -"cm" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/computer/cargo/express{ - dir = 8 - }, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) "cn" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/table, @@ -1388,64 +955,6 @@ /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, /turf/open/floor/plasteel, /area/ship/crew/canteen) -"cr" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/door/airlock/command{ - name = "Bridge"; - dir = 8 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/crew/canteen) -"cs" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/effect/decal/cleanable/blood/old, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"ct" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 10 - }, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"cu" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) "cv" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/corner/opaque/blue{ @@ -1459,21 +968,6 @@ }, /turf/open/floor/plasteel/dark, /area/ship/bridge) -"cw" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 6 - }, -/obj/machinery/airalarm/directional/west, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/engineering) "cx" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/table, @@ -1784,39 +1278,12 @@ /obj/item/gun/energy/laser/retro, /turf/open/floor/plasteel/dark, /area/ship/cargo) -"cR" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/arrows{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) "cS" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/built/directional/east, /turf/open/floor/plasteel/dark, /area/ship/cargo) -"cT" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/door/airlock/public/glass{ - name = "Bar" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/crew/canteen) "cU" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, @@ -1868,19 +1335,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/plating, /area/ship/engineering) -"da" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/rack, -/obj/item/reagent_containers/glass/bucket, -/obj/item/mop, -/obj/item/storage/bag/trash{ - pixel_x = 6 - }, -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) "db" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/cable{ @@ -1897,13 +1351,6 @@ /obj/effect/turf_decal/box/corners, /turf/open/floor/plasteel/dark, /area/ship/cargo) -"dd" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) "de" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/box/corners{ @@ -1911,22 +1358,7 @@ }, /turf/open/floor/plasteel/dark, /area/ship/cargo) -"df" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/rack, -/obj/item/analyzer, -/obj/item/wrench, -/obj/item/clothing/mask/breath{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/clothing/mask/breath, -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) -"dg" = ( +"dg" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/rack, /obj/item/clothing/head/welding{ @@ -1944,16 +1376,6 @@ /obj/machinery/light/small/built/directional/west, /turf/open/floor/plasteel/dark, /area/ship/crew/canteen) -"dh" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/crew/canteen) "di" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/closet/emcloset/anchored, @@ -1962,21 +1384,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /turf/open/floor/plasteel/dark, /area/ship/crew/canteen) -"dl" = ( -/obj/structure/sign/departments/botany, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/crew/canteen) -"dm" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/hydroponics/constructable, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/light/small/built/directional/west, -/obj/effect/turf_decal/corner/opaque/green{ - dir = 10 - }, -/turf/open/floor/plasteel, -/area/ship/crew/canteen) -"dn" = ( +"dk" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/hydroponics/constructable, /obj/machinery/airalarm/directional/east, @@ -1985,12 +1393,10 @@ }, /turf/open/floor/plasteel, /area/ship/crew/canteen) -"do" = ( -/obj/machinery/porta_turret/centcom_shuttle/weak{ - dir = 4 - }, -/turf/closed/wall/mineral/titanium, -/area/ship/bridge) +"dl" = ( +/obj/structure/sign/departments/botany, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/crew/canteen) "dp" = ( /obj/effect/turf_decal/industrial/warning{ dir = 8 @@ -2041,114 +1447,6 @@ }, /turf/open/floor/plating, /area/ship/cargo) -"du" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) -"dv" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) -"dw" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/door/airlock/external{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) -"dx" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/crew/canteen) -"dy" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/machinery/airalarm/directional/south, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/crew/canteen) -"dz" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/crew/canteen) -"dA" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/door/airlock/glass{ - name = "Kitchen"; - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/crew/canteen) "dD" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/door/airlock/glass{ @@ -2190,23 +1488,6 @@ }, /turf/open/floor/plasteel, /area/ship/crew/canteen) -"dG" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/sign/poster/contraband/random{ - pixel_x = 32 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/closet/crate/hydroponics, -/obj/effect/spawner/lootdrop/seeded, -/obj/effect/spawner/lootdrop/seeded, -/obj/effect/spawner/lootdrop/seeded, -/obj/item/seeds/random, -/obj/effect/turf_decal/corner/opaque/green{ - dir = 9 - }, -/turf/open/floor/plasteel, -/area/ship/crew/canteen) "dH" = ( /obj/effect/turf_decal/industrial/warning{ dir = 8 @@ -2268,14 +1549,6 @@ /obj/effect/turf_decal/industrial/outline/yellow, /turf/open/floor/plating, /area/ship/engineering) -"dL" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/reagent_dispensers/watertank, -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) "dM" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, @@ -2285,13 +1558,6 @@ /obj/effect/spawner/lootdrop/maintenance/three, /turf/open/floor/plasteel/dark, /area/ship/cargo) -"dN" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/tank_dispenser/oxygen, -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/effect/turf_decal/corner/transparent/neutral/full, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) "dO" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/suit_storage_unit/standard_unit, @@ -2300,6 +1566,17 @@ /obj/machinery/light/small/built/directional/west, /turf/open/floor/plasteel/dark, /area/ship/crew/canteen) +"dR" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/engineering) "dS" = ( /obj/machinery/smartfridge, /turf/closed/wall/mineral/titanium/nodiagonal, @@ -2322,20 +1599,6 @@ /obj/effect/turf_decal/corner/opaque/green, /turf/open/floor/plasteel, /area/ship/crew/canteen) -"dV" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/table, -/obj/item/storage/bag/plants/portaseeder, -/obj/item/shovel/spade, -/obj/item/cultivator, -/obj/item/plant_analyzer, -/obj/item/reagent_containers/glass/bucket, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/corner/opaque/green{ - dir = 9 - }, -/turf/open/floor/plasteel, -/area/ship/crew/canteen) "dW" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/power/port_gen/pacman{ @@ -2448,25 +1711,6 @@ /obj/machinery/light/small/built/directional/east, /turf/open/floor/plasteel, /area/ship/crew/canteen) -"ef" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/hydroponics/constructable, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/light/small/built/directional/west, -/obj/effect/turf_decal/corner/opaque/green{ - dir = 5 - }, -/turf/open/floor/plasteel, -/area/ship/crew/canteen) -"eg" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/hydroponics/constructable, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/corner/opaque/green{ - dir = 5 - }, -/turf/open/floor/plasteel, -/area/ship/crew/canteen) "eh" = ( /obj/machinery/door/poddoor{ id = "whiteship_starboard" @@ -2516,6 +1760,49 @@ /obj/effect/decal/cleanable/oil, /turf/open/floor/plasteel/dark, /area/ship/cargo) +"eu" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/bed, +/obj/item/bedsheet/brown, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew) +"eV" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/door/airlock/public/glass{ + name = "Bar" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"eX" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) "fa" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, @@ -2561,26 +1848,30 @@ }, /turf/open/floor/plating, /area/ship/engineering) -"hq" = ( +"gr" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/ntspaceworks_big/one{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) -"hr" = ( +/obj/structure/table, +/obj/structure/bedsheetbin, /obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/washing_machine, /obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 1 }, +/obj/machinery/power/apc/auto_name/directional/south, /obj/effect/turf_decal/corner/opaque/blue/diagonal{ dir = 4 }, /obj/effect/turf_decal/corner/opaque/white/diagonal, /turf/open/floor/plasteel, /area/ship/crew) +"hq" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/ntspaceworks_big/one{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) "hv" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/blood, @@ -2589,23 +1880,109 @@ }, /turf/open/floor/plasteel/dark, /area/ship/cargo) -"jO" = ( +"hU" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/table, -/obj/structure/bedsheetbin, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/white/diagonal, +/turf/open/floor/plasteel, +/area/ship/crew/canteen) +"iM" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"jw" = ( /obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/crew) +"jF" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/hydroponics/constructable, +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/corner/opaque/green{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/ship/crew/canteen) +"jJ" = ( +/obj/machinery/porta_turret/ship/weak, +/turf/closed/wall/mineral/titanium, +/area/ship/bridge) +"km" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 1 }, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/turf_decal/corner/opaque/blue/diagonal{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"ku" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/door/airlock{ + name = "Cabin 2" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/dark, +/area/ship/crew) +"kN" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/rack, +/obj/item/storage/box/lights/bulbs, +/obj/item/stack/cable_coil/red{ + pixel_x = 2 + }, +/obj/item/stock_parts/cell/high/plus, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"li" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"lH" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/sink{ + dir = 8; + pixel_x = 11 + }, +/obj/effect/decal/cleanable/food/flour, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 }, /obj/effect/turf_decal/corner/opaque/white/diagonal, /turf/open/floor/plasteel, -/area/ship/crew) +/area/ship/crew/canteen) "mb" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/ntspaceworks_big/three{ @@ -2613,6 +1990,26 @@ }, /turf/open/floor/plasteel/dark, /area/ship/cargo) +"mc" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/door/airlock{ + name = "Cabin 1" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/dark, +/area/ship/crew) +"mg" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) "nK" = ( /obj/machinery/door/airlock/external, /obj/effect/mapping_helpers/airlock/cyclelink_helper, @@ -2622,43 +2019,92 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/plating, /area/ship/crew) -"nT" = ( +"nR" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/machinery/light/small/built/directional/north, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/ship/crew) +"oj" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, /obj/effect/turf_decal/corner/transparent/neutral/full, /turf/open/floor/plasteel/dark, -/area/ship/cargo) -"pQ" = ( +/area/ship/crew/canteen) +"oF" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/closet/secure_closet/freezer/fridge/open, -/obj/item/reagent_containers/food/condiment/flour{ - pixel_x = -3; - pixel_y = 3 +/obj/machinery/door/airlock/command{ + name = "Bridge"; + dir = 8 }, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/snacks/meat/slab/synthmeat{ - pixel_x = -3; - pixel_y = 3 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/item/reagent_containers/food/snacks/meat/slab/synthmeat, -/obj/item/reagent_containers/food/snacks/meat/slab/synthmeat{ - pixel_x = 3; - pixel_y = -3 +/obj/machinery/door/firedoor/border_only{ + dir = 4 }, -/obj/effect/turf_decal/corner/opaque/white/diagonal, -/turf/open/floor/plasteel, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, /area/ship/crew/canteen) -"qn" = ( +"pn" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 +/obj/structure/sign/poster/contraband/random{ + pixel_x = 32 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/crate/hydroponics, +/obj/effect/spawner/lootdrop/seeded, +/obj/effect/spawner/lootdrop/seeded, +/obj/effect/spawner/lootdrop/seeded, +/obj/item/seeds/random, +/obj/effect/turf_decal/corner/opaque/green{ + dir = 9 }, -/obj/effect/turf_decal/corner/opaque/white/diagonal, /turf/open/floor/plasteel, /area/ship/crew/canteen) +"pF" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/door/airlock/glass{ + name = "Crew Quarters"; + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/crew) "qt" = ( /obj/machinery/atmospherics/components/unary/shuttle/heater{ dir = 4 @@ -2680,20 +2126,53 @@ }, /turf/template_noop, /area/template_noop) -"qX" = ( +"rF" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/engineering) +"rU" = ( /obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "2-8" + }, /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 }, +/obj/machinery/airalarm/directional/north, /obj/effect/turf_decal/corner/transparent/neutral/full, /turf/open/floor/plasteel/dark, -/area/ship/cargo) +/area/ship/crew) +"sP" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table, +/obj/item/storage/bag/plants/portaseeder, +/obj/item/shovel/spade, +/obj/item/cultivator, +/obj/item/plant_analyzer, +/obj/item/reagent_containers/glass/bucket, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/corner/opaque/green{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/ship/crew/canteen) "tN" = ( /obj/machinery/atmospherics/components/unary/shuttle/heater{ dir = 4 @@ -2707,6 +2186,21 @@ }, /turf/open/floor/plating/airless, /area/ship/engineering) +"tS" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/rack, +/obj/item/analyzer, +/obj/item/wrench, +/obj/item/clothing/mask/breath{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/clothing/mask/breath, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) "tU" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, @@ -2722,7 +2216,45 @@ /obj/machinery/mineral/ore_redemption, /turf/open/floor/plasteel/dark, /area/ship/cargo) -"uA" = ( +"uk" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/washing_machine, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/blue/diagonal{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/white/diagonal, +/turf/open/floor/plasteel, +/area/ship/crew) +"uw" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/firealarm/directional/north, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/light/small/built/directional/south, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ship/crew) +"ve" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/ntspaceworks_big/eight{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"vk" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/table, /obj/item/reagent_containers/food/condiment/saltshaker{ @@ -2740,30 +2272,47 @@ /obj/effect/turf_decal/corner/opaque/white/diagonal, /turf/open/floor/plasteel, /area/ship/crew/canteen) -"ve" = ( +"vm" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/ntspaceworks_big/eight{ - dir = 1 - }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/effect/turf_decal/corner/transparent/neutral/full, /turf/open/floor/plasteel/dark, /area/ship/cargo) -"wM" = ( +"xm" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood, -/obj/effect/turf_decal/arrows{ +/obj/machinery/vending/coffee, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/sign/poster/contraband/random{ + pixel_x = 32 + }, +/obj/machinery/computer/helm/viewscreen/directional/north, +/obj/machinery/light/small/built/directional/east, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"xV" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 1 }, /obj/effect/turf_decal/corner/transparent/neutral/full, /turf/open/floor/plasteel/dark, /area/ship/cargo) -"yh" = ( -/obj/effect/decal/cleanable/dirt/dust, +"yS" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/cable{ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 @@ -2771,26 +2320,32 @@ /obj/effect/turf_decal/corner/transparent/neutral/full, /turf/open/floor/plasteel/dark, /area/ship/cargo) -"yo" = ( +"yZ" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/sink{ - dir = 8; - pixel_x = 11 +/obj/structure/cable{ + icon_state = "1-8" }, -/obj/effect/decal/cleanable/food/flour, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/effect/turf_decal/corner/opaque/white/diagonal, -/turf/open/floor/plasteel, -/area/ship/crew/canteen) -"zd" = ( -/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"zi" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/machinery/light/small/built/directional/east, -/obj/effect/turf_decal/corner/opaque/white/diagonal, -/turf/open/floor/plasteel, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, /area/ship/crew/canteen) "zC" = ( /obj/effect/decal/cleanable/dirt/dust, @@ -2799,17 +2354,76 @@ }, /turf/open/floor/plasteel/dark, /area/ship/cargo) -"Bw" = ( +"Ag" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"Am" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-2" }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/machinery/airalarm/directional/west, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/engineering) +"AT" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/arrows{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"AU" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/secure_closet/personal, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/gun/energy/e_gun/mini, +/obj/item/stock_parts/cell/gun/mini, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 8 }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plasteel/dark, +/area/ship/crew) +"By" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, /obj/effect/turf_decal/corner/opaque/white/diagonal, /turf/open/floor/plasteel, /area/ship/crew/canteen) +"DJ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/reagent_dispensers/watertank, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"Ee" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/firecloset/full{ + anchored = 1 + }, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) "Fb" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, @@ -2818,6 +2432,17 @@ }, /turf/open/floor/plasteel/dark, /area/ship/cargo) +"FR" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/rack, +/obj/item/storage/belt/utility, +/obj/item/weldingtool, +/obj/item/clothing/head/welding, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) "FU" = ( /obj/effect/spawner/structure/window/shuttle, /obj/machinery/door/poddoor{ @@ -2827,6 +2452,77 @@ /obj/machinery/door/firedoor/window, /turf/open/floor/plating, /area/ship/bridge) +"FV" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"Gr" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/hydroponics/constructable, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/built/directional/west, +/obj/effect/turf_decal/corner/opaque/green{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/ship/crew/canteen) +"HH" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"Il" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"IE" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/secure_closet/freezer/fridge/open, +/obj/item/reagent_containers/food/condiment/flour{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/reagent_containers/food/condiment/flour, +/obj/item/reagent_containers/food/snacks/meat/slab/synthmeat{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/reagent_containers/food/snacks/meat/slab/synthmeat, +/obj/item/reagent_containers/food/snacks/meat/slab/synthmeat{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/effect/turf_decal/corner/opaque/white/diagonal, +/turf/open/floor/plasteel, +/area/ship/crew/canteen) +"Ju" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/vending/cigarette, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/sign/poster/contraband/random{ + pixel_x = 32 + }, +/obj/machinery/light/small/built/directional/east, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) "JR" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/cable{ @@ -2844,17 +2540,98 @@ }, /turf/open/floor/plating, /area/ship/engineering) -"Nu" = ( -/obj/machinery/door/airlock/external, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, +"Kc" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/turf/open/floor/plating, +/obj/effect/landmark/observer_start, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"Lq" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"LK" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/airalarm/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/ship/crew) +"MC" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/rack, +/obj/item/reagent_containers/glass/bucket, +/obj/item/mop, +/obj/item/storage/bag/trash{ + pixel_x = 6 + }, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"MM" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/ship/crew) +"Nu" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plating, /area/ship/crew/canteen) +"NN" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/engineering) "NY" = ( /obj/effect/spawner/structure/window/shuttle, /obj/machinery/door/poddoor{ @@ -2864,6 +2641,85 @@ /obj/machinery/door/firedoor/window, /turf/open/floor/plating, /area/ship/engineering) +"On" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"Oq" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/arrows, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"Ov" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood, +/obj/effect/turf_decal/arrows{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"OX" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/bed, +/obj/item/bedsheet/brown, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/machinery/light/small/built/directional/west, +/turf/open/floor/plasteel/dark, +/area/ship/crew) +"Pb" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/machinery/light/small/built/directional/east, +/obj/effect/turf_decal/corner/opaque/white/diagonal, +/turf/open/floor/plasteel, +/area/ship/crew/canteen) +"Pr" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/computer/cargo/express{ + dir = 8 + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"PV" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/tank_dispenser/oxygen, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"QJ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/hydroponics/constructable, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/built/directional/west, +/obj/effect/turf_decal/corner/opaque/green{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/ship/crew/canteen) "Rw" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/sign/poster/contraband/random{ @@ -2878,6 +2734,80 @@ }, /turf/open/floor/plasteel, /area/ship/crew) +"RQ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/door/airlock/external{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"Sf" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/crew) +"TQ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"Uk" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/door/airlock/glass{ + name = "Kitchen"; + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) "Un" = ( /obj/machinery/power/shuttle/engine/electric{ dir = 4 @@ -2890,6 +2820,45 @@ }, /turf/open/floor/plating/airless, /area/ship/engineering) +"UF" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/door/airlock/public/glass{ + name = "Bar" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"Vi" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/arrows, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"VN" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/secure_closet/personal, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/gun/energy/e_gun/mini, +/obj/item/stock_parts/cell/gun/mini, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/obj/machinery/airalarm/directional/north, +/obj/machinery/light/small/built/directional/west, +/turf/open/floor/plasteel/dark, +/area/ship/crew) "Xs" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/ntspaceworks_big/two{ @@ -2897,15 +2866,44 @@ }, /turf/open/floor/plasteel/dark, /area/ship/cargo) -"XZ" = ( +"XH" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/landmark/observer_start, /obj/effect/turf_decal/corner/transparent/neutral/full, /turf/open/floor/plasteel/dark, -/area/ship/cargo) +/area/ship/bridge) "YW" = ( /turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/cargo) +"Zf" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/neutral/full, +/turf/open/floor/plasteel/dark, +/area/ship/crew) +"ZR" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, +/obj/effect/turf_decal/corner/transparent/neutral{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/ship/crew) (1,1,1) = {" aa @@ -2993,7 +2991,7 @@ aa "} (5,1,1) = {" aa -do +jJ ac aB aO @@ -3009,7 +3007,7 @@ cZ JR dJ ac -do +jJ aa "} (6,1,1) = {" @@ -3020,11 +3018,11 @@ aC aP bj by -bI -bS -ck -cw -bI +dR +rF +NN +Am +dR by bj fX @@ -3058,9 +3056,9 @@ aa aa ad YW -aD -aR -bk +vm +yS +FR YW YW bU @@ -3068,9 +3066,9 @@ bU bU YW YW -da -qX -dL +MC +Lq +DJ YW ad aa @@ -3080,17 +3078,17 @@ aa ae ao aE -aR +yS fa bz tU Fb -bW +Ag cy cJ cP db -du +On bA dY eh @@ -3101,17 +3099,17 @@ aa ae ve zC -aT +TQ bo bA ap aF -bW +Ag bA ap cQ dc -qX +Lq em bA ei @@ -3122,17 +3120,17 @@ qx af aq mb -aU -bn -bB -bL -bW -XZ -nT -wM -cR -dd -dv +xV +km +Vi +Oq +Ag +Kc +mg +Ov +AT +HH +FV tZ ap ei @@ -3143,17 +3141,17 @@ aa ae ar Xs -qX +Lq de ap ap dq -bW +Ag hv ap ap bm -yh +eX ap dZ eh @@ -3164,17 +3162,17 @@ aa af as hq -qX +Lq bo bC ap bX -cm +Pr bo cK cS aF -qX +Lq dM ea ei @@ -3184,9 +3182,9 @@ aa aa ad YW -aG -qX -bp +Ee +Lq +kN YW YW bU @@ -3194,9 +3192,9 @@ bU bU YW YW -df -yh -dN +tS +eX +PV YW ad aa @@ -3206,7 +3204,7 @@ aa aa YW YW -dw +RQ YW YW bM @@ -3216,7 +3214,7 @@ cz cL YW YW -dw +RQ YW YW aa @@ -3227,7 +3225,7 @@ aa aa aj aH -aW +Zf bq bD bN @@ -3237,7 +3235,7 @@ cA cM bD dg -dx +zi dO eb aa @@ -3245,23 +3243,23 @@ aa "} (17,1,1) = {" aa -do +jJ ai ai -aX -br -bE +rU +jw +UF bO cb cp cB cN -cT -dh -dy +eV +li +Il bD bD -do +jJ aa "} (18,1,1) = {" @@ -3269,17 +3267,17 @@ aa nK at aI -aY +Sf bs bD -cd +xm cc cq cC -bP +Ju bD di -dz +oj Nu ec ej @@ -3290,17 +3288,17 @@ aa ai ai ai -aZ +pF ai bD bD bD -cr +oF bD bD bD bD -dA +Uk bD bD bD @@ -3309,20 +3307,20 @@ aa (20,1,1) = {" aa ai -au +VN ai -ba +uw ai bF bQ cD -cs +yZ cO bQ cU -pQ -Bw -uA +IE +hU +vk ed bD aa @@ -3330,20 +3328,20 @@ aa (21,1,1) = {" aa aj -av -aJ -bb +eu +mc +ZR bt bG bQ ce -ct +iM cE bQ cV -zd -qn -yo +Pb +By +lH ee eb aa @@ -3353,12 +3351,12 @@ aa ai ai ai -bc +LK bu ai bQ cf -cu +XH cF bQ bD @@ -3372,10 +3370,10 @@ aa (23,1,1) = {" aa aj -aw -aK -bd -jO +OX +ku +MM +gr ai bQ cg @@ -3383,20 +3381,20 @@ cv cG bQ bD -dm +QJ dE dT -ef +Gr eb aa "} (24,1,1) = {" aa ai -bV +AU ai -be -hr +nR +uk ai FU FU @@ -3404,10 +3402,10 @@ FU FU FU bD -dn +dk dF dU -eg +jF bD aa "} @@ -3426,8 +3424,8 @@ aa aa cW bD -dG -dV +pn +sP bD cW aa @@ -3435,10 +3433,10 @@ aa (26,1,1) = {" aa aa -do +jJ ai ai -do +jJ aa aa aa @@ -3446,10 +3444,10 @@ aa aa aa aa -do +jJ bD bD -do +jJ aa aa "} diff --git a/_maps/shuttles/shiptest/independent_rube_goldberg.dmm b/_maps/shuttles/shiptest/independent_rube_goldberg.dmm index 6fd38fb13759..aa60cb0daf33 100644 --- a/_maps/shuttles/shiptest/independent_rube_goldberg.dmm +++ b/_maps/shuttles/shiptest/independent_rube_goldberg.dmm @@ -2114,7 +2114,7 @@ /turf/open/floor/plating/airless, /area/ship/hallway) "vw" = ( -/obj/structure/chair/bronze, +/obj/structure/chair/comfy/shuttle/bronze, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, /turf/open/floor/mineral/titanium, /area/ship/bridge) diff --git a/_maps/shuttles/shiptest/independent_scav.dmm b/_maps/shuttles/shiptest/independent_scav.dmm index 61ffda4d8b18..880634f50427 100644 --- a/_maps/shuttles/shiptest/independent_scav.dmm +++ b/_maps/shuttles/shiptest/independent_scav.dmm @@ -832,7 +832,8 @@ /obj/docking_port/mobile{ can_move_docking_ports = 1; dir = 8; - launch_status = 0 + launch_status = 0; + preferred_direction = 4 }, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, diff --git a/_maps/shuttles/shiptest/independent_schmiedeberg.dmm b/_maps/shuttles/shiptest/independent_schmiedeberg.dmm index 31aee0a5da85..d7214623ad18 100644 --- a/_maps/shuttles/shiptest/independent_schmiedeberg.dmm +++ b/_maps/shuttles/shiptest/independent_schmiedeberg.dmm @@ -2654,16 +2654,12 @@ /obj/item/clothing/suit/longcoat/chemist, /obj/item/clothing/under/rank/medical/chemist, /obj/item/clothing/under/rank/medical/chemist, -/obj/item/clothing/under/rank/medical/chemist/pharmacist, -/obj/item/clothing/under/rank/medical/chemist/pharmacist, -/obj/item/clothing/under/rank/medical/chemist/pharmacist/skirt, -/obj/item/clothing/under/rank/medical/chemist/pharmacist/skirt, -/obj/item/clothing/under/rank/medical/chemist/pharmacologist, -/obj/item/clothing/under/rank/medical/chemist/pharmacologist, -/obj/item/clothing/under/rank/medical/chemist/pharmacologist/skirt, -/obj/item/clothing/under/rank/medical/chemist/pharmacologist/skirt, -/obj/item/clothing/under/suit/senior_chemist, -/obj/item/clothing/under/suit/senior_chemist/skirt, +/obj/item/clothing/under/rank/medical/chemist, +/obj/item/clothing/under/rank/medical/chemist, +/obj/item/clothing/under/rank/medical/chemist/skirt, +/obj/item/clothing/under/rank/medical/chemist/skirt, +/obj/item/clothing/under/rank/medical/chemist/skirt, +/obj/item/clothing/under/rank/medical/chemist/skirt, /obj/item/clothing/shoes/sneakers/orange, /obj/item/clothing/shoes/sneakers/orange, /obj/item/clothing/shoes/sneakers/orange, diff --git a/_maps/shuttles/shiptest/independent_shepherd.dmm b/_maps/shuttles/shiptest/independent_shepherd.dmm index 78ddbfcee909..a028ed54fd3f 100644 --- a/_maps/shuttles/shiptest/independent_shepherd.dmm +++ b/_maps/shuttles/shiptest/independent_shepherd.dmm @@ -811,7 +811,8 @@ dir = 1 }, /obj/machinery/door/airlock/grunge{ - name = "Chaplain's Quarters" + name = "Chaplain's Quarters"; + dir = 4 }, /obj/structure/cable{ icon_state = "4-8" diff --git a/_maps/shuttles/shiptest/independent_shetland.dmm b/_maps/shuttles/shiptest/independent_shetland.dmm index ce410cca9db4..f2b586cede24 100644 --- a/_maps/shuttles/shiptest/independent_shetland.dmm +++ b/_maps/shuttles/shiptest/independent_shetland.dmm @@ -3939,7 +3939,8 @@ height = 26; launch_status = 0; port_direction = 8; - width = 48 + width = 48; + preferred_direction = 4 }, /obj/effect/turf_decal/industrial/warning/fulltile, /turf/open/floor/plasteel/patterned/ridged, diff --git a/_maps/shuttles/shiptest/inteq_colossus.dmm b/_maps/shuttles/shiptest/inteq_colossus.dmm index f02355398c8b..4aa2992d71f6 100644 --- a/_maps/shuttles/shiptest/inteq_colossus.dmm +++ b/_maps/shuttles/shiptest/inteq_colossus.dmm @@ -6,21 +6,22 @@ /obj/item/trash/raisins, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo) -"al" = ( -/obj/machinery/suit_storage_unit/inherit{ - req_access_txt = "1" +"ai" = ( +/obj/structure/rack, +/obj/item/target/syndicate{ + pixel_x = -5; + pixel_y = 10 }, -/obj/effect/turf_decal/trimline/opaque/yellow/line{ - dir = 8 +/obj/item/target/syndicate{ + pixel_y = 5 }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 +/obj/item/target/alien{ + pixel_x = 5 }, -/obj/machinery/light/directional/west, -/obj/item/clothing/suit/space/hardsuit/security/independent/inteq, -/obj/item/clothing/head/helmet/space/inteq, -/turf/open/floor/plasteel/tech/grid, -/area/ship/security/armory) +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/borderfloorblack, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) "ar" = ( /obj/structure/cable{ icon_state = "4-8" @@ -33,24 +34,20 @@ }, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/central) -"aN" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 +"aH" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin, +/obj/structure/cable{ + icon_state = "1-8" }, -/obj/structure/sign/poster/contraband/eoehoma{ - pixel_y = 32 +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ +/obj/effect/turf_decal/corner/opaque/brown{ dir = 4 }, -/turf/open/floor/plasteel/tech, -/area/ship/security/armory) -"aU" = ( -/obj/effect/turf_decal/siding/thinplating, -/obj/effect/turf_decal/trimline/opaque/yellow/line, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/hallway/central) +/turf/open/floor/plasteel/dark, +/area/ship/crew/office) "aZ" = ( /obj/machinery/atmospherics/components/binary/dp_vent_pump/layer2{ dir = 1 @@ -63,14 +60,6 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/plasteel/tech/grid, /area/ship/hallway/port) -"bd" = ( -/obj/machinery/porta_turret/centcom_shuttle/ballistic{ - dir = 9; - name = "ship turret"; - on = 0 - }, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/bridge) "bn" = ( /obj/structure/cable{ icon_state = "0-4" @@ -120,20 +109,60 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/fore) -"bO" = ( -/obj/machinery/cryopod{ +"bJ" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/effect/turf_decal/borderfloor{ + dir = 5 + }, +/obj/item/radio/intercom/directional/north{ + freerange = 1; + freqlock = 1; + frequency = 1347; + name = "IRMG shortwave intercom" + }, +/obj/machinery/telecomms/relay/preset/mining{ + autolinkers = list("relay","hub"); + freq_listening = list(1347); + id = "IRMG Relay"; + name = "IRMG Relay"; + network = "irmg_commnet" + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"bN" = ( +/obj/structure/closet/secure_closet{ + icon_state = "armory"; + name = "armor locker"; + req_access_txt = "1" + }, +/obj/item/clothing/suit/armor/vest/alt, +/obj/item/clothing/suit/armor/vest/alt, +/obj/item/clothing/suit/armor/vest/alt, +/obj/item/clothing/head/helmet/inteq, +/obj/item/clothing/head/helmet/inteq, +/obj/item/clothing/head/helmet/inteq, +/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/combat, +/obj/effect/turf_decal/siding/thinplating/dark{ dir = 8 }, -/obj/structure/railing, -/obj/machinery/light/small/directional/east, -/obj/machinery/light_switch{ - dir = 8; - pixel_x = 20; - pixel_y = -5 +/obj/structure/sign/poster/contraband/peacemaker{ + pixel_x = -32 + }, +/obj/item/clothing/suit/armor/vest/bulletproof, +/obj/item/clothing/suit/armor/vest/bulletproof, +/obj/item/clothing/suit/armor/vest/bulletproof, +/obj/item/clothing/head/helmet/swat/inteq, +/obj/item/clothing/head/helmet/swat/inteq, +/obj/item/clothing/head/helmet/swat/inteq, +/obj/effect/turf_decal/trimline/opaque/yellow/line{ + dir = 8 }, -/obj/effect/turf_decal/techfloor, /turf/open/floor/plasteel/tech/grid, -/area/ship/crew/cryo) +/area/ship/security/armory) "bS" = ( /obj/machinery/atmospherics/components/unary/shuttle/heater{ dir = 4 @@ -154,18 +183,52 @@ }, /turf/open/floor/plating, /area/ship/maintenance/starboard) -"cj" = ( -/obj/machinery/porta_turret/centcom_shuttle/ballistic{ - dir = 10; - name = "ship turret"; - on = 0 +"cd" = ( +/obj/item/storage/backpack/messenger/inteq, +/obj/item/storage/backpack/messenger/inteq, +/obj/item/storage/backpack/messenger/inteq, +/obj/item/clothing/head/beret/sec/inteq, +/obj/item/clothing/head/beret/sec/inteq, +/obj/item/clothing/head/beret/sec/inteq, +/obj/item/clothing/head/soft/inteq, +/obj/item/clothing/head/soft/inteq, +/obj/item/clothing/head/soft/inteq, +/obj/structure/closet/wall{ + icon_door = "orange_wall"; + name = "uniform closet"; + pixel_y = 28 }, -/turf/closed/wall/mineral/plastitanium/nodiagonal, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/carpet/black, +/area/ship/crew) +"cq" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/carpet/black, +/area/ship/crew) +"ct" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"cE" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/effect/turf_decal/borderfloor{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/machinery/photocopier/faxmachine/longrange, +/turf/open/floor/plasteel/dark, /area/ship/bridge) -"cv" = ( -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plasteel/tech/grid, -/area/ship/external/dark) "cM" = ( /obj/structure/closet/secure_closet/freezer{ anchored = 1; @@ -189,32 +252,6 @@ /obj/machinery/newscaster/directional/west, /turf/open/floor/plasteel/dark, /area/ship/crew/office) -"cT" = ( -/obj/effect/turf_decal/corner/opaque/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 4 - }, -/obj/machinery/button/door{ - id = "colossus_armory"; - name = "Door Bolt Control"; - normaldoorcontrol = 1; - pixel_x = 6; - pixel_y = 23; - req_access_txt = "3"; - specialfunctions = 4 - }, -/obj/machinery/button/door{ - id = "colossus_armory"; - name = "Door Control"; - normaldoorcontrol = 1; - pixel_x = -6; - pixel_y = 23; - req_access_txt = "3" - }, -/turf/open/floor/plasteel/dark, -/area/ship/security) "dq" = ( /obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, /obj/structure/cable{ @@ -250,33 +287,6 @@ }, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo) -"dE" = ( -/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/machinery/door/poddoor{ - dir = 4; - id = "colossus_windows"; - name = "Window Shield" - }, -/turf/open/floor/plating, -/area/ship/crew) -"dH" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/effect/landmark/observer_start, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/hallway/central) "dI" = ( /obj/effect/turf_decal/trimline/opaque/yellow/corner{ dir = 1 @@ -329,23 +339,6 @@ /obj/structure/catwalk/over/plated_catwalk/dark, /turf/open/floor/plating, /area/ship/engineering) -"eh" = ( -/obj/structure/closet/crate/bin, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 4 - }, -/obj/machinery/light_switch{ - pixel_y = 22 - }, -/obj/item/paper/crumpled, -/turf/open/floor/plasteel/dark, -/area/ship/security) "ei" = ( /obj/structure/cable{ icon_state = "1-4" @@ -376,69 +369,53 @@ }, /turf/open/floor/plasteel/dark, /area/ship/crew/office) -"ev" = ( -/obj/structure/weightmachine/stacklifter, -/obj/effect/turf_decal/borderfloorblack{ - dir = 1 +"ek" = ( +/obj/effect/turf_decal/trimline/opaque/yellow/line, +/obj/effect/turf_decal/siding/thinplating{ + dir = 10 }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) -"eD" = ( +/obj/machinery/firealarm/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/vending/cigarette, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/hallway/central) +"eI" = ( +/obj/effect/turf_decal/box/corners, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/carpet/black, -/area/ship/crew) -"eH" = ( -/obj/structure/rack, -/obj/effect/decal/cleanable/dirt/dust, -/obj/item/ammo_box/magazine/co9mm{ - pixel_x = 5 +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/cargo) +"eK" = ( +/obj/structure/table, +/obj/item/storage/box/cups{ + pixel_y = 10 }, -/obj/item/ammo_box/magazine/co9mm{ - pixel_x = -5 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/item/ammo_box/magazine/co9mm{ - pixel_x = 5 - }, -/obj/item/ammo_box/magazine/co9mm{ - pixel_x = -5 - }, -/obj/item/gun/ballistic/automatic/pistol/commander/inteq{ - pixel_y = 5 - }, -/obj/item/gun/ballistic/automatic/pistol/commander/inteq, -/obj/effect/turf_decal/siding/thinplating/dark, -/obj/effect/turf_decal/trimline/opaque/yellow/line, -/turf/open/floor/plasteel/tech/grid, -/area/ship/security/armory) -"eI" = ( -/obj/effect/turf_decal/box/corners, -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/cargo) -"eK" = ( -/obj/structure/table, -/obj/item/storage/box/cups{ - pixel_y = 10 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/corner/opaque/yellow{ - dir = 1 +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 }, /obj/effect/turf_decal/corner/opaque/brown{ dir = 4 }, /turf/open/floor/plasteel/dark, /area/ship/crew/office) +"eM" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger, +/obj/item/screwdriver, +/obj/effect/turf_decal/corner/opaque/yellow, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/machinery/computer/helm/viewscreen/directional/east, +/turf/open/floor/plasteel/dark, +/area/ship/security) "eT" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/structure/cable{ @@ -503,6 +480,43 @@ }, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/hallway/fore) +"fr" = ( +/obj/structure/rack, +/obj/item/storage/toolbox/ammo/c10mm{ + pixel_x = 2; + pixel_y = 7 + }, +/obj/item/storage/toolbox/ammo/c9mm{ + pixel_y = 2 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/trimline/opaque/yellow/line{ + dir = 6 + }, +/obj/item/storage/toolbox/ammo/a308{ + pixel_x = -2; + pixel_y = -2 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security/armory) +"fG" = ( +/obj/structure/rack, +/obj/item/storage/box/emptysandbags{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/storage/box/emptysandbags, +/obj/item/storage/box/emptysandbags{ + pixel_x = 5; + pixel_y = -5 + }, +/obj/effect/turf_decal/borderfloorblack, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) "fN" = ( /obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, /obj/structure/cable{ @@ -542,17 +556,6 @@ }, /turf/open/floor/plasteel/tech, /area/ship/engineering) -"fT" = ( -/obj/machinery/shower{ - pixel_y = 19 - }, -/obj/structure/curtain, -/obj/effect/turf_decal/steeldecal/steel_decals10{ - dir = 9 - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/plasteel/showroomfloor, -/area/ship/crew/toilet) "fW" = ( /obj/effect/turf_decal/siding/thinplating/corner, /obj/effect/turf_decal/siding/thinplating/corner{ @@ -566,39 +569,6 @@ /obj/effect/turf_decal/trimline/opaque/yellow/warning, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/central) -"fX" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 - }, -/obj/structure/sink{ - dir = 1; - pixel_y = -12 - }, -/obj/structure/mirror{ - pixel_y = -32 - }, -/turf/open/floor/plasteel/showroomfloor, -/area/ship/crew/toilet) -"gg" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/effect/turf_decal/corner/opaque/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/crew/office) "gl" = ( /obj/structure/catwalk/over/plated_catwalk/dark, /obj/machinery/firealarm/directional/south, @@ -608,40 +578,28 @@ }, /turf/open/floor/plating, /area/ship/engineering) -"gr" = ( -/obj/structure/closet/secure_closet/wall{ - dir = 4; - icon_door = "solgov_wall"; - icon_state = "solgov_wall"; - name = "vanguard's locker"; - pixel_x = -28; - req_access_txt = "58" +"gp" = ( +/obj/effect/turf_decal/trimline/opaque/yellow/line, +/obj/effect/turf_decal/siding/thinplating, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/item/clothing/glasses/hud/security/sunglasses/inteq, -/obj/item/clothing/mask/gas/sechailer/inteq, -/obj/item/clothing/gloves/tackler/combat/insulated, -/obj/item/clothing/shoes/combat, -/obj/item/storage/belt/security/webbing/inteq/alt, -/obj/item/storage/backpack/messenger/inteq, -/obj/item/megaphone/command, -/obj/item/clothing/under/syndicate/inteq/skirt, -/obj/item/clothing/under/syndicate/inteq, -/obj/item/clothing/suit/armor/hos/inteq, -/obj/item/clothing/head/beret/sec/hos/inteq, -/obj/item/radio/headset/inteq/alt/captain, -/obj/item/areaeditor/shuttle, -/obj/item/shield/riot/tele, +/obj/structure/chair{ + dir = 1 + }, +/obj/item/cigbutt, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/hallway/central) +"gu" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 6 - }, -/obj/item/storage/belt/security/webbing/inteq, -/obj/item/storage/belt/military/assault, -/turf/open/floor/carpet/orange, -/area/ship/bridge) +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table, +/obj/item/flashlight/lamp/green, +/turf/open/floor/carpet/black, +/area/ship/crew) "gC" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 4 @@ -654,6 +612,26 @@ }, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/fore) +"gE" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/borderfloor{ + dir = 4 + }, +/obj/machinery/modular_computer/console/preset/command{ + dir = 8 + }, +/obj/machinery/button/door{ + dir = 1; + id = "colossus_windows"; + name = "Window Lockdown"; + pixel_x = -4; + pixel_y = -21 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) "gJ" = ( /obj/effect/turf_decal/siding/thinplating/corner{ dir = 8 @@ -672,6 +650,19 @@ }, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/central) +"gX" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_y = 4 + }, +/obj/item/pen/fourcolor, +/obj/effect/turf_decal/corner/opaque/yellow, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/dark, +/area/ship/security) "hc" = ( /obj/machinery/atmospherics/components/unary/tank/toxins{ dir = 1; @@ -683,38 +674,6 @@ }, /turf/open/floor/plasteel/tech, /area/ship/maintenance/starboard) -"hf" = ( -/obj/structure/closet/secure_closet{ - icon_state = "armory"; - name = "armor locker"; - req_access_txt = "1" - }, -/obj/item/clothing/suit/armor/vest/alt, -/obj/item/clothing/suit/armor/vest/alt, -/obj/item/clothing/suit/armor/vest/alt, -/obj/item/clothing/head/helmet/inteq, -/obj/item/clothing/head/helmet/inteq, -/obj/item/clothing/head/helmet/inteq, -/obj/item/clothing/gloves/combat, -/obj/item/clothing/gloves/combat, -/obj/item/clothing/gloves/combat, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/obj/structure/sign/poster/contraband/peacemaker{ - pixel_x = -32 - }, -/obj/item/clothing/suit/armor/vest/bulletproof, -/obj/item/clothing/suit/armor/vest/bulletproof, -/obj/item/clothing/suit/armor/vest/bulletproof, -/obj/item/clothing/head/helmet/swat/inteq, -/obj/item/clothing/head/helmet/swat/inteq, -/obj/item/clothing/head/helmet/swat/inteq, -/obj/effect/turf_decal/trimline/opaque/yellow/line{ - dir = 8 - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/security/armory) "hh" = ( /obj/structure/cable{ icon_state = "4-8" @@ -731,26 +690,19 @@ }, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/fore) -"ho" = ( -/obj/item/clothing/under/syndicate/inteq, -/obj/item/clothing/under/syndicate/inteq, -/obj/item/clothing/under/syndicate/inteq, -/obj/item/clothing/under/syndicate/inteq/skirt, -/obj/item/clothing/under/syndicate/inteq/skirt, -/obj/item/clothing/under/syndicate/inteq/skirt, -/obj/item/clothing/shoes/combat, -/obj/item/clothing/shoes/combat, -/obj/item/clothing/shoes/combat, -/obj/item/clothing/shoes/sneakers/black, -/obj/item/clothing/shoes/sneakers/black, -/obj/item/clothing/shoes/sneakers/black, -/obj/structure/closet/wall{ - icon_door = "orange_wall"; - name = "uniform closet"; - pixel_y = 28 +"hv" = ( +/obj/structure/table/reinforced, +/obj/machinery/computer/secure_data/laptop{ + dir = 4 }, -/turf/open/floor/carpet/black, -/area/ship/crew) +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) "hD" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/hallway/port) @@ -813,13 +765,6 @@ }, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/maintenance/port) -"im" = ( -/obj/structure/dresser, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/carpet/black, -/area/ship/crew) "iq" = ( /obj/structure/cable{ icon_state = "1-2" @@ -852,14 +797,38 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/ship/maintenance/port) -"iH" = ( -/obj/structure/chair/office{ +"iS" = ( +/obj/item/clothing/glasses/hud/security/sunglasses/inteq, +/obj/item/clothing/mask/gas/sechailer/inteq, +/obj/item/clothing/gloves/tackler/combat/insulated, +/obj/item/clothing/shoes/combat, +/obj/item/storage/belt/security/webbing/inteq/alt, +/obj/item/storage/backpack/messenger/inteq, +/obj/item/clothing/under/syndicate/inteq/skirt, +/obj/item/clothing/under/syndicate/inteq, +/obj/structure/closet/secure_closet{ + anchored = 1; + can_be_unanchored = 1; + icon_state = "warden"; + name = "master at arms' locker"; + req_access_txt = "3" + }, +/obj/effect/turf_decal/corner/opaque/brown{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 6 +/obj/effect/turf_decal/corner/opaque/yellow, +/obj/effect/decal/cleanable/dirt, +/obj/item/clothing/suit/armor/vest/bulletproof, +/obj/item/clothing/head/warden/drill{ + desc = "A special armored campaign hat with the IRMG insignia emblazoned on it. Uses reinforced fabric to offer sufficient protection."; + name = "master at arms' campaign hat" }, -/obj/effect/landmark/start/warden, +/obj/item/megaphone/sec, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/item/storage/belt/security/webbing/inteq, +/obj/item/storage/belt/military/assault, /turf/open/floor/plasteel/dark, /area/ship/security) "iT" = ( @@ -893,20 +862,6 @@ /obj/structure/catwalk/over/plated_catwalk/dark, /turf/open/floor/plating, /area/ship/engineering) -"jn" = ( -/obj/machinery/atmospherics/pipe/layer_manifold, -/obj/structure/reagent_dispensers/watertank, -/obj/machinery/button/door{ - id = "colossus_thrusters"; - name = "Thruster Shield Control"; - pixel_x = -6; - pixel_y = 23 - }, -/obj/effect/turf_decal/corner_techfloor_gray{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ship/maintenance/port) "jo" = ( /obj/machinery/atmospherics/components/unary/tank/toxins{ piping_layer = 1 @@ -930,6 +885,36 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/plasteel/dark, /area/ship/crew/office) +"jy" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"jC" = ( +/obj/structure/reagent_dispensers/peppertank{ + pixel_y = 28 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) "jT" = ( /obj/structure/cable{ icon_state = "4-8" @@ -955,19 +940,20 @@ }, /turf/open/floor/plasteel/dark, /area/ship/crew/office) -"ko" = ( -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/turf_decal/steeldecal/steel_decals_central7{ - dir = 4 +"kn" = ( +/obj/machinery/atmospherics/pipe/layer_manifold, +/obj/structure/reagent_dispensers/watertank, +/obj/machinery/button/door{ + id = "colossus_thrusters"; + name = "Thruster Shield Control"; + pixel_x = -6; + pixel_y = 23 }, -/obj/structure/cable{ - icon_state = "0-4" +/obj/effect/turf_decal/corner_techfloor_gray{ + dir = 4 }, -/obj/machinery/suit_storage_unit/inherit, -/obj/item/clothing/suit/space/hardsuit/security/independent/inteq, -/obj/item/tank/jetpack/oxygen, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/port) +/turf/open/floor/plating, +/area/ship/maintenance/port) "kI" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/crew/cryo) @@ -981,6 +967,22 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo) +"kL" = ( +/obj/effect/turf_decal/corner/opaque/yellow, +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/structure/sign/poster/official/fruit_bowl{ + pixel_x = 32 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/newscaster/security_unit/directional/north, +/obj/machinery/rnd/server, +/turf/open/floor/plasteel/dark, +/area/ship/crew/office) "kV" = ( /obj/structure/railing{ dir = 1 @@ -998,21 +1000,6 @@ }, /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) -"la" = ( -/obj/structure/rack, -/obj/item/target/clown{ - pixel_x = -5; - pixel_y = 10 - }, -/obj/item/target{ - pixel_y = 5 - }, -/obj/item/target{ - pixel_x = 5 - }, -/obj/effect/turf_decal/borderfloorblack, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) "lg" = ( /obj/effect/turf_decal/box/corners{ dir = 4 @@ -1030,6 +1017,19 @@ }, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo) +"ls" = ( +/obj/machinery/navbeacon/wayfinding{ + location = "armory" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) "lv" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/hallway/central) @@ -1103,52 +1103,29 @@ }, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/fore) -"mz" = ( -/obj/effect/turf_decal/trimline/opaque/yellow/warning{ +"my" = ( +/obj/effect/turf_decal/industrial/warning{ dir = 4 }, -/obj/effect/turf_decal/siding/thinplating/dark/corner, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 +/obj/machinery/computer/cryopod/directional/north{ + pixel_y = 25 }, -/obj/machinery/firealarm/directional/north, -/obj/structure/cable{ - icon_state = "4-8" +/turf/open/floor/plasteel/tech, +/area/ship/crew/cryo) +"mF" = ( +/obj/machinery/suit_storage_unit/inherit{ + req_access_txt = "1" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ +/obj/effect/turf_decal/trimline/opaque/yellow/line{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ +/obj/effect/turf_decal/siding/thinplating/dark{ dir = 4 }, -/turf/open/floor/plasteel/tech, +/obj/item/clothing/suit/space/hardsuit/security/independent/inteq, +/obj/item/clothing/head/helmet/space/inteq, +/turf/open/floor/plasteel/tech/grid, /area/ship/security/armory) -"mG" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/plasteel/dark, -/area/ship/security) -"mW" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Office" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/borderfloor{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ship/security) "mY" = ( /obj/structure/cable{ icon_state = "1-2" @@ -1159,27 +1136,23 @@ }, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/fore) -"nh" = ( -/obj/effect/turf_decal/borderfloor{ - dir = 4 +"ne" = ( +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = 10 }, /obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/door/airlock/security{ - dir = 4; - id_tag = "colossus_armory"; - name = "Armory"; - req_access_txt = "1" + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/obj/structure/cable{ + icon_state = "2-4" }, -/turf/open/floor/plasteel/tech, -/area/ship/security/armory) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) "nm" = ( /obj/machinery/atmospherics/pipe/layer_manifold, /obj/effect/turf_decal/techfloor{ @@ -1200,74 +1173,57 @@ }, /turf/open/floor/plasteel/dark, /area/ship/bridge) -"nC" = ( -/obj/effect/turf_decal/corner/opaque/yellow, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 4 - }, -/obj/machinery/power/apc/auto_name/directional/east, +"ob" = ( /obj/structure/cable{ - icon_state = "0-8" + icon_state = "1-8" }, -/turf/open/floor/plasteel/dark, -/area/ship/security) -"nE" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-4" }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/item/cigbutt, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/item/radio/intercom/directional/south, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ +/turf/open/floor/carpet/black, +/area/ship/crew) +"og" = ( +/obj/effect/turf_decal/corner/opaque/yellow{ dir = 1 }, -/turf/open/floor/plasteel/tech, -/area/ship/security/armory) -"nQ" = ( -/obj/machinery/suit_storage_unit/inherit{ - req_access_txt = "1" - }, -/obj/effect/turf_decal/trimline/opaque/yellow/line{ +/obj/effect/turf_decal/corner/opaque/brown{ dir = 4 }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 +/obj/machinery/button/door{ + id = "colossus_armory"; + name = "Door Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 6; + pixel_y = 23; + req_access_txt = "3"; + specialfunctions = 4 }, -/obj/item/clothing/suit/space/hardsuit/security/independent/inteq, -/obj/item/clothing/head/helmet/space/inteq, -/turf/open/floor/plasteel/tech/grid, -/area/ship/security/armory) -"nW" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/obj/effect/turf_decal/siding/thinplating/dark/corner, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/tech, -/area/ship/security/armory) -"oe" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/effect/turf_decal/borderfloor{ - dir = 5 - }, -/obj/item/radio/intercom/directional/north{ - freerange = 1; - freqlock = 1; - frequency = 1347; - name = "IRMG shortwave intercom" - }, -/obj/machinery/telecomms/relay/preset/mining{ - autolinkers = list("relay","hub"); - freq_listening = list(1347); - id = "IRMG Relay"; - name = "IRMG Relay"; - network = "irmg_commnet" +/obj/machinery/button/door{ + id = "colossus_armory"; + name = "Door Control"; + normaldoorcontrol = 1; + pixel_x = -6; + pixel_y = 23; + req_access_txt = "3" }, /turf/open/floor/plasteel/dark, -/area/ship/bridge) +/area/ship/security) +"om" = ( +/obj/structure/rack, +/obj/item/pickaxe/drill/jackhammer/old, +/obj/effect/turf_decal/borderfloorblack, +/obj/item/pickaxe/mini, +/obj/item/pickaxe/mini, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) "on" = ( /obj/effect/turf_decal/industrial/warning, /obj/effect/decal/cleanable/dirt, @@ -1285,46 +1241,64 @@ }, /turf/open/floor/engine/hull, /area/ship/cargo) +"oq" = ( +/obj/effect/turf_decal/borderfloorblack{ + dir = 1 + }, +/obj/structure/table, +/obj/machinery/jukebox/boombox, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) "ot" = ( /turf/closed/wall/mineral/plastitanium, /area/ship/crew) -"oI" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/turf/open/floor/carpet/black, -/area/ship/crew) -"oK" = ( -/obj/effect/turf_decal/trimline/opaque/yellow/line, -/obj/effect/turf_decal/siding/thinplating{ - dir = 10 - }, -/obj/machinery/firealarm/directional/west, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/vending/cigarette, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/hallway/central) "oO" = ( /obj/machinery/power/shuttle/engine/fueled/plasma{ dir = 4 }, /turf/open/floor/plating, /area/ship/maintenance/port) -"oQ" = ( -/obj/effect/turf_decal/borderfloorblack{ - dir = 1 +"oY" = ( +/obj/machinery/suit_storage_unit/inherit{ + req_access_txt = "1" }, -/obj/structure/table, -/obj/machinery/jukebox/boombox, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) +/obj/effect/turf_decal/trimline/opaque/yellow/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/structure/sign/poster/contraband/twelve_gauge{ + pixel_x = 32 + }, +/obj/item/clothing/suit/space/hardsuit/security/independent/inteq, +/obj/item/clothing/head/helmet/space/inteq, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security/armory) "pa" = ( /obj/structure/sign/number/nine, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/security/armory) -"pm" = ( -/obj/effect/turf_decal/siding/thinplating, -/obj/effect/turf_decal/trimline/opaque/yellow/line, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/hallway/central) +"pd" = ( +/obj/machinery/photocopier, +/obj/effect/turf_decal/corner/opaque/yellow, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"pt" = ( +/obj/machinery/shower{ + pixel_y = 19 + }, +/obj/structure/curtain, +/obj/effect/turf_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plasteel/showroomfloor, +/area/ship/crew/toilet) "pv" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; @@ -1409,26 +1383,19 @@ }, /turf/open/floor/engine/hull, /area/ship/cargo) -"qr" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 +"qu" = ( +/obj/machinery/cryopod{ + dir = 8 }, -/obj/machinery/firealarm/directional/east, -/obj/structure/sign/poster/contraband/inteq{ - pixel_y = -32 +/obj/structure/railing, +/obj/machinery/light/small/directional/east, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 20; + pixel_y = -5 }, -/obj/structure/closet, -/obj/item/radio, -/obj/item/radio, -/obj/item/radio, -/obj/item/radio, -/obj/item/radio, -/obj/item/radio, -/obj/item/radio, -/obj/item/radio, -/obj/item/radio, -/obj/item/radio, -/turf/open/floor/plasteel/tech, +/obj/effect/turf_decal/techfloor, +/turf/open/floor/plasteel/tech/grid, /area/ship/crew/cryo) "qK" = ( /obj/structure/cable/yellow{ @@ -1452,17 +1419,36 @@ }, /turf/open/floor/plasteel/patterned, /area/ship/cargo) -"qY" = ( -/obj/effect/turf_decal/borderfloorblack{ - dir = 1 +"qS" = ( +/obj/structure/dresser, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/carpet/black, +/area/ship/crew) +"qX" = ( +/obj/structure/rack, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 10; + layer = 2.030 }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/table, -/obj/item/storage/box/cups{ - pixel_y = 10 +/obj/effect/turf_decal/trimline/opaque/yellow/line{ + dir = 10 }, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) +/obj/item/ammo_box/magazine/smgm10mm{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/ammo_box/magazine/smgm10mm{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/gun/ballistic/automatic/smg/inteq{ + pixel_y = -2 + }, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security/armory) "rb" = ( /obj/effect/turf_decal/industrial/warning, /obj/machinery/power/shieldwallgen/atmos{ @@ -1479,14 +1465,6 @@ }, /turf/open/floor/engine/hull, /area/ship/cargo) -"rd" = ( -/obj/machinery/mineral/ore_redemption{ - dir = 1; - output_dir = 1 - }, -/obj/effect/turf_decal/borderfloorblack, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) "re" = ( /obj/structure/cable{ icon_state = "0-8" @@ -1506,21 +1484,6 @@ }, /turf/open/floor/plating, /area/ship/maintenance/starboard) -"rf" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/item/cigbutt, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/carpet/black, -/area/ship/crew) "rh" = ( /turf/closed/wall/mineral/plastitanium, /area/ship/cargo) @@ -1533,6 +1496,17 @@ }, /turf/open/floor/plasteel/dark, /area/ship/crew/office) +"rG" = ( +/obj/effect/turf_decal/borderfloorblack{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table, +/obj/item/storage/box/cups{ + pixel_y = 10 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) "rJ" = ( /obj/structure/railing/corner, /obj/structure/railing/corner{ @@ -1556,17 +1530,25 @@ }, /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) -"rM" = ( -/obj/machinery/atmospherics/pipe/layer_manifold, -/obj/machinery/button/door{ - dir = 1; - id = "colossus_thrusters"; - name = "Thruster Shield Control"; - pixel_x = -6; - pixel_y = -20 +"rL" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 }, -/turf/open/floor/plating, -/area/ship/maintenance/starboard) +/obj/effect/turf_decal/trimline/opaque/yellow/filled/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/light/small/directional/north, +/obj/machinery/door/window/brigdoor/eastright{ + req_access_txt = "3" + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) "rS" = ( /obj/effect/turf_decal/trimline/opaque/yellow/corner{ dir = 8 @@ -1576,6 +1558,23 @@ }, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/fore) +"rW" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/yellow, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/item/radio/intercom/directional/north{ + freerange = 1; + freqlock = 1; + frequency = 1347; + name = "IRMG shortwave intercom" + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) "sb" = ( /obj/effect/turf_decal/box/corners{ dir = 1 @@ -1687,17 +1686,6 @@ }, /turf/open/floor/plating, /area/ship/maintenance/port) -"sI" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/effect/turf_decal/borderfloor{ - dir = 1 - }, -/obj/structure/table/reinforced, -/obj/machinery/photocopier/faxmachine/longrange, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) "sP" = ( /obj/structure/chair{ dir = 4 @@ -1784,13 +1772,24 @@ }, /turf/open/floor/plasteel/dark, /area/ship/crew/office) -"tG" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, +"tB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/turf/open/floor/carpet/orange, -/area/ship/bridge) +/obj/machinery/light/small/directional/west, +/obj/machinery/atmospherics/components/binary/dp_vent_pump/layer4, +/obj/item/tank/internals/plasmaman/full, +/obj/item/tank/internals/plasmaman/full, +/obj/item/tank/internals/oxygen, +/obj/item/tank/internals/oxygen, +/obj/item/tank/internals/oxygen, +/obj/item/tank/internals/oxygen, +/obj/item/tank/internals/oxygen, +/obj/structure/closet/wall{ + dir = 8; + icon_state = "emergency_wall"; + pixel_x = 28 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/port) "tI" = ( /obj/structure/cable{ icon_state = "2-4" @@ -1801,6 +1800,14 @@ /obj/machinery/holopad/emergency/command, /turf/open/floor/carpet/orange, /area/ship/bridge) +"tJ" = ( +/obj/structure/weightmachine/stacklifter, +/obj/effect/turf_decal/borderfloorblack{ + dir = 1 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) "tK" = ( /obj/structure/cable{ icon_state = "1-8" @@ -1815,10 +1822,6 @@ /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/plating, /area/ship/maintenance/starboard) -"tP" = ( -/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, -/turf/open/floor/plating, -/area/ship/security) "tR" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 @@ -1835,20 +1838,6 @@ }, /turf/open/floor/plating, /area/ship/engineering) -"tT" = ( -/obj/structure/table/reinforced, -/obj/machinery/recharger, -/obj/item/screwdriver, -/obj/effect/turf_decal/corner/opaque/yellow, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 8 - }, -/obj/machinery/computer/helm/viewscreen/directional/east, -/turf/open/floor/plasteel/dark, -/area/ship/security) "tX" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/bridge) @@ -1875,30 +1864,9 @@ /obj/effect/landmark/start/head_of_security, /turf/open/floor/carpet/orange, /area/ship/bridge) -"ui" = ( -/obj/structure/table/reinforced, -/obj/item/folder/syndicate{ - desc = "A slick black folder stamped 'Property of Inteq Risk Management Group.'"; - name = "folder" - }, -/obj/item/stamp/law{ - name = "master at arms' rubber stamp" - }, -/obj/item/table_bell{ - pixel_y = 13 - }, -/turf/open/floor/plasteel/dark, -/area/ship/security) -"uq" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/trimline/opaque/yellow/filled/warning{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, +"um" = ( +/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, +/turf/open/floor/plating, /area/ship/security) "uv" = ( /obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, @@ -1952,22 +1920,6 @@ }, /turf/open/floor/plasteel/dark, /area/ship/bridge) -"uA" = ( -/obj/structure/chair/comfy/black{ - dir = 4 - }, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/yellow{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 4 - }, -/obj/machinery/light/directional/west, -/turf/open/floor/plasteel/dark, -/area/ship/security) "uE" = ( /obj/structure/cable{ icon_state = "0-4" @@ -1990,22 +1942,45 @@ }, /turf/open/floor/plasteel/tech, /area/ship/maintenance/starboard) -"va" = ( -/obj/effect/turf_decal/trimline/opaque/yellow/filled/warning{ +"uR" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/machinery/button/door{ + id = "colossus_port"; + name = "Port Cargo Door Control"; + pixel_x = -4; + pixel_y = 23 + }, +/obj/effect/turf_decal/industrial/caution, +/obj/machinery/button/shieldwallgen{ + id = "colossus_cargo_port"; + pixel_x = 5; + pixel_y = 21 + }, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/cargo) +"uT" = ( +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/corner/opaque/brown{ dir = 8 }, -/obj/structure/extinguisher_cabinet/directional/south, -/obj/structure/cable{ - icon_state = "4-8" +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ +/obj/effect/turf_decal/corner/opaque/brown{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/obj/machinery/light_switch{ + pixel_y = 22 }, +/obj/item/paper/crumpled, /turf/open/floor/plasteel/dark, /area/ship/security) +"va" = ( +/obj/machinery/computer/rdconsole/core{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/office) "vc" = ( /obj/machinery/door/airlock{ name = "Head" @@ -2036,12 +2011,16 @@ /obj/machinery/atmospherics/pipe/simple/orange/hidden/layer1, /turf/open/floor/plasteel/tech, /area/ship/maintenance/port) -"vs" = ( -/obj/structure/bed, -/obj/structure/sign/poster/contraband/backdoor_xeno_babes_6{ - pixel_y = -32 +"vq" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 }, -/obj/structure/curtain/bounty, /turf/open/floor/carpet/black, /area/ship/crew) "vv" = ( @@ -2055,20 +2034,14 @@ }, /turf/open/floor/plating, /area/ship/crew/office) -"vw" = ( -/obj/machinery/door/window/northleft{ - dir = 8; - req_access_txt = "3" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +"vz" = ( +/obj/structure/chair/office{ + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 + dir = 6 }, +/obj/effect/landmark/start/warden, /turf/open/floor/plasteel/dark, /area/ship/security) "vH" = ( @@ -2087,17 +2060,19 @@ /obj/item/pen, /turf/open/floor/plasteel/dark, /area/ship/crew/office) -"wg" = ( -/obj/effect/turf_decal/siding/white, -/obj/effect/turf_decal/industrial/warning{ +"wi" = ( +/obj/structure/chair/stool{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/yellow/line{ dir = 4 }, -/obj/machinery/airalarm/directional/west, -/obj/machinery/navbeacon/wayfinding{ - location = "cryo" +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 6 }, +/obj/machinery/light/directional/east, /turf/open/floor/plasteel/tech, -/area/ship/crew/cryo) +/area/ship/security/armory) "wm" = ( /obj/structure/table, /obj/item/reagent_containers/food/drinks/coffee, @@ -2114,23 +2089,6 @@ dir = 1 }, /area/ship/cargo) -"wr" = ( -/obj/machinery/porta_turret/centcom_shuttle/ballistic{ - dir = 6; - name = "ship turret"; - on = 0 - }, -/turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) -"wA" = ( -/obj/structure/bed, -/obj/item/bedsheet/medical, -/obj/structure/curtain, -/obj/effect/turf_decal/borderfloorblack{ - dir = 1 - }, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) "wH" = ( /obj/effect/turf_decal/corner/opaque/yellow{ dir = 1 @@ -2141,12 +2099,29 @@ /obj/machinery/light/directional/west, /turf/open/floor/plasteel/dark, /area/ship/crew/office) +"wQ" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/crew/cryo) "wS" = ( /obj/machinery/cryopod{ dir = 8 }, /turf/open/floor/plasteel/tech/grid, /area/ship/crew/cryo) +"wU" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/obj/structure/curtain, +/obj/effect/turf_decal/borderfloorblack{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) "wW" = ( /obj/structure/cable{ icon_state = "1-2" @@ -2188,24 +2163,6 @@ /obj/effect/turf_decal/steeldecal/steel_decals_central7, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/central) -"xv" = ( -/obj/item/storage/backpack/messenger/inteq, -/obj/item/storage/backpack/messenger/inteq, -/obj/item/storage/backpack/messenger/inteq, -/obj/item/clothing/head/beret/sec/inteq, -/obj/item/clothing/head/beret/sec/inteq, -/obj/item/clothing/head/beret/sec/inteq, -/obj/item/clothing/head/soft/inteq, -/obj/item/clothing/head/soft/inteq, -/obj/item/clothing/head/soft/inteq, -/obj/structure/closet/wall{ - icon_door = "orange_wall"; - name = "uniform closet"; - pixel_y = 28 - }, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/carpet/black, -/area/ship/crew) "xx" = ( /obj/structure/cable{ icon_state = "2-4" @@ -2257,83 +2214,102 @@ }, /turf/open/floor/plasteel/dark, /area/ship/crew/office) -"xV" = ( -/obj/structure/closet/crate/medical, -/obj/machinery/button/door{ - dir = 1; - id = "colossus_starboard"; - name = "Starboard Cargo Door Control"; - pixel_x = -4; - pixel_y = -20 - }, -/obj/effect/turf_decal/industrial/caution{ - dir = 1 +"xO" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/item/storage/backpack/satchel/med, -/obj/item/clothing/shoes/combat, -/obj/item/clothing/glasses/hud/health, -/obj/item/storage/belt/medical/webbing, -/obj/item/clothing/suit/armor/inteq/corpsman, -/obj/item/clothing/head/soft/inteq/corpsman, -/obj/item/clothing/under/syndicate/inteq/skirt/corpsman, -/obj/item/clothing/under/syndicate/inteq/corpsman, -/obj/machinery/button/shieldwallgen{ - dir = 1; - id = "colossus_cargo_starboard"; - pixel_x = 5; - pixel_y = -19 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 }, +/obj/structure/closet/crate, +/obj/item/clothing/suit/space/inteq, +/obj/item/clothing/suit/space/inteq, +/obj/item/clothing/suit/space/inteq, +/obj/item/clothing/head/helmet/space/inteq, +/obj/item/clothing/head/helmet/space/inteq, +/obj/item/clothing/head/helmet/space/inteq, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo) +"xT" = ( +/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/door/poddoor{ + dir = 4; + id = "colossus_windows"; + name = "Window Shield" + }, +/turf/open/floor/plating, +/area/ship/crew) "yf" = ( /obj/structure/railing{ dir = 8 }, /turf/open/floor/plasteel/stairs, /area/ship/cargo) -"zh" = ( -/obj/structure/cable{ - icon_state = "1-2" +"ym" = ( +/obj/structure/rack, +/obj/item/target/clown{ + pixel_x = -5; + pixel_y = 10 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 4 +/obj/item/target{ + pixel_y = 5 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/hallway/fore) -"zm" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/item/target{ + pixel_x = 5 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ +/obj/effect/turf_decal/borderfloorblack, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) +"yP" = ( +/obj/effect/turf_decal/trimline/opaque/yellow/line, +/obj/effect/turf_decal/siding/thinplating, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/obj/structure/sign/poster/contraband/hacking_guide{ + pixel_y = -32 }, -/obj/machinery/door/airlock/public/glass{ - dir = 4; - name = "Cryogenic Storage" +/obj/structure/chair{ + dir = 1 }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 +/turf/open/floor/plasteel/patterned/grid, +/area/ship/hallway/central) +"zh" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 }, -/turf/open/floor/plasteel/tech, -/area/ship/crew/cryo) +/turf/open/floor/plasteel/patterned/grid, +/area/ship/hallway/fore) "zF" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/crew) -"zT" = ( -/obj/structure/cable{ - icon_state = "1-2" +"zI" = ( +/obj/item/clothing/under/syndicate/inteq, +/obj/item/clothing/under/syndicate/inteq, +/obj/item/clothing/under/syndicate/inteq, +/obj/item/clothing/under/syndicate/inteq/skirt, +/obj/item/clothing/under/syndicate/inteq/skirt, +/obj/item/clothing/under/syndicate/inteq/skirt, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/shoes/sneakers/black, +/obj/item/clothing/shoes/sneakers/black, +/obj/item/clothing/shoes/sneakers/black, +/obj/structure/closet/wall{ + icon_door = "orange_wall"; + name = "uniform closet"; + pixel_y = 28 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/turf/open/floor/plasteel/dark, -/area/ship/security) +/turf/open/floor/carpet/black, +/area/ship/crew) "zW" = ( /obj/structure/cable{ icon_state = "1-2" @@ -2363,6 +2339,18 @@ }, /turf/open/floor/plasteel/tech, /area/ship/engineering) +"Ac" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/carpet/black, +/area/ship/crew) "Ae" = ( /obj/structure/cable{ icon_state = "1-2" @@ -2375,68 +2363,31 @@ }, /turf/open/floor/carpet/orange, /area/ship/bridge) -"Ak" = ( +"Ar" = ( /obj/structure/cable{ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/turf/open/floor/carpet/black, -/area/ship/crew) -"Ao" = ( -/obj/machinery/porta_turret/centcom_shuttle/ballistic{ - dir = 6; - name = "ship turret"; - on = 0 - }, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/bridge) -"AB" = ( -/turf/open/floor/carpet/orange, -/area/ship/bridge) -"AG" = ( -/obj/structure/cable{ - icon_state = "1-4" +/obj/machinery/door/airlock/public/glass{ + dir = 4; + name = "Cryogenic Storage" }, -/obj/effect/turf_decal/borderfloor{ +/obj/machinery/door/firedoor/border_only{ dir = 4 }, -/obj/machinery/modular_computer/console/preset/command{ +/obj/machinery/door/firedoor/border_only{ dir = 8 }, -/obj/machinery/button/door{ - dir = 1; - id = "colossus_windows"; - name = "Window Lockdown"; - pixel_x = -4; - pixel_y = -21 - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"AL" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/computer/cryopod/directional/north{ - pixel_y = 25 - }, /turf/open/floor/plasteel/tech, /area/ship/crew/cryo) -"AM" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/tech, -/area/ship/security/armory) +"AB" = ( +/turf/open/floor/carpet/orange, +/area/ship/bridge) "AP" = ( /obj/item/radio/intercom/directional/west, /obj/effect/turf_decal/corner/opaque/yellow{ @@ -2485,6 +2436,21 @@ /obj/effect/decal/cleanable/oil/streak, /turf/open/floor/plasteel/tech, /area/ship/maintenance/port) +"Bt" = ( +/obj/machinery/suit_storage_unit/inherit{ + req_access_txt = "1" + }, +/obj/effect/turf_decal/trimline/opaque/yellow/line{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/machinery/airalarm/directional/west, +/obj/item/clothing/suit/space/hardsuit/security/independent/inteq, +/obj/item/clothing/head/helmet/space/inteq, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security/armory) "BA" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 4 @@ -2500,6 +2466,24 @@ }, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/fore) +"BH" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/navbeacon/wayfinding{ + codes_txt = "patrol;next_patrol=starboard"; + location = "crew" + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = -5 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/carpet/black, +/area/ship/crew) "BK" = ( /obj/effect/turf_decal/box/corners{ dir = 4 @@ -2570,6 +2554,25 @@ /obj/item/trash/boritos, /turf/open/floor/plasteel/dark, /area/ship/crew/office) +"Ct" = ( +/obj/machinery/button/door{ + dir = 1; + id = "colossus_starboard"; + name = "Starboard Cargo Door Control"; + pixel_x = 4; + pixel_y = -20 + }, +/obj/effect/turf_decal/industrial/caution{ + dir = 1 + }, +/obj/machinery/button/shieldwallgen{ + dir = 1; + id = "colossus_cargo_starboard"; + pixel_x = -5; + pixel_y = -19 + }, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/cargo) "Cu" = ( /obj/effect/turf_decal/industrial/traffic{ dir = 4 @@ -2596,21 +2599,14 @@ /obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, /turf/open/floor/plating, /area/ship/crew/office) -"CP" = ( -/obj/effect/turf_decal/trimline/opaque/yellow/line, -/obj/effect/turf_decal/siding/thinplating, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 4 - }, -/obj/structure/sign/poster/contraband/hacking_guide{ - pixel_y = -32 - }, -/obj/structure/chair{ - dir = 1 +"CA" = ( +/obj/structure/cable{ + icon_state = "2-8" }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/hallway/central) -"Dj" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/carpet/orange, +/area/ship/bridge) +"CG" = ( /obj/machinery/suit_storage_unit/inherit{ req_access_txt = "1" }, @@ -2620,14 +2616,62 @@ /obj/effect/turf_decal/siding/thinplating/dark{ dir = 8 }, -/obj/machinery/airalarm/directional/west, +/obj/machinery/light/directional/west, /obj/item/clothing/suit/space/hardsuit/security/independent/inteq, /obj/item/clothing/head/helmet/space/inteq, /turf/open/floor/plasteel/tech/grid, /area/ship/security/armory) +"Da" = ( +/obj/structure/closet/secure_closet/wall{ + dir = 4; + icon_door = "solgov_wall"; + icon_state = "solgov_wall"; + name = "vanguard's locker"; + pixel_x = -28; + req_access_txt = "58" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/item/clothing/glasses/hud/security/sunglasses/inteq, +/obj/item/clothing/mask/gas/sechailer/inteq, +/obj/item/clothing/gloves/tackler/combat/insulated, +/obj/item/clothing/shoes/combat, +/obj/item/storage/belt/security/webbing/inteq/alt, +/obj/item/storage/backpack/messenger/inteq, +/obj/item/megaphone/command, +/obj/item/clothing/under/syndicate/inteq/skirt, +/obj/item/clothing/under/syndicate/inteq, +/obj/item/clothing/suit/armor/hos/inteq, +/obj/item/clothing/head/beret/sec/hos/inteq, +/obj/item/radio/headset/inteq/alt/captain, +/obj/item/areaeditor/shuttle, +/obj/item/shield/riot/tele, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/item/storage/belt/security/webbing/inteq, +/obj/item/storage/belt/military/assault, +/turf/open/floor/carpet/orange, +/area/ship/bridge) "Dq" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/security/armory) +"Dr" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Office" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/borderfloor{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) "DD" = ( /obj/structure/cable/yellow{ icon_state = "0-8" @@ -2654,65 +2698,59 @@ }, /turf/open/floor/plasteel/dark, /area/ship/crew/office) -"DX" = ( -/obj/structure/cable{ - icon_state = "1-8" +"DS" = ( +/obj/effect/turf_decal/trimline/opaque/yellow/warning{ + dir = 4 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 }, +/obj/machinery/firealarm/directional/north, /obj/structure/cable{ - icon_state = "2-8" + icon_state = "4-8" }, -/turf/open/floor/carpet/black, -/area/ship/crew) -"Er" = ( -/obj/structure/chair{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/effect/landmark/start/security_officer, -/turf/open/floor/plasteel/dark, -/area/ship/crew/office) -"Eu" = ( -/obj/structure/closet/secure_closet{ - icon_state = "sec"; - name = "equipment locker"; - req_access_txt = "1" +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"DW" = ( +/obj/structure/rack, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/ammo_box/magazine/co9mm{ + pixel_x = 5 }, -/obj/item/clothing/mask/gas/sechailer/inteq, -/obj/item/clothing/mask/gas/sechailer/inteq, -/obj/item/clothing/mask/gas/sechailer/inteq, -/obj/item/storage/belt/security/webbing/inteq, -/obj/item/storage/belt/security/webbing/inteq, -/obj/item/storage/belt/security/webbing/inteq, -/obj/item/clothing/glasses/hud/security/sunglasses/inteq, -/obj/item/clothing/glasses/hud/security/sunglasses/inteq, -/obj/item/clothing/glasses/hud/security/sunglasses/inteq, -/obj/item/melee/baton, -/obj/item/melee/baton, -/obj/item/melee/baton, -/obj/effect/turf_decal/trimline/opaque/yellow/line{ - dir = 8 +/obj/item/ammo_box/magazine/co9mm{ + pixel_x = -5 }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 +/obj/item/ammo_box/magazine/co9mm{ + pixel_x = 5 }, -/obj/item/storage/box/handcuffs, -/obj/structure/sign/warning/nosmoking{ - pixel_y = 28 +/obj/item/ammo_box/magazine/co9mm{ + pixel_x = -5 }, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable{ - icon_state = "0-4" +/obj/item/gun/ballistic/automatic/pistol/commander/inteq{ + pixel_y = 5 }, -/obj/item/storage/belt/security/webbing/inteq/alt, -/obj/item/storage/belt/security/webbing/inteq/alt, -/obj/item/storage/belt/security/webbing/inteq/alt, +/obj/item/gun/ballistic/automatic/pistol/commander/inteq, +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/trimline/opaque/yellow/line, /turf/open/floor/plasteel/tech/grid, /area/ship/security/armory) +"Er" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/landmark/start/security_officer, +/turf/open/floor/plasteel/dark, +/area/ship/crew/office) "EC" = ( /obj/structure/table, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ @@ -2731,6 +2769,22 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel/dark, /area/ship/crew/office) +"EI" = ( +/obj/effect/turf_decal/trimline/opaque/yellow/filled/warning{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) "EJ" = ( /obj/structure/cable{ icon_state = "1-8" @@ -2768,16 +2822,6 @@ }, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/fore) -"Fl" = ( -/obj/structure/rack, -/obj/item/pickaxe/drill/jackhammer/old, -/obj/effect/turf_decal/borderfloorblack, -/obj/item/pickaxe/mini, -/obj/item/pickaxe/mini, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) "Fq" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 8 @@ -2798,72 +2842,50 @@ /obj/item/pushbroom, /turf/open/floor/plasteel/tech, /area/ship/maintenance/port) -"FQ" = ( -/obj/machinery/computer/rdconsole/core{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/crew/office) -"FW" = ( -/obj/effect/turf_decal/techfloor, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/sign/poster/official/safety_internals{ - pixel_x = -32 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/hallway/port) -"FX" = ( -/obj/effect/turf_decal/borderfloorblack{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/rack, -/obj/item/roller, -/obj/item/roller{ - pixel_y = 5 +"FR" = ( +/obj/machinery/button/door{ + id = "colossus_port"; + name = "Port Cargo Door Control"; + pixel_x = 4; + pixel_y = 23 }, -/obj/item/roller{ - pixel_y = 10 +/obj/effect/turf_decal/industrial/caution, +/obj/structure/ore_box, +/obj/machinery/button/shieldwallgen{ + id = "colossus_cargo_port"; + pixel_x = -5; + pixel_y = 21 }, -/turf/open/floor/plasteel/patterned, +/turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo) -"Ga" = ( -/obj/item/kirbyplants/random, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/newscaster/directional/north, -/turf/open/floor/carpet/black, -/area/ship/crew) "Gl" = ( /obj/structure/sign/number/one{ dir = 1 }, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/crew/office) -"Gy" = ( -/obj/machinery/light_switch{ - dir = 4; - pixel_x = -20; - pixel_y = 10 +"Gp" = ( +/obj/effect/turf_decal/siding/thinplating, +/obj/effect/turf_decal/trimline/opaque/yellow/line, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/hallway/central) +"GF" = ( +/obj/structure/toilet{ + dir = 8 }, +/obj/structure/curtain, +/obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "0-8" }, -/obj/structure/cable{ - icon_state = "2-4" +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/directional/east, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/plasteel/showroomfloor, +/area/ship/crew/toilet) "GL" = ( /obj/machinery/atmospherics/pipe/layer_manifold/visible, /obj/structure/closet/wall{ @@ -2905,29 +2927,15 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /turf/open/floor/carpet/black, /area/ship/crew) -"Hc" = ( -/obj/machinery/power/apc/auto_name/directional/east, +"GX" = ( +/obj/item/kirbyplants/random, /obj/structure/cable{ - icon_state = "0-8" - }, -/obj/effect/turf_decal/borderfloor{ - dir = 4 + icon_state = "2-4" }, -/obj/effect/turf_decal/steeldecal/steel_decals_central7, /obj/effect/decal/cleanable/dirt/dust, -/obj/item/clothing/suit/space/inteq, -/obj/item/clothing/head/helmet/space/inteq, -/obj/machinery/suit_storage_unit/inherit, -/turf/open/floor/plasteel/tech, -/area/ship/hallway/port) -"Hd" = ( -/obj/docking_port/stationary{ - dwidth = 15; - height = 15; - width = 30 - }, -/turf/template_noop, -/area/template_noop) +/obj/machinery/newscaster/directional/north, +/turf/open/floor/carpet/black, +/area/ship/crew) "He" = ( /obj/effect/turf_decal/industrial/traffic{ dir = 8 @@ -2993,6 +3001,34 @@ }, /turf/open/floor/plating, /area/ship/bridge) +"HF" = ( +/obj/structure/closet/crate/medical, +/obj/machinery/button/door{ + dir = 1; + id = "colossus_starboard"; + name = "Starboard Cargo Door Control"; + pixel_x = -4; + pixel_y = -20 + }, +/obj/effect/turf_decal/industrial/caution{ + dir = 1 + }, +/obj/item/storage/backpack/satchel/med, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/glasses/hud/health, +/obj/item/storage/belt/medical/webbing, +/obj/item/clothing/suit/armor/inteq/corpsman, +/obj/item/clothing/head/soft/inteq/corpsman, +/obj/item/clothing/under/syndicate/inteq/skirt/corpsman, +/obj/item/clothing/under/syndicate/inteq/corpsman, +/obj/machinery/button/shieldwallgen{ + dir = 1; + id = "colossus_cargo_starboard"; + pixel_x = 5; + pixel_y = -19 + }, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/cargo) "HG" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; @@ -3025,21 +3061,37 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/plasteel/dark, /area/ship/crew/office) -"It" = ( -/turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) -"IF" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ +"Ic" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/effect/turf_decal/borderfloor{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ +/obj/effect/turf_decal/steeldecal/steel_decals_central7, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/clothing/suit/space/inteq, +/obj/item/clothing/head/helmet/space/inteq, +/obj/machinery/suit_storage_unit/inherit, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/port) +"Il" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/turf_decal/steeldecal/steel_decals_central7{ dir = 4 }, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "0-4" }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/hallway/central) +/obj/machinery/suit_storage_unit/inherit, +/obj/item/clothing/suit/space/hardsuit/security/independent/inteq, +/obj/item/tank/jetpack/oxygen, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/port) +"It" = ( +/turf/closed/wall/mineral/plastitanium, +/area/ship/bridge) "II" = ( /turf/closed/wall/mineral/plastitanium, /area/ship/engineering) @@ -3056,41 +3108,35 @@ "IS" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/crew/toilet) -"Je" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 +"Jc" = ( +/obj/machinery/atmospherics/pipe/layer_manifold, +/obj/machinery/button/door{ + dir = 1; + id = "colossus_thrusters"; + name = "Thruster Shield Control"; + pixel_x = -6; + pixel_y = -20 }, -/obj/effect/turf_decal/trimline/opaque/yellow/filled/warning{ - dir = 4 +/turf/open/floor/plating, +/area/ship/maintenance/starboard) +"JD" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering) +"JM" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/light/small/directional/north, -/obj/machinery/door/window/brigdoor/eastright{ - req_access_txt = "3" +/obj/structure/cable{ + icon_state = "1-8" }, -/turf/open/floor/plasteel/tech, -/area/ship/security/armory) -"Jl" = ( +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "2-8" }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/table, -/obj/item/flashlight/lamp/green, -/turf/open/floor/carpet/black, -/area/ship/crew) -"JD" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/engineering) -"JH" = ( -/obj/structure/sign/number/one, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/security/armory) +/obj/effect/landmark/observer_start, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/hallway/central) "JO" = ( /obj/structure/cable/yellow{ icon_state = "2-4" @@ -3102,38 +3148,6 @@ /obj/structure/catwalk/over/plated_catwalk/dark, /turf/open/floor/plating, /area/ship/engineering) -"JT" = ( -/obj/machinery/firealarm/directional/west, -/obj/structure/weightmachine/stacklifter, -/obj/effect/turf_decal/borderfloorblack{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) -"JV" = ( -/obj/structure/rack, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 10; - layer = 2.030 - }, -/obj/effect/turf_decal/trimline/opaque/yellow/line{ - dir = 10 - }, -/obj/item/ammo_box/magazine/smgm10mm{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/ammo_box/magazine/smgm10mm{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/gun/ballistic/automatic/smg/inteq{ - pixel_y = -2 - }, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/plasteel/tech/grid, -/area/ship/security/armory) "Kk" = ( /obj/structure/cable{ icon_state = "1-2" @@ -3162,25 +3176,22 @@ }, /turf/open/floor/plasteel/patterned, /area/ship/cargo) -"Ku" = ( -/obj/machinery/button/door{ - dir = 1; - id = "colossus_starboard"; - name = "Starboard Cargo Door Control"; - pixel_x = 4; - pixel_y = -20 +"Kv" = ( +/obj/structure/chair/comfy/black{ + dir = 4 }, -/obj/effect/turf_decal/industrial/caution{ +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/yellow{ dir = 1 }, -/obj/machinery/button/shieldwallgen{ - dir = 1; - id = "colossus_cargo_starboard"; - pixel_x = -5; - pixel_y = -19 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 }, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/cargo) +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel/dark, +/area/ship/security) "KF" = ( /obj/effect/turf_decal/trimline/opaque/yellow/line{ dir = 1 @@ -3214,32 +3225,23 @@ }, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo) -"Lg" = ( -/obj/structure/reagent_dispensers/peppertank{ - pixel_y = 28 - }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 9 +"Ld" = ( +/obj/effect/turf_decal/techfloor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/sign/poster/official/safety_internals{ + pixel_x = -32 }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/plasteel/tech, -/area/ship/security/armory) -"Lj" = ( -/obj/machinery/porta_turret/centcom_shuttle/ballistic{ - dir = 5; - name = "ship turret"; - on = 0 + icon_state = "2-4" }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/port) +"Le" = ( +/obj/structure/sign/number/one, /turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/bridge) +/area/ship/security/armory) "Lm" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /obj/item/trash/can, @@ -3291,6 +3293,18 @@ "Lz" = ( /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo) +"LG" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) "LK" = ( /obj/structure/railing/corner{ dir = 1 @@ -3306,22 +3320,6 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) -"LU" = ( -/obj/effect/turf_decal/corner/opaque/yellow, -/obj/effect/turf_decal/corner/opaque/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 4 - }, -/obj/structure/sign/poster/official/fruit_bowl{ - pixel_x = 32 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/newscaster/security_unit/directional/north, -/obj/machinery/rnd/server, -/turf/open/floor/plasteel/dark, -/area/ship/crew/office) "Md" = ( /obj/machinery/power/shuttle/engine/electric{ dir = 4 @@ -3350,40 +3348,11 @@ /obj/item/cigbutt, /turf/open/floor/plasteel/dark, /area/ship/crew/office) -"Mm" = ( -/obj/item/clothing/glasses/hud/security/sunglasses/inteq, -/obj/item/clothing/mask/gas/sechailer/inteq, -/obj/item/clothing/gloves/tackler/combat/insulated, -/obj/item/clothing/shoes/combat, -/obj/item/storage/belt/security/webbing/inteq/alt, -/obj/item/storage/backpack/messenger/inteq, -/obj/item/clothing/under/syndicate/inteq/skirt, -/obj/item/clothing/under/syndicate/inteq, -/obj/structure/closet/secure_closet{ - anchored = 1; - can_be_unanchored = 1; - icon_state = "warden"; - name = "master at arms' locker"; - req_access_txt = "3" - }, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/yellow, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/suit/armor/vest/bulletproof, -/obj/item/clothing/head/warden/drill{ - desc = "A special armored campaign hat with the IRMG insignia emblazoned on it. Uses reinforced fabric to offer sufficient protection."; - name = "master at arms' campaign hat" - }, -/obj/item/megaphone/sec, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 4 - }, -/obj/item/storage/belt/security/webbing/inteq, -/obj/item/storage/belt/military/assault, -/turf/open/floor/plasteel/dark, -/area/ship/security) +"Mq" = ( +/obj/effect/turf_decal/trimline/opaque/yellow/line, +/obj/effect/turf_decal/siding/thinplating, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/hallway/central) "Mx" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /turf/open/floor/plasteel/patterned/cargo_one, @@ -3413,6 +3382,31 @@ }, /turf/open/floor/plasteel/tech, /area/ship/engineering) +"MQ" = ( +/obj/structure/rack, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/opaque/yellow/line{ + dir = 8 + }, +/obj/item/ammo_box/magazine/gal{ + pixel_x = -5 + }, +/obj/item/ammo_box/magazine/gal{ + pixel_x = 5 + }, +/obj/item/gun/ballistic/automatic/gal/inteq{ + pixel_x = -8; + pixel_y = 3 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security/armory) "MU" = ( /obj/effect/turf_decal/industrial/traffic{ dir = 4 @@ -3426,14 +3420,27 @@ }, /turf/open/floor/plasteel/patterned, /area/ship/cargo) -"Nb" = ( -/obj/machinery/porta_turret/centcom_shuttle/ballistic{ - dir = 5; - name = "ship turret"; - on = 0 +"Nf" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 }, -/turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) +/obj/machinery/firealarm/directional/east, +/obj/structure/sign/poster/contraband/inteq{ + pixel_y = -32 + }, +/obj/structure/closet, +/obj/item/radio, +/obj/item/radio, +/obj/item/radio, +/obj/item/radio, +/obj/item/radio, +/obj/item/radio, +/obj/item/radio, +/obj/item/radio, +/obj/item/radio, +/obj/item/radio, +/turf/open/floor/plasteel/tech, +/area/ship/crew/cryo) "Nz" = ( /obj/structure/chair{ dir = 4 @@ -3441,15 +3448,36 @@ /obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel/dark, /area/ship/crew/office) -"NA" = ( +"NH" = ( /obj/structure/cable{ - icon_state = "1-4" + icon_state = "2-8" }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/bed, -/obj/structure/curtain/bounty, -/turf/open/floor/carpet/black, -/area/ship/crew) +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/machinery/light/directional/north, +/obj/item/storage/fancy/cigarettes/cigars/havana, +/obj/item/lighter{ + pixel_y = 5 + }, +/obj/item/toy/figure/vanguard{ + pixel_x = -10; + pixel_y = 5 + }, +/obj/machinery/turretid/lethal{ + pixel_y = 32 + }, +/obj/structure/table/reinforced, +/obj/item/paper_bin, +/obj/item/pen/fountain, +/obj/item/gps{ + pixel_x = 12 + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) "NP" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/corner/opaque/yellow, @@ -3465,23 +3493,29 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/dark, /area/ship/crew/office) -"Ob" = ( -/obj/machinery/suit_storage_unit/inherit{ - req_access_txt = "1" - }, -/obj/effect/turf_decal/trimline/opaque/yellow/line{ +"NQ" = ( +/obj/effect/turf_decal/siding/white, +/obj/effect/turf_decal/industrial/warning{ dir = 4 }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 +/obj/machinery/airalarm/directional/west, +/obj/machinery/navbeacon/wayfinding{ + location = "cryo" }, -/obj/structure/sign/poster/contraband/twelve_gauge{ - pixel_x = 32 +/turf/open/floor/plasteel/tech, +/area/ship/crew/cryo) +"NX" = ( +/obj/machinery/mineral/ore_redemption{ + dir = 1; + output_dir = 1 }, -/obj/item/clothing/suit/space/hardsuit/security/independent/inteq, -/obj/item/clothing/head/helmet/space/inteq, -/turf/open/floor/plasteel/tech/grid, -/area/ship/security/armory) +/obj/effect/turf_decal/borderfloorblack, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) +"Oa" = ( +/obj/machinery/porta_turret/ship/ballistic, +/turf/closed/wall/mineral/plastitanium, +/area/ship/bridge) "Oc" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -3505,24 +3539,25 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/dark, /area/ship/crew/office) -"Oe" = ( -/obj/machinery/light_switch{ - dir = 1; - pixel_x = 5; - pixel_y = -20 - }, -/obj/effect/turf_decal/corner/opaque/yellow, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ship/crew/office) "Oo" = ( /obj/structure/sign/number/eight{ dir = 1 }, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/crew/office) +"Op" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/bed, +/obj/structure/curtain/bounty, +/turf/open/floor/carpet/black, +/area/ship/crew) +"Ou" = ( +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plasteel/tech/grid, +/area/ship/external/dark) "Ow" = ( /obj/structure/sign/number/nine{ dir = 1 @@ -3576,6 +3611,12 @@ /obj/item/cigbutt, /turf/open/floor/plating, /area/ship/maintenance/port) +"Pj" = ( +/obj/machinery/autolathe, +/obj/effect/turf_decal/borderfloorblack, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) "Pl" = ( /obj/machinery/light/small/directional/east, /obj/machinery/atmospherics/pipe/simple/orange/hidden/layer1{ @@ -3611,6 +3652,14 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/ship/maintenance/port) +"Pq" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) "Pv" = ( /obj/effect/turf_decal/corner/opaque/yellow, /obj/effect/turf_decal/corner/opaque/brown{ @@ -3618,19 +3667,6 @@ }, /turf/open/floor/plasteel/dark, /area/ship/crew/office) -"Px" = ( -/obj/structure/chair/stool{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/opaque/yellow/line{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 6 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/plasteel/tech, -/area/ship/security/armory) "PK" = ( /obj/structure/cable{ icon_state = "1-2" @@ -3646,39 +3682,18 @@ /obj/structure/sign/number/four, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/security/armory) -"PY" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/machinery/button/door{ - id = "colossus_port"; - name = "Port Cargo Door Control"; - pixel_x = -4; - pixel_y = 23 - }, -/obj/effect/turf_decal/industrial/caution, -/obj/machinery/button/shieldwallgen{ - id = "colossus_cargo_port"; +"Qj" = ( +/obj/machinery/light_switch{ + dir = 1; pixel_x = 5; - pixel_y = 21 - }, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/cargo) -"Qa" = ( -/obj/structure/table/reinforced, -/obj/structure/cable{ - icon_state = "1-8" + pixel_y = -20 }, -/obj/machinery/light/directional/south, -/obj/item/radio/intercom/directional/south, -/obj/item/storage/lockbox/medal/sec{ - pixel_y = 5 +/obj/effect/turf_decal/corner/opaque/yellow, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 }, -/obj/item/spacecash/bundle/c1000, -/obj/item/spacecash/bundle/c1000, -/obj/item/spacecash/bundle/c1000, -/obj/item/spacecash/bundle/c1000, -/obj/item/spacecash/bundle/c1000, -/turf/open/floor/plasteel/tech, -/area/ship/bridge) +/turf/open/floor/plasteel/dark, +/area/ship/crew/office) "Qm" = ( /obj/effect/turf_decal/trimline/opaque/yellow/line{ dir = 1 @@ -3767,6 +3782,10 @@ /obj/machinery/light/directional/north, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/central) +"QZ" = ( +/obj/machinery/porta_turret/ship/ballistic, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/bridge) "Rb" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ name = "exhaust injector" @@ -3788,18 +3807,6 @@ }, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/central) -"Rs" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 - }, -/turf/open/floor/plasteel/dark, -/area/ship/security) "Ru" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -3816,35 +3823,6 @@ }, /turf/open/floor/plating, /area/ship/engineering) -"RC" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/navbeacon/wayfinding{ - codes_txt = "patrol;next_patrol=starboard"; - location = "crew" - }, -/obj/machinery/light_switch{ - dir = 4; - pixel_x = -20; - pixel_y = -5 - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/carpet/black, -/area/ship/crew) -"RE" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/light/small/directional/west, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 6 - }, -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plasteel/tech/grid, -/area/ship/crew/cryo) "RH" = ( /obj/effect/turf_decal/industrial/warning{ dir = 1 @@ -3855,6 +3833,16 @@ }, /turf/open/floor/engine/hull, /area/ship/cargo) +"RI" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) "RJ" = ( /obj/structure/cable{ icon_state = "1-2" @@ -3874,22 +3862,6 @@ /obj/machinery/atmospherics/pipe/simple/orange/hidden/layer1, /turf/open/floor/plasteel/tech, /area/ship/engineering) -"RN" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/security) -"RS" = ( -/obj/structure/table/reinforced, -/obj/machinery/computer/secure_data/laptop{ - dir = 4 - }, -/obj/effect/turf_decal/corner/opaque/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/security) "RW" = ( /obj/effect/turf_decal/box/corners{ dir = 8 @@ -3907,6 +3879,27 @@ /obj/effect/landmark/start/station_engineer, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo) +"Sa" = ( +/obj/effect/turf_decal/borderfloor{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/door/airlock/security{ + dir = 4; + id_tag = "colossus_armory"; + name = "Armory"; + req_access_txt = "1" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) "Sb" = ( /obj/structure/cable{ icon_state = "1-2" @@ -3920,14 +3913,6 @@ /obj/machinery/atmospherics/pipe/simple/orange/hidden/layer1, /turf/open/floor/plasteel/tech, /area/ship/engineering) -"Sf" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/turf/open/floor/plasteel/tech, -/area/ship/crew/cryo) "Sg" = ( /obj/effect/turf_decal/box/corners, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -3936,6 +3921,23 @@ /obj/item/cigbutt, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo) +"Sj" = ( +/obj/structure/table/reinforced, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/light/directional/south, +/obj/item/radio/intercom/directional/south, +/obj/item/storage/lockbox/medal/sec{ + pixel_y = 5 + }, +/obj/item/spacecash/bundle/c1000, +/obj/item/spacecash/bundle/c1000, +/obj/item/spacecash/bundle/c1000, +/obj/item/spacecash/bundle/c1000, +/obj/item/spacecash/bundle/c1000, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) "Sp" = ( /obj/effect/turf_decal/trimline/opaque/yellow/line{ dir = 1 @@ -3968,12 +3970,6 @@ }, /turf/open/floor/plasteel/patterned, /area/ship/cargo) -"Sw" = ( -/obj/machinery/autolathe, -/obj/effect/turf_decal/borderfloorblack, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) "SC" = ( /obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, /obj/structure/cable{ @@ -3986,22 +3982,6 @@ }, /turf/open/floor/plating, /area/ship/bridge) -"SR" = ( -/obj/structure/rack, -/obj/item/target/syndicate{ - pixel_x = -5; - pixel_y = 10 - }, -/obj/item/target/syndicate{ - pixel_y = 5 - }, -/obj/item/target/alien{ - pixel_x = 5 - }, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/borderfloorblack, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) "Th" = ( /obj/machinery/power/port_gen/pacman/super, /obj/structure/cable/yellow{ @@ -4043,22 +4023,20 @@ /obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo) -"TB" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 +"Tt" = ( +/obj/effect/turf_decal/siding/thinplating, +/obj/effect/turf_decal/trimline/opaque/yellow/line, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/hallway/central) +"Tz" = ( +/obj/machinery/autolathe, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 }, -/obj/structure/closet/crate, -/obj/item/clothing/suit/space/inteq, -/obj/item/clothing/suit/space/inteq, -/obj/item/clothing/suit/space/inteq, -/obj/item/clothing/head/helmet/space/inteq, -/obj/item/clothing/head/helmet/space/inteq, -/obj/item/clothing/head/helmet/space/inteq, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/cargo) +/obj/effect/turf_decal/corner/opaque/yellow, +/turf/open/floor/plasteel/dark, +/area/ship/security) "TF" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1; @@ -4066,52 +4044,62 @@ }, /turf/open/floor/engine/hull, /area/ship/engineering) -"TH" = ( -/obj/machinery/photocopier, -/obj/effect/turf_decal/corner/opaque/yellow, -/obj/effect/turf_decal/corner/opaque/brown{ +"TZ" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ dir = 4 }, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/plasteel/dark, -/area/ship/security) -"TX" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/item/radio/intercom/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"Ue" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/cable{ - icon_state = "2-8" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 + dir = 4 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/hallway/central) +"Uj" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 }, -/turf/open/floor/carpet/black, -/area/ship/crew) -"Ud" = ( /obj/structure/cable{ - icon_state = "2-8" + icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 10 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 4 +/obj/structure/sink{ + dir = 1; + pixel_y = -12 }, -/turf/open/floor/plasteel/dark, -/area/ship/security) -"Ui" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin{ - pixel_y = 4 +/obj/structure/mirror{ + pixel_y = -32 }, -/obj/item/pen/fourcolor, -/obj/effect/turf_decal/corner/opaque/yellow, -/obj/effect/turf_decal/corner/opaque/brown{ +/turf/open/floor/plasteel/showroomfloor, +/area/ship/crew/toilet) +"Um" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/machinery/light/directional/east, -/turf/open/floor/plasteel/dark, -/area/ship/security) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/hallway/central) "Ur" = ( /obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, /obj/machinery/door/firedoor, @@ -4142,121 +4130,36 @@ }, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/hallway/fore) -"Vd" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/effect/turf_decal/corner/opaque/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/corner/opaque/yellow, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 4 - }, -/obj/item/radio/intercom/directional/north{ - freerange = 1; - freqlock = 1; - frequency = 1347; - name = "IRMG shortwave intercom" - }, -/turf/open/floor/plasteel/dark, -/area/ship/security) "Ve" = ( /obj/structure/weightmachine/weightlifter, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo) -"Vr" = ( -/obj/structure/rack, -/obj/item/storage/toolbox/ammo/c10mm{ - pixel_x = 2; - pixel_y = 7 - }, -/obj/item/storage/toolbox/ammo/c9mm{ - pixel_y = 2 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating/dark, -/obj/effect/turf_decal/trimline/opaque/yellow/line{ - dir = 6 - }, -/obj/item/storage/toolbox/ammo/a308{ - pixel_x = -2; - pixel_y = -2 - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/security/armory) -"VJ" = ( -/obj/effect/turf_decal/trimline/opaque/yellow/line, -/obj/effect/turf_decal/siding/thinplating, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/hallway/central) -"VR" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 8 - }, -/obj/machinery/light/directional/north, -/obj/machinery/turretid{ - lethal = 1; - pixel_y = 32; - req_access = null; - req_access_txt = "58" - }, +"VD" = ( /obj/structure/table/reinforced, -/obj/item/toy/figure/vanguard{ - pixel_x = -10; - pixel_y = 5 - }, -/obj/item/paper_bin, -/obj/item/pen/fountain, -/obj/item/gps{ - pixel_x = 12 - }, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"VY" = ( -/obj/machinery/navbeacon/wayfinding{ - location = "armory" +/obj/item/folder/syndicate{ + desc = "A slick black folder stamped 'Property of Inteq Risk Management Group.'"; + name = "folder" }, -/obj/structure/cable{ - icon_state = "1-2" +/obj/item/stamp/law{ + name = "master at arms' rubber stamp" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 4 +/obj/item/table_bell{ + pixel_y = 13 }, /turf/open/floor/plasteel/dark, /area/ship/security) -"Wa" = ( -/obj/structure/rack, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 9 - }, -/obj/effect/turf_decal/trimline/opaque/yellow/line{ - dir = 8 - }, -/obj/item/ammo_box/magazine/gal{ - pixel_x = -5 - }, -/obj/item/ammo_box/magazine/gal{ - pixel_x = 5 - }, -/obj/item/gun/ballistic/automatic/gal/inteq{ - pixel_x = -8; - pixel_y = 3 +"VL" = ( +/obj/structure/cable{ + icon_state = "1-8" }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-4" }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/plasteel/tech/grid, -/area/ship/security/armory) +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/plasteel/dark, +/area/ship/security) "Wb" = ( /obj/effect/turf_decal/trimline/opaque/yellow/warning{ dir = 1 @@ -4289,19 +4192,6 @@ }, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/crew/office) -"Wp" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 6 - }, -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plasteel/tech/grid, -/area/ship/crew/cryo) "Wu" = ( /obj/effect/turf_decal/industrial/traffic{ dir = 8 @@ -4312,6 +4202,69 @@ }, /turf/open/floor/plasteel/patterned, /area/ship/cargo) +"WC" = ( +/obj/effect/turf_decal/corner/opaque/yellow, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"WE" = ( +/obj/effect/turf_decal/borderfloorblack{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/rack, +/obj/item/roller, +/obj/item/roller{ + pixel_y = 5 + }, +/obj/item/roller{ + pixel_y = 10 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) +"WF" = ( +/obj/structure/closet/secure_closet{ + icon_state = "sec"; + name = "equipment locker"; + req_access_txt = "1" + }, +/obj/item/clothing/mask/gas/sechailer/inteq, +/obj/item/clothing/mask/gas/sechailer/inteq, +/obj/item/clothing/mask/gas/sechailer/inteq, +/obj/item/storage/belt/security/webbing/inteq, +/obj/item/storage/belt/security/webbing/inteq, +/obj/item/storage/belt/security/webbing/inteq, +/obj/item/clothing/glasses/hud/security/sunglasses/inteq, +/obj/item/clothing/glasses/hud/security/sunglasses/inteq, +/obj/item/clothing/glasses/hud/security/sunglasses/inteq, +/obj/item/melee/baton, +/obj/item/melee/baton, +/obj/item/melee/baton, +/obj/effect/turf_decal/trimline/opaque/yellow/line{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/item/storage/box/handcuffs, +/obj/structure/sign/warning/nosmoking{ + pixel_y = 28 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/item/storage/belt/security/webbing/inteq/alt, +/obj/item/storage/belt/security/webbing/inteq/alt, +/obj/item/storage/belt/security/webbing/inteq/alt, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security/armory) "WG" = ( /obj/effect/turf_decal/box/corners, /obj/machinery/status_display/shuttle{ @@ -4328,6 +4281,42 @@ /obj/machinery/light/directional/south, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo) +"WS" = ( +/obj/structure/bed, +/obj/structure/sign/poster/contraband/backdoor_xeno_babes_6{ + pixel_y = -32 + }, +/obj/structure/curtain/bounty, +/turf/open/floor/carpet/black, +/area/ship/crew) +"Xb" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/structure/sign/poster/contraband/eoehoma{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"Xc" = ( +/obj/machinery/door/window/northleft{ + dir = 8; + req_access_txt = "3" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) "Xq" = ( /obj/effect/turf_decal/trimline/opaque/yellow/warning{ dir = 1 @@ -4358,13 +4347,8 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/fore) -"Xu" = ( -/obj/machinery/autolathe, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/yellow, -/turf/open/floor/plasteel/dark, +"XA" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/security) "XB" = ( /obj/structure/cable{ @@ -4414,19 +4398,27 @@ "XJ" = ( /turf/template_noop, /area/template_noop) -"XK" = ( -/obj/effect/turf_decal/trimline/opaque/yellow/line, -/obj/effect/turf_decal/siding/thinplating, +"XQ" = ( +/obj/machinery/firealarm/directional/west, +/obj/structure/weightmachine/stacklifter, +/obj/effect/turf_decal/borderfloorblack{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) +"XR" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 9 }, -/obj/structure/chair{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/item/cigbutt, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/hallway/central) +/turf/open/floor/carpet/black, +/area/ship/crew) "XS" = ( /obj/machinery/vending/cola/random, /obj/effect/turf_decal/trimline/opaque/yellow/line, @@ -4434,44 +4426,13 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/fore) -"Yq" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/structure/curtain, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/light/small/directional/east, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/plasteel/showroomfloor, -/area/ship/crew/toilet) +"XV" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/turf/open/floor/carpet/black, +/area/ship/crew) "Yr" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/hallway/fore) -"Yt" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/light/small/directional/west, -/obj/machinery/atmospherics/components/binary/dp_vent_pump/layer4, -/obj/item/tank/internals/plasmaman/full, -/obj/item/tank/internals/plasmaman/full, -/obj/item/tank/internals/oxygen, -/obj/item/tank/internals/oxygen, -/obj/item/tank/internals/oxygen, -/obj/item/tank/internals/oxygen, -/obj/item/tank/internals/oxygen, -/obj/structure/closet/wall{ - dir = 8; - icon_state = "emergency_wall"; - pixel_x = 28 - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/hallway/port) "Yv" = ( /obj/structure/sign/number/eight, /turf/closed/wall/mineral/plastitanium/nodiagonal, @@ -4480,6 +4441,27 @@ /obj/machinery/atmospherics/pipe/layer_manifold/visible, /turf/open/floor/engine/hull, /area/ship/engineering) +"Yy" = ( +/obj/docking_port/stationary{ + dwidth = 15; + height = 15; + width = 30 + }, +/turf/template_noop, +/area/template_noop) +"YV" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew/cryo) "Zb" = ( /obj/structure/cable{ icon_state = "2-8" @@ -4508,18 +4490,6 @@ }, /turf/open/floor/plasteel/patterned, /area/ship/cargo) -"Zu" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/hallway/central) "Zv" = ( /obj/structure/cable/yellow{ icon_state = "2-4" @@ -4550,6 +4520,17 @@ "ZB" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/crew/office) +"ZC" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/light/small/directional/west, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew/cryo) "ZF" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -4568,37 +4549,17 @@ /obj/machinery/atmospherics/pipe/simple/orange/hidden/layer1, /turf/open/floor/plasteel/tech, /area/ship/engineering) -"ZJ" = ( -/obj/machinery/button/door{ - id = "colossus_port"; - name = "Port Cargo Door Control"; - pixel_x = 4; - pixel_y = 23 - }, -/obj/effect/turf_decal/industrial/caution, -/obj/structure/ore_box, -/obj/machinery/button/shieldwallgen{ - id = "colossus_cargo_port"; - pixel_x = -5; - pixel_y = 21 - }, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/cargo) -"ZQ" = ( -/obj/structure/rack, -/obj/item/storage/box/emptysandbags{ - pixel_x = -5; - pixel_y = 5 +"ZR" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/item/storage/box/emptysandbags, -/obj/item/storage/box/emptysandbags{ - pixel_x = 5; - pixel_y = -5 +/obj/effect/turf_decal/trimline/opaque/yellow/filled/warning{ + dir = 1 }, -/obj/effect/turf_decal/borderfloorblack, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) +/turf/open/floor/plasteel/dark, +/area/ship/security) (1,1,1) = {" XJ @@ -4714,7 +4675,7 @@ XJ XJ XJ bo -jn +kn pV vp AZ @@ -4728,7 +4689,7 @@ PK Qu zW EJ -rM +Jc rl XJ "} @@ -4757,7 +4718,7 @@ XJ (8,1,1) = {" XJ XJ -Nb +Oa bo bo bo @@ -4773,7 +4734,7 @@ rl rl rl rl -wr +Oa XJ "} (9,1,1) = {" @@ -4786,9 +4747,9 @@ vH sb KM BR -Fl +om kV -JT +XQ ah Ve hZ @@ -4805,15 +4766,15 @@ XJ XJ XJ vH -ZJ +FR Lm RY -rd +NX tg -oQ +oq tw dC -Ku +Ct vH XJ XJ @@ -4830,9 +4791,9 @@ on BK Lx Sg -Sw +Pj tg -ev +tJ kK Ve eI @@ -4896,9 +4857,9 @@ rb Cy Lz Tr -ZQ +fG tg -FX +WE sp te RW @@ -4915,15 +4876,15 @@ XJ XJ XJ vH -PY +uR Mx -TB -la +xO +ym tg -qY +rG lM GR -xV +HF vH XJ XJ @@ -4940,9 +4901,9 @@ vH dU Ss Wl -SR +ai tg -wA +wU lg lr WG @@ -4954,7 +4915,7 @@ XJ "} (17,1,1) = {" XJ -bd +QZ ZB ZB ZB @@ -4972,7 +4933,7 @@ Dq Dq Dq Dq -cj +QZ "} (18,1,1) = {" XJ @@ -4986,14 +4947,14 @@ NP ZB Ce gJ -oK +ek IS -fT +pt IS -Eu -hf -al -Dj +WF +bN +CG +Bt Dq "} (19,1,1) = {" @@ -5010,12 +4971,12 @@ Zz Rq fW vc -fX +Uj IS -Lg -nW -AM -nE +jC +Pq +RI +TZ Dq "} (20,1,1) = {" @@ -5029,15 +4990,15 @@ DL Pv Cz Zz -Zu -aU +Ue +Tt IS -Yq +GF IS -mz -Px -Ob -nQ +DS +wi +oY +mF Yv "} (21,1,1) = {" @@ -5052,11 +5013,11 @@ Pv Ur tY ar -CP +yP IS IS IS -nh +Sa Dq Dq Dq @@ -5070,18 +5031,18 @@ jw sQ wm EC -Oe +Qj ZB QW EQ -XK -RN -eh -uA -va +gp +XA +uT +Kv +EI Dq -Wa -JV +MQ +qX PV "} (23,1,1) = {" @@ -5095,16 +5056,16 @@ ED OV UN Lp -dH +JM fW -mW -uq -VY -mG +Dr +ZR +ls +VL Dq -aN -eH -JH +Xb +DW +Le "} (24,1,1) = {" XJ @@ -5118,42 +5079,42 @@ GV ZB xr xd -VJ -tP -RS -ui -vw +Mq +um +hv +VD +Xc Dq -Je -Vr +rL +fr Dq "} (25,1,1) = {" XJ vv -gg +aH lA tx xD -FQ +va fO ZB Sp -IF -pm -RN -cT -iH -Ud -zT -Rs -Xu -RN +Um +Gp +XA +og +vz +LG +ct +jy +Tz +XA "} (26,1,1) = {" XJ ZB -LU +kL iw hU xF @@ -5163,18 +5124,18 @@ ZB Qm Oc Bj -RN -Vd -tT -TH -Ui -nC -Mm -RN +XA +rW +eM +pd +gX +WC +iS +XA "} (27,1,1) = {" XJ -Nb +Oa hD hD hD @@ -5186,22 +5147,22 @@ dI hh rS fp -RN -RN -RN -RN -RN -RN -wr +XA +XA +XA +XA +XA +XA +Oa "} (28,1,1) = {" -Hd -cv +Yy +Ou hO nm aZ -Yt -FW +tB +Ld QI Wb bz @@ -5209,10 +5170,10 @@ xB ju XS kI -AL -wg -RE -Sf +my +NQ +ZC +wQ kI XJ "} @@ -5223,7 +5184,7 @@ hD hD hD hD -Hc +Ic hD pO DE @@ -5232,9 +5193,9 @@ pP iT kI wS -bO -Wp -qr +qu +YV +Nf kI XJ "} @@ -5243,7 +5204,7 @@ XJ XJ tX KG -ko +Il hD hD hD @@ -5255,7 +5216,7 @@ lV kI kI kI -zm +Ar kI kI XJ @@ -5265,9 +5226,9 @@ XJ XJ HD ny -tG -gr -Gy +CA +Da +ne QL Xq mY @@ -5275,10 +5236,10 @@ mq zh Xt bs -eD -RC -rf -im +cq +BH +ob +qS zF XJ "} @@ -5286,10 +5247,10 @@ XJ XJ XJ tX -VR +NH tI Ae -Qa +Sj tX Hh fi @@ -5297,10 +5258,10 @@ BA Fa sz zF -ho -oI -Ak -vs +zI +XV +XR +WS zF XJ "} @@ -5308,7 +5269,7 @@ XJ XJ XJ HD -sI +cE ue AB iX @@ -5319,10 +5280,10 @@ fN fN Yr zF -xv +cd GW -TX -Jl +vq +gu uv XJ "} @@ -5330,9 +5291,9 @@ XJ XJ XJ tX -oe +bJ uy -AG +gE tX It XJ @@ -5342,20 +5303,20 @@ XJ XJ ot zF -Ga -DX -NA +GX +Ac +Op zF XJ "} (35,1,1) = {" XJ XJ -Lj +QZ SC SC SC -wr +Oa XJ XJ XJ @@ -5363,10 +5324,10 @@ XJ XJ XJ XJ -Nb -dE -dE -dE -Ao +Oa +xT +xT +xT +QZ XJ "} diff --git a/_maps/shuttles/shiptest/inteq_hound.dmm b/_maps/shuttles/shiptest/inteq_hound.dmm index 5dffd9c9a5df..9f198cc11041 100644 --- a/_maps/shuttles/shiptest/inteq_hound.dmm +++ b/_maps/shuttles/shiptest/inteq_hound.dmm @@ -139,6 +139,17 @@ "dB" = ( /turf/closed/wall/mineral/plastitanium, /area/ship/maintenance/starboard) +"dP" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/corner_techfloor_gray{ + dir = 6 + }, +/turf/open/floor/plating, +/area/ship/maintenance/port) "dV" = ( /turf/open/floor/engine/hull, /area/ship/maintenance/port) @@ -198,17 +209,6 @@ }, /turf/open/floor/plasteel/tech, /area/ship/storage/eva) -"fb" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/corner_techfloor_gray/diagonal, -/turf/open/floor/plating, -/area/ship/maintenance/starboard) "fk" = ( /obj/structure/railing{ dir = 8 @@ -354,19 +354,18 @@ "ib" = ( /turf/template_noop, /area/template_noop) -"id" = ( -/obj/structure/railing, -/obj/effect/turf_decal/borderfloorblack{ - dir = 8 - }, -/obj/structure/rack, -/obj/item/pickaxe/mini, -/obj/item/pickaxe/drill/jackhammer/old, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) "ih" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/maintenance/port) +"iw" = ( +/obj/machinery/button/door{ + id = "hound_windows"; + name = "Window Lockdown"; + pixel_x = -6; + pixel_y = 25 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/bridge) "jb" = ( /obj/structure/table, /obj/effect/turf_decal/corner/opaque/yellow, @@ -602,6 +601,16 @@ }, /turf/open/floor/carpet/orange, /area/ship/bridge) +"nL" = ( +/obj/structure/railing, +/obj/effect/turf_decal/borderfloorblack{ + dir = 8 + }, +/obj/structure/rack, +/obj/item/pickaxe/mini, +/obj/item/pickaxe/drill/jackhammer/old, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) "of" = ( /obj/machinery/door/airlock/command{ name = "Bridge"; @@ -633,18 +642,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/tech, /area/ship/maintenance/port) -"os" = ( -/obj/machinery/vending/coffee, -/obj/effect/turf_decal/corner/opaque/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/corner/opaque/yellow, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/dark, -/area/ship/crew) "oL" = ( /obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, /obj/machinery/door/poddoor{ @@ -774,6 +771,17 @@ /obj/effect/turf_decal/number/zero, /turf/open/floor/plating, /area/ship/maintenance/port) +"rj" = ( +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 + }, +/obj/effect/landmark/start/assistant, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/plasteel/dark, +/area/ship/crew) "rF" = ( /obj/structure/cable{ icon_state = "0-4" @@ -971,6 +979,15 @@ }, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo) +"uY" = ( +/obj/structure/railing, +/obj/effect/turf_decal/borderfloorblack{ + dir = 4 + }, +/obj/structure/rack, +/obj/item/storage/toolbox/ammo/c9mm, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) "ve" = ( /obj/structure/closet/crate/bin, /obj/effect/turf_decal/corner/opaque/yellow, @@ -1186,6 +1203,21 @@ }, /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) +"Ac" = ( +/obj/effect/turf_decal/borderfloorblack{ + dir = 8 + }, +/obj/structure/table, +/obj/item/storage/toolbox/mechanical{ + pixel_x = 1; + pixel_y = 8 + }, +/obj/item/storage/toolbox/electrical{ + pixel_x = -2; + pixel_y = 1 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) "Aj" = ( /obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, /obj/machinery/door/poddoor{ @@ -1196,17 +1228,6 @@ "Ao" = ( /turf/closed/wall/mineral/plastitanium, /area/ship/maintenance/port) -"AP" = ( -/obj/effect/turf_decal/borderfloorblack{ - dir = 8 - }, -/obj/machinery/mineral/ore_redemption{ - dir = 4; - input_dir = 4; - output_dir = null - }, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) "AQ" = ( /obj/structure/railing/corner, /obj/structure/catwalk/over/plated_catwalk, @@ -1286,7 +1307,6 @@ /obj/machinery/modular_computer/console/preset/command{ dir = 8 }, -/obj/item/radio/intercom/wideband/directional/south, /obj/item/radio/intercom/directional/south, /obj/effect/turf_decal/corner/opaque/brown{ dir = 8 @@ -1304,6 +1324,13 @@ }, /turf/open/floor/engine/hull, /area/ship/maintenance/starboard) +"CV" = ( +/obj/effect/turf_decal/borderfloorblack{ + dir = 8 + }, +/obj/machinery/autolathe, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) "DB" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /turf/open/floor/carpet/orange, @@ -1331,6 +1358,17 @@ }, /turf/open/floor/plasteel/patterned/grid, /area/ship/crew) +"EC" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/corner_techfloor_gray/diagonal, +/turf/open/floor/plating, +/area/ship/maintenance/starboard) "EE" = ( /obj/structure/table, /obj/machinery/computer/cryopod/directional/east, @@ -1369,6 +1407,14 @@ }, /turf/open/floor/plasteel/dark, /area/ship/bridge) +"Gj" = ( +/obj/effect/turf_decal/borderfloorblack{ + dir = 4 + }, +/obj/machinery/cell_charger, +/obj/structure/table, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) "GB" = ( /obj/structure/sign/number/eight{ dir = 1 @@ -1407,13 +1453,21 @@ dir = 8 }, /area/ship/cargo) -"Hd" = ( -/obj/effect/turf_decal/borderfloorblack{ - dir = 4 +"GZ" = ( +/obj/machinery/vending/coffee, +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 }, -/obj/machinery/rnd/server, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) +/obj/effect/turf_decal/corner/opaque/yellow, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/sign/poster/contraband/hacking_guide{ + pixel_x = -28 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew) "Hr" = ( /obj/effect/turf_decal/corner/opaque/yellow, /obj/effect/turf_decal/corner/opaque/yellow{ @@ -1479,8 +1533,8 @@ /obj/machinery/button/door{ id = "hound_windows"; name = "Window Lockdown"; - pixel_x = -6; - pixel_y = 25 + pixel_x = -10; + pixel_y = 22 }, /obj/effect/turf_decal/corner/opaque/brown{ dir = 4 @@ -1490,6 +1544,10 @@ }, /obj/effect/turf_decal/steeldecal/steel_decals_central4, /obj/machinery/computer/cargo/express, +/obj/item/radio/intercom/wideband/directional/north{ + pixel_y = 25; + pixel_x = 6 + }, /turf/open/floor/plasteel/dark, /area/ship/bridge) "HZ" = ( @@ -1510,6 +1568,17 @@ }, /turf/open/floor/plasteel/patterned/grid, /area/ship/crew) +"Iu" = ( +/obj/effect/turf_decal/borderfloorblack{ + dir = 8 + }, +/obj/machinery/mineral/ore_redemption{ + dir = 4; + input_dir = 4; + output_dir = null + }, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) "Iw" = ( /obj/machinery/power/smes/shuttle/precharged{ dir = 4 @@ -1696,13 +1765,6 @@ }, /turf/open/floor/plasteel/dark, /area/ship/bridge) -"Ln" = ( -/obj/effect/turf_decal/borderfloorblack{ - dir = 8 - }, -/obj/machinery/autolathe, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) "Ls" = ( /obj/structure/bed, /obj/structure/curtain/bounty, @@ -1717,15 +1779,6 @@ }, /turf/open/floor/carpet/black, /area/ship/crew/dorm) -"LW" = ( -/obj/structure/railing, -/obj/effect/turf_decal/borderfloorblack{ - dir = 4 - }, -/obj/structure/rack, -/obj/item/storage/toolbox/ammo/c9mm, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) "Mj" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /turf/open/floor/carpet/black, @@ -1960,20 +2013,6 @@ /obj/item/trash/sosjerky, /turf/open/floor/plasteel/dark, /area/ship/crew) -"PO" = ( -/obj/structure/extinguisher_cabinet/directional/north, -/obj/effect/turf_decal/corner/opaque/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 8 - }, -/obj/effect/landmark/start/assistant, -/obj/structure/sign/poster/contraband/hacking_guide{ - pixel_x = -28 - }, -/turf/open/floor/plasteel/dark, -/area/ship/crew) "Qn" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 @@ -2066,13 +2105,6 @@ }, /turf/open/floor/plasteel/tech, /area/ship/storage/eva) -"TE" = ( -/obj/effect/turf_decal/borderfloorblack{ - dir = 4 - }, -/obj/machinery/rnd/production/techfab/department/security, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) "TV" = ( /obj/structure/bed, /obj/structure/curtain/bounty, @@ -2084,14 +2116,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/carpet/black, /area/ship/crew/dorm) -"TZ" = ( -/obj/effect/turf_decal/borderfloorblack{ - dir = 4 - }, -/obj/machinery/cell_charger, -/obj/structure/table, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) "Ub" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "Starboard Engines" @@ -2279,6 +2303,13 @@ }, /turf/open/floor/plating, /area/ship/bridge) +"Xw" = ( +/obj/effect/turf_decal/borderfloorblack{ + dir = 4 + }, +/obj/machinery/rnd/production/techfab/department/security, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) "XH" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/corner/opaque/brown{ @@ -2306,21 +2337,6 @@ /obj/item/pen/fountain, /turf/open/floor/plasteel/dark, /area/ship/bridge) -"XK" = ( -/obj/effect/turf_decal/borderfloorblack{ - dir = 8 - }, -/obj/structure/table, -/obj/item/storage/toolbox/mechanical{ - pixel_x = 1; - pixel_y = 8 - }, -/obj/item/storage/toolbox/electrical{ - pixel_x = -2; - pixel_y = 1 - }, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) "Yj" = ( /obj/structure/sign/number/four{ dir = 1 @@ -2359,17 +2375,6 @@ }, /turf/open/floor/plasteel/tech/grid, /area/ship/crew/dorm) -"Zm" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/corner_techfloor_gray{ - dir = 6 - }, -/turf/open/floor/plating, -/area/ship/maintenance/port) "Zy" = ( /obj/structure/table/reinforced, /obj/item/storage/fancy/cigarettes/cigars{ @@ -2398,6 +2403,13 @@ }, /turf/open/floor/plating, /area/ship/maintenance/port) +"ZZ" = ( +/obj/effect/turf_decal/borderfloorblack{ + dir = 4 + }, +/obj/machinery/rnd/server, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) (1,1,1) = {" ib @@ -2504,7 +2516,7 @@ ih bZ rh Jb -Zm +dP eb MC SO @@ -2513,7 +2525,7 @@ NK eW uD Ub -fb +EC HS VC sw @@ -2567,10 +2579,10 @@ Ao ib Or jG -XK -Ln -AP -id +Ac +CV +Iu +nL dm Or ib @@ -2647,10 +2659,10 @@ ib ib Or BA -TZ -TE -Hd -LW +Gj +Xw +ZZ +uY GG Or ib @@ -2772,8 +2784,8 @@ vW DU Vo Pz -PO -os +rj +GZ zn ib ib @@ -2867,7 +2879,7 @@ pe HV KK BQ -pe +iw ib ib ib diff --git a/_maps/shuttles/shiptest/inteq_talos.dmm b/_maps/shuttles/shiptest/inteq_talos.dmm index 85686e181faa..cf5890397960 100644 --- a/_maps/shuttles/shiptest/inteq_talos.dmm +++ b/_maps/shuttles/shiptest/inteq_talos.dmm @@ -346,6 +346,26 @@ /obj/machinery/space_heater, /turf/open/floor/plasteel/tech, /area/ship/engineering) +"cz" = ( +/obj/structure/cable{ + icon_state = "5-10" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/light/directional/south, +/obj/structure/catwalk/over, +/turf/open/floor/plating, +/area/ship/engineering/engine) "cA" = ( /obj/effect/turf_decal/borderfloor{ dir = 1 @@ -649,12 +669,6 @@ /obj/machinery/cell_charger, /turf/open/floor/plasteel/tech/grid, /area/ship/storage) -"eI" = ( -/obj/machinery/porta_turret/centcom_shuttle/weak{ - dir = 9 - }, -/turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) "eK" = ( /obj/effect/turf_decal/trimline/opaque/yellow/corner{ dir = 4 @@ -1405,12 +1419,6 @@ /obj/effect/turf_decal/siding/thinplating/dark, /turf/open/floor/plasteel/tech/grid, /area/ship/engineering) -"jg" = ( -/obj/machinery/porta_turret/centcom_shuttle/weak{ - dir = 10 - }, -/turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) "jj" = ( /obj/structure/sign/warning/vacuum, /turf/closed/wall/mineral/plastitanium/nodiagonal, @@ -4206,22 +4214,6 @@ }, /turf/open/floor/carpet/black, /area/ship/crew/dorm) -"zH" = ( -/obj/structure/cable{ - icon_state = "5-10" - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/catwalk/over, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ship/engineering/engine) "zK" = ( /obj/effect/turf_decal/siding/thinplating/dark{ dir = 8 @@ -4681,26 +4673,6 @@ }, /turf/open/floor/plasteel/grimy, /area/ship/crew) -"Dc" = ( -/obj/structure/cable{ - icon_state = "5-10" - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/structure/catwalk/over, -/obj/machinery/light/directional/south, -/turf/open/floor/plating, -/area/ship/engineering/engine) "Dd" = ( /obj/structure/cable{ icon_state = "1-8" @@ -6092,6 +6064,25 @@ /obj/effect/turf_decal/trimline/opaque/yellow/warning, /turf/open/floor/engine/hull/reinforced, /area/ship/external/dark) +"NC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/machinery/advanced_airlock_controller{ + pixel_y = -21 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/yellow/warning{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) "NF" = ( /obj/structure/cable{ icon_state = "4-8" @@ -6279,6 +6270,10 @@ /obj/structure/closet/crate, /turf/open/floor/plating/airless, /area/ship/maintenance/starboard) +"Pw" = ( +/obj/machinery/porta_turret/ship/weak, +/turf/closed/wall/mineral/plastitanium, +/area/ship/bridge) "Py" = ( /obj/structure/cable{ icon_state = "1-2" @@ -6631,6 +6626,12 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/ship/cargo/port) +"RW" = ( +/obj/machinery/turretid/lethal{ + pixel_y = 32 + }, +/turf/open/floor/carpet/orange, +/area/ship/bridge) "RY" = ( /obj/effect/turf_decal/industrial/warning/fulltile, /obj/machinery/door/airlock/hatch{ @@ -6725,6 +6726,22 @@ }, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/central) +"SD" = ( +/obj/structure/cable{ + icon_state = "5-10" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/catwalk/over, +/turf/open/floor/plating, +/area/ship/engineering/engine) "SH" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable, @@ -7037,14 +7054,6 @@ }, /turf/open/floor/plasteel/tech, /area/ship/maintenance/starboard) -"Us" = ( -/obj/machinery/turretid{ - pixel_y = 32; - req_access = null; - req_one_access = list(19,3) - }, -/turf/open/floor/carpet/orange, -/area/ship/bridge) "Uy" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/spawner/lootdrop/grille_or_trash, @@ -7107,25 +7116,6 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating/airless, /area/ship/maintenance/port) -"UX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 - }, -/obj/machinery/advanced_airlock_controller{ - pixel_y = -32 - }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/opaque/yellow/warning{ - dir = 4 - }, -/turf/open/floor/plasteel/tech, -/area/ship/hallway/central) "Ve" = ( /obj/effect/turf_decal/siding/thinplating/dark{ dir = 1 @@ -7392,12 +7382,6 @@ }, /turf/open/floor/carpet/orange, /area/ship/bridge) -"WW" = ( -/obj/machinery/porta_turret/centcom_shuttle/weak{ - dir = 6 - }, -/turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) "Xg" = ( /turf/open/floor/carpet/black, /area/ship/crew/dorm) @@ -7470,12 +7454,6 @@ }, /turf/open/floor/plasteel/patterned, /area/ship/cargo) -"Ye" = ( -/obj/machinery/porta_turret/centcom_shuttle/weak{ - dir = 5 - }, -/turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) "Yp" = ( /obj/machinery/atmospherics/pipe/simple/dark/hidden/layer1, /obj/machinery/atmospherics/pipe/simple/purple/hidden, @@ -7893,7 +7871,7 @@ sw "} (5,1,1) = {" sw -eI +Pw sV sV sV @@ -7922,7 +7900,7 @@ ao ao ao ao -jg +Pw sw "} (6,1,1) = {" @@ -7978,7 +7956,7 @@ pU Pk pU VL -Dc +cz pU JU bA @@ -8011,7 +7989,7 @@ cA PL TD vv -zH +SD LJ rk hl @@ -8097,7 +8075,7 @@ vp "} (11,1,1) = {" sw -Ye +Pw sV sV sW @@ -8126,7 +8104,7 @@ sc jW ao ao -WW +Pw MV "} (12,1,1) = {" @@ -8360,7 +8338,7 @@ Ui Fp Gm zo -UX +NC hT sw og @@ -8547,7 +8525,7 @@ lC ae bU mX -Us +RW WR Tj mX @@ -8847,7 +8825,7 @@ sw sw sw sw -Ye +Pw yp jj Gl @@ -8872,7 +8850,7 @@ as QR WG mK -WW +Pw sw sw sw @@ -9462,7 +9440,7 @@ sw sw sw sw -Ye +Pw Pp fN Pp @@ -9481,7 +9459,7 @@ Gq If YZ fK -WW +Pw sw sw sw diff --git a/_maps/shuttles/shiptest/minutemen_asclepius.dmm b/_maps/shuttles/shiptest/minutemen_asclepius.dmm index a0f3211c542a..f36449b59e5c 100644 --- a/_maps/shuttles/shiptest/minutemen_asclepius.dmm +++ b/_maps/shuttles/shiptest/minutemen_asclepius.dmm @@ -4335,10 +4335,10 @@ name = "Chemistry locker"; pixel_y = -28 }, -/obj/item/clothing/under/rank/medical/chemist/pharmacist, -/obj/item/clothing/under/rank/medical/chemist/pharmacist/skirt, -/obj/item/clothing/under/rank/medical/chemist/pharmacologist/skirt, -/obj/item/clothing/under/rank/medical/chemist/pharmacologist, +/obj/item/clothing/under/rank/medical/chemist, +/obj/item/clothing/under/rank/medical/chemist, +/obj/item/clothing/under/rank/medical/chemist/skirt, +/obj/item/clothing/under/rank/medical/chemist/skirt, /obj/item/clothing/suit/longcoat/chemist, /obj/item/clothing/suit/toggle/labcoat/chemist/side, /obj/item/clothing/head/beret/chem, @@ -4417,7 +4417,6 @@ /obj/item/clothing/under/rank/command/minutemen, /obj/item/clothing/suit/toggle/lawyer/minutemen, /obj/item/clothing/suit/toggle/labcoat/cmo, -/obj/item/clothing/under/rank/medical/chief_medical_officer/surgeon_general, /obj/item/clothing/glasses/hud/security/sunglasses/eyepatch, /obj/item/autosurgeon/cmo, /obj/item/clothing/gloves/color/latex/nitrile/evil, diff --git a/_maps/shuttles/shiptest/minutemen_cepheus.dmm b/_maps/shuttles/shiptest/minutemen_cepheus.dmm index d7f424d36c01..17a5d3b8cb65 100644 --- a/_maps/shuttles/shiptest/minutemen_cepheus.dmm +++ b/_maps/shuttles/shiptest/minutemen_cepheus.dmm @@ -172,11 +172,7 @@ /turf/open/floor/plasteel/tech/grid, /area/ship/science/robotics) "cl" = ( -/obj/machinery/porta_turret/centcom_shuttle/ballistic{ - dir = 5; - name = "ship turret"; - on = 0 - }, +/obj/machinery/porta_turret/ship/ballistic, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/science/robotics) "cF" = ( @@ -793,19 +789,11 @@ /turf/open/floor/plasteel/telecomms_floor, /area/ship/science/robotics) "iM" = ( -/obj/machinery/porta_turret/centcom_shuttle/ballistic{ - dir = 8; - name = "ship turret"; - on = 0 - }, +/obj/machinery/porta_turret/ship/ballistic, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/engineering/atmospherics) "jl" = ( -/obj/machinery/porta_turret/centcom_shuttle/ballistic{ - dir = 6; - name = "ship turret"; - on = 0 - }, +/obj/machinery/porta_turret/ship/ballistic, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/security) "jp" = ( @@ -4154,11 +4142,7 @@ /turf/open/floor/plasteel/tech, /area/ship/engineering/electrical) "SQ" = ( -/obj/machinery/porta_turret/centcom_shuttle/ballistic{ - dir = 8; - name = "ship turret"; - on = 0 - }, +/obj/machinery/porta_turret/ship/ballistic, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/engineering/electrical) "Tu" = ( diff --git a/_maps/shuttles/shiptest/minutemen_corvus.dmm b/_maps/shuttles/shiptest/minutemen_corvus.dmm index 597aa5af15a6..98b8b9a500dd 100644 --- a/_maps/shuttles/shiptest/minutemen_corvus.dmm +++ b/_maps/shuttles/shiptest/minutemen_corvus.dmm @@ -1710,11 +1710,7 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) "Gu" = ( -/obj/machinery/porta_turret/centcom_shuttle/ballistic{ - dir = 5; - name = "ship turret"; - on = 0 - }, +/obj/machinery/porta_turret/ship/ballistic, /turf/closed/wall/mineral/plastitanium, /area/ship/bridge) "Gv" = ( @@ -2132,14 +2128,6 @@ /obj/item/clothing/suit/space/hardsuit/security/independent/minutemen, /turf/open/floor/plasteel/tech/grid, /area/ship/hallway/central) -"Pj" = ( -/obj/machinery/porta_turret/centcom_shuttle/ballistic{ - dir = 9; - name = "ship turret"; - on = 0 - }, -/turf/closed/wall/mineral/plastitanium, -/area/ship/engineering) "PA" = ( /obj/effect/turf_decal/siding/thinplating/dark{ dir = 8 @@ -2694,11 +2682,7 @@ /turf/open/floor/carpet/nanoweave, /area/ship/hallway/central) "YT" = ( -/obj/machinery/porta_turret/centcom_shuttle/ballistic{ - dir = 10; - name = "ship turret"; - on = 0 - }, +/obj/machinery/porta_turret/ship/ballistic, /turf/closed/wall/mineral/plastitanium, /area/ship/engineering) "Zh" = ( @@ -2785,7 +2769,7 @@ bA bA bA bA -Pj +YT IX WY iJ diff --git a/_maps/shuttles/shiptest/minutemen_vela.dmm b/_maps/shuttles/shiptest/minutemen_vela.dmm new file mode 100644 index 000000000000..8f6580229f1b --- /dev/null +++ b/_maps/shuttles/shiptest/minutemen_vela.dmm @@ -0,0 +1,11818 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ab" = ( +/obj/machinery/power/smes, +/obj/structure/cable, +/obj/effect/turf_decal/industrial/outline/red, +/obj/structure/sign/poster/contraband/tools{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"ac" = ( +/obj/machinery/airalarm/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/item/training_toolbox, +/turf/open/floor/plating, +/area/ship/storage) +"af" = ( +/obj/structure/closet/secure_closet/lethalshots{ + populate = 0 + }, +/obj/item/ammo_box/c45, +/obj/item/ammo_box/c45, +/obj/item/ammo_box/c45/hp, +/obj/item/ammo_box/c45/hp, +/obj/item/ammo_box/magazine/m45, +/obj/item/ammo_box/magazine/m45, +/obj/item/ammo_box/magazine/m45, +/obj/item/ammo_box/magazine/m45, +/obj/item/ammo_box/magazine/smgm9mm/rubbershot, +/obj/item/ammo_box/magazine/smgm9mm/rubbershot, +/obj/item/ammo_box/magazine/smgm9mm/rubbershot, +/obj/item/ammo_box/c9mm/rubbershot, +/obj/structure/cable{ + icon_state = "0-6" + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"al" = ( +/obj/effect/turf_decal/trimline/opaque/purple/warning{ + dir = 5 + }, +/obj/structure/table/glass, +/obj/item/flashlight/lamp{ + pixel_y = 1; + pixel_x = -7 + }, +/obj/item/paicard{ + pixel_x = 6; + pixel_y = -8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"am" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external) +"an" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"aq" = ( +/obj/machinery/button/door{ + pixel_y = 14; + pixel_x = 22; + id = "obai2"; + name = "AI core blast door button"; + dir = 8 + }, +/obj/structure/AIcore, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/button/door{ + pixel_y = -15; + pixel_x = 22; + id = "obai"; + name = "AI core window shutters button"; + dir = 8 + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/science/ai_chamber) +"az" = ( +/obj/structure/table/reinforced, +/obj/item/disk/design_disk/cmm_mechs, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/hangar/port) +"aE" = ( +/obj/machinery/washing_machine, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/dorm) +"aH" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/crew/office) +"aM" = ( +/obj/machinery/camera/autoname{ + dir = 8 + }, +/obj/item/cardboard_cutout{ + name = "John"; + desc = "Guardian of the engines." + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external) +"aO" = ( +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/structure/sign/poster/contraband/borg_fancy_2{ + pixel_x = 28 + }, +/obj/machinery/shieldgen, +/turf/open/floor/plating, +/area/ship/storage) +"aQ" = ( +/obj/structure/closet/secure_closet/personal, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/dorm) +"aZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/binary/pump/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/atmospherics) +"bc" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/corner/transparent/purple/diagonal, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"bh" = ( +/obj/structure/frame/machine, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/tech, +/area/ship/science/xenobiology) +"bt" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/ship/storage) +"bu" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/oil{ + icon_state = "streak5" + }, +/obj/effect/turf_decal/techfloor/hole{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/engine, +/area/ship/hangar/port) +"bA" = ( +/obj/effect/turf_decal/techfloor/hole{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/engine, +/area/ship/hangar/port) +"bH" = ( +/turf/open/floor/wood, +/area/ship/crew/dorm) +"bK" = ( +/obj/effect/turf_decal/techfloor, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/techfloor/hole, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"bX" = ( +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + dir = 8; + id = "obhang21" + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning, +/obj/machinery/door/poddoor{ + id = "obmine11" + }, +/turf/open/floor/engine, +/area/ship/hangar/port) +"bZ" = ( +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/components/unary/thermomachine{ + piping_layer = 2; + dir = 8 + }, +/obj/machinery/camera/autoname{ + dir = 8 + }, +/obj/structure/sign/poster/official/moth/piping{ + pixel_x = 28 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/atmospherics) +"ca" = ( +/obj/effect/turf_decal/industrial/outline/red, +/obj/effect/turf_decal/rechargefloor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/greenglow, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hangar/port) +"cd" = ( +/obj/machinery/door/poddoor/preopen{ + id = "obhangarent1" + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/central) +"cg" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/wood, +/area/ship/hallway/fore) +"ci" = ( +/obj/structure/rack, +/obj/item/mecha_parts/mecha_equipment/mining_scanner, +/obj/item/mecha_parts/mecha_equipment/generator, +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/item/mecha_parts/mecha_equipment/weapon/energy/mecha_kineticgun, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hangar/port) +"cj" = ( +/obj/structure/bed, +/obj/structure/curtain/cloth, +/obj/item/bedsheet/blue, +/turf/open/floor/wood, +/area/ship/crew/dorm) +"cn" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"co" = ( +/obj/structure/curtain/cloth, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plasteel/dark, +/area/ship/crew) +"cw" = ( +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"cy" = ( +/obj/structure/sign/minutemen, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering/atmospherics) +"cz" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/trimline/opaque/purple/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/purple/filled/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/dark, +/area/ship/science) +"cE" = ( +/obj/structure/rack, +/obj/item/storage/belt/utility, +/obj/effect/turf_decal/industrial/outline/yellow, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hangar/port) +"cF" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/structure/railing{ + dir = 8; + layer = 3.1 + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"cI" = ( +/obj/machinery/button/door{ + dir = 4; + name = "Engineering Storage Lock"; + pixel_y = -7; + pixel_x = -21; + id = "obengi" + }, +/obj/structure/closet/crate/engineering/electrical, +/obj/item/storage/box/lights/mixed, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/item/mecha_parts/mecha_equipment/extinguisher, +/obj/item/mecha_parts/mecha_equipment/extinguisher, +/turf/open/floor/plating, +/area/ship/storage) +"cJ" = ( +/obj/structure/rack, +/obj/machinery/door/window/brigdoor/westright{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/item/circuitboard/aicore, +/obj/item/stack/sheet/rglass, +/obj/item/stack/sheet/rglass, +/obj/item/aiModule/core, +/turf/open/floor/plasteel/tech/grid, +/area/ship/science/ai_chamber) +"cK" = ( +/obj/structure/musician/piano/unanchored, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 6 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"cT" = ( +/obj/structure/rack, +/obj/item/chair, +/obj/item/chair, +/obj/item/chair, +/obj/item/chair, +/obj/item/chair, +/obj/item/chair, +/obj/item/chair, +/obj/item/chair, +/obj/item/chair, +/obj/item/chair, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/plasteel/tech, +/area/ship/crew/canteen) +"cV" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew) +"cW" = ( +/obj/effect/turf_decal/box/corners, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/structure/frame/machine, +/turf/open/floor/plasteel/tech, +/area/ship/hangar/port) +"dc" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/corner/opaque/black{ + dir = 1 + }, +/obj/effect/turf_decal/borderfloor, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"dd" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/wood, +/area/ship/hallway/fore) +"df" = ( +/obj/structure/cable{ + icon_state = "5-8" + }, +/obj/structure/cable{ + icon_state = "6-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/effect/turf_decal/corner_techfloor_grid, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor/corner, +/obj/effect/turf_decal/techfloor/corner{ + dir = 4 + }, +/obj/effect/turf_decal/corner_techfloor_gray{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"dh" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"dp" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 2 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"dq" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/computer/card{ + dir = 4; + icon_state = "computer-right" + }, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"ds" = ( +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/corners, +/obj/structure/closet/crate/science{ + name = "G.Station Science Kit" + }, +/obj/item/circuitboard/machine/rdserver, +/obj/item/circuitboard/computer/rdconsole, +/obj/item/clothing/head/papersack/smiley, +/obj/item/clothing/head/papersack/smiley, +/obj/item/clothing/head/papersack/smiley, +/obj/item/clothing/head/papersack/smiley, +/obj/item/clothing/head/papersack/smiley, +/obj/item/clothing/head/papersack/smiley, +/obj/item/circuitboard/machine/circuit_imprinter/department/science, +/obj/item/circuitboard/machine/protolathe/department/science, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 9 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"dt" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = -12 + }, +/obj/structure/mirror{ + pixel_x = -28 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4; + pixel_y = 1 + }, +/obj/effect/turf_decal/borderfloor{ + dir = 10 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/crew/toilet) +"dx" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"dB" = ( +/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/door/firedoor/window, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "vela_lablock"; + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/science/xenobiology) +"dC" = ( +/obj/structure/closet/secure_closet{ + name = "captain's locker"; + icon_state = "cap"; + req_access_txt = "20" + }, +/obj/item/clothing/under/rank/command/minutemen, +/obj/item/clothing/suit/toggle/lawyer/minutemen, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/glasses/sunglasses, +/obj/item/gun/ballistic/automatic/pistol/m1911, +/obj/item/clothing/head/cowboy/sec/minutemen, +/obj/item/radio/headset/minutemen/alt/captain, +/obj/item/storage/backpack, +/obj/item/storage/backpack/satchel, +/obj/item/binoculars, +/obj/item/door_remote/captain, +/turf/open/floor/carpet/royalblack, +/area/ship/crew/office) +"dD" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"dF" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer5, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/door/airlock/external, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"dK" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/engineering) +"dL" = ( +/obj/structure/sign/minutemen{ + pixel_y = 36 + }, +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/machinery/camera/autoname, +/obj/machinery/light/directional/north{ + pixel_y = 28 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external) +"dN" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/atmospherics) +"dV" = ( +/obj/effect/turf_decal/arrows{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/engine, +/area/ship/hangar/port) +"dW" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"dZ" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/hangar/port) +"ea" = ( +/obj/machinery/door/poddoor{ + id = "obcargo" + }, +/obj/structure/cable, +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + dir = 8; + id = "obcargos" + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning, +/turf/open/floor/engine, +/area/ship/cargo) +"ee" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 1 + }, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 8 + }, +/obj/structure/railing{ + dir = 4; + layer = 3.1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"ek" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering/atmospherics) +"eq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/turf_decal/steeldecal/steel_decals_central7{ + pixel_y = 0; + dir = 8; + pixel_x = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"eB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/sign/poster/random{ + pixel_y = 30 + }, +/obj/item/kirbyplants/random{ + pixel_y = 12 + }, +/turf/open/floor/wood, +/area/ship/hallway/fore) +"eI" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/dorm) +"eJ" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/green/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/green/filled/warning{ + dir = 8 + }, +/obj/machinery/door/airlock{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/crew/canteen) +"eM" = ( +/obj/structure/closet/crate/engineering, +/obj/item/stack/conveyor/thirty, +/obj/item/stack/conveyor/thirty, +/obj/item/crowbar, +/obj/item/screwdriver, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/effect/turf_decal/box/corners, +/obj/item/conveyor_switch_construct, +/obj/item/conveyor_switch_construct, +/obj/effect/decal/cleanable/generic, +/turf/open/floor/plating, +/area/ship/storage) +"eN" = ( +/turf/open/floor/plasteel/tech, +/area/ship/science) +"eQ" = ( +/obj/structure/catwalk, +/turf/open/floor/plating, +/area/ship/external) +"eR" = ( +/obj/machinery/power/smes/shuttle/precharged{ + dir = 4 + }, +/obj/structure/window/plasma/reinforced{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters{ + name = "Engine Shutters"; + id = "obengines"; + dir = 4 + }, +/turf/open/floor/engine, +/area/ship/engineering) +"eS" = ( +/obj/machinery/power/smes, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/effect/turf_decal/industrial/outline/red, +/obj/structure/sign/warning/nosmoking/burnt{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"eT" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ship/crew/office) +"eV" = ( +/obj/structure/closet/radiation, +/obj/item/picket_sign, +/obj/item/picket_sign, +/obj/item/picket_sign, +/obj/machinery/firealarm{ + pixel_y = 28 + }, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/machinery/light/small/broken/directional/west, +/turf/open/floor/plating, +/area/ship/storage) +"eZ" = ( +/obj/structure/sign/poster/official/cleanliness{ + pixel_y = 32 + }, +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer3{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hangar/port) +"fh" = ( +/obj/effect/decal/cleanable/oil{ + icon_state = "floor6" + }, +/obj/machinery/computer/atmos_alert, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/atmospherics) +"fi" = ( +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/structure/rack, +/obj/item/mecha_parts/mecha_equipment/weapon/energy/mecha_kineticgun, +/obj/item/mecha_parts/mecha_equipment/thrusters/gas, +/obj/item/mecha_parts/mecha_equipment/drill, +/obj/item/mecha_parts/mecha_equipment/mining_scanner, +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hangar/port) +"fj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/turf_decal/corner_techfloor_grid, +/obj/effect/turf_decal/techfloor/corner, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/structure/railing{ + dir = 8; + layer = 3.1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"fk" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 2 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/wood, +/area/ship/hallway/fore) +"fl" = ( +/obj/machinery/grill/unwrenched, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/turf/open/floor/pod, +/area/ship/cargo) +"fm" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/item/kirbyplants/random{ + pixel_y = 5; + pixel_x = 2 + }, +/turf/open/floor/mineral/plastitanium, +/area/ship/bridge) +"fr" = ( +/obj/structure/sign/painting/library{ + pixel_y = 28 + }, +/turf/open/floor/wood, +/area/ship/hallway/central) +"fv" = ( +/obj/effect/turf_decal/industrial/caution, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/tech, +/area/ship/hangar/port) +"fx" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor/corner, +/obj/effect/turf_decal/corner/transparent/mauve/diagonal, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"fz" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/obj/machinery/camera/autoname, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"fD" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"fF" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/effect/turf_decal/minutemen/edge{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/ship/bridge) +"fH" = ( +/obj/machinery/door/window/brigdoor/westleft{ + req_access_txt = list("2"); + id = "vela" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"fJ" = ( +/obj/machinery/porta_turret/ship{ + dir = 9 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/bridge) +"fW" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer5{ + dir = 9 + }, +/obj/effect/turf_decal/industrial/caution, +/obj/machinery/light/small/directional/east, +/obj/structure/sign/warning/vacuum/external{ + pixel_y = 11; + pixel_x = 28 + }, +/obj/effect/turf_decal/steeldecal/steel_decals10, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"fY" = ( +/obj/machinery/door/poddoor{ + id = "obcargo" + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning, +/turf/open/floor/engine, +/area/ship/cargo) +"ga" = ( +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/on/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer5, +/obj/machinery/advanced_airlock_controller{ + pixel_x = -24 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 9 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"gh" = ( +/obj/structure/rack, +/obj/machinery/airalarm/directional/south, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, +/obj/effect/turf_decal/industrial/outline/yellow, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hangar/port) +"gj" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"gx" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/dorm) +"gB" = ( +/obj/structure/closet/emcloset/wall{ + dir = 1; + pixel_y = -28 + }, +/obj/effect/turf_decal/techfloor{ + dir = 10 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"gD" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/turf/open/floor/engine, +/area/ship/hangar/port) +"gL" = ( +/obj/machinery/door/poddoor{ + id = "obair" + }, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"gQ" = ( +/obj/structure/railing{ + dir = 1; + layer = 3.1 + }, +/obj/effect/turf_decal/steeldecal/steel_decals9, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"gV" = ( +/obj/machinery/ai_slipper, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/science/ai_chamber) +"gX" = ( +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/machinery/vending/snack/random, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew) +"hf" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_x = 9; + pixel_y = -6 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"hh" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"hk" = ( +/obj/machinery/cryopod{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor/orange{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor/orange/corner{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/obj/structure/railing{ + dir = 4; + layer = 2.8 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew/cryo) +"hm" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/cable, +/turf/open/floor/wood, +/area/ship/hallway/fore) +"ho" = ( +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/machinery/vending/cigarette, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/fore) +"hv" = ( +/obj/structure/table, +/obj/item/pen{ + pixel_x = 11; + pixel_y = 9 + }, +/obj/item/paper/crumpled{ + pixel_x = -4; + pixel_y = -3 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"hw" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/stand_clear, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"hx" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/engineering/engine) +"hD" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/structure/railing{ + dir = 1; + layer = 3.1 + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"hH" = ( +/obj/effect/turf_decal/arrows, +/turf/open/floor/engine, +/area/ship/hangar/port) +"hJ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/minutemen/corner{ + dir = 8 + }, +/obj/item/circuitboard/mecha/ripley/main, +/turf/open/floor/plasteel/mono/dark, +/area/ship/hangar/port) +"hP" = ( +/obj/effect/decal/cleanable/oil{ + icon_state = "floor6" + }, +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor/hole/right{ + dir = 4 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"hR" = ( +/obj/machinery/computer/communications{ + dir = 8 + }, +/obj/effect/turf_decal/steeldecal/steel_decals4, +/obj/machinery/light/directional/south, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"hS" = ( +/obj/effect/turf_decal/arrows{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/traffic, +/obj/docking_port/mobile{ + preferred_direction = 4; + dheight = 1; + dir = 2; + port_direction = 8 + }, +/turf/open/floor/engine, +/area/ship/external) +"hX" = ( +/obj/machinery/vending/cola/space_up, +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/machinery/light/small/directional/south, +/obj/machinery/camera/autoname{ + dir = 4 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew/cryo) +"ib" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/machinery/vending/coffee, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/fore) +"ic" = ( +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing/corner{ + dir = 4; + layer = 3.1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"ie" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"il" = ( +/obj/machinery/camera/autoname{ + dir = 9 + }, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"in" = ( +/obj/machinery/door/window/brigdoor/westleft{ + dir = 4; + req_access = list(3) + }, +/obj/structure/sign/poster/official/mini_energy_gun{ + pixel_y = -32 + }, +/obj/structure/cable{ + icon_state = "4-9" + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"io" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/science/xenobiology) +"ip" = ( +/obj/effect/turf_decal/spline/fancy/wood/corner, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"is" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/wood, +/area/ship/hallway/fore) +"iu" = ( +/obj/structure/rack, +/turf/open/floor/plasteel/tech, +/area/ship/crew/canteen) +"iw" = ( +/obj/effect/decal/cleanable/oil, +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"iy" = ( +/obj/structure/sign/poster/minutemen/random{ + pixel_y = -30 + }, +/obj/effect/turf_decal/corner/opaque/black{ + dir = 1 + }, +/obj/effect/turf_decal/borderfloor, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"iz" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"iD" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/visible/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/steeldecal/steel_decals4, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/atmospherics) +"iE" = ( +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4; + layer = 3.1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"iG" = ( +/obj/item/kirbyplants/random{ + pixel_x = -4; + pixel_y = 11 + }, +/obj/effect/turf_decal/corner_techfloor_gray{ + dir = 1 + }, +/obj/machinery/firealarm/directional/west, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/science/ai_chamber) +"iL" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/atmospherics) +"iO" = ( +/obj/effect/turf_decal/corner/opaque/black/diagonal, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"iP" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/carpet/nanoweave/purple, +/area/ship/science) +"iQ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"iR" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"iV" = ( +/obj/effect/turf_decal/techfloor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"jb" = ( +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/corners, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 9 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"jf" = ( +/obj/structure/table, +/obj/item/reagent_containers/food/snacks/honeybar{ + pixel_x = 7; + pixel_y = 1 + }, +/obj/item/storage/fancy/cigarettes/cigpack_uplift{ + pixel_x = -7 + }, +/obj/item/lighter{ + pixel_x = -4; + pixel_y = -2 + }, +/obj/item/reagent_containers/food/drinks/coffee{ + pixel_x = 11; + pixel_y = 3 + }, +/turf/open/floor/carpet/nanoweave/purple, +/area/ship/science) +"jh" = ( +/turf/open/floor/plasteel/stairs/medium{ + dir = 1 + }, +/area/ship/hallway/central) +"jj" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/science) +"jm" = ( +/obj/effect/turf_decal/techfloor/orange, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/circuit/green, +/area/ship/science/ai_chamber) +"jn" = ( +/obj/structure/rack, +/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/sheet/metal/fifty, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/item/stack/sheet/glass/fifty, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating, +/area/ship/storage) +"jr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/corner_techfloor_grid, +/obj/effect/turf_decal/techfloor/corner, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 8 + }, +/obj/effect/turf_decal/corner_techfloor_gray{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"jx" = ( +/obj/structure/closet/secure_closet/engineering_personal{ + anchored = 1 + }, +/obj/effect/turf_decal/box, +/obj/structure/sign/poster/contraband/tools{ + pixel_y = 32 + }, +/obj/item/clothing/suit/toggle/industrial, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"jD" = ( +/obj/structure/rack, +/obj/item/mecha_parts/mecha_equipment/drill, +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp, +/obj/item/mecha_parts/mecha_equipment/thrusters/gas, +/obj/effect/turf_decal/industrial/hatch/yellow, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hangar/port) +"jF" = ( +/obj/effect/turf_decal/trimline/opaque/purple/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/purple/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ship/science) +"jI" = ( +/obj/structure/closet/wall{ + dir = 1; + pixel_y = -28 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew) +"jN" = ( +/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, +/turf/open/floor/plating, +/area/ship/crew) +"jO" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/mauve/diagonal, +/obj/effect/turf_decal/steeldecal/steel_decals9, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"jP" = ( +/obj/machinery/power/shuttle/engine/electric{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/engine/hull, +/area/ship/engineering) +"jS" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/structure/railing{ + dir = 1; + layer = 3.1 + }, +/obj/machinery/camera/autoname{ + dir = 10 + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"jY" = ( +/obj/structure/chair/plastic{ + dir = 4 + }, +/obj/machinery/camera/autoname{ + dir = 4 + }, +/obj/machinery/light_switch{ + pixel_y = 23; + pixel_x = -9 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"kd" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/machinery/newscaster/directional/east, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/dorm) +"ke" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"kg" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ship/hallway/fore) +"kh" = ( +/obj/effect/turf_decal/trimline/opaque/red/filled/warning, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/airlock/security{ + req_access = list(1) + }, +/turf/open/floor/plasteel/tech, +/area/ship/science) +"kl" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/open/floor/wood, +/area/ship/crew) +"kn" = ( +/obj/machinery/porta_turret/ship, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/bridge) +"ko" = ( +/obj/structure/rack, +/obj/machinery/door/window/brigdoor/westleft{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/item/stack/cable_coil/red{ + amount = 4 + }, +/obj/item/stack/sheet/rglass, +/obj/item/stack/sheet/rglass, +/obj/item/storage/toolbox/electrical{ + pixel_y = 10 + }, +/obj/item/mmi/posibrain, +/turf/open/floor/plasteel/tech/grid, +/area/ship/science/ai_chamber) +"kp" = ( +/obj/effect/turf_decal/techfloor{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hangar/port) +"kq" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/engineering) +"kr" = ( +/obj/structure/filingcabinet, +/obj/item/kitchen/knife/letter_opener, +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/item/clothing/mask/cigarette/cigar/havana, +/obj/item/clothing/mask/cigarette/cigar/havana, +/obj/item/clothing/mask/cigarette/cigar/havana, +/obj/item/clothing/mask/cigarette/cigar/havana, +/obj/item/clothing/mask/cigarette/cigar/havana, +/obj/item/clothing/mask/cigarette/cigar/havana, +/obj/structure/sign/poster/official/cohiba_robusto_ad{ + pixel_x = -32 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"kv" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/obj/effect/turf_decal/minutemen/edge{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/east{ + pixel_y = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/ship/bridge) +"kw" = ( +/obj/effect/turf_decal/industrial/stand_clear, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/engine, +/area/ship/hangar/port) +"ky" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/wood, +/area/ship/hallway/fore) +"kF" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"kS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/holopad/emergency/engineering, +/obj/effect/turf_decal/box, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"kW" = ( +/obj/structure/table/chem, +/obj/item/reagent_containers/glass/beaker{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/item/reagent_containers/glass/beaker{ + pixel_x = 6; + pixel_y = 11 + }, +/obj/structure/sign/departments/chemistry/pharmacy{ + pixel_y = 32 + }, +/obj/item/reagent_containers/glass/beaker{ + pixel_x = 7 + }, +/obj/effect/turf_decal/techfloor{ + dir = 9 + }, +/turf/open/floor/plasteel/tech, +/area/ship/science/xenobiology) +"kZ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/light/directional/south, +/turf/open/floor/wood, +/area/ship/hallway/fore) +"la" = ( +/obj/effect/turf_decal/industrial/warning/corner, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/item/paper/crumpled, +/obj/machinery/camera/autoname{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"lb" = ( +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hangar/port) +"ld" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/machinery/camera/autoname, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/atmospherics) +"le" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ship/crew/office) +"lk" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/black/diagonal, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"lm" = ( +/obj/machinery/firealarm/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/item/kirbyplants{ + icon_state = "plant-04"; + pixel_x = -7; + pixel_y = 22 + }, +/turf/open/floor/carpet/nanoweave/purple, +/area/ship/science) +"lp" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"lq" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/cryo) +"lr" = ( +/obj/structure/window/reinforced, +/obj/effect/turf_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"lu" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/corner/opaque/black{ + dir = 1 + }, +/obj/effect/turf_decal/borderfloor, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"lv" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "obendo" + }, +/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, +/turf/open/floor/plating, +/area/ship/engineering) +"lx" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/structure/closet/secure_closet/engineering_electrical{ + anchored = 1 + }, +/obj/effect/turf_decal/box, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"lz" = ( +/obj/effect/turf_decal/trimline/opaque/purple/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/purple/filled/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/firealarm/directional/west, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ship/science) +"lB" = ( +/obj/machinery/washing_machine, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/dorm) +"lD" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/hallway/central) +"lE" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/techfloor{ + dir = 5 + }, +/obj/structure/sign/poster/contraband/power{ + pixel_y = 32; + pixel_x = 32 + }, +/obj/effect/turf_decal/corner_techfloor_gray{ + dir = 8 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"lH" = ( +/obj/machinery/door/airlock/external, +/obj/machinery/atmospherics/pipe/layer_manifold, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/warning, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "vela_labeva" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/science) +"lK" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/cargo) +"lM" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/camera/autoname{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ship/hallway/fore) +"lQ" = ( +/obj/machinery/mech_bay_recharge_port, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/tech/grid, +/area/ship/cargo) +"lR" = ( +/obj/docking_port/stationary{ + dir = 2; + dwidth = 15; + height = 15; + width = 30 + }, +/turf/template_noop, +/area/template_noop) +"lV" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/carpet/nanoweave/purple, +/area/ship/science) +"md" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"mi" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/corner/transparent/purple/diagonal, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"ml" = ( +/obj/machinery/vending/games, +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/central) +"mq" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"mC" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/machinery/modular_computer/console/preset/engineering{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"mK" = ( +/obj/machinery/door/airlock/command{ + dir = 4; + req_access = list(19) + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/tech, +/area/ship/science/ai_chamber) +"mN" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/trimline/transparent/green/filled/warning{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"mO" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4; + layer = 3.1 + }, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"mP" = ( +/obj/effect/turf_decal/trimline/opaque/purple/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/purple/filled/corner, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel/dark, +/area/ship/science) +"mR" = ( +/obj/effect/turf_decal/trimline/opaque/purple/filled/line, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/science) +"mS" = ( +/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/poddoor/shutters{ + id = "obfront"; + name = "Window Shutters"; + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/bridge) +"mW" = ( +/obj/structure/table/reinforced, +/obj/machinery/light/small/directional/south, +/obj/item/reagent_containers/glass/maunamug{ + pixel_y = 6; + pixel_x = 8 + }, +/obj/item/paper_bin{ + pixel_x = -6; + pixel_y = 1 + }, +/obj/item/pen/fourcolor{ + pixel_x = -6; + pixel_y = 2 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"mY" = ( +/obj/effect/turf_decal/steeldecal/steel_decals1, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"ng" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"nh" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/machinery/power/floodlight, +/turf/open/floor/plating, +/area/ship/storage) +"ni" = ( +/obj/machinery/cryopod{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor/orange{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4; + layer = 2.8 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew/cryo) +"nn" = ( +/obj/structure/sign/minutemen, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/hangar/port) +"no" = ( +/obj/structure/janitorialcart, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/item/mop, +/obj/item/reagent_containers/glass/bucket, +/obj/structure/mopbucket, +/turf/open/floor/pod, +/area/ship/cargo) +"np" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"nq" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/engineering/engine) +"nr" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/corner/opaque/black/diagonal{ + dir = 4 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"nw" = ( +/obj/structure/frame/machine, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/science/xenobiology) +"nA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/mineral/plastitanium, +/area/ship/bridge) +"nC" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/storage) +"nF" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"nO" = ( +/obj/effect/turf_decal/trimline/opaque/purple/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/purple/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/science) +"nP" = ( +/obj/machinery/door/poddoor/preopen{ + id = "obhangarent2" + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/mining, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hangar/port) +"nQ" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/green/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/green/filled/warning{ + dir = 8 + }, +/obj/machinery/door/airlock{ + name = "Showers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/tech, +/area/ship/crew) +"nS" = ( +/obj/effect/turf_decal/minutemen/edge{ + dir = 8 + }, +/obj/item/mecha_parts/part/ripley_right_arm, +/turf/open/floor/plasteel/mono/dark, +/area/ship/hangar/port) +"nU" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"nV" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"nW" = ( +/obj/structure/window/plasma/reinforced{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/power/smes/shuttle/precharged{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/door/poddoor/shutters{ + name = "Engine Shutters"; + id = "obengines"; + dir = 4 + }, +/turf/open/floor/engine, +/area/ship/engineering/atmospherics) +"oa" = ( +/obj/effect/turf_decal/trimline/opaque/purple/warning{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/opaque/purple/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/closet/firecloset/wall{ + dir = 8; + pixel_x = 28 + }, +/obj/machinery/button/door{ + dir = 8; + pixel_x = 22; + pixel_y = -16; + id = "vela_labeva"; + name = "airlock shutters"; + req_access = list(1) + }, +/turf/open/floor/plasteel/dark, +/area/ship/science) +"ot" = ( +/obj/machinery/camera/autoname{ + dir = 8 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external) +"ov" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/wood, +/area/ship/hallway/fore) +"oC" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/industrial/stand_clear{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"oJ" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4; + layer = 3.1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"oT" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/sign/poster/official/moth/boh{ + pixel_y = -32 + }, +/turf/open/floor/carpet/nanoweave/purple, +/area/ship/science) +"oU" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/obj/structure/sign/poster/minutemen/random{ + pixel_x = 28 + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"oZ" = ( +/obj/machinery/ai_slipper, +/obj/effect/turf_decal/box, +/turf/open/floor/plasteel/dark, +/area/ship/science) +"pd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4, +/obj/machinery/meter{ + target_layer = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer2{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/atmospherics) +"pe" = ( +/obj/machinery/camera/autoname{ + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external) +"pf" = ( +/obj/machinery/atmospherics/pipe/layer_manifold, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/science) +"pk" = ( +/obj/structure/table/wood, +/obj/item/trash/plate{ + pixel_x = 9 + }, +/obj/item/newspaper{ + pixel_x = -6; + pixel_y = 2 + }, +/obj/item/newspaper{ + pixel_x = -6; + pixel_y = 5 + }, +/obj/item/clothing/mask/cigarette/dromedary{ + pixel_x = 7; + pixel_y = 10 + }, +/obj/effect/decal/cleanable/vomit/old{ + pixel_x = 9; + pixel_y = 18 + }, +/turf/open/floor/carpet, +/area/ship/crew) +"pp" = ( +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/item/clothing/under/rank/cargo/miner/hazard, +/obj/item/clothing/shoes/workboots/mining, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson/prescription, +/obj/structure/closet/secure_closet/miner{ + populate = 0; + name = "pilot's equipment" + }, +/obj/item/clothing/gloves/explorer, +/obj/item/gps/mining, +/obj/item/stock_parts/cell/high/plus, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hangar/port) +"pq" = ( +/obj/effect/turf_decal/techfloor/orange{ + dir = 1 + }, +/obj/item/radio/intercom/wideband/directional/west, +/turf/open/floor/circuit/green, +/area/ship/science/ai_chamber) +"pw" = ( +/obj/structure/chair/sofa/left{ + dir = 8 + }, +/obj/effect/decal/cleanable/wrapping, +/turf/open/floor/carpet, +/area/ship/crew) +"pA" = ( +/obj/structure/table, +/obj/item/storage/fancy/cigarettes/cigpack_robust{ + pixel_x = -4 + }, +/obj/item/lighter{ + pixel_x = -9; + pixel_y = -4 + }, +/obj/item/newspaper{ + pixel_x = 5; + pixel_y = 9 + }, +/obj/item/holosign_creator/security{ + pixel_x = 4; + pixel_y = -1 + }, +/obj/item/reagent_containers/food/drinks/coffee{ + pixel_x = -8; + pixel_y = 14 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"pC" = ( +/obj/structure/noticeboard/qm{ + name = "Supply Officer's Notice Board"; + desc = "Important notices from the Supply Officer"; + pixel_y = 28 + }, +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/turf/open/floor/pod, +/area/ship/cargo) +"pG" = ( +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/on/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/warning/cee{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/science) +"pJ" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/toilet) +"pK" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/industrial/stand_clear, +/turf/open/floor/engine, +/area/ship/hangar/port) +"pM" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/science) +"pU" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"pW" = ( +/obj/machinery/camera/autoname{ + dir = 9 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external) +"pX" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/wood, +/area/ship/hallway/fore) +"qa" = ( +/obj/structure/table, +/obj/item/newspaper{ + pixel_x = -6; + pixel_y = 9 + }, +/obj/item/reagent_containers/food/drinks/mug{ + pixel_x = -9 + }, +/obj/item/toy/figure/scientist{ + pixel_x = 8; + pixel_y = 5 + }, +/obj/item/radio/old{ + pixel_y = -11 + }, +/turf/open/floor/carpet/nanoweave/purple, +/area/ship/science) +"qc" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/effect/turf_decal/corner/transparent/mauve/diagonal, +/obj/machinery/light/directional/west, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"qd" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"qe" = ( +/obj/machinery/computer/monitor{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/sign/warning/enginesafety{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"qj" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/ship/storage) +"qk" = ( +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/on/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/warning/cee{ + dir = 4 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/plasteel/tech, +/area/ship/science) +"qm" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/structure/closet/wall{ + dir = 4; + pixel_y = 0; + pixel_x = -28; + name = "spare uniforms" + }, +/obj/item/clothing/under/rank/security/officer/minutemen, +/obj/item/clothing/under/rank/security/officer/minutemen, +/obj/item/clothing/under/rank/security/officer/minutemen, +/obj/item/clothing/under/rank/security/officer/minutemen, +/obj/item/clothing/under/rank/security/officer/minutemen, +/obj/item/clothing/under/rank/security/officer/minutemen, +/obj/item/clothing/suit/toggle/lawyer/minutemen, +/obj/item/clothing/suit/toggle/lawyer/minutemen, +/obj/item/clothing/suit/toggle/lawyer/minutemen, +/obj/item/radio, +/obj/item/radio, +/obj/item/radio, +/obj/item/radio, +/obj/item/radio, +/obj/item/radio, +/turf/open/floor/plasteel/tech, +/area/ship/crew/cryo) +"qy" = ( +/obj/machinery/door/poddoor/preopen{ + id = "obhangarent2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/mining, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hangar/port) +"qB" = ( +/obj/structure/sign/poster/official/report_crimes{ + pixel_y = -32 + }, +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/item/clothing/under/rank/cargo/miner/hazard, +/obj/item/clothing/shoes/workboots/mining, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson/prescription, +/obj/structure/closet/secure_closet/miner{ + populate = 0; + name = "pilot's equipment" + }, +/obj/item/clothing/gloves/explorer, +/obj/item/gps/mining, +/obj/item/stock_parts/cell/high/plus, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hangar/port) +"qC" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/engineering/engine) +"qF" = ( +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = -6; + pixel_y = 5 + }, +/obj/item/toy/cards/deck{ + pixel_x = 6; + pixel_y = 1 + }, +/turf/open/floor/carpet, +/area/ship/crew) +"qG" = ( +/obj/machinery/power/shuttle/engine/electric{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/engine/hull, +/area/ship/engineering/engine) +"qJ" = ( +/obj/structure/table/reinforced, +/obj/item/gps{ + pixel_y = -2; + pixel_x = -5; + gpstag = "GOLD-VHEV" + }, +/obj/machinery/button/door{ + dir = 8; + pixel_y = 4; + pixel_x = 8; + id = "obfront"; + name = "Window Shutters" + }, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"qO" = ( +/obj/effect/turf_decal/techfloor, +/obj/machinery/light/directional/south, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"qP" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"qR" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"qS" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black/corner{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"qT" = ( +/obj/structure/sign/poster/official/bless_this_spess{ + pixel_x = -32 + }, +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/machinery/camera/autoname{ + dir = 5 + }, +/obj/machinery/suit_storage_unit/inherit, +/obj/item/clothing/suit/space/pilot, +/obj/item/clothing/head/helmet/space/pilot/random, +/obj/item/reagent_containers/food/drinks/bottle/trappist, +/obj/structure/sign/warning/nosmoking/burnt{ + pixel_y = -28; + pixel_x = -4 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hangar/port) +"qU" = ( +/obj/effect/turf_decal/arrows{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/traffic, +/turf/open/floor/engine, +/area/ship/external) +"qX" = ( +/obj/structure/filingcabinet/double, +/obj/item/clipboard, +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/box, +/turf/open/floor/plasteel/tech, +/area/ship/science) +"qY" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/closet/secure_closet{ + name = "bridge officer's locker"; + icon_state = "cap"; + req_access_txt = "19" + }, +/obj/effect/turf_decal/box, +/obj/machinery/light/small/directional/west, +/obj/item/binoculars, +/obj/item/megaphone, +/obj/item/clothing/glasses/sunglasses, +/obj/item/clothing/shoes/combat, +/obj/item/radio/headset/minutemen/alt/captain, +/obj/item/storage/backpack, +/obj/item/storage/backpack/satchel, +/obj/item/clipboard, +/obj/item/reagent_containers/spray/pepper, +/turf/open/floor/mineral/plastitanium, +/area/ship/bridge) +"ra" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer4{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/external) +"rb" = ( +/obj/machinery/computer/security{ + dir = 8 + }, +/obj/effect/turf_decal/box/red, +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"rd" = ( +/obj/effect/turf_decal/trimline/opaque/purple/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/purple/filled/line, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/turf/open/floor/plasteel/dark, +/area/ship/science) +"rm" = ( +/obj/structure/closet/secure_closet/security{ + populate = 0 + }, +/obj/item/reagent_containers/spray/pepper, +/obj/item/clothing/mask/gas/sechailer/minutemen, +/obj/item/clothing/under/rank/security/officer/minutemen, +/obj/item/clothing/head/helmet/bulletproof/minutemen, +/obj/item/storage/belt/security/full, +/obj/item/restraints/handcuffs, +/obj/item/ammo_box/magazine/m45/rubbershot, +/obj/item/ammo_box/magazine/m45/rubbershot, +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/item/clothing/suit/armor/vest/marine, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security/armory) +"rn" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/structure/railing{ + dir = 4; + layer = 3.1 + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"rr" = ( +/obj/machinery/shower{ + pixel_y = 16 + }, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/effect/turf_decal/floordetail/tiled, +/turf/open/floor/plasteel/tech, +/area/ship/crew) +"rs" = ( +/obj/structure/rack, +/obj/machinery/door/window/brigdoor/northleft, +/obj/effect/turf_decal/trimline/opaque/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/techfloor, +/obj/effect/spawner/lootdrop/aimodule_harmless, +/obj/effect/spawner/lootdrop/aimodule_harmless, +/obj/effect/spawner/lootdrop/aimodule_harmless, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plasteel/tech/grid, +/area/ship/science/ai_chamber) +"rv" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"rw" = ( +/obj/structure/chair/sofa/right{ + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/obj/item/kirbyplants{ + icon_state = "plant-22"; + pixel_x = -8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/carpet, +/area/ship/crew) +"rx" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/engineering) +"ry" = ( +/obj/effect/turf_decal/box/corners, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/pod, +/area/ship/cargo) +"rA" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/obj/structure/closet/secure_closet/engineering_welding{ + anchored = 1 + }, +/obj/effect/turf_decal/box, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"rB" = ( +/obj/effect/turf_decal/trimline/opaque/purple/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/purple/filled/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/dark, +/area/ship/science) +"rO" = ( +/obj/effect/turf_decal/trimline/opaque/purple/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/purple/filled/warning{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/airlock/research{ + name = "Science Lab"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/tech, +/area/ship/science) +"rR" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/wood, +/area/ship/crew/office) +"rT" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/green/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/green/filled/warning{ + dir = 8 + }, +/obj/machinery/door/airlock{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/crew/canteen) +"sa" = ( +/obj/machinery/portable_atmospherics/pump, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/effect/decal/cleanable/generic, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating, +/area/ship/storage) +"sb" = ( +/obj/effect/turf_decal/techfloor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"sc" = ( +/obj/machinery/door/poddoor/preopen{ + id = "obhangarent1" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/door/poddoor/preopen{ + id = "obhangarent1" + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/central) +"si" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"sn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/sign/warning/fire{ + pixel_y = 24; + pixel_x = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"sr" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"sy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/opaque/orange/filled/warning, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"sA" = ( +/obj/machinery/atmospherics/components/binary/pump/layer4{ + name = "Waste to Environment"; + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/atmospherics) +"sD" = ( +/obj/structure/sign/poster/official/cohiba_robusto_ad{ + pixel_y = -32 + }, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/structure/closet/secure_closet/freezer/meat, +/turf/open/floor/pod, +/area/ship/cargo) +"sF" = ( +/obj/effect/turf_decal/techfloor/orange{ + dir = 1 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/circuit/green, +/area/ship/science/ai_chamber) +"sK" = ( +/turf/open/floor/engine/hull/reinforced, +/area/ship/external) +"sM" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"sN" = ( +/obj/machinery/atmospherics/pipe/layer_manifold{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/green/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/green/filled/warning{ + dir = 8 + }, +/obj/machinery/door/airlock{ + name = "Airlock Access"; + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"sR" = ( +/obj/machinery/porta_turret/ship{ + dir = 8 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/bridge) +"sV" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/stairs{ + dir = 8 + }, +/area/ship/bridge) +"ta" = ( +/obj/effect/turf_decal/trimline/opaque/red/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning, +/obj/machinery/door/poddoor{ + id = "obmine11" + }, +/turf/open/floor/engine, +/area/ship/hangar/port) +"tb" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/corner/opaque/black/diagonal, +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"tc" = ( +/obj/structure/railing, +/obj/effect/turf_decal/steeldecal/steel_decals1{ + dir = 5 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"tf" = ( +/obj/machinery/door/airlock/external, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "vela_labeva" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/science) +"tk" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/corner/opaque/black/diagonal, +/obj/machinery/camera/autoname{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"tm" = ( +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/item/cutting_board, +/obj/structure/closet/crate/freezer{ + name = "food supplies" + }, +/obj/item/cutting_board, +/obj/item/pizzabox/pineapple, +/obj/item/pizzabox/pineapple, +/obj/item/pizzabox/pineapple, +/obj/item/storage/box/donkpockets, +/obj/item/reagent_containers/glass/mortar/metal, +/obj/item/pestle, +/obj/item/reagent_containers/food/condiment/saltshaker, +/obj/item/reagent_containers/food/condiment/saltshaker, +/obj/item/reagent_containers/food/condiment/peppermill, +/obj/item/reagent_containers/food/condiment/peppermill, +/turf/open/floor/pod, +/area/ship/cargo) +"tn" = ( +/obj/machinery/blackbox_recorder, +/obj/machinery/door/window/brigdoor/eastright, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) +"tq" = ( +/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/poddoor/shutters{ + id = "vela_cap" + }, +/turf/open/floor/plating, +/area/ship/crew/office) +"tx" = ( +/obj/structure/frame/machine, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/science/xenobiology) +"tA" = ( +/obj/effect/turf_decal/industrial/caution{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/sign/warning/nosmoking{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"tI" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/railing{ + dir = 4; + layer = 3.1 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/engineering) +"tJ" = ( +/obj/structure/window/reinforced, +/obj/structure/rack, +/obj/machinery/door/window/brigdoor/eastleft, +/obj/item/gps{ + pixel_y = -2; + pixel_x = -5; + gpstag = "GOLD-VHEV" + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/item/multitool, +/obj/item/storage/toolbox/mechanical, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"tO" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/mining{ + name = "Cargo Bay" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/brown/filled/warning, +/obj/effect/turf_decal/trimline/opaque/brown/filled/warning{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"tP" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/carpet/nanoweave/purple, +/area/ship/science) +"tQ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/effect/turf_decal/corner/transparent/mauve/diagonal, +/obj/effect/turf_decal/steeldecal/steel_decals_central4, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"tR" = ( +/obj/effect/turf_decal/minutemen/edge{ + dir = 1 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/hangar/port) +"tT" = ( +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/on/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer5, +/obj/effect/turf_decal/industrial/warning{ + dir = 5 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"tW" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/machinery/microwave{ + anchored = 0 + }, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 6 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"tY" = ( +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/machinery/button/door{ + pixel_y = 23; + pixel_x = -7; + name = "Bay 1 Doors"; + id = "obmine11" + }, +/obj/machinery/button/shieldwallgen{ + id = "obhang21"; + name = "Bay 1 Air Shield"; + pixel_y = 22; + pixel_x = 5 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hangar/port) +"uc" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/carpet/nanoweave/purple, +/area/ship/science) +"ue" = ( +/obj/structure/urinal{ + pixel_y = 32 + }, +/obj/effect/turf_decal/borderfloor{ + dir = 9 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/crew/toilet) +"ug" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"ul" = ( +/obj/structure/table, +/obj/machinery/jukebox/boombox, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/ship/hallway/central) +"uo" = ( +/obj/structure/table, +/obj/item/clipboard{ + pixel_y = 8; + pixel_x = -3 + }, +/obj/item/paper/crumpled{ + pixel_x = 9; + pixel_y = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"up" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/wood, +/area/ship/crew) +"uq" = ( +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/machinery/button/shieldwallgen{ + id = "obcargos"; + dir = 8; + pixel_x = 23; + pixel_y = 5 + }, +/obj/machinery/button/door{ + dir = 8; + pixel_y = -5; + pixel_x = 25; + id = "obcargo"; + name = "Cargo Shutters" + }, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"ur" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/item/weldingtool/mini, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/techfloor/hole/right{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/engine, +/area/ship/hangar/port) +"us" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"uv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"uw" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8; + layer = 3.1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"uB" = ( +/obj/effect/turf_decal/minutemen/corner, +/obj/item/circuitboard/mecha/ripley/peripherals, +/turf/open/floor/plasteel/mono/dark, +/area/ship/hangar/port) +"uQ" = ( +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/structure/closet/secure_closet/freezer/fridge/open, +/turf/open/floor/pod, +/area/ship/cargo) +"uR" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/effect/decal/cleanable/generic, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/atmospherics) +"uT" = ( +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/item/clothing/under/rank/cargo/miner/hazard, +/obj/item/clothing/shoes/workboots/mining, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson/prescription, +/obj/structure/closet/secure_closet/miner{ + populate = 0; + name = "pilot's equipment" + }, +/obj/item/clothing/gloves/explorer, +/obj/item/gps/mining, +/obj/item/stock_parts/cell/high/plus, +/obj/structure/sign/poster/official/safety_eye_protection{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hangar/port) +"uU" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"uX" = ( +/obj/machinery/door/poddoor{ + id = "obcargo" + }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning, +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + dir = 4; + id = "obcargos" + }, +/turf/open/floor/engine, +/area/ship/cargo) +"vz" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/techfloor/hole/right{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/engine, +/area/ship/hangar/port) +"vD" = ( +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer3{ + dir = 8 + }, +/obj/machinery/button/door{ + pixel_y = 23; + pixel_x = 7; + name = "Bay 1 Doors"; + id = "obmine11" + }, +/obj/machinery/button/shieldwallgen{ + id = "obhang21"; + name = "Bay 1 Air Shield"; + pixel_y = 22; + pixel_x = -5 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hangar/port) +"vK" = ( +/obj/effect/turf_decal/trimline/opaque/purple/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/purple/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plasteel/dark, +/area/ship/science) +"vM" = ( +/obj/structure/chair/sofa/left{ + dir = 8 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/carpet, +/area/ship/crew) +"vO" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = -12 + }, +/obj/structure/mirror{ + pixel_x = -28 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4; + pixel_y = 1 + }, +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/borderfloor{ + dir = 9 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/crew/toilet) +"vS" = ( +/obj/machinery/camera/autoname{ + dir = 5 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external) +"vV" = ( +/obj/structure/rack, +/obj/structure/table_frame/wood, +/obj/structure/table_frame/wood, +/obj/structure/table_frame/wood, +/obj/structure/table_frame/wood, +/obj/structure/table_frame/wood, +/obj/structure/table_frame/wood, +/obj/structure/table_frame/wood, +/obj/structure/table_frame/wood, +/obj/structure/table_frame/wood, +/obj/structure/table_frame/wood, +/obj/structure/table_frame/wood, +/obj/structure/table_frame/wood, +/obj/structure/table_frame/wood, +/obj/structure/table_frame/wood, +/obj/structure/table_frame/wood, +/obj/item/stack/sheet/mineral/wood{ + amount = 30 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/crew/canteen) +"vX" = ( +/obj/structure/sign/warning/chemdiamond{ + pixel_x = 32 + }, +/obj/structure/table/chem, +/obj/item/reagent_containers/glass/filter{ + pixel_x = 12 + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"wa" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/carpet/nanoweave/purple, +/area/ship/science) +"wh" = ( +/obj/structure/table, +/obj/item/clothing/mask/cigarette/cigar/havana{ + pixel_y = -1; + pixel_x = 8 + }, +/obj/item/lighter, +/obj/machinery/button/door{ + name = "Engine Shutters"; + id = "obengines"; + dir = 4; + pixel_y = 7; + pixel_x = -24 + }, +/obj/structure/sign/poster/contraband/hacking_guide{ + pixel_y = -30 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"wi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair/plastic{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/atmospherics) +"wk" = ( +/obj/structure/closet/wall{ + dir = 1; + pixel_y = -28 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew) +"wl" = ( +/obj/effect/turf_decal/rechargefloor, +/obj/structure/sign/poster/contraband/steppyflag{ + pixel_y = 32 + }, +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp, +/obj/mecha/working/ripley/cargo, +/turf/open/floor/plasteel/tech/grid, +/area/ship/cargo) +"wn" = ( +/obj/structure/falsewall/plastitanium, +/turf/open/floor/plating, +/area/ship/cargo) +"wr" = ( +/obj/effect/decal/cleanable/oil, +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/structure/railing/corner{ + dir = 4; + layer = 3.1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"wv" = ( +/obj/effect/turf_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/dorm) +"ww" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/wood, +/area/ship/crew) +"wz" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/techfloor, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"wA" = ( +/obj/effect/decal/cleanable/dirt, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering/engine) +"wB" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/generic, +/turf/open/floor/plating, +/area/ship/storage) +"wD" = ( +/obj/structure/railing, +/obj/effect/turf_decal/spline/fancy/opaque/black/corner{ + dir = 4 + }, +/obj/effect/turf_decal/minutemen/corner{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/turf/open/floor/mineral/plastitanium, +/area/ship/bridge) +"wF" = ( +/obj/structure/window/plasma/reinforced{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/obj/machinery/light_switch{ + pixel_y = 23; + pixel_x = -5 + }, +/obj/machinery/firealarm/directional/north{ + pixel_x = 6 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"wH" = ( +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 5 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"wO" = ( +/obj/effect/turf_decal/trimline/opaque/purple/warning{ + dir = 1 + }, +/obj/machinery/modular_computer/console/preset/civilian, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"wW" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/engineering) +"wZ" = ( +/obj/machinery/door/airlock/command{ + name = "Bridge"; + req_access_txt = "19"; + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/solgovgold/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/solgovgold/filled/warning{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"xc" = ( +/obj/structure/table, +/obj/item/canvas/nineteenXnineteen, +/obj/item/canvas/nineteenXnineteen, +/obj/item/canvas/nineteenXnineteen, +/obj/item/storage/crayons, +/obj/item/toy/crayon/spraycan, +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/ship/hallway/central) +"xh" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/wood, +/area/ship/hallway/fore) +"xl" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/green/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/green/filled/warning{ + dir = 4 + }, +/obj/machinery/door/airlock{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"xm" = ( +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/railing/corner{ + dir = 1; + layer = 3.1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/hallway/central) +"xy" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"xz" = ( +/obj/effect/turf_decal/industrial/caution, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/tech, +/area/ship/hangar/port) +"xA" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/stairs{ + dir = 8 + }, +/area/ship/bridge) +"xB" = ( +/obj/effect/turf_decal/industrial/stand_clear{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"xC" = ( +/obj/effect/turf_decal/trimline/opaque/red/filled/line{ + dir = 1 + }, +/obj/structure/railing{ + dir = 1; + layer = 3.1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"xD" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/hallway/fore) +"xF" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4; + layer = 3.1 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/engineering) +"xH" = ( +/obj/structure/sink{ + dir = 8; + pixel_y = 0; + pixel_x = 13 + }, +/obj/structure/mirror{ + pixel_x = 28 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/toilet) +"xI" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/effect/turf_decal/corner_techfloor_gray{ + dir = 1 + }, +/obj/machinery/button/door{ + pixel_y = 24; + pixel_x = 8; + id = "obai2"; + name = "AI core blast door button"; + req_access = list(19) + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/science/ai_chamber) +"xK" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"xM" = ( +/obj/structure/toilet{ + pixel_y = 12 + }, +/obj/effect/turf_decal/floordetail/pryhole, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plasteel/mono/dark, +/area/ship/crew/toilet) +"xN" = ( +/obj/structure/table, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/item/stack/sheet/glass/twenty, +/obj/item/stack/sheet/metal/twenty{ + pixel_y = 14 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"xR" = ( +/obj/machinery/camera/autoname{ + dir = 5 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external) +"xT" = ( +/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/poddoor/preopen{ + id = "obhangarent21"; + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"xU" = ( +/obj/structure/bed, +/obj/structure/curtain/cloth, +/obj/item/bedsheet/blue, +/obj/machinery/light/small/directional/north, +/turf/open/floor/wood, +/area/ship/crew/dorm) +"yb" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"yd" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/wood, +/area/ship/hallway/central) +"yg" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"yi" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/machinery/button/door{ + pixel_y = -22; + pixel_x = -4; + name = "umbilical window shutters"; + id = "obhangarent11"; + dir = 1 + }, +/obj/machinery/button/door{ + pixel_y = -22; + pixel_x = 9; + name = "pod lockdown"; + id = "obhangarent1"; + dir = 1; + req_access_txt = list(1) + }, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"yj" = ( +/obj/machinery/holopad/secure, +/obj/structure/sign/warning/testchamber{ + pixel_x = -28 + }, +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/corner/transparent/purple/diagonal, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"yk" = ( +/obj/structure/rack, +/obj/item/stack/sheet/mineral/plasma/twenty, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ship/storage) +"ym" = ( +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"yn" = ( +/obj/machinery/computer/helm{ + dir = 8 + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) +"yo" = ( +/obj/machinery/door/poddoor/preopen{ + id = "obhangarent1" + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/research, +/turf/open/floor/plasteel/tech/grid, +/area/ship/science) +"yr" = ( +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/on/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer5, +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/industrial/warning{ + dir = 6 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"ys" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/hallway/central) +"yt" = ( +/obj/machinery/suit_storage_unit/engine, +/obj/effect/turf_decal/box, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"yu" = ( +/obj/structure/rack, +/obj/item/mecha_parts/mecha_equipment/conversion_kit/ripley/cmm, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/hangar/port) +"yv" = ( +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/components/unary/tank/air{ + dir = 4; + piping_layer = 2 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/atmospherics) +"yx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil{ + icon_state = "floor6" + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"yA" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/black/diagonal, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"yD" = ( +/obj/machinery/shower{ + pixel_y = 16 + }, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/effect/turf_decal/floordetail/tiled, +/turf/open/floor/plasteel/tech, +/area/ship/crew) +"yG" = ( +/obj/effect/turf_decal/trimline/opaque/purple/line, +/obj/effect/turf_decal/trimline/opaque/purple/filled/line{ + dir = 1 + }, +/obj/structure/sign/warning/vacuum/external{ + pixel_y = -24 + }, +/turf/open/floor/plasteel/dark, +/area/ship/science) +"yH" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"yI" = ( +/obj/effect/turf_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"zf" = ( +/obj/structure/window/plasma/reinforced{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/power/smes/shuttle/precharged{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/door/poddoor/shutters{ + name = "Engine Shutters"; + id = "obengines"; + dir = 4 + }, +/turf/open/floor/engine, +/area/ship/engineering/engine) +"zi" = ( +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + dir = 8; + id = "obhang22" + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning{ + dir = 1 + }, +/obj/machinery/door/poddoor{ + id = "obmine12" + }, +/turf/open/floor/engine, +/area/ship/hangar/port) +"zk" = ( +/obj/item/kirbyplants/random, +/obj/structure/sign/warning/securearea{ + pixel_y = 8; + pixel_x = -26 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plasteel/dark, +/area/ship/science) +"zl" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/green/filled/warning, +/obj/effect/turf_decal/trimline/opaque/green/filled/warning{ + dir = 1 + }, +/obj/machinery/door/airlock{ + name = "Dormitory" + }, +/turf/open/floor/plasteel/tech, +/area/ship/crew/dorm) +"zr" = ( +/obj/structure/frame/machine, +/obj/effect/turf_decal/techfloor, +/obj/machinery/firealarm/directional/south, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/plasteel/tech, +/area/ship/science/xenobiology) +"zs" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/engine, +/area/ship/hangar/port) +"zy" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4; + name = "Operations" + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"zz" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"zB" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/obj/effect/turf_decal/minutemen/edge{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/ship/bridge) +"zC" = ( +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/machinery/vending/snack/random, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/central) +"zF" = ( +/obj/structure/frame/computer{ + dir = 1 + }, +/obj/effect/turf_decal/techfloor, +/obj/machinery/light/directional/south, +/turf/open/floor/plasteel/tech, +/area/ship/science/xenobiology) +"zJ" = ( +/turf/open/floor/carpet, +/area/ship/crew) +"zK" = ( +/obj/structure/chair/sofa/corner, +/obj/item/radio/intercom/directional/east, +/obj/item/toy/plush/hornet{ + pixel_y = 7 + }, +/turf/open/floor/carpet, +/area/ship/crew) +"zL" = ( +/obj/effect/turf_decal/techfloor/corner{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/corner/transparent/mauve/diagonal, +/obj/effect/turf_decal/steeldecal/steel_decals9{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/caution{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"zN" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer4{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"zR" = ( +/obj/structure/closet/firecloset/wall{ + dir = 1; + pixel_y = -28 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/firstaid/fire, +/obj/effect/turf_decal/techfloor, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"zV" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/engineering) +"zX" = ( +/turf/open/floor/wood, +/area/ship/hallway/central) +"Ab" = ( +/obj/effect/turf_decal/steeldecal/steel_decals_central6{ + dir = 8 + }, +/obj/effect/turf_decal/steeldecal/steel_decals7, +/obj/effect/turf_decal/steeldecal/steel_decals7{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/item/paper_bin{ + pixel_x = 6; + pixel_y = 3 + }, +/obj/item/paper_bin/carbon{ + pixel_x = -9; + pixel_y = 3 + }, +/obj/item/pen/blue{ + pixel_x = 7; + pixel_y = 4 + }, +/obj/item/pen/fountain{ + pixel_x = 5 + }, +/obj/item/pen/fourcolor{ + pixel_x = 10; + pixel_y = 7 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"Ae" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/dorm) +"Ai" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/wood, +/area/ship/hallway/fore) +"Ak" = ( +/obj/structure/grille, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external) +"An" = ( +/obj/structure/rack, +/obj/machinery/door/window/brigdoor/northright, +/obj/effect/turf_decal/trimline/opaque/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/techfloor, +/obj/effect/spawner/lootdrop/aimodule_neutral, +/obj/effect/spawner/lootdrop/aimodule_neutral, +/obj/effect/spawner/lootdrop/aimodule_neutral, +/turf/open/floor/plasteel/tech/grid, +/area/ship/science/ai_chamber) +"Aq" = ( +/obj/machinery/mineral/ore_redemption, +/obj/effect/turf_decal/industrial/outline/yellow, +/turf/open/floor/plasteel/tech, +/area/ship/hangar/port) +"Ar" = ( +/obj/item/radio/intercom/directional/south, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"Au" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/structure/railing{ + dir = 4; + layer = 3.1 + }, +/obj/structure/railing{ + dir = 8; + layer = 3.1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/ship/hallway/central) +"Av" = ( +/obj/structure/table/chem, +/obj/item/reagent_scanner, +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"AB" = ( +/obj/item/analyzer, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/power/apc/auto_name/directional/east, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/atmospherics) +"AC" = ( +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + dir = 4; + id = "obhang21" + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning, +/obj/machinery/door/poddoor{ + id = "obmine11" + }, +/turf/open/floor/engine, +/area/ship/hangar/port) +"AD" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/engineering) +"AF" = ( +/obj/machinery/atmospherics/components/binary/valve/digital/layer2, +/obj/machinery/atmospherics/components/binary/valve/digital/layer4, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/central) +"AN" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/atmospherics) +"AO" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/effect/turf_decal/trimline/opaque/green/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/green/filled/warning, +/obj/machinery/door/airlock{ + name = "Restroom" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/tech, +/area/ship/crew/toilet) +"AR" = ( +/obj/effect/turf_decal/box/corners, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 9 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"AS" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/dorm) +"Bc" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/structure/cable, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"Bh" = ( +/obj/effect/decal/cleanable/oil/streak, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"Bn" = ( +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor/orange/corner{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/crew/cryo) +"Bq" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"Br" = ( +/obj/structure/chair/comfy/brown{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/crew/office) +"Bu" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/turf_decal/steeldecal/steel_decals_central7{ + pixel_y = 0; + dir = 8; + pixel_x = 1 + }, +/obj/effect/turf_decal/steeldecal/steel_decals7{ + dir = 4 + }, +/obj/effect/turf_decal/steeldecal/steel_decals7, +/obj/structure/cable, +/turf/open/floor/plasteel/dark, +/area/ship/crew/toilet) +"BB" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/item/kirbyplants/random{ + pixel_x = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/mineral/plastitanium, +/area/ship/bridge) +"BC" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/effect/turf_decal/siding/wood, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/wood, +/area/ship/hallway/fore) +"BE" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"BH" = ( +/obj/structure/chair/sofa, +/obj/machinery/light/small/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/carpet, +/area/ship/crew) +"BI" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"BN" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/trimline/opaque/green/filled/warning, +/obj/effect/turf_decal/trimline/opaque/green/filled/warning{ + dir = 1 + }, +/obj/machinery/door/airlock, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"BO" = ( +/obj/machinery/camera/autoname{ + dir = 1 + }, +/obj/structure/sign/poster/minutemen/random{ + pixel_x = 28; + pixel_y = 0 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"BQ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/science/ai_chamber) +"BR" = ( +/obj/structure/closet/secure_closet/engineering_personal{ + anchored = 1 + }, +/obj/effect/turf_decal/box, +/obj/item/pipe_dispenser, +/obj/machinery/light/small/directional/east, +/obj/structure/sign/poster/contraband/random{ + pixel_y = 30 + }, +/obj/item/clothing/suit/toggle/industrial, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"BW" = ( +/obj/structure/curtain/cloth, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plasteel/dark, +/area/ship/crew) +"BX" = ( +/obj/structure/chair/sofa, +/obj/machinery/newscaster/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/carpet, +/area/ship/crew) +"BY" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/airlock, +/obj/effect/turf_decal/trimline/opaque/green/filled/warning{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/green/filled/warning, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"Ca" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"Cd" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/security/armory) +"Ce" = ( +/turf/open/floor/carpet/nanoweave/purple, +/area/ship/science) +"Cj" = ( +/obj/machinery/power/shuttle/engine/electric{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/engine/hull, +/area/ship/engineering/atmospherics) +"Cp" = ( +/obj/effect/turf_decal/steeldecal/steel_decals7, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/stand_clear, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"Cq" = ( +/obj/effect/turf_decal/minutemen/edge{ + dir = 4 + }, +/obj/item/mecha_parts/part/ripley_left_arm, +/turf/open/floor/plasteel/mono/dark, +/area/ship/hangar/port) +"Cu" = ( +/obj/structure/reagent_dispensers/peppertank{ + pixel_y = -28 + }, +/obj/structure/cable{ + icon_state = "5-8" + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"Cw" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4; + name = "Helm" + }, +/obj/effect/turf_decal/steeldecal/steel_decals3, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"Cz" = ( +/obj/effect/turf_decal/trimline/opaque/purple/warning{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/purple/filled/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/science) +"CD" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/corner/transparent/purple/diagonal, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"CF" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/mineral/plastitanium, +/area/ship/bridge) +"CG" = ( +/obj/structure/frame/machine, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/science/xenobiology) +"CI" = ( +/obj/structure/table/reinforced, +/obj/machinery/light/small/directional/north, +/obj/item/radio/intercom/wideband/table{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"CK" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4; + layer = 3.1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"CM" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/turf/open/floor/engine, +/area/ship/hangar/port) +"CN" = ( +/obj/structure/frame/machine, +/obj/effect/turf_decal/techfloor, +/obj/machinery/button/door{ + dir = 8; + pixel_x = 22; + pixel_y = 7; + id = "vela_lablock" + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/plasteel/tech, +/area/ship/science/xenobiology) +"CO" = ( +/obj/machinery/cryopod, +/obj/effect/turf_decal/techfloor/orange{ + dir = 1 + }, +/obj/structure/railing{ + dir = 1; + layer = 2.8 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew/cryo) +"CS" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/effect/turf_decal/siding/wood, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/wood, +/area/ship/hallway/fore) +"CW" = ( +/obj/structure/table, +/obj/item/toy/cards/deck, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/obj/structure/sign/poster/contraband/engis_unite{ + pixel_y = 32 + }, +/obj/item/spacecash/bundle/pocketchange{ + pixel_y = 9; + pixel_x = 8 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"CX" = ( +/obj/machinery/rnd/production/circuit_imprinter/department/basic, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plasteel/tech, +/area/ship/hangar/port) +"Dd" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/sign/poster/random{ + pixel_y = 30 + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/dorm) +"Dr" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/door/airlock/command{ + name = "Captain's Quarters"; + req_access = list(20) + }, +/obj/effect/turf_decal/trimline/opaque/solgovgold/filled/warning, +/obj/effect/turf_decal/trimline/opaque/solgovgold/filled/warning{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/crew/office) +"Dt" = ( +/obj/structure/closet/firecloset/full{ + anchored = 1 + }, +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/obj/structure/sign/directions/engineering{ + dir = 8; + pixel_y = 7; + pixel_x = -32 + }, +/obj/structure/sign/directions/command{ + dir = 4; + pixel_x = -32 + }, +/obj/structure/sign/directions/supply{ + pixel_y = -7; + pixel_x = -32; + dir = 4 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/central) +"Dw" = ( +/obj/structure/dresser, +/obj/machinery/newscaster/directional/east, +/turf/open/floor/wood, +/area/ship/crew/dorm) +"Dy" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ship/storage) +"DD" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"DI" = ( +/obj/effect/turf_decal/industrial/warning/corner, +/obj/effect/turf_decal/spline/fancy/opaque/black/corner, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"DL" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4; + layer = 3.1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"DM" = ( +/obj/machinery/camera/autoname{ + dir = 10 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"DP" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/corner/transparent/purple/diagonal, +/obj/effect/turf_decal/steeldecal/steel_decals10{ + dir = 4 + }, +/obj/effect/turf_decal/steeldecal/steel_decals10, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"Eb" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer3{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hangar/port) +"Ec" = ( +/obj/machinery/airalarm/directional/east, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/structure/cable, +/obj/machinery/power/port_gen/pacman{ + anchored = 1 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"Ed" = ( +/obj/effect/turf_decal/box/corners, +/obj/machinery/shieldgen, +/obj/effect/decal/cleanable/garbage, +/obj/machinery/light/small/broken/directional/east, +/turf/open/floor/plating, +/area/ship/storage) +"Ef" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/effect/turf_decal/steeldecal/steel_decals6, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"Ek" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/bridge) +"El" = ( +/obj/effect/turf_decal/trimline/opaque/purple/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/purple/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/science) +"Em" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"En" = ( +/obj/structure/chair/sofa{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/carpet, +/area/ship/crew) +"Eo" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/box/corners, +/obj/machinery/power/floodlight, +/turf/open/floor/plating, +/area/ship/storage) +"Ex" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/wood, +/area/ship/crew) +"Ey" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/camera/autoname{ + dir = 10 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/engineering) +"Ez" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"EC" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/engine, +/area/ship/hangar/port) +"ED" = ( +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"EE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/atmospherics) +"EG" = ( +/obj/structure/window/reinforced, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"EH" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer4{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"EJ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plating, +/area/ship/storage) +"EK" = ( +/obj/effect/turf_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/camera/autoname{ + dir = 1 + }, +/turf/open/floor/wood, +/area/ship/crew) +"EM" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/effect/turf_decal/minutemen/edge, +/turf/open/floor/mineral/plastitanium, +/area/ship/bridge) +"EN" = ( +/obj/machinery/mech_bay_recharge_port{ + dir = 1 + }, +/obj/effect/turf_decal/box/corners, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hangar/port) +"ER" = ( +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/power/port_gen/pacman{ + anchored = 1 + }, +/obj/machinery/camera/autoname, +/obj/structure/sign/warning/electricshock{ + pixel_y = 30 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"EU" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"EX" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black/corner{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"Fg" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering/engine) +"Fl" = ( +/obj/machinery/door/poddoor/preopen{ + id = "obhangarent1" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/research, +/turf/open/floor/plasteel/tech/grid, +/area/ship/science) +"Fr" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/minutemen/corner{ + dir = 4 + }, +/obj/item/mecha_parts/part/ripley_left_leg, +/turf/open/floor/plasteel/mono/dark, +/area/ship/hangar/port) +"Fw" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/wood, +/area/ship/hallway/fore) +"Fx" = ( +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/structure/railing/corner{ + dir = 1; + layer = 3.1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"Fy" = ( +/obj/effect/turf_decal/industrial/outline/red, +/obj/effect/turf_decal/rechargefloor, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hangar/port) +"Fz" = ( +/obj/item/bedsheet/cosmos, +/obj/structure/bed, +/obj/structure/curtain/cloth, +/turf/open/floor/carpet/royalblack, +/area/ship/crew/office) +"FC" = ( +/obj/effect/turf_decal/trimline/opaque/purple/filled/warning, +/obj/effect/turf_decal/trimline/opaque/purple/filled/warning{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/airlock/research, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/tech, +/area/ship/science/xenobiology) +"FF" = ( +/obj/machinery/portable_atmospherics/scrubber/huge/movable, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/corners, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/sign/poster/contraband/gec{ + pixel_y = -30 + }, +/turf/open/floor/plating, +/area/ship/storage) +"FJ" = ( +/obj/structure/table/chem, +/obj/machinery/reagentgrinder{ + pixel_y = 11 + }, +/obj/item/reagent_containers/food/snacks/grown/citrus/lemon{ + pixel_y = 8 + }, +/obj/effect/turf_decal/techfloor, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"FK" = ( +/obj/machinery/airalarm/directional/south, +/obj/structure/table/reinforced, +/obj/machinery/photocopier/faxmachine/longrange, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"FN" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/effect/turf_decal/corner/transparent/purple/diagonal, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"FR" = ( +/obj/effect/turf_decal/techfloor, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/directional/south, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"FS" = ( +/obj/structure/closet/secure_closet{ + name = "foreman's locker"; + icon_state = "cap"; + req_access = list(56) + }, +/obj/item/clothing/head/cowboy/sec/minutemen, +/obj/item/clothing/under/rank/command/minutemen, +/obj/item/storage/backpack, +/obj/item/storage/backpack/satchel, +/obj/item/clothing/glasses/sunglasses, +/obj/item/clothing/shoes/combat, +/obj/item/radio/headset/minutemen/alt/captain, +/obj/item/megaphone, +/obj/item/binoculars, +/obj/effect/turf_decal/box, +/obj/item/clothing/glasses/meson/engine, +/obj/item/clothing/suit/toggle/industrial, +/turf/open/floor/mineral/plastitanium, +/area/ship/bridge) +"Ga" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 2 + }, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/open/floor/wood, +/area/ship/crew) +"Gb" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/structure/table, +/obj/machinery/firealarm/directional/south, +/obj/item/book/manual/wiki/security_space_law{ + pixel_x = 9; + pixel_y = 4 + }, +/obj/item/flashlight/lamp{ + pixel_y = 4; + pixel_x = -7 + }, +/obj/item/storage/fancy/donut_box{ + pixel_x = 1; + pixel_y = 3 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"Ge" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/screwdriver{ + icon_state = "screwdriver_nuke" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/table, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/atmospherics) +"Gg" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil, +/obj/effect/turf_decal/arrows, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"Gh" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"Gi" = ( +/obj/structure/frame/computer, +/obj/effect/turf_decal/industrial/outline/yellow, +/turf/open/floor/plasteel/tech, +/area/ship/hangar/port) +"Gk" = ( +/turf/open/floor/plating, +/area/ship/external) +"Gl" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/techfloor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"Go" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"Gs" = ( +/obj/machinery/computer/mech_bay_power_console, +/obj/effect/turf_decal/industrial/outline/yellow, +/turf/open/floor/plasteel/tech, +/area/ship/hangar/port) +"Gt" = ( +/obj/machinery/door/poddoor/preopen{ + id = "obhangarent1" + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/central) +"Gu" = ( +/obj/structure/table/reinforced, +/obj/item/desk_flag{ + pixel_y = 9 + }, +/obj/item/desk_flag/trans{ + pixel_y = 4; + pixel_x = -5 + }, +/obj/effect/turf_decal/corner/opaque/black/diagonal, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"Gx" = ( +/obj/machinery/autolathe, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"Gz" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"GA" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/railing{ + dir = 4; + layer = 3.1 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/engineering) +"GB" = ( +/obj/item/kirbyplants/random, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"GD" = ( +/obj/effect/turf_decal/arrows{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/engine, +/area/ship/hangar/port) +"GF" = ( +/obj/effect/decal/cleanable/oil{ + icon_state = "floor4" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/ship/storage) +"GH" = ( +/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/poddoor/preopen{ + id = "obhangarent11"; + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"GI" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/science/ai_chamber) +"GO" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/crew/cryo) +"GS" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"GV" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"Ha" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/wood, +/area/ship/crew/dorm) +"Hb" = ( +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/structure/rack, +/obj/item/mecha_parts/mecha_equipment/weapon/energy/mecha_kineticgun, +/obj/item/mecha_parts/mecha_equipment/thrusters/gas, +/obj/item/mecha_parts/mecha_equipment/drill, +/obj/item/mecha_parts/mecha_equipment/mining_scanner, +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hangar/port) +"Hc" = ( +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/corners, +/obj/structure/closet/secure_closet/freezer/kitchen, +/obj/machinery/light/directional/north, +/turf/open/floor/pod, +/area/ship/cargo) +"Hf" = ( +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/central) +"Hk" = ( +/obj/machinery/airalarm/directional/south, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"Hm" = ( +/obj/structure/sign/minutemen, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering/engine) +"Ht" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black/corner{ + dir = 8 + }, +/obj/effect/turf_decal/minutemen/corner{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium, +/area/ship/bridge) +"Hw" = ( +/obj/structure/table/reinforced, +/obj/item/clipboard, +/obj/effect/turf_decal/corner/opaque/black/diagonal, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"Hx" = ( +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + dir = 4; + id = "obhang22" + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/door/poddoor{ + id = "obmine12" + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning{ + dir = 1 + }, +/turf/open/floor/engine, +/area/ship/hangar/port) +"Hy" = ( +/obj/effect/turf_decal/techfloor, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"HB" = ( +/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/door/firedoor/window, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "vela_lablock" + }, +/turf/open/floor/plating, +/area/ship/science/xenobiology) +"HH" = ( +/obj/effect/turf_decal/techfloor, +/obj/effect/decal/cleanable/oil{ + icon_state = "floor4" + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"HI" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/effect/turf_decal/steeldecal/steel_decals_central7, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"HK" = ( +/obj/machinery/power/port_gen/pacman{ + anchored = 1 + }, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/structure/cable{ + icon_state = "0-10" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"HN" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/structure/railing{ + dir = 1; + layer = 3.1 + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"HO" = ( +/obj/structure/closet/wall{ + dir = 1; + pixel_y = -28 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/turf_decal/steeldecal/steel_decals_central7{ + pixel_y = 1 + }, +/obj/effect/turf_decal/steeldecal/steel_decals7{ + dir = 9 + }, +/obj/effect/turf_decal/steeldecal/steel_decals7{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew) +"HQ" = ( +/obj/structure/closet/secure_closet/security{ + populate = 0 + }, +/obj/item/reagent_containers/spray/pepper, +/obj/item/clothing/mask/gas/sechailer/minutemen, +/obj/item/clothing/under/rank/security/officer/minutemen, +/obj/item/clothing/head/helmet/bulletproof/minutemen, +/obj/item/storage/belt/security/full, +/obj/item/restraints/handcuffs, +/obj/item/ammo_box/magazine/m45/rubbershot, +/obj/item/ammo_box/magazine/m45/rubbershot, +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/structure/sign/poster/official/focus{ + pixel_y = 32 + }, +/obj/item/clothing/suit/armor/vest/marine, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security/armory) +"HU" = ( +/obj/effect/turf_decal/industrial/outline/red, +/obj/effect/turf_decal/rechargefloor, +/obj/mecha/working/ripley/cmm, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hangar/port) +"HV" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"HW" = ( +/obj/structure/noticeboard{ + dir = 8; + pixel_x = 28 + }, +/obj/effect/turf_decal/trimline/opaque/orange/filled/warning, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"HY" = ( +/obj/structure/filingcabinet/double, +/obj/effect/turf_decal/industrial/hatch/yellow, +/turf/open/floor/plasteel/tech/grid, +/area/ship/science) +"Ia" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"Ih" = ( +/obj/structure/table/reinforced, +/obj/item/radio/intercom/directional/south, +/obj/machinery/turretid{ + pixel_y = 3 + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) +"In" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/hallway/central) +"Io" = ( +/obj/effect/turf_decal/industrial/caution, +/obj/effect/decal/cleanable/glass, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/tech, +/area/ship/hangar/port) +"Iu" = ( +/obj/structure/table/wood, +/obj/item/storage/book/bible/booze{ + pixel_x = -5 + }, +/obj/item/flashlight/lamp/green{ + pixel_y = 9; + pixel_x = 6 + }, +/turf/open/floor/wood, +/area/ship/crew/office) +"Iv" = ( +/obj/effect/turf_decal/minutemen/corner{ + dir = 1 + }, +/obj/item/mecha_parts/part/ripley_right_leg, +/turf/open/floor/plasteel/mono/dark, +/area/ship/hangar/port) +"Iy" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external) +"Iz" = ( +/obj/effect/turf_decal/number/two, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/engine, +/area/ship/hangar/port) +"IC" = ( +/obj/machinery/computer/security{ + dir = 4; + icon_state = "computer-middle" + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) +"ID" = ( +/obj/machinery/airalarm/directional/north, +/obj/structure/sign/poster/contraband/xenofauna_parasite{ + pixel_x = -28; + pixel_y = -2 + }, +/obj/structure/chair/office{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/hallway/central) +"IE" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/table, +/obj/item/radio/intercom{ + dir = 4; + pixel_x = 13; + pixel_y = 1 + }, +/obj/machinery/button/door{ + dir = 8; + pixel_y = 5; + pixel_x = -6; + id = "obendo"; + name = "Office Shutters" + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"IF" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/item/storage/toolbox/electrical{ + pixel_x = -10; + pixel_y = -5 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"II" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"IJ" = ( +/obj/effect/decal/cleanable/robot_debris/old, +/obj/item/wrench, +/obj/machinery/atmospherics/pipe/simple/supply/visible/layer2{ + dir = 4 + }, +/obj/machinery/meter{ + target_layer = 2 + }, +/obj/effect/decal/cleanable/generic, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/atmospherics) +"IM" = ( +/turf/open/floor/carpet/royalblack, +/area/ship/crew/office) +"IV" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"IZ" = ( +/obj/structure/girder, +/obj/structure/grille, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external) +"Ja" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating, +/area/ship/hallway/central) +"Jk" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/science/ai_chamber) +"Jl" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering/atmospherics) +"Jo" = ( +/obj/machinery/shower{ + pixel_y = 16 + }, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/effect/turf_decal/floordetail/tiled, +/turf/open/floor/plasteel/tech, +/area/ship/crew) +"Jp" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/effect/turf_decal/steeldecal/steel_decals8, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"Ju" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/item/pen{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/item/stamp/hos{ + pixel_y = 9; + pixel_x = 8 + }, +/obj/machinery/recharger{ + pixel_x = -8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"Jw" = ( +/obj/machinery/computer/mech_bay_power_console, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"JB" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 4 + }, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 1 + }, +/obj/effect/turf_decal/corner_techfloor_gray{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"JH" = ( +/obj/structure/window/reinforced, +/obj/machinery/computer/monitor{ + dir = 4; + icon_state = "computer-left" + }, +/obj/machinery/camera/autoname{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"JI" = ( +/obj/effect/turf_decal/industrial/outline/red, +/obj/effect/turf_decal/rechargefloor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hangar/port) +"JL" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 4 + }, +/obj/effect/turf_decal/corner_techfloor_grid, +/obj/structure/railing{ + dir = 8; + layer = 3.1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"JM" = ( +/obj/structure/window/reinforced, +/obj/structure/chair/plastic{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"JN" = ( +/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/poddoor/shutters{ + id = "obai" + }, +/turf/open/floor/plating, +/area/ship/science/ai_chamber) +"JV" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer5{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/caution, +/obj/machinery/light/small/directional/west, +/obj/structure/sign/warning/vacuum/external{ + pixel_y = 11; + pixel_x = -28 + }, +/obj/effect/turf_decal/steeldecal/steel_decals10{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"JY" = ( +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/machinery/button/door{ + pixel_y = 25; + pixel_x = 7; + name = "Bay Doors"; + id = "obmine12" + }, +/obj/machinery/button/shieldwallgen{ + id = "obhang22"; + name = "Air Shield Switch"; + pixel_y = 25; + pixel_x = -5 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hangar/port) +"Kd" = ( +/obj/effect/decal/cleanable/wrapping, +/obj/structure/chair/plastic{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 9 + }, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"Kk" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"Ko" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"Kq" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"Kr" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 8 + }, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/structure/railing{ + dir = 4; + layer = 3.1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"Ks" = ( +/obj/effect/turf_decal/techfloor/orange, +/obj/machinery/light/small/directional/east, +/turf/open/floor/circuit/green, +/area/ship/science/ai_chamber) +"KC" = ( +/turf/open/floor/plasteel/stairs/medium, +/area/ship/hallway/central) +"KE" = ( +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/corner/opaque/black{ + dir = 1 + }, +/obj/effect/turf_decal/borderfloor, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"KN" = ( +/obj/structure/railing/corner{ + dir = 1; + layer = 3.1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"KO" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"Lb" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/turf_decal/industrial/hatch/yellow, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"Le" = ( +/obj/effect/turf_decal/trimline/opaque/red/filled/warning, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning{ + dir = 1 + }, +/obj/machinery/door/poddoor{ + id = "obmine12" + }, +/turf/open/floor/engine, +/area/ship/hangar/port) +"Ln" = ( +/obj/machinery/vending/sovietsoda{ + anchored = 0 + }, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/corners, +/turf/open/floor/pod, +/area/ship/cargo) +"Lx" = ( +/obj/structure/urinal{ + pixel_y = 32 + }, +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/borderfloor{ + dir = 5 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/crew/toilet) +"LB" = ( +/obj/machinery/computer/cargo/express{ + dir = 8 + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) +"LJ" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/red/warning{ + dir = 4 + }, +/obj/machinery/door/window/brigdoor/westleft{ + req_access_txt = list("1") + }, +/turf/open/floor/plasteel/tech, +/area/ship/science) +"LK" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 6 + }, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"LL" = ( +/obj/structure/sign/poster/random{ + pixel_y = 30 + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"LS" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/wrapping, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"LT" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plating, +/area/ship/engineering/engine) +"LU" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"Mc" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/corner/opaque/black{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/black, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"Mi" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Input to Mech Refill" + }, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4; + layer = 3.1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"Mj" = ( +/obj/structure/rack, +/obj/item/stack/sheet/glass/five, +/obj/item/stack/sheet/glass/five, +/obj/item/stack/sheet/plastic/twenty, +/obj/structure/sign/poster/contraband/free_drone{ + pixel_y = 32 + }, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/item/rcl/pre_loaded, +/obj/item/rcl/pre_loaded, +/turf/open/floor/plating, +/area/ship/storage) +"Mn" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/minutemen/edge, +/obj/item/mecha_parts/chassis/ripley, +/turf/open/floor/plasteel/mono/dark, +/area/ship/hangar/port) +"Mt" = ( +/obj/structure/table/chem, +/obj/effect/turf_decal/techfloor, +/obj/item/reagent_containers/glass/rag{ + pixel_y = 10 + }, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"Mu" = ( +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/structure/chair/plastic{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"Mv" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/mineral/ore_redemption, +/turf/open/floor/plasteel/tech, +/area/ship/hangar/port) +"Mw" = ( +/obj/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/components/binary/pump/layer4{ + name = "Waste to Recycler" + }, +/obj/machinery/button/door{ + dir = 8; + pixel_y = -2; + pixel_x = 22; + id = "obair"; + name = "Blast Door Controller" + }, +/obj/machinery/atmospherics/pipe/simple/supply/visible/layer2{ + dir = 9 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/atmospherics) +"Mx" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/science/ai_chamber) +"MB" = ( +/obj/machinery/firealarm/directional/south, +/turf/open/floor/plasteel/dark, +/area/ship/crew/toilet) +"MC" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "obendo" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/stairs{ + dir = 1 + }, +/area/ship/engineering) +"MF" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/security{ + req_access = list(1) + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"MJ" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/item/radio/intercom/directional/south, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/dorm) +"MP" = ( +/obj/effect/turf_decal/trimline/opaque/red/filled/corner{ + dir = 1 + }, +/obj/structure/railing/corner{ + dir = 1; + layer = 3.1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-10" + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"MU" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/arrows, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"MV" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"MW" = ( +/obj/structure/table/reinforced, +/obj/item/megaphone/command, +/obj/effect/turf_decal/corner/opaque/black/diagonal, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"MY" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/light/small/directional/east, +/turf/open/floor/carpet/nanoweave/purple, +/area/ship/science) +"MZ" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/red/warning{ + dir = 4 + }, +/obj/item/paper_bin, +/obj/item/pen/blue, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/science) +"Na" = ( +/obj/structure/grille, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external) +"Nd" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"Nf" = ( +/obj/machinery/button/door{ + dir = 8; + name = "Engineering Storage Lock"; + pixel_y = -7; + pixel_x = 22; + id = "obengi" + }, +/obj/item/decal_painter{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/item/decal_painter{ + pixel_x = 6; + pixel_y = 1 + }, +/obj/structure/table, +/obj/machinery/light_switch{ + pixel_y = 23; + pixel_x = -9 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/atmospherics) +"Nh" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/structure/sign/departments/engineering{ + pixel_y = -32 + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"Nk" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/closet/secure_closet/brig{ + id = "vela" + }, +/obj/machinery/door_timer{ + pixel_y = 28; + id = "vela" + }, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"Nl" = ( +/obj/effect/decal/cleanable/oil/streak, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/airlock/engineering{ + req_access = list(10) + }, +/obj/effect/turf_decal/trimline/opaque/orange/filled/warning, +/obj/effect/turf_decal/trimline/opaque/orange/filled/warning{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"Nm" = ( +/obj/structure/table, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/item/storage/toolbox/mechanical, +/obj/item/storage/toolbox/electrical{ + pixel_y = 9 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"Nn" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/item/kirbyplants/random, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"No" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/structure/sign/departments/security{ + pixel_y = -28 + }, +/obj/structure/railing{ + dir = 1; + layer = 3.1 + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"Np" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/canteen) +"Nq" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/decal/cleanable/oil{ + icon_state = "streak5" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"Nr" = ( +/obj/structure/table, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/dorm) +"Nv" = ( +/obj/effect/turf_decal/trimline/opaque/purple/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/purple/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/science) +"Nw" = ( +/obj/effect/decal/cleanable/wrapping, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/machinery/jukebox, +/turf/open/floor/pod, +/area/ship/cargo) +"Nx" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/chair/office{ + dir = 4 + }, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 25; + pixel_y = -5 + }, +/obj/effect/turf_decal/box, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"Ny" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black/corner, +/obj/effect/turf_decal/minutemen/corner, +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/ship/bridge) +"Nz" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/turf/open/floor/wood, +/area/ship/hallway/fore) +"NC" = ( +/obj/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/simple/general/visible/layer2{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/atmospherics) +"ND" = ( +/obj/effect/turf_decal/industrial/caution, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/light/small/directional/west, +/obj/machinery/light_switch{ + dir = 4; + pixel_y = -10; + pixel_x = -21 + }, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"NE" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/wood, +/area/ship/hallway/fore) +"NF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/atmospherics) +"NJ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/bookcase/manuals, +/obj/machinery/button/door{ + pixel_y = 23; + pixel_x = 8; + id = "vela_cap"; + name = "window shutters" + }, +/turf/open/floor/wood, +/area/ship/crew/office) +"NQ" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/chair/office{ + dir = 4 + }, +/obj/structure/sign/warning/fire{ + pixel_y = 24; + pixel_x = -8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"NS" = ( +/obj/structure/window/plasma/reinforced{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/obj/structure/sign/poster/official/safety_eye_protection{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"NU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"NV" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/crew/dorm) +"Oe" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/arrows, +/turf/open/floor/engine, +/area/ship/hangar/port) +"Om" = ( +/obj/machinery/door/airlock/command{ + name = "Bridge"; + req_access_txt = "19"; + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/solgovgold/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/solgovgold/filled/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"On" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"Ou" = ( +/obj/effect/turf_decal/trimline/opaque/purple/warning{ + dir = 4 + }, +/obj/structure/table/glass, +/obj/item/paper_bin{ + pixel_y = 2 + }, +/obj/item/pen/blue{ + name = "science pen" + }, +/obj/item/clipboard{ + pixel_y = 3; + pixel_x = 7 + }, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"Ox" = ( +/obj/structure/closet/emcloset/wall{ + dir = 1; + pixel_y = -28 + }, +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"OD" = ( +/obj/effect/turf_decal/trimline/opaque/purple/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/science) +"OL" = ( +/obj/effect/turf_decal/trimline/opaque/red/filled/line{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"OM" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "obendo"; + dir = 4 + }, +/obj/machinery/door/airlock/engineering{ + dir = 4; + req_access = list(10) + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/trimline/opaque/orange/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/orange/filled/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"OP" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/science) +"OR" = ( +/obj/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ + dir = 6 + }, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/atmospherics) +"OS" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/oil{ + icon_state = "streak5" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"OT" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Input to Mech Refill" + }, +/obj/structure/railing{ + dir = 8; + layer = 3.1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"OV" = ( +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/obj/structure/table/wood, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"Pe" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/camera/autoname{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"Pj" = ( +/obj/structure/curtain/cloth, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/turf/open/floor/plasteel/dark, +/area/ship/crew) +"Pp" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/wood, +/area/ship/crew) +"Pq" = ( +/obj/machinery/atmospherics/components/binary/valve/digital/layer4, +/obj/machinery/atmospherics/components/binary/valve/digital/layer2, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/central) +"Pv" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"Px" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/effect/turf_decal/trimline/opaque/green/filled/warning, +/obj/effect/turf_decal/trimline/opaque/green/filled/warning{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/door/airlock{ + name = "Rec Room" + }, +/turf/open/floor/plasteel/tech, +/area/ship/crew) +"PA" = ( +/obj/machinery/airalarm/directional/south, +/turf/open/floor/plasteel/dark, +/area/ship/crew/toilet) +"PC" = ( +/obj/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/components/trinary/mixer/airmix{ + dir = 4; + piping_layer = 2 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/atmospherics) +"PD" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"PG" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor/hole/right{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4; + layer = 3.1 + }, +/obj/structure/railing{ + dir = 8; + layer = 3.1 + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"PL" = ( +/obj/effect/decal/cleanable/ash, +/obj/effect/turf_decal/techfloor, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/structure/table, +/obj/item/wrench/crescent, +/obj/item/stack/sheet/mineral/plasma/twenty, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"PN" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/toilet) +"PO" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/atmospherics) +"PT" = ( +/obj/machinery/door/airlock{ + id_tag = "obt"; + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/green/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/green/filled/warning{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/crew/toilet) +"PZ" = ( +/obj/effect/turf_decal/trimline/opaque/green/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/green/filled/warning, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/tech, +/area/ship/crew/dorm) +"Qa" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/mineral/coal/ten, +/obj/item/stack/sheet/mineral/coal/ten, +/obj/effect/turf_decal/box/corners, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/item/clothing/shoes/cookflops, +/obj/item/clothing/shoes/cookflops, +/obj/item/clothing/shoes/cookflops, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 9 + }, +/obj/item/clothing/under/rank/civilian/cookjorts, +/obj/item/clothing/under/rank/civilian/cookjorts, +/obj/item/clothing/under/rank/civilian/cookjorts, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"Qg" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/effect/turf_decal/corner/transparent/purple/diagonal, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"Qj" = ( +/obj/structure/sign/departments/security{ + pixel_x = -28 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"Qm" = ( +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/structure/reagent_dispensers/fueltank, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"Qq" = ( +/obj/structure/bed, +/obj/item/bedsheet/red, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"Qv" = ( +/obj/effect/turf_decal/trimline/opaque/orange/filled/warning, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"Qy" = ( +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/machinery/suit_storage_unit/inherit, +/obj/item/clothing/suit/space/pilot, +/obj/item/clothing/head/helmet/space/pilot/random, +/obj/item/tank/internals/oxygen, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hangar/port) +"QF" = ( +/obj/structure/table, +/obj/item/clipboard{ + pixel_x = 4; + pixel_y = 5 + }, +/obj/item/clipboard{ + pixel_x = -6 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 6 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"QG" = ( +/obj/machinery/atmospherics/pipe/layer_manifold, +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/door/airlock/external, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"QN" = ( +/obj/machinery/holopad/secure, +/obj/effect/turf_decal/corner/opaque/black/diagonal, +/obj/effect/turf_decal/box, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"QO" = ( +/obj/machinery/mecha_part_fabricator, +/turf/open/floor/plasteel/tech, +/area/ship/hangar/port) +"QR" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4; + layer = 3.1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"QV" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/wood, +/area/ship/hallway/fore) +"Ra" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/steeldecal/steel_decals_central2{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"Re" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/atmospherics) +"Rf" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/easel, +/obj/item/canvas/twentythreeXtwentythree, +/obj/structure/sign/painting/library{ + pixel_y = 28 + }, +/turf/open/floor/carpet, +/area/ship/hallway/central) +"Rg" = ( +/obj/machinery/autolathe, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/hangar/port) +"Rj" = ( +/obj/effect/turf_decal/trimline/opaque/purple/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/purple/filled/warning{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/airlock/research{ + name = "Breakroom"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/tech, +/area/ship/science) +"Rk" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/science/ai_chamber) +"Rl" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black/corner{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"Rm" = ( +/obj/effect/decal/cleanable/robot_debris/old, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"Rq" = ( +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/machinery/vending/cola/space_up, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew) +"Ru" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 2 + }, +/obj/effect/decal/cleanable/glass, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 10 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"RG" = ( +/obj/item/paper/pamphlet/violent_video_games, +/obj/machinery/computer/arcade/orion_trail{ + dir = 8 + }, +/obj/item/stack/arcadeticket, +/obj/item/stack/arcadeticket, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/steeldecal/steel_decals_central7{ + pixel_y = 1 + }, +/turf/open/floor/wood, +/area/ship/hallway/central) +"RI" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"RP" = ( +/obj/machinery/computer/cryopod/directional/south, +/obj/effect/turf_decal/spline/fancy/opaque/black/corner{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/crew/cryo) +"RQ" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/hallway/central) +"RY" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"Sb" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/dorm) +"Sc" = ( +/obj/machinery/porta_turret/ship{ + dir = 6 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/bridge) +"Sd" = ( +/obj/effect/decal/cleanable/oil/streak, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/opaque/orange/filled/warning, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"Sf" = ( +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer3{ + dir = 4 + }, +/obj/machinery/button/door{ + pixel_y = 25; + pixel_x = -7; + name = "Bay Doors"; + id = "obmine12" + }, +/obj/machinery/button/shieldwallgen{ + id = "obhang22"; + name = "Air Shield Switch"; + pixel_y = 25; + pixel_x = 5 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hangar/port) +"Sk" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8; + layer = 3.1 + }, +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"Sm" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/science) +"Sw" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/science) +"Sy" = ( +/obj/machinery/door/poddoor/preopen{ + id = "obhangarent2" + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/central) +"SE" = ( +/obj/effect/turf_decal/trimline/opaque/purple/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/purple/filled/warning{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/airlock/research{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/science/xenobiology) +"SI" = ( +/obj/machinery/holopad/secure, +/obj/effect/turf_decal/box, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"SM" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -22; + pixel_y = -12 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/dorm) +"SN" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/green/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/green/filled/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"SR" = ( +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/effect/turf_decal/corner_techfloor_grid, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"SU" = ( +/obj/effect/turf_decal/steeldecal/steel_decals9{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"SW" = ( +/obj/structure/table/reinforced, +/obj/item/radio/intercom/directional/north, +/obj/item/reagent_containers/glass/maunamug{ + pixel_y = 5; + pixel_x = 5 + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) +"SY" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/effect/turf_decal/box/corners, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -21; + pixel_x = 2 + }, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"Tb" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/obj/machinery/holopad/secure, +/obj/effect/turf_decal/box, +/turf/open/floor/plasteel/tech, +/area/ship/science) +"Tc" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer5{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"Tf" = ( +/obj/structure/sign/minutemen{ + pixel_y = 36 + }, +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/machinery/light/directional/north{ + pixel_y = 28 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external) +"Tg" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/office) +"Th" = ( +/obj/structure/guncase, +/obj/item/gun/ballistic/automatic/pistol/m1911/no_mag, +/obj/item/gun/ballistic/automatic/pistol/m1911/no_mag, +/obj/item/gun/ballistic/automatic/smg/cm5{ + spawnwithmagazine = 0 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"Ti" = ( +/obj/structure/table/chem, +/obj/structure/sink/chem, +/obj/effect/turf_decal/techfloor{ + dir = 5 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/science/xenobiology) +"Tk" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"Tn" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"Ts" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/light/small/directional/south, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/wood, +/area/ship/crew) +"Tx" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/engineering/engine) +"Ty" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"TG" = ( +/obj/machinery/holopad/secure, +/obj/effect/turf_decal/box, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plasteel/tech, +/area/ship/science/ai_chamber) +"TH" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/engineering/engine) +"TL" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/obj/structure/chair/plastic{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"TQ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/mineral/plastitanium, +/area/ship/bridge) +"TR" = ( +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/effect/turf_decal/spline/fancy/opaque/black/corner{ + dir = 4 + }, +/obj/structure/railing/corner{ + dir = 4; + layer = 3.1 + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"TT" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/wood, +/area/ship/crew/office) +"TY" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/obj/effect/turf_decal/corner_techfloor_gray{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"Uf" = ( +/obj/machinery/camera/autoname{ + dir = 10 + }, +/obj/structure/closet/firecloset/wall{ + dir = 1; + pixel_y = -28 + }, +/obj/effect/turf_decal/techfloor, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"Uh" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/steeldecal/steel_decals_central2{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"Ut" = ( +/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "obendo" + }, +/turf/open/floor/plating, +/area/ship/engineering) +"Uw" = ( +/obj/structure/closet/firecloset/wall{ + dir = 4; + pixel_x = -28 + }, +/obj/item/storage/box/gum/happiness, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"Ux" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/effect/turf_decal/corner/transparent/purple/diagonal, +/obj/effect/turf_decal/steeldecal/steel_decals10, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"Uz" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/effect/turf_decal/trimline/opaque/solgovgold/filled/warning, +/obj/effect/turf_decal/trimline/opaque/solgovgold/filled/warning{ + dir = 1 + }, +/obj/machinery/door/airlock/command{ + name = "Captain's Quarters"; + req_access = list(20) + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"UA" = ( +/obj/effect/turf_decal/minutemen/middle, +/obj/item/mecha_parts/part/ripley_torso, +/turf/open/floor/plasteel/mono/dark, +/area/ship/hangar/port) +"UB" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"UC" = ( +/obj/effect/turf_decal/trimline/opaque/red/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/airlock/security{ + req_access = list(1); + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"UD" = ( +/obj/effect/turf_decal/trimline/transparent/green/filled/warning{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"UM" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/structure/railing{ + dir = 1; + layer = 3.1 + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"UQ" = ( +/obj/structure/reagent_dispensers/beerkeg, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/corners, +/obj/structure/sign/departments/cargo{ + pixel_y = 32 + }, +/turf/open/floor/pod, +/area/ship/cargo) +"UR" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer5{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 9 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"Va" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood, +/area/ship/hallway/fore) +"Ve" = ( +/obj/structure/chair/sofa/corner, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/carpet, +/area/ship/crew) +"Vh" = ( +/obj/structure/sign/warning/nosmoking{ + pixel_y = -32 + }, +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/machinery/camera/autoname{ + dir = 9 + }, +/obj/machinery/suit_storage_unit/inherit, +/obj/item/clothing/suit/space/pilot, +/obj/item/clothing/head/helmet/space/pilot/random, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hangar/port) +"Vi" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/carpet/royalblack, +/area/ship/crew/office) +"Vl" = ( +/obj/effect/turf_decal/trimline/transparent/green/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"Vp" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/item/kirbyplants/random, +/obj/machinery/button/door{ + pixel_y = 24; + pixel_x = -4; + name = "umbilical window shutters"; + id = "obhangarent21" + }, +/obj/machinery/button/door{ + pixel_y = 24; + pixel_x = 9; + name = "pod lockdown"; + id = "obhangarent2"; + req_access = list(1) + }, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"VC" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/turf/open/floor/wood, +/area/ship/hallway/fore) +"VH" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/item/radio/intercom/directional/east, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/carpet/nanoweave/purple, +/area/ship/science) +"VM" = ( +/obj/structure/chair, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"VO" = ( +/obj/structure/chair/sofa/right, +/obj/machinery/light/small/directional/west, +/turf/open/floor/carpet, +/area/ship/crew) +"VP" = ( +/obj/effect/decal/cleanable/oil, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor/hole/right{ + dir = 8 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"VR" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering) +"VX" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 2 + }, +/obj/effect/turf_decal/steeldecal/steel_decals8, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"VZ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/effect/decal/cleanable/wrapping, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"Wb" = ( +/obj/structure/table/wood, +/obj/item/trash/candy{ + pixel_x = 3; + pixel_y = 4 + }, +/obj/item/reagent_containers/food/drinks/soda_cans/cola{ + pixel_x = -8; + pixel_y = 7 + }, +/turf/open/floor/carpet, +/area/ship/crew) +"We" = ( +/turf/template_noop, +/area/template_noop) +"Wg" = ( +/obj/structure/sign/warning/securearea{ + pixel_x = -26; + pixel_y = -4 + }, +/obj/structure/filingcabinet/double, +/obj/machinery/light/small/directional/west{ + pixel_y = 4 + }, +/obj/effect/turf_decal/industrial/hatch/yellow, +/turf/open/floor/plasteel/tech/grid, +/area/ship/science) +"Wj" = ( +/obj/machinery/light/floor, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/traffic, +/turf/open/floor/engine, +/area/ship/external) +"Wk" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/poddoor/preopen{ + id = "obhangarent2" + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/central) +"Wl" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/structure/sign/poster/minutemen/random{ + pixel_x = -28 + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"Wn" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/corner/transparent/purple/diagonal, +/obj/effect/turf_decal/steeldecal/steel_decals10{ + dir = 4 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"Wq" = ( +/obj/structure/sink/kitchen{ + dir = 4; + pixel_x = -16; + pixel_y = 19 + }, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/corner/opaque/black{ + dir = 1 + }, +/obj/effect/turf_decal/borderfloor, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"Wr" = ( +/obj/machinery/cryopod, +/obj/effect/turf_decal/techfloor/orange{ + dir = 1 + }, +/obj/effect/turf_decal/techfloor/orange/corner, +/obj/machinery/light/small/directional/east, +/obj/structure/railing{ + dir = 1; + layer = 2.8 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew/cryo) +"Wt" = ( +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/structure/cable{ + icon_state = "0-9" + }, +/obj/machinery/power/port_gen/pacman{ + anchored = 1 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"Ww" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"Wx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black/corner{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"Wz" = ( +/obj/machinery/door/poddoor{ + id = "obengi"; + name = "Engineering Storage"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/trimline/transparent/red/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/transparent/red/filled/warning{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/storage) +"WF" = ( +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/machinery/suit_storage_unit/inherit, +/obj/item/clothing/suit/space/pilot, +/obj/item/clothing/head/helmet/space/pilot/random, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hangar/port) +"WP" = ( +/obj/structure/table/chem, +/obj/item/reagent_containers/food/drinks/bottle/orangejuice{ + pixel_y = 12; + pixel_x = 5 + }, +/obj/item/reagent_containers/food/drinks/bottle/limejuice{ + pixel_y = 15; + pixel_x = -8 + }, +/obj/item/reagent_containers/food/snacks/pizzaslice/pineapple{ + pixel_y = 2; + pixel_x = -7 + }, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/science/xenobiology) +"WR" = ( +/obj/effect/turf_decal/trimline/opaque/purple/warning{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/opaque/purple/filled/corner, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel/dark, +/area/ship/science) +"WV" = ( +/obj/machinery/porta_turret/ship{ + dir = 5 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/bridge) +"WX" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ship/hallway/central) +"WY" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black/corner{ + dir = 1 + }, +/obj/effect/turf_decal/minutemen/corner{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/ship/bridge) +"Xd" = ( +/obj/effect/turf_decal/steeldecal/steel_decals2, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"Xe" = ( +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/structure/ore_box, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hangar/port) +"Xh" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/decal/cleanable/oil{ + icon_state = "floor2" + }, +/obj/machinery/door/window/brigdoor{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"Xi" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/engineering/engine) +"Xn" = ( +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/on/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer5, +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/industrial/warning{ + dir = 10 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/fore) +"Xo" = ( +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 6 + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"Xt" = ( +/obj/effect/turf_decal/techfloor{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hangar/port) +"Xv" = ( +/obj/structure/table, +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/item/reagent_containers/food/drinks/soda_cans/cola{ + pixel_y = 8; + pixel_x = 8 + }, +/obj/item/paper/crumpled, +/obj/item/pen/charcoal, +/turf/open/floor/carpet, +/area/ship/hallway/central) +"Xz" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "obendo" + }, +/turf/open/floor/plasteel/stairs, +/area/ship/engineering) +"XA" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/wood, +/area/ship/hallway/fore) +"XC" = ( +/obj/structure/table, +/obj/item/book/manual/wiki/engineering_guide, +/turf/open/floor/wood, +/area/ship/hallway/central) +"XJ" = ( +/obj/structure/filingcabinet, +/obj/item/pen/fountain, +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"XL" = ( +/obj/effect/turf_decal/techfloor{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hangar/port) +"XN" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/corner/opaque/black/diagonal, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"XO" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/turf/open/floor/wood, +/area/ship/crew/dorm) +"XR" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8; + layer = 3.1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"XS" = ( +/obj/machinery/advanced_airlock_controller{ + pixel_y = 24 + }, +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/science) +"XT" = ( +/obj/machinery/portable_atmospherics/canister/toxins, +/turf/open/floor/plating, +/area/ship/storage) +"XY" = ( +/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/poddoor/shutters{ + id = "vela_cap"; + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/crew/office) +"XZ" = ( +/obj/structure/closet/crate, +/obj/item/circuitboard/machine/deep_fryer, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/corners, +/obj/item/rollingpaper, +/obj/item/rollingpaper, +/obj/item/rollingpaper, +/obj/item/rollingpaper, +/obj/item/reagent_containers/food/snacks/grown/tobacco, +/obj/item/reagent_containers/food/snacks/grown/tobacco, +/obj/item/reagent_containers/food/snacks/grown/tobacco, +/obj/item/reagent_containers/food/snacks/grown/tobacco, +/turf/open/floor/pod, +/area/ship/cargo) +"Yi" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/engineering/engine) +"Yk" = ( +/obj/effect/turf_decal/trimline/opaque/purple/warning{ + dir = 1 + }, +/obj/structure/table/glass, +/obj/item/paper/fluff/awaymissions/moonoutpost19/research/larva_social{ + pixel_x = -6 + }, +/obj/item/clothing/glasses/science{ + pixel_y = 10; + pixel_x = 2 + }, +/obj/item/assembly/igniter{ + pixel_x = 9; + pixel_y = -3 + }, +/obj/item/stock_parts/micro_laser{ + pixel_x = 6; + pixel_y = 5 + }, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"Yl" = ( +/obj/machinery/door/airlock/command{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/red/filled/warning{ + dir = 4 + }, +/obj/machinery/door/poddoor{ + id = "obai2"; + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/tech, +/area/ship/science/ai_chamber) +"Yp" = ( +/obj/effect/turf_decal/industrial/stand_clear, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil, +/turf/open/floor/engine, +/area/ship/hangar/port) +"Yr" = ( +/obj/machinery/holopad/emergency/command, +/obj/effect/turf_decal/box/white, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"Yx" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8; + layer = 3.1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"Yz" = ( +/obj/effect/turf_decal/trimline/transparent/green/filled/warning{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"YC" = ( +/obj/item/weldingtool/largetank/empty, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"YD" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/tech, +/area/ship/science/ai_chamber) +"YF" = ( +/obj/effect/turf_decal/techfloor, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/ship/hangar/port) +"YH" = ( +/obj/effect/turf_decal/corner/transparent/mauve/diagonal, +/obj/effect/turf_decal/techfloor/corner{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"YJ" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/science/ai_chamber) +"YP" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/wood, +/area/ship/hallway/fore) +"YS" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/effect/turf_decal/box/corners, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/engineering/engine) +"YU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/number/one, +/turf/open/floor/engine, +/area/ship/hangar/port) +"YV" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/structure/railing{ + dir = 1; + layer = 3.1 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/ship/hallway/central) +"YX" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/turf/open/floor/mineral/plastitanium, +/area/ship/bridge) +"YY" = ( +/obj/machinery/door/poddoor{ + id = "obengi"; + name = "Engineering Storage"; + dir = 4 + }, +/obj/effect/turf_decal/trimline/transparent/red/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/transparent/red/filled/warning{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/storage) +"YZ" = ( +/obj/structure/chair/stool, +/obj/effect/turf_decal/trimline/transparent/green/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/obj/machinery/camera/autoname, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"Za" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/decal/cleanable/oil{ + icon_state = "floor4" + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"Zi" = ( +/obj/machinery/holopad/secure, +/obj/effect/turf_decal/box, +/turf/open/floor/plasteel/dark, +/area/ship/science) +"Zj" = ( +/obj/structure/chair/sofa/corner{ + dir = 4 + }, +/obj/structure/sign/poster/random{ + pixel_x = -28 + }, +/turf/open/floor/carpet, +/area/ship/crew) +"Zn" = ( +/obj/effect/turf_decal/trimline/opaque/green/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/green/filled/warning{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/airlock{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/crew/cryo) +"Zo" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/wood, +/area/ship/hallway/fore) +"Zp" = ( +/obj/machinery/porta_turret/ship{ + dir = 10 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/bridge) +"Zt" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/science/xenobiology) +"Zv" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/open/floor/wood, +/area/ship/crew) +"Zw" = ( +/obj/structure/closet/secure_closet/personal, +/obj/machinery/light/small/directional/south, +/obj/structure/sign/poster/random{ + pixel_x = -28 + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/dorm) +"ZQ" = ( +/obj/structure/closet/secure_closet/personal, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/dorm) + +(1,1,1) = {" +We +We +We +We +We +IZ +IZ +IZ +IZ +We +We +sR +We +We +Hm +We +We +VR +jP +VR +jP +VR +We +We +cy +We +We +sR +We +We +IZ +IZ +IZ +IZ +We +We +We +We +We +We +"} +(2,1,1) = {" +We +We +We +We +We +IZ +We +aM +We +We +We +Fg +qG +qG +Fg +We +VR +VR +eR +VR +eR +VR +VR +We +ek +Cj +Cj +ek +We +We +We +pW +We +IZ +We +We +We +We +We +We +"} +(3,1,1) = {" +We +We +We +We +We +IZ +sK +Fg +Fg +Fg +Fg +Fg +zf +zf +Fg +Gk +VR +kr +kF +Xd +Nx +wh +VR +ra +ek +nW +nW +ek +ek +ek +ek +ek +sK +IZ +We +We +We +We +We +We +"} +(4,1,1) = {" +We +We +We +We +We +IZ +We +Fg +jY +Lb +Qm +Fg +hx +YS +Fg +Fg +VR +XJ +uU +wH +IE +QF +VR +Jl +ek +nU +SY +ek +yv +OR +zN +gL +We +IZ +We +We +We +We +We +We +"} +(5,1,1) = {" +We +We +We +We +We +We +We +Fg +CW +TL +II +wA +sn +NU +iw +Uw +lv +LU +nV +HV +ng +Za +Ut +sA +iL +Re +Ge +NF +IJ +NC +BE +gL +We +We +We +We +We +We +We +We +"} +(6,1,1) = {" +We +We +We +We +We +We +We +Fg +Fg +Mu +TH +Nl +nq +Tx +LT +Xi +MC +tI +GA +xF +kq +dK +Xz +Rm +sr +AN +fh +wi +iD +PC +BE +gL +We +We +We +We +We +We +We +We +"} +(7,1,1) = {" +We +We +We +We +We +We +We +We +Fg +Fg +iz +Fg +NQ +Ru +qC +Bh +Ut +xN +Gx +Nm +AD +rA +VR +ld +hh +EE +aZ +pd +PO +Mw +EH +gL +We +We +We +We +We +We +We +We +"} +(8,1,1) = {" +We +We +We +We +We +We +We +We +We +Fg +Fg +Fg +qe +mC +Yi +DM +VR +an +yx +Sd +rx +lx +VR +Nf +dN +uR +AB +bZ +ek +ek +ek +ek +We +We +We +We +We +We +We +We +"} +(9,1,1) = {" +We +We +We +We +We +We +We +We +We +We +Fg +Fg +Fg +wF +Xh +NS +Fg +Fg +GV +sy +Ey +nC +nC +nC +Wz +YY +nC +nC +ek +ek +We +We +We +We +We +We +We +We +We +We +"} +(10,1,1) = {" +We +We +We +We +We +We +We +We +We +We +Fg +Fg +eS +UB +OS +bK +ab +Fg +jx +Qv +wW +nC +eV +cI +qj +bt +sa +nC +nC +We +We +We +We +We +We +We +We +We +We +We +"} +(11,1,1) = {" +We +We +IZ +IZ +IZ +IZ +IZ +IZ +IZ +We +We +Fg +VP +JB +kS +jr +hP +Fg +yt +Qv +wW +nC +Mj +eM +EJ +GF +FF +nC +We +We +IZ +IZ +IZ +IZ +IZ +IZ +IZ +We +We +We +"} +(12,1,1) = {" +We +We +IZ +We +ot +We +We +sK +We +We +We +Fg +ER +lE +df +TY +Ec +Fg +BR +HW +zV +nC +yk +nh +wB +Dy +XT +nC +We +We +We +sK +We +We +pW +We +IZ +We +We +We +"} +(13,1,1) = {" +We +We +We +We +dZ +dZ +dZ +dZ +We +We +We +Fg +Fg +HK +PL +Wt +Fg +Fg +Ae +Ae +OM +nC +jn +Eo +ac +aO +Ed +nC +We +We +We +Rk +Rk +Rk +Zp +We +We +We +IZ +We +"} +(14,1,1) = {" +We +We +dZ +dZ +dZ +Xe +Xe +dZ +dZ +We +We +Fg +Ae +Ae +Ae +Ae +Ae +lB +aE +Ae +Nh +nC +nC +nC +nC +nC +nC +nC +We +We +Rk +Rk +ko +cJ +Rk +Rk +Rk +sK +IZ +We +"} +(15,1,1) = {" +We +We +dZ +eZ +Qy +XL +kp +qT +dZ +dZ +We +We +Ae +ZQ +aQ +Zw +Ae +Sb +eI +Ae +Ja +Cd +Qq +OV +af +Th +Cd +We +We +Rk +Rk +iG +Mx +GI +TG +rs +Rk +We +IZ +We +"} +(16,1,1) = {" +We +We +nn +Mi +iE +ee +Kr +ic +gB +dZ +dZ +eQ +Ae +Dd +gx +wv +PZ +kd +Nr +Ae +lD +Cd +cw +JM +np +in +Cd +eQ +Rk +Rk +xI +BQ +gV +YJ +Jk +An +Rk +sK +IZ +We +"} +(17,1,1) = {" +Ak +Ak +dZ +vD +HU +EN +Gs +yH +HH +fi +dZ +We +Ae +cj +bH +MJ +Ae +Ae +Ae +Ae +In +Cd +Nk +fH +xC +Hk +Cd +We +Rk +Rk +Yl +Rk +Rk +Rk +mK +Rk +Rk +We +IZ +We +"} +(18,1,1) = {" +We +Wj +AC +pK +CM +ur +xz +Nq +Hy +pp +dZ +We +Ae +cj +XO +AS +SM +zl +rn +rn +TR +MF +ie +PD +xC +Cu +Cd +We +Rk +pq +YD +jm +JN +Wg +pM +zk +OP +We +We +We +"} +(19,1,1) = {" +We +hS +ta +dV +YU +hH +Aq +MU +Hy +Hb +dZ +We +Ae +xU +NV +Ha +Dw +Ae +Rf +ul +No +Cd +OL +uv +MP +Gb +Cd +We +Rk +sF +aq +Ks +JN +HY +Tb +jj +OP +OP +We +We +"} +(20,1,1) = {" +We +Wj +bX +pK +gD +bu +xz +Ww +Hy +qB +dZ +We +lq +lq +Zn +lq +lq +lq +yd +Xv +YV +Cd +HQ +qP +qd +Ju +Cd +We +Rk +Rk +Rk +Rk +Rk +lm +uc +lV +oT +OP +We +We +"} +(21,1,1) = {" +Na +Na +dZ +tY +Fy +EN +Gs +lp +zR +dZ +dZ +eQ +lq +CO +GO +qm +hX +lq +fr +xc +jS +Cd +rm +Ko +rb +pA +Cd +eQ +OP +OP +qX +eN +kh +Ce +qa +jf +wa +OP +We +We +"} +(22,1,1) = {" +We +fJ +nn +Sk +Sk +uw +XR +KN +qO +dZ +We +We +lq +Wr +Bn +RP +lq +lq +zX +zX +hD +Cd +Cd +UC +Cd +Cd +Cd +We +We +OP +Sw +eN +OP +MY +iP +tP +VH +OP +We +We +"} +(23,1,1) = {" +We +dZ +az +DI +gj +gj +hf +Rl +Gl +dZ +xT +xT +lq +lq +hk +ni +lq +ID +zX +RQ +HN +Dt +ys +oC +Qj +Nn +ys +GH +GH +OP +LJ +MZ +OP +OP +Rj +OP +OP +OP +kn +We +"} +(24,1,1) = {" +We +dZ +QO +qR +uB +Cq +Fr +xy +iV +nP +SR +SR +lq +lq +lq +lq +lq +RG +zX +XC +UM +Hf +ys +fD +ym +ym +cd +KC +KC +yo +WR +jF +lz +mP +El +cz +Sm +pG +lH +lR +"} +(25,1,1) = {" +We +dZ +Rg +iR +Mn +UA +tR +Ez +sb +qy +mO +mO +Wk +Pq +hw +Gh +BY +cF +WX +cF +xm +WX +BN +ED +xB +AF +sc +Au +PG +Fl +rd +oZ +OD +mR +Zi +yG +OP +XS +OP +We +"} +(26,1,1) = {" +We +dZ +CX +dx +hJ +nS +Iv +GS +YF +nP +jh +jh +Sy +ym +KO +Ar +ys +YZ +Vl +Yz +mN +UD +ys +BI +ym +ym +Gt +KC +KC +yo +Cz +vK +Nv +rB +nO +oa +tf +qk +pf +We +"} +(27,1,1) = {" +We +dZ +yu +Wx +YC +IF +RI +EX +wz +dZ +xT +xT +ys +Vp +dD +BO +ys +zC +ml +ym +DD +eq +ys +Tk +xK +yi +ys +GH +GH +io +OP +OP +OP +OP +rO +OP +OP +OP +kn +We +"} +(28,1,1) = {" +We +WV +nn +CK +oJ +QR +DL +wr +FR +dZ +We +We +ys +ys +ys +ys +cV +Np +Np +eJ +rT +Np +Np +Np +Np +Np +Np +We +We +io +qc +tQ +FC +ND +EU +HI +zr +io +We +We +"} +(29,1,1) = {" +Ak +Ak +dZ +JY +JI +cW +Gi +lp +Uf +dZ +dZ +eQ +cV +yD +BW +HO +cV +cT +Tn +us +yI +dh +Wl +tk +tb +nr +Np +eQ +io +io +zL +fx +HB +Yk +SI +Gz +zF +io +We +We +"} +(30,1,1) = {" +We +Wj +Hx +Yp +EC +vz +fv +ke +Hy +pp +dZ +We +cV +rr +Pj +jI +cV +vV +dW +VM +Ty +VM +MV +XN +iO +Wq +Np +We +io +kW +YH +FJ +HB +wO +VX +Zt +CN +io +We +We +"} +(31,1,1) = {" +We +qU +Le +GD +Iz +Oe +Mv +Gg +Hy +gh +dZ +We +cV +Jo +co +wk +cV +iu +dW +VM +Ty +VM +MV +Hw +iO +KE +Np +We +io +WP +jO +Mt +HB +wO +Jp +iQ +io +io +We +We +"} +(32,1,1) = {" +We +Wj +zi +kw +zs +bA +Io +md +YF +cE +dZ +We +cV +cV +cV +nQ +cV +fz +RY +VM +Ty +VM +MV +MW +QN +iy +Np +We +io +Ti +vX +Av +HB +al +Ou +tA +io +We +We +We +"} +(33,1,1) = {" +Na +Na +dZ +Sf +ca +cW +Gi +On +Hy +uT +dZ +We +cV +Zj +rw +ww +cV +LL +Go +VM +Ty +VM +MV +Gu +yA +dc +Np +We +io +io +io +io +io +dB +dB +SE +io +We +IZ +We +"} +(34,1,1) = {" +We +We +nn +OT +Yx +JL +fj +Fx +Ox +dZ +dZ +eQ +cV +BX +pk +ww +cV +dp +ug +VM +Ty +VM +MV +XN +lk +lu +Np +eQ +io +io +CG +bc +yj +FN +mi +Qg +io +sK +IZ +We +"} +(35,1,1) = {" +We +We +dZ +Eb +WF +Xt +lb +Vh +dZ +dZ +We +We +cV +BH +Wb +Pp +Px +mq +Ca +VM +pU +VM +Pv +XN +lk +Mc +Np +We +We +io +nw +Ux +DP +DP +Wn +CD +io +We +IZ +We +"} +(36,1,1) = {" +We +We +dZ +dZ +dZ +jD +ci +dZ +dZ +We +We +We +cV +Ve +pw +up +cV +GB +cn +sM +Nd +ip +Pe +Kq +nF +oU +Np +We +We +io +io +io +bh +tx +io +io +io +sK +IZ +We +"} +(37,1,1) = {" +We +We +We +We +dZ +dZ +dZ +dZ +We +We +We +We +cV +gX +Ga +Ts +PN +PN +PN +PN +SN +xl +lK +lK +lK +lK +lK +lK +We +We +We +io +io +io +Sc +We +We +We +IZ +We +"} +(38,1,1) = {" +We +We +IZ +We +xR +We +We +sK +We +IZ +We +cV +cV +Rq +Zv +EK +PN +vO +dt +PN +cg +BC +lK +no +tW +cK +uQ +lK +We +IZ +We +sK +We +We +sK +We +IZ +We +We +We +"} +(39,1,1) = {" +We +We +IZ +IZ +IZ +IZ +IZ +IZ +IZ +IZ +We +jN +VO +qF +zJ +Ex +AO +pJ +Bu +PN +is +kZ +lK +Hc +AR +Qa +ry +lK +We +IZ +IZ +IZ +IZ +IZ +IZ +IZ +IZ +We +We +We +"} +(40,1,1) = {" +We +We +We +We +We +We +We +We +We +We +We +jN +zK +En +vM +kl +PN +ue +MB +PN +fk +CS +lK +tm +Xo +LK +Nw +lK +We +We +We +We +We +We +We +We +We +We +We +We +"} +(41,1,1) = {" +We +We +We +We +We +We +We +We +We +We +xD +xD +xD +xD +xD +sN +PN +Lx +PA +PN +Fw +Nz +lK +UQ +jb +ds +sD +lK +We +We +We +We +We +We +We +We +We +We +We +We +"} +(42,1,1) = {" +We +We +We +We +We +We +We +We +We +We +QG +ga +Xn +dF +JV +Tc +PN +PN +PT +PN +eB +VC +tO +rv +VZ +qS +Bc +lK +We +We +We +We +We +We +We +We +We +We +We +We +"} +(43,1,1) = {" +We +We +We +We +We +We +We +We +We +We +QG +tT +yr +dF +fW +UR +PN +xM +xH +PN +Va +ov +lK +pC +fl +Em +la +lK +Tf +We +We +We +We +We +We +We +We +We +We +We +"} +(44,1,1) = {" +We +We +We +We +We +We +We +We +We +We +Tg +Tg +Tg +Tg +xD +sN +PN +PN +PN +PN +kg +ky +lK +XZ +Ln +yg +si +uX +Iy +We +We +We +We +We +We +We +We +We +We +We +"} +(45,1,1) = {" +We +We +We +We +We +We +We +We +We +We +Tg +dC +Vi +rR +Tg +YP +NE +dd +ib +ho +pX +kZ +lK +Jw +Kd +hv +LS +fY +Iy +We +We +We +We +We +We +We +We +We +We +We +"} +(46,1,1) = {" +We +We +We +We +We +We +We +We +We +We +Tg +Fz +IM +TT +Dr +XA +Zo +Ai +xh +hm +lM +QV +lK +lQ +zz +uo +IV +ea +Iy +We +We +We +We +We +We +We +We +We +We +We +"} +(47,1,1) = {" +We +We +We +We +We +We +We +We +We +We +Tg +Tg +NJ +aH +Tg +Ek +Ek +Om +Ek +Ek +Ek +wZ +lK +wl +Cp +il +uq +lK +dL +We +We +We +We +We +We +We +We +We +We +We +"} +(48,1,1) = {" +We +We +We +We +We +We +We +We +We +We +We +tq +Br +le +Ek +tn +tJ +Bq +dq +IC +JH +Kk +lK +wn +lK +lK +lK +lK +We +We +We +We +We +We +We +We +We +We +We +We +"} +(49,1,1) = {" +We +We +We +We +We +We +We +We +We +We +We +tq +Iu +eT +Uz +mY +lr +Ra +Ia +Ef +EG +Uh +qY +FS +Ek +lK +lK +We +We +We +We +We +We +We +We +We +We +We +We +We +"} +(50,1,1) = {" +We +We +We +We +We +We +We +We +We +We +We +Tg +XY +Tg +Ek +SU +tc +xA +Ny +zB +wD +sV +gQ +yb +FK +Ek +We +We +We +We +We +We +We +We +We +We +We +We +We +We +"} +(51,1,1) = {" +We +We +We +We +We +We +We +We +We +We +We +We +We +Tg +Ek +fm +TQ +YX +EM +Yr +fF +CF +nA +BB +Ab +Ek +We +We +We +We +We +We +We +We +We +We +We +We +We +We +"} +(52,1,1) = {" +We +We +We +We +We +We +We +We +We +We +We +We +We +sK +Ek +Ek +SW +Cw +Ht +kv +WY +zy +Ih +Ek +Ek +Ek +We +We +We +We +We +We +We +We +We +We +We +We +We +We +"} +(53,1,1) = {" +We +We +We +We +We +We +We +We +We +We +We +We +We +sK +We +Ek +CI +yn +hR +Ek +qJ +LB +mW +Ek +We +sK +We +We +We +We +We +We +We +We +We +We +We +We +We +We +"} +(54,1,1) = {" +We +We +We +We +We +We +We +We +We +We +We +We +We +sK +We +Ek +mS +mS +mS +Ek +mS +mS +mS +Ek +We +sK +We +We +We +We +We +We +We +We +We +We +We +We +We +We +"} +(55,1,1) = {" +We +We +We +We +We +We +We +We +We +We +We +IZ +IZ +IZ +We +pe +We +We +We +am +We +We +We +vS +We +IZ +IZ +IZ +We +We +We +We +We +We +We +We +We +We +We +We +"} +(56,1,1) = {" +We +We +We +We +We +We +We +We +We +We +We +We +We +IZ +IZ +IZ +IZ +IZ +IZ +IZ +IZ +IZ +IZ +IZ +IZ +IZ +We +We +We +We +We +We +We +We +We +We +We +We +We +We +"} diff --git a/_maps/shuttles/shiptest/nanotrasen_delta.dmm b/_maps/shuttles/shiptest/nanotrasen_delta.dmm index eae823fd2a11..4702de7e8e15 100644 --- a/_maps/shuttles/shiptest/nanotrasen_delta.dmm +++ b/_maps/shuttles/shiptest/nanotrasen_delta.dmm @@ -73,27 +73,6 @@ }, /turf/open/floor/plating, /area/ship/cargo) -"aw" = ( -/obj/effect/turf_decal/borderfloor{ - dir = 4 - }, -/obj/effect/turf_decal/industrial/loading{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 1 - }, -/obj/machinery/mineral/processing_unit_console{ - machinedir = 6; - pixel_y = 26 - }, -/obj/machinery/conveyor_switch/oneway{ - id = "1984"; - pixel_x = 5; - pixel_y = -10 - }, -/turf/open/floor/plasteel, -/area/ship/cargo) "ax" = ( /turf/closed/wall/mineral/titanium, /area/ship/cargo) @@ -1353,6 +1332,17 @@ /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/plasteel/white, /area/ship/science/robotics) +"mf" = ( +/obj/effect/turf_decal/borderfloor, +/obj/machinery/door/airlock{ + name = "Janitorial Closet" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/port) "mt" = ( /obj/structure/sign/departments/medbay/alt, /turf/closed/wall/mineral/titanium/nodiagonal, @@ -1437,17 +1427,6 @@ /obj/structure/catwalk/over, /turf/open/floor/plating, /area/ship/engineering) -"op" = ( -/obj/effect/turf_decal/borderfloor, -/obj/machinery/door/airlock{ - name = "Restroom" - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/hallway/port) "oq" = ( /obj/machinery/light/small/built/directional/south, /obj/structure/cable{ @@ -2207,6 +2186,10 @@ /obj/effect/turf_decal/industrial/outline/yellow, /turf/open/floor/plasteel/dark, /area/ship/science/robotics) +"HC" = ( +/obj/machinery/porta_turret/ship/weak, +/turf/closed/wall/mineral/titanium, +/area/ship/bridge) "HJ" = ( /turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/science/robotics) @@ -2261,6 +2244,17 @@ }, /turf/open/floor/plating, /area/ship/cargo) +"Jf" = ( +/obj/effect/turf_decal/borderfloor, +/obj/machinery/door/airlock{ + name = "Restroom" + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/port) "Jj" = ( /obj/structure/cable{ icon_state = "1-2" @@ -2422,17 +2416,6 @@ }, /turf/open/floor/plasteel, /area/ship/science/robotics) -"Nm" = ( -/obj/effect/turf_decal/borderfloor, -/obj/machinery/door/airlock{ - name = "Janitorial Closet" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/turf/open/floor/plasteel/tech/grid, -/area/ship/hallway/port) "NF" = ( /obj/structure/cable{ icon_state = "4-8" @@ -2530,6 +2513,27 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/plasteel/patterned, /area/ship/cargo) +"Sr" = ( +/obj/effect/turf_decal/borderfloor{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/loading{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 1 + }, +/obj/machinery/mineral/processing_unit_console{ + machinedir = 6; + pixel_y = 26 + }, +/obj/machinery/conveyor_switch/oneway{ + id = "1984"; + pixel_x = 5; + pixel_y = -10 + }, +/turf/open/floor/plasteel, +/area/ship/cargo) "SE" = ( /obj/effect/turf_decal/corner/opaque/blue, /obj/effect/turf_decal/corner/opaque/blue{ @@ -2817,12 +2821,6 @@ /obj/machinery/light/small/built/directional/south, /turf/open/floor/plating, /area/ship/engineering) -"ZY" = ( -/obj/machinery/porta_turret/centcom_shuttle/weak{ - dir = 4 - }, -/turf/closed/wall/mineral/titanium, -/area/ship/bridge) (1,1,1) = {" aa @@ -2946,7 +2944,7 @@ aa "} (7,1,1) = {" aa -ZY +HC ai ai AW @@ -2962,13 +2960,13 @@ cP AW ai ai -ZY +HC "} (8,1,1) = {" aa ae al -Nm +mf aR Jj bD @@ -3028,7 +3026,7 @@ SN aa ae CP -op +Jf qt ae bF @@ -3247,7 +3245,7 @@ Mc (22,1,1) = {" aa ab -aw +Sr jk rs de @@ -3346,23 +3344,23 @@ HJ "} (27,1,1) = {" aa -ZY +HC ab aK qe bd ab -ZY +HC aa aa aa -ZY +HC HJ DS TK QR HJ -ZY +HC "} (28,1,1) = {" aa diff --git a/_maps/shuttles/shiptest/nanotrasen_osprey.dmm b/_maps/shuttles/shiptest/nanotrasen_osprey.dmm index debbb372e61d..7d9be9ebbdb2 100644 --- a/_maps/shuttles/shiptest/nanotrasen_osprey.dmm +++ b/_maps/shuttles/shiptest/nanotrasen_osprey.dmm @@ -556,6 +556,7 @@ /obj/structure/cable{ icon_state = "0-4" }, +/obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/plasteel/tech/techmaint, /area/ship/crew/cryo) "eh" = ( @@ -782,6 +783,7 @@ /obj/item/assembly/flash/handheld{ pixel_x = -5 }, +/obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/plasteel/white, /area/ship/science) "fJ" = ( @@ -1284,6 +1286,7 @@ /obj/structure/cable{ icon_state = "0-4" }, +/obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "ja" = ( @@ -2989,6 +2992,7 @@ /obj/structure/cable{ icon_state = "0-2" }, +/obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/plasteel/freezer, /area/ship/crew/toilet) "tp" = ( @@ -4612,6 +4616,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 5 }, +/obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/wood, /area/ship/crew/canteen) "DE" = ( @@ -4720,6 +4725,7 @@ /obj/item/clothing/suit/toggle/labcoat, /obj/item/storage/belt/medical, /obj/item/clothing/glasses/hud/health, +/obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/plasteel/white, /area/ship/medical) "Ek" = ( @@ -6078,7 +6084,6 @@ /obj/effect/turf_decal/corner/transparent/neutral{ dir = 4 }, -/obj/machinery/light/dim/directional/north, /turf/open/floor/plasteel, /area/ship/hallway/central) "NH" = ( @@ -6200,6 +6205,7 @@ }, /obj/structure/cable, /obj/item/holosign_creator/janibarrier, +/obj/machinery/power/apc/auto_name/directional/south, /turf/open/floor/plasteel, /area/ship/crew/janitor) "OA" = ( @@ -6284,7 +6290,7 @@ sortTypes = list(7,8,15,29,30); tag = "Command" }, -/obj/structure/extinguisher_cabinet/directional/north, +/obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/plasteel, /area/ship/hallway/central) "Pa" = ( @@ -6832,6 +6838,7 @@ /obj/item/clothing/gloves/fingerless, /obj/item/megaphone/cargo, /obj/item/clothing/head/safety_helmet, +/obj/machinery/power/apc/auto_name/directional/south, /turf/open/floor/plasteel, /area/ship/cargo/office) "SK" = ( diff --git a/_maps/shuttles/shiptest/nanotrasen_skipper.dmm b/_maps/shuttles/shiptest/nanotrasen_skipper.dmm index a6e6242199dd..d86fcc6cfae9 100644 --- a/_maps/shuttles/shiptest/nanotrasen_skipper.dmm +++ b/_maps/shuttles/shiptest/nanotrasen_skipper.dmm @@ -61,12 +61,11 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/light/directional/south, /obj/machinery/button/door{ dir = 1; id = "coolingshutdown"; name = "Shutdown Cooling"; - pixel_y = -25 + pixel_y = -22 }, /obj/machinery/atmospherics/components/binary/pump{ dir = 4 @@ -2560,6 +2559,16 @@ }, /turf/open/floor/plating, /area/ship/cargo) +"uM" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/obj/machinery/light_switch{ + pixel_y = 21; + pixel_x = 7 + }, +/turf/open/floor/plating, +/area/ship/engineering) "uQ" = ( /obj/effect/turf_decal/corner/opaque/yellow/border{ dir = 4 @@ -3694,6 +3703,15 @@ }, /turf/open/floor/plasteel/tech/techmaint, /area/ship/medical) +"Gh" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/cyan/visible, +/obj/machinery/light/directional/south, +/turf/open/floor/engine, +/area/ship/engineering/engine) "Gi" = ( /obj/structure/cable{ icon_state = "1-2" @@ -4241,6 +4259,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 8 }, +/obj/machinery/light/broken/directional/north, /turf/open/floor/engine, /area/ship/engineering/engine) "Lz" = ( @@ -5088,11 +5107,6 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 4 }, -/obj/machinery/light_switch{ - dir = 8; - pixel_x = 25; - pixel_y = 25 - }, /obj/structure/catwalk/over, /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) @@ -5300,7 +5314,6 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/light/broken/directional/north, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable{ icon_state = "0-4" @@ -5984,7 +5997,7 @@ MV sK AG Jm -yG +uM yG we sD @@ -6143,7 +6156,7 @@ Lv Yj fD MP -mA +Gh IV fg fz diff --git a/_maps/shuttles/shiptest/pirate_ember.dmm b/_maps/shuttles/shiptest/pirate_ember.dmm index 5c3e150127e0..5a5ac195fd10 100644 --- a/_maps/shuttles/shiptest/pirate_ember.dmm +++ b/_maps/shuttles/shiptest/pirate_ember.dmm @@ -809,7 +809,15 @@ req_access = null; anchored = 1 }, + +/obj/machinery/light/small, +/obj/item/seeds/cannabis{ + pixel_y = -5; + pixel_x = -5 + }, + /obj/machinery/light/small/directional/south, + /turf/open/floor/plating/rust, /area/ship/engineering) "eV" = ( @@ -1370,6 +1378,10 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 1 }, +/obj/item/seeds/corn{ + pixel_y = -8; + pixel_x = 5 + }, /turf/open/floor/plasteel, /area/ship/hallway/central) "hE" = ( @@ -3198,6 +3210,10 @@ /obj/structure/closet/emcloset/wall{ pixel_y = 28 }, +/obj/item/seeds/berry{ + pixel_x = -8; + pixel_y = 6 + }, /turf/open/floor/plating{ icon_state = "foam_plating" }, @@ -6181,6 +6197,15 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/item/seeds/potato{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/seeds/garlic{ + pixel_x = 5; + pixel_y = 2 + }, +/obj/item/seeds/grass, /turf/open/floor/plating{ icon_state = "panelscorched" }, @@ -7460,12 +7485,12 @@ /turf/closed/wall, /area/ship/security/armory) "JO" = ( -/obj/machinery/vending/hydroseeds, /obj/effect/turf_decal/siding/wood, /obj/machinery/light/directional/south, /obj/structure/sign/departments/botany{ pixel_x = 32 }, +/obj/structure/salvageable/seed, /turf/open/floor/concrete/slab_1, /area/ship/crew/canteen/kitchen) "JQ" = ( @@ -8370,6 +8395,11 @@ /obj/item/trash/candy, /obj/item/trash/waffles, /obj/item/flashlight, + +/obj/item/seeds/chili{ + pixel_y = -7; + pixel_x = -2 + }, /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/plating, /area/ship/hallway/central) diff --git a/_maps/shuttles/shiptest/pirate_noderider.dmm b/_maps/shuttles/shiptest/pirate_noderider.dmm index 3fbde5fb5c7f..c665df9c48ad 100644 --- a/_maps/shuttles/shiptest/pirate_noderider.dmm +++ b/_maps/shuttles/shiptest/pirate_noderider.dmm @@ -536,11 +536,7 @@ /obj/structure/cable{ icon_state = "1-8" }, -/obj/machinery/porta_turret/centcom_shuttle{ - dir = 1; - pixel_y = -32; - density = 0 - }, +/obj/machinery/porta_turret/ship, /turf/open/floor/engine/hull, /area/ship/bridge) "hK" = ( @@ -789,10 +785,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/porta_turret/centcom_shuttle{ - pixel_y = 32; - density = 0 - }, +/obj/machinery/porta_turret/ship, /turf/open/floor/engine/hull, /area/ship/bridge) "mf" = ( @@ -866,12 +859,6 @@ dir = 1 }, /area/ship/engineering) -"mS" = ( -/obj/machinery/porta_turret/centcom_shuttle{ - dir = 1 - }, -/turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) "mT" = ( /obj/structure/cable{ icon_state = "1-2" @@ -1331,10 +1318,7 @@ /obj/structure/cable{ icon_state = "2-8" }, -/obj/machinery/porta_turret/centcom_shuttle{ - pixel_y = 32; - density = 0 - }, +/obj/machinery/porta_turret/ship, /turf/open/floor/engine/hull, /area/ship/bridge) "tU" = ( @@ -1716,17 +1700,6 @@ "Am" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/crew) -"An" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/porta_turret/centcom_shuttle{ - dir = 1; - pixel_y = -32; - density = 0 - }, -/turf/open/floor/engine/hull, -/area/ship/bridge) "Av" = ( /obj/structure/cable{ icon_state = "6-8" @@ -2232,10 +2205,7 @@ /area/ship/cargo) "Hj" = ( /obj/effect/turf_decal/spline/fancy/opaque/black, -/obj/machinery/porta_turret/centcom_shuttle{ - pixel_y = 32; - density = 0 - }, +/obj/machinery/porta_turret/ship, /turf/open/floor/plating/airless, /area/ship/bridge) "Hx" = ( @@ -2449,12 +2419,6 @@ /obj/structure/reagent_dispensers, /turf/open/floor/plasteel/dark, /area/ship/engineering) -"KI" = ( -/obj/machinery/porta_turret/centcom_shuttle{ - dir = 4 - }, -/turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) "KM" = ( /obj/structure/cable{ icon_state = "4-10" @@ -2952,11 +2916,7 @@ /obj/effect/turf_decal/spline/fancy/opaque/black{ dir = 1 }, -/obj/machinery/porta_turret/centcom_shuttle{ - dir = 1; - pixel_y = -32; - density = 0 - }, +/obj/machinery/porta_turret/ship, /turf/open/floor/plating/airless, /area/ship/bridge) "UY" = ( @@ -2989,7 +2949,7 @@ /turf/open/floor/plating/airless, /area/ship/external) "VC" = ( -/obj/machinery/porta_turret/centcom_shuttle, +/obj/machinery/porta_turret/ship, /turf/closed/wall/mineral/plastitanium, /area/ship/bridge) "VF" = ( @@ -3585,7 +3545,7 @@ by by by by -An +lU wq ym MU @@ -3989,7 +3949,7 @@ by by by ef -mS +VC Kc Jp EH @@ -4109,13 +4069,13 @@ qc Th Kc by -KI +VC by oJ Ne oJ by -KI +VC by pm bl @@ -4199,7 +4159,7 @@ by by by by -KI +VC by by by diff --git a/_maps/shuttles/shiptest/radio_funny.dmm b/_maps/shuttles/shiptest/radio_funny.dmm index 6b27d4fb9d75..bd9c294b972d 100644 --- a/_maps/shuttles/shiptest/radio_funny.dmm +++ b/_maps/shuttles/shiptest/radio_funny.dmm @@ -40,7 +40,7 @@ /turf/open/floor/carpet/nanoweave/red, /area/ship/bridge) "cS" = ( -/obj/structure/chair/bronze{ +/obj/structure/chair/comfy/shuttle/bronze{ dir = 1 }, /turf/open/floor/carpet/nanoweave/blue, @@ -67,7 +67,7 @@ /turf/open/floor/carpet/nanoweave/blue, /area/ship/bridge) "io" = ( -/obj/structure/chair/bronze, +/obj/structure/chair/comfy/shuttle/bronze, /obj/machinery/door/window{ dir = 1 }, diff --git a/_maps/shuttles/shiptest/solgov_chronicle.dmm b/_maps/shuttles/shiptest/solgov_chronicle.dmm new file mode 100644 index 000000000000..ad6cad86ada7 --- /dev/null +++ b/_maps/shuttles/shiptest/solgov_chronicle.dmm @@ -0,0 +1,6431 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1; + color = "#543C30" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ship/bridge) +"ac" = ( +/obj/machinery/computer/security/solgov{ + dir = 8 + }, +/turf/open/floor/wood/walnut, +/area/ship/bridge) +"ah" = ( +/obj/effect/turf_decal/corner/opaque/solgovgold/three_quarters{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/railing/corner, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/firealarm/directional/west, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"av" = ( +/obj/structure/fluff/hedge/opaque, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/engineering) +"aA" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible/layer2, +/obj/machinery/atmospherics/pipe/simple/supply/visible/layer2{ + dir = 4 + }, +/obj/machinery/meter/atmos/layer2, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/engineering/engine) +"aB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4; + color = "#543C30" + }, +/turf/open/floor/wood/mahogany, +/area/ship/crew) +"aG" = ( +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/obj/machinery/button/door{ + dir = 8; + pixel_x = 22; + pixel_y = 10; + name = "blast door control"; + id = "sgc_airlock1" + }, +/obj/structure/sign/warning/vacuum/external{ + pixel_y = -22 + }, +/turf/open/floor/plasteel/white, +/area/ship/security/armory) +"aN" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/solgovblue{ + dir = 10 + }, +/turf/open/floor/plasteel/white, +/area/ship/security/armory) +"aP" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/bookcase/random, +/turf/open/floor/wood/walnut, +/area/ship/crew/crewtwo) +"aU" = ( +/obj/effect/turf_decal/corner/opaque/solgovgold{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"bd" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/wood, +/area/ship/crew) +"be" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile/shuttle, +/obj/machinery/door/poddoor{ + id = "sgc_bridge"; + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ship/bridge) +"bf" = ( +/obj/structure/table/wood/fancy/purple, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"bg" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"bm" = ( +/obj/effect/turf_decal/solgov/center_left, +/obj/effect/turf_decal/spline/fancy/opaque/grey{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ship/cargo) +"br" = ( +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/machinery/light/directional/west, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/cargo) +"bs" = ( +/obj/machinery/telecomms/broadcaster/preset_left{ + network = "SolNet"; + pixel_y = 0 + }, +/obj/machinery/door/window/brigdoor/northright{ + dir = 2; + req_one_access = list(61,11) + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/turf/open/floor/circuit, +/area/ship/engineering) +"bt" = ( +/obj/machinery/atmospherics/pipe/layer_manifold{ + dir = 4 + }, +/turf/closed/wall/mineral/titanium, +/area/ship/crew/crewtwo) +"bu" = ( +/obj/machinery/power/shuttle/engine/electric{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/light/floor, +/turf/open/floor/engine/hull, +/area/ship/engineering/engine) +"bw" = ( +/obj/structure/chair/wood{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/obj/machinery/button/door{ + pixel_y = 11; + pixel_x = 22; + dir = 8; + name = "window shutter control"; + id = "sgc_dorm" + }, +/turf/open/floor/wood, +/area/ship/crew) +"bx" = ( +/obj/machinery/vending/coffee, +/obj/machinery/light/small/directional/south, +/turf/open/floor/wood/walnut, +/area/ship/bridge) +"bA" = ( +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/structure/bed, +/obj/item/bedsheet/solgov, +/obj/structure/curtain/cloth, +/obj/machinery/light/small/directional/south, +/turf/open/floor/wood, +/area/ship/crew/dorm) +"bB" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/obj/machinery/light/small/directional/south, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = 13; + pixel_y = -20 + }, +/turf/open/floor/plasteel/freezer, +/area/ship/crew) +"bH" = ( +/obj/structure/closet/secure_closet/captains{ + populate = 0; + anchored = 1 + }, +/obj/item/clothing/neck/cloak/solgov, +/obj/item/clothing/under/solgov/formal/captain, +/obj/item/clothing/shoes/laceup, +/obj/item/clothing/head/solgov/captain, +/obj/item/folder/solgov, +/obj/item/folder/solgov, +/obj/item/folder/solgov/red, +/obj/item/folder/solgov/red, +/obj/item/clothing/under/solgov/formal, +/obj/item/clothing/gloves/combat, +/obj/item/storage/backpack/captain, +/obj/item/door_remote/captain, +/obj/item/storage/belt/sabre/solgov, +/obj/item/clothing/under/solgov/dress, +/obj/item/clothing/suit/armor/vest/bulletproof/solgov/captain, +/obj/item/stamp/solgov, +/obj/item/clothing/suit/armor/solgov_trenchcoat, +/obj/item/spacecash/bundle/loadsamoney, +/obj/item/gun/ballistic/automatic/powered/gauss/modelh, +/obj/item/ammo_box/magazine/modelh, +/obj/item/ammo_box/magazine/modelh, +/turf/open/floor/carpet/royalblue, +/area/ship/crew/office) +"cg" = ( +/obj/structure/chair/wood{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-9" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"cp" = ( +/obj/machinery/computer/message_monitor{ + dir = 8 + }, +/obj/item/radio/intercom/directional/east, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"cw" = ( +/obj/docking_port/mobile{ + port_direction = 8; + preferred_direction = 4; + dir = 2 + }, +/turf/closed/wall/mineral/titanium, +/area/ship/crew) +"cP" = ( +/obj/machinery/door/poddoor{ + dir = 4; + id = "sgc_cargo" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"cT" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ship/engineering) +"cW" = ( +/obj/structure/table/wood, +/obj/item/paper_bin/carbon{ + pixel_x = 7; + pixel_y = 8 + }, +/obj/item/paper_bin{ + pixel_x = -5; + pixel_y = -1 + }, +/obj/item/pen/solgov{ + pixel_x = -5 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/wood, +/area/ship/crew) +"da" = ( +/obj/machinery/computer/cargo/express/solgov{ + dir = 4 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/wood/walnut, +/area/ship/bridge) +"dd" = ( +/obj/effect/turf_decal/techfloor, +/obj/structure/rack, +/obj/machinery/firealarm/directional/south, +/obj/item/stack/sheet/mineral/plasma/twenty, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"dj" = ( +/obj/structure/closet/crate/bin, +/obj/item/trash/sosjerky, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/wood, +/area/ship/crew) +"dm" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"dz" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/machinery/button/door{ + pixel_y = -22; + pixel_x = -9; + id = "sgc_overseer"; + name = "window shutter control"; + dir = 1 + }, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"dA" = ( +/obj/machinery/computer/cryopod/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/plasteel, +/area/ship/crew/dorm) +"dC" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + dir = 4 + }, +/obj/machinery/door/poddoor{ + dir = 4; + id = "sgc_airlock2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/crew/crewtwo) +"dR" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"ez" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/door/airlock{ + name = "Dorm" + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/crew/dorm) +"eD" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/effect/turf_decal/corner/opaque/solgovblue{ + dir = 9 + }, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"eQ" = ( +/obj/structure/table/wood/fancy/purple, +/obj/item/paper_bin, +/obj/item/desk_flag/solgov{ + pixel_y = 12; + pixel_x = -7 + }, +/obj/item/pen/solgov, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 9 + }, +/obj/machinery/newscaster/directional/north, +/obj/machinery/light/small/directional/west, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"eU" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 5 + }, +/obj/effect/turf_decal/techfloor/orange{ + dir = 1 + }, +/obj/effect/turf_decal/techfloor/orange, +/obj/machinery/firealarm/directional/west{ + pixel_y = 5 + }, +/obj/machinery/button/door{ + dir = 4; + pixel_y = -10; + pixel_x = -22; + id = "sgc_engine" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"eV" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/wood/walnut, +/area/ship/bridge) +"fd" = ( +/obj/structure/table/wood, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/wood, +/area/ship/crew) +"fe" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"fj" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ + dir = 10 + }, +/obj/effect/turf_decal/techfloor/orange{ + dir = 5 + }, +/obj/effect/turf_decal/techfloor/orange/corner{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/obj/structure/sign/poster/solgov/random{ + pixel_y = 30 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"fl" = ( +/obj/structure/closet/secure_closet/miner{ + name = "field engineer's locker"; + populate = 0; + anchored = 1 + }, +/obj/item/pickaxe/drill/jackhammer, +/obj/item/storage/toolbox/mechanical, +/obj/item/clothing/head/hardhat/solgov, +/obj/item/radio{ + icon_state = "sec_radio" + }, +/obj/item/clothing/under/solgov/formal, +/obj/item/clothing/under/solgov/dress, +/obj/item/clothing/under/solgov, +/obj/item/clothing/suit/hazardvest/solgov, +/obj/item/clothing/accessory/armband/cargo, +/obj/item/clothing/shoes/workboots, +/obj/item/kitchen/knife/combat/survival, +/obj/item/clothing/gloves/combat, +/obj/item/storage/backpack, +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/outline/red, +/obj/item/clothing/glasses/meson, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security/armory) +"fq" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ship/cargo) +"fw" = ( +/obj/machinery/atmospherics/pipe/layer_manifold, +/obj/effect/turf_decal/techfloor/orange{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor/orange{ + dir = 4 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"fz" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/computer/bookmanagement{ + pixel_y = 7; + icon_state = "laptop"; + dir = 8 + }, +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"fA" = ( +/obj/effect/turf_decal/solgov/center_right, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/grey{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ship/cargo) +"fN" = ( +/obj/machinery/holopad/secure, +/turf/open/floor/wood, +/area/ship/bridge) +"fT" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/railing, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"fW" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/effect/turf_decal/corner/opaque/solgovblue{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/visible/layer2{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"ga" = ( +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + dir = 1; + id = "sgc_cs" + }, +/obj/machinery/door/poddoor{ + dir = 4; + id = "sgc_cargo" + }, +/obj/structure/cable, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"gi" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 2; + color = "#543C30" + }, +/obj/structure/railing/wood{ + color = "#543C30" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/bridge) +"gk" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile/shuttle, +/obj/machinery/door/poddoor{ + id = "sgc_bridge" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/ship/bridge) +"gs" = ( +/obj/effect/landmark/start/security_officer, +/turf/open/floor/plasteel/white, +/area/ship/security/armory) +"gB" = ( +/obj/structure/cable/yellow{ + icon_state = "2-5" + }, +/obj/effect/turf_decal/corner/opaque/solgovblue{ + dir = 9 + }, +/obj/structure/noticeboard/staff{ + dir = 4; + pixel_x = -26 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"gK" = ( +/turf/open/floor/plating, +/area/ship/external) +"gZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plasteel/stairs{ + dir = 1 + }, +/area/ship/engineering) +"hh" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 10 + }, +/obj/machinery/atmospherics/components/unary/passive_vent/layer4{ + dir = 4 + }, +/obj/structure/sign/solgov_seal{ + pixel_y = -27 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/engineering/engine) +"hp" = ( +/obj/structure/table/wood, +/obj/structure/railing/wood{ + dir = 2; + color = "#792f27" + }, +/obj/item/reagent_containers/food/snacks/grown/cabbage{ + pixel_x = 1; + pixel_y = -3 + }, +/obj/item/reagent_containers/food/snacks/grown/cabbage{ + pixel_y = 6; + pixel_x = 9 + }, +/turf/open/floor/wood/mahogany, +/area/ship/crew) +"hr" = ( +/obj/structure/table/wood/fancy/purple, +/obj/machinery/photocopier/faxmachine/longrange, +/obj/item/desk_flag/solgov{ + pixel_x = 8; + pixel_y = 13 + }, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/machinery/button/door{ + pixel_y = 23; + pixel_x = 10; + id = "sgc_captain"; + name = "window shutter control" + }, +/turf/open/floor/wood, +/area/ship/crew/office) +"hs" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/machinery/firealarm/directional/north, +/obj/item/kirbyplants{ + icon_state = "applebush"; + pixel_y = 16; + pixel_x = 8 + }, +/obj/item/kirbyplants{ + icon_state = "plant-11"; + pixel_x = 6; + pixel_y = 2 + }, +/obj/item/kirbyplants{ + icon_state = "plant-21"; + pixel_x = -12; + pixel_y = 18 + }, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"hw" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/engineering) +"hx" = ( +/obj/item/kirbyplants{ + icon_state = "plant-11"; + pixel_x = -12; + pixel_y = 19; + layer = 2.89 + }, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/machinery/light_switch{ + pixel_y = 21; + pixel_x = 8 + }, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"hA" = ( +/obj/machinery/door/airlock/solgov{ + dir = 4; + name = "Bridge"; + req_access = list(19) + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"hM" = ( +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/corners, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/cargo) +"hS" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"hU" = ( +/obj/item/kirbyplants{ + icon_state = "plant-06"; + pixel_y = 16; + pixel_x = 16 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/wood, +/area/ship/crew) +"hX" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-5" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"id" = ( +/obj/structure/closet/secure_closet/security{ + populate = 0; + name = "sonnensöldners's locker"; + anchored = 1 + }, +/obj/item/clothing/head/solgov/sonnensoldner, +/obj/structure/sign/poster/solgov/sonnensoldner{ + pixel_y = 30 + }, +/obj/item/radio{ + icon_state = "sec_radio" + }, +/obj/item/clothing/under/solgov/formal, +/obj/item/clothing/under/solgov/dress, +/obj/item/clothing/under/solgov, +/obj/item/clothing/shoes/workboots, +/obj/item/storage/belt/sabre/solgov, +/obj/item/clothing/gloves/combat, +/obj/item/radio/headset/solgov/alt, +/obj/item/storage/backpack, +/obj/item/clothing/suit/armor/vest/bulletproof/solgov, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/outline/red, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security/armory) +"ie" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/airalarm/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/ship/crew/dorm) +"if" = ( +/obj/effect/turf_decal/techfloor{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/machinery/button/door{ + pixel_y = 22; + pixel_x = 9; + id = "sgc_engi"; + name = "window shutter control" + }, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"ip" = ( +/turf/closed/wall/mineral/titanium, +/area/ship/crew/crewtwo) +"iA" = ( +/obj/structure/closet/crate/bin, +/obj/machinery/light/small/directional/east, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"ja" = ( +/turf/closed/wall/mineral/titanium, +/area/ship/crew/dorm) +"jb" = ( +/obj/effect/turf_decal/techfloor/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/turf/open/floor/plasteel/white, +/area/ship/security/armory) +"jd" = ( +/obj/structure/table/wood, +/obj/structure/railing/wood{ + dir = 6; + color = "#792f27" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4; + color = "#543C30" + }, +/obj/item/reagent_containers/food/snacks/grown/cabbage{ + pixel_y = 4 + }, +/turf/open/floor/wood/mahogany, +/area/ship/crew) +"ju" = ( +/turf/open/floor/carpet/royalblue, +/area/ship/crew/office) +"jz" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/engineering/engine) +"jJ" = ( +/obj/machinery/button/door{ + dir = 4; + pixel_y = -8; + pixel_x = -22; + id = "sgc_airlock2"; + req_one_access = list(20,19); + name = "blast door control" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/light_switch{ + pixel_y = 21; + pixel_x = 7 + }, +/obj/machinery/light/small/directional/west{ + pixel_y = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"jS" = ( +/obj/effect/turf_decal/techfloor, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"jU" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/turf/open/floor/wood, +/area/ship/crew) +"ke" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/turf_decal/corner/opaque/solgovblue/three_quarters{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"kg" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/bookbinder, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"kl" = ( +/obj/structure/table/wood/fancy/purple, +/obj/machinery/computer/secure_data/laptop{ + dir = 8; + pixel_y = 5; + pixel_x = 4 + }, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/crew/office) +"kp" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/ship/crew) +"kw" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/wood/walnut, +/area/ship/bridge) +"kz" = ( +/obj/machinery/telecomms/hub{ + autolinkers = list("solgov","broadcasterA","receiverA","solgovPDA","SolHub"); + network = "SolNet"; + id = "Solgov Hub" + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/engineering) +"kI" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer2{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/engineering/engine) +"kN" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/crew/dorm) +"kT" = ( +/obj/effect/turf_decal/corner/opaque/solgovblue/three_quarters{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"lc" = ( +/obj/structure/cable{ + icon_state = "5-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/wood, +/area/ship/crew) +"lA" = ( +/obj/effect/turf_decal/atmos/nitrogen{ + dir = 1; + layer = 2.04 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor/orange, +/obj/effect/turf_decal/techfloor/orange{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"lJ" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/ship/crew) +"lP" = ( +/obj/structure/cable{ + icon_state = "1-6" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/effect/turf_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"lZ" = ( +/obj/effect/turf_decal/techfloor{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/structure/sign/warning{ + pixel_y = 9; + pixel_x = -23 + }, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"ma" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/engineering) +"ml" = ( +/obj/effect/turf_decal/industrial/warning/dust{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/engine/hull, +/area/ship/external) +"mz" = ( +/obj/effect/turf_decal/corner/opaque/solgovblue/three_quarters, +/obj/structure/chair/office, +/obj/effect/landmark/start/station_engineer, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"mA" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/warning, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/airlock/mining{ + name = "Cargo" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"mG" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/ship/crew) +"mN" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/turf/open/floor/wood, +/area/ship/crew) +"mP" = ( +/obj/structure/filingcabinet/double, +/obj/item/documents/solgov, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/wood, +/area/ship/crew/office) +"mZ" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/fluff/hedge/opaque, +/turf/open/floor/wood, +/area/ship/crew/office) +"nb" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/engineering) +"nd" = ( +/obj/structure/table/wood, +/turf/open/floor/carpet/blue, +/area/ship/crew) +"ne" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plasteel/white, +/area/ship/security/armory) +"ng" = ( +/obj/structure/window/reinforced, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/outlet_injector/on, +/turf/open/floor/engine/o2, +/area/ship/engineering/engine) +"nj" = ( +/obj/structure/bed, +/obj/item/bedsheet/solgov, +/obj/structure/curtain/cloth, +/obj/structure/sign/solgov_flag{ + dir = 1; + pixel_y = -27 + }, +/turf/open/floor/wood, +/area/ship/crew/dorm) +"nF" = ( +/obj/structure/closet/crate/wooden, +/obj/machinery/light/directional/south, +/obj/item/mop, +/obj/item/reagent_containers/glass/bucket, +/obj/item/soap, +/obj/item/soap, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/cargo) +"nH" = ( +/obj/structure/chair/sofa/right{ + dir = 4 + }, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/carpet/blue, +/area/ship/crew) +"nP" = ( +/obj/structure/dresser, +/obj/machinery/light/directional/south, +/turf/open/floor/carpet/royalblue, +/area/ship/crew/office) +"nR" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/solgov/center, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/effect/landmark/observer_start, +/turf/open/floor/plasteel, +/area/ship/cargo) +"nU" = ( +/obj/item/paper_bin/carbon{ + pixel_x = 7; + pixel_y = 8 + }, +/obj/item/paper_bin{ + pixel_x = -5; + pixel_y = -1 + }, +/obj/item/pen/solgov{ + pixel_x = -4 + }, +/obj/effect/turf_decal/corner/opaque/solgovblue/three_quarters{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/table/wood/fancy/blue, +/turf/open/floor/wood, +/area/ship/bridge) +"nW" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/door/airlock/solgov{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/crew/crewtwo) +"ol" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile/shuttle, +/obj/machinery/door/poddoor{ + id = "sgc_dorm" + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/ship/crew) +"oz" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/turf/open/floor/wood, +/area/ship/crew/office) +"oC" = ( +/obj/effect/turf_decal/corner/opaque/solgovgold/three_quarters{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"oH" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/solgovblue{ + dir = 10 + }, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/machinery/door/window/brigdoor/northleft{ + dir = 2; + req_one_access = list(61,11) + }, +/obj/machinery/telecomms/bus{ + id = "bus mainframe"; + network = "SolNet"; + autolinkers = list("processor7","solgov") + }, +/turf/open/floor/circuit, +/area/ship/engineering) +"oK" = ( +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/cargo) +"oY" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible/layer2{ + dir = 5 + }, +/obj/effect/turf_decal/corner/opaque/solgovblue{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"pi" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile/shuttle, +/obj/machinery/door/poddoor{ + id = "sgc_dorm" + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plating, +/area/ship/crew) +"pl" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/structure/rack, +/obj/item/radio/intercom/directional/north, +/obj/item/stack/sheet/metal/five, +/obj/item/stack/sheet/metal/five, +/obj/item/stack/sheet/metal/five, +/obj/item/stack/sheet/glass/five, +/obj/item/stack/sheet/glass/five, +/obj/item/stack/sheet/glass/five, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"pC" = ( +/obj/machinery/light/directional/west, +/obj/machinery/modular_computer/console/preset/command{ + dir = 4 + }, +/turf/open/floor/wood/walnut, +/area/ship/bridge) +"pR" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"pS" = ( +/turf/template_noop, +/area/template_noop) +"qe" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"qg" = ( +/obj/structure/closet/cabinet, +/obj/item/clothing/suit/solgov/dress, +/obj/item/clothing/suit/solgov/jacket, +/obj/item/radio/headset, +/obj/item/radio/headset, +/obj/item/radio/headset, +/obj/item/radio/headset, +/obj/item/radio, +/obj/item/radio, +/obj/item/radio/intercom/directional/north, +/obj/machinery/light/small/directional/east, +/obj/item/clothing/under/solgov, +/obj/item/clothing/under/solgov, +/obj/item/clothing/under/solgov/dress, +/obj/item/clothing/under/solgov/dress, +/turf/open/floor/wood, +/area/ship/crew/dorm) +"qz" = ( +/obj/machinery/photocopier, +/obj/machinery/light/directional/south, +/turf/open/floor/wood, +/area/ship/crew) +"qH" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"rq" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/door/airlock/engineering{ + dir = 4; + req_access = list(11); + name = "Equipment Room" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"rw" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"rD" = ( +/turf/closed/wall/mineral/titanium, +/area/ship/crew/office) +"rJ" = ( +/obj/machinery/suit_storage_unit/solgov, +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/techfloor/corner{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security/armory) +"rK" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile/shuttle, +/obj/machinery/door/poddoor{ + id = "sgc_bridge" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/ship/bridge) +"rO" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"rS" = ( +/obj/machinery/autolathe, +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security/armory) +"rZ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/turf/open/floor/wood, +/area/ship/crew) +"sa" = ( +/obj/machinery/computer/telecomms/monitor/solgov{ + dir = 1; + network = "SolNet" + }, +/obj/structure/railing, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"sd" = ( +/obj/effect/turf_decal/techfloor{ + dir = 5 + }, +/obj/structure/reagent_dispensers/fueltank, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"sf" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/ship/cargo) +"sq" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 2; + color = "#543C30" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/bridge) +"sx" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + dir = 4; + req_one_access = list(1,48) + }, +/obj/machinery/door/poddoor{ + dir = 4; + id = "sgc_airlock1" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"sz" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 2; + color = "#543C30" + }, +/obj/structure/railing/wood{ + color = "#543C30" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/ship/bridge) +"sA" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/crew/crewtwo) +"sE" = ( +/obj/machinery/advanced_airlock_controller{ + pixel_y = 24; + req_ship_access = 1; + req_access = null; + req_one_access = list(1,48) + }, +/obj/machinery/atmospherics/components/binary/dp_vent_pump/on/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"sL" = ( +/obj/effect/turf_decal/corner/opaque/solgovgold/three_quarters, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"sM" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible/layer2, +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/effect/turf_decal/corner/opaque/solgovblue{ + dir = 6 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"sS" = ( +/obj/effect/turf_decal/corner/opaque/solgovblue{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"sU" = ( +/obj/machinery/shower{ + dir = 1 + }, +/obj/structure/curtain, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plasteel/freezer, +/area/ship/crew/dorm) +"ti" = ( +/obj/item/energyhalberd/purple, +/obj/item/energyhalberd/purple, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/structure/closet/cabinet{ + name = "energy halbreds" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security/armory) +"tl" = ( +/obj/effect/turf_decal/siding/wood/corner{ + color = "#543C30"; + dir = 8 + }, +/obj/structure/railing/corner/wood{ + color = "#543C30"; + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/ship/bridge) +"tr" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/wood, +/area/ship/crew) +"ty" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/bridge) +"tC" = ( +/obj/structure/window/reinforced, +/obj/machinery/door/window/brigdoor/eastleft{ + dir = 8; + req_one_access = list(61,11) + }, +/obj/machinery/telecomms/message_server{ + pixel_y = 0; + autolinkers = list("solgovPDA"); + network = "SolNet"; + calibrating = 0 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/circuit/red, +/area/ship/engineering) +"tJ" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/crew) +"tQ" = ( +/obj/structure/table/wood, +/obj/item/paper_bin/carbon{ + pixel_x = 7; + pixel_y = 8 + }, +/obj/item/paper_bin{ + pixel_x = -5; + pixel_y = -1 + }, +/obj/item/pen/solgov{ + pixel_x = -5 + }, +/turf/open/floor/wood/walnut, +/area/ship/bridge) +"tV" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/crew/office) +"um" = ( +/obj/machinery/power/smes/engineering, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/effect/turf_decal/industrial/outline/orange, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/engineering) +"un" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1; + color = "#543C30" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/ship/bridge) +"uA" = ( +/obj/structure/chair/wood{ + dir = 4 + }, +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"uC" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile/shuttle, +/obj/machinery/door/poddoor{ + id = "sgc_bridge" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/ship/bridge) +"uD" = ( +/obj/effect/turf_decal/corner/opaque/solgovgold{ + dir = 9 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"uK" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 2; + color = "#543C30" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/bridge) +"uW" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/siding/wood/end{ + dir = 1 + }, +/obj/structure/fluff/hedge, +/turf/open/floor/wood/walnut, +/area/ship/crew/crewtwo) +"ve" = ( +/obj/machinery/power/shuttle/engine/electric{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/engine/hull, +/area/ship/engineering/engine) +"vo" = ( +/obj/machinery/advanced_airlock_controller{ + pixel_y = 24 + }, +/obj/machinery/atmospherics/components/binary/dp_vent_pump/on/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/crew/crewtwo) +"vr" = ( +/obj/effect/turf_decal/corner/opaque/solgovgold/three_quarters, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/effect/turf_decal/techfloor/corner{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"vx" = ( +/turf/closed/wall/mineral/titanium, +/area/ship/crew) +"vO" = ( +/obj/structure/table/wood/fancy/purple, +/obj/item/binoculars{ + pixel_y = 7 + }, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/wood, +/area/ship/crew/office) +"vR" = ( +/obj/machinery/door/window{ + dir = 8; + opacity = 1; + name = "Tinted Interior Door" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/turf/open/floor/wood, +/area/ship/crew/dorm) +"wt" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer4{ + dir = 4 + }, +/obj/structure/sign/solgov_seal, +/turf/open/floor/engine/hull/reinforced, +/area/ship/engineering/engine) +"wK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/solgovblue{ + dir = 10 + }, +/turf/open/floor/plasteel/white, +/area/ship/security/armory) +"wP" = ( +/obj/effect/turf_decal/industrial/warning/dust/corner{ + dir = 1 + }, +/obj/machinery/light/floor, +/obj/structure/sign/solgov_seal{ + pixel_y = 0; + pixel_x = -29 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/engine/hull, +/area/ship/external) +"wT" = ( +/obj/machinery/light/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/cargo) +"wU" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1; + color = "#543C30" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/turf/open/floor/wood, +/area/ship/bridge) +"wV" = ( +/obj/structure/table/wood, +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 10 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"wW" = ( +/obj/item/kirbyplants{ + icon_state = "plant-11"; + pixel_x = 10; + pixel_y = 0; + layer = 2.89 + }, +/obj/structure/table/wood/fancy/purple, +/obj/item/paper/crumpled, +/obj/item/pen/fountain/solgov, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/wood, +/area/ship/crew/office) +"xf" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor/orange/corner{ + dir = 1 + }, +/obj/effect/turf_decal/techfloor/orange{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/light/small/directional/south, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible/layer4, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"xt" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1; + color = "#543C30" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/ship/bridge) +"xu" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"xI" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/chair/wood, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"xL" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/door/airlock/solgov{ + dir = 4; + name = "Command Wing" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/crew/crewtwo) +"xM" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile/shuttle, +/obj/machinery/door/poddoor{ + id = "sgc_captain"; + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/ship/crew/office) +"xO" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/turf/open/floor/wood, +/area/ship/crew) +"ya" = ( +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"yj" = ( +/obj/structure/chair/sofa/corner{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/carpet/blue, +/area/ship/crew) +"yu" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile/shuttle, +/obj/machinery/door/poddoor{ + id = "sgc_bridge"; + dir = 8 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/ship/bridge) +"yv" = ( +/obj/structure/cable{ + icon_state = "1-10" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/ship/crew) +"yw" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible/layer2, +/obj/effect/turf_decal/corner/opaque/solgovblue{ + dir = 6 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"yA" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/door/airlock{ + name = "Dorm"; + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/crew/dorm) +"yD" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"yE" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/turf/open/floor/wood, +/area/ship/crew/office) +"yQ" = ( +/obj/item/kirbyplants{ + icon_state = "plant-17"; + pixel_y = 23; + pixel_x = -7 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1; + color = "#543C30" + }, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/wood, +/area/ship/bridge) +"yY" = ( +/obj/structure/closet/secure_closet/freezer/kitchen{ + req_access = null + }, +/obj/structure/railing/wood{ + dir = 4; + color = "#792f27" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4; + color = "#543C30" + }, +/obj/item/reagent_containers/food/condiment/milk, +/obj/item/reagent_containers/food/condiment/milk, +/turf/open/floor/wood/mahogany, +/area/ship/crew) +"zh" = ( +/obj/machinery/power/smes/shuttle/precharged{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor/orange{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/door/poddoor{ + id = "sgc_engine"; + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"zi" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"zk" = ( +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/corners, +/obj/item/reagent_containers/food/snacks/grown/cabbage, +/obj/item/reagent_containers/food/snacks/grown/cabbage, +/obj/item/reagent_containers/food/snacks/grown/cabbage, +/obj/item/reagent_containers/food/snacks/grown/cabbage, +/obj/item/reagent_containers/food/snacks/grown/cabbage, +/obj/item/reagent_containers/food/snacks/grown/cabbage, +/obj/item/reagent_containers/food/snacks/grown/cabbage, +/obj/item/reagent_containers/food/snacks/grown/cabbage, +/obj/item/reagent_containers/food/condiment/saltshaker, +/obj/item/reagent_containers/food/condiment/saltshaker, +/obj/item/reagent_containers/food/condiment/saltshaker, +/obj/item/reagent_containers/food/condiment/saltshaker, +/obj/structure/closet/crate/secure/gear{ + populate = 0; + name = "emergency sauerkraut supplies"; + desc = "For emergency use only"; + req_access = list(19) + }, +/obj/item/reagent_containers/food/snacks/grown/cabbage, +/obj/item/reagent_containers/food/snacks/grown/cabbage, +/obj/item/reagent_containers/food/snacks/grown/cabbage, +/obj/item/reagent_containers/food/snacks/grown/cabbage, +/obj/structure/sign/warning/incident{ + pixel_y = 30 + }, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/cargo) +"zm" = ( +/obj/effect/turf_decal/techfloor{ + dir = 10 + }, +/obj/structure/table/wood, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security/armory) +"zq" = ( +/obj/effect/turf_decal/atmos/oxygen{ + layer = 2.04 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor/orange{ + dir = 1 + }, +/obj/effect/turf_decal/techfloor/orange, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"zs" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"zu" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/crew) +"zv" = ( +/obj/structure/chair/sofa{ + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/carpet/blue, +/area/ship/crew) +"zw" = ( +/obj/effect/turf_decal/solgov/bottom_right, +/obj/effect/turf_decal/spline/fancy/opaque/grey{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ship/cargo) +"zM" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/ship/engineering) +"zR" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/plasteel, +/area/ship/cargo) +"Ad" = ( +/obj/effect/turf_decal/corner/opaque/solgovblue{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"Ag" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/machinery/light/small/directional/south, +/obj/structure/sign/solgov_seal{ + pixel_y = 0; + pixel_x = -29 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"Ah" = ( +/obj/structure/railing/corner/wood{ + color = "#543C30" + }, +/obj/machinery/computer/helm/solgov{ + dir = 8 + }, +/turf/open/floor/wood/walnut, +/area/ship/bridge) +"As" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/structure/closet/secure_closet/engineering_personal{ + name = "ship engineer's locker"; + populate = 0 + }, +/obj/item/storage/backpack/industrial, +/obj/effect/turf_decal/industrial/outline/orange, +/obj/item/clothing/head/hardhat/solgov, +/obj/item/folder/solgov, +/obj/item/clipboard, +/obj/item/clothing/under/solgov/formal, +/obj/item/clothing/under/solgov, +/obj/item/clothing/accessory/armband/engine, +/obj/item/storage/toolbox/mechanical, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/head/welding, +/obj/item/pen/solgov, +/obj/item/clothing/suit/hazardvest/solgov, +/obj/item/clothing/shoes/workboots, +/obj/item/clothing/gloves/combat, +/obj/machinery/light/directional/west, +/obj/structure/sign/poster/solgov/random{ + pixel_y = 30 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"Au" = ( +/obj/structure/closet/cabinet, +/obj/item/clothing/suit/solgov/dress, +/obj/item/clothing/suit/solgov/jacket, +/obj/item/radio/headset, +/obj/item/radio/headset, +/obj/item/radio/headset, +/obj/item/radio/headset, +/obj/item/radio, +/obj/item/radio, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/obj/machinery/light_switch{ + pixel_y = 21; + pixel_x = -12 + }, +/obj/item/clothing/under/solgov, +/obj/item/clothing/under/solgov, +/obj/item/clothing/under/solgov/dress, +/obj/item/clothing/under/solgov/dress, +/turf/open/floor/wood, +/area/ship/crew/dorm) +"Ax" = ( +/obj/effect/turf_decal/corner/opaque/solgovblue{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"Az" = ( +/obj/machinery/atmospherics/components/binary/dp_vent_pump/on/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"AK" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/machinery/button/door{ + dir = 1; + pixel_y = -22; + pixel_x = 8; + id = "sgc_cargo"; + name = "blast door control" + }, +/obj/machinery/button/shieldwallgen{ + dir = 1; + pixel_y = -20; + pixel_x = -2; + id = "sgc_cs" + }, +/turf/open/floor/plasteel, +/area/ship/cargo) +"AM" = ( +/obj/effect/turf_decal/techfloor/corner{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/effect/landmark/start/shaft_miner, +/turf/open/floor/plasteel/white, +/area/ship/security/armory) +"AN" = ( +/turf/closed/wall/mineral/titanium, +/area/ship/engineering/engine) +"AQ" = ( +/obj/effect/turf_decal/techfloor/corner, +/obj/effect/turf_decal/corner/opaque/solgovblue{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/ship/security/armory) +"AR" = ( +/obj/structure/mirror{ + pixel_y = 24 + }, +/obj/structure/sink{ + pixel_y = 19 + }, +/turf/open/floor/plasteel/freezer, +/area/ship/crew/dorm) +"AV" = ( +/obj/machinery/telecomms/processor{ + autolinkers = list("processor7"); + network = "SolNet"; + pixel_y = 0; + id = "Processor" + }, +/obj/structure/window/reinforced, +/obj/machinery/door/window/brigdoor/westleft{ + dir = 4; + req_one_access = list(61,11) + }, +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/techfloor, +/turf/open/floor/circuit/green, +/area/ship/engineering) +"AZ" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile/shuttle, +/obj/machinery/door/poddoor{ + id = "sgc_bridge" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ship/bridge) +"Be" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, +/obj/effect/turf_decal/siding/wood{ + dir = 8; + color = "#543C30" + }, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"Bn" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/ship/engineering/engine) +"Bs" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1; + color = "#543C30" + }, +/turf/open/floor/wood, +/area/ship/bridge) +"Bz" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2, +/turf/open/floor/engine/o2, +/area/ship/engineering/engine) +"BE" = ( +/obj/effect/turf_decal/corner/opaque/solgovblue{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/ship/security/armory) +"BZ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1; + color = "#543C30" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/turf/open/floor/wood, +/area/ship/bridge) +"Cb" = ( +/obj/effect/turf_decal/corner/opaque/solgovblue{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"Cd" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/light/small/directional/south, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"Cf" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1; + color = "#543C30" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/bridge) +"Cm" = ( +/obj/machinery/door/airlock/solgov{ + dir = 4; + name = "Captain's Quarters"; + req_access = list(20) + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/crew/office) +"Cs" = ( +/obj/machinery/power/smes/engineering, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/turf_decal/industrial/outline/orange, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/engineering) +"CC" = ( +/obj/machinery/door/airlock/solgov{ + dir = 4; + name = "Overseer's Quarters"; + req_access = list(57) + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/crew/crewtwo) +"CE" = ( +/obj/machinery/atmospherics/pipe/layer_manifold{ + dir = 4 + }, +/turf/closed/wall/mineral/titanium, +/area/ship/security/armory) +"CK" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/security/armory) +"CM" = ( +/obj/effect/turf_decal/techfloor, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plasteel/white, +/area/ship/security/armory) +"CU" = ( +/obj/machinery/photocopier/faxmachine, +/obj/structure/table/wood, +/obj/machinery/light/small/directional/south, +/turf/open/floor/wood, +/area/ship/crew) +"Dn" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/chair/office{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/turf/open/floor/wood, +/area/ship/crew/office) +"Ds" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 2; + color = "#543C30" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/bridge) +"Du" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/turf/open/floor/wood, +/area/ship/crew) +"DC" = ( +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/obj/structure/reagent_dispensers/watertank, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"DN" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/firealarm/directional/north, +/obj/machinery/light_switch{ + dir = 2; + pixel_y = 22; + pixel_x = -12 + }, +/turf/open/floor/wood, +/area/ship/crew/office) +"DW" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/structure/table/wood, +/turf/open/floor/wood/walnut, +/area/ship/bridge) +"Ef" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + dir = 4; + req_one_access = list(1,48) + }, +/obj/machinery/door/poddoor{ + dir = 4; + id = "sgc_airlock1" + }, +/obj/machinery/atmospherics/pipe/layer_manifold{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"Ep" = ( +/obj/effect/turf_decal/corner/opaque/solgovgold/three_quarters{ + dir = 1 + }, +/obj/effect/turf_decal/techfloor/corner{ + dir = 1 + }, +/obj/effect/turf_decal/techfloor/corner, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/ship/security/armory) +"Er" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/bridge) +"Ex" = ( +/obj/effect/turf_decal/techfloor, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/engine/n2, +/area/ship/engineering/engine) +"Ez" = ( +/obj/structure/closet/secure_closet/wall{ + pixel_y = 28; + name = "bridge supplies" + }, +/obj/item/binoculars, +/obj/item/binoculars{ + pixel_y = 6 + }, +/obj/item/gps{ + gpstag = "SGSV Chronicle" + }, +/obj/item/pen/fountain/solgov, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/ship/bridge) +"EC" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/ship/crew/dorm) +"EF" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1; + color = "#543C30" + }, +/obj/machinery/airalarm/directional/west, +/obj/item/kirbyplants{ + icon_state = "applebush"; + pixel_y = 19; + pixel_x = -8 + }, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"EX" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/cargo) +"EZ" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/item/kirbyplants{ + icon_state = "plant-21"; + pixel_x = 7; + pixel_y = 18 + }, +/obj/item/kirbyplants{ + icon_state = "plant-22"; + pixel_x = 8; + pixel_y = 2 + }, +/obj/item/kirbyplants{ + icon_state = "plant-22"; + pixel_y = 11; + pixel_x = -6 + }, +/turf/open/floor/wood, +/area/ship/crew/office) +"Fa" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/ship/crew) +"Fg" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plasteel/white, +/area/ship/security/armory) +"Fh" = ( +/obj/structure/sign/solgov_seal{ + pixel_y = 0; + pixel_x = 28 + }, +/turf/open/floor/plating, +/area/ship/external) +"Fl" = ( +/obj/docking_port/stationary{ + dir = 4; + height = 15; + dwidth = 15; + width = 30 + }, +/turf/template_noop, +/area/template_noop) +"Fm" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1; + color = "#543C30" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"FC" = ( +/obj/structure/bed, +/obj/item/bedsheet/solgov, +/obj/structure/sign/solgov_flag{ + dir = 8; + pixel_x = 28 + }, +/turf/open/floor/carpet/royalblue, +/area/ship/crew/crewtwo) +"FG" = ( +/obj/structure/railing/wood{ + dir = 6; + color = "#543C30" + }, +/obj/structure/table/wood, +/obj/item/reagent_containers/food/drinks/mug/tea{ + pixel_y = 5 + }, +/turf/open/floor/wood/walnut, +/area/ship/bridge) +"FM" = ( +/obj/effect/turf_decal/corner/opaque/solgovblue{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"FO" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/crew) +"FX" = ( +/obj/structure/noticeboard/staff{ + dir = 4; + pixel_x = -26 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/wood, +/area/ship/crew/dorm) +"Gk" = ( +/obj/effect/turf_decal/techfloor, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/plasteel/white, +/area/ship/security/armory) +"Gt" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/structure/sign/warning/vacuum/external{ + pixel_y = 10; + pixel_x = -30 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/structure/closet/firecloset/wall{ + dir = 1; + pixel_y = -28 + }, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"Gv" = ( +/obj/machinery/atmospherics/components/unary/thermomachine{ + piping_layer = 2 + }, +/obj/effect/turf_decal/industrial/outline/orange, +/obj/effect/turf_decal/techfloor/corner{ + dir = 1 + }, +/obj/effect/turf_decal/techfloor/corner, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/engineering/engine) +"Gw" = ( +/obj/effect/turf_decal/corner/opaque/solgovblue/three_quarters{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"GP" = ( +/obj/machinery/door/airlock/solgov{ + dir = 4; + name = "Armaments Wing"; + req_one_access = list(1,48) + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/security/armory) +"GT" = ( +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/obj/structure/tank_dispenser/oxygen, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security/armory) +"Hb" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8; + color = "#543C30" + }, +/obj/effect/turf_decal/corner/opaque/solgovblue{ + dir = 5 + }, +/obj/machinery/light/small/directional/north, +/obj/structure/table/wood/fancy/blue, +/turf/open/floor/wood, +/area/ship/bridge) +"Hd" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"Ho" = ( +/obj/effect/turf_decal/techfloor, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"Hp" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/machinery/suit_storage_unit/inherit, +/obj/item/clothing/suit/space/hardsuit/solgov, +/obj/item/tank/jetpack/oxygen, +/turf/open/floor/wood, +/area/ship/crew/office) +"HA" = ( +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/effect/landmark/start/shaft_miner, +/turf/open/floor/plasteel/white, +/area/ship/security/armory) +"HM" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/ship/crew) +"Id" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile/shuttle, +/obj/machinery/door/poddoor{ + id = "sgc_overseer"; + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ship/crew/crewtwo) +"Ii" = ( +/obj/effect/turf_decal/corner/opaque/solgovblue{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"Im" = ( +/obj/machinery/power/port_gen/pacman, +/obj/structure/cable/yellow, +/obj/effect/turf_decal/techfloor, +/obj/effect/turf_decal/industrial/outline/orange, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"In" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1; + color = "#543C30" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"Io" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/crew/crewtwo) +"Iv" = ( +/obj/effect/turf_decal/corner/opaque/solgovblue/three_quarters, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/item/reagent_containers/food/drinks/coffee{ + pixel_x = 7 + }, +/obj/structure/table/wood/fancy/blue, +/turf/open/floor/wood, +/area/ship/bridge) +"ID" = ( +/obj/machinery/atmospherics/pipe/layer_manifold, +/obj/effect/turf_decal/techfloor/orange{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor/orange{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/visible/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"IH" = ( +/obj/machinery/telecomms/server/presets/solgov{ + autolinkers = list("solgov","sproingle"); + network = "SolNet"; + pixel_y = 0 + }, +/obj/machinery/door/window/brigdoor/northleft{ + dir = 2; + req_one_access = list(61,11) + }, +/obj/structure/sign/poster/solgov/random{ + pixel_y = 30 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/circuit, +/area/ship/engineering) +"II" = ( +/obj/structure/railing/wood{ + color = "#543C30" + }, +/obj/structure/table/wood, +/obj/machinery/light/directional/west, +/obj/item/paper_bin{ + pixel_x = -5; + pixel_y = -1 + }, +/obj/item/pen/solgov{ + pixel_x = -5 + }, +/turf/open/floor/wood/walnut, +/area/ship/bridge) +"Ja" = ( +/obj/structure/chair/sofa, +/obj/effect/landmark/start/assistant, +/turf/open/floor/carpet/blue, +/area/ship/crew) +"Jd" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/solgovblue{ + dir = 5 + }, +/turf/open/floor/plasteel/white, +/area/ship/security/armory) +"Jh" = ( +/obj/structure/table/wood/fancy/blue, +/obj/machinery/photocopier/faxmachine/longrange, +/obj/item/desk_flag/solgov{ + pixel_x = -9; + pixel_y = 14 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/wood/walnut, +/area/ship/bridge) +"Jn" = ( +/obj/item/bedsheet/double/solgov{ + dir = 1 + }, +/obj/structure/bed/double{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/obj/structure/sign/solgov_flag{ + dir = 4; + pixel_x = -27 + }, +/turf/open/floor/carpet/royalblue, +/area/ship/crew/office) +"Ju" = ( +/obj/item/kirbyplants{ + icon_state = "plant-22"; + pixel_x = 9; + pixel_y = -4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/wood, +/area/ship/crew) +"JH" = ( +/obj/machinery/computer/telecomms/server/solgov{ + dir = 1; + network = "SolNet" + }, +/obj/structure/railing{ + dir = 10 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"JI" = ( +/obj/effect/turf_decal/siding/wood/corner{ + color = "#543C30"; + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/wood, +/area/ship/bridge) +"JJ" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood, +/obj/structure/fluff/hedge/opaque, +/turf/open/floor/wood, +/area/ship/crew/office) +"JN" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ship/engineering) +"JQ" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/structure/bookcase/random, +/turf/open/floor/wood/walnut, +/area/ship/crew/crewtwo) +"JS" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile/shuttle, +/obj/machinery/door/poddoor{ + id = "sgc_dorm" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/ship/crew) +"Ka" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile/shuttle, +/obj/machinery/door/poddoor{ + id = "sgc_captain"; + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plating, +/area/ship/crew/office) +"Kb" = ( +/obj/structure/cable/yellow{ + icon_state = "4-10" + }, +/obj/effect/turf_decal/corner/opaque/solgovgold{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"Kc" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 2; + color = "#543C30" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/bridge) +"Kh" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/end{ + dir = 2 + }, +/obj/structure/fluff/hedge, +/turf/open/floor/wood/walnut, +/area/ship/crew/crewtwo) +"Ks" = ( +/obj/structure/guncase{ + desc = "A locker that holds weapons."; + name = "weapon locker" + }, +/obj/item/gun/ballistic/automatic/pistol/solgov, +/obj/item/gun/ballistic/automatic/pistol/solgov, +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/item/gun/ballistic/automatic/powered/gauss/claris, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security/armory) +"Kv" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/wood/walnut, +/area/ship/bridge) +"Ky" = ( +/obj/structure/closet/crate/bin, +/obj/item/trash/semki, +/obj/item/radio/intercom/directional/east, +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"KG" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/wood/walnut, +/area/ship/bridge) +"KN" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile/shuttle, +/obj/machinery/door/poddoor{ + id = "sgc_captain"; + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ship/crew/office) +"KU" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/airlock/solgov, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"KZ" = ( +/obj/structure/grille, +/turf/open/floor/plating, +/area/ship/external) +"Lb" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/corner/opaque/solgovblue/three_quarters{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"Lc" = ( +/obj/effect/turf_decal/siding/wood/corner{ + color = "#543C30"; + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8; + color = "#543C30" + }, +/obj/structure/railing/wood{ + color = "#543C30"; + dir = 8 + }, +/obj/item/radio/intercom/table, +/obj/effect/turf_decal/corner/opaque/solgovblue{ + dir = 10 + }, +/obj/machinery/light/small/directional/south, +/obj/structure/table/wood/fancy/blue, +/turf/open/floor/wood, +/area/ship/bridge) +"Lk" = ( +/obj/effect/turf_decal/techfloor/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/solgovblue, +/turf/open/floor/plasteel/white, +/area/ship/security/armory) +"LB" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible/layer2{ + dir = 10 + }, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/engineering/engine) +"LE" = ( +/obj/machinery/atmospherics/components/binary/dp_vent_pump/on/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/item/radio/intercom/directional/south, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plasteel/tech, +/area/ship/crew/crewtwo) +"LL" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plasteel/freezer, +/area/ship/crew/dorm) +"Md" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/closet/firecloset/wall{ + dir = 1; + pixel_y = -28 + }, +/turf/open/floor/wood, +/area/ship/bridge) +"Me" = ( +/obj/machinery/cryopod, +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/corner/opaque/solgovblue{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/ship/crew/dorm) +"Mx" = ( +/obj/structure/filingcabinet/double, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/wood/walnut, +/area/ship/bridge) +"MC" = ( +/turf/closed/wall/mineral/titanium, +/area/ship/bridge) +"ME" = ( +/obj/effect/turf_decal/techfloor, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"MH" = ( +/obj/machinery/atmospherics/components/trinary/mixer/airmix/flipped{ + dir = 8; + piping_layer = 2 + }, +/obj/effect/turf_decal/industrial/outline/orange, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/plasteel/white, +/area/ship/engineering/engine) +"MT" = ( +/obj/machinery/power/port_gen/pacman, +/obj/structure/cable/yellow, +/obj/effect/turf_decal/techfloor, +/obj/effect/turf_decal/industrial/outline/orange, +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"MZ" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile/shuttle, +/obj/machinery/door/poddoor{ + id = "sgc_bridge" + }, +/turf/open/floor/plating, +/area/ship/crew/crewtwo) +"Nb" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer2, +/obj/effect/turf_decal/corner/opaque/solgovgold/three_quarters, +/obj/effect/turf_decal/techfloor/corner{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/closet/firecloset/wall{ + dir = 1; + pixel_y = -28 + }, +/turf/open/floor/plasteel/white, +/area/ship/engineering/engine) +"Nm" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ship/crew/dorm) +"Ns" = ( +/obj/item/radio/intercom/directional/west, +/turf/open/floor/wood/mahogany, +/area/ship/crew) +"Nu" = ( +/obj/structure/table/wood, +/obj/structure/railing/wood{ + dir = 2; + color = "#792f27" + }, +/obj/machinery/light/small/directional/west, +/obj/item/pestle, +/obj/structure/large_mortar, +/turf/open/floor/wood/mahogany, +/area/ship/crew) +"Nw" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile/shuttle, +/obj/machinery/door/poddoor{ + id = "sgc_overseer"; + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plating, +/area/ship/crew/crewtwo) +"Nz" = ( +/obj/structure/chair/sofa/left, +/turf/open/floor/carpet/blue, +/area/ship/crew) +"NH" = ( +/obj/machinery/shower{ + dir = 1 + }, +/obj/structure/curtain, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/structure/chair/plastic{ + dir = 4; + name = "shower chair"; + desc = "Welcome to the shower" + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plasteel/freezer, +/area/ship/crew/dorm) +"Ob" = ( +/obj/effect/turf_decal/corner/opaque/solgovgold/three_quarters{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor/corner, +/obj/effect/turf_decal/techfloor/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/plasteel/white, +/area/ship/security/armory) +"Of" = ( +/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/o2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer5, +/obj/effect/turf_decal/techfloor/orange{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor/orange{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/outline/orange, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"Oo" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile/shuttle, +/obj/machinery/door/poddoor{ + id = "sgc_bridge"; + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plating, +/area/ship/bridge) +"Oq" = ( +/obj/structure/table/wood/fancy/purple, +/obj/item/paper_bin/carbon{ + pixel_x = 7; + pixel_y = 8 + }, +/obj/item/paper_bin{ + pixel_x = -5; + pixel_y = -1 + }, +/obj/item/folder/solgov{ + pixel_x = 4; + pixel_y = 0 + }, +/obj/item/pen/solgov{ + pixel_x = 2 + }, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/crew/office) +"OU" = ( +/obj/item/clothing/neck/cloak/overseer, +/obj/item/clothing/suit/armor/vest/bulletproof/solgov/overseer, +/obj/structure/closet/secure_closet/head_of_personnel{ + anchored = 1; + name = "\proper overseer's locker"; + populate = 0 + }, +/obj/item/clothing/gloves/combat, +/obj/item/folder/solgov, +/obj/item/folder/solgov, +/obj/item/folder/solgov/red, +/obj/item/clothing/under/solgov/formal, +/obj/item/clothing/head/solgov, +/obj/item/storage/belt/sabre/solgov, +/obj/item/storage/backpack, +/obj/item/pen/solgov, +/obj/item/clothing/under/solgov/dress, +/obj/item/stamp/solgov, +/obj/machinery/light/directional/south, +/obj/item/clothing/suit/armor/solgov_trenchcoat, +/turf/open/floor/carpet/royalblue, +/area/ship/crew/crewtwo) +"OX" = ( +/obj/structure/noticeboard/captain{ + pixel_y = 25 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1; + color = "#543C30" + }, +/obj/structure/cable{ + icon_state = "4-10" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"OZ" = ( +/obj/effect/turf_decal/corner/opaque/solgovblue/three_quarters{ + dir = 8 + }, +/obj/machinery/button/door{ + pixel_y = 9; + pixel_x = 6; + id = "sgc_bridge"; + name = "bridge window lockdown" + }, +/obj/item/reagent_containers/glass/maunamug{ + pixel_x = -3 + }, +/obj/structure/table/wood/fancy/blue, +/turf/open/floor/wood, +/area/ship/bridge) +"Pb" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/machinery/light/directional/north, +/turf/open/floor/engine/o2, +/area/ship/engineering/engine) +"Pc" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/cargo) +"Pf" = ( +/obj/effect/turf_decal/industrial/warning/dust/corner{ + dir = 8 + }, +/obj/machinery/light/floor, +/obj/structure/sign/solgov_seal{ + pixel_y = 0; + pixel_x = -29 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/engine/hull, +/area/ship/external) +"Pk" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/turf/open/floor/plasteel/white, +/area/ship/security/armory) +"Pm" = ( +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/effect/turf_decal/box/corners, +/obj/structure/closet/crate/wooden, +/obj/item/storage/fancy/candle_box, +/obj/item/storage/fancy/candle_box, +/obj/item/storage/fancy/candle_box, +/obj/item/pen/solgov, +/obj/item/pen/solgov, +/obj/item/pen/solgov, +/obj/item/paper_bin/bundlenatural, +/obj/item/paper_bin/bundlenatural, +/obj/item/paper_bin/bundlenatural, +/obj/machinery/light/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/cargo) +"Pq" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/machinery/autolathe, +/obj/structure/sign/poster/solgov/random{ + pixel_x = 28 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"PT" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile/shuttle, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/door/poddoor{ + dir = 4; + id = "sgc_engi" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ship/engineering) +"PY" = ( +/obj/effect/turf_decal/techfloor, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"Qi" = ( +/obj/item/radio/intercom/wideband/table, +/obj/effect/turf_decal/corner/opaque/solgovblue/three_quarters, +/obj/structure/table/wood/fancy/blue, +/turf/open/floor/wood, +/area/ship/bridge) +"Qm" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/wood, +/area/ship/crew/office) +"Qy" = ( +/obj/structure/rack, +/obj/item/storage/toolbox/electrical{ + pixel_x = 1; + pixel_y = 4 + }, +/obj/item/t_scanner{ + pixel_x = -6 + }, +/obj/item/t_scanner{ + pixel_x = 9 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/engineering) +"QA" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/light/small/directional/south, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"QM" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/fluff/hedge/opaque, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/wood, +/area/ship/crew/office) +"Rb" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/door/airlock/engineering{ + dir = 4; + req_access = list(11); + name = "Engine Room" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"Rw" = ( +/obj/structure/closet/crate/bin, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/wood/walnut, +/area/ship/bridge) +"RC" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/railing, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"RL" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/door/airlock/engineering{ + dir = 4; + req_access = list(11); + name = "Engineering" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"RV" = ( +/obj/structure/toilet{ + dir = 4 + }, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/plasteel/freezer, +/area/ship/crew) +"RX" = ( +/obj/structure/table/wood, +/obj/item/cutting_board, +/obj/item/kitchen/knife, +/obj/machinery/newscaster/directional/north, +/obj/structure/sink{ + pixel_y = 20; + pixel_x = -15; + layer = 2.79 + }, +/turf/open/floor/wood/mahogany, +/area/ship/crew) +"Sd" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/effect/turf_decal/corner/opaque/solgovgold/three_quarters{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"Sg" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/chair/office{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"So" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/engineering) +"Sv" = ( +/obj/structure/table/wood, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/item/reagent_containers/food/drinks/mug/tea{ + pixel_y = 3; + pixel_x = -4 + }, +/obj/item/reagent_containers/food/drinks/mug/tea{ + pixel_x = 10 + }, +/turf/open/floor/wood, +/area/ship/crew) +"Sy" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/turf/open/floor/plasteel/freezer, +/area/ship/crew/dorm) +"SA" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/structure/closet/secure_closet/engineering_personal{ + name = "ship engineer's locker"; + populate = 0 + }, +/obj/item/storage/backpack/industrial, +/obj/effect/turf_decal/industrial/outline/orange, +/obj/item/clothing/head/hardhat/solgov, +/obj/item/folder/solgov, +/obj/item/clipboard, +/obj/item/clothing/under/solgov/formal, +/obj/item/clothing/under/solgov, +/obj/item/clothing/accessory/armband/engine, +/obj/item/storage/toolbox/mechanical, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/head/welding, +/obj/item/pen/solgov, +/obj/item/clothing/suit/hazardvest/solgov, +/obj/item/clothing/shoes/workboots, +/obj/item/clothing/gloves/combat, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"SH" = ( +/obj/machinery/cryopod, +/obj/effect/turf_decal/corner/opaque/solgovblue{ + dir = 5 + }, +/obj/structure/sign/poster/solgov/random{ + pixel_y = 30 + }, +/turf/open/floor/plasteel, +/area/ship/crew/dorm) +"SJ" = ( +/obj/machinery/telecomms/receiver/preset_left{ + network = "SolNet"; + pixel_y = 0; + id = "Receiver" + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/window/brigdoor/westright{ + dir = 4; + req_one_access = list(61,11) + }, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/turf/open/floor/circuit/green, +/area/ship/engineering) +"SL" = ( +/obj/item/paper_bin/carbon{ + pixel_x = 7; + pixel_y = 8 + }, +/obj/item/paper_bin{ + pixel_x = -5; + pixel_y = -1 + }, +/obj/item/folder/solgov{ + pixel_x = 4; + pixel_y = 0 + }, +/obj/item/pen/solgov{ + pixel_x = 2 + }, +/obj/machinery/light/small/directional/north, +/obj/structure/table/wood/fancy/blue, +/turf/open/floor/wood/walnut, +/area/ship/bridge) +"SQ" = ( +/obj/effect/turf_decal/solgov/bottom_center, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel, +/area/ship/cargo) +"ST" = ( +/turf/open/floor/wood/mahogany, +/area/ship/crew) +"Td" = ( +/obj/effect/turf_decal/solgov/top, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel, +/area/ship/cargo) +"Tk" = ( +/obj/effect/turf_decal/corner/opaque/solgovblue{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/turf/open/floor/plasteel/white, +/area/ship/engineering) +"Tr" = ( +/obj/effect/turf_decal/techfloor/corner, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/structure/closet/cabinet{ + name = "ammunition" + }, +/obj/item/ammo_box/amagpellet_claris, +/obj/item/ammo_box/magazine/pistol556mm, +/obj/item/ammo_box/magazine/pistol556mm, +/obj/item/ammo_box/magazine/pistol556mm, +/obj/item/ammo_box/magazine/pistol556mm, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security/armory) +"TA" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/airlock/mining{ + name = "Cargo" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"TE" = ( +/obj/effect/turf_decal/techfloor, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2{ + dir = 1 + }, +/turf/open/floor/engine/n2, +/area/ship/engineering/engine) +"TH" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/solgovblue{ + dir = 5 + }, +/turf/open/floor/plasteel/white, +/area/ship/security/armory) +"TN" = ( +/obj/structure/mirror{ + pixel_y = 26 + }, +/obj/structure/sink{ + pixel_y = 19 + }, +/obj/structure/urinal{ + dir = 4; + pixel_x = -32 + }, +/obj/machinery/button/door{ + dir = 8; + pixel_x = 22; + pixel_y = -9; + id = "sgc_piss"; + specialfunctions = 3; + name = "bathroom lock" + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plasteel/freezer, +/area/ship/crew) +"TV" = ( +/obj/item/radio/intercom/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/cargo) +"Ue" = ( +/obj/effect/turf_decal/techfloor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/ship/security/armory) +"Uh" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/crew) +"Ut" = ( +/obj/effect/turf_decal/solgov/top_right, +/obj/effect/turf_decal/spline/fancy/opaque/grey{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ship/cargo) +"UB" = ( +/obj/structure/table/wood, +/obj/machinery/microwave{ + pixel_y = 5 + }, +/obj/machinery/light/small/directional/north, +/obj/structure/sign/poster/solgov/random{ + pixel_x = -28 + }, +/turf/open/floor/wood/mahogany, +/area/ship/crew) +"UD" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/structure/chair/office{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"UJ" = ( +/turf/closed/wall/mineral/titanium, +/area/ship/cargo) +"UQ" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/landmark/start/captain, +/turf/open/floor/wood, +/area/ship/crew/office) +"US" = ( +/obj/structure/table/wood, +/obj/item/desk_flag/solgov{ + pixel_y = 2; + pixel_x = 8 + }, +/turf/open/floor/carpet/blue, +/area/ship/crew) +"Vg" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"Vi" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/engineering) +"Vm" = ( +/obj/structure/chair/wood{ + dir = 4 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/wood, +/area/ship/crew) +"Vo" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/freezer, +/area/ship/crew/dorm) +"Vy" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/holopad/secure, +/turf/open/floor/wood, +/area/ship/crew/office) +"VM" = ( +/obj/item/radio/intercom/directional/south, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/cargo) +"VR" = ( +/obj/machinery/atmospherics/components/binary/pump/layer4{ + dir = 4; + name = "External Atmosphere to Waste" + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible/layer2{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 9 + }, +/obj/effect/turf_decal/techfloor/orange, +/obj/effect/turf_decal/techfloor/orange{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"Wn" = ( +/obj/machinery/atmospherics/components/binary/pump/layer4{ + dir = 8; + name = "Waste To External Atmosphere" + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible/layer2, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 10 + }, +/obj/effect/turf_decal/techfloor/orange{ + dir = 1 + }, +/obj/effect/turf_decal/techfloor/orange, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"Wo" = ( +/obj/machinery/suit_storage_unit/solgov, +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/techfloor/corner, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security/armory) +"WM" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ + dir = 4 + }, +/turf/closed/wall/mineral/titanium, +/area/ship/engineering/engine) +"WX" = ( +/obj/machinery/suit_storage_unit/solgov, +/obj/machinery/light/directional/south, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security/armory) +"WY" = ( +/obj/structure/sign/poster/solgov/random{ + pixel_y = 30 + }, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 9 + }, +/obj/structure/bookcase/random, +/turf/open/floor/wood/walnut, +/area/ship/crew/crewtwo) +"Xa" = ( +/obj/effect/turf_decal/siding/wood/corner{ + color = "#543C30" + }, +/obj/structure/railing/corner/wood{ + color = "#543C30" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/bridge) +"Xg" = ( +/obj/effect/turf_decal/solgov/bottom_left, +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/spline/fancy/opaque/grey{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ship/cargo) +"Xi" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile/shuttle, +/obj/machinery/door/poddoor{ + id = "sgc_bridge" + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/ship/bridge) +"Xj" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"Xm" = ( +/turf/closed/wall/mineral/titanium, +/area/ship/engineering) +"Xu" = ( +/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/n2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer5, +/obj/machinery/atmospherics/pipe/simple/orange/visible/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor/orange{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor/orange{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/outline/orange, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"Xv" = ( +/obj/machinery/door/poddoor{ + dir = 4; + id = "sgc_cargo" + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + id = "sgc_cs" + }, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"Xy" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 6 + }, +/obj/effect/turf_decal/techfloor/orange, +/obj/effect/turf_decal/techfloor/orange{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/landmark/start/station_engineer, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/engine) +"XA" = ( +/turf/closed/wall/mineral/titanium, +/area/ship/security/armory) +"XE" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/wood, +/area/ship/bridge) +"XG" = ( +/obj/machinery/vending/coffee, +/obj/effect/turf_decal/siding/wood/corner, +/obj/structure/sign/poster/solgov/random{ + pixel_y = 30 + }, +/turf/open/floor/wood, +/area/ship/crew) +"Yo" = ( +/obj/effect/turf_decal/techfloor, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 1 + }, +/turf/open/floor/engine/n2, +/area/ship/engineering/engine) +"Yr" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile/shuttle, +/obj/machinery/door/poddoor{ + id = "sgc_bridge"; + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plating, +/area/ship/bridge) +"YC" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/sign/warning/nosmoking/circle{ + pixel_x = 8; + pixel_y = -22 + }, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"Zd" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/spline/fancy/wood, +/obj/machinery/light/small/directional/south, +/obj/item/paper/crumpled, +/obj/item/pen/solgov{ + pixel_x = -5 + }, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"Zh" = ( +/obj/effect/turf_decal/techfloor/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/solgovblue{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/ship/security/armory) +"Zm" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/door/airlock{ + dir = 4; + name = "Bathroom"; + id_tag = "sgc_piss" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/crew) +"Zt" = ( +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/structure/closet/crate/medical, +/obj/item/storage/box/masks, +/obj/item/storage/box/rxglasses, +/obj/structure/sign/poster/solgov/random{ + pixel_y = 30 + }, +/obj/item/storage/firstaid/regular, +/obj/item/storage/firstaid/medical, +/obj/item/storage/pill_bottle/charcoal, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/cargo) +"Zx" = ( +/obj/effect/turf_decal/solgov, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/turf_decal/spline/fancy/opaque/grey{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ship/cargo) +"ZC" = ( +/obj/item/radio/intercom/directional/west, +/obj/structure/table/wood, +/obj/item/radio/intercom/wideband/table{ + dir = 8; + pixel_x = -4 + }, +/turf/open/floor/wood/walnut, +/area/ship/bridge) +"ZE" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile/shuttle, +/obj/machinery/door/poddoor{ + id = "sgc_bridge" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plating, +/area/ship/bridge) +"ZP" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/door/airlock/external{ + dir = 4 + }, +/obj/machinery/door/poddoor{ + dir = 4; + id = "sgc_airlock2" + }, +/obj/machinery/atmospherics/pipe/layer_manifold{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/crew/crewtwo) + +(1,1,1) = {" +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +AN +wt +bu +ve +ve +bu +hh +AN +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +"} +(2,1,1) = {" +pS +pS +pS +pS +pS +pS +pS +pS +pS +AN +AN +WM +zh +zh +zh +zh +WM +AN +AN +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +"} +(3,1,1) = {" +pS +pS +pS +pS +pS +pS +pS +pS +pS +AN +ng +eU +Bn +Bn +Bn +Bn +Xy +Yo +AN +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +"} +(4,1,1) = {" +pS +pS +pS +pS +pS +pS +pS +pS +pS +AN +Pb +zq +Ad +sS +sS +Cb +lA +Ex +AN +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +"} +(5,1,1) = {" +pS +pS +pS +pS +pS +pS +KZ +KZ +pS +AN +Bz +Wn +sM +yw +oY +fW +VR +TE +AN +pS +KZ +KZ +pS +pS +pS +pS +pS +pS +pS +"} +(6,1,1) = {" +pS +pS +pS +pS +pS +pS +pS +gK +pS +AN +jz +fj +fw +Of +Xu +ID +xf +jz +AN +pS +gK +pS +pS +pS +pS +pS +pS +pS +pS +"} +(7,1,1) = {" +pS +pS +pS +pS +pS +KZ +pS +gK +pS +pS +AN +AN +AN +jz +LB +aA +MH +AN +pS +pS +gK +pS +KZ +pS +pS +pS +pS +pS +pS +"} +(8,1,1) = {" +pS +pS +pS +pS +pS +KZ +gK +gK +pS +Xm +So +AV +SJ +Xm +Gv +kI +Nb +AN +pS +pS +gK +gK +KZ +pS +pS +pS +pS +pS +pS +"} +(9,1,1) = {" +pS +pS +pS +pS +pS +KZ +pS +gK +gK +Xm +oH +Gw +ke +So +Xm +So +Rb +So +Xm +gK +gK +pS +KZ +pS +pS +pS +pS +pS +pS +"} +(10,1,1) = {" +pS +pS +pS +pS +pS +pS +pS +gK +pS +Xm +IH +Tk +aU +gZ +ah +ya +uD +lZ +Xm +pS +gK +pS +pS +pS +pS +pS +pS +pS +pS +"} +(11,1,1) = {" +pS +pS +pS +pS +KZ +pS +pS +gK +pS +Xm +kz +Ax +Ii +JH +fT +Cs +cT +jS +Xm +pS +gK +pS +pS +KZ +pS +pS +pS +pS +pS +"} +(12,1,1) = {" +pS +pS +pS +pS +KZ +gK +gK +vx +vx +Xm +bs +kT +mz +sa +RC +Qy +JN +ME +Xm +pS +Fh +gK +gK +KZ +pS +pS +pS +pS +pS +"} +(13,1,1) = {" +pS +pS +pS +pS +KZ +pS +vx +tJ +RV +Xm +So +tC +cp +So +fT +um +zM +PY +Xm +ZP +bt +ip +pS +KZ +pS +pS +pS +pS +pS +"} +(14,1,1) = {" +pS +pS +pS +pS +pS +pS +vx +TN +bB +UJ +UJ +UJ +UJ +Xm +if +qH +dR +vr +Xm +vo +LE +ip +pS +pS +pS +pS +pS +pS +pS +"} +(15,1,1) = {" +pS +pS +pS +pS +vx +vx +vx +vx +Zm +UJ +br +TV +Pm +So +PT +PT +Xm +RL +Xm +Io +dC +ip +ip +ip +pS +pS +pS +pS +pS +"} +(16,1,1) = {" +pS +vx +vx +vx +tJ +yj +zv +nH +Uh +UJ +Zx +bm +Xg +UJ +Lb +eD +gB +oC +So +jJ +Be +Gt +ip +ip +Nw +Id +ip +pS +pS +"} +(17,1,1) = {" +pS +vx +UB +Ns +Nu +Ja +US +nd +jU +mA +Td +nR +SQ +TA +Sd +Kb +FM +sL +KU +zs +bg +Ky +ip +eQ +UD +dz +ip +pS +pS +"} +(18,1,1) = {" +pS +vx +RX +ST +hp +Nz +nd +HM +lc +UJ +Ut +fA +zw +UJ +Xm +rq +Xm +So +So +ip +xL +sA +ip +bf +Hd +OU +ip +pS +pS +"} +(19,1,1) = {" +cw +tJ +yY +aB +jd +rZ +mG +yv +dj +UJ +Zt +fq +oK +UJ +As +hw +MT +Xm +WY +EF +rw +uA +ip +hx +fe +FC +ip +pS +pS +"} +(20,1,1) = {" +JS +Vm +Fa +lJ +tr +bd +Ju +fd +cW +UJ +wT +fq +nF +UJ +pl +Vi +dd +Xm +aP +In +xI +Zd +sA +CC +ip +ip +ip +pS +pS +"} +(21,1,1) = {" +pi +Sv +kp +zu +qz +kN +ja +ja +ja +UJ +EX +fq +VM +UJ +SA +nb +Im +Xm +JQ +Fm +hX +dm +xu +lP +wV +ip +pS +pS +pS +"} +(22,1,1) = {" +ol +bw +xO +Du +CU +kN +AR +Vo +NH +UJ +zk +fq +hM +UJ +Xj +ma +Ho +So +So +OX +rO +uW +Kh +pR +cg +MZ +pS +pS +pS +"} +(23,1,1) = {" +vx +tJ +hU +FO +kN +kN +LL +Sy +sU +UJ +zR +sf +AK +UJ +sd +Pq +DC +av +So +Cm +rD +rD +tV +hs +qe +ip +pS +pS +pS +"} +(24,1,1) = {" +pS +vx +XG +mN +ez +FX +vR +bA +kN +UJ +Xv +cP +ga +Pc +Xm +Xm +Xm +Xm +So +DN +QM +Jn +tV +rD +nW +ip +ip +pS +pS +"} +(25,1,1) = {" +XA +XA +XA +GP +XA +Au +EC +nj +ja +Pf +ml +ml +ml +wP +pS +pS +pS +rD +Hp +oz +mZ +ju +bH +rD +zi +yD +ip +pS +pS +"} +(26,1,1) = {" +XA +fl +HA +Ep +XA +qg +ie +ja +ja +pS +pS +pS +pS +pS +pS +pS +pS +rD +mP +UQ +JJ +ju +nP +rD +kg +QA +ip +pS +pS +"} +(27,1,1) = {" +XA +id +gs +Gk +XA +ja +yA +ja +pS +pS +pS +pS +pS +pS +pS +pS +pS +rD +vO +yE +Qm +Vy +Dn +rD +Sg +hS +ip +pS +pS +"} +(28,1,1) = {" +XA +fl +AM +CM +XA +Me +Nm +ja +pS +pS +pS +pS +pS +pS +pS +pS +pS +rD +hr +EZ +Oq +wW +kl +rD +fz +Cd +ip +pS +pS +"} +(29,1,1) = {" +XA +CK +ne +Ue +XA +SH +dA +ja +pS +pS +pS +pS +pS +pS +pS +pS +pS +rD +xM +Ka +KN +rD +rD +rD +iA +YC +ip +pS +pS +"} +(30,1,1) = {" +pS +CK +Fg +Ue +CK +XA +ja +ja +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +MC +MC +MC +hA +MC +MC +pS +"} +(31,1,1) = {" +XA +CK +Pk +jb +zm +XA +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +MC +Jh +yQ +sq +DW +MC +pS +"} +(32,1,1) = {" +XA +ti +Lk +BE +rJ +XA +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +MC +SL +wU +uK +bx +MC +pS +"} +(33,1,1) = {" +XA +rS +aN +TH +WX +XA +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +MC +Mx +un +Ds +Rw +MC +pS +"} +(34,1,1) = {" +XA +Ks +wK +Jd +Wo +XA +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +MC +Er +xt +JI +Er +MC +pS +"} +(35,1,1) = {" +XA +Tr +Zh +AQ +GT +XA +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +MC +Ez +Md +MC +pS +pS +"} +(36,1,1) = {" +XA +CK +Ob +aG +CK +XA +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +MC +MC +Er +ty +Xa +Er +MC +MC +"} +(37,1,1) = {" +pS +XA +sx +XA +XA +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +uC +ZC +II +Bs +gi +pC +da +uC +"} +(38,1,1) = {" +pS +XA +Vg +Ag +XA +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +gk +eV +kw +BZ +Kc +Kv +KG +AZ +"} +(39,1,1) = {" +pS +XA +sE +Az +XA +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +Xi +Ah +FG +Cf +sz +ac +tQ +Xi +"} +(40,1,1) = {" +pS +XA +CE +Ef +XA +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +MC +Er +Hb +aa +tl +Lc +Er +MC +"} +(41,1,1) = {" +pS +pS +pS +Fl +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +uC +OZ +fN +XE +Qi +uC +pS +"} +(42,1,1) = {" +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +yu +ZE +nU +Iv +rK +be +pS +"} +(43,1,1) = {" +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +yu +Oo +Yr +be +pS +pS +"} diff --git a/_maps/shuttles/shiptest/syndicate_aegis.dmm b/_maps/shuttles/shiptest/syndicate_aegis.dmm index c5bdfc5c30ef..6f7d67964d6f 100644 --- a/_maps/shuttles/shiptest/syndicate_aegis.dmm +++ b/_maps/shuttles/shiptest/syndicate_aegis.dmm @@ -225,7 +225,6 @@ /obj/structure/table/wood, /obj/item/paper_bin/carbon, /obj/item/clothing/under/rank/medical/psychiatrist, -/obj/item/clothing/under/rank/medical/psychiatrist/blue, /obj/item/stack/sheet/mineral/wood/fifty, /obj/item/lighter, /obj/item/clothing/suit/toggle/labcoat, @@ -525,7 +524,6 @@ /obj/item/surgicaldrill/advanced, /obj/item/healthanalyzer/advanced, /obj/item/clothing/glasses/hud/health/sunglasses, -/obj/item/clothing/under/rank/medical/chief_medical_officer/surgeon_general, /obj/item/clothing/gloves/color/latex/nitrile/evil, /obj/item/clothing/shoes/combat, /obj/item/clothing/neck/stripedredscarf, @@ -786,7 +784,8 @@ "fY" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/hatch{ - name = "Bathroom" + name = "Bathroom"; + dir = 4 }, /obj/effect/turf_decal/techfloor/hole/right, /obj/effect/turf_decal/techfloor/hole, @@ -2717,6 +2716,7 @@ }, /obj/item/clothing/under/rank/civilian/janitor/custodian/skirt, /obj/item/clothing/under/rank/civilian/janitor/custodian, +/obj/machinery/light/small/directional/south, /turf/open/floor/carpet/red, /area/ship/crew/janitor) "zM" = ( @@ -2936,6 +2936,7 @@ "CG" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/machinery/light/small/directional/west, /turf/open/floor/plasteel/tech, /area/ship/crew/janitor) "CM" = ( @@ -3101,7 +3102,6 @@ name = "syndicate medic's black longcoat" }, /obj/item/clothing/under/rank/medical/doctor/red, -/obj/item/clothing/under/suit/senior_doctor, /obj/item/clothing/suit/longcoat, /obj/item/clothing/neck/stripedbluescarf, /obj/item/clothing/neck/stripedredscarf, @@ -3675,7 +3675,6 @@ name = "syndicate medic's black longcoat" }, /obj/item/clothing/under/rank/medical/doctor/red, -/obj/item/clothing/under/suit/senior_doctor, /obj/item/clothing/suit/longcoat, /obj/item/clothing/neck/stripedbluescarf, /obj/item/clothing/neck/stripedredscarf, @@ -4291,7 +4290,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 5 }, -/obj/machinery/light/small/directional/south, /obj/item/radio/intercom/directional/south, /turf/open/floor/plasteel/tech, /area/ship/crew/janitor) @@ -4572,8 +4570,8 @@ /obj/item/storage/bag/chemistry, /obj/item/clothing/suit/longcoat/chemist, /obj/item/clothing/suit/toggle/labcoat/chemist, -/obj/item/clothing/under/rank/medical/chemist/pharmacist/skirt, -/obj/item/clothing/under/rank/medical/chemist/pharmacist, +/obj/item/clothing/under/rank/medical/chemist, +/obj/item/clothing/under/rank/medical/chemist/skirt, /obj/item/clothing/shoes/combat, /obj/item/clothing/shoes/combat, /obj/item/clothing/gloves/color/latex, @@ -4962,10 +4960,6 @@ /area/ship/engineering) "WC" = ( /obj/structure/chair/sofa/left, -/obj/item/radio/intercom/directional/north{ - pixel_x = 4; - pixel_y = 24 - }, /obj/machinery/light_switch{ pixel_x = -10; pixel_y = 26 @@ -4973,6 +4967,10 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, +/obj/item/radio/intercom/directional/north{ + pixel_y = 31; + pixel_x = 5 + }, /turf/open/floor/carpet/red, /area/ship/crew/canteen) "WE" = ( @@ -5257,7 +5255,7 @@ id = "cargo_ageis"; name = "cargobay doors"; pixel_x = 6; - pixel_y = 27 + pixel_y = 22 }, /obj/effect/decal/cleanable/glass, /obj/effect/turf_decal/corner_techfloor_grid/diagonal, @@ -5265,7 +5263,7 @@ /obj/machinery/button/shieldwallgen{ id = "aegis_holo"; pixel_x = -6; - pixel_y = 26 + pixel_y = 21 }, /obj/structure/cable/yellow{ icon_state = "2-8" @@ -6471,3 +6469,37 @@ wk wk wk "} +(33,1,1) = {" +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +"} diff --git a/_maps/shuttles/shiptest/syndicate_cybersun_kansatsu.dmm b/_maps/shuttles/shiptest/syndicate_cybersun_kansatsu.dmm index 845e6e9f8e11..7fd8d6168389 100644 --- a/_maps/shuttles/shiptest/syndicate_cybersun_kansatsu.dmm +++ b/_maps/shuttles/shiptest/syndicate_cybersun_kansatsu.dmm @@ -42,12 +42,6 @@ /obj/machinery/holopad/emergency/command, /turf/open/floor/plasteel/white, /area/ship/bridge) -"aV" = ( -/obj/machinery/porta_turret/centcom_shuttle{ - dir = 9 - }, -/turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) "aZ" = ( /obj/structure/rack, /obj/item/reagent_containers/food/snacks/canned/beans, @@ -1073,12 +1067,6 @@ }, /turf/open/floor/plasteel/tech/techmaint, /area/ship/cargo) -"yJ" = ( -/obj/machinery/porta_turret/centcom_shuttle{ - dir = 5 - }, -/turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) "zH" = ( /obj/machinery/atmospherics/components/binary/pump/on/layer4{ dir = 4 @@ -1103,12 +1091,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/tech/techmaint, /area/ship/cargo) -"zP" = ( -/obj/machinery/porta_turret/centcom_shuttle{ - dir = 6 - }, -/turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) "zY" = ( /obj/effect/turf_decal/industrial/warning, /obj/structure/cable{ @@ -1166,9 +1148,7 @@ /turf/open/floor/plasteel/tech/grid, /area/ship/crew/dorm) "CR" = ( -/obj/machinery/porta_turret/centcom_shuttle{ - dir = 10 - }, +/obj/machinery/porta_turret/ship, /turf/closed/wall/mineral/plastitanium, /area/ship/bridge) "CU" = ( @@ -1285,9 +1265,7 @@ /turf/open/floor/plasteel/tech/grid, /area/ship/bridge) "GV" = ( -/obj/machinery/porta_turret/centcom_shuttle/weak{ - dir = 4 - }, +/obj/machinery/porta_turret/ship/weak, /turf/closed/wall/mineral/plastitanium, /area/ship/bridge) "Hd" = ( @@ -1767,7 +1745,7 @@ /obj/item/storage/belt/utility/full, /obj/item/clothing/glasses/welding, /obj/item/clothing/glasses/welding, -/obj/structure/extinguisher_cabinet/directional/north, +/obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/plating, /area/ship/engineering) "UZ" = ( @@ -1960,7 +1938,7 @@ /area/ship/engineering) (1,1,1) = {" -aV +CR YQ YQ ru @@ -2063,7 +2041,7 @@ nO "} (7,1,1) = {" YQ -yJ +CR kM kM kM @@ -2075,7 +2053,7 @@ cZ jj jj jj -zP +CR YQ "} (8,1,1) = {" diff --git a/_maps/shuttles/shiptest/syndicate_gorlex_hyena.dmm b/_maps/shuttles/shiptest/syndicate_gorlex_hyena.dmm index 5769ef8674b9..42a5ef16fc05 100644 --- a/_maps/shuttles/shiptest/syndicate_gorlex_hyena.dmm +++ b/_maps/shuttles/shiptest/syndicate_gorlex_hyena.dmm @@ -5,10 +5,16 @@ }, /turf/open/floor/plasteel/dark, /area/ship/bridge) -"aI" = ( -/obj/structure/sign/number/four, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/maintenance/fore) +"aH" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/turf_decal/industrial/outline, +/obj/machinery/firealarm/directional/east, +/obj/effect/decal/cleanable/oil, +/obj/structure/sign/warning/nosmoking{ + pixel_y = -28 + }, +/turf/open/floor/plasteel/tech, +/area/ship/maintenance/starboard) "aN" = ( /obj/machinery/atmospherics/components/binary/dp_vent_pump/layer2{ dir = 1 @@ -41,6 +47,28 @@ }, /turf/open/floor/plasteel/mono/dark, /area/ship/cargo) +"bH" = ( +/obj/structure/closet/secure_closet{ + anchored = 1; + icon_state = "hos"; + name = "captain's locker"; + req_access = list(20) + }, +/obj/item/storage/backpack/security, +/obj/item/clothing/under/syndicate/combat, +/obj/item/clothing/suit/armor/vest/capcarapace/syndicate, +/obj/item/clothing/shoes/jackboots, +/obj/item/clothing/gloves/combat, +/obj/item/clothing/glasses/hud/security/sunglasses/eyepatch, +/obj/item/clothing/head/HoS/syndicate, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/gun/ballistic/revolver, +/obj/item/ammo_box/a357/match, +/obj/item/ammo_box/a357/match, +/obj/item/ammo_box/a357/match, +/obj/item/pen/edagger, +/turf/open/floor/carpet/black, +/area/ship/bridge) "bJ" = ( /obj/structure/closet/secure_closet{ anchored = 1; @@ -71,6 +99,10 @@ }, /turf/open/floor/plasteel/tech, /area/ship/cargo) +"bS" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/carpet/red_gold, +/area/ship/bridge) "bV" = ( /obj/machinery/door/poddoor/shutters{ id = "wreckerarmory"; @@ -89,17 +121,20 @@ }, /turf/open/floor/plasteel/tech/grid, /area/ship/security/armory) -"cf" = ( -/obj/structure/table/reinforced, -/obj/item/radio/intercom/directional/east, -/obj/item/toy/figure/syndie{ - pixel_x = 11; - pixel_y = -3 +"cg" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/photocopier/faxmachine/longrange, -/obj/effect/turf_decal/borderfloor, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/tech/grid, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/machinery/turretid/lethal{ + pixel_y = -24 + }, +/turf/open/floor/plasteel/dark, /area/ship/bridge) "ch" = ( /turf/open/floor/carpet/red_gold, @@ -107,6 +142,12 @@ "cs" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/hallway/central) +"cB" = ( +/obj/structure/weightmachine/weightlifter, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/dark, +/area/ship/crew) "cH" = ( /obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, /obj/machinery/atmospherics/pipe/layer_manifold{ @@ -148,25 +189,8 @@ dir = 1 }, /obj/effect/landmark/start/shaft_miner, -/turf/open/floor/plasteel/tech/techmaint, +/turf/open/floor/plasteel/tech, /area/ship/storage) -"dr" = ( -/obj/structure/window/reinforced/spawner/west, -/obj/machinery/power/smes/shuttle/precharged{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/machinery/door/window/eastleft{ - name = "Engine Access" - }, -/obj/machinery/door/poddoor{ - id = "wrecker_engine_stbd"; - dir = 4 - }, -/turf/open/floor/plating, -/area/ship/maintenance/starboard) "dA" = ( /obj/item/reagent_containers/food/snacks/canned/beans{ pixel_x = -5; @@ -203,16 +227,6 @@ /obj/effect/turf_decal/industrial/outline, /turf/open/floor/plasteel/mono/dark, /area/ship/cargo) -"dF" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/turf_decal/industrial/outline, -/obj/machinery/firealarm/directional/east, -/obj/structure/sign/warning/nosmoking{ - pixel_y = -32 - }, -/obj/effect/decal/cleanable/oil, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/maintenance/starboard) "dG" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, @@ -229,6 +243,18 @@ }, /turf/open/floor/carpet/red, /area/ship/crew/dorm) +"dU" = ( +/obj/structure/window/reinforced/spawner/west, +/obj/machinery/atmospherics/components/unary/shuttle/heater{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/east, +/obj/machinery/door/poddoor{ + dir = 4; + id = "wrecker_engine_stbd" + }, +/turf/open/floor/plating, +/area/ship/maintenance/starboard) "ec" = ( /obj/structure/cable{ icon_state = "1-2" @@ -239,16 +265,12 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel/dark, /area/ship/crew) -"el" = ( -/obj/effect/turf_decal/industrial/outline, -/obj/machinery/suit_storage_unit/inherit/industrial{ - req_access = list(11) +"fg" = ( +/obj/structure/sign/number/eight{ + pixel_y = 5 }, -/obj/item/clothing/suit/space/syndicate/black/engie, -/obj/item/clothing/head/helmet/space/syndicate/black/engie, -/obj/item/clothing/mask/breath, -/turf/open/floor/plasteel/tech/grid, -/area/ship/storage) +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/maintenance/fore) "fi" = ( /obj/machinery/power/port_gen/pacman/super, /obj/effect/turf_decal/radiation/white, @@ -279,25 +301,12 @@ /obj/item/ammo_box/c10mm, /turf/open/floor/mineral/plastitanium, /area/ship/security/armory) -"fA" = ( -/obj/machinery/light/small/directional/east, -/obj/machinery/advanced_airlock_controller{ - pixel_x = 25 - }, -/obj/effect/turf_decal/borderfloor{ - dir = 4 - }, -/obj/effect/turf_decal/industrial/outline, -/obj/machinery/suit_storage_unit/inherit/industrial, -/obj/item/clothing/mask/breath, -/obj/item/tank/internals/oxygen, -/obj/item/clothing/suit/space/syndicate/surplus, -/obj/item/clothing/head/helmet/space/syndicate/surplus, -/obj/structure/sign/syndicate{ - pixel_y = 28 +"fC" = ( +/obj/structure/sign/number/four{ + pixel_y = 5 }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/hallway/central) +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/maintenance/fore) "fL" = ( /obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, /turf/open/floor/plating, @@ -327,22 +336,6 @@ /obj/structure/bed/roller, /turf/open/floor/plasteel/mono/dark, /area/ship/cargo) -"gh" = ( -/obj/structure/closet/secure_closet/freezer{ - anchored = 1; - locked = 0; - name = "fridge" - }, -/obj/effect/turf_decal/corner/transparent/bar{ - dir = 1 - }, -/obj/effect/turf_decal/corner/transparent/bar, -/obj/item/storage/cans/sixbeer, -/obj/machinery/status_display/shuttle{ - pixel_y = -32 - }, -/turf/open/floor/plasteel, -/area/ship/crew) "gM" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/effect/decal/cleanable/dirt, @@ -356,38 +349,28 @@ /obj/effect/turf_decal/corner_techfloor_grid{ dir = 1 }, -/turf/open/floor/plasteel/tech/techmaint, +/turf/open/floor/plasteel/tech, /area/ship/maintenance/starboard) -"hs" = ( -/obj/structure/closet/secure_closet{ - anchored = 1; - icon_state = "hos"; - name = "captain's locker"; - req_access_txt = "20" +"hc" = ( +/obj/effect/turf_decal/industrial/outline, +/obj/machinery/rnd/production/techfab/department/cargo, +/turf/open/floor/plasteel/tech/grid, +/area/ship/cargo) +"hh" = ( +/obj/effect/turf_decal/industrial/outline, +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/oil/slippery, +/obj/structure/sign/warning/nosmoking{ + pixel_y = -28 }, -/obj/item/storage/backpack/security, -/obj/item/clothing/under/syndicate/combat, -/obj/item/clothing/suit/armor/vest/capcarapace/syndicate, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/gloves/combat, -/obj/item/clothing/glasses/thermal/eyepatch, -/obj/item/clothing/head/HoS/syndicate, -/obj/effect/decal/cleanable/dirt/dust, -/obj/item/gun/ballistic/revolver, -/obj/item/ammo_box/a357/match, -/obj/item/ammo_box/a357/match, -/obj/item/ammo_box/a357/match, -/obj/item/codespeak_manual/unlimited, -/obj/item/pen/edagger, -/obj/item/radio/headset/syndicate/captain, -/turf/open/floor/carpet/black, -/area/ship/bridge) -"hy" = ( -/obj/structure/sign/number/eight{ - dir = 1 +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"hD" = ( +/obj/structure/sign/syndicate{ + pixel_y = 2 }, /turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/bridge) +/area/ship/hallway/central) "hT" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/mono/dark, @@ -398,38 +381,6 @@ }, /turf/open/floor/plasteel/mono/dark, /area/ship/cargo) -"ik" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin/carbon, -/obj/item/folder/syndicate, -/obj/item/pen/fourcolor, -/obj/item/gps/mining{ - pixel_x = 9; - pixel_y = -6 - }, -/obj/machinery/light/directional/south, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 - }, -/obj/item/stamp/qm{ - name = "foreman's rubber stamp" - }, -/obj/item/circuitboard/machine/rdserver, -/obj/item/circuitboard/machine/techfab/department/cargo, -/obj/machinery/button/shieldwallgen{ - dir = 1; - id = "hyena_cargo"; - pixel_x = -10; - pixel_y = -24 - }, -/obj/machinery/button/door{ - dir = 1; - id = "wreckercargobay"; - name = "cargo bay doors"; - pixel_y = -25 - }, -/turf/open/floor/carpet/red, -/area/ship/cargo/office) "ir" = ( /obj/structure/window/reinforced/spawner/west, /obj/machinery/power/smes/shuttle/precharged{ @@ -447,21 +398,6 @@ }, /turf/open/floor/plating, /area/ship/maintenance/port) -"iu" = ( -/obj/effect/turf_decal/industrial/fire{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/turf/open/floor/plating, -/area/ship/maintenance/port) "iv" = ( /obj/structure/cable{ icon_state = "1-2" @@ -503,36 +439,23 @@ }, /turf/open/floor/plasteel/mono/dark, /area/ship/cargo) -"iG" = ( -/obj/machinery/porta_turret/centcom_shuttle/ballistic{ - dir = 10; - name = "ship turret"; - on = 0 - }, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/maintenance/starboard) "iI" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/trimline/opaque/red/filled/warning, /turf/open/floor/plasteel/tech, /area/ship/hallway/central) -"iQ" = ( -/obj/structure/window/reinforced/spawner/west, -/obj/machinery/power/smes/shuttle/precharged{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/machinery/door/window/eastright{ - name = "Engine Access" - }, -/obj/machinery/door/poddoor{ - id = "wrecker_engine_stbd"; - dir = 4 +"iL" = ( +/obj/effect/turf_decal/industrial/outline, +/obj/machinery/light/small/directional/west, +/obj/item/clothing/suit/space/syndicate/black/orange, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/head/helmet/space/syndicate/black/orange, +/obj/item/tank/jetpack/carbondioxide, +/obj/machinery/suit_storage_unit/inherit/industrial{ + req_one_access = list(48,56) }, -/turf/open/floor/plating, -/area/ship/maintenance/starboard) +/turf/open/floor/plasteel/tech/grid, +/area/ship/storage) "iT" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/maintenance/port) @@ -540,6 +463,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/mineral/plastitanium, /area/ship/crew/dorm) +"ji" = ( +/obj/structure/sign/warning/vacuum/external{ + pixel_y = -9 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/cargo) "jt" = ( /obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, /obj/machinery/door/poddoor/shutters{ @@ -549,19 +478,39 @@ }, /turf/open/floor/plating, /area/ship/storage) -"jG" = ( -/obj/machinery/light/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/corner_techfloor_grid, -/turf/open/floor/plasteel/tech, -/area/ship/hallway/central) -"jH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ +"jB" = ( +/obj/structure/closet/secure_closet{ + anchored = 1; + icon_state = "syndicate"; + name = "firearms locker" + }, +/obj/structure/sign/poster/contraband/stechkin{ + pixel_x = 32 + }, +/obj/effect/turf_decal/industrial/outline, +/obj/item/gun/ballistic/shotgun/lethal, +/obj/machinery/button/door{ + dir = 1; + id = "wreckerarmory"; + name = "armory shutters"; + pixel_y = -21; + req_access = null + }, +/turf/open/floor/mineral/plastitanium, +/area/ship/security/armory) +"jG" = ( +/obj/machinery/light/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/corner_techfloor_grid, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"jH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 5 }, /obj/effect/turf_decal/corner_techfloor_grid{ @@ -575,6 +524,20 @@ "jI" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/storage) +"jP" = ( +/obj/machinery/atmospherics/components/unary/portables_connector{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/scrubber, +/obj/effect/turf_decal/industrial/outline, +/obj/machinery/button/door{ + dir = 1; + id = "wrecker_engine_port"; + name = "thruster doors"; + pixel_y = -21 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/maintenance/port) "jT" = ( /obj/structure/cable{ icon_state = "4-8" @@ -603,57 +566,20 @@ /obj/item/storage/firstaid/regular, /turf/open/floor/plasteel/mono/dark, /area/ship/cargo) -"kr" = ( -/obj/structure/window/reinforced/spawner/west, -/obj/machinery/atmospherics/components/unary/shuttle/heater{ - dir = 4 - }, -/obj/structure/window/reinforced/spawner/east, -/obj/machinery/door/poddoor{ - id = "wrecker_engine_stbd"; - dir = 4 - }, -/turf/open/floor/plating, -/area/ship/maintenance/starboard) "kM" = ( /obj/structure/chair/office{ dir = 1 }, /turf/open/floor/carpet/red_gold, /area/ship/bridge) -"kO" = ( -/obj/structure/closet/secure_closet{ - anchored = 1; - icon_state = "syndicate"; - name = "explosives locker"; - req_access = "list(56, 20)" - }, -/obj/structure/sign/warning/explosives/alt{ - pixel_x = -32 - }, -/obj/item/storage/backpack/duffelbag/syndie/c4{ - name = "bag of mining charges" - }, -/obj/item/storage/belt/grenade, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/door{ - id = "wreckerarmory"; - name = "armory shutters"; - pixel_y = 25 - }, -/obj/effect/turf_decal/industrial/outline, -/turf/open/floor/mineral/plastitanium, -/area/ship/security/armory) -"le" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 +"kR" = ( +/obj/docking_port/stationary{ + dwidth = 10; + height = 15; + width = 30 }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) +/turf/template_noop, +/area/template_noop) "lg" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/oil/streak, @@ -684,14 +610,6 @@ /obj/effect/landmark/start/captain, /turf/open/floor/carpet/black, /area/ship/bridge) -"mm" = ( -/obj/machinery/porta_turret/centcom_shuttle/ballistic{ - dir = 6; - name = "ship turret"; - on = 0 - }, -/turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) "mL" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/maintenance/fore) @@ -711,42 +629,35 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/carpet/black, /area/ship/bridge) -"nu" = ( -/obj/machinery/porta_turret/centcom_shuttle/ballistic{ - name = "ship turret"; - on = 0 - }, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/crew/dorm) -"nx" = ( -/obj/machinery/button/door{ - id = "wreckerarmory"; - name = "armory shutters"; - pixel_y = 25; - req_one_access_txt = "list(19)" +"nG" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 }, +/obj/effect/decal/cleanable/oil/streak, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"nK" = ( /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/opaque/red/filled/corner{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 }, -/turf/open/floor/plasteel/tech, -/area/ship/cargo) -"nG" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ +/obj/effect/turf_decal/borderfloor{ dir = 1 }, -/obj/effect/decal/cleanable/oil/streak, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/grunge{ + name = "Foreman's Office"; + req_access = list(56) + }, /turf/open/floor/plasteel/tech, -/area/ship/cargo) +/area/ship/cargo/office) "nR" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/vending/cola/sodie, @@ -769,6 +680,43 @@ }, /turf/open/floor/plasteel/tech, /area/ship/hallway/central) +"nT" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/button/door{ + dir = 8; + id = "wrecker_engine_stbd"; + name = "thruster doors"; + pixel_x = 21 + }, +/turf/open/floor/plasteel/tech, +/area/ship/maintenance/starboard) +"nX" = ( +/obj/structure/window/reinforced/spawner/west, +/obj/machinery/power/smes/shuttle/precharged{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/door/window/eastleft{ + name = "Engine Access" + }, +/obj/machinery/door/poddoor{ + dir = 4; + id = "wrecker_engine_stbd" + }, +/turf/open/floor/plating, +/area/ship/maintenance/starboard) "ob" = ( /obj/structure/cable{ icon_state = "1-2" @@ -788,6 +736,42 @@ }, /turf/open/floor/plasteel/dark, /area/ship/crew) +"ol" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin/carbon, +/obj/item/folder/syndicate, +/obj/item/pen/fourcolor, +/obj/item/gps/mining{ + pixel_x = 9; + pixel_y = -6 + }, +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/item/stamp/qm{ + name = "foreman's rubber stamp" + }, +/obj/machinery/button/shieldwallgen{ + dir = 1; + id = "hyena_cargo"; + pixel_x = -10; + pixel_y = -24 + }, +/obj/machinery/button/door{ + dir = 1; + id = "wreckercargobay"; + name = "cargo bay doors"; + pixel_y = -25 + }, +/turf/open/floor/carpet/red, +/area/ship/cargo/office) +"or" = ( +/obj/structure/sign/number/nine{ + pixel_y = 5 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/maintenance/fore) "oz" = ( /obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, /obj/machinery/door/poddoor/shutters{ @@ -796,6 +780,14 @@ }, /turf/open/floor/plating, /area/ship/bridge) +"oF" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/documents/syndicate/mining, +/obj/structure/filingcabinet, +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/borderfloorblack, +/turf/open/floor/plasteel/tech/grid, +/area/ship/bridge) "oJ" = ( /obj/structure/cable{ icon_state = "4-8" @@ -815,16 +807,42 @@ "oO" = ( /turf/closed/wall/mineral/plastitanium, /area/ship/maintenance/fore) -"oR" = ( -/obj/effect/turf_decal/industrial/outline, -/obj/machinery/light/small/directional/south, +"oQ" = ( +/obj/structure/table/reinforced, +/obj/machinery/button/door{ + dir = 8; + id = "wreckerwindows"; + name = "Window Shutters"; + pixel_x = -5; + pixel_y = 3 + }, +/obj/item/gps{ + pixel_x = 7 + }, +/obj/item/megaphone/sec{ + name = "syndicate megaphone"; + pixel_x = -4; + pixel_y = 7 + }, +/obj/effect/turf_decal/borderfloorblack{ + dir = 4 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/bridge) +"oS" = ( +/obj/structure/table, +/obj/machinery/microwave, +/obj/effect/turf_decal/corner/transparent/bar{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/bar, +/obj/machinery/firealarm/directional/west, /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/sign/poster/contraband/hacking_guide{ +/obj/structure/sign/poster/syndicate/random{ pixel_y = -32 }, -/obj/structure/tank_dispenser/oxygen, -/turf/open/floor/plasteel/tech/grid, -/area/ship/storage) +/turf/open/floor/plasteel, +/area/ship/crew) "oV" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/industrial/fire{ @@ -839,6 +857,62 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/plating, /area/ship/maintenance/starboard) +"pi" = ( +/obj/structure/window/reinforced/spawner/west, +/obj/machinery/power/smes/shuttle/precharged{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/door/window/eastright{ + name = "Engine Access" + }, +/obj/machinery/door/poddoor{ + dir = 4; + id = "wrecker_engine_stbd" + }, +/turf/open/floor/plating, +/area/ship/maintenance/starboard) +"pt" = ( +/obj/effect/turf_decal/industrial/outline, +/obj/item/clothing/shoes/workboots/mining, +/obj/item/clothing/under/syndicate/gorlex, +/obj/item/clothing/gloves/explorer, +/obj/item/clothing/accessory/armband/cargo, +/obj/item/storage/belt/mining, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/head/hardhat/orange, +/obj/item/clothing/head/soft/grey, +/obj/machinery/light/small/directional/north, +/obj/structure/closet/secure_closet{ + anchored = 1; + icon_state = "mining"; + name = "wrecker's locker"; + req_access = list(48) + }, +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/industrial/outline, +/obj/structure/closet/secure_closet{ + anchored = 1; + icon_state = "mining"; + name = "wrecker's locker"; + req_access = list(48) + }, +/obj/item/clothing/shoes/workboots/mining, +/obj/item/clothing/under/syndicate/gorlex, +/obj/item/clothing/gloves/explorer, +/obj/item/clothing/accessory/armband/cargo, +/obj/item/storage/belt/mining, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/head/hardhat/orange, +/obj/item/clothing/head/soft/grey, +/obj/machinery/light/small/directional/north, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/plasteel/tech/grid, +/area/ship/storage) "pu" = ( /obj/structure/bed, /obj/item/bedsheet/black, @@ -881,7 +955,7 @@ /obj/structure/cable/yellow{ icon_state = "0-6" }, -/turf/open/floor/plasteel/tech/techmaint, +/turf/open/floor/plasteel/tech, /area/ship/maintenance/port) "pH" = ( /obj/machinery/holopad/emergency/command, @@ -889,13 +963,11 @@ /area/ship/bridge) "pI" = ( /obj/item/radio/intercom/wideband/directional/east, -/obj/effect/turf_decal/borderfloor{ - dir = 1 - }, /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/computer/cargo/express{ dir = 1 }, +/obj/effect/turf_decal/borderfloorblack, /turf/open/floor/plasteel/tech/grid, /area/ship/bridge) "pP" = ( @@ -903,38 +975,20 @@ /obj/machinery/autolathe, /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) -"pT" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/button/door{ - dir = 8; - id = "wrecker_engine_stbd"; - name = "thruster doors"; - pixel_x = 25 - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/maintenance/starboard) -"qi" = ( -/obj/structure/cable{ - icon_state = "0-8" +"qt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/borderfloor{ + dir = 8 }, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/machinery/light/directional/south, -/turf/open/floor/carpet/red_gold, -/area/ship/bridge) -"qs" = ( -/obj/structure/sign/number/eight, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/maintenance/fore) +/obj/effect/turf_decal/industrial/outline, +/obj/machinery/light/small/directional/west, +/obj/machinery/suit_storage_unit/inherit/industrial, +/obj/item/clothing/mask/breath, +/obj/item/tank/internals/oxygen, +/obj/item/clothing/suit/space/syndicate/surplus, +/obj/item/clothing/head/helmet/space/syndicate/surplus, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/central) "qO" = ( /obj/structure/cable{ icon_state = "4-8" @@ -953,7 +1007,7 @@ /obj/effect/turf_decal/corner_techfloor_grid{ dir = 1 }, -/turf/open/floor/plasteel/tech/techmaint, +/turf/open/floor/plasteel/tech, /area/ship/storage) "rd" = ( /obj/structure/cable{ @@ -997,7 +1051,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 8 }, -/turf/open/floor/plasteel/tech/techmaint, +/turf/open/floor/plasteel/tech, /area/ship/maintenance/port) "rP" = ( /obj/structure/cable{ @@ -1011,7 +1065,7 @@ /obj/structure/reagent_dispensers/watertank, /obj/effect/turf_decal/industrial/outline, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/tech/techmaint, +/turf/open/floor/plasteel/tech, /area/ship/maintenance/starboard) "si" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -1067,44 +1121,6 @@ }, /turf/open/floor/plasteel/tech, /area/ship/hallway/central) -"sH" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/structure/sign/poster/contraband/syndicate_recruitment{ - pixel_y = -32 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 - }, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"sR" = ( -/obj/machinery/door/airlock/grunge{ - dir = 8; - name = "Bridge"; - req_access_txt = "19" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/turf/open/floor/plasteel/tech, -/area/ship/bridge) "tl" = ( /obj/machinery/shower{ pixel_y = 19 @@ -1114,25 +1130,19 @@ /obj/structure/sign/poster/official/cleanliness{ pixel_x = -32 }, -/obj/effect/turf_decal/borderfloor{ +/obj/effect/turf_decal/borderfloorblack{ dir = 1 }, /turf/open/floor/mineral/plastitanium, /area/ship/crew/dorm) -"tw" = ( -/obj/structure/window/reinforced/tinted/frosted, -/obj/machinery/suit_storage_unit/inherit{ - name = "captain's suit storage unit"; - req_access_txt = "20" - }, -/obj/item/clothing/suit/space/hardsuit/syndi, -/obj/item/clothing/mask/gas/syndicate, -/obj/machinery/light_switch{ - dir = 4; - pixel_x = -25 +"tn" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/atmospherics/pipe/simple/green/hidden, +/obj/machinery/atmospherics/pipe/layer_manifold{ + dir = 4 }, -/turf/open/floor/carpet/black, -/area/ship/bridge) +/turf/open/floor/plasteel/tech, +/area/ship/maintenance/port) "tx" = ( /obj/effect/turf_decal/industrial/outline, /obj/structure/closet/secure_closet{ @@ -1183,17 +1193,6 @@ }, /turf/open/floor/plasteel/mono/dark, /area/ship/cargo) -"uf" = ( -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/borderfloor{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/frame/machine{ - anchored = 1 - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/cargo/office) "uk" = ( /obj/machinery/vending/cigarette/syndicate, /obj/effect/decal/cleanable/dirt/dust, @@ -1230,31 +1229,19 @@ /obj/structure/catwalk/over, /turf/open/floor/plating, /area/ship/maintenance/port) -"uO" = ( -/obj/structure/table/reinforced, -/obj/machinery/button/door{ - dir = 8; - id = "wreckerwindows"; - name = "Window Shutters"; - pixel_x = -5; - pixel_y = 3 - }, -/obj/item/gps{ - pixel_x = 7 - }, -/obj/effect/turf_decal/borderfloor{ +"ut" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 4 }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/bridge) -"uP" = ( -/obj/machinery/porta_turret/centcom_shuttle/ballistic{ - dir = 6; - name = "ship turret"; - on = 0 +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 }, -/turf/closed/wall/mineral/plastitanium, -/area/ship/maintenance/fore) +/obj/machinery/computer/helm/viewscreen/directional/east, +/turf/open/floor/plasteel/dark, +/area/ship/crew) "vi" = ( /obj/structure/table, /obj/item/toy/cards/deck/syndicate{ @@ -1317,22 +1304,13 @@ }, /turf/open/floor/plasteel/tech, /area/ship/crew) -"wA" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/structure/sign/poster/contraband/random{ - pixel_y = 32 +"wp" = ( +/obj/structure/sign/number/nine{ + dir = 1; + pixel_y = 5 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/tech, -/area/ship/hallway/central) +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/bridge) "wE" = ( /obj/item/toy/nuke, /obj/effect/decal/cleanable/dirt/dust, @@ -1340,6 +1318,19 @@ /obj/effect/turf_decal/industrial/outline, /turf/open/floor/mineral/plastitanium/red, /area/ship/security/armory) +"wO" = ( +/obj/structure/table, +/obj/effect/spawner/lootdrop/donkpockets, +/obj/effect/spawner/lootdrop/donkpockets, +/obj/effect/turf_decal/corner/transparent/bar{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/bar, +/obj/item/reagent_containers/food/snacks/syndicake, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plasteel, +/area/ship/crew) "wP" = ( /obj/effect/turf_decal/industrial/outline, /turf/open/floor/plasteel/mono/dark, @@ -1360,28 +1351,24 @@ dir = 1 }, /obj/effect/landmark/start/station_engineer, -/turf/open/floor/plasteel/tech/techmaint, +/turf/open/floor/plasteel/tech, /area/ship/storage) -"xQ" = ( -/obj/structure/chair/sofa/corner{ - dir = 4 - }, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/item/radio/intercom/directional/north{ - pixel_y = 22 +"xK" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/advanced_airlock_controller{ + pixel_y = -21 }, -/turf/open/floor/carpet/red, -/area/ship/crew) -"xZ" = ( -/obj/structure/sign/number/four{ - dir = 1 +/obj/effect/turf_decal/borderfloor{ + dir = 4 }, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/bridge) +/obj/effect/turf_decal/industrial/outline, +/obj/machinery/suit_storage_unit/inherit/industrial, +/obj/item/clothing/mask/breath, +/obj/item/tank/internals/oxygen, +/obj/item/clothing/suit/space/syndicate/surplus, +/obj/item/clothing/head/helmet/space/syndicate/surplus, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/central) "yd" = ( /obj/structure/cable{ icon_state = "1-2" @@ -1416,8 +1403,24 @@ /obj/effect/turf_decal/radiation/white, /obj/effect/turf_decal/industrial/outline, /obj/machinery/light/small/directional/north, -/turf/open/floor/plasteel/tech/techmaint, +/turf/open/floor/plasteel/tech, /area/ship/maintenance/port) +"yG" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/syndicate/random{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) "yM" = ( /obj/item/lighter{ pixel_x = -8; @@ -1441,6 +1444,29 @@ }, /turf/open/floor/carpet/black, /area/ship/bridge) +"yV" = ( +/obj/machinery/door/airlock/grunge{ + dir = 8; + name = "Bridge"; + req_access = list(19) + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) "zn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 10 @@ -1496,17 +1522,6 @@ }, /turf/open/floor/plasteel/dark, /area/ship/crew/dorm) -"zv" = ( -/obj/structure/table, -/obj/machinery/microwave, -/obj/effect/turf_decal/corner/transparent/bar{ - dir = 1 - }, -/obj/effect/turf_decal/corner/transparent/bar, -/obj/machinery/firealarm/directional/west, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel, -/area/ship/crew) "zA" = ( /obj/machinery/power/smes/engineering, /obj/structure/cable{ @@ -1524,27 +1539,6 @@ }, /turf/open/floor/plasteel/tech/grid, /area/ship/maintenance/port) -"zY" = ( -/obj/effect/turf_decal/industrial/outline, -/obj/structure/closet/secure_closet{ - anchored = 1; - icon_state = "mining"; - name = "wrecker's locker"; - req_access = list(48) - }, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/under/syndicate/gorlex, -/obj/item/clothing/gloves/explorer, -/obj/item/clothing/accessory/armband/cargo, -/obj/item/storage/belt/mining, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/welding, -/obj/item/clothing/head/hardhat/orange, -/obj/item/clothing/head/soft/grey, -/obj/machinery/firealarm/directional/south, -/obj/machinery/light/small/directional/north, -/turf/open/floor/plasteel/tech/grid, -/area/ship/storage) "zZ" = ( /obj/structure/cable{ icon_state = "0-4" @@ -1556,22 +1550,13 @@ /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/plating, /area/ship/maintenance/starboard) -"Ai" = ( -/obj/structure/table, -/obj/effect/spawner/lootdrop/donkpockets, -/obj/effect/spawner/lootdrop/donkpockets, -/obj/effect/turf_decal/corner/transparent/bar{ - dir = 1 +"Af" = ( +/obj/structure/closet/emcloset/wall{ + pixel_y = 28 }, -/obj/effect/turf_decal/corner/transparent/bar, -/obj/item/reagent_containers/food/snacks/syndicake, /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/sign/poster/contraband/random{ - pixel_y = -32 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/plasteel, -/area/ship/crew) +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) "Ap" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/bridge) @@ -1599,6 +1584,12 @@ }, /turf/open/floor/carpet/red, /area/ship/crew/dorm) +"AE" = ( +/obj/structure/sign/warning/vacuum/external{ + pixel_y = -9 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/hallway/central) "AF" = ( /obj/structure/cable{ icon_state = "1-2" @@ -1611,51 +1602,13 @@ }, /turf/open/floor/plating, /area/ship/maintenance/starboard) -"AK" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin/carbon, -/obj/item/pen/fountain/captain, -/obj/effect/turf_decal/borderfloor, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/sign/poster/contraband/peacemaker{ - pixel_y = 32 - }, -/obj/item/areaeditor/shuttle, -/obj/item/megaphone/sec{ - name = "syndicate megaphone"; - pixel_x = -4; - pixel_y = 7 - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/bridge) -"AP" = ( -/obj/structure/bed, -/obj/item/bedsheet/black, -/obj/structure/curtain/cloth/fancy{ - name = "blood-red curtains" - }, -/obj/structure/sign/poster/contraband/random{ - pixel_y = -32 - }, -/obj/structure/window/reinforced/tinted/frosted{ - dir = 8 - }, -/turf/open/floor/carpet/red, -/area/ship/crew/dorm) -"AV" = ( -/obj/machinery/atmospherics/components/unary/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/scrubber, -/obj/effect/turf_decal/industrial/outline, -/obj/machinery/button/door{ +"AY" = ( +/obj/structure/sign/number/eight{ dir = 1; - id = "wrecker_engine_port"; - name = "thruster doors"; - pixel_y = -25 + pixel_y = 5 }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/maintenance/port) +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/bridge) "Bg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/structure/cable{ @@ -1683,6 +1636,37 @@ }, /turf/open/floor/plating, /area/ship/storage) +"Bv" = ( +/obj/structure/closet/secure_closet{ + anchored = 1; + icon_state = "warden"; + name = "foreman's locker"; + req_access = list(56) + }, +/obj/item/clothing/shoes/jackboots, +/obj/item/clothing/under/syndicate/gorlex, +/obj/item/clothing/suit/toggle/industrial, +/obj/item/clothing/gloves/combat, +/obj/item/storage/belt/utility/chief{ + name = "\improper Foreman's toolbelt" + }, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/head/hardhat/white, +/obj/item/clothing/head/beret/ce{ + name = "foreman beret" + }, +/obj/item/storage/toolbox/syndicate, +/obj/item/wrench/combat, +/obj/item/ammo_box/magazine/m10mm, +/obj/item/gun/ballistic/automatic/pistol, +/obj/item/clothing/accessory/holster, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/item/card/mining_access_card, +/obj/machinery/airalarm/directional/west, +/obj/item/tank/jetpack/suit, +/turf/open/floor/carpet/red, +/area/ship/cargo/office) "BB" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/corner_techfloor_grid{ @@ -1690,6 +1674,24 @@ }, /turf/open/floor/plasteel/tech, /area/ship/hallway/central) +"BG" = ( +/obj/machinery/porta_turret/ship/ballistic, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/bridge) +"BZ" = ( +/obj/structure/window/reinforced/tinted/frosted, +/obj/machinery/suit_storage_unit/inherit{ + name = "captain's suit storage unit"; + req_access = list(20) + }, +/obj/item/clothing/suit/space/hardsuit/syndi, +/obj/item/clothing/mask/gas/syndicate, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20 + }, +/turf/open/floor/carpet/black, +/area/ship/bridge) "Ck" = ( /obj/structure/sink{ dir = 4; @@ -1727,15 +1729,6 @@ }, /turf/open/floor/plating, /area/ship/maintenance/fore) -"DH" = ( -/obj/effect/turf_decal/industrial/outline, -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/decal/cleanable/oil/slippery, -/obj/structure/sign/warning/nosmoking{ - pixel_y = -32 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) "DO" = ( /obj/effect/turf_decal/industrial/warning{ dir = 1 @@ -1755,15 +1748,27 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/maintenance/starboard) -"En" = ( -/obj/structure/sign/number/nine{ - dir = 1 +/obj/machinery/light/small/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/maintenance/starboard) +"DW" = ( +/obj/effect/turf_decal/industrial/fire{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-4" }, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/bridge) +/obj/structure/sign/warning/nosmoking{ + pixel_y = -28 + }, +/turf/open/floor/plating, +/area/ship/maintenance/port) "EH" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/mineral/plastitanium/red, @@ -1789,13 +1794,12 @@ "Fe" = ( /obj/structure/table/reinforced, /obj/item/soap/syndie, -/obj/effect/turf_decal/borderfloor, /obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/borderfloorblack, /turf/open/floor/mineral/plastitanium, /area/ship/crew/dorm) "Ff" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/borderfloor, /obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm/directional/west, /obj/structure/closet/wall/white/med{ @@ -1804,8 +1808,44 @@ pixel_y = -28 }, /obj/item/storage/pill_bottle/lsd, +/obj/effect/turf_decal/borderfloorblack, /turf/open/floor/mineral/plastitanium, /area/ship/crew/dorm) +"Fl" = ( +/obj/machinery/door/airlock/hatch{ + name = "Starboard Thrusters"; + req_access = list(10) + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/effect/turf_decal/borderfloor{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/fire{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/maintenance/starboard) +"Fq" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) "Fr" = ( /obj/structure/cable{ icon_state = "1-2" @@ -1844,14 +1884,6 @@ }, /turf/open/floor/plasteel/tech, /area/ship/hallway/central) -"FJ" = ( -/obj/docking_port/stationary{ - dwidth = 10; - width = 30; - height = 15 - }, -/turf/template_noop, -/area/template_noop) "FQ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, @@ -1860,6 +1892,50 @@ }, /turf/open/floor/plasteel/mono/dark, /area/ship/cargo) +"FR" = ( +/obj/structure/table/reinforced, +/obj/item/flashlight/lamp{ + pixel_x = -12; + pixel_y = 7 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/paper_bin/carbon, +/obj/item/folder/syndicate/red, +/obj/item/pen/fountain/captain, +/obj/item/stamp/hos{ + name = "captain's rubber stamp" + }, +/obj/effect/turf_decal/borderfloorblack{ + dir = 1 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/bridge) +"Ge" = ( +/obj/structure/bed, +/obj/item/bedsheet/black, +/obj/structure/curtain/cloth/fancy{ + name = "blood-red curtains" + }, +/obj/structure/window/reinforced/tinted/frosted{ + dir = 8 + }, +/obj/structure/sign/poster/syndicate/random{ + pixel_y = -32 + }, +/turf/open/floor/carpet/red, +/area/ship/crew/dorm) +"Gj" = ( +/obj/structure/chair/sofa/corner{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/carpet/red, +/area/ship/crew) "Gm" = ( /obj/machinery/atmospherics/pipe/layer_manifold, /obj/machinery/door/airlock/hatch{ @@ -1881,28 +1957,6 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/plasteel/tech/grid, /area/ship/maintenance/port) -"GA" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/button/door{ - dir = 1; - id = "wreckercargobay"; - name = "cargo bay doors"; - pixel_y = -25 - }, -/obj/machinery/light/floor, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/button/shieldwallgen{ - dir = 1; - id = "hyena_cargo"; - pixel_x = -10; - pixel_y = -24 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) "GV" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/crew/dorm) @@ -1947,7 +2001,7 @@ /obj/effect/turf_decal/corner_techfloor_grid{ dir = 1 }, -/turf/open/floor/plasteel/tech/techmaint, +/turf/open/floor/plasteel/tech, /area/ship/maintenance/port) "Ii" = ( /obj/effect/decal/cleanable/dirt, @@ -1975,23 +2029,6 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/plasteel/dark, /area/ship/crew/dorm) -"IK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/borderfloor{ - dir = 8 - }, -/obj/effect/turf_decal/industrial/outline, -/obj/machinery/light/small/directional/west, -/obj/machinery/suit_storage_unit/inherit/industrial, -/obj/item/clothing/mask/breath, -/obj/item/tank/internals/oxygen, -/obj/item/clothing/suit/space/syndicate/surplus, -/obj/item/clothing/head/helmet/space/syndicate/surplus, -/obj/structure/sign/syndicate{ - pixel_y = 28 - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/hallway/central) "IO" = ( /obj/effect/turf_decal/corner/transparent/bar{ dir = 1 @@ -2015,47 +2052,41 @@ /obj/machinery/modular_computer/console/preset/command{ dir = 8 }, -/obj/effect/turf_decal/borderfloor{ +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/borderfloorblack{ dir = 4 }, -/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/tech/grid, /area/ship/bridge) -"JB" = ( -/obj/effect/turf_decal/borderfloor{ - dir = 1 +"JD" = ( +/obj/machinery/door/airlock/grunge{ + dir = 4; + name = "Locker Room"; + req_one_access = list(10,48) }, -/obj/machinery/status_display/shuttle{ - pixel_x = -32; - pixel_y = -16 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/item/documents/syndicate/mining, -/obj/structure/filingcabinet, -/turf/open/floor/plasteel/tech/grid, -/area/ship/bridge) -"JF" = ( -/obj/effect/turf_decal/industrial/outline, -/obj/machinery/light/small/directional/west, -/obj/item/clothing/suit/space/hardsuit/syndi/scarlet, -/obj/item/clothing/mask/breath, -/obj/machinery/suit_storage_unit/inherit/industrial{ - req_access = null; - req_one_access = list(48,56) +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/turf/open/floor/plasteel/tech/grid, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/effect/turf_decal/borderfloor{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, /area/ship/storage) "JL" = ( /turf/closed/wall/mineral/plastitanium, /area/ship/maintenance/port) -"JO" = ( -/obj/machinery/porta_turret/centcom_shuttle/ballistic{ - dir = 9; - name = "ship turret"; - on = 0 - }, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/maintenance/port) "JP" = ( /obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, /turf/open/floor/plating, @@ -2101,14 +2132,6 @@ }, /turf/open/floor/plating, /area/ship/maintenance/port) -"Kj" = ( -/obj/machinery/porta_turret/centcom_shuttle/ballistic{ - dir = 5; - name = "ship turret"; - on = 0 - }, -/turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) "Kn" = ( /obj/structure/cable{ icon_state = "1-2" @@ -2162,24 +2185,6 @@ }, /turf/open/floor/plating, /area/ship/maintenance/port) -"KM" = ( -/obj/effect/turf_decal/industrial/warning/fulltile, -/obj/machinery/door/poddoor{ - dir = 4; - id = "wreckercargobay"; - name = "Cargo Bay Exterior Blast Door" - }, -/obj/docking_port/mobile{ - can_move_docking_ports = 1; - dir = 8; - height = 18; - launch_status = 0; - name = "mining ship"; - preferred_direction = 4; - dheight = 4 - }, -/turf/open/floor/plating, -/area/ship/cargo) "KQ" = ( /obj/structure/cable{ icon_state = "0-4" @@ -2220,6 +2225,13 @@ /obj/item/clothing/mask/gas/syndicate, /turf/open/floor/carpet/red, /area/ship/cargo/office) +"KX" = ( +/obj/effect/turf_decal/industrial/outline, +/obj/machinery/light/small/directional/south, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/tank_dispenser/oxygen, +/turf/open/floor/plasteel/tech/grid, +/area/ship/storage) "La" = ( /obj/machinery/atmospherics/pipe/manifold/cyan/visible/layer2{ dir = 4 @@ -2234,68 +2246,14 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/industrial/fire, /obj/item/analyzer, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/maintenance/port) -"Lg" = ( -/obj/machinery/airalarm/directional/east, -/obj/structure/weightmachine/weightlifter, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/turf/open/floor/plasteel/dark, -/area/ship/crew) -"Lj" = ( -/obj/machinery/door/airlock/hatch{ - name = "Port Thrusters" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/effect/turf_decal/borderfloor, -/obj/effect/turf_decal/industrial/fire, /turf/open/floor/plasteel/tech, /area/ship/maintenance/port) -"Ln" = ( -/obj/structure/closet/emcloset/wall{ - pixel_y = 32 - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) "Lv" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 1 }, /turf/open/floor/plasteel/tech, /area/ship/hallway/central) -"LU" = ( -/obj/effect/turf_decal/industrial/outline, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/structure/rack, -/obj/item/kinetic_crusher/syndie_crusher{ - pixel_x = 5; - pixel_y = -2 - }, -/obj/item/kinetic_crusher/syndie_crusher{ - pixel_x = 5; - pixel_y = 6 - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/storage) -"Ma" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/carpet/red_gold, -/area/ship/bridge) "Ml" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 4 @@ -2306,7 +2264,7 @@ /obj/effect/turf_decal/corner_techfloor_grid{ dir = 8 }, -/turf/open/floor/plasteel/tech/techmaint, +/turf/open/floor/plasteel/tech, /area/ship/maintenance/starboard) "Mp" = ( /obj/effect/decal/cleanable/dirt, @@ -2323,40 +2281,15 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/carpet/red, /area/ship/crew/dorm) -"My" = ( -/obj/effect/turf_decal/industrial/outline, -/obj/structure/frame/machine{ - anchored = 1 - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/cargo) "MF" = ( /obj/machinery/power/shuttle/engine/electric{ dir = 4 }, /obj/structure/cable{ - icon_state = "0-4" - }, -/turf/open/floor/plating, -/area/ship/maintenance/starboard) -"MO" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/closet/emcloset/wall{ - pixel_y = 32 + icon_state = "0-4" }, -/turf/open/floor/plasteel/tech, -/area/ship/hallway/central) +/turf/open/floor/plating, +/area/ship/maintenance/starboard) "MP" = ( /obj/effect/turf_decal/industrial/warning{ dir = 4 @@ -2367,21 +2300,6 @@ }, /turf/open/floor/plasteel/mono/dark, /area/ship/cargo) -"MR" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_switch{ - dir = 8; - pixel_x = 25 - }, -/turf/open/floor/plasteel/dark, -/area/ship/crew/dorm) "Nl" = ( /obj/structure/chair/comfy/shuttle{ dir = 4; @@ -2409,6 +2327,24 @@ }, /turf/open/floor/plating, /area/ship/cargo) +"NS" = ( +/obj/effect/turf_decal/industrial/warning/fulltile, +/obj/machinery/door/poddoor{ + dir = 4; + id = "wreckercargobay"; + name = "Cargo Bay Exterior Blast Door" + }, +/obj/docking_port/mobile{ + can_move_docking_ports = 1; + dheight = 4; + dir = 8; + height = 18; + launch_status = 0; + name = "mining ship"; + preferred_direction = 4 + }, +/turf/open/floor/plating, +/area/ship/cargo) "Ok" = ( /obj/structure/cable{ icon_state = "1-2" @@ -2421,15 +2357,6 @@ /obj/structure/catwalk/over, /turf/open/floor/plating, /area/ship/storage) -"Oo" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/chair/sofa/right{ - dir = 4 - }, -/obj/effect/landmark/start/assistant, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/carpet/red, -/area/ship/crew) "Or" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/industrial/fire{ @@ -2446,31 +2373,6 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/storage) -"OJ" = ( -/obj/machinery/door/airlock/grunge{ - dir = 4; - name = "Locker Room" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/effect/turf_decal/borderfloor{ - dir = 4 - }, /turf/open/floor/plasteel/tech, /area/ship/storage) "OL" = ( @@ -2483,25 +2385,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/ship/maintenance/port) -"OX" = ( -/obj/structure/closet/secure_closet{ - anchored = 1; - icon_state = "syndicate"; - name = "firearms locker" - }, -/obj/structure/sign/poster/contraband/stechkin{ - pixel_x = 32 - }, -/obj/machinery/button/door{ - dir = 1; - id = "wreckerarmory"; - name = "armory shutters"; - pixel_y = -25 - }, -/obj/effect/turf_decal/industrial/outline, -/obj/item/gun/ballistic/shotgun/lethal, -/turf/open/floor/mineral/plastitanium, -/area/ship/security/armory) "Pd" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, @@ -2534,34 +2417,6 @@ }, /turf/open/floor/plasteel/tech, /area/ship/cargo) -"Pw" = ( -/obj/machinery/button/door{ - dir = 1; - id = "wreckerarmory"; - name = "armory shutters"; - pixel_y = -25; - req_one_access_txt = "list(19)" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/corner/opaque/red, -/obj/effect/turf_decal/corner/opaque/red{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/trimline/opaque/red/filled/corner{ - dir = 8 - }, -/turf/open/floor/plasteel/tech, -/area/ship/hallway/central) "Px" = ( /obj/structure/cable{ icon_state = "1-2" @@ -2615,6 +2470,10 @@ }, /turf/open/floor/plasteel/mono/dark, /area/ship/cargo) +"Qz" = ( +/obj/machinery/porta_turret/ship/ballistic, +/turf/closed/wall/mineral/plastitanium, +/area/ship/bridge) "QW" = ( /obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, /obj/machinery/door/poddoor/shutters{ @@ -2653,18 +2512,43 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/ship/storage) -"Rn" = ( -/obj/machinery/porta_turret/centcom_shuttle/ballistic{ - dir = 1; - name = "ship turret"; - on = 0 +"Rl" = ( +/obj/structure/table/reinforced, +/obj/item/radio/intercom/directional/east{ + pixel_y = 7 }, -/turf/closed/wall/mineral/plastitanium, -/area/ship/hallway/central) -"Ru" = ( -/obj/structure/sign/warning/vacuum/external, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/hallway/central) +/obj/item/toy/figure/syndie{ + pixel_x = 11; + pixel_y = -3 + }, +/obj/machinery/photocopier/faxmachine/longrange, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/borderfloorblack{ + dir = 1 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/bridge) +"RD" = ( +/obj/machinery/door/airlock/hatch{ + name = "Port Thrusters"; + req_access = list(10) + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/effect/turf_decal/borderfloor, +/obj/effect/turf_decal/industrial/fire, +/turf/open/floor/plasteel/tech, +/area/ship/maintenance/port) "RE" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/hardline_small{ @@ -2672,6 +2556,39 @@ }, /turf/open/floor/plating, /area/ship/maintenance/fore) +"RQ" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/button/door{ + dir = 1; + id = "wreckercargobay"; + name = "cargo bay doors"; + pixel_y = -21 + }, +/obj/machinery/light/floor, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/button/shieldwallgen{ + dir = 1; + id = "hyena_cargo"; + pixel_x = -10; + pixel_y = -19 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"Sa" = ( +/obj/effect/turf_decal/industrial/outline, +/obj/machinery/suit_storage_unit/inherit/industrial{ + req_access = list(11) + }, +/obj/item/clothing/suit/space/syndicate/black/engie, +/obj/item/clothing/head/helmet/space/syndicate/black/engie, +/obj/item/clothing/mask/breath, +/obj/item/tank/jetpack/carbondioxide, +/turf/open/floor/plasteel/tech/grid, +/area/ship/storage) "Sd" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -2694,6 +2611,52 @@ "Sh" = ( /turf/open/floor/plasteel/tech, /area/ship/hallway/central) +"Sm" = ( +/obj/effect/turf_decal/industrial/outline, +/obj/structure/closet{ + anchored = 1; + icon_door = "eng_tool"; + icon_state = "eng" + }, +/obj/item/storage/toolbox/syndicate{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/storage/toolbox/syndicate, +/obj/item/storage/toolbox/syndicate{ + pixel_x = -5; + pixel_y = -5 + }, +/obj/item/stack/cable_coil/random, +/obj/item/stack/cable_coil/random, +/obj/item/stack/cable_coil/random, +/obj/structure/sign/poster/syndicate/random{ + pixel_x = -32 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/storage) +"Sv" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/opaque/red/filled/corner{ + dir = 4 + }, +/obj/machinery/button/door{ + id = "wreckerarmory"; + name = "armory shutters"; + pixel_y = 23; + req_access = list(19) + }, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) "Sy" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 1 @@ -2723,6 +2686,13 @@ }, /turf/open/floor/plasteel/mono/dark, /area/ship/cargo) +"SK" = ( +/obj/structure/sign/number/four{ + dir = 1; + pixel_y = 5 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/bridge) "SP" = ( /obj/structure/window/reinforced/spawner/west, /obj/machinery/power/smes/shuttle/precharged{ @@ -2752,33 +2722,60 @@ /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel/tech/techmaint, +/turf/open/floor/plasteel/tech, /area/ship/maintenance/port) -"SW" = ( -/obj/machinery/light/small/directional/west, -/obj/machinery/atmospherics/pipe/simple/green/hidden, -/obj/machinery/atmospherics/pipe/layer_manifold{ +"Tg" = ( +/obj/effect/turf_decal/industrial/warning{ dir = 4 }, -/obj/structure/sign/warning/nosmoking{ - pixel_x = -32 +/obj/machinery/light/floor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "2-8" }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/maintenance/port) -"Tg" = ( -/obj/effect/turf_decal/industrial/warning{ +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) +"Th" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/red, +/obj/effect/turf_decal/corner/opaque/red{ dir = 4 }, -/obj/machinery/light/floor, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/trimline/opaque/red/filled/corner{ + dir = 8 + }, +/obj/machinery/button/door{ + dir = 1; + id = "wreckerarmory"; + name = "armory shutters"; + pixel_y = -21; + req_access = list(19) + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"Tq" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/chair/sofa/right{ + dir = 4 }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) +/obj/effect/landmark/start/assistant, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/carpet/red, +/area/ship/crew) "Tu" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; @@ -2786,6 +2783,20 @@ }, /turf/open/floor/plating, /area/ship/maintenance/starboard) +"TK" = ( +/obj/structure/closet/secure_closet/freezer{ + anchored = 1; + locked = 0; + name = "fridge" + }, +/obj/effect/turf_decal/corner/transparent/bar{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/bar, +/obj/item/storage/cans/sixbeer, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/plasteel, +/area/ship/crew) "TR" = ( /obj/structure/curtain/cloth/fancy{ name = "blood-red curtains" @@ -2822,6 +2833,15 @@ /obj/effect/turf_decal/trimline/opaque/red/filled/corner, /turf/open/floor/plasteel/tech, /area/ship/hallway/central) +"Ui" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/turretid{ + pixel_x = 32; + pixel_y = 22; + req_access = list(19) + }, +/turf/open/floor/carpet/red_gold, +/area/ship/bridge) "UI" = ( /obj/structure/cable{ icon_state = "4-8" @@ -2838,53 +2858,13 @@ "Ve" = ( /obj/structure/curtain, /obj/structure/toilet, -/obj/effect/turf_decal/borderfloor{ - dir = 1 - }, /obj/effect/decal/cleanable/blood/old, /obj/structure/window/reinforced/spawner/west, -/turf/open/floor/mineral/plastitanium, -/area/ship/crew/dorm) -"Vv" = ( -/obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/structure/sign/poster/contraband/random{ - pixel_x = 32 - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/plasteel/dark, -/area/ship/crew) -"Vx" = ( -/obj/machinery/door/airlock/hatch{ - name = "Starboard Thrusters" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/effect/turf_decal/borderfloor{ - dir = 1 - }, -/obj/effect/turf_decal/industrial/fire{ +/obj/effect/turf_decal/borderfloorblack{ dir = 1 }, -/turf/open/floor/plasteel/tech, -/area/ship/maintenance/starboard) +/turf/open/floor/mineral/plastitanium, +/area/ship/crew/dorm) "VA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/mineral/plastitanium/red, @@ -2893,10 +2873,10 @@ /obj/machinery/computer/helm{ dir = 8 }, -/obj/effect/turf_decal/borderfloor{ +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/borderfloorblack{ dir = 4 }, -/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/tech/grid, /area/ship/bridge) "VD" = ( @@ -2916,82 +2896,19 @@ "VG" = ( /turf/open/floor/engine/hull, /area/ship/external) -"VH" = ( -/obj/machinery/porta_turret/centcom_shuttle/ballistic{ - dir = 8; - name = "ship turret"; - on = 0 - }, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/storage) -"VQ" = ( -/obj/effect/turf_decal/industrial/outline, -/obj/structure/sign/poster/contraband/random{ - pixel_x = -32 - }, -/obj/structure/closet{ - anchored = 1; - icon_door = "eng_tool"; - icon_state = "eng" - }, -/obj/item/storage/toolbox/syndicate{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/storage/toolbox/syndicate, -/obj/item/storage/toolbox/syndicate{ - pixel_x = -5; - pixel_y = -5 - }, -/obj/item/stack/cable_coil/random, -/obj/item/stack/cable_coil/random, -/obj/item/stack/cable_coil/random, -/turf/open/floor/plasteel/tech/grid, -/area/ship/storage) -"VR" = ( +"VX" = ( /obj/effect/turf_decal/industrial/outline, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, -/obj/item/clothing/suit/space/hardsuit/syndi/scarlet, -/obj/item/clothing/mask/breath, +/obj/item/clothing/suit/space/syndicate/black/orange, /obj/machinery/suit_storage_unit/inherit/industrial{ - req_access = null; req_one_access = list(48,56) }, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/head/helmet/space/syndicate/black/orange, +/obj/item/tank/jetpack/carbondioxide, /turf/open/floor/plasteel/tech/grid, /area/ship/storage) -"VY" = ( -/obj/structure/closet/secure_closet{ - anchored = 1; - icon_state = "warden"; - name = "foreman's locker"; - req_access = list(56) - }, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/syndicate/gorlex, -/obj/item/clothing/suit/toggle/industrial, -/obj/item/clothing/gloves/combat, -/obj/item/storage/belt/utility/chief{ - name = "\improper Foreman's toolbelt" - }, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/welding, -/obj/item/clothing/head/hardhat/white, -/obj/item/clothing/head/beret/ce{ - name = "foreman beret" - }, -/obj/item/storage/toolbox/syndicate, -/obj/item/wrench/combat, -/obj/item/ammo_box/magazine/m10mm/ap, -/obj/item/gun/ballistic/automatic/pistol, -/obj/item/clothing/accessory/holster, -/obj/item/grenade/chem_grenade/metalfoam, -/obj/item/card/mining_access_card, -/obj/machinery/airalarm/directional/west, -/obj/item/tank/jetpack/suit, -/obj/item/radio/headset/syndicate/alt, -/turf/open/floor/carpet/red, -/area/ship/cargo/office) "Wc" = ( /obj/structure/table, /obj/item/modular_computer/laptop/preset/civilian, @@ -3006,6 +2923,21 @@ /obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, /turf/open/floor/plating, /area/ship/hallway/central) +"We" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 20 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/dorm) "Wp" = ( /obj/effect/turf_decal/industrial/warning, /obj/machinery/door/firedoor/border_only, @@ -3025,20 +2957,6 @@ }, /turf/open/floor/plasteel/mono/dark, /area/ship/cargo) -"Wv" = ( -/obj/structure/table/reinforced, -/obj/item/folder/syndicate/red, -/obj/item/flashlight/lamp{ - pixel_x = -16; - pixel_y = 7 - }, -/obj/effect/turf_decal/borderfloor, -/obj/item/stamp/hos{ - name = "captain's rubber stamp" - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/tech/grid, -/area/ship/bridge) "WN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 6 @@ -3062,15 +2980,26 @@ }, /turf/open/floor/plasteel/tech, /area/ship/crew) -"Xj" = ( -/obj/effect/turf_decal/borderfloor{ - dir = 4 +"Xb" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/sign/poster/contraband/peacemaker{ + pixel_y = 32 + }, +/obj/machinery/rnd/server, +/obj/effect/turf_decal/borderfloorblack{ + dir = 1 }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/bridge) +"Xj" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/computer/crew{ dir = 8 }, +/obj/effect/turf_decal/borderfloorblack{ + dir = 4 + }, /turf/open/floor/plasteel/tech/grid, /area/ship/cargo/office) "Xz" = ( @@ -3097,27 +3026,6 @@ }, /turf/open/floor/carpet/red_gold, /area/ship/bridge) -"XG" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/effect/turf_decal/borderfloor{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/grunge{ - name = "Foreman's Office" - }, -/turf/open/floor/plasteel/tech, -/area/ship/cargo/office) "XO" = ( /obj/effect/turf_decal/industrial/outline, /obj/effect/decal/cleanable/dirt, @@ -3146,7 +3054,7 @@ dir = 1 }, /obj/item/wrench/syndie, -/turf/open/floor/plasteel/tech/techmaint, +/turf/open/floor/plasteel/tech, /area/ship/maintenance/port) "XQ" = ( /obj/structure/cable{ @@ -3164,10 +3072,61 @@ }, /turf/open/floor/plasteel/tech, /area/ship/cargo) -"XZ" = ( -/obj/structure/sign/number/nine, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/maintenance/fore) +"XR" = ( +/obj/structure/closet/secure_closet{ + anchored = 1; + icon_state = "syndicate"; + name = "explosives locker"; + req_access = "list(56, 20)" + }, +/obj/structure/sign/warning/explosives/alt{ + pixel_x = -32 + }, +/obj/item/storage/backpack/duffelbag/syndie/c4{ + name = "bag of mining charges" + }, +/obj/item/storage/belt/grenade, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/industrial/outline, +/obj/machinery/button/door{ + id = "wreckerarmory"; + name = "armory shutters"; + pixel_y = 23; + req_access = null + }, +/turf/open/floor/mineral/plastitanium, +/area/ship/security/armory) +"XU" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/closet/emcloset/wall{ + pixel_y = 28 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"Yc" = ( +/obj/effect/turf_decal/industrial/outline, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/rack, +/obj/item/pickaxe/drill/jackhammer/old{ + pixel_y = 10 + }, +/obj/item/pickaxe/drill/jackhammer/old, +/turf/open/floor/plasteel/tech/grid, +/area/ship/storage) "Yv" = ( /obj/machinery/nuclearbomb/beer{ desc = "An evidently-decommissioned nuclear warhead. Sloppy paint on the casing declares 'VICTORY OVER NANOTRASEN,' followed by a badly-smudged date of 25-something. A drink tap has been drilled directly into the metal."; @@ -3256,6 +3215,17 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) +"ZL" = ( +/obj/machinery/firealarm/directional/south, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/computer/rdconsole/core{ + dir = 8 + }, +/obj/effect/turf_decal/borderfloorblack{ + dir = 4 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/cargo/office) "ZM" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/industrial/outline, @@ -3298,7 +3268,7 @@ sE "} (2,1,1) = {" nn -JO +BG ir PL SP @@ -3312,10 +3282,10 @@ nn nn nn sE -dr -kr -iQ -iG +nX +dU +pi +BG "} (3,1,1) = {" nn @@ -3343,12 +3313,12 @@ nn iT KJ EL -iu +DW iT iT iT jt -VH +BG jI cH jI @@ -3365,15 +3335,15 @@ iT zQ pz SV -SW -AV +tn +jP iT XO -VR -JF -LU -VQ -el +VX +iL +Yc +Sm +Sa sE DU Ml @@ -3388,17 +3358,17 @@ XP Ki un Ft -Lj +RD QZ Rc Bn Ok QZ QZ -Vx -pT +Fl +nT gM -dF +aH sE "} (7,1,1) = {" @@ -3413,7 +3383,7 @@ iT tx dh Oy -oR +KX jI GV GV @@ -3431,7 +3401,7 @@ uq La Gw iT -zY +pt qO xx rF @@ -3453,7 +3423,7 @@ iT iT iT jI -OJ +JD JP jI jI @@ -3472,15 +3442,15 @@ cs nR uk UX -xQ -Oo +Gj +Tq jT IO -zv +oS UX pu Ay -AP +Ge GV nn Zb @@ -3497,7 +3467,7 @@ rP vi UI vN -Ai +wO UX Ms Sd @@ -3518,7 +3488,7 @@ yd Kn ix vN -gh +TK UX Wc Az @@ -3532,16 +3502,16 @@ nn Zb Zb cs -wA +yG Lv lX Yv -Lg -Vv +cB +ut ob ec WS -MR +We zq Iz GV @@ -3565,35 +3535,35 @@ UX GV GV GV -nu +BG nn Zb "} (15,1,1) = {" nn -Rn +Qz cs cs -MO +XU Uh HJ -kO +XR bJ HJ -nx +Sv bN Zn fL KW -VY +Bv QW nn Zb "} (16,1,1) = {" nn -cs -IK +hD +qt cs ZR iI @@ -3604,7 +3574,7 @@ bV Pn Fr iv -XG +nK Bg jY yn @@ -3624,16 +3594,16 @@ wE Zg oJ nG -My +hc fL Ib -ik +ol yn mL oO "} (18,1,1) = {" -FJ +kR Gm aN Wd @@ -3648,21 +3618,21 @@ yw pP fL Xj -uf +ZL yn Pd mL "} (19,1,1) = {" nn -cs -fA -Ru +hD +xK +AE px -Pw +Th HJ fv -OX +jB HJ cV jH @@ -3676,11 +3646,11 @@ mL "} (20,1,1) = {" nn -xZ +SK Ap Ap TR -sR +yV Ap NF NF @@ -3690,16 +3660,16 @@ SJ Dp dA Dp -DH +hh mL Kb -aI +fC "} (21,1,1) = {" nn -hy -hs -tw +AY +bH +BZ Dq rd Ap @@ -3714,17 +3684,17 @@ ia SE mL Ky -XZ +or "} (22,1,1) = {" nn -En +wp no KA WN -sH +cg Ap -Ln +Af hT PT FQ @@ -3735,15 +3705,15 @@ wP vv mL RE -qs +fg "} (23,1,1) = {" nn -xZ +SK yM mf aF -le +Fq Ap kg gg @@ -3753,26 +3723,26 @@ Tg Qy MP tS -GA +RQ mL VD -aI +fC "} (24,1,1) = {" nn Ap -AK +Xb XA ch -qi +bS Ap NF NF NF -NF +ji so JS -KM +NS sx NN mL @@ -3782,11 +3752,11 @@ mL (25,1,1) = {" nn oz -Wv +FR kM pH ch -JB +oF oz nn nn @@ -3803,8 +3773,8 @@ mL (26,1,1) = {" nn oz -cf -Ma +Rl +Ui ch Nl pI @@ -3823,13 +3793,13 @@ mL "} (27,1,1) = {" nn -Kj +Qz Ap Jv -uO +oQ VC Ap -mm +Qz nn nn nn @@ -3861,5 +3831,5 @@ nn nn nn oO -uP +Qz "} diff --git a/_maps/shuttles/shiptest/syndicate_gorlex_komodo.dmm b/_maps/shuttles/shiptest/syndicate_gorlex_komodo.dmm index c56bb133cf73..291ab059348c 100644 --- a/_maps/shuttles/shiptest/syndicate_gorlex_komodo.dmm +++ b/_maps/shuttles/shiptest/syndicate_gorlex_komodo.dmm @@ -929,16 +929,6 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/ship/hallway/central) -"iL" = ( -/obj/structure/railing/corner{ - dir = 4; - layer = 2.8 - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/stairs{ - dir = 8 - }, -/area/ship/crew/dorm) "iO" = ( /obj/structure/railing{ dir = 4 @@ -949,16 +939,6 @@ /obj/machinery/power/terminal, /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) -"iR" = ( -/obj/machinery/shower{ - pixel_y = 14 - }, -/obj/structure/curtain, -/obj/item/soap/syndie, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/light/small/directional/west, -/turf/open/floor/plasteel/freezer, -/area/ship/hallway/aft) "iX" = ( /obj/machinery/shower{ pixel_y = 14 @@ -1342,6 +1322,16 @@ }, /turf/open/floor/holofloor/wood, /area/ship/bridge) +"mr" = ( +/obj/machinery/shower{ + pixel_y = 14 + }, +/obj/structure/curtain, +/obj/item/soap/syndie, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plasteel/freezer, +/area/ship/hallway/aft) "mv" = ( /obj/machinery/atmospherics/components/unary/shuttle/heater{ dir = 1 @@ -1665,18 +1655,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/plasteel/dark, /area/ship/crew/dorm) -"qt" = ( -/obj/structure/toilet{ - pixel_y = 13 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/light/small/directional/west, -/obj/effect/decal/cleanable/cobweb, -/obj/structure/sign/poster/official/moth/smokey{ - pixel_x = 28 - }, -/turf/open/floor/plasteel/freezer, -/area/ship/hallway/aft) "qu" = ( /obj/effect/turf_decal/industrial/warning{ dir = 8 @@ -1703,6 +1681,16 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/ship/hallway/aft) +"qy" = ( +/obj/structure/railing/corner{ + dir = 4; + layer = 2.8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/stairs{ + dir = 8 + }, +/area/ship/crew/dorm) "qD" = ( /obj/machinery/light/directional/west{ light_color = "#e8eaff" @@ -2192,23 +2180,6 @@ /obj/machinery/vending/medical, /turf/open/floor/mineral/plastitanium, /area/ship/medical) -"uZ" = ( -/obj/machinery/cryopod{ - dir = 8 - }, -/obj/structure/railing{ - dir = 1; - layer = 2.8 - }, -/obj/machinery/computer/cryopod/directional/north{ - pixel_y = 26 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/pod/dark, -/area/ship/crew/dorm) "vg" = ( /obj/effect/turf_decal/industrial/warning{ dir = 8 @@ -2451,6 +2422,18 @@ }, /turf/open/floor/plasteel/tech/grid, /area/ship/maintenance/starboard) +"xP" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = -12; + pixel_y = 2 + }, +/obj/structure/mirror{ + pixel_x = -26 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/freezer, +/area/ship/hallway/aft) "xZ" = ( /obj/effect/turf_decal/industrial/warning{ dir = 5 @@ -3067,6 +3050,18 @@ }, /turf/open/floor/plasteel/tech, /area/ship/engineering) +"Eg" = ( +/obj/structure/toilet{ + pixel_y = 13 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/directional/west, +/obj/effect/decal/cleanable/cobweb, +/obj/structure/sign/poster/official/moth/smokey{ + pixel_x = 28 + }, +/turf/open/floor/plasteel/freezer, +/area/ship/hallway/aft) "Eh" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/hatch{ @@ -3285,6 +3280,14 @@ }, /turf/open/floor/plating, /area/ship/maintenance/port) +"Gl" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/railing{ + dir = 1; + layer = 2.8 + }, +/turf/open/floor/pod/dark, +/area/ship/crew/dorm) "Gp" = ( /obj/effect/turf_decal/industrial/warning{ dir = 1 @@ -3311,14 +3314,6 @@ }, /turf/open/floor/plating, /area/ship/maintenance/port) -"GS" = ( -/obj/machinery/porta_turret/centcom_shuttle/ballistic{ - dir = 6; - name = "ship turret"; - on = 0 - }, -/turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) "GT" = ( /obj/machinery/light/directional/north, /obj/effect/turf_decal/industrial/warning{ @@ -3373,14 +3368,6 @@ icon_state = "platingdmg3" }, /area/ship/maintenance/starboard) -"Hr" = ( -/obj/machinery/porta_turret/centcom_shuttle/ballistic{ - dir = 5; - name = "ship turret"; - on = 0 - }, -/turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) "Hv" = ( /obj/structure/railing/corner{ dir = 8 @@ -3398,6 +3385,23 @@ /obj/machinery/power/terminal, /turf/open/floor/plasteel/tech, /area/ship/engineering) +"Hy" = ( +/obj/machinery/cryopod{ + dir = 8 + }, +/obj/structure/railing{ + dir = 1; + layer = 2.8 + }, +/obj/machinery/computer/cryopod/directional/north{ + pixel_y = 26 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/pod/dark, +/area/ship/crew/dorm) "HB" = ( /obj/structure/railing{ dir = 8 @@ -4180,6 +4184,10 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/ship/hallway/central) +"OP" = ( +/obj/machinery/porta_turret/ship/ballistic, +/turf/closed/wall/mineral/plastitanium, +/area/ship/bridge) "OQ" = ( /turf/closed/wall/mineral/plastitanium, /area/ship/maintenance/starboard) @@ -4362,14 +4370,6 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/ship/hallway/central) -"QU" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/railing{ - dir = 1; - layer = 2.8 - }, -/turf/open/floor/pod/dark, -/area/ship/crew/dorm) "Rk" = ( /obj/structure/sign/syndicate, /turf/closed/wall/mineral/plastitanium, @@ -4603,14 +4603,6 @@ }, /turf/open/floor/plasteel/tech/grid, /area/ship/maintenance/port) -"Te" = ( -/obj/machinery/porta_turret/centcom_shuttle/ballistic{ - dir = 10; - name = "ship turret"; - on = 0 - }, -/turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) "TB" = ( /obj/effect/turf_decal/siding/wood{ dir = 10 @@ -4770,14 +4762,6 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/ship/engineering) -"UN" = ( -/obj/machinery/porta_turret/centcom_shuttle/ballistic{ - dir = 9; - name = "ship turret"; - on = 0 - }, -/turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) "UO" = ( /obj/effect/turf_decal/industrial/warning, /obj/effect/turf_decal/industrial/warning{ @@ -5273,18 +5257,6 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/ship/hallway/central) -"Zf" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = -12; - pixel_y = 2 - }, -/obj/structure/mirror{ - pixel_x = -26 - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/freezer, -/area/ship/hallway/aft) "Zu" = ( /obj/structure/railing/corner{ dir = 4 @@ -5383,7 +5355,7 @@ CM CM CM CM -UN +OP gN gN gN @@ -5391,7 +5363,7 @@ gN gN gN gN -Te +OP CM CM CM @@ -5403,14 +5375,14 @@ CM CM CM CM -UN +OP Vk Vk Rk jr Yl Mb -Te +OP CM CM CM @@ -5419,7 +5391,7 @@ hY zV zV hY -Te +OP CM CM "} @@ -5444,7 +5416,7 @@ Aj Aj ti ti -UN +OP lu lu Ep @@ -5670,10 +5642,10 @@ Ye OG Iv VR -qt -Zf +Eg +xP VR -iR +mr Ep Ep Ep @@ -5685,7 +5657,7 @@ vC CP sq hY -Te +OP "} (9,1,1) = {" ME @@ -5861,7 +5833,7 @@ uR lV sq hY -GS +OP "} (13,1,1) = {" CM @@ -5940,7 +5912,7 @@ gE Xz gd CL -iL +qy DQ CL zk @@ -5984,7 +5956,7 @@ gE is gJ CL -QU +Gl Xg CL tT @@ -6028,7 +6000,7 @@ gE NI MJ CL -uZ +Hy rA CL xC @@ -6060,7 +6032,7 @@ TR TR CM CM -Hr +OP lu lu gE @@ -6087,7 +6059,7 @@ CM CM CM CM -Hr +OP OQ OQ OQ @@ -6095,7 +6067,7 @@ OQ OQ OQ OQ -GS +OP CM CM CM @@ -6107,7 +6079,7 @@ CM CM CM CM -Hr +OP tf tf tf @@ -6115,7 +6087,7 @@ tf gE io io -GS +OP CM CM CM @@ -6123,7 +6095,7 @@ hY hY hY hY -GS +OP CM CM "} diff --git a/bin/build.cmd b/bin/build.cmd new file mode 100644 index 000000000000..98c2ef45e15b --- /dev/null +++ b/bin/build.cmd @@ -0,0 +1,2 @@ +@echo off +call "%~dp0\..\tools\build\build.bat" --wait-on-error build %* diff --git a/bin/clean.cmd b/bin/clean.cmd new file mode 100644 index 000000000000..8eacd92ebd7a --- /dev/null +++ b/bin/clean.cmd @@ -0,0 +1,2 @@ +@echo off +call "%~dp0\..\tools\build\build.bat" --wait-on-error clean-all %* diff --git a/bin/server.cmd b/bin/server.cmd new file mode 100644 index 000000000000..c6e6642baf48 --- /dev/null +++ b/bin/server.cmd @@ -0,0 +1,2 @@ +@echo off +call "%~dp0\..\tools\build\build.bat" --wait-on-error server %* diff --git a/bin/test.cmd b/bin/test.cmd new file mode 100644 index 000000000000..a76a9c6745c2 --- /dev/null +++ b/bin/test.cmd @@ -0,0 +1,2 @@ +@echo off +call "%~dp0\..\tools\build\build.bat" --wait-on-error dm-test %* diff --git a/bin/tgfont.cmd b/bin/tgfont.cmd new file mode 100644 index 000000000000..b768c81d653a --- /dev/null +++ b/bin/tgfont.cmd @@ -0,0 +1,2 @@ +@echo off +call "%~dp0\..\tools\build\build.bat" --wait-on-error tg-font %* diff --git a/bin/tgui-bench.cmd b/bin/tgui-bench.cmd new file mode 100644 index 000000000000..333115f79548 --- /dev/null +++ b/bin/tgui-bench.cmd @@ -0,0 +1,3 @@ +@echo off +call "%~dp0\..\tools\build\build.bat" --wait-on-error tgui-bench %* +pause diff --git a/bin/tgui-build.cmd b/bin/tgui-build.cmd new file mode 100644 index 000000000000..7804fc6daaad --- /dev/null +++ b/bin/tgui-build.cmd @@ -0,0 +1,2 @@ +@echo off +call "%~dp0\..\tools\build\build.bat" --wait-on-error tgui tgui-lint tgui-test %* diff --git a/bin/tgui-dev.cmd b/bin/tgui-dev.cmd new file mode 100644 index 000000000000..25ff3495d429 --- /dev/null +++ b/bin/tgui-dev.cmd @@ -0,0 +1,2 @@ +@echo off +call "%~dp0\..\tools\build\build.bat" --wait-on-error tgui-dev %* diff --git a/bin/tgui-sonar.cmd b/bin/tgui-sonar.cmd new file mode 100644 index 000000000000..e083f65362ac --- /dev/null +++ b/bin/tgui-sonar.cmd @@ -0,0 +1,2 @@ +@echo off +call "%~dp0\..\tools\build\build.bat" --wait-on-error tgui-sonar %* diff --git a/check_regex.yaml b/check_regex.yaml index d413ba79dd32..86faec7e1091 100644 --- a/check_regex.yaml +++ b/check_regex.yaml @@ -29,16 +29,16 @@ standards: - exactly: [1, "/area text paths", '"/area'] - exactly: [17, "/datum text paths", '"/datum'] - exactly: [4, "/mob text paths", '"/mob'] - - exactly: [53, "/obj text paths", '"/obj'] + - exactly: [51, "/obj text paths", '"/obj'] - exactly: [0, "/turf text paths", '"/turf'] - - exactly: [118, "text2path uses", "text2path"] + - exactly: [116, "text2path uses", "text2path"] - exactly: [18, "world<< uses", 'world[ \t]*<<'] - exactly: [0, "world.log<< uses", 'world.log[ \t]*<<'] - exactly: [ - 292, + 291, "non-bitwise << uses", '(?= CONFIG_GET(number/max_shuttle_count))) + return FALSE + return TRUE + +/// Returns the number of ships on the overmap that count against the spawn cap. +/datum/controller/subsystem/overmap/proc/get_num_cap_ships() + var/ship_count = 0 + for(var/datum/overmap/ship/controlled/Ship as anything in controlled_ships) + if(!Ship.source_template || Ship.source_template.category != "subshuttles") + ship_count++ + return ship_count + /datum/controller/subsystem/overmap/Recover() if(istype(SSovermap.overmap_objects)) overmap_objects = SSovermap.overmap_objects diff --git a/code/controllers/subsystem/overmap_move.dm b/code/controllers/subsystem/overmap_move.dm new file mode 100644 index 000000000000..edb32e33bb8d --- /dev/null +++ b/code/controllers/subsystem/overmap_move.dm @@ -0,0 +1,3 @@ +TIMER_SUBSYSTEM_DEF(overmap_movement) + name = "Overmap Movement" + priority = FIRE_PRIORITY_OVERMAP_MOVEMENT diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index 34a2133e31fb..a2609795d503 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -404,7 +404,7 @@ SUBSYSTEM_DEF(shuttle) L["file_name"] = S.file_name L["category"] = S.category L["description"] = S.description - L["admin_notes"] = S.admin_notes + L["tags"] = S.tags templates[S.category]["templates"] += list(L) diff --git a/code/controllers/subsystem/sound_loops.dm b/code/controllers/subsystem/sound_loops.dm new file mode 100644 index 000000000000..46b916603f94 --- /dev/null +++ b/code/controllers/subsystem/sound_loops.dm @@ -0,0 +1,3 @@ +TIMER_SUBSYSTEM_DEF(sound_loops) + name = "Sound Loops" + priority = FIRE_PRIORITY_SOUND_LOOPS diff --git a/code/controllers/subsystem/traumas.dm b/code/controllers/subsystem/traumas.dm index 6f176a4421ed..d4cc5483931c 100644 --- a/code/controllers/subsystem/traumas.dm +++ b/code/controllers/subsystem/traumas.dm @@ -180,8 +180,7 @@ SUBSYSTEM_DEF(traumas) "robots" = typecacheof(list(/datum/species/android, /datum/species/ipc)), "the supernatural" = typecacheof(list(/datum/species/golem/runic)), "aliens" = typecacheof(list( - /datum/species/abductor, /datum/species/jelly, /datum/species/pod, - /datum/species/shadow, /datum/species/squid)), + /datum/species/abductor, /datum/species/jelly, /datum/species/pod)), "spiders" = typecacheof(list(/datum/species/spider)) ) diff --git a/code/datums/atmosphere/planetary.dm b/code/datums/atmosphere/planetary.dm index 280fe3c1cb3e..85bbf13c52a9 100644 --- a/code/datums/atmosphere/planetary.dm +++ b/code/datums/atmosphere/planetary.dm @@ -21,8 +21,13 @@ minimum_pressure = WARNING_LOW_PRESSURE + 10 maximum_pressure = LAVALAND_EQUIPMENT_EFFECT_PRESSURE - 1 - minimum_temp = T20C + 80 - maximum_temp = T20C + 120 + // temperature range USED to be 100-140 C. this was bad, because + // fires start at 100C; occasionally, there would be a perma-plasmafire, too tiny to notice. + // even worse, occasionally there would be a perma-TRITFIRE, if oxygen + // concentration was high enough. this caused a bunch of lag and added nothing to the game whatsoever + // thus, the temperatures were reduced to 70-90 C + minimum_temp = T20C + 50 + maximum_temp = T20C + 70 /datum/atmosphere/icemoon id = ICEMOON_DEFAULT_ATMOS @@ -48,6 +53,46 @@ minimum_temp = 180 maximum_temp = 180 +/datum/atmosphere/gas_giant + id = GAS_GIANT_ATMOS + + base_gases = list( + GAS_N2=10, + GAS_NITROUS=10, + ) + normal_gases = list( + GAS_O2=5, + GAS_H2O=7, + GAS_N2=5, + GAS_NITROUS=7, + GAS_CO2=5, + ) + restricted_gases = list( + GAS_NITROUS=7, + ) + restricted_chance = 1 + + minimum_pressure = WARNING_HIGH_PRESSURE + 175 + maximum_pressure = HAZARD_HIGH_PRESSURE + 1000 + + minimum_temp = 30 //number i pulled out of my ass + maximum_temp = 120 + +/datum/atmosphere/gas_giant/plasma + id = PLASMA_GIANT_ATMOS + + base_gases = list( + GAS_PLASMA=10, + ) + normal_gases = list( + GAS_PLASMA=10, + GAS_CO2=5, + ) + restricted_gases = list( + GAS_PLASMA=0.1, + ) + restricted_chance = 1 + /datum/atmosphere/wasteplanet id = WASTEPLANET_DEFAULT_ATMOS diff --git a/code/datums/components/admin_popup.dm b/code/datums/components/admin_popup.dm new file mode 100644 index 000000000000..65b97e09b1a2 --- /dev/null +++ b/code/datums/components/admin_popup.dm @@ -0,0 +1,125 @@ +/// Applied to clients when they receive an admin popup, alerting them to +/// their ticket. +/datum/component/admin_popup + /// The user's most active ticket. If this is resolved, closed, or replied to, + /// then the component will delete itself. + var/datum/admin_help/ticket + + var/atom/movable/screen/admin_popup/admin_popup + +/datum/component/admin_popup/Initialize(datum/admin_help/ticket) + if (!istype(parent, /client)) + return COMPONENT_INCOMPATIBLE + + if (!istype(ticket)) + return COMPONENT_INCOMPATIBLE + + create_notice() + + RegisterSignal( + ticket, + list( + COMSIG_ADMIN_HELP_MADE_INACTIVE, + COMSIG_ADMIN_HELP_REPLIED, + COMSIG_PARENT_QDELETING, + ), + .proc/delete_self, + ) + +/datum/component/admin_popup/Destroy(force, silent) + var/client/parent_client = parent + + parent_client?.screen -= admin_popup + QDEL_NULL(admin_popup) + + if (!QDELETED(ticket)) + UnregisterSignal(ticket, list( + COMSIG_ADMIN_HELP_MADE_INACTIVE, + COMSIG_ADMIN_HELP_REPLIED, + COMSIG_PARENT_QDELETING, + )) + + ticket = null + + return ..() + +/datum/component/admin_popup/proc/create_notice() + if(admin_popup) + qdel(admin_popup) + admin_popup = new + + var/client/parent_client = parent + admin_popup.maptext_width = getviewsize(parent_client.view_size.getView())[1] * world.icon_size + parent_client.screen += admin_popup + +/datum/component/admin_popup/proc/delete_self() + SIGNAL_HANDLER + qdel(src) + +/// The UI element for admin popups +/atom/movable/screen/admin_popup + icon = null + icon_state = null + plane = ABOVE_HUD_PLANE + layer = ADMIN_POPUP_LAYER + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + screen_loc = "TOP-5,LEFT" + maptext_height = 480 + maptext_width = 480 + maptext = "" + + var/static/list/colors = list( + COLOR_RED, + COLOR_ORANGE, + COLOR_YELLOW, + COLOR_LIME, + COLOR_CYAN, + COLOR_PURPLE, + ) + + /// The last color chosen in the animation, sourced from the static list colors. + var/last_color_index = 0 + + /// The `world.time` when the last color update occurred. + var/last_update_time = 0 + +/atom/movable/screen/admin_popup/New(loc, ...) + . = ..() + + START_PROCESSING(SSobj, src) + update_text() + +/atom/movable/screen/admin_popup/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + +/atom/movable/screen/admin_popup/process(delta_time) + update_text() + +/atom/movable/screen/admin_popup/proc/update_text() + // Even if processing time changes, we want this to remain slow. + // We want to pester them into reading their ticket, not give them a seizure! + if (world.time - last_update_time < 2 SECONDS) + return + + last_color_index = (last_color_index % colors.len) + 1 + + var/message = "" + message += "HEY! An admin is trying to talk to you!
Check your chat window, and click their name to respond!" + message += "
" + + maptext = MAPTEXT(message) + last_update_time = world.time + +/// Tries to give the target an admin popup. +/// If it fails, will send the error to the passed admin. +/proc/give_admin_popup(client/target, client/admin, message) + log_admin("[key_name(admin)] sent an admin popup to [key_name(target)].") + + var/datum/admin_help/current_ticket = target.current_ticket + if (!current_ticket) + to_chat(admin, span_warning("[key_name(target)] had no active ahelp, aborting.")) + return + + admin.cmd_admin_pm(target, message) + target.AddComponent(/datum/component/admin_popup, current_ticket) diff --git a/code/datums/components/plumbing/_plumbing.dm b/code/datums/components/plumbing/_plumbing.dm index 1fa04472dc6a..67697400ebd1 100644 --- a/code/datums/components/plumbing/_plumbing.dm +++ b/code/datums/components/plumbing/_plumbing.dm @@ -161,6 +161,7 @@ if(D & (demand_connects | supply_connects)) for(var/obj/machinery/duct/duct in get_step(parent, D)) duct.remove_connects(turn(D, 180)) + duct.neighbours.Remove(parent) duct.update_icon() ///settle wherever we are, and start behaving like a piece of plumbing diff --git a/code/datums/dna.dm b/code/datums/dna.dm index 718eba629bf8..60e74d97fb7d 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -320,7 +320,7 @@ stored_dna.species = mrace //not calling any species update procs since we're a brain, not a monkey/human -/mob/living/carbon/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE) +/mob/living/carbon/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE, robotic = FALSE) if(mrace && has_dna()) var/datum/species/new_race if(ispath(mrace)) @@ -345,14 +345,15 @@ quirks_to_remove -= quirks_resolved for(var/quirk_type in quirks_to_remove) remove_quirk(quirk_type) - dna.species.on_species_gain(src, old_species, pref_load) + dna.species.on_species_gain(src, old_species, pref_load, robotic) if(ishuman(src)) qdel(language_holder) var/species_holder = initial(mrace.species_language_holder) language_holder = new species_holder(src) update_atom_languages() -/mob/living/carbon/human/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE) +/mob/living/carbon/human/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE, robotic = FALSE) + robotic ||= fbp ..() if(icon_update) update_hair() diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm index d72caab3ba2a..f8e05e9a38b6 100644 --- a/code/datums/emotes.dm +++ b/code/datums/emotes.dm @@ -26,7 +26,7 @@ var/vary = FALSE //used for the honk borg emote var/only_forced_audio = FALSE //can only code call this event instead of the player. var/cooldown = 0.8 SECONDS - var/static/regex/stop_bad_mime = regex(@"says|exclaims|yells|asks") //WS Edit + var/static/regex/stop_bad_mime = regex(@"says|exclaims|yells|asks") /datum/emote/New() if (ispath(mob_type_allowed_typecache)) diff --git a/code/datums/looping_sounds/_looping_sound.dm b/code/datums/looping_sounds/_looping_sound.dm index 576a2290a548..c1fb10f75436 100644 --- a/code/datums/looping_sounds/_looping_sound.dm +++ b/code/datums/looping_sounds/_looping_sound.dm @@ -72,7 +72,7 @@ if(!timerid) return on_stop() - deltimer(timerid) + deltimer(timerid, SSsound_loops) timerid = null /datum/looping_sound/proc/sound_loop(starttime) @@ -82,7 +82,7 @@ if(!chance || prob(chance)) play(get_sound(starttime)) if(!timerid) - timerid = addtimer(CALLBACK(src, .proc/sound_loop, world.time), mid_length, TIMER_CLIENT_TIME | TIMER_STOPPABLE | TIMER_LOOP) + timerid = addtimer(CALLBACK(src, .proc/sound_loop, world.time), mid_length, TIMER_CLIENT_TIME | TIMER_STOPPABLE | TIMER_LOOP, SSsound_loops) /datum/looping_sound/proc/play(soundfile, volume_override) var/list/atoms_cache = output_atoms @@ -107,7 +107,7 @@ if(start_sound) play(start_sound, start_volume) start_wait = start_length - addtimer(CALLBACK(src, .proc/sound_loop), start_wait, TIMER_CLIENT_TIME) + addtimer(CALLBACK(src, .proc/sound_loop), start_wait, TIMER_CLIENT_TIME, SSsound_loops) /datum/looping_sound/proc/on_stop() if(end_sound) diff --git a/code/datums/mapgen/planetary/AsteroidGenerator.dm b/code/datums/mapgen/planetary/AsteroidGenerator.dm new file mode 100644 index 000000000000..c2f7a5340097 --- /dev/null +++ b/code/datums/mapgen/planetary/AsteroidGenerator.dm @@ -0,0 +1,171 @@ +/datum/map_generator/planet_generator/asteroid + mountain_height = 0.65 + perlin_zoom = 20 + + initial_closed_chance = 45 + smoothing_iterations = 20 + birth_limit = 4 + death_limit = 3 + + primary_area_type = /area/overmap_encounter/planetoid/asteroid + + biome_table = list( + BIOME_COLDEST = list( + BIOME_LOWEST_HUMIDITY = /datum/biome/asteroid, + BIOME_LOW_HUMIDITY = /datum/biome/asteroid, + BIOME_MEDIUM_HUMIDITY = /datum/biome/asteroid, + BIOME_HIGH_HUMIDITY = /datum/biome/asteroid, + BIOME_HIGHEST_HUMIDITY = /datum/biome/asteroid + ), + BIOME_COLD = list( + BIOME_LOWEST_HUMIDITY = /datum/biome/asteroid, + BIOME_LOW_HUMIDITY = /datum/biome/asteroid, + BIOME_MEDIUM_HUMIDITY = /datum/biome/asteroid, + BIOME_HIGH_HUMIDITY = /datum/biome/asteroid, + BIOME_HIGHEST_HUMIDITY = /datum/biome/asteroid + ), + BIOME_WARM = list( + BIOME_LOWEST_HUMIDITY = /datum/biome/asteroid, + BIOME_LOW_HUMIDITY = /datum/biome/asteroid, + BIOME_MEDIUM_HUMIDITY = /datum/biome/asteroid/carp, + BIOME_HIGH_HUMIDITY = /datum/biome/asteroid/carp, + BIOME_HIGHEST_HUMIDITY = /datum/biome/asteroid + ), + BIOME_TEMPERATE = list( + BIOME_LOWEST_HUMIDITY = /datum/biome/asteroid, + BIOME_LOW_HUMIDITY = /datum/biome/asteroid/carp, + BIOME_MEDIUM_HUMIDITY = /datum/biome/asteroid/carp, + BIOME_HIGH_HUMIDITY = /datum/biome/asteroid/carp, + BIOME_HIGHEST_HUMIDITY = /datum/biome/asteroid/carp + ), + BIOME_HOT = list( + BIOME_LOWEST_HUMIDITY = /datum/biome/asteroid, + BIOME_LOW_HUMIDITY = /datum/biome/asteroid/carp, + BIOME_MEDIUM_HUMIDITY = /datum/biome/asteroid/carp, + BIOME_HIGH_HUMIDITY = /datum/biome/asteroid/carp, + BIOME_HIGHEST_HUMIDITY = /datum/biome/asteroid/carp + ), + BIOME_HOTTEST = list( + BIOME_LOWEST_HUMIDITY = /datum/biome/asteroid/carp, + BIOME_LOW_HUMIDITY = /datum/biome/asteroid, + BIOME_MEDIUM_HUMIDITY = /datum/biome/asteroid, + BIOME_HIGH_HUMIDITY = /datum/biome/asteroid/carp, + BIOME_HIGHEST_HUMIDITY = /datum/biome/asteroid/carp //gee what a diverse place + ) + ) + + cave_biome_table = list( + BIOME_COLDEST_CAVE = list( + BIOME_LOWEST_HUMIDITY = /datum/biome/cave/asteroid/vanilla, + BIOME_LOW_HUMIDITY = /datum/biome/cave/asteroid/ice, + BIOME_MEDIUM_HUMIDITY = /datum/biome/cave/asteroid/ice, + BIOME_HIGH_HUMIDITY = /datum/biome/cave/asteroid/ice, + BIOME_HIGHEST_HUMIDITY = /datum/biome/cave/asteroid/ice + ), + BIOME_COLD_CAVE = list( + BIOME_LOWEST_HUMIDITY = /datum/biome/cave/asteroid/vanilla, + BIOME_LOW_HUMIDITY = /datum/biome/cave/asteroid/vanilla, + BIOME_MEDIUM_HUMIDITY = /datum/biome/cave/asteroid/vanilla, + BIOME_HIGH_HUMIDITY = /datum/biome/cave/asteroid/vanilla, + BIOME_HIGHEST_HUMIDITY = /datum/biome/cave/asteroid/ice + ), + BIOME_WARM_CAVE = list( + BIOME_LOWEST_HUMIDITY = /datum/biome/cave/asteroid/vanilla, + BIOME_LOW_HUMIDITY = /datum/biome/cave/asteroid/vanilla, + BIOME_MEDIUM_HUMIDITY = /datum/biome/cave/asteroid/vanilla, + BIOME_HIGH_HUMIDITY = /datum/biome/cave/asteroid/carp_den, + BIOME_HIGHEST_HUMIDITY = /datum/biome/cave/asteroid/carp_den + ), + BIOME_HOT_CAVE = list( + BIOME_LOWEST_HUMIDITY = /datum/biome/cave/asteroid/vanilla, + BIOME_LOW_HUMIDITY = /datum/biome/cave/asteroid/vanilla, + BIOME_MEDIUM_HUMIDITY = /datum/biome/cave/asteroid/carp_den, + BIOME_HIGH_HUMIDITY = /datum/biome/cave/asteroid/carp_den, + BIOME_HIGHEST_HUMIDITY = /datum/biome/cave/asteroid/carp_den + ) + ) + +/datum/biome/asteroid + open_turf_types = list( + /turf/open/space = 1 + ) + +/datum/biome/asteroid/carp + mob_spawn_list = list( + /mob/living/simple_animal/hostile/carp = 1 + ) + +/datum/biome/cave/asteroid + closed_turf_types = list( + /turf/closed/mineral/random = 1 + ) + open_turf_types = list( + /turf/open/floor/plating/asteroid/airless = 1 + ) + +/datum/biome/cave/asteroid/vanilla + flora_spawn_list = list( + /obj/structure/flora/ash/space/voidmelon = 1, + /obj/structure/flora/rock = 1, + /obj/structure/flora/rock/pile = 1 + ) + + feature_spawn_list = list( + /obj/structure/geyser/random = 1, + /obj/structure/spawner/mining/goliath = 1, + /obj/structure/spawner/mining = 1, + /obj/structure/spawner/mining/hivelord = 1 + ) + + mob_spawn_list = list( + /mob/living/simple_animal/hostile/asteroid/goliath = 25, + /mob/living/simple_animal/hostile/asteroid/basilisk = 25, + /mob/living/simple_animal/hostile/asteroid/hivelord = 25, + /mob/living/simple_animal/hostile/asteroid/goldgrub = 10 + ) + + flora_spawn_chance = 2 + feature_spawn_chance = 1 + mob_spawn_chance = 6 + +/datum/biome/cave/asteroid/ice + open_turf_types = list( + /turf/open/floor/plating/ice/airless = 1 + ) + + mob_spawn_list = list( + /mob/living/simple_animal/hostile/asteroid/goliath = 25, + /mob/living/simple_animal/hostile/asteroid/basilisk = 25, + /mob/living/simple_animal/hostile/asteroid/hivelord = 25, + /mob/living/simple_animal/hostile/asteroid/goldgrub = 10 + ) + + mob_spawn_chance = 2 + +/datum/biome/cave/asteroid/carp_den + closed_turf_types = list( + /turf/closed/mineral/random = 5 + ) + open_turf_types = list( + /turf/open/floor/plating/asteroid/airless = 1 + ) + + flora_spawn_list = list( + /obj/structure/flora/ash/space/voidmelon = 9, + /obj/structure/flora/rock = 1, + /obj/structure/flora/rock/pile = 1 + ) + + feature_spawn_list = list( + /obj/structure/geyser/random = 1, + /obj/structure/spawner/mining/carp = 1 + ) + + mob_spawn_list = list( + /mob/living/simple_animal/hostile/carp = 25, + /mob/living/simple_animal/hostile/carp/megacarp = 30 + ) + + flora_spawn_chance = 15 + feature_spawn_chance = 10 + mob_spawn_chance = 18 diff --git a/code/datums/mapgen/planetary/JungleGenerator.dm b/code/datums/mapgen/planetary/JungleGenerator.dm index b40f26b12a88..86c40769cd11 100644 --- a/code/datums/mapgen/planetary/JungleGenerator.dm +++ b/code/datums/mapgen/planetary/JungleGenerator.dm @@ -180,7 +180,8 @@ feature_spawn_chance = 0.5 feature_spawn_list = list( /obj/item/pickaxe/rusted = 1, - /obj/structure/spawner/ice_moon = 1 + /obj/structure/spawner/ice_moon = 1, + /obj/effect/spawner/lootdrop/anomaly/jungle = 1 ) /datum/biome/cave/jungle/dirt diff --git a/code/datums/mapgen/planetary/LavaGenerator.dm b/code/datums/mapgen/planetary/LavaGenerator.dm index 0305fe7b6480..d154063bdc17 100644 --- a/code/datums/mapgen/planetary/LavaGenerator.dm +++ b/code/datums/mapgen/planetary/LavaGenerator.dm @@ -98,7 +98,9 @@ feature_spawn_list = list( /obj/structure/flora/rock/hell = 5, /obj/structure/elite_tumor = 1, - /obj/structure/geyser/random = 1 + /obj/structure/geyser/random = 1, + /obj/effect/spawner/lootdrop/anomaly/lava = 0.5 + ) mob_spawn_chance = 4 mob_spawn_list = list( @@ -157,8 +159,9 @@ ) feature_spawn_chance = 5 feature_spawn_list = list( - /obj/structure/flora/tree/dead/barren = 1, - /obj/structure/flora/tree/dead/tall/grey = 1, + /obj/structure/flora/tree/dead/barren = 50, + /obj/structure/flora/tree/dead/tall/grey = 45, + /obj/effect/spawner/lootdrop/anomaly/lava = 5 ) /datum/biome/lavaland/plains/dense/mixed diff --git a/code/datums/mapgen/planetary/RockGenerator.dm b/code/datums/mapgen/planetary/RockGenerator.dm index 29836edc6187..5496984db43a 100644 --- a/code/datums/mapgen/planetary/RockGenerator.dm +++ b/code/datums/mapgen/planetary/RockGenerator.dm @@ -83,8 +83,13 @@ /datum/biome/rock open_turf_types = list(/turf/open/floor/plating/asteroid/rockplanet/lit = 1) - feature_spawn_chance = 0.1 - feature_spawn_list = list(/obj/structure/geyser/random = 1, /obj/structure/elite_tumor = 2) + feature_spawn_chance = 0.25 + feature_spawn_list = list( + /obj/structure/geyser/random = 8, + /obj/structure/elite_tumor = 4, + /obj/effect/spawner/lootdrop/anomaly/rock = 1, + /obj/effect/spawner/lootdrop/anomaly/big = 0.1 //get out of here stalker + ) flora_spawn_chance = 5 mob_spawn_chance = 3 @@ -105,7 +110,9 @@ ) /datum/biome/rock/icecap - open_turf_types = list(/turf/open/floor/plating/asteroid/snow/lit/rockplanet = 1, /turf/open/floor/plating/asteroid/snow/lit/rockplanet = 5) + open_turf_types = list( + /turf/open/floor/plating/asteroid/snow/lit/rockplanet = 1, + /turf/open/floor/plating/asteroid/snow/lit/rockplanet = 5) flora_spawn_chance = 1 mob_spawn_chance = 2 @@ -138,8 +145,13 @@ /obj/structure/flora/ash/fern = 2, /obj/structure/flora/ash/puce = 1, ) - feature_spawn_chance = 0.3 - feature_spawn_list = list(/obj/structure/geyser/random = 1, /obj/structure/elite_tumor = 2, /obj/structure/spawner/ice_moon/rockplanet = 4) + feature_spawn_chance = 0.5 + feature_spawn_list = list( + /obj/structure/geyser/random = 2, + /obj/structure/elite_tumor = 1, + /obj/structure/spawner/ice_moon/rockplanet = 4, + /obj/effect/spawner/lootdrop/anomaly/rock/cave = 1, + ) mob_spawn_chance = 6 mob_spawn_list = list( /mob/living/simple_animal/hostile/netherworld/asteroid = 20, diff --git a/code/datums/mapgen/planetary/SandGenerator.dm b/code/datums/mapgen/planetary/SandGenerator.dm index de79ace8d68d..e50223744a7c 100644 --- a/code/datums/mapgen/planetary/SandGenerator.dm +++ b/code/datums/mapgen/planetary/SandGenerator.dm @@ -90,7 +90,11 @@ /obj/structure/flora/ash/stem_shroom = 4 , ) feature_spawn_chance = 0.1 - feature_spawn_list = list(/obj/structure/geyser/random = 1, /obj/structure/elite_tumor = 2) + feature_spawn_list = list( + /obj/structure/geyser/random = 8, + /obj/structure/elite_tumor = 4, + /obj/effect/spawner/lootdrop/anomaly/sand = 1, + ) mob_spawn_chance = 4 mob_spawn_list = list( /mob/living/simple_animal/hostile/asteroid/goliath/beast/random = 50, @@ -100,7 +104,13 @@ ) /datum/biome/sand/wasteland - open_turf_types = list(/turf/open/floor/plating/asteroid/whitesands/lit = 50, /turf/open/floor/plating/asteroid/whitesands/dried/lit = 40, /turf/closed/mineral/random/whitesands = 20, /turf/closed/wall/mineral/titanium/survival/pod = 1, /turf/closed/wall/rust = 1) + open_turf_types = list( + /turf/open/floor/plating/asteroid/whitesands/lit = 50, + /turf/open/floor/plating/asteroid/whitesands/dried/lit = 40, + /turf/closed/mineral/random/whitesands = 20, + /turf/closed/wall/mineral/titanium/survival/pod = 1, + /turf/closed/wall/rust = 1 + ) flora_spawn_chance = 20 flora_spawn_list = list( /obj/structure/flora/ash/leaf_shroom = 4, @@ -170,7 +180,10 @@ /datum/biome/cave/sand closed_turf_types = list(/turf/closed/mineral/random/whitesands = 1) - open_turf_types = list(/turf/open/floor/plating/asteroid/whitesands = 5, /turf/open/floor/plating/asteroid/whitesands/dried = 1) + open_turf_types = list( + /turf/open/floor/plating/asteroid/whitesands = 5, + /turf/open/floor/plating/asteroid/whitesands/dried = 1 + ) flora_spawn_chance = 4 flora_spawn_list = list( /obj/structure/flora/rock = 4, @@ -178,7 +191,11 @@ /obj/structure/flora/ash/fern = 2, /obj/structure/flora/ash/puce = 1, ) - feature_spawn_list = list(/obj/structure/geyser/random = 1, /obj/structure/elite_tumor = 2) + feature_spawn_list = list( + /obj/structure/geyser/random = 4, + /obj/structure/elite_tumor = 4, + /obj/effect/spawner/lootdrop/anomaly/sand/cave = 1 + ) mob_spawn_chance = 4 mob_spawn_list = list( /mob/living/simple_animal/hostile/asteroid/goliath/beast/random = 50, diff --git a/code/datums/mapgen/planetary/SnowGenerator.dm b/code/datums/mapgen/planetary/SnowGenerator.dm index 872e91a33fd2..c021ecfce9bf 100644 --- a/code/datums/mapgen/planetary/SnowGenerator.dm +++ b/code/datums/mapgen/planetary/SnowGenerator.dm @@ -112,9 +112,11 @@ ) feature_spawn_chance = 0.1 feature_spawn_list = list( - /obj/structure/spawner/ice_moon/demonic_portal = 1, - /obj/structure/spawner/ice_moon/demonic_portal/ice_whelp = 1, - /obj/structure/spawner/ice_moon/demonic_portal/snowlegion = 1 + /obj/effect/spawner/lootdrop/anomaly/ice = 12, + /obj/effect/spawner/lootdrop/anomaly/big = 1, + /obj/structure/spawner/ice_moon/demonic_portal/low_threat = 25, + /obj/structure/spawner/ice_moon/demonic_portal/medium_threat = 50, + /obj/structure/spawner/ice_moon/demonic_portal/high_threat = 13 ) /datum/biome/snow/lush @@ -205,10 +207,12 @@ ) feature_spawn_chance = 0.3 feature_spawn_list = list( - /obj/structure/spawner/ice_moon/demonic_portal/low_threat = 25, - /obj/structure/spawner/ice_moon/demonic_portal/medium_threat = 50, - /obj/structure/spawner/ice_moon/demonic_portal/high_threat = 13, - /obj/structure/spawner/ice_moon/demonic_portal/extreme_threat = 12 + /obj/effect/spawner/lootdrop/anomaly/ice = 1, + /obj/effect/spawner/lootdrop/anomaly/big = 0.01, + /obj/structure/spawner/ice_moon/demonic_portal/low_threat = 3, + /obj/structure/spawner/ice_moon/demonic_portal/medium_threat = 5, + /obj/structure/spawner/ice_moon/demonic_portal/high_threat = 0.5, + /obj/structure/spawner/ice_moon/demonic_portal/extreme_threat = 0.01 ) @@ -256,11 +260,13 @@ ) feature_spawn_chance = 0.2 feature_spawn_list = list( - /obj/structure/spawner/ice_moon/demonic_portal = 1, - /obj/structure/spawner/ice_moon/demonic_portal/ice_whelp = 1, - /obj/structure/spawner/ice_moon/demonic_portal/snowlegion = 1, - /obj/structure/spawner/ice_moon = 1, - /obj/structure/spawner/ice_moon/polarbear = 1 + /obj/structure/spawner/ice_moon/demonic_portal/low_threat = 3, + /obj/structure/spawner/ice_moon/demonic_portal/medium_threat = 5, + /obj/structure/spawner/ice_moon/demonic_portal/high_threat = 0.6, + /obj/structure/spawner/ice_moon/demonic_portal/extreme_threat = 0.2, + /obj/structure/spawner/ice_moon = 3, + /obj/structure/spawner/ice_moon/polarbear = 3, + /obj/effect/spawner/lootdrop/anomaly/ice/cave = 1 ) /datum/biome/cave/snow/thawed @@ -304,13 +310,6 @@ /obj/structure/flora/ash/stem_shroom = 1, ) feature_spawn_chance = 0.2 - feature_spawn_list = list( - /obj/structure/spawner/ice_moon/demonic_portal = 1, - /obj/structure/spawner/ice_moon/demonic_portal/ice_whelp = 1, - /obj/structure/spawner/ice_moon/demonic_portal/snowlegion = 1, - /obj/structure/spawner/ice_moon = 3, - /obj/structure/spawner/ice_moon/polarbear = 3, - ) /datum/biome/cave/volcanic/lava open_turf_types = list( diff --git a/code/datums/mapgen/planetary/WasteGenerator.dm b/code/datums/mapgen/planetary/WasteGenerator.dm index 9135c75cd73e..a660e3d35321 100644 --- a/code/datums/mapgen/planetary/WasteGenerator.dm +++ b/code/datums/mapgen/planetary/WasteGenerator.dm @@ -131,7 +131,8 @@ feature_spawn_list = list( /obj/effect/radiation/waste = 30, /obj/effect/radiation/waste/intense = 10, - /obj/structure/geyser/random = 1 + /obj/structure/geyser/random = 1, + /obj/effect/spawner/lootdrop/anomaly/waste = 1 ) mob_spawn_list = list( @@ -313,7 +314,8 @@ feature_spawn_list = list( /obj/effect/radiation/waste = 30, /obj/effect/radiation/waste/intense = 10, - /obj/structure/geyser/random = 1 + /obj/structure/geyser/random = 1, + /obj/effect/spawner/lootdrop/anomaly/waste/cave = 1 ) mob_spawn_list = list( /mob/living/simple_animal/hostile/hivebot/strong/rockplanet = 70, @@ -324,9 +326,7 @@ /mob/living/simple_animal/hostile/abandoned_minebot = 15, /mob/living/simple_animal/bot/floorbot/rockplanet = 15, ) - feature_spawn_list = list( - /obj/effect/radiation = 30, - ) + flora_spawn_chance = 30 feature_spawn_chance = 4 mob_spawn_chance = 5 diff --git a/code/datums/mapgen/single_biome/AsteroidCaves.dm b/code/datums/mapgen/single_biome/AsteroidCaves.dm deleted file mode 100644 index 8d1ed8206b32..000000000000 --- a/code/datums/mapgen/single_biome/AsteroidCaves.dm +++ /dev/null @@ -1,72 +0,0 @@ -/datum/map_generator/single_biome/asteroid - initial_closed_chance = 55 - smoothing_iterations = 50 - birth_limit = 4 - - biome_type = /datum/biome/cave/asteroid - area_type = /area/asteroid - - /// The x-coordinate of the midpoint of the turfs being generated. - var/midx - /// The y-coordinate of the midpoint of the turfs being generated. - var/midy - /// The "radius" of the area being generated, determined by taking the distance between the midpoint and the edge. - /// Used so that the edges of the asteroid are space. - var/radius - -/datum/map_generator/single_biome/asteroid/generate_turfs(list/turf/turfs) - var/maxx - var/maxy - var/minx - var/miny - for(var/turf/pos as anything in turfs) - if(pos.x < minx || !minx) - minx = pos.x - else if(pos.x > maxx) - maxx = pos.x - - //Gets the min/max Y value - if(pos.y < miny || !miny) - miny = pos.y - else if(pos.y > maxy) - maxy = pos.y - midx = minx + (maxx - minx) / 2 - midy = miny + (maxy - miny) / 2 - radius = min(maxx - minx, maxy - miny) / 2 - return ..() - -/datum/map_generator/single_biome/asteroid/generate_turf(turf/gen_turf, changeturf_flags) - var/area/old_area = get_area(gen_turf) - if(!(old_area.area_flags & CAVES_ALLOWED)) - return FALSE - - var/randradius = rand(radius - 2, radius + 2) * rand(radius - 2, radius + 2) - if((gen_turf.y - midy) ** 2 + (gen_turf.x - midx) ** 2 >= randradius) - var/area/space/space_area = GLOB.areas_by_type[/area/space] - if(old_area != space_area) - space_area.contents += gen_turf - gen_turf.change_area(old_area, space_area) - gen_turf.ChangeTurf(/turf/open/space, /turf/baseturf_bottom, changeturf_flags) - return TRUE - - return ..() - -/datum/map_generator/single_biome/asteroid/populate_turf(turf/gen_turf) - if(isspaceturf(gen_turf)) - return - return ..() - -/datum/biome/cave/asteroid - open_turf_types = list(/turf/open/floor/plating/asteroid/airless = 1) - closed_turf_types = list(/turf/closed/mineral/random = 1) - - flora_spawn_list = list(/obj/structure/flora/ash/space/voidmelon = 2) - feature_spawn_list = list(/obj/structure/geyser/random = 1) - mob_spawn_list = list(/mob/living/simple_animal/hostile/asteroid/goliath = 25, /obj/structure/spawner/mining/goliath = 30, \ - /mob/living/simple_animal/hostile/asteroid/basilisk = 25, /obj/structure/spawner/mining = 30, \ - /mob/living/simple_animal/hostile/asteroid/hivelord = 25, /obj/structure/spawner/mining/hivelord = 30, \ - /mob/living/simple_animal/hostile/asteroid/goldgrub = 10) - - flora_spawn_chance = 2 - feature_spawn_chance = 1 - mob_spawn_chance = 6 diff --git a/code/datums/mapgen/single_biome/Gas_Giant.dm b/code/datums/mapgen/single_biome/Gas_Giant.dm new file mode 100644 index 000000000000..ff904db06853 --- /dev/null +++ b/code/datums/mapgen/single_biome/Gas_Giant.dm @@ -0,0 +1,36 @@ +/datum/map_generator/single_biome/gas_giant + use_cellautomata = FALSE + + biome_type = /datum/biome/gas_giant + area_type = /area/overmap_encounter/planetoid/gas_giant + +/datum/biome/gas_giant + open_turf_types = list(/turf/open/chasm/gas_giant) + + flora_spawn_list = list( + ) + feature_spawn_list = null + mob_spawn_list = list( + /mob/living/simple_animal/hostile/asteroid/basilisk/watcher + //in the future, I'd like to add something like. + //The slylandro, or really any floating gas bag species, it'd be cool + ) + + +/datum/map_generator/single_biome/plasma_giant + use_cellautomata = FALSE + + biome_type = /datum/biome/plasma_giant + area_type = /area/overmap_encounter/planetoid/gas_giant + + +/datum/biome/plasma_giant + open_turf_types = list(/turf/open/chasm/gas_giant/plasma) + + flora_spawn_list = list( + ) + feature_spawn_list = null + mob_spawn_list = list( + /mob/living/simple_animal/hostile/asteroid/basilisk/watcher + + ) diff --git a/code/datums/recipe.dm b/code/datums/recipe.dm deleted file mode 100644 index b42636ed7276..000000000000 --- a/code/datums/recipe.dm +++ /dev/null @@ -1,120 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * - * /datum/recipe by rastaf0 13 apr 2011 * - * * * * * * * * * * * * * * * * * * * * * * * * * * - * This is powerful and flexible recipe system. - * It exists not only for food. - * supports both reagents and objects as prerequisites. - * In order to use this system you have to define a deriative from /datum/recipe - * * reagents are reagents. Acid, milc, booze, etc. - * * items are objects. Fruits, tools, circuit boards. - * * result is type to create as new object - * * time is optional parameter, you shall use in in your machine, - * default /datum/recipe/ procs does not rely on this parameter. - * - * Functions you need: - * /datum/recipe/proc/make(obj/container as obj) - * Creates result inside container, - * deletes prerequisite reagents, - * transfers reagents from prerequisite objects, - * deletes all prerequisite objects (even not needed for recipe at the moment). - * - * /proc/select_recipe(list/datum/recipe/avaiable_recipes, obj/obj as obj, exact = 1) - * Wonderful function that select suitable recipe for you. - * obj is a machine (or magik hat) with prerequisites, - * exact = 0 forces algorithm to ignore superfluous stuff. - * - * - * Functions you do not need to call directly but could: - * /datum/recipe/proc/check_reagents(datum/reagents/avail_reagents) - * //1=precisely, 0=insufficiently, -1=superfluous - * - * /datum/recipe/proc/check_items(obj/container as obj) - * //1=precisely, 0=insufficiently, -1=superfluous - * - * */ - -/datum/recipe - var/list/reagents_list // example: = list(/datum/reagent/consumable/berryjuice = 5) // do not list same reagent twice - var/list/items // example: =list(/obj/item/crowbar, /obj/item/welder) // place /foo/bar before /foo - var/result //example: = /obj/item/reagent_containers/food/snacks/donut - var/time = 100 // 1/10 part of second - - -/datum/recipe/proc/check_reagents(datum/reagents/avail_reagents) //1=precisely, 0=insufficiently, -1=superfluous - . = 1 - for (var/r_r in reagents_list) - var/aval_r_amnt = avail_reagents.get_reagent_amount(r_r) - if (!(abs(aval_r_amnt - reagents_list[r_r])<0.5)) //if NOT equals - if (aval_r_amnt>reagents_list[r_r]) - . = -1 - else - return 0 - if ((reagents_list?(reagents_list.len):(0)) < avail_reagents.reagent_list.len) - return -1 - return . - -/datum/recipe/proc/check_items(obj/container) //1=precisely, 0=insufficiently, -1=superfluous - if (!items) - if (locate(/obj/) in container) - return -1 - else - return 1 - . = 1 - var/list/checklist = items.Copy() - for (var/obj/O in container) - var/found = 0 - for (var/type in checklist) - if (istype(O,type)) - checklist-=type - found = 1 - break - if (!found) - . = -1 - if (checklist.len) - return 0 - return . - -//general version -/datum/recipe/proc/make(obj/container) - var/obj/result_obj = new result(container) - for (var/obj/O in (container.contents-result_obj)) - O.reagents.trans_to(result_obj, O.reagents.total_volume) - qdel(O) - container.reagents.clear_reagents() - return result_obj - -// food-related -/datum/recipe/proc/make_food(obj/container) - var/obj/result_obj = new result(container) - for (var/obj/O in (container.contents-result_obj)) - if (O.reagents) - O.reagents.del_reagent(/datum/reagent/consumable/nutriment) - O.reagents.update_total() - O.reagents.trans_to(result_obj, O.reagents.total_volume) - qdel(O) - container.reagents.clear_reagents() - return result_obj - -/proc/select_recipe(list/datum/recipe/avaiable_recipes, obj/obj, exact = 1 as num) - if (!exact) - exact = -1 - var/list/datum/recipe/possible_recipes = new - for (var/datum/recipe/recipe in avaiable_recipes) - if (recipe.check_reagents(obj.reagents)==exact && recipe.check_items(obj)==exact) - possible_recipes+=recipe - if (possible_recipes.len==0) - return null - else if (possible_recipes.len==1) - return possible_recipes[1] - else //okay, let's select the most complicated recipe - var/r_count = 0 - var/i_count = 0 - . = possible_recipes[1] - for (var/datum/recipe/recipe in possible_recipes) - var/N_i = (recipe.items)?(recipe.items.len):0 - var/N_r = (recipe.reagents_list)?(recipe.reagents_list.len):0 - if (N_i > i_count || (N_i== i_count && N_r > r_count)) - r_count = N_r - i_count = N_i - . = recipe - return . diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm index 7bfe9dc20459..da33889d802e 100644 --- a/code/datums/shuttles.dm +++ b/code/datums/shuttles.dm @@ -1,10 +1,10 @@ /datum/map_template/shuttle name = "Base Shuttle Template" - var/category + var/category = "Basic" var/file_name var/description - var/admin_notes + var/list/tags var/list/movement_force // If set, overrides default movement_force on shuttle @@ -17,9 +17,17 @@ var/short_name var/list/job_slots = list() var/list/name_categories = list("GENERAL") - var/prefix = "SV" + var/prefix = "ISV" var/unique_ship_access = FALSE + //how much money the ship starts with + var/starting_funds = 2000 + + // Coefficients regulating the amount of necessary Living playtime to spawn this ship or join as an officer. + // When a player attempts to spawn a ship via the join menu, officer time requirements are ignored even if the "captain" job is an officer. + var/spawn_time_coeff = 1 + var/officer_time_coeff = 1 + var/static/list/outfits /datum/map_template/shuttle/proc/prerequisites_met() @@ -182,7 +190,6 @@ /datum/map_template/shuttle/ui_static_data(mob/user) . = list() - if(!outfits) outfits = list() for(var/datum/outfit/outfit as anything in subtypesof(/datum/outfit)) @@ -194,8 +201,11 @@ .["templateName"] = name .["templateShortName"] = short_name .["templateDescription"] = description + .["templateTags"] = tags .["templateCategory"] = category .["templateLimit"] = limit + .["templateSpawnCoeff"] = spawn_time_coeff + .["templateOfficerCoeff"] = officer_time_coeff .["templateEnabled"] = enabled .["templateJobs"] = list() @@ -213,7 +223,6 @@ if(.) return - switch(action) if("setTemplateName") name = params["new_template_name"] @@ -227,6 +236,18 @@ description = params["new_template_description"] update_static_data(usr, ui) return TRUE + if("addTemplateTags") + if(!tags) + tags = list() + if(!(params["new_template_tags"] in tags)) + tags.Add(params["new_template_tags"]) + update_static_data(usr, ui) + return TRUE + if("removeTemplateTags") + if(params["new_template_tags"] in tags) + tags.Remove(params["new_template_tags"]) + update_static_data(usr, ui) + return TRUE if("setTemplateCategory") category = params["new_template_category"] update_static_data(usr, ui) @@ -235,6 +256,14 @@ limit = params["new_template_limit"] update_static_data(usr, ui) return TRUE + if("setSpawnCoeff") + spawn_time_coeff = params["new_spawn_coeff"] + update_static_data(usr, ui) + return TRUE + if("setOfficerCoeff") + officer_time_coeff = params["new_officer_coeff"] + update_static_data(usr, ui) + return TRUE if("toggleTemplateEnabled") enabled = !enabled if(enabled) @@ -313,6 +342,7 @@ /// Shuttles to be loaded in ruins /datum/map_template/shuttle/ruin category = "ruin" + starting_funds = 0 /datum/map_template/shuttle/ruin/caravan_victim file_name = "ruin_caravan_victim" @@ -345,6 +375,7 @@ /datum/map_template/shuttle/subshuttles category = "subshuttles" + starting_funds = 0 /datum/map_template/shuttle/subshuttles/pill file_name = "independent_pill" diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index dace5f5170ec..568196c1460b 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -397,7 +397,7 @@ if(!itemUser.has_hand_for_held_index(hand)) //If user does not have the corresponding hand anymore, give them one and return the rod to their hand if(((hand % 2) == 0)) - var/obj/item/bodypart/L = itemUser.newBodyPart(BODY_ZONE_R_ARM, FALSE, FALSE) + var/obj/item/bodypart/L = itemUser.new_body_part(BODY_ZONE_R_ARM, FALSE, FALSE) if(L.attach_limb(itemUser)) itemUser.put_in_hand(newRod, hand, forced = TRUE) else @@ -405,7 +405,7 @@ consume_owner() //we can't regrow, abort abort return else - var/obj/item/bodypart/L = itemUser.newBodyPart(BODY_ZONE_L_ARM, FALSE, FALSE) + var/obj/item/bodypart/L = itemUser.new_body_part(BODY_ZONE_L_ARM, FALSE, FALSE) if(L.attach_limb(itemUser)) itemUser.put_in_hand(newRod, hand, forced = TRUE) else diff --git a/code/game/MapData/shuttles/misc.dm b/code/game/MapData/shuttles/misc.dm new file mode 100644 index 000000000000..92fbd8e8a1e3 --- /dev/null +++ b/code/game/MapData/shuttles/misc.dm @@ -0,0 +1,42 @@ +//USE THIS FILE FOR MISCELLANEOUS CODE ADDITIONS FOR SHIPS, IF YOU HAVE A LOT OF CODE CHANGES, MAKE A DEDICATED FILE +//LABEL ALL SECTIONS WITH THE NAME OF THE SHIP + + +//////// +//JUNKER +//////// +/obj/machinery/power/port_gen/pacman/super/not_very + name = "inefficient radioisotope generator" + icon_state = "portgen1_0" + base_icon = "portgen1" + circuit = /obj/item/circuitboard/machine/pacman/super/not_very + sheet_path = /obj/item/stack/sheet/mineral/uranium + power_gen = 2500 + time_per_sheet = 85 + +/obj/item/circuitboard/machine/pacman/super/not_very + name = "Inefficient Radioisotope Generator (Machine Board)" + icon_state = "engineering" + build_path = /obj/machinery/power/port_gen/pacman/super/not_very + +/obj/structure/salvageable/protolathe/reployer + name = "reployer" + desc = "It's just a reployer. This one appears to be broken" + +/obj/machinery/reployer + name = "reployer" + desc = "It's just a reployer." + icon = 'icons/obj/salvage_structure.dmi' + icon_state = "wreck_protolathe" + +/obj/item/circuitboard/machine/autolathe/reployer + name = "Reployer (Machine Board)" + icon_state= "generic" + build_path = /obj/machinery/reployer + +/turf/open/floor/plating/conf_haz + initial_gas_mix = "n2=104;TEMP=293.15" + +/turf/open/floor/plating/rust/conf_haz + initial_gas_mix = "n2=104;TEMP=293.15" + diff --git a/code/game/MapData/shuttles/srm_glaive.dm b/code/game/MapData/shuttles/srm_glaive.dm index b5414c647968..738bebeda36b 100644 --- a/code/game/MapData/shuttles/srm_glaive.dm +++ b/code/game/MapData/shuttles/srm_glaive.dm @@ -48,7 +48,7 @@ icon_state = "Sleep" /datum/preset_holoimage/montagne - outfit_type = /datum/outfit/job/chaplain/roumain + outfit_type = /datum/outfit/job/hos/roumain /obj/item/disk/holodisk/roumain name = "Grand Ideology Sermon" diff --git a/code/game/area/ship_areas.dm b/code/game/area/ship_areas.dm index 0a138543d531..ccb46fe9845c 100644 --- a/code/game/area/ship_areas.dm +++ b/code/game/area/ship_areas.dm @@ -350,6 +350,20 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/ship/cargo/starboard name = "Starboard Cargo Bay" +/// Hangars /// + +/area/ship/hangar + name = "Hangar" + icon_state = "shuttlered" + sound_environment = SOUND_AREA_LARGE_ENCLOSED + ambientsounds = ENGINEERING + +/area/ship/hangar/port + name = "Port Hangar" + +/area/ship/hangar/starboard + name = "Starboard Hangar" + /// Hallways /// /area/ship/hallway name = "Hallway" diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index b898c1eded77..7e9d90bb482f 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -334,6 +334,29 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event if(prob(20)) explosion(src.loc,2,4,6,8) +/obj/effect/meteor/carp + name = "high velocity space carp" + desc = "What the devil?" + icon_state = "carp" + hits = 1 + hitpwr = 0 + pass_flags = PASSTABLE + meteorsound = 'sound/effects/blobattack.ogg' + meteordrop = list(/mob/living/simple_animal/hostile/carp) + dropamt = 1 + +/obj/effect/meteor/carp/big + name = "high velocity space carp" + desc = "What the devil?" + icon = 'icons/mob/broadMobs.dmi' + icon_state = "megacarp" + hits = 1 + hitpwr = 1 + pass_flags = PASSTABLE + meteordrop = list(/mob/living/simple_animal/hostile/carp/megacarp) + dropamt = 1 + + ////////////////////////// //Spookoween meteors ///////////////////////// diff --git a/code/game/gamemodes/sandbox/airlock_maker.dm b/code/game/gamemodes/sandbox/airlock_maker.dm index ab98aa80b428..da1db44bb251 100644 --- a/code/game/gamemodes/sandbox/airlock_maker.dm +++ b/code/game/gamemodes/sandbox/airlock_maker.dm @@ -14,6 +14,13 @@ if(maker) maker.interact() +/obj/structure/door_assembly/ComponentInitialize() + . = ..() + AddComponent(/datum/component/simple_rotation, ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS, null, CALLBACK(src, .proc/can_be_rotated)) + +/obj/structure/door_assembly/proc/can_be_rotated(mob/user, rotation_type) + return !anchored + /datum/airlock_maker var/obj/structure/door_assembly/linked = null diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 978f7d3353f8..5b2129794210 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -32,7 +32,7 @@ GLOBAL_LIST_EMPTY(cryopod_computers) MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/cryopod, 17) /obj/machinery/computer/cryopod/retro - desc = "An interface between crew and the cryogenic storage oversight systems. This one appears to be strugggling to catch up with the more modren cryogenic storage system version." + desc = "An interface between crew and the cryogenic storage oversight systems. Currently strugggling to catch up with the modern cryogenic storage system." icon_state = "wallconsole_old" icon_screen = "wallconsole_old_cryo" @@ -429,17 +429,45 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/cryopod/retro, 17) linked_ship.spawn_points += src /obj/machinery/cryopod/apply_effects_to_mob(mob/living/carbon/sleepyhead) - sleepyhead.SetSleeping(60) - sleepyhead.set_disgust(57) // puke maybe once maybe twice + //it always sucks a little to get up sleepyhead.set_nutrition(200) - to_chat(sleepyhead, "A wave of nausea comes over you, brought on by cryosleep...") + sleepyhead.SetSleeping(60) //if you read this comment and feel like shitting together something to adjust elzu and IPC charge on wakeup, be my guest. + //but it can be worse. + if(prob(90)) + sleepyhead.apply_effect(rand(3,10), EFFECT_DROWSY) + if(prob(75)) + sleepyhead.blur_eyes(rand(3, 6)) + //so much worse + if(prob(66)) + sleepyhead.adjust_disgust(rand(25,35)) + if(prob(33)) + sleepyhead.adjust_disgust(rand(20,30)) + if(prob(16)) + sleepyhead.adjust_disgust(rand(10, 17)) + //maybe you should've bought high passage. + if(prob(30)) + sleepyhead.apply_damage_type(15, BURN) + to_chat(sleepyhead, "The symptoms of cryosleep set in as you awaken...") + + /obj/machinery/cryopod/poor name = "low quality cryogenic freezer" desc = "Keeps crew frozen in cryostasis until they are needed in order to cut down on supply usage. This one seems cheaply made." /obj/machinery/cryopod/poor/apply_effects_to_mob(mob/living/carbon/sleepyhead) + sleepyhead.set_nutrition(200) sleepyhead.SetSleeping(80) - sleepyhead.set_disgust(75) //nasty - sleepyhead.set_nutrition(70) - to_chat(sleepyhead, "The low-quality cryo pod ejects you unceremoniously, you feel REALLY sick...") + if(prob(90)) + sleepyhead.apply_effect(rand(5,15), EFFECT_DROWSY) + if(prob(75)) + sleepyhead.blur_eyes(rand(6, 10)) + if(prob(66)) + sleepyhead.adjust_disgust(rand(35, 45)) //rand + if(prob(40)) + sleepyhead.adjust_disgust(rand(15, 25)) + if(prob(20)) + sleepyhead.adjust_disgust(rand(5,15)) + if(prob(30)) + sleepyhead.apply_damage_type(30, BURN) + to_chat(sleepyhead, "The symptoms of a horrid cryosleep set in as you awaken...") diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index f009f9723b8e..680e0f898919 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1483,6 +1483,7 @@ A.previous_assembly = previous_airlock A.update_name() A.update_icon() + A.dir = dir if(!disassembled) if(A) diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index 465bfb4672bc..a55b68c5593d 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -65,6 +65,7 @@ assembly.update_name() assembly.update_icon() assembly.welded = TRUE + assembly.dir = dir new /obj/item/electronics/airlock(loc) qdel(src) diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 16bc0ab2a63d..7d87d34d2be1 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -124,7 +124,7 @@ last_alarm = world.time var/area/A = get_area(src) A.firealert(src) - playsound(loc, 'goon/sound/machinery/FireAlarm.ogg', 75) + playsound(loc, 'sound/machines/FireAlarm.ogg', 75) if(user) log_game("[user] triggered a fire alarm at [COORD(src)]") diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm index 261bdccef86e..5861b88dd173 100644 --- a/code/game/machinery/limbgrower.dm +++ b/code/game/machinery/limbgrower.dm @@ -24,7 +24,7 @@ /// Our internal techweb for limbgrower designs. var/datum/techweb/stored_research /// All the categories of organs we can print. - var/list/categories = list(SPECIES_HUMAN,SPECIES_DWARF,SPECIES_LIZARD,SPECIES_MOTH,SPECIES_PLASMAMAN,SPECIES_ETHEREAL,SPECIES_RACHNID,SPECIES_KEPORI,SPECIES_VOX,"other") + var/list/categories = list(SPECIES_HUMAN,SPECIES_LIZARD,SPECIES_MOTH,SPECIES_PLASMAMAN,SPECIES_ETHEREAL,SPECIES_RACHNID,SPECIES_KEPORI,SPECIES_VOX,"other") //yogs grower a little different because we're going to allow meats to be converted to synthflesh because hugbox var/list/accepted_biomass = list( /obj/item/reagent_containers/food/snacks/meat/slab/monkey = 25, @@ -244,11 +244,7 @@ var/obj/item/bodypart/limb limb = new buildpath(loc) limb.name = "\improper synthetic [limb.bodytype & BODYTYPE_DIGITIGRADE ? "digitigrade ":""][selected_category] [limb.plaintext_zone]" - //super snowflake code to make digitigrade work with the rest of the limbs - if(limb.bodytype & BODYTYPE_DIGITIGRADE) - limb.limb_id = "digitigrade" - else - limb.limb_id = selected_category + limb.limb_id = selected_category //fun override colors limb.mutation_color = random_color() limb.update_icon_dropped() diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index 9f32839a4e15..bc07e19852c4 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -220,7 +220,6 @@ DEFINE_BITFIELD(turret_flags, list( "manual_control" = manual_control, "silicon_user" = FALSE, "allow_manual_control" = FALSE, - "lasertag_turret" = istype(src, /obj/machinery/porta_turret/lasertag), ) if(issilicon(user)) data["silicon_user"] = TRUE @@ -302,6 +301,24 @@ DEFINE_BITFIELD(turret_flags, list( else to_chat(user, "You remove the turret but did not manage to salvage anything.") qdel(src) + if(I.tool_behaviour == TOOL_WELDER && user.a_intent == INTENT_HELP) + if(obj_integrity < max_integrity) + if(!I.tool_start_check(user, amount=0)) + return + + to_chat(user, "You begin repairing [src]...") + if(I.use_tool(src, user, 40, volume=50)) + obj_integrity = obj_integrity + 20 + to_chat(user, "You repair [src].") + if(obj_integrity > (max_integrity * integrity_failure) && BROKEN) + obj_integrity = max_integrity + set_machine_stat(machine_stat & ~BROKEN) + update_icon() + check_should_process() + else + to_chat(user, "[src] is already in good condition!") + return + else if((I.tool_behaviour == TOOL_WRENCH) && (!on)) if(raised) @@ -770,71 +787,55 @@ DEFINE_BITFIELD(turret_flags, list( /obj/machinery/porta_turret/ai/assess_perp(mob/living/carbon/human/perp) return 10 //AI turrets shoot at everything not in their faction -/obj/machinery/porta_turret/aux_base - name = "perimeter defense turret" - desc = "A plasma beam turret calibrated to defend outposts against non-humanoid fauna. It is more effective when exposed to the environment." - installation = null - lethal_projectile = /obj/projectile/plasma/turret - lethal_projectile_sound = 'sound/weapons/plasma_cutter.ogg' - mode = TURRET_LETHAL //It would be useless in stun mode anyway - faction = list("neutral","silicon","turret") //Minebots, medibots, etc that should not be shot. - -/obj/machinery/porta_turret/aux_base/assess_perp(mob/living/carbon/human/perp) - return 0 //Never shoot humanoids. You are on your own if Ashwalkers or the like attack! - -/obj/machinery/porta_turret/aux_base/setup() - return - -/obj/machinery/porta_turret/aux_base/interact(mob/user) //Controlled solely from the base console. - return - -/obj/machinery/porta_turret/aux_base/Initialize() - . = ..() - cover.name = name - cover.desc = desc - -/obj/machinery/porta_turret/centcom_shuttle +/obj/machinery/porta_turret/ship installation = null - max_integrity = 260 + max_integrity = 300 always_up = 1 - use_power = NO_POWER_USE + use_power = ACTIVE_POWER_USE + active_power_usage = 300 has_cover = 0 scan_range = 9 - stun_projectile = /obj/projectile/beam/laser + stun_projectile = /obj/projectile/beam/disabler lethal_projectile = /obj/projectile/beam/laser lethal_projectile_sound = 'sound/weapons/plasma_cutter.ogg' stun_projectile_sound = 'sound/weapons/plasma_cutter.ogg' icon_state = "syndie_off" base_icon_state = "syndie" - faction = list("neutral","silicon","turret") - mode = TURRET_LETHAL + faction = list("neutral", "turret") + mode = TURRET_STUN -/obj/machinery/porta_turret/centcom_shuttle/ComponentInitialize() +/obj/machinery/porta_turret/ship/ComponentInitialize() . = ..() AddComponent(/datum/component/empprotection, EMP_PROTECT_SELF | EMP_PROTECT_WIRES) -/obj/machinery/porta_turret/centcom_shuttle/assess_perp(mob/living/carbon/human/perp) - return 0 - -/obj/machinery/porta_turret/centcom_shuttle/setup() +/obj/machinery/porta_turret/ship/setup() return -/obj/machinery/porta_turret/centcom_shuttle/weak +/obj/machinery/porta_turret/ship/examine(mob/user) + . = ..() + if(in_range(user, src) || isobserver(user)) + if(!(machine_stat & BROKEN)) + . += "Its reports that it's integrity is currently [(obj_integrity / max_integrity) * 100] percent." + +/obj/machinery/porta_turret/ship/weak max_integrity = 120 integrity_failure = 0.5 name = "Old Laser Turret" desc = "A turret built with substandard parts and run down further with age. Still capable of delivering lethal lasers to the odd space carp, but not much else." - stun_projectile = /obj/projectile/beam/weak/penetrator + stun_projectile = /obj/projectile/beam/disabler/weak lethal_projectile = /obj/projectile/beam/weak/penetrator - faction = list("neutral","silicon","turret") + faction = list("neutral", "turret") -/obj/machinery/porta_turret/centcom_shuttle/ballistic - stun_projectile = /obj/projectile/bullet - lethal_projectile = /obj/projectile/bullet +/obj/machinery/porta_turret/ship/ballistic + stun_projectile = /obj/projectile/bullet/turret/rubber + lethal_projectile = /obj/projectile/bullet/turret lethal_projectile_sound = 'sound/weapons/gun/smg/shot.ogg' stun_projectile_sound = 'sound/weapons/gun/smg/shot.ogg' desc = "A ballistic machine gun auto-turret." +/obj/machinery/porta_turret/ship/solgov + faction = list("playerSolgov", "turret") + //////////////////////// //Turret Control Panel// //////////////////////// @@ -898,6 +899,7 @@ DEFINE_BITFIELD(turret_flags, list( . += {"Ctrl-click [src] to [ enabled ? "disable" : "enable"] turrets. Alt-click [src] to set turrets to [ lethal ? "stun" : "kill"]."} + /obj/machinery/turretid/attackby(obj/item/I, mob/user, params) if(machine_stat & BROKEN) return @@ -1011,6 +1013,9 @@ DEFINE_BITFIELD(turret_flags, list( else icon_state = "control_standby" +/obj/machinery/turretid/lethal + lethal = TRUE + /obj/item/wallframe/turret_control name = "turret control frame" desc = "Used for building turret control panels." @@ -1054,82 +1059,5 @@ DEFINE_BITFIELD(turret_flags, list( .["lethal_projectile"] = .["stun_projectile"] .["lethal_projectile_sound"] = .["stun_projectile_sound"] - -/obj/item/gun/energy/laser/bluetag/get_turret_properties() - . = ..() - .["stun_projectile"] = /obj/projectile/beam/lasertag/bluetag - .["lethal_projectile"] = /obj/projectile/beam/lasertag/bluetag - .["base_icon_state"] = "blue" - .["shot_delay"] = 30 - .["team_color"] = "blue" - -/obj/item/gun/energy/laser/redtag/get_turret_properties() - . = ..() - .["stun_projectile"] = /obj/projectile/beam/lasertag/redtag - .["lethal_projectile"] = /obj/projectile/beam/lasertag/redtag - .["base_icon_state"] = "red" - .["shot_delay"] = 30 - .["team_color"] = "red" - /obj/item/gun/energy/e_gun/turret/get_turret_properties() . = ..() - -/obj/machinery/porta_turret/lasertag - req_access = list(ACCESS_MAINT_TUNNELS, ACCESS_THEATRE) - turret_flags = TURRET_FLAG_AUTH_WEAPONS - var/team_color - -/obj/machinery/porta_turret/lasertag/assess_perp(mob/living/carbon/human/perp) - . = 0 - if(team_color == "blue") //Lasertag turrets target the opposing team, how great is that? -Sieve - . = 0 //But does not target anyone else - if(istype(perp.wear_suit, /obj/item/clothing/suit/redtag)) - . += 4 - if(perp.is_holding_item_of_type(/obj/item/gun/energy/laser/redtag)) - . += 4 - if(istype(perp.belt, /obj/item/gun/energy/laser/redtag)) - . += 2 - - if(team_color == "red") - . = 0 - if(istype(perp.wear_suit, /obj/item/clothing/suit/bluetag)) - . += 4 - if(perp.is_holding_item_of_type(/obj/item/gun/energy/laser/bluetag)) - . += 4 - if(istype(perp.belt, /obj/item/gun/energy/laser/bluetag)) - . += 2 - -/obj/machinery/porta_turret/lasertag/setup(obj/item/gun/gun) - var/list/properties = ..() - if(properties["team_color"]) - team_color = properties["team_color"] - -/obj/machinery/porta_turret/lasertag/ui_status(mob/user) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(team_color == "blue" && istype(H.wear_suit, /obj/item/clothing/suit/redtag)) - return UI_CLOSE - if(team_color == "red" && istype(H.wear_suit, /obj/item/clothing/suit/bluetag)) - return UI_CLOSE - return ..() - -//lasertag presets -/obj/machinery/porta_turret/lasertag/red - installation = /obj/item/gun/energy/laser/redtag - team_color = "red" - -/obj/machinery/porta_turret/lasertag/blue - installation = /obj/item/gun/energy/laser/bluetag - team_color = "blue" - -/obj/machinery/porta_turret/lasertag/bullet_act(obj/projectile/P) - . = ..() - if(on) - if(team_color == "blue") - if(istype(P, /obj/projectile/beam/lasertag/redtag)) - toggle_on(FALSE) - addtimer(CALLBACK(src, .proc/toggle_on, TRUE), 10 SECONDS) - else if(team_color == "red") - if(istype(P, /obj/projectile/beam/lasertag/bluetag)) - toggle_on(FALSE) - addtimer(CALLBACK(src, .proc/toggle_on, TRUE), 10 SECONDS) diff --git a/code/game/machinery/porta_turret/portable_turret_construct.dm b/code/game/machinery/porta_turret/portable_turret_construct.dm index da2066bc3e0f..ad2f82eace29 100644 --- a/code/game/machinery/porta_turret/portable_turret_construct.dm +++ b/code/game/machinery/porta_turret/portable_turret_construct.dm @@ -139,11 +139,7 @@ //The final step: create a full turret var/obj/machinery/porta_turret/turret - //fuck lasertag turrets - if(istype(installed_gun, /obj/item/gun/energy/laser/bluetag) || istype(installed_gun, /obj/item/gun/energy/laser/redtag)) - turret = new/obj/machinery/porta_turret/lasertag(loc) - else - turret = new/obj/machinery/porta_turret(loc) + turret = new/obj/machinery/porta_turret(loc) turret.name = finish_name turret.installation = installed_gun.type turret.setup(installed_gun) diff --git a/code/game/machinery/scan_gate.dm b/code/game/machinery/scan_gate.dm index ad839d3354dc..1b0736a2951f 100644 --- a/code/game/machinery/scan_gate.dm +++ b/code/game/machinery/scan_gate.dm @@ -151,8 +151,6 @@ scan_species = /datum/species/spider if(SCANGATE_IPC) scan_species = /datum/species/ipc - if(SCANGATE_SQUID) - scan_species = /datum/species/squid if(SCANGATE_ETHEREAL) scan_species = /datum/species/ethereal if(SCANGATE_KEPORI) diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index f62fb97d9725..f8cebcb08bac 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -489,6 +489,7 @@ req_access = list() locked = FALSE shield_range = 8 + layer = WALL_OBJ_LAYER /obj/machinery/power/shieldwallgen/atmos/roundstart anchored = TRUE @@ -645,12 +646,12 @@ name = "holofield wall" desc = "An energy shield capable of blocking gas movement." icon = 'icons/effects/effects.dmi' - icon_state = "holofan_new" + icon_state = "holofield" density = FALSE CanAtmosPass = ATMOS_PASS_NO CanAtmosPassVertical = 1 hardshield = FALSE - layer = ABOVE_BLASTDOOR_LAYER + layer = ABOVE_MOB_LAYER light_color = "#f6e384" light_system = MOVABLE_LIGHT //for instant visual feedback reguardless of lag diff --git a/code/game/objects/effects/anomalies.dm b/code/game/objects/effects/anomalies.dm deleted file mode 100644 index 84dee081a6c8..000000000000 --- a/code/game/objects/effects/anomalies.dm +++ /dev/null @@ -1,383 +0,0 @@ -//Anomalies, used for events. Note that these DO NOT work by themselves; their procs are called by the event datum. - -/obj/effect/anomaly - name = "anomaly" - desc = "A mysterious anomaly, seen commonly only in the far frontier of space..." - icon_state = "bhole3" - density = FALSE - anchored = TRUE - light_range = 3 - var/movechance = 70 - var/obj/item/assembly/signaler/anomaly/aSignal = /obj/item/assembly/signaler/anomaly - var/area/impact_area - - var/lifespan = 990 - var/death_time - - var/countdown_colour - var/obj/effect/countdown/anomaly/countdown - -/obj/effect/anomaly/Initialize(mapload, new_lifespan) - . = ..() - GLOB.poi_list |= src - START_PROCESSING(SSobj, src) - impact_area = get_area(src) - - if (!impact_area) - return INITIALIZE_HINT_QDEL - - aSignal = new aSignal(src) - aSignal.code = rand(1,100) - aSignal.anomaly_type = type - - var/frequency = rand(MIN_FREE_FREQ, MAX_FREE_FREQ) - if(ISMULTIPLE(frequency, 2))//signaller frequencies are always uneven! - frequency++ - aSignal.set_frequency(frequency) - - if(new_lifespan) - lifespan = new_lifespan - death_time = world.time + lifespan - countdown = new(src) - if(countdown_colour) - countdown.color = countdown_colour - countdown.start() - -/obj/effect/anomaly/process() - anomalyEffect() - if(death_time < world.time) - if(loc) - detonate() - qdel(src) - -/obj/effect/anomaly/Destroy() - GLOB.poi_list.Remove(src) - STOP_PROCESSING(SSobj, src) - qdel(countdown) - return ..() - -/obj/effect/anomaly/proc/anomalyEffect() - if(prob(movechance)) - step(src,pick(GLOB.alldirs)) - -/obj/effect/anomaly/proc/detonate() - return - -/obj/effect/anomaly/ex_act(severity, target) - if(severity == 1) - qdel(src) - -/obj/effect/anomaly/proc/anomalyNeutralize() - new /obj/effect/particle_effect/smoke/bad(loc) - - for(var/atom/movable/O in src) - O.forceMove(drop_location()) - - qdel(src) - - -/obj/effect/anomaly/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_ANALYZER) - to_chat(user, "Analyzing... [src]'s unstable field is fluctuating along frequency [format_frequency(aSignal.frequency)], code [aSignal.code].") - -/////////////////////// - -/obj/effect/anomaly/grav - name = "gravitational anomaly" - icon_state = "shield2" - density = FALSE - var/boing = 0 - aSignal = /obj/item/assembly/signaler/anomaly/grav - -/obj/effect/anomaly/grav/Initialize(mapload, new_lifespan, drops_core) - . = ..() - var/static/list/loc_connections = list( - COMSIG_ATOM_ENTERED = .proc/on_entered, - ) - AddElement(/datum/element/connect_loc, loc_connections) - -/obj/effect/anomaly/grav/anomalyEffect() - ..() - boing = 1 - for(var/obj/O in orange(4, src)) - if(!O.anchored) - step_towards(O,src) - for(var/mob/living/M in range(0, src)) - gravShock(M) - for(var/mob/living/M in orange(4, src)) - if(!M.mob_negates_gravity()) - step_towards(M,src) - for(var/obj/O in range(0,src)) - if(!O.anchored) - if(isturf(O.loc)) - var/turf/T = O.loc - if(T.intact && HAS_TRAIT(O, TRAIT_T_RAY_VISIBLE)) - continue - var/mob/living/target = locate() in view(4,src) - if(target && !target.stat) - O.throw_at(target, 5, 10) - -/obj/effect/anomaly/grav/proc/on_entered(datum/source, atom/movable/AM) - SIGNAL_HANDLER - - gravShock(AM) - -/obj/effect/anomaly/grav/Bump(atom/A) - gravShock(A) - -/obj/effect/anomaly/grav/Bumped(atom/movable/AM) - gravShock(AM) - -/obj/effect/anomaly/grav/proc/gravShock(mob/living/A) - if(boing && isliving(A) && !A.stat) - A.Paralyze(40) - var/atom/target = get_edge_target_turf(A, get_dir(src, get_step_away(A, src))) - A.throw_at(target, 5, 1) - boing = 0 - -/obj/effect/anomaly/grav/high - var/grav_field - -/obj/effect/anomaly/grav/high/Initialize(mapload, new_lifespan) - . = ..() - INVOKE_ASYNC(src, .proc/setup_grav_field) - -/obj/effect/anomaly/grav/high/proc/setup_grav_field() - grav_field = make_field(/datum/proximity_monitor/advanced/gravity, list("current_range" = 7, "host" = src, "gravity_value" = rand(0,3))) - -/obj/effect/anomaly/grav/high/Destroy() - QDEL_NULL(grav_field) - . = ..() - -///////////////////// - -/obj/effect/anomaly/flux - name = "flux wave anomaly" - icon_state = "electricity2" - density = TRUE - aSignal = /obj/item/assembly/signaler/anomaly/flux - var/canshock = FALSE - var/shockdamage = 20 - var/explosive = TRUE - -/obj/effect/anomaly/flux/Initialize(mapload, new_lifespan, drops_core = TRUE, _explosive = TRUE) - . = ..() - explosive = _explosive - var/static/list/loc_connections = list( - COMSIG_ATOM_ENTERED = .proc/on_entered, - ) - AddElement(/datum/element/connect_loc, loc_connections) - - -/obj/effect/anomaly/flux/anomalyEffect() - ..() - canshock = TRUE - for(var/mob/living/M in range(0, src)) - mobShock(M) - -/obj/effect/anomaly/flux/proc/on_entered(datum/source, atom/movable/AM) - SIGNAL_HANDLER - - mobShock(AM) - -/obj/effect/anomaly/flux/Bump(atom/A) - mobShock(A) - -/obj/effect/anomaly/flux/Bumped(atom/movable/AM) - mobShock(AM) - -/obj/effect/anomaly/flux/proc/mobShock(mob/living/M) - if(canshock && istype(M)) - canshock = FALSE - M.electrocute_act(shockdamage, name, flags = SHOCK_NOGLOVES) - -/obj/effect/anomaly/flux/detonate() - if(explosive) - explosion(src, 1, 4, 16, 18) //Low devastation, but hits a lot of stuff. - else - new /obj/effect/particle_effect/sparks(loc) - - -///////////////////// - -/obj/effect/anomaly/bluespace - name = "bluespace anomaly" - icon = 'icons/obj/projectiles.dmi' - icon_state = "bluespace" - density = TRUE - aSignal = /obj/item/assembly/signaler/anomaly/bluespace - -/obj/effect/anomaly/bluespace/anomalyEffect() - ..() - for(var/mob/living/M in range(1,src)) - do_teleport(M, locate(M.x, M.y, M.z), 4, channel = TELEPORT_CHANNEL_BLUESPACE) - -/obj/effect/anomaly/bluespace/Bumped(atom/movable/AM) - if(isliving(AM)) - do_teleport(AM, locate(AM.x, AM.y, AM.z), 8, channel = TELEPORT_CHANNEL_BLUESPACE) - -/obj/effect/anomaly/bluespace/detonate() - var/turf/T = pick(get_area_turfs(impact_area)) - if(T) - // Calculate new position (searches through beacons in world) - var/obj/item/beacon/chosen - var/list/possible = list() - for(var/obj/item/beacon/W in GLOB.teleportbeacons) - possible += W - - if(possible.len > 0) - chosen = pick(possible) - - if(chosen) - // Calculate previous position for transition - - var/turf/FROM = T // the turf of origin we're travelling FROM - var/turf/TO = get_turf(chosen) // the turf of origin we're travelling TO - - playsound(TO, 'sound/effects/phasein.ogg', 100, TRUE) - priority_announce("Massive bluespace translocation detected.", "Anomaly Alert", zlevel = virtual_z()) - - var/list/flashers = list() - for(var/mob/living/carbon/C in viewers(TO, null)) - if(C.flash_act()) - flashers += C - - var/y_distance = TO.y - FROM.y - var/x_distance = TO.x - FROM.x - for (var/atom/movable/A in urange(12, FROM)) // iterate thru list of mobs in the area - if(istype(A, /obj/item/beacon)) - continue // don't teleport beacons because that's just insanely stupid - if(A.anchored) - continue - - var/turf/newloc = locate(A.x + x_distance, A.y + y_distance, TO.z) // calculate the new place - if(!A.Move(newloc) && newloc) // if the atom, for some reason, can't move, FORCE them to move! :) We try Move() first to invoke any movement-related checks the atom needs to perform after moving - A.forceMove(newloc) - - if(ismob(A) && !(A in flashers)) // don't flash if we're already doing an effect - var/mob/M = A - if(M.client) - INVOKE_ASYNC(src, .proc/blue_effect, M) - -/obj/effect/anomaly/bluespace/proc/blue_effect(mob/M) - var/obj/blueeffect = new /obj(src) - blueeffect.screen_loc = "WEST,SOUTH to EAST,NORTH" - blueeffect.icon = 'icons/effects/effects.dmi' - blueeffect.icon_state = "shieldsparkles" - blueeffect.layer = FLASH_LAYER - blueeffect.plane = FULLSCREEN_PLANE - blueeffect.mouse_opacity = MOUSE_OPACITY_TRANSPARENT - M.client.screen += blueeffect - sleep(20) - M.client.screen -= blueeffect - qdel(blueeffect) - -///////////////////// - -/obj/effect/anomaly/pyro - name = "pyroclastic anomaly" - icon_state = "mustard" - var/ticks = 0 - aSignal = /obj/item/assembly/signaler/anomaly/pyro - -/obj/effect/anomaly/pyro/anomalyEffect() - ..() - ticks++ - if(ticks < 25) //WS Edit - Pyroclastic Rebalance - return - else - ticks = 0 - var/turf/open/T = get_turf(src) - if(istype(T)) - T.atmos_spawn_air("o2=5;plasma=5;TEMP=500") //WS Edit - Pyroclastic Rebalance - -/obj/effect/anomaly/pyro/detonate() - INVOKE_ASYNC(src, .proc/makepyroslime) - -/obj/effect/anomaly/pyro/proc/makepyroslime() - var/turf/open/T = get_turf(src) - if(istype(T)) - T.atmos_spawn_air("o2=250;plasma=250;TEMP=700") //WS Edit - Pyroclastic Rebalance - var/new_colour = pick("red", "orange") - var/mob/living/simple_animal/slime/S = new(T, new_colour) - S.rabid = TRUE - S.amount_grown = SLIME_EVOLUTION_THRESHOLD - S.Evolve() - var/datum/action/innate/slime/reproduce/A = new - A.Grant(S) - - var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as a pyroclastic anomaly slime?", ROLE_SENTIENCE, null, null, 100, S, POLL_IGNORE_PYROSLIME) - if(LAZYLEN(candidates)) - var/mob/dead/observer/chosen = pick(candidates) - S.key = chosen.key - S.mind.special_role = ROLE_PYROCLASTIC_SLIME - var/policy = get_policy(ROLE_PYROCLASTIC_SLIME) - if (policy) - to_chat(S, policy) - log_game("[key_name(S.key)] was made into a slime by pyroclastic anomaly at [AREACOORD(T)].") - -///////////////////// - -/obj/effect/anomaly/bhole - name = "vortex anomaly" - icon_state = "bhole3" - desc = "That's a nice region of spacetime you have there. It'd be a shame if something happened to it." - aSignal = /obj/item/assembly/signaler/anomaly/vortex - -/obj/effect/anomaly/bhole/anomalyEffect() - ..() - if(!isturf(loc)) //blackhole cannot be contained inside anything. Weird stuff might happen - qdel(src) - return - - grav(rand(0,3), rand(2,3), 50, 25) - - //Throwing stuff around! - for(var/obj/O in range(2,src)) - if(O == src) - return //DON'T DELETE YOURSELF GOD DAMN - if(!O.anchored) - var/mob/living/target = locate() in view(4,src) - if(target && !target.stat) - O.throw_at(target, 7, 5) - else - SSexplosions.medobj += O - -/obj/effect/anomaly/bhole/proc/grav(r, ex_act_force, pull_chance, turf_removal_chance) - for(var/t = -r, t < r, t++) - affect_coord(x+t, y-r, ex_act_force, pull_chance, turf_removal_chance) - affect_coord(x-t, y+r, ex_act_force, pull_chance, turf_removal_chance) - affect_coord(x+r, y+t, ex_act_force, pull_chance, turf_removal_chance) - affect_coord(x-r, y-t, ex_act_force, pull_chance, turf_removal_chance) - -/obj/effect/anomaly/bhole/proc/affect_coord(x, y, ex_act_force, pull_chance, turf_removal_chance) - //Get turf at coordinate - var/turf/T = locate(x, y, z) - if(isnull(T)) - return - - //Pulling and/or ex_act-ing movable atoms in that turf - if(prob(pull_chance)) - for(var/obj/O in T.contents) - if(O.anchored) - switch(ex_act_force) - if(EXPLODE_DEVASTATE) - SSexplosions.highobj += O - if(EXPLODE_HEAVY) - SSexplosions.medobj += O - if(EXPLODE_LIGHT) - SSexplosions.lowobj += O - else - step_towards(O,src) - for(var/mob/living/M in T.contents) - step_towards(M,src) - - //Damaging the turf - if(T && prob(turf_removal_chance)) - switch(ex_act_force) - if(EXPLODE_DEVASTATE) - SSexplosions.highturf += T - if(EXPLODE_HEAVY) - SSexplosions.medturf += T - if(EXPLODE_LIGHT) - SSexplosions.lowturf += T diff --git a/code/game/objects/effects/anomalies/_anomalies.dm b/code/game/objects/effects/anomalies/_anomalies.dm new file mode 100644 index 000000000000..3c8340bb284b --- /dev/null +++ b/code/game/objects/effects/anomalies/_anomalies.dm @@ -0,0 +1,151 @@ +//Anomalies, used for anomaly events. Anomalies cause adverse effects on their surroundings and can be mitigated by signalling their respective frequency. +/obj/effect/anomaly + name = "anomaly" + desc = "A mysterious anomaly, seen commonly in the Frontier" + icon = 'icons/effects/anomalies.dmi' + icon_state = "vortex" + density = FALSE + anchored = TRUE + light_range = 3 + + //aSignal drops as the core, bSignal allows people to signal to detonate + var/obj/item/assembly/signaler/anomaly/aSignal = /obj/item/assembly/signaler/anomaly + var/obj/item/assembly/signaler/anomaly/bSignal = /obj/item/assembly/signaler/anomaly/det_signal + var/area/impact_area + + var/lifespan = 990 + var/death_time + var/research_value + + //for anomaly effects, range is how far the effects can reach, the cooldown lets us wire in effects that happen every pulse delay seconds + var/effectrange = 6 + + COOLDOWN_DECLARE(pulse_cooldown) + COOLDOWN_DECLARE(pulse_secondary_cooldown) + var/pulse_delay = 15 SECONDS + + var/countdown_colour + var/obj/effect/countdown/anomaly/countdown + + /// Do we drop a core when we're neutralized? + var/drops_core = TRUE + ///Do we keep on living forever? + var/immortal = FALSE + ///Do we stay in one place? + var/immobile = FALSE + +/obj/effect/anomaly/Initialize(mapload, new_lifespan, drops_core = TRUE) + . = ..() + START_PROCESSING(SSobj, src) + impact_area = get_area(src) + + if (!impact_area) + return INITIALIZE_HINT_QDEL + + research_value = rand(500,4000) + pulse_delay = rand(pulse_delay*0.5, pulse_delay*1.5) + + src.drops_core = drops_core + if(aSignal) + aSignal = new aSignal(src) + aSignal.code = rand(1,100) + aSignal.anomaly_type = type + aSignal.research = rand(500,4000) + + var/frequency = rand(MIN_FREE_FREQ, MAX_FREE_FREQ) + if(ISMULTIPLE(frequency, 2))//signaller frequencies are always uneven! + frequency++ + aSignal.set_frequency(frequency) + + if(bSignal) + bSignal = new bSignal(src) + bSignal.code = rand(1,100) + bSignal.anomaly_type = type + var/frequency = rand(MIN_FREE_FREQ, MAX_FREE_FREQ) + if(ISMULTIPLE(frequency, 2))//signaller frequencies are always uneven! + frequency++ + bSignal.set_frequency(frequency) + + + + if(lifespan) + if(new_lifespan) + lifespan = new_lifespan + death_time = world.time + lifespan + countdown = new(src) + if(countdown_colour) + countdown.color = countdown_colour + if(immortal) + return + countdown.start() + +/obj/effect/anomaly/vv_edit_var(vname, vval) + . = ..() + if(vname == NAMEOF(src, immortal)) + if(vval) + countdown.stop() + else + countdown.start() + +/obj/effect/anomaly/process(seconds_per_tick) + anomalyEffect(seconds_per_tick) + if(death_time < world.time && !immortal) + if(loc) + detonate() + qdel(src) + +/obj/effect/anomaly/Destroy() + STOP_PROCESSING(SSobj, src) + QDEL_NULL(countdown) + QDEL_NULL(aSignal) + return ..() + +/obj/effect/anomaly/proc/anomalyEffect(seconds_per_tick) + if(!immobile && SPT_PROB(ANOMALY_MOVECHANCE, seconds_per_tick)) + step(src,pick(GLOB.alldirs)) + +/obj/effect/anomaly/proc/detonate() + new /obj/effect/particle_effect/smoke/bad(loc) + qdel(src) + return + +/obj/effect/anomaly/ex_act(severity, target) + if(severity >= EXPLODE_DEVASTATE) + qdel(src) + return TRUE + + return FALSE + +/obj/effect/anomaly/proc/anomalyNeutralize() + new /obj/effect/particle_effect/smoke/bad(loc) + + if(drops_core) + if(isnull(aSignal)) + stack_trace("An anomaly ([src]) exists that drops a core, yet has no core!") + else + aSignal.forceMove(drop_location()) + aSignal = null + // else, anomaly core gets deleted by qdel(src). + + qdel(src) + + +/obj/effect/anomaly/attackby(obj/item/weapon, mob/user, params) + if(weapon.tool_behaviour == TOOL_ANALYZER && aSignal) + to_chat(user, span_notice("You start analyzing [src].")) + if(do_after(user, 20, TRUE, src)) + to_chat(user, span_notice("[src]'s primary field is fluctuating along frequency [format_frequency(aSignal.frequency)], code [aSignal.code].")) + if(bSignal) + to_chat(user, span_notice("A second field is fluctuating along [format_frequency(bSignal.frequency)], code [bSignal.code]. It is highly unstable." )) + return TRUE + + return ..() + + +/obj/effect/anomaly/examine(mob/user) + . = ..() + if(user.research_scanner == TRUE) + to_chat(user, span_notice("If harvested, this anomaly would be worth [research_value] research points.")) + +/obj/effect/anomaly/throw_atom_into_space() + qdel(src) diff --git a/code/game/objects/effects/anomalies/anomalies_bluespace.dm b/code/game/objects/effects/anomalies/anomalies_bluespace.dm new file mode 100644 index 000000000000..58267030960e --- /dev/null +++ b/code/game/objects/effects/anomalies/anomalies_bluespace.dm @@ -0,0 +1,119 @@ + +/obj/effect/anomaly/bluespace + name = "jumper" + icon_state = "bluespace" + desc = "A mysterious anomaly that causes teleportation around it." + density = TRUE + aSignal = /obj/item/assembly/signaler/anomaly/bluespace + ///range from which we can teleport someone + effectrange = 3 + var/reagent_amount = 3 + ///Distance we can teleport someone passively + var/teleport_distance = 6 + +/obj/effect/anomaly/bluespace/anomalyEffect() + ..() + for(var/mob/living/Mob in range(effectrange,src)) + do_teleport(Mob, locate(Mob.x, Mob.y, Mob.z), teleport_distance, channel = TELEPORT_CHANNEL_BLUESPACE) + + if(!COOLDOWN_FINISHED(src, pulse_cooldown)) + return + + COOLDOWN_START(src, pulse_cooldown, pulse_delay) + for(var/mob/living/Mob in range(effectrange,src)) + if(iscarbon(Mob)) + var/mob/living/carbon/carbon = Mob + carbon.reagents?.add_reagent(/datum/reagent/bluespace, reagent_amount) + +/obj/effect/anomaly/bluespace/Bumped(atom/movable/AM) + do_teleport(AM, locate(AM.x, AM.y, AM.z), 8, channel = TELEPORT_CHANNEL_BLUESPACE) + +/obj/effect/anomaly/bluespace/detonate() + var/turf/T = pick(get_area_turfs(impact_area)) + if(!T) + return + + // Calculate new position (searches through beacons in world) + var/obj/item/beacon/chosen + var/list/possible = list() + for(var/obj/item/beacon/W in GLOB.teleportbeacons) + possible += W + + if(possible.len > 0) + chosen = pick(possible) + + if(!chosen) + return + + // Calculate previous position for transition + var/turf/FROM = T // the turf of origin we're travelling FROM + var/turf/TO = get_turf(chosen) // the turf of origin we're travelling TO + + playsound(TO, 'sound/effects/phasein.ogg', 100, TRUE) + priority_announce("Massive bluespace translocation detected.", "Anomaly Alert") + + var/list/flashers = list() + for(var/mob/living/carbon/C in viewers(TO, null)) + if(C.flash_act()) + flashers += C + + var/y_distance = TO.y - FROM.y + var/x_distance = TO.x - FROM.x + for (var/atom/movable/A in urange(12, FROM)) // iterate thru list of mobs in the area + if(istype(A, /obj/item/beacon)) + continue // don't teleport beacons because that's just insanely stupid + if(iscameramob(A)) + continue // Don't mess with AI eye, blob eye, xenobio or advanced cameras + if(A.anchored) + continue + + var/turf/newloc = locate(A.x + x_distance, A.y + y_distance, TO.z) // calculate the new place + if(!A.Move(newloc) && newloc) // if the atom, for some reason, can't move, FORCE them to move! :) We try Move() first to invoke any movement-related checks the atom needs to perform after moving + A.forceMove(newloc) + + if(ismob(A) && !(A in flashers)) // don't flash if we're already doing an effect + var/mob/give_sparkles = A + if(give_sparkles.client) + blue_effect(give_sparkles) + . = ..() + +/obj/effect/anomaly/bluespace/proc/blue_effect(mob/M) + var/obj/blueeffect = new /obj(src) + blueeffect.screen_loc = "WEST,SOUTH to EAST,NORTH" + blueeffect.icon = 'icons/effects/effects.dmi' + blueeffect.icon_state = "shieldsparkles" + blueeffect.layer = FLASH_LAYER + blueeffect.plane = FULLSCREEN_PLANE + blueeffect.mouse_opacity = MOUSE_OPACITY_TRANSPARENT + M.client.screen += blueeffect + stoplag(20) + M.client.screen -= blueeffect + qdel(blueeffect) + +/obj/effect/anomaly/bluespace/big + immortal = TRUE + effectrange = 4 + teleport_distance = 12 + reagent_amount = 20 + +/obj/effect/anomaly/bluespace/big/Initialize(mapload, new_lifespan, drops_core) + . = ..() + + transform *= 1.5 + +/obj/effect/anomaly/bluespace/big/Bumped(atom/movable/bumpee) + . = ..() + if(iscarbon(bumpee)) + var/mob/living/carbon/carbon = bumpee + carbon.reagents?.add_reagent(/datum/reagent/bluespace, reagent_amount) + + if(!isliving(bumpee)) + return ..() + +/obj/effect/anomaly/bluespace/planetary + immortal = TRUE + immobile = TRUE + +/obj/effect/anomaly/bluespace/big/planetary + immortal = TRUE + immobile = TRUE diff --git a/code/game/objects/effects/anomalies/anomalies_flux.dm b/code/game/objects/effects/anomalies/anomalies_flux.dm new file mode 100644 index 000000000000..56e6f2c4c15e --- /dev/null +++ b/code/game/objects/effects/anomalies/anomalies_flux.dm @@ -0,0 +1,98 @@ +/obj/effect/anomaly/flux + name = "tesla" + icon_state = "flux" + desc = "A mysterious anomaly that sends out a near constant stream of electrical arcs." + density = TRUE + aSignal = /obj/item/assembly/signaler/anomaly/flux + pulse_delay = 2 SECONDS + effectrange = 0 + var/canshock = FALSE + var/shockdamage = 20 + var/explosive = FLUX_EXPLOSIVE + var/zap_range = 1 + var/zap_power = 1500 + var/zap_flags = ZAP_MOB_DAMAGE + +/obj/effect/anomaly/flux/Initialize(mapload, new_lifespan, drops_core = TRUE, explosive = FLUX_EXPLOSIVE) + . = ..() + src.explosive = explosive + var/static/list/loc_connections = list( + COMSIG_ATOM_ENTERED = PROC_REF(on_entered), + ) + AddElement(/datum/element/connect_loc, loc_connections) + +/obj/effect/anomaly/flux/anomalyEffect() + ..() + canshock = TRUE + for(var/mob/living/Mob in range(effectrange, src)) + mobShock(Mob) + + if(!COOLDOWN_FINISHED(src, pulse_cooldown)) + return + + COOLDOWN_START(src, pulse_cooldown, pulse_delay) + tesla_zap(src, zap_range, zap_power, zap_flags) + +/obj/effect/anomaly/flux/proc/on_entered(datum/source, atom/movable/AM) + SIGNAL_HANDLER + mobShock(AM) + tesla_zap(src, zap_range, zap_power, zap_flags) + new /obj/effect/particle_effect/sparks(loc) + +/obj/effect/anomaly/flux/Bump(atom/Atom) + mobShock(Atom) + tesla_zap(src, zap_range, zap_power, zap_flags) + +/obj/effect/anomaly/flux/Bumped(atom/movable/AM) + mobShock(AM) + tesla_zap(src, zap_range, zap_power, zap_flags) + +/obj/effect/anomaly/flux/proc/mobShock(mob/living/Mob) + if(canshock && istype(Mob)) + canshock = FALSE + Mob.electrocute_act(shockdamage, name, flags = SHOCK_NOGLOVES) + +/obj/effect/anomaly/flux/detonate() + switch(explosive) + if(FLUX_EXPLOSIVE) + explosion(src, devastation_range = 1, heavy_impact_range = 4, light_impact_range = 16, flash_range = 18) //Low devastation, but hits a lot of stuff. + if(FLUX_LOW_EXPLOSIVE) + explosion(src, heavy_impact_range = 1, light_impact_range = 4, flash_range = 6) + if(FLUX_NO_EXPLOSION) + new /obj/effect/particle_effect/sparks(loc) + + . = ..() + +/obj/effect/anomaly/flux/minor/Initialize(mapload, new_lifespan, drops_core = FALSE, explosive = FLUX_NO_EXPLOSION) + return ..() + + +/obj/effect/anomaly/flux/big + immortal = TRUE + shockdamage = 30 + pulse_delay = 2 + effectrange = 1 + + zap_range = 2 + zap_power = 3000 + zap_flags = ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE + +/obj/effect/anomaly/flux/big/Initialize(mapload, new_lifespan, drops_core) + . = ..() + + transform *= 1.5 + + +/obj/effect/anomaly/flux/big/Bumped(atom/movable/bumpee) + . = ..() + + if(isliving(bumpee)) + new /obj/effect/particle_effect/sparks(loc) + +/obj/effect/anomaly/flux/planetary + immortal = TRUE + immobile = TRUE + +/obj/effect/anomaly/flux/big/planetary + immortal = TRUE + immobile = TRUE diff --git a/code/game/objects/effects/anomalies/anomalies_gravity.dm b/code/game/objects/effects/anomalies/anomalies_gravity.dm new file mode 100644 index 000000000000..b5668732f52b --- /dev/null +++ b/code/game/objects/effects/anomalies/anomalies_gravity.dm @@ -0,0 +1,122 @@ + +/atom/movable/warp_effect + appearance_flags = PIXEL_SCALE|LONG_GLIDE // no tile bound so you can see it around corners and so + icon = 'icons/effects/light_overlays/light_352.dmi' + icon_state = "light" + pixel_x = -176 + pixel_y = -176 + +/obj/effect/anomaly/grav + name = "throngler" + icon_state = "gravity" + desc = "A mysterious anomaly that sucks things towards it with a gravitational field, ending in what has been termed a 'throngling'." + density = FALSE + aSignal = /obj/item/assembly/signaler/anomaly/grav + bSignal = null + effectrange = 4 + var/boing = 0 + ///Warp effect holder for displacement filter to "pulse" the anomaly + var/atom/movable/warp_effect/warp + +/obj/effect/anomaly/grav/Initialize(mapload, new_lifespan, drops_core) + . = ..() + var/static/list/loc_connections = list( + COMSIG_ATOM_ENTERED = .proc/on_entered, + ) + AddElement(/datum/element/connect_loc, loc_connections) + +/obj/effect/anomaly/grav/anomalyEffect() + ..() + boing = 1 + for(var/obj/O in orange(effectrange, src)) + if(!O.anchored) + step_towards(O,src) + for(var/mob/living/Mob in range(0, src)) + gravShock(Mob) + for(var/mob/living/Mob in orange(effectrange, src)) + if(!Mob.mob_negates_gravity()) + step_towards(Mob,src) + for(var/obj/O in range(0,src)) + if(!O.anchored) + if(isturf(O.loc)) + var/turf/T = O.loc + if(T.intact && HAS_TRAIT(O, TRAIT_T_RAY_VISIBLE)) + continue + var/mob/living/target = locate() in view(effectrange,src) + if(target && !target.stat) + O.throw_at(target, 5, 10) + + if(!COOLDOWN_FINISHED(src, pulse_cooldown)) + return + + COOLDOWN_START(src, pulse_cooldown, pulse_delay) + for(var/mob/living/carbon/carbon in orange(effectrange/2, src)) + if(carbon.run_armor_check(attack_flag = "melee") >= 40) + carbon.break_random_bone() + if(carbon.run_armor_check(attack_flag = "melee") >= 60) + carbon.break_all_bones() //crunch + carbon.apply_damage(10, BRUTE) + +/obj/effect/anomaly/grav/proc/on_entered(datum/source, atom/movable/AM) + SIGNAL_HANDLER + + gravShock(AM) + +/obj/effect/anomaly/grav/Bump(atom/A) + gravShock(A) + +/obj/effect/anomaly/grav/Bumped(atom/movable/AM) + gravShock(AM) + +/obj/effect/anomaly/grav/proc/gravShock(mob/living/Guy) + if(boing && isliving(Guy) && !Guy.stat) + Guy.Paralyze(40) + var/atom/target = get_edge_target_turf(Guy, get_dir(src, get_step_away(Guy, src))) + Guy.throw_at(target, 5, 1) + boing = 0 + if(iscarbon(Guy)) + for(var/mob/living/carbon/carbon in range(0,src)) + if(carbon.run_armor_check(attack_flag = "melee") >= 20) + carbon.break_random_bone() + else if(carbon.run_armor_check(attack_flag = "melee") >= 40) + carbon.break_all_bones() //crunch + carbon.apply_damage(10, BRUTE) + +/obj/effect/anomaly/grav/high + effectrange = 5 + var/grav_field + +/obj/effect/anomaly/grav/high/Initialize(mapload, new_lifespan) + . = ..() + INVOKE_ASYNC(src, .proc/setup_grav_field) + +/obj/effect/anomaly/grav/high/proc/setup_grav_field() + grav_field = make_field(/datum/proximity_monitor/advanced/gravity, list("current_range" = effectrange, "host" = src, "gravity_value" = 2)) + +/obj/effect/anomaly/grav/high/Destroy() + QDEL_NULL(grav_field) + . = ..() + +///Bigger, meaner, immortal gravity anomaly. although this is just the super grav anomaly but bigger and shattering move force +/obj/effect/anomaly/grav/high/big + immortal = TRUE + effectrange = 7 + move_force = MOVE_FORCE_OVERPOWERING + +/obj/effect/anomaly/grav/high/big/Initialize(mapload, new_lifespan, drops_core) + . = ..() + + transform *= 1.5 + + +/obj/effect/anomaly/grav/planetary + immortal = TRUE + immobile = TRUE + +/obj/effect/anomaly/grav/high/planetary + immortal = TRUE + immobile = TRUE + +/obj/effect/anomaly/grav/high/big/planetary + immortal = TRUE + immobile = TRUE diff --git a/code/game/objects/effects/anomalies/anomalies_hallucination.dm b/code/game/objects/effects/anomalies/anomalies_hallucination.dm new file mode 100644 index 000000000000..fc7e4e3c9859 --- /dev/null +++ b/code/game/objects/effects/anomalies/anomalies_hallucination.dm @@ -0,0 +1,52 @@ + +/obj/effect/anomaly/hallucination + name = "hallucination anomaly" + icon_state = "hallucination" + aSignal = /obj/item/assembly/signaler/anomaly/hallucination + /// Time passed since the last effect, increased by delta_time of the SSobj + var/ticks = 0 + /// How many seconds between each small hallucination pulses + pulse_delay = 5 SECONDS + effectrange = 5 + +/obj/effect/anomaly/hallucination/anomalyEffect(delta_time) + . = ..() + ticks += delta_time + if(ticks < pulse_delay) + return + ticks -= pulse_delay + var/turf/open/our_turf = get_turf(src) + if(istype(our_turf)) + hallucination_pulse(our_turf, 5) + +/obj/effect/anomaly/hallucination/detonate() + var/turf/open/our_turf = get_turf(src) + if(istype(our_turf)) + hallucination_pulse(our_turf, 10) + . = ..() + +/obj/effect/anomaly/hallucination/proc/hallucination_pulse(turf/open/location, effectrange) + for(var/mob/living/carbon/human/user in view(location, effectrange)) + // If they are immune to the anomaly + if (iscarbon(user) && !user.research_scanner) + continue + + // Blind people don't get hallucinations. + if (user.is_blind()) + continue + + // Everyone else gets hallucinations. + var/dist = sqrt(1 / max(1, get_dist(user, location))) + user.hallucination += 50 * dist + user.hallucination = clamp(user.hallucination, 0, 150) + var/list/messages = list( + "You feel your conscious mind fall apart!", + "Reality warps around you!", + "Something's wispering around you!", + "You are going insane!", + ) + to_chat(user, span_warning(pick(messages))) + +/obj/effect/anomaly/hallucination/planetary + immortal = TRUE + immobile = TRUE diff --git a/code/game/objects/effects/anomalies/anomalies_heartbeat.dm b/code/game/objects/effects/anomalies/anomalies_heartbeat.dm new file mode 100644 index 000000000000..33a2983fcff4 --- /dev/null +++ b/code/game/objects/effects/anomalies/anomalies_heartbeat.dm @@ -0,0 +1,45 @@ +/obj/effect/anomaly/heartbeat + name = "heartbeat" + icon_state = "heartbeat" + desc = "A mysterious anomaly, it ionizes the world around it." + density = TRUE + aSignal = /obj/item/assembly/signaler/anomaly/heartbeat + effectrange = 3 + pulse_delay = 6 SECONDS + var/reagent_amount = 5 + +/obj/effect/anomaly/heartbeat/anomalyEffect() + ..() + + if(!COOLDOWN_FINISHED(src, pulse_cooldown)) + return + + COOLDOWN_START(src, pulse_cooldown, pulse_delay) + playsound(src, 'sound/health/slowbeat2.ogg', 100) + radiation_pulse(src, 500, 2) + + + if(!COOLDOWN_FINISHED(src, pulse_secondary_cooldown)) + return + + COOLDOWN_START(src, pulse_secondary_cooldown, pulse_delay*4) + var/turf/spot = locate(rand(src.x-effectrange, src.x+effectrange), rand(src.y-effectrange, src.y+effectrange), src.z) + playsound(spot, 'sound/health/slowbeat2.ogg', 100) + radiation_pulse(spot, 200, effectrange) + for(var/mob/living/carbon/nearby in range(effectrange, spot)) + nearby.apply_damage(10, BURN) + to_chat(nearby, "Radiation burns open on your body.") + +/obj/effect/anomaly/heartbeat/Bumped(atom/movable/AM) + var/turf/spot = locate(rand(src.x-effectrange, src.x+effectrange), rand(src.y-effectrange, src.y+effectrange), src.z) + playsound(spot, 'sound/health/slowbeat2.ogg', 100) + radiation_pulse(spot, 200, effectrange) + +/obj/effect/anomaly/heartbeat/detonate() + radiation_pulse(src, 5000, 2) + playsound(src, 'sound/health/fastbeat2.ogg', 300) + . = ..() + +/obj/effect/anomaly/heartbeat/planetary + immortal = TRUE + immobile = TRUE diff --git a/code/game/objects/effects/anomalies/anomalies_melter.dm b/code/game/objects/effects/anomalies/anomalies_melter.dm new file mode 100644 index 000000000000..763c1f334610 --- /dev/null +++ b/code/game/objects/effects/anomalies/anomalies_melter.dm @@ -0,0 +1,47 @@ +/obj/effect/anomaly/melter + name = "melter" + icon_state = "melter" + desc = "A mysterious anomaly. Everburning green flames with a horrid sizzle, melting what's near" + effectrange = 2 + pulse_delay = 10 SECONDS + aSignal = /obj/item/assembly/signaler/anomaly/pyro + +/obj/effect/anomaly/melter/anomalyEffect(seconds_per_tick) + ..() + + + if(!COOLDOWN_FINISHED(src, pulse_cooldown)) + return + COOLDOWN_START(src, pulse_cooldown, pulse_delay) + + for(var/mob/living/carbon/meltee in range(effectrange, src)) + for(var/X in meltee.get_equipped_items()) + var/obj/item/I = X + I.acid_act(20, 20) + I.update_icon() + for (var/obj/item/melt in range(effectrange, src)) + melt.acid_act(20, 10) + melt.update_icon() + +/obj/effect/anomaly/melter/Bumped(atom/movable/AM) + if(isobj(AM)) + var/obj/acid = AM + acid.acid_act(100,20) + acid.update_icon() + + +/obj/effect/anomaly/melter/detonate() + for(var/mob/living/carbon/meltee in range(effectrange, src)) + for(var/X in meltee.get_equipped_items()) + var/obj/item/I = X + I.acid_act(200, 20) + I.update_icon() + for(var/obj/item in range(effectrange, src)) + item.acid_act(100,20) + item.update_icon() + . = ..() + + +/obj/effect/anomaly/melter/planetary + immortal = TRUE + immobile = TRUE diff --git a/code/game/objects/effects/anomalies/anomalies_phantom.dm b/code/game/objects/effects/anomalies/anomalies_phantom.dm new file mode 100644 index 000000000000..9407bbcbf920 --- /dev/null +++ b/code/game/objects/effects/anomalies/anomalies_phantom.dm @@ -0,0 +1,46 @@ +/obj/effect/anomaly/phantom + name = "phantom" + icon_state = "phantom" + desc = "A mysterious anomaly, the outline of a humanoid, endlessly screaming in agony." + density = FALSE + aSignal = /obj/item/assembly/signaler/anomaly/phantom + effectrange = 3 + pulse_delay = 2 SECONDS + + +/obj/effect/anomaly/phantom/anomalyEffect() + ..() + if(!COOLDOWN_FINISHED(src, pulse_cooldown)) + return + + COOLDOWN_START(src, pulse_cooldown, pulse_delay) + +// /tg/'s helgrasp spawn_hands proc, modified to work as an anomaly effect + for(var/mob/living/carbon/handsy in range(effectrange, src)) + if(handsy.stat != DEAD) + var/grab_dir = turn(handsy.dir, pick(-90, 90, 180, 180)) + var/turf/spawn_turf = get_ranged_target_turf(handsy, grab_dir, 8) + if(!spawn_turf) + return + new /obj/effect/temp_visual/dir_setting/curse/grasp_portal(spawn_turf, handsy.dir) + playsound(spawn_turf, 'sound/effects/curse2.ogg', 80, TRUE, -1) + var/obj/projectile/curse_hand/phantom/hand = new (spawn_turf) + hand.preparePixelProjectile(handsy, spawn_turf) + if(QDELETED(hand)) + return + hand.fire() + return + + +/obj/effect/anomaly/phantom/Bumped(atom/movable/AM) + anomalyEffect() + new /obj/effect/gibspawner/human(loc) + +/obj/effect/anomaly/phantom/detonate() + anomalyEffect() + new /obj/effect/mob_spawn/human/corpse/damaged/legioninfested(loc) + . = ..() + +/obj/effect/anomaly/phantom/planetary + immortal = TRUE + immobile = TRUE diff --git a/code/game/objects/effects/anomalies/anomalies_plasmasoul.dm b/code/game/objects/effects/anomalies/anomalies_plasmasoul.dm new file mode 100644 index 000000000000..3bb9fde4b5e0 --- /dev/null +++ b/code/game/objects/effects/anomalies/anomalies_plasmasoul.dm @@ -0,0 +1,52 @@ +/obj/effect/anomaly/plasmasoul + name = "plasma soul" + icon_state = "plasmasoul" + desc = "A mysterious anomaly, it slowly emits plasma into the area around it." + density = TRUE + aSignal = /obj/item/assembly/signaler/anomaly/plasmasoul + effectrange = 3 + pulse_delay = 6 SECONDS + var/reagent_amount = 5 + +/obj/effect/anomaly/plasmasoul/anomalyEffect() + ..() + + if(!COOLDOWN_FINISHED(src, pulse_cooldown)) + return + + COOLDOWN_START(src, pulse_cooldown, pulse_delay) + for(var/mob/living/Mob in range(effectrange,src)) + if(iscarbon(Mob)) + var/mob/living/carbon/carbon = Mob + carbon.reagents?.add_reagent(/datum/reagent/toxin/plasma, reagent_amount) + to_chat(Mob, span_warning("Your blood feels thick..")) + playsound(Mob, 'sound/effects/bubbles.ogg', 50) + + + if(!COOLDOWN_FINISHED(src, pulse_secondary_cooldown)) + return + + COOLDOWN_START(src, pulse_secondary_cooldown, pulse_delay*3) + var/turf/open/tile = get_turf(src) + if(istype(tile)) + tile.atmos_spawn_air("o2=250;plasma=750;TEMP=1000") + +/obj/effect/anomaly/plasmasoul/Bumped(atom/movable/AM) + var/turf/open/spot = locate(rand(src.x-effectrange, src.x+effectrange), rand(src.y-effectrange, src.y+effectrange), src.z) + if(istype(spot)) + spot.atmos_spawn_air("o2=50;plasma=300;TEMP=500") + +/obj/effect/anomaly/plasmasoul/detonate() + for(var/mob/living/Mob in range(effectrange*2,src)) + if(iscarbon(Mob)) + var/mob/living/carbon/carbon = Mob + if(carbon.run_armor_check(attack_flag = "bio") <= 40) + carbon.reagents?.add_reagent(/datum/reagent/toxin/plasma, reagent_amount*3) + var/turf/open/tile = get_turf(src) + if(istype(tile)) + tile.atmos_spawn_air("o2=600;plasma=3000;TEMP=2000") + . = ..() + +/obj/effect/anomaly/plasmasoul/planetary + immortal = TRUE + immobile = TRUE diff --git a/code/game/objects/effects/anomalies/anomalies_pulsar.dm b/code/game/objects/effects/anomalies/anomalies_pulsar.dm new file mode 100644 index 000000000000..1f75acee56b8 --- /dev/null +++ b/code/game/objects/effects/anomalies/anomalies_pulsar.dm @@ -0,0 +1,32 @@ +/obj/effect/anomaly/pulsar + name = "pulsar" + icon_state = "pulsar" + desc = "A mysterious anomaly, endless electromagnetic disturbances roll out from it" + density = TRUE + aSignal = /obj/item/assembly/signaler/anomaly/pulsar + effectrange = 4 + pulse_delay = 15 SECONDS + + +/obj/effect/anomaly/pulsar/anomalyEffect() + ..() + + if(!COOLDOWN_FINISHED(src, pulse_cooldown)) + return + + COOLDOWN_START(src, pulse_cooldown, pulse_delay) + var/turf/spot = locate(rand(src.x-effectrange/2, src.x+effectrange/2), rand(src.y-effectrange/2, src.y+effectrange/2), src.z) + empulse(spot, effectrange/2, effectrange) //yeah it's not a thrilling effect. I think it's fine though. + + +/obj/effect/anomaly/pulsar/Bumped(atom/movable/AM) + empulse(loc, effectrange/2, effectrange) + +/obj/effect/anomaly/pulsar/detonate() + empulse(loc, effectrange, effectrange*2) + . = ..() + + +/obj/effect/anomaly/pulsar/planetary + immortal = TRUE + immobile = TRUE diff --git a/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm b/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm new file mode 100644 index 000000000000..b4c93868e670 --- /dev/null +++ b/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm @@ -0,0 +1,86 @@ + +/obj/effect/anomaly/pyro + name = "plasmaball" + icon_state = "pyroclastic" + desc = "A mysterious anomaly, made of an everburning gas. Those who approach it tend to absorb it's heat, or even ignite." + effectrange = 4 + pulse_delay = 10 SECONDS + aSignal = /obj/item/assembly/signaler/anomaly/pyro + +/obj/effect/anomaly/pyro/anomalyEffect(seconds_per_tick) + ..() + + for(var/mob/living/carbon/nearby in range(effectrange, src)) + nearby.adjust_bodytemperature(20) + visible_message("[src] pulses!") + + if(!COOLDOWN_FINISHED(src, pulse_cooldown)) + return + COOLDOWN_START(src, pulse_cooldown, pulse_delay) + + for(var/mob/living/carbon/nearby in range(effectrange/2, src)) + nearby.fire_stacks += 3 + nearby.IgniteMob() + visible_message("[src] ignites [nearby]!") + + +/obj/effect/anomaly/pyro/Bumped(atom/movable/AM) + if(isobj(AM)) + var/obj/firething = AM + if(firething.resistance_flags & FIRE_PROOF) + firething.resistance_flags &= ~FIRE_PROOF + if(firething.armor.fire > 50) //*Me copies from lava code + firething.armor = firething.armor.setRating(fire = 50) + firething.fire_act(10000, 1000) + if(iscarbon(AM)) + var/mob/living/carbon/onfire + onfire.fire_stacks += 3 + onfire.IgniteMob() + +/obj/effect/anomaly/pyro/detonate() + INVOKE_ASYNC(src, PROC_REF(makepyroslime)) + . = ..() + +/obj/effect/anomaly/pyro/proc/makepyroslime() + var/turf/open/tile = get_turf(src) + if(istype(tile)) + tile.atmos_spawn_air("o2=250;plasma=750;TEMP=1000") //Make it hot and burny for the new slime + + var/new_colour = pick("red", "orange") + var/mob/living/simple_animal/slime/pyro = new(tile, new_colour) + pyro.rabid = TRUE + pyro.amount_grown = SLIME_EVOLUTION_THRESHOLD + pyro.Evolve() + var/datum/action/innate/slime/reproduce/repro_action = new + repro_action.Grant(pyro) + + +/obj/effect/anomaly/pyro/big + immortal = TRUE + pulse_delay = 2 + effectrange = 6 + +/obj/effect/anomaly/pyro/big/Initialize(mapload, new_lifespan, drops_core) + . = ..() + + transform *= 2 + + +/obj/effect/anomaly/pyro/big/anomalyEffect(seconds_per_tick) + . = ..() + + if(!.) + return + + var/turf/turf = get_turf(src) + if(!isgroundlessturf(turf)) + turf.TerraformTurf(/turf/open/lava/smooth, flags = CHANGETURF_INHERIT_AIR) + + +/obj/effect/anomaly/pyro/planetary + immortal = TRUE + immobile = TRUE + +/obj/effect/anomaly/pyro/big/planetary + immortal = TRUE + immobile = TRUE diff --git a/code/game/objects/effects/anomalies/anomalies_sparkler.dm b/code/game/objects/effects/anomalies/anomalies_sparkler.dm new file mode 100644 index 000000000000..0b26e6fd6a1c --- /dev/null +++ b/code/game/objects/effects/anomalies/anomalies_sparkler.dm @@ -0,0 +1,37 @@ +/obj/effect/anomaly/sparkler + name = "sparkler" + icon_state = "sparkler" + desc = "A mysterious anomaly, constantly throwing sparks into its vicinity." + density = TRUE + aSignal = /obj/item/assembly/signaler/anomaly/sparkler + effectrange = 4 + pulse_delay = 1 SECONDS + +/obj/effect/anomaly/sparkler/anomalyEffect() + ..() + + if(!COOLDOWN_FINISHED(src, pulse_cooldown)) + return + + COOLDOWN_START(src, pulse_cooldown, pulse_delay) + var/turf/spot = locate(rand(src.x-effectrange, src.x+effectrange), rand(src.y-effectrange, src.y+effectrange), src.z) + new /obj/effect/particle_effect/sparks(spot) + return + + +/obj/effect/anomaly/sparkler/Bumped(atom/movable/AM) + tesla_zap(src, 2, 5000, ZAP_FUSION_FLAGS) + +/obj/effect/anomaly/sparkler/detonate() + var/i = 0 + while(i <= 5) + tesla_zap(src, 3, 10000, ZAP_DEFAULT_FLAGS) + anomalyEffect() + anomalyEffect() + anomalyEffect() + i = i + 1 + . = ..() + +/obj/effect/anomaly/sparkler/planetary + immortal = TRUE + immobile = TRUE diff --git a/code/game/objects/effects/anomalies/anomalies_static.dm b/code/game/objects/effects/anomalies/anomalies_static.dm new file mode 100644 index 000000000000..07107cd5a332 --- /dev/null +++ b/code/game/objects/effects/anomalies/anomalies_static.dm @@ -0,0 +1,90 @@ +/obj/effect/anomaly/tvstatic + name = "static" + icon_state = "static" + desc = "A mysterious anomaly. A hole in the world, endless buzzing emitting from it." + density = TRUE + aSignal = /obj/item/assembly/signaler/anomaly/tvstatic + effectrange = 4 + pulse_delay = 4 SECONDS + var/mob/living/carbon/stored_mob = null + +/obj/effect/anomaly/tvstatic/examine(mob/user) + . = ..() + if(!iscarbon(user)) + return + if(iscarbon(user) && !user.research_scanner) //this'll probably cause some weirdness when I start using research scanner in more places / on more items. Oh well. + var/mob/living/carbon/bah = user + to_chat(bah, span_userdanger("Your head aches as you stare into the [src]!")) + bah.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5, 100) + +/obj/effect/anomaly/tvstatic/anomalyEffect() + ..() + + var/turf/spot = locate(rand(src.x-effectrange, src.x+effectrange), rand(src.y-effectrange, src.y+effectrange), src.z) + new /obj/effect/particle_effect/staticball(spot) + + + if(!COOLDOWN_FINISHED(src, pulse_cooldown)) + return + + COOLDOWN_START(src, pulse_cooldown, pulse_delay) + + for(var/mob/living/carbon/looking in range(effectrange, src)) + playsound(src, 'sound/effects/walkietalkie.ogg', 100) + if (!HAS_TRAIT(looking, TRAIT_MINDSHIELD) && looking.stat != DEAD || !looking.research_scanner && looking.stat != DEAD) + looking.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10, 200) + playsound(src, 'sound/effects/stall.ogg', 100) + if(looking.getOrganLoss(ORGAN_SLOT_BRAIN) >= 150 && looking.stat != DEAD) + if(prob(20)) + var/mob/living/carbon/victim = looking + var/obj/effect/anomaly/tvstatic/planetary/expansion + expansion = new(get_turf(victim)) + visible_message(" The static overtakes [victim], [expansion] taking their place!") + victim.death() + expansion.stored_mob = victim + victim.forceMove(expansion) + return + + +/obj/effect/anomaly/tvstatic/Bumped(atom/movable/AM) + anomalyEffect() + +/obj/effect/anomaly/tvstatic/detonate() + for(var/mob/living/carbon/looking in range(effectrange, src)) + visible_message(" The static lashes out, agony filling your mind as its tendrils scrape your thoughts!") + if (!HAS_TRAIT(looking, TRAIT_MINDSHIELD) && looking.stat != DEAD) + looking.adjustOrganLoss(ORGAN_SLOT_BRAIN, 100, 200) + playsound(src, 'sound/effects/stall.ogg', 100) + anomalyEffect() + . = ..() + + +/obj/effect/anomaly/tvstatic/anomalyNeutralize() + var/turf/T = get_turf(src) + if(T) + if(stored_mob) + visible_message("The static spits out [stored_mob], their body coming out in a burst!") + stored_mob.forceMove(get_turf(src)) + stored_mob = null + . = ..() + + +/obj/effect/anomaly/tvstatic/planetary + immortal = TRUE + immobile = TRUE + +/obj/effect/particle_effect/staticball + name = "static blob" + desc = "An unsettling mass of free floating static" + icon = 'icons/effects/anomalies.dmi' + icon_state = "static" + +/obj/effect/particle_effect/staticball/Initialize() + ..() + return INITIALIZE_HINT_LATELOAD + +/obj/effect/particle_effect/staticball/LateInitialize() + flick(icon_state, src) + playsound(src, "walkietalkie", 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + QDEL_IN(src, 20) + diff --git a/code/game/objects/effects/anomalies/anomalies_veins.dm b/code/game/objects/effects/anomalies/anomalies_veins.dm new file mode 100644 index 000000000000..416e325ccdbd --- /dev/null +++ b/code/game/objects/effects/anomalies/anomalies_veins.dm @@ -0,0 +1,55 @@ +/obj/effect/anomaly/veins + name = "veins" + icon_state = "veins" + desc = "A mysterious anomaly, throbbing purple veins, suspended midair." + density = TRUE + aSignal = /obj/item/assembly/signaler/anomaly/veins + effectrange = 3 + pulse_delay = 4 SECONDS + + +/obj/effect/anomaly/veins/anomalyEffect() + ..() + + if(!COOLDOWN_FINISHED(src, pulse_cooldown)) + return + + COOLDOWN_START(src, pulse_cooldown, pulse_delay) + + + for(var/mob/living/carbon/suckee in range(effectrange, src)) + if(suckee.run_armor_check(attack_flag = "melee") <= 40 ) + suckee.bleed(20) + suckee.apply_damage(5, BRUTE) + visible_message("Blood starts to fly off of [suckee], heading for the [src]!") + + return + + +/obj/effect/anomaly/veins/Bumped(atom/movable/AM) + if(!COOLDOWN_FINISHED(src, pulse_secondary_cooldown)) + return + + COOLDOWN_START(src, pulse_secondary_cooldown, 10) + + anomalyEffect() + var/turf/spot = locate(rand(src.x-effectrange/2, src.x+effectrange/2), rand(src.y-effectrange/2, src.y+effectrange/2), src.z) + var/obj/effect/gibspawner/mess = pick(list( + /obj/effect/gibspawner/human, + /obj/effect/gibspawner/xeno, + /obj/effect/gibspawner/generic/animal + )) + new mess(spot) + +/obj/effect/anomaly/veins/detonate() + for(var/mob/living/carbon/suckee in range(effectrange, src)) + suckee.bleed(200) + visible_message("[suckee] hemorrages, a fountain of blood heading for [src]!") + anomalyEffect() + anomalyEffect() + anomalyEffect() + . = ..() + +/obj/effect/anomaly/veins/planetary + immortal = TRUE + immobile = TRUE diff --git a/code/game/objects/effects/anomalies/anomalies_vortex.dm b/code/game/objects/effects/anomalies/anomalies_vortex.dm new file mode 100644 index 000000000000..16a30cbaa9c6 --- /dev/null +++ b/code/game/objects/effects/anomalies/anomalies_vortex.dm @@ -0,0 +1,69 @@ + +/obj/effect/anomaly/vortex + name = "vortex" + icon_state = "vortex" + desc = "A mysterious anomaly, this one destroys everything around it." + aSignal = /obj/item/assembly/signaler/anomaly/vortex + bSignal = null + +/obj/effect/anomaly/vortex/anomalyEffect() + ..() + if(!isturf(loc)) //blackhole cannot be contained inside anything. Weird stuff might happen + qdel(src) + return + + grav(rand(0,3), rand(2,3), 50, 25) + + //Throwing stuff around! + for(var/obj/O in range(2,src)) + if(O == src) + return //DON'T DELETE YOURSELF GOD DAMN + if(!O.anchored) + var/mob/living/target = locate() in view(4,src) + if(target && !target.stat) + O.throw_at(target, 7, 5) + else + SSexplosions.medobj += O + +/obj/effect/anomaly/vortex/proc/grav(r, ex_act_force, pull_chance, turf_removal_chance) + for(var/t in -r to r) + affect_coord(x+t, y-r, ex_act_force, pull_chance, turf_removal_chance) + affect_coord(x-t, y+r, ex_act_force, pull_chance, turf_removal_chance) + affect_coord(x+r, y+t, ex_act_force, pull_chance, turf_removal_chance) + affect_coord(x-r, y-t, ex_act_force, pull_chance, turf_removal_chance) + +/obj/effect/anomaly/vortex/proc/affect_coord(x, y, ex_act_force, pull_chance, turf_removal_chance) + //Get turf at coordinate + var/turf/T = locate(x, y, z) + if(isnull(T)) + return + + //Pulling and/or ex_act-ing movable atoms in that turf + if(prob(pull_chance)) + for(var/obj/O in T.contents) + if(O.anchored) + switch(ex_act_force) + if(EXPLODE_DEVASTATE) + SSexplosions.highobj += O + if(EXPLODE_HEAVY) + SSexplosions.medobj += O + if(EXPLODE_LIGHT) + SSexplosions.lowobj += O + else + step_towards(O,src) + for(var/mob/living/M in T.contents) + step_towards(M,src) + + //Damaging the turf + if(T && prob(turf_removal_chance)) + switch(ex_act_force) + if(EXPLODE_DEVASTATE) + SSexplosions.highturf += T + if(EXPLODE_HEAVY) + SSexplosions.medturf += T + if(EXPLODE_LIGHT) + SSexplosions.lowturf += T + +/obj/effect/anomaly/vortex/planetary + immortal = TRUE + immobile = TRUE diff --git a/code/game/objects/effects/decals/cleanable/food.dm b/code/game/objects/effects/decals/cleanable/food.dm index 9fa9f23d2646..a5769f887160 100644 --- a/code/game/objects/effects/decals/cleanable/food.dm +++ b/code/game/objects/effects/decals/cleanable/food.dm @@ -53,14 +53,6 @@ safepasses-- if(safepasses <= 0 && !QDELETED(src)) qdel(src) - if(issquidperson(AM)) - var/mob/living/carbon/human/H = AM - if(H.movement_type & FLYING) - return - H.adjustFireLoss(2, TRUE) - H.reagents.add_reagent(/datum/reagent/consumable/sodiumchloride, 5) - playsound(H, 'sound/weapons/sear.ogg', 50, TRUE) - to_chat(H, "[src] burns you!") /obj/effect/decal/cleanable/food/flour name = "flour" diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 04569904a9cc..b07a53870730 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -807,6 +807,229 @@ ) lootcount = 1 +/obj/effect/spawner/lootdrop/anomaly + name = "random anomaly spawner" + loot = list( + /obj/effect/anomaly/bluespace/planetary, + /obj/effect/anomaly/flux/planetary, + /obj/effect/anomaly/grav/planetary, + /obj/effect/anomaly/hallucination/planetary, + /obj/effect/anomaly/pyro/planetary, + /obj/effect/anomaly/vortex/planetary, + /obj/effect/anomaly/grav/high/planetary, + /obj/effect/anomaly/heartbeat/planetary, + /obj/effect/anomaly/sparkler/planetary, + /obj/effect/anomaly/tvstatic/planetary, + /obj/effect/anomaly/veins/planetary, + /obj/effect/anomaly/plasmasoul/planetary, + /obj/effect/anomaly/phantom/planetary, + /obj/effect/anomaly/melter/planetary, + ) + +/obj/effect/spawner/lootdrop/anomaly/safe + name = "relatively safe anomaly spawner" + loot = list( + /obj/effect/anomaly/hallucination/planetary, + /obj/effect/anomaly/pyro/planetary, + /obj/effect/anomaly/sparkler/planetary, + /obj/effect/anomaly/veins/planetary, + /obj/effect/anomaly/phantom/planetary, + ) + +/obj/effect/spawner/lootdrop/anomaly/dangerous + name = "relatively dangerous anomaly spawner" + loot = list( + /obj/effect/anomaly/bluespace/planetary, + /obj/effect/anomaly/flux/planetary, + /obj/effect/anomaly/grav/planetary, + /obj/effect/anomaly/vortex/planetary, + /obj/effect/anomaly/grav/high/planetary, + /obj/effect/anomaly/heartbeat/planetary, + /obj/effect/anomaly/tvstatic/planetary, + /obj/effect/anomaly/plasmasoul/planetary, + /obj/effect/anomaly/melter/planetary, + ) + +/obj/effect/spawner/lootdrop/anomaly/big + name = "random big anomaly spawner" + loot = list( + /obj/effect/anomaly/bluespace/big/planetary, + /obj/effect/anomaly/flux/big/planetary, + /obj/effect/anomaly/grav/high/big/planetary, + /obj/effect/anomaly/pyro/big/planetary + + ) + +//handpicked lists relevant to the planets they're on +// /cave lists are made for spawning in cave biomes. Not every anomaly goes well there. We don't have enough anomalies to really populate them all though + +/obj/effect/spawner/lootdrop/anomaly/jungle + name = "Jungle Anomaly Spawner" + loot = list( + /obj/effect/anomaly/flux/planetary, + /obj/effect/anomaly/hallucination/planetary, + /obj/effect/anomaly/heartbeat/planetary, + /obj/effect/anomaly/tvstatic/planetary, + /obj/effect/anomaly/veins/planetary, + /obj/effect/anomaly/phantom/planetary, + ) + +/obj/effect/spawner/lootdrop/anomaly/jungle/cave + loot = list( + /obj/effect/anomaly/flux/planetary, + /obj/effect/anomaly/hallucination/planetary, + /obj/effect/anomaly/heartbeat/planetary, + /obj/effect/anomaly/tvstatic/planetary, + /obj/effect/anomaly/veins/planetary, + /obj/effect/anomaly/phantom/planetary, + ) + +//beaches don't currently have anomalies, but I don't see a reason why they couldn't have *some* + +/obj/effect/spawner/lootdrop/anomaly/beach + name = "Beach anomaly spawner" + loot = list( + /obj/effect/anomaly/hallucination/planetary, + /obj/effect/anomaly/sparkler/planetary, + /obj/effect/anomaly/veins/planetary, + /obj/effect/anomaly/phantom/planetary, + ) + +/obj/effect/spawner/lootdrop/anomaly/beach/cave + loot = list( + /obj/effect/anomaly/hallucination/planetary, + /obj/effect/anomaly/sparkler/planetary, + /obj/effect/anomaly/veins/planetary, + /obj/effect/anomaly/phantom/planetary, + ) + +/obj/effect/spawner/lootdrop/anomaly/sand + name = "Sand anomaly spawner" + loot = list( + /obj/effect/anomaly/bluespace/planetary, + /obj/effect/anomaly/flux/planetary, + /obj/effect/anomaly/sparkler/planetary, + /obj/effect/anomaly/tvstatic/planetary, + /obj/effect/anomaly/veins/planetary, + /obj/effect/anomaly/phantom/planetary, + /obj/effect/anomaly/melter/planetary, + ) + +/obj/effect/spawner/lootdrop/anomaly/sand/cave + loot = list( + /obj/effect/anomaly/flux/planetary, + /obj/effect/anomaly/pyro/planetary, + /obj/effect/anomaly/sparkler/planetary, + /obj/effect/anomaly/tvstatic/planetary, + /obj/effect/anomaly/veins/planetary, + /obj/effect/anomaly/phantom/planetary, + /obj/effect/anomaly/melter/planetary, + ) + +/obj/effect/spawner/lootdrop/anomaly/rock + name = "Rock anomaly spawner" + loot = list( + /obj/effect/anomaly/bluespace/planetary, + /obj/effect/anomaly/flux/planetary, + /obj/effect/anomaly/grav/planetary, + /obj/effect/anomaly/hallucination/planetary, + /obj/effect/anomaly/pyro/planetary, + /obj/effect/anomaly/vortex/planetary, + /obj/effect/anomaly/grav/high/planetary, + /obj/effect/anomaly/heartbeat/planetary, + /obj/effect/anomaly/sparkler/planetary, + /obj/effect/anomaly/tvstatic/planetary, + /obj/effect/anomaly/veins/planetary, + /obj/effect/anomaly/plasmasoul/planetary, + /obj/effect/anomaly/phantom/planetary, + /obj/effect/anomaly/melter/planetary, + ) + +/obj/effect/spawner/lootdrop/anomaly/rock/cave + loot = list( + /obj/effect/anomaly/flux/planetary, + /obj/effect/anomaly/grav/planetary, + /obj/effect/anomaly/hallucination/planetary, + /obj/effect/anomaly/pyro/planetary, + /obj/effect/anomaly/grav/high/planetary, + /obj/effect/anomaly/heartbeat/planetary, + /obj/effect/anomaly/sparkler/planetary, + /obj/effect/anomaly/veins/planetary, + /obj/effect/anomaly/plasmasoul/planetary, + /obj/effect/anomaly/phantom/planetary, + /obj/effect/anomaly/melter/planetary, + ) + +/obj/effect/spawner/lootdrop/anomaly/lava + name = "Lava anomaly spawner" + loot = list( + /obj/effect/anomaly/bluespace/planetary, + /obj/effect/anomaly/flux/planetary, + /obj/effect/anomaly/grav/planetary, + /obj/effect/anomaly/hallucination/planetary, + /obj/effect/anomaly/pyro/planetary, + /obj/effect/anomaly/vortex/planetary, + /obj/effect/anomaly/plasmasoul/planetary, + ) + +/obj/effect/spawner/lootdrop/anomaly/lava/cave + loot = list( + /obj/effect/anomaly/flux/planetary, + /obj/effect/anomaly/hallucination/planetary, + /obj/effect/anomaly/pyro/planetary, + /obj/effect/anomaly/plasmasoul/planetary, + ) + +/obj/effect/spawner/lootdrop/anomaly/ice + name = "Ice anomaly spawner" + loot = list( + /obj/effect/anomaly/bluespace/planetary, + /obj/effect/anomaly/grav/planetary, + /obj/effect/anomaly/hallucination/planetary, + /obj/effect/anomaly/vortex/planetary, + /obj/effect/anomaly/grav/high/planetary, + /obj/effect/anomaly/plasmasoul/planetary, + /obj/effect/anomaly/phantom/planetary, + ) + +/obj/effect/spawner/lootdrop/anomaly/ice/cave + loot = list( + /obj/effect/anomaly/hallucination/planetary, + /obj/effect/anomaly/grav/high/planetary, + /obj/effect/anomaly/plasmasoul/planetary, + /obj/effect/anomaly/phantom/planetary, + ) + +/obj/effect/spawner/lootdrop/anomaly/waste + name = "Waste anomaly spawner" + loot = list( + /obj/effect/anomaly/vortex/planetary, + /obj/effect/anomaly/heartbeat/planetary, + /obj/effect/anomaly/veins/planetary, + /obj/effect/anomaly/plasmasoul/planetary, + /obj/effect/anomaly/melter/planetary, + ) + +/obj/effect/spawner/lootdrop/anomaly/waste/cave + loot = list( + /obj/effect/anomaly/heartbeat/planetary, + /obj/effect/anomaly/veins/planetary, + /obj/effect/anomaly/plasmasoul/planetary, + /obj/effect/anomaly/melter/planetary, + ) + +/obj/effect/spawner/lootdrop/anomaly/storm + loot = list( + /obj/effect/anomaly/flux, + /obj/effect/anomaly/pyro, + /obj/effect/anomaly/sparkler, + /obj/effect/anomaly/veins, + /obj/effect/anomaly/phantom, + /obj/effect/anomaly/melter, + ) + +//wasteplanet things + /obj/effect/spawner/lootdrop/waste/grille_or_trash name = "wasteplanet loot spawner" loot = list( diff --git a/code/game/objects/effects/spawners/mobspawner.dm b/code/game/objects/effects/spawners/mobspawner.dm index 53c3dfb90b49..187b7c155fe0 100644 --- a/code/game/objects/effects/spawners/mobspawner.dm +++ b/code/game/objects/effects/spawners/mobspawner.dm @@ -73,10 +73,7 @@ /obj/effect/spawner/lootdrop/chicken/jungle/flock loot = list( - /obj/effect/spawner/lootdrop/chicken/jungle + /mob/living/simple_animal/hostile/retaliate/chicken ) lootcount = 7 lootdoubles = TRUE - -/obj/effect/spawner/lootdrop/chicken/jungle/flock/New() - lootcount = rand(5, 10) diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index b10b55824ebc..67085568371d 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -695,6 +695,7 @@ /obj/item/stock_parts/capacitor = 1, /obj/item/stock_parts/manipulator = 1, /obj/item/stack/sheet/glass = 1, + /obj/item/stack/sheet/bluespace_crystal = 1, /obj/item/stock_parts/cell = 1) def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/high) needs_anchored = FALSE diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index efbd31771b80..f135d6e97711 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -8,7 +8,7 @@ canhear_range = 2 dog_fashion = null unscrewed = FALSE - var/obj/item/wallframe/wallframe = /obj/item/wallframe/intercom //WS edit - Wideband Radio + var/obj/item/wallframe/wallframe = /obj/item/wallframe/intercom MAPPING_DIRECTIONAL_HELPERS(/obj/item/radio/intercom, 31) @@ -144,6 +144,18 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/item/radio/intercom, 31) inverse = FALSE custom_materials = list(/datum/material/iron = 75, /datum/material/glass = 25) +//table Normal Intercoms + +/obj/item/radio/intercom/table + icon_state = "intercom-table" + wallframe = /obj/item/wallframe/intercom/table + +/obj/item/wallframe/intercom/table + icon_state = "intercom-table" + result_path = /obj/item/radio/intercom/table + pixel_shift = 0 + + //wideband radio /obj/item/radio/intercom/wideband name = "wideband relay" diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index bfec824080a6..8bfe974bc15c 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -7,6 +7,7 @@ pickup_sound = 'sound/items/handling/device_pickup.ogg' drop_sound = 'sound/items/handling/device_drop.ogg' dog_fashion = /datum/dog_fashion/back + supports_variations = VOX_VARIATION flags_1 = CONDUCT_1 slot_flags = ITEM_SLOT_BELT diff --git a/code/game/objects/items/environmental_regulator.dm b/code/game/objects/items/environmental_regulator.dm index aa245de20e41..3d92230e595c 100644 --- a/code/game/objects/items/environmental_regulator.dm +++ b/code/game/objects/items/environmental_regulator.dm @@ -20,14 +20,14 @@ /obj/item/environmental_regulator/Destroy() owner = null - STOP_PROCESSING(SSprocessing, src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/environmental_regulator/equipped(mob/user, slot, initial) . = ..() switch(slot) if(ITEM_SLOT_BACK, ITEM_SLOT_SUITSTORE) - START_PROCESSING(SSprocessing, src) + START_PROCESSING(SSobj, src) owner = user else owner = null diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm index 00b2166abd1b..2406923edf97 100644 --- a/code/game/objects/items/holy_weapons.dm +++ b/code/game/objects/items/holy_weapons.dm @@ -362,6 +362,7 @@ icon_state = "katana" item_state = "katana" slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK + supports_variations = VOX_VARIATION /obj/item/nullrod/claymore/multiverse name = "extradimensional blade" diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm index f4669c6ae2ec..725e668b33a1 100644 --- a/code/game/objects/items/plushes.dm +++ b/code/game/objects/items/plushes.dm @@ -781,6 +781,14 @@ desc = "Hgrgrhrhg cute." icon_state = "flushplush" +/obj/item/toy/plush/blahaj + name = "Solarian Marine Society mascot plushie" + desc = "The adorable little mascot of the solarian marine society. Popular with vampires." + icon_state = "blahaj" + item_state = "blahaj" + lefthand_file = 'icons/mob/inhands/misc/plushes_lefthand.dmi' //todo: sort the god damn plushie inhands + righthand_file = 'icons/mob/inhands/misc/plushes_righthand.dmi' + /obj/item/toy/plush/among name = "amoung pequeño" desc = "A little pill shaped guy, with a price tag of 3€." diff --git a/code/game/objects/items/shuttle_creator.dm b/code/game/objects/items/shuttle_creator.dm index 7ef58431c31d..781020f87318 100644 --- a/code/game/objects/items/shuttle_creator.dm +++ b/code/game/objects/items/shuttle_creator.dm @@ -1,8 +1,4 @@ #define SHUTTLE_CREATOR_MAX_SIZE CONFIG_GET(number/max_shuttle_size) -#define CUSTOM_SHUTTLE_LIMIT CONFIG_GET(number/max_shuttle_count) - -GLOBAL_VAR_INIT(custom_shuttle_count, 0) //The amount of custom shuttles created to prevent creating hundreds -GLOBAL_LIST_EMPTY(custom_shuttle_machines) //Machines that require updating (Heaters, engines) /obj/item/shuttle_creator name = "Rapid Shuttle Designator" @@ -30,7 +26,7 @@ GLOBAL_LIST_EMPTY(custom_shuttle_machines) //Machines that require updating (He /obj/item/shuttle_creator/attack_self(mob/user) ..() - if(GLOB.custom_shuttle_count > CUSTOM_SHUTTLE_LIMIT) + if(!SSovermap.player_ship_spawn_allowed()) return return check_current_area(user) @@ -45,7 +41,7 @@ GLOBAL_LIST_EMPTY(custom_shuttle_machines) //Machines that require updating (He if(get_area(target) != loggedOldArea) to_chat(user, "Caution, airlock must be on the shuttle to function as a dock.") return - if(GLOB.custom_shuttle_count > CUSTOM_SHUTTLE_LIMIT) + if(!SSovermap.player_ship_spawn_allowed()) to_chat(user, "Shuttle limit reached, sorry.") return if(!create_shuttle_area(user)) @@ -134,8 +130,10 @@ GLOBAL_LIST_EMPTY(custom_shuttle_machines) //Machines that require updating (He if(loggedTurfs.len == 0 || !recorded_shuttle_area) to_chat(user, "Invalid shuttle, restarting bluespace systems...") return FALSE + var/static/num_customs = 0 + num_customs++ - var/obj/docking_port/mobile/port = new /obj/docking_port/mobile(get_turf(target), "custom_[GLOB.custom_shuttle_count]") + var/obj/docking_port/mobile/port = new /obj/docking_port/mobile(get_turf(target), "custom_[num_customs]") var/obj/docking_port/stationary/stationary_port = new /obj/docking_port/stationary(get_turf(target)) port.callTime = 50 port.dir = 1 //Point away from space. @@ -191,9 +189,8 @@ GLOBAL_LIST_EMPTY(custom_shuttle_machines) //Machines that require updating (He port.timer = 0 port.register() - GLOB.custom_shuttle_count++ - message_admins("[ADMIN_LOOKUPFLW(user)] created a new shuttle with a [src] at [ADMIN_VERBOSEJMP(user)] ([GLOB.custom_shuttle_count] custom shuttles, limit is [CUSTOM_SHUTTLE_LIMIT])") - log_game("[key_name(user)] created a new shuttle with a [src] at [AREACOORD(user)] ([GLOB.custom_shuttle_count] custom shuttles, limit is [CUSTOM_SHUTTLE_LIMIT])") + message_admins("[ADMIN_LOOKUPFLW(user)] created a new shuttle with a [src] at [ADMIN_VERBOSEJMP(user)] ([num_customs] customs, [SSovermap.get_num_cap_ships()] all, limit is [CONFIG_GET(number/max_shuttle_count)])") + log_game("[key_name(user)] created a new shuttle with a [src] at [AREACOORD(user)] ([num_customs] customs, [SSovermap.get_num_cap_ships()] all, limit is [CONFIG_GET(number/max_shuttle_count)])") return TRUE /obj/item/shuttle_creator/proc/create_shuttle_area(mob/user) diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index beb6b2ee20b3..dc86a0084ccf 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -236,6 +236,7 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \ GLOBAL_LIST_INIT(gold_recipes, list ( \ new/datum/stack_recipe("mortar", /obj/item/reagent_containers/glass/mortar/gold, 3), \ new/datum/stack_recipe("golden door", /obj/structure/mineral_door/gold, 10, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("chemical crate", /obj/structure/closet/crate/chem, 1, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("gold tile", /obj/item/stack/tile/mineral/gold, 1, 4, 20), \ new/datum/stack_recipe("blank plaque", /obj/item/plaque, 1), \ new/datum/stack_recipe("HoS Statue", /obj/structure/statue/gold/hos, 5, one_per_turf = 1, on_floor = 1), \ diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index d7c65e2e14ba..4e0994174b25 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -601,7 +601,7 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \ new/datum/stack_recipe("bronze suit", /obj/item/clothing/suit/bronze), \ new/datum/stack_recipe("bronze boots", /obj/item/clothing/shoes/bronze), \ null, - new/datum/stack_recipe("bronze chair", /obj/structure/chair/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("bronze chair", /obj/structure/chair/comfy/shuttle/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("Marx Bust", /obj/structure/statue/bronze/marx, 15, one_per_turf = 1, on_floor = 1), \ )) diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index f41268712aad..3eedf1960de5 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -26,6 +26,7 @@ max_integrity = 300 greyscale_icon_state = "backpack" greyscale_colors = list(list(13, 17), list(12, 17), list(12, 21)) + supports_variations = VOX_VARIATION /obj/item/storage/backpack/ComponentInitialize() . = ..() @@ -232,6 +233,7 @@ item_state = "satchel-norm" greyscale_icon_state = "satchel" greyscale_colors = list(list(11, 12), list(17, 18), list(10, 11)) + supports_variations = VOX_VARIATION /obj/item/storage/backpack/satchel/leather name = "leather satchel" diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index b2bfcb16891a..fc964bbfff89 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -100,11 +100,10 @@ /obj/item/storage/bag/ore name = "mining satchel" desc = "This little bugger can be used to store and transport ores." - //WS Begin - Better bag sprites icon = 'icons/obj/bags.dmi' icon_state = "minebag" - //WS end slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_POCKETS + supports_variations = VOX_VARIATION component_type = /datum/component/storage/concrete/stack var/spam_protection = FALSE //If this is TRUE, the holder won't receive any messages when they fail to pick up ore through crossing it var/mob/listeningTo @@ -172,10 +171,8 @@ /obj/item/storage/bag/ore/holding //miners, your messiah has arrived name = "mining satchel of holding" desc = "A revolution in convenience, this satchel allows for huge amounts of ore storage. It's been outfitted with anti-malfunction safety measures." - //WS Begin - Better bag sprites icon = 'icons/obj/bags.dmi' icon_state = "minebagbs" - //WS end /obj/item/storage/bag/ore/holding/ComponentInitialize() . = ..() @@ -190,11 +187,10 @@ /obj/item/storage/bag/plants name = "plant bag" - //WS Begin - Better bag sprites icon = 'icons/obj/bags.dmi' icon_state = "plantbag" - //WS end resistance_flags = FLAMMABLE + supports_variations = VOX_VARIATION /obj/item/storage/bag/plants/ComponentInitialize() . = ..() @@ -389,10 +385,8 @@ /obj/item/storage/bag/chemistry name = "chemistry bag" - //WS Begin - Better bag sprites icon = 'icons/obj/bags.dmi' icon_state = "chembag" - //WS end desc = "A bag for storing pills, patches, and bottles." resistance_flags = FLAMMABLE @@ -419,10 +413,8 @@ /obj/item/storage/bag/bio name = "bio bag" - //WS Begin - Better bag sprites icon = 'icons/obj/bags.dmi' icon_state = "virobag" - //WS end desc = "A bag for the safe transportation and disposal of biowaste and other biological materials." resistance_flags = FLAMMABLE @@ -452,10 +444,8 @@ /obj/item/storage/bag/construction name = "construction bag" - //WS Begin - Better bag sprites icon = 'icons/obj/bags.dmi' icon_state = "engbag" - //WS end desc = "A bag for storing small construction components." resistance_flags = FLAMMABLE diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 86f0f4cc5bd0..23f57838d45f 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -10,7 +10,9 @@ attack_verb = list("whipped", "lashed", "disciplined") max_integrity = 300 equip_sound = 'sound/items/equip/toolbelt_equip.ogg' + w_class = WEIGHT_CLASS_BULKY var/content_overlays = FALSE //If this is true, the belt will gain overlays based on what it's holding + supports_variations = VOX_VARIATION greyscale_icon_state = "belt" greyscale_colors = list(list(16, 12), list(15, 11), list(13, 12)) @@ -153,6 +155,7 @@ desc = "Can hold various medical equipment." icon_state = "medical" item_state = "medical" + supports_variations = VOX_VARIATION /obj/item/storage/belt/medical/webbing name = "medical webbing" @@ -253,6 +256,7 @@ icon_state = "security" item_state = "security"//Could likely use a better one. content_overlays = TRUE + supports_variations = VOX_VARIATION /obj/item/storage/belt/security/ComponentInitialize() . = ..() @@ -308,6 +312,7 @@ item_state = "explorer1" w_class = WEIGHT_CLASS_BULKY custom_price = 400 + supports_variations = VOX_VARIATION /obj/item/storage/belt/mining/ComponentInitialize() . = ..() @@ -409,6 +414,7 @@ icon_state = "champion" item_state = "champion" custom_materials = list(/datum/material/gold=400) + supports_variations = VOX_VARIATION /obj/item/storage/belt/champion/ComponentInitialize() . = ..() @@ -508,6 +514,7 @@ desc = "A tactical assault belt." icon_state = "assault" item_state = "assault" + supports_variations = VOX_VARIATION /obj/item/storage/belt/military/assault/minutemen/PopulateContents() for(var/i in 1 to 6) @@ -589,6 +596,7 @@ desc = "A belt used to hold most janitorial supplies." icon_state = "jani" item_state = "jani" + supports_variations = VOX_VARIATION /obj/item/storage/belt/janitor/ComponentInitialize() . = ..() @@ -811,6 +819,7 @@ desc = "A set of tactical webbing for operators of the IRMG, can hold security gear." icon_state = "inteq_webbing" item_state = "inteq_webbing" + supports_variations = VOX_VARIATION /obj/item/storage/belt/security/webbing/inteq/alt name = "inteq drop pouch harness" diff --git a/code/game/objects/items/tanks/tank_types.dm b/code/game/objects/items/tanks/tank_types.dm index 8ef5c64ef934..ff8e2e1bc3b3 100644 --- a/code/game/objects/items/tanks/tank_types.dm +++ b/code/game/objects/items/tanks/tank_types.dm @@ -119,6 +119,7 @@ force = 4 distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE volume = 1 //Tiny. Real life equivalents only have 21 breaths of oxygen in them. They're EMERGENCY tanks anyway -errorage (dangercon 2011) + supports_variations = VOX_VARIATION /obj/item/tank/internals/emergency_oxygen/populate_gas() diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm index b247a9da326a..8ce90872c0c6 100644 --- a/code/game/objects/items/tanks/tanks.dm +++ b/code/game/objects/items/tanks/tanks.dm @@ -76,11 +76,9 @@ return /obj/item/tank/Destroy() - if(air_contents) - qdel(air_contents) - STOP_PROCESSING(SSobj, src) - . = ..() + air_contents = null + return ..() /obj/item/tank/examine(mob/user) var/obj/icon = src diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index cf54dd3d0211..820edcc30e78 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -463,6 +463,7 @@ w_class = WEIGHT_CLASS_NORMAL attack_verb = list("attacked", "slashed", "stabbed", "sliced") hitsound = 'sound/weapons/bladeslice.ogg' + supports_variations = VOX_VARIATION /* * Snap pops diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 7f053b09e53c..c149b001fb98 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -226,6 +226,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 max_integrity = 200 armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF + supports_variations = VOX_VARIATION /obj/item/katana/suicide_act(mob/user) user.visible_message("[user] is slitting [user.p_their()] stomach open with [src]! It looks like [user.p_theyre()] trying to commit seppuku!") diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index a920c6f26760..6aabc8f770ed 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -376,7 +376,7 @@ icon_state = "chairold" item_chair = null -/obj/structure/chair/bronze +/obj/structure/chair/comfy/shuttle/bronze name = "brass chair" desc = "A spinny chair made of bronze. It has little cogs for wheels!" anchored = FALSE @@ -386,23 +386,26 @@ item_chair = null var/turns = 0 -/obj/structure/chair/bronze/Destroy() +/obj/structure/chair/comfy/shuttle/bronze/GetArmrest() + return mutable_appearance('icons/obj/chairs.dmi', "brass_chair_armrest") + +/obj/structure/chair/comfy/shuttle/bronze/Destroy() STOP_PROCESSING(SSfastprocess, src) . = ..() -/obj/structure/chair/bronze/process() +/obj/structure/chair/comfy/shuttle/bronze/process() setDir(turn(dir,-90)) playsound(src, 'sound/effects/servostep.ogg', 50, FALSE) turns++ if(turns >= 8) STOP_PROCESSING(SSfastprocess, src) -/obj/structure/chair/bronze/Moved() +/obj/structure/chair/comfy/shuttle/bronze/Moved() . = ..() if(has_gravity()) playsound(src, 'sound/machines/clockcult/integration_cog_install.ogg', 50, TRUE) -/obj/structure/chair/bronze/AltClick(mob/living/user) +/obj/structure/chair/comfy/shuttle/bronze/AltClick(mob/living/user) turns = 0 if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) return diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 7eccab38333e..d8f53246fc23 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -175,6 +175,24 @@ new /obj/item/bodypart/leg/left/robot/surplus/vox(src) new /obj/item/bodypart/leg/right/robot/surplus/vox(src) +/obj/structure/closet/crate/freezer/surplus_limbs/organs + name = "organ freezer" + desc = "A crate containing a variety of spare limbs and organs." + +/obj/structure/closet/crate/freezer/surplus_limbs/organs/PopulateContents() + . = ..() + new /obj/item/organ/stomach(src) + new /obj/item/organ/stomach(src) + new /obj/item/organ/lungs(src) + new /obj/item/organ/liver(src) + new /obj/item/organ/liver(src) + new /obj/item/organ/eyes(src) + new /obj/item/organ/eyes(src) + new /obj/item/organ/heart(src) + new /obj/item/organ/heart(src) + new /obj/item/organ/ears(src) + new /obj/item/organ/ears(src) + /obj/structure/closet/crate/radiation desc = "A crate with a radiation sign on it." name = "radiation crate" @@ -236,3 +254,10 @@ ..() for(var/i in 1 to 5) new /obj/item/coin/silver(src) + +/obj/structure/closet/crate/chem + desc = "A small crate for the storage and transportation of chemicals." + name = "chemical crate" + icon_state = "chemcrate" + material_drop = /obj/item/stack/sheet/mineral/gold + material_drop_amount = 1 diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm index a87a11fbec8f..700d55361d90 100644 --- a/code/game/objects/structures/dresser.dm +++ b/code/game/objects/structures/dresser.dm @@ -32,7 +32,7 @@ to_chat(user, "You are not capable of wearing underwear.") return - var/choice = input(user, "Underwear, Undershirt, or Socks?", "Changing") as null|anything in list("Underwear","Underwear Color","Undershirt","Socks") + var/choice = input(user, "Underwear, Undershirt, or Socks?", "Changing") as null|anything in list("Underwear", "Underwear Color", "Undershirt", "Undershirt Color", "Socks", "Socks Color") if(!Adjacent(user)) return @@ -49,10 +49,18 @@ var/new_undershirt = input(user, "Select your undershirt", "Changing") as null|anything in GLOB.undershirt_list if(new_undershirt) H.undershirt = new_undershirt + if("Undershirt Color") + var/new_undershirt_color = input(H, "Choose your undershirt color", "Undershirt Color","#"+H.undershirt_color) as color|null + if(new_undershirt_color) + H.undershirt_color = sanitize_hexcolor(new_undershirt_color) if("Socks") var/new_socks = input(user, "Select your socks", "Changing") as null|anything in GLOB.socks_list if(new_socks) H.socks= new_socks + if("Socks Color") + var/new_socks_color = input(H, "Choose your socks color", "Socks Color","#"+H.socks_color) as color|null + if(new_socks_color) + H.socks_color = sanitize_hexcolor(new_socks_color) add_fingerprint(H) H.update_body() diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index 0ca777942d3e..2c24fbb3900a 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -531,7 +531,6 @@ /datum/outfit/syndicate_empty/sbc/med name = "Syndicate Battlecruiser Ship Medical Doctor" gloves = /obj/item/clothing/gloves/color/latex/nitrile/evil - uniform = /obj/item/clothing/under/rank/medical/doctor/red glasses = /obj/item/clothing/glasses/hud/health belt = /obj/item/pda/medical back = /obj/item/storage/backpack/duffelbag/syndie/med diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 5e62c114f178..2e540611f343 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -171,7 +171,7 @@ H.dna.update_ui_block(DNA_SKIN_TONE_BLOCK) if(MUTCOLORS in H.dna.species.species_traits) - var/new_mutantcolor = input(user, "Choose your skin color:", "Race change","#"+H.dna.features["mcolor"]) as color|null + var/new_mutantcolor = input(user, "Choose your skin color:", "Race change","#" + H.dna.features["mcolor"]) as color|null if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) return if(new_mutantcolor) @@ -183,6 +183,17 @@ else to_chat(H, "Invalid color. Your color is not bright enough.") + if(MUTCOLORS_SECONDARY in H.dna.species.species_traits) + var/new_secondary_mutantcolor = input(user, "Choose your secondary skin color:", "Race change","#" + H.dna.features["mcolor2"]) as color|null + if(new_secondary_mutantcolor) + var/temp_hsv = RGBtoHSV(new_secondary_mutantcolor) + + if(ReadHSV(temp_hsv)[3] >= ReadHSV("#191919")[3]) // mutantcolors must be bright + H.dna.features["mcolor2"] = sanitize_hexcolor(new_secondary_mutantcolor) + + else + to_chat(H, "Invalid color. Your secondary color is not bright enough.") + H.update_body() H.update_hair() H.update_body_parts(TRUE) diff --git a/code/game/objects/structures/poddoor_assembly.dm b/code/game/objects/structures/poddoor_assembly.dm index 96202deec4f2..919a92b11128 100644 --- a/code/game/objects/structures/poddoor_assembly.dm +++ b/code/game/objects/structures/poddoor_assembly.dm @@ -24,6 +24,13 @@ update_icon() update_door_name() +/obj/structure/poddoor_assembly/ComponentInitialize() + . = ..() + AddComponent(/datum/component/simple_rotation, ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS, null, CALLBACK(src, .proc/can_be_rotated)) + +/obj/structure/poddoor_assembly/proc/can_be_rotated(mob/user, rotation_type) + return !anchored + /obj/structure/poddoor_assembly/examine(mob/user) . = ..() var/doorname = "" diff --git a/code/game/objects/structures/salvaging.dm b/code/game/objects/structures/salvaging.dm index 72dd051c6bae..3d90a25a1013 100644 --- a/code/game/objects/structures/salvaging.dm +++ b/code/game/objects/structures/salvaging.dm @@ -5,14 +5,16 @@ density = TRUE anchored = TRUE var/salvageable_parts = list() + var/frame_type = /obj/structure/frame/machine /obj/item/stack/ore/salvage/examine(mob/user) . = ..() . += "You can use a crowbar to salvage this." /obj/structure/salvageable/proc/dismantle(mob/living/user) - var/obj/frame = new /obj/structure/frame/machine(get_turf(src)) - frame.anchored = TRUE + var/obj/frame = new frame_type(get_turf(src)) + frame.anchored = anchored + frame.dir = dir for(var/path in salvageable_parts) if(prob(salvageable_parts[path])) new path (loc) @@ -59,6 +61,7 @@ /obj/structure/salvageable/computer name = "broken computer" icon_state = "computer_broken" + frame_type = /obj/structure/frame/computer/retro salvageable_parts = list( /obj/item/stack/sheet/glass/two = 80, /obj/item/stack/cable_coil/cut = 90, @@ -210,14 +213,14 @@ if(41 to 60) visible_message("You flinch as the [src]'s laser apparatus lights up, but your tool destroys it before it activates...") if(61 to 79) - visible_message("You see a bright light from the [src] before the laser reactivates in your face!") + visible_message("You see a dim light from the [src] before the laser reactivates in your face!") shoot_projectile(user, /obj/projectile/beam/scatter) if(80 to 89) visible_message("You see a bright light from the [src] before the laser reactivates in your face!") shoot_projectile(user, /obj/projectile/beam) if(90 to 100) - visible_message("You see a bright light from the [src] before the laser reactivates in your face!") - shoot_projectile(user, /obj/projectile/beam/laser/heavylaser) + visible_message("You see an intense light from the [src] before the laser reactivates in your face!") + shoot_projectile(user, /obj/projectile/beam/laser/heavylaser) //i'd like to make this flash people. but i'm not sure how to do that. shame! /obj/structure/salvageable/destructive_analyzer/proc/shoot_projectile(mob/living/target, obj/projectile/projectile_to_shoot) var/obj/projectile/projectile_being_shot = new projectile_to_shoot(get_turf(src)) @@ -269,23 +272,60 @@ if(1 to 45) audible_message("The [src] makes a crashing sound as its salvaged.") - if(46 to 50) + if(46 to 89) playsound(src, 'sound/machines/buzz-two.ogg', 100, FALSE, FALSE) audible_message("You hear a buzz from the [src] and a voice,") new /mob/living/simple_animal/bot/medbot/rockplanet(get_turf(src)) - if(51 to 77) + if(95 to 100) playsound(src, 'sound/machines/buzz-two.ogg', 100, FALSE, FALSE) audible_message("You hear a buzz from the [src] and a voice,") new /mob/living/simple_animal/bot/firebot/rockplanet(get_turf(src)) - if(77 to 100) + if(90 to 94) playsound(src, 'sound/machines/buzz-two.ogg', 100, FALSE, FALSE) audible_message("You hear as buzz from the [src] as an abandoned security bot rolls out from the [src]!!") new /mob/living/simple_animal/bot/secbot/ed209/rockplanet(get_turf(src)) +/obj/structure/salvageable/safe_server //i am evil and horrible and i don't deserve to touch code + name = "broken server" + icon_state = "wreck_server" + salvageable_parts = list( + /obj/item/stack/sheet/glass/two = 80, + /obj/item/stack/cable_coil/cut = 80, + /obj/item/stack/ore/salvage/scrapuranium/five = 60, + /obj/item/stack/ore/salvage/scrapmetal/five = 60, + /obj/item/stack/ore/salvage/scrapbluespace = 60, + + /obj/item/research_notes/loot/tiny = 50, + /obj/item/research_notes/loot/medium = 20, + /obj/item/research_notes/loot/big = 5, + + /obj/item/disk/tech_disk/major = 3, + /obj/item/disk/tech_disk = 20, + /obj/item/disk/data = 20, + /obj/item/disk/holodisk = 20, + /obj/item/disk/plantgene = 20, + + /obj/item/computer_hardware/network_card = 40, + /obj/item/computer_hardware/network_card = 40, + /obj/item/computer_hardware/processor_unit = 40, + /obj/item/computer_hardware/processor_unit = 40, + /obj/item/stock_parts/subspace/amplifier = 40, + /obj/item/stock_parts/subspace/amplifier = 40, + /obj/item/stock_parts/subspace/analyzer = 40, + /obj/item/stock_parts/subspace/analyzer = 40, + /obj/item/stock_parts/subspace/ansible = 40, + /obj/item/stock_parts/subspace/ansible = 40, + /obj/item/stock_parts/subspace/transmitter = 40, + /obj/item/stock_parts/subspace/transmitter = 40, + /obj/item/stock_parts/subspace/crystal = 30, + /obj/item/stock_parts/subspace/crystal = 30, + /obj/item/computer_hardware/network_card/advanced = 20, + ) + /obj/structure/salvageable/seed name = "ruined seed vendor" desc = "This is where the seeds lived. Maybe you can still get some?"//megaseed voiceline reference @@ -646,7 +686,7 @@ /obj/item/circuitboard/computer/med_data = 5, ) -//DESTRUCTIVE ANAL +//DESTRUCTIVE ANAL //i'm killing you /obj/effect/spawner/lootdrop/destructive_anal_loot //what do people usually put in these things anayways loot = list( /obj/item/storage/toolbox/syndicate/empty = 650, diff --git a/code/game/objects/structures/signs/signs_warning.dm b/code/game/objects/structures/signs/signs_warning.dm index 322c016afdf3..e05aa251c424 100644 --- a/code/game/objects/structures/signs/signs_warning.dm +++ b/code/game/objects/structures/signs/signs_warning.dm @@ -87,6 +87,13 @@ icon_state = "nosmoking" is_editable = TRUE +/obj/structure/sign/warning/nosmoking/burnt + name = "\improper NO SMOKING sign" + sign_change_name = "Warning - No Smoking Burnt" + desc = "A warning sign with reads 'NO SMOKING'. It seems a bit seared." + icon_state = "nosmoking2_b" + is_editable = TRUE + /obj/structure/sign/warning/radiation name = "\improper HAZARDOUS RADIATION sign" sign_change_name = "Warning - Radiation" diff --git a/code/game/objects/structures/spawner.dm b/code/game/objects/structures/spawner.dm index 510068bf886b..572e150815c6 100644 --- a/code/game/objects/structures/spawner.dm +++ b/code/game/objects/structures/spawner.dm @@ -110,6 +110,7 @@ GLOBAL_LIST_INIT(astroloot, list( spawn_text = "crawls out of" mob_types = list(/mob/living/simple_animal/hostile/asteroid/goldgrub, /mob/living/simple_animal/hostile/asteroid/goliath, /mob/living/simple_animal/hostile/asteroid/hivelord, /mob/living/simple_animal/hostile/asteroid/basilisk, /mob/living/simple_animal/hostile/asteroid/fugu) faction = list("mining") + density = 0 /obj/structure/spawner/mining/deconstruct(disassembled) adestroy_effect() @@ -147,3 +148,9 @@ GLOBAL_LIST_INIT(astroloot, list( name = "wumborian fugu den" desc = "A den housing a nest of wumborian fugus, how do they all even fit in there?" mob_types = list(/mob/living/simple_animal/hostile/asteroid/fugu) + +/obj/structure/spawner/mining/carp + name = "carp den" + desc = "A den housing a nest of space carp, seems fishy!" + mob_types = list(/mob/living/simple_animal/hostile/carp) + spawn_text = "emerges from" diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 3a43c5783ad6..e1b01e43df9b 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -578,8 +578,8 @@ /obj/structure/table/optable name = "operating table" desc = "Used for advanced medical procedures." - icon = 'goon/icons/obj/surgery.dmi' - icon_state = "table1" + icon = 'icons/obj/surgery_table.dmi' + icon_state = "surgery_table" buildstack = /obj/item/stack/sheet/mineral/silver smoothing_flags = NONE smoothing_groups = null diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm index 3b4de4faec2e..2945c562b89b 100644 --- a/code/game/turfs/open/_open.dm +++ b/code/game/turfs/open/_open.dm @@ -1,3 +1,7 @@ +#define IGNITE_TURF_CHANCE 30 +#define IGNITE_TURF_LOW_POWER 8 +#define IGNITE_TURF_HIGH_POWER 22 + /turf/open plane = FLOOR_PLANE @@ -175,6 +179,11 @@ air.set_temperature(air.return_temperature() + temp) air_update_turf() +/turf/open/temperature_expose() + if(prob(IGNITE_TURF_CHANCE)) + IgniteTurf(rand(IGNITE_TURF_LOW_POWER,IGNITE_TURF_HIGH_POWER)) + return ..() + /turf/open/proc/freon_gas_act() for(var/obj/I in contents) if(I.resistance_flags & FREEZE_PROOF) @@ -271,3 +280,7 @@ if(isgroundlessturf(src)) return new /obj/effect/abstract/turf_fire(src, power, fire_color) + +#undef IGNITE_TURF_CHANCE +#undef IGNITE_TURF_LOW_POWER +#undef IGNITE_TURF_HIGH_POWER diff --git a/code/game/turfs/open/chasm.dm b/code/game/turfs/open/chasm.dm index 538a81aa26e8..96c90e4a3d64 100644 --- a/code/game/turfs/open/chasm.dm +++ b/code/game/turfs/open/chasm.dm @@ -115,3 +115,31 @@ underlay_appearance.icon = 'icons/turf/floors.dmi' underlay_appearance.icon_state = "dirt" return TRUE + +//gas giant "chasm" +/turf/open/chasm/gas_giant + name = "void" + desc = "The gas that makes up the gas giant. You can't see further, but you're fairly sure if you slipped in, you'd be dead." + icon = 'icons/turf/floors.dmi' + icon_state = "reebemap" //to-do. Don't use Rebee Sprite + layer = SPACE_LAYER + baseturfs = /turf/open/chasm/gas_giant + planetary_atmos = TRUE + initial_gas_mix = GAS_GIANT_ATMOS + color = COLOR_DARK_MODERATE_ORANGE + light_range = 2 + light_power = 0.6 + light_color = COLOR_DARK_MODERATE_ORANGE + smoothing_flags = NONE + smoothing_groups = null + canSmoothWith = null + tiled_dirt = FALSE + +/turf/open/chasm/gas_giant/Initialize(mapload, inherited_virtual_z) + . = ..() + icon_state = "reebegame" + +/turf/open/chasm/gas_giant/plasma + light_color = COLOR_PURPLE + color = COLOR_PURPLE + initial_gas_mix = PLASMA_GIANT_ATMOS diff --git a/code/game/turfs/open/floor/plating/asteroid.dm b/code/game/turfs/open/floor/plating/asteroid.dm index eb269d742441..ee311f747d82 100644 --- a/code/game/turfs/open/floor/plating/asteroid.dm +++ b/code/game/turfs/open/floor/plating/asteroid.dm @@ -84,10 +84,34 @@ getDug() SSblackbox.record_feedback("tally", "pick_used_mining", 1, W.type) return TRUE + else if(istype(W, /obj/item/storage/bag/ore)) for(var/obj/item/stack/ore/O in src) SEND_SIGNAL(W, COMSIG_PARENT_ATTACKBY, O) + else if(istype(W, /obj/item/stack/sheet/mineral/wood) || istype(W, /obj/item/stack/sheet/mineral/sandstone)) + if(!dug) + return + var/obj/item/stack/sheet/mineral/M = W + if (M.get_amount() < 5) + to_chat(user, "You need at least five sheets for that!") + return + var/turf/dest_turf = get_turf(src) + if(locate(/obj/structure/closet/crate/grave) in dest_turf) + to_chat(user, "There is already a grave there!") + return + to_chat(user, "You start piling the dirt...") + if(do_after(user,30, target = src)) + if(locate(/obj/structure/closet/crate/grave) in dest_turf) + return + if(istype(W, /obj/item/stack/sheet/mineral/wood)) + new /obj/structure/closet/crate/grave(dest_turf) + else if(istype(W, /obj/item/stack/sheet/mineral/sandstone)) + new /obj/structure/closet/crate/grave/stone(dest_turf) + M.use(5) + to_chat(user, "You place burial mound on [src].") + return + /turf/open/floor/plating/asteroid/ex_act(severity, target) . = SEND_SIGNAL(src, COMSIG_ATOM_EX_ACT, severity, target) contents_explosion(severity, target) diff --git a/code/game/turfs/open/floor/plating/misc_plating.dm b/code/game/turfs/open/floor/plating/misc_plating.dm index c71c9aa7ecd8..e9b28fb4a613 100644 --- a/code/game/turfs/open/floor/plating/misc_plating.dm +++ b/code/game/turfs/open/floor/plating/misc_plating.dm @@ -256,10 +256,12 @@ /turf/open/floor/plating/ice/iceberg/lit light_range = 2 light_power = 1 - /turf/open/floor/plating/ice/icemoon initial_gas_mix = ICEMOON_DEFAULT_ATMOS +/turf/open/floor/plating/ice/airless + initial_gas_mix = AIRLESS_ATMOS + /turf/open/floor/plating/snowed name = "snowed-over plating" desc = "A section of heated plating, helps keep the snow from stacking up too high." diff --git a/code/game/turfs/open/floor/reinf_floor.dm b/code/game/turfs/open/floor/reinf_floor.dm index 1ca31fe623ef..04f005417eb0 100644 --- a/code/game/turfs/open/floor/reinf_floor.dm +++ b/code/game/turfs/open/floor/reinf_floor.dm @@ -32,6 +32,9 @@ ..() return //unplateable +/turf/open/floor/engine/temperature_expose() + return //inflammable + /turf/open/floor/engine/try_replace_tile(obj/item/stack/tile/T, mob/user, params) return diff --git a/code/game/turfs/open/space/transit.dm b/code/game/turfs/open/space/transit.dm index 629433bb81a1..bc9789cf4f3a 100644 --- a/code/game/turfs/open/space/transit.dm +++ b/code/game/turfs/open/space/transit.dm @@ -37,8 +37,8 @@ if(iseffect(src)) return if(isliving(src)) - var/mob/living/poor_soul = src // This may not seem like much, but if you toss someone out - poor_soul.apply_damage_type(50, BRUTE) // and they go through like four tiles, they're goners + var/mob/living/poor_soul = src // This may not seem like much, but if you toss someone out + poor_soul.apply_damage_type(25, BRUTE) // and they go through like four tiles, they're goners return qdel(src) diff --git a/code/game/world.dm b/code/game/world.dm index e7e86cb3d8af..effed0cb63a3 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -84,6 +84,10 @@ GLOBAL_VAR(restart_counter) HandleTestRun() #endif + #ifdef AUTOWIKI + setup_autowiki() + #endif + /world/proc/InitTgs() TgsNew(new /datum/tgs_event_handler/impl, TGS_SECURITY_TRUSTED) GLOB.revdata.load_tgs_info() diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index c3a7a295523c..afdbb4a4b7f2 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -43,6 +43,7 @@ GLOBAL_PROTECT(admin_verbs_admin) /datum/admins/proc/toggleooclocal, /*toggles looc on/off for everyone*/ /datum/admins/proc/toggleoocdead, /*toggles ooc on/off for everyone who is dead*/ /datum/admins/proc/toggleenter, /*toggles whether people can join the current game*/ + /client/proc/toggle_ship_spawn, /* toggles players spawning ships via the join menu / shuttle creators */ /datum/admins/proc/announce, /*priority announce something to all clients.*/ /datum/admins/proc/set_admin_notice, /*announcement all clients see when joining the server.*/ /client/proc/admin_ghost, /*allows us to ghost/reenter body at will*/ @@ -75,6 +76,7 @@ GLOBAL_PROTECT(admin_verbs_admin) /client/proc/toggleprayers, /client/proc/toggle_prayer_sound, /client/proc/toggleadminhelpsound, + /client/proc/overmap_datum_token_manager, /datum/admins/proc/open_borgopanel, /client/proc/investigate_show, /*various admintools for investigation. Such as a singulo grief-log*/ ) @@ -186,6 +188,7 @@ GLOBAL_PROTECT(admin_verbs_debug) /client/proc/map_template_load, /client/proc/map_template_upload, /client/proc/jump_to_ruin, + /client/proc/fucky_wucky, /client/proc/view_runtimes, /client/proc/pump_random_event, /client/proc/reload_configuration, diff --git a/code/modules/admin/chat_commands.dm b/code/modules/admin/chat_commands.dm index 4f20564d8fe5..baa52e38c7da 100644 --- a/code/modules/admin/chat_commands.dm +++ b/code/modules/admin/chat_commands.dm @@ -66,7 +66,7 @@ all_params.Cut(1, 2) var/id = text2num(target) if(id != null) - var/datum/admin_help/AH = GLOB.ahelp_tickets.TicketByID(id) + var/datum/admin_help/AH = GLOB.ahelp_tickets.ticket_by_id(id) if(AH) target = AH.initiator_ckey else diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index 6b931aa6d845..542bb1a4a28f 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -15,17 +15,18 @@ H.real_name = random_unique_name(H.gender) H.name = H.real_name H.underwear = random_underwear(H.gender) - H.underwear_color = random_short_color() + H.underwear_color = random_color() H.skin_tone = random_skin_tone() H.hairstyle = random_hairstyle(H.gender) H.facial_hairstyle = random_facial_hairstyle(H.gender) - H.hair_color = random_short_color_natural() + H.hair_color = random_color_natural() H.facial_hair_color = H.hair_color H.eye_color = random_eye_color() H.dna.blood_type = random_blood_type() // Mutant randomizing, doesn't affect the mob appearance unless it's the specific mutant. H.dna.features["mcolor"] = random_short_color() + H.dna.features["mcolor2"] = random_short_color() H.dna.features["ethcolor"] = GLOB.color_list_ethereal[pick(GLOB.color_list_ethereal)] H.dna.features["tail_lizard"] = pick(GLOB.tails_list_lizard) H.dna.features["snout"] = pick(GLOB.snouts_list) diff --git a/code/modules/admin/outfit_editor.dm b/code/modules/admin/outfit_editor.dm index ee8342a1c868..2921045d2d0f 100644 --- a/code/modules/admin/outfit_editor.dm +++ b/code/modules/admin/outfit_editor.dm @@ -70,9 +70,15 @@ /datum/outfit_editor/ui_data(mob/user) var/list/data = list() - data["outfit"] = serialize_outfit() data["saveable"] = !GLOB.custom_outfits.Find(drip) + return data + +/datum/outfit_editor/ui_static_data(mob/user) + var/list/data = list() + + data["outfit"] = serialize_outfit() + if(!dummy_key) init_dummy() var/icon/dummysprite = get_flat_human_icon(null, @@ -83,7 +89,6 @@ return data - /datum/outfit_editor/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) if(..()) return @@ -93,8 +98,10 @@ switch(action) if("click") choose_item(slot) + update_static_data(usr, ui) if("ctrlClick") choose_any_item(slot) + update_static_data(usr, ui) if("clear") if(drip.vars.Find(slot)) drip.vars[slot] = null diff --git a/code/modules/admin/sql_ban_system.dm b/code/modules/admin/sql_ban_system.dm index b10a5a4feb03..bde0a7676fac 100644 --- a/code/modules/admin/sql_ban_system.dm +++ b/code/modules/admin/sql_ban_system.dm @@ -549,7 +549,7 @@ if(roles_to_ban[1] == "Server" && (!is_admin || (is_admin && applies_to_admins))) qdel(C) if(roles_to_ban[1] == "Server" && AH) - AH.Resolve() + AH.resolve() for(var/client/i in GLOB.clients - C) if(i.address == player_ip || i.computer_id == player_cid) build_ban_cache(i) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index a541cc8f1f98..012be5da1e51 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -29,12 +29,12 @@ var/ahelp_ref = href_list["ahelp"] var/datum/admin_help/AH = locate(ahelp_ref) if(AH) - AH.Action(href_list["ahelp_action"]) + AH.action(usr, href_list["ahelp_action"]) else to_chat(usr, "Ticket [ahelp_ref] has been deleted!", confidential = TRUE) else if(href_list["ahelp_tickets"]) - GLOB.ahelp_tickets.BrowseTickets(text2num(href_list["ahelp_tickets"])) + GLOB.ahelp_tickets.browse_tickets(text2num(href_list["ahelp_tickets"])) else if(href_list["stickyban"]) stickyban(href_list["stickyban"],href_list) @@ -1251,8 +1251,6 @@ // WS - More fun with cookies - Start else if(islizard(H)) cookiealt = /obj/item/reagent_containers/food/snacks/nugget - else if(issquidperson(H)) - cookiealt = /obj/item/reagent_containers/food/snacks/fishfingers if(H.recieve_gift(cookiealt)) log_admin("[key_name(H)] got their [cookiealt], spawned by [key_name(src.owner)].") message_admins("[key_name(H)] got their [cookiealt], spawned by [key_name(src.owner)].") @@ -1262,6 +1260,22 @@ message_admins("[key_name(H)] has their hands full, so they did not receive their [initial(cookiealt.name)], spawned by [key_name(src.owner)].") // WS - End + else if (href_list["adminpopup"]) + if (!check_rights(R_ADMIN)) + return + + var/message = input(owner, "As well as a popup, they'll also be sent a message to reply to. What do you want that to be?", "Message") as text|null + if (!message) + to_chat(owner, span_notice("Popup cancelled.")) + return + + var/client/target = locate(href_list["adminpopup"]) + if (!istype(target)) + to_chat(owner, span_notice("The mob doesn't exist anymore!")) + return + + give_admin_popup(target, owner, message) + else if(href_list["adminsmite"]) if(!check_rights(R_ADMIN|R_FUN)) return diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 7ec2c43dd995..1b9b41d773b1 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -26,7 +26,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) QDEL_NULL(rstatclick) return ..() -/datum/admin_help_tickets/proc/TicketByID(id) +/datum/admin_help_tickets/proc/ticket_by_id(id) var/list/lists = list(active_tickets, closed_tickets, resolved_tickets) for(var/I in lists) for(var/J in I) @@ -34,7 +34,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) if(AH.id == id) return J -/datum/admin_help_tickets/proc/TicketsByCKey(ckey) +/datum/admin_help_tickets/proc/tickets_by_ckey(ckey) . = list() var/list/lists = list(active_tickets, closed_tickets, resolved_tickets) for(var/I in lists) @@ -44,7 +44,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) . += AH //private -/datum/admin_help_tickets/proc/ListInsert(datum/admin_help/new_ticket) +/datum/admin_help_tickets/proc/list_insert(datum/admin_help/new_ticket) var/list/ticket_list switch(new_ticket.state) if(AHELP_ACTIVE) @@ -65,7 +65,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) ticket_list += new_ticket //opens the ticket listings for one of the 3 states -/datum/admin_help_tickets/proc/BrowseTickets(state) +/datum/admin_help_tickets/proc/browse_tickets(state) var/list/l2b var/title switch(state) @@ -94,8 +94,8 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) SHOULD_NOT_SLEEP(TRUE) var/list/L = list() var/num_disconnected = 0 - L[++L.len] = list("Active Tickets:", "[astatclick.update("[active_tickets.len]")]", null, REF(astatclick)) - astatclick.update("[active_tickets.len]") + L[++L.len] = list("Active Tickets:", "[astatclick.update("[length(active_tickets)]")]", null, REF(astatclick)) + astatclick.update("[length(active_tickets)]") for(var/I in active_tickets) var/datum/admin_help/AH = I if(AH.initiator) @@ -107,34 +107,35 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) message_admins("Ticket #[AH.id] had a null statclick, this message will only be shown once.") AH.error_screamed = TRUE - L[++L.len] = list("#[AH.id]. [AH.initiator_key_name]:", "[AH.statclick.update()]", REF(AH)) + L[++L.len] = list("#[AH.id]. [AH.initiator_key_name] (Claimed by [AH.claimed_by || "nobody"]):", "[AH.statclick.update()]", REF(AH)) else ++num_disconnected + if(num_disconnected) L[++L.len] = list("Disconnected:", "[astatclick.update("[num_disconnected]")]", null, REF(astatclick)) - L[++L.len] = list("Closed Tickets:", "[cstatclick.update("[closed_tickets.len]")]", null, REF(cstatclick)) - L[++L.len] = list("Resolved Tickets:", "[rstatclick.update("[resolved_tickets.len]")]", null, REF(rstatclick)) + L[++L.len] = list("Closed Tickets:", "[cstatclick.update("[length(closed_tickets)]")]", null, REF(cstatclick)) + L[++L.len] = list("Resolved Tickets:", "[rstatclick.update("[length(resolved_tickets)]")]", null, REF(rstatclick)) L[++L.len] = list("Statclick Errors:", "[total_statclick_errors]", null, null) return L //Reassociate still open ticket if one exists -/datum/admin_help_tickets/proc/ClientLogin(client/C) - C.current_ticket = CKey2ActiveTicket(C.ckey) +/datum/admin_help_tickets/proc/client_login(client/C) + C.current_ticket = ckey2active_ticket(C.ckey) if(C.current_ticket) C.current_ticket.initiator = C - C.current_ticket.AddInteraction("Client reconnected.") - SSblackbox.LogAhelp(C.current_ticket.id, "Reconnected", "Client reconnected", C.ckey) + C.current_ticket.add_interaction("Client reconnected.") + SSblackbox.log_ahelp(C.current_ticket.id, "Reconnected", "Client reconnected", C.ckey) //Dissasociate ticket -/datum/admin_help_tickets/proc/ClientLogout(client/C) +/datum/admin_help_tickets/proc/client_logout(client/C) if(C.current_ticket) var/datum/admin_help/T = C.current_ticket - T.AddInteraction("Client disconnected.") - SSblackbox.LogAhelp(T.id, "Disconnected", "Client disconnected", C.ckey) + T.add_interaction("Client disconnected.") + SSblackbox.log_ahelp(T.id, "Disconnected", "Client disconnected", C.ckey) T.initiator = null //Get a ticket given a ckey -/datum/admin_help_tickets/proc/CKey2ActiveTicket(ckey) +/datum/admin_help_tickets/proc/ckey2active_ticket(ckey) for(var/I in active_tickets) var/datum/admin_help/AH = I if(AH.initiator_ckey == ckey) @@ -152,7 +153,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) ..() /obj/effect/statclick/ticket_list/Click() - GLOB.ahelp_tickets.BrowseTickets(current_state) + GLOB.ahelp_tickets.browse_tickets(current_state) //called by admin topic /obj/effect/statclick/ticket_list/proc/Action() @@ -173,9 +174,10 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) var/client/initiator //semi-misnomer, it's the person who ahelped/was bwoinked var/initiator_ckey var/initiator_key_name + var/claimed_by var/heard_by_no_admins = FALSE - var/list/_interactions //use AddInteraction() or, preferably, admin_ticket_log() + var/list/_interactions //use add_interaction() or, preferably, admin_ticket_log() var/obj/effect/statclick/ahelp/statclick var/error_screamed = FALSE @@ -202,20 +204,21 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) initiator_key_name = key_name(initiator, FALSE, TRUE) if(initiator.current_ticket) //This is a bug stack_trace("Multiple ahelp current_tickets") - initiator.current_ticket.AddInteraction("Ticket erroneously left open by code") - initiator.current_ticket.Close() + initiator.current_ticket.add_interaction("Ticket erroneously left open by code") + initiator.current_ticket.close() initiator.current_ticket = src - TimeoutVerb() + timeout_verb() statclick = new(null, src) _interactions = list() if(is_bwoink) - AddInteraction("[key_name_admin(usr)] PM'd [LinkedReplyName()]") - message_admins("Ticket [TicketHref("#[id]")] created") + add_interaction("[key_name_admin(usr)] PM'd [linked_reply_name()]") + message_admins("Ticket [ticket_href("#[id]")] created") + claimed_by = usr.key else - MessageNoRecipient(msg) + message_no_recipient(msg) SSredbot.send_discord_message("admin", "Ticket #[id] created by [usr.ckey] ([usr.real_name]): [name]", "ticket") @@ -228,60 +231,66 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) GLOB.ahelp_tickets.active_tickets += src /datum/admin_help/Destroy() - RemoveActive() + remove_active() + QDEL_NULL(statclick) GLOB.ahelp_tickets.closed_tickets -= src GLOB.ahelp_tickets.resolved_tickets -= src return ..() -/datum/admin_help/proc/AddInteraction(formatted_message) +/datum/admin_help/proc/add_interaction(formatted_message) if(heard_by_no_admins && usr && usr.ckey != initiator_ckey) heard_by_no_admins = FALSE send2tgs(initiator_ckey, "Ticket #[id]: Answered by [key_name(usr)]") _interactions += "[time_stamp()]: [formatted_message]" //Removes the ahelp verb and returns it after 2 minutes -/datum/admin_help/proc/TimeoutVerb() +/datum/admin_help/proc/timeout_verb() remove_verb(initiator, /client/verb/adminhelp) initiator.adminhelptimerid = addtimer(CALLBACK(initiator, /client/proc/giveadminhelpverb), 1200, TIMER_STOPPABLE) //2 minute cooldown of admin helps //private -/datum/admin_help/proc/FullMonty(ref_src) +/datum/admin_help/proc/full_monty(ref_src) if(!ref_src) ref_src = "[REF(src)]" . = ADMIN_FULLMONTY_NONAME(initiator.mob) if(state == AHELP_ACTIVE) - . += ClosureLinks(ref_src) + . += ticket_actions(ref_src) + + if (CONFIG_GET(flag/popup_admin_pm)) + . += " (POPUP)" //private -/datum/admin_help/proc/ClosureLinks(ref_src) +/datum/admin_help/proc/ticket_actions(ref_src) if(!ref_src) ref_src = "[REF(src)]" - . = " (REJT)" - . += " (IC)" - . += " (SKILL)" - . += " (CLOSE)" - . += " (RSLVE)" + . = "
" + . += " ([ticket_href("REJT", ref_src, "reject")])" + . += " ([ticket_href("IC", ref_src, "icissue")])" + . += " ([ticket_href("SKILL", ref_src, "skillissue")])" + . += " ([ticket_href("CLOSE", ref_src, "close")])" + . += " ([ticket_href("RSLVE", ref_src, "resolve")])" + . += " ([ticket_href("CLAIM", ref_src, "claim")])" //private -/datum/admin_help/proc/LinkedReplyName(ref_src) +/datum/admin_help/proc/linked_reply_name(ref_src) if(!ref_src) ref_src = "[REF(src)]" return "[initiator_key_name]" //private -/datum/admin_help/proc/TicketHref(msg, ref_src, action = "ticket") +/datum/admin_help/proc/ticket_href(msg, ref_src, action = "ticket") if(!ref_src) ref_src = "[REF(src)]" return "[msg]" //message from the initiator without a target, all admins will see this //won't bug irc/discord -/datum/admin_help/proc/MessageNoRecipient(msg) +/datum/admin_help/proc/message_no_recipient(msg) var/ref_src = "[REF(src)]" //Message to be sent to all admins - var/admin_msg = "Ticket [TicketHref("#[id]", ref_src)]: [LinkedReplyName(ref_src)] [FullMonty(ref_src)]: [keywords_lookup(msg)]" + var/admin_msg = "Ticket [ticket_href("#[id]", ref_src)]: [linked_reply_name(ref_src)] [full_monty(ref_src)]: [keywords_lookup(msg)]" - AddInteraction("[LinkedReplyName(ref_src)]: [msg]") + add_interaction("[linked_reply_name(ref_src)]: [msg]") log_admin_private("Ticket #[id]: [key_name(initiator)]: [msg]") //send this msg to all admins @@ -299,19 +308,18 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) type = MESSAGE_TYPE_ADMINPM, html = "PM to-Admins: [msg]", confidential = TRUE) - SSblackbox.LogAhelp(id, "Ticket Opened", msg, null, initiator.ckey) + SSblackbox.log_ahelp(id, "Ticket Opened", msg, null, initiator.ckey) //Reopen a closed ticket -/datum/admin_help/proc/Reopen() +/datum/admin_help/proc/reopen() if(state == AHELP_ACTIVE) to_chat(usr, "This ticket is already open.", confidential = TRUE) return - if(GLOB.ahelp_tickets.CKey2ActiveTicket(initiator_ckey)) + if(GLOB.ahelp_tickets.ckey2active_ticket(initiator_ckey)) to_chat(usr, "This user already has an active ticket, cannot reopen this one.", confidential = TRUE) return - statclick = new(null, src) GLOB.ahelp_tickets.active_tickets += src GLOB.ahelp_tickets.closed_tickets -= src GLOB.ahelp_tickets.resolved_tickets -= src @@ -325,61 +333,91 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) if(initiator) initiator.current_ticket = src - AddInteraction("Reopened by [key_name_admin(usr)]") - var/msg = "Ticket [TicketHref("#[id]")] reopened by [key_name_admin(usr)]." + add_interaction("Reopened by [key_name_admin(usr)]") + var/msg = "Ticket [ticket_href("#[id]")] reopened by [key_name_admin(usr)]." message_admins(msg) log_admin_private(msg) - SSblackbox.LogAhelp(id, "Reopened", "Reopened by [usr.key]", usr.ckey) + SSblackbox.log_ahelp(id, "Reopened", "Reopened by [usr.key]", usr.ckey) SSblackbox.record_feedback("tally", "ahelp_stats", 1, "reopened") - TicketPanel() //can only be done from here, so refresh it + ticket_panel() //can only be done from here, so refresh it //private -/datum/admin_help/proc/RemoveActive() +/datum/admin_help/proc/remove_active() if(state != AHELP_ACTIVE) stack_trace("Attempt to remove non-active ticket") return closed_at = world.time - QDEL_NULL(statclick) GLOB.ahelp_tickets.active_tickets -= src if(initiator && initiator.current_ticket == src) initiator.current_ticket = null + SEND_SIGNAL(src, COMSIG_ADMIN_HELP_MADE_INACTIVE) + +/datum/admin_help/proc/claim(key_name = key_name_admin(usr)) + if(state != AHELP_ACTIVE) + return FALSE + if(claimed_by && claimed_by != usr.key && alert(usr, "Ticket #[id] already claimed by [claimed_by]. Override?", "Adminhelp", "Yes", "No") != "Yes") + return FALSE + if(claimed_by == usr.key) + return TRUE + add_interaction(span_grey("Claimed by [key_name].")) + to_chat(initiator, span_adminhelp("Your ticket has been claimed by an admin. Expect a response shortly."), confidential = TRUE) + claimed_by = usr.key + SSblackbox.record_feedback("tally", "ahelp_stats", 1, "claimed") + var/msg = "Ticket [ticket_href("#[id]")] claimed by [key_name]." + message_admins(msg) + SSblackbox.log_ahelp(id, "Claimed", "Claimed by [usr.key]", null, usr.ckey) + log_admin_private(msg) + return TRUE + +/datum/admin_help/proc/unclaim(key_name = key_name_admin(usr)) + if(state != AHELP_ACTIVE) + return + if(claimed_by != usr.key) + return + add_interaction(span_grey("Unclaimed by [key_name].")) + claimed_by = null + SSblackbox.record_feedback("tally", "ahelp_stats", 1, "unclaimed") + var/msg = "Ticket [ticket_href("#[id]")] unclaimed by [key_name]." + message_admins(msg) + SSblackbox.log_ahelp(id, "Unclaimed", "Unclaimed by [usr.key]", null, usr.ckey) + log_admin_private(msg) //Mark open ticket as closed/meme -/datum/admin_help/proc/Close(key_name = key_name_admin(usr), silent = FALSE) +/datum/admin_help/proc/close(key_name = key_name_admin(usr), silent = FALSE) if(state != AHELP_ACTIVE) return - RemoveActive() + remove_active() state = AHELP_CLOSED - GLOB.ahelp_tickets.ListInsert(src) - AddInteraction("Closed by [key_name].") + GLOB.ahelp_tickets.list_insert(src) + add_interaction("Closed by [key_name].") if(!silent) SSblackbox.record_feedback("tally", "ahelp_stats", 1, "closed") - var/msg = "Ticket [TicketHref("#[id]")] closed by [key_name]." + var/msg = "Ticket [ticket_href("#[id]")] closed by [key_name]." message_admins(msg) - SSblackbox.LogAhelp(id, "Closed", "Closed by [usr.key]", null, usr.ckey) + SSblackbox.log_ahelp(id, "Closed", "Closed by [usr.key]", null, usr.ckey) log_admin_private(msg) //Mark open ticket as resolved/legitimate, returns ahelp verb -/datum/admin_help/proc/Resolve(key_name = key_name_admin(usr), silent = FALSE) +/datum/admin_help/proc/resolve(key_name = key_name_admin(usr), silent = FALSE) if(state != AHELP_ACTIVE) return - RemoveActive() + remove_active() state = AHELP_RESOLVED - GLOB.ahelp_tickets.ListInsert(src) + GLOB.ahelp_tickets.list_insert(src) addtimer(CALLBACK(initiator, /client/proc/giveadminhelpverb), 50) - AddInteraction("Resolved by [key_name].") + add_interaction("Resolved by [key_name].") to_chat(initiator, "Your ticket has been resolved by an admin. The Adminhelp verb will be returned to you shortly.", confidential = TRUE) if(!silent) SSblackbox.record_feedback("tally", "ahelp_stats", 1, "resolved") - var/msg = "Ticket [TicketHref("#[id]")] resolved by [key_name]" + var/msg = "Ticket [ticket_href("#[id]")] resolved by [key_name]" message_admins(msg) - SSblackbox.LogAhelp(id, "Resolved", "Resolved by [usr.key]", null, usr.ckey) + SSblackbox.log_ahelp(id, "Resolved", "Resolved by [usr.key]", null, usr.ckey) log_admin_private(msg) //Close and return ahelp verb, use if ticket is incoherent -/datum/admin_help/proc/Reject(key_name = key_name_admin(usr)) +/datum/admin_help/proc/reject(key_name = key_name_admin(usr)) if(state != AHELP_ACTIVE) return @@ -393,15 +431,15 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) to_chat(initiator, "Please try to be calm, clear, and descriptive in admin helps, do not assume the admin has seen any related events, and clearly state the names of anybody you are reporting.", confidential = TRUE) SSblackbox.record_feedback("tally", "ahelp_stats", 1, "rejected") - var/msg = "Ticket [TicketHref("#[id]")] rejected by [key_name]" + var/msg = "Ticket [ticket_href("#[id]")] rejected by [key_name]" message_admins(msg) log_admin_private(msg) - AddInteraction("Rejected by [key_name].") - SSblackbox.LogAhelp(id, "Rejected", "Rejected by [usr.key]", null, usr.ckey) - Close(silent = TRUE) + add_interaction("Rejected by [key_name].") + SSblackbox.log_ahelp(id, "Rejected", "Rejected by [usr.key]", null, usr.ckey) + close(silent = TRUE) //Resolve ticket with IC Issue message -/datum/admin_help/proc/ICIssue(key_name = key_name_admin(usr)) +/datum/admin_help/proc/ic_issue(key_name = key_name_admin(usr)) if(state != AHELP_ACTIVE) return @@ -412,15 +450,15 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) to_chat(initiator, msg, confidential = TRUE) SSblackbox.record_feedback("tally", "ahelp_stats", 1, "IC") - msg = "Ticket [TicketHref("#[id]")] marked as IC by [key_name]" + msg = "Ticket [ticket_href("#[id]")] marked as IC by [key_name]" message_admins(msg) log_admin_private(msg) - AddInteraction("Marked as IC issue by [key_name]") - SSblackbox.LogAhelp(id, "IC Issue", "Marked as IC issue by [usr.key]", null, usr.ckey) - Resolve(silent = TRUE) + add_interaction("Marked as IC issue by [key_name]") + SSblackbox.log_ahelp(id, "IC Issue", "Marked as IC issue by [usr.key]", null, usr.ckey) + resolve(silent = TRUE) //Resolve ticket and inform user that they have a skill issue -/datum/admin_help/proc/SkillIssue(key_name = key_name_admin(usr)) +/datum/admin_help/proc/skill_issue(key_name = key_name_admin(usr)) if(state != AHELP_ACTIVE) return @@ -431,18 +469,18 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) to_chat(initiator, msg, confidential = TRUE) SSblackbox.record_feedback("tally", "ahelp_stats", 1, "Skill") - msg = "Ticket [TicketHref("#[id]")] marked as skill issue by [key_name]" + msg = "Ticket [ticket_href("#[id]")] marked as skill issue by [key_name]" message_admins(msg) log_admin_private(msg) - AddInteraction("Marked as skill issue by [key_name]") - SSblackbox.LogAhelp(id, "Skill Issue", "Marked as skill issue by [usr.key]", null, usr.ckey) - Resolve(silent = TRUE) + add_interaction("Marked as skill issue by [key_name]") + SSblackbox.log_ahelp(id, "Skill Issue", "Marked as skill issue by [usr.key]", null, usr.ckey) + resolve(silent = TRUE) //Show the ticket panel -/datum/admin_help/proc/TicketPanel() - var/list/dat = list("Ticket #[id]") +/datum/admin_help/proc/ticket_panel() + var/list/dat = list() var/ref_src = "[REF(src)]" - dat += "

Admin Help Ticket #[id]: [LinkedReplyName(ref_src)]

" + dat += "

Admin Help Ticket #[id]: [linked_reply_name(ref_src)] (Claimed by [claimed_by || "nobody"])

" dat += "State: " switch(state) if(AHELP_ACTIVE) @@ -453,55 +491,64 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) dat += "CLOSED" else dat += "UNKNOWN" - dat += "[FOURSPACES][TicketHref("Refresh", ref_src)][FOURSPACES][TicketHref("Re-Title", ref_src, "retitle")]" + dat += "[FOURSPACES][ticket_href("Refresh", ref_src)][FOURSPACES][ticket_href("Re-Title", ref_src, "retitle")]" if(state != AHELP_ACTIVE) - dat += "[FOURSPACES][TicketHref("Reopen", ref_src, "reopen")]" + dat += "[FOURSPACES][ticket_href("Reopen", ref_src, "reopen")]" dat += "

Opened at: [gameTimestamp(wtime = opened_at)] (Approx [DisplayTimeText(world.time - opened_at)] ago)" if(closed_at) dat += "
Closed at: [gameTimestamp(wtime = closed_at)] (Approx [DisplayTimeText(world.time - closed_at)] ago)" dat += "

" if(initiator) - dat += "Actions: [FullMonty(ref_src)]
" + dat += "Actions:
[full_monty(ref_src)]
" else - dat += "DISCONNECTED[FOURSPACES][ClosureLinks(ref_src)]
" + dat += "DISCONNECTED[ticket_actions(ref_src)]
" dat += "
Log:

" for(var/I in _interactions) dat += "[I]
" - usr << browse(dat.Join(), "window=ahelp[id];size=620x480") + var/datum/browser/popup = new(usr, "ahelp[id]", "Ticket #[id]", 620, 480) + popup.set_content(dat.Join()) + popup.open() -/datum/admin_help/proc/Retitle() +/datum/admin_help/proc/retitle() var/new_title = input(usr, "Enter a title for the ticket", "Rename Ticket", name) as text|null if(new_title) name = new_title //not saying the original name cause it could be a long ass message - var/msg = "Ticket [TicketHref("#[id]")] titled [name] by [key_name_admin(usr)]" + var/msg = "Ticket [ticket_href("#[id]")] titled [name] by [key_name_admin(usr)]" message_admins(msg) log_admin_private(msg) - TicketPanel() //we have to be here to do this + ticket_panel() //we have to be here to do this //Forwarded action from admin/Topic -/datum/admin_help/proc/Action(action) +/datum/admin_help/proc/action(mob/user, action) testing("Ahelp action: [action]") switch(action) + if("claim") + if(user.key == claimed_by) + unclaim() + return + claim() if("ticket") - TicketPanel() + ticket_panel() if("retitle") - Retitle() + retitle() if("reject") - Reject() + reject() if("reply") - usr.client.cmd_ahelp_reply(initiator) + if(!claim()) + return + user.client.cmd_ahelp_reply(initiator) if("icissue") - ICIssue() + ic_issue() if("skillissue") - SkillIssue() + skill_issue() if("close") - Close() + close() if("resolve") - Resolve() + resolve() if("reopen") - Reopen() + reopen() // // TICKET STATCLICK @@ -518,7 +565,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) return ..(ahelp_datum.name) /obj/effect/statclick/ahelp/Click() - ahelp_datum.TicketPanel() + ahelp_datum.ticket_panel() /obj/effect/statclick/ahelp/Destroy() ahelp_datum = null @@ -562,14 +609,14 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) if(current_ticket) if(alert(usr, "You already have a ticket open. Is this for the same issue?",,"Yes","No") != "No") if(current_ticket) - current_ticket.MessageNoRecipient(msg) - current_ticket.TimeoutVerb() + current_ticket.message_no_recipient(msg) + current_ticket.timeout_verb() return else to_chat(usr, "Ticket not found, creating new one...", confidential = TRUE) else - current_ticket.AddInteraction("[key_name_admin(usr)] opened a new ticket.") - current_ticket.Close() + current_ticket.add_interaction("[key_name_admin(usr)] opened a new ticket.") + current_ticket.close() //Extremely simple system of suggesting mentorhelp instead of adminhelp var/msg_lower = lowertext(msg) @@ -594,12 +641,12 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) else C = what if(istype(C) && C.current_ticket) - C.current_ticket.AddInteraction(message) + C.current_ticket.add_interaction(message) return C.current_ticket if(istext(what)) //ckey - var/datum/admin_help/AH = GLOB.ahelp_tickets.CKey2ActiveTicket(what) + var/datum/admin_help/AH = GLOB.ahelp_tickets.ckey2active_ticket(what) if(AH) - AH.AddInteraction(message) + AH.add_interaction(message) return AH // @@ -638,8 +685,8 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) /proc/send2tgs(msg,msg2) - msg = replacetext(replacetext(msg, "\proper", ""), "\improper", "") - msg2 = replacetext(replacetext(msg2, "\proper", ""), "\improper", "") + msg = format_text(msg) + msg2 = format_text(msg2) world.TgsTargetedChatBroadcast("[msg] | [msg2]", TRUE) /** @@ -772,3 +819,75 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) return founds return msg + +/** + * Checks a given message to see if any of the words are something we want to treat specially, as detailed below. + * + * There are 3 cases where a word is something we want to act on + * 1. Admin pings, like @adminckey. Pings the admin in question, text is not clickable + * 2. Datum refs, like @0x2001169 or @mob_23. Clicking on the link opens up the VV for that datum + * 3. Ticket refs, like #3. Displays the status and ahelper in the link, clicking on it brings up the ticket panel for it. + * Returns a list being used as a tuple. Index ASAY_LINK_NEW_MESSAGE_INDEX contains the new message text (with clickable links and such) + * while index ASAY_LINK_PINGED_ADMINS_INDEX contains a list of pinged admin clients, if there are any. + * + * Arguments: + * * msg - the message being scanned + */ +/proc/check_asay_links(msg) + var/list/msglist = splittext(msg, " ") //explode the input msg into a list + var/list/pinged_admins = list() // if we ping any admins, store them here so we can ping them after + var/modified = FALSE // did we find anything? + + var/i = 0 + for(var/word in msglist) + i++ + if(!length(word)) + continue + + switch(word[1]) + if("@") + var/stripped_word = ckey(copytext(word, 2)) + + // first we check if it's a ckey of an admin + var/client/client_check = GLOB.directory[stripped_word] + if(client_check?.holder) + msglist[i] = "[word]" + pinged_admins[stripped_word] = client_check + modified = TRUE + continue + + // then if not, we check if it's a datum ref + + var/word_with_brackets = "\[[stripped_word]\]" // the actual memory address lookups need the bracket wraps + var/datum/datum_check = locate(word_with_brackets) + if(!istype(datum_check)) + continue + msglist[i] = "[word]" + modified = TRUE + + if("#") // check if we're linking a ticket + var/possible_ticket_id = text2num(copytext(word, 2)) + if(!possible_ticket_id) + continue + + var/datum/admin_help/ahelp_check = GLOB.ahelp_tickets?.ticket_by_id(possible_ticket_id) + if(!ahelp_check) + continue + + var/state_word + switch(ahelp_check.state) + if(AHELP_ACTIVE) + state_word = "Active" + if(AHELP_CLOSED) + state_word = "Closed" + if(AHELP_RESOLVED) + state_word = "Resolved" + + msglist[i]= "[word] ([state_word] | [ahelp_check.initiator_key_name])" + modified = TRUE + + if(modified) + var/list/return_list = list() + return_list[ASAY_LINK_NEW_MESSAGE_INDEX] = jointext(msglist, " ") // without tuples, we must make do! + return_list[ASAY_LINK_PINGED_ADMINS_INDEX] = pinged_admins + return return_list diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index b4e5653b0076..d227d44e18b0 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -82,7 +82,7 @@ type = MESSAGE_TYPE_ADMINPM, html = "Message not sent:
[msg]", confidential = TRUE) - AH.AddInteraction("No client found, message not sent:
[msg]") + AH.add_interaction("No client found, message not sent:
[msg]") return cmd_admin_pm(whom, msg) @@ -169,10 +169,10 @@ html = "Message not sent:
[msg]", confidential = TRUE) if(recipient_ticket) - recipient_ticket.AddInteraction("No client found, message not sent:
[msg]") + recipient_ticket.add_interaction("No client found, message not sent:
[msg]") return else - current_ticket.MessageNoRecipient(msg) + current_ticket.message_no_recipient(msg) return @@ -212,6 +212,8 @@ if(holder && recipient.holder && !current_ticket) //Both are admins, and this is not a reply to our own ticket. badmin = TRUE if(recipient.holder && !badmin) + SEND_SIGNAL(current_ticket, COMSIG_ADMIN_HELP_REPLIED) + if(holder) to_chat(recipient, type = MESSAGE_TYPE_ADMINPM, @@ -226,7 +228,7 @@ admin_ticket_log(src, interaction_message) if(recipient != src) //reeee admin_ticket_log(recipient, interaction_message) - SSblackbox.LogAhelp(current_ticket.id, "Reply", msg, recipient.ckey, src.ckey) + SSblackbox.log_ahelp(current_ticket.id, "Reply", msg, recipient.ckey, src.ckey) else //recipient is an admin but sender is not var/replymsg = "Reply PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]" admin_ticket_log(src, "[replymsg]") @@ -238,19 +240,18 @@ type = MESSAGE_TYPE_ADMINPM, html = "PM to-Admins: [msg]", confidential = TRUE) - SSblackbox.LogAhelp(current_ticket.id, "Reply", msg, recipient.ckey, src.ckey) + SSblackbox.log_ahelp(current_ticket.id, "Reply", msg, recipient.ckey, src.ckey) //play the receiving admin the adminhelp sound (if they have them enabled) if(recipient.prefs.toggles & SOUND_ADMINHELP) SEND_SOUND(recipient, sound('sound/effects/adminhelp.ogg')) - else if(holder) //sender is an admin but recipient is not. Do BIG RED TEXT var/already_logged = FALSE if(!recipient.current_ticket) new /datum/admin_help(msg, recipient, TRUE) already_logged = TRUE - SSblackbox.LogAhelp(recipient.current_ticket.id, "Ticket Opened", msg, recipient.ckey, src.ckey) + SSblackbox.log_ahelp(recipient.current_ticket.id, "Ticket Opened", msg, recipient.ckey, src.ckey) to_chat(recipient, type = MESSAGE_TYPE_ADMINPM, @@ -272,21 +273,23 @@ admin_ticket_log(recipient, "PM From [key_name_admin(src)]: [keywordparsedmsg]") if(!already_logged) //Reply to an existing ticket - SSblackbox.LogAhelp(recipient.current_ticket.id, "Reply", msg, recipient.ckey, src.ckey) + SSblackbox.log_ahelp(recipient.current_ticket.id, "Reply", msg, recipient.ckey, src.ckey) //always play non-admin recipients the adminhelp sound SEND_SOUND(recipient, sound('sound/effects/adminhelp.ogg')) - //AdminPM popup for ApocStation and anybody else who wants to use it. Set it with POPUP_ADMIN_PM in config.txt ~Carn - if(CONFIG_GET(flag/popup_admin_pm)) - INVOKE_ASYNC(src, .proc/popup_admin_pm, recipient, msg) - - else //neither are admins - to_chat(src, - type = MESSAGE_TYPE_ADMINPM, - html = "Error: Admin-PM: Non-admin to non-admin PM communication is forbidden.", - confidential = TRUE) - return + else //neither are admins + if(!current_ticket) + to_chat(src, + type = MESSAGE_TYPE_ADMINPM, + html = span_danger("Error: Admin-PM: Non-admin to non-admin PM communication is forbidden."), + confidential = TRUE) + to_chat(src, + type = MESSAGE_TYPE_ADMINPM, + html = "[span_danger("Message not sent:")]
[msg]", + confidential = TRUE) + return + current_ticket.message_no_recipient(msg) if(external) log_admin_private("PM: [key_name(src)]->External: [rawmsg]") @@ -306,22 +309,12 @@ html = "PM: [key_name(src, X, 0)]->[key_name(recipient, X, 0)]: [keywordparsedmsg]" , confidential = TRUE) -/client/proc/popup_admin_pm(client/recipient, msg) - var/sender = src - var/sendername = key - var/reply = input(recipient, msg,"Admin PM from-[sendername]", "") as message|null //show message and await a reply - if(recipient && reply) - if(sender) - recipient.cmd_admin_pm(sender,reply) //sender is still about, let's reply to them - else - adminhelp(reply) //sender has left, adminhelp instead - #define TGS_AHELP_USAGE "Usage: ticket " /proc/TgsPm(target,msg,sender) target = ckey(target) var/client/C = GLOB.directory[target] - var/datum/admin_help/ticket = C ? C.current_ticket : GLOB.ahelp_tickets.CKey2ActiveTicket(target) + var/datum/admin_help/ticket = C ? C.current_ticket : GLOB.ahelp_tickets.ckey2active_ticket(target) var/compliant_msg = trim(lowertext(msg)) var/tgs_tagged = "[sender](TGS/External)" var/list/splits = splittext(compliant_msg, " ") @@ -331,23 +324,23 @@ switch(splits[2]) if("close") if(ticket) - ticket.Close(tgs_tagged) + ticket.close(tgs_tagged) return "Ticket #[ticket.id] successfully closed" if("resolve") if(ticket) - ticket.Resolve(tgs_tagged) + ticket.resolve(tgs_tagged) return "Ticket #[ticket.id] successfully resolved" if("icissue") if(ticket) - ticket.ICIssue(tgs_tagged) + ticket.ic_issue(tgs_tagged) return "Ticket #[ticket.id] successfully marked as IC issue" if("skill") if(ticket) - ticket.SkillIssue(tgs_tagged) + ticket.skill_issue(tgs_tagged) return "Ticket #[ticket.id] successfully marked as skill issue" if("reject") if(ticket) - ticket.Reject(tgs_tagged) + ticket.reject(tgs_tagged) return "Ticket #[ticket.id] successfully rejected" if("reopen") if(ticket) @@ -357,15 +350,15 @@ fail = text2num(splits[3]) if(isnull(fail)) return "Error: No/Invalid ticket id specified. [TGS_AHELP_USAGE]" - var/datum/admin_help/AH = GLOB.ahelp_tickets.TicketByID(fail) + var/datum/admin_help/AH = GLOB.ahelp_tickets.ticket_by_id(fail) if(!AH) return "Error: Ticket #[fail] not found" if(AH.initiator_ckey != target) return "Error: Ticket #[fail] belongs to [AH.initiator_ckey]" - AH.Reopen() + AH.reopen() return "Ticket #[ticket.id] successfully reopened" if("list") - var/list/tickets = GLOB.ahelp_tickets.TicketsByCKey(target) + var/list/tickets = GLOB.ahelp_tickets.tickets_by_ckey(target) if(!tickets.len) return "None" . = "" diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm index 7fa7d1486aad..fa2c1c6c823c 100644 --- a/code/modules/admin/verbs/adminsay.dm +++ b/code/modules/admin/verbs/adminsay.dm @@ -9,6 +9,19 @@ if(!msg) return + if(findtext(msg, "@") || findtext(msg, "#")) + var/list/link_results = check_asay_links(msg) + if(length(link_results)) + msg = link_results[ASAY_LINK_NEW_MESSAGE_INDEX] + link_results[ASAY_LINK_NEW_MESSAGE_INDEX] = null + var/list/pinged_admin_clients = link_results[ASAY_LINK_PINGED_ADMINS_INDEX] + for(var/iter_ckey in pinged_admin_clients) + var/client/iter_admin_client = pinged_admin_clients[iter_ckey] + if(!iter_admin_client?.holder) + continue + window_flash(iter_admin_client) + SEND_SOUND(iter_admin_client.mob, sound('sound/misc/asay_ping.ogg')) + mob.log_talk(msg, LOG_ASAY) msg = keywords_lookup(msg) var/custom_asay_color = (CONFIG_GET(flag/allow_admin_asaycolor) && prefs.asaycolor) ? "" : "" diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index b827639b9f0c..524cd800f698 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -690,6 +690,27 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that to_chat(usr, "[template.name]", confidential = TRUE) to_chat(usr, "[template.description]", confidential = TRUE) +/client/proc/fucky_wucky() + set category = "Debug" + set name = "Fucky Wucky" + set desc = "Inform the players that the code monkeys at our headquarters are working very hard to fix this." + + if(!check_rights(R_DEBUG)) + return + remove_verb(/client/proc/fucky_wucky) + message_admins("[key_name_admin(src)] did a fucky wucky.") + log_admin("[key_name(src)] did a fucky wucky.") + for(var/m in GLOB.player_list) + var/datum/asset/fuckywucky = get_asset_datum(/datum/asset/simple/fuckywucky) + fuckywucky.send(m) + SEND_SOUND(m, 'sound/misc/fuckywucky.ogg') + to_chat(m, span_purple(examine_block(""))) + + addtimer(CALLBACK(src, PROC_REF(restore_fucky_wucky)), 600) + +/client/proc/restore_fucky_wucky() + add_verb(/client/proc/fucky_wucky) + /client/proc/toggle_medal_disable() set category = "Debug" set name = "Toggle Medal Disable" diff --git a/code/modules/admin/verbs/overmap_token_manager.dm b/code/modules/admin/verbs/overmap_token_manager.dm new file mode 100644 index 000000000000..1dc57b17b05e --- /dev/null +++ b/code/modules/admin/verbs/overmap_token_manager.dm @@ -0,0 +1,93 @@ +/client/proc/overmap_datum_token_manager() + set name = "Overmap Datum Token Manager" + set category = "Admin.Game" + set desc = "Manage the tokens of the overmap datum." + + var/static/datum/overmap_datum_token_manager/manager + if(isnull(manager)) + manager = new + manager.ui_interact(mob) + +/// Datum for the overmap datum token manager. +/datum/overmap_datum_token_manager + +/datum/overmap_datum_token_manager/ui_state(mob/user) + return GLOB.admin_state + +/datum/overmap_datum_token_manager/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(isnull(ui)) + ui = new(user, src, "OvermapTokenManager") + ui.open() + +/datum/overmap_datum_token_manager/proc/get_name_and_ref(datum/overmap/from) + if(isnull(from)) + return null + return list( + "name" = from.name, + "ref" = REF(from), + ) + +/datum/overmap_datum_token_manager/ui_data(mob/user) + . = list() + for(var/datum/overmap/overmap_datum as anything in SSovermap.overmap_objects) + var/datum_type = "[overmap_datum.type]" + if(!(datum_type in .)) + .[datum_type] = list() + + var/list/datum_info = list() + .[datum_type] += list(datum_info) + + datum_info["name"] = overmap_datum.name + datum_info["ref"] = REF(overmap_datum) + datum_info["token"] = get_name_and_ref(overmap_datum.token) + datum_info["position"] = list(overmap_datum.x, overmap_datum.y) + datum_info["docked_to"] = get_name_and_ref(overmap_datum.docked_to) + + var/list/docked_info = list() + datum_info["docked"] = docked_info + for(var/datum/overmap/docked as anything in overmap_datum.contents) + docked_info += list(get_name_and_ref(docked)) + + if(istype(overmap_datum, /datum/overmap/ship/controlled)) + var/datum/overmap/ship/controlled/ship = overmap_datum + datum_info["ship_port_ref"] = REF(ship.shuttle_port) + +/datum/overmap_datum_token_manager/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + + switch(action) + if("vv") + var/datum/target = locate(params["ref"]) + if(isnull(target)) + return + ui.user.client.debug_variables(target) + return TRUE + + if("jump") + var/target = locate(params["ref"]) + if(isnull(target)) + return + + if(!isobserver(ui.user) && !ui.user.client.admin_ghost()) + return + ui.user.forceMove(get_turf(target)) + return TRUE + + if("token-new") + var/datum/overmap/target = locate(params["ref"]) in SSovermap.overmap_objects + if(isnull(target)) + return + target.set_or_create_token() + message_admins("[key_name_admin(ui.user)] regenerated the token for [target.name] ([target.type])") + return TRUE + + if("token-force-update") + var/datum/overmap/target = locate(params["ref"]) in SSovermap.overmap_objects + if(isnull(target)) + return + target.set_or_create_token(target.token) + message_admins("[key_name_admin(ui.user)] forced an update of the token for [target.name] ([target.type])") + return TRUE diff --git a/code/modules/admin/verbs/selectequipment.dm b/code/modules/admin/verbs/selectequipment.dm index 68eb9bab1216..9bc6ab3dcea9 100644 --- a/code/modules/admin/verbs/selectequipment.dm +++ b/code/modules/admin/verbs/selectequipment.dm @@ -106,13 +106,7 @@ /datum/select_equipment/ui_data(mob/user) var/list/data = list() - if(!dummy_key) - init_dummy() - var/icon/dummysprite = get_flat_human_icon(null, - dummy_key = dummy_key, - outfit_override = selected_outfit) - data["icon64"] = icon2base64(dummysprite) data["name"] = target_mob var/datum/preferences/prefs = user?.client?.prefs @@ -129,6 +123,15 @@ /datum/select_equipment/ui_static_data(mob/user) var/list/data = list() + if(!dummy_key) + init_dummy() + var/icon/dummysprite = get_flat_human_icon( + null, + dummy_key = dummy_key, + outfit_override = selected_outfit + ) + data["icon64"] = icon2base64(dummysprite) + if(!cached_outfits) cached_outfits = list() cached_outfits += list(outfit_entry("General", /datum/outfit, "Naked", priority=TRUE)) @@ -152,7 +155,7 @@ return custom_outfit -/datum/select_equipment/ui_act(action, params) +/datum/select_equipment/ui_act(action, params, ui) if(..()) return . = TRUE @@ -171,6 +174,7 @@ return selected_outfit = new_outfit + update_static_data(user, ui) if("applyoutfit") var/datum/outfit/new_outfit = resolve_outfit(params["path"]) diff --git a/code/modules/admin/verbs/toggle_ship_spawn.dm b/code/modules/admin/verbs/toggle_ship_spawn.dm new file mode 100644 index 000000000000..ffaed8c6c442 --- /dev/null +++ b/code/modules/admin/verbs/toggle_ship_spawn.dm @@ -0,0 +1,19 @@ +GLOBAL_VAR_INIT(ship_spawn_enabled, TRUE) + +/client/proc/toggle_ship_spawn() + set name = "Toggle Ship Spawn" + set category = "Server" + set desc = "Toggles the ability of players to create ships via the roundstart screen or shuttle creator." + + if(!holder) + to_chat(src, "Only administrators may use this command.", confidential = TRUE) + return + if(check_rights(R_ADMIN, 1)) + GLOB.ship_spawn_enabled ^= TRUE + var/message + if(GLOB.ship_spawn_enabled) + message = "[key_name_admin(usr)] enabled player ship spawning." + else + message = "[key_name_admin(usr)] disabled player ship spawning." + message_admins(message) + log_game(message) diff --git a/code/modules/antagonists/abductor/equipment/abduction_surgery.dm b/code/modules/antagonists/abductor/equipment/abduction_surgery.dm index 641c21bd5b24..fcfbfc7f8646 100644 --- a/code/modules/antagonists/abductor/equipment/abduction_surgery.dm +++ b/code/modules/antagonists/abductor/equipment/abduction_surgery.dm @@ -41,7 +41,8 @@ /datum/surgery_step/gland_insert name = "insert gland" - implements = list(/obj/item/organ/heart/gland = 100) + implements = list( + /obj/item/organ/heart/gland = 100) time = 32 /datum/surgery_step/gland_insert/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) diff --git a/code/modules/antagonists/abductor/equipment/glands/transform.dm b/code/modules/antagonists/abductor/equipment/glands/transform.dm index de718235d79b..1b2c55a6e696 100644 --- a/code/modules/antagonists/abductor/equipment/glands/transform.dm +++ b/code/modules/antagonists/abductor/equipment/glands/transform.dm @@ -11,5 +11,5 @@ /obj/item/organ/heart/gland/transform/activate() to_chat(owner, "You feel unlike yourself.") randomize_human(owner) - var/species = pick(list(/datum/species/human, /datum/species/lizard, /datum/species/moth, /datum/species/fly, /datum/species/squid)) + var/species = pick(list(/datum/species/human, /datum/species/lizard, /datum/species/moth, /datum/species/fly,)) owner.set_species(species) diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm index 4e68c4bf7fd8..acce4799bf77 100644 --- a/code/modules/antagonists/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -1019,16 +1019,7 @@ structure_check() searches for nearby cultist structures required for the invoca if(51 to 60) var/datum/round_event_control/spider_infestation/SI = new() SI.runEvent() - if(61 to 70) - var/datum/round_event_control/anomaly/anomaly_flux/AF - var/datum/round_event_control/anomaly/anomaly_grav/AG - var/datum/round_event_control/anomaly/anomaly_pyro/AP - var/datum/round_event_control/anomaly/anomaly_vortex/AV - AF.runEvent() - AG.runEvent() - AP.runEvent() - AV.runEvent() - if(71 to 80) + if(61 to 80) var/datum/round_event_control/spacevine/SV = new() var/datum/round_event_control/grey_tide/GT = new() SV.runEvent() diff --git a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm index b9f2ee96ffda..db65e0cbd688 100644 --- a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm +++ b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm @@ -615,7 +615,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/AI_Module)) cost = 25 power_type = /datum/action/innate/ai/break_fire_alarms unlock_text = "You replace the thermal sensing capabilities of all fire alarms with a manual override, allowing you to turn them off at will." - unlock_sound = 'goon/sound/machinery/firealarm.ogg' + unlock_sound = 'sound/machines/firealarm.ogg' /datum/action/innate/ai/break_fire_alarms name = "Override Thermal Sensors" diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index e745323efc0a..a5be27f88526 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -185,6 +185,7 @@ righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' resistance_flags = FIRE_PROOF var/anomaly_type = /obj/effect/anomaly + var/research /obj/item/assembly/signaler/anomaly/receive_signal(datum/signal/signal) if(!signal) @@ -193,10 +194,12 @@ return FALSE if(suicider) manual_suicide(suicider) - for(var/obj/effect/anomaly/A in get_turf(src)) - A.anomalyNeutralize() + for(var/obj/effect/anomaly/Anomaly in get_turf(src)) + Anomaly.anomalyNeutralize() return TRUE + + /obj/item/assembly/signaler/anomaly/manual_suicide(mob/living/carbon/user) user.visible_message("[user]'s [src] is reacting to the radio signal, warping [user.p_their()] body!") user.set_suicide(TRUE) @@ -208,7 +211,25 @@ to_chat(user, "Analyzing... [src]'s stabilized field is fluctuating along frequency [format_frequency(frequency)], code [code].") ..() +/obj/item/assembly/signaler/anomaly/det_signal + name = "anomaly field" + research = null + anomaly_type = null + +/obj/item/assembly/signaler/anomaly/det_signal/receive_signal(datum/signal/signal) + if(!signal) + return FALSE + if(signal.data["code"] != code) + return FALSE + if(suicider) + manual_suicide(suicider) + for(var/obj/effect/anomaly/Anomaly in get_turf(src)) + Anomaly.detonate() + return TRUE + + //Anomaly cores + /obj/item/assembly/signaler/anomaly/pyro name = "\improper pyroclastic anomaly core" desc = "The neutralized core of a pyroclastic anomaly. It feels warm to the touch. It'd probably be valuable for research." @@ -237,7 +258,44 @@ name = "\improper vortex anomaly core" desc = "The neutralized core of a vortex anomaly. It won't sit still, as if some invisible force is acting on it. It'd probably be valuable for research." icon_state = "vortex core" - anomaly_type = /obj/effect/anomaly/bhole + anomaly_type = /obj/effect/anomaly/vortex + +/obj/item/assembly/signaler/anomaly/hallucination + name = "\improper hallucination anomaly core" + desc = "The neutralized core of a hallucination anomaly. It seems to be moving, but it's probably your imagination. It'd probably be valuable for research." + icon_state = "hallucination_core" + anomaly_type = /obj/effect/anomaly/hallucination + +/obj/item/assembly/signaler/anomaly/sparkler + name = "\improper sparkler anomaly core" + desc = "The neutralized core of a sparkler anomaly. Tiny electrical sparks arc off it." + anomaly_type = /obj/effect/anomaly/sparkler + +/obj/item/assembly/signaler/anomaly/veins + name = "\improper fountain anomaly core" + desc = "The neutralized core of a fountain anomaly. Blood drips off of it." + anomaly_type = /obj/effect/anomaly/sparkler + +/obj/item/assembly/signaler/anomaly/phantom + name = "\improper phantom anomaly core" + desc = "The neutralized core of a phantom anomaly. It quietly screams." + anomaly_type = /obj/effect/anomaly/phantom + +/obj/item/assembly/signaler/anomaly/pulsar + name = "\improper pulsar anomaly core" + desc = "The neutralized core of a pulsar anomaly. Electromagnetic crackles come off it." + +/obj/item/assembly/signaler/anomaly/plasmasoul + name = "\improper plasmasoul anomaly core" + desc = "The neutralized core of a plasmasoul anomaly. The air around it hisses." + +/obj/item/assembly/signaler/anomaly/heartbeat + name = "\improper heartbeat anomaly core" + desc = "The neutralized core of a heartbeat anomaly. It's concerningly warm to the touch." + +/obj/item/assembly/signaler/anomaly/tvstatic + name = "\improper static anomaly core" + desc = "The neutralized core of a static anomaly. Your head hurts just staring at it" /obj/item/assembly/signaler/anomaly/attack_self() return diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index 77b22505188c..8b76ab432cdf 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -110,6 +110,10 @@ "stamp-solgov" = 'icons/stamp_icons/large_stamp-solgov.png' ) +/datum/asset/simple/fuckywucky + assets = list( + "fuckywucky.png" = 'html/fuckywucky.png' + ) /datum/asset/simple/IRV assets = list( diff --git a/code/modules/atmospherics/environmental/LINDA_fire.dm b/code/modules/atmospherics/environmental/LINDA_fire.dm index 6ec5bc73414a..428e8b5a6d18 100644 --- a/code/modules/atmospherics/environmental/LINDA_fire.dm +++ b/code/modules/atmospherics/environmental/LINDA_fire.dm @@ -48,10 +48,6 @@ var/bypassing = FALSE var/visual_update_tick = 0 -#define IGNITE_TURF_CHANCE 30 -#define IGNITE_TURF_LOW_POWER 8 -#define IGNITE_TURF_HIGH_POWER 22 - /obj/effect/hotspot/Initialize(mapload, starting_volume, starting_temperature) . = ..() SSair.hotspots += src @@ -68,14 +64,6 @@ ) AddElement(/datum/element/connect_loc, loc_connections) - if(prob(IGNITE_TURF_CHANCE)) - var/turf/my_turf = loc - my_turf.IgniteTurf(rand(IGNITE_TURF_LOW_POWER,IGNITE_TURF_HIGH_POWER)) - -#undef IGNITE_TURF_CHANCE -#undef IGNITE_TURF_LOW_POWER -#undef IGNITE_TURF_HIGH_POWER - /obj/effect/hotspot/proc/perform_exposure() var/turf/open/location = loc if(!istype(location) || !(location.air)) diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm index 9ad5077ba447..383a362a0228 100644 --- a/code/modules/atmospherics/gasmixtures/reactions.dm +++ b/code/modules/atmospherics/gasmixtures/reactions.dm @@ -149,24 +149,16 @@ cached_results["fire"] = 0 var/turf/open/location = isturf(holder) ? holder : null - var/burned_fuel = 0 - if(air.get_moles(GAS_O2) < air.get_moles(GAS_TRITIUM)) - burned_fuel = air.get_moles(GAS_O2)/TRITIUM_BURN_OXY_FACTOR + var/burned_fuel = max(min(air.get_moles(GAS_TRITIUM), air.get_moles(GAS_O2) / TRITIUM_BURN_OXY_FACTOR), 0) / TRITIUM_BURN_TRIT_FACTOR + if(burned_fuel > 0) air.adjust_moles(GAS_TRITIUM, -burned_fuel) - else - burned_fuel = air.get_moles(GAS_TRITIUM)*TRITIUM_BURN_TRIT_FACTOR - air.adjust_moles(GAS_TRITIUM, -air.get_moles(GAS_TRITIUM)/TRITIUM_BURN_TRIT_FACTOR) - air.adjust_moles(GAS_O2,-air.get_moles(GAS_TRITIUM)) - - if(burned_fuel) + air.adjust_moles(GAS_O2, -burned_fuel / 2) + air.adjust_moles(GAS_H2O, burned_fuel) energy_released += (FIRE_HYDROGEN_ENERGY_RELEASED * burned_fuel) + cached_results["fire"] += burned_fuel if(location && prob(10) && burned_fuel > TRITIUM_MINIMUM_RADIATION_ENERGY) //woah there let's not crash the server radiation_pulse(location, energy_released/TRITIUM_BURN_RADIOACTIVITY_FACTOR) - air.adjust_moles(GAS_H2O, burned_fuel/TRITIUM_BURN_OXY_FACTOR) - - cached_results["fire"] += burned_fuel - if(energy_released > 0) var/new_heat_capacity = air.heat_capacity() if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index 3a2030c9dd50..cc9e94b91567 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -940,7 +940,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 27) /obj/machinery/airalarm/proc/handle_decomp_alarm() if(!COOLDOWN_FINISHED(src, decomp_alarm)) return - playsound(loc, 'goon/sound/machinery/FireAlarm.ogg', 75) + playsound(loc, 'sound/machines/FireAlarm.ogg', 75) COOLDOWN_START(src, decomp_alarm, 1 SECONDS) #undef AALARM_MODE_SCRUBBING diff --git a/code/modules/atmospherics/machinery/components/components_base.dm b/code/modules/atmospherics/machinery/components/components_base.dm index 6797f16012b7..46ecc06af84b 100644 --- a/code/modules/atmospherics/machinery/components/components_base.dm +++ b/code/modules/atmospherics/machinery/components/components_base.dm @@ -75,9 +75,8 @@ // Every node has a parent pipeline and an air associated with it, but we need to accomdate for edge cases like init dir cache building... if(parents[i]) nullifyPipenet(parents[i]) - if(airs[i]) - QDEL_NULL(airs[i]) - ..() + airs[i] = null + return ..() /obj/machinery/atmospherics/components/on_construction() ..() @@ -100,25 +99,22 @@ /obj/machinery/atmospherics/components/proc/nullifyPipenet(datum/pipeline/reference) if(!reference) CRASH("nullifyPipenet(null) called by [type] on [COORD(src)]") - for (var/i in 1 to parents.len) - if (parents[i] == reference) - reference.other_airs -= airs[i] // Disconnects from the pipeline side - parents[i] = null // Disconnects from the machinery side. - + var/i = parents.Find(reference) + reference.other_airs -= airs[i] reference.other_atmosmch -= src - - /** - * We explicitly qdel pipeline when this particular pipeline - * is projected to have no member and cause GC problems. - * We have to do this because components don't qdel pipelines - * while pipes must and will happily wreck and rebuild everything - * again every time they are qdeleted. + /* + We explicitly qdel pipeline when this particular pipeline + is projected to have no member and cause GC problems. + We have to do this because components don't qdel pipelines + while pipes must and will happily wreck and rebuild + everything again every time they are qdeleted. */ - if(!length(reference.other_atmosmch) && !length(reference.members)) if(QDESTROYING(reference)) - CRASH("nullifyPipenet() called on qdeleting [reference]") + parents[i] = null + CRASH("nullifyPipenet() called on qdeleting [reference] indexed on parents\[[i]\]") qdel(reference) + parents[i] = null /obj/machinery/atmospherics/components/returnPipenetAirs(datum/pipeline/reference) var/list/returned_air = list() diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm index e1d9d2412101..29c0ff985c9c 100644 --- a/code/modules/atmospherics/machinery/datum_pipeline.dm +++ b/code/modules/atmospherics/machinery/datum_pipeline.dm @@ -38,23 +38,22 @@ update = air.react(src) /datum/pipeline/proc/build_pipeline(obj/machinery/atmospherics/base) - building = TRUE - var/volume = 0 - if(istype(base, /obj/machinery/atmospherics/pipe)) - var/obj/machinery/atmospherics/pipe/considered_pipe = base - volume = considered_pipe.volume - members += considered_pipe - if(considered_pipe.air_temporary) - air = considered_pipe.air_temporary - considered_pipe.air_temporary = null - else - addMachineryMember(base) - - if(!air) - air = new - - air.set_volume(volume) - SSair.add_to_expansion(src, base) + if(!QDELETED(base)) + building = TRUE + var/volume = 0 + if(istype(base, /obj/machinery/atmospherics/pipe)) + var/obj/machinery/atmospherics/pipe/considered_pipe = base + volume = considered_pipe.volume + members += considered_pipe + if(considered_pipe.air_temporary) + air = considered_pipe.air_temporary + considered_pipe.air_temporary = null + else + addMachineryMember(base) + if(!air) + air = new + air.set_volume(volume) + SSair.add_to_expansion(src, base) ///Has the same effect as build_pipeline(), but this doesn't queue its work, so overrun abounds. It's useful for the pregame /datum/pipeline/proc/build_pipeline_blocking(obj/machinery/atmospherics/base) diff --git a/code/modules/atmospherics/machinery/pipes/pipes.dm b/code/modules/atmospherics/machinery/pipes/pipes.dm index 0064fbe8f403..720d22f6bff2 100644 --- a/code/modules/atmospherics/machinery/pipes/pipes.dm +++ b/code/modules/atmospherics/machinery/pipes/pipes.dm @@ -86,7 +86,6 @@ QDEL_NULL(parent) releaseAirToTurf() - QDEL_NULL(air_temporary) var/turf/T = loc for(var/obj/machinery/meter/meter in T) diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index 0b238294f749..4c6d0ecf498f 100644 --- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -24,7 +24,6 @@ /obj/machinery/portable_atmospherics/Destroy() SSair.stop_processing_machine(src) disconnect() - qdel(air_contents) air_contents = null return ..() diff --git a/code/modules/autowiki/autowiki.dm b/code/modules/autowiki/autowiki.dm new file mode 100644 index 000000000000..815ac0192f19 --- /dev/null +++ b/code/modules/autowiki/autowiki.dm @@ -0,0 +1,49 @@ +/// When the `AUTOWIKI` define is enabled, will generate an output file for tools/autowiki/autowiki.js to consume. +/// Autowiki code intentionally still *exists* even without the define, to ensure developers notice +/// when they break it immediately, rather than until CI or worse, call time. +#if defined(AUTOWIKI) || defined(UNIT_TESTS) +/proc/setup_autowiki() + Master.sleep_offline_after_initializations = FALSE + SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, /proc/generate_autowiki)) + SSticker.start_immediately = TRUE + CONFIG_SET(number/round_end_countdown, 0) + +/proc/generate_autowiki() + var/output = generate_autowiki_output() + rustg_file_write(output, "data/autowiki_edits.txt") + qdel(world) +#endif + +/// Returns a string of the autowiki output file +/proc/generate_autowiki_output() + var/total_output = "" + + for (var/datum/autowiki/autowiki_type as anything in subtypesof(/datum/autowiki)) + var/datum/autowiki/autowiki = new autowiki_type + var/output = autowiki.generate() + + //Generates a page for each key:value pair with the key as the title and the value as the content, and generates an index at the root page + if(islist(output)) + var/root = "" + for(var/title in output) + total_output += json_encode(list( + "title" = "[autowiki.page]/[title]", + "text" = output[title], + )) + "\n" + root += "\n\n" + autowiki.include_template("[autowiki.page]/[title]") + + //Run the next conditional + output = root + + //Generates a single page with the output. + if (istext(output)) + total_output += json_encode(list( + "title" = autowiki.page, + "text" = output, + )) + "\n" + + continue + + CRASH("[autowiki_type] does not generate a proper output!") + + return total_output diff --git a/code/modules/autowiki/pages/base.dm b/code/modules/autowiki/pages/base.dm new file mode 100644 index 000000000000..8e745ace61c2 --- /dev/null +++ b/code/modules/autowiki/pages/base.dm @@ -0,0 +1,54 @@ +/// A representation of an automated wiki page. +/datum/autowiki + /// The page on the wiki to be replaced. + /// This should never be a user-facing page, like "Guide to circuits". + /// It should always be a template that only Autowiki should touch. + /// For example: "Template:Autowiki/CircuitInfo". + var/page + +/// Override and return the new text of the page. +/// This proc can be impure, usually to call `upload_file`. +/datum/autowiki/proc/generate() + SHOULD_CALL_PARENT(FALSE) + CRASH("[type] does not implement generate()!") + +/// Generates an auto formatted template user. +/// Your autowiki should ideally be a *lot* of these. +/// It lets wiki editors edit it much easier later, without having to enter repo. +/// Parameters will be passed in by name. That means your template should expect +/// something that looks like `{{ Autowiki_Circuit|name=Combiner|description=This combines }}` +/// Lists, which must be array-like (no keys), will be turned into a flat list with their key and a number, +/// such that list("food" = list("fruit", "candy")) -> food1=fruit|food2=candy +/datum/autowiki/proc/include_template(name, parameters) + var/template_text = "{{[name]" + + var/list/prepared_parameters = list() + for (var/key in parameters) + var/value = parameters[key] + if (islist(value)) + for (var/index in 1 to length(value)) + prepared_parameters["[key][index]"] = "[value[index]]" + else + prepared_parameters[key] = value + + for (var/parameter_name in prepared_parameters) + template_text += "|[parameter_name]=" + template_text += "[prepared_parameters[parameter_name]]" + + template_text += "}}" + + return template_text + +/// Takes an icon and uploads it to Autowiki-name.png. +/// Do your best to make sure this is unique, so it doesn't clash with other autowiki icons. +/datum/autowiki/proc/upload_icon(icon/icon, name) + // Fuck you + if (IsAdminAdvancedProcCall()) + return + + fcopy(icon, "data/autowiki_files/[name].png") + +/// Escape a parameter such that it can be correctly put inside a wiki output +/datum/autowiki/proc/escape_value(parameter) + // | is a special character in MediaWiki, and must be escaped by...using another template. + return replacetextEx(parameter, "|", "{{!}}") diff --git a/code/modules/autowiki/pages/reagents.dm b/code/modules/autowiki/pages/reagents.dm new file mode 100644 index 000000000000..d10137d07f53 --- /dev/null +++ b/code/modules/autowiki/pages/reagents.dm @@ -0,0 +1,65 @@ +/* +Templates: + +Autowiki/Reaction +{{{chems|ERROR}}} {{#if: {{{temperature|}}} |
Temperature {{{temperature}}} | }} {{#if: {{{container|}}} |
Needs container "{{{container}}}" | }}
Makes {{{volume|1}}}u + +Autowiki/Reagent +{{#if: {{{tooltip|}}} | {{Tooltip|{{{volume}}} part [[#{{{name}}}|{{{name}}}]]|{{{tooltip}}}|FEF6E7}} | {{{volume}}} part {{{name}}} }} + +*/ + +/datum/autowiki/reagents + page = "Template:Autowiki/Content/Reactions" + +/datum/autowiki/reagents/generate() + var/list/output = list() + + var/list/mixable_reagents = list() + var/list/all_reactions = list() + for(var/type in subtypesof(/datum/chemical_reaction)) + var/datum/chemical_reaction/reaction = new type + all_reactions += reaction + mixable_reagents |= reaction.results + + for(var/datum/chemical_reaction/reaction as anything in all_reactions) + var/required_chems = "" + for(var/datum/reagent/required_chem_type as anything in reaction.required_reagents) + var/has_tooltip = (required_chem_type in mixable_reagents) && !(required_chem_type in reaction.results) && !(required_chem_type in GLOB.base_reagents) + required_chems += format_required_reagent(required_chem_type, reaction.required_reagents[required_chem_type], has_tooltip) + + for(var/datum/reagent/required_catalyst_type as anything in reaction.required_catalysts) + var/has_tooltip = (required_catalyst_type in mixable_reagents) && !(required_catalyst_type in reaction.results) && !(required_catalyst_type in GLOB.base_reagents) + required_chems += format_required_reagent(required_catalyst_type, reaction.required_catalysts[required_catalyst_type], has_tooltip, "Catalyst") + + for(var/datum/reagent/result_chem_type as anything in reaction.results) + var/result_name = escape_value(initial(result_chem_type.name)) + var/list/details = list("volume" = reaction.results[result_chem_type], "chems" = required_chems, "name" = result_name) + + if(reaction.required_temp > 0) + details["temperature"] = "[reaction.is_cold_recipe ? "below" : "above"] [reaction.required_temp]K" + + if(reaction.required_container) + details["container"] = "[escape_value(initial(reaction.required_container.name))]" + + var/description = include_template("Autowiki/Reaction", details) + if(result_name in output) + output[result_name] += "
OR
[description]" + else + output[result_name] = description + + return output + +/datum/autowiki/reagents/proc/format_required_reagent(datum/reagent/required_reagent_type, volume, has_tooltip = FALSE, type) + var/list/details = list( + "volume" = volume, + "name" = escape_value(initial(required_reagent_type.name)) + ) + + if(has_tooltip) + details["tooltip"] = include_template("Autowiki/Content/Reactions/[initial(required_reagent_type.name)]") + + if(type) + details["type"] = type + + return include_template("Autowiki/Reagent", details) diff --git a/code/modules/autowiki/pages/ships.dm b/code/modules/autowiki/pages/ships.dm new file mode 100644 index 000000000000..372e9d14a9cb --- /dev/null +++ b/code/modules/autowiki/pages/ships.dm @@ -0,0 +1,96 @@ +/datum/autowiki/ship + page = "Template:Autowiki/Content/Ships" + var/mob/living/carbon/human/dummy/consistent/wiki_dummy = new() + +/datum/autowiki/ship/generate() + var/list/output = list() + + for(var/shipname in SSmapping.shuttle_templates) + var/datum/map_template/shuttle/ship = SSmapping.shuttle_templates[shipname] + + if(!length(ship.job_slots)) + continue + + var/size = "Unknown" + var/longest_dimension = max(ship.width, ship.height) + switch(longest_dimension) + if(0 to 19) + size = "Small" + if(20 to 39) + size = "Medium" + if(40 to 56) + size = "Large" + if(57 to INFINITY) + size = "Undockable" //let's hope this is never the case + + var/ship_name = escape_value(ship.name) + output[ship_name] = include_template("Autowiki/Ship", list( + "name" = ship_name, + "shortname" = escape_value(ship.short_name) || ship_name, + "description" = escape_value(ship.description), + "prefix" = escape_value(ship.prefix), + "tags" = escape_value(ship.tags?.Join(", ")), + "limit" = ship.limit, + "crewCount" = count_crew(ship.job_slots), + "crew" = format_crew_list(ship.job_slots), + "enabled" = ship.enabled ? "Yes" : "No", + "size" = size + )) + + //Other fields: manufacturer, faction, color + + return output + +/datum/autowiki/ship/proc/count_crew(list/crew) + var/output = 0 + + for(var/job in crew) + output += crew[job] + + return output + +/datum/autowiki/ship/proc/format_crew_list(list/crew) + var/output = "" + + var/static/list/job_icon_list = list() + var/mob/living/carbon/human/dummy/wiki_dummy = new(locate(1,1,1)) + wiki_dummy.setDir(SOUTH) + for(var/datum/job/job as anything in crew) + var/filename = SANITIZE_FILENAME(escape_value(format_text(initial(job.outfit.name)))) + + output += include_template("Autowiki/ShipCrewMember", list( + "name" = escape_value(job.name), + "officer" = job.officer ? "Yes" : "No", + "slots" = crew[job], + "icon" = filename + )) + + //Only generate each unique outfit once + if(filename in job_icon_list) + continue + + upload_icon(get_dummy_image(job, filename), filename) + + return output + +/datum/autowiki/ship/proc/get_dummy_image(datum/job/to_equip, filename) + //Limited to just the humanoid-compliant roundstart species, but at least it's not just human. + var/static/list/species = list(/datum/species/ethereal, /datum/species/human, /datum/species/ipc, /datum/species/lizard, /datum/species/moth, /datum/species/spider) + //Length times ascii char of the last letter, good enough(?) #entropy + var/seed = length(filename) * text2ascii(filename, length(filename)) + //Controlled randomisation + wiki_dummy.seeded_randomization(seed) + //Each outfit will always have the same species + wiki_dummy.set_species(species[seed % length(species) + 1]) + //Delete all the old stuff they had + wiki_dummy.wipe_state() + + to_equip.equip(wiki_dummy, TRUE, FALSE) + COMPILE_OVERLAYS(wiki_dummy) + var/icon/wiki_icon = icon(getFlatIcon(wiki_dummy), frame = 1) + + //Make all icons 32x32 for wiki sizing consistency + if(wiki_icon.Height() != 32 || wiki_icon.Width() != 32) + wiki_icon.Crop(1, 1, 32, 32) + + return wiki_icon diff --git a/code/modules/autowiki/pages/techweb.dm b/code/modules/autowiki/pages/techweb.dm new file mode 100644 index 000000000000..0f4b87f9e2a2 --- /dev/null +++ b/code/modules/autowiki/pages/techweb.dm @@ -0,0 +1,64 @@ +/datum/autowiki/techweb + page = "Template:Autowiki/Content/Techweb" + +/datum/autowiki/techweb/generate() + var/output = "" + + for (var/node_id in sortList(SSresearch.techweb_nodes, /proc/sort_research_nodes)) + var/datum/techweb_node/node = SSresearch.techweb_nodes[node_id] + if (!node.show_on_wiki) + continue + + if (!valid_node(node)) + continue + + 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), + )) + + return output + +/datum/autowiki/techweb/proc/valid_node(datum/techweb_node/node) + return !node.experimental + +/datum/autowiki/techweb/proc/generate_designs(list/design_ids) + var/output = "" + + for (var/design_id in design_ids) + var/datum/design/design = SSresearch.techweb_designs[design_id] + output += include_template("Autowiki/TechwebEntryDesign", list( + "name" = escape_value(design.name), + "description" = escape_value(design.get_description()), + )) + + return output + +/datum/autowiki/techweb/proc/generate_prerequisites(list/prereq_ids) + var/output = "" + + for (var/prereq_id in prereq_ids) + var/datum/techweb_node/node = SSresearch.techweb_nodes[prereq_id] + output += include_template("Autowiki/TechwebEntryPrerequisite", list( + "name" = escape_value(node.display_name), + )) + + return output + +/datum/autowiki/techweb/experimental + page = "Template:Autowiki/Content/Techweb/Experimental" + +/datum/autowiki/techweb/experimental/valid_node(datum/techweb_node/node) + return 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] + + var/prereq_difference = node_a.prereq_ids.len - node_b.prereq_ids.len + if (prereq_difference != 0) + return prereq_difference + + return sorttext(node_b.display_name, node_a.display_name) diff --git a/code/modules/autowiki/pages/vending.dm b/code/modules/autowiki/pages/vending.dm new file mode 100644 index 000000000000..aeb8fb42bb2c --- /dev/null +++ b/code/modules/autowiki/pages/vending.dm @@ -0,0 +1,56 @@ +/datum/autowiki/vending + page = "Template:Autowiki/Content/VendingMachines" + +/datum/autowiki/vending/generate() + var/output = "" + + var/list/cached_products = list() + + // `powered()` checks if its in a null loc to say it's not powered. + // So we put it inside, something + var/obj/parent = new + + for (var/vending_type in sortList(subtypesof(/obj/machinery/vending), /proc/cmp_typepaths_asc)) + var/obj/machinery/vending/vending_machine = new vending_type(parent) + vending_machine.use_power = FALSE + vending_machine.update_icon(UPDATE_ICON_STATE) + + // Technically won't match if product amounts change, but this isn't likely + var/products_cache_key = vending_machine.products.Join("-") + "&" + vending_machine.contraband.Join("-") + "&" + vending_machine.premium.Join("-") + + // In the future, this should show all vending machines that have the same products + if (products_cache_key in cached_products) + qdel(vending_machine) + continue + + cached_products += products_cache_key + + var/filename = SANITIZE_FILENAME(escape_value(format_text(vending_machine.name))) + + output += include_template("Autowiki/VendingMachine", list( + "icon" = escape_value(filename), + "name" = escape_value(format_text(vending_machine.name)), + "products" = format_product_list(vending_machine.products), + "contraband" = format_product_list(vending_machine.contraband), + "premium" = format_product_list(vending_machine.premium), + )) + + // It would be cool to make this support gifs someday, but not now + upload_icon(getFlatIcon(vending_machine, no_anim = TRUE), filename) + + qdel(vending_machine) + + qdel(parent) + + return output + +/datum/autowiki/vending/proc/format_product_list(list/product_list) + var/output = "" + + for (var/obj/product_path as anything in product_list) + output += include_template("Autowiki/VendingMachineProduct", list( + "name" = escape_value(capitalize(format_text(initial(product_path.name)))), + "amount" = product_list[product_path], + )) + + return output diff --git a/code/modules/cargo/expressconsole.dm b/code/modules/cargo/expressconsole.dm index 891065f4264a..ac1c4b8bbfdf 100644 --- a/code/modules/cargo/expressconsole.dm +++ b/code/modules/cargo/expressconsole.dm @@ -107,7 +107,7 @@ /obj/machinery/computer/cargo/express/ui_interact(mob/living/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, "OutpostComms", name) + ui = new(user, src, "OutpostCommunications", name) ui.open() if(!charge_account) reconnect() @@ -127,7 +127,7 @@ data["outpostDocked"] = outpost_docked data["points"] = charge_account ? charge_account.account_balance : 0 data["siliconUser"] = user.has_unlimited_silicon_privilege && check_ship_ai_access(user) - data["beaconzone"] = beacon ? get_area(beacon) : ""//where is the beacon located? outputs in the tgui + data["beaconZone"] = beacon ? get_area(beacon) : ""//where is the beacon located? outputs in the tgui data["usingBeacon"] = use_beacon //is the mode set to deliver to the beacon or the cargobay? data["canBeacon"] = !use_beacon || canBeacon //is the mode set to beacon delivery, and is the beacon in a valid location? data["canBuyBeacon"] = charge_account ? (cooldown <= 0 && charge_account.account_balance >= BEACON_COST) : FALSE diff --git a/code/modules/cargo/packs/chemistry.dm b/code/modules/cargo/packs/chemistry.dm new file mode 100644 index 000000000000..2375328b2bc1 --- /dev/null +++ b/code/modules/cargo/packs/chemistry.dm @@ -0,0 +1,131 @@ +/datum/supply_pack/chemistry + group = "Chemistry" + crate_type = /obj/structure/closet/crate/chem + +/* + Tools +*/ + +/datum/supply_pack/chemistry/starter + name = "Chemical Starter Kit Crate" + desc = "Contains thirteen different chemicals, for all the fun experiments you can make." + cost = 1250 // This is intentionally underpriced; the hope is that people will start using ghettochem, upon which time the price can be raised. + contains = list(/obj/item/reagent_containers/glass/bottle/hydrogen, + /obj/item/reagent_containers/glass/bottle/carbon, + /obj/item/reagent_containers/glass/bottle/nitrogen, + /obj/item/reagent_containers/glass/bottle/oxygen, + /obj/item/reagent_containers/glass/bottle/fluorine, + /obj/item/reagent_containers/glass/bottle/phosphorus, + /obj/item/reagent_containers/glass/bottle/silicon, + /obj/item/reagent_containers/glass/bottle/chlorine, + /obj/item/reagent_containers/glass/bottle/radium, + /obj/item/reagent_containers/glass/bottle/sacid, + /obj/item/reagent_containers/glass/bottle/ethanol, + /obj/item/reagent_containers/glass/bottle/potassium, + /obj/item/reagent_containers/glass/bottle/sugar, + /obj/item/reagent_scanner, + /obj/item/reagent_containers/dropper, + /obj/item/storage/box/beakers) + crate_name = "chemical starter crate" + +/datum/supply_pack/chemistry/tools + name = "Chemical Synthesis Crate" + desc = "Contains all the tools you will need for drug making." + cost = 750 + contains = list(/obj/item/reagent_containers/glass/filter, + /obj/item/book/manual/wiki/chemistry, + /obj/item/clothing/glasses/science, + /obj/item/hand_labeler, + /obj/item/stock_parts/capacitor, + /obj/item/stock_parts/scanning_module, + /obj/item/stock_parts/manipulator, + /obj/item/stock_parts/micro_laser) + crate_name = "chemistry tools crate" + +/* + Bulk materials +*/ + +/datum/supply_pack/chemistry/carbon + name = "Bulk Carbon Crate" + desc = "Contains a jug filled with 150u of carbon." + cost = 500 + contains = list(/obj/item/reagent_containers/glass/chem_jug/carbon) + crate_name = "bulk carbon crate" + +/datum/supply_pack/chemistry/oxygen + name = "Bulk Oxygen Crate" + desc = "Contains a jug filled with 150u of oxygen." + cost = 500 + contains = list(/obj/item/reagent_containers/glass/chem_jug/oxygen) + crate_name = "bulk oxygen crate" + +/datum/supply_pack/chemistry/hydrogen + name = "Bulk Hydrogen Crate" + desc = "Contains a jug filled with 150u of Hydrogen." + cost = 500 + contains = list(/obj/item/reagent_containers/glass/chem_jug/hydrogen) + crate_name = "bulk hydrogen crate" + +/datum/supply_pack/chemistry/nitrogen + name = "Bulk Nitrogen Crate" + desc = "Contains a jug filled with 150u of nitrogen." + cost = 625 + contains = list(/obj/item/reagent_containers/glass/chem_jug/nitrogen) + crate_name = "bulk nitrogen crate" + +/datum/supply_pack/chemistry/aluminium + name = "Bulk Aluminium Crate" + desc = "Contains a jug filled with 150u of aluminium." + cost = 625 + contains = list(/obj/item/reagent_containers/glass/chem_jug/aluminium) + crate_name = "bulk aluminium crate" + +/datum/supply_pack/chemistry/copper + name = "Bulk Copper Crate" + desc = "Contains a jug filled with 150u of copper." + cost = 625 + contains = list(/obj/item/reagent_containers/glass/chem_jug/copper) + crate_name = "bulk copper crate" + +/datum/supply_pack/chemistry/bromine + name = "Bulk Bromine Crate" + desc = "Contains a jug filled with 150u of bromine." + cost = 625 + contains = list(/obj/item/reagent_containers/glass/chem_jug/bromine) + crate_name = "bulk bromine crate" + +/datum/supply_pack/chemistry/iodine + name = "Bulk Iodine Crate" + desc = "Contains a jug filled with 150u of iodine." + cost = 750 + contains = list(/obj/item/reagent_containers/glass/chem_jug/iodine) + crate_name = "bulk iodine crate" + +/datum/supply_pack/chemistry/potassium + name = "Bulk Potassium Crate" + desc = "Contains a jug filled with 150u of potassium." + cost = 750 + contains = list(/obj/item/reagent_containers/glass/chem_jug/potassium) + crate_name = "bulk potassium crate" + +/datum/supply_pack/chemistry/sulfur + name = "Bulk Sulfur Crate" + desc = "Contains a jug filled with 150u of sulfur." + cost = 750 + contains = list(/obj/item/reagent_containers/glass/chem_jug/sulfur) + crate_name = "bulk sulfur crate" + +/datum/supply_pack/chemistry/chlorine + name = "Bulk Chlorine Crate" + desc = "Contains a jug filled with 150u of chlorine." + cost = 750 + contains = list(/obj/item/reagent_containers/glass/chem_jug/chlorine) + crate_name = "bulk chlorine crate" + +/datum/supply_pack/chemistry/radium + name = "Bulk Radium Crate" + desc = "Contains a jug filled with 150u of radium." + cost = 1000 + contains = list(/obj/item/reagent_containers/glass/chem_jug/radium) + crate_name = "bulk radium crate" diff --git a/code/modules/cargo/packs/medical.dm b/code/modules/cargo/packs/medical.dm index 3273b28e153b..e5b72b4b5c4f 100644 --- a/code/modules/cargo/packs/medical.dm +++ b/code/modules/cargo/packs/medical.dm @@ -89,28 +89,6 @@ crate_name = "blood freezer" crate_type = /obj/structure/closet/crate/freezer -/datum/supply_pack/medical/chemical - name = "Chemical Starter Kit Crate" - desc = "Contains thirteen different chemicals, for all the fun experiments you can make." - cost = 1000 // This is intentionally underpriced; the hope is that people will start using ghettochem, upon which time the price can be raised. - contains = list(/obj/item/reagent_containers/glass/bottle/hydrogen, - /obj/item/reagent_containers/glass/bottle/carbon, - /obj/item/reagent_containers/glass/bottle/nitrogen, - /obj/item/reagent_containers/glass/bottle/oxygen, - /obj/item/reagent_containers/glass/bottle/fluorine, - /obj/item/reagent_containers/glass/bottle/phosphorus, - /obj/item/reagent_containers/glass/bottle/silicon, - /obj/item/reagent_containers/glass/bottle/chlorine, - /obj/item/reagent_containers/glass/bottle/radium, - /obj/item/reagent_containers/glass/bottle/sacid, - /obj/item/reagent_containers/glass/bottle/ethanol, - /obj/item/reagent_containers/glass/bottle/potassium, - /obj/item/reagent_containers/glass/bottle/sugar, - /obj/item/clothing/glasses/science, - /obj/item/reagent_containers/dropper, - /obj/item/storage/box/beakers) - crate_name = "chemical crate" - /datum/supply_pack/medical/surplus name = "Medical Surplus Crate" desc = "Contains an assortment of medical supplies haphazardly pulled from storage. German doctor not included." diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 90fb4fa0972c..5c5553df2755 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -220,7 +220,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( // Instantiate tgui panel tgui_panel = new(src) - GLOB.ahelp_tickets.ClientLogin(src) + GLOB.ahelp_tickets.client_login(src) GLOB.interviews.client_login(src) var/connecting_admin = FALSE //because de-admined admins connecting should be treated like admins. //Admin Authorisation @@ -489,7 +489,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( GLOB.clients -= src GLOB.directory -= ckey log_access("Logout: [key_name(src)]") - GLOB.ahelp_tickets.ClientLogout(src) + GLOB.ahelp_tickets.client_logout(src) GLOB.interviews.client_logout(src) SSserver_maint.UpdateHubStatus() if(credits) @@ -890,11 +890,9 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( return if (prefs.hotkeys) - // If hotkey mode is enabled, then clicking the map will automatically - // unfocus the text bar. This removes the red color from the text bar - // so that the visual focus indicator matches reality. - winset(src, null, "input.background-color=[COLOR_INPUT_DISABLED]") - + winset(src, null, "input.focus=false") + else + winset(src, null, "input.focus=true") ..() /client/proc/add_verbs_from_config() diff --git a/code/modules/client/loadout/loadout_general.dm b/code/modules/client/loadout/loadout_general.dm index 1e6aae68fb72..671c0efe9602 100644 --- a/code/modules/client/loadout/loadout_general.dm +++ b/code/modules/client/loadout/loadout_general.dm @@ -163,8 +163,3 @@ /datum/gear/surgical_mask display_name = "surgical mask" path = /obj/item/clothing/mask/surgical - -/datum/gear/maidbox - display_name = "maid outfit bundle" - path = /obj/item/storage/box/maid - description = "Contains a four-piece maid outfit inside a single box." diff --git a/code/modules/client/loadout/loadout_suit.dm b/code/modules/client/loadout/loadout_suit.dm index 2daf575a12ec..e2800a87e9e1 100644 --- a/code/modules/client/loadout/loadout_suit.dm +++ b/code/modules/client/loadout/loadout_suit.dm @@ -43,14 +43,6 @@ display_name = "goth jacket" path = /obj/item/clothing/suit/gothcoat -/datum/gear/suit/jacket/bronze - display_name = "bronze suit" - path = /obj/item/clothing/suit/bronze - -/datum/gear/suit/jacket/yakuza - display_name = "yakuza suit" - path = /obj/item/clothing/suit/yakuza - /datum/gear/suit/jacket/burgundy display_name = "suit jacket, burgundy" path = /obj/item/clothing/suit/toggle/lawyer/burgundy @@ -63,7 +55,23 @@ display_name = "suit jacket, charcoal" path = /obj/item/clothing/suit/toggle/lawyer/charcoal -/datum/gear/suit/jacket/navy +/datum/gear/suit/jacket/navy //why is this blank? i dont know + +/datum/gear/suit/jacket/hoodie_black + display_name = "hoodie, black" + path = /obj/item/clothing/suit/hooded/hoodie/black + +/datum/gear/suit/jacket/hoodie_red + display_name = "hoodie, red" + path = /obj/item/clothing/suit/hooded/hoodie/red + +/datum/gear/suit/jacket/hoodie_blue + display_name = "hoodie, blue" + path = /obj/item/clothing/suit/hooded/hoodie/blue + +/datum/gear/suit/jacket/hoodie_gray + display_name = "hoodie, gray" + path = /obj/item/clothing/suit/hooded/hoodie/gray /datum/gear/suit/jacket/highvis display_name = "industrial jacket" diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index e209e180d518..82cf7eb653de 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -5,7 +5,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) //doohickeys for savefiles var/path var/default_slot = 1 //Holder so it doesn't default to slot 1, rather the last one used - var/max_save_slots = 10 + var/max_save_slots = 20 //non-preference stuff var/muted = 0 @@ -68,23 +68,26 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/real_name //our character's name var/gender = MALE //gender of character (well duh) var/age = 30 //age of character - var/underwear = "Nude" //underwear type - var/underwear_color = "000" //underwear color - var/undershirt = "Nude" //undershirt type - var/socks = "Nude" //socks type - var/backpack = DBACKPACK //backpack type + var/underwear = "Nude" //Type of underwear + var/underwear_color = "000" //Greyscale color of underwear + var/undershirt = "Nude" //Type of undershirt + var/undershirt_color = "000" //Greyscale color of undershirt + var/socks = "Nude" //Type of socks + var/socks_color = "000" //Greyscale color of socks + var/backpack = DBACKPACK //Type of backpack var/jumpsuit_style = PREF_SUIT //suit/skirt var/exowear = PREF_EXOWEAR //exowear var/hairstyle = "Bald" //Hair type var/hair_color = "000" //Hair color - var/facial_hairstyle = "Shaved" //Face hair type + var/facial_hairstyle = "Shaved" //Face hair type var/facial_hair_color = "000" //Facial hair color var/skin_tone = "caucasian1" //Skin color var/eye_color = "000" //Eye color var/datum/species/pref_species = new /datum/species/human() //Mutant race - var/species_looking_at = "human" //used as a helper to keep track of in the species select thingy + var/species_looking_at = "human" //used as a helper to keep track of in the species select thingy var/list/features = list( "mcolor" = "FFF", + "mcolor2" = "FFF", "grad_style" = "None", "grad_color" = "FFF", "ethcolor" = "9c3030", @@ -119,12 +122,37 @@ GLOBAL_LIST_EMPTY(preferences_datums) "flavor_text" = "", "body_size" = "Normal" ) - var/list/randomise = list(RANDOM_UNDERWEAR = TRUE, RANDOM_UNDERWEAR_COLOR = TRUE, RANDOM_UNDERSHIRT = TRUE, RANDOM_SOCKS = TRUE, RANDOM_BACKPACK = TRUE, RANDOM_JUMPSUIT_STYLE = TRUE, RANDOM_EXOWEAR_STYLE = TRUE, RANDOM_HAIRSTYLE = TRUE, RANDOM_HAIR_COLOR = TRUE, RANDOM_FACIAL_HAIRSTYLE = TRUE, RANDOM_FACIAL_HAIR_COLOR = TRUE, RANDOM_SKIN_TONE = TRUE, RANDOM_EYE_COLOR = TRUE) - var/list/friendlyGenders = list("Male" = "male", "Female" = "female", "Other" = "plural") - var/list/prosthetic_limbs = list(BODY_ZONE_L_ARM = PROSTHETIC_NORMAL, BODY_ZONE_R_ARM = PROSTHETIC_NORMAL, BODY_ZONE_L_LEG = PROSTHETIC_NORMAL, BODY_ZONE_R_LEG = PROSTHETIC_NORMAL) + var/list/randomise = list( + RANDOM_UNDERWEAR = TRUE, + RANDOM_UNDERWEAR_COLOR = TRUE, + RANDOM_UNDERSHIRT = TRUE, + RANDOM_UNDERSHIRT_COLOR = TRUE, + RANDOM_SOCKS = TRUE, + RANDOM_SOCKS_COLOR = TRUE, + RANDOM_BACKPACK = TRUE, + RANDOM_JUMPSUIT_STYLE = TRUE, + RANDOM_EXOWEAR_STYLE = TRUE, + RANDOM_HAIRSTYLE = TRUE, + RANDOM_HAIR_COLOR = TRUE, + RANDOM_FACIAL_HAIRSTYLE = TRUE, + RANDOM_FACIAL_HAIR_COLOR = TRUE, + RANDOM_SKIN_TONE = TRUE, + RANDOM_EYE_COLOR = TRUE, + ) + var/list/friendlyGenders = list( + "Male" = "male", + "Female" = "female", + "Other" = "plural" + ) + var/list/prosthetic_limbs = list( + BODY_ZONE_L_ARM = PROSTHETIC_NORMAL, + BODY_ZONE_R_ARM = PROSTHETIC_NORMAL, + BODY_ZONE_L_LEG = PROSTHETIC_NORMAL, + BODY_ZONE_R_LEG = PROSTHETIC_NORMAL + ) + var/fbp = FALSE var/phobia = "spiders" var/list/alt_titles_preferences = list() - var/list/custom_names = list() var/preferred_ai_core_display = "Blue" var/prefered_security_department = SEC_DEPT_RANDOM @@ -195,7 +223,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) load_path(C.ckey) unlock_content = C.IsByondMember() if(unlock_content) - max_save_slots = 15 + max_save_slots = 30 var/loaded_preferences_successfully = load_preferences() if(loaded_preferences_successfully) if(load_character()) @@ -361,24 +389,27 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Always Random Species: [(randomise[RANDOM_SPECIES]) ? "Yes" : "No"]
" if(!(NO_UNDERWEAR in pref_species.species_traits)) - dat += "Underwear:
[underwear]" - dat += "[(randomise[RANDOM_UNDERWEAR]) ? "Lock" : "Unlock"]" + dat += "Underwear:
[underwear]" + dat += "[(randomise[RANDOM_UNDERWEAR]) ? "Lock" : "Unlock"]
" - dat += "
Underwear Color:
    Change" - dat += "[(randomise[RANDOM_UNDERWEAR_COLOR]) ? "Lock" : "Unlock"]" + dat += "Underwear Color:
    Change" + dat += "[(randomise[RANDOM_UNDERWEAR_COLOR]) ? "Lock" : "Unlock"]
" - dat += "
Undershirt:
[undershirt]" - dat += "[(randomise[RANDOM_UNDERSHIRT]) ? "Lock" : "Unlock"]" + dat += "Undershirt:
[undershirt]" + dat += "[(randomise[RANDOM_UNDERSHIRT]) ? "Lock" : "Unlock"]
" + dat += "Undershirt Color:
    Change" + dat += "[(randomise[RANDOM_UNDERSHIRT_COLOR]) ? "Lock" : "Unlock"]
" - dat += "
Socks:
[socks]" - dat += "[(randomise[RANDOM_SOCKS]) ? "Lock" : "Unlock"]
" + dat += "Socks:
[socks]" + dat += "[(randomise[RANDOM_SOCKS]) ? "Lock" : "Unlock"]
" + dat += "Socks Color:
    Change" + dat += "[(randomise[RANDOM_SOCKS_COLOR]) ? "Lock" : "Unlock"]" - var/use_skintones = pref_species.use_skintones - if(use_skintones) + dat += APPEARANCE_CATEGORY_COLUMN - dat += APPEARANCE_CATEGORY_COLUMN + if(pref_species.use_skintones) dat += "

Skin Tone

" @@ -386,23 +417,14 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "[(randomise[RANDOM_SKIN_TONE]) ? "Lock" : "Unlock"]" dat += "
" - var/mutant_colors - if((MUTCOLORS in pref_species.species_traits) || (MUTCOLORS_PARTSONLY in pref_species.species_traits)) + // Everyone gets mutant colors now. + dat += "

Mutant Colors

" - if(!use_skintones) - dat += APPEARANCE_CATEGORY_COLUMN - - dat += "

Mutant Color

" - - dat += "    Change
" - - mutant_colors = TRUE + dat += "    Change
" + dat += "    Change
" if(istype(pref_species, /datum/species/ethereal)) //not the best thing to do tbf but I dont know whats better. - if(!use_skintones) - dat += APPEARANCE_CATEGORY_COLUMN - dat += "

Ethereal Color

" dat += "    Change
" @@ -410,16 +432,13 @@ GLOBAL_LIST_EMPTY(preferences_datums) if((EYECOLOR in pref_species.species_traits) && !(NOEYESPRITES in pref_species.species_traits)) - if(!use_skintones && !mutant_colors) - dat += APPEARANCE_CATEGORY_COLUMN - dat += "

Eye Color

" dat += "    Change" dat += "[(randomise[RANDOM_EYE_COLOR]) ? "Lock" : "Unlock"]" dat += "
" - else if(use_skintones || mutant_colors) - dat += "" + + dat += "" if(HAIR in pref_species.species_traits) @@ -488,6 +507,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Horns

" dat += "[features["horns"]]
" + dat += "    Change
" + dat += "[(randomise[RANDOM_HAIR_COLOR]) ? "Lock" : "Unlock"]
" mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) @@ -709,8 +730,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Body Feathers

" dat += "[features["kepori_body_feathers"]]
" - dat += "    Change
" - dat += "[(randomise[RANDOM_FACIAL_HAIR_COLOR]) ? "Lock" : "Unlock"]
" + dat += "    Change
" mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) @@ -723,8 +743,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Tail Feathers

" dat += "[features["kepori_tail_feathers"]]
" - dat += "    Change
" - dat += "[(randomise[RANDOM_FACIAL_HAIR_COLOR]) ? "Lock" : "Unlock"]
" + dat += "    Change
" mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) @@ -849,14 +868,17 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "" dat += "

Prosthetic Limbs

" - dat += "Random Prosthetic: [(randomise[RANDOM_PROSTHETIC]) ? "Yes" : "No"]
" + dat += "Full Body Prosthesis: [fbp ? "Yes" : "No"]
" + + if(!fbp) + dat += "Random Prosthetic: [(randomise[RANDOM_PROSTHETIC]) ? "Yes" : "No"]
" - dat += "" - for(var/index in prosthetic_limbs) - var/bodypart_name = parse_zone(index) - dat += "" - dat += "" - dat += "
[bodypart_name]:[prosthetic_limbs[index]]

" + dat += "" + for(var/index in prosthetic_limbs) + var/bodypart_name = parse_zone(index) + dat += "" + dat += "" + dat += "
[bodypart_name]:[prosthetic_limbs[index]]

" if(2) //Loadout if(path) @@ -1451,6 +1473,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(href_list["preference"] == "species") switch(href_list["task"]) + if("random") + random_species() + ShowChoices(user) + return TRUE if("close") user << browse(null, "window=mob_species") ShowChoices(user) @@ -1461,7 +1487,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) pref_species = new newtype() //Now that we changed our species, we must verify that the mutant colour is still allowed. var/temp_hsv = RGBtoHSV(features["mcolor"]) - if(features["mcolor"] == "#000" || (!(MUTCOLORS_PARTSONLY in pref_species.species_traits) && ReadHSV(temp_hsv)[3] < ReadHSV("#191919")[3])) + if(text2num(features["mcolor"], 16) == 0 || (!(MUTCOLORS_PARTSONLY in pref_species.species_traits) && ReadHSV(temp_hsv)[3] < ReadHSV("#191919")[3])) features["mcolor"] = pref_species.default_color user << browse(null, "window=speciespick") ShowChoices(user) @@ -1472,7 +1498,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) species_looking_at = href_list["newspecies"] ShowSpeciesChoices(user) - return 1 + return TRUE if(href_list["preference"] == "trait") switch(href_list["task"]) @@ -1548,27 +1574,29 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("age") age = rand(pref_species.species_age_min, pref_species.species_age_max) if("hair") - hair_color = random_short_color() + hair_color = random_color_natural() if("hairstyle") hairstyle = random_hairstyle(gender) if("facial") - facial_hair_color = random_short_color() + facial_hair_color = random_color_natural() if("facial_hairstyle") facial_hairstyle = random_facial_hairstyle(gender) if("underwear") underwear = random_underwear(gender) if("underwear_color") - underwear_color = random_short_color() + underwear_color = random_color() if("undershirt") undershirt = random_undershirt(gender) + if("undershirt_color") + undershirt_color = random_short_color() if("socks") socks = random_socks() + if("socks_color") + socks_color = random_short_color() if("eyes") eye_color = random_eye_color() if("s_tone") skin_tone = random_skin_tone() - if("species") - random_species() if("bag") backpack = pick(GLOB.backpacklist) if("suit") @@ -1717,12 +1745,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("underwear") var/new_underwear - if(gender == MALE) - new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in GLOB.underwear_m - else if(gender == FEMALE) - new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in GLOB.underwear_f - else - new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in GLOB.underwear_list + new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in GLOB.underwear_list if(new_underwear) underwear = new_underwear @@ -1733,21 +1756,26 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("undershirt") var/new_undershirt - if(gender == MALE) - new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in GLOB.undershirt_m - else if(gender == FEMALE) - new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in GLOB.undershirt_f - else - new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in GLOB.undershirt_list + new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in GLOB.undershirt_list if(new_undershirt) undershirt = new_undershirt + if("undershirt_color") + var/new_undershirt_color = input(user, "Choose your character's underwear color:", "Character Preference","#"+undershirt_color) as color|null + if(new_undershirt_color) + undershirt_color = sanitize_hexcolor(new_undershirt_color) + if("socks") var/new_socks new_socks = input(user, "Choose your character's socks:", "Character Preference") as null|anything in GLOB.socks_list if(new_socks) socks = new_socks + if("socks_color") + var/new_socks_color = input(user, "Choose your character's underwear color:", "Character Preference","#"+socks_color) as color|null + if(new_socks_color) + socks_color = sanitize_hexcolor(new_socks_color) + if("eyes") var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference","#"+eye_color) as color|null if(new_eyes) @@ -1759,7 +1787,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) features["body_size"] = new_size if("mutant_color") - var/new_mutantcolor = input(user, "Choose your character's alien/mutant color:", "Character Preference","#"+features["mcolor"]) as color|null + var/new_mutantcolor = input(user, "Choose your character's primary alien/mutant color:", "Character Preference","#" + features["mcolor"]) as color|null if(new_mutantcolor) var/temp_hsv = RGBtoHSV(new_mutantcolor) if(new_mutantcolor == "#000000") @@ -1769,12 +1797,23 @@ GLOBAL_LIST_EMPTY(preferences_datums) else to_chat(user, "Invalid color. Your color is not bright enough.") + if("mutant_color_2") + var/new_mutantcolor = input(user, "Choose your character's secondary alien/mutant color:", "Character Preference","#" + features["mcolor2"]) as color|null + if(new_mutantcolor) + var/temp_hsv = RGBtoHSV(new_mutantcolor) + if(new_mutantcolor == "#000000") + features["mcolor2"] = pref_species.default_color + else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#191919")[3]) // mutantcolors must be bright, but only if they affect the skin + features["mcolor2"] = sanitize_hexcolor(new_mutantcolor) + else + to_chat(user, "Invalid color. Your color is not bright enough.") + if("color_ethereal") var/new_etherealcolor = input(user, "Choose your elzuosa color:", "Character Preference","#"+features["ethcolor"]) as color|null if(new_etherealcolor) var/temp_hsv = RGBtoHSV(new_etherealcolor) if(ReadHSV(temp_hsv)[3] >= ReadHSV("#505050")[3]) // elzu colors should be bright - features["ethcolor"] = sanitize_hexcolor(new_etherealcolor, 6) + features["ethcolor"] = sanitize_hexcolor(new_etherealcolor) else to_chat(user, "Invalid color. Your color is not bright enough.") @@ -2045,6 +2084,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) facial_hairstyle = random_facial_hairstyle(gender) hairstyle = random_hairstyle(gender) + if("fbp") + fbp = !fbp + if("limbs") if(href_list["customize_limb"]) var/limb = href_list["customize_limb"] @@ -2360,7 +2402,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) character.underwear = underwear character.underwear_color = underwear_color character.undershirt = undershirt + character.undershirt_color = undershirt_color character.socks = socks + character.socks_color = socks_color character.backpack = backpack @@ -2368,6 +2412,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) character.exowear = exowear + character.fbp = fbp + character.flavor_text = features["flavor_text"] //Let's update their flavor_text at least initially if(loadout) //I have been told not to do this because it's too taxing on performance, but hey, I did it anyways! //I hate you old me //don't be mean @@ -2386,36 +2432,28 @@ GLOBAL_LIST_EMPTY(preferences_datums) //prosthetics work for vox and kepori and update just fine for everyone character.dna.features = features.Copy() - character.set_species(chosen_species, icon_update = FALSE, pref_load = TRUE) - - for(var/pros_limbs in prosthetic_limbs) - var/obj/item/bodypart/old_part = character.get_bodypart(pros_limbs) - if(old_part) - icon_updates = TRUE - switch(prosthetic_limbs[pros_limbs]) - if(PROSTHETIC_NORMAL) - if(old_part) - old_part.drop_limb(TRUE) - qdel(old_part) - character.regenerate_limb(pros_limbs) - if(PROSTHETIC_AMPUTATED) - if(old_part) - old_part.drop_limb(TRUE) - qdel(old_part) - if(PROSTHETIC_ROBOTIC) - var/obj/item/bodypart/prosthetic - var/typepath - if(character.dna.species.unique_prosthesis) // Checks for if the species has a unique limb type, otherwise defaults to human - typepath = text2path("/obj/item/bodypart/[pros_limbs]/robot/surplus/[character.dna.species.id]") - else - typepath = text2path("/obj/item/bodypart/[pros_limbs]/robot/surplus") - if(!ispath(typepath)) - to_chat(character, "Problem initializing [pros_limbs] prosthetic for species [character.dna.species], it will be a normal limb. Make a bug report on github!") - continue - prosthetic = new typepath(character) - prosthetic.replace_limb(character, special = TRUE) - if(old_part) - qdel(old_part) + character.set_species(chosen_species, icon_update = FALSE, pref_load = TRUE, robotic = fbp) + + if(!fbp) + for(var/pros_limb in prosthetic_limbs) + var/obj/item/bodypart/old_part = character.get_bodypart(pros_limb) + if(old_part) + icon_updates = TRUE + switch(prosthetic_limbs[pros_limb]) + if(PROSTHETIC_NORMAL) + if(old_part) + old_part.drop_limb(TRUE) + qdel(old_part) + character.regenerate_limb(pros_limb) + if(PROSTHETIC_AMPUTATED) + if(old_part) + old_part.drop_limb(TRUE) + qdel(old_part) + if(PROSTHETIC_ROBOTIC) + if(old_part) + old_part.drop_limb(TRUE) + qdel(old_part) + character.regenerate_limb(pros_limb, robotic = TRUE) if(pref_species.id == "ipc") // If triggered, vox and kepori arms do not spawn in but ipcs sprites break without it as the code for setting the right prosthetics for them is in set_species(). character.set_species(chosen_species, icon_update = FALSE, pref_load = TRUE) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 7ee41146cffd..07458bace6aa 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -234,9 +234,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //Sanitize - asaycolor = sanitize_ooccolor(sanitize_hexcolor(asaycolor, 6, 1, initial(asaycolor))) - ooccolor = sanitize_ooccolor(sanitize_hexcolor(ooccolor, 6, 1, initial(ooccolor))) - screentip_color = sanitize_ooccolor(sanitize_hexcolor(screentip_color, 6, 1, initial(screentip_color))) + asaycolor = sanitize_ooccolor(sanitize_hexcolor(asaycolor, 6, TRUE, initial(asaycolor))) + ooccolor = sanitize_ooccolor(sanitize_hexcolor(ooccolor, 6, TRUE, initial(ooccolor))) + screentip_color = sanitize_ooccolor(sanitize_hexcolor(screentip_color, 6, TRUE, initial(screentip_color))) lastchangelog = sanitize_text(lastchangelog, initial(lastchangelog)) UI_style = sanitize_inlist(UI_style, GLOB.available_ui_styles, GLOB.available_ui_styles[1]) hotkeys = sanitize_integer(hotkeys, FALSE, TRUE, initial(hotkeys)) @@ -267,7 +267,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car be_special = SANITIZE_LIST(be_special) show_credits = sanitize_integer(show_credits, 0, 1, initial(show_credits)) pda_style = sanitize_inlist(pda_style, GLOB.pda_styles, initial(pda_style)) - pda_color = sanitize_hexcolor(pda_color, 6, 1, initial(pda_color)) + pda_color = sanitize_hexcolor(pda_color, 6, TRUE, initial(pda_color)) key_bindings = sanitize_keybindings(key_bindings) favorite_outfits = SANITIZE_LIST(favorite_outfits) equipped_gear = sanitize_each_inlist(equipped_gear, GLOB.gear_datums) @@ -395,7 +395,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car READ_FILE(S["underwear"], underwear) READ_FILE(S["underwear_color"], underwear_color) READ_FILE(S["undershirt"], undershirt) + READ_FILE(S["undershirt_color"], undershirt_color) READ_FILE(S["socks"], socks) + READ_FILE(S["socks_color"], socks_color) READ_FILE(S["backpack"], backpack) READ_FILE(S["jumpsuit_style"], jumpsuit_style) READ_FILE(S["uplink_loc"], uplink_spawn_loc) @@ -405,6 +407,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car READ_FILE(S["prosthetic_limbs"], prosthetic_limbs) prosthetic_limbs ||= list(BODY_ZONE_L_ARM = PROSTHETIC_NORMAL, BODY_ZONE_R_ARM = PROSTHETIC_NORMAL, BODY_ZONE_L_LEG = PROSTHETIC_NORMAL, BODY_ZONE_R_LEG = PROSTHETIC_NORMAL) READ_FILE(S["feature_mcolor"], features["mcolor"]) + READ_FILE(S["feature_mcolor2"], features["mcolor2"]) READ_FILE(S["feature_ethcolor"], features["ethcolor"]) READ_FILE(S["feature_lizard_tail"], features["tail_lizard"]) READ_FILE(S["feature_lizard_snout"], features["snout"]) @@ -445,6 +448,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car READ_FILE(S["feature_human_tail"], features["tail_human"]) READ_FILE(S["feature_human_ears"], features["ears"]) + READ_FILE(S["fbp"], fbp) + //Custom names for(var/custom_name_id in GLOB.preferences_custom_names) var/savefile_slot_name = custom_name_id + "_name" //TODO remove this @@ -478,45 +483,43 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car if(!custom_names[custom_name_id]) custom_names[custom_name_id] = get_default_name(custom_name_id) - if(!features["mcolor"] || features["mcolor"] == "#000") - features["mcolor"] = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F") + if(!features["mcolor"] || text2num(features["mcolor"], 16) == 0) + features["mcolor"] = random_color() - if(!features["ethcolor"] || features["ethcolor"] == "#000") + if(!features["ethcolor"] || text2num(features["ethcolor"], 16) == 0) features["ethcolor"] = GLOB.color_list_ethereal[pick(GLOB.color_list_ethereal)] randomise = SANITIZE_LIST(randomise) if(gender == MALE) - hairstyle = sanitize_inlist(hairstyle, GLOB.hairstyles_male_list) - facial_hairstyle = sanitize_inlist(facial_hairstyle, GLOB.facial_hairstyles_male_list) - underwear = sanitize_inlist(underwear, GLOB.underwear_m) - undershirt = sanitize_inlist(undershirt, GLOB.undershirt_m) + hairstyle = sanitize_inlist(hairstyle, GLOB.hairstyles_male_list) + facial_hairstyle = sanitize_inlist(facial_hairstyle, GLOB.facial_hairstyles_male_list) else if(gender == FEMALE) - hairstyle = sanitize_inlist(hairstyle, GLOB.hairstyles_female_list) - facial_hairstyle = sanitize_inlist(facial_hairstyle, GLOB.facial_hairstyles_female_list) - underwear = sanitize_inlist(underwear, GLOB.underwear_f) - undershirt = sanitize_inlist(undershirt, GLOB.undershirt_f) + hairstyle = sanitize_inlist(hairstyle, GLOB.hairstyles_female_list) + facial_hairstyle = sanitize_inlist(facial_hairstyle, GLOB.facial_hairstyles_female_list) else - hairstyle = sanitize_inlist(hairstyle, GLOB.hairstyles_list) - facial_hairstyle = sanitize_inlist(facial_hairstyle, GLOB.facial_hairstyles_list) - underwear = sanitize_inlist(underwear, GLOB.underwear_list) - undershirt = sanitize_inlist(undershirt, GLOB.undershirt_list) + hairstyle = sanitize_inlist(hairstyle, GLOB.hairstyles_list) + facial_hairstyle = sanitize_inlist(facial_hairstyle, GLOB.facial_hairstyles_list) + underwear = sanitize_inlist(underwear, GLOB.underwear_list) + undershirt = sanitize_inlist(undershirt, GLOB.undershirt_list) socks = sanitize_inlist(socks, GLOB.socks_list) age = sanitize_integer(age, pref_species.species_age_min, pref_species.species_age_max, initial(age)) - hair_color = sanitize_hexcolor(hair_color, 3, 0) - facial_hair_color = sanitize_hexcolor(facial_hair_color, 3, 0) - underwear_color = sanitize_hexcolor(underwear_color, 3, 0) - eye_color = sanitize_hexcolor(eye_color, 3, 0) + hair_color = sanitize_hexcolor(hair_color) + facial_hair_color = sanitize_hexcolor(facial_hair_color) + underwear_color = sanitize_hexcolor(underwear_color) + eye_color = sanitize_hexcolor(eye_color) skin_tone = sanitize_inlist(skin_tone, GLOB.skin_tones) backpack = sanitize_inlist(backpack, GLOB.backpacklist, initial(backpack)) jumpsuit_style = sanitize_inlist(jumpsuit_style, GLOB.jumpsuitlist, initial(jumpsuit_style)) exowear = sanitize_inlist(exowear, GLOB.exowearlist, initial(exowear)) uplink_spawn_loc = sanitize_inlist(uplink_spawn_loc, GLOB.uplink_spawn_loc_list, initial(uplink_spawn_loc)) + fbp = sanitize_integer(fbp, FALSE, TRUE, FALSE) features["grad_style"] = sanitize_inlist(features["grad_style"], GLOB.hair_gradients_list) - features["grad_color"] = sanitize_hexcolor(features["grad_color"], 3, 0) + features["grad_color"] = sanitize_hexcolor(features["grad_color"]) features["body_size"] = sanitize_inlist(features["body_size"], GLOB.body_sizes, "Normal") - features["mcolor"] = sanitize_hexcolor(features["mcolor"], 3, 0) + features["mcolor"] = sanitize_hexcolor(features["mcolor"]) + features["mcolor2"] = sanitize_hexcolor(features["mcolor2"]) features["ethcolor"] = copytext_char(features["ethcolor"], 1, 7) features["tail_lizard"] = sanitize_inlist(features["tail_lizard"], GLOB.tails_list_lizard) features["tail_human"] = sanitize_inlist(features["tail_human"], GLOB.tails_list_human, "None") @@ -548,6 +551,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car features["flavor_text"] = sanitize_text(features["flavor_text"], initial(features["flavor_text"])) all_quirks = SANITIZE_LIST(all_quirks) + //Make sure all quirks are compatible check_quirk_compatibility() @@ -561,50 +565,50 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car return FALSE S.cd = "/character[default_slot]" - WRITE_FILE(S["version"] , SAVEFILE_VERSION_MAX) //load_character will sanitize any bad data, so assume up-to-date.) + WRITE_FILE(S["version"] , SAVEFILE_VERSION_MAX) //load_character will sanitize any bad data, so assume up-to-date.) //Character - WRITE_FILE(S["real_name"] , real_name) - WRITE_FILE(S["gender"] , gender) - WRITE_FILE(S["age"] , age) - WRITE_FILE(S["hair_color"] , hair_color) + WRITE_FILE(S["real_name"] , real_name) + WRITE_FILE(S["gender"] , gender) + WRITE_FILE(S["age"] , age) + WRITE_FILE(S["hair_color"] , hair_color) WRITE_FILE(S["facial_hair_color"] , facial_hair_color) - WRITE_FILE(S["feature_grad_color"] , features["grad_color"]) - WRITE_FILE(S["eye_color"] , eye_color) - WRITE_FILE(S["skin_tone"] , skin_tone) - WRITE_FILE(S["hairstyle_name"] , hairstyle) + WRITE_FILE(S["feature_grad_color"] , features["grad_color"]) + WRITE_FILE(S["eye_color"] , eye_color) + WRITE_FILE(S["skin_tone"] , skin_tone) + WRITE_FILE(S["hairstyle_name"] , hairstyle) WRITE_FILE(S["facial_style_name"] , facial_hairstyle) - WRITE_FILE(S["feature_grad_style"] , features["grad_style"]) - WRITE_FILE(S["underwear"] , underwear) - WRITE_FILE(S["underwear_color"] , underwear_color) - WRITE_FILE(S["undershirt"] , undershirt) - WRITE_FILE(S["socks"] , socks) - WRITE_FILE(S["backpack"] , backpack) - WRITE_FILE(S["uplink_loc"] , uplink_spawn_loc) - WRITE_FILE(S["randomise"] , randomise) - WRITE_FILE(S["species"] , pref_species.id) - WRITE_FILE(S["phobia"], phobia) - WRITE_FILE(S["body_size"] , features["body_size"]) - WRITE_FILE(S["prosthetic_limbs"], prosthetic_limbs) - WRITE_FILE(S["feature_mcolor"] , features["mcolor"]) - WRITE_FILE(S["feature_ethcolor"] , features["ethcolor"]) + WRITE_FILE(S["feature_grad_style"] , features["grad_style"]) + WRITE_FILE(S["underwear"] , underwear) + WRITE_FILE(S["underwear_color"] , underwear_color) + WRITE_FILE(S["undershirt"] , undershirt) + WRITE_FILE(S["undershirt_color"] , undershirt_color) + WRITE_FILE(S["socks"] , socks) + WRITE_FILE(S["socks_color"] , socks_color) + WRITE_FILE(S["backpack"] , backpack) + WRITE_FILE(S["uplink_loc"] , uplink_spawn_loc) + WRITE_FILE(S["randomise"] , randomise) + WRITE_FILE(S["species"] , pref_species.id) + WRITE_FILE(S["phobia"] , phobia) + WRITE_FILE(S["body_size"] , features["body_size"]) + WRITE_FILE(S["prosthetic_limbs"] , prosthetic_limbs) + WRITE_FILE(S["feature_mcolor"] , features["mcolor"]) + WRITE_FILE(S["feature_mcolor2"] , features["mcolor2"]) + WRITE_FILE(S["feature_ethcolor"] , features["ethcolor"]) WRITE_FILE(S["feature_lizard_tail"] , features["tail_lizard"]) - WRITE_FILE(S["feature_human_tail"] , features["tail_human"]) - WRITE_FILE(S["feature_lizard_snout"] , features["snout"]) - WRITE_FILE(S["feature_lizard_horns"] , features["horns"]) - WRITE_FILE(S["feature_human_ears"] , features["ears"]) - WRITE_FILE(S["feature_lizard_frills"] , features["frills"]) - WRITE_FILE(S["feature_lizard_spines"] , features["spines"]) - WRITE_FILE(S["feature_lizard_body_markings"] , features["body_markings"]) + WRITE_FILE(S["feature_human_tail"] , features["tail_human"]) + WRITE_FILE(S["feature_lizard_snout"] , features["snout"]) + WRITE_FILE(S["feature_lizard_horns"] , features["horns"]) + WRITE_FILE(S["feature_human_ears"] , features["ears"]) + WRITE_FILE(S["feature_lizard_frills"] , features["frills"]) + WRITE_FILE(S["feature_lizard_spines"] , features["spines"]) + WRITE_FILE(S["feature_lizard_body_markings"], features["body_markings"]) WRITE_FILE(S["feature_lizard_legs"] , features["legs"]) WRITE_FILE(S["feature_moth_wings"] , features["moth_wings"]) WRITE_FILE(S["feature_moth_markings"] , features["moth_markings"]) - - //WS begin WRITE_FILE(S["jumpsuit_style"] , jumpsuit_style) WRITE_FILE(S["exowear"] , exowear) WRITE_FILE(S["equipped_gear"] , equipped_gear) - WRITE_FILE(S["feature_moth_fluff"] , features["moth_fluff"]) WRITE_FILE(S["feature_spider_legs"] , features["spider_legs"]) WRITE_FILE(S["feature_spider_spinneret"] , features["spider_spinneret"]) @@ -614,32 +618,29 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["feature_ipc_antenna"] , features["ipc_antenna"]) WRITE_FILE(S["feature_ipc_chassis"] , features["ipc_chassis"]) WRITE_FILE(S["feature_ipc_brain"] , features["ipc_brain"]) - WRITE_FILE(S["feature_kepori_feathers"] , features["kepori_feathers"]) + WRITE_FILE(S["feature_kepori_feathers"] , features["kepori_feathers"]) WRITE_FILE(S["feature_kepori_body_feathers"], features["kepori_body_feathers"]) WRITE_FILE(S["feature_kepori_tail_feathers"], features["kepori_tail_feathers"]) - WRITE_FILE(S["feature_vox_head_quills"], features["vox_head_quills"]) - WRITE_FILE(S["feature_vox_neck_quills"], features["vox_neck_quills"]) + WRITE_FILE(S["feature_vox_head_quills"] , features["vox_head_quills"]) + WRITE_FILE(S["feature_vox_neck_quills"] , features["vox_neck_quills"]) WRITE_FILE(S["feature_elzu_horns"] , features["elzu_horns"]) WRITE_FILE(S["feature_tail_elzu"] , features["tail_elzu"]) + WRITE_FILE(S["fbp"] , fbp) //Flavor text - WRITE_FILE(S["feature_flavor_text"], features["flavor_text"]) - - //WS End - + WRITE_FILE(S["feature_flavor_text"] , features["flavor_text"]) //Custom names for(var/custom_name_id in GLOB.preferences_custom_names) var/savefile_slot_name = custom_name_id + "_name" //TODO remove this - WRITE_FILE(S[savefile_slot_name],custom_names[custom_name_id]) - - WRITE_FILE(S["preferred_ai_core_display"] , preferred_ai_core_display) - WRITE_FILE(S["prefered_security_department"] , prefered_security_department) - + WRITE_FILE(S[savefile_slot_name] ,custom_names[custom_name_id]) + //AI cores + WRITE_FILE(S["preferred_ai_core_display"] , preferred_ai_core_display) + //Deprecated department security stuff + WRITE_FILE(S["prefered_security_department"], prefered_security_department) //Preview outfit selection - WRITE_FILE(S["selected_outfit"], selected_outfit) - + WRITE_FILE(S["selected_outfit"] , selected_outfit) //Quirks - WRITE_FILE(S["all_quirks"] , all_quirks) + WRITE_FILE(S["all_quirks"] , all_quirks) return TRUE diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 9a90d6b750b7..9c70b89c2924 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -284,13 +284,6 @@ * BLIND // can't see anything */ -/proc/generate_female_clothing(index,t_color,icon,type) - var/icon/female_clothing_icon = icon("icon"=icon, "icon_state"=t_color) - var/icon/female_s = icon("icon"='icons/mob/clothing/under/masking_helpers.dmi', "icon_state"="[(type == FEMALE_UNIFORM_FULL) ? "female_full" : "female_top"]") - female_clothing_icon.Blend(female_s, ICON_MULTIPLY) - female_clothing_icon = fcopy_rsc(female_clothing_icon) - GLOB.female_clothing_icons[index] = female_clothing_icon - /obj/item/proc/generate_species_clothing(file2use, state2use, layer, datum/species/mob_species) if(!icon_exists(file2use, state2use)) return diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 5d446fd90329..118a8ded5587 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -9,6 +9,7 @@ equip_delay_other = 25 resistance_flags = NONE custom_materials = list(/datum/material/glass = 250) + supports_variations = VOX_VARIATION greyscale_colors = list(list(14, 26), list(17, 26)) greyscale_icon_state = "glasses" var/vision_flags = 0 @@ -103,6 +104,7 @@ resistance_flags = ACID_PROOF armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100) custom_price = 250 + supports_variations = VOX_VARIATION /obj/item/clothing/glasses/science/item_action_slot_check(slot) if(slot == ITEM_SLOT_EYES) @@ -128,6 +130,7 @@ flash_protect = FLASH_PROTECTION_SENSITIVE lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE glass_colour_type = /datum/client_colour/glass_colour/green + supports_variations = VOX_VARIATION /obj/item/clothing/glasses/science/suicide_act(mob/living/carbon/user) user.visible_message("[user] is tightening \the [src]'s straps around [user.p_their()] neck! It looks like [user.p_theyre()] trying to commit suicide!") @@ -144,6 +147,7 @@ desc = "Such a dapper eyepiece!" icon_state = "monocle" item_state = "headset" // lol + supports_variations = VOX_VARIATION /obj/item/clothing/glasses/material name = "optical material scanner" @@ -177,6 +181,7 @@ icon_state = "glasses" item_state = "glasses" vision_correction = 1 //corrects nearsightedness + supports_variations = VOX_VARIATION /obj/item/clothing/glasses/regular/jamjar name = "jamjar glasses" @@ -208,6 +213,7 @@ tint = 1 glass_colour_type = /datum/client_colour/glass_colour/gray dog_fashion = /datum/dog_fashion/head + supports_variations = VOX_VARIATION /obj/item/clothing/glasses/sunglasses/reagent name = "beer goggles" @@ -284,6 +290,7 @@ visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT flags_cover = GLASSESCOVERSEYES glass_colour_type = /datum/client_colour/glass_colour/gray + supports_variations = VOX_VARIATION /obj/item/clothing/glasses/welding/attack_self(mob/user) weldingvisortoggle(user) diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 92cfb0f82547..fb39c86a8369 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -6,7 +6,6 @@ ///Used for topic calls. Just because you have a HUD display doesn't mean you should be able to interact with stuff. var/hud_trait = null - /obj/item/clothing/glasses/hud/equipped(mob/living/carbon/human/user, slot) ..() if(slot != ITEM_SLOT_EYES) diff --git a/code/modules/clothing/gloves/boxing.dm b/code/modules/clothing/gloves/boxing.dm index a76ff7c5834d..807bfb217516 100644 --- a/code/modules/clothing/gloves/boxing.dm +++ b/code/modules/clothing/gloves/boxing.dm @@ -5,6 +5,7 @@ item_state = "boxing" equip_delay_other = 60 species_exception = list(/datum/species/golem) // now you too can be a golem boxing champion + supports_variations = VOX_VARIATION /obj/item/clothing/gloves/boxing/green icon_state = "boxinggreen" diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index d4acfb288100..9aa60648ea0a 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -1,5 +1,6 @@ /obj/item/clothing/gloves/color dying_key = DYE_REGISTRY_GLOVES + supports_variations = VOX_VARIATION /obj/item/clothing/gloves/color/yellow desc = "These gloves provide protection against electric shock." diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 39e2d3e6059b..bde02cd7d64d 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -226,7 +226,7 @@ icon_state = "hair_vlong" item_state = "pwig" flags_inv = HIDEHAIR - color = "#000" + color = "#000000" var/hairstyle = "Very Long Hair" var/adjustablecolor = TRUE //can color be changed manually? @@ -276,13 +276,13 @@ /obj/item/clothing/head/wig/random/Initialize(mapload) hairstyle = pick(GLOB.hairstyles_list - "Bald") //Don't want invisible wig - add_atom_colour("#[random_short_color()]", FIXED_COLOUR_PRIORITY) + add_atom_colour("#[random_color_natural()]", FIXED_COLOUR_PRIORITY) . = ..() /obj/item/clothing/head/wig/natural name = "natural wig" desc = "A bunch of hair without a head attached. This one changes color to match the hair of the wearer. Nothing natural about that." - color = "#FFF" + color = "#FFFFFF" adjustablecolor = FALSE custom_price = 100 diff --git a/code/modules/clothing/outfits/solgov.dm b/code/modules/clothing/outfits/solgov.dm index 650afea02bc2..d8a695908113 100644 --- a/code/modules/clothing/outfits/solgov.dm +++ b/code/modules/clothing/outfits/solgov.dm @@ -39,7 +39,7 @@ id = /obj/item/card/id/gold belt = /obj/item/pda/captain gloves = /obj/item/clothing/gloves/combat - ears = /obj/item/radio/headset/solgov + ears = /obj/item/radio/headset/solgov/alt/captain uniform = /obj/item/clothing/under/solgov/formal/captain suit = /obj/item/clothing/suit/armor/vest/bulletproof/solgov/captain shoes = /obj/item/clothing/shoes/laceup @@ -62,7 +62,7 @@ id = /obj/item/card/id/solgov uniform = /obj/item/clothing/under/solgov suit = /obj/item/clothing/suit/armor/vest/bulletproof/solgov - ears = /obj/item/radio/headset/solgov + ears = /obj/item/radio/headset/solgov/alt gloves = /obj/item/clothing/gloves/combat head = /obj/item/clothing/head/solgov/sonnensoldner r_pocket = /obj/item/gun/ballistic/automatic/pistol/solgov @@ -89,7 +89,7 @@ dcoat = /obj/item/clothing/suit/hooded/wintercoat gloves = /obj/item/clothing/gloves/color/white shoes = /obj/item/clothing/shoes/laceup - ears = /obj/item/radio/headset/solgov + ears = /obj/item/radio/headset/solgov/captain glasses = /obj/item/clothing/glasses/sunglasses belt = /obj/item/pda/solgov @@ -105,7 +105,7 @@ id = /obj/item/card/id/solgov belt = /obj/item/pda/heads/head_of_personnel - ears = /obj/item/radio/headset/solgov + ears = /obj/item/radio/headset/solgov/captain uniform = /obj/item/clothing/under/solgov/formal head = /obj/item/clothing/head/solgov neck = /obj/item/clothing/neck/cloak/overseer diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index 369868456601..78364599dee9 100644 --- a/code/modules/clothing/shoes/_shoes.dm +++ b/code/modules/clothing/shoes/_shoes.dm @@ -9,6 +9,7 @@ slot_flags = ITEM_SLOT_FEET greyscale_colors = list(list(13, 3), list(14, 2), list(12, 2)) greyscale_icon_state = "shoes" + supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION permeability_coefficient = 0.5 slowdown = SHOES_SLOWDOWN diff --git a/code/modules/clothing/shoes/colour.dm b/code/modules/clothing/shoes/colour.dm index 7fe8016b0ed2..a348fa398d82 100644 --- a/code/modules/clothing/shoes/colour.dm +++ b/code/modules/clothing/shoes/colour.dm @@ -1,6 +1,6 @@ /obj/item/clothing/shoes/sneakers dying_key = DYE_REGISTRY_SNEAKERS - supports_variations = DIGITIGRADE_VARIATION + supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION /obj/item/clothing/shoes/sneakers/black name = "black shoes" @@ -46,7 +46,7 @@ /obj/item/clothing/shoes/sneakers/rainbow name = "rainbow shoes" - desc = "Very gay shoes." + desc = "Very colorful shoes." icon_state = "rain_bow" /obj/item/clothing/shoes/sneakers/orange diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index 9cb9aa5b9cd4..6bb64c2caebb 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -10,7 +10,7 @@ strip_delay = 70 equip_delay_other = 70 resistance_flags = FIRE_PROOF - supports_variations = DIGITIGRADE_VARIATION + supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION greyscale_icon_state = "boots" /obj/item/clothing/shoes/magboots/verb/toggle() diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index db39f7c6683a..fc408334e846 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -13,7 +13,6 @@ lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' armor = list("melee" = 25, "bullet" = 25, "laser" = 25, "energy" = 25, "bomb" = 50, "bio" = 10, "rad" = 0, "fire" = 70, "acid" = 50) - supports_variations = DIGITIGRADE_VARIATION strip_delay = 40 resistance_flags = NONE permeability_coefficient = 0.05 //Thick soles, and covers the ankle @@ -150,7 +149,6 @@ permeability_coefficient = 0.05 //Thick soles, and covers the ankle pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes can_be_tied = FALSE - supports_variations = DIGITIGRADE_VARIATION greyscale_icon_state = "boots" /obj/item/clothing/shoes/jackboots/fast @@ -168,7 +166,6 @@ max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes lace_time = 8 SECONDS - supports_variations = DIGITIGRADE_VARIATION greyscale_icon_state = "boots" /obj/item/clothing/shoes/workboots @@ -183,7 +180,6 @@ equip_delay_other = 40 pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes lace_time = 8 SECONDS - supports_variations = DIGITIGRADE_VARIATION greyscale_icon_state = "boots" /obj/item/clothing/shoes/winterboots/ice_boots diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 081c7f7f50b3..e6ff7a1a15b5 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -100,14 +100,14 @@ item_state = "eng_hardsuit" max_integrity = 300 armor = list("melee" = 10, "bullet" = 5, "laser" = 10, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 50, "acid" = 75) - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/t_scanner, /obj/item/construction/rcd, /obj/item/pipe_dispenser, /obj/item/environmental_regulator) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/t_scanner, /obj/item/construction/rcd, /obj/item/pipe_dispenser) siemens_coefficient = 0 var/obj/item/clothing/head/helmet/space/hardsuit/helmet - actions_types = list(/datum/action/item_action/toggle_helmet) //WS Edit - No Cells in EVA suits + actions_types = list(/datum/action/item_action/toggle_helmet) var/helmettype = /obj/item/clothing/head/helmet/space/hardsuit var/obj/item/tank/jetpack/suit/jetpack = null var/hardsuit_type - pocket_storage_component_path = FALSE //WS Edit - Exowear Pockets + pocket_storage_component_path = FALSE greyscale_colors = list(list(11, 19), list(22, 12), list(16, 9)) greyscale_icon_state = "hardsuit" @@ -205,7 +205,7 @@ icon_state = "hardsuit-engineering" item_state = "eng_hardsuit" armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 100, "acid" = 75) - supports_variations = DIGITIGRADE_VARIATION + supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine resistance_flags = FIRE_PROOF @@ -265,7 +265,7 @@ heat_protection = HEAD armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 20, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 75) light_range = 7 - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/environmental_regulator) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator) /obj/item/clothing/head/helmet/space/hardsuit/mining/Initialize() . = ..() @@ -279,7 +279,7 @@ max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 20, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 75) - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/bag/ore, /obj/item/pickaxe, /obj/item/environmental_regulator) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/bag/ore, /obj/item/pickaxe) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/mining heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS custom_price = 2000 @@ -298,7 +298,7 @@ max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF armor = list("melee" = 35, "bullet" = 15, "laser" = 25, "energy" = 25, "bomb" = 55, "bio" = 100, "rad" = 85, "fire" = 85, "acid" = 100) - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/bag/ore, /obj/item/pickaxe, /obj/item/environmental_regulator) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/bag/ore, /obj/item/pickaxe) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/mining/heavy custom_price = 4500 slowdown = 0.5 @@ -410,7 +410,7 @@ hardsuit_type = "syndi" w_class = WEIGHT_CLASS_NORMAL armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 40, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 90) - allowed = list(/obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/environmental_regulator) + allowed = list(/obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi jetpack = /obj/item/tank/jetpack/suit supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION @@ -519,7 +519,7 @@ w_class = WEIGHT_CLASS_NORMAL resistance_flags = FIRE_PROOF | ACID_PROOF armor = list("melee" = 40, "bullet" = 40, "laser" = 40, "energy" = 50, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100) - allowed = list(/obj/item/teleportation_scroll, /obj/item/tank/internals, /obj/item/environmental_regulator) + allowed = list(/obj/item/teleportation_scroll, /obj/item/tank/internals) heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT helmettype = /obj/item/clothing/head/helmet/space/hardsuit/wizard @@ -545,7 +545,7 @@ desc = "A special suit that protects against hazardous, low pressure environments. Built with lightweight materials for easier movement." icon_state = "hardsuit-medical" item_state = "medical_hardsuit" - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/firstaid, /obj/item/healthanalyzer, /obj/item/stack/medical, /obj/item/environmental_regulator) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/firstaid, /obj/item/healthanalyzer, /obj/item/stack/medical) armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 75) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/medical slowdown = 0.5 @@ -605,8 +605,11 @@ item_state = "hardsuit-rd" resistance_flags = ACID_PROOF | FIRE_PROOF max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT //Same as an emergency firesuit. Not ideal for extended exposure. - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/gun/energy/wormhole_projector, - /obj/item/hand_tele, /obj/item/aicard, /obj/item/environmental_regulator) + allowed = list(/obj/item/flashlight, + /obj/item/tank/internals, + /obj/item/gun/energy/wormhole_projector, + /obj/item/hand_tele, + /obj/item/aicard) armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 20, "bomb" = 100, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 80) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/rd supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION @@ -898,7 +901,7 @@ item_state = "syndie_hardsuit" hardsuit_type = "syndi" armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 40, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100) - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/environmental_regulator) + allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/syndi slowdown = 0 shield_state = "shield-red" @@ -1009,6 +1012,7 @@ item_state = "independent_sec_helm" hardsuit_type = "independent-sec" armor = list("melee" = 35, "bullet" = 25, "laser" = 20,"energy" = 40, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 75, "acid" = 75) + supports_variations = VOX_VARIATION /obj/item/clothing/head/helmet/space/hardsuit/security/independent/frontier name = "\improper Frontiersmen hardsuit helmet" @@ -1031,6 +1035,7 @@ hardsuit_type = "independent-sec" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security/independent armor = list("melee" = 35, "bullet" = 25, "laser" = 20, "energy" = 40, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 75, "acid" = 75) + supports_variations = VOX_VARIATION /obj/item/clothing/suit/space/hardsuit/security/independent/frontier name = "\improper Frontiersmen hardsuit" diff --git a/code/modules/clothing/spacesuits/syndi.dm b/code/modules/clothing/spacesuits/syndi.dm index fce9d2eeed46..4bdafe4f7f41 100644 --- a/code/modules/clothing/spacesuits/syndi.dm +++ b/code/modules/clothing/spacesuits/syndi.dm @@ -5,6 +5,7 @@ item_state = "syndicate" desc = "An advanced, lightweight space helmet made of durable composites. Almost matches integrated hardsuit helmets for protection. Almost." armor = list("melee" = 30, "bullet" = 15, "laser" = 15, "energy" = 40, "bomb" = 20, "bio" = 100, "rad" = 30, "fire" = 75, "acid" = 75) + supports_variations = VOX_VARIATION /obj/item/clothing/suit/space/syndicate name = "red space suit" diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 6f2b83ed1e24..9002b5060c20 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -45,6 +45,7 @@ min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS resistance_flags = FIRE_PROOF | ACID_PROOF + supports_variations = VOX_VARIATION /obj/item/clothing/suit/armor/vest/marine/medium name = "medium tactical armor vest" @@ -158,6 +159,7 @@ desc = "A long, commanding coat worn over a surprisingly sleek set of armor and decorated with gold embroidery. Ideal for protecting its wearer from rain, sun, dust, mutineers, pirates, bears, hordes of angry legions, and so on." icon_state = "carapace_duster" item_state = "duster_captain" + supports_variations = VOX_VARIATION /obj/item/clothing/suit/armor/riot name = "riot suit" @@ -343,6 +345,7 @@ desc = "A shortened brown labcoat with an armor vest under it, for the IRMG's support division Corpsmen." icon_state = "armor_inteq_labcoat" item_state = "inteq_labcoat" + supports_variations = VOX_VARIATION allowed = list( /obj/item/analyzer, /obj/item/stack/medical, diff --git a/code/modules/clothing/suits/hoodies.dm b/code/modules/clothing/suits/hoodies.dm new file mode 100644 index 000000000000..77f1f9cccae4 --- /dev/null +++ b/code/modules/clothing/suits/hoodies.dm @@ -0,0 +1,74 @@ +/obj/item/clothing/suit/hooded/hoodie/ + name = "hoodie" + desc = "HOW" + hoodtype = /obj/item/clothing/head/hooded/hood/ + body_parts_covered = CHEST|ARMS + pocket_storage_component_path = /datum/component/storage/concrete/pockets/exo/large + allowed = list( /obj/item/flashlight, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman, + /obj/item/toy, + /obj/item/storage/fancy/cigarettes, + /obj/item/lighter, + /obj/item/radio, + ) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) //it's just a hoodie. + +/obj/item/clothing/head/hooded/hood/ + name = "hood" + desc = "HOW" + body_parts_covered = HEAD + flags_inv = HIDEHAIR|HIDEEARS + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) //it's just a hoodie. + +/obj/item/clothing/suit/hooded/hoodie/black + name = "black hoodie" + desc = "A hoodie that is black. It has a comfy pocket for keeping your hands warm." + icon_state = "hoodie_black" + item_state = "hoodie_black" + hoodtype = /obj/item/clothing/head/hooded/hood/black + +/obj/item/clothing/head/hooded/hood/black + name = "black hood" + desc = "A black hood for your black hoodie." + icon_state = "hoodie_black" + item_state = "hoodie_black" + +/obj/item/clothing/suit/hooded/hoodie/red + name = "red hoodie" + desc = "A hoodie that is red. It has a comfy pocket for keeping your hands warm." + icon_state = "hoodie_red" + item_state = "hoodie_red" + hoodtype = /obj/item/clothing/head/hooded/hood/red + +/obj/item/clothing/head/hooded/hood/red + name = "red hood" + desc = "A red hood for your red hoodie." + icon_state = "hoodie_red" + item_state = "hoodie_red" + +/obj/item/clothing/suit/hooded/hoodie/blue + name = "blue hoodie" + desc = "A hoodie that is blue. It has a comfy pocket for keeping your hands warm." + icon_state = "hoodie_blue" + item_state = "hoodie_blue" + hoodtype = /obj/item/clothing/head/hooded/hood/blue + +/obj/item/clothing/head/hooded/hood/blue + name = "blue hood" + desc = "A blue hood for your blue hoodie." + icon_state = "hoodie_blue" + item_state = "hoodie_blue" + +/obj/item/clothing/suit/hooded/hoodie/gray + name = "gray hoodie" + desc = "A hoodie that is gray. It has a comfy pocket for keeping your hands warm." + icon_state = "hoodie_gray" + item_state = "hoodie_gray" + hoodtype = /obj/item/clothing/head/hooded/hood/gray + +/obj/item/clothing/head/hooded/hood/gray + name = "gray hood" + desc = "A gray hood for your gray hoodie." + icon_state = "hoodie_gray" + item_state = "hoodie_gray" diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 3b0bfb8d5567..ceac4c8ee8e3 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -422,6 +422,7 @@ item_state = "duster" heat_protection = CHEST|GROIN|ARMS|LEGS cold_protection = CHEST|GROIN|ARMS|LEGS + supports_variations = VOX_VARIATION /obj/item/clothing/suit/jacket/leather/duster/command name = "officer's duster" diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index bcf4afdc146d..9379f52314df 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -6,7 +6,7 @@ actions_types = list(/datum/action/item_action/toggle_hood) var/obj/item/clothing/head/hooded/hood var/hoodtype = /obj/item/clothing/head/hooded/winterhood //so the chaplain hoodie or other hoodies can override this - pocket_storage_component_path = FALSE //WS Edit - Exowear Pockets + pocket_storage_component_path = FALSE /obj/item/clothing/suit/hooded/Initialize() . = ..() diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index 739f880f7b30..5a1810e1fba1 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -131,6 +131,7 @@ flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF resistance_flags = NONE flags_1 = RAD_PROTECT_CONTENTS_1 + supports_variations = VOX_VARIATION /obj/item/clothing/suit/radiation name = "radiation suit" @@ -152,6 +153,7 @@ flags_inv = HIDEJUMPSUIT resistance_flags = NONE flags_1 = RAD_PROTECT_CONTENTS_1 + supports_variations = VOX_VARIATION /obj/item/clothing/head/radiation/space name = "low-pressure radiation helmet" diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index 57f259b93d29..356bef71acac 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -22,7 +22,6 @@ var/obj/item/clothing/accessory/attached_accessory var/mutable_appearance/accessory_overlay var/freshly_laundered = FALSE - supports_variations = VOX_VARIATION /obj/item/clothing/under/worn_overlays(isinhands = FALSE) diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index 5e5af048a0c8..1a2cfdd33fd7 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -7,7 +7,7 @@ /obj/item/clothing/under/color/jumpskirt body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE + can_adjust = TRUE /obj/item/clothing/under/color/random icon_state = "random_jumpsuit" @@ -161,7 +161,6 @@ icon_state = "teal_skirt" item_state = "b_suit" - /obj/item/clothing/under/color/lightpurple name = "purple jumpsuit" icon_state = "lightpurple" diff --git a/code/modules/clothing/under/jobs/medical.dm b/code/modules/clothing/under/jobs/medical.dm index 8c32847380b1..a91ea7c13c67 100644 --- a/code/modules/clothing/under/jobs/medical.dm +++ b/code/modules/clothing/under/jobs/medical.dm @@ -1,6 +1,7 @@ /obj/item/clothing/under/rank/medical icon = 'icons/obj/clothing/under/medical.dmi' mob_overlay_icon = 'icons/mob/clothing/under/medical.dmi' + supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION /obj/item/clothing/under/rank/medical/chief_medical_officer desc = "It's a jumpsuit worn by those with the experience to be \"Chief Medical Officer\". It provides minor biological protection." @@ -22,8 +23,8 @@ /obj/item/clothing/under/rank/medical/geneticist desc = "It's made of a special fiber that gives special protection against biohazards. It has a genetics rank stripe on it." name = "geneticist's jumpsuit" - icon = 'icons/obj/clothing/under/rnd.dmi' //WS Edit - Gen/Sci Split - mob_overlay_icon = 'icons/mob/clothing/under/rnd.dmi' //WS Edit - Gen/Sci Split + icon = 'icons/obj/clothing/under/rnd.dmi' + mob_overlay_icon = 'icons/mob/clothing/under/rnd.dmi' icon_state = "genetics" item_state = "w_suit" permeability_coefficient = 0.5 @@ -49,7 +50,7 @@ /obj/item/clothing/under/rank/medical/virologist/skirt name = "virologist's jumpskirt" desc = "It's made of a special fiber that gives special protection against biohazards. It has a virologist rank stripe on it." - icon_state = "virologywhite_skirt" + icon_state = "virology_skirt" item_state = "w_suit" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE @@ -92,13 +93,18 @@ icon_state = "scrubspurple" can_adjust = FALSE +/obj/item/clothing/under/rank/medical/doctor/red + name = "medical scrubs" + desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in dark red." + icon_state = "scrubsred" + can_adjust = FALSE + /obj/item/clothing/under/rank/medical/doctor/skirt name = "medical doctor's jumpskirt" desc = "It's made of a special fiber that provides minor protection against biohazards. It has a cross on the chest denoting that the wearer is trained medical personnel." icon_state = "medical_skirt" item_state = "w_suit" body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION /obj/item/clothing/under/rank/medical/chemist @@ -115,7 +121,6 @@ icon_state = "chemistrywhite_skirt" item_state = "w_suit" body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION /obj/item/clothing/under/rank/medical/paramedic @@ -125,7 +130,6 @@ item_state = "w_suit" permeability_coefficient = 0.5 armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) - supports_variations = DIGITIGRADE_VARIATION /obj/item/clothing/under/rank/medical/paramedic/skirt name = "paramedic jumpskirt" @@ -133,155 +137,15 @@ icon_state = "paramedic_skirt" item_state = "w_suit" body_parts_covered = CHEST|GROIN|ARMS - can_adjust = TRUE - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION - -//Alt job uniforms - -/obj/item/clothing/under/rank/medical/chemist/pharmacist - name = "pharmacist's jumpsuit" - desc = "It's made of a special fiber that gives special protection against biohazards. For those pharmacists that want to improve or worsen their crew's health." - icon_state = "pharmacist" - -/obj/item/clothing/under/rank/medical/chemist/pharmacist/skirt - name = "pharmacist's jumpskirt" - icon_state = "pharmacist_skirt" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION - -/obj/item/clothing/under/rank/medical/chemist/pharmacologist - name = "pharmacologist's jumpsuit" - desc = "It's made of a special fiber that gives special protection against biohazards. For those pharmacologist one step behind to being evil." - icon_state = "pharmacologist" - -/obj/item/clothing/under/rank/medical/chemist/pharmacologist/skirt - name = "pharmacologist's jumpskirt" - icon_state = "pharmacologist_skirt" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION - -/obj/item/clothing/under/rank/medical/chemist/junior_chemist - name = "junior chemist's jumpsuit" - desc = "It's made of a special fiber that gives special protection against biohazards. A jumpsuit for junior chemist staff." - icon_state = "junior_chemistry" - -/obj/item/clothing/under/rank/medical/chemist/junior_chemist/skirt - name = "junior chemist's jumpskirt" - desc = "It's made of a special fiber that gives special protection against biohazards. A jumpskirt for junior chemist staff." - icon_state = "junior_chemistry_skirt" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION /obj/item/clothing/under/rank/medical/psychiatrist name = "white psychiatrist's suit" desc = "A turtleneck for personnel trained to deal with psychological issues, such as terrible work place incidents or the clown's bad jokes. This one has a white turtleneck." icon_state = "psychiatrist-white" - - can_adjust = FALSE - - permeability_coefficient = 0.5 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) - -/obj/item/clothing/under/rank/medical/psychiatrist/green - name = "blue psychiatrist's suit" - desc = "A turtleneck for personnel trained to deal with psychological issues, such as terrible work place incidents or the clown's bad jokes. This one has a green turtleneck." - icon_state = "psychiatrist-green" - -/obj/item/clothing/under/rank/medical/psychiatrist/blue - name = "green psychiatrist's suit" - desc = "A turtleneck for personnel trained to deal with psychological issues, such as terrible work place incidents or the clown's bad jokes. This one has a blue turtleneck." - icon_state = "psychiatrist-blue" - -/obj/item/clothing/under/rank/medical/doctor/junior_doctor - name = "junior doctor's jumpsuit" - desc = "It's made of a special fiber that provides minor protection against biohazards. Worn by the junior medical personnel." - icon_state = "junior_medical" - -/obj/item/clothing/under/rank/medical/doctor/junior_doctor/skirt - name = "junior doctor's jumpskirt" - icon_state = "junior_medical_skirt" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION - -/obj/item/clothing/under/suit/cmo - name = "medical director suit" - desc = "A suit with medical colors, meant to be worn by those who lead the medical department." - icon_state = "medical_director" - permeability_coefficient = 0.5 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) - icon = 'icons/obj/clothing/under/medical.dmi' - mob_overlay_icon = 'icons/mob/clothing/under/medical.dmi' - -/obj/item/clothing/under/suit/cmo/skirt - name = "medical director skirtsuit" - desc = "A skirtsuit with medical colors, meant to be worn by those who lead the medical department." - icon_state = "medical_director_skirt" - - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION - -/obj/item/clothing/under/rank/medical/chief_medical_officer/surgeon_general - name = "surgeon-general scrubs" - desc = "It's made of a special fiber that provides minor protection against biohazards. This one is meant to be worn by surgeon-generals." - icon_state = "surgeon_general" can_adjust = FALSE - -/obj/item/clothing/under/suit/senior_doctor - name = "senior doctor suit" - desc = "A suit with medical colors, meant to be worn by senior staff." - icon_state = "senior_medical" permeability_coefficient = 0.5 armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) - icon = 'icons/obj/clothing/under/medical.dmi' - mob_overlay_icon = 'icons/mob/clothing/under/medical.dmi' - -/obj/item/clothing/under/suit/senior_doctor/skirt - name = "senior doctor skirtsuit" - desc = "A skirtsuit with medical colors, meant to be worn by senior staff." - icon_state = "senior_medical_skirt" - - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION - -/obj/item/clothing/under/suit/senior_chemist - name = "senior chemist suit" - desc = "A suit with chemistry colors, meant to be worn by senior staff." - icon_state = "senior_chemistry" - permeability_coefficient = 0.5 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 50, "acid" = 65) - icon = 'icons/obj/clothing/under/medical.dmi' - mob_overlay_icon = 'icons/mob/clothing/under/medical.dmi' - -/obj/item/clothing/under/suit/senior_chemist/skirt - name = "senior chemist suit" - desc = "A skirtsuit with chemistry colors, meant to be worn by senior staff." - icon_state = "senior_chemistry_skirt" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION - -/obj/item/clothing/under/suit/pathologist - name = "pathologist suit" - desc = "A suit with special fibers that provide minor protection against biohazards. A suit with green pants, provided to pathologists." - icon_state = "pathologist" - permeability_coefficient = 0.5 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) - icon = 'icons/obj/clothing/under/medical.dmi' - mob_overlay_icon = 'icons/mob/clothing/under/medical.dmi' - -/obj/item/clothing/under/suit/pathologist/skirt - name = "pathologist suit" - desc = "A suit with special fibers that provide minor protection against biohazards. A skirtsuit with green pants, provided to pathologists." - icon_state = "pathologist_skirt" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION /obj/item/clothing/under/rank/medical/paramedic/emt name = "emergency medical technician jumpsuit" @@ -293,11 +157,4 @@ name = "emergency medical technician jumpskirt" desc = "It's made of a special fiber that provides minor protection against biohazards." icon_state = "emt_skirt" - can_adjust = FALSE supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION - -/obj/item/clothing/under/rank/medical/doctor/red - name = "medical scrubs" - desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in red." - icon_state = "scrubsred" - can_adjust = FALSE diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index 4e36715edf71..0f5472a80407 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -34,7 +34,7 @@ desc = "A \"tactical\" security jumpsuit with the legs replaced by a skirt." icon_state = "security_skirt" body_parts_covered = CHEST|GROIN|ARMS - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON /obj/item/clothing/under/rank/security/officer/nt name = "red security jumpsuit" @@ -47,7 +47,7 @@ desc = "A \"tactical\" security jumpsuit with the legs replaced by a skirt." icon_state = "rsecurity_skirt" body_parts_covered = CHEST|GROIN|ARMS - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON // Detective// /obj/item/clothing/under/rank/security/detective @@ -66,7 +66,7 @@ desc = "Someone who wears this means business." icon_state = "detective_skirt" body_parts_covered = CHEST|GROIN|ARMS - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON /obj/item/clothing/under/rank/security/detective/grey name = "noir suit" @@ -80,7 +80,7 @@ desc = "A hard-boiled private investigator's grey suitskirt, complete with tie clip." icon_state = "greydet_skirt" body_parts_covered = CHEST|GROIN|ARMS - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON // Brig Physician // /obj/item/clothing/under/rank/security/brig_phys @@ -94,7 +94,7 @@ icon_state = "brig_phys_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON /obj/item/clothing/under/rank/security/brig_phys/nt name = "security medic's uniform" @@ -107,7 +107,7 @@ desc = "A lightly armored uniform, with a skirt, worn by medics ensuring the health of prisoners." icon_state = "rbrig_phys_skirt" body_parts_covered = CHEST|GROIN|ARMS - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON // Warden // /obj/item/clothing/under/rank/security/warden @@ -125,7 +125,7 @@ desc = "A formal security suitskirt for wardens." icon_state = "warden_skirt" body_parts_covered = CHEST|GROIN|ARMS - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON /obj/item/clothing/under/rank/security/warden/nt name = "warden's red security suit" @@ -139,7 +139,7 @@ icon_state = "rwarden_skirt" item_state = "r_suit" body_parts_covered = CHEST|GROIN|ARMS - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON /obj/item/clothing/under/rank/security/head_of_security/nt name = "red head of security's jumpsuit" @@ -151,7 +151,7 @@ desc = "A security jumpskirt decorated for those few with the dedication to achieve the position of Head of Security." icon_state = "rhos_skirt" body_parts_covered = CHEST|GROIN|ARMS - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON // Head of Security // /obj/item/clothing/under/rank/security/head_of_security @@ -170,7 +170,7 @@ icon_state = "hos_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON /obj/item/clothing/under/rank/security/head_of_security/alt name = "head of security's turtleneck" @@ -184,7 +184,7 @@ icon_state = "hosalt_skirt" item_state = "bl_suit" body_parts_covered = CHEST|GROIN|ARMS - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON /obj/item/clothing/under/rank/security/head_of_security/parade name = "head of security's parade uniform" @@ -217,7 +217,7 @@ item_state = "o_suit" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON /obj/item/clothing/under/rank/prisoner/protected_custody name = "protected custody jumpsuit" @@ -228,7 +228,7 @@ name = "protected custody jumpskirt" desc = "It's standardised Nanotrasen prisoner-wear worn by those in protected custody. Its suit sensors are stuck in the \"Fully On\" position." icon_state = "protected_custody_skirt" - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON // Non-official // /obj/item/clothing/under/rank/security/constable diff --git a/code/modules/clothing/under/pants.dm b/code/modules/clothing/under/pants.dm index 086b2fc468ad..23800bf4a799 100644 --- a/code/modules/clothing/under/pants.dm +++ b/code/modules/clothing/under/pants.dm @@ -16,7 +16,7 @@ /obj/item/clothing/under/pants/mustangjeans name = "Must Hang jeans" desc = "Made in the finest space jeans factory this side of Alpha Centauri." - icon_state = "jeansmustang" + icon_state = "jeans" custom_price = 180 /obj/item/clothing/under/pants/blackjeans @@ -27,7 +27,7 @@ /obj/item/clothing/under/pants/youngfolksjeans name = "Young Folks jeans" desc = "For those tired of boring old jeans. Relive the passion of your youth!" - icon_state = "jeansyoungfolks" + icon_state = "jeansclassic" /obj/item/clothing/under/pants/white name = "white pants" @@ -47,7 +47,7 @@ /obj/item/clothing/under/pants/tan name = "tan pants" desc = "Some tan pants. You look like a white collar worker with these on." - icon_state = "tanpants" + icon_state = "khaki" /obj/item/clothing/under/pants/track name = "track pants" diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm index 9ed18c18c04d..0d0a9baece0a 100644 --- a/code/modules/clothing/under/syndicate.dm +++ b/code/modules/clothing/under/syndicate.dm @@ -43,7 +43,7 @@ icon_state = "tactifool" item_state = "bl_suit" armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40) - supports_variations = DIGITIGRADE_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION | KEPORI_VARIATION /obj/item/clothing/under/syndicate/tacticool/skirt name = "tacticool skirtleneck" @@ -52,7 +52,7 @@ item_state = "bl_suit" armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40) can_adjust = FALSE - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | KEPORI_VARIATION /obj/item/clothing/under/syndicate/sniper name = "Tactical turtleneck suit" @@ -249,7 +249,7 @@ name = "inteq artificer overalls" desc = "A black set of overalls atop a standard issue turtleneck, for the IRMG's support division Artificers." icon_state = "inteqeng" - supports_variations = KEPORI_VARIATION | DIGITIGRADE_VARIATION + supports_variations = KEPORI_VARIATION | VOX_VARIATION | DIGITIGRADE_VARIATION /obj/item/clothing/under/syndicate/inteq/skirt/artificer name = "inteq artificer overall skirt" @@ -261,7 +261,7 @@ name = "inteq corpsman turtleneck" desc = "A sterile white turtleneck with tactical cargo pants, it is emblazoned with the lettering 'IRMG' on the shoulder. For the IRMG's support division Corpsmen." icon_state = "inteqmed" - supports_variations = KEPORI_VARIATION | DIGITIGRADE_VARIATION + supports_variations = KEPORI_VARIATION | VOX_VARIATION | DIGITIGRADE_VARIATION /obj/item/clothing/under/syndicate/inteq/skirt/corpsman name = "inteq corpsman skirtleneck" @@ -275,11 +275,9 @@ icon_state = "inteqmaid" item_state = "inteqmaid" can_adjust = FALSE - supports_variations = KEPORI_VARIATION | DIGITIGRADE_VARIATION_NO_NEW_ICON + supports_variations = KEPORI_VARIATION | VOX_VARIATION | DIGITIGRADE_VARIATION_NO_NEW_ICON /obj/item/clothing/under/syndicate/inteq/skirt/maid/Initialize() . = ..() var/obj/item/clothing/accessory/maidapron/inteq/A = new (src) attach_accessory(A) - - diff --git a/code/modules/disks/disk.dm b/code/modules/disks/disk.dm index 5e16d48c3dc0..9d2f4aac8232 100644 --- a/code/modules/disks/disk.dm +++ b/code/modules/disks/disk.dm @@ -56,14 +56,16 @@ writing.appearance_flags = RESET_COLOR . += writing -/obj/item/disk/attackby(obj/item/pen, mob/user, params) - if(!user.is_literate()) - to_chat(user, "You scribble illegibly on the cover of [src]!") - return - var/inputvalue = stripped_input(user, "What would you like to label the Disk?", "Disk Labelling", "", MAX_NAME_LEN) +/obj/item/disk/attackby(obj/item/object, mob/user, params) + if(istype(object, /obj/item/pen)) + if(!user.is_literate()) + to_chat(user, "You scribble illegibly on the cover of [src]!") + return + var/inputvalue = stripped_input(user, "What would you like to label the Disk?", "Disk Labelling", "", MAX_NAME_LEN) - if(!inputvalue) - return + if(!inputvalue) + return - if(user.canUseTopic(src, BE_CLOSE)) - name = "[initial(src.name)][(inputvalue ? " - '[inputvalue]'" : null)]" + if(user.canUseTopic(src, BE_CLOSE)) + name = "[initial(src.name)][(inputvalue ? " - '[inputvalue]'" : null)]" + return diff --git a/code/modules/events/anomaly.dm b/code/modules/events/anomaly.dm deleted file mode 100644 index e4306e8ec4a6..000000000000 --- a/code/modules/events/anomaly.dm +++ /dev/null @@ -1,50 +0,0 @@ -/datum/round_event_control/anomaly - name = "Anomaly: Energetic Flux" - typepath = /datum/round_event/anomaly - - min_players = 1 - max_occurrences = 0 //This one probably shouldn't occur! It'd work, but it wouldn't be very fun. - weight = 15 - -/datum/round_event/anomaly - var/area/impact_area - var/obj/effect/anomaly/anomaly_path = /obj/effect/anomaly/flux - announceWhen = 1 - - -/datum/round_event/anomaly/proc/findEventArea() - var/static/list/allowed_areas - if(!allowed_areas) - //Places that shouldn't explode - var/list/safe_area_types = typecacheof(list( - /area/ship/science/ai_chamber, - /area/ship/engineering, - /area/ship/maintenance) - ) - - //Subtypes from the above that actually should explode. - var/list/unsafe_area_subtypes = typecacheof(list()) - - allowed_areas = make_associative(typesof(/area/ship)) - safe_area_types + unsafe_area_subtypes - var/list/possible_areas = typecache_filter_list(GLOB.sortedAreas,allowed_areas) - if (length(possible_areas)) - return pick(possible_areas) - -/datum/round_event/anomaly/setup() - impact_area = findEventArea() - if(!impact_area) - CRASH("No valid areas for anomaly found.") - var/list/turf_test = get_area_turfs(impact_area) - if(!turf_test.len) - CRASH("Anomaly : No valid turfs found for [impact_area] - [impact_area.type]") - -/datum/round_event/anomaly/announce(fake) - priority_announce("Localized energetic flux wave detected on long range scanners. Expected location of impact: [impact_area.name].", "Anomaly Alert", zlevel = impact_area.virtual_z()) - -/datum/round_event/anomaly/start() - var/turf/T = pick(get_area_turfs(impact_area)) - var/newAnomaly - if(T) - newAnomaly = new anomaly_path(T) - if (newAnomaly) - announce_to_ghosts(newAnomaly) diff --git a/code/modules/events/anomaly_bluespace.dm b/code/modules/events/anomaly_bluespace.dm deleted file mode 100644 index 78ed91c9c8fe..000000000000 --- a/code/modules/events/anomaly_bluespace.dm +++ /dev/null @@ -1,14 +0,0 @@ -/datum/round_event_control/anomaly/anomaly_bluespace - name = "Anomaly: Bluespace" - typepath = /datum/round_event/anomaly/anomaly_bluespace - - max_occurrences = 1 - weight = 15 - -/datum/round_event/anomaly/anomaly_bluespace - startWhen = 3 - announceWhen = 10 - anomaly_path = /obj/effect/anomaly/bluespace - -/datum/round_event/anomaly/anomaly_bluespace/announce(fake) - priority_announce("Unstable bluespace anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert", zlevel = impact_area.virtual_z()) diff --git a/code/modules/events/anomaly_flux.dm b/code/modules/events/anomaly_flux.dm deleted file mode 100644 index e8691e03e4fe..000000000000 --- a/code/modules/events/anomaly_flux.dm +++ /dev/null @@ -1,15 +0,0 @@ -/datum/round_event_control/anomaly/anomaly_flux - name = "Anomaly: Hyper-Energetic Flux" - typepath = /datum/round_event/anomaly/anomaly_flux - - min_players = 10 - max_occurrences = 5 - weight = 20 - -/datum/round_event/anomaly/anomaly_flux - startWhen = 10 - announceWhen = 3 - anomaly_path = /obj/effect/anomaly/flux - -/datum/round_event/anomaly/anomaly_flux/announce(fake) - priority_announce("Localized hyper-energetic flux wave detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert", zlevel = impact_area.virtual_z()) diff --git a/code/modules/events/anomaly_grav.dm b/code/modules/events/anomaly_grav.dm deleted file mode 100644 index 27e50dd45c9b..000000000000 --- a/code/modules/events/anomaly_grav.dm +++ /dev/null @@ -1,26 +0,0 @@ -/datum/round_event_control/anomaly/anomaly_grav - name = "Anomaly: Gravitational" - typepath = /datum/round_event/anomaly/anomaly_grav - - max_occurrences = 5 - weight = 25 - -/datum/round_event/anomaly/anomaly_grav - startWhen = 3 - announceWhen = 20 - anomaly_path = /obj/effect/anomaly/grav - -/datum/round_event_control/anomaly/anomaly_grav/high - name = "Anomaly: Gravitational (High Intensity)" - typepath = /datum/round_event/anomaly/anomaly_grav/high - weight = 15 - max_occurrences = 1 - earliest_start = 20 MINUTES - -/datum/round_event/anomaly/anomaly_grav/high - startWhen = 3 - announceWhen = 20 - anomaly_path = /obj/effect/anomaly/grav/high - -/datum/round_event/anomaly/anomaly_grav/announce(fake) - priority_announce("Gravitational anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert", zlevel = impact_area.virtual_z()) diff --git a/code/modules/events/anomaly_pyro.dm b/code/modules/events/anomaly_pyro.dm deleted file mode 100644 index 49d62899e8cc..000000000000 --- a/code/modules/events/anomaly_pyro.dm +++ /dev/null @@ -1,14 +0,0 @@ -/datum/round_event_control/anomaly/anomaly_pyro - name = "Anomaly: Pyroclastic" - typepath = /datum/round_event/anomaly/anomaly_pyro - - max_occurrences = 5 - weight = 15 //WS Edit - Pyroclastic Rebalance - -/datum/round_event/anomaly/anomaly_pyro - startWhen = 3 - announceWhen = 10 - anomaly_path = /obj/effect/anomaly/pyro - -/datum/round_event/anomaly/anomaly_pyro/announce(fake) - priority_announce("Pyroclastic anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert", zlevel = impact_area.virtual_z()) diff --git a/code/modules/events/anomaly_vortex.dm b/code/modules/events/anomaly_vortex.dm deleted file mode 100644 index f14c7d4dc134..000000000000 --- a/code/modules/events/anomaly_vortex.dm +++ /dev/null @@ -1,15 +0,0 @@ -/datum/round_event_control/anomaly/anomaly_vortex - name = "Anomaly: Vortex" - typepath = /datum/round_event/anomaly/anomaly_vortex - - min_players = 20 - max_occurrences = 2 - weight = 10 - -/datum/round_event/anomaly/anomaly_vortex - startWhen = 10 - announceWhen = 3 - anomaly_path = /obj/effect/anomaly/bhole - -/datum/round_event/anomaly/anomaly_vortex/announce(fake) - priority_announce("Localized high-intensity vortex anomaly detected on long range scanners. Expected location: [impact_area.name]", "Anomaly Alert", zlevel = impact_area.virtual_z()) diff --git a/code/modules/food_and_drinks/kitchen_machinery/big_mortar.dm b/code/modules/food_and_drinks/kitchen_machinery/big_mortar.dm index c014e1f29f24..2dbbb4f5cc86 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/big_mortar.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/big_mortar.dm @@ -70,7 +70,7 @@ to_chat(user, "[target] is empty.") return COMPONENT_NO_AFTERATTACK - if(reagents.holder_full()) + if(attacking_item.reagents.holder_full()) to_chat(user, "[attacking_item] is full.") return COMPONENT_NO_AFTERATTACK diff --git a/code/modules/hydroponics/grown/cannabis.dm b/code/modules/hydroponics/grown/cannabis.dm index bd1322a96167..a2ea84f03777 100644 --- a/code/modules/hydroponics/grown/cannabis.dm +++ b/code/modules/hydroponics/grown/cannabis.dm @@ -9,7 +9,7 @@ maturation = 8 potency = 20 growthstages = 1 - growing_icon = 'goon/icons/obj/hydroponics.dmi' + growing_icon = 'icons/obj/hydroponics/growing.dmi' icon_grow = "cannabis-grow" // Uses one growth icons set for all the subtypes icon_dead = "cannabis-dead" // Same for the dead icon genes = list(/datum/plant_gene/trait/repeated_harvest) @@ -82,7 +82,7 @@ /obj/item/reagent_containers/food/snacks/grown/cannabis seed = /obj/item/seeds/cannabis - icon = 'goon/icons/obj/hydroponics.dmi' + icon = 'icons/obj/hydroponics/harvest.dmi' name = "cannabis leaf" desc = "Recently legalized in most galaxies." icon_state = "cannabis" diff --git a/code/modules/jobs/job_exp.dm b/code/modules/jobs/job_exp.dm index 9f997d12ee4e..2184cd3869f0 100644 --- a/code/modules/jobs/job_exp.dm +++ b/code/modules/jobs/job_exp.dm @@ -1,60 +1,50 @@ GLOBAL_LIST_EMPTY(exp_to_update) GLOBAL_PROTECT(exp_to_update) -// Procs -/datum/job/proc/required_playtime_remaining(client/C) - if(!C) - return 0 - if(!CONFIG_GET(flag/use_exp_tracking)) - return 0 - if(!SSdbcore.Connect()) - return 0 - if(!exp_requirements || !exp_type) - return 0 - if(!job_is_xp_locked(src.name)) - return 0 - if(CONFIG_GET(flag/use_exp_restrictions_admin_bypass) && check_rights_for(C,R_ADMIN)) - return 0 - var/isexempt = C.prefs.db_flags & DB_FLAG_EXEMPT - if(isexempt) - return 0 - var/my_exp = C.calc_exp_type(get_exp_req_type()) - var/job_requirement = get_exp_req_amount() - if(my_exp >= job_requirement) - return 0 - else - return (job_requirement - my_exp) - -/datum/job/proc/get_exp_req_amount() - if(name in (GLOB.command_positions | list("AI"))) - var/uerhh = CONFIG_GET(number/use_exp_restrictions_heads_hours) - if(uerhh) - return uerhh * 60 - return exp_requirements - -/datum/job/proc/get_exp_req_type() - if(name in (GLOB.command_positions | list("AI"))) - if(CONFIG_GET(flag/use_exp_restrictions_heads_department) && exp_type_department) - return exp_type_department - return exp_type - -/proc/job_is_xp_locked(jobtitle) - if(!CONFIG_GET(flag/use_exp_restrictions_heads) && (jobtitle in (GLOB.command_positions | list("AI")))) +/datum/map_template/shuttle/proc/has_ship_spawn_playtime(client/Client) + if(!Client) // lol. client deletion return FALSE - if(!CONFIG_GET(flag/use_exp_restrictions_other) && !(jobtitle in (GLOB.command_positions | list("AI")))) + // checks config values, DB status, and client-specific exemptions. + if(Client.is_playtime_restriction_eligible()) + var/player_living_time = Client.get_exp_living(TRUE) // returns value in minutes + var/req_spawn_time = get_req_spawn_minutes() + if(player_living_time < req_spawn_time) + return FALSE + return TRUE + +/datum/map_template/shuttle/proc/has_job_playtime(client/Client, datum/job/Job) + if(!Client) // lol. client deletion return FALSE + // job must be an officer to enforce playtime requirements, AND we need to check + // config values, DB status, and client-specific exceptions. + if(Job.officer && Client.is_playtime_restriction_eligible()) + var/player_living_time = Client.get_exp_living(TRUE) // returns value in minutes + var/req_join_time = get_req_officer_minutes() + if(player_living_time < req_join_time) + return FALSE return TRUE -/client/proc/calc_exp_type(exptype) - var/list/explist = prefs.exp.Copy() - var/amount = 0 - var/list/typelist = GLOB.exp_jobsmap[exptype] - if(!typelist) - return -1 - for(var/job in typelist["titles"]) - if(job in explist) - amount += explist[job] - return amount +/datum/map_template/shuttle/proc/get_req_spawn_minutes() + if(!CONFIG_GET(flag/use_exp_tracking) || !SSdbcore.Connect()) + return 0 + return spawn_time_coeff * CONFIG_GET(number/ship_spawn_base_exp_min) + +/datum/map_template/shuttle/proc/get_req_officer_minutes() + if(!CONFIG_GET(flag/use_exp_tracking) || !SSdbcore.Connect()) + return 0 + return officer_time_coeff * CONFIG_GET(number/officer_join_base_exp_min) + +/client/proc/is_playtime_restriction_eligible() + if(!CONFIG_GET(flag/use_exp_tracking)) + return FALSE // playtime tracking must be enabled + if(!SSdbcore.Connect()) + return FALSE // must have an active DB + + // not actually entirely sure what this is. believe it's a flag for exemption from exp restrictions? sure, whatever + if(prefs.db_flags & DB_FLAG_EXEMPT) + return FALSE + if(CONFIG_GET(flag/use_exp_restrictions_admin_bypass) && check_rights_for(src, R_ADMIN)) + return FALSE // if admin exemption is enabled, and client is an admin, let them through /client/proc/get_exp_living(pure_numeric = FALSE) if(!prefs.exp) diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index 01133eb0f134..550b496344ff 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -27,11 +27,6 @@ //If you have the use_age_restriction_for_jobs config option enabled and the database set up, this option will add a requirement for players to be at least minimal_player_age days old. (meaning they first signed in at least that many days before.) var/minimal_player_age = 0 - var/exp_requirements = 0 - - var/exp_type = "" - var/exp_type_department = "" - /// A link to the relevant wiki related to the job. Ex: "Space_law" would link to wiki.blah/Space_law var/wiki_page = "" diff --git a/code/modules/jobs/job_types/ai.dm b/code/modules/jobs/job_types/ai.dm index 5717edf1d22b..e3df96314769 100644 --- a/code/modules/jobs/job_types/ai.dm +++ b/code/modules/jobs/job_types/ai.dm @@ -4,9 +4,6 @@ total_positions = 1 spawn_positions = 1 minimal_player_age = 30 - exp_requirements = 180 - exp_type = EXP_TYPE_CREW - exp_type_department = EXP_TYPE_SILICON display_order = JOB_DISPLAY_ORDER_AI var/do_special_check = TRUE wiki_page = "AI" //WS Edit - Wikilinks/Warning diff --git a/code/modules/jobs/job_types/assistant.dm b/code/modules/jobs/job_types/assistant.dm index c1e73a823d10..ec472f03cb44 100644 --- a/code/modules/jobs/job_types/assistant.dm +++ b/code/modules/jobs/job_types/assistant.dm @@ -235,7 +235,7 @@ Assistant /datum/outfit/job/assistant/pharma name = "Pharmacology Student" - uniform = /obj/item/clothing/under/rank/medical/chemist/junior_chemist + uniform = /obj/item/clothing/under/rank/medical/ shoes = /obj/item/clothing/shoes/sneakers/white accessory = /obj/item/clothing/neck/scarf/orange l_pocket = /obj/item/pda/medical diff --git a/code/modules/jobs/job_types/atmospheric_technician.dm b/code/modules/jobs/job_types/atmospheric_technician.dm index d5350deb179d..46a5ddef7a5f 100644 --- a/code/modules/jobs/job_types/atmospheric_technician.dm +++ b/code/modules/jobs/job_types/atmospheric_technician.dm @@ -2,8 +2,6 @@ name = "Atmospheric Technician" total_positions = 3 spawn_positions = 2 - exp_requirements = 60 - exp_type = EXP_TYPE_CREW wiki_page = "Guide_to_Atmospherics" //WS Edit - Wikilinks/Warning outfit = /datum/outfit/job/atmos @@ -65,7 +63,7 @@ alt_suit = /obj/item/clothing/suit/hazardvest neck = /obj/item/clothing/neck/tie/light_blue - backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1, /obj/item/storage/belt/utility/atmostech=1) + backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1) //Shiptest /datum/outfit/job/atmos/gec diff --git a/code/modules/jobs/job_types/brig_physician.dm b/code/modules/jobs/job_types/brig_physician.dm index 3f13ed15ad59..d200df298d61 100644 --- a/code/modules/jobs/job_types/brig_physician.dm +++ b/code/modules/jobs/job_types/brig_physician.dm @@ -3,8 +3,6 @@ total_positions = 1 spawn_positions = 1 minimal_player_age = 7 - exp_requirements = 300 - exp_type = EXP_TYPE_CREW wiki_page = "Guide_to_Medicine" //WS Edit - Wikilinks/Warning outfit = /datum/outfit/job/brig_phys @@ -23,7 +21,6 @@ belt = /obj/item/pda/brig_phys ears = /obj/item/radio/headset/headset_medsec/alt uniform = /obj/item/clothing/under/rank/security/brig_phys - alt_uniform = /obj/item/clothing/under/rank/medical/doctor/red shoes = /obj/item/clothing/shoes/sneakers/white glasses = /obj/item/clothing/glasses/hud/health/sunglasses suit = /obj/item/clothing/suit/toggle/labcoat/brig_phys @@ -55,7 +52,6 @@ name = "Medic (Twinkleshine)" gloves = /obj/item/clothing/gloves/color/latex/nitrile/evil - uniform = /obj/item/clothing/under/rank/medical/doctor/red alt_uniform = /obj/item/clothing/under/syndicate/cybersun glasses = /obj/item/clothing/glasses/hud/health belt = /obj/item/storage/belt/medical diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm index f437e42b8b35..f0c1f8c99553 100644 --- a/code/modules/jobs/job_types/captain.dm +++ b/code/modules/jobs/job_types/captain.dm @@ -4,9 +4,6 @@ total_positions = 1 spawn_positions = 1 minimal_player_age = 30 - exp_requirements = 180 - exp_type = EXP_TYPE_CREW - exp_type_department = EXP_TYPE_COMMAND officer = TRUE wiki_page = "Captain" diff --git a/code/modules/jobs/job_types/chaplain.dm b/code/modules/jobs/job_types/chaplain.dm index bb7dbfda1b0b..efb9292353b7 100644 --- a/code/modules/jobs/job_types/chaplain.dm +++ b/code/modules/jobs/job_types/chaplain.dm @@ -142,19 +142,3 @@ name = "Chaplain (Rabbi)" head = /obj/item/clothing/head/kippah l_hand = /obj/item/storage/book/bible/torah - -/datum/outfit/job/chaplain/roumain - name = "Hunter Montagne (Saint-Roumain Militia)" - uniform = /obj/item/clothing/under/suit/roumain - alt_uniform = null - shoes = /obj/item/clothing/shoes/workboots/mining - suit = /obj/item/clothing/suit/armor/hos/roumain/montagne - head = /obj/item/clothing/head/HoS/cowboy/montagne - gloves = null - id = /obj/item/card/id/gold - duffelbag = /obj/item/storage/backpack/cultpack - courierbag = /obj/item/storage/backpack/cultpack - backpack_contents = list( - /obj/item/stamp/chap = 1, - /obj/item/melee/classic_baton/telescopic=1 - ) diff --git a/code/modules/jobs/job_types/chemist.dm b/code/modules/jobs/job_types/chemist.dm index adcaf30bf0c5..6f822cb0bca1 100644 --- a/code/modules/jobs/job_types/chemist.dm +++ b/code/modules/jobs/job_types/chemist.dm @@ -2,8 +2,6 @@ name = "Chemist" total_positions = 2 spawn_positions = 2 - exp_type = EXP_TYPE_CREW - exp_requirements = 60 wiki_page = "Guide_to_Chemistry" //WS Edit - Wikilinks/Warning outfit = /datum/outfit/job/chemist @@ -41,8 +39,6 @@ jobtype = /datum/job/chemist glasses = null - - uniform = /obj/item/clothing/under/rank/medical/chemist/pharmacist alt_uniform = null backpack_contents = list(/obj/item/clothing/glasses/science=1) @@ -51,7 +47,6 @@ name = "Chemist (Pharmacologist)" glasses = null - uniform = /obj/item/clothing/under/rank/medical/chemist/pharmacologist alt_uniform = null suit = /obj/item/clothing/suit/toggle/labcoat/chemist/side @@ -61,7 +56,6 @@ name = "Chemist (Junior Chemist)" glasses = null - uniform = /obj/item/clothing/under/rank/medical/chemist/junior_chemist alt_uniform = null suit = null alt_suit = null @@ -72,7 +66,6 @@ name = "Chemist (Senior Chemist)" glasses = null - uniform = /obj/item/clothing/under/suit/senior_chemist alt_uniform = null shoes = /obj/item/clothing/shoes/laceup suit = /obj/item/clothing/suit/toggle/lawyer/orange @@ -102,8 +95,6 @@ belt = /obj/item/storage/bag/chemistry l_pocket =/obj/item/pda/chemist r_pocket = /obj/item/storage/pill_bottle - uniform = /obj/item/clothing/under/suit/senior_chemist - alt_uniform = /obj/item/clothing/under/rank/medical/chemist/pharmacologist suit = /obj/item/clothing/suit/longcoat/chemist alt_suit = /obj/item/clothing/suit/toggle/labcoat/chemist/side dcoat = /obj/item/clothing/suit/hooded/wintercoat/medical @@ -114,8 +105,6 @@ /datum/outfit/job/chemist/minutemen name = "Chemical Scientist(minutemen)" - uniform = /obj/item/clothing/under/rank/medical/chemist/pharmacologist - alt_uniform = /obj/item/clothing/under/rank/medical/chemist/pharmacologist/skirt suit = /obj/item/clothing/suit/toggle/labcoat/chemist ears = /obj/item/radio/headset/minutemen diff --git a/code/modules/jobs/job_types/chief_engineer.dm b/code/modules/jobs/job_types/chief_engineer.dm index c4591bcbffb9..b13101bd088c 100644 --- a/code/modules/jobs/job_types/chief_engineer.dm +++ b/code/modules/jobs/job_types/chief_engineer.dm @@ -4,9 +4,6 @@ total_positions = 1 spawn_positions = 1 minimal_player_age = 7 - exp_requirements = 180 - exp_type = EXP_TYPE_CREW - exp_type_department = EXP_TYPE_ENGINEERING officer = TRUE wiki_page = "Chief_Engineer" //WS Edit - Wikilinks/Warning @@ -75,7 +72,7 @@ head = /obj/item/clothing/head/hardhat/white gloves = null neck = /obj/item/clothing/neck/tie/green - backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced=1, /obj/item/storage/belt/utility/chief/full=1, /obj/item/clothing/gloves/color/black=1) + backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced=1, /obj/item/clothing/gloves/color/black=1) /datum/outfit/job/ce/gec name = "Chief Engineer (GEC)" @@ -136,3 +133,21 @@ shoes = /obj/item/clothing/shoes/combat gloves = /obj/item/clothing/gloves/combat belt = /obj/item/storage/belt/utility/full + +/datum/outfit/job/ce/minutemen + name = "Foreman (Colonial Minutemen)" + + ears = /obj/item/radio/headset/minutemen/alt + uniform = /obj/item/clothing/under/rank/command/minutemen + alt_uniform = null + suit = /obj/item/clothing/suit/toggle/lawyer/minutemen + alt_suit = null + gloves = /obj/item/clothing/gloves/combat + belt = /obj/item/storage/belt/utility/full + shoes = /obj/item/clothing/shoes/combat + head = /obj/item/clothing/head/cowboy/sec/minutemen + backpack = /obj/item/storage/backpack + backpack_contents = list( + /obj/item/melee/classic_baton/telescopic=1, + /obj/item/modular_computer/tablet/preset/advanced = 1 + ) diff --git a/code/modules/jobs/job_types/chief_medical_officer.dm b/code/modules/jobs/job_types/chief_medical_officer.dm index ddc7f021965a..4ad8cea562a8 100644 --- a/code/modules/jobs/job_types/chief_medical_officer.dm +++ b/code/modules/jobs/job_types/chief_medical_officer.dm @@ -4,9 +4,6 @@ total_positions = 1 spawn_positions = 1 minimal_player_age = 7 - exp_requirements = 180 - exp_type = EXP_TYPE_CREW - exp_type_department = EXP_TYPE_MEDICAL officer = TRUE wiki_page = "Chief_Medical_Officer" @@ -59,7 +56,6 @@ /datum/outfit/job/cmo/medicaldirector name = "Chief Medical Officer (Medical Director)" - uniform = /obj/item/clothing/under/suit/cmo alt_uniform = null shoes = /obj/item/clothing/shoes/laceup suit = /obj/item/clothing/suit/toggle/lawyer/cmo @@ -72,7 +68,7 @@ /datum/outfit/job/cmo/surgeongeneral name = "Chief Medical Officer (Surgeon-General)" - uniform = /obj/item/clothing/under/rank/medical/chief_medical_officer/surgeon_general + uniform = /obj/item/clothing/under/rank/medical/chief_medical_officer alt_uniform = null shoes = /obj/item/clothing/shoes/laceup suit = /obj/item/clothing/suit/toggle/labcoat/cmo diff --git a/code/modules/jobs/job_types/cyborg.dm b/code/modules/jobs/job_types/cyborg.dm index 32b6ce5d8eef..3eddc92c017d 100644 --- a/code/modules/jobs/job_types/cyborg.dm +++ b/code/modules/jobs/job_types/cyborg.dm @@ -4,8 +4,6 @@ total_positions = 0 spawn_positions = 1 //Nodrak minimal_player_age = 21 - exp_requirements = 120 - exp_type = EXP_TYPE_CREW wiki_page = "Cyborg" //WS Edit - Wikilinks/Warning display_order = JOB_DISPLAY_ORDER_CYBORG diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm index ae7400209056..9a263ae85207 100644 --- a/code/modules/jobs/job_types/detective.dm +++ b/code/modules/jobs/job_types/detective.dm @@ -4,8 +4,6 @@ total_positions = 1 spawn_positions = 1 minimal_player_age = 7 - exp_requirements = 300 - exp_type = EXP_TYPE_CREW wiki_page = "Space_Law" //WS Edit - Wikilinks/Warning outfit = /datum/outfit/job/detective diff --git a/code/modules/jobs/job_types/geneticist.dm b/code/modules/jobs/job_types/geneticist.dm index d94c2ba969b4..181109e65c31 100644 --- a/code/modules/jobs/job_types/geneticist.dm +++ b/code/modules/jobs/job_types/geneticist.dm @@ -2,8 +2,6 @@ name = "Geneticist" //WS Edit - More Gen/Sci Split total_positions = 2 spawn_positions = 2 //WS Edit - Gen/Sci Split - exp_type = EXP_TYPE_CREW - exp_requirements = 60 wiki_page = "Guide_to_Genetics" //WS Edit - Wikilinks outfit = /datum/outfit/job/geneticist diff --git a/code/modules/jobs/job_types/head_of_personnel.dm b/code/modules/jobs/job_types/head_of_personnel.dm index 6fd9e219d47e..205d5e57bb94 100644 --- a/code/modules/jobs/job_types/head_of_personnel.dm +++ b/code/modules/jobs/job_types/head_of_personnel.dm @@ -4,11 +4,8 @@ total_positions = 1 spawn_positions = 1 minimal_player_age = 10 - exp_requirements = 180 officer = TRUE wiki_page = "Head_of_Personnel" //WS Edit - Wikilinks/Warning - exp_type = EXP_TYPE_CREW - exp_type_department = EXP_TYPE_SERVICE outfit = /datum/outfit/job/head_of_personnel @@ -25,8 +22,8 @@ ACCESS_MEDICAL, ACCESS_PSYCHOLOGY, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE, ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER, - ACCESS_MECH_MINING, ACCESS_MECH_ENGINE, ACCESS_MECH_SCIENCE, ACCESS_MECH_SECURITY, ACCESS_MECH_MEDICAL, ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION, + ACCESS_MECH_MINING, ACCESS_MECH_ENGINE, ACCESS_MECH_SCIENCE, ACCESS_MECH_SECURITY, ACCESS_MECH_MEDICAL, ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM) display_order = JOB_DISPLAY_ORDER_HEAD_OF_PERSONNEL @@ -57,8 +54,6 @@ /datum/outfit/job/head_of_personnel/pre_equip(mob/living/carbon/human/H) ..() - if(locate(/datum/holiday/ianbirthday) in SSevents.holidays) - undershirt = /datum/sprite_accessory/undershirt/ian /datum/outfit/job/head_of_personnel/nt name = "First Officer (Nanotrasen)" diff --git a/code/modules/jobs/job_types/head_of_security.dm b/code/modules/jobs/job_types/head_of_security.dm index 71ee9987f779..c2c91c204fa4 100644 --- a/code/modules/jobs/job_types/head_of_security.dm +++ b/code/modules/jobs/job_types/head_of_security.dm @@ -4,13 +4,9 @@ total_positions = 1 spawn_positions = 1 minimal_player_age = 14 - exp_requirements = 300 officer = TRUE wiki_page = "Head_of_Security" //WS Edit - Wikilinks/Warning - exp_type = EXP_TYPE_CREW - exp_type_department = EXP_TYPE_SECURITY - outfit = /datum/outfit/job/hos mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) @@ -96,3 +92,38 @@ gloves = /obj/item/clothing/gloves/combat backpack_contents = list(/obj/item/melee/baton/loaded=1) suit_store = null + +/datum/outfit/job/hos/roumain + jobtype = /datum/job/hos/roumain + name = "Hunter Montagne (Saint-Roumain Militia)" + ears = /obj/item/radio/headset/headset_com + uniform = /obj/item/clothing/under/suit/roumain + alt_uniform = null + shoes = /obj/item/clothing/shoes/workboots/mining + suit = /obj/item/clothing/suit/armor/hos/roumain/montagne + alt_suit = null + dcoat = null + head = /obj/item/clothing/head/HoS/cowboy/montagne + gloves = null + id = /obj/item/card/id/silver + belt = null + glasses = null + suit_store = null + r_pocket = null + l_pocket = null + duffelbag = /obj/item/storage/backpack/cultpack + courierbag = /obj/item/storage/backpack/cultpack + backpack = /obj/item/storage/backpack/cultpack + satchel = /obj/item/storage/backpack/cultpack + box = null + implants = null + chameleon_extras = null + backpack_contents = list( + /obj/item/book/manual/srmlore, + /obj/item/stamp/chap = 1, + /obj/item/melee/classic_baton/telescopic=1 + ) + +/datum/job/hos/roumain + outfit = /datum/outfit/job/hos/roumain + mind_traits = null diff --git a/code/modules/jobs/job_types/medical_doctor.dm b/code/modules/jobs/job_types/medical_doctor.dm index 221c29482d7c..f20580ef7b2a 100644 --- a/code/modules/jobs/job_types/medical_doctor.dm +++ b/code/modules/jobs/job_types/medical_doctor.dm @@ -35,7 +35,6 @@ chameleon_extras = /obj/item/gun/syringe -//WS Edit Start - Alt-Job Titles /datum/outfit/job/doctor/surgeon name = "Medical Doctor (Surgeon)" @@ -56,7 +55,6 @@ /datum/outfit/job/doctor/juniordoctor name = "Medical Doctor (Junior Doctor)" - uniform = /obj/item/clothing/under/rank/medical/doctor/junior_doctor alt_uniform = null shoes = /obj/item/clothing/shoes/sneakers/blue suit = null @@ -69,7 +67,7 @@ /datum/outfit/job/doctor/seniordoctor name = "Medical Doctor (Senior Doctor)" - uniform = /obj/item/clothing/under/suit/senior_doctor + uniform = /obj/item/clothing/under/rank/medical/doctor alt_uniform = null shoes = /obj/item/clothing/shoes/laceup suit = /obj/item/clothing/suit/toggle/lawyer/medical @@ -85,7 +83,6 @@ name = "Medical Doctor (Psychiatrist)" uniform = /obj/item/clothing/under/rank/medical/psychiatrist - alt_uniform = /obj/item/clothing/under/rank/medical/psychiatrist/blue shoes = /obj/item/clothing/shoes/laceup suit = null alt_suit = null @@ -93,7 +90,6 @@ suit_store = null backpack_contents = list(/obj/item/clipboard=1, /obj/item/folder/white=1, /obj/item/taperecorder=1) -//WS Edit End - Alt-Job Titles //Shiptest outfits diff --git a/code/modules/jobs/job_types/quartermaster.dm b/code/modules/jobs/job_types/quartermaster.dm index 3ada9c5afa27..515c8d6e8f17 100644 --- a/code/modules/jobs/job_types/quartermaster.dm +++ b/code/modules/jobs/job_types/quartermaster.dm @@ -4,7 +4,6 @@ spawn_positions = 1 wiki_page = "Quartermaster" //WS Edit - Wikilinks/Warning officer = TRUE - exp_type_department = EXP_TYPE_SUPPLY // This is so the jobs menu can work properly outfit = /datum/outfit/job/quartermaster diff --git a/code/modules/jobs/job_types/research_director.dm b/code/modules/jobs/job_types/research_director.dm index 8c070d50437b..2fd7fea06db7 100644 --- a/code/modules/jobs/job_types/research_director.dm +++ b/code/modules/jobs/job_types/research_director.dm @@ -4,9 +4,6 @@ total_positions = 1 spawn_positions = 1 minimal_player_age = 7 - exp_type_department = EXP_TYPE_SCIENCE - exp_requirements = 180 - exp_type = EXP_TYPE_CREW officer = TRUE wiki_page = "Research_Director" //WS Edit - Wikilinks/Warning diff --git a/code/modules/jobs/job_types/roboticist.dm b/code/modules/jobs/job_types/roboticist.dm index f95859a34ab3..dd2cf4f489b5 100644 --- a/code/modules/jobs/job_types/roboticist.dm +++ b/code/modules/jobs/job_types/roboticist.dm @@ -2,8 +2,6 @@ name = "Roboticist" total_positions = 2 spawn_positions = 2 - exp_requirements = 60 - exp_type = EXP_TYPE_CREW wiki_page = "Guide_to_Robotics" //WS Edit - Wikilinks/Warning outfit = /datum/outfit/job/roboticist @@ -79,8 +77,6 @@ dcoat = null neck = /obj/item/clothing/neck/tie/black - backpack_contents = list(/obj/item/storage/belt/utility/full=1) - //Shiptest Outfits /datum/outfit/job/roboticist/technician diff --git a/code/modules/jobs/job_types/scientist.dm b/code/modules/jobs/job_types/scientist.dm index ca706ed348f1..391db06c289a 100644 --- a/code/modules/jobs/job_types/scientist.dm +++ b/code/modules/jobs/job_types/scientist.dm @@ -2,8 +2,6 @@ name = "Scientist" total_positions = 5 spawn_positions = 3 - exp_requirements = 60 - exp_type = EXP_TYPE_CREW wiki_page = "Scientist" //WS Edit - Wikilinks/Warning outfit = /datum/outfit/job/scientist @@ -82,3 +80,9 @@ alt_suit = /obj/item/clothing/suit/toggle/labcoat/science dcoat = null neck = /obj/item/clothing/neck/tie/purple + +/datum/outfit/job/scientist/minutemen + name = "Scientist (Minutemen)" + + uniform = /obj/item/clothing/under/rank/security/officer/minutemen + backpack = /obj/item/storage/backpack/security/cmm diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm index c2f8edd048c7..96a132bf75f6 100644 --- a/code/modules/jobs/job_types/security_officer.dm +++ b/code/modules/jobs/job_types/security_officer.dm @@ -4,8 +4,6 @@ total_positions = 5 //Handled in /datum/controller/occupations/proc/setup_officer_positions() spawn_positions = 5 //Handled in /datum/controller/occupations/proc/setup_officer_positions() minimal_player_age = 7 - exp_requirements = 300 - exp_type = EXP_TYPE_CREW wiki_page = "Space_Law" //WS Edit - Wikilinks/Warning outfit = /datum/outfit/job/security diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm index c1abe240346e..9c4816533157 100644 --- a/code/modules/jobs/job_types/shaft_miner.dm +++ b/code/modules/jobs/job_types/shaft_miner.dm @@ -56,8 +56,8 @@ /obj/item/kitchen/knife/combat/survival=1, /obj/item/mining_voucher=1, /obj/item/mining_scanner=1, - /obj/item/gun/energy/kinetic_accelerator=1,\ /obj/item/stack/marker_beacon/ten=1) + belt = /obj/item/gun/energy/kinetic_accelerator /datum/outfit/job/miner/equipped/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) ..() @@ -94,6 +94,13 @@ satchel = /obj/item/storage/backpack/satchel/tox courierbag = /obj/item/storage/backpack/messenger/tox +/datum/outfit/job/miner/syndicate/gorlex + name = "Wrecker (Gorlex Marauders)" + + uniform = /obj/item/clothing/under/syndicate/gorlex + shoes = /obj/item/clothing/shoes/workboots + ears = /obj/item/radio/headset/alt + /datum/outfit/job/miner/syndicate/sbc name = "Miner (Twinkleshine)" @@ -139,8 +146,8 @@ /obj/item/mining_scanner=1, /obj/item/reagent_containers/hypospray/medipen/survival, /obj/item/reagent_containers/hypospray/medipen/survival,\ - /obj/item/gun/energy/kinetic_accelerator/old=1,\ /obj/item/stack/marker_beacon/ten=1) + belt = /obj/item/gun/energy/kinetic_accelerator/old /datum/outfit/job/miner/righand name = "Righand" @@ -184,3 +191,14 @@ head = /obj/item/clothing/head/hardhat/orange suit = /obj/item/clothing/suit/toggle/industrial suit_store = /obj/item/tank/internals/emergency_oxygen/double + +/datum/outfit/job/miner/hazard/minutemen + name = "Industrial Miner (Minutemen)" + gloves = /obj/item/clothing/gloves/color/black + shoes = /obj/item/clothing/shoes/combat + backpack_contents = list( + /obj/item/flashlight/seclite=1, + /obj/item/stack/marker_beacon/ten=1, + /obj/item/weldingtool=1 + ) + diff --git a/code/modules/jobs/job_types/solgov_rep.dm b/code/modules/jobs/job_types/solgov_rep.dm index afeb2eae4ce2..a7c185624763 100644 --- a/code/modules/jobs/job_types/solgov_rep.dm +++ b/code/modules/jobs/job_types/solgov_rep.dm @@ -8,10 +8,7 @@ SolGov Representative spawn_positions = 2 wiki_page = "Government_Attaché" minimal_player_age = 7 - exp_requirements = 180 officer = TRUE - exp_type = EXP_TYPE_CREW - exp_type_department = EXP_TYPE_SECURITY access = list(ACCESS_LAWYER, ACCESS_COURT, ACCESS_SECURITY, ACCESS_BRIG, ACCESS_SEC_DOORS, ACCESS_WEAPONS, ACCESS_HEADS, ACCESS_MAINT_TUNNELS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_SOLGOV) diff --git a/code/modules/jobs/job_types/station_engineer.dm b/code/modules/jobs/job_types/station_engineer.dm index 303187683e21..827ff2abe9f9 100644 --- a/code/modules/jobs/job_types/station_engineer.dm +++ b/code/modules/jobs/job_types/station_engineer.dm @@ -2,8 +2,6 @@ name = "Station Engineer" total_positions = 5 spawn_positions = 5 - exp_requirements = 60 - exp_type = EXP_TYPE_CREW wiki_page = "Station_Engineer" //WS Edit - Wikilinks/Warning outfit = /datum/outfit/job/engineer @@ -100,7 +98,7 @@ shoes = /obj/item/clothing/shoes/laceup head = /obj/item/clothing/head/hardhat neck = /obj/item/clothing/neck/tie/orange - backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1, /obj/item/storage/belt/utility/full/engi=1) + backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1) /datum/outfit/job/engineer/telecomsspecialist name = "Station Engineer (Telecommunications Specialist)" diff --git a/code/modules/jobs/job_types/virologist.dm b/code/modules/jobs/job_types/virologist.dm index 23f6a77eed19..85f038e1b476 100644 --- a/code/modules/jobs/job_types/virologist.dm +++ b/code/modules/jobs/job_types/virologist.dm @@ -2,8 +2,6 @@ name = "Virologist" total_positions = 1 spawn_positions = 1 - exp_type = EXP_TYPE_CREW - exp_requirements = 60 wiki_page = "Infections" //WS Edit - Wikilinks/Warning outfit = /datum/outfit/job/virologist @@ -38,7 +36,6 @@ /datum/outfit/job/virologist/pathologist name = "Virologist (Pathologist)" - uniform = /obj/item/clothing/under/suit/pathologist alt_uniform = null shoes = /obj/item/clothing/shoes/laceup neck = /obj/item/clothing/neck/tie/green diff --git a/code/modules/jobs/job_types/warden.dm b/code/modules/jobs/job_types/warden.dm index 2dd395e80ae3..1167989d1afd 100644 --- a/code/modules/jobs/job_types/warden.dm +++ b/code/modules/jobs/job_types/warden.dm @@ -4,8 +4,6 @@ total_positions = 1 spawn_positions = 1 minimal_player_age = 7 - exp_requirements = 300 - exp_type = EXP_TYPE_CREW officer = TRUE wiki_page = "Space_Law" //WS Edit - Wikilinks/Warning diff --git a/code/modules/jobs/jobs.dm b/code/modules/jobs/jobs.dm index 810e18b49210..d1b930174490 100644 --- a/code/modules/jobs/jobs.dm +++ b/code/modules/jobs/jobs.dm @@ -65,7 +65,8 @@ GLOBAL_LIST_INIT(nonhuman_positions, list( "Cyborg", ROLE_PAI)) -// job categories for rendering the late join menu +// Job categories for rendering the late join menu. +// Currently unused. GLOBAL_LIST_INIT(position_categories, list( EXP_TYPE_COMMAND = list("jobs" = command_positions, "color" = "#ccccff"), EXP_TYPE_ENGINEERING = list("jobs" = engineering_positions, "color" = "#ffeeaa"), @@ -77,6 +78,8 @@ GLOBAL_LIST_INIT(position_categories, list( EXP_TYPE_SECURITY = list("jobs" = security_positions, "color" = "#ffdddd") )) +// Previously used to lookup the cumulative amount of time spent in a department. +// Currently unused. GLOBAL_LIST_INIT(exp_jobsmap, list( EXP_TYPE_CREW = list("titles" = command_positions | engineering_positions | medical_positions | science_positions | supply_positions | security_positions | service_positions | list("AI","Cyborg")), // crew positions EXP_TYPE_COMMAND = list("titles" = command_positions), @@ -89,12 +92,15 @@ GLOBAL_LIST_INIT(exp_jobsmap, list( EXP_TYPE_SERVICE = list("titles" = service_positions) )) +// Special, unusual cases for experience tracking. +// Occasionally used by some gamemode code. GLOBAL_LIST_INIT(exp_specialmap, list( EXP_TYPE_LIVING = list(), // all living mobs EXP_TYPE_ANTAG = list(), EXP_TYPE_SPECIAL = list("Lifebringer","Ash Walker","Exile","Servant Golem","Free Golem","Hermit","Translocated Vet","Escaped Prisoner","Hotel Staff","SuperFriend","Space Syndicate","Ancient Crew","Space Doctor","Space Bartender","Beach Bum","Skeleton","Zombie","Space Bar Patron","Lavaland Syndicate","Ghost Role"), // Ghost roles EXP_TYPE_GHOST = list() // dead people, observers )) + GLOBAL_PROTECT(exp_jobsmap) GLOBAL_PROTECT(exp_specialmap) diff --git a/code/modules/keybindings/setup.dm b/code/modules/keybindings/setup.dm index b90c57b6b601..323387f721fe 100644 --- a/code/modules/keybindings/setup.dm +++ b/code/modules/keybindings/setup.dm @@ -46,8 +46,8 @@ window.set_mouse_macro() if(prefs?.hotkeys)//tg put hotkeys at the client level, idk why, we still have it on prefs so I'm just gonna nullcheck this. - winset(src, null, "map.focus=true input.background-color=[COLOR_INPUT_DISABLED] mainwindow.macro=default") + winset(src, null, "map.focus=true mainwindow.macro=default") else - winset(src, null, "input.focus=true input.background-color=[COLOR_INPUT_ENABLED] mainwindow.macro=old_default") + winset(src, null, "input.focus=true mainwindow.macro=old_default") update_special_keybinds() diff --git a/code/modules/language/dwarven.dm b/code/modules/language/dwarven.dm deleted file mode 100644 index 3dcd2193e3ea..000000000000 --- a/code/modules/language/dwarven.dm +++ /dev/null @@ -1,16 +0,0 @@ -// The language of the Dwarves, based on Dwarf Fortress - -/datum/language/dwarf - name = "Dwenmar" - desc = "A conlang forged by dwarves for internal communication. Slowly transforming into a dead language. " - speech_verb = "bellows" - whisper_verb = "mutters" - sing_verb = "sings" - space_chance = 100 // Each 'syllable' is its own word - key = "D" - flags = TONGUELESS_SPEECH | LANGUAGE_HIDE_ICON_IF_NOT_UNDERSTOOD - - syllables = list("kulet", "alak", "bidok", "nicol", "anam", "gatal", "mabdug", "zustash", "sedil", "ustos", "emr", "izeg", "beming", "gost", "ntak", "tosid", "feb", "berim", "ibruk", "ermis", "thoth", "thatthil", "gistang", "libash", "lakish", "asdos", "roder", "nel", "biban", "ugog", "ish", "robek", "olmul", "nokzam", "emuth", "fer", "uvel", "dolush", "ag^k", "ucat", "ng rak", "enir", "ugath", "lisig", "etg", "erong", "osed", "lanlar", "udir", "tarmid", "s krith", "nural", "bugsud", "okag", "nazush", "nashon", "ftrid", "en''r", "dstik", "kogan", "ingish", "dudgoth", "stalk*b", "themor", "murak", "altth", "osod", "thcekut", "cog", "selsten", "egdoth", "othsin", "idek", "st", "suthmam", "im", "okab", "onlnl", "gasol", "tegir", "nam...sh", "noval", "shalig", "shin", "lek", ",,kim", "kfkdal", "stum", "alud", "olom", "%lot", "rozsed", "thos", "okon", "n 0)) @@ -278,17 +278,17 @@ return JOB_UNAVAILABLE_GENERIC if(!job.player_old_enough(client)) return JOB_UNAVAILABLE_ACCOUNTAGE - if(job.required_playtime_remaining(client)) + if(check_playtime && !ship.source_template.has_job_playtime(client, job)) return JOB_UNAVAILABLE_PLAYTIME if(latejoin && !job.special_check_latejoin(client)) return JOB_UNAVAILABLE_GENERIC return JOB_AVAILABLE -/mob/dead/new_player/proc/AttemptLateSpawn(datum/job/job, datum/overmap/ship/controlled/ship) +/mob/dead/new_player/proc/AttemptLateSpawn(datum/job/job, datum/overmap/ship/controlled/ship, check_playtime = TRUE) if(auth_check) return - var/error = IsJobUnavailable(job, ship) + var/error = IsJobUnavailable(job, ship, check_playtime) if(error != JOB_AVAILABLE) alert(src, get_job_unavailable_error_message(error, job)) return FALSE diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index 1aea015891a5..cc5a69dd095f 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -12,13 +12,17 @@ if(randomise[RANDOM_AGE] || randomise[RANDOM_AGE_ANTAG] && antag_override) age = rand(AGE_MIN,AGE_MAX) if(randomise[RANDOM_UNDERWEAR]) - underwear = random_underwear(gender) + underwear = random_underwear() if(randomise[RANDOM_UNDERWEAR_COLOR]) - underwear_color = random_short_color() + underwear_color = random_color() if(randomise[RANDOM_UNDERSHIRT]) undershirt = random_undershirt(gender) + if(randomise[RANDOM_UNDERSHIRT_COLOR]) + undershirt_color = random_short_color() if(randomise[RANDOM_SOCKS]) socks = random_socks() + if(randomise[RANDOM_SOCKS_COLOR]) + socks_color = random_short_color() if(randomise[RANDOM_BACKPACK]) backpack = random_backpack() if(randomise[RANDOM_JUMPSUIT_STYLE]) @@ -30,9 +34,9 @@ if(randomise[RANDOM_FACIAL_HAIRSTYLE]) facial_hairstyle = random_facial_hairstyle(gender) if(randomise[RANDOM_HAIR_COLOR]) - hair_color = random_short_color() + hair_color = random_color_natural() if(randomise[RANDOM_FACIAL_HAIR_COLOR]) - facial_hair_color = random_short_color() + facial_hair_color = random_color_natural() if(randomise[RANDOM_SKIN_TONE]) skin_tone = random_skin_tone() if(randomise[RANDOM_EYE_COLOR]) diff --git a/code/modules/mob/dead/new_player/ship_select.dm b/code/modules/mob/dead/new_player/ship_select.dm index c3d7b500a590..845a055ed141 100644 --- a/code/modules/mob/dead/new_player/ship_select.dm +++ b/code/modules/mob/dead/new_player/ship_select.dm @@ -58,11 +58,11 @@ ui.close() var/datum/job/selected_job = locate(params["job"]) in target.job_slots + // Attempts the spawn itself. This checks for playtime requirements. if(!spawnee.AttemptLateSpawn(selected_job, target)) to_chat(spawnee, "Unable to spawn on ship!") spawnee.new_player_panel() - if("buy") if(is_banned_from(spawnee.ckey, "Ship Purchasing")) to_chat(spawnee, "You are banned from purchasing ships!") @@ -70,12 +70,27 @@ ui.close() return - ui.close() var/datum/map_template/shuttle/template = SSmapping.ship_purchase_list[params["name"]] + if(!SSovermap.player_ship_spawn_allowed()) + to_chat(spawnee, "No more ships may be spawned at this time!") + return if(!template.enabled) to_chat(spawnee, "This ship is not currently available for purchase!") - spawnee.new_player_panel() return + if(!template.has_ship_spawn_playtime(spawnee.client)) + to_chat(spawnee, "You do not have enough playtime to spawn this ship!") + return + + var/num_ships_with_template = 0 + for(var/datum/overmap/ship/controlled/Ship as anything in SSovermap.controlled_ships) + if(template == Ship.source_template) + num_ships_with_template += 1 + if(num_ships_with_template >= template.limit) + to_chat(spawnee, "There are already [num_ships_with_template] ships of this type; you cannot spawn more!") + return + + ui.close() + to_chat(spawnee, "Your [template.name] is being prepared. Please be patient!") var/datum/overmap/ship/controlled/target = new(SSovermap.get_unused_overmap_square(), template) if(!target?.shuttle_port) @@ -83,15 +98,28 @@ spawnee.new_player_panel() return SSblackbox.record_feedback("tally", "ship_purchased", 1, template.name) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - if(!spawnee.AttemptLateSpawn(target.job_slots[1], target)) //Try to spawn as the first listed job in the job slots (usually captain) + // Try to spawn as the first listed job in the job slots (usually captain) + // Playtime checks are overridden, to ensure the player gets to join the ship they spawned. + if(!spawnee.AttemptLateSpawn(target.job_slots[1], target, FALSE)) to_chat(spawnee, "Ship spawned, but you were unable to be spawned. You can likely try to spawn in the ship through joining normally, but if not, please contact an admin.") spawnee.new_player_panel() /datum/ship_select/ui_static_data(mob/user) + // tracks the number of existing ships of each template type so that their unavailability for purchase can be communicated to the user + var/list/template_num_lookup = list() + . = list() .["ships"] = list() + .["shipSpawnAllowed"] = SSovermap.player_ship_spawn_allowed() .["purchaseBanned"] = is_banned_from(user.ckey, "Ship Purchasing") + .["playMin"] = user.client ? user.client.get_exp_living(TRUE) : 0 + for(var/datum/overmap/ship/controlled/S as anything in SSovermap.controlled_ships) + if(S.source_template) + if(!template_num_lookup[S.source_template]) + template_num_lookup[S.source_template] = 1 + else + template_num_lookup[S.source_template] += 1 if(!S.is_join_option()) continue @@ -103,12 +131,15 @@ ship_jobs += list(list( "name" = job, "slots" = slots, - "ref" = REF(job) + "minTime" = job.officer ? S.source_template.get_req_officer_minutes() : 0, + "ref" = REF(job), )) var/list/ship_data = list( "name" = S.name, "class" = S.source_template.short_name, + "desc" = S.source_template.description, + "tags" = S.source_template.tags, "memo" = S.memo, "jobs" = ship_jobs, "manifest" = S.manifest, @@ -126,6 +157,10 @@ var/list/ship_data = list( "name" = T.name, "desc" = T.description, - "crewCount" = length(T.job_slots) + "tags" = T.tags, + "crewCount" = length(T.job_slots), + "limit" = T.limit, + "curNum" = template_num_lookup[T] || 0, + "minTime" = T.get_req_spawn_minutes(), ) .["templates"] += list(ship_data) diff --git a/code/modules/mob/dead/new_player/sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories.dm deleted file mode 100644 index 37ffd23cc2ba..000000000000 --- a/code/modules/mob/dead/new_player/sprite_accessories.dm +++ /dev/null @@ -1,2971 +0,0 @@ -/* - - Hello and welcome to sprite_accessories: For sprite accessories, such as hair, - facial hair, and possibly tattoos and stuff somewhere along the line. This file is - intended to be friendly for people with little to no actual coding experience. - The process of adding in new hairstyles has been made pain-free and easy to do. - Enjoy! - Doohl - - - Notice: This all gets automatically compiled in a list in dna.dm, so you do not - have to define any UI values for sprite accessories manually for hair and facial - hair. Just add in new hair types and the game will naturally adapt. - - !!WARNING!!: changing existing hair information can be VERY hazardous to savefiles, - to the point where you may completely corrupt a server's savefiles. Please refrain - from doing this unless you absolutely know what you are doing, and have defined a - conversion in savefile.dm -*/ -/proc/init_sprite_accessory_subtypes(prototype, list/L, list/male, list/female, roundstart = FALSE)//Roundstart argument builds a specific list for roundstart parts where some parts may be locked - if(!istype(L)) - L = list() - if(!istype(male)) - male = list() - if(!istype(female)) - female = list() - - for(var/path in subtypesof(prototype)) - if(roundstart) - var/datum/sprite_accessory/P = path - if(initial(P.locked)) - continue - var/datum/sprite_accessory/D = new path() - - if(D.icon_state) - L[D.name] = D - else - L += D.name - - switch(D.gender) - if(MALE) - male += D.name - if(FEMALE) - female += D.name - else - male += D.name - female += D.name - return L - -/datum/sprite_accessory - var/icon //the icon file the accessory is located in - var/icon_state //the icon_state of the accessory - var/name //the preview name of the accessory - var/gender = NEUTER //Determines if the accessory will be skipped or included in random hair generations - var/gender_specific //Something that can be worn by either gender, but looks different on each - var/use_static //determines if the accessory will be skipped by color preferences - var/color_src = MUTCOLORS //Currently only used by mutantparts so don't worry about hair and stuff. This is the source that this accessory will get its color from. Default is MUTCOLOR, but can also be HAIR, FACEHAIR, EYECOLOR and 0 if none. - var/hasinner //Decides if this sprite has an "inner" part, such as the fleshy parts on ears. - var/locked = FALSE //Is this part locked from roundstart selection? Used for parts that apply effects - var/dimension_x = 32 - var/dimension_y = 32 - var/center = FALSE //Should we center the sprite? - var/limbs_id // The limbs id supplied for full-body replacing features. - var/image_alpha = 255 // The alpha for the accessory to use. - -////////////////////// -// Hair Definitions // -////////////////////// -/datum/sprite_accessory/hair - icon = 'icons/mob/human_face.dmi' // default icon for all hairs - - // please make sure they're sorted alphabetically and, where needed, categorized - // try to capitalize the names please~ - // try to spell - // you do not need to define _s or _l sub-states, game automatically does this for you - -/datum/sprite_accessory/hair/afro - name = "Afro" - icon_state = "hair_afro" - -/datum/sprite_accessory/hair/afro2 - name = "Afro 2" - icon_state = "hair_afro2" - -/datum/sprite_accessory/hair/afro_large - name = "Afro (Large)" - icon_state = "hair_bigafro" - -/datum/sprite_accessory/hair/antenna - name = "Ahoge" - icon_state = "hair_antenna" - -/datum/sprite_accessory/hair/bald - name = "Bald" - icon_state = null - -/datum/sprite_accessory/hair/balding - name = "Balding Hair" - icon_state = "hair_e" - -/datum/sprite_accessory/hair/bedhead - name = "Bedhead" - icon_state = "hair_bedhead" - -/datum/sprite_accessory/hair/bedhead2 - name = "Bedhead 2" - icon_state = "hair_bedheadv2" - -/datum/sprite_accessory/hair/bedhead3 - name = "Bedhead 3" - icon_state = "hair_bedheadv3" - -/datum/sprite_accessory/hair/bedheadlong - name = "Long Bedhead" - icon_state = "hair_long_bedhead" - -/datum/sprite_accessory/hair/bedheadfloorlength - name = "Floorlength Bedhead" - icon_state = "hair_floorlength_bedhead" - -/datum/sprite_accessory/hair/beehive - name = "Beehive" - icon_state = "hair_beehive" - -/datum/sprite_accessory/hair/beehive2 - name = "Beehive 2" - icon_state = "hair_beehivev2" - -/datum/sprite_accessory/hair/bob - name = "Bob Hair" - icon_state = "hair_bob" - -/datum/sprite_accessory/hair/bob2 - name = "Bob Hair 2" - icon_state = "hair_bob2" - -/datum/sprite_accessory/hair/bob3 - name = "Bob Hair 3" - icon_state = "hair_bobcut" - -/datum/sprite_accessory/hair/bob4 - name = "Bob Hair 4" - icon_state = "hair_bob4" - -/datum/sprite_accessory/hair/bobcurl - name = "Bobcurl" - icon_state = "hair_bobcurl" - -/datum/sprite_accessory/hair/boddicker - name = "Boddicker" - icon_state = "hair_boddicker" - -/datum/sprite_accessory/hair/bowlcut - name = "Bowlcut" - icon_state = "hair_bowlcut" - -/datum/sprite_accessory/hair/bowlcut2 - name = "Bowlcut 2" - icon_state = "hair_bowlcut2" - -/datum/sprite_accessory/hair/braid - name = "Braid (Floorlength)" - icon_state = "hair_braid" - -/datum/sprite_accessory/hair/braided - name = "Braided" - icon_state = "hair_braided" - -/datum/sprite_accessory/hair/front_braid - name = "Braided Front" - icon_state = "hair_braidfront" - -/datum/sprite_accessory/hair/not_floorlength_braid - name = "Braid (High)" - icon_state = "hair_braid2" - -/datum/sprite_accessory/hair/lowbraid - name = "Braid (Low)" - icon_state = "hair_hbraid" - -/datum/sprite_accessory/hair/shortbraid - name = "Braid (Short)" - icon_state = "hair_shortbraid" - -/datum/sprite_accessory/hair/braidtail - name = "Braided Tail" - icon_state = "hair_braidtail" - -/datum/sprite_accessory/hair/bun - name = "Bun Head" - icon_state = "hair_bun" - -/datum/sprite_accessory/hair/bun2 - name = "Bun Head 2" - icon_state = "hair_bunhead2" - -/datum/sprite_accessory/hair/bun3 - name = "Bun Head 3" - icon_state = "hair_bun3" - -/datum/sprite_accessory/hair/largebun - name = "Bun (Large)" - icon_state = "hair_largebun" - -/datum/sprite_accessory/hair/manbun - name = "Bun (Manbun)" - icon_state = "hair_manbun" - -/datum/sprite_accessory/hair/tightbun - name = "Bun (Tight)" - icon_state = "hair_tightbun" - -/datum/sprite_accessory/hair/business - name = "Business Hair" - icon_state = "hair_business" - -/datum/sprite_accessory/hair/business2 - name = "Business Hair 2" - icon_state = "hair_business2" - -/datum/sprite_accessory/hair/business3 - name = "Business Hair 3" - icon_state = "hair_business3" - -/datum/sprite_accessory/hair/business4 - name = "Business Hair 4" - icon_state = "hair_business4" - -/datum/sprite_accessory/hair/buzz - name = "Buzzcut" - icon_state = "hair_buzzcut" - -/datum/sprite_accessory/hair/cia - name = "CIA" - icon_state = "hair_cia" - -/datum/sprite_accessory/hair/coffeehouse - name = "Coffee House" - icon_state = "hair_coffeehouse" - -/datum/sprite_accessory/hair/combover - name = "Combover" - icon_state = "hair_combover" - -/datum/sprite_accessory/hair/cornrows1 - name = "Cornrows" - icon_state = "hair_cornrows" - -/datum/sprite_accessory/hair/cornrows2 - name = "Cornrows 2" - icon_state = "hair_cornrows2" - -/datum/sprite_accessory/hair/cornrowbun - name = "Cornrow Bun" - icon_state = "hair_cornrowbun" - -/datum/sprite_accessory/hair/cornrowbraid - name = "Cornrow Braid" - icon_state = "hair_cornrowbraid" - -/datum/sprite_accessory/hair/cornrowdualtail - name = "Cornrow Tail" - icon_state = "hair_cornrowtail" - -/datum/sprite_accessory/hair/crew - name = "Crewcut" - icon_state = "hair_crewcut" - -/datum/sprite_accessory/hair/curls - name = "Curls" - icon_state = "hair_curls" - -/datum/sprite_accessory/hair/cut - name = "Cut Hair" - icon_state = "hair_c" - -/datum/sprite_accessory/hair/dandpompadour - name = "Dandy Pompadour" - icon_state = "hair_dandypompadour" - -/datum/sprite_accessory/hair/devillock - name = "Devil Lock" - icon_state = "hair_devilock" - -/datum/sprite_accessory/hair/dolorosa - name = "Dolorosa" - icon_state = "hair_dolorosa" - -/datum/sprite_accessory/hair/double - name = "Double" - icon_state = "hair_double" - -/datum/sprite_accessory/hair/doublebun - name = "Double Bun" - icon_state = "hair_doublebun" - -/datum/sprite_accessory/hair/dreadlocks - name = "Dreadlocks" - icon_state = "hair_dreads" - -/datum/sprite_accessory/hair/drillhair - name = "Drillruru" - icon_state = "hair_drillruru" - -/datum/sprite_accessory/hair/drillhairextended - name = "Drill Hair (Extended)" - icon_state = "hair_drillhairextended" - -/datum/sprite_accessory/hair/egg - name = "Egg" - icon_state = "hair_egg" - -/datum/sprite_accessory/hair/eight - name = "Eight" - icon_state = "hair_eight" - -/datum/sprite_accessory/hair/emo - name = "Emo" - icon_state = "hair_emo" - -/datum/sprite_accessory/hair/emofrine - name = "Emo Fringe" - icon_state = "hair_emofringe" - -/datum/sprite_accessory/hair/nofade - name = "Fade (None)" - icon_state = "hair_nofade" - -/datum/sprite_accessory/hair/highfade - name = "Fade (High)" - icon_state = "hair_highfade" - -/datum/sprite_accessory/hair/medfade - name = "Fade (Medium)" - icon_state = "hair_medfade" - -/datum/sprite_accessory/hair/lowfade - name = "Fade (Low)" - icon_state = "hair_lowfade" - -/datum/sprite_accessory/hair/baldfade - name = "Fade (Bald)" - icon_state = "hair_baldfade" - -/datum/sprite_accessory/hair/feather - name = "Feather" - icon_state = "hair_feather" - -/datum/sprite_accessory/hair/father - name = "Father" - icon_state = "hair_father" - -/datum/sprite_accessory/hair/sargeant - name = "Flat Top" - icon_state = "hair_sargeant" - -/datum/sprite_accessory/hair/flair - name = "Flair" - icon_state = "hair_flair" - -/datum/sprite_accessory/hair/bigflattop - name = "Flat Top (Big)" - icon_state = "hair_bigflattop" - -/datum/sprite_accessory/hair/flow_hair - name = "Flow Hair" - icon_state = "hair_f" - -/datum/sprite_accessory/hair/gelled - name = "Gelled Back" - icon_state = "hair_gelled" - -/datum/sprite_accessory/hair/gentle - name = "Gentle" - icon_state = "hair_gentle" - -/datum/sprite_accessory/hair/halfbang - name = "Half-banged Hair" - icon_state = "hair_halfbang" - -/datum/sprite_accessory/hair/halfbang2 - name = "Half-banged Hair 2" - icon_state = "hair_halfbang2" - -/datum/sprite_accessory/hair/halfshaved - name = "Half-shaved" - icon_state = "hair_halfshaved" - -/datum/sprite_accessory/hair/harley - name = "Harley" - icon_state = "hair_harley" - -/datum/sprite_accessory/hair/hedgehog - name = "Hedgehog Hair" - icon_state = "hair_hedgehog" - -/datum/sprite_accessory/hair/himecut - name = "Hime Cut" - icon_state = "hair_himecut" - -/datum/sprite_accessory/hair/himecut2 - name = "Hime Cut 2" - icon_state = "hair_himecut2" - -/datum/sprite_accessory/hair/shorthime - name = "Hime Cut (Short)" - icon_state = "hair_shorthime" - -/datum/sprite_accessory/hair/himeup - name = "Hime Updo" - icon_state = "hair_himeup" - -/datum/sprite_accessory/hair/hitop - name = "Hitop" - icon_state = "hair_hitop" - -/datum/sprite_accessory/hair/jade - name = "Jade" - icon_state = "hair_jade" - -/datum/sprite_accessory/hair/jensen - name = "Jensen Hair" - icon_state = "hair_jensen" - -/datum/sprite_accessory/hair/Joestar - name = "Joestar" - icon_state = "hair_joestar" - -/datum/sprite_accessory/hair/justice - name = "Justice" - icon_state = "hair_justice" - -/datum/sprite_accessory/hair/keanu - name = "Keanu Hair" - icon_state = "hair_keanu" - -/datum/sprite_accessory/hair/kusangi - name = "Kusanagi Hair" - icon_state = "hair_kusanagi" - -/datum/sprite_accessory/hair/long - name = "Long Hair 1" - icon_state = "hair_long" - -/datum/sprite_accessory/hair/long2 - name = "Long Hair 2" - icon_state = "hair_long2" - -/datum/sprite_accessory/hair/long3 - name = "Long Hair 3" - icon_state = "hair_long3" - -/datum/sprite_accessory/hair/long_over_eye - name = "Long Over Eye" - icon_state = "hair_longovereye" - -/datum/sprite_accessory/hair/longbangs - name = "Long Bangs" - icon_state = "hair_lbangs" - -/datum/sprite_accessory/hair/longemo - name = "Long Emo" - icon_state = "hair_longemo" - -/datum/sprite_accessory/hair/longfringe - name = "Long Fringe" - icon_state = "hair_longfringe" - -/datum/sprite_accessory/hair/sidepartlongalt - name = "Long Side Part" - icon_state = "hair_longsidepart" - -/datum/sprite_accessory/hair/manime - name = "Manime" - icon_state = "hair_manime" - -/datum/sprite_accessory/hair/megaeyebrows - name = "Mega Eyebrows" - icon_state = "hair_megaeyebrows" - -/datum/sprite_accessory/hair/meow - name = "Meow" - icon_state = "hair_meow" - -/datum/sprite_accessory/hair/messy - name = "Messy" - icon_state = "hair_messy" - -/datum/sprite_accessory/hair/miracles - name = "Miracles" - icon_state = "hair_miracles" - -/datum/sprite_accessory/hair/modern - name = "Modern" - icon_state = "hair_modern" - -/datum/sprite_accessory/hair/mohawk - name = "Mohawk" - icon_state = "hair_d" - -/datum/sprite_accessory/hair/nitori - name = "Nitori" - icon_state = "hair_nitori" - -/datum/sprite_accessory/hair/reversemohawk - name = "Mohawk (Reverse)" - icon_state = "hair_reversemohawk" - -/datum/sprite_accessory/hair/shavedmohawk - name = "Mohawk (Shaved)" - icon_state = "hair_shavedmohawk" - -/datum/sprite_accessory/hair/unshavenmohawk - name = "Mohawk (Unshaven)" - icon_state = "hair_unshaven_mohawk" - -/datum/sprite_accessory/hair/mulder - name = "Mulder" - icon_state = "hair_mulder" - -/datum/sprite_accessory/hair/odango - name = "Odango" - icon_state = "hair_odango" - -/datum/sprite_accessory/hair/ombre - name = "Ombre" - icon_state = "hair_ombre" - -/datum/sprite_accessory/hair/oneshoulder - name = "One Shoulder" - icon_state = "hair_oneshoulder" - -/datum/sprite_accessory/hair/over_eye - name = "Over Eye" - icon_state = "hair_shortovereye" - -/datum/sprite_accessory/hair/oxton - name = "Oxton" - icon_state = "hair_oxton" - -/datum/sprite_accessory/hair/parted - name = "Parted" - icon_state = "hair_parted" - -/datum/sprite_accessory/hair/partedside - name = "Parted (Side)" - icon_state = "hair_part" - -/datum/sprite_accessory/hair/kagami - name = "Pigtails" - icon_state = "hair_kagami" - -/datum/sprite_accessory/hair/pigtail - name = "Pigtails 2" - icon_state = "hair_pigtails" - -/datum/sprite_accessory/hair/pigtail2 - name = "Pigtails 3" - icon_state = "hair_pigtails2" - -/datum/sprite_accessory/hair/pixie - name = "Pixie Cut" - icon_state = "hair_pixie" - -/datum/sprite_accessory/hair/pompadour - name = "Pompadour" - icon_state = "hair_pompadour" - -/datum/sprite_accessory/hair/bigpompadour - name = "Pompadour (Big)" - icon_state = "hair_bigpompadour" - -/datum/sprite_accessory/hair/ponytail1 - name = "Ponytail" - icon_state = "hair_ponytail" - -/datum/sprite_accessory/hair/ponytail2 - name = "Ponytail 2" - icon_state = "hair_ponytail2" - -/datum/sprite_accessory/hair/ponytail3 - name = "Ponytail 3" - icon_state = "hair_ponytail3" - -/datum/sprite_accessory/hair/ponytail4 - name = "Ponytail 4" - icon_state = "hair_ponytail4" - -/datum/sprite_accessory/hair/ponytail5 - name = "Ponytail 5" - icon_state = "hair_ponytail5" - -/datum/sprite_accessory/hair/ponytail6 - name = "Ponytail 6" - icon_state = "hair_ponytail6" - -/datum/sprite_accessory/hair/ponytail7 - name = "Ponytail 7" - icon_state = "hair_ponytail7" - -/datum/sprite_accessory/hair/highponytail - name = "Ponytail (High)" - icon_state = "hair_highponytail" - -/datum/sprite_accessory/hair/stail - name = "Ponytail (Short)" - icon_state = "hair_stail" - -/datum/sprite_accessory/hair/longponytail - name = "Ponytail (Long)" - icon_state = "hair_longstraightponytail" - -/datum/sprite_accessory/hair/countryponytail - name = "Ponytail (Country)" - icon_state = "hair_country" - -/datum/sprite_accessory/hair/fringetail - name = "Ponytail (Fringe)" - icon_state = "hair_fringetail" - -/datum/sprite_accessory/hair/sidetail - name = "Ponytail (Side)" - icon_state = "hair_sidetail" - -/datum/sprite_accessory/hair/sidetail2 - name = "Ponytail (Side) 2" - icon_state = "hair_sidetail2" - -/datum/sprite_accessory/hair/sidetail3 - name = "Ponytail (Side) 3" - icon_state = "hair_sidetail3" - -/datum/sprite_accessory/hair/sidetail4 - name = "Ponytail (Side) 4" - icon_state = "hair_sidetail4" - -/datum/sprite_accessory/hair/spikyponytail - name = "Ponytail (Spiky)" - icon_state = "hair_spikyponytail" - -/datum/sprite_accessory/hair/poofy - name = "Poofy" - icon_state = "hair_poofy" - -/datum/sprite_accessory/hair/prince - name = "Prince" - icon_state = "hair_prince" - -/datum/sprite_accessory/hair/pupa - name = "Pupa" - icon_state = "hair_pupa" - -/datum/sprite_accessory/hair/quiff - name = "Quiff" - icon_state = "hair_quiff" - -/datum/sprite_accessory/hair/ronin - name = "Ronin" - icon_state = "hair_ronin" - -/datum/sprite_accessory/hair/rosemary - name = "Rosemary" - icon_state = "hair_rosemary" - -/datum/sprite_accessory/hair/shaved - name = "Shaved" - icon_state = "hair_shaved" - -/datum/sprite_accessory/hair/shavedpart - name = "Shaved Part" - icon_state = "hair_shavedpart" - -/datum/sprite_accessory/hair/shortbangs - name = "Short Bangs" - icon_state = "hair_shortbangs" - -/datum/sprite_accessory/hair/short - name = "Short Hair" - icon_state = "hair_a" - -/datum/sprite_accessory/hair/shorthair2 - name = "Short Hair 2" - icon_state = "hair_shorthair2" - -/datum/sprite_accessory/hair/shorthair3 - name = "Short Hair 3" - icon_state = "hair_shorthair3" - -/datum/sprite_accessory/hair/shorthair4 - name = "Short Hair 4" - icon_state = "hair_d" - -/datum/sprite_accessory/hair/shorthair5 - name = "Short Hair 5" - icon_state = "hair_e" - -/datum/sprite_accessory/hair/shorthair6 - name = "Short Hair 6" - icon_state = "hair_f" - -/datum/sprite_accessory/hair/shorthair7 - name = "Short Hair 7" - icon_state = "hair_shorthairg" - -/datum/sprite_accessory/hair/shorthaireighties - name = "Short Hair 80s" - icon_state = "hair_80s" - -/datum/sprite_accessory/hair/rosa - name = "Short Hair Rosa" - icon_state = "hair_rosa" - -/datum/sprite_accessory/hair/shoulderlength - name = "Shoulder-length Hair" - icon_state = "hair_b" - -/datum/sprite_accessory/hair/sidecut - name = "Sidecut" - icon_state = "hair_sidecut" - -/datum/sprite_accessory/hair/skinhead - name = "Skinhead" - icon_state = "hair_skinhead" - -/datum/sprite_accessory/hair/protagonist - name = "Slightly Long Hair" - icon_state = "hair_protagonist" - -/datum/sprite_accessory/hair/spiky - name = "Spiky" - icon_state = "hair_spikey" - -/datum/sprite_accessory/hair/spiky2 - name = "Spiky 2" - icon_state = "hair_spiky" - -/datum/sprite_accessory/hair/spiky3 - name = "Spiky 3" - icon_state = "hair_spiky2" - -/datum/sprite_accessory/hair/stride - name = "Stride" - icon_state = "hair_stride" - -/datum/sprite_accessory/hair/swept - name = "Swept Back Hair" - icon_state = "hair_swept" - -/datum/sprite_accessory/hair/swept2 - name = "Swept Back Hair 2" - icon_state = "hair_swept2" - -/datum/sprite_accessory/hair/thinning - name = "Thinning" - icon_state = "hair_thinning" - -/datum/sprite_accessory/hair/thinningfront - name = "Thinning (Front)" - icon_state = "hair_thinningfront" - -/datum/sprite_accessory/hair/thinningrear - name = "Thinning (Rear)" - icon_state = "hair_thinningrear" - -/datum/sprite_accessory/hair/thresh - name = "Thresh" - icon_state = "hair_thresh" - -/datum/sprite_accessory/hair/topknot - name = "Topknot" - icon_state = "hair_topknot" - -/datum/sprite_accessory/hair/tressshoulder - name = "Tress Shoulder" - icon_state = "hair_tressshoulder" - -/datum/sprite_accessory/hair/trimmed - name = "Trimmed" - icon_state = "hair_trimmed" - -/datum/sprite_accessory/hair/trimflat - name = "Trim Flat" - icon_state = "hair_trimflat" - -/datum/sprite_accessory/hair/twintails - name = "Twintails" - icon_state = "hair_twintail" - -/datum/sprite_accessory/hair/undercut - name = "Undercut" - icon_state = "hair_undercut" - -/datum/sprite_accessory/hair/undercutleft - name = "Undercut Left" - icon_state = "hair_undercutleft" - -/datum/sprite_accessory/hair/undercutright - name = "Undercut Right" - icon_state = "hair_undercutright" - -/datum/sprite_accessory/hair/unkept - name = "Unkept" - icon_state = "hair_unkept" - -/datum/sprite_accessory/hair/updo - name = "Updo" - icon_state = "hair_updo" - -/datum/sprite_accessory/hair/longer - name = "Very Long Hair" - icon_state = "hair_vlong" - -/datum/sprite_accessory/hair/longest - name = "Very Long Hair 2" - icon_state = "hair_longest" - -/datum/sprite_accessory/hair/longest2 - name = "Very Long Over Eye" - icon_state = "hair_longest2" - -/datum/sprite_accessory/hair/veryshortovereye - name = "Very Short Over Eye" - icon_state = "hair_veryshortovereyealternate" - -/datum/sprite_accessory/hair/longestalt - name = "Very Long with Fringe" - icon_state = "hair_vlongfringe" - -/datum/sprite_accessory/hair/volaju - name = "Volaju" - icon_state = "hair_volaju" - -/datum/sprite_accessory/hair/wisp - name = "Wisp" - icon_state = "hair_wisp" - -/* -///////////////////////////////////// -/ =---------------------------= / -/ == Gradient Hair Definitions == / -/ =---------------------------= / -///////////////////////////////////// -*/ - -/datum/sprite_accessory/hair_gradient - icon = 'icons/mob/hair_gradients.dmi' - -/datum/sprite_accessory/hair_gradient/none - name = "None" - icon_state = "none" - -/datum/sprite_accessory/hair_gradient/fadeup - name = "Fade Up" - icon_state = "fadeup" - -/datum/sprite_accessory/hair_gradient/fadedown - name = "Fade Down" - icon_state = "fadedown" - -/datum/sprite_accessory/hair_gradient/vertical_split - name = "Vertical Split" - icon_state = "vsplit" - -/datum/sprite_accessory/hair_gradient/_split - name = "Horizontal Split" - icon_state = "bottomflat" - -/datum/sprite_accessory/hair_gradient/reflected - name = "Reflected" - icon_state = "reflected_high" - -/datum/sprite_accessory/hair_gradient/reflected_inverse - name = "Reflected Inverse" - icon_state = "reflected_inverse_high" - -/datum/sprite_accessory/hair_gradient/wavy - name = "Wavy" - icon_state = "wavy" - -/datum/sprite_accessory/hair_gradient/long_fade_up - name = "Long Fade Up" - icon_state = "long_fade_up" - -/datum/sprite_accessory/hair_gradient/long_fade_down - name = "Long Fade Down" - icon_state = "long_fade_down" - -///////////////////////////// -// Facial Hair Definitions // -///////////////////////////// - -/datum/sprite_accessory/facial_hair - icon = 'icons/mob/human_face.dmi' - gender = MALE // barf (unless you're a dorf, dorfs dig chix w/ beards :P) - -// please make sure they're sorted alphabetically and categorized - -/datum/sprite_accessory/facial_hair/abe - name = "Beard (Abraham Lincoln)" - icon_state = "facial_abe" - -/datum/sprite_accessory/facial_hair/brokenman - name = "Beard (Broken Man)" - icon_state = "facial_brokenman" - -/datum/sprite_accessory/facial_hair/chinstrap - name = "Beard (Chinstrap)" - icon_state = "facial_chin" - -/datum/sprite_accessory/facial_hair/dwarf - name = "Beard (Dwarf)" - icon_state = "facial_dwarf" - -/datum/sprite_accessory/facial_hair/fullbeard - name = "Beard (Full)" - icon_state = "facial_fullbeard" - -/datum/sprite_accessory/facial_hair/croppedfullbeard - name = "Beard (Cropped Fullbeard)" - icon_state = "facial_croppedfullbeard" - -/datum/sprite_accessory/facial_hair/gt - name = "Beard (Goatee)" - icon_state = "facial_gt" - -/datum/sprite_accessory/facial_hair/hip - name = "Beard (Hipster)" - icon_state = "facial_hip" - -/datum/sprite_accessory/facial_hair/jensen - name = "Beard (Jensen)" - icon_state = "facial_jensen" - -/datum/sprite_accessory/facial_hair/neckbeard - name = "Beard (Neckbeard)" - icon_state = "facial_neckbeard" - -/datum/sprite_accessory/facial_hair/vlongbeard - name = "Beard (Very Long)" - icon_state = "facial_wise" - -/datum/sprite_accessory/facial_hair/muttonmus - name = "Beard (Muttonmus)" - icon_state = "facial_muttonmus" - -/datum/sprite_accessory/facial_hair/martialartist - name = "Beard (Martial Artist)" - icon_state = "facial_martialartist" - -/datum/sprite_accessory/facial_hair/chinlessbeard - name = "Beard (Chinless Beard)" - icon_state = "facial_chinlessbeard" - -/datum/sprite_accessory/facial_hair/moonshiner - name = "Beard (Moonshiner)" - icon_state = "facial_moonshiner" - -/datum/sprite_accessory/facial_hair/longbeard - name = "Beard (Long)" - icon_state = "facial_longbeard" - -/datum/sprite_accessory/facial_hair/volaju - name = "Beard (Volaju)" - icon_state = "facial_volaju" - -/datum/sprite_accessory/facial_hair/threeoclock - name = "Beard (Three o Clock Shadow)" - icon_state = "facial_3oclock" - -/datum/sprite_accessory/facial_hair/fiveoclock - name = "Beard (Five o Clock Shadow)" - icon_state = "facial_fiveoclock" - -/datum/sprite_accessory/facial_hair/fiveoclockm - name = "Beard (Five o Clock Moustache)" - icon_state = "facial_5oclockmoustache" - -/datum/sprite_accessory/facial_hair/sevenoclock - name = "Beard (Seven o Clock Shadow)" - icon_state = "facial_7oclock" - -/datum/sprite_accessory/facial_hair/sevenoclockm - name = "Beard (Seven o Clock Moustache)" - icon_state = "facial_7oclockmoustache" - -/datum/sprite_accessory/facial_hair/moustache - name = "Moustache" - icon_state = "facial_moustache" - -/datum/sprite_accessory/facial_hair/pencilstache - name = "Moustache (Pencilstache)" - icon_state = "facial_pencilstache" - -/datum/sprite_accessory/facial_hair/smallstache - name = "Moustache (Smallstache)" - icon_state = "facial_smallstache" - -/datum/sprite_accessory/facial_hair/walrus - name = "Moustache (Walrus)" - icon_state = "facial_walrus" - -/datum/sprite_accessory/facial_hair/fu - name = "Moustache (Fu Manchu)" - icon_state = "facial_fumanchu" - -/datum/sprite_accessory/facial_hair/hogan - name = "Moustache (Hulk Hogan)" - icon_state = "facial_hogan" //-Neek - -/datum/sprite_accessory/facial_hair/selleck - name = "Moustache (Selleck)" - icon_state = "facial_selleck" - -/datum/sprite_accessory/facial_hair/chaplin - name = "Moustache (Square)" - icon_state = "facial_chaplin" - -/datum/sprite_accessory/facial_hair/vandyke - name = "Moustache (Van Dyke)" - icon_state = "facial_vandyke" - -/datum/sprite_accessory/facial_hair/watson - name = "Moustache (Watson)" - icon_state = "facial_watson" - -/datum/sprite_accessory/facial_hair/elvis - name = "Sideburns (Elvis)" - icon_state = "facial_elvis" - -/datum/sprite_accessory/facial_hair/mutton - name = "Sideburns (Mutton Chops)" - icon_state = "facial_mutton" - -/datum/sprite_accessory/facial_hair/sideburn - name = "Sideburns" - icon_state = "facial_sideburn" - -/datum/sprite_accessory/facial_hair/shaved - name = "Shaved" - icon_state = null - gender = NEUTER - -/////////////////////////// -// Underwear Definitions // -/////////////////////////// - -/datum/sprite_accessory/underwear - icon = 'icons/mob/clothing/underwear.dmi' - use_static = FALSE - - -//MALE UNDERWEAR -/datum/sprite_accessory/underwear/nude - name = "Nude" - icon_state = null - gender = NEUTER - -/datum/sprite_accessory/underwear/male_briefs - name = "Men's Briefs" - icon_state = "male_briefs" - gender = MALE - -/datum/sprite_accessory/underwear/male_boxers - name = "Men's Boxer" - icon_state = "male_boxers" - gender = MALE - -/datum/sprite_accessory/underwear/male_stripe - name = "Men's Striped Boxer" - icon_state = "male_stripe" - gender = MALE - -/datum/sprite_accessory/underwear/male_midway - name = "Men's Midway Boxer" - icon_state = "male_midway" - gender = MALE - -/datum/sprite_accessory/underwear/male_longjohns - name = "Men's Long Johns" - icon_state = "male_longjohns" - gender = MALE - -/datum/sprite_accessory/underwear/male_kinky - name = "Men's Kinky" - icon_state = "male_kinky" - gender = MALE - -/datum/sprite_accessory/underwear/male_mankini - name = "Mankini" - icon_state = "male_mankini" - gender = MALE - -/datum/sprite_accessory/underwear/male_hearts - name = "Men's Hearts Boxer" - icon_state = "male_hearts" - gender = MALE - use_static = TRUE - -/datum/sprite_accessory/underwear/male_commie - name = "Men's Striped Commie Boxer" - icon_state = "male_commie" - gender = MALE - use_static = TRUE - -/datum/sprite_accessory/underwear/male_usastripe - name = "Men's Striped Freedom Boxer" - icon_state = "male_assblastusa" - gender = MALE - use_static = TRUE - -/datum/sprite_accessory/underwear/male_uk - name = "Men's Striped UK Boxer" - icon_state = "male_uk" - gender = MALE - use_static = TRUE - - -//FEMALE UNDERWEAR -/datum/sprite_accessory/underwear/female_bikini - name = "Ladies' Bikini" - icon_state = "female_bikini" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_lace - name = "Ladies' Lace" - icon_state = "female_lace" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_bralette - name = "Ladies' Bralette" - icon_state = "female_bralette" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_sport - name = "Ladies' Sport" - icon_state = "female_sport" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_thong - name = "Ladies' Thong" - icon_state = "female_thong" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_strapless - name = "Ladies' Strapless" - icon_state = "female_strapless" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_babydoll - name = "Babydoll" - icon_state = "female_babydoll" - gender = FEMALE - -/datum/sprite_accessory/underwear/swimsuit_onepiece - name = "Ladies' One Piece Swimsuit" - icon_state = "swim_onepiece" - gender = FEMALE - -/datum/sprite_accessory/underwear/swimsuit_strapless_onepiece - name = "Ladies' Strapless One Piece Swimsuit" - icon_state = "swim_strapless_onepiece" - gender = FEMALE - -/datum/sprite_accessory/underwear/swimsuit_twopiece - name = "Ladies' Two Piece Swimsuit" - icon_state = "swim_twopiece" - gender = FEMALE - -/datum/sprite_accessory/underwear/swimsuit_strapless_twopiece - name = "Ladies' Strapless Two Piece Swimsuit" - icon_state = "swim_strapless_twopiece" - gender = FEMALE - -/datum/sprite_accessory/underwear/swimsuit_stripe - name = "Ladies' Stripe Swimsuit" - icon_state = "swim_stripe" - gender = FEMALE - -/datum/sprite_accessory/underwear/swimsuit_halter - name = "Ladies' Halter Swimsuit" - icon_state = "swim_halter" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_white_neko - name = "Ladies' White Neko" - icon_state = "female_neko_white" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/underwear/female_black_neko - name = "Ladies' Black Neko" - icon_state = "female_neko_black" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/underwear/female_commie - name = "Ladies' Commie" - icon_state = "female_commie" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/underwear/female_usastripe - name = "Ladies' Freedom" - icon_state = "female_assblastusa" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/underwear/female_uk - name = "Ladies' UK" - icon_state = "female_uk" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/underwear/female_kinky - name = "Ladies' Kinky" - icon_state = "female_kinky" - gender = FEMALE - use_static = TRUE - -//////////////////////////// -// Undershirt Definitions // -//////////////////////////// - -/datum/sprite_accessory/undershirt - icon = 'icons/mob/clothing/underwear.dmi' - -/datum/sprite_accessory/undershirt/nude - name = "Nude" - icon_state = null - gender = NEUTER - -// please make sure they're sorted alphabetically and categorized - -/datum/sprite_accessory/undershirt/bluejersey - name = "Jersey (Blue)" - icon_state = "shirt_bluejersey" - gender = NEUTER - -/datum/sprite_accessory/undershirt/redjersey - name = "Jersey (Red)" - icon_state = "shirt_redjersey" - gender = NEUTER - -/datum/sprite_accessory/undershirt/bluepolo - name = "Polo Shirt (Blue)" - icon_state = "bluepolo" - gender = NEUTER - -/datum/sprite_accessory/undershirt/grayyellowpolo - name = "Polo Shirt (Gray-Yellow)" - icon_state = "grayyellowpolo" - gender = NEUTER - -/datum/sprite_accessory/undershirt/redpolo - name = "Polo Shirt (Red)" - icon_state = "redpolo" - gender = NEUTER - -/datum/sprite_accessory/undershirt/whitepolo - name = "Polo Shirt (White)" - icon_state = "whitepolo" - gender = NEUTER - -/datum/sprite_accessory/undershirt/alienshirt - name = "Shirt (Alien)" - icon_state = "shirt_alien" - gender = NEUTER - -/datum/sprite_accessory/undershirt/mondmondjaja - name = "Shirt (Band)" - icon_state = "band" - gender = NEUTER - -/datum/sprite_accessory/undershirt/shirt_black - name = "Shirt (Black)" - icon_state = "shirt_black" - gender = NEUTER - -/datum/sprite_accessory/undershirt/blueshirt - name = "Shirt (Blue)" - icon_state = "shirt_blue" - gender = NEUTER - -/datum/sprite_accessory/undershirt/clownshirt - name = "Shirt (Clown)" - icon_state = "shirt_clown" - gender = NEUTER - -/datum/sprite_accessory/undershirt/commie - name = "Shirt (Commie)" - icon_state = "shirt_commie" - gender = NEUTER - -/datum/sprite_accessory/undershirt/greenshirt - name = "Shirt (Green)" - icon_state = "shirt_green" - gender = NEUTER - -/datum/sprite_accessory/undershirt/shirt_grey - name = "Shirt (Grey)" - icon_state = "shirt_grey" - gender = NEUTER - -/datum/sprite_accessory/undershirt/ian - name = "Shirt (Ian)" - icon_state = "ian" - gender = NEUTER - -/datum/sprite_accessory/undershirt/ilovent - name = "Shirt (I Love NT)" - icon_state = "ilovent" - gender = NEUTER - -/datum/sprite_accessory/undershirt/lover - name = "Shirt (Lover)" - icon_state = "lover" - gender = NEUTER - -/datum/sprite_accessory/undershirt/matroska - name = "Shirt (Matroska)" - icon_state = "matroska" - gender = NEUTER - -/datum/sprite_accessory/undershirt/meat - name = "Shirt (Meat)" - icon_state = "shirt_meat" - gender = NEUTER - -/datum/sprite_accessory/undershirt/nano - name = "Shirt (Nanotrasen)" - icon_state = "shirt_nano" - gender = NEUTER - -/datum/sprite_accessory/undershirt/peace - name = "Shirt (Peace)" - icon_state = "peace" - gender = NEUTER - -/datum/sprite_accessory/undershirt/pacman - name = "Shirt (Pogoman)" - icon_state = "pogoman" - gender = NEUTER - -/datum/sprite_accessory/undershirt/question - name = "Shirt (Question)" - icon_state = "shirt_question" - gender = NEUTER - -/datum/sprite_accessory/undershirt/redshirt - name = "Shirt (Red)" - icon_state = "shirt_red" - gender = NEUTER - -/datum/sprite_accessory/undershirt/skull - name = "Shirt (Skull)" - icon_state = "shirt_skull" - gender = NEUTER - -/datum/sprite_accessory/undershirt/ss13 - name = "Shirt (SS13)" - icon_state = "shirt_ss13" - gender = NEUTER - -/datum/sprite_accessory/undershirt/stripe - name = "Shirt (Striped)" - icon_state = "shirt_stripes" - gender = NEUTER - -/datum/sprite_accessory/undershirt/tiedye - name = "Shirt (Tie-dye)" - icon_state = "shirt_tiedye" - gender = NEUTER - -/datum/sprite_accessory/undershirt/uk - name = "Shirt (UK)" - icon_state = "uk" - gender = NEUTER - -/datum/sprite_accessory/undershirt/usa - name = "Shirt (USA)" - icon_state = "shirt_assblastusa" - gender = NEUTER - -/datum/sprite_accessory/undershirt/shirt_white - name = "Shirt (White)" - icon_state = "shirt_white" - gender = NEUTER - -/datum/sprite_accessory/undershirt/blackshortsleeve - name = "Short-sleeved Shirt (Black)" - icon_state = "blackshortsleeve" - gender = NEUTER - -/datum/sprite_accessory/undershirt/blueshortsleeve - name = "Short-sleeved Shirt (Blue)" - icon_state = "blueshortsleeve" - gender = NEUTER - -/datum/sprite_accessory/undershirt/greenshortsleeve - name = "Short-sleeved Shirt (Green)" - icon_state = "greenshortsleeve" - gender = NEUTER - -/datum/sprite_accessory/undershirt/purpleshortsleeve - name = "Short-sleeved Shirt (Purple)" - icon_state = "purpleshortsleeve" - gender = NEUTER - -/datum/sprite_accessory/undershirt/whiteshortsleeve - name = "Short-sleeved Shirt (White)" - icon_state = "whiteshortsleeve" - gender = NEUTER - -/datum/sprite_accessory/undershirt/sports_bra - name = "Sports Bra" - icon_state = "sports_bra" - gender = NEUTER - -/datum/sprite_accessory/undershirt/sports_bra2 - name = "Sports Bra (Alt)" - icon_state = "sports_bra_alt" - gender = NEUTER - -/datum/sprite_accessory/undershirt/blueshirtsport - name = "Sports Shirt (Blue)" - icon_state = "blueshirtsport" - gender = NEUTER - -/datum/sprite_accessory/undershirt/greenshirtsport - name = "Sports Shirt (Green)" - icon_state = "greenshirtsport" - gender = NEUTER - -/datum/sprite_accessory/undershirt/redshirtsport - name = "Sports Shirt (Red)" - icon_state = "redshirtsport" - gender = NEUTER - -/datum/sprite_accessory/undershirt/tank_black - name = "Tank Top (Black)" - icon_state = "tank_black" - gender = NEUTER - -/datum/sprite_accessory/undershirt/tankfire - name = "Tank Top (Fire)" - icon_state = "tank_fire" - gender = NEUTER - -/datum/sprite_accessory/undershirt/tank_grey - name = "Tank Top (Grey)" - icon_state = "tank_grey" - gender = NEUTER - -/datum/sprite_accessory/undershirt/female_midriff - name = "Tank Top (Midriff)" - icon_state = "tank_midriff" - gender = FEMALE - -/datum/sprite_accessory/undershirt/tank_red - name = "Tank Top (Red)" - icon_state = "tank_red" - gender = NEUTER - -/datum/sprite_accessory/undershirt/tankstripe - name = "Tank Top (Striped)" - icon_state = "tank_stripes" - gender = NEUTER - -/datum/sprite_accessory/undershirt/tank_white - name = "Tank Top (White)" - icon_state = "tank_white" - gender = NEUTER - -/datum/sprite_accessory/undershirt/tank_rainbow - name = "Tank Top (Rainbow)" - icon_state = "tank_rainbow" - gender = NEUTER - -/datum/sprite_accessory/undershirt/tank_les - name = "Tank Top (Lesbian)" - icon_state = "tank_les" - gender = NEUTER - -/datum/sprite_accessory/undershirt/tank_bi - name = "Tank Top (Bi)" - icon_state = "tank_bi" - gender = NEUTER - -/datum/sprite_accessory/undershirt/tank_trans - name = "Tank Top (Trans)" - icon_state = "tank_trans" - gender = NEUTER - -/datum/sprite_accessory/undershirt/tank_enby - name = "Tank Top (Nonbinary)" - icon_state = "tank_enby" - gender = NEUTER - -/datum/sprite_accessory/undershirt/tank_ace - name = "Tank Top (Asexual)" - icon_state = "tank_ace" - gender = NEUTER - -/datum/sprite_accessory/undershirt/redtop - name = "Top (Red)" - icon_state = "redtop" - gender = FEMALE - -/datum/sprite_accessory/undershirt/whitetop - name = "Top (White)" - icon_state = "whitetop" - gender = FEMALE - -/datum/sprite_accessory/undershirt/tshirt_blue - name = "T-Shirt (Blue)" - icon_state = "blueshirt" - gender = NEUTER - -/datum/sprite_accessory/undershirt/tshirt_green - name = "T-Shirt (Green)" - icon_state = "greenshirt" - gender = NEUTER - -/datum/sprite_accessory/undershirt/tshirt_red - name = "T-Shirt (Red)" - icon_state = "redshirt" - gender = NEUTER - -/datum/sprite_accessory/undershirt/yellowshirt - name = "T-Shirt (Yellow)" - icon_state = "yellowshirt" - gender = NEUTER - -/////////////////////// -// Socks Definitions // -/////////////////////// - -/datum/sprite_accessory/socks - icon = 'icons/mob/clothing/underwear.dmi' - -/datum/sprite_accessory/socks/nude - name = "Nude" - icon_state = null - -// please make sure they're sorted alphabetically and categorized - -/datum/sprite_accessory/socks/black_knee - name = "Knee-high (Black)" - icon_state = "black_knee" - -/datum/sprite_accessory/socks/commie_knee - name = "Knee-High (Commie)" - icon_state = "commie_knee" - -/datum/sprite_accessory/socks/usa_knee - name = "Knee-High (Freedom)" - icon_state = "assblastusa_knee" - -/datum/sprite_accessory/socks/rainbow_knee - name = "Knee-high (Rainbow)" - icon_state = "rainbow_knee" - -/datum/sprite_accessory/socks/striped_knee - name = "Knee-high (Striped)" - icon_state = "striped_knee" - -/datum/sprite_accessory/socks/thin_knee - name = "Knee-high (Thin)" - icon_state = "thin_knee" - -/datum/sprite_accessory/socks/uk_knee - name = "Knee-High (UK)" - icon_state = "uk_knee" - -/datum/sprite_accessory/socks/white_knee - name = "Knee-high (White)" - icon_state = "white_knee" - -/datum/sprite_accessory/socks/bee_knee - name = "Knee-high (Bee)" - icon_state = "bee_knee" - -/datum/sprite_accessory/socks/black_norm - name = "Normal (Black)" - icon_state = "black_norm" - -/datum/sprite_accessory/socks/white_norm - name = "Normal (White)" - icon_state = "white_norm" - -/datum/sprite_accessory/socks/pantyhose - name = "Pantyhose" - icon_state = "pantyhose" - -/datum/sprite_accessory/socks/black_short - name = "Short (Black)" - icon_state = "black_short" - -/datum/sprite_accessory/socks/white_short - name = "Short (White)" - icon_state = "white_short" - -/datum/sprite_accessory/socks/stockings_blue - name = "Stockings (Blue)" - icon_state = "stockings_blue" - -/datum/sprite_accessory/socks/stockings_cyan - name = "Stockings (Cyan)" - icon_state = "stockings_cyan" - -/datum/sprite_accessory/socks/stockings_dpink - name = "Stockings (Dark Pink)" - icon_state = "stockings_dpink" - -/datum/sprite_accessory/socks/stockings_green - name = "Stockings (Green)" - icon_state = "stockings_black" - -/datum/sprite_accessory/socks/stockings_orange - name = "Stockings (Orange)" - icon_state = "stockings_orange" - -/datum/sprite_accessory/socks/stockings_programmer - name = "Stockings (Programmer)" - icon_state = "stockings_lpink" - -/datum/sprite_accessory/socks/stockings_puce - name = "Stockings (Puce)" - icon_state = "stockings_puce" - -/datum/sprite_accessory/socks/stockings_purple - name = "Stockings (Purple)" - icon_state = "stockings_purple" - -/datum/sprite_accessory/socks/stockings_yellow - name = "Stockings (Yellow)" - icon_state = "stockings_yellow" - -/datum/sprite_accessory/socks/black_thigh - name = "Thigh-high (Black)" - icon_state = "black_thigh" - -/datum/sprite_accessory/socks/commie_thigh - name = "Thigh-high (Commie)" - icon_state = "commie_thigh" - -/datum/sprite_accessory/socks/usa_thigh - name = "Thigh-high (Freedom)" - icon_state = "assblastusa_thigh" - -/datum/sprite_accessory/socks/rainbow_thigh - name = "Thigh-high (Rainbow)" - icon_state = "rainbow_thigh" - -/datum/sprite_accessory/socks/les_thigh - name = "Thigh-high (Lesbian)" - icon_state = "les_thigh" - -/datum/sprite_accessory/socks/bi_thigh - name = "Thigh-high (Bi)" - icon_state = "bi_thigh" //bi thigh highs? we gotta study this - -/datum/sprite_accessory/socks/trans_thigh - name = "Thigh-high (Trans)" - icon_state = "trans_thigh" - -/datum/sprite_accessory/socks/enby_thigh - name = "Thigh-high (Nonbinary)" - icon_state = "enby_thigh" - -/datum/sprite_accessory/socks/ace_thigh - name = "Thigh-high (Asexual)" - icon_state = "ace_thigh" - -/datum/sprite_accessory/socks/striped_thigh - name = "Thigh-high (Striped)" - icon_state = "striped_thigh" - -/datum/sprite_accessory/socks/thin_thigh - name = "Thigh-high (Thin)" - icon_state = "thin_thigh" - -/datum/sprite_accessory/socks/uk_thigh - name = "Thigh-high (UK)" - icon_state = "uk_thigh" - -/datum/sprite_accessory/socks/white_thigh - name = "Thigh-high (White)" - icon_state = "white_thigh" - -/datum/sprite_accessory/socks/bee_thigh - name = "Thigh-high (Bee)" - icon_state = "bee_thigh" - -/datum/sprite_accessory/socks/thocks - name = "Thocks" - icon_state = "thocks" - -//////////.////////////////// -// MutantParts Definitions // -///////////////////////////// - -/datum/sprite_accessory/body_markings - icon = 'icons/mob/mutant_bodyparts.dmi' - -/datum/sprite_accessory/body_markings/none - name = "None" - icon_state = "none" - -/datum/sprite_accessory/body_markings/dtiger - name = "Dark Tiger Body" - icon_state = "dtiger" - gender_specific = 1 - -/datum/sprite_accessory/body_markings/ltiger - name = "Light Tiger Body" - icon_state = "ltiger" - gender_specific = 1 - -/datum/sprite_accessory/body_markings/lbelly - name = "Light Belly" - icon_state = "lbelly" - gender_specific = 1 - -/datum/sprite_accessory/tails - icon = 'icons/mob/mutant_bodyparts.dmi' - -/datum/sprite_accessory/tails_animated - icon = 'icons/mob/mutant_bodyparts.dmi' - -/datum/sprite_accessory/tails/lizard/smooth - name = "Smooth" - icon_state = "smooth" - -/datum/sprite_accessory/tails_animated/lizard/smooth - name = "Smooth" - icon_state = "smooth" - -/datum/sprite_accessory/tails/lizard/dtiger - name = "Dark Tiger" - icon_state = "dtiger" - -/datum/sprite_accessory/tails_animated/lizard/dtiger - name = "Dark Tiger" - icon_state = "dtiger" - -/datum/sprite_accessory/tails/lizard/ltiger - name = "Light Tiger" - icon_state = "ltiger" - -/datum/sprite_accessory/tails_animated/lizard/ltiger - name = "Light Tiger" - icon_state = "ltiger" - -/datum/sprite_accessory/tails/lizard/spikes - name = "Spikes" - icon_state = "spikes" - -/datum/sprite_accessory/tails_animated/lizard/spikes - name = "Spikes" - icon_state = "spikes" - -/datum/sprite_accessory/tails/lizard/large - name = "Large" - icon_state = "large" - -/datum/sprite_accessory/tails_animated/lizard/large - name = "Large" - icon_state = "large" - -/datum/sprite_accessory/tails/human/none - name = "None" - icon_state = "none" - -/datum/sprite_accessory/tails_animated/human/none - name = "None" - icon_state = "none" - -/datum/sprite_accessory/tails/human/cat - name = "Cat" - icon_state = "cat" - color_src = HAIR - -/datum/sprite_accessory/tails_animated/human/cat - name = "Cat" - icon_state = "cat" - color_src = HAIR - -/datum/sprite_accessory/tails/human/cat/slime - name = "Slimecat" - icon_state = "cat" - color_src = HAIR - image_alpha = 150 - -/datum/sprite_accessory/tails_animated/human/cat/slime - name = "Slimecat" - icon_state = "cat" - color_src = HAIR - image_alpha = 150 - -/datum/sprite_accessory/tails/human/fox - icon = 'icons/mob/species/misc/fox.dmi' - name = "Fox" - icon_state = "fox" - color_src = HAIR - -/datum/sprite_accessory/tails_animated/human/fox - icon = 'icons/mob/species/misc/fox.dmi' - name = "Fox" - icon_state = "fox" - color_src = HAIR - -/datum/sprite_accessory/tails/human/fox/alt - icon = 'icons/mob/species/misc/fox.dmi' - name = "Fox 2" - icon_state = "fox2" - color_src = HAIR - -/datum/sprite_accessory/tails_animated/human/fox/alt - icon = 'icons/mob/species/misc/fox.dmi' - name = "Fox 2" - icon_state = "fox2" - color_src = HAIR - -/datum/sprite_accessory/snouts - icon = 'icons/mob/mutant_bodyparts.dmi' - -/datum/sprite_accessory/snouts/sharp - name = "Sharp" - icon_state = "sharp" - -/datum/sprite_accessory/snouts/round - name = "Round" - icon_state = "round" - -/datum/sprite_accessory/snouts/sharplight - name = "Sharp + Light" - icon_state = "sharplight" - -/datum/sprite_accessory/snouts/roundlight - name = "Round + Light" - icon_state = "roundlight" - -/datum/sprite_accessory/horns - icon = 'icons/mob/mutant_bodyparts.dmi' - -/datum/sprite_accessory/horns/none - name = "None" - icon_state = "none" - -/datum/sprite_accessory/horns/simple - name = "Simple" - icon_state = "simple" - -/datum/sprite_accessory/horns/short - name = "Short" - icon_state = "short" - -/datum/sprite_accessory/horns/curled - name = "Curled" - icon_state = "curled" - -/datum/sprite_accessory/horns/ram - name = "Ram" - icon_state = "ram" - -/datum/sprite_accessory/horns/angler - name = "Angeler" - icon_state = "angler" - -/datum/sprite_accessory/ears - icon = 'icons/mob/mutant_bodyparts.dmi' - -/datum/sprite_accessory/ears/none - name = "None" - icon_state = "none" - -/datum/sprite_accessory/ears/cat - name = "Cat" - icon_state = "cat" - hasinner = 1 - color_src = HAIR - -/datum/sprite_accessory/ears/cat/slime - name = "Slimecat" - icon_state = "cat" - hasinner = FALSE - color_src = HAIR - image_alpha = 150 - -/datum/sprite_accessory/ears/fox - icon = 'icons/mob/species/misc/fox.dmi' - name = "Fox" - icon_state = "fox" - hasinner = 1 - color_src = HAIR - -/datum/sprite_accessory/wings/none - name = "None" - icon_state = "none" - -/datum/sprite_accessory/wings - icon = 'icons/mob/clothing/wings.dmi' - -/datum/sprite_accessory/wings_open - icon = 'icons/mob/clothing/wings.dmi' - -/datum/sprite_accessory/wings/angel - name = "Angel" - icon_state = "angel" - color_src = 0 - dimension_x = 46 - center = TRUE - dimension_y = 34 - locked = TRUE - -/datum/sprite_accessory/wings_open/angel - name = "Angel" - icon_state = "angel" - color_src = 0 - dimension_x = 46 - center = TRUE - dimension_y = 34 - -/datum/sprite_accessory/wings/dragon - name = "Dragon" - icon_state = "dragon" - dimension_x = 96 - center = TRUE - dimension_y = 32 - locked = TRUE - -/datum/sprite_accessory/wings_open/dragon - name = "Dragon" - icon_state = "dragon" - dimension_x = 96 - center = TRUE - dimension_y = 32 - -/datum/sprite_accessory/wings/megamoth - name = "Megamoth" - icon_state = "megamoth" - color_src = 0 - dimension_x = 96 - center = TRUE - dimension_y = 32 - locked = TRUE - -/datum/sprite_accessory/wings_open/megamoth - name = "Megamoth" - icon_state = "megamoth" - color_src = 0 - dimension_x = 96 - center = TRUE - dimension_y = 32 - -/datum/sprite_accessory/wings/mothra - name = "Mothra" - icon_state = "mothra" - color_src = 0 - dimension_x = 96 - center = TRUE - dimension_y = 32 - locked = TRUE - -/datum/sprite_accessory/wings_open/mothra - name = "Mothra" - icon_state = "mothra" - color_src = 0 - dimension_x = 96 - center = TRUE - dimension_y = 32 - -/datum/sprite_accessory/wings/robotic - name = "Robotic" - icon_state = "robotic" - color_src = 0 - dimension_x = 96 - center = TRUE - dimension_y = 32 - locked = TRUE - -/datum/sprite_accessory/wings_open/robotic - name = "Robotic" - icon_state = "robotic" - color_src = 0 - dimension_x = 96 - center = TRUE - dimension_y = 32 - -/datum/sprite_accessory/frills - icon = 'icons/mob/mutant_bodyparts.dmi' - -/datum/sprite_accessory/frills/none - name = "None" - icon_state = "none" - -/datum/sprite_accessory/frills/simple - name = "Simple" - icon_state = "simple" - -/datum/sprite_accessory/frills/short - name = "Short" - icon_state = "short" - -/datum/sprite_accessory/frills/aquatic - name = "Aquatic" - icon_state = "aqua" - -/datum/sprite_accessory/spines - icon = 'icons/mob/mutant_bodyparts.dmi' - -/datum/sprite_accessory/spines_animated - icon = 'icons/mob/mutant_bodyparts.dmi' - -/datum/sprite_accessory/spines/none - name = "None" - icon_state = "none" - -/datum/sprite_accessory/spines_animated/none - name = "None" - icon_state = "none" - -/datum/sprite_accessory/spines/short - name = "Short" - icon_state = "short" - -/datum/sprite_accessory/spines_animated/short - name = "Short" - icon_state = "short" - -/datum/sprite_accessory/spines/shortmeme - name = "Short + Membrane" - icon_state = "shortmeme" - -/datum/sprite_accessory/spines_animated/shortmeme - name = "Short + Membrane" - icon_state = "shortmeme" - -/datum/sprite_accessory/spines/long - name = "Long" - icon_state = "long" - -/datum/sprite_accessory/spines_animated/long - name = "Long" - icon_state = "long" - -/datum/sprite_accessory/spines/longmeme - name = "Long + Membrane" - icon_state = "longmeme" - -/datum/sprite_accessory/spines_animated/longmeme - name = "Long + Membrane" - icon_state = "longmeme" - -/datum/sprite_accessory/spines/aqautic - name = "Aquatic" - icon_state = "aqua" - -/datum/sprite_accessory/spines_animated/aqautic - name = "Aquatic" - icon_state = "aqua" - -/datum/sprite_accessory/legs //legs are a special case, they aren't actually sprite_accessories but are updated with them. - icon = null //These datums exist for selecting legs on preference, and little else - -/datum/sprite_accessory/legs/none - name = "Normal Legs" - -/datum/sprite_accessory/legs/digitigrade_lizard - name = "Digitigrade Legs" - -/datum/sprite_accessory/caps - icon = 'icons/mob/mutant_bodyparts.dmi' - color_src = HAIR - -/datum/sprite_accessory/caps/round - name = "Round" - icon_state = "round" - -/datum/sprite_accessory/moth_wings - icon = 'icons/mob/moth_wings.dmi' - color_src = null - -/datum/sprite_accessory/moth_wings/plain - name = "Plain" - icon_state = "plain" - -/datum/sprite_accessory/moth_wings/monarch - name = "Monarch" - icon_state = "monarch" - -/datum/sprite_accessory/moth_wings/luna - name = "Luna" - icon_state = "luna" - -/datum/sprite_accessory/moth_wings/atlas - name = "Atlas" - icon_state = "atlas" - -/datum/sprite_accessory/moth_wings/reddish - name = "Reddish" - icon_state = "redish" - -/datum/sprite_accessory/moth_wings/royal - name = "Royal" - icon_state = "royal" - -/datum/sprite_accessory/moth_wings/gothic - name = "Gothic" - icon_state = "gothic" - -/datum/sprite_accessory/moth_wings/lovers - name = "Lovers" - icon_state = "lovers" - -/datum/sprite_accessory/moth_wings/whitefly - name = "White Fly" - icon_state = "whitefly" - -/datum/sprite_accessory/moth_wings/punished - name = "Burnt Off" - icon_state = "burnt" - locked = TRUE - -/datum/sprite_accessory/moth_wings/firewatch - name = "Firewatch" - icon_state = "firewatch" - -/datum/sprite_accessory/moth_wings/deathhead - name = "Deathshead" - icon_state = "deathhead" - -/datum/sprite_accessory/moth_wings/poison - name = "Poison" - icon_state = "poison" - -/datum/sprite_accessory/moth_wings/ragged - name = "Ragged" - icon_state = "ragged" - -/datum/sprite_accessory/moth_wings/moonfly - name = "Moon Fly" - icon_state = "moonfly" - -/datum/sprite_accessory/moth_wings/snow - name = "Snow" - icon_state = "snow" - -/datum/sprite_accessory/moth_wings/oakworm - name = "Oak Worm" - icon_state = "oakworm" - -/datum/sprite_accessory/moth_wings/jungle - name = "Jungle" - icon_state = "jungle" - -/datum/sprite_accessory/moth_wings/witchwing - name = "Witch Wing" - icon_state = "witchwing" - -/datum/sprite_accessory/moth_markings // the markings that moths can have. finally something other than the boring tan - icon = 'icons/mob/moth_markings.dmi' - color_src = null - -/datum/sprite_accessory/moth_markings/none - name = "None" - icon_state = "none" - -/datum/sprite_accessory/moth_markings/reddish - name = "Reddish" - icon_state = "reddish" - -/datum/sprite_accessory/moth_markings/royal - name = "Royal" - icon_state = "royal" - -/datum/sprite_accessory/moth_markings/gothic - name = "Gothic" - icon_state = "gothic" - -/datum/sprite_accessory/moth_markings/whitefly - name = "White Fly" - icon_state = "whitefly" - -/datum/sprite_accessory/moth_markings/lovers - name = "Lovers" - icon_state = "lovers" - -/datum/sprite_accessory/moth_markings/punished - name = "Punished" - icon_state = "punished" - -/datum/sprite_accessory/moth_markings/firewatch - name = "Firewatch" - icon_state = "firewatch" - -/datum/sprite_accessory/moth_markings/deathhead - name = "Deathshead" - icon_state = "deathhead" - -/datum/sprite_accessory/moth_markings/poison - name = "Poison" - icon_state = "poison" - -/datum/sprite_accessory/moth_markings/ragged - name = "Ragged" - icon_state = "ragged" - -/datum/sprite_accessory/moth_markings/moonfly - name = "Moon Fly" - icon_state = "moonfly" - -/datum/sprite_accessory/moth_markings/oakworm - name = "Oak Worm" - icon_state = "oakworm" - -/datum/sprite_accessory/moth_markings/jungle - name = "Jungle" - icon_state = "jungle" - -/datum/sprite_accessory/moth_markings/witchwing - name = "Witch Wing" - icon_state = "witchwing" - -//WS begin - Moth wing additions / Squids / IPCs - -//Moth fluff -/datum/sprite_accessory/moth_fluff - icon = 'icons/mob/moth_wings.dmi' - color_src = null - -/datum/sprite_accessory/moth_fluff/plain - name = "Plain" - icon_state = "plain" - -/datum/sprite_accessory/moth_fluff/bent - name = "Bent" - icon_state = "bent" - -/datum/sprite_accessory/moth_fluff/reddish - name = "Reddish" - icon_state = "redish" - -/datum/sprite_accessory/moth_fluff/royal - name = "Royal" - icon_state = "royal" - -/datum/sprite_accessory/moth_fluff/gothic - name = "Gothic" - icon_state = "gothic" - -/datum/sprite_accessory/moth_fluff/lovers - name = "Lovers" - icon_state = "lovers" - -/datum/sprite_accessory/moth_fluff/whitefly - name = "White Fly" - icon_state = "whitefly" - -/datum/sprite_accessory/moth_fluff/punished - name = "Burnt" - icon_state = "burnt" - -/datum/sprite_accessory/moth_fluff/firewatch - name = "Firewatch" - icon_state = "firewatch" - -/datum/sprite_accessory/moth_fluff/deathhead - name = "Deathshead" - icon_state = "deathhead" - -/datum/sprite_accessory/moth_fluff/poison - name = "Poison" - icon_state = "poison" - -/datum/sprite_accessory/moth_fluff/moonfly - name = "Moon Fly" - icon_state = "moonfly" - -/datum/sprite_accessory/moth_fluff/snow - name = "Snow" - icon_state = "snow" - -/datum/sprite_accessory/moth_fluff/oakworm - name = "Oak Worm" - icon_state = "oakworm" - -/datum/sprite_accessory/moth_fluff/jungle - name = "Jungle" - icon_state = "jungle" - -/datum/sprite_accessory/moth_fluff/witchwing - name = "Witch Wing" - icon_state = "witchwing" - -/datum/sprite_accessory/moth_fluff/shaved - name = "Shaved" - icon_state = "shaved" - -//Squids -/datum/sprite_accessory/squid_face - icon = 'icons/mob/mutant_bodyparts.dmi' - -/datum/sprite_accessory/squid_face/squidward - name = "Squidward" - icon_state = "squidward" - -/datum/sprite_accessory/squid_face/illithid - name = "Illithid" - icon_state = "illithid" - -/datum/sprite_accessory/squid_face/freaky - name = "Freaky" - icon_state = "freaky" - -/datum/sprite_accessory/squid_face/grabbers - name = "Grabbers" - icon_state = "grabbers" - -// IPC accessories. - -/datum/sprite_accessory/ipc_screens - icon = 'icons/mob/ipc_accessories.dmi' - color_src = EYECOLOR - -/datum/sprite_accessory/ipc_screens/blank - name = "Blank Canvas" - icon_state = "blank" - -/datum/sprite_accessory/ipc_screens/blue - name = "Blue" - icon_state = "blue" - color_src = 0 - -/datum/sprite_accessory/ipc_screens/blush - name = "Blush" - icon_state = "blush" - -/datum/sprite_accessory/ipc_screens/bsod - name = "BSOD" - icon_state = "bsod" - color_src = 0 - -/datum/sprite_accessory/ipc_screens/buffering - name = "Buffering" - icon_state = "buffering" - -/datum/sprite_accessory/ipc_screens/breakout - name = "Breakout" - icon_state = "breakout" - -/datum/sprite_accessory/ipc_screens/console - name = "Console" - icon_state = "console" - -/datum/sprite_accessory/ipc_screens/doom - name = "DOOM" - icon_state = "doom" - -/datum/sprite_accessory/ipc_screens/ecgwave - name = "ECG Wave" - icon_state = "ecgwave" - -/datum/sprite_accessory/ipc_screens/eight - name = "Eight" - icon_state = "eight" - -/datum/sprite_accessory/ipc_screens/eyes - name = "Eyes (Spinny)" - icon_state = "eyes" - -/datum/sprite_accessory/ipc_screens/eyes_noanim - name = "Eyes (No Spinny)" - icon_state = "eyes_noanim" - -/datum/sprite_accessory/ipc_screens/eyes_fortuna - name = "Eyes (Sun and Moon)" - icon_state = "eyes_fortuna" - -/datum/sprite_accessory/ipc_screens/glider - name = "Glider" - icon_state = "glider" - -/datum/sprite_accessory/ipc_screens/goggles - name = "Goggles" - icon_state = "goggles" - -/datum/sprite_accessory/ipc_screens/green - name = "Green" - icon_state = "green" - -/datum/sprite_accessory/ipc_screens/heart - name = "Heart" - icon_state = "heart" - color_src = 0 - -/datum/sprite_accessory/ipc_screens/monoeye - name = "Mono-eye" - icon_state = "monoeye" - -/datum/sprite_accessory/ipc_screens/nyaru - name = "Nyaru" - icon_state = "nyaru" - -/datum/sprite_accessory/ipc_screens/nature - name = "Nature" - icon_state = "nature" - -/datum/sprite_accessory/ipc_screens/orange - name = "Orange" - icon_state = "orange" - -/datum/sprite_accessory/ipc_screens/pink - name = "Pink" - icon_state = "pink" - -/datum/sprite_accessory/ipc_screens/purple - name = "Purple" - icon_state = "purple" - -/datum/sprite_accessory/ipc_screens/rainbow - name = "Rainbow" - icon_state = "rainbow" - color_src = 0 - -/datum/sprite_accessory/ipc_screens/red - name = "Red" - icon_state = "red" - -/datum/sprite_accessory/ipc_screens/text - name = "Text Lines" - icon_state = "text" - -/datum/sprite_accessory/ipc_screens/rgb - name = "RGB" - icon_state = "rgb" - -/datum/sprite_accessory/ipc_screens/scroll - name = "Scanline" - icon_state = "scroll" - -/datum/sprite_accessory/ipc_screens/shower - name = "Shower" - icon_state = "shower" - -/datum/sprite_accessory/ipc_screens/sinewave - name = "Sinewave" - icon_state = "sinewave" - -/datum/sprite_accessory/ipc_screens/squarewave - name = "Square wave" - icon_state = "squarewave" - -/datum/sprite_accessory/ipc_screens/static_screen - name = "Static" - icon_state = "static" - -/datum/sprite_accessory/ipc_screens/yellow - name = "Yellow" - icon_state = "yellow" - -/datum/sprite_accessory/ipc_screens/textdrop - name = "Text drop" - icon_state = "textdrop" - -/datum/sprite_accessory/ipc_screens/stars - name = "Stars" - icon_state = "stars" - -/datum/sprite_accessory/ipc_screens/loading - name = "Loading" - icon_state = "loading" - -/datum/sprite_accessory/ipc_screens/windowsxp - name = "Windows XP" - icon_state = "windowsxp" - -/datum/sprite_accessory/ipc_screens/tetris - name = "Tetris" - icon_state = "tetris" - -/datum/sprite_accessory/ipc_screens/bubbles - name = "Bubbles" - icon_state = "bubbles" - -/datum/sprite_accessory/ipc_screens/tv - name = "Color Test" - icon_state = "tv" - -/datum/sprite_accessory/ipc_antennas - icon = 'icons/mob/ipc_accessories.dmi' - color_src = HAIR - -/datum/sprite_accessory/ipc_antennas/none - name = "None" - icon_state = "None" - -/datum/sprite_accessory/ipc_antennas/angled - name = "Angled" - icon_state = "antennae" - -/datum/sprite_accessory/ipc_antennas/antlers - name = "Antlers" - icon_state = "antlers" - -/datum/sprite_accessory/ipc_antennas/crowned - name = "Crowned" - icon_state = "crowned" - -/datum/sprite_accessory/ipc_antennas/cyberhead - name = "Cyberhead" - icon_state = "cyberhead" - -/datum/sprite_accessory/ipc_antennas/droneeyes - name = "Drone Eyes" - icon_state = "droneeyes" - -/datum/sprite_accessory/ipc_antennas/sidelights - name = "Sidelights" - icon_state = "sidelights" - -/datum/sprite_accessory/ipc_antennas/tesla - name = "Tesla" - icon_state = "tesla" - -/datum/sprite_accessory/ipc_antennas/tv - name = "TV Antenna" - icon_state = "tvantennae" - -/datum/sprite_accessory/ipc_antennas/cross - name = "Cross" - icon_state = "cross" - -/datum/sprite_accessory/ipc_antennas/sidepanels - name = "Side Panels" - icon_state = "sidepanels" - -/datum/sprite_accessory/ipc_antennas/horns - name = "Horns" - icon_state = "horns" - -/datum/sprite_accessory/ipc_antennas/langle - name = "Left Angle" - icon_state = "langle" - -/datum/sprite_accessory/ipc_antennas/rangle - name = "Right Angle" - icon_state = "rangle" - -/datum/sprite_accessory/ipc_chassis // Used for changing limb icons, doesn't need to hold the actual icon. That's handled in ipc.dm - icon = null - icon_state = "who cares fuck you" // In order to pull the chassis correctly, we need AN icon_state(see line 36-39). It doesn't have to be useful, because it isn't used. - color_src = 0 - -/datum/sprite_accessory/ipc_chassis/mcgreyscale - name = "Morpheus Cyberkinetics (Custom)" - limbs_id = "mcgipc" - color_src = MUTCOLORS - -/datum/sprite_accessory/ipc_chassis/bishopcyberkinetics - name = "Bishop Cyberkinetics" - limbs_id = "bshipc" - -/datum/sprite_accessory/ipc_chassis/bishopcyberkinetics2 - name = "Bishop Cyberkinetics 2.0" - limbs_id = "bs2ipc" - -/datum/sprite_accessory/ipc_chassis/hephaestussindustries - name = "Hephaestus Industries" - limbs_id = "hsiipc" - -/datum/sprite_accessory/ipc_chassis/hephaestussindustries2 - name = "Hephaestus Industries 2.0" - limbs_id = "hi2ipc" - -/datum/sprite_accessory/ipc_chassis/pawsitronsunited - name = "Pawsitrons United" - limbs_id = "pawsitrons" - -/datum/sprite_accessory/ipc_chassis/shellguardmunitions - name = "Shellguard Munitions Standard Series" - limbs_id = "sgmipc" - -/datum/sprite_accessory/ipc_chassis/wardtakahashimanufacturing - name = "Ward-Takahashi Manufacturing" - limbs_id = "wtmipc" - -/datum/sprite_accessory/ipc_chassis/xionmanufacturinggroup - name = "Xion Manufacturing Group" - limbs_id = "xmgipc" - -/datum/sprite_accessory/ipc_chassis/xionmanufacturinggroup2 - name = "Xion Manufacturing Group 2.0" - limbs_id = "xm2ipc" - -/datum/sprite_accessory/ipc_chassis/zenghupharmaceuticals - name = "Zeng-Hu Pharmaceuticals" - limbs_id = "zhpipc" - -/datum/sprite_accessory/spider_legs - icon = 'icons/mob/species/rachnid/spider_legs.dmi' - color_src = MUTCOLORS - -/datum/sprite_accessory/spider_legs/plain - name = "Plain" - icon_state = "plain" - -/datum/sprite_accessory/spider_legs/fuzzy - name = "Fuzzy" - icon_state = "fuzzy" - -/datum/sprite_accessory/spider_legs/spiky - name = "Spiky" - icon_state = "spiky" - -/datum/sprite_accessory/spider_spinneret - icon = 'icons/mob/species/rachnid/spider_spinneret.dmi' - color_src = MUTCOLORS - -/datum/sprite_accessory/spider_spinneret/plain - name = "Plain" - icon_state = "plain" - -/datum/sprite_accessory/spider_spinneret/fuzzy - name = "Fuzzy" - icon_state = "fuzzy" - -/datum/sprite_accessory/spider_spinneret/black_widow - name = "Black Widow" - icon_state = "blackwidow" - -/datum/sprite_accessory/spider_mandibles - icon = 'icons/mob/species/rachnid/spider_mandibles.dmi' - color_src = MUTCOLORS - -/datum/sprite_accessory/spider_mandibles/plain - name = "Plain" - icon_state = "plain" - -/datum/sprite_accessory/spider_mandibles/fuzzy - name = "Fuzzy" - icon_state = "fuzzy" - -/datum/sprite_accessory/spider_mandibles/spiky - name = "Spiky" - icon_state = "spiky" - -//Kepori - -/datum/sprite_accessory/kepori_feathers - color_src = HAIR - icon = 'icons/mob/kepori_parts.dmi' - -/datum/sprite_accessory/kepori_feathers/none - name = "None" - -/datum/sprite_accessory/kepori_feathers/sleek - name = "Sleek" - icon_state = "sleek" - -/datum/sprite_accessory/kepori_feathers/peel - name = "The Peel" - icon_state = "peel" - -/datum/sprite_accessory/kepori_feathers/sweep - name = "Swept Up" - icon_state = "sweep" - -/datum/sprite_accessory/kepori_feathers/aerodynamic - name = "Aerodynamic" - icon_state = "aerodynamic" - -/datum/sprite_accessory/kepori_feathers/mohawk - name = "Mo-Hawk" - icon_state = "mohawk" - -/datum/sprite_accessory/kepori_feathers/cowlick - name = "Cow-lick" - icon_state = "cowlick" - -/datum/sprite_accessory/kepori_feathers/spikey - name = "Spikey" - icon_state = "spikey" - -/datum/sprite_accessory/kepori_feathers/soap - name = "Soap" - icon_state = "soap" - -/datum/sprite_accessory/kepori_feathers/crowned - name = "Crowned" - icon_state = "crowned" - -/datum/sprite_accessory/kepori_feathers/crested - name = "Crested" - icon_state = "crested" - -/datum/sprite_accessory/kepori_feathers/ponytail - name = "Ponytail" - icon_state = "ponytail" - -/datum/sprite_accessory/kepori_feathers/bun - name = "Bun" - icon_state = "bun" - -/datum/sprite_accessory/kepori_body_feathers - color_src = FACEHAIR - icon = 'icons/mob/kepori_parts.dmi' - -/datum/sprite_accessory/kepori_body_feathers/none - name = "None" - -/datum/sprite_accessory/kepori_body_feathers/aftik - name = "Aftik" - icon_state = "aftik" - -/datum/sprite_accessory/kepori_body_feathers/belly - name = "Belly" - icon_state = "belly" - -/datum/sprite_accessory/kepori_body_feathers/shirt - name = "Shirt" - icon_state = "shirt" - -/datum/sprite_accessory/kepori_body_feathers/soap - name = "Soap" - icon_state = "soap" - -/datum/sprite_accessory/kepori_body_feathers/wings - name = "Wings" - icon_state = "wings" - -/datum/sprite_accessory/kepori_tail_feathers - color_src = FACEHAIR - icon = 'icons/mob/kepori_parts.dmi' - -/datum/sprite_accessory/kepori_tail_feathers/none - name = "None" - -/datum/sprite_accessory/kepori_tail_feathers/fan - name = "Fan" - icon_state = "fan" - -/datum/sprite_accessory/kepori_tail_feathers/back - name = "Back" - icon_state = "back" - -/datum/sprite_accessory/kepori_tail_feathers/fanback - name = "Fan and Back" - icon_state = "fanback" - -/datum/sprite_accessory/kepori_tail_feathers/prosthetic - name = "Prosthetic Tail" - icon_state = "prosthetic" - color_src = null - -// Moth - -/datum/sprite_accessory/moth_wings/brown - name = "Brown" - icon_state = "brown" - -/datum/sprite_accessory/moth_wings/feathery - name = "Feathery" - icon_state = "feathery" - -/datum/sprite_accessory/moth_wings/rosy - name = "Rosy" - icon_state = "rosy" - -/datum/sprite_accessory/moth_wings/plasmafire - name = "Plasmafire" - icon_state = "plasmafire" - -/datum/sprite_accessory/moth_fluff/brown - name = "Brown" - icon_state = "brown" - -/datum/sprite_accessory/moth_fluff/feathery - name = "Feathery" - icon_state = "feathery" - -/datum/sprite_accessory/moth_fluff/rosy - name = "Rosy" - icon_state = "rosy" - -/datum/sprite_accessory/moth_fluff/plasmafire - name = "Plasmafire" - icon_state = "plasmafire" - -//Vox - -/datum/sprite_accessory/vox_head_quills - icon = 'icons/mob/species/vox/vox_quills.dmi' - color_src = null - -/datum/sprite_accessory/vox_head_quills/none - name = "None" - -/datum/sprite_accessory/vox_head_quills/wildflower - name = "Wildflower" - icon_state = "wildflower" - -/datum/sprite_accessory/vox_head_quills/augmenter - name = "Augmenter" - icon_state = "augmenter" - -/datum/sprite_accessory/vox_head_quills/shaggy - name = "Shaggy" - icon_state = "shaggy" - -/datum/sprite_accessory/vox_head_quills/mange - name = "Mange" - icon_state = "mange" - -/datum/sprite_accessory/vox_head_quills/ponytail - name = "Ponytail" - icon_state = "ponytail" - -/datum/sprite_accessory/vox_head_quills/rows - name = "Rows" - icon_state = "rows" - -/datum/sprite_accessory/vox_head_quills/cropped - name = "Cropped" - icon_state = "cropped" - -/datum/sprite_accessory/vox_head_quills/surf - name = "Surf" - icon_state = "surf" - -/datum/sprite_accessory/vox_head_quills/nights - name = "Nights" - icon_state = "nights" - -/datum/sprite_accessory/vox_head_quills/horns - name = "Horns" - icon_state = "horns" - -/datum/sprite_accessory/vox_head_quills/longhawk - name = "Longhawk" - icon_state = "longhawk" - -/datum/sprite_accessory/vox_head_quills/mohawk - name = "Mohawk" - icon_state = "mohawk" - -/datum/sprite_accessory/vox_head_quills/yasu - name = "Yasu" - icon_state = "yasu" - -/datum/sprite_accessory/vox_head_quills/afro - name = "Afro" - icon_state = "afro" - -/datum/sprite_accessory/vox_head_quills/kingly - name = "Kingly" - icon_state = "kingly" - -/datum/sprite_accessory/vox_head_quills/shortquills - name = "Short Quills" - icon_state = "shortquills" - -/datum/sprite_accessory/vox_neck_quills - icon = 'icons/mob/species/vox/vox_quills.dmi' - color_src = null - -/datum/sprite_accessory/vox_neck_quills/none - name = "None" - -/datum/sprite_accessory/vox_neck_quills/beard - name = "Beard" - icon_state = "beard" - -/datum/sprite_accessory/vox_neck_quills/fuu - name = "Fuu" - icon_state = "fuu" - -/datum/sprite_accessory/vox_neck_quills/colonal - name = "Colonal" - icon_state = "colonal" - -/datum/sprite_accessory/vox_neck_quills/plain - name = "Plain" - icon_state = "plain" - -/datum/sprite_accessory/vox_neck_quills/tailfeather - name = "Tailfeather" - icon_state = "tailfeather" - -/datum/sprite_accessory/vox_neck_quills/ruffbeard - name = "Ruffbeard" - icon_state = "ruffbeard" - -/datum/sprite_accessory/vox_neck_quills/ruffhawk - name = "Ruffhawk" - icon_state = "ruffhawk" - -//Elzuose help - -/datum/sprite_accessory/elzu_horns - icon = 'icons/mob/ethereal_parts.dmi' - -/datum/sprite_accessory/elzu_horns/none - name = "None" - icon_state = "none" - -/datum/sprite_accessory/elzu_horns/short - name = "Short" - icon_state = "short" - -/datum/sprite_accessory/elzu_horns/helm - name = "Helm" - icon_state = "helm" - -/datum/sprite_accessory/elzu_horns/lunar - name = "Lunar" - icon_state = "lunar" - -/datum/sprite_accessory/elzu_horns/inward - name = "Inward" - icon_state = "inward" - -/datum/sprite_accessory/elzu_horns/majesty - name = "Majesty" - icon_state = "majesty" - -/datum/sprite_accessory/elzu_horns/clipped - name = "Clipped" - icon_state = "clipped" - -/datum/sprite_accessory/elzu_horns/sharp - name = "Sharp" - icon_state = "sharp" - -/datum/sprite_accessory/tails/elzu - icon = 'icons/mob/ethereal_parts.dmi' - -/datum/sprite_accessory/tails_animated/elzu - icon = 'icons/mob/ethereal_parts.dmi' - -/datum/sprite_accessory/tails/elzu/none - name = "None" - icon_state = "none" - -/datum/sprite_accessory/tails_animated/elzu/none - name = "None" - icon_state = "none" - -/datum/sprite_accessory/tails/elzu/long - name = "Long" - icon_state = "long" - -/datum/sprite_accessory/tails_animated/elzu/long - name = "Long" - icon_state = "long" - -/datum/sprite_accessory/tails/elzu/bifurcated - name = "Bifurcated" - icon_state = "bifurcated" - -/datum/sprite_accessory/tails_animated/elzu/bifurcated - name = "Bifurcated" - icon_state = "bifurcated" - -/datum/sprite_accessory/tails/elzu/stubby - name = "Stubby" - icon_state = "stubby" - -/datum/sprite_accessory/tails_animated/elzu/stubby - name = "Stubby" - icon_state = "stubby" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm new file mode 100644 index 000000000000..443f13c6917f --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm @@ -0,0 +1,86 @@ +/* + Hello and welcome to sprite_accessories: For sprite accessories, such as hair, + facial hair, and possibly tattoos and stuff somewhere along the line. This file is + intended to be friendly for people with little to no actual coding experience. + The process of adding in new hairstyles has been made pain-free and easy to do. + Enjoy! - Doohl + + Notice: This all gets automatically compiled in a list in dna.dm, so you do not + have to define any UI values for sprite accessories manually for hair and facial + hair. Just add in new hair types and the game will naturally adapt. + + !!WARNING!!: changing existing hair information can be VERY hazardous to savefiles, + to the point where you may completely corrupt a server's savefiles. Please refrain + from doing this unless you absolutely know what you are doing, and have defined a + conversion in savefile.dm +*/ + +//Roundstart argument builds a specific list for roundstart parts where some parts may be locked +/proc/init_sprite_accessory_subtypes(prototype, list/L, list/male, list/female, roundstart = FALSE) + if(!istype(L)) + L = list() + if(!istype(male)) + male = list() + if(!istype(female)) + female = list() + + for(var/path in subtypesof(prototype)) + if(roundstart) + var/datum/sprite_accessory/P = path + if(initial(P.locked)) + continue + var/datum/sprite_accessory/D = new path() + + if(D.icon_state) + L[D.name] = D + else + L += D.name + + switch(D.gender) + if(MALE) + male += D.name + if(FEMALE) + female += D.name + else + male += D.name + female += D.name + return L + +/datum/sprite_accessory + var/icon //the icon file the accessory is located in + var/icon_state //the icon_state of the accessory + var/name //the preview name of the accessory + var/gender = NEUTER //Determines if the accessory will be skipped or included in random hair generations + var/gender_specific //Something that can be worn by either gender, but looks different on each + var/use_static //determines if the accessory will be skipped by color preferences + var/color_src = MUTCOLORS //Currently only used by mutantparts so don't worry about hair and stuff. This is the source that this accessory will get its color from. Default is MUTCOLOR, but can also be HAIR, FACEHAIR, EYECOLOR and 0 if none. + var/hasinner //Decides if this sprite has an "inner" part, such as the fleshy parts on ears. + var/locked = FALSE //Is this part locked from roundstart selection? Used for parts that apply effects + var/center = FALSE //Should we center the sprite? + var/limbs_id //The limbs id supplied for full-body replacing features. + var/image_alpha = 255 //The alpha for the accessory to use. + var/dimension_x = 32 + var/dimension_y = 32 + var/body_zone = BODY_ZONE_CHEST //!The body zone this accessory affects + var/synthetic_icon_state //!The icon_state to use when the bodypart it's attached to is synthetic + var/synthetic_color_src //!The color src to use instead of the normal src when synthetic, leave blank to use the normal src + +//Squids AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA whyyyy +/datum/sprite_accessory/squid_face + icon = 'icons/mob/mutant_bodyparts.dmi' + +/datum/sprite_accessory/squid_face/squidward + name = "Squidward" + icon_state = "squidward" + +/datum/sprite_accessory/squid_face/illithid + name = "Illithid" + icon_state = "illithid" + +/datum/sprite_accessory/squid_face/freaky + name = "Freaky" + icon_state = "freaky" + +/datum/sprite_accessory/squid_face/grabbers + name = "Grabbers" + icon_state = "grabbers" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/ears.dm b/code/modules/mob/dead/new_player/sprite_accessories/ears.dm new file mode 100644 index 000000000000..3f5eec73ee0e --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/ears.dm @@ -0,0 +1,28 @@ +//Ears for species + +/datum/sprite_accessory/ears + icon = 'icons/mob/mutant_bodyparts.dmi' + +/datum/sprite_accessory/ears/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/ears/cat + name = "Cat" + icon_state = "cat" + hasinner = 1 + color_src = HAIR + +/datum/sprite_accessory/ears/cat/slime + name = "Slimecat" + icon_state = "cat" + hasinner = FALSE + color_src = HAIR + image_alpha = 150 + +/datum/sprite_accessory/ears/fox + icon = 'icons/mob/species/misc/fox.dmi' + name = "Fox" + icon_state = "fox" + hasinner = 1 + color_src = HAIR diff --git a/code/modules/mob/dead/new_player/sprite_accessories/elzuose.dm b/code/modules/mob/dead/new_player/sprite_accessories/elzuose.dm new file mode 100644 index 000000000000..58317b5ab91a --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/elzuose.dm @@ -0,0 +1,78 @@ +//Elzuose mutant parts. Help has come. + +//Start horns + +/datum/sprite_accessory/elzu_horns + icon = 'icons/mob/ethereal_parts.dmi' + +/datum/sprite_accessory/elzu_horns/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/elzu_horns/short + name = "Short" + icon_state = "short" + +/datum/sprite_accessory/elzu_horns/helm + name = "Helm" + icon_state = "helm" + +/datum/sprite_accessory/elzu_horns/lunar + name = "Lunar" + icon_state = "lunar" + +/datum/sprite_accessory/elzu_horns/inward + name = "Inward" + icon_state = "inward" + +/datum/sprite_accessory/elzu_horns/majesty + name = "Majesty" + icon_state = "majesty" + +/datum/sprite_accessory/elzu_horns/clipped + name = "Clipped" + icon_state = "clipped" + +/datum/sprite_accessory/elzu_horns/sharp + name = "Sharp" + icon_state = "sharp" + +//Start tails + +/datum/sprite_accessory/tails/elzu + icon = 'icons/mob/ethereal_parts.dmi' + +/datum/sprite_accessory/tails_animated/elzu + icon = 'icons/mob/ethereal_parts.dmi' + +/datum/sprite_accessory/tails/elzu/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/tails_animated/elzu/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/tails/elzu/long + name = "Long" + icon_state = "long" + +/datum/sprite_accessory/tails_animated/elzu/long + name = "Long" + icon_state = "long" + +/datum/sprite_accessory/tails/elzu/bifurcated + name = "Bifurcated" + icon_state = "bifurcated" + +/datum/sprite_accessory/tails_animated/elzu/bifurcated + name = "Bifurcated" + icon_state = "bifurcated" + +/datum/sprite_accessory/tails/elzu/stubby + name = "Stubby" + icon_state = "stubby" + +/datum/sprite_accessory/tails_animated/elzu/stubby + name = "Stubby" + icon_state = "stubby" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/facial_hair.dm b/code/modules/mob/dead/new_player/sprite_accessories/facial_hair.dm new file mode 100644 index 000000000000..87ab51625343 --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/facial_hair.dm @@ -0,0 +1,151 @@ +// please make sure they're sorted alphabetically and categorized + +/datum/sprite_accessory/facial_hair + icon = 'icons/mob/human_face.dmi' + gender = MALE + +/datum/sprite_accessory/facial_hair/abe + name = "Beard (Abraham Lincoln)" + icon_state = "facial_abe" + +/datum/sprite_accessory/facial_hair/brokenman + name = "Beard (Broken Man)" + icon_state = "facial_brokenman" + +/datum/sprite_accessory/facial_hair/chinstrap + name = "Beard (Chinstrap)" + icon_state = "facial_chin" + +/datum/sprite_accessory/facial_hair/dwarf + name = "Beard (Dwarf)" + icon_state = "facial_dwarf" + +/datum/sprite_accessory/facial_hair/fullbeard + name = "Beard (Full)" + icon_state = "facial_fullbeard" + +/datum/sprite_accessory/facial_hair/croppedfullbeard + name = "Beard (Cropped Fullbeard)" + icon_state = "facial_croppedfullbeard" + +/datum/sprite_accessory/facial_hair/gt + name = "Beard (Goatee)" + icon_state = "facial_gt" + +/datum/sprite_accessory/facial_hair/hip + name = "Beard (Hipster)" + icon_state = "facial_hip" + +/datum/sprite_accessory/facial_hair/jensen + name = "Beard (Jensen)" + icon_state = "facial_jensen" + +/datum/sprite_accessory/facial_hair/neckbeard + name = "Beard (Neckbeard)" + icon_state = "facial_neckbeard" + +/datum/sprite_accessory/facial_hair/vlongbeard + name = "Beard (Very Long)" + icon_state = "facial_wise" + +/datum/sprite_accessory/facial_hair/muttonmus + name = "Beard (Muttonmus)" + icon_state = "facial_muttonmus" + +/datum/sprite_accessory/facial_hair/martialartist + name = "Beard (Martial Artist)" + icon_state = "facial_martialartist" + +/datum/sprite_accessory/facial_hair/chinlessbeard + name = "Beard (Chinless Beard)" + icon_state = "facial_chinlessbeard" + +/datum/sprite_accessory/facial_hair/moonshiner + name = "Beard (Moonshiner)" + icon_state = "facial_moonshiner" + +/datum/sprite_accessory/facial_hair/longbeard + name = "Beard (Long)" + icon_state = "facial_longbeard" + +/datum/sprite_accessory/facial_hair/volaju + name = "Beard (Volaju)" + icon_state = "facial_volaju" + +/datum/sprite_accessory/facial_hair/threeoclock + name = "Beard (Three o Clock Shadow)" + icon_state = "facial_3oclock" + +/datum/sprite_accessory/facial_hair/fiveoclock + name = "Beard (Five o Clock Shadow)" + icon_state = "facial_fiveoclock" + +/datum/sprite_accessory/facial_hair/fiveoclockm + name = "Beard (Five o Clock Moustache)" + icon_state = "facial_5oclockmoustache" + +/datum/sprite_accessory/facial_hair/sevenoclock + name = "Beard (Seven o Clock Shadow)" + icon_state = "facial_7oclock" + +/datum/sprite_accessory/facial_hair/sevenoclockm + name = "Beard (Seven o Clock Moustache)" + icon_state = "facial_7oclockmoustache" + +/datum/sprite_accessory/facial_hair/moustache + name = "Moustache" + icon_state = "facial_moustache" + +/datum/sprite_accessory/facial_hair/pencilstache + name = "Moustache (Pencilstache)" + icon_state = "facial_pencilstache" + +/datum/sprite_accessory/facial_hair/smallstache + name = "Moustache (Smallstache)" + icon_state = "facial_smallstache" + +/datum/sprite_accessory/facial_hair/walrus + name = "Moustache (Walrus)" + icon_state = "facial_walrus" + +/datum/sprite_accessory/facial_hair/fu + name = "Moustache (Fu Manchu)" + icon_state = "facial_fumanchu" + +/datum/sprite_accessory/facial_hair/hogan + name = "Moustache (Hulk Hogan)" + icon_state = "facial_hogan" //-Neek + +/datum/sprite_accessory/facial_hair/selleck + name = "Moustache (Selleck)" + icon_state = "facial_selleck" + +/datum/sprite_accessory/facial_hair/chaplin + name = "Moustache (Square)" + icon_state = "facial_chaplin" + +/datum/sprite_accessory/facial_hair/vandyke + name = "Moustache (Van Dyke)" + icon_state = "facial_vandyke" + +/datum/sprite_accessory/facial_hair/watson + name = "Moustache (Watson)" + icon_state = "facial_watson" + +/datum/sprite_accessory/facial_hair/elvis + name = "Sideburns (Elvis)" + icon_state = "facial_elvis" + +/datum/sprite_accessory/facial_hair/mutton + name = "Sideburns (Mutton Chops)" + icon_state = "facial_mutton" + +/datum/sprite_accessory/facial_hair/sideburn + name = "Sideburns" + icon_state = "facial_sideburn" + +/datum/sprite_accessory/facial_hair/shaved + name = "Shaved" + icon_state = null + gender = NEUTER + diff --git a/code/modules/mob/dead/new_player/sprite_accessories/hair.dm b/code/modules/mob/dead/new_player/sprite_accessories/hair.dm new file mode 100644 index 000000000000..95f937811444 --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/hair.dm @@ -0,0 +1,819 @@ +// Hair for use on mobs +// Keep the names alphabetical, and capitalized. +// You do not need to define _s or _l sub-states, game automatically does this for you + +/datum/sprite_accessory/hair + icon = 'icons/mob/human_face.dmi' // default icon for all hairs + body_zone = BODY_ZONE_HEAD + +/datum/sprite_accessory/hair/afro + name = "Afro" + icon_state = "hair_afro" + +/datum/sprite_accessory/hair/afro2 + name = "Afro 2" + icon_state = "hair_afro2" + +/datum/sprite_accessory/hair/afro_large + name = "Afro (Large)" + icon_state = "hair_bigafro" + +/datum/sprite_accessory/hair/antenna + name = "Ahoge" + icon_state = "hair_antenna" + +/datum/sprite_accessory/hair/bald + name = "Bald" + icon_state = null + +/datum/sprite_accessory/hair/balding + name = "Balding Hair" + icon_state = "hair_e" + +/datum/sprite_accessory/hair/bedhead + name = "Bedhead" + icon_state = "hair_bedhead" + +/datum/sprite_accessory/hair/bedhead2 + name = "Bedhead 2" + icon_state = "hair_bedheadv2" + +/datum/sprite_accessory/hair/bedhead3 + name = "Bedhead 3" + icon_state = "hair_bedheadv3" + +/datum/sprite_accessory/hair/bedheadlong + name = "Long Bedhead" + icon_state = "hair_long_bedhead" + +/datum/sprite_accessory/hair/bedheadfloorlength + name = "Floorlength Bedhead" + icon_state = "hair_floorlength_bedhead" + +/datum/sprite_accessory/hair/beehive + name = "Beehive" + icon_state = "hair_beehive" + +/datum/sprite_accessory/hair/beehive2 + name = "Beehive 2" + icon_state = "hair_beehivev2" + +/datum/sprite_accessory/hair/bob + name = "Bob Hair" + icon_state = "hair_bob" + +/datum/sprite_accessory/hair/bob2 + name = "Bob Hair 2" + icon_state = "hair_bob2" + +/datum/sprite_accessory/hair/bob3 + name = "Bob Hair 3" + icon_state = "hair_bobcut" + +/datum/sprite_accessory/hair/bob4 + name = "Bob Hair 4" + icon_state = "hair_bob4" + +/datum/sprite_accessory/hair/bobcurl + name = "Bobcurl" + icon_state = "hair_bobcurl" + +/datum/sprite_accessory/hair/boddicker + name = "Boddicker" + icon_state = "hair_boddicker" + +/datum/sprite_accessory/hair/bowlcut + name = "Bowlcut" + icon_state = "hair_bowlcut" + +/datum/sprite_accessory/hair/bowlcut2 + name = "Bowlcut 2" + icon_state = "hair_bowlcut2" + +/datum/sprite_accessory/hair/braid + name = "Braid (Floorlength)" + icon_state = "hair_braid" + +/datum/sprite_accessory/hair/braided + name = "Braided" + icon_state = "hair_braided" + +/datum/sprite_accessory/hair/front_braid + name = "Braided Front" + icon_state = "hair_braidfront" + +/datum/sprite_accessory/hair/not_floorlength_braid + name = "Braid (High)" + icon_state = "hair_braid2" + +/datum/sprite_accessory/hair/lowbraid + name = "Braid (Low)" + icon_state = "hair_hbraid" + +/datum/sprite_accessory/hair/shortbraid + name = "Braid (Short)" + icon_state = "hair_shortbraid" + +/datum/sprite_accessory/hair/braidtail + name = "Braided Tail" + icon_state = "hair_braidtail" + +/datum/sprite_accessory/hair/bun + name = "Bun Head" + icon_state = "hair_bun" + +/datum/sprite_accessory/hair/bun2 + name = "Bun Head 2" + icon_state = "hair_bunhead2" + +/datum/sprite_accessory/hair/bun3 + name = "Bun Head 3" + icon_state = "hair_bun3" + +/datum/sprite_accessory/hair/largebun + name = "Bun (Large)" + icon_state = "hair_largebun" + +/datum/sprite_accessory/hair/manbun + name = "Bun (Manbun)" + icon_state = "hair_manbun" + +/datum/sprite_accessory/hair/tightbun + name = "Bun (Tight)" + icon_state = "hair_tightbun" + +/datum/sprite_accessory/hair/business + name = "Business Hair" + icon_state = "hair_business" + +/datum/sprite_accessory/hair/business2 + name = "Business Hair 2" + icon_state = "hair_business2" + +/datum/sprite_accessory/hair/business3 + name = "Business Hair 3" + icon_state = "hair_business3" + +/datum/sprite_accessory/hair/business4 + name = "Business Hair 4" + icon_state = "hair_business4" + +/datum/sprite_accessory/hair/buzz + name = "Buzzcut" + icon_state = "hair_buzzcut" + +/datum/sprite_accessory/hair/cia + name = "CIA" + icon_state = "hair_cia" + +/datum/sprite_accessory/hair/coffeehouse + name = "Coffee House" + icon_state = "hair_coffeehouse" + +/datum/sprite_accessory/hair/combover + name = "Combover" + icon_state = "hair_combover" + +/datum/sprite_accessory/hair/cornrows1 + name = "Cornrows" + icon_state = "hair_cornrows" + +/datum/sprite_accessory/hair/cornrows2 + name = "Cornrows 2" + icon_state = "hair_cornrows2" + +/datum/sprite_accessory/hair/cornrowbun + name = "Cornrow Bun" + icon_state = "hair_cornrowbun" + +/datum/sprite_accessory/hair/cornrowbraid + name = "Cornrow Braid" + icon_state = "hair_cornrowbraid" + +/datum/sprite_accessory/hair/cornrowdualtail + name = "Cornrow Tail" + icon_state = "hair_cornrowtail" + +/datum/sprite_accessory/hair/crew + name = "Crewcut" + icon_state = "hair_crewcut" + +/datum/sprite_accessory/hair/curls + name = "Curls" + icon_state = "hair_curls" + +/datum/sprite_accessory/hair/cut + name = "Cut Hair" + icon_state = "hair_c" + +/datum/sprite_accessory/hair/dandpompadour + name = "Dandy Pompadour" + icon_state = "hair_dandypompadour" + +/datum/sprite_accessory/hair/devillock + name = "Devil Lock" + icon_state = "hair_devilock" + +/datum/sprite_accessory/hair/dolorosa + name = "Dolorosa" + icon_state = "hair_dolorosa" + +/datum/sprite_accessory/hair/double + name = "Double" + icon_state = "hair_double" + +/datum/sprite_accessory/hair/doublebun + name = "Double Bun" + icon_state = "hair_doublebun" + +/datum/sprite_accessory/hair/dreadlocks + name = "Dreadlocks" + icon_state = "hair_dreads" + +/datum/sprite_accessory/hair/drillhair + name = "Drillruru" + icon_state = "hair_drillruru" + +/datum/sprite_accessory/hair/drillhairextended + name = "Drill Hair (Extended)" + icon_state = "hair_drillhairextended" + +/datum/sprite_accessory/hair/egg + name = "Egg" + icon_state = "hair_egg" + +/datum/sprite_accessory/hair/eight + name = "Eight" + icon_state = "hair_eight" + +/datum/sprite_accessory/hair/emo + name = "Emo" + icon_state = "hair_emo" + +/datum/sprite_accessory/hair/emofrine + name = "Emo Fringe" + icon_state = "hair_emofringe" + +/datum/sprite_accessory/hair/nofade + name = "Fade (None)" + icon_state = "hair_nofade" + +/datum/sprite_accessory/hair/highfade + name = "Fade (High)" + icon_state = "hair_highfade" + +/datum/sprite_accessory/hair/medfade + name = "Fade (Medium)" + icon_state = "hair_medfade" + +/datum/sprite_accessory/hair/lowfade + name = "Fade (Low)" + icon_state = "hair_lowfade" + +/datum/sprite_accessory/hair/baldfade + name = "Fade (Bald)" + icon_state = "hair_baldfade" + +/datum/sprite_accessory/hair/feather + name = "Feather" + icon_state = "hair_feather" + +/datum/sprite_accessory/hair/father + name = "Father" + icon_state = "hair_father" + +/datum/sprite_accessory/hair/sargeant + name = "Flat Top" + icon_state = "hair_sargeant" + +/datum/sprite_accessory/hair/flair + name = "Flair" + icon_state = "hair_flair" + +/datum/sprite_accessory/hair/bigflattop + name = "Flat Top (Big)" + icon_state = "hair_bigflattop" + +/datum/sprite_accessory/hair/flow_hair + name = "Flow Hair" + icon_state = "hair_f" + +/datum/sprite_accessory/hair/gelled + name = "Gelled Back" + icon_state = "hair_gelled" + +/datum/sprite_accessory/hair/gentle + name = "Gentle" + icon_state = "hair_gentle" + +/datum/sprite_accessory/hair/halfbang + name = "Half-banged Hair" + icon_state = "hair_halfbang" + +/datum/sprite_accessory/hair/halfbang2 + name = "Half-banged Hair 2" + icon_state = "hair_halfbang2" + +/datum/sprite_accessory/hair/halfshaved + name = "Half-shaved" + icon_state = "hair_halfshaved" + +/datum/sprite_accessory/hair/harley + name = "Harley" + icon_state = "hair_harley" + +/datum/sprite_accessory/hair/hedgehog + name = "Hedgehog Hair" + icon_state = "hair_hedgehog" + +/datum/sprite_accessory/hair/himecut + name = "Hime Cut" + icon_state = "hair_himecut" + +/datum/sprite_accessory/hair/himecut2 + name = "Hime Cut 2" + icon_state = "hair_himecut2" + +/datum/sprite_accessory/hair/shorthime + name = "Hime Cut (Short)" + icon_state = "hair_shorthime" + +/datum/sprite_accessory/hair/himeup + name = "Hime Updo" + icon_state = "hair_himeup" + +/datum/sprite_accessory/hair/hitop + name = "Hitop" + icon_state = "hair_hitop" + +/datum/sprite_accessory/hair/jade + name = "Jade" + icon_state = "hair_jade" + +/datum/sprite_accessory/hair/jensen + name = "Jensen Hair" + icon_state = "hair_jensen" + +/datum/sprite_accessory/hair/Joestar + name = "Joestar" + icon_state = "hair_joestar" + +/datum/sprite_accessory/hair/justice + name = "Justice" + icon_state = "hair_justice" + +/datum/sprite_accessory/hair/keanu + name = "Keanu Hair" + icon_state = "hair_keanu" + +/datum/sprite_accessory/hair/kusangi + name = "Kusanagi Hair" + icon_state = "hair_kusanagi" + +/datum/sprite_accessory/hair/long + name = "Long Hair 1" + icon_state = "hair_long" + +/datum/sprite_accessory/hair/long2 + name = "Long Hair 2" + icon_state = "hair_long2" + +/datum/sprite_accessory/hair/long3 + name = "Long Hair 3" + icon_state = "hair_long3" + +/datum/sprite_accessory/hair/long_over_eye + name = "Long Over Eye" + icon_state = "hair_longovereye" + +/datum/sprite_accessory/hair/longbangs + name = "Long Bangs" + icon_state = "hair_lbangs" + +/datum/sprite_accessory/hair/longemo + name = "Long Emo" + icon_state = "hair_longemo" + +/datum/sprite_accessory/hair/longfringe + name = "Long Fringe" + icon_state = "hair_longfringe" + +/datum/sprite_accessory/hair/sidepartlongalt + name = "Long Side Part" + icon_state = "hair_longsidepart" + +/datum/sprite_accessory/hair/manime + name = "Manime" + icon_state = "hair_manime" + +/datum/sprite_accessory/hair/megaeyebrows + name = "Mega Eyebrows" + icon_state = "hair_megaeyebrows" + +/datum/sprite_accessory/hair/meow + name = "Meow" + icon_state = "hair_meow" + +/datum/sprite_accessory/hair/messy + name = "Messy" + icon_state = "hair_messy" + +/datum/sprite_accessory/hair/miracles + name = "Miracles" + icon_state = "hair_miracles" + +/datum/sprite_accessory/hair/modern + name = "Modern" + icon_state = "hair_modern" + +/datum/sprite_accessory/hair/mohawk + name = "Mohawk" + icon_state = "hair_d" + +/datum/sprite_accessory/hair/nitori + name = "Nitori" + icon_state = "hair_nitori" + +/datum/sprite_accessory/hair/reversemohawk + name = "Mohawk (Reverse)" + icon_state = "hair_reversemohawk" + +/datum/sprite_accessory/hair/shavedmohawk + name = "Mohawk (Shaved)" + icon_state = "hair_shavedmohawk" + +/datum/sprite_accessory/hair/unshavenmohawk + name = "Mohawk (Unshaven)" + icon_state = "hair_unshaven_mohawk" + +/datum/sprite_accessory/hair/mulder + name = "Mulder" + icon_state = "hair_mulder" + +/datum/sprite_accessory/hair/odango + name = "Odango" + icon_state = "hair_odango" + +/datum/sprite_accessory/hair/ombre + name = "Ombre" + icon_state = "hair_ombre" + +/datum/sprite_accessory/hair/oneshoulder + name = "One Shoulder" + icon_state = "hair_oneshoulder" + +/datum/sprite_accessory/hair/over_eye + name = "Over Eye" + icon_state = "hair_shortovereye" + +/datum/sprite_accessory/hair/oxton + name = "Oxton" + icon_state = "hair_oxton" + +/datum/sprite_accessory/hair/parted + name = "Parted" + icon_state = "hair_parted" + +/datum/sprite_accessory/hair/partedside + name = "Parted (Side)" + icon_state = "hair_part" + +/datum/sprite_accessory/hair/kagami + name = "Pigtails" + icon_state = "hair_kagami" + +/datum/sprite_accessory/hair/pigtail + name = "Pigtails 2" + icon_state = "hair_pigtails" + +/datum/sprite_accessory/hair/pigtail2 + name = "Pigtails 3" + icon_state = "hair_pigtails2" + +/datum/sprite_accessory/hair/pixie + name = "Pixie Cut" + icon_state = "hair_pixie" + +/datum/sprite_accessory/hair/pompadour + name = "Pompadour" + icon_state = "hair_pompadour" + +/datum/sprite_accessory/hair/bigpompadour + name = "Pompadour (Big)" + icon_state = "hair_bigpompadour" + +/datum/sprite_accessory/hair/ponytail1 + name = "Ponytail" + icon_state = "hair_ponytail" + +/datum/sprite_accessory/hair/ponytail2 + name = "Ponytail 2" + icon_state = "hair_ponytail2" + +/datum/sprite_accessory/hair/ponytail3 + name = "Ponytail 3" + icon_state = "hair_ponytail3" + +/datum/sprite_accessory/hair/ponytail4 + name = "Ponytail 4" + icon_state = "hair_ponytail4" + +/datum/sprite_accessory/hair/ponytail5 + name = "Ponytail 5" + icon_state = "hair_ponytail5" + +/datum/sprite_accessory/hair/ponytail6 + name = "Ponytail 6" + icon_state = "hair_ponytail6" + +/datum/sprite_accessory/hair/ponytail7 + name = "Ponytail 7" + icon_state = "hair_ponytail7" + +/datum/sprite_accessory/hair/highponytail + name = "Ponytail (High)" + icon_state = "hair_highponytail" + +/datum/sprite_accessory/hair/stail + name = "Ponytail (Short)" + icon_state = "hair_stail" + +/datum/sprite_accessory/hair/longponytail + name = "Ponytail (Long)" + icon_state = "hair_longstraightponytail" + +/datum/sprite_accessory/hair/countryponytail + name = "Ponytail (Country)" + icon_state = "hair_country" + +/datum/sprite_accessory/hair/fringetail + name = "Ponytail (Fringe)" + icon_state = "hair_fringetail" + +/datum/sprite_accessory/hair/sidetail + name = "Ponytail (Side)" + icon_state = "hair_sidetail" + +/datum/sprite_accessory/hair/sidetail2 + name = "Ponytail (Side) 2" + icon_state = "hair_sidetail2" + +/datum/sprite_accessory/hair/sidetail3 + name = "Ponytail (Side) 3" + icon_state = "hair_sidetail3" + +/datum/sprite_accessory/hair/sidetail4 + name = "Ponytail (Side) 4" + icon_state = "hair_sidetail4" + +/datum/sprite_accessory/hair/spikyponytail + name = "Ponytail (Spiky)" + icon_state = "hair_spikyponytail" + +/datum/sprite_accessory/hair/poofy + name = "Poofy" + icon_state = "hair_poofy" + +/datum/sprite_accessory/hair/prince + name = "Prince" + icon_state = "hair_prince" + +/datum/sprite_accessory/hair/pupa + name = "Pupa" + icon_state = "hair_pupa" + +/datum/sprite_accessory/hair/quiff + name = "Quiff" + icon_state = "hair_quiff" + +/datum/sprite_accessory/hair/ronin + name = "Ronin" + icon_state = "hair_ronin" + +/datum/sprite_accessory/hair/rosemary + name = "Rosemary" + icon_state = "hair_rosemary" + +/datum/sprite_accessory/hair/shaved + name = "Shaved" + icon_state = "hair_shaved" + +/datum/sprite_accessory/hair/shavedpart + name = "Shaved Part" + icon_state = "hair_shavedpart" + +/datum/sprite_accessory/hair/shortbangs + name = "Short Bangs" + icon_state = "hair_shortbangs" + +/datum/sprite_accessory/hair/short + name = "Short Hair" + icon_state = "hair_a" + +/datum/sprite_accessory/hair/shorthair2 + name = "Short Hair 2" + icon_state = "hair_shorthair2" + +/datum/sprite_accessory/hair/shorthair3 + name = "Short Hair 3" + icon_state = "hair_shorthair3" + +/datum/sprite_accessory/hair/shorthair4 + name = "Short Hair 4" + icon_state = "hair_d" + +/datum/sprite_accessory/hair/shorthair5 + name = "Short Hair 5" + icon_state = "hair_e" + +/datum/sprite_accessory/hair/shorthair6 + name = "Short Hair 6" + icon_state = "hair_f" + +/datum/sprite_accessory/hair/shorthair7 + name = "Short Hair 7" + icon_state = "hair_shorthairg" + +/datum/sprite_accessory/hair/shorthaireighties + name = "Short Hair 80s" + icon_state = "hair_80s" + +/datum/sprite_accessory/hair/rosa + name = "Short Hair Rosa" + icon_state = "hair_rosa" + +/datum/sprite_accessory/hair/shoulderlength + name = "Shoulder-length Hair" + icon_state = "hair_b" + +/datum/sprite_accessory/hair/sidecut + name = "Sidecut" + icon_state = "hair_sidecut" + +/datum/sprite_accessory/hair/skinhead + name = "Skinhead" + icon_state = "hair_skinhead" + +/datum/sprite_accessory/hair/protagonist + name = "Slightly Long Hair" + icon_state = "hair_protagonist" + +/datum/sprite_accessory/hair/spiky + name = "Spiky" + icon_state = "hair_spikey" + +/datum/sprite_accessory/hair/spiky2 + name = "Spiky 2" + icon_state = "hair_spiky" + +/datum/sprite_accessory/hair/spiky3 + name = "Spiky 3" + icon_state = "hair_spiky2" + +/datum/sprite_accessory/hair/stride + name = "Stride" + icon_state = "hair_stride" + +/datum/sprite_accessory/hair/swept + name = "Swept Back Hair" + icon_state = "hair_swept" + +/datum/sprite_accessory/hair/swept2 + name = "Swept Back Hair 2" + icon_state = "hair_swept2" + +/datum/sprite_accessory/hair/thinning + name = "Thinning" + icon_state = "hair_thinning" + +/datum/sprite_accessory/hair/thinningfront + name = "Thinning (Front)" + icon_state = "hair_thinningfront" + +/datum/sprite_accessory/hair/thinningrear + name = "Thinning (Rear)" + icon_state = "hair_thinningrear" + +/datum/sprite_accessory/hair/thresh + name = "Thresh" + icon_state = "hair_thresh" + +/datum/sprite_accessory/hair/topknot + name = "Topknot" + icon_state = "hair_topknot" + +/datum/sprite_accessory/hair/tressshoulder + name = "Tress Shoulder" + icon_state = "hair_tressshoulder" + +/datum/sprite_accessory/hair/trimmed + name = "Trimmed" + icon_state = "hair_trimmed" + +/datum/sprite_accessory/hair/trimflat + name = "Trim Flat" + icon_state = "hair_trimflat" + +/datum/sprite_accessory/hair/twintails + name = "Twintails" + icon_state = "hair_twintail" + +/datum/sprite_accessory/hair/undercut + name = "Undercut" + icon_state = "hair_undercut" + +/datum/sprite_accessory/hair/undercutleft + name = "Undercut Left" + icon_state = "hair_undercutleft" + +/datum/sprite_accessory/hair/undercutright + name = "Undercut Right" + icon_state = "hair_undercutright" + +/datum/sprite_accessory/hair/unkept + name = "Unkept" + icon_state = "hair_unkept" + +/datum/sprite_accessory/hair/updo + name = "Updo" + icon_state = "hair_updo" + +/datum/sprite_accessory/hair/longer + name = "Very Long Hair" + icon_state = "hair_vlong" + +/datum/sprite_accessory/hair/longest + name = "Very Long Hair 2" + icon_state = "hair_longest" + +/datum/sprite_accessory/hair/longest2 + name = "Very Long Over Eye" + icon_state = "hair_longest2" + +/datum/sprite_accessory/hair/veryshortovereye + name = "Very Short Over Eye" + icon_state = "hair_veryshortovereyealternate" + +/datum/sprite_accessory/hair/longestalt + name = "Very Long with Fringe" + icon_state = "hair_vlongfringe" + +/datum/sprite_accessory/hair/volaju + name = "Volaju" + icon_state = "hair_volaju" + +/datum/sprite_accessory/hair/wisp + name = "Wisp" + icon_state = "hair_wisp" + +/* +///////////////////////////////////// +/ =---------------------------= / +/ == Gradient Hair Definitions == / +/ =---------------------------= / +///////////////////////////////////// +*/ + +/datum/sprite_accessory/hair_gradient + icon = 'icons/mob/hair_gradients.dmi' + body_zone = BODY_ZONE_HEAD + +/datum/sprite_accessory/hair_gradient/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/hair_gradient/fadeup + name = "Fade Up" + icon_state = "fadeup" + +/datum/sprite_accessory/hair_gradient/fadedown + name = "Fade Down" + icon_state = "fadedown" + +/datum/sprite_accessory/hair_gradient/vertical_split + name = "Vertical Split" + icon_state = "vsplit" + +/datum/sprite_accessory/hair_gradient/_split + name = "Horizontal Split" + icon_state = "bottomflat" + +/datum/sprite_accessory/hair_gradient/reflected + name = "Reflected" + icon_state = "reflected_high" + +/datum/sprite_accessory/hair_gradient/reflected_inverse + name = "Reflected Inverse" + icon_state = "reflected_inverse_high" + +/datum/sprite_accessory/hair_gradient/wavy + name = "Wavy" + icon_state = "wavy" + +/datum/sprite_accessory/hair_gradient/long_fade_up + name = "Long Fade Up" + icon_state = "long_fade_up" + +/datum/sprite_accessory/hair_gradient/long_fade_down + name = "Long Fade Down" + icon_state = "long_fade_down" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/ipc.dm b/code/modules/mob/dead/new_player/sprite_accessories/ipc.dm new file mode 100644 index 000000000000..b25cd222115a --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/ipc.dm @@ -0,0 +1,285 @@ +// IPC accessories. + +// Start screens + +/datum/sprite_accessory/ipc_screens + icon = 'icons/mob/ipc_accessories.dmi' + color_src = EYECOLOR + +/datum/sprite_accessory/ipc_screens/blank + name = "Blank Canvas" + icon_state = "blank" + +/datum/sprite_accessory/ipc_screens/blue + name = "Blue" + icon_state = "blue" + color_src = 0 + +/datum/sprite_accessory/ipc_screens/blush + name = "Blush" + icon_state = "blush" + +/datum/sprite_accessory/ipc_screens/bsod + name = "BSOD" + icon_state = "bsod" + color_src = 0 + +/datum/sprite_accessory/ipc_screens/buffering + name = "Buffering" + icon_state = "buffering" + +/datum/sprite_accessory/ipc_screens/breakout + name = "Breakout" + icon_state = "breakout" + +/datum/sprite_accessory/ipc_screens/console + name = "Console" + icon_state = "console" + +/datum/sprite_accessory/ipc_screens/doom + name = "DOOM" + icon_state = "doom" + +/datum/sprite_accessory/ipc_screens/ecgwave + name = "ECG Wave" + icon_state = "ecgwave" + +/datum/sprite_accessory/ipc_screens/eight + name = "Eight" + icon_state = "eight" + +/datum/sprite_accessory/ipc_screens/eyes + name = "Eyes (Spinny)" + icon_state = "eyes" + +/datum/sprite_accessory/ipc_screens/eyes_noanim + name = "Eyes (No Spinny)" + icon_state = "eyes_noanim" + +/datum/sprite_accessory/ipc_screens/eyes_fortuna + name = "Eyes (Sun and Moon)" + icon_state = "eyes_fortuna" + +/datum/sprite_accessory/ipc_screens/glider + name = "Glider" + icon_state = "glider" + +/datum/sprite_accessory/ipc_screens/goggles + name = "Goggles" + icon_state = "goggles" + +/datum/sprite_accessory/ipc_screens/green + name = "Green" + icon_state = "green" + +/datum/sprite_accessory/ipc_screens/heart + name = "Heart" + icon_state = "heart" + color_src = 0 + +/datum/sprite_accessory/ipc_screens/monoeye + name = "Mono-eye" + icon_state = "monoeye" + +/datum/sprite_accessory/ipc_screens/nyaru + name = "Nyaru" + icon_state = "nyaru" + +/datum/sprite_accessory/ipc_screens/nature + name = "Nature" + icon_state = "nature" + +/datum/sprite_accessory/ipc_screens/orange + name = "Orange" + icon_state = "orange" + +/datum/sprite_accessory/ipc_screens/pink + name = "Pink" + icon_state = "pink" + +/datum/sprite_accessory/ipc_screens/purple + name = "Purple" + icon_state = "purple" + +/datum/sprite_accessory/ipc_screens/rainbow + name = "Rainbow" + icon_state = "rainbow" + color_src = 0 + +/datum/sprite_accessory/ipc_screens/red + name = "Red" + icon_state = "red" + +/datum/sprite_accessory/ipc_screens/text + name = "Text Lines" + icon_state = "text" + +/datum/sprite_accessory/ipc_screens/rgb + name = "RGB" + icon_state = "rgb" + +/datum/sprite_accessory/ipc_screens/scroll + name = "Scanline" + icon_state = "scroll" + +/datum/sprite_accessory/ipc_screens/shower + name = "Shower" + icon_state = "shower" + +/datum/sprite_accessory/ipc_screens/sinewave + name = "Sinewave" + icon_state = "sinewave" + +/datum/sprite_accessory/ipc_screens/squarewave + name = "Square wave" + icon_state = "squarewave" + +/datum/sprite_accessory/ipc_screens/static_screen + name = "Static" + icon_state = "static" + +/datum/sprite_accessory/ipc_screens/yellow + name = "Yellow" + icon_state = "yellow" + +/datum/sprite_accessory/ipc_screens/textdrop + name = "Text drop" + icon_state = "textdrop" + +/datum/sprite_accessory/ipc_screens/stars + name = "Stars" + icon_state = "stars" + +/datum/sprite_accessory/ipc_screens/loading + name = "Loading" + icon_state = "loading" + +/datum/sprite_accessory/ipc_screens/windowsxp + name = "Windows XP" + icon_state = "windowsxp" + +/datum/sprite_accessory/ipc_screens/tetris + name = "Tetris" + icon_state = "tetris" + +/datum/sprite_accessory/ipc_screens/bubbles + name = "Bubbles" + icon_state = "bubbles" + +/datum/sprite_accessory/ipc_screens/tv + name = "Color Test" + icon_state = "tv" + +// Start antennas + +/datum/sprite_accessory/ipc_antennas + icon = 'icons/mob/ipc_accessories.dmi' + color_src = HAIR + +/datum/sprite_accessory/ipc_antennas/none + name = "None" + icon_state = "None" + +/datum/sprite_accessory/ipc_antennas/angled + name = "Angled" + icon_state = "antennae" + +/datum/sprite_accessory/ipc_antennas/antlers + name = "Antlers" + icon_state = "antlers" + +/datum/sprite_accessory/ipc_antennas/crowned + name = "Crowned" + icon_state = "crowned" + +/datum/sprite_accessory/ipc_antennas/cyberhead + name = "Cyberhead" + icon_state = "cyberhead" + +/datum/sprite_accessory/ipc_antennas/droneeyes + name = "Drone Eyes" + icon_state = "droneeyes" + +/datum/sprite_accessory/ipc_antennas/sidelights + name = "Sidelights" + icon_state = "sidelights" + +/datum/sprite_accessory/ipc_antennas/tesla + name = "Tesla" + icon_state = "tesla" + +/datum/sprite_accessory/ipc_antennas/tv + name = "TV Antenna" + icon_state = "tvantennae" + +/datum/sprite_accessory/ipc_antennas/cross + name = "Cross" + icon_state = "cross" + +/datum/sprite_accessory/ipc_antennas/sidepanels + name = "Side Panels" + icon_state = "sidepanels" + +/datum/sprite_accessory/ipc_antennas/horns + name = "Horns" + icon_state = "horns" + +/datum/sprite_accessory/ipc_antennas/langle + name = "Left Angle" + icon_state = "langle" + +/datum/sprite_accessory/ipc_antennas/rangle + name = "Right Angle" + icon_state = "rangle" + +// Start chassis - the worst thing ever please rework this + +/datum/sprite_accessory/ipc_chassis // Used for changing limb icons, doesn't need to hold the actual icon. That's handled in ipc.dm + icon = null + icon_state = "who cares fuck you" // In order to pull the chassis correctly, we need AN icon_state(see line 36-39). It doesn't have to be useful, because it isn't used. + color_src = 0 + +/datum/sprite_accessory/ipc_chassis/mcgreyscale + name = "Morpheus Cyberkinetics (Custom)" + limbs_id = "mcgipc" + color_src = MUTCOLORS + +/datum/sprite_accessory/ipc_chassis/bishopcyberkinetics + name = "Bishop Cyberkinetics" + limbs_id = "bshipc" + +/datum/sprite_accessory/ipc_chassis/bishopcyberkinetics2 + name = "Bishop Cyberkinetics 2.0" + limbs_id = "bs2ipc" + +/datum/sprite_accessory/ipc_chassis/hephaestussindustries + name = "Hephaestus Industries" + limbs_id = "hsiipc" + +/datum/sprite_accessory/ipc_chassis/hephaestussindustries2 + name = "Hephaestus Industries 2.0" + limbs_id = "hi2ipc" + +/datum/sprite_accessory/ipc_chassis/pawsitronsunited + name = "Pawsitrons United" + limbs_id = "pawsitrons" + +/datum/sprite_accessory/ipc_chassis/shellguardmunitions + name = "Shellguard Munitions Standard Series" + limbs_id = "sgmipc" + +/datum/sprite_accessory/ipc_chassis/wardtakahashimanufacturing + name = "Ward-Takahashi Manufacturing" + limbs_id = "wtmipc" + +/datum/sprite_accessory/ipc_chassis/xionmanufacturinggroup + name = "Xion Manufacturing Group" + limbs_id = "xmgipc" + +/datum/sprite_accessory/ipc_chassis/xionmanufacturinggroup2 + name = "Xion Manufacturing Group 2.0" + limbs_id = "xm2ipc" + +/datum/sprite_accessory/ipc_chassis/zenghupharmaceuticals + name = "Zeng-Hu Pharmaceuticals" + limbs_id = "zhpipc" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/kepori.dm b/code/modules/mob/dead/new_player/sprite_accessories/kepori.dm new file mode 100644 index 000000000000..4ed949c63ef8 --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/kepori.dm @@ -0,0 +1,113 @@ +//Kepori mutant parts + +//Start head feathers + +/datum/sprite_accessory/kepori_feathers + color_src = HAIR + icon = 'icons/mob/kepori_parts.dmi' + +/datum/sprite_accessory/kepori_feathers/none + name = "None" + +/datum/sprite_accessory/kepori_feathers/sleek + name = "Sleek" + icon_state = "sleek" + +/datum/sprite_accessory/kepori_feathers/peel + name = "The Peel" + icon_state = "peel" + +/datum/sprite_accessory/kepori_feathers/sweep + name = "Swept Up" + icon_state = "sweep" + +/datum/sprite_accessory/kepori_feathers/aerodynamic + name = "Aerodynamic" + icon_state = "aerodynamic" + +/datum/sprite_accessory/kepori_feathers/mohawk + name = "Mo-Hawk" + icon_state = "mohawk" + +/datum/sprite_accessory/kepori_feathers/cowlick + name = "Cow-lick" + icon_state = "cowlick" + +/datum/sprite_accessory/kepori_feathers/spikey + name = "Spikey" + icon_state = "spikey" + +/datum/sprite_accessory/kepori_feathers/soap + name = "Soap" + icon_state = "soap" + +/datum/sprite_accessory/kepori_feathers/crowned + name = "Crowned" + icon_state = "crowned" + +/datum/sprite_accessory/kepori_feathers/crested + name = "Crested" + icon_state = "crested" + +/datum/sprite_accessory/kepori_feathers/ponytail + name = "Ponytail" + icon_state = "ponytail" + +/datum/sprite_accessory/kepori_feathers/bun + name = "Bun" + icon_state = "bun" + +//Start body feathers + +/datum/sprite_accessory/kepori_body_feathers + color_src = MUTCOLORS_SECONDARY + icon = 'icons/mob/kepori_parts.dmi' + +/datum/sprite_accessory/kepori_body_feathers/none + name = "None" + +/datum/sprite_accessory/kepori_body_feathers/aftik + name = "Aftik" + icon_state = "aftik" + +/datum/sprite_accessory/kepori_body_feathers/belly + name = "Belly" + icon_state = "belly" + +/datum/sprite_accessory/kepori_body_feathers/shirt + name = "Shirt" + icon_state = "shirt" + +/datum/sprite_accessory/kepori_body_feathers/soap + name = "Soap" + icon_state = "soap" + +/datum/sprite_accessory/kepori_body_feathers/wings + name = "Wings" + icon_state = "wings" + +//Start tail feathers + +/datum/sprite_accessory/kepori_tail_feathers + color_src = MUTCOLORS_SECONDARY + icon = 'icons/mob/kepori_parts.dmi' + +/datum/sprite_accessory/kepori_tail_feathers/none + name = "None" + +/datum/sprite_accessory/kepori_tail_feathers/fan + name = "Fan" + icon_state = "fan" + +/datum/sprite_accessory/kepori_tail_feathers/back + name = "Back" + icon_state = "back" + +/datum/sprite_accessory/kepori_tail_feathers/fanback + name = "Fan and Back" + icon_state = "fanback" + +/datum/sprite_accessory/kepori_tail_feathers/prosthetic + name = "Prosthetic Tail" + icon_state = "prosthetic" + color_src = null diff --git a/code/modules/mob/dead/new_player/sprite_accessories/lizard.dm b/code/modules/mob/dead/new_player/sprite_accessories/lizard.dm new file mode 100644 index 000000000000..22f64c46d14e --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/lizard.dm @@ -0,0 +1,228 @@ +//Sarathi Mutantparts + +//Start markings + +/datum/sprite_accessory/body_markings + icon = 'icons/mob/mutant_bodyparts.dmi' + color_src = MUTCOLORS_SECONDARY + body_zone = BODY_ZONE_CHEST + synthetic_icon_state = "none" + +/datum/sprite_accessory/body_markings/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/body_markings/dtiger + name = "Dark Tiger Body" + icon_state = "dtiger" + gender_specific = TRUE + +/datum/sprite_accessory/body_markings/ltiger + name = "Light Tiger Body" + icon_state = "ltiger" + gender_specific = TRUE + +/datum/sprite_accessory/body_markings/lbelly + name = "Light Belly" + icon_state = "lbelly" + gender_specific = TRUE + +//Start tails + +/datum/sprite_accessory/tails + icon = 'icons/mob/mutant_bodyparts.dmi' + body_zone = BODY_ZONE_CHEST + synthetic_icon_state = "synth" + +/datum/sprite_accessory/tails_animated + icon = 'icons/mob/mutant_bodyparts.dmi' + body_zone = BODY_ZONE_CHEST + +/datum/sprite_accessory/tails/lizard/smooth + name = "Smooth" + icon_state = "smooth" + +/datum/sprite_accessory/tails_animated/lizard/smooth + name = "Smooth" + icon_state = "smooth" + +/datum/sprite_accessory/tails/lizard/dtiger + name = "Dark Tiger" + icon_state = "dtiger" + +/datum/sprite_accessory/tails_animated/lizard/dtiger + name = "Dark Tiger" + icon_state = "dtiger" + +/datum/sprite_accessory/tails/lizard/ltiger + name = "Light Tiger" + icon_state = "ltiger" + +/datum/sprite_accessory/tails_animated/lizard/ltiger + name = "Light Tiger" + icon_state = "ltiger" + +/datum/sprite_accessory/tails/lizard/spikes + name = "Spikes" + icon_state = "spikes" + +/datum/sprite_accessory/tails_animated/lizard/spikes + name = "Spikes" + icon_state = "spikes" + +/datum/sprite_accessory/tails/lizard/large + name = "Large" + icon_state = "large" + synthetic_icon_state = "large" //fight me + +/datum/sprite_accessory/tails_animated/lizard/large + name = "Large" + icon_state = "large" + synthetic_icon_state = "large" + +//Start Snouts + +/datum/sprite_accessory/snouts + icon = 'icons/mob/mutant_bodyparts.dmi' + body_zone = BODY_ZONE_HEAD + synthetic_icon_state = "none" + +/datum/sprite_accessory/snouts/sharp + name = "Sharp" + icon_state = "sharp" + +/datum/sprite_accessory/snouts/round + name = "Round" + icon_state = "round" + +/datum/sprite_accessory/snouts/sharplight + name = "Sharp + Light" + icon_state = "sharplight" + +/datum/sprite_accessory/snouts/roundlight + name = "Round + Light" + icon_state = "roundlight" + +//Start Horns + +/datum/sprite_accessory/horns + icon = 'icons/mob/mutant_bodyparts.dmi' + color_src = HAIR + body_zone = BODY_ZONE_HEAD + synthetic_color_src = MUTCOLORS_SECONDARY + +/datum/sprite_accessory/horns/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/horns/simple + name = "Simple" + icon_state = "simple" + synthetic_icon_state = "simple_synth" + +/datum/sprite_accessory/horns/short + name = "Short" + icon_state = "short" + synthetic_icon_state = "short_synth" + +/datum/sprite_accessory/horns/curled + name = "Curled" + icon_state = "curled" + synthetic_icon_state = "curled_synth" + +/datum/sprite_accessory/horns/ram + name = "Ram" + icon_state = "ram" + synthetic_icon_state = "ram_synth" + +/datum/sprite_accessory/horns/angler + name = "Angeler" + icon_state = "angler" + +//Start Frills + +/datum/sprite_accessory/frills + icon = 'icons/mob/mutant_bodyparts.dmi' + +/datum/sprite_accessory/frills/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/frills/simple + name = "Simple" + icon_state = "simple" + +/datum/sprite_accessory/frills/short + name = "Short" + icon_state = "short" + +/datum/sprite_accessory/frills/aquatic + name = "Aquatic" + icon_state = "aqua" + +//Start Spines + +/datum/sprite_accessory/spines + icon = 'icons/mob/mutant_bodyparts.dmi' + +/datum/sprite_accessory/spines_animated + icon = 'icons/mob/mutant_bodyparts.dmi' + +/datum/sprite_accessory/spines/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/spines_animated/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/spines/short + name = "Short" + icon_state = "short" + +/datum/sprite_accessory/spines_animated/short + name = "Short" + icon_state = "short" + +/datum/sprite_accessory/spines/shortmeme + name = "Short + Membrane" + icon_state = "shortmeme" + +/datum/sprite_accessory/spines_animated/shortmeme + name = "Short + Membrane" + icon_state = "shortmeme" + +/datum/sprite_accessory/spines/long + name = "Long" + icon_state = "long" + +/datum/sprite_accessory/spines_animated/long + name = "Long" + icon_state = "long" + +/datum/sprite_accessory/spines/longmeme + name = "Long + Membrane" + icon_state = "longmeme" + +/datum/sprite_accessory/spines_animated/longmeme + name = "Long + Membrane" + icon_state = "longmeme" + +/datum/sprite_accessory/spines/aquatic + name = "Aquatic" + icon_state = "aqua" + +/datum/sprite_accessory/spines_animated/aquatic + name = "Aquatic" + icon_state = "aqua" + +//Leg stuff, no better place to put it, no point in a legs.dm file + +/datum/sprite_accessory/legs //legs are a special case, they aren't actually sprite_accessories but are updated with them. + icon = null //These datums exist for selecting legs on preference, and little else + +/datum/sprite_accessory/legs/none + name = "Normal Legs" + +/datum/sprite_accessory/legs/digitigrade_lizard + name = "Digitigrade Legs" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/moth.dm b/code/modules/mob/dead/new_player/sprite_accessories/moth.dm new file mode 100644 index 000000000000..43b493cc36f5 --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/moth.dm @@ -0,0 +1,256 @@ +//Mutant parts for moths + +//Start wings + +/datum/sprite_accessory/moth_wings + icon = 'icons/mob/moth_wings.dmi' + color_src = null + +/datum/sprite_accessory/moth_wings/plain + name = "Plain" + icon_state = "plain" + +/datum/sprite_accessory/moth_wings/monarch + name = "Monarch" + icon_state = "monarch" + +/datum/sprite_accessory/moth_wings/luna + name = "Luna" + icon_state = "luna" + +/datum/sprite_accessory/moth_wings/atlas + name = "Atlas" + icon_state = "atlas" + +/datum/sprite_accessory/moth_wings/reddish + name = "Reddish" + icon_state = "redish" + +/datum/sprite_accessory/moth_wings/royal + name = "Royal" + icon_state = "royal" + +/datum/sprite_accessory/moth_wings/gothic + name = "Gothic" + icon_state = "gothic" + +/datum/sprite_accessory/moth_wings/lovers + name = "Lovers" + icon_state = "lovers" + +/datum/sprite_accessory/moth_wings/whitefly + name = "White Fly" + icon_state = "whitefly" + +/datum/sprite_accessory/moth_wings/punished + name = "Burnt Off" + icon_state = "burnt" + locked = TRUE + +/datum/sprite_accessory/moth_wings/firewatch + name = "Firewatch" + icon_state = "firewatch" + +/datum/sprite_accessory/moth_wings/deathhead + name = "Deathshead" + icon_state = "deathhead" + +/datum/sprite_accessory/moth_wings/poison + name = "Poison" + icon_state = "poison" + +/datum/sprite_accessory/moth_wings/ragged + name = "Ragged" + icon_state = "ragged" + +/datum/sprite_accessory/moth_wings/moonfly + name = "Moon Fly" + icon_state = "moonfly" + +/datum/sprite_accessory/moth_wings/snow + name = "Snow" + icon_state = "snow" + +/datum/sprite_accessory/moth_wings/oakworm + name = "Oak Worm" + icon_state = "oakworm" + +/datum/sprite_accessory/moth_wings/jungle + name = "Jungle" + icon_state = "jungle" + +/datum/sprite_accessory/moth_wings/witchwing + name = "Witch Wing" + icon_state = "witchwing" + +/datum/sprite_accessory/moth_wings/brown + name = "Brown" + icon_state = "brown" + +/datum/sprite_accessory/moth_wings/feathery + name = "Feathery" + icon_state = "feathery" + +/datum/sprite_accessory/moth_wings/rosy + name = "Rosy" + icon_state = "rosy" + +/datum/sprite_accessory/moth_wings/plasmafire + name = "Plasmafire" + icon_state = "plasmafire" + +//Start markings + +/datum/sprite_accessory/moth_markings + icon = 'icons/mob/moth_markings.dmi' + color_src = null + +/datum/sprite_accessory/moth_markings/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/moth_markings/reddish + name = "Reddish" + icon_state = "reddish" + +/datum/sprite_accessory/moth_markings/royal + name = "Royal" + icon_state = "royal" + +/datum/sprite_accessory/moth_markings/gothic + name = "Gothic" + icon_state = "gothic" + +/datum/sprite_accessory/moth_markings/whitefly + name = "White Fly" + icon_state = "whitefly" + +/datum/sprite_accessory/moth_markings/lovers + name = "Lovers" + icon_state = "lovers" + +/datum/sprite_accessory/moth_markings/punished + name = "Punished" + icon_state = "punished" + +/datum/sprite_accessory/moth_markings/firewatch + name = "Firewatch" + icon_state = "firewatch" + +/datum/sprite_accessory/moth_markings/deathhead + name = "Deathshead" + icon_state = "deathhead" + +/datum/sprite_accessory/moth_markings/poison + name = "Poison" + icon_state = "poison" + +/datum/sprite_accessory/moth_markings/ragged + name = "Ragged" + icon_state = "ragged" + +/datum/sprite_accessory/moth_markings/moonfly + name = "Moon Fly" + icon_state = "moonfly" + +/datum/sprite_accessory/moth_markings/oakworm + name = "Oak Worm" + icon_state = "oakworm" + +/datum/sprite_accessory/moth_markings/jungle + name = "Jungle" + icon_state = "jungle" + +/datum/sprite_accessory/moth_markings/witchwing + name = "Witch Wing" + icon_state = "witchwing" + +//Moth fluff, the bit around the neck + +/datum/sprite_accessory/moth_fluff + icon = 'icons/mob/moth_wings.dmi' + color_src = null + +/datum/sprite_accessory/moth_fluff/plain + name = "Plain" + icon_state = "plain" + +/datum/sprite_accessory/moth_fluff/bent + name = "Bent" + icon_state = "bent" + +/datum/sprite_accessory/moth_fluff/reddish + name = "Reddish" + icon_state = "redish" + +/datum/sprite_accessory/moth_fluff/royal + name = "Royal" + icon_state = "royal" + +/datum/sprite_accessory/moth_fluff/gothic + name = "Gothic" + icon_state = "gothic" + +/datum/sprite_accessory/moth_fluff/lovers + name = "Lovers" + icon_state = "lovers" + +/datum/sprite_accessory/moth_fluff/whitefly + name = "White Fly" + icon_state = "whitefly" + +/datum/sprite_accessory/moth_fluff/punished + name = "Burnt" + icon_state = "burnt" + +/datum/sprite_accessory/moth_fluff/firewatch + name = "Firewatch" + icon_state = "firewatch" + +/datum/sprite_accessory/moth_fluff/deathhead + name = "Deathshead" + icon_state = "deathhead" + +/datum/sprite_accessory/moth_fluff/poison + name = "Poison" + icon_state = "poison" + +/datum/sprite_accessory/moth_fluff/moonfly + name = "Moon Fly" + icon_state = "moonfly" + +/datum/sprite_accessory/moth_fluff/snow + name = "Snow" + icon_state = "snow" + +/datum/sprite_accessory/moth_fluff/oakworm + name = "Oak Worm" + icon_state = "oakworm" + +/datum/sprite_accessory/moth_fluff/jungle + name = "Jungle" + icon_state = "jungle" + +/datum/sprite_accessory/moth_fluff/witchwing + name = "Witch Wing" + icon_state = "witchwing" + +/datum/sprite_accessory/moth_fluff/shaved + name = "Shaved" + icon_state = "shaved" + +/datum/sprite_accessory/moth_fluff/brown + name = "Brown" + icon_state = "brown" + +/datum/sprite_accessory/moth_fluff/feathery + name = "Feathery" + icon_state = "feathery" + +/datum/sprite_accessory/moth_fluff/rosy + name = "Rosy" + icon_state = "rosy" + +/datum/sprite_accessory/moth_fluff/plasmafire + name = "Plasmafire" + icon_state = "plasmafire" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/rachnid.dm b/code/modules/mob/dead/new_player/sprite_accessories/rachnid.dm new file mode 100644 index 000000000000..1e60fd1d7ab5 --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/rachnid.dm @@ -0,0 +1,55 @@ +//Rachnid mutantparts + +//Start legs + +/datum/sprite_accessory/spider_legs + icon = 'icons/mob/species/rachnid/spider_legs.dmi' + color_src = MUTCOLORS + +/datum/sprite_accessory/spider_legs/plain + name = "Plain" + icon_state = "plain" + +/datum/sprite_accessory/spider_legs/fuzzy + name = "Fuzzy" + icon_state = "fuzzy" + +/datum/sprite_accessory/spider_legs/spiky + name = "Spiky" + icon_state = "spiky" + +//Start spinner + +/datum/sprite_accessory/spider_spinneret + icon = 'icons/mob/species/rachnid/spider_spinneret.dmi' + color_src = MUTCOLORS + +/datum/sprite_accessory/spider_spinneret/plain + name = "Plain" + icon_state = "plain" + +/datum/sprite_accessory/spider_spinneret/fuzzy + name = "Fuzzy" + icon_state = "fuzzy" + +/datum/sprite_accessory/spider_spinneret/black_widow + name = "Black Widow" + icon_state = "blackwidow" + +//Start mandible + +/datum/sprite_accessory/spider_mandibles + icon = 'icons/mob/species/rachnid/spider_mandibles.dmi' + color_src = MUTCOLORS + +/datum/sprite_accessory/spider_mandibles/plain + name = "Plain" + icon_state = "plain" + +/datum/sprite_accessory/spider_mandibles/fuzzy + name = "Fuzzy" + icon_state = "fuzzy" + +/datum/sprite_accessory/spider_mandibles/spiky + name = "Spiky" + icon_state = "spiky" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/tails.dm b/code/modules/mob/dead/new_player/sprite_accessories/tails.dm new file mode 100644 index 000000000000..6f864b42a04d --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/tails.dm @@ -0,0 +1,55 @@ +//Tails mutant parts for nonspecific species + +/datum/sprite_accessory/tails/human/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/tails_animated/human/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/tails/human/cat + name = "Cat" + icon_state = "cat" + color_src = HAIR + +/datum/sprite_accessory/tails_animated/human/cat + name = "Cat" + icon_state = "cat" + color_src = HAIR + +/datum/sprite_accessory/tails/human/cat/slime + name = "Slimecat" + icon_state = "cat" + color_src = HAIR + image_alpha = 150 + +/datum/sprite_accessory/tails_animated/human/cat/slime + name = "Slimecat" + icon_state = "cat" + color_src = HAIR + image_alpha = 150 + +/datum/sprite_accessory/tails/human/fox + icon = 'icons/mob/species/misc/fox.dmi' + name = "Fox" + icon_state = "fox" + color_src = HAIR + +/datum/sprite_accessory/tails_animated/human/fox + icon = 'icons/mob/species/misc/fox.dmi' + name = "Fox" + icon_state = "fox" + color_src = HAIR + +/datum/sprite_accessory/tails/human/fox/alt + icon = 'icons/mob/species/misc/fox.dmi' + name = "Fox 2" + icon_state = "fox2" + color_src = HAIR + +/datum/sprite_accessory/tails_animated/human/fox/alt + icon = 'icons/mob/species/misc/fox.dmi' + name = "Fox 2" + icon_state = "fox2" + color_src = HAIR diff --git a/code/modules/mob/dead/new_player/sprite_accessories/underwear/underwear_legs.dm b/code/modules/mob/dead/new_player/sprite_accessories/underwear/underwear_legs.dm new file mode 100644 index 000000000000..2e6ee0aa88ef --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/underwear/underwear_legs.dm @@ -0,0 +1,79 @@ +/datum/sprite_accessory/underwear + icon = 'icons/mob/clothing/underwear/underwear_legs.dmi' + //freedom + gender = NEUTER + //Whether the underwear uses a special sprite for digitigrade style (i.e. briefs, not panties). Adds a "_d" suffix to the icon state + var/has_digitigrade = FALSE + +//Male undergarment bottoms + +/datum/sprite_accessory/underwear/nude + name = "Nude" + icon_state = null + +/datum/sprite_accessory/underwear/briefs + name = "Briefs" + icon_state = "briefs" + has_digitigrade = TRUE + +/datum/sprite_accessory/underwear/boxers + name = "Boxer" + icon_state = "boxers" + has_digitigrade = TRUE + +/datum/sprite_accessory/underwear/stripe + name = "Striped Boxers" + icon_state = "stripe" + has_digitigrade = TRUE + +/datum/sprite_accessory/underwear/midway + name = "Midway Boxers" + icon_state = "midway" + has_digitigrade = TRUE + +/datum/sprite_accessory/underwear/longjohns + name = "Long Johns" + icon_state = "longjohns" + has_digitigrade = TRUE + +/datum/sprite_accessory/underwear/mankini + name = "Mankini" + icon_state = "mankini" + +/datum/sprite_accessory/underwear/hearts + name = "Heart Boxers" + icon_state = "heart" + use_static = TRUE + has_digitigrade = TRUE + +//Female undergarment bottoms + +/datum/sprite_accessory/underwear/panties + name = "Panties (Greyscale)" + icon_state = "panties" + +/datum/sprite_accessory/underwear/pantiesalt + name = "Alt Panties (Greyscale)" + icon_state = "panties_alt" + +/datum/sprite_accessory/underwear/swimming + name = "Swimming Panties (Greyscale)" + icon_state = "swimming" + +/datum/sprite_accessory/underwear/thong + name = "Thong (Greyscale)" + icon_state = "thong" + +/datum/sprite_accessory/underwear/boyshorts + name = "Boyshorts (Greyscale)" + icon_state = "boyshorts" + has_digitigrade = TRUE + +/datum/sprite_accessory/underwear/catgirl + name = "Catgirl Panties (Greyscale)" + icon_state = "panties_cat" + +/datum/sprite_accessory/underwear/beekini + name = "Bee-Kini Bottoms" + icon_state = "beekini" + use_static = TRUE diff --git a/code/modules/mob/dead/new_player/sprite_accessories/underwear/underwear_socks.dm b/code/modules/mob/dead/new_player/sprite_accessories/underwear/underwear_socks.dm new file mode 100644 index 000000000000..ab7a030e6712 --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/underwear/underwear_socks.dm @@ -0,0 +1,124 @@ +/datum/sprite_accessory/socks + icon = 'icons/mob/clothing/underwear/underwear_socks.dmi' + +/datum/sprite_accessory/socks/nude + name = "Nude" + icon_state = null + +/datum/sprite_accessory/socks/socks_short + name = "Short Socks (Greyscale)" + icon_state = "short" + +/datum/sprite_accessory/socks/socks_norm + name = "Socks (Greyscale)" + icon_state = "norm" + +/datum/sprite_accessory/socks/socks_knee + name = "Knee-High Socks (Greyscale)" + icon_state = "knee" + +/datum/sprite_accessory/socks/socks_thigh + name = "Thigh-High Socks (Greyscale)" + icon_state = "thigh" + +/datum/sprite_accessory/socks/striped_knee + name = "Striped Knee-Highs (Greyscale)" + icon_state = "striped_knee" + +/datum/sprite_accessory/socks/striped_thigh + name = "Striped Thigh-Highs (Greyscale)" + icon_state = "striped_thigh" + +/datum/sprite_accessory/socks/bee_knee + name = "Bee Knee-Highs" + icon_state = "knee_bee" + use_static = TRUE + +/datum/sprite_accessory/socks/bee_thigh + name = "Bee Thigh-Highs" + icon_state = "thigh_bee" + use_static = TRUE + +/datum/sprite_accessory/socks/inteq + name = "Inteq Thigh-Highs" + icon_state = "inteq" + use_static = TRUE + +/datum/sprite_accessory/socks/stockings + name = "Black Stockings" + icon_state = "stocking" + use_static = TRUE + +/datum/sprite_accessory/socks/stockings_programmer + name = "Programmer Thigh-Highs" + icon_state = "thigh_coder" + use_static = TRUE + +/datum/sprite_accessory/socks/stockings_puce + name = "Pucegrammer Thigh-Highs" + icon_state = "thigh_puce" + use_static = TRUE + +/datum/sprite_accessory/socks/stockings_blue + name = "Blue Thigh-Highs" + icon_state = "thigh_blue" + use_static = TRUE + +/datum/sprite_accessory/socks/stockings_green + name = "Green Thigh-Highs" + icon_state = "thigh_green" + use_static = TRUE + +/datum/sprite_accessory/socks/stockings_cyan + name = "Cyan Thigh-Highs" + icon_state = "thigh_purple" + use_static = TRUE + +/datum/sprite_accessory/socks/stockings_cyan + name = "Orange Thigh-Highs" + icon_state = "thigh_orange" + use_static = TRUE + +/datum/sprite_accessory/socks/stockings_cyan + name = "Yellow Thigh-Highs" + icon_state = "thigh_yellow" + use_static = TRUE + +/datum/sprite_accessory/socks/pantyhose_short + name = "Knee Pantyhose" + icon_state = "knee_thin" + +/datum/sprite_accessory/socks/pantyhose_short + name = "Thigh Pantyhose" + icon_state = "thigh_thin" + +/datum/sprite_accessory/socks/pantyhose_waist + name = "High Pantyhose" + icon_state = "pantyhose" + +//Pride Socks todo:finish the damn sprites and digi variants. ugh + +/datum/sprite_accessory/socks/lesbian + name = "Thigh-High (Lesbian)" + icon_state = "thigh_les" + use_static = TRUE + +/datum/sprite_accessory/socks/bisexual + name = "Thigh-High (Bi)" + icon_state = "thigh_bi" //:wegottastudythis: + use_static = TRUE + +/datum/sprite_accessory/socks/transgender + name = "Thigh-High (Trans)" + icon_state = "thigh_trans" + use_static = TRUE + +/datum/sprite_accessory/socks/nonbinary + name = "Thigh-High (Nonbinary)" + icon_state = "thigh_enby" + use_static = TRUE + +/datum/sprite_accessory/socks/asexual + name = "Thigh-High (Asexual)" + icon_state = "thigh_ace" + use_static = TRUE diff --git a/code/modules/mob/dead/new_player/sprite_accessories/underwear/underwear_torso.dm b/code/modules/mob/dead/new_player/sprite_accessories/underwear/underwear_torso.dm new file mode 100644 index 000000000000..39f26ed52d6d --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/underwear/underwear_torso.dm @@ -0,0 +1,141 @@ +/datum/sprite_accessory/undershirt + icon = 'icons/mob/clothing/underwear/underwear_torso.dmi' + //freedom + gender = NEUTER + +/datum/sprite_accessory/undershirt/nude + name = "Nude" + icon_state = null + +//Start normal shirts + +//Female undergarment tops + +/datum/sprite_accessory/undershirt/bra + name = "Bra" + icon_state = "bra" + +/datum/sprite_accessory/undershirt/altbra + name = "Bra (Alt)" + icon_state = "bra_alt" + +/datum/sprite_accessory/undershirt/sportsbra + name = "Sports Bra" + icon_state = "bra_sports" + +/datum/sprite_accessory/undershirt/sportsbraalt + name = "Sports Bra (Alt)" + icon_state = "bra_sports_alt" + +/datum/sprite_accessory/undershirt/swimming + name = "Swimming Top" + icon_state = "swimming" + +/datum/sprite_accessory/undershirt/straplessbra + name = "Strapless Bra" + icon_state = "bra_strapless" + +/datum/sprite_accessory/undershirt/straplessbralt + name = "Strapless Bra (Alt)" + icon_state = "bra_strapless_alt" + +/datum/sprite_accessory/undershirt/halterbra + name = "Halter Bra" + icon_state = "bra_halter" + +/datum/sprite_accessory/undershirt/catgirl + name = "Catgirl Bra" //The balance must be preserved + icon_state = "bra_cat" + +/datum/sprite_accessory/undershirt/beekini + name = "Bee-Kini Top" + icon_state = "beekini" + use_static = TRUE + +/datum/sprite_accessory/undershirt/tshirt + name = "T-Shirt (Greyscale)" + icon_state = "tshirt" + +/datum/sprite_accessory/undershirt/polo + name = "Polo Shirt (Greyscale)" + icon_state = "polo" + +/datum/sprite_accessory/undershirt/shortsleeve + name = "Short-sleeved shirt (Greyscale)" + icon_state = "shortsleeve" + +/datum/sprite_accessory/undershirt/tanktop + name = "Tank Top (Greyscale)" + icon_state = "tank" + +/datum/sprite_accessory/undershirt/oneshoulder + name = "One Shoulder (Greyscale)" + icon_state = "oneshoulder" + +/datum/sprite_accessory/undershirt/turtle + name = "Turtleneck (Greyscale)" + icon_state = "turtle" + +/datum/sprite_accessory/undershirt/turtle_sleeveless + name = "Sleeveless Turtleneck (Greyscale)" + icon_state = "turtle_sleeveless" + +/datum/sprite_accessory/undershirt/buttondown + name = "Button-down Shirt (Greyscale)" + icon_state = "button" + +/datum/sprite_accessory/undershirt/buttondown_short + name = "Short Sleeve Button-Down (Greyscale)" + icon_state = "button_short" + +/datum/sprite_accessory/undershirt/band + name = "T-Shirt (Band)" + icon_state = "band" + use_static = TRUE + +/datum/sprite_accessory/undershirt/heart + name = "T-Shirt (Heart)" + icon_state = "heart" + use_static = TRUE + +/datum/sprite_accessory/undershirt/peace + name = "T-Shirt (Peace)" + icon_state = "peace" + use_static = TRUE + +/datum/sprite_accessory/undershirt/tankfire + name = "Tank Top (Fire)" + icon_state = "tank_fire" + use_static = TRUE + +// Pride shirts + +/datum/sprite_accessory/undershirt/tank_les + name = "Tank Top (Pride)" + icon_state = "pride" + use_static = TRUE + +/datum/sprite_accessory/undershirt/tank_les + name = "Tank Top (Lesbian)" + icon_state = "les" + use_static = TRUE + +/datum/sprite_accessory/undershirt/tank_bi + name = "Tank Top (Bi)" //we gotta study this + icon_state = "bi" + use_static = TRUE + +/datum/sprite_accessory/undershirt/tank_trans + name = "Tank Top (Trans)" + icon_state = "trans" + use_static = TRUE + +/datum/sprite_accessory/undershirt/tank_enby + name = "Tank Top (Nonbinary)" + icon_state = "enby" + use_static = TRUE + +/datum/sprite_accessory/undershirt/tank_ace + name = "Tank Top (Asexual)" + icon_state = "ace" + use_static = TRUE diff --git a/code/modules/mob/dead/new_player/sprite_accessories/vox.dm b/code/modules/mob/dead/new_player/sprite_accessories/vox.dm new file mode 100644 index 000000000000..67ef30674c04 --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/vox.dm @@ -0,0 +1,111 @@ +//Vox mutant parts + +//Start head quills + +/datum/sprite_accessory/vox_head_quills + icon = 'icons/mob/species/vox/vox_quills.dmi' + color_src = null + +/datum/sprite_accessory/vox_head_quills/none + name = "None" + +/datum/sprite_accessory/vox_head_quills/wildflower + name = "Wildflower" + icon_state = "wildflower" + +/datum/sprite_accessory/vox_head_quills/augmenter + name = "Augmenter" + icon_state = "augmenter" + +/datum/sprite_accessory/vox_head_quills/shaggy + name = "Shaggy" + icon_state = "shaggy" + +/datum/sprite_accessory/vox_head_quills/mange + name = "Mange" + icon_state = "mange" + +/datum/sprite_accessory/vox_head_quills/ponytail + name = "Ponytail" + icon_state = "ponytail" + +/datum/sprite_accessory/vox_head_quills/rows + name = "Rows" + icon_state = "rows" + +/datum/sprite_accessory/vox_head_quills/cropped + name = "Cropped" + icon_state = "cropped" + +/datum/sprite_accessory/vox_head_quills/surf + name = "Surf" + icon_state = "surf" + +/datum/sprite_accessory/vox_head_quills/nights + name = "Nights" + icon_state = "nights" + +/datum/sprite_accessory/vox_head_quills/horns + name = "Horns" + icon_state = "horns" + +/datum/sprite_accessory/vox_head_quills/longhawk + name = "Longhawk" + icon_state = "longhawk" + +/datum/sprite_accessory/vox_head_quills/mohawk + name = "Mohawk" + icon_state = "mohawk" + +/datum/sprite_accessory/vox_head_quills/yasu + name = "Yasu" + icon_state = "yasu" + +/datum/sprite_accessory/vox_head_quills/afro + name = "Afro" + icon_state = "afro" + +/datum/sprite_accessory/vox_head_quills/kingly + name = "Kingly" + icon_state = "kingly" + +/datum/sprite_accessory/vox_head_quills/shortquills + name = "Short Quills" + icon_state = "shortquills" + +//Start neck quills + +/datum/sprite_accessory/vox_neck_quills + icon = 'icons/mob/species/vox/vox_quills.dmi' + color_src = null + +/datum/sprite_accessory/vox_neck_quills/none + name = "None" + +/datum/sprite_accessory/vox_neck_quills/beard + name = "Beard" + icon_state = "beard" + +/datum/sprite_accessory/vox_neck_quills/fuu + name = "Fuu" + icon_state = "fuu" + +/datum/sprite_accessory/vox_neck_quills/colonal + name = "Colonal" + icon_state = "colonal" + +/datum/sprite_accessory/vox_neck_quills/plain + name = "Plain" + icon_state = "plain" + +/datum/sprite_accessory/vox_neck_quills/tailfeather //...technically neck + name = "Tailfeather" + icon_state = "tailfeather" + +/datum/sprite_accessory/vox_neck_quills/ruffbeard + name = "Ruffbeard" + icon_state = "ruffbeard" + +/datum/sprite_accessory/vox_neck_quills/ruffhawk + name = "Ruffhawk" + icon_state = "ruffhawk" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/wings.dm b/code/modules/mob/dead/new_player/sprite_accessories/wings.dm new file mode 100644 index 000000000000..8e5dd846b475 --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/wings.dm @@ -0,0 +1,100 @@ +//Wings for various species + +/datum/sprite_accessory/wings/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/wings + icon = 'icons/mob/clothing/wings.dmi' + +/datum/sprite_accessory/wings_open + icon = 'icons/mob/clothing/wings.dmi' + +//Human/Misc wings + +/datum/sprite_accessory/wings/angel + name = "Angel" + icon_state = "angel" + color_src = 0 + dimension_x = 46 + center = TRUE + dimension_y = 34 + locked = TRUE + +/datum/sprite_accessory/wings_open/angel + name = "Angel" + icon_state = "angel" + color_src = 0 + dimension_x = 46 + center = TRUE + dimension_y = 34 + +//Sarathi wings + +/datum/sprite_accessory/wings/dragon + name = "Dragon" + icon_state = "dragon" + dimension_x = 96 + center = TRUE + dimension_y = 32 + locked = TRUE + +/datum/sprite_accessory/wings_open/dragon + name = "Dragon" + icon_state = "dragon" + dimension_x = 96 + center = TRUE + dimension_y = 32 + +/datum/sprite_accessory/wings/megamoth + name = "Megamoth" + icon_state = "megamoth" + color_src = 0 + dimension_x = 96 + center = TRUE + dimension_y = 32 + locked = TRUE + +/datum/sprite_accessory/wings_open/megamoth + name = "Megamoth" + icon_state = "megamoth" + color_src = 0 + dimension_x = 96 + center = TRUE + dimension_y = 32 + +/datum/sprite_accessory/wings/mothra + name = "Mothra" + icon_state = "mothra" + color_src = 0 + dimension_x = 96 + center = TRUE + dimension_y = 32 + locked = TRUE + +/datum/sprite_accessory/wings_open/mothra + name = "Mothra" + icon_state = "mothra" + color_src = 0 + dimension_x = 96 + center = TRUE + dimension_y = 32 + +//Robotic species wings + +/datum/sprite_accessory/wings/robotic + name = "Robotic" + icon_state = "robotic" + color_src = 0 + dimension_x = 96 + center = TRUE + dimension_y = 32 + locked = TRUE + +/datum/sprite_accessory/wings_open/robotic + name = "Robotic" + icon_state = "robotic" + color_src = 0 + dimension_x = 96 + center = TRUE + dimension_y = 32 diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index 7dd5d1ed4740..a7f990006bb9 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -11,7 +11,7 @@ attack_verb = list("attacked", "slapped", "whacked") ///The brain's organ variables are significantly more different than the other organs, with half the decay rate for balance reasons, and twice the maxHealth - decay_factor = STANDARD_ORGAN_DECAY / 2 //30 minutes of decaying to result in a fully damaged brain, since a fast decay rate would be unfun gameplay-wise + decay_factor = STANDARD_VITAL_ORGAN_DECAY maxHealth = BRAIN_DAMAGE_DEATH low_threshold = 45 diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index f638b5cd3166..27d67da106be 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -412,9 +412,6 @@ var/obj/item/organ/alien/plasmavessel/vessel = getorgan(/obj/item/organ/alien/plasmavessel) if(vessel) . += "Plasma Stored: [vessel.storedPlasma]/[vessel.max_plasma]" - var/obj/item/organ/dwarfgland/dwarfgland = getorgan(/obj/item/organ/dwarfgland) // BeginWS Edit - Dwarf Alcohol Gland - if(dwarfgland) - . += "Alcohol Stored: [dwarfgland.stored_alcohol]/[dwarfgland.max_alcohol]" // EndWS Edit if(locate(/obj/item/assembly/health) in src) . += "Health: [health]" diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm index 07fe25a3482f..4da26d4406ca 100644 --- a/code/modules/mob/living/carbon/damage_procs.dm +++ b/code/modules/mob/living/carbon/damage_procs.dm @@ -1,6 +1,6 @@ -/mob/living/carbon/apply_damage(damage, damagetype = BRUTE, def_zone = null, blocked = FALSE, forced = FALSE, spread_damage = FALSE, break_modifier = 1) //WS change, adds bone break mod +/mob/living/carbon/apply_damage(damage, damagetype = BRUTE, def_zone = null, blocked = FALSE, forced = FALSE, spread_damage = FALSE, break_modifier = 1) SEND_SIGNAL(src, COMSIG_MOB_APPLY_DAMGE, damage, damagetype, def_zone) var/hit_percent = (100-blocked)/100 if(!damage || (!forced && hit_percent <= 0)) diff --git a/code/modules/mob/living/carbon/human/consistent_human.dm b/code/modules/mob/living/carbon/human/consistent_human.dm new file mode 100644 index 000000000000..7d3bdad88883 --- /dev/null +++ b/code/modules/mob/living/carbon/human/consistent_human.dm @@ -0,0 +1,39 @@ +/mob/living/carbon/human/dummy/consistent/setup_human_dna() + create_dna() + return //No randomisation + +/mob/living/carbon/human/dummy/consistent/proc/seeded_randomization(seed = 0) + gender = list(MALE, FEMALE)[seed % 2 + 1] + skin_tone = GLOB.skin_tones[seed % length(GLOB.skin_tones) + 1] + hairstyle = GLOB.hairstyles_list[seed % length(GLOB.hairstyles_list) + 1] + hair_color = color_natural_from_seed(seed) + eye_color = short_color_from_seed(seed) + + // Mutant randomizing, doesn't affect the mob appearance unless it's the specific mutant. + dna.features["mcolor"] = short_color_from_seed(seed * 2) + dna.features["mcolor2"] = short_color_from_seed(seed * 3) + //AAAAAAAAAAAAAAAAAAAAAAAAAA + dna.features["ethcolor"] = GLOB.color_list_ethereal[GLOB.color_list_ethereal[seed % length(GLOB.color_list_ethereal) + 1]] + dna.features["tail_lizard"] = GLOB.tails_list_lizard[seed % length(GLOB.tails_list_lizard) + 1] + dna.features["snout"] = GLOB.snouts_list[seed % length(GLOB.snouts_list) + 1] + dna.features["horns"] = GLOB.horns_list[seed % length(GLOB.horns_list) + 1] + dna.features["frills"] = GLOB.frills_list[seed % length(GLOB.frills_list) + 1] + dna.features["spines"] = GLOB.spines_list[seed % length(GLOB.spines_list) + 1] + dna.features["body_markings"] = GLOB.body_markings_list[seed % length(GLOB.body_markings_list) + 1] + dna.features["moth_wings"] = GLOB.moth_wings_list[seed % length(GLOB.moth_wings_list) + 1] + dna.features["moth_fluff"] = GLOB.moth_fluff_list[seed % length(GLOB.moth_fluff_list) + 1] + dna.features["spider_legs"] = GLOB.spider_legs_list[seed % length(GLOB.spider_legs_list) + 1] + dna.features["spider_spinneret"] = GLOB.spider_spinneret_list[seed % length(GLOB.spider_spinneret_list) + 1] + dna.features["spider_mandibles"] = GLOB.spider_mandibles_list[seed % length(GLOB.spider_mandibles_list) + 1] + dna.features["squid_face"] = GLOB.squid_face_list[seed % length(GLOB.squid_face_list) + 1] + dna.features["kepori_feathers"] = GLOB.kepori_feathers_list[seed % length(GLOB.kepori_feathers_list) + 1] + dna.features["kepori_body_feathers"] = GLOB.kepori_body_feathers_list[seed % length(GLOB.kepori_body_feathers_list) + 1] + dna.features["vox_head_quills"] = GLOB.vox_head_quills_list[seed % length(GLOB.vox_head_quills_list) + 1] + dna.features["vox_neck_quills"] = GLOB.vox_neck_quills_list[seed % length(GLOB.vox_neck_quills_list) + 1] + dna.features["elzu_horns"] = GLOB.elzu_horns_list[seed % length(GLOB.elzu_horns_list) + 1] + dna.features["tail_elzu"] = GLOB.tails_list_elzu[seed % length(GLOB.tails_list_elzu) + 1] + dna.features["ipc_chassis"] = GLOB.ipc_chassis_list[seed % length(GLOB.ipc_chassis_list) + 1] + dna.features["ipc_screen"] = GLOB.ipc_screens_list[seed % length(GLOB.ipc_screens_list) + 1] + + update_body() + update_hair() diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 84159548e6a7..74ee81bf687c 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -67,12 +67,10 @@ return pick('sound/voice/human/malescream_1.ogg', 'sound/voice/human/malescream_2.ogg', 'sound/voice/human/malescream_3.ogg', 'sound/voice/human/malescream_4.ogg', 'sound/voice/human/malescream_5.ogg', 'sound/voice/human/malescream_6.ogg') else if(ismoth(H)) return 'sound/voice/moth/scream_moth.ogg' - else if(issquidperson(H)) //WS squids go blubbblp - return 'sound/voice/squid/squidscream.ogg' else if(islizard(H)) return pick('sound/voice/lizard/lizard_scream_1.ogg', 'sound/voice/lizard/lizard_scream_2.ogg', 'sound/voice/lizard/lizard_scream_3.ogg', 'sound/voice/lizard/lizard_scream_4.ogg') -/datum/emote/living/carbon/human/hiss +/datum/emote/living/carbon/human/hiss //lizard key = "hiss" key_third_person = "hisses" message = "hisses!" @@ -82,11 +80,36 @@ /datum/emote/living/carbon/human/hiss/get_sound(mob/living/user) if(!ishuman(user)) return - var/mob/living/carbon/human/H = user - if (islizard(H)) + if(islizard(user)) return 'sound/voice/lizard/hiss.ogg' -/datum/emote/living/carbon/human/weh +/datum/emote/living/carbon/human/squeal //lizard + key = "squeal" + key_third_person = "squeals" + message = "squeals!" + emote_type = EMOTE_AUDIBLE + vary = TRUE + +/datum/emote/living/carbon/human/squeal/get_sound(mob/living/user) + if(!ishuman(user)) + return + if(islizard(user)) + return 'sound/voice/lizard/squeal.ogg' //This is from Bay + +/datum/emote/living/carbon/human/tailthump //lizard + key = "thump" + key_third_person = "thumps their tail" + message = "thumps their tail!" + emote_type = EMOTE_AUDIBLE + vary = TRUE + +/datum/emote/living/carbon/human/tailthump/get_sound(mob/living/user) + if(!ishuman(user)) + return + if(islizard(user)) + return 'sound/voice/lizard/tailthump.ogg' //https://freesound.org/people/TylerAM/sounds/389665/ + +/datum/emote/living/carbon/human/weh //lizard key = "weh" key_third_person = "lets out a weh" message = "lets out a weh!" @@ -96,8 +119,7 @@ /datum/emote/living/carbon/human/weh/get_sound(mob/living/user) if(!ishuman(user)) return - var/mob/living/carbon/human/H = user - if (islizard(H)) + if(islizard(user)) return 'sound/voice/lizard/weh.ogg' /datum/emote/living/carbon/human/pale @@ -201,8 +223,6 @@ var/turf/T = loc T.Entered(src) -//Ayy lmao - // Robotic Tongue emotes. Beep! /datum/emote/living/carbon/human/robot_tongue/can_run_emote(mob/user, status_check = TRUE , intentional) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 9a3aee5e61f0..067476afbbaf 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1428,9 +1428,6 @@ /mob/living/carbon/human/species/shadow race = /datum/species/shadow -/mob/living/carbon/human/species/squid - race = /datum/species/squid - /mob/living/carbon/human/species/shadow/nightmare race = /datum/species/shadow/nightmare @@ -1458,8 +1455,5 @@ /mob/living/carbon/human/species/ipc race = /datum/species/ipc -/mob/living/carbon/human/species/squid - race = /datum/species/squid - /mob/living/carbon/human/species/lizard/ashwalker/kobold race = /datum/species/lizard/ashwalker/kobold diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 03aea9d3f0dc..5b638d330690 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -40,11 +40,16 @@ var/underwear = "Nude" //Which underwear the player wants var/underwear_color = "000" //underwear color, what it sounds like var/undershirt = "Nude" //Which undershirt the player wants + var/undershirt_color = "000" //undershirt color var/socks = "Nude" //Which socks the player wants + var/socks_color = "000" //socks color, who could guess var/backpack = DBACKPACK //Which backpack type the player has chosen. var/jumpsuit_style = PREF_SUIT //suit/skirt var/exowear = PREF_EXOWEAR //exowear + ///Whether this human started with a full-body prosthesis + var/fbp = FALSE + //Equipment slots var/obj/item/clothing/wear_suit = null var/obj/item/clothing/w_uniform = null diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index 7c197e5b1029..2f9814112711 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -177,5 +177,7 @@ destination.underwear = underwear destination.underwear_color = underwear_color destination.undershirt = undershirt + destination.undershirt_color = undershirt_color destination.socks = socks + destination.socks_color = socks_color destination.jumpsuit_style = jumpsuit_style diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 63fbbc8a26da..82f5b4d7a13f 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -17,7 +17,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) //Species flags currently used for species restriction on items var/bodyflag = FLAG_HUMAN // Default color. If mutant colors are disabled, this is the color that will be used by that race. - var/default_color = "#FFF" + var/default_color = "#FFFFFF" var/bodytype = BODYTYPE_HUMANOID ///Whether or not the race has sexual characteristics (biological genders). At the moment this is only FALSE for skeletons and shadows @@ -212,9 +212,6 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/changesource_flags = NONE var/loreblurb = "Description not provided. Yell at a coder. Also, please look into cooking fajitas. That stuff is amazing." - // Does this species have unique robotic limbs? (currently used in: kepori and vox) - var/unique_prosthesis = FALSE - //K-Limbs. If a species doesn't have their own limb types. Do not override this, use the K-Limbs overrides at the top of the species datum. var/obj/item/bodypart/species_chest = /obj/item/bodypart/chest var/obj/item/bodypart/species_head = /obj/item/bodypart/head @@ -223,6 +220,28 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/obj/item/bodypart/species_r_leg = /obj/item/bodypart/leg/right var/obj/item/bodypart/species_l_leg = /obj/item/bodypart/leg/left + var/obj/item/bodypart/species_digi_l_leg = /obj/item/bodypart/leg/left/lizard/digitigrade + var/obj/item/bodypart/species_digi_r_leg = /obj/item/bodypart/leg/right/lizard/digitigrade + + var/obj/item/bodypart/species_robotic_chest = /obj/item/bodypart/chest/robot + var/obj/item/bodypart/species_robotic_head = /obj/item/bodypart/head/robot + var/obj/item/bodypart/species_robotic_l_arm = /obj/item/bodypart/l_arm/robot/surplus + var/obj/item/bodypart/species_robotic_r_arm = /obj/item/bodypart/r_arm/robot/surplus + var/obj/item/bodypart/species_robotic_l_leg = /obj/item/bodypart/leg/left/robot/surplus + var/obj/item/bodypart/species_robotic_r_leg = /obj/item/bodypart/leg/right/robot/surplus + + var/obj/item/bodypart/species_robotic_digi_l_leg = /obj/item/bodypart/leg/left/robot/surplus/lizard/digitigrade + var/obj/item/bodypart/species_robotic_digi_r_leg = /obj/item/bodypart/leg/right/robot/surplus/lizard/digitigrade + + var/obj/item/organ/heart/robotic_heart = /obj/item/organ/heart/cybernetic + var/obj/item/organ/lungs/robotic_lungs = /obj/item/organ/lungs/cybernetic + var/obj/item/organ/eyes/robotic_eyes = /obj/item/organ/eyes/robotic + var/obj/item/organ/ears/robotic_ears = /obj/item/organ/ears/cybernetic + var/obj/item/organ/tongue/robotic_tongue = /obj/item/organ/tongue/robot + var/obj/item/organ/liver/robotic_liver = /obj/item/organ/liver/cybernetic + var/obj/item/organ/stomach/robotic_stomach = /obj/item/organ/stomach/cybernetic + var/obj/item/organ/appendix/robotic_appendix = null + ///For custom overrides for species ass images var/icon/ass_image @@ -308,10 +327,18 @@ GLOBAL_LIST_EMPTY(roundstart_races) * * replace_current - boolean, forces all old organs to get deleted whether or not they pass the species' ability to keep that organ * * excluded_zones - list, add zone defines to block organs inside of the zones from getting handled. see headless mutation for an example */ -/datum/species/proc/regenerate_organs(mob/living/carbon/C,datum/species/old_species,replace_current=TRUE,list/excluded_zones) +/datum/species/proc/regenerate_organs(mob/living/carbon/C, datum/species/old_species,replace_current=TRUE, list/excluded_zones, robotic = FALSE) //what should be put in if there is no mutantorgan (brains handled seperately) - var/list/slot_mutantorgans = list(ORGAN_SLOT_BRAIN = mutantbrain, ORGAN_SLOT_HEART = mutantheart, ORGAN_SLOT_LUNGS = mutantlungs, ORGAN_SLOT_APPENDIX = mutantappendix, \ - ORGAN_SLOT_EYES = mutanteyes, ORGAN_SLOT_EARS = mutantears, ORGAN_SLOT_TONGUE = mutanttongue, ORGAN_SLOT_LIVER = mutantliver, ORGAN_SLOT_STOMACH = mutantstomach) + var/list/slot_mutantorgans = list( \ + ORGAN_SLOT_BRAIN = mutantbrain, \ + ORGAN_SLOT_HEART = robotic ? robotic_heart : mutantheart, \ + ORGAN_SLOT_LUNGS = robotic ? robotic_lungs : mutantlungs, \ + ORGAN_SLOT_APPENDIX = robotic ? robotic_appendix : mutantappendix, \ + ORGAN_SLOT_EYES = robotic ? robotic_eyes : mutanteyes, \ + ORGAN_SLOT_EARS = robotic ? robotic_ears : mutantears, \ + ORGAN_SLOT_TONGUE = robotic ? robotic_tongue : mutanttongue, \ + ORGAN_SLOT_LIVER = robotic ? robotic_liver : mutantliver, \ + ORGAN_SLOT_STOMACH = robotic ? robotic_stomach : mutantstomach) for(var/slot in list(ORGAN_SLOT_BRAIN, ORGAN_SLOT_HEART, ORGAN_SLOT_LUNGS, ORGAN_SLOT_APPENDIX, \ ORGAN_SLOT_EYES, ORGAN_SLOT_EARS, ORGAN_SLOT_TONGUE, ORGAN_SLOT_LIVER, ORGAN_SLOT_STOMACH)) @@ -358,73 +385,32 @@ GLOBAL_LIST_EMPTY(roundstart_races) QDEL_NULL(old) I.Insert(C) -/datum/species/proc/replace_body(mob/living/carbon/C, datum/species/new_species) +/datum/species/proc/is_digitigrade(mob/living/carbon/leg_haver) + return (digitigrade_customization == DIGITIGRADE_OPTIONAL && leg_haver.dna.features["legs"] == "Digitigrade Legs") || digitigrade_customization == DIGITIGRADE_FORCED + +/datum/species/proc/replace_body(mob/living/carbon/C, datum/species/new_species, robotic = FALSE) new_species ||= C.dna.species //If no new species is provided, assume its src. //Note for future: Potentionally add a new C.dna.species() to build a template species for more accurate limb replacement - if((new_species.digitigrade_customization == DIGITIGRADE_OPTIONAL && C.dna.features["legs"] == "Digitigrade Legs") || new_species.digitigrade_customization == DIGITIGRADE_FORCED) - new_species.species_r_leg = /obj/item/bodypart/leg/right/digitigrade - new_species.species_l_leg = /obj/item/bodypart/leg/left/digitigrade - for(var/obj/item/bodypart/old_part as anything in C.bodyparts) - if(old_part.change_exempt_flags & BP_BLOCK_CHANGE_SPECIES) - continue - - switch(old_part.body_zone) - if(BODY_ZONE_HEAD) - var/obj/item/bodypart/head/new_part = new new_species.species_head() - new_part.brute_dam = old_part.brute_dam - new_part.burn_dam = old_part.burn_dam - new_part.replace_limb(C, TRUE) - new_part.update_limb(is_creating = TRUE) - qdel(old_part) - if(BODY_ZONE_CHEST) - var/obj/item/bodypart/chest/new_part = new new_species.species_chest() - new_part.brute_dam = old_part.brute_dam - new_part.burn_dam = old_part.burn_dam - new_part.replace_limb(C, TRUE) - new_part.update_limb(is_creating = TRUE) - qdel(old_part) - if(BODY_ZONE_L_ARM) - var/obj/item/bodypart/l_arm/new_part = new new_species.species_l_arm() - new_part.brute_dam = old_part.brute_dam - new_part.burn_dam = old_part.burn_dam - new_part.replace_limb(C, TRUE) - new_part.update_limb(is_creating = TRUE) - qdel(old_part) - if(BODY_ZONE_R_ARM) - var/obj/item/bodypart/r_arm/new_part = new new_species.species_r_arm() - new_part.brute_dam = old_part.brute_dam - new_part.burn_dam = old_part.burn_dam - new_part.replace_limb(C, TRUE) - new_part.update_limb(is_creating = TRUE) - qdel(old_part) - if(BODY_ZONE_L_LEG) - var/obj/item/bodypart/leg/left/new_part = new new_species.species_l_leg() - new_part.brute_dam = old_part.brute_dam - new_part.burn_dam = old_part.burn_dam - new_part.replace_limb(C, TRUE) - new_part.update_limb(is_creating = TRUE) - qdel(old_part) - if(BODY_ZONE_R_LEG) - var/obj/item/bodypart/leg/right/new_part = new new_species.species_r_leg() - new_part.brute_dam = old_part.brute_dam - new_part.burn_dam = old_part.burn_dam - new_part.replace_limb(C, TRUE) - new_part.update_limb(is_creating = TRUE) - qdel(old_part) + var/obj/item/bodypart/new_part = C.new_body_part(old_part.body_zone, robotic, FALSE, new_species) + new_part.brute_dam = old_part.brute_dam + new_part.burn_dam = old_part.burn_dam + new_part.replace_limb(C, TRUE) + new_part.update_limb(is_creating = TRUE) + qdel(old_part) /** - * Proc called when a carbon becomes this species. - * - * This sets up and adds/changes/removes things, qualities, abilities, and traits so that the transformation is as smooth and bugfree as possible. - * Produces a [COMSIG_SPECIES_GAIN] signal. - * Arguments: - * * C - Carbon, this is whoever became the new species. - * * old_species - The species that the carbon used to be before becoming this race, used for regenerating organs. - * * pref_load - Preferences to be loaded from character setup, loads in preferred mutant things like bodyparts, digilegs, skin color, etc. - */ -/datum/species/proc/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load) + * Proc called when a carbon becomes this species. + * + * This sets up and adds/changes/removes things, qualities, abilities, and traits so that the transformation is as smooth and bugfree as possible. + * Produces a [COMSIG_SPECIES_GAIN] signal. + * Arguments: + * * C - Carbon, this is whoever became the new species. + * * old_species - The species that the carbon used to be before becoming this race, used for regenerating organs. + * * pref_load - Preferences to be loaded from character setup, loads in preferred mutant things like bodyparts, digilegs, skin color, etc. +*/ +/datum/species/proc/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load, robotic = FALSE) // Drop the items the new species can't wear if((AGENDER in species_traits)) C.gender = PLURAL @@ -442,11 +428,11 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(C.hud_used) C.hud_used.update_locked_slots() - replace_body(C) + replace_body(C, robotic = robotic) C.mob_biotypes = inherent_biotypes - regenerate_organs(C,old_species) + regenerate_organs(C, old_species, robotic = robotic) if(exotic_bloodtype && C.dna.blood_type != exotic_bloodtype) C.dna.blood_type = get_blood_type(exotic_bloodtype) @@ -772,9 +758,15 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(!(NO_UNDERWEAR in species_traits)) if(H.underwear) var/datum/sprite_accessory/underwear/underwear = GLOB.underwear_list[H.underwear] - var/mutable_appearance/underwear_overlay if(underwear) - underwear_overlay = mutable_appearance(underwear.icon, underwear.icon_state, -BODY_LAYER) + var/mutable_appearance/underwear_overlay + var/icon_state = underwear.icon_state + var/icon_file = underwear.icon + if((H.dna.species.bodytype & BODYTYPE_KEPORI)) + icon_file = KEPORI_UNDERWEAR_LEGS_PATH + if(underwear.has_digitigrade && (H.dna.species.bodytype & BODYTYPE_DIGITIGRADE)) + icon_state += "_d" + underwear_overlay = mutable_appearance(icon_file, icon_state, -BODY_LAYER) if(!underwear.use_static) underwear_overlay.color = "#" + H.underwear_color standing += underwear_overlay @@ -782,15 +774,29 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(H.undershirt) var/datum/sprite_accessory/undershirt/undershirt = GLOB.undershirt_list[H.undershirt] if(undershirt) - if(H.dna.species.sexes && H.gender == FEMALE) - standing += wear_female_version(undershirt.icon_state, undershirt.icon, BODY_LAYER) - else - standing += mutable_appearance(undershirt.icon, undershirt.icon_state, -BODY_LAYER) - - if(H.socks && H.num_legs >= 2 && !(H.dna.species.bodytype & BODYTYPE_DIGITIGRADE) && !(NOSOCKS in species_traits)) + var/mutable_appearance/undershirt_overlay + var/icon_file = undershirt.icon + if((H.dna.species.bodytype & BODYTYPE_KEPORI)) + icon_file = KEPORI_UNDERWEAR_TORSO_PATH + undershirt_overlay = mutable_appearance(icon_file, undershirt.icon_state, -BODY_LAYER) + if(!undershirt.use_static) + undershirt_overlay.color = "#" + H.undershirt_color + standing += undershirt_overlay + + if(H.socks && H.num_legs >= 2 && !(NOSOCKS in species_traits)) var/datum/sprite_accessory/socks/socks = GLOB.socks_list[H.socks] if(socks) - standing += mutable_appearance(socks.icon, socks.icon_state, -BODY_LAYER) + var/mutable_appearance/socks_overlay + var/icon_state = socks.icon_state + var/icon_file = socks.icon + if((H.dna.species.bodytype & BODYTYPE_DIGITIGRADE)) + icon_state += "_d" + if((H.dna.species.bodytype & BODYTYPE_KEPORI)) + icon_file = KEPORI_UNDERWEAR_SOCKS_PATH + socks_overlay = mutable_appearance(icon_file, icon_state, -BODY_LAYER) + if(!socks.use_static) + socks_overlay.color = "#" + H.socks_color + standing += socks_overlay if(standing.len) H.overlays_standing[BODY_LAYER] = standing @@ -890,7 +896,8 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(!H.dna.features["vox_neck_quills"] || H.dna.features["vox_neck_quills"] == "None") bodyparts_to_add -= "vox_neck_quills" -////PUT ALL YOUR WEIRD ASS REAL-LIMB HANDLING HERE + ////PUT ALL YOUR WEIRD ASS REAL-LIMB HANDLING HERE + ///Digi handling if(H.dna.species.bodytype & BODYTYPE_DIGITIGRADE) var/uniform_compatible = FALSE @@ -900,18 +907,13 @@ GLOBAL_LIST_EMPTY(roundstart_races) if((!H.wear_suit) || (H.wear_suit.supports_variations & DIGITIGRADE_VARIATION) || !(H.wear_suit.body_parts_covered & LEGS) || (H.wear_suit.supports_variations & DIGITIGRADE_VARIATION_NO_NEW_ICON)) //Checks suit compatability suit_compatible = TRUE - if((uniform_compatible && suit_compatible) || (suit_compatible && H.wear_suit?.flags_inv & HIDEJUMPSUIT)) //If the uniform is hidden, it doesnt matter if its compatible - for(var/obj/item/bodypart/BP as anything in H.bodyparts) - if(BP.bodytype & BODYTYPE_DIGITIGRADE) - BP.limb_id = "digitigrade" + var/show_digitigrade = suit_compatible && (uniform_compatible || H.wear_suit?.flags_inv & HIDEJUMPSUIT) //If the uniform is hidden, it doesnt matter if its compatible + for(var/obj/item/bodypart/BP as anything in H.bodyparts) + if(BP.bodytype & BODYTYPE_DIGITIGRADE) + BP.plantigrade_forced = !show_digitigrade - else - for(var/obj/item/bodypart/BP as anything in H.bodyparts) - if(BP.bodytype & BODYTYPE_DIGITIGRADE) - BP.limb_id = "lizard" ///End digi handling - ////END REAL-LIMB HANDLING H.update_body_parts() @@ -964,8 +966,6 @@ GLOBAL_LIST_EMPTY(roundstart_races) S = GLOB.moth_markings_list[H.dna.features["moth_markings"]] if("squid_face") S = GLOB.squid_face_list[H.dna.features["squid_face"]] - if("caps") - S = GLOB.caps_list[H.dna.features["caps"]] if("ipc_screen") S = GLOB.ipc_screens_list[H.dna.features["ipc_screen"]] if("ipc_antenna") @@ -1008,22 +1008,35 @@ GLOBAL_LIST_EMPTY(roundstart_races) else if(bodypart == "waggingtail_lizard" || bodypart == "waggingtail_human" || bodypart == "waggingtail_elzu") bodypart = "waggingtail" + var/used_color_src = S.color_src + + var/icon_state_name = S.icon_state + if(S.synthetic_icon_state) + var/obj/item/bodypart/attachment_point = H.get_bodypart(S.body_zone) + if(attachment_point && IS_ROBOTIC_LIMB(attachment_point)) + icon_state_name = S.synthetic_icon_state + if(S.synthetic_color_src) + used_color_src = S.synthetic_color_src + if(S.gender_specific) - accessory_overlay.icon_state = "[g]_[bodypart]_[S.icon_state]_[layertext]" + accessory_overlay.icon_state = "[g]_[bodypart]_[icon_state_name]_[layertext]" else - accessory_overlay.icon_state = "m_[bodypart]_[S.icon_state]_[layertext]" + accessory_overlay.icon_state = "m_[bodypart]_[icon_state_name]_[layertext]" if(S.center) accessory_overlay = center_image(accessory_overlay, S.dimension_x, S.dimension_y) if(!(HAS_TRAIT(H, TRAIT_HUSK))) if(!forced_colour) - switch(S.color_src) + switch(used_color_src) if(MUTCOLORS) if(fixed_mut_color) accessory_overlay.color = "#[fixed_mut_color]" else accessory_overlay.color = "#[H.dna.features["mcolor"]]" + if(MUTCOLORS_SECONDARY) + accessory_overlay.color = "#[H.dna.features["mcolor2"]]" + if(HAIR) if(hair_color == "mutcolor") accessory_overlay.color = "#[H.dna.features["mcolor"]]" diff --git a/code/modules/mob/living/carbon/human/species_types/IPC.dm b/code/modules/mob/living/carbon/human/species_types/IPC.dm index c0e85d92b65c..9c6e430aa315 100644 --- a/code/modules/mob/living/carbon/human/species_types/IPC.dm +++ b/code/modules/mob/living/carbon/human/species_types/IPC.dm @@ -222,7 +222,7 @@ H.dna.features["ipc_screen"] = saved_screen H.update_body() -/datum/species/ipc/replace_body(mob/living/carbon/C, datum/species/new_species) +/datum/species/ipc/replace_body(mob/living/carbon/C, datum/species/new_species, robotic = FALSE) ..() var/datum/sprite_accessory/ipc_chassis/chassis_of_choice = GLOB.ipc_chassis_list[C.dna.features["ipc_chassis"]] diff --git a/code/modules/mob/living/carbon/human/species_types/dwarves.dm b/code/modules/mob/living/carbon/human/species_types/dwarves.dm deleted file mode 100644 index 0f6ee9c0ad8b..000000000000 --- a/code/modules/mob/living/carbon/human/species_types/dwarves.dm +++ /dev/null @@ -1,224 +0,0 @@ - -GLOBAL_LIST_INIT(dwarf_first, world.file2list("strings/names/dwarf_first.txt")) //Textfiles with first -GLOBAL_LIST_INIT(dwarf_last, world.file2list("strings/names/dwarf_last.txt")) //textfiles with last - -/datum/species/dwarf //not to be confused with the genetic manlets - name = "Dwarf" - id = "dwarf" //Also called Homo sapiens pumilionis - default_color = "FFFFFF" - default_features = list("mcolor" = "FFF", "wings" = "None", "body_size" = "Normal") - species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS) - inherent_traits = list(TRAIT_DWARF,TRAIT_SNOB,TRAIT_QUICK_CARRY) - use_skintones = 1 - armor = 15 //True dwarves are a bit sturdier than humans - speedmod = 0.6 //They are also slower - staminamod = 1.5//dwarves have a low center of mass and a high relative body weight. They fall hard. - stunmod = 1.35//35% longer stuns. - punchdamagelow = 5 - punchdamagehigh = 15 //and a bit stronger - punchstunthreshold = 10 - damage_overlay_type = "human" - skinned_type = /obj/item/stack/sheet/animalhide/human - liked_food = ALCOHOL | MEAT | DAIRY //Dwarves like alcohol, meat, and dairy products. - disliked_food = JUNKFOOD | FRIED //Dwarves hate foods that have no nutrition other than alcohol. - mutant_organs = list(/obj/item/organ/dwarfgland) //Dwarven alcohol gland, literal gland warrior. - mutantliver = /obj/item/organ/liver/dwarf //Dwarven super liver (Otherwise they r doomed) - mutanttongue= /obj/item/organ/tongue/dwarf //A workaround for the language issues I was having - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT - species_language_holder = /datum/language_holder/dwarf - loreblurb = {"Essentially shorter, squatter humans, dwarves are one of the earliest divergent genelines, and one of the most unique in function and form. Specialized for prolonged isolation in space and the consumption of ethanols, they have developed into a unique, insular culture that values collective effort and contribution to society above all else."} - -/mob/living/carbon/human/species/dwarf //species admin spawn path - race = /datum/species/dwarf //and the race the path is set to. - -/datum/species/dwarf/check_roundstart_eligible() - return TRUE - -/datum/species/dwarf/on_species_gain(mob/living/carbon/C, datum/species/old_species) - . = ..() - var/mob/living/carbon/human/H = C - H.dna.add_mutation(DORFISM, MUT_OTHER) - -/datum/species/dwarf/on_species_loss(mob/living/carbon/H, datum/species/new_species) - . = ..() - H.dna.remove_mutation(DORFISM) - -//Dwarf Name stuff -/proc/dwarf_name() //hello caller: my name is urist mcuristurister - return "[pick(GLOB.dwarf_first)] [pick(GLOB.dwarf_last)]" - -/datum/species/dwarf/random_name(gender,unique,lastname) - return dwarf_name() //hello, ill return the value from dwarf_name proc to you when called. - -/obj/item/organ/tongue/dwarf - name = "squat tongue" - desc = "A stout, sturdy slab of muscle and tastebuds well-suited to enjoying strong alcohol and arguing about geology." - initial_language_holder = /datum/language_holder/dwarf - var/static/list/languages_possible_dwarf = typecacheof(list( - /datum/language/common, - /datum/language/draconic, - /datum/language/codespeak, - /datum/language/monkey, - /datum/language/narsie, - /datum/language/beachbum, - /datum/language/aphasia, - /datum/language/piratespeak, - /datum/language/terrum, - /datum/language/sylvan, - /datum/language/dwarf - )) - -/obj/item/organ/tongue/dwarf/Initialize(mapload) - . = ..() - languages_possible = languages_possible_dwarf - -//This mostly exists because my testdwarf's liver died while trying to also not die due to no alcohol. -/obj/item/organ/liver/dwarf - name = "dwarf liver" - icon_state = "liver" - desc = "A dwarven liver, containing several secondary lobes designed to store alchohol and process it into usable forms." - alcohol_tolerance = 0 //dwarves really shouldn't be dying to alcohol. - toxTolerance = 5 //Shrugs off 5 units of toxins damage. - maxHealth = 150 //More health than the average liver, as you aren't going to be replacing this. - //If it does need replaced with a standard human liver, prepare for hell. - -//alcohol gland. -/obj/item/organ/dwarfgland - name = "ethanovoric glands" - icon_state = "plasma" //Yes this is a actual icon in icons/obj/surgery.dmi - desc = "A complex series of supportive glands, webbed around the liver and circulatory tract like a harness. They process alchohol directly into forms that the body can metabolize as cellular fuel." - w_class = WEIGHT_CLASS_NORMAL - var/stored_alcohol = 250 //They start with 250 units, that ticks down and eventaully bad effects occur - var/max_alcohol = 500 //Max they can attain, easier than you think to OD on alcohol. - var/heal_rate = 0.20 //The rate they heal damages over 350 alcohol stored. - var/alcohol_rate = 0.20 //The rate the alcohol ticks down per each iteration of dwarf_eth_ticker completing. - //These count in on_life ticks which should be 2 seconds per every increment of 1 in a perfect world. - var/dwarf_eth_ticker = 0 //Currently set =< 1, that means this will fire the proc around every 2 seconds - var/last_alcohol_spam - -/obj/item/organ/dwarfgland/on_life() //Primary loop to hook into to start delayed loops for other loops.. - . = ..() - if(owner && owner.stat != DEAD) - if(!owner.client) - return - dwarf_eth_ticker++ - if(dwarf_eth_ticker >= 1) //Alcohol reagent check should be around 2 seconds, since a tick is around 2 seconds. - dwarf_eth_cycle() - dwarf_eth_ticker = 0 - -//Handles the dwarf alcohol cycle tied to on_life, it ticks in dwarf_cycle_ticker. -/obj/item/organ/dwarfgland/proc/dwarf_eth_cycle() - //BOOZE POWER - var/init_stored_alcohol = stored_alcohol - var/heal_amt = heal_rate - for(var/datum/reagent/R in owner.reagents.reagent_list) - if(istype(R, /datum/reagent/consumable/ethanol)) - var/datum/reagent/consumable/ethanol/E = R - stored_alcohol = clamp(stored_alcohol + E.boozepwr / 50, 0, max_alcohol) - var/boozelvl = clamp(E.quality, 0.50, 5)//0 quality has half effect instead of nothing - if(stored_alcohol >= 400)//alchohol reagents amplify healing and temp gain, for risk-reward that punishes chemstacking in larger amounts. - owner.adjustBruteLoss(-heal_amt * boozelvl) - owner.adjustFireLoss(-heal_amt * boozelvl) - owner.adjustToxLoss(-heal_amt * boozelvl) - owner.adjustOxyLoss((-heal_amt * boozelvl) / 2) - owner.adjustCloneLoss((-heal_amt * boozelvl) / 15) - owner.adjust_bodytemperature(6 / clamp(boozelvl, 1, 6)) - stored_alcohol -= alcohol_rate //Subtracts alcohol_Rate from stored alcohol so EX: 250 - 0.25 per each loop that occurs. - if(stored_alcohol > 200) - if(owner.nutrition < 300) - owner.nutrition += heal_amt - if(stored_alcohol > 400) //If they are over 400 they enter a frenzy - owner.adjustBruteLoss(-heal_amt) - owner.adjustFireLoss(-heal_amt) - owner.adjustToxLoss(-heal_amt) - owner.adjustOxyLoss(-heal_amt / 2) - owner.adjustCloneLoss(-heal_amt / 15) - owner.throw_alert("overdorf", /atom/movable/screen/alert/overdorf) - switch(owner.bodytemperature) - if(-300 to 400) - if(last_alcohol_spam + 30 SECONDS < world.time) - to_chat(owner, pick("Your blood is racing.", "You're past the limit.", "You feel alive!")) - last_alcohol_spam = world.time - alcohol_rate = 0.65 - owner.adjust_bodytemperature(2)//to offset chilling effects slightly - if(401 to 700)//you're going too far! Slow down there, laddie! - owner.adjustFireLoss(2, 0) - owner.Jitter(5) - alcohol_rate = 0.65 - if(last_alcohol_spam + 30 SECONDS < world.time) - to_chat(owner, pick("You can't stop sweating.", "Your muscles are aching.", "You can feel your heart pounding like a pickaxe.")) - last_alcohol_spam = world.time - if(701 to 1200)//burning like a bat out of hell! - owner.adjustFireLoss(3.5, 0) - owner.Jitter(5) - alcohol_rate = 0.85 - if(last_alcohol_spam + 30 SECONDS < world.time) - to_chat(owner, pick("Your inner world's on fire.", "Your heart's pounding out of your chest!", "Your body can't take any more!.")) - last_alcohol_spam = world.time - if(1201 to INFINITY)//so essentialy, yer fucked. - owner.adjustFireLoss(6.5, 0) - owner.Jitter(5) - owner.blur_eyes(5) - alcohol_rate = 1 - if(last_alcohol_spam + 15 SECONDS < world.time) - to_chat(owner, pick("it burns.", "Everything's going dark...", "You can't imagine being warmer than this.", "Your blood is boiling in your veins.")) - last_alcohol_spam = world.time - else - if(last_alcohol_spam + 30 SECONDS < world.time) - to_chat(owner, pick("Your blood is racing.", "You're past the limit.", "You feel alive!")) - last_alcohol_spam = world.time - else - owner.clear_alert("overdorf") - alcohol_rate = 0.20 - if(init_stored_alcohol + 55 < stored_alcohol) - return - switch(stored_alcohol) - if(0 to 24) - if(last_alcohol_spam + 35 SECONDS < world.time) - to_chat(owner, "I can feel myself wasting away! I need a drink!.") - last_alcohol_spam = world.time - owner.adjustToxLoss(0.5) - owner.nutrition -= 5 - owner.throw_alert("dorfcharge", /atom/movable/screen/alert/dorflow, 3) - if(prob(5)) - owner.blur_eyes(6) - owner.adjustStaminaLoss(30) - to_chat(owner, "You feel very dizzy.") - if(25 to 75) - if(last_alcohol_spam + 70 SECONDS < world.time) - to_chat(owner, "Your body aches, you need to get ahold of some booze...") - last_alcohol_spam = world.time - owner.adjustToxLoss(0.1) - owner.nutrition -= 2 - owner.throw_alert("dorfcharge", /atom/movable/screen/alert/dorflow, 2) - if(76 to 100) - if(last_alcohol_spam + 100 SECONDS < world.time) - to_chat(owner, "A pint of anything would really hit the spot right now.") - last_alcohol_spam = world.time - owner.throw_alert("dorfcharge", /atom/movable/screen/alert/dorflow, 1) - if(101 to 200) - if(last_alcohol_spam + 160 SECONDS < world.time) - to_chat(owner, "You feel like you could use a good brew.") - last_alcohol_spam = world.time - owner.throw_alert("dorfcharge", /atom/movable/screen/alert/dorflow, 1) - else - owner.clear_alert("dorfcharge") - -//the dwarf counter(real) -/datum/species/dwarf/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) - if(chem.type == /datum/reagent/medicine/antihol) - H.adjustToxLoss(0.5, 0) - H.adjustOrganLoss(ORGAN_SLOT_LIVER, 0.2) - H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM * 4) - var/obj/item/organ/dwarfgland/dwarfgland = H.getorgan(/obj/item/organ/dwarfgland) - dwarfgland.stored_alcohol -= 25 - return TRUE - - if(chem.type == /datum/reagent/medicine/leporazine) - H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM * 2)//dwarves process leporazine much faster to reduce overdorf exploitation - return TRUE - if(chem.type == /datum/reagent/medicine/pyroxadone) - H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM * 3)//ditto - return TRUE - return ..() - 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 1102d59ca2da..2a0e8a2d62fe 100644 --- a/code/modules/mob/living/carbon/human/species_types/ethereal.dm +++ b/code/modules/mob/living/carbon/human/species_types/ethereal.dm @@ -256,7 +256,7 @@ if(new_etherealcolor) var/temp_hsv = RGBtoHSV(new_etherealcolor) if(ReadHSV(temp_hsv)[3] >= ReadHSV("#505050")[3]) // elzu colors should be bright ok?? - default_color = "#" + sanitize_hexcolor(new_etherealcolor, 6) + default_color = sanitize_hexcolor(new_etherealcolor, 6, TRUE) current_color = health_adjusted_color(H, default_color) spec_updatehealth(H) H.visible_message("[H] modulates \his EM frequency to [new_etherealcolor].") 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 b66463e418e6..084113dd1b7f 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -167,7 +167,7 @@ if("Body Color") var/new_color = input(owner, "Select your new color.", "Color Change", "#"+H.dna.features["mcolor"]) as color|null if(new_color) - H.dna.features["mcolor"] = sanitize_hexcolor(new_color, 6) + H.dna.features["mcolor"] = sanitize_hexcolor(new_color) H.update_body() H.update_hair() diff --git a/code/modules/mob/living/carbon/human/species_types/kepori.dm b/code/modules/mob/living/carbon/human/species_types/kepori.dm index e569a87d2a7e..980d82ce23a6 100644 --- a/code/modules/mob/living/carbon/human/species_types/kepori.dm +++ b/code/modules/mob/living/carbon/human/species_types/kepori.dm @@ -2,7 +2,7 @@ name = "\improper Kepori" id = SPECIES_KEPORI default_color = "6060FF" - species_traits = list(MUTCOLORS, EYECOLOR, NO_UNDERWEAR) + species_traits = list(MUTCOLORS, EYECOLOR, NO_UNDERWEAR, MUTCOLORS_SECONDARY) inherent_traits = list(TRAIT_SCOOPABLE) mutant_bodyparts = list("kepori_body_feathers", "kepori_tail_feathers", "kepori_feathers") default_features = list("mcolor" = "0F0", "wings" = "None", "kepori_feathers" = "Plain", "kepori_body_feathers" = "Plain", "kepori_tail_feathers" = "Fan", "body_size" = "Normal") @@ -41,7 +41,7 @@ /// See: [/datum/component/tackler/var/skill_mod] var/skill_mod = 2 - unique_prosthesis = TRUE + bodytype = BODYTYPE_KEPORI species_chest = /obj/item/bodypart/chest/kepori species_head = /obj/item/bodypart/head/kepori @@ -50,6 +50,13 @@ species_l_leg = /obj/item/bodypart/leg/left/kepori species_r_leg = /obj/item/bodypart/leg/right/kepori + species_robotic_chest = /obj/item/bodypart/chest/robot/kepori + species_robotic_head = /obj/item/bodypart/head/robot/kepori + species_robotic_l_arm = /obj/item/bodypart/l_arm/robot/surplus/kepori + species_robotic_r_arm = /obj/item/bodypart/r_arm/robot/surplus/kepori + species_robotic_l_leg = /obj/item/bodypart/leg/left/robot/surplus/kepori + species_robotic_r_leg = /obj/item/bodypart/leg/right/robot/surplus/kepori + /datum/species/kepori/New() . = ..() // This is in new because "[HEAD_LAYER]" etc. is NOT a constant compile-time value. For some reason. 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 94975e15e5b7..0f9dc5f05735 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -3,7 +3,7 @@ name = "\improper Sarathi" id = SPECIES_LIZARD default_color = "00FF00" - species_traits = list(MUTCOLORS,EYECOLOR,LIPS,SCLERA,EMOTE_OVERLAY) + species_traits = list(MUTCOLORS,EYECOLOR,LIPS,SCLERA,EMOTE_OVERLAY,MUTCOLORS_SECONDARY) inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_REPTILE mutant_bodyparts = list("tail_lizard", "snout", "spines", "horns", "frills", "body_markings", "legs") mutanttongue = /obj/item/organ/tongue/lizard @@ -35,6 +35,16 @@ species_r_arm = /obj/item/bodypart/r_arm/lizard species_l_leg = /obj/item/bodypart/leg/left/lizard species_r_leg = /obj/item/bodypart/leg/right/lizard + + species_robotic_chest = /obj/item/bodypart/chest/robot/lizard + species_robotic_head = /obj/item/bodypart/head/robot/lizard + species_robotic_l_arm = /obj/item/bodypart/l_arm/robot/surplus/lizard + species_robotic_r_arm = /obj/item/bodypart/r_arm/robot/surplus/lizard + species_robotic_l_leg = /obj/item/bodypart/leg/left/robot/surplus/lizard + species_robotic_r_leg = /obj/item/bodypart/leg/right/robot/surplus/lizard + + robotic_eyes = /obj/item/organ/eyes/robotic/lizard + // Lizards are coldblooded and can stand a greater temperature range than humans bodytemp_heat_damage_limit = HUMAN_BODYTEMP_HEAT_DAMAGE_LIMIT + 20 // This puts lizards 10 above lavaland max heat for ash lizards. bodytemp_cold_damage_limit = HUMAN_BODYTEMP_COLD_DAMAGE_LIMIT - 10 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 b909251061ed..d284224c37d0 100644 --- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm +++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm @@ -30,7 +30,7 @@ species_l_leg = /obj/item/bodypart/leg/left/moth species_r_leg = /obj/item/bodypart/leg/right/moth -/datum/species/moth/regenerate_organs(mob/living/carbon/C,datum/species/old_species,replace_current=TRUE,list/excluded_zones) +/datum/species/moth/regenerate_organs(mob/living/carbon/C, datum/species/old_species,replace_current=TRUE, list/excluded_zones, robotic = FALSE) . = ..() if(ishuman(C)) var/mob/living/carbon/human/H = C 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 e99d17b6bee0..888f0c74235f 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -3,7 +3,7 @@ id = SPECIES_PLASMAMAN sexes = 0 meat = /obj/item/stack/sheet/mineral/plasma - species_traits = list(NOBLOOD,NOTRANSSTING) + species_traits = list(NOBLOOD,NOTRANSSTING,NOHUSK) inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_NOHUNGER,TRAIT_ALWAYS_CLEAN) inherent_biotypes = MOB_HUMANOID|MOB_MINERAL mutantlungs = /obj/item/organ/lungs/plasmaman diff --git a/code/modules/mob/living/carbon/human/species_types/skeletons.dm b/code/modules/mob/living/carbon/human/species_types/skeletons.dm index 6464b852bf09..caa36764a1ff 100644 --- a/code/modules/mob/living/carbon/human/species_types/skeletons.dm +++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm @@ -4,7 +4,7 @@ id = SPECIES_SKELETON sexes = 0 meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton - species_traits = list(NOBLOOD, NO_BONES) //WHY THE FUCK DOES BONE MAN NOT HAVE BONES?!! + species_traits = list(NOBLOOD, NOHUSK) //WHY THE FUCK DOES BONE MAN NOT HAVE BONES?!! inherent_traits = list(TRAIT_NOMETABOLISM,TRAIT_TOXIMMUNE,TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,\ TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NOHUNGER,TRAIT_EASYDISMEMBER,TRAIT_LIMBATTACHMENT,TRAIT_FAKEDEATH,TRAIT_XENO_IMMUNE,TRAIT_NOCLONELOSS) inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID diff --git a/code/modules/mob/living/carbon/human/species_types/squidpeople.dm b/code/modules/mob/living/carbon/human/species_types/squidpeople.dm deleted file mode 100644 index c3b933c76756..000000000000 --- a/code/modules/mob/living/carbon/human/species_types/squidpeople.dm +++ /dev/null @@ -1,117 +0,0 @@ -/datum/species/squid - // Cephalopod humanoids with squid-like features - name = "Yuggolith" - id = "squid" - default_color = "#268074" - species_traits = list(MUTCOLORS, EYECOLOR, NO_BONES) - inherent_traits = list(TRAIT_NOSLIPALL) - mutant_bodyparts = list("squid_face") - default_features = list("mcolor" = "189", "squid_face" = "Squidward") - coldmod = 0.6 - heatmod = 1.2 - burnmod = 1.4 - speedmod = 0.55 - var/speedmod_grav = 0.55 - var/speedmod_nograv = 0 - punchdamagehigh = 8 //Tentacles make for weak noodle arms - punchstunthreshold = 6 //Good for smacking down though - attack_verb = "slap" - attack_sound = 'sound/weapons/slap.ogg' - miss_sound = 'sound/weapons/punchmiss.ogg' - special_step_sounds = list('sound/effects/footstep/squid1.ogg', 'sound/effects/footstep/squid2.ogg', 'sound/effects/footstep/squid3.ogg') - disliked_food = JUNKFOOD - liked_food = VEGETABLES | MEAT - toxic_food = FRIED - mutanttongue = /obj/item/organ/tongue/squid - species_language_holder = /datum/language_holder/squid - meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/squid - exotic_bloodtype = "S" - no_equip = list(ITEM_SLOT_FEET) - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT - loreblurb = "A race of squid-like amphibians with an odd appearance. \ - They posses the ability to change their pigmentation at will, often leading to confusion. \ - It's frequently rumored that they eat human grey matter. This is definitely, absolutely, most certainly not in any way at all true." - -/datum/species/squid/random_name(gender,unique,lastname) - if(unique) - return random_unique_squid_name() - - var/randname = squid_name() - - return randname - -/datum/species/squid/on_species_gain(mob/living/carbon/human/H, datum/species/old_species) - . = ..() - var/datum/action/innate/change_color/S = new - var/datum/action/cooldown/spit_ink/I = new - S.Grant(H) - I.Grant(H) - -/datum/species/squid/on_species_loss(mob/living/carbon/human/H) - . = ..() - fixed_mut_color = rgb(128,128,128) - H.update_body() - var/datum/action/innate/change_color/S = locate(/datum/action/innate/change_color) in H.actions - S?.Remove(H) - -/datum/action/innate/change_color - name = "Change Color" - check_flags = AB_CHECK_CONSCIOUS - icon_icon = 'icons/mob/actions.dmi' - button_icon_state = "squid_color" - -/datum/action/innate/change_color/Activate() - active = TRUE //Prevent promptspam - var/mob/living/carbon/human/H = owner - var/color_choice = input(usr, "What color will you change to?", "Color Change") as null | color - if (color_choice) - var/temp_hsv = RGBtoHSV(color_choice) - if (ReadHSV(temp_hsv)[3] >= ReadHSV("#191919")[3]) - H.dna.species.fixed_mut_color = sanitize_hexcolor(color_choice) - H.update_body() - else - to_chat(usr, "Invalid color. Your color is not bright enough.") - active = FALSE - -/datum/action/innate/change_color/IsAvailable() - if(active) - return FALSE - return ..() - -/datum/action/cooldown/spit_ink - name = "Spit Ink" - check_flags = AB_CHECK_CONSCIOUS | AB_CHECK_IMMOBILE - icon_icon = 'icons/mob/actions.dmi' - button_icon_state = "squid_ink" - cooldown_time = 60 - var/ink_cost = 60 - -/datum/action/cooldown/spit_ink/Trigger() - var/mob/living/carbon/C = owner - var/turf/T = get_turf(C) - if(!T) - to_chat(C, "There's no room to spill ink here!") - return - var/obj/effect/decal/cleanable/squid_ink/I = locate() in T - if(I) - to_chat(C, "There's already a puddle of ink here!") - return - var/nutrition_threshold = NUTRITION_LEVEL_FED - if (C.nutrition >= nutrition_threshold) - C.adjust_nutrition(-ink_cost) - playsound(C, 'sound/effects/splat.ogg', 50, 1) - new /obj/effect/decal/cleanable/squid_ink(T, C) - C.visible_message("[C.name] sprays a puddle of slippery ink onto the floor!", "You spray ink all over the floor!") - else - to_chat(C, "You don't have enough neutrients to create ink, you need to eat!") - return - -// Zero gravity movement -/datum/species/squid/spec_life(mob/living/carbon/human/H) - var/area/A = get_area(H) - speedmod = A.has_gravity ? speedmod_grav : speedmod_nograv - ..() - -/datum/species/squid/negates_gravity(mob/living/carbon/human/H) - if(H.movement_type & !isspaceturf(H.loc)) - return TRUE diff --git a/code/modules/mob/living/carbon/human/species_types/vox.dm b/code/modules/mob/living/carbon/human/species_types/vox.dm index dc578327bd11..678463ced0aa 100644 --- a/code/modules/mob/living/carbon/human/species_types/vox.dm +++ b/code/modules/mob/living/carbon/human/species_types/vox.dm @@ -27,7 +27,7 @@ bodytemp_cold_divisor = VOX_BODYTEMP_COLD_DIVISOR bodytemp_autorecovery_min = VOX_BODYTEMP_AUTORECOVERY_MIN - unique_prosthesis = TRUE + bodytype = BODYTYPE_VOX species_chest = /obj/item/bodypart/chest/vox species_head = /obj/item/bodypart/head/vox @@ -36,6 +36,13 @@ species_l_leg = /obj/item/bodypart/leg/left/vox species_r_leg = /obj/item/bodypart/leg/right/vox + species_robotic_chest = /obj/item/bodypart/chest/robot/vox + species_robotic_head = /obj/item/bodypart/head/robot/vox + species_robotic_l_arm = /obj/item/bodypart/l_arm/robot/surplus/vox + species_robotic_r_arm = /obj/item/bodypart/r_arm/robot/surplus/vox + species_robotic_l_leg = /obj/item/bodypart/leg/left/robot/surplus/vox + species_robotic_r_leg = /obj/item/bodypart/leg/right/robot/surplus/vox + var/datum/action/innate/tail_hold/tail_action var/static/list/allergy_reactions = list( @@ -60,9 +67,6 @@ /datum/species/vox/New() . = ..() - offset_clothing = list( - "[BELT_LAYER]" = list("[NORTH]" = list("x" = 0, "y" = 9), "[EAST]" = list("x" = 0, "y" = 9), "[SOUTH]" = list("x" = 0, "y" = 9), "[WEST]" = list("x" = 0, "y" = 9)), - ) /datum/species/vox/random_name(gender,unique,lastname,attempts) . = "" @@ -122,13 +126,6 @@ if(WEST) return list(list("x" = -5, "y" = -1), list("x" = -1, "y" = 2)) -/datum/species/vox/after_equip_job(datum/job/J, mob/living/carbon/human/H) - . = ..() - var/obj/item/environmental_regulator/regulator = new - if(!H.equip_to_slot_if_possible(regulator, ITEM_SLOT_BACK, swap = TRUE)) - if(!H.put_in_hands(regulator, forced = TRUE)) - regulator.forceMove(get_turf(H)) - /datum/action/innate/tail_hold name = "Tail Hold" desc = "Store an item in your tail's grip." 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 db3ff428dcf2..96410f0cdcb7 100644 --- a/code/modules/mob/living/carbon/human/species_types/zombies.dm +++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm @@ -108,7 +108,7 @@ species_l_leg = /obj/item/bodypart/leg/left/zombie species_r_leg = /obj/item/bodypart/leg/right/zombie -/datum/species/human/krokodil_addict/replace_body(mob/living/carbon/C, datum/species/new_species) +/datum/species/human/krokodil_addict/replace_body(mob/living/carbon/C, datum/species/new_species, robotic = FALSE) ..() var/skintone if(ishuman(C)) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index b530bf9e4791..5b72d80d1125 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -204,10 +204,9 @@ There are several things that need to be remembered: var/handled_by_bodytype = TRUE var/icon_file - /* + if((dna.species.bodytype & BODYTYPE_VOX) && (I.supports_variations & VOX_VARIATION)) icon_file = VOX_GLOVES_PATH - */ if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) handled_by_bodytype = FALSE @@ -236,12 +235,11 @@ There are several things that need to be remembered: update_hud_glasses(I) if(!(head?.flags_inv & HIDEEYES) && !(wear_mask?.flags_inv & HIDEEYES)) var/mutable_appearance/glasses_overlay - var/handled_by_bodytype + var/handled_by_bodytype = TRUE var/icon_file - /* + if((dna.species.bodytype & BODYTYPE_VOX) && (I.supports_variations & VOX_VARIATION)) icon_file = VOX_GLASSES_PATH - */ if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) handled_by_bodytype = FALSE @@ -272,10 +270,9 @@ There are several things that need to be remembered: var/handled_by_bodytype = TRUE var/icon_file - /* + if((dna.species.bodytype & BODYTYPE_VOX) && (I.supports_variations & VOX_VARIATION)) icon_file = VOX_EARS_PATH - */ if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) handled_by_bodytype = FALSE @@ -308,9 +305,12 @@ There are several things that need to be remembered: if((dna.species.bodytype & BODYTYPE_DIGITIGRADE) && (I.supports_variations & DIGITIGRADE_VARIATION)) var/obj/item/bodypart/leg = src.get_bodypart(BODY_ZONE_L_LEG) - if(leg.limb_id == "digitigrade")//Snowflakey and bad. But it makes it look consistent. + if(leg.bodytype & BODYTYPE_DIGITIGRADE && !leg.plantigrade_forced) icon_file = DIGITIGRADE_SHOES_PATH + if((I.supports_variations & VOX_VARIATION) && (dna.species.bodytype & BODYTYPE_VOX)) + icon_file = VOX_SHOES_PATH + if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) handled_by_bodytype = FALSE icon_file = DEFAULT_SHOES_PATH @@ -390,6 +390,9 @@ There are several things that need to be remembered: var/handled_by_bodytype var/icon_file + if((I.supports_variations & VOX_VARIATION) && (dna.species.bodytype & BODYTYPE_VOX)) + icon_file = VOX_BELT_PATH + if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) handled_by_bodytype = FALSE icon_file = DEFAULT_BELT_PATH @@ -556,12 +559,11 @@ There are several things that need to be remembered: apply_overlay(LEGCUFF_LAYER) throw_alert("legcuffed", /atom/movable/screen/alert/restrained/legcuffed, new_master = src.legcuffed) -/proc/wear_female_version(t_color, icon, layer, type) - var/index = t_color - var/icon/female_clothing_icon = GLOB.female_clothing_icons[index] - if(!female_clothing_icon) //Create standing/laying icons if they don't exist - generate_female_clothing(index,t_color,icon,type) - return mutable_appearance(GLOB.female_clothing_icons[t_color], layer = -layer) +/* Here lies female masking overlay, + * You broke almost constantly, + * You broke any time you were touched, + * You will not be missed, goodbye. + */ /obj/item/proc/wear_species_version(file2use, state2use, layer, datum/species/mob_species) if(!slot_flags) // If it's not wearable, don't try @@ -685,13 +687,10 @@ default_icon_file: The icon file to draw states from if no other icon file is sp isinhands: If true then alternate_worn_icon is skipped so that default_icon_file is used, in this situation default_icon_file is expected to match either the lefthand_ or righthand_ file var -femalueuniform: A value matching a uniform item's fitted var, if this is anything but NO_FEMALE_UNIFORM, we -generate/load female uniform sprites matching all previously decided variables - ^this female part sucks and will be fully ripped out ideally */ -/obj/item/proc/build_worn_icon(default_layer = 0, default_icon_file = null, isinhands = FALSE, femaleuniform = NO_FEMALE_UNIFORM, override_state = null, override_file = null, datum/species/mob_species = null, direction = null) +/obj/item/proc/build_worn_icon(default_layer = 0, default_icon_file = null, isinhands = FALSE, override_state = null, override_file = null, datum/species/mob_species = null, direction = null) // WS Edit Start - Worn Icon State var/t_state @@ -709,8 +708,6 @@ generate/load female uniform sprites matching all previously decided variables var/mutable_appearance/standing if(mob_species && (mob_species.species_clothing_path || ("[layer2use]" in mob_species.offset_clothing))) standing = wear_species_version(file2use, t_state, layer2use, mob_species) - else if(femaleuniform) - standing = wear_female_version(t_state, file2use, layer2use, femaleuniform) //should layer2use be in sync with the adjusted value below? needs testing - shiz if(!standing) standing = mutable_appearance(file2use, t_state, -layer2use) diff --git a/code/modules/mob/living/carbon/status_procs.dm b/code/modules/mob/living/carbon/status_procs.dm index 2f84bd463299..cc15c12d836e 100644 --- a/code/modules/mob/living/carbon/status_procs.dm +++ b/code/modules/mob/living/carbon/status_procs.dm @@ -94,3 +94,7 @@ /mob/living/carbon/proc/break_all_bones() for(var/obj/item/bodypart/B in bodyparts) B.break_bone() + +/mob/living/carbon/proc/break_random_bone() //this might work + var/obj/item/bodypart/limb = pick(bodyparts) + limb.break_bone() diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm index d8242f175682..7292436c4d68 100644 --- a/code/modules/mob/living/carbon/update_icons.dm +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -262,15 +262,17 @@ ///////////////////////// //Updated by Kapu#1178 //TG variant port by MrSamu99#8996 -/* - Called from update_body_parts() these procs handle the limb icon cache. - the limb icon cache adds an icon_render_key to a human mob, it represents: - - Gender, if applicable - - The ID of the limb - - Draw color, if applicable - These procs only store limbs as to increase the number of matching icon_render_keys - This cache exists because drawing 6/7 icons for humans constantly is quite a waste - See RemieRichards on irc.rizon.net #coderbus (RIP remie :sob:) +/** + * Called from update_body_parts() these procs handle the limb icon cache. + * the limb icon cache adds an icon_render_key to a human mob, it represents: + * - Gender, if applicable + * - The ID of the limb + * - Whether or not it's digitigrade + * - Draw color, if applicable + * + * These procs only store limbs as to increase the number of matching icon_render_keys + * This cache exists because drawing 6/7 icons for humans constantly is quite a waste + * See RemieRichards on irc.rizon.net #coderbus (RIP remie :sob:) */ /obj/item/bodypart/proc/generate_icon_key() RETURN_TYPE(/list) @@ -279,6 +281,8 @@ . += "[limb_gender]-" . += "[limb_id]" . += "-[body_zone]" + if(bodytype & BODYTYPE_DIGITIGRADE && !plantigrade_forced) + . += "-digitigrade" if(should_draw_greyscale && draw_color) . += "-[draw_color]" diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 2c2de521af67..191e089274d6 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -897,12 +897,6 @@ altered_grab_state++ var/resist_chance = BASE_GRAB_RESIST_CHANCE // see defines/combat.dm resist_chance = max((resist_chance/altered_grab_state)-sqrt((getBruteLoss()+getFireLoss()+getOxyLoss()+getToxLoss()+getCloneLoss())*0.5+getStaminaLoss()), 0) //stamina loss is weighted twice as heavily as the other damage types in this calculation - //WS - Yuggolith tentacle grip/slip - if(issquidperson(pulledby)) - resist_chance = resist_chance * 0.5 - if(issquidperson(src)) - resist_chance = resist_chance + (resist_chance * 0.5) - //WS - End if(prob(resist_chance)) visible_message("[src] breaks free of [pulledby]'s grip!", \ "You break free of [pulledby]'s grip!", null, null, pulledby) diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm index bd5b93ad22df..ba8983691bdd 100644 --- a/code/modules/mob/living/living_say.dm +++ b/code/modules/mob/living/living_say.dm @@ -336,10 +336,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list( message = stutter(message) if(slurring) - if(!isdwarf(src)) - message = slur(message) - else - message = dorfslur(message) + message = slur(message) if(cultslurring) message = cultslur(message) diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index c3d52a2006b4..67a80713d8ec 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -40,7 +40,7 @@ atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 maxbodytemp = 1500 - faction = list("carp") + faction = list("carp", "mining") movement_type = FLYING pressure_resistance = 200 gold_core_spawnable = HOSTILE_SPAWN @@ -139,6 +139,9 @@ add_dead_carp_overlay() ..() +/mob/living/simple_animal/hostile/carp/throw_atom_into_space() + return + /mob/living/simple_animal/hostile/carp/tamed() . = ..() can_buckle = TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm index d6d6da975da3..1114dfddb416 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm @@ -396,7 +396,6 @@ /obj/effect/mob_spawn/human/corpse/damaged/legioninfested/dwarf/equip(mob/living/carbon/human/H) . = ..() - H.set_species(/datum/species/dwarf) H.transform = H.transform.Scale(0.8, 1)//somehow dwarf squashing is borked when not roundstart. I hate WS code /obj/effect/mob_spawn/human/corpse/damaged/legioninfested/Initialize() //in an ideal world, these would generate, the legion would overlay over the corpse, and we'd get cool sprites @@ -442,7 +441,8 @@ /obj/item/pickaxe = 8, /obj/item/pickaxe/mini = 4, /obj/item/pickaxe/silver = 2, - /obj/item/pickaxe/diamond = 1 + /obj/item/pickaxe/diamond = 1, + /obj/item/gun/energy/kinetic_accelerator = 1 ) ) else @@ -543,8 +543,6 @@ ) ) ) - if(prob(30)) - backpack_contents += /obj/item/gun/energy/kinetic_accelerator else back = /obj/item/kinetic_crusher if("Oldminer") @@ -626,12 +624,10 @@ ) ) ) - if(prob(30)) - backpack_contents += /obj/item/gun/energy/kinetic_accelerator/old else back = /obj/item/kinetic_crusher/old if(prob(30)) - belt = /obj/item/storage/belt/mining/alt + belt = /obj/item/gun/energy/kinetic_accelerator/old if(prob(30)) r_pocket = pickweight(list( /obj/item/stack/marker_beacon = 20, diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index fcb257149d8b..03916f94be9d 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -136,7 +136,7 @@ var/datum/component/storage/active_storage /// Active hud var/datum/hud/hud_used = null - /// I have no idea tbh + /// It allows for scientific knowledge to be imparted (e.g. blob strain, if an object has research value, if it boosts a technode) var/research_scanner = FALSE /// Is the mob throw intent on diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 34aeb46b6df6..efd7a90694fa 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -112,46 +112,6 @@ . += "[newletter]" return sanitize(.) -/** - * Dwarf slurring- around half as intense to represent that dorfs have extreme resistance to inebriating effects - */ -/proc/dorfslur(phrase) - phrase = html_decode(phrase) - var/leng = length(phrase) - . = "" - var/newletter = "" - var/rawchar = "" - for(var/i = 1, i <= leng, i += length(rawchar)) - rawchar = newletter = phrase[i] - if(rand(1, 6) == 6) - var/lowerletter = lowertext(newletter) - if(lowerletter == "o") - newletter = "u" - else if(lowerletter == "s") - newletter = "ch" - else if(lowerletter == "a") - newletter = "ah" - else if(lowerletter == "u") - newletter = "oo" - else if(lowerletter == "c") - newletter = "k" - if(rand(1, 30) == 30) - if(newletter == " ") - newletter = "...huh..." - else if(newletter == ".") - newletter = " *urp*." - switch(rand(1, 50)) - if(1) - newletter += "'" - if(25) - newletter += "[newletter]" - if(50) - newletter += "[newletter][newletter]" - else - // do nothing - . += "[newletter]" - return sanitize(.) - /// Makes you talk like you got cult stunned, which is slurring but with some dark messages /proc/cultslur(phrase) // Inflicted on victims of a stun talisman phrase = html_decode(phrase) diff --git a/code/modules/modular_computers/file_system/programs/arcade.dm b/code/modules/modular_computers/file_system/programs/arcade.dm index 870c2ab5c3dc..c6e1fc2d2f24 100644 --- a/code/modules/modular_computers/file_system/programs/arcade.dm +++ b/code/modules/modular_computers/file_system/programs/arcade.dm @@ -25,7 +25,7 @@ /datum/computer_file/program/arcade/proc/game_check(mob/user) sleep(5) - user?.mind?.adjust_experience(/datum/skill/gaming, 1) + usr?.mind?.adjust_experience(/datum/skill/gaming, 1) if(boss_hp <= 0) heads_up = "You have crushed [boss_name]! Rejoice!" playsound(computer.loc, 'sound/arcade/win.ogg', 50) @@ -34,7 +34,7 @@ if(istype(computer)) computer.update_icon() ticket_count += 1 - user?.mind?.adjust_experience(/datum/skill/gaming, 50) + usr?.mind?.adjust_experience(/datum/skill/gaming, 50) sleep(10) else if(player_hp <= 0 || player_mp <= 0) heads_up = "You have been defeated... how will the station survive?" @@ -43,7 +43,7 @@ program_icon_state = "arcade_off" if(istype(computer)) computer.update_icon() - user?.mind?.adjust_experience(/datum/skill/gaming, 10) + usr?.mind?.adjust_experience(/datum/skill/gaming, 10) sleep(10) /datum/computer_file/program/arcade/proc/enemy_check(mob/user) diff --git a/code/modules/modular_computers/file_system/programs/atmosscan.dm b/code/modules/modular_computers/file_system/programs/atmosscan.dm index 923bcd0a793e..3a2bb7e74c76 100644 --- a/code/modules/modular_computers/file_system/programs/atmosscan.dm +++ b/code/modules/modular_computers/file_system/programs/atmosscan.dm @@ -21,7 +21,7 @@ for(var/id in environment.get_gases()) var/gas_level = environment.get_moles(id)/total_moles if(gas_level > 0) - airlist += list(list("name" = "[GLOB.gas_data.names[id]]", "percentage" = round(gas_level*100, 0.01))) + airlist += list(list("name" = "[GLOB.gas_data.names[id]]", "percentage" = round(gas_level*100, 0.01), "id" = id)) data["AirData"] = airlist return data diff --git a/code/modules/modular_computers/file_system/programs/sm_monitor.dm b/code/modules/modular_computers/file_system/programs/sm_monitor.dm index c02dcce37d85..2aeba2beba33 100644 --- a/code/modules/modular_computers/file_system/programs/sm_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/sm_monitor.dm @@ -138,7 +138,9 @@ for(var/gasid in air.get_gases()) gasdata.Add(list(list( "name"= GLOB.gas_data.names[gasid], - "amount" = round(100*air.get_moles(gasid)/air.total_moles(),0.01)))) + "amount" = round(100*air.get_moles(gasid)/air.total_moles(),0.01), + "id" = gasid + ))) else for(var/gasid in air.get_gases()) diff --git a/code/modules/overmap/_overmap_datum.dm b/code/modules/overmap/_overmap_datum.dm index 6c2f52d8cc12..ba352c402eaf 100644 --- a/code/modules/overmap/_overmap_datum.dm +++ b/code/modules/overmap/_overmap_datum.dm @@ -49,13 +49,12 @@ SSovermap.overmap_container[position["x"]][position["y"]] += src x = position["x"] y = position["y"] - token = new token_type(OVERMAP_TOKEN_TURF(x, y), src) else if(istype(position, /datum/overmap)) var/datum/overmap/docked_object = position docked_object.contents += src docked_to = docked_object - token = new token_type(docked_object.token, src) + set_or_create_token() SSovermap.overmap_objects += src if(!char_rep && name) @@ -81,6 +80,38 @@ PROTECTED_PROC(TRUE) return +/** + * Used to generate a token for this datum. + */ +/datum/overmap/proc/set_or_create_token(obj/overmap/takeover = null) + // we have a token, and we're taking over another token + if(!isnull(token) && token != takeover) + token.parent = null + QDEL_NULL(token) + + // taking over an existing token + if(!isnull(takeover)) + token = takeover + if(!isnull(token.parent) && token.parent != src) + stack_trace("taking over a token with a parent, this will probably cause issues") + token.parent.token = null + token.parent = src + update_token_location() + return + + // creating a new token + token = new token_type(null, src) + update_token_location() + +/** + * Updates the location of our linked token to be correct. + */ +/datum/overmap/proc/update_token_location() + if(!isnull(docked_to)) + token.abstract_move(docked_to.token) + return + token.abstract_move(OVERMAP_TOKEN_TURF(x, y)) + /** * Called whenever you need to move an overmap datum to another position. Can be overridden to add additional movement functionality, as long as it calls the parent proc. * diff --git a/code/modules/overmap/missions/acquire_mission.dm b/code/modules/overmap/missions/acquire_mission.dm index 57b37512214c..6ae295213496 100644 --- a/code/modules/overmap/missions/acquire_mission.dm +++ b/code/modules/overmap/missions/acquire_mission.dm @@ -107,6 +107,39 @@ weight = 1 objective_type = /obj/item/strange_crystal +/* +Acquire: Anomaly +*/ + +/datum/mission/acquire/anomaly + name = "Anomaly core requested" + weight = 8 + value = 3000 + duration = 40 MINUTES + dur_mod_range = 0.2 + container_type = /obj/item/storage/box/anomaly + objective_type = /obj/item/assembly/signaler/anomaly + num_wanted = 1 + +/datum/mission/acquire/anomaly/New(...) + var/group = pick(list( + "Cybersun Industries", + "CMM-GOLD", + "Nanotrasen Anomalous Studies Division", + "The Naturalienwissenschaftlicher Studentenverbindungs-Verband", + "The Central Solarian Anomaly Research Agency", + "DeForest Medical R&D", + "A strange lizard on the outpost" + )) + + desc = "[group] has requested that a ship [pick(list("procure", "grab", "acquire", "find", "locate"))] \ + an anomaly core for [pick(list("research", "analysis", "technical development", "closer inspection", "some reason"))]. \ + They've offered to pay well, so we're relaying this mission to you" + . = ..() + + + + /* Acquire: The Creature */ @@ -184,7 +217,7 @@ /datum/mission/acquire/aquarium name = "Fish needed for my aquarium" - weight = 14 + weight = 6 value = 750 duration = 60 MINUTES val_mod_range = 0.2 @@ -210,7 +243,7 @@ /datum/mission/acquire/aquarium/rare name = "Rare fish needed for my aquarium!" - weight = 8 + weight = 1 value = 1500 val_mod_range = 0.3 @@ -236,7 +269,7 @@ /datum/mission/acquire/fish_cook name = "Fish needed for my meal" - weight = 8 + weight = 3 duration = 40 MINUTES val_mod_range = 0.2 objective_type = /obj/item/fish @@ -307,3 +340,20 @@ . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.max_items = 3 + +/obj/item/storage/box/anomaly + name = "anomaly case" + desc = "A metallic box made to store anomaly cores. They aren't always the safest to lug around." + icon = 'icons/obj/nuke_tools.dmi' + icon_state = "core_container_sealed" //it'd be neat if I could figure out how to make this seal but that's a problem for me in 6 months + item_state = "tile" + lefthand_file = 'icons/mob/inhands/misc/tiles_lefthand.dmi' + righthand_file = 'icons/mob/inhands/misc/tiles_righthand.dmi' + foldable = null + +/obj/item/storage/box/anomaly/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_combined_w_class = WEIGHT_CLASS_NORMAL + STR.max_w_class = WEIGHT_CLASS_NORMAL + STR.max_items = 1 diff --git a/code/modules/overmap/missions/research_mission.dm b/code/modules/overmap/missions/research_mission.dm index f43c50ffc958..181d1a4d9ba4 100644 --- a/code/modules/overmap/missions/research_mission.dm +++ b/code/modules/overmap/missions/research_mission.dm @@ -3,7 +3,7 @@ desc = "We require data on the behavior of electrical storms in the system for an ongoing study. \ Please anchor the attached sensor array to your ship and fly it through the storms.\ It must be powered to collect the data. " - value = 1500 // base value, before adding bonus for number of things to fly through + value = 3000 // base value, before adding bonus for number of things to fly through duration = 30 MINUTES weight = 8 @@ -62,6 +62,7 @@ desc = "We require data on the behavior of ion storms in the system for an ongoing study. \ Please anchor the attached sensor array to your ship and fly it through the storms. \ It must be powered to collect the data." + value = 3500 objective_type = /datum/overmap/event/emp /datum/mission/research/meteor @@ -69,10 +70,29 @@ desc = "We require data on the behavior of asteroid fields in the system for an ongoing study. \ Please anchor the attached sensor array to your ship and fly it through the fields. \ It must be powered to collect the data." - value = 2000 + value = 4000 weight = 4 objective_type = /datum/overmap/event/meteor +/datum/mission/research/carp + name = "Carp migration research mission" + desc = "We require data on the migration patterns of space carp for an ongoing study. \ + Please anchor the attached sensor array to your ship and fly it through the fields. \ + It must be powered to collect the data." + value = 2000 + weight = 4 + num_wanted = 3 + objective_type = /datum/overmap/event/meteor/carp + +/datum/mission/research/dust + name = "dust research mission" + desc = "We require data on the density of space dust for updated navcharts. \ + Please anchor the attached sensor array to your ship and fly it through the fields. \ + It must be powered to collect the data." + value = 1000 + weight = 4 + objective_type = /datum/overmap/event/meteor/dust + /* Research mission scanning machine */ diff --git a/code/modules/overmap/objects/dynamic_datum.dm b/code/modules/overmap/objects/dynamic_datum.dm index df63f4d02abd..915605595de3 100644 --- a/code/modules/overmap/objects/dynamic_datum.dm +++ b/code/modules/overmap/objects/dynamic_datum.dm @@ -41,6 +41,9 @@ ///The X bounds of the virtual z level var/vlevel_width = QUADRANT_MAP_SIZE + //controls what kind of sound we play when we land and the maptext comes up + var/landing_sound + /datum/overmap/dynamic/Initialize(position, load_now=TRUE, ...) . = ..() @@ -80,9 +83,11 @@ /datum/overmap/dynamic/post_docked(datum/overmap/ship/controlled/dock_requester) if(planet_name) - for(var/mob/M as anything in GLOB.player_list) - if(dock_requester.shuttle_port.is_in_shuttle_bounds(M)) - M.play_screen_text("[planet_name]
[station_time_timestamp_fancy("hh:mm")]") + for(var/mob/Mob as anything in GLOB.player_list) + if(dock_requester.shuttle_port.is_in_shuttle_bounds(Mob)) + Mob.play_screen_text("[planet_name]
[station_time_timestamp_fancy("hh:mm")]") + playsound(Mob, landing_sound, 50) + /datum/overmap/dynamic/post_undocked(datum/overmap/dock_requester) if(preserve_level) @@ -113,10 +118,17 @@ probabilities = list() for(var/datum/planet_type/planet_type as anything in subtypesof(/datum/planet_type)) probabilities[initial(planet_type.planet)] = initial(planet_type.weight) - planet = SSmapping.planet_types[force_encounter ? force_encounter : pickweightAllowZero(probabilities)] - Rename(planet.name) + + if(planet.planet !=DYNAMIC_WORLD_ASTEROID && planet.planet != DYNAMIC_WORLD_SPACERUIN) //these aren't real planets + planet_name = "[gen_planet_name()]" + Rename(planet_name) + token.name = "[planet_name]" + " ([planet.name])" + if(planet.planet == DYNAMIC_WORLD_ASTEROID || planet.planet == DYNAMIC_WORLD_SPACERUIN) + Rename(planet.name) + token.name = "[planet.name]" + token.icon_state = planet.icon_state token.desc = planet.desc token.color = planet.color @@ -124,6 +136,8 @@ default_baseturf = planet.default_baseturf mapgen = planet.mapgen weather_controller_type = planet.weather_controller_type + landing_sound = planet.landing_sound + preserve_level = planet.preserve_level //it came to me while I was looking at chickens if(vlevel_height >= 255 && vlevel_width >= 255) //little easter egg planet_name = "LV-[pick(rand(11111,99999))]" @@ -138,6 +152,7 @@ if(!preserve_level) token.desc += " It may not still be here if you leave it." + token.update_icon() /datum/overmap/dynamic/proc/gen_planet_name() . = "" @@ -192,7 +207,7 @@ icon_state = "away" // DO NOT PUT UNIQUE_AREA IN THESE FLAGS FOR ANY SUBTYPE. IT CAUSES WEATHER PROBLEMS // THE ONLY REASON IT DIDN'T BEFORE IS BECAUSE THE CODE DIDN'T RESPECT THE FLAG - area_flags = HIDDEN_AREA | CAVES_ALLOWED | FLORA_ALLOWED | MOB_SPAWN_ALLOWED | NOTELEPORT + area_flags = HIDDEN_AREA | CAVES_ALLOWED | FLORA_ALLOWED | MOB_SPAWN_ALLOWED flags_1 = CAN_BE_DIRTY_1 dynamic_lighting = DYNAMIC_LIGHTING_FORCED sound_environment = SOUND_ENVIRONMENT_STONEROOM @@ -261,6 +276,13 @@ area_flags = HIDDEN_AREA | CAVES_ALLOWED | FLORA_ALLOWED | MOB_SPAWN_ALLOWED //allows jaunters to work ambientsounds = REEBE +/area/overmap_encounter/planetoid/asteroid + name = "\improper Asteroid Field" + sound_environment = SOUND_ENVIRONMENT_QUARRY + ambientsounds = SPACE - - +/area/overmap_encounter/planetoid/gas_giant + name = "\improper Gas Giant" + sound_environment = SOUND_ENVIRONMENT_MOUNTAINS + ambientsounds = REEBE + has_gravity = GAS_GIANT_GRAVITY diff --git a/code/modules/overmap/objects/event_datum.dm b/code/modules/overmap/objects/event_datum.dm index 156bb8487ab1..8ee2136e0d02 100644 --- a/code/modules/overmap/objects/event_datum.dm +++ b/code/modules/overmap/objects/event_datum.dm @@ -11,10 +11,12 @@ var/spread_chance = 0 ///How many additional tiles to spawn at once in the selected orbit. Used with OVERMAP_GENERATOR_SOLAR. var/chain_rate = 0 + var/desc /datum/overmap/event/Initialize(position, ...) . = ..() SSovermap.events += src + token.desc = desc /datum/overmap/event/Destroy() . = ..() @@ -24,72 +26,87 @@ * The main proc for calling other procs. Called by SSovermap. */ /datum/overmap/event/proc/apply_effect() - for(var/datum/overmap/ship/controlled/S in get_nearby_overmap_objects()) + for(var/datum/overmap/ship/controlled/Ship in get_nearby_overmap_objects()) if(prob(chance_to_affect)) - affect_ship(S) + affect_ship(Ship) /** * The proc called on all ships that are currently being affected. */ -/datum/overmap/event/proc/affect_ship(datum/overmap/ship/controlled/S) +/datum/overmap/event/proc/affect_ship(datum/overmap/ship/controlled/Ship) return -///METEOR STORMS - Bounces harmlessly off the shield... unless your shield is breached +///METEOR STORMS - explodes your ship if you go too fast /datum/overmap/event/meteor - name = "asteroid storm (moderate)" + name = "asteroid field (moderate)" + desc = "An area of space rich with asteroids, going fast through here could prove dangerous" token_icon_state = "meteor1" chance_to_affect = 15 spread_chance = 50 chain_rate = 4 + var/safe_speed = 3 var/list/meteor_types = list( /obj/effect/meteor/dust=3, /obj/effect/meteor/medium=8, - /obj/effect/meteor/big=3, - /obj/effect/meteor/flaming=1, + /obj/effect/meteor/big=1, /obj/effect/meteor/irradiated=3 ) /datum/overmap/event/meteor/Initialize(position, ...) . = ..() token.icon_state = "meteor[rand(1, 4)]" + token.color = "#a08444" + token.light_color = "#a08444" + token.update_icon() -/datum/overmap/event/meteor/affect_ship(datum/overmap/ship/controlled/S) - spawn_meteor(meteor_types, S.shuttle_port.get_virtual_level(), 0) +/datum/overmap/event/meteor/apply_effect() + for(var/datum/overmap/ship/controlled/Ship in get_nearby_overmap_objects()) + if(Ship.get_speed() > safe_speed) + var/how_fast = (Ship.get_speed() - safe_speed) + if(prob(chance_to_affect + how_fast)) + affect_ship(Ship) + +/datum/overmap/event/meteor/affect_ship(datum/overmap/ship/controlled/Ship) + spawn_meteor(meteor_types, Ship.shuttle_port.get_virtual_level(), 0) /datum/overmap/event/meteor/minor - name = "asteroid storm (minor)" + name = "asteroid field (minor)" chain_rate = 3 meteor_types = list( + /obj/effect/meteor/dust=12, /obj/effect/meteor/medium=4, - /obj/effect/meteor/big=8, - /obj/effect/meteor/flaming=3, - /obj/effect/meteor/irradiated=3 + /obj/effect/meteor/irradiated=2 ) /datum/overmap/event/meteor/major - name = "asteroid storm (major)" + name = "asteroid field (major)" spread_chance = 25 chain_rate = 6 meteor_types = list( - /obj/effect/meteor/medium=5, - /obj/effect/meteor/big=75, + /obj/effect/meteor/medium=50, + /obj/effect/meteor/big=25, /obj/effect/meteor/flaming=10, /obj/effect/meteor/irradiated=10, /obj/effect/meteor/tunguska = 1 ) -///ION STORM - Causes EMP pulses on the shuttle, wreaking havoc on the shields +///ION STORM - explodes your IPCs /datum/overmap/event/emp name = "ion storm (moderate)" + desc = "A heavily ionized area of space, prone to causing electromagnetic pulses in ships" token_icon_state = "ion1" spread_chance = 20 chain_rate = 2 - var/strength = 3 + chance_to_affect = 20 + var/strength = 4 /datum/overmap/event/emp/Initialize(position, ...) . = ..() token.icon_state = "ion[rand(1, 4)]" + token.color = "#7cb4d4" + token.light_color = "#7cb4d4" + token.update_icon() /datum/overmap/event/emp/affect_ship(datum/overmap/ship/controlled/S) var/area/source_area = pick(S.shuttle_port.shuttle_areas) @@ -99,40 +116,45 @@ for(var/mob/M as anything in GLOB.player_list) if(S.shuttle_port.is_in_shuttle_bounds(M)) M.playsound_local(S.shuttle_port, 'sound/weapons/ionrifle.ogg', strength) - shake_camera(M, 10, strength) /datum/overmap/event/emp/minor name = "ion storm (minor)" chain_rate = 1 strength = 1 + chance_to_affect = 15 /datum/overmap/event/emp/major name = "ion storm (major)" + chance_to_affect = 25 chain_rate = 4 - strength = 5 + strength = 6 -///ELECTRICAL STORM - Zaps places in the shuttle +///ELECTRICAL STORM - explodes your computer and IPCs /datum/overmap/event/electric name = "electrical storm (moderate)" + desc = "A spatial anomaly, an unfortunately common sight on the frontier. Disturbing it tends to lead to intense electrical discharges" token_icon_state = "electrical1" chance_to_affect = 15 spread_chance = 30 chain_rate = 3 + var/zap_flag = ZAP_STORM_FLAGS var/max_damage = 15 var/min_damage = 5 /datum/overmap/event/electric/Initialize(position, ...) . = ..() token.icon_state = "electrical[rand(1, 4)]" + token.color = "#e8e85c" + token.light_color = "#e8e85c" + token.update_icon() /datum/overmap/event/electric/affect_ship(datum/overmap/ship/controlled/S) var/datum/virtual_level/ship_vlevel = S.shuttle_port.get_virtual_level() var/turf/source = ship_vlevel.get_side_turf(pick(GLOB.cardinals)) - tesla_zap(source, 10, TESLA_DEFAULT_POWER, ZAP_TESLA_FLAGS) + tesla_zap(source, 10, TESLA_DEFAULT_POWER, zap_flag) for(var/mob/M as anything in GLOB.player_list) if(S.shuttle_port.is_in_shuttle_bounds(M)) M.playsound_local(source, 'sound/magic/lightningshock.ogg', rand(min_damage / 10, max_damage / 10)) - shake_camera(M, 10, rand(min_damage / 10, max_damage / 10)) /datum/overmap/event/electric/minor name = "electrical storm (minor)" @@ -147,9 +169,11 @@ chain_rate = 6 max_damage = 20 min_damage = 10 + zap_flag = ZAP_TESLA_FLAGS /datum/overmap/event/nebula name = "nebula" + desc = "There's coffee in here" token_icon_state = "nebula" chain_rate = 8 spread_chance = 75 @@ -157,9 +181,13 @@ /datum/overmap/event/nebula/Initialize(position, ...) . = ..() token.opacity = TRUE + token.color = "#c053f3" + token.light_color = "#c053f3" + token.update_icon() /datum/overmap/event/wormhole name = "wormhole" + desc = "A hole through space. If you go through here, you might end up anywhere." token_icon_state = "wormhole" spread_chance = 0 chain_rate = 0 @@ -176,6 +204,9 @@ other_wormhole = _other_wormhole if(!other_wormhole) other_wormhole = new(null, src) //Create a new wormhole at a random location + token.color = adjust_colors() + token.light_color = adjust_colors() + token.update_icon() /datum/overmap/event/wormhole/affect_ship(datum/overmap/ship/controlled/S) if(!other_wormhole) @@ -196,6 +227,111 @@ S.overmap_move(other_wormhole.x, other_wormhole.y) S.overmap_step(S.get_heading()) + token.color = adjust_colors() + token.light_color = adjust_colors() + +/datum/overmap/event/wormhole/proc/adjust_colors() + switch(stability) + if(1) + return "#753214" + if(2) + return "#642f19" + if(3) + return"#654650" + if(4) + return"#5c5d8b" + if(5) + return"#6d80c7" + +//Carp "meteors" - throws carp at the ship + +/datum/overmap/event/meteor/carp + name = "carp migration (moderate)" + desc = "A migratory school of space carp. They travel at high speeds, and flying through them may cause them to impact your ship" + token_icon_state = "carp1" + chance_to_affect = 15 + spread_chance = 50 + chain_rate = 4 + safe_speed = 2 + meteor_types = list( + /obj/effect/meteor/carp=16, + /obj/effect/meteor/carp/big=1, //numbers I pulled out of my ass + ) + +/datum/overmap/event/meteor/carp/Initialize(position, ...) + . = ..() + token.icon_state = "carp[rand(1, 4)]" + token.color = "#7b1ca8" + token.light_color = "#7b1ca8" + token.update_icon() + + +/datum/overmap/event/meteor/carp/minor + name = "carp migration (minor)" + token_icon_state = "carp1" + chance_to_affect = 5 + spread_chance = 25 + chain_rate = 4 + meteor_types = list( + /obj/effect/meteor/carp=8 + ) + + +/datum/overmap/event/meteor/carp/major + name = "carp migration (major)" + token_icon_state = "carp1" + chance_to_affect = 25 + spread_chance = 25 + chain_rate = 4 + meteor_types = list( + /obj/effect/meteor/carp=7, + /obj/effect/meteor/carp/big=1, + ) + +// dust clouds throw dust if you go Way Fast + +/datum/overmap/event/meteor/dust + name = "dust cloud" + desc = "A cloud of spaceborne dust. Relatively harmless, unless you're travelling at relative speeds" + token_icon_state = "carp1" + chance_to_affect = 30 + spread_chance = 50 + chain_rate = 4 + safe_speed = 7 + meteor_types = list( + /obj/effect/meteor/dust=3, + ) + +/datum/overmap/event/meteor/dust/Initialize(position, ...) + . = ..() + token.icon_state = "dust[rand(1, 4)]" + token.color = "#506469" //we should make these defines + token.light_color = "#506469" + token.update_icon() + +/datum/overmap/event/anomaly + name = "anomaly field" + desc = "A highly anomalous area of space, disturbing it leads to the manifestation of odd spatial phenomena" + token_icon_state = "anomaly1" + chance_to_affect = 10 + spread_chance = 35 + chain_rate = 6 + +/datum/overmap/event/anomaly/Initialize(position, ...) + . = ..() + token.icon_state = "anomaly[rand(1, 4)]" + token.color = "#c46a24" + token.light_color = "#c46a24" + token.update_icon() + +/datum/overmap/event/anomaly/affect_ship(datum/overmap/ship/controlled/S) + var/area/source_area = pick(S.shuttle_port.shuttle_areas) + var/source_object = pick(source_area.contents) + new /obj/effect/spawner/lootdrop/anomaly/storm(get_turf(source_object)) + for(var/mob/M as anything in GLOB.player_list) + if(S.shuttle_port.is_in_shuttle_bounds(M)) + M.playsound_local(S.shuttle_port, 'sound/effects/bamf.ogg', 100) + GLOBAL_LIST_INIT(overmap_event_pick_list, list( /datum/overmap/event/wormhole = 10, /datum/overmap/event/nebula = 60, @@ -207,6 +343,11 @@ GLOBAL_LIST_INIT(overmap_event_pick_list, list( /datum/overmap/event/emp/major = 45, /datum/overmap/event/meteor/minor = 45, /datum/overmap/event/meteor = 40, - /datum/overmap/event/meteor/major = 35 + /datum/overmap/event/meteor/major = 35, + /datum/overmap/event/meteor/carp/minor = 45, + /datum/overmap/event/meteor/carp = 35, + /datum/overmap/event/meteor/carp/major = 20, + /datum/overmap/event/meteor/dust = 50, + /datum/overmap/event/anomaly = 10 )) diff --git a/code/modules/overmap/objects/outpost.dm b/code/modules/overmap/objects/outpost.dm index c449181ce4ac..4ea930098c6b 100644 --- a/code/modules/overmap/objects/outpost.dm +++ b/code/modules/overmap/objects/outpost.dm @@ -14,6 +14,9 @@ Rename(gen_outpost_name()) fill_missions() addtimer(CALLBACK(src, .proc/fill_missions), 10 MINUTES, TIMER_STOPPABLE|TIMER_LOOP|TIMER_DELETE_ME) + var/station_icon_num + station_icon_num = rand(1,4) + token.icon_state = "station_[station_icon_num]" /datum/overmap/dynamic/outpost/get_jump_to_turf() if(reserve_docks) diff --git a/code/modules/overmap/objects/star.dm b/code/modules/overmap/objects/star.dm index 6dfca56def15..b031c467754c 100644 --- a/code/modules/overmap/objects/star.dm +++ b/code/modules/overmap/objects/star.dm @@ -5,10 +5,13 @@ var/color_vary = 0 /datum/overmap/star/Initialize(position, ...) - Rename(gen_star_name()) + var/name = gen_star_name() + Rename(name) + set_station_name(name) token.desc = token_desc alter_token_appearance() + /datum/overmap/star/proc/gen_star_name() return "[pick(GLOB.star_names)] [pick(GLOB.greek_letters)]" diff --git a/code/modules/overmap/overmap_token.dm b/code/modules/overmap/overmap_token.dm index 0281a4353099..45f50f9e41c1 100644 --- a/code/modules/overmap/overmap_token.dm +++ b/code/modules/overmap/overmap_token.dm @@ -34,9 +34,11 @@ cam_background.assigned_map = map_name cam_background.del_on_map_removal = FALSE update_screen() + update_icon() /obj/overmap/Destroy(force) if(parent) + stack_trace("attempted to qdel a token that still has a parent") return QDEL_HINT_LETMELIVE if(render_map) QDEL_NULL(cam_screen) diff --git a/code/modules/overmap/planets/planet_types.dm b/code/modules/overmap/planets/planet_types.dm index cda34db3eec4..2152d4efe5ef 100644 --- a/code/modules/overmap/planets/planet_types.dm +++ b/code/modules/overmap/planets/planet_types.dm @@ -9,65 +9,73 @@ var/icon_state = "globe" var/color = "#ffffff" var/weight = 20 + var/preserve_level = FALSE + var/landing_sound /datum/planet_type/lava name = "lava planet" - desc = "A very weak energy signal originating from a planet with lots of seismic and volcanic activity." + desc = "A planet rife with seismic and volcanic activity. High temperatures and dangerous xenofauna render it dangerous for the unprepared." planet = DYNAMIC_WORLD_LAVA - icon_state = "globe" + icon_state = "globe_2" color = COLOR_ORANGE mapgen = /datum/map_generator/planet_generator/lava default_baseturf = /turf/open/floor/plating/asteroid/basalt/lava weather_controller_type = /datum/weather_controller/lavaland ruin_type = RUINTYPE_LAVA + landing_sound = 'sound/effects/planet_landing_2.ogg' + /datum/planet_type/ice name = "frozen planet" - desc = "A very weak energy signal originating from a planet with traces of water and extremely low temperatures." + desc = "A frozen planet covered in thick snow, thicker ice, and dangerous predators." planet = DYNAMIC_WORLD_ICE - icon_state = "globe" + icon_state = "globe_2" color = COLOR_BLUE_LIGHT mapgen = /datum/map_generator/planet_generator/snow default_baseturf = /turf/open/floor/plating/asteroid/snow/icemoon weather_controller_type = /datum/weather_controller/snow_planet ruin_type = RUINTYPE_ICE + landing_sound = 'sound/effects/planet_landing_2.ogg' /datum/planet_type/jungle name = "jungle planet" - desc = "A very weak energy signal originating from a planet teeming with life." + desc = "A densely forested world, filled with vines, animals, and underbrush. Surprisingly habitable with a machete." planet = DYNAMIC_WORLD_JUNGLE - icon_state = "globe" + icon_state = "globe_2" color = COLOR_LIME mapgen = /datum/map_generator/planet_generator/jungle default_baseturf = /turf/open/floor/plating/dirt/jungle weather_controller_type = /datum/weather_controller/lush ruin_type = RUINTYPE_JUNGLE + landing_sound = 'sound/effects/planet_landing_1.ogg' /datum/planet_type/rock name = "rock planet" - desc = "A very weak energy signal originating from a iron rich and rocky planet." + desc = "A rocky red world in the midst of terraforming. While some plants have taken hold, it is widely hostile to life." planet = DYNAMIC_WORLD_ROCKPLANET - icon_state = "globe" + icon_state = "globe_2" color = "#bd1313" mapgen = /datum/map_generator/planet_generator/rock default_baseturf = /turf/open/floor/plating/asteroid weather_controller_type = /datum/weather_controller/rockplanet ruin_type = RUINTYPE_ROCK + landing_sound = 'sound/effects/planet_landing_2.ogg' /datum/planet_type/sand name = "sand planet" - desc = "A very weak energy signal originating from a planet with many traces of silica." + desc = "A formerly vibrant world, turned to sand by the ravages of the ICW. The survivors of it are long mad by now." planet = DYNAMIC_WORLD_SAND - icon_state = "globe" + icon_state = "globe_2" color = COLOR_GRAY mapgen = /datum/map_generator/planet_generator/sand default_baseturf = /turf/open/floor/plating/asteroid/whitesands weather_controller_type = /datum/weather_controller/desert ruin_type = RUINTYPE_SAND + landing_sound = 'sound/effects/planet_landing_2.ogg' /datum/planet_type/beach name = "beach planet" - desc = "A very weak energy signal originating from a warm, oxygen rich planet." + desc = "The platonic ideal of vacation spots. Warm, comfortable temperatures, and a breathable atmosphere." planet = DYNAMIC_WORLD_BEACHPLANET icon_state = "globe" color = "#c6b597" @@ -75,6 +83,7 @@ default_baseturf = /turf/open/floor/plating/asteroid/sand/lit weather_controller_type = /datum/weather_controller/lush ruin_type = RUINTYPE_BEACH + landing_sound = 'sound/effects/planet_landing_1.ogg' /datum/planet_type/reebe name = "???" @@ -89,17 +98,18 @@ ruin_type = RUINTYPE_YELLOW /datum/planet_type/asteroid - name = "large asteroid" - desc = "A large asteroid with significant traces of minerals." + name = "asteroid field" + desc = "A field of asteroids with significant traces of minerals." planet = DYNAMIC_WORLD_ASTEROID icon_state = "asteroid" color = COLOR_GRAY - mapgen = /datum/map_generator/single_biome/asteroid + mapgen = /datum/map_generator/planet_generator/asteroid // Space, because asteroid maps also include space turfs and the prospect of space turfs // existing without space as their baseturf scares me. default_baseturf = /turf/open/space weather_controller_type = null ruin_type = null // asteroid ruins when + landing_sound = 'sound/effects/planet_landing_1.ogg' /datum/planet_type/spaceruin name = "weak energy signal" @@ -111,14 +121,42 @@ default_baseturf = /turf/open/space weather_controller_type = null ruin_type = RUINTYPE_SPACE + landing_sound = 'sound/effects/planet_landing_2.ogg' /datum/planet_type/waste name = "waste disposal planet" - desc = "A very weak energy signal originating from a planet marked as waste disposal." + desc = "A highly oxygenated world, coated in garbage, radiation, and rust." planet = DYNAMIC_WORLD_WASTEPLANET - icon_state = "globe" + icon_state = "globe_2" color = "#a9883e" mapgen = /datum/map_generator/planet_generator/waste default_baseturf = /turf/open/floor/plating/asteroid/wasteplanet weather_controller_type = /datum/weather_controller/chlorine ruin_type = RUINTYPE_WASTE + landing_sound = 'sound/effects/planet_landing_2.ogg' + +/datum/planet_type/gas_giant + name = "gas giant" + desc = "A floating ball of gas, with high gravity and even higher pressure." + planet = DYNAMIC_WORLD_GAS_GIANT + icon_state = "globe" + color = COLOR_DARK_MODERATE_ORANGE + mapgen = /datum/map_generator/single_biome/gas_giant + default_baseturf = /turf/open/chasm/gas_giant + weather_controller_type = null + ruin_type = null //it's a Gas Giant. Not Cloud fuckin City + weight = 0 + preserve_level = TRUE + landing_sound = 'sound/effects/planet_landing_1.ogg' + +/datum/planet_type/plasma_giant + name = "plasma giant" + desc = "The backbone of interstellar travel, the mighty plasma giant allows fuel collection to take place." + planet = DYNAMIC_WORLD_PLASMA_GIANT + color = COLOR_PURPLE + mapgen = /datum/map_generator/single_biome/plasma_giant + default_baseturf = /turf/open/chasm/gas_giant/plasma + weight = 0 + icon_state = "globe" + preserve_level = TRUE + landing_sound = 'sound/effects/planet_landing_1.ogg' diff --git a/code/modules/overmap/ships/controlled_ship_datum.dm b/code/modules/overmap/ships/controlled_ship_datum.dm index d95f35996903..d4ebcb8d4735 100644 --- a/code/modules/overmap/ships/controlled_ship_datum.dm +++ b/code/modules/overmap/ships/controlled_ship_datum.dm @@ -1,6 +1,3 @@ -///Name of the file used for ship name random selection -#define SHIP_NAMES_FILE "ship_names.json" - /** * # Simulated overmap ship * @@ -66,12 +63,6 @@ ///Time that next job slot change can occur COOLDOWN_DECLARE(job_slot_adjustment_cooldown) - - - - - - /datum/overmap/ship/controlled/Rename(new_name, force = FALSE) var/oldname = name if(!..() || (!COOLDOWN_FINISHED(src, rename_cooldown) && !force)) @@ -105,8 +96,8 @@ qdel(src) // Can't return INITIALIZE_HINT_QDEL here since this isn't ACTUAL initialisation. Considering changing the name of the proc. return refresh_engines() + ship_account = new(name, source_template.starting_funds) - ship_account = new(name, 2000) #ifdef UNIT_TESTS Rename("[source_template]") #else @@ -189,9 +180,6 @@ Dock(E) /datum/overmap/ship/controlled/burn_engines(percentage = 100, deltatime) - if(docked_to || docking) - CRASH("[src] burned engines while docking or docked!") - var/thrust_used = 0 //The amount of thrust that the engines will provide with one burn refresh_engines() calculate_avg_fuel() diff --git a/code/modules/overmap/ships/ship_datum.dm b/code/modules/overmap/ships/ship_datum.dm index 8fa4ee07afa4..0d2ef4370b35 100644 --- a/code/modules/overmap/ships/ship_datum.dm +++ b/code/modules/overmap/ships/ship_datum.dm @@ -35,7 +35,7 @@ /datum/overmap/ship/Destroy() . = ..() if(movement_callback_id) - deltimer(movement_callback_id) + deltimer(movement_callback_id, SSovermap_movement) /datum/overmap/ship/complete_dock(datum/overmap/dock_target, datum/docking_ticket/ticket) . = ..() @@ -63,8 +63,8 @@ var/offset = 1 if(movement_callback_id) var/previous_time = 1 / MAGNITUDE(speed_x, speed_y) - offset = clamp(timeleft(movement_callback_id) / previous_time, 0, 1) - deltimer(movement_callback_id) + offset = clamp(timeleft(movement_callback_id, SSovermap_movement) / previous_time, 0, 1) + deltimer(movement_callback_id, SSovermap_movement) movement_callback_id = null //just in case speed_x = min(max_speed, speed_x + n_x) @@ -78,11 +78,11 @@ token.update_icon_state() update_visuals() - if(is_still() || QDELING(src) || movement_callback_id) + if(is_still() || QDELING(src) || movement_callback_id || docked_to || docking) return var/timer = 1 / MAGNITUDE(speed_x, speed_y) * offset - movement_callback_id = addtimer(CALLBACK(src, .proc/tick_move), timer, TIMER_STOPPABLE) + movement_callback_id = addtimer(CALLBACK(src, .proc/tick_move), timer, TIMER_STOPPABLE, SSovermap_movement) /** * Called by [/datum/overmap/ship/proc/adjust_speed], this continually moves the ship according to its speed @@ -90,14 +90,14 @@ /datum/overmap/ship/proc/tick_move() if(is_still() || QDELING(src) || docked_to) adjust_speed(-speed_x, -speed_y) - deltimer(movement_callback_id) + deltimer(movement_callback_id, SSovermap_movement) movement_callback_id = null return overmap_move(x + SIGN(speed_x), y + SIGN(speed_y)) update_visuals() if(movement_callback_id) - deltimer(movement_callback_id) + deltimer(movement_callback_id, SSovermap_movement) //Queue another movement var/current_speed = MAGNITUDE(speed_x, speed_y) @@ -105,7 +105,7 @@ return var/timer = 1 / current_speed - movement_callback_id = addtimer(CALLBACK(src, .proc/tick_move), timer, TIMER_STOPPABLE) + movement_callback_id = addtimer(CALLBACK(src, .proc/tick_move), timer, TIMER_STOPPABLE, SSovermap_movement) token.update_screen() /** @@ -145,14 +145,14 @@ * Returns the estimated time in deciseconds to the next tile at current speed, or approx. time until reaching the destination when on autopilot */ /datum/overmap/ship/proc/get_eta() - . += timeleft(movement_callback_id) + . += timeleft(movement_callback_id, SSovermap_movement) if(!.) return "--:--" . /= 10 //they're in deciseconds return "[add_leading(num2text((. / 60) % 60), 2, "0")]:[add_leading(num2text(. % 60), 2, "0")]" /datum/overmap/ship/process(delta_time) - if(burn_direction == BURN_STOP && is_still()) + if((burn_direction == BURN_STOP && is_still()) || docked_to || docking) change_heading(BURN_NONE) return @@ -203,6 +203,9 @@ * * deltatime - The time since the last burn tick */ /datum/overmap/ship/proc/burn_engines(percentage = 100, deltatime) + if(docked_to || docking) + CRASH("Ship burned engines while docking or docked!") + return acceleration_speed * (percentage / 100) * deltatime /datum/overmap/ship/proc/change_heading(direction) diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm index f520fb009ba8..ab1a5c16c7cd 100644 --- a/code/modules/paperwork/faxmachine.dm +++ b/code/modules/paperwork/faxmachine.dm @@ -219,7 +219,7 @@ GLOBAL_LIST_EMPTY(alldepartments) //Prevents copypasta for evil faxes /obj/machinery/photocopier/faxmachine/proc/handle_animation() flick(print_anim, src) - playsound(loc, 'goon/sound/machinery/printer_dotmatrix.ogg', 50, 1) + playsound(loc, 'sound/machines/printer.ogg', 50, 1) /obj/machinery/photocopier/faxmachine/proc/handle_copying(obj/item/incoming) use_power(active_power_usage) diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index f791aa9440a1..05caf78a818d 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -462,13 +462,9 @@ charge = 0 update_icon() -/obj/item/stock_parts/cell/gun/SolGov +/obj/item/stock_parts/cell/gun/solgov name = "SolGov power cell" - icon = 'icons/obj/power.dmi' - icon_state = "g-cell" - maxcharge = 8000 - custom_materials = list(/datum/material/glass=60) - chargerate = 2000 + icon_state = "g-sg-cell" /obj/item/stock_parts/cell/gun/large name = "extra-large weapon power cell" diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index c25a2fdb82b0..a50337982ba7 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -4,7 +4,7 @@ /obj/machinery/power/solar name = "solar panel" desc = "A solar panel. Generates electricity when in contact with sunlight." - icon = 'goon/icons/obj/power.dmi' + icon = 'icons/obj/machines/oldsolars.dmi' icon_state = "sp_base" density = TRUE use_power = NO_POWER_USE @@ -227,7 +227,7 @@ /obj/item/solar_assembly name = "solar panel assembly" desc = "A solar panel assembly kit, allows constructions of a solar panel, or with a tracking circuit board, a solar tracker." - icon = 'goon/icons/obj/power.dmi' + icon = 'icons/obj/machines/oldsolars.dmi' icon_state = "sp_base" item_state = "electropack" lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm index 6e636cd53d88..4b3f9b760fd6 100644 --- a/code/modules/power/tracker.dm +++ b/code/modules/power/tracker.dm @@ -6,7 +6,7 @@ /obj/machinery/power/tracker name = "solar tracker" desc = "A solar directional tracker." - icon = 'goon/icons/obj/power.dmi' + icon = 'icons/obj/machines/oldsolars.dmi' icon_state = "tracker" density = TRUE use_power = NO_POWER_USE diff --git a/code/modules/projectiles/ammunition/ballistic/smg.dm b/code/modules/projectiles/ammunition/ballistic/smg.dm index 74578c86aaa5..d58a1464f529 100644 --- a/code/modules/projectiles/ammunition/ballistic/smg.dm +++ b/code/modules/projectiles/ammunition/ballistic/smg.dm @@ -26,29 +26,29 @@ caliber = "4.73x33mm caseless" projectile_type = /obj/projectile/bullet/c47x33mm -/obj/item/ammo_casing/caseless/c556mmHITP - name = "5.56mm HITP caseless round" - desc = "A 5.56mm HITP caseless round." +/obj/item/ammo_casing/caseless/c556mm + name = "5.56mm caseless round" + desc = "A 5.56mm caseless round." icon_state = "caseless" - caliber = "5.56mm HITP caseless" - projectile_type = /obj/projectile/bullet/c556mmHITP + caliber = "5.56mm caseless" + projectile_type = /obj/projectile/bullet/c556mm -/obj/item/ammo_casing/caseless/c556mmHITP/surplus +/obj/item/ammo_casing/caseless/c556mm/surplus name = "5.56mm HITP caseless surplus round" desc = "A 5.56mm HITP caseless surplus round." - projectile_type = /obj/projectile/bullet/c556mmHITP_surplus + projectile_type = /obj/projectile/bullet/c556mm_surplus -/obj/item/ammo_casing/caseless/c556mmHITP/ap +/obj/item/ammo_casing/caseless/c556mm/ap name = "5.56mm HITP caseless armor piercing round" desc = "A 5.56mm HITP caseless armor piercing round." - projectile_type = /obj/projectile/bullet/c556mmHITP_ap + projectile_type = /obj/projectile/bullet/c556mm_ap -/obj/item/ammo_casing/caseless/c556mmHITP/hp +/obj/item/ammo_casing/caseless/c556mm/hp name = "5.56mm HITP caseless hollow-point round" desc = "A 5.56mm HITP caseless hollow-point round." - projectile_type = /obj/projectile/bullet/c556mmHITP_hp + projectile_type = /obj/projectile/bullet/c556mm_hp -/obj/item/ammo_casing/caseless/c556mmHITP/rubbershot +/obj/item/ammo_casing/caseless/c556mm/rubbershot name = "5.56mm HITP rubber round" desc = "A 5.56mm HITP caseless rubber round." - projectile_type = /obj/projectile/bullet/c556mmHITP/rubbershot + projectile_type = /obj/projectile/bullet/c556mm/rubbershot diff --git a/code/modules/projectiles/ammunition/special/gauss.dm b/code/modules/projectiles/ammunition/special/gauss.dm index 410bea4313ce..9a81b23e54aa 100644 --- a/code/modules/projectiles/ammunition/special/gauss.dm +++ b/code/modules/projectiles/ammunition/special/gauss.dm @@ -19,8 +19,8 @@ /obj/item/ammo_casing/caseless/gauss/slug name = "ferromagnetic slug" desc = "A large metal slug." - caliber = "lance" + caliber = "slug" icon_state = "gauss-slug" projectile_type = /obj/projectile/bullet/gauss/slug auto_rotate = TRUE - energy_cost = 800 + energy_cost = 700 diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm index ce20c75b13b9..3e3273eef332 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm @@ -220,34 +220,34 @@ name = "ammo box (5.56mm HITP caseless)" desc = "A box of 5.56mm HITP caseless ammo, a SolGov standard." icon_state = "556mmHITPbox" - ammo_type = /obj/item/ammo_casing/caseless/c556mmHITP + ammo_type = /obj/item/ammo_casing/caseless/c556mm max_ammo = 30 /obj/item/ammo_box/c556mmHITP/surplus name = "ammo box (5.56mm HITP caseless surplus)" desc = "A box of low-quality 5.56mm HITP caseless ammo." icon_state = "556mmHITPbox-surplus" - ammo_type = /obj/item/ammo_casing/caseless/c556mmHITP/surplus + ammo_type = /obj/item/ammo_casing/caseless/c556mm/surplus /obj/item/ammo_box/c556mmHITP/rubbershot name = "ammo box (5.56mm HITP caseless rubbershot)" desc = "A box of 5.56mm HITP caseless rubbershot ammo, designed to disable targets without causing serious damage." icon_state = "556mmHITPbox-rubbershot" - ammo_type = /obj/item/ammo_casing/caseless/c556mmHITP/rubbershot + ammo_type = /obj/item/ammo_casing/caseless/c556mm/rubbershot max_ammo = 30 /obj/item/ammo_box/c556mmHITP/ap name = "ammo box (5.56mm HITP caseless AP)" desc = "A box of 5.56mm HITP caseless armor piercing ammo, designed to penetrate through armor at the cost of total damage." icon_state = "556mmHITPbox-ap" - ammo_type = /obj/item/ammo_casing/caseless/c556mmHITP/ap + ammo_type = /obj/item/ammo_casing/caseless/c556mm/ap max_ammo = 30 /obj/item/ammo_box/c556mmHITP/hp name = "ammo box (5.56mm HITP caseless HP)" desc = "A box of 5.56mm HITP caseless hollow point ammo, designed to cause massive tissue damage at the cost of armor penetration." icon_state = "556mmHITPbox-hp" - ammo_type = /obj/item/ammo_casing/caseless/c556mmHITP/hp + ammo_type = /obj/item/ammo_casing/caseless/c556mm/hp max_ammo = 30 /obj/item/ammo_box/a40mm @@ -306,3 +306,12 @@ caliber = "9mm" max_ammo = 4 custom_materials = list(/datum/material/iron = 20000) + +/obj/item/ammo_box/amagpellet_claris + name = "claris speed loader (ferromagnetic pellet)" + desc = "Designed to quickly reload the claris." + icon_state = "claris-sl" + ammo_type = /obj/item/ammo_casing/caseless/gauss + max_ammo = 22 + multiple_sprites = AMMO_BOX_FULL_EMPTY + item_flags = NO_MAT_REDEMPTION diff --git a/code/modules/projectiles/boxes_magazines/external/gauss.dm b/code/modules/projectiles/boxes_magazines/external/gauss.dm index e3f41559da4e..1d5800e75bbd 100644 --- a/code/modules/projectiles/boxes_magazines/external/gauss.dm +++ b/code/modules/projectiles/boxes_magazines/external/gauss.dm @@ -5,3 +5,23 @@ caliber = "pellet" max_ammo = 24 multiple_sprites = AMMO_BOX_FULL_EMPTY + +/obj/item/ammo_box/magazine/modelh + name = "model-h magazine (ferromagnetic slugs)" + icon_state = "smallmagmag" + ammo_type = /obj/item/ammo_casing/caseless/gauss/slug + caliber = "slug" + max_ammo = 10 + multiple_sprites = AMMO_BOX_FULL_EMPTY + +/obj/item/ammo_box/magazine/gar + name = "gar tube magazine (ferromagnetic lances)" + icon_state = "gar-mag" + ammo_type = /obj/item/ammo_casing/caseless/gauss/lance + caliber = "lance" + max_ammo = 32 + multiple_sprites = AMMO_BOX_FULL_EMPTY + +/obj/item/ammo_box/magazine/gar/update_icon() + . = ..() + icon_state = "gar-mag-[!!ammo_count()]" diff --git a/code/modules/projectiles/boxes_magazines/external/smg.dm b/code/modules/projectiles/boxes_magazines/external/smg.dm index 3b41a9cb2c4e..143c124420f0 100644 --- a/code/modules/projectiles/boxes_magazines/external/smg.dm +++ b/code/modules/projectiles/boxes_magazines/external/smg.dm @@ -100,10 +100,10 @@ icon_state = "drum45" /obj/item/ammo_box/magazine/pistol556mm - name = "handgun magazine (5.56mm HITP caseless)" + name = "handgun magazine (5.56mm caseless)" icon_state = "5.56mmHITP-12" //ok i did it - ammo_type = /obj/item/ammo_casing/caseless/c556mmHITP - caliber = "5.56mm HITP caseless" + ammo_type = /obj/item/ammo_casing/caseless/c556mm + caliber = "5.56mm caseless" max_ammo = 12 /obj/item/ammo_box/magazine/pistol556mm/update_icon() diff --git a/code/modules/projectiles/boxes_magazines/internal/gauss.dm b/code/modules/projectiles/boxes_magazines/internal/gauss.dm new file mode 100644 index 000000000000..06527ae49197 --- /dev/null +++ b/code/modules/projectiles/boxes_magazines/internal/gauss.dm @@ -0,0 +1,5 @@ +/obj/item/ammo_box/magazine/internal/claris + name = "claris internal magazine" + ammo_type = /obj/item/ammo_casing/caseless/gauss + caliber = "pellet" + max_ammo = 22 diff --git a/code/modules/projectiles/guns/ballistic/gauss.dm b/code/modules/projectiles/guns/ballistic/gauss.dm index f1f62669469a..cb21b5d1a867 100644 --- a/code/modules/projectiles/guns/ballistic/gauss.dm +++ b/code/modules/projectiles/guns/ballistic/gauss.dm @@ -6,18 +6,81 @@ slot_flags = 0 mag_type = /obj/item/ammo_box/magazine/gauss fire_sound = 'sound/weapons/gun/gauss/magrifle.ogg' - vary_fire_sound = TRUE + load_sound = 'sound/weapons/gun/gauss/rifle_reload.ogg' can_suppress = FALSE burst_size = 1 fire_delay = 3 spread = 0 - recoil = 0.1 mag_display = TRUE empty_indicator = TRUE - empty_alarm = TRUE weapon_weight = WEAPON_MEDIUM w_class = WEIGHT_CLASS_BULKY charge_sections = 4 ammo_x_offset = 2 + +/obj/item/gun/ballistic/automatic/powered/gauss/modelh + name = "Model H" + desc = "Standard issue pistol of the Solarian confederation. Its unique ability to fire slugs instead of pellets make it effective in taking down unarmored targets, but can be useless against armored ones. This also makes it drain battery very fast, be careful. Chambered in ferromagnetic slugs." + mag_type = /obj/item/ammo_box/magazine/modelh + + icon_state = "model-h" + item_state = "model-h" + fire_sound = 'sound/weapons/gun/gauss/modelh.ogg' + load_sound = 'sound/weapons/gun/gauss/pistol_reload.ogg' + + cell_type = /obj/item/stock_parts/cell/gun/solgov + + slot_flags = ITEM_SLOT_BELT + + w_class = WEIGHT_CLASS_SMALL + fire_delay = 0 //pistol + + mag_display = FALSE + empty_indicator = FALSE + + +/obj/item/gun/ballistic/automatic/powered/gauss/claris + name = "Claris" + desc = "A antiquated solarian rifle. Just as the founding Solarians intended. Chambered in ferromagnetic pellets." + mag_type = /obj/item/ammo_box/magazine/internal/claris + + icon = 'icons/obj/guns/48x32guns.dmi' + icon_state = "claris" + item_state = "claris" + fire_sound = 'sound/weapons/gun/gauss/claris.ogg' + load_sound = 'sound/weapons/gun/gauss/sniper_reload.ogg' + + cell_type = /obj/item/stock_parts/cell/gun/solgov + fire_delay = 2 + + bolt_type = BOLT_TYPE_NO_BOLT + internal_magazine = TRUE + casing_ejector = FALSE + + mag_display = FALSE + empty_indicator = FALSE + +/obj/item/gun/ballistic/automatic/powered/gauss/gar + name = "Solar 'GAR' Assualt Rifle" + desc = "A unusally modern, for the solar confederation, assualt rifle. Fires ferromagnetic lances at alarming speeds in every sense of the word. Chambered in ferromagnetic lances." + mag_type = /obj/item/ammo_box/magazine/gar + + icon = 'icons/obj/guns/48x32guns.dmi' + icon_state = "gar" + item_state = "gar" + fire_sound = 'sound/weapons/gun/gauss/gar.ogg' + load_sound = 'sound/weapons/gun/gauss/rifle_reload.ogg' + + cell_type = /obj/item/stock_parts/cell/gun/solgov + + burst_size = 2 + fire_delay = 2 + actions_types = list() + + empty_indicator = FALSE + +/obj/item/gun/ballistic/automatic/powered/gauss/gar/ComponentInitialize() + . = ..() + AddComponent(/datum/component/automatic_fire, 0.2 SECONDS) //setiting this to 0.1 breaks auotfire, not sure why, so we use the standard fire rate but in 2 shot bursts to shoot 'faster' diff --git a/code/modules/projectiles/guns/ballistic/launchers.dm b/code/modules/projectiles/guns/ballistic/launchers.dm index 8f75f05a04c7..760e4a62c944 100644 --- a/code/modules/projectiles/guns/ballistic/launchers.dm +++ b/code/modules/projectiles/guns/ballistic/launchers.dm @@ -52,7 +52,7 @@ fire_sound = 'sound/weapons/gun/general/rocket_launch.ogg' w_class = WEIGHT_CLASS_BULKY can_suppress = FALSE - pin = /obj/item/firing_pin/implant/pindicate + pin = /obj/item/firing_pin burst_size = 1 fire_delay = 0 casing_ejector = FALSE @@ -97,7 +97,11 @@ sleep(20) return OXYLOSS +/obj/item/gun/ballistic/rocketlauncher/solgov + name = "Panzerfaust XII" + desc = "The standard recoiless rifle of the Solarian Confederation. Legend goes that every couple of decades, the bureaucracy changes a small part of the rifle, then bumps up the number. Chambered in rockets." - - + icon = 'icons/obj/guns/48x32guns.dmi' + icon_state = "panzerfaust" + item_state = "panzerfaust" diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index 7b173775fbab..24725cbbc434 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -171,12 +171,17 @@ . += "Alt-click to use \the [src] vox hailer." /obj/item/gun/ballistic/automatic/pistol/solgov - name = "\improper SolGov M9C" - desc = "Known formally as the M9A5C, this is a compact caseless ammo handgun made for switching to when your primary runs empty on it's mag." - icon_state = "solm9c" + name = "\improper Pistole C" + desc = "A favorite of the Terran Regency, but despised by the Solarian bureaucracy. Was taken out of standard service several centruries ago, and is issued in low numbers in the military. However, it is popular with civillians. Chambered in 5.56mm caseless." + icon_state = "pistole-c" weapon_weight = WEAPON_LIGHT w_class = WEIGHT_CLASS_SMALL mag_type = /obj/item/ammo_box/magazine/pistol556mm + fire_sound = 'sound/weapons/gun/pistol/pistolec.ogg' + +/obj/item/gun/ballistic/automatic/pistol/solgov/old + desc = "A favorite of the Terran Regency, but despised by the Solarian bureaucracy. Was taken out of standard service several centruries ago, and is issued in low numbers in the military. However, it is popular with civillians. Chambered in 5.56mm caseless." + icon_state = "pistole-c-old" /obj/item/gun/ballistic/automatic/pistol/tec9 name = "\improper TEC9 machine pistol" diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index ecf7e647bdde..6f3c7667245b 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -15,8 +15,9 @@ can_bayonet = TRUE knife_x_offset = 20 knife_y_offset = 12 - internal_cell = TRUE //prevents you from giving it an OP cell - WS Edit + internal_cell = TRUE custom_price = 750 + w_class = WEIGHT_CLASS_BULKY var/overheat_time = 16 var/holds_charge = FALSE var/unique_frequency = FALSE // modified by KA modkits @@ -238,6 +239,22 @@ /obj/projectile/kinetic/mech range = 5 +/obj/projectile/kinetic/mech/strike_thing(atom/target) //has no skill check for mechs + var/turf/target_turf = get_turf(target) + if(!target_turf) + target_turf = get_turf(src) + if(kinetic_gun) + var/list/mods = kinetic_gun.get_modkits() + for(var/obj/item/borg/upgrade/modkit/M in mods) + M.projectile_strike_predamage(src, target_turf, target, kinetic_gun) + for(var/obj/item/borg/upgrade/modkit/M in mods) + M.projectile_strike(src, target_turf, target, kinetic_gun) + if(ismineralturf(target_turf)) + var/turf/closed/mineral/M = target_turf + M.gets_drilled(firer, TRUE) + var/obj/effect/temp_visual/kinetic_blast/K = new /obj/effect/temp_visual/kinetic_blast(target_turf) + K.color = color + //Modkits /obj/item/borg/upgrade/modkit name = "kinetic accelerator modification kit" diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 15b314bd135f..4551014cafea 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -8,6 +8,7 @@ ammo_type = list(/obj/item/ammo_casing/energy/lasergun) ammo_x_offset = 1 shaded_charge = 1 + supports_variations = VOX_VARIATION /obj/item/gun/energy/laser/practice name = "practice laser gun" diff --git a/code/modules/projectiles/guns/powered.dm b/code/modules/projectiles/guns/powered.dm index ff268746561a..31ab879bb8cc 100644 --- a/code/modules/projectiles/guns/powered.dm +++ b/code/modules/projectiles/guns/powered.dm @@ -5,6 +5,7 @@ var/obj/item/stock_parts/cell/cell var/cell_type = /obj/item/stock_parts/cell/gun var/charge_sections = 3 + var/empty_battery_sound = FALSE // play empty alarm if no battery var/shaded_charge = FALSE //if this gun uses a stateful charge bar for more detail var/automatic_charge_overlays = TRUE //Do we handle overlays with base update_icon()? @@ -44,7 +45,8 @@ /obj/item/gun/ballistic/automatic/powered/shoot_live_shot(mob/living/user, pointblank = FALSE, mob/pbtarget, message = 1, stam_cost = 0) var/obj/item/ammo_casing/caseless/gauss/shot = chambered - cell.use(shot.energy_cost) + if(shot?.energy_cost) + cell.use(shot.energy_cost) return ..() /obj/item/gun/ballistic/automatic/powered/get_cell() diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 18057ac93fef..d17f94af19ae 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -17,6 +17,9 @@ ricochet_chance = 80 reflectable = REFLECT_NORMAL +/obj/projectile/beam/throw_atom_into_space() + return + /obj/projectile/beam/laser tracer_type = /obj/effect/projectile/tracer/laser diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 440b48475ea6..9b39aae37146 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -1,9 +1,12 @@ /obj/projectile/bullet name = "bullet" - icon_state = "bullet" + icon_state = "gauss" damage = 60 + speed = 0.4 damage_type = BRUTE nodamage = FALSE + light_system = MOVABLE_LIGHT + light_color = COLOR_VERY_SOFT_YELLOW flag = "bullet" hitsound_wall = "ricochet" impact_effect_type = /obj/effect/temp_visual/impact_effect diff --git a/code/modules/projectiles/projectile/bullets/gauss.dm b/code/modules/projectiles/projectile/bullets/gauss.dm index f7c26e4c8020..3d4409b3471c 100644 --- a/code/modules/projectiles/projectile/bullets/gauss.dm +++ b/code/modules/projectiles/projectile/bullets/gauss.dm @@ -10,9 +10,12 @@ name = "ferromagnetic lance" icon_state = "redtrac" damage = 30 - speed = 0.4 + armour_penetration = 0 + speed = 0.2 /obj/projectile/bullet/gauss/slug name = "ferromagnetic slug" icon_state = "gauss-slug" damage = 50 + armour_penetration = -50 + speed = 0.8 diff --git a/code/modules/projectiles/projectile/bullets/rifle.dm b/code/modules/projectiles/projectile/bullets/rifle.dm index 032c4fa16efa..ca3db2176a47 100644 --- a/code/modules/projectiles/projectile/bullets/rifle.dm +++ b/code/modules/projectiles/projectile/bullets/rifle.dm @@ -7,7 +7,7 @@ // 7.62 (Nagant Rifle) /obj/projectile/bullet/a762 - name = "7.62x54mm bullet" // WS Edit - Whitesands + name = "7.62x54mm bullet" damage = 60 /obj/projectile/bullet/a300 diff --git a/code/modules/projectiles/projectile/bullets/smg.dm b/code/modules/projectiles/projectile/bullets/smg.dm index 63d558cfac62..b9d77253fe28 100644 --- a/code/modules/projectiles/projectile/bullets/smg.dm +++ b/code/modules/projectiles/projectile/bullets/smg.dm @@ -19,26 +19,26 @@ damage = 30 armour_penetration = 40 -/obj/projectile/bullet/c556mmHITP +/obj/projectile/bullet/c556mm name = "5.56mm HITP bullet" damage = 20 armour_penetration = 0 -/obj/projectile/bullet/c556mmHITP_surplus +/obj/projectile/bullet/c556mm_surplus name = "5.56mm HITP surplus bullet" damage = 15 -/obj/projectile/bullet/c556mmHITP_ap +/obj/projectile/bullet/c556mm_ap name = "5.56mm HITP AP bullet" damage = 15 armour_penetration = 40 -/obj/projectile/bullet/c556mmHITP_hp +/obj/projectile/bullet/c556mm_hp name = "5.56mm HITP hollow-point bullet" damage = 30 armour_penetration = -50 -/obj/projectile/bullet/c556mmHITP/rubbershot +/obj/projectile/bullet/c556mm/rubbershot name = "5.56mm HITP rubber bullet" damage = 5 stamina = 20 diff --git a/code/modules/projectiles/projectile/bullets/turret.dm b/code/modules/projectiles/projectile/bullets/turret.dm new file mode 100644 index 000000000000..916f68af9b4a --- /dev/null +++ b/code/modules/projectiles/projectile/bullets/turret.dm @@ -0,0 +1,12 @@ +//folder for turret bullets, so we're not pulling from Random Files + +/obj/projectile/bullet/turret + name = "bullet" //taking name suggestions + damage = 60 //this is on par with the old projectile + +/obj/projectile/bullet/turret/rubber + name = "rubbershot bullet" + damage = 5 //"less than lethal" + stamina = 30 + + diff --git a/code/modules/projectiles/projectile/special/curse.dm b/code/modules/projectiles/projectile/special/curse.dm index 7d543f3aa42c..1993176de157 100644 --- a/code/modules/projectiles/projectile/special/curse.dm +++ b/code/modules/projectiles/projectile/special/curse.dm @@ -60,3 +60,8 @@ . = ..() if (. == BULLET_ACT_HIT) finale() + +/obj/projectile/curse_hand/phantom + name = "phantom hand" + damage = 15 + paralyze = 5 diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 163d91105342..614cb298fd05 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -331,19 +331,6 @@ return if(M.has_bane(BANE_SALT)) M.mind.disrupt_spells(-200) - if (issquidperson(M)) - if(reac_volume < 5) - return - if (method == INGEST) - to_chat(M, "Your tongue shrivels as you taste the salt!") - M.adjustFireLoss(reac_volume/2, TRUE) - else if (method == TOUCH) - M.adjustFireLoss(reac_volume/2, TRUE) - if(!M.incapacitated()) - var/obj/item/I = M.get_active_held_item() - M.throw_item(get_ranged_target_turf(M, pick(GLOB.alldirs), rand(1, 3))) - to_chat(M, "The salt causes your arm to spasm! It burns!") - M.log_message("threw [I] due to a Muscle Spasm", INDIVIDUAL_ATTACK_LOG) /datum/reagent/consumable/sodiumchloride/expose_turf(turf/T, reac_volume) //Creates an umbra-blocking salt pile if(!istype(T)) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 6f50d6bc0c62..a81add0b3d52 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -577,8 +577,8 @@ /datum/species/moth, /datum/species/pod, /datum/species/jelly, - /datum/species/abductor, - /datum/species/squid) + /datum/species/abductor + ) process_flags = ORGANIC | SYNTHETIC /datum/reagent/mutationtoxin/lizard @@ -667,13 +667,6 @@ race = /datum/species/ipc process_flags = ORGANIC | SYNTHETIC -/datum/reagent/mutationtoxin/squid - name = "Squid Mutation Toxin" - description = "A salty toxin." - color = "#5EFF3B" //RGB: 94, 255, 59 - race = /datum/species/squid - process_flags = ORGANIC | SYNTHETIC - /datum/reagent/mutationtoxin/kepi //crying name = "Kepori Mutation Toxin" description = "A feathery toxin." diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm index 7ca683dac983..57df3331c799 100644 --- a/code/modules/reagents/chemistry/recipes.dm +++ b/code/modules/reagents/chemistry/recipes.dm @@ -4,7 +4,7 @@ var/list/required_catalysts = new/list() // Both of these variables are mostly going to be used with slime cores - but if you want to, you can use them for other things - var/required_container = null // the exact container path required for the reaction to happen + var/obj/item/reagent_containers/required_container = null // the exact container path required for the reaction to happen var/required_other = 0 // an integer required for the reaction to happen var/mob_react = TRUE //Determines if a chemical reaction can occur inside a mob diff --git a/code/modules/reagents/reagent_containers/jug.dm b/code/modules/reagents/reagent_containers/jug.dm new file mode 100644 index 000000000000..4c524dff9c44 --- /dev/null +++ b/code/modules/reagents/reagent_containers/jug.dm @@ -0,0 +1,141 @@ +/obj/item/reagent_containers/glass/chem_jug + name = "chemical jug" + desc = "A large jug used for storing bulk ammounts chemicals. Provided with a tamper seal which ensures that the contents are pure" + icon = 'icons/obj/chem_jug.dmi' + icon_state = "chem_jug" + item_state = "sheet-plastic" + w_class = WEIGHT_CLASS_BULKY + reagent_flags = REFILLABLE | DUNKABLE + throw_range = 2 + volume = 150 + amount_per_transfer_from_this = 25 + possible_transfer_amounts = list(25,50,75,100,150) + custom_materials = list(/datum/material/plastic=1000) + fill_icon_thresholds = null + can_have_cap = TRUE + cap_on = TRUE + var/tamper = TRUE + var/tamper_cap_icon_state = "chem_jug_cap" + cap_icon_state = "chem_jug_cap_tamper" + drop_sound = 'sound/items/handling/book_drop.ogg' + pickup_sound = 'sound/items/handling/device_pickup.ogg' + lefthand_file = 'icons/mob/inhands/misc/sheets_lefthand.dmi' + righthand_file = 'icons/mob/inhands/misc/sheets_righthand.dmi' + +/obj/item/reagent_containers/glass/chem_jug/AltClick(mob/user) + . = ..() + if(tamper && !cap_on) + tamper = FALSE + cap_overlay = mutable_appearance(icon, tamper_cap_icon_state) + playsound(src, 'sound/items/poster_ripped.ogg', 50, 1) + to_chat(user, "You rip the tamper seal off of [src].") + +/obj/item/reagent_containers/glass/chem_jug/examine(mob/user) + . = ..() + if(tamper) + if(!cap_on) + . += "The tamper seal hasn't been applied yet." + return + . += "The tamper seal is intact." + else + . += "The tamper seal is broken." + + +/obj/item/reagent_containers/glass/chem_jug/SplashReagents(atom/target, thrown = FALSE) + if(!reagents || !reagents.total_volume || !spillable) + return + + if(ismob(target) && target.reagents) + if(thrown) + reagents.total_volume *= rand(1,3) * 0.1 //little makes contact with the target + var/mob/M = target + var/R + playsound(src, 'sound/items/glass_splash.ogg', 50, 1) + target.visible_message("[M] is splashed with something!", \ + "[M] is splashed with something!") + for(var/datum/reagent/A in reagents.reagent_list) + R += "[A.type] ([num2text(A.volume)])," + + if(thrownby) + log_combat(thrownby, M, "splashed", R) + reagents.expose(target, TOUCH, 0.3) + + else if(bartender_check(target) && thrown) + visible_message("[src] lands onto the [target.name] without spilling a single drop.") + return + + else + if(isturf(target) && reagents.reagent_list.len && thrownby) + log_combat(thrownby, target, "splashed (thrown) [english_list(reagents.reagent_list)]", "in [AREACOORD(target)]") + log_game("[key_name(thrownby)] splashed (thrown) [english_list(reagents.reagent_list)] on [target] in [AREACOORD(target)].") + message_admins("[ADMIN_LOOKUPFLW(thrownby)] splashed (thrown) [english_list(reagents.reagent_list)] on [target] in [ADMIN_VERBOSEJMP(target)].") + playsound(src, 'sound/items/glass_splash.ogg', 50, 1) + visible_message("[src] spills its contents all over [target].") + reagents.expose(target, TOUCH, 0.3) + if(QDELETED(src)) + return + + reagents.remove_any(45) + +/obj/item/reagent_containers/glass/chem_jug/open + cap_on = FALSE + +/obj/item/reagent_containers/glass/chem_jug/carbon + name = "chemical jug (carbon)" + icon_state = "chem_jug_carbon" + list_reagents = list(/datum/reagent/carbon = 150) + +/obj/item/reagent_containers/glass/chem_jug/oxygen + name = "chemical jug (oxygen)" + icon_state = "chem_jug_oxygen" + list_reagents = list(/datum/reagent/oxygen = 150) + +/obj/item/reagent_containers/glass/chem_jug/nitrogen + name = "chemical jug (nitrogen)" + icon_state = "chem_jug_nitrogen" + list_reagents = list(/datum/reagent/nitrogen = 150) + +/obj/item/reagent_containers/glass/chem_jug/hydrogen + name = "chemical jug (hydrogen)" + icon_state = "chem_jug_hydrogen" + list_reagents = list(/datum/reagent/hydrogen = 150) + +/obj/item/reagent_containers/glass/chem_jug/radium + name = "chemical jug (radium)" + icon_state = "chem_jug_radium" + list_reagents = list(/datum/reagent/radium = 150) + +/obj/item/reagent_containers/glass/chem_jug/aluminium + name = "chemical jug (aluminium)" + icon_state = "chem_jug_aluminium" + list_reagents = list(/datum/reagent/aluminium = 150) + +/obj/item/reagent_containers/glass/chem_jug/chlorine + name = "chemical jug (chlorine)" + icon_state = "chem_jug_chlorine" + list_reagents = list(/datum/reagent/chlorine = 150) + +/obj/item/reagent_containers/glass/chem_jug/copper + name = "chemical jug (copper)" + icon_state = "chem_jug_copper" + list_reagents = list(/datum/reagent/copper = 150) + +/obj/item/reagent_containers/glass/chem_jug/bromine + name = "chemical jug (bromine)" + icon_state = "chem_jug_bromine" + list_reagents = list(/datum/reagent/bromine = 150) + +/obj/item/reagent_containers/glass/chem_jug/iodine + name = "chemical jug (iodine)" + icon_state = "chem_jug_iodine" + list_reagents = list(/datum/reagent/iodine = 150) + +/obj/item/reagent_containers/glass/chem_jug/potassium + name = "chemical jug (potassium)" + icon_state = "chem_jug_potassium" + list_reagents = list(/datum/reagent/potassium = 150) + +/obj/item/reagent_containers/glass/chem_jug/sulfur + name = "chemical jug (sulfur)" + icon_state = "chem_jug_sulfur" + list_reagents = list(/datum/reagent/sulfur = 150) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index daab6997766c..3b7994eef201 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -20,23 +20,38 @@ other types of metals and chemistry for reagents). //DESIGNS ARE GLOBAL. DO NOT CREATE OR DESTROY THEM AT RUNTIME OUTSIDE OF INIT, JUST REFERENCE THEM TO WHATEVER YOU'RE DOING! //why are you yelling? //DO NOT REFERENCE OUTSIDE OF SSRESEARCH. USE THE PROCS IN SSRESEARCH TO OBTAIN A REFERENCE. -/datum/design //Datum for object designs, used in construction - var/name = "Name" //Name of the created object. - var/desc = "Desc" //Description of the created object. - var/id = DESIGN_ID_IGNORE //ID of the created object for easy refernece. Alphanumeric, lower-case, no symbols - var/build_type = null //Flag as to what kind machine the design is built in. See defines. - var/list/materials = list() //List of materials. Format: "id" = amount. - var/construction_time //Amount of time required for building the object - var/build_path = null //The file path of the object that gets created - var/list/make_reagents = list() //Reagents produced. Format: "id" = amount. Currently only supported by the biogenerator. - var/list/category = null //Primarily used for Mech Fabricators, but can be used for anything - var/list/reagents_list = list() //List of reagents. Format: "id" = amount. +/datum/design //Datum for object designs, used in construction + /// Name of the created object + var/name = "Name" + /// 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 caregory) -> amount + var/list/materials = list() + /// The amount of time required to create one unit of the product + var/construction_time + /// The typepath of the object produced by this design + var/build_path = null + /// List of reagents produced by this design. Currently only supported by the biogenerator + var/list/make_reagents = list() + /// What category this design falls under. Used for sorting in production machines, mostly the mechfab + var/list/category = null + /// List of reagents required to create one unit of the product + var/list/reagents_list = list() + /// The maximum number of units of whatever is produced by this can be produced in one go var/maxstack = 1 - var/lathe_time_factor = 1 //How many times faster than normal is this to build on the protolathe - var/dangerous_construction = FALSE //notify and log for admin investigations if this is printed. - var/departmental_flags = ALL //bitflags for deplathes. + /// How many times faster than normal is this to build on the protolathe + var/lathe_time_factor = 1 + /// Notify and log for admin investigations if this is printed + var/dangerous_construction = FALSE + /// Bitflags for deplathes. + var/departmental_flags = ALL var/list/datum/techweb_node/unlocked_by = list() - var/research_icon //Replaces the item icon in the research console + /// Replaces the item icon in the research console + var/research_icon var/research_icon_state var/icon_cache @@ -64,6 +79,13 @@ other types of metals and chemistry for reagents). sheet.send(user) return sheet.icon_tag(id) +/// Returns the description of the design +/datum/design/proc/get_description() + var/obj/object_build_item_path = build_path + + return isnull(desc) ? initial(object_build_item_path.desc) : desc + + //////////////////////////////////////// //Disks for transporting design datums// //////////////////////////////////////// diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 499673ab16fc..5e0947d7e378 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -586,6 +586,14 @@ build_path = /obj/item/storage/pill_bottle category = list("initial", "Medical", "Medical Designs") +/datum/design/chem_jug + name = "Chemical Jug" + id = "chem_jug" + build_type = AUTOLATHE | PROTOLATHE + materials = list(/datum/material/plastic = 4000) + build_path = /obj/item/reagent_containers/glass/chem_jug/open + category = list("initial", "Medical", "Medical Designs") + /datum/design/recorder name = "Universal Recorder" id = "recorder" diff --git a/code/modules/research/designs/limbgrower_designs.dm b/code/modules/research/designs/limbgrower_designs.dm index 4af718eb13f8..4f48995190dc 100644 --- a/code/modules/research/designs/limbgrower_designs.dm +++ b/code/modules/research/designs/limbgrower_designs.dm @@ -39,7 +39,7 @@ id = "digi_l_leg" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/synthflesh = 25) - build_path = /obj/item/bodypart/leg/left/digitigrade + build_path = /obj/item/bodypart/leg/left/lizard/digitigrade category = list("initial",SPECIES_LIZARD) /datum/design/digitigrade/rightleg @@ -47,7 +47,7 @@ id = "digi_r_leg" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/synthflesh = 25) - build_path = /obj/item/bodypart/leg/right/digitigrade + build_path = /obj/item/bodypart/leg/right/lizard/digitigrade category = list("initial",SPECIES_LIZARD) //Non-limb limb designs @@ -174,30 +174,6 @@ build_path = /obj/item/organ/ears/fox category = list("initial",SPECIES_HUMAN) -/datum/design/dwarf_gland - name = "Dwarf Gland" - id = "dwarfgland" - build_type = LIMBGROWER - reagents_list = list(/datum/reagent/medicine/synthflesh = 20, /datum/reagent/consumable/ethanol = 20) - build_path = /obj/item/organ/dwarfgland - category = list("initial",SPECIES_DWARF) - -/datum/design/dwarf_liver - name = "Dwarf Liver" - id = "dwarfliver" - build_type = LIMBGROWER - reagents_list = list(/datum/reagent/medicine/synthflesh = 20, /datum/reagent/consumable/ethanol = 20) - build_path = /obj/item/organ/liver/dwarf - category = list("initial",SPECIES_DWARF) - -/datum/design/dwarf_tongue - name = "Dwarf Tongue" - id = "dwarftongue" - build_type = LIMBGROWER - reagents_list = list(/datum/reagent/medicine/synthflesh = 10, /datum/reagent/consumable/ethanol = 10) - build_path = /obj/item/organ/tongue/dwarf - category = list("initial",SPECIES_DWARF) - /datum/design/lizard_tongue name = "Lizard Tongue" id = "lizardtongue" diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index f9c735054a3d..bd801e60995e 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -135,6 +135,26 @@ id = "vprosthetic_r_leg" build_path = /obj/item/bodypart/leg/right/robot/surplus/vox +/datum/design/prosthetic_l_arm/lizard + name = "Surplus Prosthetic Lizard Left Arm" + id = "lprosthetic_l_arm" + build_path = /obj/item/bodypart/l_arm/robot/surplus/lizard + +/datum/design/prosthetic_r_arm/lizard + name = "Surplus Prosthetic Lizard Right Arm" + id = "lprosthetic_r_arm" + build_path = /obj/item/bodypart/r_arm/robot/surplus/lizard + +/datum/design/prosthetic_l_leg/lizard + name = "Surplus Prosthetic Lizard Left Leg" + id = "lprosthetic_l_leg" + build_path = /obj/item/bodypart/leg/left/robot/surplus/lizard + +/datum/design/prosthetic_r_leg/lizard + name = "Surplus Prosthetic Lizard Right Leg" + id = "lprosthetic_r_leg" + build_path = /obj/item/bodypart/leg/right/robot/surplus/lizard + //Ripley /datum/design/ripley_chassis name = "Exosuit Chassis (APLU \"Ripley\")" diff --git a/code/modules/research/nanites/nanite_program_hub.dm b/code/modules/research/nanites/nanite_program_hub.dm index 8abdf924c79a..454d74bb824d 100644 --- a/code/modules/research/nanites/nanite_program_hub.dm +++ b/code/modules/research/nanites/nanite_program_hub.dm @@ -99,7 +99,7 @@ var/list/program_design = list() program_design["id"] = D.id program_design["name"] = D.name - program_design["desc"] = D.desc + program_design["desc"] = D.get_description() data["programs"][cat_name] += list(program_design) if(!length(data["programs"])) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index b99960b812b5..2115a3c6aba4 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -136,7 +136,7 @@ Nothing else in the console has ID requirements. return else playsound(src, 'sound/machines/ping.ogg', 50, 3, -1) - visible_message("You insert [E] into a slot on the [src], producting [E.research] points from the extract's chemical makeup!") + visible_message("[user] inserts [E] into a slot on the [src]!", "You insert [E] into a slot on the [src], producting [E.research] points from the extract's chemical makeup!") stored_research.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = E.research)) slime_already_researched[E.type] = TRUE qdel(D) @@ -155,7 +155,7 @@ Nothing else in the console has ID requirements. return else playsound(src, 'sound/machines/ping.ogg', 50, 3, -1) - visible_message("You insert [E] into a slot on the [src], producting [E.research] points from the plant's genetic makeup!") + visible_message("[user] inserts [E] into a slot on the [src]!", "You insert [E] into a slot on the [src], producting [E.research] points from the plant's genetic makeup!") stored_research.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = E.research)) plant_already_researched[E.type] = TRUE qdel(D) @@ -164,6 +164,18 @@ Nothing else in the console has ID requirements. visible_message("[src] buzzes and displays a message: Genetic data already researched!") playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 3, -1) return + if(istype(D, /obj/item/assembly/signaler/anomaly)) + + var/obj/item/assembly/signaler/anomaly/anomaly = D + if(!stored_research) + visible_message("Warning: No Linked Server!") + return + + playsound(src, 'sound/machines/ping.ogg', 50, 3, -1) + visible_message("[user] inserts [anomaly] into a slot on the [src]!", "You insert [anomaly] into a slot on the [src], producting [anomaly.research] points!") + stored_research.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = anomaly.research)) + qdel(anomaly) + return if(istype(D, /obj/item/research_notes)) if(!stored_research) diff --git a/code/modules/research/techweb/_techweb_node.dm b/code/modules/research/techweb/_techweb_node.dm index 4076ff881ff1..73d732e28a1f 100644 --- a/code/modules/research/techweb/_techweb_node.dm +++ b/code/modules/research/techweb/_techweb_node.dm @@ -11,17 +11,26 @@ var/starting_node = FALSE //Whether it's available without any research. var/list/prereq_ids = list() var/list/design_ids = list() - var/list/unlock_ids = list() //CALCULATED FROM OTHER NODE'S PREREQUISITES. Assoc list id = TRUE. - var/list/boost_item_paths = list() //Associative list, path = list(point type = point_value). - var/autounlock_by_boost = TRUE //boosting this will autounlock this node. - var/export_price = 0 //Cargo export price. - var/list/research_costs = list() //Point cost to research. type = amount - var/category = "Misc" //Category + /// CALCULATED FROM OTHER NODE'S PREREQUISITIES. Associated list id = TRUE + var/list/unlock_ids = list() + /// Associative list, path = list(point type = point_value) + var/list/boost_item_paths = list() + /// Boosting this will autounlock this node + var/autounlock_by_boost = TRUE + /// Cargo export price. + var/export_price = 0 + /// The points cost to research the node, type = amount + var/list/research_costs = list() + /// The category of the node + var/category = "Misc" + /// Whether or not this node should show on the wiki + var/show_on_wiki = TRUE /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 diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 309dd2fa415b..7588f32ab249 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -78,7 +78,7 @@ display_name = "Biological Technology" description = "What makes us tick." //the MC, silly! prereq_ids = list("base") - design_ids = list("sleeper", "chem_heater", "chem_master", "chem_dispenser", "pandemic", "defibrillator", "defibmount", "operating", "soda_dispenser", "beer_dispenser", "healthanalyzer", "medigel","genescanner", "med_spray_bottle", "chem_pack", "blood_pack", "medical_kiosk", "crewpinpointerprox", "medipen_refiller", "prosthetic_l_arm", "prosthetic_r_arm", "prosthetic_l_leg", "prosthetic_r_leg", "kprosthetic_l_arm", "kprosthetic_r_arm", "kprosthetic_l_leg", "kprosthetic_r_leg", "vprosthetic_l_arm", "vprosthetic_r_arm", "vprosthetic_l_leg", "vprosthetic_r_leg") + design_ids = list("sleeper", "chem_heater", "chem_master", "pandemic", "defibrillator", "defibmount", "operating", "soda_dispenser", "beer_dispenser", "healthanalyzer", "medigel","genescanner", "med_spray_bottle", "chem_pack", "blood_pack", "medical_kiosk", "crewpinpointerprox", "medipen_refiller", "prosthetic_l_arm", "prosthetic_r_arm", "prosthetic_l_leg", "prosthetic_r_leg", "kprosthetic_l_arm", "kprosthetic_r_arm", "kprosthetic_l_leg", "kprosthetic_r_leg", "vprosthetic_l_arm", "vprosthetic_r_arm", "vprosthetic_l_leg", "vprosthetic_r_leg", "lprosthetic_l_arm", "lprosthetic_r_arm", "lprosthetic_l_leg", "lprosthetic_r_leg") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 @@ -266,7 +266,7 @@ display_name = "Applied Bluespace Research" description = "Using bluespace to make things faster and better." prereq_ids = list("bluespace_basic", "engineering") - design_ids = list("bs_rped","minerbag_holding", "bluespacebeaker", "bluespacesyringe", "phasic_scanning", "roastingstick", "ore_silo", "biobag_holding", "engibag_holding", "plantbag_holding", "chembag_holding") + design_ids = list("bs_rped","minerbag_holding", "bluespacebeaker", "bluespacesyringe", "phasic_scanning", "roastingstick", "ore_silo", "chem_dispenser", "biobag_holding", "engibag_holding", "plantbag_holding", "chembag_holding") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) export_price = 5000 @@ -1003,6 +1003,9 @@ export_price = 5000 /////////////////////////Nanites///////////////////////// + +//Disabled pending nanite rework --Apogee-dev +/* /datum/techweb_node/nanite_base id = "nanite_base" display_name = "Basic Nanite Programming" @@ -1097,7 +1100,7 @@ export_price = 2500 hidden = TRUE experimental = TRUE - +*/ ////////////////////////Alien technology//////////////////////// /datum/techweb_node/alientech //AYYYYYYYYLMAOO tech id = "alientech" diff --git a/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm b/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm index fd2a9726b4fa..50e855b2ab50 100644 --- a/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm +++ b/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm @@ -104,11 +104,12 @@ //***Grave mounds. /obj/structure/closet/crate/grave name = "burial mound" - desc = "An marked patch of soil, showing signs of a burial long ago. You wouldn't disturb a grave... right?" + desc = "A marked patch of soil, adorned with a wooden cross" icon_state = "grave" dense_when_open = TRUE material_drop = /obj/item/stack/ore/glass/basalt material_drop_amount = 5 + opened = TRUE anchorable = FALSE anchored = TRUE locked = TRUE @@ -117,31 +118,20 @@ var/lead_tomb = FALSE var/first_open = FALSE -/obj/structure/closet/crate/grave/PopulateContents() //GRAVEROBBING IS NOW A FEATURE - ..() - new /obj/effect/decal/remains/human/grave(src) - switch(rand(1,7)) - if(1) - new /obj/item/coin/gold(src) - new /obj/item/storage/wallet(src) - if(2) - new /obj/item/clothing/glasses/meson(src) - if(3) - new /obj/item/coin/silver(src) - new /obj/item/shovel/spade(src) - if(4) - new /obj/item/storage/book/bible/booze(src) - if(5) - new /obj/item/clothing/neck/stethoscope(src) - new /obj/item/scalpel(src) - new /obj/item/hemostat(src) - - if(6) - new /obj/item/reagent_containers/glass/beaker(src) - new /obj/item/clothing/glasses/science(src) - if(7) - new /obj/item/clothing/glasses/sunglasses(src) - new /obj/item/clothing/mask/cigarette/rollie(src) +/obj/structure/closet/crate/grave/attackby(obj/item/W, mob/user, params) + .=..() + if(istype(W, /obj/item/screwdriver)) + if(!user.is_literate()) + to_chat(user, "You scratch illegibly on [src]!") + return + var/t = stripped_input(user, "What would you like the inscription to be?", name, null, 53) + if(user.get_active_held_item() != W) + return + if(!user.canUseTopic(src, BE_CLOSE)) + return + if(t) + desc = "[t]" + return /obj/structure/closet/crate/grave/open(mob/living/user, obj/item/S, force = FALSE) if(!opened) @@ -190,14 +180,50 @@ dump_contents() return -/obj/structure/closet/crate/grave/lead_researcher +/obj/structure/closet/crate/grave/stone + name = "burial mound" + desc = "A marked patch of soil, adorned with a sandstone slab" + icon_state = "grave_lead" + +/obj/structure/closet/crate/grave/loot + name = "burial mound" + desc = "A marked patch of soil, showing signs of a burial long ago. You wouldn't disturb a grave... right?" + opened = FALSE + +/obj/structure/closet/crate/grave/loot/PopulateContents() //GRAVEROBBING IS NOW A FEATURE + ..() + new /obj/effect/decal/remains/human/grave(src) + switch(rand(1,7)) + if(1) + new /obj/item/coin/gold(src) + new /obj/item/storage/wallet(src) + if(2) + new /obj/item/clothing/glasses/meson(src) + if(3) + new /obj/item/coin/silver(src) + new /obj/item/shovel/spade(src) + if(4) + new /obj/item/storage/book/bible/booze(src) + if(5) + new /obj/item/clothing/neck/stethoscope(src) + new /obj/item/scalpel(src) + new /obj/item/hemostat(src) + + if(6) + new /obj/item/reagent_containers/glass/beaker(src) + new /obj/item/clothing/glasses/science(src) + if(7) + new /obj/item/clothing/glasses/sunglasses(src) + new /obj/item/clothing/mask/cigarette/rollie(src) + +/obj/structure/closet/crate/grave/loot/lead_researcher name = "ominous burial mound" desc = "Even in a place filled to the brim with graves, this one shows a level of preperation and planning that fills you with dread." icon_state = "grave_lead" lead_tomb = TRUE first_open = TRUE -/obj/structure/closet/crate/grave/lead_researcher/PopulateContents() //ADVANCED GRAVEROBBING +/obj/structure/closet/crate/grave/loot/lead_researcher/PopulateContents() //ADVANCED GRAVEROBBING ..() new /obj/effect/decal/cleanable/blood/gibs/old(src) new /obj/item/book/granter/crafting_recipe/boneyard_notes(src) diff --git a/code/modules/surgery/advanced/brainwashing.dm b/code/modules/surgery/advanced/brainwashing.dm index 40bd140176a4..a2ff0f588506 100644 --- a/code/modules/surgery/advanced/brainwashing.dm +++ b/code/modules/surgery/advanced/brainwashing.dm @@ -27,7 +27,12 @@ /datum/surgery_step/brainwash name = "brainwash" - implements = list(TOOL_HEMOSTAT = 85, TOOL_WIRECUTTER = 50, /obj/item/stack/packageWrap = 35, /obj/item/stack/cable_coil = 15) + implements = list( + TOOL_HEMOSTAT = 85, + /obj/item/soap = 60, //haha. brainwashing. get it? + TOOL_WIRECUTTER = 30, + /obj/item/stack/packageWrap = 20, + /obj/item/stack/cable_coil = 10) time = 20 SECONDS preop_sound = 'sound/surgery/hemostat1.ogg' success_sound = 'sound/surgery/hemostat1.ogg' diff --git a/code/modules/surgery/advanced/lobotomy.dm b/code/modules/surgery/advanced/lobotomy.dm index 1fa86e8899bd..d1c882f96620 100644 --- a/code/modules/surgery/advanced/lobotomy.dm +++ b/code/modules/surgery/advanced/lobotomy.dm @@ -23,8 +23,12 @@ /datum/surgery_step/lobotomize name = "perform lobotomy" - implements = list(TOOL_SCALPEL = 85, /obj/item/melee/transforming/energy/sword = 55, /obj/item/kitchen/knife = 35, - /obj/item/shard = 25, /obj/item = 20) + implements = list( + TOOL_SCALPEL = 85, // there is no way this should be reasonable to do basically at all without a real surgery. ghetto lobotomy, for real? + /obj/item/melee/transforming/energy/sword = 25, + /obj/item/kitchen/knife = 15, + /obj/item/shard = 10, + /obj/item = 5) time = 10 SECONDS preop_sound = 'sound/surgery/scalpel1.ogg' success_sound = 'sound/surgery/scalpel2.ogg' diff --git a/code/modules/surgery/advanced/necrotic_revival.dm b/code/modules/surgery/advanced/necrotic_revival.dm index 41f63b1a5f3f..8018b0f910b2 100644 --- a/code/modules/surgery/advanced/necrotic_revival.dm +++ b/code/modules/surgery/advanced/necrotic_revival.dm @@ -18,7 +18,9 @@ /datum/surgery_step/bionecrosis name = "start bionecrosis" - implements = list(/obj/item/reagent_containers/syringe = 100, /obj/item/pen = 30) + implements = list( + /obj/item/reagent_containers/syringe = 100, + /obj/item/pen = 30) time = 50 chems_needed = list(/datum/reagent/toxin/zombiepowder, /datum/reagent/medicine/rezadone) require_all_chems = FALSE diff --git a/code/modules/surgery/advanced/pacification.dm b/code/modules/surgery/advanced/pacification.dm index 21c2dafb7389..c276faa2de7a 100644 --- a/code/modules/surgery/advanced/pacification.dm +++ b/code/modules/surgery/advanced/pacification.dm @@ -20,7 +20,10 @@ /datum/surgery_step/pacify name = "rewire brain" - implements = list(TOOL_HEMOSTAT = 100, TOOL_SCREWDRIVER = 35, /obj/item/pen = 15) + implements = list( + TOOL_HEMOSTAT = 100, + TOOL_SCREWDRIVER = 15, //brain surgery with a screwdriver. Ouch! + /obj/item/pen = 5) time = 4 SECONDS preop_sound = 'sound/surgery/hemostat1.ogg' success_sound = 'sound/surgery/hemostat1.ogg' diff --git a/code/modules/surgery/advanced/viral_bonding.dm b/code/modules/surgery/advanced/viral_bonding.dm index 006ebc947ceb..889d894e3d88 100644 --- a/code/modules/surgery/advanced/viral_bonding.dm +++ b/code/modules/surgery/advanced/viral_bonding.dm @@ -20,7 +20,10 @@ /datum/surgery_step/viral_bond name = "viral bond" - implements = list(TOOL_CAUTERY = 100, TOOL_WELDER = 50, /obj/item = 30) // 30% success with any hot item. + implements = list( + TOOL_CAUTERY = 100, + TOOL_WELDER = 40, + /obj/item = 20) // 30% success with any hot item. time = 100 chems_needed = list(/datum/reagent/medicine/spaceacillin,/datum/reagent/consumable/virus_food,/datum/reagent/toxin/formaldehyde) experience_given = MEDICAL_SKILL_ADVANCED diff --git a/code/modules/surgery/amputation.dm b/code/modules/surgery/amputation.dm index 1ff850c5e39c..91cd1dce07e4 100644 --- a/code/modules/surgery/amputation.dm +++ b/code/modules/surgery/amputation.dm @@ -9,7 +9,14 @@ /datum/surgery_step/sever_limb name = "sever limb" - implements = list(/obj/item/shears = 300, TOOL_SCALPEL = 100, TOOL_SAW = 100, /obj/item/melee/arm_blade = 80, /obj/item/fireaxe = 50, /obj/item/hatchet = 40, /obj/item/kitchen/knife/butcher = 25) + implements = list(//this is fine, detaching limbs doesn't require precision - this is only more precise because zone targeting is randomized + /obj/item/shears = 300, + TOOL_SCALPEL = 100, + TOOL_SAW = 100, + /obj/item/melee/arm_blade = 80, + /obj/item/fireaxe = 50, + /obj/item/hatchet = 40, + /obj/item/kitchen/knife/butcher = 25) time = 6.4 SECONDS preop_sound = 'sound/surgery/scalpel1.ogg' success_sound = 'sound/surgery/organ2.ogg' diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index 48dd4caeeb76..92b51e0f2049 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -12,27 +12,43 @@ layer = BELOW_MOB_LAYER //so it isn't hidden behind objects when on the floor var/mob/living/carbon/owner = null var/datum/weakref/original_owner = null - ///If you'd like to know if a bodypart is organic, please use is_organic_limb() - var/bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC //List of bodytypes flags, important for fitting clothing. - var/change_exempt_flags //Defines when a bodypart should not be changed. Example: BP_BLOCK_CHANGE_SPECIES prevents the limb from being overwritten on species gain - - var/is_husked = FALSE //Duh - var/limb_id = SPECIES_HUMAN //This is effectively the icon_state for limbs. - var/limb_gender = "m" //Defines what sprite the limb should use if it is also sexually dimorphic. - var/uses_mutcolor = TRUE //Does this limb have a greyscale version? - var/is_dimorphic = FALSE //Is there a sprite difference between male and female? - var/draw_color //Greyscale draw color + ///List of bodytypes flags, important for fitting clothing. If you'd like to know if a bodypart is organic, please use is_organic_limb() + var/bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC + + ///Whether the clothing being worn forces the limb into being "squished" to plantigrade/standard humanoid compliance + var/plantigrade_forced = FALSE + ///Whether the limb is husked + var/is_husked = FALSE + ///This is effectively the icon_state prefix for limbs. + var/limb_id = SPECIES_HUMAN + ///Defines what sprite the limb should use if it is also sexually dimorphic. + var/limb_gender = "m" + ///Does this limb have a greyscale version? + var/uses_mutcolor = TRUE + ///Is there a sprite difference between male and female? + var/is_dimorphic = FALSE + ///Greyscale draw color + var/draw_color + + /// The icon state of the limb's overlay, colored with a different color + var/overlay_icon_state + /// The color of the limb's overlay + var/species_secondary_color var/body_zone //BODY_ZONE_CHEST, BODY_ZONE_L_ARM, etc , used for def_zone /// The body zone of this part in english ("chest", "left arm", etc) without the species attached to it var/plaintext_zone var/aux_zone // used for hands var/aux_layer - var/body_part = null //bitflag used to check which clothes cover this bodypart + ///bitflag used to check which clothes cover this bodypart + var/body_part = null var/list/embedded_objects = list() - var/held_index = 0 //are we a hand? if so, which one! - var/is_pseudopart = FALSE //For limbs that don't really exist, eg chainsaws - var/bone_status = BONE_FLAG_NO_BONES // Is it fine, broken, splinted, or just straight up fucking gone + ///Are we a hand? if so, which one! + var/held_index = 0 + ///For limbs that don't really exist, eg chainsaws + var/is_pseudopart = FALSE + /// Is it fine, broken, splinted, or just straight up fucking gone + var/bone_status = BONE_FLAG_NO_BONES var/bone_break_threshold = 30 /// So we know if we need to scream if this limb hits max damage @@ -43,7 +59,8 @@ var/disable_threshold = 1 ///Controls whether bodypart_disabled makes sense or not for this limb. var/can_be_disabled = FALSE - var/body_damage_coeff = 1 //Multiplier of the limb's damage that gets applied to the mob + ///Multiplier of the limb's damage that gets applied to the mob + var/body_damage_coeff = 1 var/stam_damage_coeff = 0.75 //Why is this the default??? - Kapu var/brutestate = 0 var/burnstate = 0 @@ -53,14 +70,18 @@ var/max_stamina_damage = 0 var/max_damage = 0 - var/cremation_progress = 0 //Gradually increases while burning when at full damage, destroys the limb when at 100 + ///Gradually increases while burning when at full damage, destroys the limb when at 100 + var/cremation_progress = 0 - var/brute_reduction = 0 //Subtracted to brute damage taken - var/burn_reduction = 0 //Subtracted to burn damage taken + ///Subtracted from brute damage taken + var/brute_reduction = 0 + ///Subtracted from burn damage taken + var/burn_reduction = 0 //Coloring and proper item icon update var/skin_tone = "" - var/should_draw_greyscale = TRUE //Limbs need this information as a back-up incase they are generated outside of a carbon (limbgrower) + ///Limbs need this information as a back-up incase they are generated outside of a carbon (limbgrower) + var/should_draw_greyscale = TRUE var/species_color = "" var/mutation_color = "" /// The colour of damage done to this bodypart @@ -69,14 +90,17 @@ var/use_damage_color = FALSE var/no_update = 0 - var/animal_origin = null //for nonhuman bodypart (e.g. monkey) - var/dismemberable = 1 //whether it can be dismembered with a weapon. + /// If it's a nonhuman bodypart (e.g. monkey) + var/animal_origin = null + /// Whether it can be dismembered with a weapon + var/dismemberable = TRUE var/px_x = 0 var/px_y = 0 var/species_flags_list = list() - var/dmg_overlay_type //the type of damage overlay (if any) to use when this bodypart is bruised/burned. + ///the type of damage overlay (if any) to use when this bodypart is bruised/burned. + var/dmg_overlay_type //Damage messages used by help_shake_act() var/light_brute_msg = "bruised" @@ -549,6 +573,9 @@ else species_color = null + if(overlay_icon_state) + species_secondary_color = H.dna.features["mcolor2"] + UnregisterSignal(owner, COMSIG_MOVABLE_MOVED) if(NO_BONES in S.species_traits) bone_status = BONE_FLAG_NO_BONES @@ -632,11 +659,13 @@ limb.icon = icon if(!should_draw_greyscale || !icon) limb.icon = static_icon - if(is_dimorphic) //Does this type of limb have sexual dimorphism? - limb.icon_state = "[limb_id]_[body_zone]_[limb_gender]" - else - limb.icon_state = "[limb_id]_[body_zone]" + limb.icon_state = "[limb_id]_[body_zone]" + + if(is_dimorphic) //Does this type of limb have sexual dimorphism? + limb.icon_state += "_[limb_gender]" + if(bodytype & BODYTYPE_DIGITIGRADE && !plantigrade_forced) + limb.icon_state += "_digitigrade" if(!icon_exists(limb.icon, limb.icon_state)) limb_stacktrace("Limb generated with nonexistant icon. File: [limb.icon] | State: [limb.icon_state]", GLOB.Debug) //If you *really* want more of these, you can set the *other* global debug flag manually. @@ -647,6 +676,10 @@ if(aux_zone) //Hand shit aux = image(limb.icon, "[limb_id]_[aux_zone]", -aux_layer, image_dir) . += aux + if(overlay_icon_state) + var/image/overlay = image(limb.icon, "[limb_id]_[aux_zone]_overlay", -aux_layer, image_dir) + overlay.color = "#[species_secondary_color]" + . += overlay draw_color = mutation_color if(should_draw_greyscale) //Should the limb be colored outside of a forced color? @@ -657,6 +690,11 @@ if(aux_zone) aux.color = "#[draw_color]" + if(overlay_icon_state) + var/image/overlay = image(limb.icon, "[limb.icon_state]_overlay", -BODY_ADJ_LAYER, image_dir) + overlay.color = "#[species_secondary_color]" + . += overlay + //Ok so legs are a bit goofy in regards to layering, and we will need two images instead of one to fix that if((body_zone == BODY_ZONE_R_LEG) || (body_zone == BODY_ZONE_L_LEG)) var/obj/item/bodypart/leg/leg_source = src @@ -680,7 +718,8 @@ external_organ.bitflag_to_layer(external_layer), limb_gender, )*/ - return . + + return /obj/item/bodypart/deconstruct(disassembled = TRUE) drop_organs() diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index 46cb0f85728d..e360945a16d3 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -381,21 +381,21 @@ /mob/living/proc/regenerate_limbs(noheal = FALSE, list/excluded_zones = list()) SEND_SIGNAL(src, COMSIG_LIVING_REGENERATE_LIMBS, noheal, excluded_zones) -/mob/living/carbon/regenerate_limbs(noheal = FALSE, list/excluded_zones = list()) +/mob/living/carbon/regenerate_limbs(noheal = FALSE, list/excluded_zones = list(), robotic = FALSE) . = ..() var/list/zone_list = list(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG) if(length(excluded_zones)) zone_list -= excluded_zones for(var/Z in zone_list) - . += regenerate_limb(Z, noheal) + . += regenerate_limb(Z, noheal, robotic) -/mob/living/proc/regenerate_limb(limb_zone, noheal) +/mob/living/proc/regenerate_limb(limb_zone, noheal, robotic = FALSE) return -/mob/living/carbon/regenerate_limb(limb_zone, noheal) +/mob/living/carbon/regenerate_limb(limb_zone, noheal, robotic = FALSE) var/obj/item/bodypart/L if(get_bodypart(limb_zone)) return FALSE - L = newBodyPart(limb_zone, 0, 0) + L = new_body_part(limb_zone, robotic, FALSE) L.replace_limb(src, TRUE, TRUE) return 1 diff --git a/code/modules/surgery/bodyparts/helpers.dm b/code/modules/surgery/bodyparts/helpers.dm index c35070ce07be..73ecf0e52444 100644 --- a/code/modules/surgery/bodyparts/helpers.dm +++ b/code/modules/surgery/bodyparts/helpers.dm @@ -145,24 +145,32 @@ // // FUCK YOU AUGMENT CODE - With love, Kapu //Hi Kapu -/mob/living/carbon/proc/newBodyPart(zone, robotic, fixed_icon) +// this code was perfectly fine kapu +/mob/living/carbon/proc/new_body_part(zone, robotic, fixed_icon, datum/species/species) + species ||= dna.species var/obj/item/bodypart/L switch(zone) if(BODY_ZONE_L_ARM) - L = new dna.species.species_l_arm() + L = robotic ? new species.species_robotic_l_arm() : new species.species_l_arm() if(BODY_ZONE_R_ARM) - L = new dna.species.species_r_arm() + L = robotic ? new species.species_robotic_r_arm() : new species.species_r_arm() if(BODY_ZONE_HEAD) - L = new dna.species.species_head() + L = robotic ? new species.species_robotic_head() : new species.species_head() if(BODY_ZONE_L_LEG) - L = new dna.species.species_l_leg() + if(species.is_digitigrade(src)) + L = robotic ? new species.species_robotic_digi_l_leg() : new species.species_digi_l_leg() + else + L = robotic ? new species.species_robotic_l_leg() : new species.species_l_leg() if(BODY_ZONE_R_LEG) - L = new dna.species.species_r_leg() + if(species.is_digitigrade(src)) + L = robotic ? new species.species_robotic_digi_r_leg() : new species.species_digi_r_leg() + else + L = robotic ? new species.species_robotic_r_leg() : new species.species_r_leg() if(BODY_ZONE_CHEST) - L = new dna.species.species_chest() + L = robotic ? new species.species_robotic_chest() : new species.species_chest() . = L -/mob/living/carbon/monkey/newBodyPart(zone, robotic, fixed_icon) +/mob/living/carbon/monkey/new_body_part(zone, robotic, fixed_icon, datum/species/species) var/obj/item/bodypart/L switch(zone) if(BODY_ZONE_L_ARM) @@ -183,7 +191,7 @@ L.change_bodypart_status(BODYTYPE_ROBOTIC) . = L -/mob/living/carbon/alien/larva/newBodyPart(zone, robotic, fixed_icon) +/mob/living/carbon/alien/larva/new_body_part(zone, robotic, fixed_icon, datum/species/species) var/obj/item/bodypart/L switch(zone) if(BODY_ZONE_HEAD) @@ -196,7 +204,7 @@ L.change_bodypart_status(BODYTYPE_ROBOTIC) . = L -/mob/living/carbon/alien/humanoid/newBodyPart(zone, robotic, fixed_icon) +/mob/living/carbon/alien/humanoid/new_body_part(zone, robotic, fixed_icon, datum/species/species) var/obj/item/bodypart/L switch(zone) if(BODY_ZONE_L_ARM) diff --git a/code/modules/surgery/bodyparts/robot_bodyparts.dm b/code/modules/surgery/bodyparts/robot_bodyparts.dm index ecc911502fc0..79b674438098 100644 --- a/code/modules/surgery/bodyparts/robot_bodyparts.dm +++ b/code/modules/surgery/bodyparts/robot_bodyparts.dm @@ -23,7 +23,6 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC - change_exempt_flags = BP_BLOCK_CHANGE_SPECIES brute_reduction = 5 burn_reduction = 4 @@ -49,7 +48,6 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC - change_exempt_flags = BP_BLOCK_CHANGE_SPECIES brute_reduction = 5 burn_reduction = 4 @@ -75,7 +73,6 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC - change_exempt_flags = BP_BLOCK_CHANGE_SPECIES brute_reduction = 5 burn_reduction = 4 @@ -101,7 +98,6 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC - change_exempt_flags = BP_BLOCK_CHANGE_SPECIES brute_reduction = 5 burn_reduction = 4 @@ -126,7 +122,6 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC - change_exempt_flags = BP_BLOCK_CHANGE_SPECIES brute_reduction = 5 burn_reduction = 4 @@ -232,7 +227,6 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC - change_exempt_flags = BP_BLOCK_CHANGE_SPECIES brute_reduction = 5 burn_reduction = 4 @@ -355,6 +349,89 @@ burn_reduction = 0 max_damage = 20 +// Lizard Robotic (Synths) +/obj/item/bodypart/chest/robot/lizard + name = "prosthetic lizard chest" + is_dimorphic = TRUE + icon = 'icons/mob/augmentation/augments_lizard.dmi' + should_draw_greyscale = TRUE + overlay_icon_state = TRUE + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC + acceptable_bodytype = BODYTYPE_HUMANOID + +/obj/item/bodypart/head/robot/lizard + name = "prosthetic lizard head" + icon = 'icons/mob/augmentation/augments_lizard.dmi' + should_draw_greyscale = TRUE + overlay_icon_state = TRUE + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC + +/obj/item/bodypart/l_arm/robot/lizard + name = "prosthetic lizard left arm" + icon = 'icons/mob/augmentation/augments_lizard.dmi' + should_draw_greyscale = TRUE + overlay_icon_state = TRUE + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC + +/obj/item/bodypart/r_arm/robot/lizard + name = "prosthetic lizard right arm" + icon = 'icons/mob/augmentation/augments_lizard.dmi' + should_draw_greyscale = TRUE + overlay_icon_state = TRUE + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC + +/obj/item/bodypart/leg/left/robot/lizard + name = "prosthetic lizard left leg" + icon = 'icons/mob/augmentation/augments_lizard.dmi' + should_draw_greyscale = TRUE + overlay_icon_state = TRUE + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC + +/obj/item/bodypart/leg/left/robot/lizard + name = "prosthetic lizard right leg" + icon = 'icons/mob/augmentation/augments_lizard.dmi' + should_draw_greyscale = TRUE + overlay_icon_state = TRUE + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC + +// Surplus Lizard Robotic +/obj/item/bodypart/l_arm/robot/surplus/lizard + name = "surplus prosthetic lizard left arm" + icon = 'icons/mob/augmentation/augments_lizard.dmi' + should_draw_greyscale = TRUE + overlay_icon_state = TRUE + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC + +/obj/item/bodypart/r_arm/robot/surplus/lizard + name = "surplus prosthetic lizard right arm" + icon = 'icons/mob/augmentation/augments_lizard.dmi' + should_draw_greyscale = TRUE + overlay_icon_state = TRUE + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC + +/obj/item/bodypart/leg/left/robot/surplus/lizard + name = "surplus prosthetic lizard left leg" + icon = 'icons/mob/augmentation/augments_lizard.dmi' + should_draw_greyscale = TRUE + overlay_icon_state = TRUE + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC + +/obj/item/bodypart/leg/right/robot/surplus/lizard + name = "surplus prosthetic lizard right leg" + icon = 'icons/mob/augmentation/augments_lizard.dmi' + should_draw_greyscale = TRUE + overlay_icon_state = TRUE + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC + +/obj/item/bodypart/leg/left/robot/surplus/lizard/digitigrade + name = "surplus prosthetic digitigrade lizard left leg" + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_DIGITIGRADE + +/obj/item/bodypart/leg/right/robot/surplus/lizard/digitigrade + name = "surplus prosthetic digitigrade lizard right leg" + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_DIGITIGRADE + +//Kepori Robotic /obj/item/bodypart/chest/robot/kepori name = "prosthetic kepori chest" static_icon = 'icons/mob/augmentation/augments_kepori.dmi' @@ -386,6 +463,7 @@ static_icon = 'icons/mob/augmentation/augments_kepori.dmi' bodytype = BODYTYPE_KEPORI | BODYTYPE_ROBOTIC +//Surplus Kepori Robotic /obj/item/bodypart/l_arm/robot/surplus/kepori name = "surplus prosthetic kepori left arm" static_icon = 'icons/mob/augmentation/augments_kepori.dmi' @@ -406,6 +484,42 @@ static_icon = 'icons/mob/augmentation/augments_kepori.dmi' bodytype = BODYTYPE_KEPORI | BODYTYPE_ROBOTIC + +// Vox Robotic +/obj/item/bodypart/chest/robot/vox + name = "prosthetic vox chest" + is_dimorphic = TRUE + static_icon = 'icons/mob/augmentation/augments_vox.dmi' + bodytype = BODYTYPE_VOX | BODYTYPE_ROBOTIC + acceptable_bodytype = BODYTYPE_VOX + +/obj/item/bodypart/head/robot/vox + name = "prosthetic vox head" + is_dimorphic = TRUE + static_icon = 'icons/mob/augmentation/augments_vox.dmi' + bodytype = BODYTYPE_VOX | BODYTYPE_ROBOTIC + +/obj/item/bodypart/l_arm/robot/vox + name = "prosthetic vox left arm" + static_icon = 'icons/mob/augmentation/augments_vox.dmi' + bodytype = BODYTYPE_VOX | BODYTYPE_ROBOTIC + +/obj/item/bodypart/r_arm/robot/vox + name = "prosthetic vox right arm" + static_icon = 'icons/mob/augmentation/augments_vox.dmi' + bodytype = BODYTYPE_VOX | BODYTYPE_ROBOTIC + +/obj/item/bodypart/l_leg/robot/vox + name = "prosthetic vox left leg" + static_icon = 'icons/mob/augmentation/augments_vox.dmi' + bodytype = BODYTYPE_VOX | BODYTYPE_ROBOTIC + +/obj/item/bodypart/r_leg/robot/vox + name = "prosthetic vox right leg" + static_icon = 'icons/mob/augmentation/augments_vox.dmi' + bodytype = BODYTYPE_VOX | BODYTYPE_ROBOTIC + +// Surplus Vox Robotic /obj/item/bodypart/l_arm/robot/surplus/vox name = "surplus prosthetic vox left arm" static_icon = 'icons/mob/augmentation/augments_vox.dmi' diff --git a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm index 7ca16b5fea5a..e1752f0448d8 100644 --- a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm @@ -29,16 +29,12 @@ uses_mutcolor = TRUE limb_id = SPECIES_LIZARD -/obj/item/bodypart/leg/left/digitigrade +/obj/item/bodypart/leg/left/lizard/digitigrade icon = 'icons/mob/species/lizard/bodyparts.dmi' - icon_state = "digitigrade_l_leg" - uses_mutcolor = TRUE - limb_id = "digitigrade" + icon_state = "lizard_l_leg_digitigrade" bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_DIGITIGRADE -/obj/item/bodypart/leg/right/digitigrade +/obj/item/bodypart/leg/right/lizard/digitigrade icon = 'icons/mob/species/lizard/bodyparts.dmi' - icon_state = "digitigrade_r_leg" - uses_mutcolor = TRUE - limb_id = "digitigrade" + icon_state = "lizard_r_leg_digitigrade" bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_DIGITIGRADE diff --git a/code/modules/surgery/bodyparts/species_parts/vox_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/vox_bodyparts.dm index 2be9e4686cae..1437e191578f 100644 --- a/code/modules/surgery/bodyparts/species_parts/vox_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/vox_bodyparts.dm @@ -13,11 +13,6 @@ acceptable_bodytype = BODYTYPE_VOX should_draw_greyscale = FALSE -/obj/item/bodypart/chest/vox/on_life() - . = ..() - if(owner.stat != DEAD) - owner.adjust_bodytemperature(length(owner.bodyparts) * 2, 0, owner.dna.species.bodytemp_heat_damage_limit + 50) //More meat = more heat - /obj/item/bodypart/l_arm/vox static_icon = 'icons/mob/species/vox/bodyparts.dmi' limb_id = SPECIES_VOX diff --git a/code/modules/surgery/bone_repair.dm b/code/modules/surgery/bone_repair.dm index 8552b8e1a826..9f933d8f49c3 100644 --- a/code/modules/surgery/bone_repair.dm +++ b/code/modules/surgery/bone_repair.dm @@ -15,7 +15,9 @@ /datum/surgery_step/set_bone name = "set bone" time = 6.4 SECONDS - implements = list(TOOL_HEMOSTAT = 100, TOOL_CROWBAR = 25, TOOL_WRENCH = 35) + implements = list( + TOOL_HEMOSTAT = 100, + TOOL_WRENCH = 40) preop_sound = 'sound/surgery/bone1.ogg' success_sound = 'sound/surgery/bone3.ogg' diff --git a/code/modules/surgery/brain_surgery.dm b/code/modules/surgery/brain_surgery.dm index 5a37135b3e01..0b1d8610889f 100644 --- a/code/modules/surgery/brain_surgery.dm +++ b/code/modules/surgery/brain_surgery.dm @@ -14,7 +14,10 @@ /datum/surgery_step/fix_brain name = "fix brain" - implements = list(TOOL_HEMOSTAT = 85, TOOL_SCREWDRIVER = 35, /obj/item/pen = 15) //don't worry, pouring some alcohol on their open brain will get that chance to 100 + implements = list( + TOOL_HEMOSTAT = 85, + TOOL_SCREWDRIVER = 40, + /obj/item/pen = 5) //don't worry, pouring some alcohol on their open brain will get that chance to 100 //will it? i don't know. repeatable = TRUE time = 10 SECONDS //long and complicated preop_sound = 'sound/surgery/hemostat1.ogg' diff --git a/code/modules/surgery/cavity_implant.dm b/code/modules/surgery/cavity_implant.dm index 8a85f40053ca..0ad1e119e9e2 100644 --- a/code/modules/surgery/cavity_implant.dm +++ b/code/modules/surgery/cavity_implant.dm @@ -9,7 +9,8 @@ /datum/surgery_step/handle_cavity name = "implant item" accept_hand = TRUE - implements = list(/obj/item = 100) + implements = list( + /obj/item = 100) repeatable = TRUE time = 3.2 SECONDS preop_sound = 'sound/surgery/organ1.ogg' diff --git a/code/modules/surgery/core_removal.dm b/code/modules/surgery/core_removal.dm index e2117032b3da..c5bfd1108202 100644 --- a/code/modules/surgery/core_removal.dm +++ b/code/modules/surgery/core_removal.dm @@ -14,7 +14,9 @@ //extract brain /datum/surgery_step/extract_core name = "extract core" - implements = list(TOOL_HEMOSTAT = 100, TOOL_CROWBAR = 100) + implements = list( + TOOL_HEMOSTAT = 100, + TOOL_CROWBAR = 100) time = 16 /datum/surgery_step/extract_core/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) diff --git a/code/modules/surgery/coronary_bypass.dm b/code/modules/surgery/coronary_bypass.dm index 82ac1f0fccdc..4c416c31c633 100644 --- a/code/modules/surgery/coronary_bypass.dm +++ b/code/modules/surgery/coronary_bypass.dm @@ -17,12 +17,13 @@ return TRUE return FALSE - //an incision but with greater bleed, and a 90% base success chance /datum/surgery_step/incise_heart name = "incise heart" - implements = list(TOOL_SCALPEL = 90, /obj/item/melee/transforming/energy/sword = 45, /obj/item/kitchen/knife = 45, - /obj/item/shard = 25) + implements = list( + TOOL_SCALPEL = 90, + /obj/item/kitchen/knife = 40, + /obj/item/shard = 33) time = 1.6 SECONDS preop_sound = 'sound/surgery/scalpel1.ogg' success_sound = 'sound/surgery/scalpel2.ogg' @@ -41,7 +42,7 @@ "Blood pools around the incision in [H]'s heart.", "") H.bleed_rate += 10 - H.adjustBruteLoss(10) + target.apply_damage(15, BRUTE, "[target_zone]") return ..() /datum/surgery_step/incise_heart/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -52,12 +53,15 @@ "[user] screws up, causing blood to spurt out of [H]'s chest!") H.bleed_rate += 20 H.adjustOrganLoss(ORGAN_SLOT_HEART, 10) - H.adjustBruteLoss(10) + target.apply_damage(15, BRUTE, "[target_zone]") //grafts a coronary bypass onto the individual's heart, success chance is 90% base again /datum/surgery_step/coronary_bypass name = "graft coronary bypass" - implements = list(TOOL_HEMOSTAT = 90, TOOL_WIRECUTTER = 35, /obj/item/stack/packageWrap = 15, /obj/item/stack/cable_coil = 5) + implements = list( + TOOL_HEMOSTAT = 90, + TOOL_WIRECUTTER = 40, + /obj/item/stack/cable_coil = 5) time = 9 SECONDS preop_sound = 'sound/surgery/hemostat1.ogg' success_sound = 'sound/surgery/hemostat1.ogg' @@ -85,6 +89,6 @@ display_results(user, target, "You screw up in attaching the graft, and it tears off, tearing part of the heart!", "[user] screws up, causing blood to spurt out of [H]'s chest profusely!", "[user] screws up, causing blood to spurt out of [H]'s chest profusely!") - H.adjustOrganLoss(ORGAN_SLOT_HEART, 20) + H.adjustOrganLoss(ORGAN_SLOT_HEART, 30) H.bleed_rate += 30 return FALSE diff --git a/code/modules/surgery/dental_implant.dm b/code/modules/surgery/dental_implant.dm index 1bac32665005..a5645094ed2f 100644 --- a/code/modules/surgery/dental_implant.dm +++ b/code/modules/surgery/dental_implant.dm @@ -5,7 +5,8 @@ /datum/surgery_step/insert_pill name = "insert pill" - implements = list(/obj/item/reagent_containers/pill = 100) + implements = list( + /obj/item/reagent_containers/pill = 100) time = 16 experience_given = (MEDICAL_SKILL_MEDIUM*0.4) //quick to do diff --git a/code/modules/surgery/experimental_dissection.dm b/code/modules/surgery/experimental_dissection.dm index 3c9e051ee453..7cf752ddf998 100644 --- a/code/modules/surgery/experimental_dissection.dm +++ b/code/modules/surgery/experimental_dissection.dm @@ -30,7 +30,12 @@ /datum/surgery_step/dissection name = "dissection" - implements = list(/obj/item/scalpel/augment = 75, /obj/item/scalpel/advanced = 60, TOOL_SCALPEL = 45, /obj/item/kitchen/knife = 20, /obj/item/shard = 10)// special tools not only cut down time but also improve probability + implements = list( + /obj/item/scalpel/augment = 75, + /obj/item/scalpel/advanced = 60, + TOOL_SCALPEL = 45, + /obj/item/kitchen/knife = 30, + /obj/item/shard = 10)// special tools not only cut down time but also improve probability time = 125 silicons_obey_prob = TRUE repeatable = TRUE @@ -57,7 +62,7 @@ cost = (BASE_HUMAN_REWARD*24) else if(isgolem(H) || iszombie(H) || isshadow(H) || isandroid(H)) cost = (BASE_HUMAN_REWARD*20) - else if(isjellyperson(H) || ispodperson(H) || issquidperson(H) || isalien(H)) + else if(isjellyperson(H) || ispodperson(H) || isalien(H)) cost = (BASE_HUMAN_REWARD*14) else if(isskeleton(H)) cost = (BASE_HUMAN_REWARD * 0.5) diff --git a/code/modules/surgery/eye_surgery.dm b/code/modules/surgery/eye_surgery.dm index 40a1df3e2658..d7aa93146203 100644 --- a/code/modules/surgery/eye_surgery.dm +++ b/code/modules/surgery/eye_surgery.dm @@ -8,7 +8,9 @@ //fix eyes /datum/surgery_step/fix_eyes name = "fix eyes" - implements = list(TOOL_HEMOSTAT = 100, TOOL_SCREWDRIVER = 45, /obj/item/pen = 25) + implements = list( + TOOL_HEMOSTAT = 100, + TOOL_SCREWDRIVER = 40) //ow! my eyes ! time = 64 experience_given = (MEDICAL_SKILL_ORGAN_FIX*0.6) //repeatable and can be done at any damage diff --git a/code/modules/surgery/gastrectomy.dm b/code/modules/surgery/gastrectomy.dm index a6c954568597..f4bd48c4729d 100644 --- a/code/modules/surgery/gastrectomy.dm +++ b/code/modules/surgery/gastrectomy.dm @@ -22,8 +22,11 @@ //95% chance of success to be consistent with most organ-repairing surgeries. /datum/surgery_step/gastrectomy name = "remove lower duodenum" - implements = list(TOOL_SCALPEL = 95, /obj/item/melee/transforming/energy/sword = 65, /obj/item/kitchen/knife = 45, - /obj/item/shard = 35) + implements = list( + TOOL_SCALPEL = 95, + /obj/item/melee/transforming/energy/sword = 33, + /obj/item/kitchen/knife = 40, + /obj/item/shard = 10) time = 52 experience_given = (MEDICAL_SKILL_ORGAN_FIX*0.8) //for consistency across organ surgeries @@ -34,7 +37,7 @@ /datum/surgery_step/gastrectomy/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) var/mob/living/carbon/human/H = target - H.setOrganLoss(ORGAN_SLOT_STOMACH, 20) // Stomachs have a threshold for being able to even digest food, so I might tweak this number + H.setOrganLoss(ORGAN_SLOT_STOMACH, 10) // Stomachs have a threshold for being able to even digest food, so I might tweak this number display_results(user, target, "You successfully remove the damaged part of [target]'s stomach.", "[user] successfully removes the damaged part of [target]'s stomach.", "[user] successfully removes the damaged part of [target]'s stomach.") @@ -42,7 +45,7 @@ /datum/surgery_step/gastrectomy/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery) var/mob/living/carbon/human/H = target - H.adjustOrganLoss(ORGAN_SLOT_STOMACH, 15) + H.adjustOrganLoss(ORGAN_SLOT_STOMACH, 20) display_results(user, target, "You cut the wrong part of [target]'s stomach!", "[user] cuts the wrong part of [target]'s stomach!", "[user] cuts the wrong part of [target]'s stomach!") diff --git a/code/modules/surgery/healing.dm b/code/modules/surgery/healing.dm index 26da9bb46fec..956768c09aa4 100644 --- a/code/modules/surgery/healing.dm +++ b/code/modules/surgery/healing.dm @@ -25,7 +25,9 @@ /datum/surgery_step/heal name = "repair body" - implements = list(TOOL_HEMOSTAT = 100, TOOL_SCREWDRIVER = 65, /obj/item/pen = 55) + implements = list( + TOOL_HEMOSTAT = 100, + TOOL_SCREWDRIVER = 40)//something else could be added here - but I would prefer not. Hemostat is not that hard to come by and SHOULD be standard for ship equipment. repeatable = TRUE time = 2.5 SECONDS success_sound = 'sound/surgery/retractor2.ogg' @@ -172,9 +174,6 @@ missinghpbonus = 5 /***************************COMBO***************************/ -/datum/surgery/healing/combo - - /datum/surgery/healing/combo name = "Tend Wounds (Mixture, Basic)" replaced_by = /datum/surgery/healing/combo/upgraded @@ -188,7 +187,6 @@ healing_step_type = /datum/surgery_step/heal/combo/upgraded desc = "A surgical procedure that provides advanced treatment for a patient's burns and brute traumas. Heals more when the patient is severely injured." - /datum/surgery/healing/combo/upgraded/femto //no real reason to type it like this except consistency, don't worry you're not missing anything name = "Tend Wounds (Mixture, Exp.)" replaced_by = null diff --git a/code/modules/surgery/hepatectomy.dm b/code/modules/surgery/hepatectomy.dm index c55db698c67d..e612b6fa18c5 100644 --- a/code/modules/surgery/hepatectomy.dm +++ b/code/modules/surgery/hepatectomy.dm @@ -21,8 +21,11 @@ //95% chance of success, not 100 because organs are delicate /datum/surgery_step/hepatectomy name = "remove damaged liver section" - implements = list(TOOL_SCALPEL = 95, /obj/item/melee/transforming/energy/sword = 65, /obj/item/kitchen/knife = 45, - /obj/item/shard = 35) + implements = list( + TOOL_SCALPEL = 95, + /obj/item/melee/transforming/energy/sword = 33, + /obj/item/kitchen/knife = 40, + /obj/item/shard = 25) time = 52 experience_given = (MEDICAL_SKILL_ORGAN_FIX*0.8) //repeatable so not as much xp @@ -41,7 +44,7 @@ /datum/surgery_step/hepatectomy/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery) var/mob/living/carbon/human/H = target - H.adjustOrganLoss(ORGAN_SLOT_LIVER, 15) + H.adjustOrganLoss(ORGAN_SLOT_LIVER, 20) display_results(user, target, "You cut the wrong part of [target]'s liver!", "[user] cuts the wrong part of [target]'s liver!", "[user] cuts the wrong part of [target]'s liver!") diff --git a/code/modules/surgery/implant_removal.dm b/code/modules/surgery/implant_removal.dm index fc3ce760ff98..4866e8aa1541 100644 --- a/code/modules/surgery/implant_removal.dm +++ b/code/modules/surgery/implant_removal.dm @@ -8,7 +8,10 @@ //extract implant /datum/surgery_step/extract_implant name = "extract implant" - implements = list(TOOL_HEMOSTAT = 100, TOOL_CROWBAR = 65, /obj/item/kitchen/fork = 35) + implements = list( + TOOL_HEMOSTAT = 100, + TOOL_CROWBAR = 40, + /obj/item/kitchen/fork = 33) time = 6.4 SECONDS success_sound = 'sound/surgery/hemostat1.ogg' experience_given = MEDICAL_SKILL_MEDIUM diff --git a/code/modules/surgery/ipc_revive.dm b/code/modules/surgery/ipc_revive.dm index 124578c6879d..1077a147b4f1 100644 --- a/code/modules/surgery/ipc_revive.dm +++ b/code/modules/surgery/ipc_revive.dm @@ -19,9 +19,13 @@ return FALSE return isipc(target) -/datum/surgery_step/revive/ipc +/datum/surgery_step/revive/ipc //TODO: make ipcs not auto revive, to make this surgery actually do something. name = "reboot electronics" - implements = list(/obj/item/inducer = 100, /obj/item/shockpaddles = 80, /obj/item/melee/baton = 50, /obj/item/gun/energy = 30) + implements = list( + /obj/item/inducer = 100, + /obj/item/shockpaddles = 80, + /obj/item/melee/baton = 50, + /obj/item/gun/energy = 30) time = 60 /datum/surgery_step/revive/ipc/tool_check(mob/user, obj/item/tool) diff --git a/code/modules/surgery/limb_augmentation.dm b/code/modules/surgery/limb_augmentation.dm index f36eabc079a7..3348769bc172 100644 --- a/code/modules/surgery/limb_augmentation.dm +++ b/code/modules/surgery/limb_augmentation.dm @@ -6,10 +6,12 @@ /datum/surgery_step/replace_limb name = "replace limb" - implements = list(/obj/item/bodypart = 100, /obj/item/organ_storage = 100) + implements = list( + /obj/item/bodypart = 100, + /obj/item/organ_storage = 100) time = 32 experience_given = MEDICAL_SKILL_MEDIUM - var/obj/item/bodypart/L = null // L because "limb" + var/obj/item/bodypart/L = null // L because "limb" //i hate you /datum/surgery_step/replace_limb/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -30,7 +32,6 @@ else user.visible_message("[user] looks for [target]'s [parse_zone(user.zone_selected)].", "You look for [target]'s [parse_zone(user.zone_selected)]...") - //ACTUAL SURGERIES /datum/surgery/augmentation diff --git a/code/modules/surgery/lipoplasty.dm b/code/modules/surgery/lipoplasty.dm index 0b509126dbae..be7d824e0b1f 100644 --- a/code/modules/surgery/lipoplasty.dm +++ b/code/modules/surgery/lipoplasty.dm @@ -12,7 +12,10 @@ //cut fat /datum/surgery_step/cut_fat name = "cut excess fat" - implements = list(TOOL_SAW = 100, /obj/item/hatchet = 35, /obj/item/kitchen/knife/butcher = 25) + implements = list( + TOOL_SAW = 100, + /obj/item/hatchet = 40, + /obj/item/kitchen/knife/butcher = 33) time = 64 /datum/surgery_step/cut_fat/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -30,7 +33,9 @@ //remove fat /datum/surgery_step/remove_fat name = "remove loose fat" - implements = list(TOOL_RETRACTOR = 100, TOOL_SCREWDRIVER = 45, TOOL_WIRECUTTER = 35) + implements = list( + TOOL_RETRACTOR = 100, + TOOL_WIRECUTTER = 40) time = 32 experience_given = 0 //scales with fat removed diff --git a/code/modules/surgery/lobectomy.dm b/code/modules/surgery/lobectomy.dm index 03dd129406f7..09ef68f03e18 100644 --- a/code/modules/surgery/lobectomy.dm +++ b/code/modules/surgery/lobectomy.dm @@ -20,8 +20,11 @@ //lobectomy, removes the most damaged lung lobe with a 95% base success chance /datum/surgery_step/lobectomy name = "excise damaged lung node" - implements = list(TOOL_SCALPEL = 95, /obj/item/melee/transforming/energy/sword = 65, /obj/item/kitchen/knife = 45, - /obj/item/shard = 35) + implements = list( + TOOL_SCALPEL = 95, + /obj/item/melee/transforming/energy/sword = 33, + /obj/item/kitchen/knife = 40, + /obj/item/shard = 25) time = 4.2 SECONDS preop_sound = 'sound/surgery/scalpel1.ogg' success_sound = 'sound/surgery/organ1.ogg' @@ -38,7 +41,7 @@ var/mob/living/carbon/human/H = target var/obj/item/organ/lungs/L = H.getorganslot(ORGAN_SLOT_LUNGS) L.operated = TRUE - H.setOrganLoss(ORGAN_SLOT_LUNGS, 60) + H.setOrganLoss(ORGAN_SLOT_LUNGS, 25) display_results(user, target, "You successfully excise [H]'s most damaged lobe.", "Successfully removes a piece of [H]'s lungs.", "") @@ -50,6 +53,6 @@ display_results(user, target, "You screw up, failing to excise [H]'s damaged lobe!", "[user] screws up!", "[user] screws up!") - H.losebreath += 4 - H.adjustOrganLoss(ORGAN_SLOT_LUNGS, 10) + H.losebreath += 10 + H.adjustOrganLoss(ORGAN_SLOT_LUNGS, 20) return FALSE diff --git a/code/modules/surgery/mechanic_steps.dm b/code/modules/surgery/mechanic_steps.dm index 2656dfe405ba..f1fd128c2d9e 100644 --- a/code/modules/surgery/mechanic_steps.dm +++ b/code/modules/surgery/mechanic_steps.dm @@ -5,7 +5,7 @@ TOOL_SCREWDRIVER = 100, TOOL_SCALPEL = 75, // med borgs could try to unscrew shell with scalpel /obj/item/kitchen/knife = 50, - /obj/item = 10) // 10% success with any sharp item. + /obj/item = 10) time = 2.4 SECONDS preop_sound = 'sound/items/screwdriver.ogg' success_sound = 'sound/items/screwdriver2.ogg' @@ -16,11 +16,11 @@ "[user] begins to unscrew the shell of [target]'s [parse_zone(target_zone)].") /datum/surgery_step/mechanic_open/tool_check(mob/user, obj/item/tool) - if(istype(tool)) - preop_sound = tool.usesound - else if(!tool.get_sharpness()) //if its not a tool, then we check if its sharp + if(implement_type == /obj/item && !tool.get_sharpness()) return FALSE - . = ..() + if(tool.usesound) + preop_sound = tool.usesound + return ..() //close shell /datum/surgery_step/mechanic_close @@ -29,7 +29,7 @@ TOOL_SCREWDRIVER = 100, TOOL_SCALPEL = 75, /obj/item/kitchen/knife = 50, - /obj/item = 10) // 10% success with any sharp item. + /obj/item = 10) time = 2.4 SECONDS preop_sound = 'sound/items/screwdriver.ogg' success_sound = 'sound/items/screwdriver2.ogg' @@ -40,11 +40,11 @@ "[user] begins to screw the shell of [target]'s [parse_zone(target_zone)].") /datum/surgery_step/mechanic_close/tool_check(mob/user, obj/item/tool) - if(istype(tool)) - preop_sound = tool.usesound - else if(!tool.get_sharpness()) //if its not a tool, then we check if its sharp + if(implement_type == /obj/item && !tool.get_sharpness()) return FALSE - . = ..() + if(tool.usesound) + preop_sound = tool.usesound + return ..() //prepare electronics /datum/surgery_step/prepare_electronics diff --git a/code/modules/surgery/mechanical.dm b/code/modules/surgery/mechanical.dm index b439ea567397..fe7b583d2c36 100644 --- a/code/modules/surgery/mechanical.dm +++ b/code/modules/surgery/mechanical.dm @@ -27,7 +27,13 @@ /datum/surgery_step/heal/mechanic name = "repair components" - implements = list(TOOL_WELDER = 100, TOOL_CAUTERY = 60, /obj/item/melee/transforming/energy = 40, /obj/item/gun/energy/laser = 20, TOOL_WIRECUTTER = 100, TOOL_HEMOSTAT = 60, TOOL_RETRACTOR = 60) + implements = list(TOOL_WELDER = 100, + TOOL_WIRECUTTER = 100, + TOOL_CAUTERY = 60, + TOOL_HEMOSTAT = 60, + TOOL_RETRACTOR = 60, + /obj/item/melee/transforming/energy = 40, + /obj/item/gun/energy/laser = 20) time = 2 SECONDS missinghpbonus = 10 diff --git a/code/modules/surgery/organ_manipulation.dm b/code/modules/surgery/organ_manipulation.dm index 47b180997789..2242c4c242ea 100644 --- a/code/modules/surgery/organ_manipulation.dm +++ b/code/modules/surgery/organ_manipulation.dm @@ -68,7 +68,9 @@ time = 6.4 SECONDS name = "manipulate organs" repeatable = TRUE - implements = list(/obj/item/organ = 100, /obj/item/organ_storage = 100, /obj/item/mmi = 100) + implements = list(/obj/item/organ = 100, + /obj/item/organ_storage = 100, + /obj/item/mmi = 100) preop_sound = 'sound/surgery/organ2.ogg' success_sound = 'sound/surgery/organ1.ogg' var/implements_extract = list(TOOL_HEMOSTAT = 100, TOOL_CROWBAR = 55, /obj/item/kitchen/fork = 35) @@ -108,8 +110,6 @@ "[user] begins to insert [tool] into [target]'s [parse_zone(target_zone)].", "[user] begins to insert something into [target]'s [parse_zone(target_zone)].") - //WS Begin - IPCs - if(istype(tool, /obj/item/mmi))//this whole thing is only used for robotic surgery in organ_mani_robotic.dm :* current_type = "posibrain" preop_sound = 'sound/items/tape_flip.ogg' diff --git a/code/modules/surgery/organic_steps.dm b/code/modules/surgery/organic_steps.dm index 686f75fdfef6..5167bb3a4517 100644 --- a/code/modules/surgery/organic_steps.dm +++ b/code/modules/surgery/organic_steps.dm @@ -2,8 +2,12 @@ //make incision /datum/surgery_step/incise name = "make incision" - implements = list(TOOL_SCALPEL = 100, /obj/item/melee/transforming/energy/sword = 75, /obj/item/kitchen/knife = 65, - /obj/item/shard = 45, /obj/item = 30) // 30% success with any sharp item. + implements = list( + TOOL_SCALPEL = 100, + /obj/item/melee/transforming/energy/sword = 40, + /obj/item/kitchen/knife = 40, + /obj/item/shard = 25, + /obj/item = 15) //any sharp item time = 1.6 SECONDS preop_sound = 'sound/surgery/scalpel1.ogg' success_sound = 'sound/surgery/scalpel2.ogg' @@ -29,6 +33,14 @@ H.bleed_rate += 3 return ..() +/datum/surgery_step/incise/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + if(ishuman(target)) + var/mob/living/carbon/human/H = target + display_results(user, target, "You screw up, cutting too deeply!", + "[user] screws up, causing blood to spurt out of [H]'s [parse_zone(target_zone)]", + "[user] screws up, causing blood to spurt out of [H]'s [parse_zone(target_zone)]") + target.apply_damage(15, BRUTE, "[target_zone]") + /datum/surgery_step/incise/nobleed //silly friendly! experience_given = 1 //safer so not as much XP @@ -44,7 +56,11 @@ //clamp bleeders /datum/surgery_step/clamp_bleeders name = "clamp bleeders" - implements = list(TOOL_HEMOSTAT = 100, TOOL_WIRECUTTER = 60, /obj/item/stack/packageWrap = 35, /obj/item/stack/cable_coil = 15) + implements = list( + TOOL_HEMOSTAT = 100, + TOOL_WIRECUTTER = 40, + /obj/item/stack/packageWrap = 20, //that would seriously hurt + /obj/item/stack/cable_coil = 20) time = 2.4 SECONDS preop_sound = 'sound/surgery/hemostat1.ogg' @@ -61,10 +77,21 @@ H.bleed_rate = max((H.bleed_rate - 3), 0) return ..() +/datum/surgery_step/clamp_bleeders/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + if(ishuman(target)) + var/mob/living/carbon/human/H = target + display_results(user, target, "You screw up, letting go of a vein!", + "[user] screws up, causing blood to spurt out of [H]'s [parse_zone(target_zone)]", + "[user] screws up, causing blood to spurt out of [H]'s [parse_zone(target_zone)]") + target.apply_damage(15, BRUTE, "[target_zone]") + //retract skin /datum/surgery_step/retract_skin name = "retract skin" - implements = list(TOOL_RETRACTOR = 100, TOOL_SCREWDRIVER = 45, TOOL_WIRECUTTER = 35, /obj/item/stack/rods = 35) + implements = list( + TOOL_RETRACTOR = 100, + TOOL_SCREWDRIVER = 40, + /obj/item/stack/rods = 10) time = 2.4 SECONDS preop_sound = 'sound/surgery/retractor1.ogg' success_sound = 'sound/surgery/retractor2.ogg' @@ -74,13 +101,22 @@ "[user] begins to retract the skin in [target]'s [parse_zone(target_zone)].", "[user] begins to retract the skin in [target]'s [parse_zone(target_zone)].") - +/datum/surgery_step/retract_skin/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + if(ishuman(target)) + var/mob/living/carbon/human/H = target + display_results(user, target, "You screw up, losing grip on the tissue!", + "[user] screws up, causing blood to spurt out of [H]'s [parse_zone(target_zone)]", + "[user] screws up, causing blood to spurt out of [H]'s [parse_zone(target_zone)]") + target.apply_damage(10, BRUTE, "[target_zone]") //close incision /datum/surgery_step/close name = "mend incision" - implements = list(TOOL_CAUTERY = 100, /obj/item/gun/energy/laser = 90, TOOL_WELDER = 70, - /obj/item = 30) // 30% success with any hot item. + implements = list( + TOOL_CAUTERY = 100, + TOOL_WELDER = 40, + /obj/item/gun/energy/laser = 60, + /obj/item = 30) // 30% success with any hot item. //this is fine, and decently reasonable time = 2.4 SECONDS preop_sound = 'sound/surgery/cautery1.ogg' success_sound = 'sound/surgery/cautery2.ogg' @@ -98,19 +134,22 @@ /datum/surgery_step/close/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results) if(locate(/datum/surgery_step/saw) in surgery.steps) - target.heal_bodypart_damage(45,0) + target.heal_bodypart_damage(15,0) if (ishuman(target)) var/mob/living/carbon/human/H = target H.bleed_rate = max((H.bleed_rate - 3), 0) return ..() - - //saw bone /datum/surgery_step/saw name = "saw bone" - implements = list(TOOL_SAW = 100,/obj/item/melee/arm_blade = 75, - /obj/item/fireaxe = 50, /obj/item/hatchet = 35, /obj/item/kitchen/knife/butcher = 25, /obj/item = 20) //20% success (sort of) with any sharp item with a force>=10 + implements = list( + TOOL_SAW = 100, + /obj/item/fireaxe = 50, + /obj/item/melee/arm_blade = 40, + /obj/item/hatchet = 40, + /obj/item/kitchen/knife/butcher = 33, + /obj/item = 10) //10% success (sort of) with any sharp item with a force>=10 time = 5.4 SECONDS preop_sound = list( /obj/item/circular_saw = 'sound/surgery/saw.ogg', @@ -133,16 +172,30 @@ return TRUE /datum/surgery_step/saw/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results) - target.apply_damage(50, BRUTE, "[target_zone]") + target.apply_damage(20, BRUTE, "[target_zone]") display_results(user, target, "You saw [target]'s [parse_zone(target_zone)] open.", "[user] saws [target]'s [parse_zone(target_zone)] open!", "[user] saws [target]'s [parse_zone(target_zone)] open!") return ..() +/datum/surgery_step/saw/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + if(ishuman(target)) + var/mob/living/carbon/human/H = target + var/obj/item/bodypart/affected = target.get_bodypart(check_zone(target_zone)) + display_results(user, target, "You screw up, breaking the bone!", + "[user] screws up, causing blood to spurt out of [H]'s [parse_zone(target_zone)]", + "[user] screws up, causing blood to spurt out of [H]'s [parse_zone(target_zone)]") + affected.break_bone() + target.apply_damage(25, BRUTE, "[target_zone]") + //drill bone /datum/surgery_step/drill name = "drill bone" - implements = list(TOOL_DRILL = 100, /obj/item/screwdriver/power = 80, /obj/item/pickaxe/drill = 60, TOOL_SCREWDRIVER = 25, /obj/item/kitchen/spoon = 20) + implements = list( + TOOL_DRILL = 100, + /obj/item/screwdriver/power = 45, + TOOL_SCREWDRIVER = 33, + /obj/item/kitchen/spoon = 4.13) //i made this as awful as possible. time = 30 /datum/surgery_step/drill/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index 56dc170d7700..0bd9ed46d1a9 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -140,11 +140,14 @@ /obj/item/organ/eyes/robotic name = "robotic eyes" - icon_state = "cybernetic_eyeballs" + icon_state = "robotic_eyes" desc = "A very basic set of optical sensors with no extra vision modes or functions." status = ORGAN_ROBOTIC organ_flags = ORGAN_SYNTHETIC +/obj/item/organ/eyes/robotic/lizard + eye_icon_state = "eyes_synth" + /obj/item/organ/eyes/robotic/emp_act(severity) . = ..() if(!owner || . & EMP_PROTECT_SELF) @@ -157,6 +160,7 @@ /obj/item/organ/eyes/robotic/xray name = "\improper X-ray eyes" desc = "These cybernetic eyes will give you X-ray vision. Blinking is futile." + icon_state = "robotic_eyes_u2" eye_color = "000" see_in_dark = 8 sight_flags = SEE_MOBS | SEE_OBJS | SEE_TURFS @@ -164,6 +168,7 @@ /obj/item/organ/eyes/robotic/thermals name = "thermal eyes" desc = "These cybernetic eye implants will give you thermal vision. Vertical slit pupil included." + icon_state = "robotic_eyes_u" eye_color = "FC0" sight_flags = SEE_MOBS lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm index 2c7a1a508605..26d16ae23e10 100644 --- a/code/modules/surgery/organs/heart.dm +++ b/code/modules/surgery/organs/heart.dm @@ -6,7 +6,7 @@ slot = ORGAN_SLOT_HEART healing_factor = STANDARD_ORGAN_HEALING - decay_factor = 3.5 * STANDARD_ORGAN_DECAY //designed to fail a little under 4 minutes after death + decay_factor = STANDARD_VITAL_ORGAN_DECAY low_threshold_passed = "Prickles of pain appear then die out from within your chest..." high_threshold_passed = "Something inside your chest hurts, and the pain isn't subsiding. You notice yourself breathing far faster than before." diff --git a/code/modules/surgery/organs/liver.dm b/code/modules/surgery/organs/liver.dm index 243d5b6134c0..d8e10731da30 100644 --- a/code/modules/surgery/organs/liver.dm +++ b/code/modules/surgery/organs/liver.dm @@ -11,7 +11,7 @@ maxHealth = STANDARD_ORGAN_THRESHOLD healing_factor = STANDARD_ORGAN_HEALING - decay_factor = STANDARD_ORGAN_DECAY + decay_factor = STANDARD_VITAL_ORGAN_DECAY food_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/iron = 5) diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 637b48283c18..264574c476e4 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -28,15 +28,12 @@ var/useable = TRUE var/list/food_reagents = list(/datum/reagent/consumable/nutriment = 5) - - //WS Begin - IPCS var/vital = 0 //Was this organ implanted/inserted/etc, if true will not be removed during species change. var/external = FALSE //whether to call Remove() when qdeling the organ. var/remove_on_qdel = TRUE var/synthetic = FALSE // To distinguish between organic and synthetic organs - //WS End /obj/item/organ/Initialize() . = ..() @@ -192,31 +189,28 @@ return 0 /mob/living/carbon/regenerate_organs() - if(dna?.species) - dna.species.regenerate_organs(src) - return - - else - if(!getorganslot(ORGAN_SLOT_LUNGS)) - var/obj/item/organ/lungs/L = new() - L.Insert(src) + if(!getorganslot(ORGAN_SLOT_LUNGS)) + var/obj/item/organ/lungs/L = new() + L.Insert(src) - if(!getorganslot(ORGAN_SLOT_HEART)) - var/obj/item/organ/heart/H = new() - H.Insert(src) + if(!getorganslot(ORGAN_SLOT_HEART)) + var/obj/item/organ/heart/H = new() + H.Insert(src) - if(!getorganslot(ORGAN_SLOT_TONGUE)) - var/obj/item/organ/tongue/T = new() - T.Insert(src) + if(!getorganslot(ORGAN_SLOT_TONGUE)) + var/obj/item/organ/tongue/T = new() + T.Insert(src) - if(!getorganslot(ORGAN_SLOT_EYES)) - var/obj/item/organ/eyes/E = new() - E.Insert(src) + if(!getorganslot(ORGAN_SLOT_EYES)) + var/obj/item/organ/eyes/E = new() + E.Insert(src) - if(!getorganslot(ORGAN_SLOT_EARS)) - var/obj/item/organ/ears/ears = new() - ears.Insert(src) + if(!getorganslot(ORGAN_SLOT_EARS)) + var/obj/item/organ/ears/ears = new() + ears.Insert(src) +/mob/living/carbon/human/regenerate_organs() + dna.species.regenerate_organs(src, robotic = fbp) /** get_availability * returns whether the species should innately have this organ. diff --git a/code/modules/surgery/organs/tails.dm b/code/modules/surgery/organs/tails.dm index 1f5544b8c2de..f587a26d8404 100644 --- a/code/modules/surgery/organs/tails.dm +++ b/code/modules/surgery/organs/tails.dm @@ -43,6 +43,7 @@ /obj/item/organ/tail/lizard name = "\improper Sarathi tail" desc = "A severed Sarathi's tail. Can't they regrow these...?" + icon_state = "severedlizard" color = "#116611" tail_type = "Smooth" var/spines = "None" @@ -112,6 +113,7 @@ /obj/item/organ/tail/fox name = "fox tail" desc = "A severed fox tail. Sad." + icon_state = "severedfox" tail_type = "Fox" /obj/item/organ/tail/fox/Insert(mob/living/carbon/human/H, special = 0, drop_if_replaced = TRUE) diff --git a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm index 4d502eac9f90..77fae8c0bb87 100644 --- a/code/modules/surgery/organs/tongue.dm +++ b/code/modules/surgery/organs/tongue.dm @@ -309,25 +309,6 @@ new_message += message[i] speech_args[SPEECH_MESSAGE] = new_message -/obj/item/organ/tongue/squid - name = "squid tongue" - desc = "A smaller tentacle used to synthesize speech." - icon_state = "tonguesquid" - var/static/list/languages_possible_squid = typecacheof(list( - /datum/language/rylethian, - /datum/language/common, - /datum/language/xenocommon, - /datum/language/aphasia, - /datum/language/narsie, - /datum/language/monkey, - /datum/language/shadowtongue, - /datum/language/ratvar - )) - -/obj/item/organ/tongue/squid/Initialize(mapload) - . = ..() - languages_possible = languages_possible_squid - /obj/item/organ/tongue/ethereal name = "electric discharger" desc = "A sophisticated ethereal organ, capable of synthesising speech via electrical discharge." diff --git a/code/modules/surgery/plastic_surgery.dm b/code/modules/surgery/plastic_surgery.dm index 0e1ddd396153..9c87a5b5a93f 100644 --- a/code/modules/surgery/plastic_surgery.dm +++ b/code/modules/surgery/plastic_surgery.dm @@ -6,7 +6,10 @@ //reshape_face /datum/surgery_step/reshape_face name = "reshape face" - implements = list(TOOL_SCALPEL = 100, /obj/item/kitchen/knife = 50, TOOL_WIRECUTTER = 35) + implements = list( + TOOL_SCALPEL = 100, + /obj/item/kitchen/knife = 40, + TOOL_WIRECUTTER = 33) time = 64 experience_given = MEDICAL_SKILL_MEDIUM diff --git a/code/modules/surgery/prosthetic_replacement.dm b/code/modules/surgery/prosthetic_replacement.dm index 1e41fad619ee..8b3d4aa1218e 100644 --- a/code/modules/surgery/prosthetic_replacement.dm +++ b/code/modules/surgery/prosthetic_replacement.dm @@ -13,11 +13,13 @@ if(!C.get_bodypart(user.zone_selected)) //can only start if limb is missing return 1 - - /datum/surgery_step/add_prosthetic name = "add prosthetic" - implements = list(/obj/item/bodypart = 100, /obj/item/organ_storage = 100, /obj/item/chainsaw = 100, /obj/item/melee/synthetic_arm_blade = 100) + implements = list( + /obj/item/bodypart = 100, + /obj/item/organ_storage = 100, + /obj/item/chainsaw = 100, + /obj/item/melee/synthetic_arm_blade = 100) time = 32 experience_given = MEDICAL_SKILL_ORGAN_FIX //won't get full XP if rejected var/organ_rejection_dam = 0 @@ -86,7 +88,7 @@ "[user] successfully replaces [target]'s [parse_zone(target_zone)]!") return else - var/obj/item/bodypart/L = target.newBodyPart(target_zone, FALSE, FALSE) + var/obj/item/bodypart/L = target.new_body_part(target_zone, FALSE, FALSE) L.is_pseudopart = TRUE if(!L.attach_limb(target)) display_results(user, target, "You fail in attaching [target]'s [parse_zone(target_zone)]! Their body has rejected [L]!", diff --git a/code/modules/surgery/remove_embedded_object.dm b/code/modules/surgery/remove_embedded_object.dm index c4e923b4b996..ac23b468044e 100644 --- a/code/modules/surgery/remove_embedded_object.dm +++ b/code/modules/surgery/remove_embedded_object.dm @@ -3,7 +3,6 @@ steps = list(/datum/surgery_step/incise, /datum/surgery_step/remove_object) possible_locs = list(BODY_ZONE_R_ARM,BODY_ZONE_L_ARM,BODY_ZONE_R_LEG,BODY_ZONE_L_LEG,BODY_ZONE_CHEST,BODY_ZONE_HEAD) - /datum/surgery_step/remove_object name = "remove embedded objects" time = 32 @@ -11,7 +10,6 @@ experience_given = MEDICAL_SKILL_MEDIUM var/obj/item/bodypart/L = null - /datum/surgery_step/remove_object/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) L = surgery.operated_bodypart if(L) @@ -22,7 +20,6 @@ else user.visible_message("[user] looks for [target]'s [parse_zone(user.zone_selected)].", "You look for [target]'s [parse_zone(user.zone_selected)]...") - /datum/surgery_step/remove_object/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) if(L) if(ishuman(target)) diff --git a/code/modules/surgery/revival.dm b/code/modules/surgery/revival.dm index 400adab16daf..86b3e389e0b5 100644 --- a/code/modules/surgery/revival.dm +++ b/code/modules/surgery/revival.dm @@ -27,12 +27,15 @@ /datum/surgery_step/revive name = "shock brain" - implements = list(/obj/item/shockpaddles = 100, /obj/item/melee/baton = 75, /obj/item/gun/energy = 60) - time = 12 SECONDS + implements = list( + /obj/item/shockpaddles = 100, //this is useful for reviving simepeople. + /obj/item/melee/baton = 40, //i hate this a lot + /obj/item/gun/energy = 30, //should be tasers only + /obj/item/inducer = 30) //why not + time = 3 SECONDS success_sound = 'sound/magic/lightningbolt.ogg' failure_sound = 'sound/machines/defib_zap.ogg' repeatable = TRUE - time = 120 experience_given = MEDICAL_SKILL_ADVANCED /datum/surgery_step/revive/tool_check(mob/user, obj/item/tool) @@ -87,5 +90,5 @@ "[user] send a powerful shock to [target]'s brain with [tool], but [target.p_they()] doesn't react.", "[user] send a powerful shock to [target]'s brain with [tool], but [target.p_they()] doesn't react.") playsound(get_turf(target), 'sound/magic/lightningbolt.ogg', 50, TRUE) - target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 15, 180) + target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 20, 180) return FALSE diff --git a/code/modules/surgery/stomachpump.dm b/code/modules/surgery/stomachpump.dm index 63bdfedff9d4..c6cddae3a689 100644 --- a/code/modules/surgery/stomachpump.dm +++ b/code/modules/surgery/stomachpump.dm @@ -58,4 +58,4 @@ "[user] screws up, brusing [H]'s chest!", "[user] screws up!") H.adjustOrganLoss(ORGAN_SLOT_STOMACH, 5) - H.adjustBruteLoss(5) + target.apply_damage(15, BRUTE, "[target_zone]") diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index ca94ad3e77b7..4f98fe339c87 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -37,7 +37,6 @@ operated_bodypart = null return ..() - /datum/surgery/proc/can_start(mob/user, mob/living/patient) //FALSE to not show in list . = TRUE if(replaced_by == /datum/surgery) @@ -162,7 +161,6 @@ // var/list/bodyparts (/mob/living/carbon/human) is the LIMBS of a Mob. //Surgical procedures are initiated by attempt_initiate_surgery(), which is called by sharp objects, such as scalpels. - //TODO //specific steps for some surgeries (fluff text) //more interesting failure options @@ -171,7 +169,6 @@ //add a probability modifier for the state of the surgeon- health, twitching, etc. blindness, god forbid. //helper for converting a zone_sel.selecting to body part (for damage) - //RESOLVED ISSUES //"Todo" jobs that have been completed //combine hands/feet into the arms - Hands/feet were removed - RR //surgeries (not steps) that can be initiated on any body part (corresponding with damage locations) - Call this one done, see possible_locs var - c0 diff --git a/code/modules/tgui/external.dm b/code/modules/tgui/external.dm index 46a4317fea40..88b0933ecbeb 100644 --- a/code/modules/tgui/external.dm +++ b/code/modules/tgui/external.dm @@ -42,7 +42,7 @@ * * required user mob The mob interacting with the UI. * - * return list Statuic Data to be sent to the UI. + * return list Static Data to be sent to the UI. */ /datum/proc/ui_static_data(mob/user) return list() diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index 517a3b0e40bd..f44687b85ad6 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -21,6 +21,7 @@ #define TEST_FOCUS(test_path) ##test_path { focus = TRUE; } #include "anchored_mobs.dm" +#include "autowiki.dm" #include "bespoke_id.dm" #include "binary_insert.dm" #include "combat.dm" diff --git a/code/modules/unit_tests/autowiki.dm b/code/modules/unit_tests/autowiki.dm new file mode 100644 index 000000000000..65ec2e228dd2 --- /dev/null +++ b/code/modules/unit_tests/autowiki.dm @@ -0,0 +1,35 @@ +/// Tests that all autowikis generate something without runtiming +/datum/unit_test/autowiki + +/datum/unit_test/autowiki/Run() + TEST_ASSERT(istext(generate_autowiki_output()), "generate_autowiki_output() did not finish successfully!") + +/// Test that `include_template` produces reasonable results +/datum/unit_test/autowiki_include_template + +/datum/unit_test/autowiki_include_template/Run() + var/datum/autowiki/autowiki_api = new + + TEST_ASSERT_EQUAL( \ + autowiki_api.include_template("Template"), \ + "{{Template}}", \ + "Basic template did not format correctly" \ + ) + + TEST_ASSERT_EQUAL( \ + autowiki_api.include_template("Template", list("name" = "Mothblocks")), \ + "{{Template|name=Mothblocks}}", \ + "Template with basic arguments did not format correctly" \ + ) + + TEST_ASSERT_EQUAL( \ + autowiki_api.include_template("Template", list("name" = autowiki_api.escape_value("P|peline"))), \ + "{{Template|name=P{{!}}peline}}", \ + "Template with escaped arguments did not format correctly" \ + ) + + TEST_ASSERT_EQUAL( \ + autowiki_api.include_template("Template", list("food" = list("fruit", "candy"))), \ + "{{Template|food1=fruit|food2=candy}}", \ + "Template with array arguments did not format correctly" \ + ) diff --git a/code/modules/unit_tests/plantgrowth_tests.dm b/code/modules/unit_tests/plantgrowth_tests.dm index 6b40236860ef..15c56a12ec1d 100644 --- a/code/modules/unit_tests/plantgrowth_tests.dm +++ b/code/modules/unit_tests/plantgrowth_tests.dm @@ -8,7 +8,6 @@ states |= icon_states('icons/obj/hydroponics/growing_flowers.dmi') states |= icon_states('icons/obj/hydroponics/growing_mushrooms.dmi') states |= icon_states('icons/obj/hydroponics/growing_vegetables.dmi') - states |= icon_states('goon/icons/obj/hydroponics.dmi') var/list/paths = subtypesof(/obj/item/seeds) - /obj/item/seeds - typesof(/obj/item/seeds/sample) - /obj/item/seeds/lavaland for(var/seedpath in paths) diff --git a/config/config.txt b/config/config.txt index 8e536bb8ccd2..89dd495066eb 100644 --- a/config/config.txt +++ b/config/config.txt @@ -69,19 +69,20 @@ ENABLE_LOCALHOST_RANK #USE_ACCOUNT_AGE_FOR_JOBS ## Unhash this to track player playtime in the database. Requires database to be enabled. +## Playtime requirements for ship spawning and job selection is ignored unless this is enabled. #USE_EXP_TRACKING -## Unhash this to enable playtime requirements for head jobs. -#USE_EXP_RESTRICTIONS_HEADS -## Unhash this to override head jobs' playtime requirements with this number of hours. -## Leave this commented out to use the values defined in the job datums. Values in the datums are stored as minutes. -#USE_EXP_RESTRICTIONS_HEADS_HOURS 3 -## Unhash this to change head jobs' playtime requirements so that they're based on department playtime, rather than crew playtime. -#USE_EXP_RESTRICTIONS_HEADS_DEPARTMENT -## Unhash this to enable playtime requirements for certain non-head jobs, like Engineer and Scientist. -#USE_EXP_RESTRICTIONS_OTHER -## Allows admins to bypass job playtime requirements. +## Allows admins to bypass job and ship playtime requirements. #USE_EXP_RESTRICTIONS_ADMIN_BYPASS +## The "base" minimum number of minutes as living to spawn a ship from the join menu. +## Ships may have differing true values depending on the template's coefficient, defined in JSON. +## The ship spawn playtime restriction is the ONLY restriction that applies for ship spawning. +SHIP_SPAWN_BASE_EXP_MIN 600 +## The "base" minimum number of minutes as living to spawn into an officer job. +## Ships may have differing true values depending on the template's coefficient, defined in JSON. +## Once the ship has been spawned, this restriction will apply for any officer job being joined on a ship. +OFFICER_JOIN_BASE_EXP_MIN 300 + ## log OOC channel LOG_OOC @@ -308,9 +309,9 @@ CHECK_RANDOMIZER ## Uncomment this to forbid admins from possessing the singularity. #FORBID_SINGULO_POSSESSION -## Uncomment to show a popup 'reply to' window to every non-admin that receives an adminPM. -## The intention is to make adminPMs more visible. (although I fnd popups annoying so this defaults to off) -#POPUP_ADMIN_PM +## Uncomment to give admins the ability to send a maptext popup to players. +## Only fires when an admin requests it, not every ahelp. +POPUP_ADMIN_PM ## Uncomment to allow special 'Easter-egg' events on special holidays such as seasonal holidays and stuff like 'Talk Like a Pirate Day' :3 YAARRR ALLOW_HOLIDAYS @@ -570,8 +571,12 @@ AUTO_PROFILE ## THIS CONFIG DOES NOT OVERRIDE THE NORESPAWN FLAG RESPAWN_TIMER 600 -## Custom shuttle spam prevention. Changine these numbers allows you to change the maxsize and amount of custom shuttles. +## If the number of controlled non-subshuttle ships in existence is greater than this number, +## the shuttle creator and roundstart menu will stop new ships from being created. +## If this is undesired, just set this to an arbitrarily high value. MAX_SHUTTLE_COUNT 20 + +## Limits the maximum size in tiles of a custom shuttle. MAX_SHUTTLE_SIZE 300 ### ALL SETTINGS FOR SSmetrics ### diff --git a/goon/LICENSE.md b/goon/LICENSE.md deleted file mode 100644 index 5bda1d84f9b7..000000000000 --- a/goon/LICENSE.md +++ /dev/null @@ -1,4 +0,0 @@ -This work is licensed under the Creative Commons -Attribution-NonCommercial-ShareAlike 3.0 United States License. To view a copy -of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/us/ or -send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. diff --git a/goon/README.md b/goon/README.md deleted file mode 100644 index cae34de90841..000000000000 --- a/goon/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Goon-ported-assets - -All files excluding this one you're reading right now have been most likely, taken from [goonstation's 2016 release](https://github.com/goonstation/goonstation-2016), unless stated otherwise. -It is very likely that there are modifications to be compatible or on par with our code, however. These changes are licensed under the same license as the other goon files. - -## License - -See LICENSE.md diff --git a/goon/icons/obj/hydroponics.dmi b/goon/icons/obj/hydroponics.dmi deleted file mode 100644 index 5fb5d4ed8dda..000000000000 Binary files a/goon/icons/obj/hydroponics.dmi and /dev/null differ diff --git a/goon/icons/obj/power.dmi b/goon/icons/obj/power.dmi deleted file mode 100644 index 8c1aff125755..000000000000 Binary files a/goon/icons/obj/power.dmi and /dev/null differ diff --git a/goon/icons/obj/surgery.dmi b/goon/icons/obj/surgery.dmi deleted file mode 100644 index c836fc16b152..000000000000 Binary files a/goon/icons/obj/surgery.dmi and /dev/null differ diff --git a/goon/sound/machinery/FireAlarm.ogg b/goon/sound/machinery/FireAlarm.ogg deleted file mode 100644 index f1a672326551..000000000000 Binary files a/goon/sound/machinery/FireAlarm.ogg and /dev/null differ diff --git a/goon/sound/machinery/printer_dotmatrix.ogg b/goon/sound/machinery/printer_dotmatrix.ogg deleted file mode 100644 index 272a2dab226d..000000000000 Binary files a/goon/sound/machinery/printer_dotmatrix.ogg and /dev/null differ diff --git a/html/changelogs/AutoChangeLog-pr-1724.yml b/html/changelogs/AutoChangeLog-pr-1724.yml deleted file mode 100644 index c7f573f2a53d..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1724.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Latentish -delete-after: true -changes: - - rscadd: Adds a mimir (sleepy) - - code_imp: adds some supporting code for the mimir (sleepy) diff --git a/html/changelogs/AutoChangeLog-pr-1771.yml b/html/changelogs/AutoChangeLog-pr-1771.yml deleted file mode 100644 index 6de321e2682f..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1771.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: spockye -delete-after: true -changes: - - rscadd: adds the pirate_cutter - - rscadd: adds the scar suit - - rscadd: misc frontiersmen jobs diff --git a/html/changelogs/AutoChangeLog-pr-1825.yml b/html/changelogs/AutoChangeLog-pr-1825.yml deleted file mode 100644 index 5c8c471fa9c0..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1825.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: meemofcourse -delete-after: true -changes: - - tweak: Reworks the Twinkleshine diff --git a/html/changelogs/AutoChangeLog-pr-1834.yml b/html/changelogs/AutoChangeLog-pr-1834.yml deleted file mode 100644 index 3f66cf405702..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1834.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: retlaw34 -delete-after: true -changes: - - rscadd: Changes the airlock sounds diff --git a/html/changelogs/AutoChangeLog-pr-1839.yml b/html/changelogs/AutoChangeLog-pr-1839.yml deleted file mode 100644 index 8a71bb91f4c4..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1839.yml +++ /dev/null @@ -1,9 +0,0 @@ -author: Any%, Ryester, Azlan, Quantum M -delete-after: true -changes: - - rscadd: New wall sprites - - rscadd: New airlock sprite - - rscadd: New a lot of fucking sprites, see https://github.com/shiptest-ss13/Shiptest/pull/1838 - for more information - - rscadd: Updates almost every map in the game to fit any% walls - - rscadd: Dwayne has been updated diff --git a/html/changelogs/AutoChangeLog-pr-1853.yml b/html/changelogs/AutoChangeLog-pr-1853.yml deleted file mode 100644 index 8b4d17c66ae5..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1853.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Bjarl -delete-after: true -changes: - - tweak: The Kansatsu-Class is now available for spawning. diff --git a/html/changelogs/AutoChangeLog-pr-1882.yml b/html/changelogs/AutoChangeLog-pr-1882.yml deleted file mode 100644 index 9c333a6e2ecb..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1882.yml +++ /dev/null @@ -1,10 +0,0 @@ -author: thgvr -delete-after: true -changes: - - rscadd: Elzu now bleed, but do not have Liquid Electricity reagent as blood. (will - be changed in the future) - - rscadd: IPCs now "bleed" by leaking coolant - - rscadd: Sarathi now have teal-colored blood. - - rscadd: Blood will now dry over time - - rscadd: New bloody footprint sprites from bay - - refactor: Refactors a lot of blood code diff --git a/html/changelogs/AutoChangeLog-pr-1891.yml b/html/changelogs/AutoChangeLog-pr-1891.yml deleted file mode 100644 index 33336132527a..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1891.yml +++ /dev/null @@ -1,10 +0,0 @@ -author: thgvr -delete-after: true -changes: - - balance: Goliaths, Ice whelps, and Whitesands basilisks should be easier to kill - now. Try AP ammo. - - balance: Crushers no longer drop from legion bodies, only old crushers. - - balance: Tweaked how crushers distribute their damage. - - balance: Survivor suits no longer make you run at hyperspeed - - balance: Laser weaponry should be a little more effective versus most common fauna. - - bugfix: Added a sound to help show when a whitesands basilisk absorbs a bullet diff --git a/html/changelogs/AutoChangeLog-pr-1900.yml b/html/changelogs/AutoChangeLog-pr-1900.yml deleted file mode 100644 index eba4271e4981..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1900.yml +++ /dev/null @@ -1,12 +0,0 @@ -author: BogCreature -delete-after: true -changes: - - rscadd: TG fishing minigame - - rscadd: Aquariums - - rscadd: The ability to fish on beach, lava, and jungle planets - - rscadd: New outpost missions - - rscadd: New fishing related outpost crates - - rscdel: Removed flying fish from beach planets and made them into actual fish - - tweak: Increased the amount of outpost missions that generate at once from 15 - to 20 - - refactor: Refactored beam code to use signals diff --git a/html/changelogs/AutoChangeLog-pr-1908.yml b/html/changelogs/AutoChangeLog-pr-1908.yml deleted file mode 100644 index 39e26773279d..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1908.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: BarteG44 -delete-after: true -changes: - - rscadd: Added carp spawner - - tweak: Reworked the fishing hut ruin diff --git a/html/changelogs/AutoChangeLog-pr-1914.yml b/html/changelogs/AutoChangeLog-pr-1914.yml deleted file mode 100644 index cf58feb3fee4..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1914.yml +++ /dev/null @@ -1,9 +0,0 @@ -author: FalloutFalcon -delete-after: true -changes: - - rscadd: Trickwines - - rscadd: Breakaway flasks! - - rscadd: Basic Trickwine brewing equipment to the SRM glaive - - imageadd: Sprites for breakaway flasks along with trick wine icons for them! - - code_imp: Breakaway_flask_icon_state = null used for the same purpose as the glass - and shot glass versions diff --git a/html/changelogs/AutoChangeLog-pr-1920.yml b/html/changelogs/AutoChangeLog-pr-1920.yml deleted file mode 100644 index 3162e4c879c5..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1920.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: spockye -delete-after: true -changes: - - rscadd: Adds the Beluga class transport diff --git a/html/changelogs/AutoChangeLog-pr-1922.yml b/html/changelogs/AutoChangeLog-pr-1922.yml deleted file mode 100644 index ae804244d3bb..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1922.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Apogee-dev -delete-after: true -changes: - - rscdel: Disabled the Cricket diff --git a/html/changelogs/AutoChangeLog-pr-1930.yml b/html/changelogs/AutoChangeLog-pr-1930.yml deleted file mode 100644 index cb17a25431c6..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1930.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Bjarl -delete-after: true -changes: - - tweak: tendrils no longer emit a GPS signal. Go out and explore! diff --git a/html/changelogs/AutoChangeLog-pr-1933.yml b/html/changelogs/AutoChangeLog-pr-1933.yml deleted file mode 100644 index c89aae25c6f2..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1933.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: thgvr -delete-after: true -changes: - - imageadd: Most of the old hardsuits have been resprited diff --git a/html/changelogs/AutoChangeLog-pr-1937.yml b/html/changelogs/AutoChangeLog-pr-1937.yml deleted file mode 100644 index e4ef1029b39b..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1937.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: thgvr -delete-after: true -changes: - - rscadd: Examining and other chat outputs now display in blocks to make them easier - to see diff --git a/html/changelogs/AutoChangeLog-pr-1940.yml b/html/changelogs/AutoChangeLog-pr-1940.yml deleted file mode 100644 index 4ef75fcb500d..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1940.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: Bjarl -delete-after: true -changes: - - rscadd: Sand Planet hermits now have randomized inventories. And Hair. Sometimes. - - rscadd: Sand Planet hermits can now drop different races - - rscadd: legions will now drop a variety of species - - balance: drop rates for legions have been changed in a few spots. - - bugfix: hivelord.dm no longer sears my eyes out. diff --git a/html/changelogs/AutoChangeLog-pr-1942.yml b/html/changelogs/AutoChangeLog-pr-1942.yml deleted file mode 100644 index a069547bef10..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1942.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Bjarl -delete-after: true -changes: - - rscadd: Tendrils now spawn from a list of creatures, instead of mono-creature, - with different levels of danger having a chance to spawn. - - balance: Demonic Portal Loot has been rebalanced. diff --git a/html/changelogs/AutoChangeLog-pr-1943.yml b/html/changelogs/AutoChangeLog-pr-1943.yml deleted file mode 100644 index 75ef37be9b3f..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1943.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: AverageUser67 -delete-after: true -changes: - - bugfix: eluzose no longer have ethereal meat, or any kind of meat at all diff --git a/html/changelogs/AutoChangeLog-pr-1944.yml b/html/changelogs/AutoChangeLog-pr-1944.yml deleted file mode 100644 index 3638b11b0aa5..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1944.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: MarkSuckerberg -delete-after: true -changes: - - admin: Adds ship purchasing bans. diff --git a/html/changelogs/AutoChangeLog-pr-1945.yml b/html/changelogs/AutoChangeLog-pr-1945.yml deleted file mode 100644 index 04f93989e833..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1945.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Bjarl -delete-after: true -changes: - - rscadd: Waste planets now generate with biomes, please report any weirdness. diff --git a/html/changelogs/AutoChangeLog-pr-1946.yml b/html/changelogs/AutoChangeLog-pr-1946.yml deleted file mode 100644 index 38296cbff82e..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1946.yml +++ /dev/null @@ -1,9 +0,0 @@ -author: phoaly -delete-after: true -changes: - - rscadd: Added shipturfs - - rscdel: Old planetary turf subtypes - - bugfix: Fixed water turfs runtiming when hit with a bat - - bugfix: Replaced tiles on the Glaive and Shepherd - - tweak: Swapped the montagnes ID - - tweak: Nerfed Glaive mining gear diff --git a/html/changelogs/AutoChangeLog-pr-1947.yml b/html/changelogs/AutoChangeLog-pr-1947.yml deleted file mode 100644 index 78410b544d25..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1947.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Merlin1230 -delete-after: true -changes: - - bugfix: Fixed the Colonial Minuteman General Coat's worn sprite, so it actually - shows up diff --git a/html/changelogs/AutoChangeLog-pr-1952.yml b/html/changelogs/AutoChangeLog-pr-1952.yml deleted file mode 100644 index bdfbd0c6fa06..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1952.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: spockye -delete-after: true -changes: - - bugfix: fixed some things on the Cepheus class diff --git a/html/changelogs/AutoChangeLog-pr-1953.yml b/html/changelogs/AutoChangeLog-pr-1953.yml deleted file mode 100644 index ada9616e8929..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1953.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: Hibou48888 -delete-after: true -changes: - - code_imp: multitools now change the alt+click behavior of an ORM - - tweak: ORMs can now have their input and output tiles onto the same tile, or two - tiles at a right angle, as well as the old behavior of having them on opposite - sides of the machine diff --git a/html/changelogs/AutoChangeLog-pr-1957.yml b/html/changelogs/AutoChangeLog-pr-1957.yml deleted file mode 100644 index 89a16e1219d7..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1957.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Zevotech -delete-after: true -changes: - - rscadd: The energy halberd, a previously unfinished weapon. Comes in 5 colors - and a hacked rainbow version. - - bugfix: Rainbow energy weapon sprites now actually follow rainbow order diff --git a/html/changelogs/AutoChangeLog-pr-1958.yml b/html/changelogs/AutoChangeLog-pr-1958.yml deleted file mode 100644 index 829fca8c118d..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1958.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Apogee-dev -delete-after: true -changes: - - balance: Fixes RnD balance diff --git a/html/changelogs/AutoChangeLog-pr-1959.yml b/html/changelogs/AutoChangeLog-pr-1959.yml deleted file mode 100644 index abe4d88aa5d7..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1959.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: AverageUser67 -delete-after: true -changes: - - balance: you can actually recycle syndicate walls now diff --git a/html/changelogs/AutoChangeLog-pr-1961.yml b/html/changelogs/AutoChangeLog-pr-1961.yml deleted file mode 100644 index 50f5fc3ac8de..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1961.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Bjarl -delete-after: true -changes: - - rscadd: Chickens will now infrequently spawn on jungle planets diff --git a/html/changelogs/AutoChangeLog-pr-1962.yml b/html/changelogs/AutoChangeLog-pr-1962.yml deleted file mode 100644 index 92ea44060f21..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1962.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: mystery3525 -delete-after: true -changes: - - tweak: added more admin-relevant features to the Shuttle Manipulator - - bugfix: removed repeat in the Shuttle Manipulator diff --git a/html/changelogs/AutoChangeLog-pr-1963.yml b/html/changelogs/AutoChangeLog-pr-1963.yml deleted file mode 100644 index f23e0d6716a4..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1963.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: mystery3525 -delete-after: true -changes: - - tweak: moved the skipper's pipes diff --git a/html/changelogs/AutoChangeLog-pr-1964.yml b/html/changelogs/AutoChangeLog-pr-1964.yml deleted file mode 100644 index d77d862d4ed7..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1964.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: BarteG44 -delete-after: true -changes: - - bugfix: fixed belts not appearing on player sprites diff --git a/html/changelogs/AutoChangeLog-pr-1965.yml b/html/changelogs/AutoChangeLog-pr-1965.yml deleted file mode 100644 index 6f1c04f982fb..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1965.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: mystery3525 -delete-after: true -changes: - - rscadd: Gave engineering cyborgs their own shuttle manipulation blueprints diff --git a/html/changelogs/AutoChangeLog-pr-1968.yml b/html/changelogs/AutoChangeLog-pr-1968.yml deleted file mode 100644 index 3cbab69be7cd..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1968.yml +++ /dev/null @@ -1,9 +0,0 @@ -author: PositiveEntropy, MarkSuckerberg, TetraZeta, PiperDoots -delete-after: true -changes: - - rscadd: The start of new SolGov! Expect a new and improved SolGov to now roam - the frontier! - - rscdel: Removes many old jobs and content related to Old Solgov. - - rscdel: Fully deprecates the Cricket-Class. - - rscdel: Fully deprecates the Liberty-Class. - - code_imp: Adds the worn_y_offset variable, making offsetting hats much easier. diff --git a/html/changelogs/AutoChangeLog-pr-1969.yml b/html/changelogs/AutoChangeLog-pr-1969.yml deleted file mode 100644 index bf3cc178666e..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1969.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: meemofcourse -delete-after: true -changes: - - rscadd: Added observer_start landmarks to all ships diff --git a/html/changelogs/AutoChangeLog-pr-1970.yml b/html/changelogs/AutoChangeLog-pr-1970.yml deleted file mode 100644 index a540452328eb..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1970.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: dragomagol -delete-after: true -changes: - - bugfix: alien tools have working icon states diff --git a/html/changelogs/AutoChangeLog-pr-1973.yml b/html/changelogs/AutoChangeLog-pr-1973.yml deleted file mode 100644 index 8dd082e99ab3..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1973.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Apogee-dev -delete-after: true -changes: - - rscadd: Added the Inteq SsG-04 marksman rifle - - tweak: Improved IRMG gunsprites diff --git a/html/changelogs/AutoChangeLog-pr-1974.yml b/html/changelogs/AutoChangeLog-pr-1974.yml deleted file mode 100644 index 52ab06168e14..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1974.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Apogee-dev -delete-after: true -changes: - - rscdel: Removed the Lamia-class wizard ship diff --git a/html/changelogs/AutoChangeLog-pr-1975.yml b/html/changelogs/AutoChangeLog-pr-1975.yml deleted file mode 100644 index 11746e92f143..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1975.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Bokkiewokkie -delete-after: true -changes: - - admin: Renaming ships is now recorded in the admin log diff --git a/html/changelogs/AutoChangeLog-pr-1976.yml b/html/changelogs/AutoChangeLog-pr-1976.yml deleted file mode 100644 index c44a9946e0b5..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1976.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: spockye -delete-after: true -changes: - - bugfix: fixed small jungle trees spawning with false icon states diff --git a/html/changelogs/AutoChangeLog-pr-1978.yml b/html/changelogs/AutoChangeLog-pr-1978.yml deleted file mode 100644 index 4b5061db6ad1..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1978.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: PositiveEntropy, PiperDoots, TripleZeta -delete-after: true -changes: - - imageadd: New SolGov jobs now exist, as well as respective equipment for them! - - imageadd: The SolGov Seal and Flag have been added and remade! - - code_imp: A new IFF flag has been added for SolGov, making those turrets able - to target non-SolGov aligned people! - - rscdel: Removes even more old SolGov content. Good riddance. diff --git a/html/changelogs/AutoChangeLog-pr-1979.yml b/html/changelogs/AutoChangeLog-pr-1979.yml deleted file mode 100644 index f6c8159cf603..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1979.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Bjarl -delete-after: true -changes: - - rscdel: The tide has lost R&D, its medical gear, and the RCD/RPD diff --git a/html/changelogs/AutoChangeLog-pr-1980.yml b/html/changelogs/AutoChangeLog-pr-1980.yml deleted file mode 100644 index 5a7e0e6b3c0e..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1980.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: spockye -delete-after: true -changes: - - rscdel: Removed seed vendor restock from the mimir class diff --git a/html/changelogs/AutoChangeLog-pr-1983.yml b/html/changelogs/AutoChangeLog-pr-1983.yml deleted file mode 100644 index b1043646962f..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1983.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: goober3 -delete-after: true -changes: - - bugfix: Plasteel stairs have regained their shade. diff --git a/html/changelogs/AutoChangeLog-pr-1986.yml b/html/changelogs/AutoChangeLog-pr-1986.yml deleted file mode 100644 index 52e01bebe97b..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1986.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Latentish -delete-after: true -changes: - - tweak: disables the Mimir class diff --git a/html/changelogs/AutoChangeLog-pr-1987.yml b/html/changelogs/AutoChangeLog-pr-1987.yml deleted file mode 100644 index 29d55c10d5ea..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1987.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: thgvr -delete-after: true -changes: - - rscdel: PDAs, Modcomps, AIs, and pAIs no longer have a crew manifest option. diff --git a/html/changelogs/AutoChangeLog-pr-1988.yml b/html/changelogs/AutoChangeLog-pr-1988.yml deleted file mode 100644 index b2da2ff58f67..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1988.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: thgvr -delete-after: true -changes: - - balance: Cryo sleep will now make you nauseous and hungry when you wake up. diff --git a/html/changelogs/AutoChangeLog-pr-1992.yml b/html/changelogs/AutoChangeLog-pr-1992.yml deleted file mode 100644 index fb8edc602b17..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1992.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Bjarl -delete-after: true -changes: - - tweak: The MOTD has been updated diff --git a/html/changelogs/AutoChangeLog-pr-1993.yml b/html/changelogs/AutoChangeLog-pr-1993.yml deleted file mode 100644 index 9ec1f6c71b6a..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1993.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Hibou48888 -delete-after: true -changes: - - tweak: reduced Kilo crew count from 8 to 5, removed Foreman diff --git a/html/changelogs/AutoChangeLog-pr-1994.yml b/html/changelogs/AutoChangeLog-pr-1994.yml deleted file mode 100644 index 5062d8436d65..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1994.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: PositiveEntropy, PiperDoots -delete-after: true -changes: - - imageadd: Resprites the SolGov letter opener! - - imageadd: Adds Solarian Sabres! - - imageadd: Adds SolGov and TerraGov folders! - - imageadd: New floor decals for SolGov have been added! diff --git a/html/changelogs/AutoChangeLog-pr-1995.yml b/html/changelogs/AutoChangeLog-pr-1995.yml deleted file mode 100644 index 40c6d9ba9778..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1995.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: SirConway -delete-after: true -changes: - - bugfix: changed the RIG heat suit to use its own helmet instead of the prototype's diff --git a/html/changelogs/AutoChangeLog-pr-1999.yml b/html/changelogs/AutoChangeLog-pr-1999.yml deleted file mode 100644 index 723fa0f33533..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1999.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Ebin-Halcyon -delete-after: true -changes: - - imageadd: IRMG clothing has been resprited with a cleaner color palette. - - rscadd: an IRMG spacesuit and an alternative drop pouch webbing sprite. currently - not in game but will be down the line. diff --git a/html/changelogs/AutoChangeLog-pr-2000.yml b/html/changelogs/AutoChangeLog-pr-2000.yml deleted file mode 100644 index 308a5faec601..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2000.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Stiel0248, Positive entropy -delete-after: true -changes: - - imageadd: Resprites the flyswatter diff --git a/html/changelogs/AutoChangeLog-pr-2002.yml b/html/changelogs/AutoChangeLog-pr-2002.yml deleted file mode 100644 index ddd193d8ec8f..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2002.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: thgvr -delete-after: true -changes: - - spellcheck: Fixed some grammar inconsistencies with Elzuosa/Elzuose diff --git a/html/changelogs/AutoChangeLog-pr-2004.yml b/html/changelogs/AutoChangeLog-pr-2004.yml deleted file mode 100644 index 387bb6dfa40d..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2004.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: PigeonVerde#8826 -delete-after: true -changes: - - rscadd: Ports mothplushies from Beestation - - rscadd: Ports flushedplush from Beestation diff --git a/html/changelogs/AutoChangeLog-pr-2005.yml b/html/changelogs/AutoChangeLog-pr-2005.yml deleted file mode 100644 index ec9693959489..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2005.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: spockye -delete-after: true -changes: - - rscadd: Ports the BLT from TG diff --git a/html/changelogs/AutoChangeLog-pr-2006.yml b/html/changelogs/AutoChangeLog-pr-2006.yml deleted file mode 100644 index a29f13ac4738..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2006.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: spockye -delete-after: true -changes: - - rscadd: Ports updated food container sprites from TG diff --git a/html/changelogs/AutoChangeLog-pr-2007.yml b/html/changelogs/AutoChangeLog-pr-2007.yml deleted file mode 100644 index 19fa590b5331..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2007.yml +++ /dev/null @@ -1,15 +0,0 @@ -author: BarteG44 -delete-after: true -changes: - - rscadd: Added Pizza cutters - - rscadd: Added black and purple office chairs - - tweak: tweaked how racks stack items - - tweak: renames armbands from departments to their colors and adds them to clothes - vendors - - tweak: made utility belts able to hold decal painters and etc. - - tweak: adds a little more variety to the chem table sprite - - tweak: makes the decal painter's decals more resistant to cleaning - - bugfix: fixed being unable to make and color modern railings - - bugfix: fixed up some tiles on the box and li tieguai class - - bugfix: fixes a typo on the box class engine shutter and reworks it's bathroom - - bugfix: fixes the justice helmet at last. rejoice! diff --git a/html/changelogs/AutoChangeLog-pr-2008.yml b/html/changelogs/AutoChangeLog-pr-2008.yml deleted file mode 100644 index f31e9abce7f2..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2008.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Bjarl -delete-after: true -changes: - - tweak: The BYO has been made Aspawn diff --git a/html/changelogs/AutoChangeLog-pr-2012.yml b/html/changelogs/AutoChangeLog-pr-2012.yml deleted file mode 100644 index f2b5c113f683..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2012.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: thgvr -delete-after: true -changes: - - balance: Engine prechargers now start with a 5kw charge leve. diff --git a/html/changelogs/AutoChangeLog-pr-2015.yml b/html/changelogs/AutoChangeLog-pr-2015.yml deleted file mode 100644 index 097517c30a61..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2015.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Apogee-dev -delete-after: true -changes: - - rscdel: Removed the HighTide and TrunkTide - - rscdel: deprecated the Tide diff --git a/html/changelogs/AutoChangeLog-pr-2016.yml b/html/changelogs/AutoChangeLog-pr-2016.yml deleted file mode 100644 index 46baa2f65180..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2016.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: stiel#0248 -delete-after: true -changes: - - rscadd: Added seaweed / seaweedsheets / seaweed seeds - - rscadd: Added freegrowing seaweed patches (only in beach planet waters) - - rscadd: Added new sushi dishes (vegetariansushiroll/spicysushiroll/nigirisushi/fishi) - - rscadd: Added new misc dishes (onigiri/eggrolls) diff --git a/html/changelogs/AutoChangeLog-pr-2017.yml b/html/changelogs/AutoChangeLog-pr-2017.yml deleted file mode 100644 index 159c6d1fe4e5..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2017.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: PigeonVerde#8826 -delete-after: true -changes: - - rscadd: Added double beds diff --git a/html/changelogs/AutoChangeLog-pr-2019.yml b/html/changelogs/AutoChangeLog-pr-2019.yml deleted file mode 100644 index ff17a48221c4..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2019.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: thgvr -delete-after: true -changes: - - rscadd: Attack animations are now functional diff --git a/html/changelogs/AutoChangeLog-pr-2020.yml b/html/changelogs/AutoChangeLog-pr-2020.yml deleted file mode 100644 index ca5ac92748f4..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2020.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: thgvr -delete-after: true -changes: - - rscadd: Sarathi accents speaking Common are now a little more thick. diff --git a/html/changelogs/AutoChangeLog-pr-2021.yml b/html/changelogs/AutoChangeLog-pr-2021.yml deleted file mode 100644 index 0fd0aec4ac69..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2021.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: thgvr -delete-after: true -changes: - - rscadd: Being on harm intent will cause your character to face your mouse. diff --git a/html/changelogs/AutoChangeLog-pr-2023.yml b/html/changelogs/AutoChangeLog-pr-2023.yml deleted file mode 100644 index e6d76bcf7031..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2023.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Fulgro -delete-after: true -changes: - - rscdel: booty borg code - - rscdel: booty borg sprites diff --git a/html/changelogs/AutoChangeLog-pr-2024.yml b/html/changelogs/AutoChangeLog-pr-2024.yml deleted file mode 100644 index 001130dc156d..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2024.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: NithaTheTired -delete-after: true -changes: - - rscadd: Allows pixel shifted players to not be pushed around depending on direction. diff --git a/html/changelogs/AutoChangeLog-pr-2027.yml b/html/changelogs/AutoChangeLog-pr-2027.yml deleted file mode 100644 index 0eefc5ae0403..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2027.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Bjarl -delete-after: true -changes: - - rscdel: Radios no longer tell you the job of people using them diff --git a/html/changelogs/AutoChangeLog-pr-2030.yml b/html/changelogs/AutoChangeLog-pr-2030.yml deleted file mode 100644 index 92223e4d3a3d..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2030.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Apogee-dev -delete-after: true -changes: - - rscadd: Added a Master-at-Arms to the Colossus - - tweak: Redesigned the Colossus's armory diff --git a/html/changelogs/AutoChangeLog-pr-2031.yml b/html/changelogs/AutoChangeLog-pr-2031.yml deleted file mode 100644 index adfb100648cc..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2031.yml +++ /dev/null @@ -1,10 +0,0 @@ -author: PositiveEntropy -delete-after: true -changes: - - imageadd: SolGov stamps are now a thing! Use them to give your documentation some - Solarian approval! - - rscadd: You can now put halberds on your back slot! - - bugfix: Adjusted some outfit code further, making it all fully functional *and* - compliant! - - balance: The SolGov vacsuit now has a more environmental protection focus and - the SolGov hardsuit had its radiation protection toned down. diff --git a/html/changelogs/AutoChangeLog-pr-2032.yml b/html/changelogs/AutoChangeLog-pr-2032.yml deleted file mode 100644 index 3a0ea8b9cc9c..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2032.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Apogee-dev -delete-after: true -changes: - - tweak: Updated Talos with new assets, adjusted engine and job slots diff --git a/html/changelogs/AutoChangeLog-pr-2035.yml b/html/changelogs/AutoChangeLog-pr-2035.yml deleted file mode 100644 index c6c65791522a..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2035.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Nitha -delete-after: true -changes: - - rscadd: Cleaning now has an effect and sound. diff --git a/html/changelogs/AutoChangeLog-pr-2037.yml b/html/changelogs/AutoChangeLog-pr-2037.yml deleted file mode 100644 index d17af4ef3bf0..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2037.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: NithaTheTired -delete-after: true -changes: - - rscadd: you can now buckle to things while on adjacent tiles - - bugfix: fixed a bug where you could climb the table you are standing on diff --git a/html/changelogs/AutoChangeLog-pr-2040.yml b/html/changelogs/AutoChangeLog-pr-2040.yml deleted file mode 100644 index 38602893a9d1..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2040.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: BarteG44 -delete-after: true -changes: - - tweak: tweaked the modern railing sprite diff --git a/html/changelogs/AutoChangeLog-pr-2041.yml b/html/changelogs/AutoChangeLog-pr-2041.yml deleted file mode 100644 index 667f52cf2dd8..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2041.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: BarteG44 -delete-after: true -changes: - - bugfix: fixed decal painter's decals not getting colored diff --git a/html/changelogs/AutoChangeLog-pr-2043.yml b/html/changelogs/AutoChangeLog-pr-2043.yml deleted file mode 100644 index 32fce16d848c..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2043.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Bjarl -delete-after: true -changes: - - rscadd: More Ship Names diff --git a/html/changelogs/AutoChangeLog-pr-2044.yml b/html/changelogs/AutoChangeLog-pr-2044.yml deleted file mode 100644 index 038f3de4d39f..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2044.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Bjarl -delete-after: true -changes: - - rscdel: away mission templates diff --git a/html/changelogs/AutoChangeLog-pr-2045.yml b/html/changelogs/AutoChangeLog-pr-2045.yml deleted file mode 100644 index 53b594a44017..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2045.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: Zevotech -delete-after: true -changes: - - bugfix: Syndicate Battle Dome (provinggrounds.dmm) should now have a functional - SMES and airlocks/blast doors. - - bugfix: Syndicate Battle Dome (provinggrounds.dmm) no longer has ~20 black box - recorders and now only has one. diff --git a/html/changelogs/AutoChangeLog-pr-2048.yml b/html/changelogs/AutoChangeLog-pr-2048.yml deleted file mode 100644 index d6fc381461b4..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2048.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: thgvr -delete-after: true -changes: - - bugfix: Sarathi and Elzu tails/bits wont be eaten by suits anymore diff --git a/html/changelogs/AutoChangeLog-pr-2051.yml b/html/changelogs/AutoChangeLog-pr-2051.yml deleted file mode 100644 index ed1b5b6d1a5d..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2051.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: Bjarl -delete-after: true -changes: - - code_imp: solgov sabre belts are now a subtype of sabre belts - - imageadd: sabre sprites from tg, originally done by eris, touched up by imaginos, - redone by viro, and then ported here by me. - - imageadd: sabre belt inhands, done by InGorer for /tg/ station diff --git a/html/changelogs/AutoChangeLog-pr-2054.yml b/html/changelogs/AutoChangeLog-pr-2054.yml deleted file mode 100644 index 2c143d7944be..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2054.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: PositiveEntropy -delete-after: true -changes: - - rscdel: Removes several unused floor types, as well as completely annihilating - the "monofloor" and "dirty" floor types, and the "edge" decal type. - - imageadd: Redoes the floors using the TileTest tileset! diff --git a/html/changelogs/AutoChangeLog-pr-2055.yml b/html/changelogs/AutoChangeLog-pr-2055.yml deleted file mode 100644 index c9fdaca14a79..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2055.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: axelzonvolt -delete-after: true -changes: - - tweak: rewrote the config.jsons for the meta, boyardee and box-class ships to - enforce proper headset pathing instead of resorting to default path, which is - NT apparently? diff --git a/html/changelogs/AutoChangeLog-pr-2057.yml b/html/changelogs/AutoChangeLog-pr-2057.yml deleted file mode 100644 index ed5b1af2b1b5..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2057.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: retlaw34 -delete-after: true -changes: - - rscadd: New hydroponic tray sprites diff --git a/html/changelogs/AutoChangeLog-pr-2058.yml b/html/changelogs/AutoChangeLog-pr-2058.yml deleted file mode 100644 index d1e09f39af41..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2058.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: retlaw34 -delete-after: true -changes: - - rscadd: Adds 2 new posters - - bugfix: Some posters were fixed and tweaked. diff --git a/html/changelogs/AutoChangeLog-pr-2063.yml b/html/changelogs/AutoChangeLog-pr-2063.yml deleted file mode 100644 index 2f4acfbd74fa..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2063.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Bjarl -delete-after: true -changes: - - rscdel: Everything Deepcore Mining diff --git a/html/changelogs/AutoChangeLog-pr-2064.yml b/html/changelogs/AutoChangeLog-pr-2064.yml deleted file mode 100644 index 2cb3831ebdb4..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2064.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Orchidthederg -delete-after: true -changes: - - tweak: Replaced Bar Tables in all maps where present diff --git a/html/changelogs/AutoChangeLog-pr-2065.yml b/html/changelogs/AutoChangeLog-pr-2065.yml deleted file mode 100644 index 4ef729320546..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2065.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Nitha -delete-after: true -changes: - - tweak: Various cleanbot improvements. diff --git a/html/changelogs/AutoChangeLog-pr-2078.yml b/html/changelogs/AutoChangeLog-pr-2078.yml deleted file mode 100644 index d7904b0c4ba8..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2078.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Apogee-dev -delete-after: true -changes: - - rscdel: Removed the Solar-class diff --git a/html/changelogs/archive/2023-06.yml b/html/changelogs/archive/2023-06.yml new file mode 100644 index 000000000000..55aec1f5ef95 --- /dev/null +++ b/html/changelogs/archive/2023-06.yml @@ -0,0 +1,271 @@ +2023-06-22: + Any%, Ryester, Azlan, Quantum M: + - rscadd: New wall sprites + - rscadd: New airlock sprite + - rscadd: New a lot of fucking sprites, see https://github.com/shiptest-ss13/Shiptest/pull/1838 + for more information + - rscadd: Updates almost every map in the game to fit any% walls + - rscadd: Dwayne has been updated + Apogee-dev: + - rscdel: Disabled the Cricket + - tweak: Updated Talos with new assets, adjusted engine and job slots + - rscadd: Added a Master-at-Arms to the Colossus + - tweak: Redesigned the Colossus's armory + - rscadd: Added the Inteq SsG-04 marksman rifle + - tweak: Improved IRMG gunsprites + - rscdel: Removed the Lamia-class wizard ship + - rscdel: Removed the Solar-class + - rscdel: Removed the HighTide and TrunkTide + - rscdel: deprecated the Tide + - balance: Fixes RnD balance + - rscdel: Disabled research nodes for nanites + AverageUser67: + - balance: you can actually recycle syndicate walls now + - bugfix: eluzose no longer have ethereal meat, or any kind of meat at all + BarteG44: + - rscadd: Added carp spawner + - tweak: Reworked the fishing hut ruin + - tweak: tweaked the modern railing sprite + - rscadd: Added Pizza cutters + - rscadd: Added black and purple office chairs + - tweak: tweaked how racks stack items + - tweak: renames armbands from departments to their colors and adds them to clothes + vendors + - tweak: made utility belts able to hold decal painters and etc. + - tweak: adds a little more variety to the chem table sprite + - tweak: makes the decal painter's decals more resistant to cleaning + - bugfix: fixed being unable to make and color modern railings + - bugfix: fixed up some tiles on the box and li tieguai class + - bugfix: fixes a typo on the box class engine shutter and reworks it's bathroom + - bugfix: fixes the justice helmet at last. rejoice! + - bugfix: fixed belts not appearing on player sprites + - bugfix: fixed decal painter's decals not getting colored + Bjarl: + - tweak: The MOTD has been updated + - balance: Cryopods now apply a range of effects to you when you wake up. + - tweak: The Kansatsu-Class is now available for spawning. + - rscdel: The tide has lost R&D, its medical gear, and the RCD/RPD + - tweak: The BYO has been made Aspawn + - rscadd: Chickens will now infrequently spawn on jungle planets + - rscdel: Radios no longer tell you the job of people using them + - code_imp: solgov sabre belts are now a subtype of sabre belts + - imageadd: sabre sprites from tg, originally done by eris, touched up by imaginos, + redone by viro, and then ported here by me. + - imageadd: sabre belt inhands, done by InGorer for /tg/ station + - tweak: tendrils no longer emit a GPS signal. Go out and explore! + - rscadd: Sand Planet hermits now have randomized inventories. And Hair. Sometimes. + - rscadd: Sand Planet hermits can now drop different races + - rscadd: legions will now drop a variety of species + - balance: drop rates for legions have been changed in a few spots. + - bugfix: hivelord.dm no longer sears my eyes out. + - rscdel: away mission templates + - rscadd: Tendrils now spawn from a list of creatures, instead of mono-creature, + with different levels of danger having a chance to spawn. + - balance: Demonic Portal Loot has been rebalanced. + - rscadd: More Ship Names + - rscdel: Everything Deepcore Mining + - rscadd: Waste planets now generate with biomes, please report any weirdness. + BogCreature: + - rscadd: TG fishing minigame + - rscadd: Aquariums + - rscadd: The ability to fish on beach, lava, and jungle planets + - rscadd: New outpost missions + - rscadd: New fishing related outpost crates + - rscdel: Removed flying fish from beach planets and made them into actual fish + - tweak: Increased the amount of outpost missions that generate at once from 15 + to 20 + - refactor: Refactored beam code to use signals + Bokkiewokkie: + - admin: Renaming ships is now recorded in the admin log + Ebin-Halcyon: + - imageadd: IRMG clothing has been resprited with a cleaner color palette. + - rscadd: an IRMG spacesuit and an alternative drop pouch webbing sprite. currently + not in game but will be down the line. + FalloutFalcon: + - rscadd: Trickwines + - rscadd: Breakaway flasks! + - rscadd: Basic Trickwine brewing equipment to the SRM glaive + - imageadd: Sprites for breakaway flasks along with trick wine icons for them! + - code_imp: Breakaway_flask_icon_state = null used for the same purpose as the glass + and shot glass versions + Fulgro: + - rscdel: booty borg code + - rscdel: booty borg sprites + Hibou48888: + - tweak: reduced Kilo crew count from 8 to 5, removed Foreman + - code_imp: multitools now change the alt+click behavior of an ORM + - tweak: ORMs can now have their input and output tiles onto the same tile, or two + tiles at a right angle, as well as the old behavior of having them on opposite + sides of the machine + Latentish: + - rscadd: Adds a mimir (sleepy) + - code_imp: adds some supporting code for the mimir (sleepy) + - tweak: disables the Mimir class + MarkSuckerberg: + - admin: Adds ship purchasing bans. + - bugfix: Ships can no longer burn while docked to something. + Merlin1230: + - bugfix: Fixed the Colonial Minuteman General Coat's worn sprite, so it actually + shows up + Nitha: + - rscadd: Cleaning now has an effect and sound. + - tweak: Various cleanbot improvements. + NithaTheTired: + - rscadd: you can now buckle to things while on adjacent tiles + - bugfix: fixed a bug where you could climb the table you are standing on + - rscadd: Allows pixel shifted players to not be pushed around depending on direction. + Orchidthederg: + - tweak: Replaced Bar Tables in all maps where present + PigeonVerde#8826: + - rscadd: Added double beds + - rscadd: Ports mothplushies from Beestation + - rscadd: Ports flushedplush from Beestation + PositiveEntropy: + - imageadd: SolGov stamps are now a thing! Use them to give your documentation some + Solarian approval! + - rscadd: You can now put halberds on your back slot! + - bugfix: Adjusted some outfit code further, making it all fully functional *and* + compliant! + - balance: The SolGov vacsuit now has a more environmental protection focus and + the SolGov hardsuit had its radiation protection toned down. + - rscdel: Removes several unused floor types, as well as completely annihilating + the "monofloor" and "dirty" floor types, and the "edge" decal type. + - imageadd: Redoes the floors using the TileTest tileset! + PositiveEntropy, MarkSuckerberg, TetraZeta, PiperDoots: + - rscadd: The start of new SolGov! Expect a new and improved SolGov to now roam + the frontier! + - rscdel: Removes many old jobs and content related to Old Solgov. + - rscdel: Fully deprecates the Cricket-Class. + - rscdel: Fully deprecates the Liberty-Class. + - code_imp: Adds the worn_y_offset variable, making offsetting hats much easier. + PositiveEntropy, PiperDoots: + - imageadd: Resprites the SolGov letter opener! + - imageadd: Adds Solarian Sabres! + - imageadd: Adds SolGov and TerraGov folders! + - imageadd: New floor decals for SolGov have been added! + PositiveEntropy, PiperDoots, TripleZeta: + - imageadd: New SolGov jobs now exist, as well as respective equipment for them! + - imageadd: The SolGov Seal and Flag have been added and remade! + - code_imp: A new IFF flag has been added for SolGov, making those turrets able + to target non-SolGov aligned people! + - rscdel: Removes even more old SolGov content. Good riddance. + SirConway: + - bugfix: changed the RIG heat suit to use its own helmet instead of the prototype's + Stiel0248, Positive entropy: + - imageadd: Resprites the flyswatter + Zevotech: + - rscadd: The energy halberd, a previously unfinished weapon. Comes in 5 colors + and a hacked rainbow version. + - bugfix: Rainbow energy weapon sprites now actually follow rainbow order + - bugfix: Syndicate Battle Dome (provinggrounds.dmm) should now have a functional + SMES and airlocks/blast doors. + - bugfix: Syndicate Battle Dome (provinggrounds.dmm) no longer has ~20 black box + recorders and now only has one. + axelzonvolt: + - tweak: rewrote the config.jsons for the meta, boyardee and box-class ships to + enforce proper headset pathing instead of resorting to default path, which is + NT apparently? + dragomagol: + - bugfix: alien tools have working icon states + goober3: + - bugfix: Plasteel stairs have regained their shade. + meemofcourse: + - tweak: Reworks the Twinkleshine + - rscadd: Added observer_start landmarks to all ships + mystery3525: + - rscadd: Gave engineering cyborgs their own shuttle manipulation blueprints + - tweak: moved the skipper's pipes + - tweak: added more admin-relevant features to the Shuttle Manipulator + - bugfix: removed repeat in the Shuttle Manipulator + phoaly: + - rscadd: Added shipturfs + - rscdel: Old planetary turf subtypes + - bugfix: Fixed water turfs runtiming when hit with a bat + - bugfix: Replaced tiles on the Glaive and Shepherd + - tweak: Swapped the montagnes ID + - tweak: Nerfed Glaive mining gear + retlaw34: + - rscadd: Changes the airlock sounds + - rscadd: New hydroponic tray sprites + - rscadd: Adds 2 new posters + - bugfix: Some posters were fixed and tweaked. + spockye: + - rscadd: Adds the Beluga class transport + - tweak: replaced the seed vendor on the ember with the broken variant and some + scattered seeds + - bugfix: fixed some things on the Cepheus class + - rscadd: adds the pirate_cutter + - rscadd: adds the scar suit + - rscadd: misc frontiersmen jobs + - rscadd: Ports updated food container sprites from TG + - rscadd: Ports the BLT from TG + - bugfix: fixed small jungle trees spawning with false icon states + - rscdel: Removed seed vendor restock from the mimir class + stiel#0248: + - rscadd: Added seaweed / seaweedsheets / seaweed seeds + - rscadd: Added freegrowing seaweed patches (only in beach planet waters) + - rscadd: Added new sushi dishes (vegetariansushiroll/spicysushiroll/nigirisushi/fishi) + - rscadd: Added new misc dishes (onigiri/eggrolls) + thgvr: + - imageadd: Most of the old hardsuits have been resprited + - rscadd: Elzu now bleed, but do not have Liquid Electricity reagent as blood. (will + be changed in the future) + - rscadd: IPCs now "bleed" by leaking coolant + - rscadd: Sarathi now have teal-colored blood. + - rscadd: Blood will now dry over time + - rscadd: New bloody footprint sprites from bay + - refactor: Refactors a lot of blood code + - rscadd: Examining and other chat outputs now display in blocks to make them easier + to see + - rscadd: Being on harm intent will cause your character to face your mouse. + - rscdel: PDAs, Modcomps, AIs, and pAIs no longer have a crew manifest option. + - bugfix: Sarathi and Elzu tails/bits wont be eaten by suits anymore + - spellcheck: Fixed some grammar inconsistencies with Elzuosa/Elzuose + - balance: Engine prechargers now start with a 5kw charge leve. + - rscadd: Sarathi accents speaking Common are now a little more thick. + - balance: Cryo sleep will now make you nauseous and hungry when you wake up. + - balance: Goliaths, Ice whelps, and Whitesands basilisks should be easier to kill + now. Try AP ammo. + - balance: Crushers no longer drop from legion bodies, only old crushers. + - balance: Tweaked how crushers distribute their damage. + - balance: Survivor suits no longer make you run at hyperspeed + - balance: Laser weaponry should be a little more effective versus most common fauna. + - bugfix: Added a sound to help show when a whitesands basilisk absorbs a bullet + - rscdel: Removed maid box in loadout + - rscadd: Attack animations are now functional + tmtmtl30: + - tweak: Lava planets have been cooled below plasma's ignition temperature. +2023-06-24: + phoaly: + - rscadd: Added descriptions to all jsons + - rscadd: Added tags to all ship jsons + - rscadd: Added Ship Tags and descriptions to the ship purchase/join/shuttle manipulator + menus + - rscadd: Added tag manipulation to the ship editor + - tweak: Tweaks the UI of the shuttle manipulator +2023-06-25: + Bjarl: + - rscadd: Vela-Class Industrial Cruiser, a large CMM Ship built around mechs and + mining + PrefabQuasar: + - rscadd: added the Junker-class salvage(d) ship + - rscadd: added the reployer + - rscdel: removed the trunktide (older version of the junker) +2023-06-27: + Bjarl: + - bugfix: chicken flocks will now spawn + tmtmtl30: + - bugfix: Different planets should hopefully no longer repeatedly generate in the + exact same part of the map, overwriting each other and causing double-dock SGTs. +2023-06-28: + Arturlang: + - bugfix: Prettier should now work on VSCode again. + thgvr: + - rscadd: The Solarian Marine Society has begun mass production of a cute, marketable + plushie of their mascot. May be favored by vampires. Sprites by INFRARED_BARON. + - bugfix: Potentially fixed a lot of lag related to pipes +2023-06-30: + axelzonvolt: + - tweak: actually adds shaft miner outfit pathing to the meta-class.json + linkylink21: + - bugfix: Added Missing APCs to the Osprey diff --git a/html/changelogs/archive/2023-07.yml b/html/changelogs/archive/2023-07.yml new file mode 100644 index 000000000000..ecf3ad0daa00 --- /dev/null +++ b/html/changelogs/archive/2023-07.yml @@ -0,0 +1,207 @@ +2023-07-01: + Bjarl, Ghilker, Comyx, Assorted /tg/ contributors: + - rscadd: anomalies will now randomly spawn on planets + - rscadd: bioscrambler anomalies, they randomly change your organs and bodyparts + - rscadd: hallucination anomalies, they cause hallucinations + - rscadd: big anomalies, they're like normal anomalies but big. + - bugfix: disk renaming should only work with pens now +2023-07-02: + BarteG44: + - rscadd: Makes graves buildable + Ryll-Ryll/Shaps: + - admin: Adds pinging to adminsay! + - admin: Adds the ability to link datums! + - admin: 'Adds linking tickets to asay! Simply put a # followed by a ticket number + for it to be linked in the chat!' + thgvr: + - rscadd: A metric ton of Vox sprites + - rscdel: Vox no longer need environmental regulators + tmtmtl30: + - tweak: There is now a cap on the number of ships that may be spawned by players + in a round. + - tweak: Spawning a ship, or joining as an officer on a ship, may now carry a playtime + requirement. + - bugfix: 'Ship limits have been fixed: Many ships can only be spawned a finite + number of times per round.' + - admin: Admins may now disable join menu ship spawning. +2023-07-03: + thgvr: + - bugfix: Mining vendors have scanners again +2023-07-04: + retlaw34: + - rscadd: You now have 20 character slots! +2023-07-05: + BarteG44: + - rscadd: Added chemical crates + - rscadd: Added chemical jugs + - balance: moved the chem dispenser to applied bluespace research + MemedHams: + - rscadd: Gives holofields a glow up. + - tweak: Adjusts holofield layering so the emitters are visible. +2023-07-06: + Bjarl: + - balance: Static anomalies now deal more brain damage. + - balance: heartbeat anomalies now apply radiation burns to better telegraph their + hazard. + - rscadd: Most turrets now have a stun projectile + - rscadd: Turrets can now be repaired with a welder, and will report how damaged + they are when examined. + - rscdel: laser tag turrets. Rest in piss bozo. + - rscdel: Dwarves, Squidpeople + BogCreature: + - bugfix: The modcomp arcade minigame now properly gives gaming XP + 'Imaginos, Memed Hams ': + - soundadd: Borrows nsv's firealarm noise. + - soundadd: Borrows tg's printer noise. + - rscadd: Ports TG's Cannabis sprites. + - rscadd: Ports the old codersprite solars (I think they came from bay?) + - rscdel: The entire goon folder. + MarkSuckerberg: + - bugfix: Turffires should work again. + - tweak: Makes overmap movement and vox thermoregulators higher priority processing + targets + - rscadd: Colours in character creation are no longer crunched into three hex digits, + allowing for 16773120 new colours to use for mutcolour, haircolour, etcetera. + MothBlocks, MarkSuckerberg: + - rscadd: The rest of the autowiki system, as well as the vending machine and tech + node + Pawn, retlaw34: + - rscadd: Overmap consoles now have updated firmware, and as such have new sprites. + SapphicOverload: + - tweak: reinforced floors can no longer ignited by hotspots + ZephyrTFA: + - admin: Overmap Token Manager, use it. + goober3: + - tweak: Salvageable computers are now deconstructed into retro computer frames. + - tweak: Broken machinery can now be unwrenched. + - tweak: Destructive analyzers deconstruction messages have been tweaked to better + indicate laser intensity. + meemofcourse: + - tweak: Updated brain trauma messages + phoaly: + - tweak: tweaks the Hunter Montagne job outfit and job datum + - bugfix: 'Fixes #2101' + thgvr: + - bugfix: removes surgery table cloaking device +2023-07-07: + FlufflesTheDog: + - bugfix: Independent Litieguai's organ freezer now properly freezes the provided + organs + SapphicOverload: + - tweak: skeletons and plasmamen no longer husk, because they don't have flesh + - bugfix: fixed skeletons not having bones +2023-07-08: + Hibou48888: + - bugfix: big mortars now check the correct container for fullness before refusing + to fill said container + thgvr: + - rscadd: fucky wucky admin button +2023-07-10: + Bjarl: + - bugfix: Turrets properly report their integrity now + - bugfix: Assorted floating wall mounts and other oddities have been fixed, please + continue to report any you see. + MarkSuckerberg: + - bugfix: The wiki verb now works again + PositiveEntropy: + - imageadd: The Rack, Dresser and Holopad have been redone and updated! + SapphicOverload: + - tweak: tritium burn rate is based on oxygen-fuel ratio instead of being binary + fast/slow + - bugfix: fixed tritium fires breaking conservation of mass and consuming too much + oxygen + phoaly: + - bugfix: Fixes improperly declared outfits in ship jsons +2023-07-12: + Bjarl: + - rscadd: table mounted intercoms now exist + - rscadd: The Chronicle Class, a Real Solgov Ship, is now in game +2023-07-13: + PositiveEntropy: + - tweak: Changes the headsets that the SolGov captain, overseer, and representative + use into loudmode versions of their original incarnations! + - imageadd: Resprites shuttle chairs into way better versions in comparison to their + previous, non-license compliant versions! +2023-07-15: + Apogee-dev: + - tweak: Updated the Hyena with turret controls and visual updates + - balance: Rebalanced the Hyena's mining gear + PositiveEntropy: + - imageadd: Redoes a good majority of chairs! + Thgvr. Halcyon, Mark Suckerberg: + - rscadd: Adds new preferences to make characters fully prosthetic or a FBP (only + difference being brain type) + - rscadd: Lizard prosthetic/synthetic bodyparts with absolutely wonderful sprites + by Thgvr! It's just a visual difference, and any species can use them, + but they most resemble lizards, so. + - rscadd: Adds missing robotic vox bodyparts + - tweak: All species have the ability to change their two mutcolours. I don't think + this is really a loss at all. + thgvr: + - balance: Belts no longer fit in bags +2023-07-18: + Imaginos16: + - imageadd: Resprites the bobcurl haircut! + SapphicOverload: + - imageadd: updates some atmos sprites to fit in with the rest of engineering + retlaw34: + - rscadd: Solar armories and all related content + - balance: Bullets travel twice as fast now + - tweak: Bullets also glow in the dark now +2023-07-21: + tmtmtl30: + - bugfix: The roundstart join menu now correctly ignores playtime restrictions if + USE_EXP_TRACKING is disabled or no database is found. +2023-07-22: + Bjarl: + - rscadd: Planets now can (and will) play a sound when you land on them + - rscadd: Gas / Plasma giants, cold, dockable worlds with absolutely no livable + surfaces. As a matter of fact it's all chasm. All highly pressurized, gas rich, + chasm. + - rscadd: Dust storms and carp storms now grace the sector. + - rscadd: physical storms (dust, carp, asteroid), will now only trigger if you go + through them too fast. Take it easy and you might get through unscathed. + - rscadd: planets will now have a name on the overmap + - rscadd: overmap hazards now have a description + - tweak: Space carp can now survive in hyperspace, their natural habitat + - balance: minor and moderate electrical storms will no longer Explode you + - balance: asteroid storm lists have been trimmed of Extremely Deadly ones + - bugfix: restores planet naming behavior, I believe this was unintentionally removed + at some point + - bugfix: Ion storms work again. Fuck you whoever touched them last. + - soundadd: planet_landing_1 and planet_landing_2, (tech_notification and sos_morse_code + from CM respectively. I don't know how to attribute properly please tell me + how if you have issue with this attribution because I did not make these sounds + they're from Colonial Marines) + - imageadd: static and sparkler anomalies have "updated" icons + - rscadd: The Junker has another Mystery Safe + - rscadd: Ships can now start with varying amounts of money. + - rscadd: Ship access might work now + - bugfix: slurring + - balance: PKAs are now bulky + - rscadd: you can rotate door assemblies with alt-click + MarkSuckerberg: + - admin: Adds ticket claiming, interacting with a ticket will "claim" it and present + a warning to all other admins who try to interact also. + - bugfix: Pitch-black mutcolours are now randomised again + PositiveEntropy: + - balance: The Chronicle-class has been supplied with many new weapons fresh from + the solarian armory! + goober3: + - tweak: Large asteroids have been reworked into asteroid fields. + ritorizo: + - tweak: Mechanical surgery won't cancel at any wrong move. + thgvr: + - rscdel: You can no longer tend wounds with a pen + - balance: Ghetto surgery is less reliable across the board. + - balance: Organs will now decay in ~30 minutes, heart and brain in ~45 minutes. + - balance: Inducers now work for revival surgery. + - rscadd: Resprites underwear/socks/undershirts, adds a bunch of new ones, greyscales + some + - rscadd: Redesigns athletic shorts + - rscadd: Resprites the basic pants in loadouts + - rscadd: Hoodies, they're in loadouts. Couple colors selectable + - rscadd: Resprites organs, by Onule + - rscadd: Support for Kepori underwear/socks/undershirt + - rscdel: Some underwear/shirts were removed + - rscdel: Medical job alt outfits diff --git a/html/fuckywucky.png b/html/fuckywucky.png new file mode 100644 index 000000000000..74dd03a43955 Binary files /dev/null and b/html/fuckywucky.png differ diff --git a/icons/effects/anomalies.dmi b/icons/effects/anomalies.dmi new file mode 100644 index 000000000000..e1671b816ec5 Binary files /dev/null and b/icons/effects/anomalies.dmi differ diff --git a/icons/effects/blood_vox.dmi b/icons/effects/blood_vox.dmi new file mode 100644 index 000000000000..d6d8f1c80208 Binary files /dev/null and b/icons/effects/blood_vox.dmi differ diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index e83b46f343a9..f3dbe8bedb42 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/misc/overmap.dmi b/icons/misc/overmap.dmi index 613d98e2738e..f0c9f6e44677 100644 Binary files a/icons/misc/overmap.dmi and b/icons/misc/overmap.dmi differ diff --git a/icons/misc/overmap_large.dmi b/icons/misc/overmap_large.dmi index 9981b54e5d1a..ddb71228dfda 100644 Binary files a/icons/misc/overmap_large.dmi and b/icons/misc/overmap_large.dmi differ diff --git a/icons/misc/overmap_larger.dmi b/icons/misc/overmap_larger.dmi index 9287a7fab267..8870cf84a758 100644 Binary files a/icons/misc/overmap_larger.dmi and b/icons/misc/overmap_larger.dmi differ diff --git a/icons/mob/augmentation/augments_lizard.dmi b/icons/mob/augmentation/augments_lizard.dmi new file mode 100644 index 000000000000..9275462399d6 Binary files /dev/null and b/icons/mob/augmentation/augments_lizard.dmi differ diff --git a/icons/mob/augmentation/augments_vox.dmi b/icons/mob/augmentation/augments_vox.dmi index a837dba50ed7..5534adb59aed 100644 Binary files a/icons/mob/augmentation/augments_vox.dmi and b/icons/mob/augmentation/augments_vox.dmi differ diff --git a/icons/mob/clothing/back.dmi b/icons/mob/clothing/back.dmi index 1f49cf97feb9..9393c996d538 100644 Binary files a/icons/mob/clothing/back.dmi and b/icons/mob/clothing/back.dmi differ diff --git a/icons/mob/clothing/belt_mirror.dmi b/icons/mob/clothing/belt_mirror.dmi index 740f1335db43..02e39b1a0ae4 100644 Binary files a/icons/mob/clothing/belt_mirror.dmi and b/icons/mob/clothing/belt_mirror.dmi differ diff --git a/icons/mob/clothing/head.dmi b/icons/mob/clothing/head.dmi index 0b37fae2f3e2..159bad0a2910 100644 Binary files a/icons/mob/clothing/head.dmi and b/icons/mob/clothing/head.dmi differ diff --git a/icons/mob/clothing/suit.dmi b/icons/mob/clothing/suit.dmi index 4fc44cccf0f2..b046a32634fa 100644 Binary files a/icons/mob/clothing/suit.dmi and b/icons/mob/clothing/suit.dmi differ diff --git a/icons/mob/clothing/suits/hooded.dmi b/icons/mob/clothing/suits/hooded.dmi index 4ee800180dc5..18ae544a659d 100644 Binary files a/icons/mob/clothing/suits/hooded.dmi and b/icons/mob/clothing/suits/hooded.dmi differ diff --git a/icons/mob/clothing/suits/utility.dmi b/icons/mob/clothing/suits/utility.dmi index cd67ca626ca9..9be468cad241 100644 Binary files a/icons/mob/clothing/suits/utility.dmi and b/icons/mob/clothing/suits/utility.dmi differ diff --git a/icons/mob/clothing/under/color.dmi b/icons/mob/clothing/under/color.dmi index a7238264b43c..8bda1f9c7d6c 100644 Binary files a/icons/mob/clothing/under/color.dmi and b/icons/mob/clothing/under/color.dmi differ diff --git a/icons/mob/clothing/under/masking_helpers.dmi b/icons/mob/clothing/under/masking_helpers.dmi deleted file mode 100644 index 134e0e4b50a0..000000000000 Binary files a/icons/mob/clothing/under/masking_helpers.dmi and /dev/null differ diff --git a/icons/mob/clothing/under/medical.dmi b/icons/mob/clothing/under/medical.dmi index ca492be6e7fa..f7fd1a137708 100644 Binary files a/icons/mob/clothing/under/medical.dmi and b/icons/mob/clothing/under/medical.dmi differ diff --git a/icons/mob/clothing/under/shorts_pants.dmi b/icons/mob/clothing/under/shorts_pants.dmi index 6c90e70c6747..4a5978b9f7f3 100644 Binary files a/icons/mob/clothing/under/shorts_pants.dmi and b/icons/mob/clothing/under/shorts_pants.dmi differ diff --git a/icons/mob/clothing/under/trackpants.dmi b/icons/mob/clothing/under/trackpants.dmi deleted file mode 100644 index ab1b63baca7e..000000000000 Binary files a/icons/mob/clothing/under/trackpants.dmi and /dev/null differ diff --git a/icons/mob/clothing/underwear.dmi b/icons/mob/clothing/underwear.dmi deleted file mode 100644 index 05334237ceb8..000000000000 Binary files a/icons/mob/clothing/underwear.dmi and /dev/null differ diff --git a/icons/mob/clothing/underwear/species/underwear_legs_kepori.dmi b/icons/mob/clothing/underwear/species/underwear_legs_kepori.dmi new file mode 100644 index 000000000000..aa9c16beb0ab Binary files /dev/null and b/icons/mob/clothing/underwear/species/underwear_legs_kepori.dmi differ diff --git a/icons/mob/clothing/underwear/species/underwear_socks_kepori.dmi b/icons/mob/clothing/underwear/species/underwear_socks_kepori.dmi new file mode 100644 index 000000000000..0f4fed39ebcb Binary files /dev/null and b/icons/mob/clothing/underwear/species/underwear_socks_kepori.dmi differ diff --git a/icons/mob/clothing/underwear/species/underwear_torso_kepori.dmi b/icons/mob/clothing/underwear/species/underwear_torso_kepori.dmi new file mode 100644 index 000000000000..cdaa782b64d7 Binary files /dev/null and b/icons/mob/clothing/underwear/species/underwear_torso_kepori.dmi differ diff --git a/icons/mob/clothing/underwear/underwear_legs.dmi b/icons/mob/clothing/underwear/underwear_legs.dmi new file mode 100644 index 000000000000..7449094f5389 Binary files /dev/null and b/icons/mob/clothing/underwear/underwear_legs.dmi differ diff --git a/icons/mob/clothing/underwear/underwear_socks.dmi b/icons/mob/clothing/underwear/underwear_socks.dmi new file mode 100644 index 000000000000..bc7faddc5479 Binary files /dev/null and b/icons/mob/clothing/underwear/underwear_socks.dmi differ diff --git a/icons/mob/clothing/underwear/underwear_torso.dmi b/icons/mob/clothing/underwear/underwear_torso.dmi new file mode 100644 index 000000000000..5fa4ac787969 Binary files /dev/null and b/icons/mob/clothing/underwear/underwear_torso.dmi differ diff --git a/icons/mob/hair_extensions.dmi b/icons/mob/hair_extensions.dmi index af63e3b331c2..4e109e922697 100644 Binary files a/icons/mob/hair_extensions.dmi and b/icons/mob/hair_extensions.dmi differ diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index 5d1499e366b8..bd508c89ebd0 100644 Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ diff --git a/icons/mob/inhands/misc/plushes_lefthand.dmi b/icons/mob/inhands/misc/plushes_lefthand.dmi new file mode 100644 index 000000000000..01fa1e7a2ed0 Binary files /dev/null and b/icons/mob/inhands/misc/plushes_lefthand.dmi differ diff --git a/icons/mob/inhands/misc/plushes_righthand.dmi b/icons/mob/inhands/misc/plushes_righthand.dmi new file mode 100644 index 000000000000..99dd1d01044f Binary files /dev/null and b/icons/mob/inhands/misc/plushes_righthand.dmi differ diff --git a/icons/mob/inhands/weapons/axes_lefthand.dmi b/icons/mob/inhands/weapons/axes_lefthand.dmi index 164a4453b909..810455a611bd 100644 Binary files a/icons/mob/inhands/weapons/axes_lefthand.dmi and b/icons/mob/inhands/weapons/axes_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/axes_righthand.dmi b/icons/mob/inhands/weapons/axes_righthand.dmi index 5ab5c7c9bebb..1f5273d20d30 100644 Binary files a/icons/mob/inhands/weapons/axes_righthand.dmi and b/icons/mob/inhands/weapons/axes_righthand.dmi differ diff --git a/icons/mob/inhands/weapons/guns_lefthand.dmi b/icons/mob/inhands/weapons/guns_lefthand.dmi index 9c12ebb16a6c..ddbe6f328c2d 100644 Binary files a/icons/mob/inhands/weapons/guns_lefthand.dmi and b/icons/mob/inhands/weapons/guns_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/guns_righthand.dmi b/icons/mob/inhands/weapons/guns_righthand.dmi index eb9b1107261b..df2aeb8caea3 100644 Binary files a/icons/mob/inhands/weapons/guns_righthand.dmi and b/icons/mob/inhands/weapons/guns_righthand.dmi differ diff --git a/icons/mob/moth_markings.dmi b/icons/mob/moth_markings.dmi index 7f1798957d21..5bedf742444c 100644 Binary files a/icons/mob/moth_markings.dmi and b/icons/mob/moth_markings.dmi differ diff --git a/icons/mob/mutant_bodyparts.dmi b/icons/mob/mutant_bodyparts.dmi index 3f9338ef4a34..41a801afb82f 100644 Binary files a/icons/mob/mutant_bodyparts.dmi and b/icons/mob/mutant_bodyparts.dmi differ diff --git a/icons/mob/species/lizard/bodyparts.dmi b/icons/mob/species/lizard/bodyparts.dmi index 6eadfa27a509..69d3c24b580f 100644 Binary files a/icons/mob/species/lizard/bodyparts.dmi and b/icons/mob/species/lizard/bodyparts.dmi differ diff --git a/icons/mob/species/misc/digitigrade.dmi b/icons/mob/species/misc/digitigrade.dmi index 31c79558efa7..5ad8a47ceb9b 100644 Binary files a/icons/mob/species/misc/digitigrade.dmi and b/icons/mob/species/misc/digitigrade.dmi differ diff --git a/icons/mob/species/vox/bodyparts.dmi b/icons/mob/species/vox/bodyparts.dmi index 8f629f8732ae..fb098fa01d80 100644 Binary files a/icons/mob/species/vox/bodyparts.dmi and b/icons/mob/species/vox/bodyparts.dmi differ diff --git a/icons/mob/species/vox/onmob_back_vox.dmi b/icons/mob/species/vox/onmob_back_vox.dmi index 7aeb57d79412..f7d7499b6cc5 100644 Binary files a/icons/mob/species/vox/onmob_back_vox.dmi and b/icons/mob/species/vox/onmob_back_vox.dmi differ diff --git a/icons/mob/species/vox/onmob_belt_vox.dmi b/icons/mob/species/vox/onmob_belt_vox.dmi new file mode 100644 index 000000000000..9d183ea045b4 Binary files /dev/null and b/icons/mob/species/vox/onmob_belt_vox.dmi differ diff --git a/icons/mob/species/vox/onmob_ears_vox.dmi b/icons/mob/species/vox/onmob_ears_vox.dmi index 6c7d5e4d453c..f99cebc84afc 100644 Binary files a/icons/mob/species/vox/onmob_ears_vox.dmi and b/icons/mob/species/vox/onmob_ears_vox.dmi differ diff --git a/icons/mob/species/vox/onmob_eyes_vox.dmi b/icons/mob/species/vox/onmob_eyes_vox.dmi new file mode 100644 index 000000000000..2a30fe355bf1 Binary files /dev/null and b/icons/mob/species/vox/onmob_eyes_vox.dmi differ diff --git a/icons/mob/species/vox/onmob_feet_vox.dmi b/icons/mob/species/vox/onmob_feet_vox.dmi new file mode 100644 index 000000000000..5b8f970697eb Binary files /dev/null and b/icons/mob/species/vox/onmob_feet_vox.dmi differ diff --git a/icons/mob/species/vox/onmob_hands_vox.dmi b/icons/mob/species/vox/onmob_hands_vox.dmi new file mode 100644 index 000000000000..e1527c62b702 Binary files /dev/null and b/icons/mob/species/vox/onmob_hands_vox.dmi differ diff --git a/icons/mob/species/vox/onmob_head_vox.dmi b/icons/mob/species/vox/onmob_head_vox.dmi index 13dcbe1b27ae..d6b498ca0b5e 100644 Binary files a/icons/mob/species/vox/onmob_head_vox.dmi and b/icons/mob/species/vox/onmob_head_vox.dmi differ diff --git a/icons/mob/species/vox/onmob_mask_vox.dmi b/icons/mob/species/vox/onmob_mask_vox.dmi index c101317505b8..b460caedb721 100644 Binary files a/icons/mob/species/vox/onmob_mask_vox.dmi and b/icons/mob/species/vox/onmob_mask_vox.dmi differ diff --git a/icons/mob/species/vox/onmob_suit_vox.dmi b/icons/mob/species/vox/onmob_suit_vox.dmi index b64b0163b582..298f46032ab1 100644 Binary files a/icons/mob/species/vox/onmob_suit_vox.dmi and b/icons/mob/species/vox/onmob_suit_vox.dmi differ diff --git a/icons/mob/species/vox/onmob_uniform_vox.dmi b/icons/mob/species/vox/onmob_uniform_vox.dmi index acac098a4034..334e6a3d1705 100644 Binary files a/icons/mob/species/vox/onmob_uniform_vox.dmi and b/icons/mob/species/vox/onmob_uniform_vox.dmi differ diff --git a/icons/mob/species/vox/vox_quills.dmi b/icons/mob/species/vox/vox_quills.dmi index bd3042fa9ef0..41468992361c 100644 Binary files a/icons/mob/species/vox/vox_quills.dmi and b/icons/mob/species/vox/vox_quills.dmi differ diff --git a/icons/obj/Chem_jug.dmi b/icons/obj/Chem_jug.dmi new file mode 100644 index 000000000000..d872ba00ff1d Binary files /dev/null and b/icons/obj/Chem_jug.dmi differ diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index e9caef955c2d..0634a3d3ee3c 100644 Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ diff --git a/icons/obj/assemblies/new_assemblies.dmi b/icons/obj/assemblies/new_assemblies.dmi index adb0b69c590a..12f4a068582b 100644 Binary files a/icons/obj/assemblies/new_assemblies.dmi and b/icons/obj/assemblies/new_assemblies.dmi differ diff --git a/icons/obj/atmos.dmi b/icons/obj/atmos.dmi index 9ac29ff97c41..94df693238d0 100644 Binary files a/icons/obj/atmos.dmi and b/icons/obj/atmos.dmi differ diff --git a/icons/obj/chairs.dmi b/icons/obj/chairs.dmi index 648cb48e8660..19b49a6d34da 100644 Binary files a/icons/obj/chairs.dmi and b/icons/obj/chairs.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index bf88f41a0742..91c6c8fafec5 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 1019b682a540..78c5a1fb815c 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/clothing/suits/hooded.dmi b/icons/obj/clothing/suits/hooded.dmi index 7c3fd301a0cc..5ced5746e4b7 100644 Binary files a/icons/obj/clothing/suits/hooded.dmi and b/icons/obj/clothing/suits/hooded.dmi differ diff --git a/icons/obj/clothing/suits/utility.dmi b/icons/obj/clothing/suits/utility.dmi index 47143f498b1d..8eb73408fe09 100644 Binary files a/icons/obj/clothing/suits/utility.dmi and b/icons/obj/clothing/suits/utility.dmi differ diff --git a/icons/obj/clothing/under/medical.dmi b/icons/obj/clothing/under/medical.dmi index 0b494151455d..47504e0eae56 100644 Binary files a/icons/obj/clothing/under/medical.dmi and b/icons/obj/clothing/under/medical.dmi differ diff --git a/icons/obj/clothing/under/shorts_pants.dmi b/icons/obj/clothing/under/shorts_pants.dmi index ae010c4578bd..948fc01d4c83 100644 Binary files a/icons/obj/clothing/under/shorts_pants.dmi and b/icons/obj/clothing/under/shorts_pants.dmi differ diff --git a/icons/obj/contraband.dmi b/icons/obj/contraband.dmi index b2d5beaa2c6c..89c576fb6069 100644 Binary files a/icons/obj/contraband.dmi and b/icons/obj/contraband.dmi differ diff --git a/icons/obj/crates.dmi b/icons/obj/crates.dmi index b146d5a75364..153d53c6e285 100644 Binary files a/icons/obj/crates.dmi and b/icons/obj/crates.dmi differ diff --git a/icons/obj/guns/48x32guns.dmi b/icons/obj/guns/48x32guns.dmi index cd6e46114788..c47097987e87 100644 Binary files a/icons/obj/guns/48x32guns.dmi and b/icons/obj/guns/48x32guns.dmi differ diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi index 40d3d0dadc42..24b209d6ab2b 100644 Binary files a/icons/obj/guns/projectile.dmi and b/icons/obj/guns/projectile.dmi differ diff --git a/icons/obj/hydroponics/growing.dmi b/icons/obj/hydroponics/growing.dmi index e7b0942301de..2d8aecc78695 100644 Binary files a/icons/obj/hydroponics/growing.dmi and b/icons/obj/hydroponics/growing.dmi differ diff --git a/icons/obj/hydroponics/harvest.dmi b/icons/obj/hydroponics/harvest.dmi index 5959fec80530..aeae4b17a44e 100644 Binary files a/icons/obj/hydroponics/harvest.dmi and b/icons/obj/hydroponics/harvest.dmi differ diff --git a/icons/obj/items_and_weapons.dmi b/icons/obj/items_and_weapons.dmi index 383c7b0af8b1..56246df09ad9 100644 Binary files a/icons/obj/items_and_weapons.dmi and b/icons/obj/items_and_weapons.dmi differ diff --git a/icons/obj/machines/oldsolars.dmi b/icons/obj/machines/oldsolars.dmi new file mode 100644 index 000000000000..6bf300b6718e Binary files /dev/null and b/icons/obj/machines/oldsolars.dmi differ diff --git a/icons/obj/meteor.dmi b/icons/obj/meteor.dmi index 84faabcc1881..3e37c229ec93 100644 Binary files a/icons/obj/meteor.dmi and b/icons/obj/meteor.dmi differ diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi index d3cb9177384d..256b616cd852 100644 Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ diff --git a/icons/obj/plushes.dmi b/icons/obj/plushes.dmi index 5fe7b58d796e..8d1f4993e770 100644 Binary files a/icons/obj/plushes.dmi and b/icons/obj/plushes.dmi differ diff --git a/icons/obj/power.dmi b/icons/obj/power.dmi index f80bd9e83425..e58811689631 100644 Binary files a/icons/obj/power.dmi and b/icons/obj/power.dmi differ diff --git a/icons/obj/radio.dmi b/icons/obj/radio.dmi index effae3624752..5ccb6bb1d792 100644 Binary files a/icons/obj/radio.dmi and b/icons/obj/radio.dmi differ diff --git a/icons/obj/stationobjs.dmi b/icons/obj/stationobjs.dmi index 776297d417a2..d57c25c097d5 100644 Binary files a/icons/obj/stationobjs.dmi and b/icons/obj/stationobjs.dmi differ diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index b662141b0c0a..1fa68293cd4a 100644 Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ diff --git a/icons/obj/surgery_table.dmi b/icons/obj/surgery_table.dmi new file mode 100644 index 000000000000..ed0f02bf517b Binary files /dev/null and b/icons/obj/surgery_table.dmi differ diff --git a/icons/obj/vox_items.dmi b/icons/obj/vox_items.dmi deleted file mode 100644 index d9c671093d03..000000000000 Binary files a/icons/obj/vox_items.dmi and /dev/null differ diff --git a/icons/obj/wallmounts.dmi b/icons/obj/wallmounts.dmi index d2dfa76e78ea..96e0c28e715c 100644 Binary files a/icons/obj/wallmounts.dmi and b/icons/obj/wallmounts.dmi differ diff --git a/icons/turf/overmap.dmi b/icons/turf/overmap.dmi index 2645ff809343..e09af9abe3ee 100644 Binary files a/icons/turf/overmap.dmi and b/icons/turf/overmap.dmi differ diff --git a/interface/interface.dm b/interface/interface.dm index c753146f7972..e92c1cac13f1 100644 --- a/interface/interface.dm +++ b/interface/interface.dm @@ -6,7 +6,7 @@ var/wikiurl = CONFIG_GET(string/wikiurl) if(wikiurl) if(query) - var/output = wikiurl + "/index.php?title=Special%3ASearch&profile=default&search=" + query + var/output = "[wikiurl]?title=Special%3ASearch&profile=default&search=[query]" src << link(output) else if (query != null) src << link(wikiurl) diff --git a/interface/skin.dmf b/interface/skin.dmf index d355081fa416..72e535bf7197 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -250,9 +250,8 @@ window "outputwindow" size = 517x20 anchor1 = 0,100 anchor2 = 100,100 - background-color = #d3b5b5 is-default = true - border = sunken + border = line saved-params = "command" elem "saybutton" type = BUTTON diff --git a/shiptest.dme b/shiptest.dme index 33368b7d0218..dfeb323f63c6 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -25,6 +25,7 @@ #include "code\__DEFINES\access.dm" #include "code\__DEFINES\achievements.dm" #include "code\__DEFINES\admin.dm" +#include "code\__DEFINES\anomalies.dm" #include "code\__DEFINES\antagonists.dm" #include "code\__DEFINES\aquarium.dm" #include "code\__DEFINES\atmospherics.dm" @@ -32,6 +33,7 @@ #include "code\__DEFINES\bitfields.dm" #include "code\__DEFINES\blackmarket.dm" #include "code\__DEFINES\bodyparts.dm" +#include "code\__DEFINES\bone_flags.dm" #include "code\__DEFINES\botany.dm" #include "code\__DEFINES\callbacks.dm" #include "code\__DEFINES\cargo.dm" @@ -142,17 +144,6 @@ #include "code\__DEFINES\dcs\flags.dm" #include "code\__DEFINES\dcs\helpers.dm" #include "code\__DEFINES\dcs\signals.dm" -#include "code\__DEFINES\whitesands_after_defines\icon_smoothing.dm" -#include "code\__DEFINES\~whitesands_defines\_defines.dm" -#include "code\__DEFINES\~whitesands_defines\atmospherics.dm" -#include "code\__DEFINES\~whitesands_defines\bone_flags.dm" -#include "code\__DEFINES\~whitesands_defines\jobs.dm" -#include "code\__DEFINES\~whitesands_defines\machines.dm" -#include "code\__DEFINES\~whitesands_defines\maths.dm" -#include "code\__DEFINES\~whitesands_defines\movespeed_modification.dm" -#include "code\__DEFINES\~whitesands_defines\shuttles.dm" -#include "code\__DEFINES\~whitesands_defines\status_effects.dm" -#include "code\__DEFINES\~whitesands_defines\traits.dm" #include "code\__HELPERS\_extools_api.dm" #include "code\__HELPERS\_lists.dm" #include "code\__HELPERS\_logging.dm" @@ -335,6 +326,7 @@ #include "code\controllers\subsystem\npcpool.dm" #include "code\controllers\subsystem\overlays.dm" #include "code\controllers\subsystem\overmap.dm" +#include "code\controllers\subsystem\overmap_move.dm" #include "code\controllers\subsystem\pai.dm" #include "code\controllers\subsystem\parallax.dm" #include "code\controllers\subsystem\pathfinder.dm" @@ -350,6 +342,7 @@ #include "code\controllers\subsystem\server_maint.dm" #include "code\controllers\subsystem\shuttle.dm" #include "code\controllers\subsystem\skills.dm" +#include "code\controllers\subsystem\sound_loops.dm" #include "code\controllers\subsystem\sounds.dm" #include "code\controllers\subsystem\spacedrift.dm" #include "code\controllers\subsystem\speech_controller.dm" @@ -415,7 +408,6 @@ #include "code\datums\progressbar.dm" #include "code\datums\quixotejump.dm" #include "code\datums\radiation_wave.dm" -#include "code\datums\recipe.dm" #include "code\datums\ruins.dm" #include "code\datums\saymode.dm" #include "code\datums\shuttles.dm" @@ -446,6 +438,7 @@ #include "code\datums\brain_damage\special.dm" #include "code\datums\brain_damage\split_personality.dm" #include "code\datums\components\_component.dm" +#include "code\datums\components\admin_popup.dm" #include "code\datums\components\anti_magic.dm" #include "code\datums\components\armor_plate.dm" #include "code\datums\components\art.dm" @@ -663,6 +656,7 @@ #include "code\datums\mapgen\SingleTurf.dm" #include "code\datums\mapgen\Whitesandsatmos.dm" #include "code\datums\mapgen\planetary\_PlanetGenerator.dm" +#include "code\datums\mapgen\planetary\AsteroidGenerator.dm" #include "code\datums\mapgen\planetary\BeachGenerator.dm" #include "code\datums\mapgen\planetary\JungleGenerator.dm" #include "code\datums\mapgen\planetary\LavaGenerator.dm" @@ -671,7 +665,7 @@ #include "code\datums\mapgen\planetary\SnowGenerator.dm" #include "code\datums\mapgen\planetary\WasteGenerator.dm" #include "code\datums\mapgen\single_biome\_SingleBiome.dm" -#include "code\datums\mapgen\single_biome\AsteroidCaves.dm" +#include "code\datums\mapgen\single_biome\Gas_Giant.dm" #include "code\datums\mapgen\single_biome\ReebeGenerator.dm" #include "code\datums\martial\_martial.dm" #include "code\datums\martial\boxing.dm" @@ -968,6 +962,7 @@ #include "code\game\machinery\telecomms\machines\receiver.dm" #include "code\game\machinery\telecomms\machines\relay.dm" #include "code\game\machinery\telecomms\machines\server.dm" +#include "code\game\MapData\shuttles\misc.dm" #include "code\game\MapData\shuttles\nanotrasen_mimir.dm" #include "code\game\MapData\shuttles\nanotrasen_powerrangers.dm" #include "code\game\MapData\shuttles\srm_glaive.dm" @@ -1008,7 +1003,6 @@ #include "code\game\objects\objs.dm" #include "code\game\objects\structures.dm" #include "code\game\objects\effects\alien_acid.dm" -#include "code\game\objects\effects\anomalies.dm" #include "code\game\objects\effects\blessing.dm" #include "code\game\objects\effects\bump_teleporter.dm" #include "code\game\objects\effects\contraband.dm" @@ -1029,6 +1023,21 @@ #include "code\game\objects\effects\step_triggers.dm" #include "code\game\objects\effects\turf_fire.dm" #include "code\game\objects\effects\wanted_poster.dm" +#include "code\game\objects\effects\anomalies\_anomalies.dm" +#include "code\game\objects\effects\anomalies\anomalies_bluespace.dm" +#include "code\game\objects\effects\anomalies\anomalies_flux.dm" +#include "code\game\objects\effects\anomalies\anomalies_gravity.dm" +#include "code\game\objects\effects\anomalies\anomalies_hallucination.dm" +#include "code\game\objects\effects\anomalies\anomalies_heartbeat.dm" +#include "code\game\objects\effects\anomalies\anomalies_melter.dm" +#include "code\game\objects\effects\anomalies\anomalies_phantom.dm" +#include "code\game\objects\effects\anomalies\anomalies_plasmasoul.dm" +#include "code\game\objects\effects\anomalies\anomalies_pulsar.dm" +#include "code\game\objects\effects\anomalies\anomalies_pyroclastic.dm" +#include "code\game\objects\effects\anomalies\anomalies_sparkler.dm" +#include "code\game\objects\effects\anomalies\anomalies_static.dm" +#include "code\game\objects\effects\anomalies\anomalies_veins.dm" +#include "code\game\objects\effects\anomalies\anomalies_vortex.dm" #include "code\game\objects\effects\decals\cleanable.dm" #include "code\game\objects\effects\decals\crayon.dm" #include "code\game\objects\effects\decals\decal.dm" @@ -1104,7 +1113,6 @@ #include "code\game\objects\items\dyekit.dm" #include "code\game\objects\items\eightball.dm" #include "code\game\objects\items\energyhalberd.dm" -#include "code\game\objects\items\environmental_regulator.dm" #include "code\game\objects\items\etherealdiscoball.dm" #include "code\game\objects\items\extinguisher.dm" #include "code\game\objects\items\fireaxe.dm" @@ -1500,6 +1508,7 @@ #include "code\modules\admin\verbs\mapping.dm" #include "code\modules\admin\verbs\mentors_edit.dm" #include "code\modules\admin\verbs\one_click_antag.dm" +#include "code\modules\admin\verbs\overmap_token_manager.dm" #include "code\modules\admin\verbs\panicbunker.dm" #include "code\modules\admin\verbs\playsound.dm" #include "code\modules\admin\verbs\possess.dm" @@ -1512,6 +1521,7 @@ #include "code\modules\admin\verbs\selectequipment.dm" #include "code\modules\admin\verbs\shuttlepanel.dm" #include "code\modules\admin\verbs\spawnobjasmob.dm" +#include "code\modules\admin\verbs\toggle_ship_spawn.dm" #include "code\modules\admin\verbs\SDQL2\SDQL_2.dm" #include "code\modules\admin\verbs\SDQL2\SDQL_2_parser.dm" #include "code\modules\admin\verbs\SDQL2\SDQL_2_wrappers.dm" @@ -1772,6 +1782,12 @@ #include "code\modules\atmospherics\machinery\portable\portable_atmospherics.dm" #include "code\modules\atmospherics\machinery\portable\pump.dm" #include "code\modules\atmospherics\machinery\portable\scrubber.dm" +#include "code\modules\autowiki\autowiki.dm" +#include "code\modules\autowiki\pages\base.dm" +#include "code\modules\autowiki\pages\reagents.dm" +#include "code\modules\autowiki\pages\ships.dm" +#include "code\modules\autowiki\pages\techweb.dm" +#include "code\modules\autowiki\pages\vending.dm" #include "code\modules\awaymissions\away_props.dm" #include "code\modules\awaymissions\bluespaceartillery.dm" #include "code\modules\awaymissions\capture_the_flag.dm" @@ -1855,6 +1871,7 @@ #include "code\modules\cargo\packs\ammo.dm" #include "code\modules\cargo\packs\animal.dm" #include "code\modules\cargo\packs\canister.dm" +#include "code\modules\cargo\packs\chemistry.dm" #include "code\modules\cargo\packs\civilian.dm" #include "code\modules\cargo\packs\costumes_toys.dm" #include "code\modules\cargo\packs\emergency.dm" @@ -1943,6 +1960,7 @@ #include "code\modules\clothing\suits\bio.dm" #include "code\modules\clothing\suits\chaplainsuits.dm" #include "code\modules\clothing\suits\cloaks.dm" +#include "code\modules\clothing\suits\hoodies.dm" #include "code\modules\clothing\suits\jobs.dm" #include "code\modules\clothing\suits\labcoat.dm" #include "code\modules\clothing\suits\miscellaneous.dm" @@ -1997,12 +2015,6 @@ #include "code\modules\events\_event.dm" #include "code\modules\events\abductor.dm" #include "code\modules\events\alien_infestation.dm" -#include "code\modules\events\anomaly.dm" -#include "code\modules\events\anomaly_bluespace.dm" -#include "code\modules\events\anomaly_flux.dm" -#include "code\modules\events\anomaly_grav.dm" -#include "code\modules\events\anomaly_pyro.dm" -#include "code\modules\events\anomaly_vortex.dm" #include "code\modules\events\aurora_caelus.dm" #include "code\modules\events\blob.dm" #include "code\modules\events\borers.dm" @@ -2276,7 +2288,6 @@ #include "code\modules\language\common.dm" #include "code\modules\language\draconic.dm" #include "code\modules\language\drone.dm" -#include "code\modules\language\dwarven.dm" #include "code\modules\language\language.dm" #include "code\modules\language\language_holder.dm" #include "code\modules\language\language_menu.dm" @@ -2288,7 +2299,6 @@ #include "code\modules\language\narsian.dm" #include "code\modules\language\piratespeak.dm" #include "code\modules\language\ratvarian.dm" -#include "code\modules\language\rylethian.dm" #include "code\modules\language\shadowtongue.dm" #include "code\modules\language\slime.dm" #include "code\modules\language\spider.dm" @@ -2384,7 +2394,22 @@ #include "code\modules\mob\dead\new_player\poll.dm" #include "code\modules\mob\dead\new_player\preferences_setup.dm" #include "code\modules\mob\dead\new_player\ship_select.dm" -#include "code\modules\mob\dead\new_player\sprite_accessories.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\_sprite_accessories.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\ears.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\elzuose.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\facial_hair.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\hair.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\ipc.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\kepori.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\lizard.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\moth.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\rachnid.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\tails.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\vox.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\wings.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\underwear\underwear_legs.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\underwear\underwear_socks.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\underwear\underwear_torso.dm" #include "code\modules\mob\dead\observer\login.dm" #include "code\modules\mob\dead\observer\logout.dm" #include "code\modules\mob\dead\observer\notificationprefs.dm" @@ -2470,6 +2495,7 @@ #include "code\modules\mob\living\carbon\hologram\em_holopads.dm" #include "code\modules\mob\living\carbon\hologram\hologram.dm" #include "code\modules\mob\living\carbon\hologram\hologram_inventory.dm" +#include "code\modules\mob\living\carbon\human\consistent_human.dm" #include "code\modules\mob\living\carbon\human\damage_procs.dm" #include "code\modules\mob\living\carbon\human\death.dm" #include "code\modules\mob\living\carbon\human\dummy.dm" @@ -2491,7 +2517,6 @@ #include "code\modules\mob\living\carbon\human\species_types\abductors.dm" #include "code\modules\mob\living\carbon\human\species_types\android.dm" #include "code\modules\mob\living\carbon\human\species_types\dullahan.dm" -#include "code\modules\mob\living\carbon\human\species_types\dwarves.dm" #include "code\modules\mob\living\carbon\human\species_types\ethereal.dm" #include "code\modules\mob\living\carbon\human\species_types\flypeople.dm" #include "code\modules\mob\living\carbon\human\species_types\golems.dm" @@ -2508,7 +2533,6 @@ #include "code\modules\mob\living\carbon\human\species_types\skeletons.dm" #include "code\modules\mob\living\carbon\human\species_types\snail.dm" #include "code\modules\mob\living\carbon\human\species_types\spider.dm" -#include "code\modules\mob\living\carbon\human\species_types\squidpeople.dm" #include "code\modules\mob\living\carbon\human\species_types\vampire.dm" #include "code\modules\mob\living\carbon\human\species_types\vox.dm" #include "code\modules\mob\living\carbon\human\species_types\zombies.dm" @@ -2937,6 +2961,7 @@ #include "code\modules\projectiles\boxes_magazines\internal\_cylinder.dm" #include "code\modules\projectiles\boxes_magazines\internal\_internal.dm" #include "code\modules\projectiles\boxes_magazines\internal\derringer.dm" +#include "code\modules\projectiles\boxes_magazines\internal\gauss.dm" #include "code\modules\projectiles\boxes_magazines\internal\grenade.dm" #include "code\modules\projectiles\boxes_magazines\internal\misc.dm" #include "code\modules\projectiles\boxes_magazines\internal\revolver.dm" @@ -2992,6 +3017,7 @@ #include "code\modules\projectiles\projectile\bullets\smg.dm" #include "code\modules\projectiles\projectile\bullets\sniper.dm" #include "code\modules\projectiles\projectile\bullets\special.dm" +#include "code\modules\projectiles\projectile\bullets\turret.dm" #include "code\modules\projectiles\projectile\energy\_energy.dm" #include "code\modules\projectiles\projectile\energy\ebow.dm" #include "code\modules\projectiles\projectile\energy\misc.dm" @@ -3054,6 +3080,7 @@ #include "code\modules\reagents\reagent_containers\glass.dm" #include "code\modules\reagents\reagent_containers\hypospray.dm" #include "code\modules\reagents\reagent_containers\hypovial.dm" +#include "code\modules\reagents\reagent_containers\jug.dm" #include "code\modules\reagents\reagent_containers\maunamug.dm" #include "code\modules\reagents\reagent_containers\medigel.dm" #include "code\modules\reagents\reagent_containers\mortar.dm" diff --git a/sound/effects/planet_landing_1.ogg b/sound/effects/planet_landing_1.ogg new file mode 100644 index 000000000000..1581c1f9955a Binary files /dev/null and b/sound/effects/planet_landing_1.ogg differ diff --git a/sound/effects/planet_landing_2.ogg b/sound/effects/planet_landing_2.ogg new file mode 100644 index 000000000000..bd206161173c Binary files /dev/null and b/sound/effects/planet_landing_2.ogg differ diff --git a/sound/health/fastbeat2.ogg b/sound/health/fastbeat2.ogg new file mode 100644 index 000000000000..93f26c2195b8 Binary files /dev/null and b/sound/health/fastbeat2.ogg differ diff --git a/sound/health/slowbeat2.ogg b/sound/health/slowbeat2.ogg new file mode 100644 index 000000000000..91143884aea9 Binary files /dev/null and b/sound/health/slowbeat2.ogg differ diff --git a/sound/machines/FireAlarm.ogg b/sound/machines/FireAlarm.ogg new file mode 100644 index 000000000000..aa651b436138 Binary files /dev/null and b/sound/machines/FireAlarm.ogg differ diff --git a/sound/machines/printer.ogg b/sound/machines/printer.ogg new file mode 100644 index 000000000000..6916a695bf57 Binary files /dev/null and b/sound/machines/printer.ogg differ diff --git a/sound/misc/asay_ping.ogg b/sound/misc/asay_ping.ogg new file mode 100644 index 000000000000..ed293db4fd32 Binary files /dev/null and b/sound/misc/asay_ping.ogg differ diff --git a/sound/misc/fuckywucky.ogg b/sound/misc/fuckywucky.ogg new file mode 100644 index 000000000000..5d694149dc82 Binary files /dev/null and b/sound/misc/fuckywucky.ogg differ diff --git a/sound/voice/lizard/squeal.ogg b/sound/voice/lizard/squeal.ogg new file mode 100644 index 000000000000..f4624376e2b7 Binary files /dev/null and b/sound/voice/lizard/squeal.ogg differ diff --git a/sound/voice/lizard/tailthump.ogg b/sound/voice/lizard/tailthump.ogg new file mode 100644 index 000000000000..e4bf25f7b8d1 Binary files /dev/null and b/sound/voice/lizard/tailthump.ogg differ diff --git a/sound/weapons/gun/gauss/claris.ogg b/sound/weapons/gun/gauss/claris.ogg new file mode 100644 index 000000000000..38699df272b9 Binary files /dev/null and b/sound/weapons/gun/gauss/claris.ogg differ diff --git a/sound/weapons/gun/gauss/gar.ogg b/sound/weapons/gun/gauss/gar.ogg new file mode 100644 index 000000000000..fc3e2a7aa66d Binary files /dev/null and b/sound/weapons/gun/gauss/gar.ogg differ diff --git a/sound/weapons/gun/gauss/modelh.ogg b/sound/weapons/gun/gauss/modelh.ogg new file mode 100644 index 000000000000..4a7f558b31f3 Binary files /dev/null and b/sound/weapons/gun/gauss/modelh.ogg differ diff --git a/sound/weapons/gun/general/rocket_launch.ogg b/sound/weapons/gun/general/rocket_launch.ogg index fe9d86a47fcb..74d7e649de9d 100644 Binary files a/sound/weapons/gun/general/rocket_launch.ogg and b/sound/weapons/gun/general/rocket_launch.ogg differ diff --git a/sound/weapons/gun/pistol/pistolec.ogg b/sound/weapons/gun/pistol/pistolec.ogg new file mode 100644 index 000000000000..f908a277a0b7 Binary files /dev/null and b/sound/weapons/gun/pistol/pistolec.ogg differ diff --git a/strings/names/dwarf_first.txt b/strings/names/dwarf_first.txt deleted file mode 100644 index b71ccc2d6eb4..000000000000 --- a/strings/names/dwarf_first.txt +++ /dev/null @@ -1,84 +0,0 @@ -Thizuil -Nemdout -Nursan -Grimm -Kaschei -Khelben -Hosdrum -Sarbarra -Mystryl -Nihilus -Palando -Prospero -Radagast -Saruman -Tenser -Terefi -Gotdrilyn -Vaarsuvius -Zagyg -Urist -Matgrous -Kissaet -Magni -Modi -Freyja -Muradin -Baldr -Loki -Hel -Thor -Odin -Fenrir -Bjorn -Elrik -Erik -Harald -Sven -Arnwe -Ulf -Sif -Astrid -Bodil -Helga -Ulfhild -Sigrid -Alva -Asmund -Astrid -Brenna -Finn -Eerika -Einar -Geir -Gunhild -Haskell -Helka -Ingvar -Leif -Olaf -Olga -Raoul -Thrya -Tobjorn -Tyr -Vidar -Ylva -Freyr -Mimir -Eoghan -Cormac -Fionn -Fergus -Flann -Conn -Brigit -Graine -Cadoc -Caelfind -Ciaran -Enna -Fiacha -Myrm -Ingol -Arns diff --git a/strings/names/dwarf_last.txt b/strings/names/dwarf_last.txt deleted file mode 100644 index 84398cf3c06a..000000000000 --- a/strings/names/dwarf_last.txt +++ /dev/null @@ -1,58 +0,0 @@ -Brightjaw -Steelbrew -Grimtank -Mudback -Brickbane -Stormbrow -Deephelm -Earthpike -Berylshield -Ashbearer -Fullcask -Flintgrip -Thundermaw -Cragborg -Jadearm -Hornbelt -Fierygranite -Leadforge -Kragthane -Oakenaxe -Beastback -Coinbender -Bronzejaw -Barreldancer -Grumblesphere -Graybane -Flattoe -Steelmaker -Bronzebeard -Kragcloak -Magmaborn -Gravelbasher -Whitbrew -McUrist -Mountaincoat -Chaosbane -Darksunder -Bronzebeard -Orebreaker -Jotunsfoe -Swordmender -Emirsson -Arnsdottr -Jorgensson -Mirsdottr -Haraldsson -Sveinsdottr -Jonsdottr -Auolsson -Ingoldottr -Myrmsson -Finnsdottr -Ennsdottr -Fialsson -Flannsdottr -Ylvasson -Tyrsson -Odinsson diff --git a/strings/traumas.json b/strings/traumas.json index 14fccd286084..f6bd9b589553 100644 --- a/strings/traumas.json +++ b/strings/traumas.json @@ -3,7 +3,6 @@ "@pick(semicolon)IM A PONY NEEEEEEIIIIIIIIIGH", "without oxigen blob don't evoluate?", "@pick(semicolon)CAPTAINS A COMDOM", - "@pick(semicolon) @pick(george) @pick(mellens) is grifing me HALP!!!", "can u give me @pick(mutations)?", "THe saiyans screwed", "Bi is THE BEST OF BOTH WORLDS>", @@ -13,59 +12,102 @@ "shiggey diggey!!", "@pick(semicolon)A PIRATE APPEAR", "FUS RO DAH", - "fucking 4rries!", "stat me", ">my face", "roll it easy!", - "waaaaaagh!!!", - "red wonz go fasta", - "FOR TEH EMPRAH", "lol2cat", "dem dwarfs man, dem dwarfs", - "SPESS MAHREENS", "hwee did eet fhor khayosss", "lifelike texture ;_;", "luv can bloooom", "PACKETS!!!", "port ba@pick(y_replacements) med!!!!", - "REVIRT COBY CHEM!!!!!!!!", "youed call her a toeugh bithc", "closd for merbegging", "@pick(semicolon)pray can u @pick(create_verbs) @pick(create_nouns)???", "GEY AWAY FROM ME U GREIFING PRICK!!!!", - "ur a fuckeing autist!", - "@pick(semicolon)HELP SHITECIRTY MURDERIN MEE!!!", + "@pick(semicolon)HELP INTEG MURDERIN MEE!!!", "hwat dose tha @pick(random_gibberish) mean?????", - "@pick(semicolon)CAL; TEH SHUTTLE!!!!!", + "@pick(semicolon)DO A BLUP SPEaS JUMP!!!!!", "wearnig siNGUARLTY is.... FINE haHAAA", "@pick(semicolon)AI laW 22 Open door", - "@pick(semicolon)this SI mY stATIon......", + "@pick(semicolon)this SI mY sHip......", "who the HELL do u thenk u r?!!!!", "geT THE FUCK OUTTTT", - "H U G B O X", - "@pick(semicolon)CRASHING THIS STTAYTION WITH NIO SURVIVROS", - "@pick(servers) is down!! @pick(bug)", + "@pick(semicolon)CRASHING THIS SHIMP WITH NIO SURVIVROS", "PSHOOOM", "REMOVE SINGULARITY", "INSTLL TEG", "TURBIN IS BEST ENGIENE", "SOLIRS CAN POWER THE HOLE FLEEHT ANEWAY @pick(bug)", "parasteng was best", - "@pick(semicolon)Tajaran has warrrres, if you have coin", "@pick(semicolon)I'VE GOT BALLS OF STEEL", "NO I'M ONNA KILL YOU MOTHERFUCKER OLD STYLE", "i will snatch erry motherfucker birthday", - "@pick(semicolon)the ai and borgs are mettacomming I think", "u just did the world a little bit more sad place for someone", - "WHERES THE SLIP REWRITE WHERE THR FUCK ID IT?", "@pick(semicolon)N-NYAAAAAA~", "@pick(bug)", "@pick(semicolon)wtf??????????? @pick(bug)", "@pick(semicolon)i ran into the supermattre ten i dsappeard @pick(bug)", "DON'T EVER TUCH ME", - "@pick(semicolon)GIVE ME FREE ROBUX PLEASE JUST ENOUGH FOR SHIRT AND PANTS", - "its gonna be like 9/11 all over again but insitaead is gonna be a bitc", - "@pick(semicolon)How do I set up the. SHow do I set u p the Singu. how I the scrungulartiy????" + "@pick(semicolon)How do I set up the. SHow do I set u p the Singu. how I the scrungulartiy????", + "AMOGN US IS FUNNY!!", + "DID YOU FUCKING.", + "i DEMAND!!! APOGEE-DEV BE DEOMTED!!!", + "@pick(semicolon)I don't ndED tEARPAHY.", + "@pick(semicolon)an,d CIOCK.", + "TUWN ME INoT A CAT!!", + "WHY WAES THE PEILL REMOVED???", + "work on the wiki please", + "ahelp SPAWN @pick(aspawnships) PLS", + "Am i allowd to kil l people if thye piss me off", + "IS THIS LIEK VOIDCREW???", + "UNiT PANICKING.", + "HIII!! HI!! <3 <3 <3", + "I LOOK LKIE BEAN,S,,, CRINGE!!!", + "SEET TH shIP TO kOS!!!!!", + "IM SynDCIATe, I ANTag, I CAN KOS......", + "ahelp ADMIN CAN I BE PIRTA", + "DOCTOR YUO DO DISCETIONS!!!", + "RESERCH NANIYES", + "REVSRSE A NY WALLS!!!", + "*monch", + "Amonger", + "Live mas", + "top ten goliath funny moments", + "put me... in a stew... then buryy mee...", + "@pick(semicolon)GTT AWYA FROM HER YOU BITHC!!", + "@pick(semicolon)IS TATH A FUCKIGN,, MOTH.", + "@pick(semicolon)BRAZIL NUMEOR UNO...!!!!", + "@pick(semicolon)blbue hair??? I'M GOIgN TO KILL THDT FUIKNG COW!", + "@pick(semicolon)HOW DO I @pick(ghetto)?????", + "ough", + "ourgh", + "ouughghnnnn", + "hrrnggg", + "HE IS BALD!!!", + "I AM NORMAL. I CAN BE TRUSTED WITH INDUSTRIAL CHEMICALS", + "Welcome to the bathroom", + "THE AMOUNGS BROKE ALL MY BONES", + "HOLY SHIT IT'S @pick(john) @pick(factions)!!", + "BLrobo BLEEBUS.....", + "drugs are funny because they add new rp elements", + "ANOTHER SHIP... STERALIZED...", + "HOpeLes WAsN'T ALwAYS NaMeD HoPelESs BeFORE THe incIDENST...", + "@pick(semicolon)HopeLSS WAS ACTUAL. Ly a LIVIng WaePON....", + "@pick(semicolon)WHEN SHIPQUEST????? PANEL NEW??????", + "WHER.E SHIPQUEST???,???", + "ei,,ither wAy... It Is WHt ti is", + "butT ShIPPtSt nEVER was a WrAZnOe liKE thaEt!!", + "A deEoP-setED dISEuire... fuR pERfECTiOsM...", + "HUMORER IS A DECLIAT THINGE!!", + "who's the asshole flying the pill class", + "IVOR@pick(y_replacements) WHAT THE FOUCKE ARE U DUING!!!??", + "RESIEST BIG MOETH", + "WE MUSTE RIASE UOP AGANST BEEG MOTNH", + "Luckily, I passed high school physics", + "I WANT NOTHING MORE IN THIS LIFE THAN TO CUDDLE UP WITH A CUTE MOTH WAIFU!!", + "GO TO HORNY JAIL!!" ], "mutations": [ @@ -79,24 +121,14 @@ "stun gloves" ], - "george": ["joerge", "george", "gorge", "gdoruge"], + "john": ["joehn", "jonn", "jouhn", "jeeoun"], + + "factions": ["SYNDICT", "NATOSASEN", "EEMTEQ", "MIENUTMEN", "SOMLGOVM"], - "mellens": ["mellens", "melons", "mwrlins"], "random_gibberish": ["g", "squid", "r", "carbon dioxide"], "y_replacements": ["y", "i", "e"], - "servers": [ - "bager", - "sybl", - "mrs sybil", - "mr basil", - "mr terry", - "berry", - "vent hell", - "colonel hall" - ], - "create_verbs": ["spawn", "MAke me", "creat", "tc trade me", "gib"], "create_nouns": [ @@ -113,10 +145,25 @@ "anteg" ], + "aspawnships": [ + "BUblBUE", + "RoUBE", + "PeEL", + "TWInkLRE", + "MAYONEISE", + "raEDIO", + "joUPITR", + "HAELR TROCK", + "BEYOO", + "TID" + ], + "bug": ["", "IS TIS A BUG??", "SI IST A BUGG/", "BUG!!!"], "semicolon": ["", ";", ".h"], + "ghetto": ["ghetcheom", "ghettoghemc", "gahttochem"], + "god_foe": [ "MORTALS", "HERETICS", diff --git a/tgui/.prettierrc.yml b/tgui/.prettierrc.yml index 2c3eacf0f273..6d51c23ecf02 100644 --- a/tgui/.prettierrc.yml +++ b/tgui/.prettierrc.yml @@ -1,5 +1,8 @@ arrowParens: always endOfLine: lf +#Deprecated +# jsxBracketSameLine: true +bracketSameLine: false jsxSingleQuote: false printWidth: 80 proseWrap: preserve @@ -9,3 +12,7 @@ singleQuote: true tabWidth: 2 trailingComma: es5 useTabs: false +# PrettierX config, currently unused +# importFormatting: oneline +# offsetTernaryExpressions: true +# breakLongMethodChains: true diff --git a/tgui/.yarn/releases/yarn-3.3.1.cjs b/tgui/.yarn/releases/yarn-3.3.1.cjs new file mode 100644 index 000000000000..53a282e439a3 --- /dev/null +++ b/tgui/.yarn/releases/yarn-3.3.1.cjs @@ -0,0 +1,823 @@ +#!/usr/bin/env node +/* eslint-disable */ +//prettier-ignore +(()=>{var dfe=Object.create;var jS=Object.defineProperty;var Cfe=Object.getOwnPropertyDescriptor;var mfe=Object.getOwnPropertyNames;var Efe=Object.getPrototypeOf,Ife=Object.prototype.hasOwnProperty;var J=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+r+'" is not supported')});var y=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ht=(r,e)=>{for(var t in e)jS(r,t,{get:e[t],enumerable:!0})},yfe=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of mfe(e))!Ife.call(r,n)&&n!==t&&jS(r,n,{get:()=>e[n],enumerable:!(i=Cfe(e,n))||i.enumerable});return r};var ne=(r,e,t)=>(t=r!=null?dfe(Efe(r)):{},yfe(e||!r||!r.__esModule?jS(t,"default",{value:r,enumerable:!0}):t,r));var aK=y((uZe,oK)=>{oK.exports=sK;sK.sync=Gfe;var iK=J("fs");function Hfe(r,e){var t=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!t||(t=t.split(";"),t.indexOf("")!==-1))return!0;for(var i=0;i{uK.exports=lK;lK.sync=Yfe;var AK=J("fs");function lK(r,e,t){AK.stat(r,function(i,n){t(i,i?!1:cK(n,e))})}function Yfe(r,e){return cK(AK.statSync(r),e)}function cK(r,e){return r.isFile()&&jfe(r,e)}function jfe(r,e){var t=r.mode,i=r.uid,n=r.gid,s=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),o=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),a=parseInt("100",8),l=parseInt("010",8),c=parseInt("001",8),u=a|l,g=t&c||t&l&&n===o||t&a&&i===s||t&u&&s===0;return g}});var hK=y((hZe,fK)=>{var fZe=J("fs"),OI;process.platform==="win32"||global.TESTING_WINDOWS?OI=aK():OI=gK();fK.exports=av;av.sync=qfe;function av(r,e,t){if(typeof e=="function"&&(t=e,e={}),!t){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(i,n){av(r,e||{},function(s,o){s?n(s):i(o)})})}OI(r,e||{},function(i,n){i&&(i.code==="EACCES"||e&&e.ignoreErrors)&&(i=null,n=!1),t(i,n)})}function qfe(r,e){try{return OI.sync(r,e||{})}catch(t){if(e&&e.ignoreErrors||t.code==="EACCES")return!1;throw t}}});var yK=y((pZe,IK)=>{var _g=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",pK=J("path"),Jfe=_g?";":":",dK=hK(),CK=r=>Object.assign(new Error(`not found: ${r}`),{code:"ENOENT"}),mK=(r,e)=>{let t=e.colon||Jfe,i=r.match(/\//)||_g&&r.match(/\\/)?[""]:[..._g?[process.cwd()]:[],...(e.path||process.env.PATH||"").split(t)],n=_g?e.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",s=_g?n.split(t):[""];return _g&&r.indexOf(".")!==-1&&s[0]!==""&&s.unshift(""),{pathEnv:i,pathExt:s,pathExtExe:n}},EK=(r,e,t)=>{typeof e=="function"&&(t=e,e={}),e||(e={});let{pathEnv:i,pathExt:n,pathExtExe:s}=mK(r,e),o=[],a=c=>new Promise((u,g)=>{if(c===i.length)return e.all&&o.length?u(o):g(CK(r));let f=i[c],h=/^".*"$/.test(f)?f.slice(1,-1):f,p=pK.join(h,r),C=!h&&/^\.[\\\/]/.test(r)?r.slice(0,2)+p:p;u(l(C,c,0))}),l=(c,u,g)=>new Promise((f,h)=>{if(g===n.length)return f(a(u+1));let p=n[g];dK(c+p,{pathExt:s},(C,w)=>{if(!C&&w)if(e.all)o.push(c+p);else return f(c+p);return f(l(c,u,g+1))})});return t?a(0).then(c=>t(null,c),t):a(0)},Wfe=(r,e)=>{e=e||{};let{pathEnv:t,pathExt:i,pathExtExe:n}=mK(r,e),s=[];for(let o=0;o{"use strict";var wK=(r={})=>{let e=r.env||process.env;return(r.platform||process.platform)!=="win32"?"PATH":Object.keys(e).reverse().find(i=>i.toUpperCase()==="PATH")||"Path"};Av.exports=wK;Av.exports.default=wK});var vK=y((CZe,SK)=>{"use strict";var bK=J("path"),zfe=yK(),Vfe=BK();function QK(r,e){let t=r.options.env||process.env,i=process.cwd(),n=r.options.cwd!=null,s=n&&process.chdir!==void 0&&!process.chdir.disabled;if(s)try{process.chdir(r.options.cwd)}catch{}let o;try{o=zfe.sync(r.command,{path:t[Vfe({env:t})],pathExt:e?bK.delimiter:void 0})}catch{}finally{s&&process.chdir(i)}return o&&(o=bK.resolve(n?r.options.cwd:"",o)),o}function Xfe(r){return QK(r)||QK(r,!0)}SK.exports=Xfe});var xK=y((mZe,cv)=>{"use strict";var lv=/([()\][%!^"`<>&|;, *?])/g;function _fe(r){return r=r.replace(lv,"^$1"),r}function Zfe(r,e){return r=`${r}`,r=r.replace(/(\\*)"/g,'$1$1\\"'),r=r.replace(/(\\*)$/,"$1$1"),r=`"${r}"`,r=r.replace(lv,"^$1"),e&&(r=r.replace(lv,"^$1")),r}cv.exports.command=_fe;cv.exports.argument=Zfe});var DK=y((EZe,PK)=>{"use strict";PK.exports=/^#!(.*)/});var RK=y((IZe,kK)=>{"use strict";var $fe=DK();kK.exports=(r="")=>{let e=r.match($fe);if(!e)return null;let[t,i]=e[0].replace(/#! ?/,"").split(" "),n=t.split("/").pop();return n==="env"?i:i?`${n} ${i}`:n}});var NK=y((yZe,FK)=>{"use strict";var uv=J("fs"),ehe=RK();function the(r){let t=Buffer.alloc(150),i;try{i=uv.openSync(r,"r"),uv.readSync(i,t,0,150,0),uv.closeSync(i)}catch{}return ehe(t.toString())}FK.exports=the});var MK=y((wZe,OK)=>{"use strict";var rhe=J("path"),TK=vK(),LK=xK(),ihe=NK(),nhe=process.platform==="win32",she=/\.(?:com|exe)$/i,ohe=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function ahe(r){r.file=TK(r);let e=r.file&&ihe(r.file);return e?(r.args.unshift(r.file),r.command=e,TK(r)):r.file}function Ahe(r){if(!nhe)return r;let e=ahe(r),t=!she.test(e);if(r.options.forceShell||t){let i=ohe.test(e);r.command=rhe.normalize(r.command),r.command=LK.command(r.command),r.args=r.args.map(s=>LK.argument(s,i));let n=[r.command].concat(r.args).join(" ");r.args=["/d","/s","/c",`"${n}"`],r.command=process.env.comspec||"cmd.exe",r.options.windowsVerbatimArguments=!0}return r}function lhe(r,e,t){e&&!Array.isArray(e)&&(t=e,e=null),e=e?e.slice(0):[],t=Object.assign({},t);let i={command:r,args:e,options:t,file:void 0,original:{command:r,args:e}};return t.shell?i:Ahe(i)}OK.exports=lhe});var HK=y((BZe,KK)=>{"use strict";var gv=process.platform==="win32";function fv(r,e){return Object.assign(new Error(`${e} ${r.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${e} ${r.command}`,path:r.command,spawnargs:r.args})}function che(r,e){if(!gv)return;let t=r.emit;r.emit=function(i,n){if(i==="exit"){let s=UK(n,e,"spawn");if(s)return t.call(r,"error",s)}return t.apply(r,arguments)}}function UK(r,e){return gv&&r===1&&!e.file?fv(e.original,"spawn"):null}function uhe(r,e){return gv&&r===1&&!e.file?fv(e.original,"spawnSync"):null}KK.exports={hookChildProcess:che,verifyENOENT:UK,verifyENOENTSync:uhe,notFoundError:fv}});var dv=y((bZe,Zg)=>{"use strict";var GK=J("child_process"),hv=MK(),pv=HK();function YK(r,e,t){let i=hv(r,e,t),n=GK.spawn(i.command,i.args,i.options);return pv.hookChildProcess(n,i),n}function ghe(r,e,t){let i=hv(r,e,t),n=GK.spawnSync(i.command,i.args,i.options);return n.error=n.error||pv.verifyENOENTSync(n.status,i),n}Zg.exports=YK;Zg.exports.spawn=YK;Zg.exports.sync=ghe;Zg.exports._parse=hv;Zg.exports._enoent=pv});var qK=y((QZe,jK)=>{"use strict";function fhe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function uc(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,uc)}fhe(uc,Error);uc.buildMessage=function(r,e){var t={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;g>",re=de(">>",!1),me=">&",tt=de(">&",!1),Rt=">",It=de(">",!1),Ur="<<<",oi=de("<<<",!1),pi="<&",pr=de("<&",!1),di="<",ai=de("<",!1),Os=function(m){return{type:"argument",segments:[].concat(...m)}},dr=function(m){return m},Bi="$'",_n=de("$'",!1),pa="'",EA=de("'",!1),kg=function(m){return[{type:"text",text:m}]},Zn='""',IA=de('""',!1),da=function(){return{type:"text",text:""}},Jp='"',yA=de('"',!1),wA=function(m){return m},Br=function(m){return{type:"arithmetic",arithmetic:m,quoted:!0}},Vl=function(m){return{type:"shell",shell:m,quoted:!0}},Rg=function(m){return{type:"variable",...m,quoted:!0}},Eo=function(m){return{type:"text",text:m}},Fg=function(m){return{type:"arithmetic",arithmetic:m,quoted:!1}},Wp=function(m){return{type:"shell",shell:m,quoted:!1}},zp=function(m){return{type:"variable",...m,quoted:!1}},Pr=function(m){return{type:"glob",pattern:m}},oe=/^[^']/,Io=Ye(["'"],!0,!1),kn=function(m){return m.join("")},Ng=/^[^$"]/,bt=Ye(["$",'"'],!0,!1),Xl=`\\ +`,Rn=de(`\\ +`,!1),$n=function(){return""},es="\\",ut=de("\\",!1),yo=/^[\\$"`]/,at=Ye(["\\","$",'"',"`"],!1,!1),ln=function(m){return m},S="\\a",Lt=de("\\a",!1),Tg=function(){return"a"},_l="\\b",Vp=de("\\b",!1),Xp=function(){return"\b"},_p=/^[Ee]/,Zp=Ye(["E","e"],!1,!1),$p=function(){return"\x1B"},G="\\f",yt=de("\\f",!1),BA=function(){return"\f"},Wi="\\n",Zl=de("\\n",!1),We=function(){return` +`},Ca="\\r",Lg=de("\\r",!1),uI=function(){return"\r"},ed="\\t",gI=de("\\t",!1),ar=function(){return" "},Fn="\\v",$l=de("\\v",!1),td=function(){return"\v"},Ms=/^[\\'"?]/,ma=Ye(["\\","'",'"',"?"],!1,!1),cn=function(m){return String.fromCharCode(parseInt(m,16))},ke="\\x",Og=de("\\x",!1),ec="\\u",Us=de("\\u",!1),tc="\\U",bA=de("\\U",!1),Mg=function(m){return String.fromCodePoint(parseInt(m,16))},Ug=/^[0-7]/,Ea=Ye([["0","7"]],!1,!1),Ia=/^[0-9a-fA-f]/,$e=Ye([["0","9"],["a","f"],["A","f"]],!1,!1),wo=rt(),QA="-",rc=de("-",!1),Ks="+",ic=de("+",!1),fI=".",rd=de(".",!1),Kg=function(m,Q,F){return{type:"number",value:(m==="-"?-1:1)*parseFloat(Q.join("")+"."+F.join(""))}},id=function(m,Q){return{type:"number",value:(m==="-"?-1:1)*parseInt(Q.join(""))}},hI=function(m){return{type:"variable",...m}},nc=function(m){return{type:"variable",name:m}},pI=function(m){return m},Hg="*",SA=de("*",!1),Nr="/",dI=de("/",!1),Hs=function(m,Q,F){return{type:Q==="*"?"multiplication":"division",right:F}},Gs=function(m,Q){return Q.reduce((F,K)=>({left:F,...K}),m)},Gg=function(m,Q,F){return{type:Q==="+"?"addition":"subtraction",right:F}},vA="$((",R=de("$((",!1),q="))",pe=de("))",!1),Ne=function(m){return m},xe="$(",qe=de("$(",!1),dt=function(m){return m},Ft="${",Nn=de("${",!1),vS=":-",AU=de(":-",!1),lU=function(m,Q){return{name:m,defaultValue:Q}},xS=":-}",cU=de(":-}",!1),uU=function(m){return{name:m,defaultValue:[]}},PS=":+",gU=de(":+",!1),fU=function(m,Q){return{name:m,alternativeValue:Q}},DS=":+}",hU=de(":+}",!1),pU=function(m){return{name:m,alternativeValue:[]}},kS=function(m){return{name:m}},dU="$",CU=de("$",!1),mU=function(m){return e.isGlobPattern(m)},EU=function(m){return m},RS=/^[a-zA-Z0-9_]/,FS=Ye([["a","z"],["A","Z"],["0","9"],"_"],!1,!1),NS=function(){return O()},TS=/^[$@*?#a-zA-Z0-9_\-]/,LS=Ye(["$","@","*","?","#",["a","z"],["A","Z"],["0","9"],"_","-"],!1,!1),IU=/^[(){}<>$|&; \t"']/,Yg=Ye(["(",")","{","}","<",">","$","|","&",";"," "," ",'"',"'"],!1,!1),OS=/^[<>&; \t"']/,MS=Ye(["<",">","&",";"," "," ",'"',"'"],!1,!1),CI=/^[ \t]/,mI=Ye([" "," "],!1,!1),b=0,Fe=0,xA=[{line:1,column:1}],d=0,E=[],I=0,k;if("startRule"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');n=i[e.startRule]}function O(){return r.substring(Fe,b)}function X(){return Et(Fe,b)}function te(m,Q){throw Q=Q!==void 0?Q:Et(Fe,b),Fi([At(m)],r.substring(Fe,b),Q)}function ye(m,Q){throw Q=Q!==void 0?Q:Et(Fe,b),Tn(m,Q)}function de(m,Q){return{type:"literal",text:m,ignoreCase:Q}}function Ye(m,Q,F){return{type:"class",parts:m,inverted:Q,ignoreCase:F}}function rt(){return{type:"any"}}function wt(){return{type:"end"}}function At(m){return{type:"other",description:m}}function et(m){var Q=xA[m],F;if(Q)return Q;for(F=m-1;!xA[F];)F--;for(Q=xA[F],Q={line:Q.line,column:Q.column};Fd&&(d=b,E=[]),E.push(m))}function Tn(m,Q){return new uc(m,null,null,Q)}function Fi(m,Q,F){return new uc(uc.buildMessage(m,Q),m,Q,F)}function PA(){var m,Q;return m=b,Q=Kr(),Q===t&&(Q=null),Q!==t&&(Fe=m,Q=s(Q)),m=Q,m}function Kr(){var m,Q,F,K,ce;if(m=b,Q=Hr(),Q!==t){for(F=[],K=Me();K!==t;)F.push(K),K=Me();F!==t?(K=ya(),K!==t?(ce=ts(),ce===t&&(ce=null),ce!==t?(Fe=m,Q=o(Q,K,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;if(m===t)if(m=b,Q=Hr(),Q!==t){for(F=[],K=Me();K!==t;)F.push(K),K=Me();F!==t?(K=ya(),K===t&&(K=null),K!==t?(Fe=m,Q=a(Q,K),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function ts(){var m,Q,F,K,ce;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t)if(F=Kr(),F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();K!==t?(Fe=m,Q=l(F),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function ya(){var m;return r.charCodeAt(b)===59?(m=c,b++):(m=t,I===0&&Be(u)),m===t&&(r.charCodeAt(b)===38?(m=g,b++):(m=t,I===0&&Be(f))),m}function Hr(){var m,Q,F;return m=b,Q=yU(),Q!==t?(F=$ge(),F===t&&(F=null),F!==t?(Fe=m,Q=h(Q,F),m=Q):(b=m,m=t)):(b=m,m=t),m}function $ge(){var m,Q,F,K,ce,Qe,ft;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t)if(F=efe(),F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();if(K!==t)if(ce=Hr(),ce!==t){for(Qe=[],ft=Me();ft!==t;)Qe.push(ft),ft=Me();Qe!==t?(Fe=m,Q=p(F,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function efe(){var m;return r.substr(b,2)===C?(m=C,b+=2):(m=t,I===0&&Be(w)),m===t&&(r.substr(b,2)===B?(m=B,b+=2):(m=t,I===0&&Be(v))),m}function yU(){var m,Q,F;return m=b,Q=ife(),Q!==t?(F=tfe(),F===t&&(F=null),F!==t?(Fe=m,Q=D(Q,F),m=Q):(b=m,m=t)):(b=m,m=t),m}function tfe(){var m,Q,F,K,ce,Qe,ft;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t)if(F=rfe(),F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();if(K!==t)if(ce=yU(),ce!==t){for(Qe=[],ft=Me();ft!==t;)Qe.push(ft),ft=Me();Qe!==t?(Fe=m,Q=T(F,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function rfe(){var m;return r.substr(b,2)===H?(m=H,b+=2):(m=t,I===0&&Be(j)),m===t&&(r.charCodeAt(b)===124?(m=$,b++):(m=t,I===0&&Be(V))),m}function EI(){var m,Q,F,K,ce,Qe;if(m=b,Q=FU(),Q!==t)if(r.charCodeAt(b)===61?(F=W,b++):(F=t,I===0&&Be(Z)),F!==t)if(K=bU(),K!==t){for(ce=[],Qe=Me();Qe!==t;)ce.push(Qe),Qe=Me();ce!==t?(Fe=m,Q=A(Q,K),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;else b=m,m=t;if(m===t)if(m=b,Q=FU(),Q!==t)if(r.charCodeAt(b)===61?(F=W,b++):(F=t,I===0&&Be(Z)),F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();K!==t?(Fe=m,Q=ae(Q),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function ife(){var m,Q,F,K,ce,Qe,ft,Bt,Vr,Ci,rs;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t)if(r.charCodeAt(b)===40?(F=ge,b++):(F=t,I===0&&Be(_)),F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();if(K!==t)if(ce=Kr(),ce!==t){for(Qe=[],ft=Me();ft!==t;)Qe.push(ft),ft=Me();if(Qe!==t)if(r.charCodeAt(b)===41?(ft=L,b++):(ft=t,I===0&&Be(N)),ft!==t){for(Bt=[],Vr=Me();Vr!==t;)Bt.push(Vr),Vr=Me();if(Bt!==t){for(Vr=[],Ci=nd();Ci!==t;)Vr.push(Ci),Ci=nd();if(Vr!==t){for(Ci=[],rs=Me();rs!==t;)Ci.push(rs),rs=Me();Ci!==t?(Fe=m,Q=ue(ce,Vr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t)if(r.charCodeAt(b)===123?(F=we,b++):(F=t,I===0&&Be(Te)),F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();if(K!==t)if(ce=Kr(),ce!==t){for(Qe=[],ft=Me();ft!==t;)Qe.push(ft),ft=Me();if(Qe!==t)if(r.charCodeAt(b)===125?(ft=Pe,b++):(ft=t,I===0&&Be(Le)),ft!==t){for(Bt=[],Vr=Me();Vr!==t;)Bt.push(Vr),Vr=Me();if(Bt!==t){for(Vr=[],Ci=nd();Ci!==t;)Vr.push(Ci),Ci=nd();if(Vr!==t){for(Ci=[],rs=Me();rs!==t;)Ci.push(rs),rs=Me();Ci!==t?(Fe=m,Q=se(ce,Vr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t){for(F=[],K=EI();K!==t;)F.push(K),K=EI();if(F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();if(K!==t){if(ce=[],Qe=BU(),Qe!==t)for(;Qe!==t;)ce.push(Qe),Qe=BU();else ce=t;if(ce!==t){for(Qe=[],ft=Me();ft!==t;)Qe.push(ft),ft=Me();Qe!==t?(Fe=m,Q=Ae(F,ce),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t}else b=m,m=t;if(m===t){for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t){if(F=[],K=EI(),K!==t)for(;K!==t;)F.push(K),K=EI();else F=t;if(F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();K!==t?(Fe=m,Q=be(F),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}}}return m}function wU(){var m,Q,F,K,ce;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t){if(F=[],K=II(),K!==t)for(;K!==t;)F.push(K),K=II();else F=t;if(F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();K!==t?(Fe=m,Q=fe(F),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t;return m}function BU(){var m,Q,F;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t?(F=nd(),F!==t?(Fe=m,Q=le(F),m=Q):(b=m,m=t)):(b=m,m=t),m===t){for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();Q!==t?(F=II(),F!==t?(Fe=m,Q=le(F),m=Q):(b=m,m=t)):(b=m,m=t)}return m}function nd(){var m,Q,F,K,ce;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();return Q!==t?(Ge.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(ie)),F===t&&(F=null),F!==t?(K=nfe(),K!==t?(ce=II(),ce!==t?(Fe=m,Q=Y(F,K,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function nfe(){var m;return r.substr(b,2)===he?(m=he,b+=2):(m=t,I===0&&Be(re)),m===t&&(r.substr(b,2)===me?(m=me,b+=2):(m=t,I===0&&Be(tt)),m===t&&(r.charCodeAt(b)===62?(m=Rt,b++):(m=t,I===0&&Be(It)),m===t&&(r.substr(b,3)===Ur?(m=Ur,b+=3):(m=t,I===0&&Be(oi)),m===t&&(r.substr(b,2)===pi?(m=pi,b+=2):(m=t,I===0&&Be(pr)),m===t&&(r.charCodeAt(b)===60?(m=di,b++):(m=t,I===0&&Be(ai))))))),m}function II(){var m,Q,F;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();return Q!==t?(F=bU(),F!==t?(Fe=m,Q=le(F),m=Q):(b=m,m=t)):(b=m,m=t),m}function bU(){var m,Q,F;if(m=b,Q=[],F=QU(),F!==t)for(;F!==t;)Q.push(F),F=QU();else Q=t;return Q!==t&&(Fe=m,Q=Os(Q)),m=Q,m}function QU(){var m,Q;return m=b,Q=sfe(),Q!==t&&(Fe=m,Q=dr(Q)),m=Q,m===t&&(m=b,Q=ofe(),Q!==t&&(Fe=m,Q=dr(Q)),m=Q,m===t&&(m=b,Q=afe(),Q!==t&&(Fe=m,Q=dr(Q)),m=Q,m===t&&(m=b,Q=Afe(),Q!==t&&(Fe=m,Q=dr(Q)),m=Q))),m}function sfe(){var m,Q,F,K;return m=b,r.substr(b,2)===Bi?(Q=Bi,b+=2):(Q=t,I===0&&Be(_n)),Q!==t?(F=ufe(),F!==t?(r.charCodeAt(b)===39?(K=pa,b++):(K=t,I===0&&Be(EA)),K!==t?(Fe=m,Q=kg(F),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function ofe(){var m,Q,F,K;return m=b,r.charCodeAt(b)===39?(Q=pa,b++):(Q=t,I===0&&Be(EA)),Q!==t?(F=lfe(),F!==t?(r.charCodeAt(b)===39?(K=pa,b++):(K=t,I===0&&Be(EA)),K!==t?(Fe=m,Q=kg(F),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function afe(){var m,Q,F,K;if(m=b,r.substr(b,2)===Zn?(Q=Zn,b+=2):(Q=t,I===0&&Be(IA)),Q!==t&&(Fe=m,Q=da()),m=Q,m===t)if(m=b,r.charCodeAt(b)===34?(Q=Jp,b++):(Q=t,I===0&&Be(yA)),Q!==t){for(F=[],K=SU();K!==t;)F.push(K),K=SU();F!==t?(r.charCodeAt(b)===34?(K=Jp,b++):(K=t,I===0&&Be(yA)),K!==t?(Fe=m,Q=wA(F),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function Afe(){var m,Q,F;if(m=b,Q=[],F=vU(),F!==t)for(;F!==t;)Q.push(F),F=vU();else Q=t;return Q!==t&&(Fe=m,Q=wA(Q)),m=Q,m}function SU(){var m,Q;return m=b,Q=kU(),Q!==t&&(Fe=m,Q=Br(Q)),m=Q,m===t&&(m=b,Q=RU(),Q!==t&&(Fe=m,Q=Vl(Q)),m=Q,m===t&&(m=b,Q=GS(),Q!==t&&(Fe=m,Q=Rg(Q)),m=Q,m===t&&(m=b,Q=cfe(),Q!==t&&(Fe=m,Q=Eo(Q)),m=Q))),m}function vU(){var m,Q;return m=b,Q=kU(),Q!==t&&(Fe=m,Q=Fg(Q)),m=Q,m===t&&(m=b,Q=RU(),Q!==t&&(Fe=m,Q=Wp(Q)),m=Q,m===t&&(m=b,Q=GS(),Q!==t&&(Fe=m,Q=zp(Q)),m=Q,m===t&&(m=b,Q=hfe(),Q!==t&&(Fe=m,Q=Pr(Q)),m=Q,m===t&&(m=b,Q=ffe(),Q!==t&&(Fe=m,Q=Eo(Q)),m=Q)))),m}function lfe(){var m,Q,F;for(m=b,Q=[],oe.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(Io));F!==t;)Q.push(F),oe.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(Io));return Q!==t&&(Fe=m,Q=kn(Q)),m=Q,m}function cfe(){var m,Q,F;if(m=b,Q=[],F=xU(),F===t&&(Ng.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(bt))),F!==t)for(;F!==t;)Q.push(F),F=xU(),F===t&&(Ng.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(bt)));else Q=t;return Q!==t&&(Fe=m,Q=kn(Q)),m=Q,m}function xU(){var m,Q,F;return m=b,r.substr(b,2)===Xl?(Q=Xl,b+=2):(Q=t,I===0&&Be(Rn)),Q!==t&&(Fe=m,Q=$n()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=es,b++):(Q=t,I===0&&Be(ut)),Q!==t?(yo.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(at)),F!==t?(Fe=m,Q=ln(F),m=Q):(b=m,m=t)):(b=m,m=t)),m}function ufe(){var m,Q,F;for(m=b,Q=[],F=PU(),F===t&&(oe.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(Io)));F!==t;)Q.push(F),F=PU(),F===t&&(oe.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(Io)));return Q!==t&&(Fe=m,Q=kn(Q)),m=Q,m}function PU(){var m,Q,F;return m=b,r.substr(b,2)===S?(Q=S,b+=2):(Q=t,I===0&&Be(Lt)),Q!==t&&(Fe=m,Q=Tg()),m=Q,m===t&&(m=b,r.substr(b,2)===_l?(Q=_l,b+=2):(Q=t,I===0&&Be(Vp)),Q!==t&&(Fe=m,Q=Xp()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=es,b++):(Q=t,I===0&&Be(ut)),Q!==t?(_p.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(Zp)),F!==t?(Fe=m,Q=$p(),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===G?(Q=G,b+=2):(Q=t,I===0&&Be(yt)),Q!==t&&(Fe=m,Q=BA()),m=Q,m===t&&(m=b,r.substr(b,2)===Wi?(Q=Wi,b+=2):(Q=t,I===0&&Be(Zl)),Q!==t&&(Fe=m,Q=We()),m=Q,m===t&&(m=b,r.substr(b,2)===Ca?(Q=Ca,b+=2):(Q=t,I===0&&Be(Lg)),Q!==t&&(Fe=m,Q=uI()),m=Q,m===t&&(m=b,r.substr(b,2)===ed?(Q=ed,b+=2):(Q=t,I===0&&Be(gI)),Q!==t&&(Fe=m,Q=ar()),m=Q,m===t&&(m=b,r.substr(b,2)===Fn?(Q=Fn,b+=2):(Q=t,I===0&&Be($l)),Q!==t&&(Fe=m,Q=td()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=es,b++):(Q=t,I===0&&Be(ut)),Q!==t?(Ms.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(ma)),F!==t?(Fe=m,Q=ln(F),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=gfe()))))))))),m}function gfe(){var m,Q,F,K,ce,Qe,ft,Bt,Vr,Ci,rs,YS;return m=b,r.charCodeAt(b)===92?(Q=es,b++):(Q=t,I===0&&Be(ut)),Q!==t?(F=US(),F!==t?(Fe=m,Q=cn(F),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===ke?(Q=ke,b+=2):(Q=t,I===0&&Be(Og)),Q!==t?(F=b,K=b,ce=US(),ce!==t?(Qe=Ln(),Qe!==t?(ce=[ce,Qe],K=ce):(b=K,K=t)):(b=K,K=t),K===t&&(K=US()),K!==t?F=r.substring(F,b):F=K,F!==t?(Fe=m,Q=cn(F),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===ec?(Q=ec,b+=2):(Q=t,I===0&&Be(Us)),Q!==t?(F=b,K=b,ce=Ln(),ce!==t?(Qe=Ln(),Qe!==t?(ft=Ln(),ft!==t?(Bt=Ln(),Bt!==t?(ce=[ce,Qe,ft,Bt],K=ce):(b=K,K=t)):(b=K,K=t)):(b=K,K=t)):(b=K,K=t),K!==t?F=r.substring(F,b):F=K,F!==t?(Fe=m,Q=cn(F),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===tc?(Q=tc,b+=2):(Q=t,I===0&&Be(bA)),Q!==t?(F=b,K=b,ce=Ln(),ce!==t?(Qe=Ln(),Qe!==t?(ft=Ln(),ft!==t?(Bt=Ln(),Bt!==t?(Vr=Ln(),Vr!==t?(Ci=Ln(),Ci!==t?(rs=Ln(),rs!==t?(YS=Ln(),YS!==t?(ce=[ce,Qe,ft,Bt,Vr,Ci,rs,YS],K=ce):(b=K,K=t)):(b=K,K=t)):(b=K,K=t)):(b=K,K=t)):(b=K,K=t)):(b=K,K=t)):(b=K,K=t)):(b=K,K=t),K!==t?F=r.substring(F,b):F=K,F!==t?(Fe=m,Q=Mg(F),m=Q):(b=m,m=t)):(b=m,m=t)))),m}function US(){var m;return Ug.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&Be(Ea)),m}function Ln(){var m;return Ia.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&Be($e)),m}function ffe(){var m,Q,F,K,ce;if(m=b,Q=[],F=b,r.charCodeAt(b)===92?(K=es,b++):(K=t,I===0&&Be(ut)),K!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&Be(wo)),ce!==t?(Fe=F,K=ln(ce),F=K):(b=F,F=t)):(b=F,F=t),F===t&&(F=b,K=b,I++,ce=NU(),I--,ce===t?K=void 0:(b=K,K=t),K!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&Be(wo)),ce!==t?(Fe=F,K=ln(ce),F=K):(b=F,F=t)):(b=F,F=t)),F!==t)for(;F!==t;)Q.push(F),F=b,r.charCodeAt(b)===92?(K=es,b++):(K=t,I===0&&Be(ut)),K!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&Be(wo)),ce!==t?(Fe=F,K=ln(ce),F=K):(b=F,F=t)):(b=F,F=t),F===t&&(F=b,K=b,I++,ce=NU(),I--,ce===t?K=void 0:(b=K,K=t),K!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&Be(wo)),ce!==t?(Fe=F,K=ln(ce),F=K):(b=F,F=t)):(b=F,F=t));else Q=t;return Q!==t&&(Fe=m,Q=kn(Q)),m=Q,m}function KS(){var m,Q,F,K,ce,Qe;if(m=b,r.charCodeAt(b)===45?(Q=QA,b++):(Q=t,I===0&&Be(rc)),Q===t&&(r.charCodeAt(b)===43?(Q=Ks,b++):(Q=t,I===0&&Be(ic))),Q===t&&(Q=null),Q!==t){if(F=[],Ge.test(r.charAt(b))?(K=r.charAt(b),b++):(K=t,I===0&&Be(ie)),K!==t)for(;K!==t;)F.push(K),Ge.test(r.charAt(b))?(K=r.charAt(b),b++):(K=t,I===0&&Be(ie));else F=t;if(F!==t)if(r.charCodeAt(b)===46?(K=fI,b++):(K=t,I===0&&Be(rd)),K!==t){if(ce=[],Ge.test(r.charAt(b))?(Qe=r.charAt(b),b++):(Qe=t,I===0&&Be(ie)),Qe!==t)for(;Qe!==t;)ce.push(Qe),Ge.test(r.charAt(b))?(Qe=r.charAt(b),b++):(Qe=t,I===0&&Be(ie));else ce=t;ce!==t?(Fe=m,Q=Kg(Q,F,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;if(m===t){if(m=b,r.charCodeAt(b)===45?(Q=QA,b++):(Q=t,I===0&&Be(rc)),Q===t&&(r.charCodeAt(b)===43?(Q=Ks,b++):(Q=t,I===0&&Be(ic))),Q===t&&(Q=null),Q!==t){if(F=[],Ge.test(r.charAt(b))?(K=r.charAt(b),b++):(K=t,I===0&&Be(ie)),K!==t)for(;K!==t;)F.push(K),Ge.test(r.charAt(b))?(K=r.charAt(b),b++):(K=t,I===0&&Be(ie));else F=t;F!==t?(Fe=m,Q=id(Q,F),m=Q):(b=m,m=t)}else b=m,m=t;if(m===t&&(m=b,Q=GS(),Q!==t&&(Fe=m,Q=hI(Q)),m=Q,m===t&&(m=b,Q=sc(),Q!==t&&(Fe=m,Q=nc(Q)),m=Q,m===t)))if(m=b,r.charCodeAt(b)===40?(Q=ge,b++):(Q=t,I===0&&Be(_)),Q!==t){for(F=[],K=Me();K!==t;)F.push(K),K=Me();if(F!==t)if(K=DU(),K!==t){for(ce=[],Qe=Me();Qe!==t;)ce.push(Qe),Qe=Me();ce!==t?(r.charCodeAt(b)===41?(Qe=L,b++):(Qe=t,I===0&&Be(N)),Qe!==t?(Fe=m,Q=pI(K),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t}return m}function HS(){var m,Q,F,K,ce,Qe,ft,Bt;if(m=b,Q=KS(),Q!==t){for(F=[],K=b,ce=[],Qe=Me();Qe!==t;)ce.push(Qe),Qe=Me();if(ce!==t)if(r.charCodeAt(b)===42?(Qe=Hg,b++):(Qe=t,I===0&&Be(SA)),Qe===t&&(r.charCodeAt(b)===47?(Qe=Nr,b++):(Qe=t,I===0&&Be(dI))),Qe!==t){for(ft=[],Bt=Me();Bt!==t;)ft.push(Bt),Bt=Me();ft!==t?(Bt=KS(),Bt!==t?(Fe=K,ce=Hs(Q,Qe,Bt),K=ce):(b=K,K=t)):(b=K,K=t)}else b=K,K=t;else b=K,K=t;for(;K!==t;){for(F.push(K),K=b,ce=[],Qe=Me();Qe!==t;)ce.push(Qe),Qe=Me();if(ce!==t)if(r.charCodeAt(b)===42?(Qe=Hg,b++):(Qe=t,I===0&&Be(SA)),Qe===t&&(r.charCodeAt(b)===47?(Qe=Nr,b++):(Qe=t,I===0&&Be(dI))),Qe!==t){for(ft=[],Bt=Me();Bt!==t;)ft.push(Bt),Bt=Me();ft!==t?(Bt=KS(),Bt!==t?(Fe=K,ce=Hs(Q,Qe,Bt),K=ce):(b=K,K=t)):(b=K,K=t)}else b=K,K=t;else b=K,K=t}F!==t?(Fe=m,Q=Gs(Q,F),m=Q):(b=m,m=t)}else b=m,m=t;return m}function DU(){var m,Q,F,K,ce,Qe,ft,Bt;if(m=b,Q=HS(),Q!==t){for(F=[],K=b,ce=[],Qe=Me();Qe!==t;)ce.push(Qe),Qe=Me();if(ce!==t)if(r.charCodeAt(b)===43?(Qe=Ks,b++):(Qe=t,I===0&&Be(ic)),Qe===t&&(r.charCodeAt(b)===45?(Qe=QA,b++):(Qe=t,I===0&&Be(rc))),Qe!==t){for(ft=[],Bt=Me();Bt!==t;)ft.push(Bt),Bt=Me();ft!==t?(Bt=HS(),Bt!==t?(Fe=K,ce=Gg(Q,Qe,Bt),K=ce):(b=K,K=t)):(b=K,K=t)}else b=K,K=t;else b=K,K=t;for(;K!==t;){for(F.push(K),K=b,ce=[],Qe=Me();Qe!==t;)ce.push(Qe),Qe=Me();if(ce!==t)if(r.charCodeAt(b)===43?(Qe=Ks,b++):(Qe=t,I===0&&Be(ic)),Qe===t&&(r.charCodeAt(b)===45?(Qe=QA,b++):(Qe=t,I===0&&Be(rc))),Qe!==t){for(ft=[],Bt=Me();Bt!==t;)ft.push(Bt),Bt=Me();ft!==t?(Bt=HS(),Bt!==t?(Fe=K,ce=Gg(Q,Qe,Bt),K=ce):(b=K,K=t)):(b=K,K=t)}else b=K,K=t;else b=K,K=t}F!==t?(Fe=m,Q=Gs(Q,F),m=Q):(b=m,m=t)}else b=m,m=t;return m}function kU(){var m,Q,F,K,ce,Qe;if(m=b,r.substr(b,3)===vA?(Q=vA,b+=3):(Q=t,I===0&&Be(R)),Q!==t){for(F=[],K=Me();K!==t;)F.push(K),K=Me();if(F!==t)if(K=DU(),K!==t){for(ce=[],Qe=Me();Qe!==t;)ce.push(Qe),Qe=Me();ce!==t?(r.substr(b,2)===q?(Qe=q,b+=2):(Qe=t,I===0&&Be(pe)),Qe!==t?(Fe=m,Q=Ne(K),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;return m}function RU(){var m,Q,F,K;return m=b,r.substr(b,2)===xe?(Q=xe,b+=2):(Q=t,I===0&&Be(qe)),Q!==t?(F=Kr(),F!==t?(r.charCodeAt(b)===41?(K=L,b++):(K=t,I===0&&Be(N)),K!==t?(Fe=m,Q=dt(F),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function GS(){var m,Q,F,K,ce,Qe;return m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&Be(Nn)),Q!==t?(F=sc(),F!==t?(r.substr(b,2)===vS?(K=vS,b+=2):(K=t,I===0&&Be(AU)),K!==t?(ce=wU(),ce!==t?(r.charCodeAt(b)===125?(Qe=Pe,b++):(Qe=t,I===0&&Be(Le)),Qe!==t?(Fe=m,Q=lU(F,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&Be(Nn)),Q!==t?(F=sc(),F!==t?(r.substr(b,3)===xS?(K=xS,b+=3):(K=t,I===0&&Be(cU)),K!==t?(Fe=m,Q=uU(F),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&Be(Nn)),Q!==t?(F=sc(),F!==t?(r.substr(b,2)===PS?(K=PS,b+=2):(K=t,I===0&&Be(gU)),K!==t?(ce=wU(),ce!==t?(r.charCodeAt(b)===125?(Qe=Pe,b++):(Qe=t,I===0&&Be(Le)),Qe!==t?(Fe=m,Q=fU(F,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&Be(Nn)),Q!==t?(F=sc(),F!==t?(r.substr(b,3)===DS?(K=DS,b+=3):(K=t,I===0&&Be(hU)),K!==t?(Fe=m,Q=pU(F),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&Be(Nn)),Q!==t?(F=sc(),F!==t?(r.charCodeAt(b)===125?(K=Pe,b++):(K=t,I===0&&Be(Le)),K!==t?(Fe=m,Q=kS(F),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.charCodeAt(b)===36?(Q=dU,b++):(Q=t,I===0&&Be(CU)),Q!==t?(F=sc(),F!==t?(Fe=m,Q=kS(F),m=Q):(b=m,m=t)):(b=m,m=t)))))),m}function hfe(){var m,Q,F;return m=b,Q=pfe(),Q!==t?(Fe=b,F=mU(Q),F?F=void 0:F=t,F!==t?(Fe=m,Q=EU(Q),m=Q):(b=m,m=t)):(b=m,m=t),m}function pfe(){var m,Q,F,K,ce;if(m=b,Q=[],F=b,K=b,I++,ce=TU(),I--,ce===t?K=void 0:(b=K,K=t),K!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&Be(wo)),ce!==t?(Fe=F,K=ln(ce),F=K):(b=F,F=t)):(b=F,F=t),F!==t)for(;F!==t;)Q.push(F),F=b,K=b,I++,ce=TU(),I--,ce===t?K=void 0:(b=K,K=t),K!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&Be(wo)),ce!==t?(Fe=F,K=ln(ce),F=K):(b=F,F=t)):(b=F,F=t);else Q=t;return Q!==t&&(Fe=m,Q=kn(Q)),m=Q,m}function FU(){var m,Q,F;if(m=b,Q=[],RS.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(FS)),F!==t)for(;F!==t;)Q.push(F),RS.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(FS));else Q=t;return Q!==t&&(Fe=m,Q=NS()),m=Q,m}function sc(){var m,Q,F;if(m=b,Q=[],TS.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(LS)),F!==t)for(;F!==t;)Q.push(F),TS.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(LS));else Q=t;return Q!==t&&(Fe=m,Q=NS()),m=Q,m}function NU(){var m;return IU.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&Be(Yg)),m}function TU(){var m;return OS.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&Be(MS)),m}function Me(){var m,Q;if(m=[],CI.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&Be(mI)),Q!==t)for(;Q!==t;)m.push(Q),CI.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&Be(mI));else m=t;return m}if(k=n(),k!==t&&b===r.length)return k;throw k!==t&&b{"use strict";function phe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function fc(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,fc)}phe(fc,Error);fc.buildMessage=function(r,e){var t={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;gH&&(H=v,j=[]),j.push(ie))}function Le(ie,Y){return new fc(ie,null,null,Y)}function se(ie,Y,he){return new fc(fc.buildMessage(ie,Y),ie,Y,he)}function Ae(){var ie,Y,he,re;return ie=v,Y=be(),Y!==t?(r.charCodeAt(v)===47?(he=s,v++):(he=t,$===0&&Pe(o)),he!==t?(re=be(),re!==t?(D=ie,Y=a(Y,re),ie=Y):(v=ie,ie=t)):(v=ie,ie=t)):(v=ie,ie=t),ie===t&&(ie=v,Y=be(),Y!==t&&(D=ie,Y=l(Y)),ie=Y),ie}function be(){var ie,Y,he,re;return ie=v,Y=fe(),Y!==t?(r.charCodeAt(v)===64?(he=c,v++):(he=t,$===0&&Pe(u)),he!==t?(re=Ge(),re!==t?(D=ie,Y=g(Y,re),ie=Y):(v=ie,ie=t)):(v=ie,ie=t)):(v=ie,ie=t),ie===t&&(ie=v,Y=fe(),Y!==t&&(D=ie,Y=f(Y)),ie=Y),ie}function fe(){var ie,Y,he,re,me;return ie=v,r.charCodeAt(v)===64?(Y=c,v++):(Y=t,$===0&&Pe(u)),Y!==t?(he=le(),he!==t?(r.charCodeAt(v)===47?(re=s,v++):(re=t,$===0&&Pe(o)),re!==t?(me=le(),me!==t?(D=ie,Y=h(),ie=Y):(v=ie,ie=t)):(v=ie,ie=t)):(v=ie,ie=t)):(v=ie,ie=t),ie===t&&(ie=v,Y=le(),Y!==t&&(D=ie,Y=h()),ie=Y),ie}function le(){var ie,Y,he;if(ie=v,Y=[],p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Pe(C)),he!==t)for(;he!==t;)Y.push(he),p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Pe(C));else Y=t;return Y!==t&&(D=ie,Y=h()),ie=Y,ie}function Ge(){var ie,Y,he;if(ie=v,Y=[],w.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Pe(B)),he!==t)for(;he!==t;)Y.push(he),w.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Pe(B));else Y=t;return Y!==t&&(D=ie,Y=h()),ie=Y,ie}if(V=n(),V!==t&&v===r.length)return V;throw V!==t&&v{"use strict";function XK(r){return typeof r>"u"||r===null}function Che(r){return typeof r=="object"&&r!==null}function mhe(r){return Array.isArray(r)?r:XK(r)?[]:[r]}function Ehe(r,e){var t,i,n,s;if(e)for(s=Object.keys(e),t=0,i=s.length;t{"use strict";function md(r,e){Error.call(this),this.name="YAMLException",this.reason=r,this.mark=e,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():""),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}md.prototype=Object.create(Error.prototype);md.prototype.constructor=md;md.prototype.toString=function(e){var t=this.name+": ";return t+=this.reason||"(unknown reason)",!e&&this.mark&&(t+=" "+this.mark.toString()),t};_K.exports=md});var e2=y((YZe,$K)=>{"use strict";var ZK=pc();function wv(r,e,t,i,n){this.name=r,this.buffer=e,this.position=t,this.line=i,this.column=n}wv.prototype.getSnippet=function(e,t){var i,n,s,o,a;if(!this.buffer)return null;for(e=e||4,t=t||75,i="",n=this.position;n>0&&`\0\r +\x85\u2028\u2029`.indexOf(this.buffer.charAt(n-1))===-1;)if(n-=1,this.position-n>t/2-1){i=" ... ",n+=5;break}for(s="",o=this.position;ot/2-1){s=" ... ",o-=5;break}return a=this.buffer.slice(n,o),ZK.repeat(" ",e)+i+a+s+` +`+ZK.repeat(" ",e+this.position-n+i.length)+"^"};wv.prototype.toString=function(e){var t,i="";return this.name&&(i+='in "'+this.name+'" '),i+="at line "+(this.line+1)+", column "+(this.column+1),e||(t=this.getSnippet(),t&&(i+=`: +`+t)),i};$K.exports=wv});var Ai=y((jZe,r2)=>{"use strict";var t2=tf(),whe=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],Bhe=["scalar","sequence","mapping"];function bhe(r){var e={};return r!==null&&Object.keys(r).forEach(function(t){r[t].forEach(function(i){e[String(i)]=t})}),e}function Qhe(r,e){if(e=e||{},Object.keys(e).forEach(function(t){if(whe.indexOf(t)===-1)throw new t2('Unknown option "'+t+'" is met in definition of "'+r+'" YAML type.')}),this.tag=r,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=bhe(e.styleAliases||null),Bhe.indexOf(this.kind)===-1)throw new t2('Unknown kind "'+this.kind+'" is specified for "'+r+'" YAML type.')}r2.exports=Qhe});var dc=y((qZe,n2)=>{"use strict";var i2=pc(),jI=tf(),She=Ai();function Bv(r,e,t){var i=[];return r.include.forEach(function(n){t=Bv(n,e,t)}),r[e].forEach(function(n){t.forEach(function(s,o){s.tag===n.tag&&s.kind===n.kind&&i.push(o)}),t.push(n)}),t.filter(function(n,s){return i.indexOf(s)===-1})}function vhe(){var r={scalar:{},sequence:{},mapping:{},fallback:{}},e,t;function i(n){r[n.kind][n.tag]=r.fallback[n.tag]=n}for(e=0,t=arguments.length;e{"use strict";var xhe=Ai();s2.exports=new xhe("tag:yaml.org,2002:str",{kind:"scalar",construct:function(r){return r!==null?r:""}})});var A2=y((WZe,a2)=>{"use strict";var Phe=Ai();a2.exports=new Phe("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(r){return r!==null?r:[]}})});var c2=y((zZe,l2)=>{"use strict";var Dhe=Ai();l2.exports=new Dhe("tag:yaml.org,2002:map",{kind:"mapping",construct:function(r){return r!==null?r:{}}})});var qI=y((VZe,u2)=>{"use strict";var khe=dc();u2.exports=new khe({explicit:[o2(),A2(),c2()]})});var f2=y((XZe,g2)=>{"use strict";var Rhe=Ai();function Fhe(r){if(r===null)return!0;var e=r.length;return e===1&&r==="~"||e===4&&(r==="null"||r==="Null"||r==="NULL")}function Nhe(){return null}function The(r){return r===null}g2.exports=new Rhe("tag:yaml.org,2002:null",{kind:"scalar",resolve:Fhe,construct:Nhe,predicate:The,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})});var p2=y((_Ze,h2)=>{"use strict";var Lhe=Ai();function Ohe(r){if(r===null)return!1;var e=r.length;return e===4&&(r==="true"||r==="True"||r==="TRUE")||e===5&&(r==="false"||r==="False"||r==="FALSE")}function Mhe(r){return r==="true"||r==="True"||r==="TRUE"}function Uhe(r){return Object.prototype.toString.call(r)==="[object Boolean]"}h2.exports=new Lhe("tag:yaml.org,2002:bool",{kind:"scalar",resolve:Ohe,construct:Mhe,predicate:Uhe,represent:{lowercase:function(r){return r?"true":"false"},uppercase:function(r){return r?"TRUE":"FALSE"},camelcase:function(r){return r?"True":"False"}},defaultStyle:"lowercase"})});var C2=y((ZZe,d2)=>{"use strict";var Khe=pc(),Hhe=Ai();function Ghe(r){return 48<=r&&r<=57||65<=r&&r<=70||97<=r&&r<=102}function Yhe(r){return 48<=r&&r<=55}function jhe(r){return 48<=r&&r<=57}function qhe(r){if(r===null)return!1;var e=r.length,t=0,i=!1,n;if(!e)return!1;if(n=r[t],(n==="-"||n==="+")&&(n=r[++t]),n==="0"){if(t+1===e)return!0;if(n=r[++t],n==="b"){for(t++;t=0?"0b"+r.toString(2):"-0b"+r.toString(2).slice(1)},octal:function(r){return r>=0?"0"+r.toString(8):"-0"+r.toString(8).slice(1)},decimal:function(r){return r.toString(10)},hexadecimal:function(r){return r>=0?"0x"+r.toString(16).toUpperCase():"-0x"+r.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})});var I2=y(($Ze,E2)=>{"use strict";var m2=pc(),zhe=Ai(),Vhe=new RegExp("^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function Xhe(r){return!(r===null||!Vhe.test(r)||r[r.length-1]==="_")}function _he(r){var e,t,i,n;return e=r.replace(/_/g,"").toLowerCase(),t=e[0]==="-"?-1:1,n=[],"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?t===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:e.indexOf(":")>=0?(e.split(":").forEach(function(s){n.unshift(parseFloat(s,10))}),e=0,i=1,n.forEach(function(s){e+=s*i,i*=60}),t*e):t*parseFloat(e,10)}var Zhe=/^[-+]?[0-9]+e/;function $he(r,e){var t;if(isNaN(r))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===r)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===r)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(m2.isNegativeZero(r))return"-0.0";return t=r.toString(10),Zhe.test(t)?t.replace("e",".e"):t}function epe(r){return Object.prototype.toString.call(r)==="[object Number]"&&(r%1!==0||m2.isNegativeZero(r))}E2.exports=new zhe("tag:yaml.org,2002:float",{kind:"scalar",resolve:Xhe,construct:_he,predicate:epe,represent:$he,defaultStyle:"lowercase"})});var bv=y((e$e,y2)=>{"use strict";var tpe=dc();y2.exports=new tpe({include:[qI()],implicit:[f2(),p2(),C2(),I2()]})});var Qv=y((t$e,w2)=>{"use strict";var rpe=dc();w2.exports=new rpe({include:[bv()]})});var S2=y((r$e,Q2)=>{"use strict";var ipe=Ai(),B2=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),b2=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function npe(r){return r===null?!1:B2.exec(r)!==null||b2.exec(r)!==null}function spe(r){var e,t,i,n,s,o,a,l=0,c=null,u,g,f;if(e=B2.exec(r),e===null&&(e=b2.exec(r)),e===null)throw new Error("Date resolve error");if(t=+e[1],i=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(t,i,n));if(s=+e[4],o=+e[5],a=+e[6],e[7]){for(l=e[7].slice(0,3);l.length<3;)l+="0";l=+l}return e[9]&&(u=+e[10],g=+(e[11]||0),c=(u*60+g)*6e4,e[9]==="-"&&(c=-c)),f=new Date(Date.UTC(t,i,n,s,o,a,l)),c&&f.setTime(f.getTime()-c),f}function ope(r){return r.toISOString()}Q2.exports=new ipe("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:npe,construct:spe,instanceOf:Date,represent:ope})});var x2=y((i$e,v2)=>{"use strict";var ape=Ai();function Ape(r){return r==="<<"||r===null}v2.exports=new ape("tag:yaml.org,2002:merge",{kind:"scalar",resolve:Ape})});var k2=y((n$e,D2)=>{"use strict";var Cc;try{P2=J,Cc=P2("buffer").Buffer}catch{}var P2,lpe=Ai(),Sv=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= +\r`;function cpe(r){if(r===null)return!1;var e,t,i=0,n=r.length,s=Sv;for(t=0;t64)){if(e<0)return!1;i+=6}return i%8===0}function upe(r){var e,t,i=r.replace(/[\r\n=]/g,""),n=i.length,s=Sv,o=0,a=[];for(e=0;e>16&255),a.push(o>>8&255),a.push(o&255)),o=o<<6|s.indexOf(i.charAt(e));return t=n%4*6,t===0?(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)):t===18?(a.push(o>>10&255),a.push(o>>2&255)):t===12&&a.push(o>>4&255),Cc?Cc.from?Cc.from(a):new Cc(a):a}function gpe(r){var e="",t=0,i,n,s=r.length,o=Sv;for(i=0;i>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]),t=(t<<8)+r[i];return n=s%3,n===0?(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]):n===2?(e+=o[t>>10&63],e+=o[t>>4&63],e+=o[t<<2&63],e+=o[64]):n===1&&(e+=o[t>>2&63],e+=o[t<<4&63],e+=o[64],e+=o[64]),e}function fpe(r){return Cc&&Cc.isBuffer(r)}D2.exports=new lpe("tag:yaml.org,2002:binary",{kind:"scalar",resolve:cpe,construct:upe,predicate:fpe,represent:gpe})});var F2=y((s$e,R2)=>{"use strict";var hpe=Ai(),ppe=Object.prototype.hasOwnProperty,dpe=Object.prototype.toString;function Cpe(r){if(r===null)return!0;var e=[],t,i,n,s,o,a=r;for(t=0,i=a.length;t{"use strict";var Epe=Ai(),Ipe=Object.prototype.toString;function ype(r){if(r===null)return!0;var e,t,i,n,s,o=r;for(s=new Array(o.length),e=0,t=o.length;e{"use strict";var Bpe=Ai(),bpe=Object.prototype.hasOwnProperty;function Qpe(r){if(r===null)return!0;var e,t=r;for(e in t)if(bpe.call(t,e)&&t[e]!==null)return!1;return!0}function Spe(r){return r!==null?r:{}}L2.exports=new Bpe("tag:yaml.org,2002:set",{kind:"mapping",resolve:Qpe,construct:Spe})});var nf=y((A$e,M2)=>{"use strict";var vpe=dc();M2.exports=new vpe({include:[Qv()],implicit:[S2(),x2()],explicit:[k2(),F2(),T2(),O2()]})});var K2=y((l$e,U2)=>{"use strict";var xpe=Ai();function Ppe(){return!0}function Dpe(){}function kpe(){return""}function Rpe(r){return typeof r>"u"}U2.exports=new xpe("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:Ppe,construct:Dpe,predicate:Rpe,represent:kpe})});var G2=y((c$e,H2)=>{"use strict";var Fpe=Ai();function Npe(r){if(r===null||r.length===0)return!1;var e=r,t=/\/([gim]*)$/.exec(r),i="";return!(e[0]==="/"&&(t&&(i=t[1]),i.length>3||e[e.length-i.length-1]!=="/"))}function Tpe(r){var e=r,t=/\/([gim]*)$/.exec(r),i="";return e[0]==="/"&&(t&&(i=t[1]),e=e.slice(1,e.length-i.length-1)),new RegExp(e,i)}function Lpe(r){var e="/"+r.source+"/";return r.global&&(e+="g"),r.multiline&&(e+="m"),r.ignoreCase&&(e+="i"),e}function Ope(r){return Object.prototype.toString.call(r)==="[object RegExp]"}H2.exports=new Fpe("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:Npe,construct:Tpe,predicate:Ope,represent:Lpe})});var q2=y((u$e,j2)=>{"use strict";var JI;try{Y2=J,JI=Y2("esprima")}catch{typeof window<"u"&&(JI=window.esprima)}var Y2,Mpe=Ai();function Upe(r){if(r===null)return!1;try{var e="("+r+")",t=JI.parse(e,{range:!0});return!(t.type!=="Program"||t.body.length!==1||t.body[0].type!=="ExpressionStatement"||t.body[0].expression.type!=="ArrowFunctionExpression"&&t.body[0].expression.type!=="FunctionExpression")}catch{return!1}}function Kpe(r){var e="("+r+")",t=JI.parse(e,{range:!0}),i=[],n;if(t.type!=="Program"||t.body.length!==1||t.body[0].type!=="ExpressionStatement"||t.body[0].expression.type!=="ArrowFunctionExpression"&&t.body[0].expression.type!=="FunctionExpression")throw new Error("Failed to resolve function");return t.body[0].expression.params.forEach(function(s){i.push(s.name)}),n=t.body[0].expression.body.range,t.body[0].expression.body.type==="BlockStatement"?new Function(i,e.slice(n[0]+1,n[1]-1)):new Function(i,"return "+e.slice(n[0],n[1]))}function Hpe(r){return r.toString()}function Gpe(r){return Object.prototype.toString.call(r)==="[object Function]"}j2.exports=new Mpe("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:Upe,construct:Kpe,predicate:Gpe,represent:Hpe})});var Ed=y((g$e,W2)=>{"use strict";var J2=dc();W2.exports=J2.DEFAULT=new J2({include:[nf()],explicit:[K2(),G2(),q2()]})});var gH=y((f$e,Id)=>{"use strict";var Qa=pc(),eH=tf(),Ype=e2(),tH=nf(),jpe=Ed(),NA=Object.prototype.hasOwnProperty,WI=1,rH=2,iH=3,zI=4,vv=1,qpe=2,z2=3,Jpe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,Wpe=/[\x85\u2028\u2029]/,zpe=/[,\[\]\{\}]/,nH=/^(?:!|!!|![a-z\-]+!)$/i,sH=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function V2(r){return Object.prototype.toString.call(r)}function So(r){return r===10||r===13}function Ec(r){return r===9||r===32}function fn(r){return r===9||r===32||r===10||r===13}function sf(r){return r===44||r===91||r===93||r===123||r===125}function Vpe(r){var e;return 48<=r&&r<=57?r-48:(e=r|32,97<=e&&e<=102?e-97+10:-1)}function Xpe(r){return r===120?2:r===117?4:r===85?8:0}function _pe(r){return 48<=r&&r<=57?r-48:-1}function X2(r){return r===48?"\0":r===97?"\x07":r===98?"\b":r===116||r===9?" ":r===110?` +`:r===118?"\v":r===102?"\f":r===114?"\r":r===101?"\x1B":r===32?" ":r===34?'"':r===47?"/":r===92?"\\":r===78?"\x85":r===95?"\xA0":r===76?"\u2028":r===80?"\u2029":""}function Zpe(r){return r<=65535?String.fromCharCode(r):String.fromCharCode((r-65536>>10)+55296,(r-65536&1023)+56320)}var oH=new Array(256),aH=new Array(256);for(mc=0;mc<256;mc++)oH[mc]=X2(mc)?1:0,aH[mc]=X2(mc);var mc;function $pe(r,e){this.input=r,this.filename=e.filename||null,this.schema=e.schema||jpe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=r.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function AH(r,e){return new eH(e,new Ype(r.filename,r.input,r.position,r.line,r.position-r.lineStart))}function gt(r,e){throw AH(r,e)}function VI(r,e){r.onWarning&&r.onWarning.call(null,AH(r,e))}var _2={YAML:function(e,t,i){var n,s,o;e.version!==null&>(e,"duplication of %YAML directive"),i.length!==1&>(e,"YAML directive accepts exactly one argument"),n=/^([0-9]+)\.([0-9]+)$/.exec(i[0]),n===null&>(e,"ill-formed argument of the YAML directive"),s=parseInt(n[1],10),o=parseInt(n[2],10),s!==1&>(e,"unacceptable YAML version of the document"),e.version=i[0],e.checkLineBreaks=o<2,o!==1&&o!==2&&VI(e,"unsupported YAML version of the document")},TAG:function(e,t,i){var n,s;i.length!==2&>(e,"TAG directive accepts exactly two arguments"),n=i[0],s=i[1],nH.test(n)||gt(e,"ill-formed tag handle (first argument) of the TAG directive"),NA.call(e.tagMap,n)&>(e,'there is a previously declared suffix for "'+n+'" tag handle'),sH.test(s)||gt(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[n]=s}};function FA(r,e,t,i){var n,s,o,a;if(e1&&(r.result+=Qa.repeat(` +`,e-1))}function ede(r,e,t){var i,n,s,o,a,l,c,u,g=r.kind,f=r.result,h;if(h=r.input.charCodeAt(r.position),fn(h)||sf(h)||h===35||h===38||h===42||h===33||h===124||h===62||h===39||h===34||h===37||h===64||h===96||(h===63||h===45)&&(n=r.input.charCodeAt(r.position+1),fn(n)||t&&sf(n)))return!1;for(r.kind="scalar",r.result="",s=o=r.position,a=!1;h!==0;){if(h===58){if(n=r.input.charCodeAt(r.position+1),fn(n)||t&&sf(n))break}else if(h===35){if(i=r.input.charCodeAt(r.position-1),fn(i))break}else{if(r.position===r.lineStart&&XI(r)||t&&sf(h))break;if(So(h))if(l=r.line,c=r.lineStart,u=r.lineIndent,_r(r,!1,-1),r.lineIndent>=e){a=!0,h=r.input.charCodeAt(r.position);continue}else{r.position=o,r.line=l,r.lineStart=c,r.lineIndent=u;break}}a&&(FA(r,s,o,!1),Pv(r,r.line-l),s=o=r.position,a=!1),Ec(h)||(o=r.position+1),h=r.input.charCodeAt(++r.position)}return FA(r,s,o,!1),r.result?!0:(r.kind=g,r.result=f,!1)}function tde(r,e){var t,i,n;if(t=r.input.charCodeAt(r.position),t!==39)return!1;for(r.kind="scalar",r.result="",r.position++,i=n=r.position;(t=r.input.charCodeAt(r.position))!==0;)if(t===39)if(FA(r,i,r.position,!0),t=r.input.charCodeAt(++r.position),t===39)i=r.position,r.position++,n=r.position;else return!0;else So(t)?(FA(r,i,n,!0),Pv(r,_r(r,!1,e)),i=n=r.position):r.position===r.lineStart&&XI(r)?gt(r,"unexpected end of the document within a single quoted scalar"):(r.position++,n=r.position);gt(r,"unexpected end of the stream within a single quoted scalar")}function rde(r,e){var t,i,n,s,o,a;if(a=r.input.charCodeAt(r.position),a!==34)return!1;for(r.kind="scalar",r.result="",r.position++,t=i=r.position;(a=r.input.charCodeAt(r.position))!==0;){if(a===34)return FA(r,t,r.position,!0),r.position++,!0;if(a===92){if(FA(r,t,r.position,!0),a=r.input.charCodeAt(++r.position),So(a))_r(r,!1,e);else if(a<256&&oH[a])r.result+=aH[a],r.position++;else if((o=Xpe(a))>0){for(n=o,s=0;n>0;n--)a=r.input.charCodeAt(++r.position),(o=Vpe(a))>=0?s=(s<<4)+o:gt(r,"expected hexadecimal character");r.result+=Zpe(s),r.position++}else gt(r,"unknown escape sequence");t=i=r.position}else So(a)?(FA(r,t,i,!0),Pv(r,_r(r,!1,e)),t=i=r.position):r.position===r.lineStart&&XI(r)?gt(r,"unexpected end of the document within a double quoted scalar"):(r.position++,i=r.position)}gt(r,"unexpected end of the stream within a double quoted scalar")}function ide(r,e){var t=!0,i,n=r.tag,s,o=r.anchor,a,l,c,u,g,f={},h,p,C,w;if(w=r.input.charCodeAt(r.position),w===91)l=93,g=!1,s=[];else if(w===123)l=125,g=!0,s={};else return!1;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),w=r.input.charCodeAt(++r.position);w!==0;){if(_r(r,!0,e),w=r.input.charCodeAt(r.position),w===l)return r.position++,r.tag=n,r.anchor=o,r.kind=g?"mapping":"sequence",r.result=s,!0;t||gt(r,"missed comma between flow collection entries"),p=h=C=null,c=u=!1,w===63&&(a=r.input.charCodeAt(r.position+1),fn(a)&&(c=u=!0,r.position++,_r(r,!0,e))),i=r.line,af(r,e,WI,!1,!0),p=r.tag,h=r.result,_r(r,!0,e),w=r.input.charCodeAt(r.position),(u||r.line===i)&&w===58&&(c=!0,w=r.input.charCodeAt(++r.position),_r(r,!0,e),af(r,e,WI,!1,!0),C=r.result),g?of(r,s,f,p,h,C):c?s.push(of(r,null,f,p,h,C)):s.push(h),_r(r,!0,e),w=r.input.charCodeAt(r.position),w===44?(t=!0,w=r.input.charCodeAt(++r.position)):t=!1}gt(r,"unexpected end of the stream within a flow collection")}function nde(r,e){var t,i,n=vv,s=!1,o=!1,a=e,l=0,c=!1,u,g;if(g=r.input.charCodeAt(r.position),g===124)i=!1;else if(g===62)i=!0;else return!1;for(r.kind="scalar",r.result="";g!==0;)if(g=r.input.charCodeAt(++r.position),g===43||g===45)vv===n?n=g===43?z2:qpe:gt(r,"repeat of a chomping mode identifier");else if((u=_pe(g))>=0)u===0?gt(r,"bad explicit indentation width of a block scalar; it cannot be less than one"):o?gt(r,"repeat of an indentation width identifier"):(a=e+u-1,o=!0);else break;if(Ec(g)){do g=r.input.charCodeAt(++r.position);while(Ec(g));if(g===35)do g=r.input.charCodeAt(++r.position);while(!So(g)&&g!==0)}for(;g!==0;){for(xv(r),r.lineIndent=0,g=r.input.charCodeAt(r.position);(!o||r.lineIndenta&&(a=r.lineIndent),So(g)){l++;continue}if(r.lineIndente)&&l!==0)gt(r,"bad indentation of a sequence entry");else if(r.lineIndente)&&(af(r,e,zI,!0,n)&&(p?f=r.result:h=r.result),p||(of(r,c,u,g,f,h,s,o),g=f=h=null),_r(r,!0,-1),w=r.input.charCodeAt(r.position)),r.lineIndent>e&&w!==0)gt(r,"bad indentation of a mapping entry");else if(r.lineIndente?l=1:r.lineIndent===e?l=0:r.lineIndente?l=1:r.lineIndent===e?l=0:r.lineIndent tag; it should be "scalar", not "'+r.kind+'"'),g=0,f=r.implicitTypes.length;g tag; it should be "'+h.kind+'", not "'+r.kind+'"'),h.resolve(r.result)?(r.result=h.construct(r.result),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):gt(r,"cannot resolve a node with !<"+r.tag+"> explicit tag")):gt(r,"unknown tag !<"+r.tag+">");return r.listener!==null&&r.listener("close",r),r.tag!==null||r.anchor!==null||u}function lde(r){var e=r.position,t,i,n,s=!1,o;for(r.version=null,r.checkLineBreaks=r.legacy,r.tagMap={},r.anchorMap={};(o=r.input.charCodeAt(r.position))!==0&&(_r(r,!0,-1),o=r.input.charCodeAt(r.position),!(r.lineIndent>0||o!==37));){for(s=!0,o=r.input.charCodeAt(++r.position),t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);for(i=r.input.slice(t,r.position),n=[],i.length<1&>(r,"directive name must not be less than one character in length");o!==0;){for(;Ec(o);)o=r.input.charCodeAt(++r.position);if(o===35){do o=r.input.charCodeAt(++r.position);while(o!==0&&!So(o));break}if(So(o))break;for(t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);n.push(r.input.slice(t,r.position))}o!==0&&xv(r),NA.call(_2,i)?_2[i](r,i,n):VI(r,'unknown document directive "'+i+'"')}if(_r(r,!0,-1),r.lineIndent===0&&r.input.charCodeAt(r.position)===45&&r.input.charCodeAt(r.position+1)===45&&r.input.charCodeAt(r.position+2)===45?(r.position+=3,_r(r,!0,-1)):s&>(r,"directives end mark is expected"),af(r,r.lineIndent-1,zI,!1,!0),_r(r,!0,-1),r.checkLineBreaks&&Wpe.test(r.input.slice(e,r.position))&&VI(r,"non-ASCII line breaks are interpreted as content"),r.documents.push(r.result),r.position===r.lineStart&&XI(r)){r.input.charCodeAt(r.position)===46&&(r.position+=3,_r(r,!0,-1));return}if(r.position"u"&&(t=e,e=null);var i=lH(r,t);if(typeof e!="function")return i;for(var n=0,s=i.length;n"u"&&(t=e,e=null),cH(r,e,Qa.extend({schema:tH},t))}function ude(r,e){return uH(r,Qa.extend({schema:tH},e))}Id.exports.loadAll=cH;Id.exports.load=uH;Id.exports.safeLoadAll=cde;Id.exports.safeLoad=ude});var TH=y((h$e,Fv)=>{"use strict";var wd=pc(),Bd=tf(),gde=Ed(),fde=nf(),IH=Object.prototype.toString,yH=Object.prototype.hasOwnProperty,hde=9,yd=10,pde=13,dde=32,Cde=33,mde=34,wH=35,Ede=37,Ide=38,yde=39,wde=42,BH=44,Bde=45,bH=58,bde=61,Qde=62,Sde=63,vde=64,QH=91,SH=93,xde=96,vH=123,Pde=124,xH=125,Ti={};Ti[0]="\\0";Ti[7]="\\a";Ti[8]="\\b";Ti[9]="\\t";Ti[10]="\\n";Ti[11]="\\v";Ti[12]="\\f";Ti[13]="\\r";Ti[27]="\\e";Ti[34]='\\"';Ti[92]="\\\\";Ti[133]="\\N";Ti[160]="\\_";Ti[8232]="\\L";Ti[8233]="\\P";var Dde=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];function kde(r,e){var t,i,n,s,o,a,l;if(e===null)return{};for(t={},i=Object.keys(e),n=0,s=i.length;n0?r.charCodeAt(s-1):null,f=f&&pH(o,a)}else{for(s=0;si&&r[g+1]!==" ",g=s);else if(!Af(o))return _I;a=s>0?r.charCodeAt(s-1):null,f=f&&pH(o,a)}c=c||u&&s-g-1>i&&r[g+1]!==" "}return!l&&!c?f&&!n(r)?DH:kH:t>9&&PH(r)?_I:c?FH:RH}function Ode(r,e,t,i){r.dump=function(){if(e.length===0)return"''";if(!r.noCompatMode&&Dde.indexOf(e)!==-1)return"'"+e+"'";var n=r.indent*Math.max(1,t),s=r.lineWidth===-1?-1:Math.max(Math.min(r.lineWidth,40),r.lineWidth-n),o=i||r.flowLevel>-1&&t>=r.flowLevel;function a(l){return Fde(r,l)}switch(Lde(e,o,r.indent,s,a)){case DH:return e;case kH:return"'"+e.replace(/'/g,"''")+"'";case RH:return"|"+dH(e,r.indent)+CH(hH(e,n));case FH:return">"+dH(e,r.indent)+CH(hH(Mde(e,s),n));case _I:return'"'+Ude(e,s)+'"';default:throw new Bd("impossible error: invalid scalar style")}}()}function dH(r,e){var t=PH(r)?String(e):"",i=r[r.length-1]===` +`,n=i&&(r[r.length-2]===` +`||r===` +`),s=n?"+":i?"":"-";return t+s+` +`}function CH(r){return r[r.length-1]===` +`?r.slice(0,-1):r}function Mde(r,e){for(var t=/(\n+)([^\n]*)/g,i=function(){var c=r.indexOf(` +`);return c=c!==-1?c:r.length,t.lastIndex=c,mH(r.slice(0,c),e)}(),n=r[0]===` +`||r[0]===" ",s,o;o=t.exec(r);){var a=o[1],l=o[2];s=l[0]===" ",i+=a+(!n&&!s&&l!==""?` +`:"")+mH(l,e),n=s}return i}function mH(r,e){if(r===""||r[0]===" ")return r;for(var t=/ [^ ]/g,i,n=0,s,o=0,a=0,l="";i=t.exec(r);)a=i.index,a-n>e&&(s=o>n?o:a,l+=` +`+r.slice(n,s),n=s+1),o=a;return l+=` +`,r.length-n>e&&o>n?l+=r.slice(n,o)+` +`+r.slice(o+1):l+=r.slice(n),l.slice(1)}function Ude(r){for(var e="",t,i,n,s=0;s=55296&&t<=56319&&(i=r.charCodeAt(s+1),i>=56320&&i<=57343)){e+=fH((t-55296)*1024+i-56320+65536),s++;continue}n=Ti[t],e+=!n&&Af(t)?r[s]:n||fH(t)}return e}function Kde(r,e,t){var i="",n=r.tag,s,o;for(s=0,o=t.length;s1024&&(u+="? "),u+=r.dump+(r.condenseFlow?'"':"")+":"+(r.condenseFlow?"":" "),Ic(r,e,c,!1,!1)&&(u+=r.dump,i+=u));r.tag=n,r.dump="{"+i+"}"}function Yde(r,e,t,i){var n="",s=r.tag,o=Object.keys(t),a,l,c,u,g,f;if(r.sortKeys===!0)o.sort();else if(typeof r.sortKeys=="function")o.sort(r.sortKeys);else if(r.sortKeys)throw new Bd("sortKeys must be a boolean or a function");for(a=0,l=o.length;a1024,g&&(r.dump&&yd===r.dump.charCodeAt(0)?f+="?":f+="? "),f+=r.dump,g&&(f+=Dv(r,e)),Ic(r,e+1,u,!0,g)&&(r.dump&&yd===r.dump.charCodeAt(0)?f+=":":f+=": ",f+=r.dump,n+=f));r.tag=s,r.dump=n||"{}"}function EH(r,e,t){var i,n,s,o,a,l;for(n=t?r.explicitTypes:r.implicitTypes,s=0,o=n.length;s tag resolver accepts not "'+l+'" style');r.dump=i}return!0}return!1}function Ic(r,e,t,i,n,s){r.tag=null,r.dump=t,EH(r,t,!1)||EH(r,t,!0);var o=IH.call(r.dump);i&&(i=r.flowLevel<0||r.flowLevel>e);var a=o==="[object Object]"||o==="[object Array]",l,c;if(a&&(l=r.duplicates.indexOf(t),c=l!==-1),(r.tag!==null&&r.tag!=="?"||c||r.indent!==2&&e>0)&&(n=!1),c&&r.usedDuplicates[l])r.dump="*ref_"+l;else{if(a&&c&&!r.usedDuplicates[l]&&(r.usedDuplicates[l]=!0),o==="[object Object]")i&&Object.keys(r.dump).length!==0?(Yde(r,e,r.dump,n),c&&(r.dump="&ref_"+l+r.dump)):(Gde(r,e,r.dump),c&&(r.dump="&ref_"+l+" "+r.dump));else if(o==="[object Array]"){var u=r.noArrayIndent&&e>0?e-1:e;i&&r.dump.length!==0?(Hde(r,u,r.dump,n),c&&(r.dump="&ref_"+l+r.dump)):(Kde(r,u,r.dump),c&&(r.dump="&ref_"+l+" "+r.dump))}else if(o==="[object String]")r.tag!=="?"&&Ode(r,r.dump,e,s);else{if(r.skipInvalid)return!1;throw new Bd("unacceptable kind of an object to dump "+o)}r.tag!==null&&r.tag!=="?"&&(r.dump="!<"+r.tag+"> "+r.dump)}return!0}function jde(r,e){var t=[],i=[],n,s;for(kv(r,t,i),n=0,s=i.length;n{"use strict";var ZI=gH(),LH=TH();function $I(r){return function(){throw new Error("Function "+r+" is deprecated and cannot be used.")}}Tr.exports.Type=Ai();Tr.exports.Schema=dc();Tr.exports.FAILSAFE_SCHEMA=qI();Tr.exports.JSON_SCHEMA=bv();Tr.exports.CORE_SCHEMA=Qv();Tr.exports.DEFAULT_SAFE_SCHEMA=nf();Tr.exports.DEFAULT_FULL_SCHEMA=Ed();Tr.exports.load=ZI.load;Tr.exports.loadAll=ZI.loadAll;Tr.exports.safeLoad=ZI.safeLoad;Tr.exports.safeLoadAll=ZI.safeLoadAll;Tr.exports.dump=LH.dump;Tr.exports.safeDump=LH.safeDump;Tr.exports.YAMLException=tf();Tr.exports.MINIMAL_SCHEMA=qI();Tr.exports.SAFE_SCHEMA=nf();Tr.exports.DEFAULT_SCHEMA=Ed();Tr.exports.scan=$I("scan");Tr.exports.parse=$I("parse");Tr.exports.compose=$I("compose");Tr.exports.addConstructor=$I("addConstructor")});var UH=y((d$e,MH)=>{"use strict";var Jde=OH();MH.exports=Jde});var HH=y((C$e,KH)=>{"use strict";function Wde(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function yc(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,yc)}Wde(yc,Error);yc.buildMessage=function(r,e){var t={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;g({[Ne]:pe})))},H=function(R){return R},j=function(R){return R},$=Ms("correct indentation"),V=" ",W=ar(" ",!1),Z=function(R){return R.length===vA*Gg},A=function(R){return R.length===(vA+1)*Gg},ae=function(){return vA++,!0},ge=function(){return vA--,!0},_=function(){return Lg()},L=Ms("pseudostring"),N=/^[^\r\n\t ?:,\][{}#&*!|>'"%@`\-]/,ue=Fn(["\r",` +`," "," ","?",":",",","]","[","{","}","#","&","*","!","|",">","'",'"',"%","@","`","-"],!0,!1),we=/^[^\r\n\t ,\][{}:#"']/,Te=Fn(["\r",` +`," "," ",",","]","[","{","}",":","#",'"',"'"],!0,!1),Pe=function(){return Lg().replace(/^ *| *$/g,"")},Le="--",se=ar("--",!1),Ae=/^[a-zA-Z\/0-9]/,be=Fn([["a","z"],["A","Z"],"/",["0","9"]],!1,!1),fe=/^[^\r\n\t :,]/,le=Fn(["\r",` +`," "," ",":",","],!0,!1),Ge="null",ie=ar("null",!1),Y=function(){return null},he="true",re=ar("true",!1),me=function(){return!0},tt="false",Rt=ar("false",!1),It=function(){return!1},Ur=Ms("string"),oi='"',pi=ar('"',!1),pr=function(){return""},di=function(R){return R},ai=function(R){return R.join("")},Os=/^[^"\\\0-\x1F\x7F]/,dr=Fn(['"',"\\",["\0",""],"\x7F"],!0,!1),Bi='\\"',_n=ar('\\"',!1),pa=function(){return'"'},EA="\\\\",kg=ar("\\\\",!1),Zn=function(){return"\\"},IA="\\/",da=ar("\\/",!1),Jp=function(){return"/"},yA="\\b",wA=ar("\\b",!1),Br=function(){return"\b"},Vl="\\f",Rg=ar("\\f",!1),Eo=function(){return"\f"},Fg="\\n",Wp=ar("\\n",!1),zp=function(){return` +`},Pr="\\r",oe=ar("\\r",!1),Io=function(){return"\r"},kn="\\t",Ng=ar("\\t",!1),bt=function(){return" "},Xl="\\u",Rn=ar("\\u",!1),$n=function(R,q,pe,Ne){return String.fromCharCode(parseInt(`0x${R}${q}${pe}${Ne}`))},es=/^[0-9a-fA-F]/,ut=Fn([["0","9"],["a","f"],["A","F"]],!1,!1),yo=Ms("blank space"),at=/^[ \t]/,ln=Fn([" "," "],!1,!1),S=Ms("white space"),Lt=/^[ \t\n\r]/,Tg=Fn([" "," ",` +`,"\r"],!1,!1),_l=`\r +`,Vp=ar(`\r +`,!1),Xp=` +`,_p=ar(` +`,!1),Zp="\r",$p=ar("\r",!1),G=0,yt=0,BA=[{line:1,column:1}],Wi=0,Zl=[],We=0,Ca;if("startRule"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');n=i[e.startRule]}function Lg(){return r.substring(yt,G)}function uI(){return cn(yt,G)}function ed(R,q){throw q=q!==void 0?q:cn(yt,G),ec([Ms(R)],r.substring(yt,G),q)}function gI(R,q){throw q=q!==void 0?q:cn(yt,G),Og(R,q)}function ar(R,q){return{type:"literal",text:R,ignoreCase:q}}function Fn(R,q,pe){return{type:"class",parts:R,inverted:q,ignoreCase:pe}}function $l(){return{type:"any"}}function td(){return{type:"end"}}function Ms(R){return{type:"other",description:R}}function ma(R){var q=BA[R],pe;if(q)return q;for(pe=R-1;!BA[pe];)pe--;for(q=BA[pe],q={line:q.line,column:q.column};peWi&&(Wi=G,Zl=[]),Zl.push(R))}function Og(R,q){return new yc(R,null,null,q)}function ec(R,q,pe){return new yc(yc.buildMessage(R,q),R,q,pe)}function Us(){var R;return R=Mg(),R}function tc(){var R,q,pe;for(R=G,q=[],pe=bA();pe!==t;)q.push(pe),pe=bA();return q!==t&&(yt=R,q=s(q)),R=q,R}function bA(){var R,q,pe,Ne,xe;return R=G,q=Ia(),q!==t?(r.charCodeAt(G)===45?(pe=o,G++):(pe=t,We===0&&ke(a)),pe!==t?(Ne=Nr(),Ne!==t?(xe=Ea(),xe!==t?(yt=R,q=l(xe),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R}function Mg(){var R,q,pe;for(R=G,q=[],pe=Ug();pe!==t;)q.push(pe),pe=Ug();return q!==t&&(yt=R,q=c(q)),R=q,R}function Ug(){var R,q,pe,Ne,xe,qe,dt,Ft,Nn;if(R=G,q=Nr(),q===t&&(q=null),q!==t){if(pe=G,r.charCodeAt(G)===35?(Ne=u,G++):(Ne=t,We===0&&ke(g)),Ne!==t){if(xe=[],qe=G,dt=G,We++,Ft=Gs(),We--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,We===0&&ke(f)),Ft!==t?(dt=[dt,Ft],qe=dt):(G=qe,qe=t)):(G=qe,qe=t),qe!==t)for(;qe!==t;)xe.push(qe),qe=G,dt=G,We++,Ft=Gs(),We--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,We===0&&ke(f)),Ft!==t?(dt=[dt,Ft],qe=dt):(G=qe,qe=t)):(G=qe,qe=t);else xe=t;xe!==t?(Ne=[Ne,xe],pe=Ne):(G=pe,pe=t)}else G=pe,pe=t;if(pe===t&&(pe=null),pe!==t){if(Ne=[],xe=Hs(),xe!==t)for(;xe!==t;)Ne.push(xe),xe=Hs();else Ne=t;Ne!==t?(yt=R,q=h(),R=q):(G=R,R=t)}else G=R,R=t}else G=R,R=t;if(R===t&&(R=G,q=Ia(),q!==t?(pe=rc(),pe!==t?(Ne=Nr(),Ne===t&&(Ne=null),Ne!==t?(r.charCodeAt(G)===58?(xe=p,G++):(xe=t,We===0&&ke(C)),xe!==t?(qe=Nr(),qe===t&&(qe=null),qe!==t?(dt=Ea(),dt!==t?(yt=R,q=w(pe,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=Ia(),q!==t?(pe=Ks(),pe!==t?(Ne=Nr(),Ne===t&&(Ne=null),Ne!==t?(r.charCodeAt(G)===58?(xe=p,G++):(xe=t,We===0&&ke(C)),xe!==t?(qe=Nr(),qe===t&&(qe=null),qe!==t?(dt=Ea(),dt!==t?(yt=R,q=w(pe,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))){if(R=G,q=Ia(),q!==t)if(pe=Ks(),pe!==t)if(Ne=Nr(),Ne!==t)if(xe=fI(),xe!==t){if(qe=[],dt=Hs(),dt!==t)for(;dt!==t;)qe.push(dt),dt=Hs();else qe=t;qe!==t?(yt=R,q=w(pe,xe),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;else G=R,R=t;else G=R,R=t;if(R===t)if(R=G,q=Ia(),q!==t)if(pe=Ks(),pe!==t){if(Ne=[],xe=G,qe=Nr(),qe===t&&(qe=null),qe!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,We===0&&ke(v)),dt!==t?(Ft=Nr(),Ft===t&&(Ft=null),Ft!==t?(Nn=Ks(),Nn!==t?(yt=xe,qe=D(pe,Nn),xe=qe):(G=xe,xe=t)):(G=xe,xe=t)):(G=xe,xe=t)):(G=xe,xe=t),xe!==t)for(;xe!==t;)Ne.push(xe),xe=G,qe=Nr(),qe===t&&(qe=null),qe!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,We===0&&ke(v)),dt!==t?(Ft=Nr(),Ft===t&&(Ft=null),Ft!==t?(Nn=Ks(),Nn!==t?(yt=xe,qe=D(pe,Nn),xe=qe):(G=xe,xe=t)):(G=xe,xe=t)):(G=xe,xe=t)):(G=xe,xe=t);else Ne=t;Ne!==t?(xe=Nr(),xe===t&&(xe=null),xe!==t?(r.charCodeAt(G)===58?(qe=p,G++):(qe=t,We===0&&ke(C)),qe!==t?(dt=Nr(),dt===t&&(dt=null),dt!==t?(Ft=Ea(),Ft!==t?(yt=R,q=T(pe,Ne,Ft),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)}else G=R,R=t;else G=R,R=t}return R}function Ea(){var R,q,pe,Ne,xe,qe,dt;if(R=G,q=G,We++,pe=G,Ne=Gs(),Ne!==t?(xe=$e(),xe!==t?(r.charCodeAt(G)===45?(qe=o,G++):(qe=t,We===0&&ke(a)),qe!==t?(dt=Nr(),dt!==t?(Ne=[Ne,xe,qe,dt],pe=Ne):(G=pe,pe=t)):(G=pe,pe=t)):(G=pe,pe=t)):(G=pe,pe=t),We--,pe!==t?(G=q,q=void 0):q=t,q!==t?(pe=Hs(),pe!==t?(Ne=wo(),Ne!==t?(xe=tc(),xe!==t?(qe=QA(),qe!==t?(yt=R,q=H(xe),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=Gs(),q!==t?(pe=wo(),pe!==t?(Ne=Mg(),Ne!==t?(xe=QA(),xe!==t?(yt=R,q=H(Ne),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))if(R=G,q=ic(),q!==t){if(pe=[],Ne=Hs(),Ne!==t)for(;Ne!==t;)pe.push(Ne),Ne=Hs();else pe=t;pe!==t?(yt=R,q=j(q),R=q):(G=R,R=t)}else G=R,R=t;return R}function Ia(){var R,q,pe;for(We++,R=G,q=[],r.charCodeAt(G)===32?(pe=V,G++):(pe=t,We===0&&ke(W));pe!==t;)q.push(pe),r.charCodeAt(G)===32?(pe=V,G++):(pe=t,We===0&&ke(W));return q!==t?(yt=G,pe=Z(q),pe?pe=void 0:pe=t,pe!==t?(q=[q,pe],R=q):(G=R,R=t)):(G=R,R=t),We--,R===t&&(q=t,We===0&&ke($)),R}function $e(){var R,q,pe;for(R=G,q=[],r.charCodeAt(G)===32?(pe=V,G++):(pe=t,We===0&&ke(W));pe!==t;)q.push(pe),r.charCodeAt(G)===32?(pe=V,G++):(pe=t,We===0&&ke(W));return q!==t?(yt=G,pe=A(q),pe?pe=void 0:pe=t,pe!==t?(q=[q,pe],R=q):(G=R,R=t)):(G=R,R=t),R}function wo(){var R;return yt=G,R=ae(),R?R=void 0:R=t,R}function QA(){var R;return yt=G,R=ge(),R?R=void 0:R=t,R}function rc(){var R;return R=nc(),R===t&&(R=rd()),R}function Ks(){var R,q,pe;if(R=nc(),R===t){if(R=G,q=[],pe=Kg(),pe!==t)for(;pe!==t;)q.push(pe),pe=Kg();else q=t;q!==t&&(yt=R,q=_()),R=q}return R}function ic(){var R;return R=id(),R===t&&(R=hI(),R===t&&(R=nc(),R===t&&(R=rd()))),R}function fI(){var R;return R=id(),R===t&&(R=nc(),R===t&&(R=Kg())),R}function rd(){var R,q,pe,Ne,xe,qe;if(We++,R=G,N.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,We===0&&ke(ue)),q!==t){for(pe=[],Ne=G,xe=Nr(),xe===t&&(xe=null),xe!==t?(we.test(r.charAt(G))?(qe=r.charAt(G),G++):(qe=t,We===0&&ke(Te)),qe!==t?(xe=[xe,qe],Ne=xe):(G=Ne,Ne=t)):(G=Ne,Ne=t);Ne!==t;)pe.push(Ne),Ne=G,xe=Nr(),xe===t&&(xe=null),xe!==t?(we.test(r.charAt(G))?(qe=r.charAt(G),G++):(qe=t,We===0&&ke(Te)),qe!==t?(xe=[xe,qe],Ne=xe):(G=Ne,Ne=t)):(G=Ne,Ne=t);pe!==t?(yt=R,q=Pe(),R=q):(G=R,R=t)}else G=R,R=t;return We--,R===t&&(q=t,We===0&&ke(L)),R}function Kg(){var R,q,pe,Ne,xe;if(R=G,r.substr(G,2)===Le?(q=Le,G+=2):(q=t,We===0&&ke(se)),q===t&&(q=null),q!==t)if(Ae.test(r.charAt(G))?(pe=r.charAt(G),G++):(pe=t,We===0&&ke(be)),pe!==t){for(Ne=[],fe.test(r.charAt(G))?(xe=r.charAt(G),G++):(xe=t,We===0&&ke(le));xe!==t;)Ne.push(xe),fe.test(r.charAt(G))?(xe=r.charAt(G),G++):(xe=t,We===0&&ke(le));Ne!==t?(yt=R,q=Pe(),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;return R}function id(){var R,q;return R=G,r.substr(G,4)===Ge?(q=Ge,G+=4):(q=t,We===0&&ke(ie)),q!==t&&(yt=R,q=Y()),R=q,R}function hI(){var R,q;return R=G,r.substr(G,4)===he?(q=he,G+=4):(q=t,We===0&&ke(re)),q!==t&&(yt=R,q=me()),R=q,R===t&&(R=G,r.substr(G,5)===tt?(q=tt,G+=5):(q=t,We===0&&ke(Rt)),q!==t&&(yt=R,q=It()),R=q),R}function nc(){var R,q,pe,Ne;return We++,R=G,r.charCodeAt(G)===34?(q=oi,G++):(q=t,We===0&&ke(pi)),q!==t?(r.charCodeAt(G)===34?(pe=oi,G++):(pe=t,We===0&&ke(pi)),pe!==t?(yt=R,q=pr(),R=q):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,r.charCodeAt(G)===34?(q=oi,G++):(q=t,We===0&&ke(pi)),q!==t?(pe=pI(),pe!==t?(r.charCodeAt(G)===34?(Ne=oi,G++):(Ne=t,We===0&&ke(pi)),Ne!==t?(yt=R,q=di(pe),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)),We--,R===t&&(q=t,We===0&&ke(Ur)),R}function pI(){var R,q,pe;if(R=G,q=[],pe=Hg(),pe!==t)for(;pe!==t;)q.push(pe),pe=Hg();else q=t;return q!==t&&(yt=R,q=ai(q)),R=q,R}function Hg(){var R,q,pe,Ne,xe,qe;return Os.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,We===0&&ke(dr)),R===t&&(R=G,r.substr(G,2)===Bi?(q=Bi,G+=2):(q=t,We===0&&ke(_n)),q!==t&&(yt=R,q=pa()),R=q,R===t&&(R=G,r.substr(G,2)===EA?(q=EA,G+=2):(q=t,We===0&&ke(kg)),q!==t&&(yt=R,q=Zn()),R=q,R===t&&(R=G,r.substr(G,2)===IA?(q=IA,G+=2):(q=t,We===0&&ke(da)),q!==t&&(yt=R,q=Jp()),R=q,R===t&&(R=G,r.substr(G,2)===yA?(q=yA,G+=2):(q=t,We===0&&ke(wA)),q!==t&&(yt=R,q=Br()),R=q,R===t&&(R=G,r.substr(G,2)===Vl?(q=Vl,G+=2):(q=t,We===0&&ke(Rg)),q!==t&&(yt=R,q=Eo()),R=q,R===t&&(R=G,r.substr(G,2)===Fg?(q=Fg,G+=2):(q=t,We===0&&ke(Wp)),q!==t&&(yt=R,q=zp()),R=q,R===t&&(R=G,r.substr(G,2)===Pr?(q=Pr,G+=2):(q=t,We===0&&ke(oe)),q!==t&&(yt=R,q=Io()),R=q,R===t&&(R=G,r.substr(G,2)===kn?(q=kn,G+=2):(q=t,We===0&&ke(Ng)),q!==t&&(yt=R,q=bt()),R=q,R===t&&(R=G,r.substr(G,2)===Xl?(q=Xl,G+=2):(q=t,We===0&&ke(Rn)),q!==t?(pe=SA(),pe!==t?(Ne=SA(),Ne!==t?(xe=SA(),xe!==t?(qe=SA(),qe!==t?(yt=R,q=$n(pe,Ne,xe,qe),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)))))))))),R}function SA(){var R;return es.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,We===0&&ke(ut)),R}function Nr(){var R,q;if(We++,R=[],at.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,We===0&&ke(ln)),q!==t)for(;q!==t;)R.push(q),at.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,We===0&&ke(ln));else R=t;return We--,R===t&&(q=t,We===0&&ke(yo)),R}function dI(){var R,q;if(We++,R=[],Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,We===0&&ke(Tg)),q!==t)for(;q!==t;)R.push(q),Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,We===0&&ke(Tg));else R=t;return We--,R===t&&(q=t,We===0&&ke(S)),R}function Hs(){var R,q,pe,Ne,xe,qe;if(R=G,q=Gs(),q!==t){for(pe=[],Ne=G,xe=Nr(),xe===t&&(xe=null),xe!==t?(qe=Gs(),qe!==t?(xe=[xe,qe],Ne=xe):(G=Ne,Ne=t)):(G=Ne,Ne=t);Ne!==t;)pe.push(Ne),Ne=G,xe=Nr(),xe===t&&(xe=null),xe!==t?(qe=Gs(),qe!==t?(xe=[xe,qe],Ne=xe):(G=Ne,Ne=t)):(G=Ne,Ne=t);pe!==t?(q=[q,pe],R=q):(G=R,R=t)}else G=R,R=t;return R}function Gs(){var R;return r.substr(G,2)===_l?(R=_l,G+=2):(R=t,We===0&&ke(Vp)),R===t&&(r.charCodeAt(G)===10?(R=Xp,G++):(R=t,We===0&&ke(_p)),R===t&&(r.charCodeAt(G)===13?(R=Zp,G++):(R=t,We===0&&ke($p)))),R}let Gg=2,vA=0;if(Ca=n(),Ca!==t&&G===r.length)return Ca;throw Ca!==t&&G{"use strict";var $de=r=>{let e=!1,t=!1,i=!1;for(let n=0;n{if(!(typeof r=="string"||Array.isArray(r)))throw new TypeError("Expected the input to be `string | string[]`");e=Object.assign({pascalCase:!1},e);let t=n=>e.pascalCase?n.charAt(0).toUpperCase()+n.slice(1):n;return Array.isArray(r)?r=r.map(n=>n.trim()).filter(n=>n.length).join("-"):r=r.trim(),r.length===0?"":r.length===1?e.pascalCase?r.toUpperCase():r.toLowerCase():(r!==r.toLowerCase()&&(r=$de(r)),r=r.replace(/^[_.\- ]+/,"").toLowerCase().replace(/[_.\- ]+(\w|$)/g,(n,s)=>s.toUpperCase()).replace(/\d+(\w|$)/g,n=>n.toUpperCase()),t(r))};Tv.exports=JH;Tv.exports.default=JH});var zH=y((B$e,eCe)=>{eCe.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Appcircle",constant:"APPCIRCLE",env:"AC_APPCIRCLE"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codefresh",constant:"CODEFRESH",env:"CF_BUILD_ID",pr:{any:["CF_PULL_REQUEST_NUMBER","CF_PULL_REQUEST_ID"]}},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitHub Actions",constant:"GITHUB_ACTIONS",env:"GITHUB_ACTIONS",pr:{GITHUB_EVENT_NAME:"pull_request"}},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI",pr:"CI_MERGE_REQUEST_ID"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"LayerCI",constant:"LAYERCI",env:"LAYERCI",pr:"LAYERCI_PULL_REQUEST"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Nevercode",constant:"NEVERCODE",env:"NEVERCODE",pr:{env:"NEVERCODE_PULL_REQUEST",ne:"false"}},{name:"Render",constant:"RENDER",env:"RENDER",pr:{IS_PULL_REQUEST:"true"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Screwdriver",constant:"SCREWDRIVER",env:"SCREWDRIVER",pr:{env:"SD_PULL_REQUEST",ne:"false"}},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}},{name:"Vercel",constant:"VERCEL",env:"NOW_BUILDER"},{name:"Visual Studio App Center",constant:"APPCENTER",env:"APPCENTER_BUILD_ID"}]});var wc=y(Mn=>{"use strict";var XH=zH(),vo=process.env;Object.defineProperty(Mn,"_vendors",{value:XH.map(function(r){return r.constant})});Mn.name=null;Mn.isPR=null;XH.forEach(function(r){let t=(Array.isArray(r.env)?r.env:[r.env]).every(function(i){return VH(i)});if(Mn[r.constant]=t,t)switch(Mn.name=r.name,typeof r.pr){case"string":Mn.isPR=!!vo[r.pr];break;case"object":"env"in r.pr?Mn.isPR=r.pr.env in vo&&vo[r.pr.env]!==r.pr.ne:"any"in r.pr?Mn.isPR=r.pr.any.some(function(i){return!!vo[i]}):Mn.isPR=VH(r.pr);break;default:Mn.isPR=null}});Mn.isCI=!!(vo.CI||vo.CONTINUOUS_INTEGRATION||vo.BUILD_NUMBER||vo.RUN_ID||Mn.name);function VH(r){return typeof r=="string"?!!vo[r]:Object.keys(r).every(function(e){return vo[e]===r[e]})}});var ry=y(Un=>{"use strict";Object.defineProperty(Un,"__esModule",{value:!0});var tCe=0,rCe=1,iCe=2,nCe="",sCe="\0",oCe=-1,aCe=/^(-h|--help)(?:=([0-9]+))?$/,ACe=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,lCe=/^-[a-zA-Z]{2,}$/,cCe=/^([^=]+)=([\s\S]*)$/,uCe=process.env.DEBUG_CLI==="1";Un.BATCH_REGEX=lCe;Un.BINDING_REGEX=cCe;Un.DEBUG=uCe;Un.END_OF_INPUT=sCe;Un.HELP_COMMAND_INDEX=oCe;Un.HELP_REGEX=aCe;Un.NODE_ERRORED=iCe;Un.NODE_INITIAL=tCe;Un.NODE_SUCCESS=rCe;Un.OPTION_REGEX=ACe;Un.START_OF_INPUT=nCe});var iy=y(Qd=>{"use strict";Object.defineProperty(Qd,"__esModule",{value:!0});var gCe=ry(),Lv=class extends Error{constructor(e){super(e),this.clipanion={type:"usage"},this.name="UsageError"}},Ov=class extends Error{constructor(e,t){if(super(),this.input=e,this.candidates=t,this.clipanion={type:"none"},this.name="UnknownSyntaxError",this.candidates.length===0)this.message="Command not found, but we're not sure what's the alternative.";else if(this.candidates.every(i=>i.reason!==null&&i.reason===t[0].reason)){let[{reason:i}]=this.candidates;this.message=`${i} + +${this.candidates.map(({usage:n})=>`$ ${n}`).join(` +`)}`}else if(this.candidates.length===1){let[{usage:i}]=this.candidates;this.message=`Command not found; did you mean: + +$ ${i} +${Uv(e)}`}else this.message=`Command not found; did you mean one of: + +${this.candidates.map(({usage:i},n)=>`${`${n}.`.padStart(4)} ${i}`).join(` +`)} + +${Uv(e)}`}},Mv=class extends Error{constructor(e,t){super(),this.input=e,this.usages=t,this.clipanion={type:"none"},this.name="AmbiguousSyntaxError",this.message=`Cannot find which to pick amongst the following alternatives: + +${this.usages.map((i,n)=>`${`${n}.`.padStart(4)} ${i}`).join(` +`)} + +${Uv(e)}`}},Uv=r=>`While running ${r.filter(e=>e!==gCe.END_OF_INPUT).map(e=>{let t=JSON.stringify(e);return e.match(/\s/)||e.length===0||t!==`"${e}"`?t:e}).join(" ")}`;Qd.AmbiguousSyntaxError=Mv;Qd.UnknownSyntaxError=Ov;Qd.UsageError=Lv});var va=y(TA=>{"use strict";Object.defineProperty(TA,"__esModule",{value:!0});var _H=iy(),ZH=Symbol("clipanion/isOption");function fCe(r){return{...r,[ZH]:!0}}function hCe(r,e){return typeof r>"u"?[r,e]:typeof r=="object"&&r!==null&&!Array.isArray(r)?[void 0,r]:[r,e]}function Kv(r,e=!1){let t=r.replace(/^\.: /,"");return e&&(t=t[0].toLowerCase()+t.slice(1)),t}function $H(r,e){return e.length===1?new _H.UsageError(`${r}: ${Kv(e[0],!0)}`):new _H.UsageError(`${r}: +${e.map(t=>` +- ${Kv(t)}`).join("")}`)}function pCe(r,e,t){if(typeof t>"u")return e;let i=[],n=[],s=a=>{let l=e;return e=a,s.bind(null,l)};if(!t(e,{errors:i,coercions:n,coercion:s}))throw $H(`Invalid value for ${r}`,i);for(let[,a]of n)a();return e}TA.applyValidator=pCe;TA.cleanValidationError=Kv;TA.formatError=$H;TA.isOptionSymbol=ZH;TA.makeCommandOption=fCe;TA.rerouteArguments=hCe});var ns=y(st=>{"use strict";Object.defineProperty(st,"__esModule",{value:!0});var eG=/^[a-zA-Z_][a-zA-Z0-9_]*$/,tG=/^#[0-9a-f]{6}$/i,rG=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,iG=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,nG=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,Hv=/^(?:[1-9]\d{3}(-?)(?:(?:0[1-9]|1[0-2])\1(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])\1(?:29|30)|(?:0[13578]|1[02])(?:\1)31|00[1-9]|0[1-9]\d|[12]\d{2}|3(?:[0-5]\d|6[0-5]))|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\2)29|-?366))T(?:[01]\d|2[0-3])(:?)[0-5]\d(?:\3[0-5]\d)?(?:Z|[+-][01]\d(?:\3[0-5]\d)?)$/,sG=r=>()=>r;function Qt({test:r}){return sG(r)()}function Zr(r){return r===null?"null":r===void 0?"undefined":r===""?"an empty string":JSON.stringify(r)}function LA(r,e){var t,i,n;return typeof e=="number"?`${(t=r==null?void 0:r.p)!==null&&t!==void 0?t:"."}[${e}]`:eG.test(e)?`${(i=r==null?void 0:r.p)!==null&&i!==void 0?i:""}.${e}`:`${(n=r==null?void 0:r.p)!==null&&n!==void 0?n:"."}[${JSON.stringify(e)}]`}function Bc(r,e){return t=>{let i=r[e];return r[e]=t,Bc(r,e).bind(null,i)}}function oG(r,e){return t=>{r[e]=t}}function ny(r,e,t){return r===1?e:t}function pt({errors:r,p:e}={},t){return r==null||r.push(`${e!=null?e:"."}: ${t}`),!1}var aG=()=>Qt({test:(r,e)=>!0});function dCe(r){return Qt({test:(e,t)=>e!==r?pt(t,`Expected a literal (got ${Zr(r)})`):!0})}var CCe=()=>Qt({test:(r,e)=>typeof r!="string"?pt(e,`Expected a string (got ${Zr(r)})`):!0});function mCe(r){let e=Array.isArray(r)?r:Object.values(r),t=new Set(e);return Qt({test:(i,n)=>t.has(i)?!0:pt(n,`Expected a valid enumeration value (got ${Zr(i)})`)})}var ECe=new Map([["true",!0],["True",!0],["1",!0],[1,!0],["false",!1],["False",!1],["0",!1],[0,!1]]),ICe=()=>Qt({test:(r,e)=>{var t;if(typeof r!="boolean"){if(typeof(e==null?void 0:e.coercions)<"u"){if(typeof(e==null?void 0:e.coercion)>"u")return pt(e,"Unbound coercion result");let i=ECe.get(r);if(typeof i<"u")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:".",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a boolean (got ${Zr(r)})`)}return!0}}),yCe=()=>Qt({test:(r,e)=>{var t;if(typeof r!="number"){if(typeof(e==null?void 0:e.coercions)<"u"){if(typeof(e==null?void 0:e.coercion)>"u")return pt(e,"Unbound coercion result");let i;if(typeof r=="string"){let n;try{n=JSON.parse(r)}catch{}if(typeof n=="number")if(JSON.stringify(n)===r)i=n;else return pt(e,`Received a number that can't be safely represented by the runtime (${r})`)}if(typeof i<"u")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:".",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a number (got ${Zr(r)})`)}return!0}}),wCe=()=>Qt({test:(r,e)=>{var t;if(!(r instanceof Date)){if(typeof(e==null?void 0:e.coercions)<"u"){if(typeof(e==null?void 0:e.coercion)>"u")return pt(e,"Unbound coercion result");let i;if(typeof r=="string"&&Hv.test(r))i=new Date(r);else{let n;if(typeof r=="string"){let s;try{s=JSON.parse(r)}catch{}typeof s=="number"&&(n=s)}else typeof r=="number"&&(n=r);if(typeof n<"u")if(Number.isSafeInteger(n)||!Number.isSafeInteger(n*1e3))i=new Date(n*1e3);else return pt(e,`Received a timestamp that can't be safely represented by the runtime (${r})`)}if(typeof i<"u")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:".",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a date (got ${Zr(r)})`)}return!0}}),BCe=(r,{delimiter:e}={})=>Qt({test:(t,i)=>{var n;if(typeof t=="string"&&typeof e<"u"&&typeof(i==null?void 0:i.coercions)<"u"){if(typeof(i==null?void 0:i.coercion)>"u")return pt(i,"Unbound coercion result");t=t.split(e),i.coercions.push([(n=i.p)!==null&&n!==void 0?n:".",i.coercion.bind(null,t)])}if(!Array.isArray(t))return pt(i,`Expected an array (got ${Zr(t)})`);let s=!0;for(let o=0,a=t.length;o{let t=AG(r.length);return Qt({test:(i,n)=>{var s;if(typeof i=="string"&&typeof e<"u"&&typeof(n==null?void 0:n.coercions)<"u"){if(typeof(n==null?void 0:n.coercion)>"u")return pt(n,"Unbound coercion result");i=i.split(e),n.coercions.push([(s=n.p)!==null&&s!==void 0?s:".",n.coercion.bind(null,i)])}if(!Array.isArray(i))return pt(n,`Expected a tuple (got ${Zr(i)})`);let o=t(i,Object.assign({},n));for(let a=0,l=i.length;aQt({test:(t,i)=>{if(typeof t!="object"||t===null)return pt(i,`Expected an object (got ${Zr(t)})`);let n=Object.keys(t),s=!0;for(let o=0,a=n.length;o{let t=Object.keys(r);return Qt({test:(i,n)=>{if(typeof i!="object"||i===null)return pt(n,`Expected an object (got ${Zr(i)})`);let s=new Set([...t,...Object.keys(i)]),o={},a=!0;for(let l of s){if(l==="constructor"||l==="__proto__")a=pt(Object.assign(Object.assign({},n),{p:LA(n,l)}),"Unsafe property name");else{let c=Object.prototype.hasOwnProperty.call(r,l)?r[l]:void 0,u=Object.prototype.hasOwnProperty.call(i,l)?i[l]:void 0;typeof c<"u"?a=c(u,Object.assign(Object.assign({},n),{p:LA(n,l),coercion:Bc(i,l)}))&&a:e===null?a=pt(Object.assign(Object.assign({},n),{p:LA(n,l)}),`Extraneous property (got ${Zr(u)})`):Object.defineProperty(o,l,{enumerable:!0,get:()=>u,set:oG(i,l)})}if(!a&&(n==null?void 0:n.errors)==null)break}return e!==null&&(a||(n==null?void 0:n.errors)!=null)&&(a=e(o,n)&&a),a}})},vCe=r=>Qt({test:(e,t)=>e instanceof r?!0:pt(t,`Expected an instance of ${r.name} (got ${Zr(e)})`)}),xCe=(r,{exclusive:e=!1}={})=>Qt({test:(t,i)=>{var n,s,o;let a=[],l=typeof(i==null?void 0:i.errors)<"u"?[]:void 0;for(let c=0,u=r.length;c1?pt(i,`Expected to match exactly a single predicate (matched ${a.join(", ")})`):(o=i==null?void 0:i.errors)===null||o===void 0||o.push(...l),!1}}),PCe=(r,e)=>Qt({test:(t,i)=>{var n,s;let o={value:t},a=typeof(i==null?void 0:i.coercions)<"u"?Bc(o,"value"):void 0,l=typeof(i==null?void 0:i.coercions)<"u"?[]:void 0;if(!r(t,Object.assign(Object.assign({},i),{coercion:a,coercions:l})))return!1;let c=[];if(typeof l<"u")for(let[,u]of l)c.push(u());try{if(typeof(i==null?void 0:i.coercions)<"u"){if(o.value!==t){if(typeof(i==null?void 0:i.coercion)>"u")return pt(i,"Unbound coercion result");i.coercions.push([(n=i.p)!==null&&n!==void 0?n:".",i.coercion.bind(null,o.value)])}(s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...l)}return e.every(u=>u(o.value,i))}finally{for(let u of c)u()}}}),DCe=r=>Qt({test:(e,t)=>typeof e>"u"?!0:r(e,t)}),kCe=r=>Qt({test:(e,t)=>e===null?!0:r(e,t)}),RCe=r=>Qt({test:(e,t)=>e.length>=r?!0:pt(t,`Expected to have a length of at least ${r} elements (got ${e.length})`)}),FCe=r=>Qt({test:(e,t)=>e.length<=r?!0:pt(t,`Expected to have a length of at most ${r} elements (got ${e.length})`)}),AG=r=>Qt({test:(e,t)=>e.length!==r?pt(t,`Expected to have a length of exactly ${r} elements (got ${e.length})`):!0}),NCe=({map:r}={})=>Qt({test:(e,t)=>{let i=new Set,n=new Set;for(let s=0,o=e.length;sQt({test:(r,e)=>r<=0?!0:pt(e,`Expected to be negative (got ${r})`)}),LCe=()=>Qt({test:(r,e)=>r>=0?!0:pt(e,`Expected to be positive (got ${r})`)}),OCe=r=>Qt({test:(e,t)=>e>=r?!0:pt(t,`Expected to be at least ${r} (got ${e})`)}),MCe=r=>Qt({test:(e,t)=>e<=r?!0:pt(t,`Expected to be at most ${r} (got ${e})`)}),UCe=(r,e)=>Qt({test:(t,i)=>t>=r&&t<=e?!0:pt(i,`Expected to be in the [${r}; ${e}] range (got ${t})`)}),KCe=(r,e)=>Qt({test:(t,i)=>t>=r&&tQt({test:(e,t)=>e!==Math.round(e)?pt(t,`Expected to be an integer (got ${e})`):Number.isSafeInteger(e)?!0:pt(t,`Expected to be a safe integer (got ${e})`)}),GCe=r=>Qt({test:(e,t)=>r.test(e)?!0:pt(t,`Expected to match the pattern ${r.toString()} (got ${Zr(e)})`)}),YCe=()=>Qt({test:(r,e)=>r!==r.toLowerCase()?pt(e,`Expected to be all-lowercase (got ${r})`):!0}),jCe=()=>Qt({test:(r,e)=>r!==r.toUpperCase()?pt(e,`Expected to be all-uppercase (got ${r})`):!0}),qCe=()=>Qt({test:(r,e)=>nG.test(r)?!0:pt(e,`Expected to be a valid UUID v4 (got ${Zr(r)})`)}),JCe=()=>Qt({test:(r,e)=>Hv.test(r)?!1:pt(e,`Expected to be a valid ISO 8601 date string (got ${Zr(r)})`)}),WCe=({alpha:r=!1})=>Qt({test:(e,t)=>(r?tG.test(e):rG.test(e))?!0:pt(t,`Expected to be a valid hexadecimal color string (got ${Zr(e)})`)}),zCe=()=>Qt({test:(r,e)=>iG.test(r)?!0:pt(e,`Expected to be a valid base 64 string (got ${Zr(r)})`)}),VCe=(r=aG())=>Qt({test:(e,t)=>{let i;try{i=JSON.parse(e)}catch{return pt(t,`Expected to be a valid JSON string (got ${Zr(e)})`)}return r(i,t)}}),XCe=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)||s.push(o);return s.length>0?pt(i,`Missing required ${ny(s.length,"property","properties")} ${s.map(o=>`"${o}"`).join(", ")}`):!0}})},_Ce=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>0?pt(i,`Forbidden ${ny(s.length,"property","properties")} ${s.map(o=>`"${o}"`).join(", ")}`):!0}})},ZCe=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>1?pt(i,`Mutually exclusive properties ${s.map(o=>`"${o}"`).join(", ")}`):!0}})};(function(r){r.Forbids="Forbids",r.Requires="Requires"})(st.KeyRelationship||(st.KeyRelationship={}));var $Ce={[st.KeyRelationship.Forbids]:{expect:!1,message:"forbids using"},[st.KeyRelationship.Requires]:{expect:!0,message:"requires using"}},eme=(r,e,t,{ignore:i=[]}={})=>{let n=new Set(i),s=new Set(t),o=$Ce[e];return Qt({test:(a,l)=>{let c=new Set(Object.keys(a));if(!c.has(r)||n.has(a[r]))return!0;let u=[];for(let g of s)(c.has(g)&&!n.has(a[g]))!==o.expect&&u.push(g);return u.length>=1?pt(l,`Property "${r}" ${o.message} ${ny(u.length,"property","properties")} ${u.map(g=>`"${g}"`).join(", ")}`):!0}})};st.applyCascade=PCe;st.base64RegExp=iG;st.colorStringAlphaRegExp=rG;st.colorStringRegExp=tG;st.computeKey=LA;st.getPrintable=Zr;st.hasExactLength=AG;st.hasForbiddenKeys=_Ce;st.hasKeyRelationship=eme;st.hasMaxLength=FCe;st.hasMinLength=RCe;st.hasMutuallyExclusiveKeys=ZCe;st.hasRequiredKeys=XCe;st.hasUniqueItems=NCe;st.isArray=BCe;st.isAtLeast=OCe;st.isAtMost=MCe;st.isBase64=zCe;st.isBoolean=ICe;st.isDate=wCe;st.isDict=QCe;st.isEnum=mCe;st.isHexColor=WCe;st.isISO8601=JCe;st.isInExclusiveRange=KCe;st.isInInclusiveRange=UCe;st.isInstanceOf=vCe;st.isInteger=HCe;st.isJSON=VCe;st.isLiteral=dCe;st.isLowerCase=YCe;st.isNegative=TCe;st.isNullable=kCe;st.isNumber=yCe;st.isObject=SCe;st.isOneOf=xCe;st.isOptional=DCe;st.isPositive=LCe;st.isString=CCe;st.isTuple=bCe;st.isUUID4=qCe;st.isUnknown=aG;st.isUpperCase=jCe;st.iso8601RegExp=Hv;st.makeCoercionFn=Bc;st.makeSetter=oG;st.makeTrait=sG;st.makeValidator=Qt;st.matchesRegExp=GCe;st.plural=ny;st.pushError=pt;st.simpleKeyRegExp=eG;st.uuid4RegExp=nG});var bc=y(Gv=>{"use strict";Object.defineProperty(Gv,"__esModule",{value:!0});var lG=va();function tme(r){if(r&&r.__esModule)return r;var e=Object.create(null);return r&&Object.keys(r).forEach(function(t){if(t!=="default"){var i=Object.getOwnPropertyDescriptor(r,t);Object.defineProperty(e,t,i.get?i:{enumerable:!0,get:function(){return r[t]}})}}),e.default=r,Object.freeze(e)}var Sd=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let t=this.constructor.schema;if(Array.isArray(t)){let{isDict:n,isUnknown:s,applyCascade:o}=await Promise.resolve().then(function(){return tme(ns())}),a=o(n(s()),t),l=[],c=[];if(!a(this,{errors:l,coercions:c}))throw lG.formatError("Invalid option schema",l);for(let[,g]of c)g()}else if(t!=null)throw new Error("Invalid command schema");let i=await this.execute();return typeof i<"u"?i:0}};Sd.isOption=lG.isOptionSymbol;Sd.Default=[];Gv.Command=Sd});var jv=y(vd=>{"use strict";Object.defineProperty(vd,"__esModule",{value:!0});var cG=80,Yv=Array(cG).fill("\u2501");for(let r=0;r<=24;++r)Yv[Yv.length-r]=`\x1B[38;5;${232+r}m\u2501`;var rme={header:r=>`\x1B[1m\u2501\u2501\u2501 ${r}${r.length`\x1B[1m${r}\x1B[22m`,error:r=>`\x1B[31m\x1B[1m${r}\x1B[22m\x1B[39m`,code:r=>`\x1B[36m${r}\x1B[39m`},ime={header:r=>r,bold:r=>r,error:r=>r,code:r=>r};function nme(r){let e=r.split(` +`),t=e.filter(n=>n.match(/\S/)),i=t.length>0?t.reduce((n,s)=>Math.min(n,s.length-s.trimStart().length),Number.MAX_VALUE):0;return e.map(n=>n.slice(i).trimRight()).join(` +`)}function sme(r,{format:e,paragraphs:t}){return r=r.replace(/\r\n?/g,` +`),r=nme(r),r=r.replace(/^\n+|\n+$/g,""),r=r.replace(/^(\s*)-([^\n]*?)\n+/gm,`$1-$2 + +`),r=r.replace(/\n(\n)?\n*/g,"$1"),t&&(r=r.split(/\n/).map(i=>{let n=i.match(/^\s*[*-][\t ]+(.*)/);if(!n)return i.match(/(.{1,80})(?: |$)/g).join(` +`);let s=i.length-i.trimStart().length;return n[1].match(new RegExp(`(.{1,${78-s}})(?: |$)`,"g")).map((o,a)=>" ".repeat(s)+(a===0?"- ":" ")+o).join(` +`)}).join(` + +`)),r=r.replace(/(`+)((?:.|[\n])*?)\1/g,(i,n,s)=>e.code(n+s+n)),r=r.replace(/(\*\*)((?:.|[\n])*?)\1/g,(i,n,s)=>e.bold(n+s+n)),r?`${r} +`:""}vd.formatMarkdownish=sme;vd.richFormat=rme;vd.textFormat=ime});var ly=y(Ar=>{"use strict";Object.defineProperty(Ar,"__esModule",{value:!0});var lt=ry(),ay=iy();function Vi(r){lt.DEBUG&&console.log(r)}var uG={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:lt.HELP_COMMAND_INDEX};function qv(){return{nodes:[Li(),Li(),Li()]}}function gG(r){let e=qv(),t=[],i=e.nodes.length;for(let n of r){t.push(i);for(let s=0;s{if(e.has(i))return;e.add(i);let n=r.nodes[i];for(let o of Object.values(n.statics))for(let{to:a}of o)t(a);for(let[,{to:o}]of n.dynamics)t(o);for(let{to:o}of n.shortcuts)t(o);let s=new Set(n.shortcuts.map(({to:o})=>o));for(;n.shortcuts.length>0;){let{to:o}=n.shortcuts.shift(),a=r.nodes[o];for(let[l,c]of Object.entries(a.statics)){let u=Object.prototype.hasOwnProperty.call(n.statics,l)?n.statics[l]:n.statics[l]=[];for(let g of c)u.some(({to:f})=>g.to===f)||u.push(g)}for(let[l,c]of a.dynamics)n.dynamics.some(([u,{to:g}])=>l===u&&c.to===g)||n.dynamics.push([l,c]);for(let l of a.shortcuts)s.has(l.to)||(n.shortcuts.push(l),s.add(l.to))}};t(lt.NODE_INITIAL)}function hG(r,{prefix:e=""}={}){if(lt.DEBUG){Vi(`${e}Nodes are:`);for(let t=0;tl!==lt.NODE_ERRORED).map(({state:l})=>({usage:l.candidateUsage,reason:null})));if(a.every(({node:l})=>l===lt.NODE_ERRORED))throw new ay.UnknownSyntaxError(e,a.map(({state:l})=>({usage:l.candidateUsage,reason:l.errorMessage})));i=pG(a)}if(i.length>0){Vi(" Results:");for(let s of i)Vi(` - ${s.node} -> ${JSON.stringify(s.state)}`)}else Vi(" No results");return i}function ome(r,e){if(e.selectedIndex!==null)return!0;if(Object.prototype.hasOwnProperty.call(r.statics,lt.END_OF_INPUT)){for(let{to:t}of r.statics[lt.END_OF_INPUT])if(t===lt.NODE_SUCCESS)return!0}return!1}function ame(r,e,t){let i=t&&e.length>0?[""]:[],n=Jv(r,e,t),s=[],o=new Set,a=(l,c,u=!0)=>{let g=[c];for(;g.length>0;){let h=g;g=[];for(let p of h){let C=r.nodes[p],w=Object.keys(C.statics);for(let B of Object.keys(C.statics)){let v=w[0];for(let{to:D,reducer:T}of C.statics[v])T==="pushPath"&&(u||l.push(v),g.push(D))}}u=!1}let f=JSON.stringify(l);o.has(f)||(s.push(l),o.add(f))};for(let{node:l,state:c}of n){if(c.remainder!==null){a([c.remainder],l);continue}let u=r.nodes[l],g=ome(u,c);for(let[f,h]of Object.entries(u.statics))(g&&f!==lt.END_OF_INPUT||!f.startsWith("-")&&h.some(({reducer:p})=>p==="pushPath"))&&a([...i,f],l);if(!!g)for(let[f,{to:h}]of u.dynamics){if(h===lt.NODE_ERRORED)continue;let p=IG(f,c);if(p!==null)for(let C of p)a([...i,C],l)}}return[...s].sort()}function Ame(r,e){let t=Jv(r,[...e,lt.END_OF_INPUT]);return dG(e,t.map(({state:i})=>i))}function pG(r){let e=0;for(let{state:t}of r)t.path.length>e&&(e=t.path.length);return r.filter(({state:t})=>t.path.length===e)}function dG(r,e){let t=e.filter(g=>g.selectedIndex!==null);if(t.length===0)throw new Error;let i=t.filter(g=>g.requiredOptions.every(f=>f.some(h=>g.options.find(p=>p.name===h))));if(i.length===0)throw new ay.UnknownSyntaxError(r,t.map(g=>({usage:g.candidateUsage,reason:null})));let n=0;for(let g of i)g.path.length>n&&(n=g.path.length);let s=i.filter(g=>g.path.length===n),o=g=>g.positionals.filter(({extra:f})=>!f).length+g.options.length,a=s.map(g=>({state:g,positionalCount:o(g)})),l=0;for(let{positionalCount:g}of a)g>l&&(l=g);let c=a.filter(({positionalCount:g})=>g===l).map(({state:g})=>g),u=CG(c);if(u.length>1)throw new ay.AmbiguousSyntaxError(r,u.map(g=>g.candidateUsage));return u[0]}function CG(r){let e=[],t=[];for(let i of r)i.selectedIndex===lt.HELP_COMMAND_INDEX?t.push(i):e.push(i);return t.length>0&&e.push({...uG,path:mG(...t.map(i=>i.path)),options:t.reduce((i,n)=>i.concat(n.options),[])}),e}function mG(r,e,...t){return e===void 0?Array.from(r):mG(r.filter((i,n)=>i===e[n]),...t)}function Li(){return{dynamics:[],shortcuts:[],statics:{}}}function Wv(r){return r===lt.NODE_SUCCESS||r===lt.NODE_ERRORED}function sy(r,e=0){return{to:Wv(r.to)?r.to:r.to>2?r.to+e-2:r.to+e,reducer:r.reducer}}function EG(r,e=0){let t=Li();for(let[i,n]of r.dynamics)t.dynamics.push([i,sy(n,e)]);for(let i of r.shortcuts)t.shortcuts.push(sy(i,e));for(let[i,n]of Object.entries(r.statics))t.statics[i]=n.map(s=>sy(s,e));return t}function Ei(r,e,t,i,n){r.nodes[e].dynamics.push([t,{to:i,reducer:n}])}function Qc(r,e,t,i){r.nodes[e].shortcuts.push({to:t,reducer:i})}function xo(r,e,t,i,n){(Object.prototype.hasOwnProperty.call(r.nodes[e].statics,t)?r.nodes[e].statics[t]:r.nodes[e].statics[t]=[]).push({to:i,reducer:n})}function xd(r,e,t,i){if(Array.isArray(e)){let[n,...s]=e;return r[n](t,i,...s)}else return r[e](t,i)}function IG(r,e){let t=Array.isArray(r)?Pd[r[0]]:Pd[r];if(typeof t.suggest>"u")return null;let i=Array.isArray(r)?r.slice(1):[];return t.suggest(e,...i)}var Pd={always:()=>!0,isOptionLike:(r,e)=>!r.ignoreOptions&&e!=="-"&&e.startsWith("-"),isNotOptionLike:(r,e)=>r.ignoreOptions||e==="-"||!e.startsWith("-"),isOption:(r,e,t,i)=>!r.ignoreOptions&&e===t,isBatchOption:(r,e,t)=>!r.ignoreOptions&<.BATCH_REGEX.test(e)&&[...e.slice(1)].every(i=>t.includes(`-${i}`)),isBoundOption:(r,e,t,i)=>{let n=e.match(lt.BINDING_REGEX);return!r.ignoreOptions&&!!n&<.OPTION_REGEX.test(n[1])&&t.includes(n[1])&&i.filter(s=>s.names.includes(n[1])).every(s=>s.allowBinding)},isNegatedOption:(r,e,t)=>!r.ignoreOptions&&e===`--no-${t.slice(2)}`,isHelp:(r,e)=>!r.ignoreOptions&<.HELP_REGEX.test(e),isUnsupportedOption:(r,e,t)=>!r.ignoreOptions&&e.startsWith("-")&<.OPTION_REGEX.test(e)&&!t.includes(e),isInvalidOption:(r,e)=>!r.ignoreOptions&&e.startsWith("-")&&!lt.OPTION_REGEX.test(e)};Pd.isOption.suggest=(r,e,t=!0)=>t?null:[e];var oy={setCandidateState:(r,e,t)=>({...r,...t}),setSelectedIndex:(r,e,t)=>({...r,selectedIndex:t}),pushBatch:(r,e)=>({...r,options:r.options.concat([...e.slice(1)].map(t=>({name:`-${t}`,value:!0})))}),pushBound:(r,e)=>{let[,t,i]=e.match(lt.BINDING_REGEX);return{...r,options:r.options.concat({name:t,value:i})}},pushPath:(r,e)=>({...r,path:r.path.concat(e)}),pushPositional:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:!1})}),pushExtra:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:!0})}),pushExtraNoLimits:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:Po})}),pushTrue:(r,e,t=e)=>({...r,options:r.options.concat({name:e,value:!0})}),pushFalse:(r,e,t=e)=>({...r,options:r.options.concat({name:t,value:!1})}),pushUndefined:(r,e)=>({...r,options:r.options.concat({name:e,value:void 0})}),pushStringValue:(r,e)=>{var t;let i={...r,options:[...r.options]},n=r.options[r.options.length-1];return n.value=((t=n.value)!==null&&t!==void 0?t:[]).concat([e]),i},setStringValue:(r,e)=>{let t={...r,options:[...r.options]},i=r.options[r.options.length-1];return i.value=e,t},inhibateOptions:r=>({...r,ignoreOptions:!0}),useHelp:(r,e,t)=>{let[,,i]=e.match(lt.HELP_REGEX);return typeof i<"u"?{...r,options:[{name:"-c",value:String(t)},{name:"-i",value:i}]}:{...r,options:[{name:"-c",value:String(t)}]}},setError:(r,e,t)=>e===lt.END_OF_INPUT?{...r,errorMessage:`${t}.`}:{...r,errorMessage:`${t} ("${e}").`},setOptionArityError:(r,e)=>{let t=r.options[r.options.length-1];return{...r,errorMessage:`Not enough arguments to option ${t.name}.`}}},Po=Symbol(),Ay=class{constructor(e,t){this.allOptionNames=[],this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=t}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:t=this.arity.trailing,extra:i=this.arity.extra,proxy:n=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:t,extra:i,proxy:n})}addPositional({name:e="arg",required:t=!0}={}){if(!t&&this.arity.extra===Po)throw new Error("Optional parameters cannot be declared when using .rest() or .proxy()");if(!t&&this.arity.trailing.length>0)throw new Error("Optional parameters cannot be declared after the required trailing positional arguments");!t&&this.arity.extra!==Po?this.arity.extra.push(e):this.arity.extra!==Po&&this.arity.extra.length===0?this.arity.leading.push(e):this.arity.trailing.push(e)}addRest({name:e="arg",required:t=0}={}){if(this.arity.extra===Po)throw new Error("Infinite lists cannot be declared multiple times in the same command");if(this.arity.trailing.length>0)throw new Error("Infinite lists cannot be declared after the required trailing positional arguments");for(let i=0;i1)throw new Error("The arity cannot be higher than 1 when the option only supports the --arg=value syntax");if(!Number.isInteger(i))throw new Error(`The arity must be an integer, got ${i}`);if(i<0)throw new Error(`The arity must be positive, got ${i}`);this.allOptionNames.push(...e),this.options.push({names:e,description:t,arity:i,hidden:n,required:s,allowBinding:o})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:t=!0}={}){let i=[this.cliOpts.binaryName],n=[];if(this.paths.length>0&&i.push(...this.paths[0]),e){for(let{names:o,arity:a,hidden:l,description:c,required:u}of this.options){if(l)continue;let g=[];for(let h=0;h`:`[${f}]`)}i.push(...this.arity.leading.map(o=>`<${o}>`)),this.arity.extra===Po?i.push("..."):i.push(...this.arity.extra.map(o=>`[${o}]`)),i.push(...this.arity.trailing.map(o=>`<${o}>`))}return{usage:i.join(" "),options:n}}compile(){if(typeof this.context>"u")throw new Error("Assertion failed: No context attached");let e=qv(),t=lt.NODE_INITIAL,i=this.usage().usage,n=this.options.filter(a=>a.required).map(a=>a.names);t=ss(e,Li()),xo(e,lt.NODE_INITIAL,lt.START_OF_INPUT,t,["setCandidateState",{candidateUsage:i,requiredOptions:n}]);let s=this.arity.proxy?"always":"isNotOptionLike",o=this.paths.length>0?this.paths:[[]];for(let a of o){let l=t;if(a.length>0){let f=ss(e,Li());Qc(e,l,f),this.registerOptions(e,f),l=f}for(let f=0;f0||!this.arity.proxy){let f=ss(e,Li());Ei(e,l,"isHelp",f,["useHelp",this.cliIndex]),xo(e,f,lt.END_OF_INPUT,lt.NODE_SUCCESS,["setSelectedIndex",lt.HELP_COMMAND_INDEX]),this.registerOptions(e,l)}this.arity.leading.length>0&&xo(e,l,lt.END_OF_INPUT,lt.NODE_ERRORED,["setError","Not enough positional arguments"]);let c=l;for(let f=0;f0||f+1!==this.arity.leading.length)&&xo(e,h,lt.END_OF_INPUT,lt.NODE_ERRORED,["setError","Not enough positional arguments"]),Ei(e,c,"isNotOptionLike",h,"pushPositional"),c=h}let u=c;if(this.arity.extra===Po||this.arity.extra.length>0){let f=ss(e,Li());if(Qc(e,c,f),this.arity.extra===Po){let h=ss(e,Li());this.arity.proxy||this.registerOptions(e,h),Ei(e,c,s,h,"pushExtraNoLimits"),Ei(e,h,s,h,"pushExtraNoLimits"),Qc(e,h,f)}else for(let h=0;h0&&xo(e,u,lt.END_OF_INPUT,lt.NODE_ERRORED,["setError","Not enough positional arguments"]);let g=u;for(let f=0;fo.length>s.length?o:s,"");if(i.arity===0)for(let s of i.names)Ei(e,t,["isOption",s,i.hidden||s!==n],t,"pushTrue"),s.startsWith("--")&&!s.startsWith("--no-")&&Ei(e,t,["isNegatedOption",s],t,["pushFalse",s]);else{let s=ss(e,Li());for(let o of i.names)Ei(e,t,["isOption",o,i.hidden||o!==n],s,"pushUndefined");for(let o=0;o=0&&eAme(i,n),suggest:(n,s)=>ame(i,n,s)}}};Ar.CliBuilder=Dd;Ar.CommandBuilder=Ay;Ar.NoLimits=Po;Ar.aggregateHelpStates=CG;Ar.cloneNode=EG;Ar.cloneTransition=sy;Ar.debug=Vi;Ar.debugMachine=hG;Ar.execute=xd;Ar.injectNode=ss;Ar.isTerminalNode=Wv;Ar.makeAnyOfMachine=gG;Ar.makeNode=Li;Ar.makeStateMachine=qv;Ar.reducers=oy;Ar.registerDynamic=Ei;Ar.registerShortcut=Qc;Ar.registerStatic=xo;Ar.runMachineInternal=Jv;Ar.selectBestState=dG;Ar.simplifyMachine=fG;Ar.suggest=IG;Ar.tests=Pd;Ar.trimSmallerBranches=pG});var yG=y(zv=>{"use strict";Object.defineProperty(zv,"__esModule",{value:!0});var lme=bc(),kd=class extends lme.Command{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,t){let i=new kd(t);i.path=e.path;for(let n of e.options)switch(n.name){case"-c":i.commands.push(Number(n.value));break;case"-i":i.index=Number(n.value);break}return i}async execute(){let e=this.commands;if(typeof this.index<"u"&&this.index>=0&&this.index1){this.context.stdout.write(`Multiple commands match your selection: +`),this.context.stdout.write(` +`);let t=0;for(let i of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[i].commandClass,{prefix:`${t++}. `.padStart(5)}));this.context.stdout.write(` +`),this.context.stdout.write(`Run again with -h= to see the longer details of any of those commands. +`)}}};zv.HelpCommand=kd});var vG=y(Vv=>{"use strict";Object.defineProperty(Vv,"__esModule",{value:!0});var cme=ry(),wG=bc(),ume=J("tty"),gme=ly(),hn=jv(),fme=yG();function hme(r){return r&&typeof r=="object"&&"default"in r?r:{default:r}}var BG=hme(ume),bG=Symbol("clipanion/errorCommand");function pme(){return process.env.FORCE_COLOR==="0"?1:process.env.FORCE_COLOR==="1"||typeof process.stdout<"u"&&process.stdout.isTTY?8:1}var OA=class{constructor({binaryLabel:e,binaryName:t="...",binaryVersion:i,enableCapture:n=!1,enableColors:s}={}){this.registrations=new Map,this.builder=new gme.CliBuilder({binaryName:t}),this.binaryLabel=e,this.binaryName=t,this.binaryVersion=i,this.enableCapture=n,this.enableColors=s}static from(e,t={}){let i=new OA(t);for(let n of e)i.register(n);return i}register(e){var t;let i=new Map,n=new e;for(let l in n){let c=n[l];typeof c=="object"&&c!==null&&c[wG.Command.isOption]&&i.set(l,c)}let s=this.builder.command(),o=s.cliIndex,a=(t=e.paths)!==null&&t!==void 0?t:n.paths;if(typeof a<"u")for(let l of a)s.addPath(l);this.registrations.set(e,{specs:i,builder:s,index:o});for(let[l,{definition:c}]of i.entries())c(s,l);s.setContext({commandClass:e})}process(e){let{contexts:t,process:i}=this.builder.compile(),n=i(e);switch(n.selectedIndex){case cme.HELP_COMMAND_INDEX:return fme.HelpCommand.from(n,t);default:{let{commandClass:s}=t[n.selectedIndex],o=this.registrations.get(s);if(typeof o>"u")throw new Error("Assertion failed: Expected the command class to have been registered.");let a=new s;a.path=n.path;try{for(let[l,{transformer:c}]of o.specs.entries())a[l]=c(o.builder,l,n);return a}catch(l){throw l[bG]=a,l}}break}}async run(e,t){var i;let n,s={...OA.defaultContext,...t},o=(i=this.enableColors)!==null&&i!==void 0?i:s.colorDepth>1;if(!Array.isArray(e))n=e;else try{n=this.process(e)}catch(c){return s.stdout.write(this.error(c,{colored:o})),1}if(n.help)return s.stdout.write(this.usage(n,{colored:o,detailed:!0})),0;n.context=s,n.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableCapture:this.enableCapture,enableColors:this.enableColors,definitions:()=>this.definitions(),error:(c,u)=>this.error(c,u),format:c=>this.format(c),process:c=>this.process(c),run:(c,u)=>this.run(c,{...s,...u}),usage:(c,u)=>this.usage(c,u)};let a=this.enableCapture?dme(s):SG,l;try{l=await a(()=>n.validateAndExecute().catch(c=>n.catch(c).then(()=>0)))}catch(c){return s.stdout.write(this.error(c,{colored:o,command:n})),1}return l}async runExit(e,t){process.exitCode=await this.run(e,t)}suggest(e,t){let{suggest:i}=this.builder.compile();return i(e,t)}definitions({colored:e=!1}={}){let t=[];for(let[i,{index:n}]of this.registrations){if(typeof i.usage>"u")continue;let{usage:s}=this.getUsageByIndex(n,{detailed:!1}),{usage:o,options:a}=this.getUsageByIndex(n,{detailed:!0,inlineOptions:!1}),l=typeof i.usage.category<"u"?hn.formatMarkdownish(i.usage.category,{format:this.format(e),paragraphs:!1}):void 0,c=typeof i.usage.description<"u"?hn.formatMarkdownish(i.usage.description,{format:this.format(e),paragraphs:!1}):void 0,u=typeof i.usage.details<"u"?hn.formatMarkdownish(i.usage.details,{format:this.format(e),paragraphs:!0}):void 0,g=typeof i.usage.examples<"u"?i.usage.examples.map(([f,h])=>[hn.formatMarkdownish(f,{format:this.format(e),paragraphs:!1}),h.replace(/\$0/g,this.binaryName)]):void 0;t.push({path:s,usage:o,category:l,description:c,details:u,examples:g,options:a})}return t}usage(e=null,{colored:t,detailed:i=!1,prefix:n="$ "}={}){var s;if(e===null){for(let l of this.registrations.keys()){let c=l.paths,u=typeof l.usage<"u";if(!c||c.length===0||c.length===1&&c[0].length===0||((s=c==null?void 0:c.some(h=>h.length===0))!==null&&s!==void 0?s:!1))if(e){e=null;break}else e=l;else if(u){e=null;continue}}e&&(i=!0)}let o=e!==null&&e instanceof wG.Command?e.constructor:e,a="";if(o)if(i){let{description:l="",details:c="",examples:u=[]}=o.usage||{};l!==""&&(a+=hn.formatMarkdownish(l,{format:this.format(t),paragraphs:!1}).replace(/^./,h=>h.toUpperCase()),a+=` +`),(c!==""||u.length>0)&&(a+=`${this.format(t).header("Usage")} +`,a+=` +`);let{usage:g,options:f}=this.getUsageByRegistration(o,{inlineOptions:!1});if(a+=`${this.format(t).bold(n)}${g} +`,f.length>0){a+=` +`,a+=`${hn.richFormat.header("Options")} +`;let h=f.reduce((p,C)=>Math.max(p,C.definition.length),0);a+=` +`;for(let{definition:p,description:C}of f)a+=` ${this.format(t).bold(p.padEnd(h))} ${hn.formatMarkdownish(C,{format:this.format(t),paragraphs:!1})}`}if(c!==""&&(a+=` +`,a+=`${this.format(t).header("Details")} +`,a+=` +`,a+=hn.formatMarkdownish(c,{format:this.format(t),paragraphs:!0})),u.length>0){a+=` +`,a+=`${this.format(t).header("Examples")} +`;for(let[h,p]of u)a+=` +`,a+=hn.formatMarkdownish(h,{format:this.format(t),paragraphs:!1}),a+=`${p.replace(/^/m,` ${this.format(t).bold(n)}`).replace(/\$0/g,this.binaryName)} +`}}else{let{usage:l}=this.getUsageByRegistration(o);a+=`${this.format(t).bold(n)}${l} +`}else{let l=new Map;for(let[f,{index:h}]of this.registrations.entries()){if(typeof f.usage>"u")continue;let p=typeof f.usage.category<"u"?hn.formatMarkdownish(f.usage.category,{format:this.format(t),paragraphs:!1}):null,C=l.get(p);typeof C>"u"&&l.set(p,C=[]);let{usage:w}=this.getUsageByIndex(h);C.push({commandClass:f,usage:w})}let c=Array.from(l.keys()).sort((f,h)=>f===null?-1:h===null?1:f.localeCompare(h,"en",{usage:"sort",caseFirst:"upper"})),u=typeof this.binaryLabel<"u",g=typeof this.binaryVersion<"u";u||g?(u&&g?a+=`${this.format(t).header(`${this.binaryLabel} - ${this.binaryVersion}`)} + +`:u?a+=`${this.format(t).header(`${this.binaryLabel}`)} +`:a+=`${this.format(t).header(`${this.binaryVersion}`)} +`,a+=` ${this.format(t).bold(n)}${this.binaryName} +`):a+=`${this.format(t).bold(n)}${this.binaryName} +`;for(let f of c){let h=l.get(f).slice().sort((C,w)=>C.usage.localeCompare(w.usage,"en",{usage:"sort",caseFirst:"upper"})),p=f!==null?f.trim():"General commands";a+=` +`,a+=`${this.format(t).header(`${p}`)} +`;for(let{commandClass:C,usage:w}of h){let B=C.usage.description||"undocumented";a+=` +`,a+=` ${this.format(t).bold(w)} +`,a+=` ${hn.formatMarkdownish(B,{format:this.format(t),paragraphs:!1})}`}}a+=` +`,a+=hn.formatMarkdownish("You can also print more details about any of these commands by calling them with the `-h,--help` flag right after the command name.",{format:this.format(t),paragraphs:!0})}return a}error(e,t){var i,{colored:n,command:s=(i=e[bG])!==null&&i!==void 0?i:null}=t===void 0?{}:t;e instanceof Error||(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let o="",a=e.name.replace(/([a-z])([A-Z])/g,"$1 $2");a==="Error"&&(a="Internal Error"),o+=`${this.format(n).error(a)}: ${e.message} +`;let l=e.clipanion;return typeof l<"u"?l.type==="usage"&&(o+=` +`,o+=this.usage(s)):e.stack&&(o+=`${e.stack.replace(/^.*\n/,"")} +`),o}format(e){var t;return((t=e!=null?e:this.enableColors)!==null&&t!==void 0?t:OA.defaultContext.colorDepth>1)?hn.richFormat:hn.textFormat}getUsageByRegistration(e,t){let i=this.registrations.get(e);if(typeof i>"u")throw new Error("Assertion failed: Unregistered command");return this.getUsageByIndex(i.index,t)}getUsageByIndex(e,t){return this.builder.getBuilderByIndex(e).usage(t)}};OA.defaultContext={stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,colorDepth:"getColorDepth"in BG.default.WriteStream.prototype?BG.default.WriteStream.prototype.getColorDepth():pme()};var QG;function dme(r){let e=QG;if(typeof e>"u"){if(r.stdout===process.stdout&&r.stderr===process.stderr)return SG;let{AsyncLocalStorage:t}=J("async_hooks");e=QG=new t;let i=process.stdout._write;process.stdout._write=function(s,o,a){let l=e.getStore();return typeof l>"u"?i.call(this,s,o,a):l.stdout.write(s,o,a)};let n=process.stderr._write;process.stderr._write=function(s,o,a){let l=e.getStore();return typeof l>"u"?n.call(this,s,o,a):l.stderr.write(s,o,a)}}return t=>e.run(r,t)}function SG(r){return r()}Vv.Cli=OA});var xG=y(Xv=>{"use strict";Object.defineProperty(Xv,"__esModule",{value:!0});var Cme=bc(),cy=class extends Cme.Command{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)} +`)}};cy.paths=[["--clipanion=definitions"]];Xv.DefinitionsCommand=cy});var PG=y(_v=>{"use strict";Object.defineProperty(_v,"__esModule",{value:!0});var mme=bc(),uy=class extends mme.Command{async execute(){this.context.stdout.write(this.cli.usage())}};uy.paths=[["-h"],["--help"]];_v.HelpCommand=uy});var DG=y(Zv=>{"use strict";Object.defineProperty(Zv,"__esModule",{value:!0});var Eme=bc(),gy=class extends Eme.Command{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:""} +`)}};gy.paths=[["-v"],["--version"]];Zv.VersionCommand=gy});var kG=y(Rd=>{"use strict";Object.defineProperty(Rd,"__esModule",{value:!0});var Ime=xG(),yme=PG(),wme=DG();Rd.DefinitionsCommand=Ime.DefinitionsCommand;Rd.HelpCommand=yme.HelpCommand;Rd.VersionCommand=wme.VersionCommand});var FG=y($v=>{"use strict";Object.defineProperty($v,"__esModule",{value:!0});var RG=va();function Bme(r,e,t){let[i,n]=RG.rerouteArguments(e,t!=null?t:{}),{arity:s=1}=n,o=r.split(","),a=new Set(o);return RG.makeCommandOption({definition(l){l.addOption({names:o,arity:s,hidden:n==null?void 0:n.hidden,description:n==null?void 0:n.description,required:n.required})},transformer(l,c,u){let g=typeof i<"u"?[...i]:void 0;for(let{name:f,value:h}of u.options)!a.has(f)||(g=g!=null?g:[],g.push(h));return g}})}$v.Array=Bme});var TG=y(ex=>{"use strict";Object.defineProperty(ex,"__esModule",{value:!0});var NG=va();function bme(r,e,t){let[i,n]=NG.rerouteArguments(e,t!=null?t:{}),s=r.split(","),o=new Set(s);return NG.makeCommandOption({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u=f);return u}})}ex.Boolean=bme});var OG=y(tx=>{"use strict";Object.defineProperty(tx,"__esModule",{value:!0});var LG=va();function Qme(r,e,t){let[i,n]=LG.rerouteArguments(e,t!=null?t:{}),s=r.split(","),o=new Set(s);return LG.makeCommandOption({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u!=null||(u=0),f?u+=1:u=0);return u}})}tx.Counter=Qme});var MG=y(rx=>{"use strict";Object.defineProperty(rx,"__esModule",{value:!0});var Sme=va();function vme(r={}){return Sme.makeCommandOption({definition(e,t){var i;e.addProxy({name:(i=r.name)!==null&&i!==void 0?i:t,required:r.required})},transformer(e,t,i){return i.positionals.map(({value:n})=>n)}})}rx.Proxy=vme});var UG=y(ix=>{"use strict";Object.defineProperty(ix,"__esModule",{value:!0});var xme=va(),Pme=ly();function Dme(r={}){return xme.makeCommandOption({definition(e,t){var i;e.addRest({name:(i=r.name)!==null&&i!==void 0?i:t,required:r.required})},transformer(e,t,i){let n=o=>{let a=i.positionals[o];return a.extra===Pme.NoLimits||a.extra===!1&&oo)}})}ix.Rest=Dme});var KG=y(nx=>{"use strict";Object.defineProperty(nx,"__esModule",{value:!0});var Fd=va(),kme=ly();function Rme(r,e,t){let[i,n]=Fd.rerouteArguments(e,t!=null?t:{}),{arity:s=1}=n,o=r.split(","),a=new Set(o);return Fd.makeCommandOption({definition(l){l.addOption({names:o,arity:n.tolerateBoolean?0:s,hidden:n.hidden,description:n.description,required:n.required})},transformer(l,c,u){let g,f=i;for(let{name:h,value:p}of u.options)!a.has(h)||(g=h,f=p);return typeof f=="string"?Fd.applyValidator(g!=null?g:c,f,n.validator):f}})}function Fme(r={}){let{required:e=!0}=r;return Fd.makeCommandOption({definition(t,i){var n;t.addPositional({name:(n=r.name)!==null&&n!==void 0?n:i,required:r.required})},transformer(t,i,n){var s;for(let o=0;o{"use strict";Object.defineProperty(pn,"__esModule",{value:!0});var lf=va(),Tme=FG(),Lme=TG(),Ome=OG(),Mme=MG(),Ume=UG(),Kme=KG();pn.applyValidator=lf.applyValidator;pn.cleanValidationError=lf.cleanValidationError;pn.formatError=lf.formatError;pn.isOptionSymbol=lf.isOptionSymbol;pn.makeCommandOption=lf.makeCommandOption;pn.rerouteArguments=lf.rerouteArguments;pn.Array=Tme.Array;pn.Boolean=Lme.Boolean;pn.Counter=Ome.Counter;pn.Proxy=Mme.Proxy;pn.Rest=Ume.Rest;pn.String=Kme.String});var Xe=y(MA=>{"use strict";Object.defineProperty(MA,"__esModule",{value:!0});var Hme=iy(),Gme=bc(),Yme=jv(),jme=vG(),qme=kG(),Jme=HG();MA.UsageError=Hme.UsageError;MA.Command=Gme.Command;MA.formatMarkdownish=Yme.formatMarkdownish;MA.Cli=jme.Cli;MA.Builtins=qme;MA.Option=Jme});var YG=y((J$e,GG)=>{"use strict";GG.exports=(r,...e)=>new Promise(t=>{t(r(...e))})});var cf=y((W$e,sx)=>{"use strict";var Wme=YG(),jG=r=>{if(r<1)throw new TypeError("Expected `concurrency` to be a number from 1 and up");let e=[],t=0,i=()=>{t--,e.length>0&&e.shift()()},n=(a,l,...c)=>{t++;let u=Wme(a,...c);l(u),u.then(i,i)},s=(a,l,...c)=>{tnew Promise(c=>s(a,c,...l));return Object.defineProperties(o,{activeCount:{get:()=>t},pendingCount:{get:()=>e.length}}),o};sx.exports=jG;sx.exports.default=jG});var Nd=y((V$e,qG)=>{var zme="2.0.0",Vme=Number.MAX_SAFE_INTEGER||9007199254740991,Xme=16;qG.exports={SEMVER_SPEC_VERSION:zme,MAX_LENGTH:256,MAX_SAFE_INTEGER:Vme,MAX_SAFE_COMPONENT_LENGTH:Xme}});var Td=y((X$e,JG)=>{var _me=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...r)=>console.error("SEMVER",...r):()=>{};JG.exports=_me});var Sc=y((KA,WG)=>{var{MAX_SAFE_COMPONENT_LENGTH:ox}=Nd(),Zme=Td();KA=WG.exports={};var $me=KA.re=[],_e=KA.src=[],Ze=KA.t={},eEe=0,St=(r,e,t)=>{let i=eEe++;Zme(i,e),Ze[r]=i,_e[i]=e,$me[i]=new RegExp(e,t?"g":void 0)};St("NUMERICIDENTIFIER","0|[1-9]\\d*");St("NUMERICIDENTIFIERLOOSE","[0-9]+");St("NONNUMERICIDENTIFIER","\\d*[a-zA-Z-][a-zA-Z0-9-]*");St("MAINVERSION",`(${_e[Ze.NUMERICIDENTIFIER]})\\.(${_e[Ze.NUMERICIDENTIFIER]})\\.(${_e[Ze.NUMERICIDENTIFIER]})`);St("MAINVERSIONLOOSE",`(${_e[Ze.NUMERICIDENTIFIERLOOSE]})\\.(${_e[Ze.NUMERICIDENTIFIERLOOSE]})\\.(${_e[Ze.NUMERICIDENTIFIERLOOSE]})`);St("PRERELEASEIDENTIFIER",`(?:${_e[Ze.NUMERICIDENTIFIER]}|${_e[Ze.NONNUMERICIDENTIFIER]})`);St("PRERELEASEIDENTIFIERLOOSE",`(?:${_e[Ze.NUMERICIDENTIFIERLOOSE]}|${_e[Ze.NONNUMERICIDENTIFIER]})`);St("PRERELEASE",`(?:-(${_e[Ze.PRERELEASEIDENTIFIER]}(?:\\.${_e[Ze.PRERELEASEIDENTIFIER]})*))`);St("PRERELEASELOOSE",`(?:-?(${_e[Ze.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${_e[Ze.PRERELEASEIDENTIFIERLOOSE]})*))`);St("BUILDIDENTIFIER","[0-9A-Za-z-]+");St("BUILD",`(?:\\+(${_e[Ze.BUILDIDENTIFIER]}(?:\\.${_e[Ze.BUILDIDENTIFIER]})*))`);St("FULLPLAIN",`v?${_e[Ze.MAINVERSION]}${_e[Ze.PRERELEASE]}?${_e[Ze.BUILD]}?`);St("FULL",`^${_e[Ze.FULLPLAIN]}$`);St("LOOSEPLAIN",`[v=\\s]*${_e[Ze.MAINVERSIONLOOSE]}${_e[Ze.PRERELEASELOOSE]}?${_e[Ze.BUILD]}?`);St("LOOSE",`^${_e[Ze.LOOSEPLAIN]}$`);St("GTLT","((?:<|>)?=?)");St("XRANGEIDENTIFIERLOOSE",`${_e[Ze.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);St("XRANGEIDENTIFIER",`${_e[Ze.NUMERICIDENTIFIER]}|x|X|\\*`);St("XRANGEPLAIN",`[v=\\s]*(${_e[Ze.XRANGEIDENTIFIER]})(?:\\.(${_e[Ze.XRANGEIDENTIFIER]})(?:\\.(${_e[Ze.XRANGEIDENTIFIER]})(?:${_e[Ze.PRERELEASE]})?${_e[Ze.BUILD]}?)?)?`);St("XRANGEPLAINLOOSE",`[v=\\s]*(${_e[Ze.XRANGEIDENTIFIERLOOSE]})(?:\\.(${_e[Ze.XRANGEIDENTIFIERLOOSE]})(?:\\.(${_e[Ze.XRANGEIDENTIFIERLOOSE]})(?:${_e[Ze.PRERELEASELOOSE]})?${_e[Ze.BUILD]}?)?)?`);St("XRANGE",`^${_e[Ze.GTLT]}\\s*${_e[Ze.XRANGEPLAIN]}$`);St("XRANGELOOSE",`^${_e[Ze.GTLT]}\\s*${_e[Ze.XRANGEPLAINLOOSE]}$`);St("COERCE",`(^|[^\\d])(\\d{1,${ox}})(?:\\.(\\d{1,${ox}}))?(?:\\.(\\d{1,${ox}}))?(?:$|[^\\d])`);St("COERCERTL",_e[Ze.COERCE],!0);St("LONETILDE","(?:~>?)");St("TILDETRIM",`(\\s*)${_e[Ze.LONETILDE]}\\s+`,!0);KA.tildeTrimReplace="$1~";St("TILDE",`^${_e[Ze.LONETILDE]}${_e[Ze.XRANGEPLAIN]}$`);St("TILDELOOSE",`^${_e[Ze.LONETILDE]}${_e[Ze.XRANGEPLAINLOOSE]}$`);St("LONECARET","(?:\\^)");St("CARETTRIM",`(\\s*)${_e[Ze.LONECARET]}\\s+`,!0);KA.caretTrimReplace="$1^";St("CARET",`^${_e[Ze.LONECARET]}${_e[Ze.XRANGEPLAIN]}$`);St("CARETLOOSE",`^${_e[Ze.LONECARET]}${_e[Ze.XRANGEPLAINLOOSE]}$`);St("COMPARATORLOOSE",`^${_e[Ze.GTLT]}\\s*(${_e[Ze.LOOSEPLAIN]})$|^$`);St("COMPARATOR",`^${_e[Ze.GTLT]}\\s*(${_e[Ze.FULLPLAIN]})$|^$`);St("COMPARATORTRIM",`(\\s*)${_e[Ze.GTLT]}\\s*(${_e[Ze.LOOSEPLAIN]}|${_e[Ze.XRANGEPLAIN]})`,!0);KA.comparatorTrimReplace="$1$2$3";St("HYPHENRANGE",`^\\s*(${_e[Ze.XRANGEPLAIN]})\\s+-\\s+(${_e[Ze.XRANGEPLAIN]})\\s*$`);St("HYPHENRANGELOOSE",`^\\s*(${_e[Ze.XRANGEPLAINLOOSE]})\\s+-\\s+(${_e[Ze.XRANGEPLAINLOOSE]})\\s*$`);St("STAR","(<|>)?=?\\s*\\*");St("GTE0","^\\s*>=\\s*0.0.0\\s*$");St("GTE0PRE","^\\s*>=\\s*0.0.0-0\\s*$")});var Ld=y((_$e,zG)=>{var tEe=["includePrerelease","loose","rtl"],rEe=r=>r?typeof r!="object"?{loose:!0}:tEe.filter(e=>r[e]).reduce((e,t)=>(e[t]=!0,e),{}):{};zG.exports=rEe});var hy=y((Z$e,_G)=>{var VG=/^[0-9]+$/,XG=(r,e)=>{let t=VG.test(r),i=VG.test(e);return t&&i&&(r=+r,e=+e),r===e?0:t&&!i?-1:i&&!t?1:rXG(e,r);_G.exports={compareIdentifiers:XG,rcompareIdentifiers:iEe}});var Oi=y(($$e,tY)=>{var py=Td(),{MAX_LENGTH:ZG,MAX_SAFE_INTEGER:dy}=Nd(),{re:$G,t:eY}=Sc(),nEe=Ld(),{compareIdentifiers:Od}=hy(),Kn=class{constructor(e,t){if(t=nEe(t),e instanceof Kn){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid Version: ${e}`);if(e.length>ZG)throw new TypeError(`version is longer than ${ZG} characters`);py("SemVer",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;let i=e.trim().match(t.loose?$G[eY.LOOSE]:$G[eY.FULL]);if(!i)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+i[1],this.minor=+i[2],this.patch=+i[3],this.major>dy||this.major<0)throw new TypeError("Invalid major version");if(this.minor>dy||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>dy||this.patch<0)throw new TypeError("Invalid patch version");i[4]?this.prerelease=i[4].split(".").map(n=>{if(/^[0-9]+$/.test(n)){let s=+n;if(s>=0&&s=0;)typeof this.prerelease[i]=="number"&&(this.prerelease[i]++,i=-2);i===-1&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}};tY.exports=Kn});var vc=y((eet,sY)=>{var{MAX_LENGTH:sEe}=Nd(),{re:rY,t:iY}=Sc(),nY=Oi(),oEe=Ld(),aEe=(r,e)=>{if(e=oEe(e),r instanceof nY)return r;if(typeof r!="string"||r.length>sEe||!(e.loose?rY[iY.LOOSE]:rY[iY.FULL]).test(r))return null;try{return new nY(r,e)}catch{return null}};sY.exports=aEe});var aY=y((tet,oY)=>{var AEe=vc(),lEe=(r,e)=>{let t=AEe(r,e);return t?t.version:null};oY.exports=lEe});var lY=y((ret,AY)=>{var cEe=vc(),uEe=(r,e)=>{let t=cEe(r.trim().replace(/^[=v]+/,""),e);return t?t.version:null};AY.exports=uEe});var uY=y((iet,cY)=>{var gEe=Oi(),fEe=(r,e,t,i)=>{typeof t=="string"&&(i=t,t=void 0);try{return new gEe(r,t).inc(e,i).version}catch{return null}};cY.exports=fEe});var os=y((net,fY)=>{var gY=Oi(),hEe=(r,e,t)=>new gY(r,t).compare(new gY(e,t));fY.exports=hEe});var Cy=y((set,hY)=>{var pEe=os(),dEe=(r,e,t)=>pEe(r,e,t)===0;hY.exports=dEe});var CY=y((oet,dY)=>{var pY=vc(),CEe=Cy(),mEe=(r,e)=>{if(CEe(r,e))return null;{let t=pY(r),i=pY(e),n=t.prerelease.length||i.prerelease.length,s=n?"pre":"",o=n?"prerelease":"";for(let a in t)if((a==="major"||a==="minor"||a==="patch")&&t[a]!==i[a])return s+a;return o}};dY.exports=mEe});var EY=y((aet,mY)=>{var EEe=Oi(),IEe=(r,e)=>new EEe(r,e).major;mY.exports=IEe});var yY=y((Aet,IY)=>{var yEe=Oi(),wEe=(r,e)=>new yEe(r,e).minor;IY.exports=wEe});var BY=y((cet,wY)=>{var BEe=Oi(),bEe=(r,e)=>new BEe(r,e).patch;wY.exports=bEe});var QY=y((uet,bY)=>{var QEe=vc(),SEe=(r,e)=>{let t=QEe(r,e);return t&&t.prerelease.length?t.prerelease:null};bY.exports=SEe});var vY=y((get,SY)=>{var vEe=os(),xEe=(r,e,t)=>vEe(e,r,t);SY.exports=xEe});var PY=y((fet,xY)=>{var PEe=os(),DEe=(r,e)=>PEe(r,e,!0);xY.exports=DEe});var my=y((het,kY)=>{var DY=Oi(),kEe=(r,e,t)=>{let i=new DY(r,t),n=new DY(e,t);return i.compare(n)||i.compareBuild(n)};kY.exports=kEe});var FY=y((pet,RY)=>{var REe=my(),FEe=(r,e)=>r.sort((t,i)=>REe(t,i,e));RY.exports=FEe});var TY=y((det,NY)=>{var NEe=my(),TEe=(r,e)=>r.sort((t,i)=>NEe(i,t,e));NY.exports=TEe});var Md=y((Cet,LY)=>{var LEe=os(),OEe=(r,e,t)=>LEe(r,e,t)>0;LY.exports=OEe});var Ey=y((met,OY)=>{var MEe=os(),UEe=(r,e,t)=>MEe(r,e,t)<0;OY.exports=UEe});var ax=y((Eet,MY)=>{var KEe=os(),HEe=(r,e,t)=>KEe(r,e,t)!==0;MY.exports=HEe});var Iy=y((Iet,UY)=>{var GEe=os(),YEe=(r,e,t)=>GEe(r,e,t)>=0;UY.exports=YEe});var yy=y((yet,KY)=>{var jEe=os(),qEe=(r,e,t)=>jEe(r,e,t)<=0;KY.exports=qEe});var Ax=y((wet,HY)=>{var JEe=Cy(),WEe=ax(),zEe=Md(),VEe=Iy(),XEe=Ey(),_Ee=yy(),ZEe=(r,e,t,i)=>{switch(e){case"===":return typeof r=="object"&&(r=r.version),typeof t=="object"&&(t=t.version),r===t;case"!==":return typeof r=="object"&&(r=r.version),typeof t=="object"&&(t=t.version),r!==t;case"":case"=":case"==":return JEe(r,t,i);case"!=":return WEe(r,t,i);case">":return zEe(r,t,i);case">=":return VEe(r,t,i);case"<":return XEe(r,t,i);case"<=":return _Ee(r,t,i);default:throw new TypeError(`Invalid operator: ${e}`)}};HY.exports=ZEe});var YY=y((Bet,GY)=>{var $Ee=Oi(),eIe=vc(),{re:wy,t:By}=Sc(),tIe=(r,e)=>{if(r instanceof $Ee)return r;if(typeof r=="number"&&(r=String(r)),typeof r!="string")return null;e=e||{};let t=null;if(!e.rtl)t=r.match(wy[By.COERCE]);else{let i;for(;(i=wy[By.COERCERTL].exec(r))&&(!t||t.index+t[0].length!==r.length);)(!t||i.index+i[0].length!==t.index+t[0].length)&&(t=i),wy[By.COERCERTL].lastIndex=i.index+i[1].length+i[2].length;wy[By.COERCERTL].lastIndex=-1}return t===null?null:eIe(`${t[2]}.${t[3]||"0"}.${t[4]||"0"}`,e)};GY.exports=tIe});var qY=y((bet,jY)=>{"use strict";jY.exports=function(r){r.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var Ud=y((Qet,JY)=>{"use strict";JY.exports=Ht;Ht.Node=xc;Ht.create=Ht;function Ht(r){var e=this;if(e instanceof Ht||(e=new Ht),e.tail=null,e.head=null,e.length=0,r&&typeof r.forEach=="function")r.forEach(function(n){e.push(n)});else if(arguments.length>0)for(var t=0,i=arguments.length;t1)t=e;else if(this.head)i=this.head.next,t=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var n=0;i!==null;n++)t=r(t,i.value,n),i=i.next;return t};Ht.prototype.reduceReverse=function(r,e){var t,i=this.tail;if(arguments.length>1)t=e;else if(this.tail)i=this.tail.prev,t=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(var n=this.length-1;i!==null;n--)t=r(t,i.value,n),i=i.prev;return t};Ht.prototype.toArray=function(){for(var r=new Array(this.length),e=0,t=this.head;t!==null;e++)r[e]=t.value,t=t.next;return r};Ht.prototype.toArrayReverse=function(){for(var r=new Array(this.length),e=0,t=this.tail;t!==null;e++)r[e]=t.value,t=t.prev;return r};Ht.prototype.slice=function(r,e){e=e||this.length,e<0&&(e+=this.length),r=r||0,r<0&&(r+=this.length);var t=new Ht;if(ethis.length&&(e=this.length);for(var i=0,n=this.head;n!==null&&ithis.length&&(e=this.length);for(var i=this.length,n=this.tail;n!==null&&i>e;i--)n=n.prev;for(;n!==null&&i>r;i--,n=n.prev)t.push(n.value);return t};Ht.prototype.splice=function(r,e,...t){r>this.length&&(r=this.length-1),r<0&&(r=this.length+r);for(var i=0,n=this.head;n!==null&&i{"use strict";var sIe=Ud(),Pc=Symbol("max"),Pa=Symbol("length"),uf=Symbol("lengthCalculator"),Hd=Symbol("allowStale"),Dc=Symbol("maxAge"),xa=Symbol("dispose"),WY=Symbol("noDisposeOnSet"),Ii=Symbol("lruList"),zs=Symbol("cache"),VY=Symbol("updateAgeOnGet"),lx=()=>1,ux=class{constructor(e){if(typeof e=="number"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!="number"||e.max<0))throw new TypeError("max must be a non-negative number");let t=this[Pc]=e.max||1/0,i=e.length||lx;if(this[uf]=typeof i!="function"?lx:i,this[Hd]=e.stale||!1,e.maxAge&&typeof e.maxAge!="number")throw new TypeError("maxAge must be a number");this[Dc]=e.maxAge||0,this[xa]=e.dispose,this[WY]=e.noDisposeOnSet||!1,this[VY]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!="number"||e<0)throw new TypeError("max must be a non-negative number");this[Pc]=e||1/0,Kd(this)}get max(){return this[Pc]}set allowStale(e){this[Hd]=!!e}get allowStale(){return this[Hd]}set maxAge(e){if(typeof e!="number")throw new TypeError("maxAge must be a non-negative number");this[Dc]=e,Kd(this)}get maxAge(){return this[Dc]}set lengthCalculator(e){typeof e!="function"&&(e=lx),e!==this[uf]&&(this[uf]=e,this[Pa]=0,this[Ii].forEach(t=>{t.length=this[uf](t.value,t.key),this[Pa]+=t.length})),Kd(this)}get lengthCalculator(){return this[uf]}get length(){return this[Pa]}get itemCount(){return this[Ii].length}rforEach(e,t){t=t||this;for(let i=this[Ii].tail;i!==null;){let n=i.prev;zY(this,e,i,t),i=n}}forEach(e,t){t=t||this;for(let i=this[Ii].head;i!==null;){let n=i.next;zY(this,e,i,t),i=n}}keys(){return this[Ii].toArray().map(e=>e.key)}values(){return this[Ii].toArray().map(e=>e.value)}reset(){this[xa]&&this[Ii]&&this[Ii].length&&this[Ii].forEach(e=>this[xa](e.key,e.value)),this[zs]=new Map,this[Ii]=new sIe,this[Pa]=0}dump(){return this[Ii].map(e=>by(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[Ii]}set(e,t,i){if(i=i||this[Dc],i&&typeof i!="number")throw new TypeError("maxAge must be a number");let n=i?Date.now():0,s=this[uf](t,e);if(this[zs].has(e)){if(s>this[Pc])return gf(this,this[zs].get(e)),!1;let l=this[zs].get(e).value;return this[xa]&&(this[WY]||this[xa](e,l.value)),l.now=n,l.maxAge=i,l.value=t,this[Pa]+=s-l.length,l.length=s,this.get(e),Kd(this),!0}let o=new gx(e,t,s,n,i);return o.length>this[Pc]?(this[xa]&&this[xa](e,t),!1):(this[Pa]+=o.length,this[Ii].unshift(o),this[zs].set(e,this[Ii].head),Kd(this),!0)}has(e){if(!this[zs].has(e))return!1;let t=this[zs].get(e).value;return!by(this,t)}get(e){return cx(this,e,!0)}peek(e){return cx(this,e,!1)}pop(){let e=this[Ii].tail;return e?(gf(this,e),e.value):null}del(e){gf(this,this[zs].get(e))}load(e){this.reset();let t=Date.now();for(let i=e.length-1;i>=0;i--){let n=e[i],s=n.e||0;if(s===0)this.set(n.k,n.v);else{let o=s-t;o>0&&this.set(n.k,n.v,o)}}}prune(){this[zs].forEach((e,t)=>cx(this,t,!1))}},cx=(r,e,t)=>{let i=r[zs].get(e);if(i){let n=i.value;if(by(r,n)){if(gf(r,i),!r[Hd])return}else t&&(r[VY]&&(i.value.now=Date.now()),r[Ii].unshiftNode(i));return n.value}},by=(r,e)=>{if(!e||!e.maxAge&&!r[Dc])return!1;let t=Date.now()-e.now;return e.maxAge?t>e.maxAge:r[Dc]&&t>r[Dc]},Kd=r=>{if(r[Pa]>r[Pc])for(let e=r[Ii].tail;r[Pa]>r[Pc]&&e!==null;){let t=e.prev;gf(r,e),e=t}},gf=(r,e)=>{if(e){let t=e.value;r[xa]&&r[xa](t.key,t.value),r[Pa]-=t.length,r[zs].delete(t.key),r[Ii].removeNode(e)}},gx=class{constructor(e,t,i,n,s){this.key=e,this.value=t,this.length=i,this.now=n,this.maxAge=s||0}},zY=(r,e,t,i)=>{let n=t.value;by(r,n)&&(gf(r,t),r[Hd]||(n=void 0)),n&&e.call(i,n.value,n.key,r)};XY.exports=ux});var as=y((xet,tj)=>{var kc=class{constructor(e,t){if(t=aIe(t),e instanceof kc)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new kc(e.raw,t);if(e instanceof fx)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\s*\|\|\s*/).map(i=>this.parseRange(i.trim())).filter(i=>i.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);if(this.set.length>1){let i=this.set[0];if(this.set=this.set.filter(n=>!$Y(n[0])),this.set.length===0)this.set=[i];else if(this.set.length>1){for(let n of this.set)if(n.length===1&&gIe(n[0])){this.set=[n];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(e){e=e.trim();let i=`parseRange:${Object.keys(this.options).join(",")}:${e}`,n=ZY.get(i);if(n)return n;let s=this.options.loose,o=s?Mi[Qi.HYPHENRANGELOOSE]:Mi[Qi.HYPHENRANGE];e=e.replace(o,wIe(this.options.includePrerelease)),jr("hyphen replace",e),e=e.replace(Mi[Qi.COMPARATORTRIM],lIe),jr("comparator trim",e,Mi[Qi.COMPARATORTRIM]),e=e.replace(Mi[Qi.TILDETRIM],cIe),e=e.replace(Mi[Qi.CARETTRIM],uIe),e=e.split(/\s+/).join(" ");let a=s?Mi[Qi.COMPARATORLOOSE]:Mi[Qi.COMPARATOR],l=e.split(" ").map(f=>fIe(f,this.options)).join(" ").split(/\s+/).map(f=>yIe(f,this.options)).filter(this.options.loose?f=>!!f.match(a):()=>!0).map(f=>new fx(f,this.options)),c=l.length,u=new Map;for(let f of l){if($Y(f))return[f];u.set(f.value,f)}u.size>1&&u.has("")&&u.delete("");let g=[...u.values()];return ZY.set(i,g),g}intersects(e,t){if(!(e instanceof kc))throw new TypeError("a Range is required");return this.set.some(i=>ej(i,t)&&e.set.some(n=>ej(n,t)&&i.every(s=>n.every(o=>s.intersects(o,t)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new AIe(e,this.options)}catch{return!1}for(let t=0;tr.value==="<0.0.0-0",gIe=r=>r.value==="",ej=(r,e)=>{let t=!0,i=r.slice(),n=i.pop();for(;t&&i.length;)t=i.every(s=>n.intersects(s,e)),n=i.pop();return t},fIe=(r,e)=>(jr("comp",r,e),r=dIe(r,e),jr("caret",r),r=hIe(r,e),jr("tildes",r),r=mIe(r,e),jr("xrange",r),r=IIe(r,e),jr("stars",r),r),Xi=r=>!r||r.toLowerCase()==="x"||r==="*",hIe=(r,e)=>r.trim().split(/\s+/).map(t=>pIe(t,e)).join(" "),pIe=(r,e)=>{let t=e.loose?Mi[Qi.TILDELOOSE]:Mi[Qi.TILDE];return r.replace(t,(i,n,s,o,a)=>{jr("tilde",r,i,n,s,o,a);let l;return Xi(n)?l="":Xi(s)?l=`>=${n}.0.0 <${+n+1}.0.0-0`:Xi(o)?l=`>=${n}.${s}.0 <${n}.${+s+1}.0-0`:a?(jr("replaceTilde pr",a),l=`>=${n}.${s}.${o}-${a} <${n}.${+s+1}.0-0`):l=`>=${n}.${s}.${o} <${n}.${+s+1}.0-0`,jr("tilde return",l),l})},dIe=(r,e)=>r.trim().split(/\s+/).map(t=>CIe(t,e)).join(" "),CIe=(r,e)=>{jr("caret",r,e);let t=e.loose?Mi[Qi.CARETLOOSE]:Mi[Qi.CARET],i=e.includePrerelease?"-0":"";return r.replace(t,(n,s,o,a,l)=>{jr("caret",r,n,s,o,a,l);let c;return Xi(s)?c="":Xi(o)?c=`>=${s}.0.0${i} <${+s+1}.0.0-0`:Xi(a)?s==="0"?c=`>=${s}.${o}.0${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.0${i} <${+s+1}.0.0-0`:l?(jr("replaceCaret pr",l),s==="0"?o==="0"?c=`>=${s}.${o}.${a}-${l} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}-${l} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a}-${l} <${+s+1}.0.0-0`):(jr("no pr"),s==="0"?o==="0"?c=`>=${s}.${o}.${a}${i} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a} <${+s+1}.0.0-0`),jr("caret return",c),c})},mIe=(r,e)=>(jr("replaceXRanges",r,e),r.split(/\s+/).map(t=>EIe(t,e)).join(" ")),EIe=(r,e)=>{r=r.trim();let t=e.loose?Mi[Qi.XRANGELOOSE]:Mi[Qi.XRANGE];return r.replace(t,(i,n,s,o,a,l)=>{jr("xRange",r,i,n,s,o,a,l);let c=Xi(s),u=c||Xi(o),g=u||Xi(a),f=g;return n==="="&&f&&(n=""),l=e.includePrerelease?"-0":"",c?n===">"||n==="<"?i="<0.0.0-0":i="*":n&&f?(u&&(o=0),a=0,n===">"?(n=">=",u?(s=+s+1,o=0,a=0):(o=+o+1,a=0)):n==="<="&&(n="<",u?s=+s+1:o=+o+1),n==="<"&&(l="-0"),i=`${n+s}.${o}.${a}${l}`):u?i=`>=${s}.0.0${l} <${+s+1}.0.0-0`:g&&(i=`>=${s}.${o}.0${l} <${s}.${+o+1}.0-0`),jr("xRange return",i),i})},IIe=(r,e)=>(jr("replaceStars",r,e),r.trim().replace(Mi[Qi.STAR],"")),yIe=(r,e)=>(jr("replaceGTE0",r,e),r.trim().replace(Mi[e.includePrerelease?Qi.GTE0PRE:Qi.GTE0],"")),wIe=r=>(e,t,i,n,s,o,a,l,c,u,g,f,h)=>(Xi(i)?t="":Xi(n)?t=`>=${i}.0.0${r?"-0":""}`:Xi(s)?t=`>=${i}.${n}.0${r?"-0":""}`:o?t=`>=${t}`:t=`>=${t}${r?"-0":""}`,Xi(c)?l="":Xi(u)?l=`<${+c+1}.0.0-0`:Xi(g)?l=`<${c}.${+u+1}.0-0`:f?l=`<=${c}.${u}.${g}-${f}`:r?l=`<${c}.${u}.${+g+1}-0`:l=`<=${l}`,`${t} ${l}`.trim()),BIe=(r,e,t)=>{for(let i=0;i0){let n=r[i].semver;if(n.major===e.major&&n.minor===e.minor&&n.patch===e.patch)return!0}return!1}return!0}});var Gd=y((Pet,oj)=>{var Yd=Symbol("SemVer ANY"),ff=class{static get ANY(){return Yd}constructor(e,t){if(t=bIe(t),e instanceof ff){if(e.loose===!!t.loose)return e;e=e.value}px("comparator",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===Yd?this.value="":this.value=this.operator+this.semver.version,px("comp",this)}parse(e){let t=this.options.loose?rj[ij.COMPARATORLOOSE]:rj[ij.COMPARATOR],i=e.match(t);if(!i)throw new TypeError(`Invalid comparator: ${e}`);this.operator=i[1]!==void 0?i[1]:"",this.operator==="="&&(this.operator=""),i[2]?this.semver=new nj(i[2],this.options.loose):this.semver=Yd}toString(){return this.value}test(e){if(px("Comparator.test",e,this.options.loose),this.semver===Yd||e===Yd)return!0;if(typeof e=="string")try{e=new nj(e,this.options)}catch{return!1}return hx(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof ff))throw new TypeError("a Comparator is required");if((!t||typeof t!="object")&&(t={loose:!!t,includePrerelease:!1}),this.operator==="")return this.value===""?!0:new sj(e.value,t).test(this.value);if(e.operator==="")return e.value===""?!0:new sj(this.value,t).test(e.semver);let i=(this.operator===">="||this.operator===">")&&(e.operator===">="||e.operator===">"),n=(this.operator==="<="||this.operator==="<")&&(e.operator==="<="||e.operator==="<"),s=this.semver.version===e.semver.version,o=(this.operator===">="||this.operator==="<=")&&(e.operator===">="||e.operator==="<="),a=hx(this.semver,"<",e.semver,t)&&(this.operator===">="||this.operator===">")&&(e.operator==="<="||e.operator==="<"),l=hx(this.semver,">",e.semver,t)&&(this.operator==="<="||this.operator==="<")&&(e.operator===">="||e.operator===">");return i||n||s&&o||a||l}};oj.exports=ff;var bIe=Ld(),{re:rj,t:ij}=Sc(),hx=Ax(),px=Td(),nj=Oi(),sj=as()});var jd=y((Det,aj)=>{var QIe=as(),SIe=(r,e,t)=>{try{e=new QIe(e,t)}catch{return!1}return e.test(r)};aj.exports=SIe});var lj=y((ket,Aj)=>{var vIe=as(),xIe=(r,e)=>new vIe(r,e).set.map(t=>t.map(i=>i.value).join(" ").trim().split(" "));Aj.exports=xIe});var uj=y((Ret,cj)=>{var PIe=Oi(),DIe=as(),kIe=(r,e,t)=>{let i=null,n=null,s=null;try{s=new DIe(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===-1)&&(i=o,n=new PIe(i,t))}),i};cj.exports=kIe});var fj=y((Fet,gj)=>{var RIe=Oi(),FIe=as(),NIe=(r,e,t)=>{let i=null,n=null,s=null;try{s=new FIe(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===1)&&(i=o,n=new RIe(i,t))}),i};gj.exports=NIe});var dj=y((Net,pj)=>{var dx=Oi(),TIe=as(),hj=Md(),LIe=(r,e)=>{r=new TIe(r,e);let t=new dx("0.0.0");if(r.test(t)||(t=new dx("0.0.0-0"),r.test(t)))return t;t=null;for(let i=0;i{let a=new dx(o.semver.version);switch(o.operator){case">":a.prerelease.length===0?a.patch++:a.prerelease.push(0),a.raw=a.format();case"":case">=":(!s||hj(a,s))&&(s=a);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${o.operator}`)}}),s&&(!t||hj(t,s))&&(t=s)}return t&&r.test(t)?t:null};pj.exports=LIe});var mj=y((Tet,Cj)=>{var OIe=as(),MIe=(r,e)=>{try{return new OIe(r,e).range||"*"}catch{return null}};Cj.exports=MIe});var Qy=y((Let,wj)=>{var UIe=Oi(),yj=Gd(),{ANY:KIe}=yj,HIe=as(),GIe=jd(),Ej=Md(),Ij=Ey(),YIe=yy(),jIe=Iy(),qIe=(r,e,t,i)=>{r=new UIe(r,i),e=new HIe(e,i);let n,s,o,a,l;switch(t){case">":n=Ej,s=YIe,o=Ij,a=">",l=">=";break;case"<":n=Ij,s=jIe,o=Ej,a="<",l="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(GIe(r,e,i))return!1;for(let c=0;c{h.semver===KIe&&(h=new yj(">=0.0.0")),g=g||h,f=f||h,n(h.semver,g.semver,i)?g=h:o(h.semver,f.semver,i)&&(f=h)}),g.operator===a||g.operator===l||(!f.operator||f.operator===a)&&s(r,f.semver))return!1;if(f.operator===l&&o(r,f.semver))return!1}return!0};wj.exports=qIe});var bj=y((Oet,Bj)=>{var JIe=Qy(),WIe=(r,e,t)=>JIe(r,e,">",t);Bj.exports=WIe});var Sj=y((Met,Qj)=>{var zIe=Qy(),VIe=(r,e,t)=>zIe(r,e,"<",t);Qj.exports=VIe});var Pj=y((Uet,xj)=>{var vj=as(),XIe=(r,e,t)=>(r=new vj(r,t),e=new vj(e,t),r.intersects(e));xj.exports=XIe});var kj=y((Ket,Dj)=>{var _Ie=jd(),ZIe=os();Dj.exports=(r,e,t)=>{let i=[],n=null,s=null,o=r.sort((u,g)=>ZIe(u,g,t));for(let u of o)_Ie(u,e,t)?(s=u,n||(n=u)):(s&&i.push([n,s]),s=null,n=null);n&&i.push([n,null]);let a=[];for(let[u,g]of i)u===g?a.push(u):!g&&u===o[0]?a.push("*"):g?u===o[0]?a.push(`<=${g}`):a.push(`${u} - ${g}`):a.push(`>=${u}`);let l=a.join(" || "),c=typeof e.raw=="string"?e.raw:String(e);return l.length{var Rj=as(),Sy=Gd(),{ANY:Cx}=Sy,qd=jd(),mx=os(),$Ie=(r,e,t={})=>{if(r===e)return!0;r=new Rj(r,t),e=new Rj(e,t);let i=!1;e:for(let n of r.set){for(let s of e.set){let o=eye(n,s,t);if(i=i||o!==null,o)continue e}if(i)return!1}return!0},eye=(r,e,t)=>{if(r===e)return!0;if(r.length===1&&r[0].semver===Cx){if(e.length===1&&e[0].semver===Cx)return!0;t.includePrerelease?r=[new Sy(">=0.0.0-0")]:r=[new Sy(">=0.0.0")]}if(e.length===1&&e[0].semver===Cx){if(t.includePrerelease)return!0;e=[new Sy(">=0.0.0")]}let i=new Set,n,s;for(let h of r)h.operator===">"||h.operator===">="?n=Fj(n,h,t):h.operator==="<"||h.operator==="<="?s=Nj(s,h,t):i.add(h.semver);if(i.size>1)return null;let o;if(n&&s){if(o=mx(n.semver,s.semver,t),o>0)return null;if(o===0&&(n.operator!==">="||s.operator!=="<="))return null}for(let h of i){if(n&&!qd(h,String(n),t)||s&&!qd(h,String(s),t))return null;for(let p of e)if(!qd(h,String(p),t))return!1;return!0}let a,l,c,u,g=s&&!t.includePrerelease&&s.semver.prerelease.length?s.semver:!1,f=n&&!t.includePrerelease&&n.semver.prerelease.length?n.semver:!1;g&&g.prerelease.length===1&&s.operator==="<"&&g.prerelease[0]===0&&(g=!1);for(let h of e){if(u=u||h.operator===">"||h.operator===">=",c=c||h.operator==="<"||h.operator==="<=",n){if(f&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===f.major&&h.semver.minor===f.minor&&h.semver.patch===f.patch&&(f=!1),h.operator===">"||h.operator===">="){if(a=Fj(n,h,t),a===h&&a!==n)return!1}else if(n.operator===">="&&!qd(n.semver,String(h),t))return!1}if(s){if(g&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===g.major&&h.semver.minor===g.minor&&h.semver.patch===g.patch&&(g=!1),h.operator==="<"||h.operator==="<="){if(l=Nj(s,h,t),l===h&&l!==s)return!1}else if(s.operator==="<="&&!qd(s.semver,String(h),t))return!1}if(!h.operator&&(s||n)&&o!==0)return!1}return!(n&&c&&!s&&o!==0||s&&u&&!n&&o!==0||f||g)},Fj=(r,e,t)=>{if(!r)return e;let i=mx(r.semver,e.semver,t);return i>0?r:i<0||e.operator===">"&&r.operator===">="?e:r},Nj=(r,e,t)=>{if(!r)return e;let i=mx(r.semver,e.semver,t);return i<0?r:i>0||e.operator==="<"&&r.operator==="<="?e:r};Tj.exports=$Ie});var $r=y((Get,Oj)=>{var Ex=Sc();Oj.exports={re:Ex.re,src:Ex.src,tokens:Ex.t,SEMVER_SPEC_VERSION:Nd().SEMVER_SPEC_VERSION,SemVer:Oi(),compareIdentifiers:hy().compareIdentifiers,rcompareIdentifiers:hy().rcompareIdentifiers,parse:vc(),valid:aY(),clean:lY(),inc:uY(),diff:CY(),major:EY(),minor:yY(),patch:BY(),prerelease:QY(),compare:os(),rcompare:vY(),compareLoose:PY(),compareBuild:my(),sort:FY(),rsort:TY(),gt:Md(),lt:Ey(),eq:Cy(),neq:ax(),gte:Iy(),lte:yy(),cmp:Ax(),coerce:YY(),Comparator:Gd(),Range:as(),satisfies:jd(),toComparators:lj(),maxSatisfying:uj(),minSatisfying:fj(),minVersion:dj(),validRange:mj(),outside:Qy(),gtr:bj(),ltr:Sj(),intersects:Pj(),simplifyRange:kj(),subset:Lj()}});var Ix=y(vy=>{"use strict";Object.defineProperty(vy,"__esModule",{value:!0});vy.VERSION=void 0;vy.VERSION="9.1.0"});var Gt=y((exports,module)=>{"use strict";var __spreadArray=exports&&exports.__spreadArray||function(r,e,t){if(t||arguments.length===2)for(var i=0,n=e.length,s;i{(function(r,e){typeof define=="function"&&define.amd?define([],e):typeof xy=="object"&&xy.exports?xy.exports=e():r.regexpToAst=e()})(typeof self<"u"?self:Mj,function(){function r(){}r.prototype.saveState=function(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}},r.prototype.restoreState=function(p){this.idx=p.idx,this.input=p.input,this.groupIdx=p.groupIdx},r.prototype.pattern=function(p){this.idx=0,this.input=p,this.groupIdx=0,this.consumeChar("/");var C=this.disjunction();this.consumeChar("/");for(var w={type:"Flags",loc:{begin:this.idx,end:p.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};this.isRegExpFlag();)switch(this.popChar()){case"g":o(w,"global");break;case"i":o(w,"ignoreCase");break;case"m":o(w,"multiLine");break;case"u":o(w,"unicode");break;case"y":o(w,"sticky");break}if(this.idx!==this.input.length)throw Error("Redundant input: "+this.input.substring(this.idx));return{type:"Pattern",flags:w,value:C,loc:this.loc(0)}},r.prototype.disjunction=function(){var p=[],C=this.idx;for(p.push(this.alternative());this.peekChar()==="|";)this.consumeChar("|"),p.push(this.alternative());return{type:"Disjunction",value:p,loc:this.loc(C)}},r.prototype.alternative=function(){for(var p=[],C=this.idx;this.isTerm();)p.push(this.term());return{type:"Alternative",value:p,loc:this.loc(C)}},r.prototype.term=function(){return this.isAssertion()?this.assertion():this.atom()},r.prototype.assertion=function(){var p=this.idx;switch(this.popChar()){case"^":return{type:"StartAnchor",loc:this.loc(p)};case"$":return{type:"EndAnchor",loc:this.loc(p)};case"\\":switch(this.popChar()){case"b":return{type:"WordBoundary",loc:this.loc(p)};case"B":return{type:"NonWordBoundary",loc:this.loc(p)}}throw Error("Invalid Assertion Escape");case"(":this.consumeChar("?");var C;switch(this.popChar()){case"=":C="Lookahead";break;case"!":C="NegativeLookahead";break}a(C);var w=this.disjunction();return this.consumeChar(")"),{type:C,value:w,loc:this.loc(p)}}l()},r.prototype.quantifier=function(p){var C,w=this.idx;switch(this.popChar()){case"*":C={atLeast:0,atMost:1/0};break;case"+":C={atLeast:1,atMost:1/0};break;case"?":C={atLeast:0,atMost:1};break;case"{":var B=this.integerIncludingZero();switch(this.popChar()){case"}":C={atLeast:B,atMost:B};break;case",":var v;this.isDigit()?(v=this.integerIncludingZero(),C={atLeast:B,atMost:v}):C={atLeast:B,atMost:1/0},this.consumeChar("}");break}if(p===!0&&C===void 0)return;a(C);break}if(!(p===!0&&C===void 0))return a(C),this.peekChar(0)==="?"?(this.consumeChar("?"),C.greedy=!1):C.greedy=!0,C.type="Quantifier",C.loc=this.loc(w),C},r.prototype.atom=function(){var p,C=this.idx;switch(this.peekChar()){case".":p=this.dotAll();break;case"\\":p=this.atomEscape();break;case"[":p=this.characterClass();break;case"(":p=this.group();break}return p===void 0&&this.isPatternCharacter()&&(p=this.patternCharacter()),a(p),p.loc=this.loc(C),this.isQuantifier()&&(p.quantifier=this.quantifier()),p},r.prototype.dotAll=function(){return this.consumeChar("."),{type:"Set",complement:!0,value:[n(` +`),n("\r"),n("\u2028"),n("\u2029")]}},r.prototype.atomEscape=function(){switch(this.consumeChar("\\"),this.peekChar()){case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return this.decimalEscapeAtom();case"d":case"D":case"s":case"S":case"w":case"W":return this.characterClassEscape();case"f":case"n":case"r":case"t":case"v":return this.controlEscapeAtom();case"c":return this.controlLetterEscapeAtom();case"0":return this.nulCharacterAtom();case"x":return this.hexEscapeSequenceAtom();case"u":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}},r.prototype.decimalEscapeAtom=function(){var p=this.positiveInteger();return{type:"GroupBackReference",value:p}},r.prototype.characterClassEscape=function(){var p,C=!1;switch(this.popChar()){case"d":p=u;break;case"D":p=u,C=!0;break;case"s":p=f;break;case"S":p=f,C=!0;break;case"w":p=g;break;case"W":p=g,C=!0;break}return a(p),{type:"Set",value:p,complement:C}},r.prototype.controlEscapeAtom=function(){var p;switch(this.popChar()){case"f":p=n("\f");break;case"n":p=n(` +`);break;case"r":p=n("\r");break;case"t":p=n(" ");break;case"v":p=n("\v");break}return a(p),{type:"Character",value:p}},r.prototype.controlLetterEscapeAtom=function(){this.consumeChar("c");var p=this.popChar();if(/[a-zA-Z]/.test(p)===!1)throw Error("Invalid ");var C=p.toUpperCase().charCodeAt(0)-64;return{type:"Character",value:C}},r.prototype.nulCharacterAtom=function(){return this.consumeChar("0"),{type:"Character",value:n("\0")}},r.prototype.hexEscapeSequenceAtom=function(){return this.consumeChar("x"),this.parseHexDigits(2)},r.prototype.regExpUnicodeEscapeSequenceAtom=function(){return this.consumeChar("u"),this.parseHexDigits(4)},r.prototype.identityEscapeAtom=function(){var p=this.popChar();return{type:"Character",value:n(p)}},r.prototype.classPatternCharacterAtom=function(){switch(this.peekChar()){case` +`:case"\r":case"\u2028":case"\u2029":case"\\":case"]":throw Error("TBD");default:var p=this.popChar();return{type:"Character",value:n(p)}}},r.prototype.characterClass=function(){var p=[],C=!1;for(this.consumeChar("["),this.peekChar(0)==="^"&&(this.consumeChar("^"),C=!0);this.isClassAtom();){var w=this.classAtom(),B=w.type==="Character";if(B&&this.isRangeDash()){this.consumeChar("-");var v=this.classAtom(),D=v.type==="Character";if(D){if(v.value=this.input.length)throw Error("Unexpected end of input");this.idx++},r.prototype.loc=function(p){return{begin:p,end:this.idx}};var e=/[0-9a-fA-F]/,t=/[0-9]/,i=/[1-9]/;function n(p){return p.charCodeAt(0)}function s(p,C){p.length!==void 0?p.forEach(function(w){C.push(w)}):C.push(p)}function o(p,C){if(p[C]===!0)throw"duplicate flag "+C;p[C]=!0}function a(p){if(p===void 0)throw Error("Internal Error - Should never get here!")}function l(){throw Error("Internal Error - Should never get here!")}var c,u=[];for(c=n("0");c<=n("9");c++)u.push(c);var g=[n("_")].concat(u);for(c=n("a");c<=n("z");c++)g.push(c);for(c=n("A");c<=n("Z");c++)g.push(c);var f=[n(" "),n("\f"),n(` +`),n("\r"),n(" "),n("\v"),n(" "),n("\xA0"),n("\u1680"),n("\u2000"),n("\u2001"),n("\u2002"),n("\u2003"),n("\u2004"),n("\u2005"),n("\u2006"),n("\u2007"),n("\u2008"),n("\u2009"),n("\u200A"),n("\u2028"),n("\u2029"),n("\u202F"),n("\u205F"),n("\u3000"),n("\uFEFF")];function h(){}return h.prototype.visitChildren=function(p){for(var C in p){var w=p[C];p.hasOwnProperty(C)&&(w.type!==void 0?this.visit(w):Array.isArray(w)&&w.forEach(function(B){this.visit(B)},this))}},h.prototype.visit=function(p){switch(p.type){case"Pattern":this.visitPattern(p);break;case"Flags":this.visitFlags(p);break;case"Disjunction":this.visitDisjunction(p);break;case"Alternative":this.visitAlternative(p);break;case"StartAnchor":this.visitStartAnchor(p);break;case"EndAnchor":this.visitEndAnchor(p);break;case"WordBoundary":this.visitWordBoundary(p);break;case"NonWordBoundary":this.visitNonWordBoundary(p);break;case"Lookahead":this.visitLookahead(p);break;case"NegativeLookahead":this.visitNegativeLookahead(p);break;case"Character":this.visitCharacter(p);break;case"Set":this.visitSet(p);break;case"Group":this.visitGroup(p);break;case"GroupBackReference":this.visitGroupBackReference(p);break;case"Quantifier":this.visitQuantifier(p);break}this.visitChildren(p)},h.prototype.visitPattern=function(p){},h.prototype.visitFlags=function(p){},h.prototype.visitDisjunction=function(p){},h.prototype.visitAlternative=function(p){},h.prototype.visitStartAnchor=function(p){},h.prototype.visitEndAnchor=function(p){},h.prototype.visitWordBoundary=function(p){},h.prototype.visitNonWordBoundary=function(p){},h.prototype.visitLookahead=function(p){},h.prototype.visitNegativeLookahead=function(p){},h.prototype.visitCharacter=function(p){},h.prototype.visitSet=function(p){},h.prototype.visitGroup=function(p){},h.prototype.visitGroupBackReference=function(p){},h.prototype.visitQuantifier=function(p){},{RegExpParser:r,BaseRegExpVisitor:h,VERSION:"0.5.0"}})});var ky=y(hf=>{"use strict";Object.defineProperty(hf,"__esModule",{value:!0});hf.clearRegExpParserCache=hf.getRegExpAst=void 0;var tye=Py(),Dy={},rye=new tye.RegExpParser;function iye(r){var e=r.toString();if(Dy.hasOwnProperty(e))return Dy[e];var t=rye.pattern(e);return Dy[e]=t,t}hf.getRegExpAst=iye;function nye(){Dy={}}hf.clearRegExpParserCache=nye});var Yj=y(dn=>{"use strict";var sye=dn&&dn.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(dn,"__esModule",{value:!0});dn.canMatchCharCode=dn.firstCharOptimizedIndices=dn.getOptimizedStartCodesIndices=dn.failedOptimizationPrefixMsg=void 0;var Kj=Py(),As=Gt(),Hj=ky(),Da=wx(),Gj="Complement Sets are not supported for first char optimization";dn.failedOptimizationPrefixMsg=`Unable to use "first char" lexer optimizations: +`;function oye(r,e){e===void 0&&(e=!1);try{var t=(0,Hj.getRegExpAst)(r),i=Fy(t.value,{},t.flags.ignoreCase);return i}catch(s){if(s.message===Gj)e&&(0,As.PRINT_WARNING)(""+dn.failedOptimizationPrefixMsg+(" Unable to optimize: < "+r.toString()+` > +`)+` Complement Sets cannot be automatically optimized. + This will disable the lexer's first char optimizations. + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{var n="";e&&(n=` + This will disable the lexer's first char optimizations. + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),(0,As.PRINT_ERROR)(dn.failedOptimizationPrefixMsg+` +`+(" Failed parsing: < "+r.toString()+` > +`)+(" Using the regexp-to-ast library version: "+Kj.VERSION+` +`)+" Please open an issue at: https://github.com/bd82/regexp-to-ast/issues"+n)}}return[]}dn.getOptimizedStartCodesIndices=oye;function Fy(r,e,t){switch(r.type){case"Disjunction":for(var i=0;i=Da.minOptimizationVal)for(var f=u.from>=Da.minOptimizationVal?u.from:Da.minOptimizationVal,h=u.to,p=(0,Da.charCodeToOptimizedIndex)(f),C=(0,Da.charCodeToOptimizedIndex)(h),w=p;w<=C;w++)e[w]=w}}});break;case"Group":Fy(o.value,e,t);break;default:throw Error("Non Exhaustive Match")}var a=o.quantifier!==void 0&&o.quantifier.atLeast===0;if(o.type==="Group"&&yx(o)===!1||o.type!=="Group"&&a===!1)break}break;default:throw Error("non exhaustive match!")}return(0,As.values)(e)}dn.firstCharOptimizedIndices=Fy;function Ry(r,e,t){var i=(0,Da.charCodeToOptimizedIndex)(r);e[i]=i,t===!0&&aye(r,e)}function aye(r,e){var t=String.fromCharCode(r),i=t.toUpperCase();if(i!==t){var n=(0,Da.charCodeToOptimizedIndex)(i.charCodeAt(0));e[n]=n}else{var s=t.toLowerCase();if(s!==t){var n=(0,Da.charCodeToOptimizedIndex)(s.charCodeAt(0));e[n]=n}}}function Uj(r,e){return(0,As.find)(r.value,function(t){if(typeof t=="number")return(0,As.contains)(e,t);var i=t;return(0,As.find)(e,function(n){return i.from<=n&&n<=i.to})!==void 0})}function yx(r){return r.quantifier&&r.quantifier.atLeast===0?!0:r.value?(0,As.isArray)(r.value)?(0,As.every)(r.value,yx):yx(r.value):!1}var Aye=function(r){sye(e,r);function e(t){var i=r.call(this)||this;return i.targetCharCodes=t,i.found=!1,i}return e.prototype.visitChildren=function(t){if(this.found!==!0){switch(t.type){case"Lookahead":this.visitLookahead(t);return;case"NegativeLookahead":this.visitNegativeLookahead(t);return}r.prototype.visitChildren.call(this,t)}},e.prototype.visitCharacter=function(t){(0,As.contains)(this.targetCharCodes,t.value)&&(this.found=!0)},e.prototype.visitSet=function(t){t.complement?Uj(t,this.targetCharCodes)===void 0&&(this.found=!0):Uj(t,this.targetCharCodes)!==void 0&&(this.found=!0)},e}(Kj.BaseRegExpVisitor);function lye(r,e){if(e instanceof RegExp){var t=(0,Hj.getRegExpAst)(e),i=new Aye(r);return i.visit(t),i.found}else return(0,As.find)(e,function(n){return(0,As.contains)(r,n.charCodeAt(0))})!==void 0}dn.canMatchCharCode=lye});var wx=y(Je=>{"use strict";var jj=Je&&Je.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Je,"__esModule",{value:!0});Je.charCodeToOptimizedIndex=Je.minOptimizationVal=Je.buildLineBreakIssueMessage=Je.LineTerminatorOptimizedTester=Je.isShortPattern=Je.isCustomPattern=Je.cloneEmptyGroups=Je.performWarningRuntimeChecks=Je.performRuntimeChecks=Je.addStickyFlag=Je.addStartOfInput=Je.findUnreachablePatterns=Je.findModesThatDoNotExist=Je.findInvalidGroupType=Je.findDuplicatePatterns=Je.findUnsupportedFlags=Je.findStartOfInputAnchor=Je.findEmptyMatchRegExps=Je.findEndOfInputAnchor=Je.findInvalidPatterns=Je.findMissingPatterns=Je.validatePatterns=Je.analyzeTokenTypes=Je.enableSticky=Je.disableSticky=Je.SUPPORT_STICKY=Je.MODES=Je.DEFAULT_MODE=void 0;var qj=Py(),ir=Jd(),Se=Gt(),pf=Yj(),Jj=ky(),Do="PATTERN";Je.DEFAULT_MODE="defaultMode";Je.MODES="modes";Je.SUPPORT_STICKY=typeof new RegExp("(?:)").sticky=="boolean";function cye(){Je.SUPPORT_STICKY=!1}Je.disableSticky=cye;function uye(){Je.SUPPORT_STICKY=!0}Je.enableSticky=uye;function gye(r,e){e=(0,Se.defaults)(e,{useSticky:Je.SUPPORT_STICKY,debug:!1,safeMode:!1,positionTracking:"full",lineTerminatorCharacters:["\r",` +`],tracer:function(v,D){return D()}});var t=e.tracer;t("initCharCodeToOptimizedIndexMap",function(){wye()});var i;t("Reject Lexer.NA",function(){i=(0,Se.reject)(r,function(v){return v[Do]===ir.Lexer.NA})});var n=!1,s;t("Transform Patterns",function(){n=!1,s=(0,Se.map)(i,function(v){var D=v[Do];if((0,Se.isRegExp)(D)){var T=D.source;return T.length===1&&T!=="^"&&T!=="$"&&T!=="."&&!D.ignoreCase?T:T.length===2&&T[0]==="\\"&&!(0,Se.contains)(["d","D","s","S","t","r","n","t","0","c","b","B","f","v","w","W"],T[1])?T[1]:e.useSticky?Qx(D):bx(D)}else{if((0,Se.isFunction)(D))return n=!0,{exec:D};if((0,Se.has)(D,"exec"))return n=!0,D;if(typeof D=="string"){if(D.length===1)return D;var H=D.replace(/[\\^$.*+?()[\]{}|]/g,"\\$&"),j=new RegExp(H);return e.useSticky?Qx(j):bx(j)}else throw Error("non exhaustive match")}})});var o,a,l,c,u;t("misc mapping",function(){o=(0,Se.map)(i,function(v){return v.tokenTypeIdx}),a=(0,Se.map)(i,function(v){var D=v.GROUP;if(D!==ir.Lexer.SKIPPED){if((0,Se.isString)(D))return D;if((0,Se.isUndefined)(D))return!1;throw Error("non exhaustive match")}}),l=(0,Se.map)(i,function(v){var D=v.LONGER_ALT;if(D){var T=(0,Se.isArray)(D)?(0,Se.map)(D,function(H){return(0,Se.indexOf)(i,H)}):[(0,Se.indexOf)(i,D)];return T}}),c=(0,Se.map)(i,function(v){return v.PUSH_MODE}),u=(0,Se.map)(i,function(v){return(0,Se.has)(v,"POP_MODE")})});var g;t("Line Terminator Handling",function(){var v=oq(e.lineTerminatorCharacters);g=(0,Se.map)(i,function(D){return!1}),e.positionTracking!=="onlyOffset"&&(g=(0,Se.map)(i,function(D){if((0,Se.has)(D,"LINE_BREAKS"))return D.LINE_BREAKS;if(nq(D,v)===!1)return(0,pf.canMatchCharCode)(v,D.PATTERN)}))});var f,h,p,C;t("Misc Mapping #2",function(){f=(0,Se.map)(i,vx),h=(0,Se.map)(s,iq),p=(0,Se.reduce)(i,function(v,D){var T=D.GROUP;return(0,Se.isString)(T)&&T!==ir.Lexer.SKIPPED&&(v[T]=[]),v},{}),C=(0,Se.map)(s,function(v,D){return{pattern:s[D],longerAlt:l[D],canLineTerminator:g[D],isCustom:f[D],short:h[D],group:a[D],push:c[D],pop:u[D],tokenTypeIdx:o[D],tokenType:i[D]}})});var w=!0,B=[];return e.safeMode||t("First Char Optimization",function(){B=(0,Se.reduce)(i,function(v,D,T){if(typeof D.PATTERN=="string"){var H=D.PATTERN.charCodeAt(0),j=Sx(H);Bx(v,j,C[T])}else if((0,Se.isArray)(D.START_CHARS_HINT)){var $;(0,Se.forEach)(D.START_CHARS_HINT,function(W){var Z=typeof W=="string"?W.charCodeAt(0):W,A=Sx(Z);$!==A&&($=A,Bx(v,A,C[T]))})}else if((0,Se.isRegExp)(D.PATTERN))if(D.PATTERN.unicode)w=!1,e.ensureOptimizations&&(0,Se.PRINT_ERROR)(""+pf.failedOptimizationPrefixMsg+(" Unable to analyze < "+D.PATTERN.toString()+` > pattern. +`)+` The regexp unicode flag is not currently supported by the regexp-to-ast library. + This will disable the lexer's first char optimizations. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{var V=(0,pf.getOptimizedStartCodesIndices)(D.PATTERN,e.ensureOptimizations);(0,Se.isEmpty)(V)&&(w=!1),(0,Se.forEach)(V,function(W){Bx(v,W,C[T])})}else e.ensureOptimizations&&(0,Se.PRINT_ERROR)(""+pf.failedOptimizationPrefixMsg+(" TokenType: <"+D.name+`> is using a custom token pattern without providing parameter. +`)+` This will disable the lexer's first char optimizations. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),w=!1;return v},[])}),t("ArrayPacking",function(){B=(0,Se.packArray)(B)}),{emptyGroups:p,patternIdxToConfig:C,charCodeToPatternIdxToConfig:B,hasCustom:n,canBeOptimized:w}}Je.analyzeTokenTypes=gye;function fye(r,e){var t=[],i=Wj(r);t=t.concat(i.errors);var n=zj(i.valid),s=n.valid;return t=t.concat(n.errors),t=t.concat(hye(s)),t=t.concat(eq(s)),t=t.concat(tq(s,e)),t=t.concat(rq(s)),t}Je.validatePatterns=fye;function hye(r){var e=[],t=(0,Se.filter)(r,function(i){return(0,Se.isRegExp)(i[Do])});return e=e.concat(Vj(t)),e=e.concat(_j(t)),e=e.concat(Zj(t)),e=e.concat($j(t)),e=e.concat(Xj(t)),e}function Wj(r){var e=(0,Se.filter)(r,function(n){return!(0,Se.has)(n,Do)}),t=(0,Se.map)(e,function(n){return{message:"Token Type: ->"+n.name+"<- missing static 'PATTERN' property",type:ir.LexerDefinitionErrorType.MISSING_PATTERN,tokenTypes:[n]}}),i=(0,Se.difference)(r,e);return{errors:t,valid:i}}Je.findMissingPatterns=Wj;function zj(r){var e=(0,Se.filter)(r,function(n){var s=n[Do];return!(0,Se.isRegExp)(s)&&!(0,Se.isFunction)(s)&&!(0,Se.has)(s,"exec")&&!(0,Se.isString)(s)}),t=(0,Se.map)(e,function(n){return{message:"Token Type: ->"+n.name+"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.",type:ir.LexerDefinitionErrorType.INVALID_PATTERN,tokenTypes:[n]}}),i=(0,Se.difference)(r,e);return{errors:t,valid:i}}Je.findInvalidPatterns=zj;var pye=/[^\\][\$]/;function Vj(r){var e=function(n){jj(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitEndAnchor=function(o){this.found=!0},s}(qj.BaseRegExpVisitor),t=(0,Se.filter)(r,function(n){var s=n[Do];try{var o=(0,Jj.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return pye.test(s.source)}}),i=(0,Se.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error: + Token Type: ->`+n.name+`<- static 'PATTERN' cannot contain end of input anchor '$' + See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:ir.LexerDefinitionErrorType.EOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Je.findEndOfInputAnchor=Vj;function Xj(r){var e=(0,Se.filter)(r,function(i){var n=i[Do];return n.test("")}),t=(0,Se.map)(e,function(i){return{message:"Token Type: ->"+i.name+"<- static 'PATTERN' must not match an empty string",type:ir.LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,tokenTypes:[i]}});return t}Je.findEmptyMatchRegExps=Xj;var dye=/[^\\[][\^]|^\^/;function _j(r){var e=function(n){jj(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitStartAnchor=function(o){this.found=!0},s}(qj.BaseRegExpVisitor),t=(0,Se.filter)(r,function(n){var s=n[Do];try{var o=(0,Jj.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return dye.test(s.source)}}),i=(0,Se.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error: + Token Type: ->`+n.name+`<- static 'PATTERN' cannot contain start of input anchor '^' + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:ir.LexerDefinitionErrorType.SOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Je.findStartOfInputAnchor=_j;function Zj(r){var e=(0,Se.filter)(r,function(i){var n=i[Do];return n instanceof RegExp&&(n.multiline||n.global)}),t=(0,Se.map)(e,function(i){return{message:"Token Type: ->"+i.name+"<- static 'PATTERN' may NOT contain global('g') or multiline('m')",type:ir.LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[i]}});return t}Je.findUnsupportedFlags=Zj;function $j(r){var e=[],t=(0,Se.map)(r,function(s){return(0,Se.reduce)(r,function(o,a){return s.PATTERN.source===a.PATTERN.source&&!(0,Se.contains)(e,a)&&a.PATTERN!==ir.Lexer.NA&&(e.push(a),o.push(a)),o},[])});t=(0,Se.compact)(t);var i=(0,Se.filter)(t,function(s){return s.length>1}),n=(0,Se.map)(i,function(s){var o=(0,Se.map)(s,function(l){return l.name}),a=(0,Se.first)(s).PATTERN;return{message:"The same RegExp pattern ->"+a+"<-"+("has been used in all of the following Token Types: "+o.join(", ")+" <-"),type:ir.LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,tokenTypes:s}});return n}Je.findDuplicatePatterns=$j;function eq(r){var e=(0,Se.filter)(r,function(i){if(!(0,Se.has)(i,"GROUP"))return!1;var n=i.GROUP;return n!==ir.Lexer.SKIPPED&&n!==ir.Lexer.NA&&!(0,Se.isString)(n)}),t=(0,Se.map)(e,function(i){return{message:"Token Type: ->"+i.name+"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String",type:ir.LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,tokenTypes:[i]}});return t}Je.findInvalidGroupType=eq;function tq(r,e){var t=(0,Se.filter)(r,function(n){return n.PUSH_MODE!==void 0&&!(0,Se.contains)(e,n.PUSH_MODE)}),i=(0,Se.map)(t,function(n){var s="Token Type: ->"+n.name+"<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->"+n.PUSH_MODE+"<-which does not exist";return{message:s,type:ir.LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[n]}});return i}Je.findModesThatDoNotExist=tq;function rq(r){var e=[],t=(0,Se.reduce)(r,function(i,n,s){var o=n.PATTERN;return o===ir.Lexer.NA||((0,Se.isString)(o)?i.push({str:o,idx:s,tokenType:n}):(0,Se.isRegExp)(o)&&mye(o)&&i.push({str:o.source,idx:s,tokenType:n})),i},[]);return(0,Se.forEach)(r,function(i,n){(0,Se.forEach)(t,function(s){var o=s.str,a=s.idx,l=s.tokenType;if(n"+i.name+"<-")+`in the lexer's definition. +See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:c,type:ir.LexerDefinitionErrorType.UNREACHABLE_PATTERN,tokenTypes:[i,l]})}})}),e}Je.findUnreachablePatterns=rq;function Cye(r,e){if((0,Se.isRegExp)(e)){var t=e.exec(r);return t!==null&&t.index===0}else{if((0,Se.isFunction)(e))return e(r,0,[],{});if((0,Se.has)(e,"exec"))return e.exec(r,0,[],{});if(typeof e=="string")return e===r;throw Error("non exhaustive match")}}function mye(r){var e=[".","\\","[","]","|","^","$","(",")","?","*","+","{"];return(0,Se.find)(e,function(t){return r.source.indexOf(t)!==-1})===void 0}function bx(r){var e=r.ignoreCase?"i":"";return new RegExp("^(?:"+r.source+")",e)}Je.addStartOfInput=bx;function Qx(r){var e=r.ignoreCase?"iy":"y";return new RegExp(""+r.source,e)}Je.addStickyFlag=Qx;function Eye(r,e,t){var i=[];return(0,Se.has)(r,Je.DEFAULT_MODE)||i.push({message:"A MultiMode Lexer cannot be initialized without a <"+Je.DEFAULT_MODE+`> property in its definition +`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),(0,Se.has)(r,Je.MODES)||i.push({message:"A MultiMode Lexer cannot be initialized without a <"+Je.MODES+`> property in its definition +`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),(0,Se.has)(r,Je.MODES)&&(0,Se.has)(r,Je.DEFAULT_MODE)&&!(0,Se.has)(r.modes,r.defaultMode)&&i.push({message:"A MultiMode Lexer cannot be initialized with a "+Je.DEFAULT_MODE+": <"+r.defaultMode+`>which does not exist +`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),(0,Se.has)(r,Je.MODES)&&(0,Se.forEach)(r.modes,function(n,s){(0,Se.forEach)(n,function(o,a){(0,Se.isUndefined)(o)&&i.push({message:"A Lexer cannot be initialized using an undefined Token Type. Mode:"+("<"+s+"> at index: <"+a+`> +`),type:ir.LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED})})}),i}Je.performRuntimeChecks=Eye;function Iye(r,e,t){var i=[],n=!1,s=(0,Se.compact)((0,Se.flatten)((0,Se.mapValues)(r.modes,function(l){return l}))),o=(0,Se.reject)(s,function(l){return l[Do]===ir.Lexer.NA}),a=oq(t);return e&&(0,Se.forEach)(o,function(l){var c=nq(l,a);if(c!==!1){var u=sq(l,c),g={message:u,type:c.issue,tokenType:l};i.push(g)}else(0,Se.has)(l,"LINE_BREAKS")?l.LINE_BREAKS===!0&&(n=!0):(0,pf.canMatchCharCode)(a,l.PATTERN)&&(n=!0)}),e&&!n&&i.push({message:`Warning: No LINE_BREAKS Found. + This Lexer has been defined to track line and column information, + But none of the Token Types can be identified as matching a line terminator. + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS + for details.`,type:ir.LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS}),i}Je.performWarningRuntimeChecks=Iye;function yye(r){var e={},t=(0,Se.keys)(r);return(0,Se.forEach)(t,function(i){var n=r[i];if((0,Se.isArray)(n))e[i]=[];else throw Error("non exhaustive match")}),e}Je.cloneEmptyGroups=yye;function vx(r){var e=r.PATTERN;if((0,Se.isRegExp)(e))return!1;if((0,Se.isFunction)(e))return!0;if((0,Se.has)(e,"exec"))return!0;if((0,Se.isString)(e))return!1;throw Error("non exhaustive match")}Je.isCustomPattern=vx;function iq(r){return(0,Se.isString)(r)&&r.length===1?r.charCodeAt(0):!1}Je.isShortPattern=iq;Je.LineTerminatorOptimizedTester={test:function(r){for(var e=r.length,t=this.lastIndex;t Token Type +`)+(" Root cause: "+e.errMsg+`. +`)+" For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR";if(e.issue===ir.LexerDefinitionErrorType.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the option. +`+(" The problem is in the <"+r.name+`> Token Type +`)+" For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK";throw Error("non exhaustive match")}Je.buildLineBreakIssueMessage=sq;function oq(r){var e=(0,Se.map)(r,function(t){return(0,Se.isString)(t)&&t.length>0?t.charCodeAt(0):t});return e}function Bx(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}Je.minOptimizationVal=256;var Ny=[];function Sx(r){return r255?255+~~(r/255):r}}});var df=y(Nt=>{"use strict";Object.defineProperty(Nt,"__esModule",{value:!0});Nt.isTokenType=Nt.hasExtendingTokensTypesMapProperty=Nt.hasExtendingTokensTypesProperty=Nt.hasCategoriesProperty=Nt.hasShortKeyProperty=Nt.singleAssignCategoriesToksMap=Nt.assignCategoriesMapProp=Nt.assignCategoriesTokensProp=Nt.assignTokenDefaultProps=Nt.expandCategories=Nt.augmentTokenTypes=Nt.tokenIdxToClass=Nt.tokenShortNameIdx=Nt.tokenStructuredMatcherNoCategories=Nt.tokenStructuredMatcher=void 0;var ei=Gt();function Bye(r,e){var t=r.tokenTypeIdx;return t===e.tokenTypeIdx?!0:e.isParent===!0&&e.categoryMatchesMap[t]===!0}Nt.tokenStructuredMatcher=Bye;function bye(r,e){return r.tokenTypeIdx===e.tokenTypeIdx}Nt.tokenStructuredMatcherNoCategories=bye;Nt.tokenShortNameIdx=1;Nt.tokenIdxToClass={};function Qye(r){var e=aq(r);Aq(e),cq(e),lq(e),(0,ei.forEach)(e,function(t){t.isParent=t.categoryMatches.length>0})}Nt.augmentTokenTypes=Qye;function aq(r){for(var e=(0,ei.cloneArr)(r),t=r,i=!0;i;){t=(0,ei.compact)((0,ei.flatten)((0,ei.map)(t,function(s){return s.CATEGORIES})));var n=(0,ei.difference)(t,e);e=e.concat(n),(0,ei.isEmpty)(n)?i=!1:t=n}return e}Nt.expandCategories=aq;function Aq(r){(0,ei.forEach)(r,function(e){uq(e)||(Nt.tokenIdxToClass[Nt.tokenShortNameIdx]=e,e.tokenTypeIdx=Nt.tokenShortNameIdx++),xx(e)&&!(0,ei.isArray)(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),xx(e)||(e.CATEGORIES=[]),gq(e)||(e.categoryMatches=[]),fq(e)||(e.categoryMatchesMap={})})}Nt.assignTokenDefaultProps=Aq;function lq(r){(0,ei.forEach)(r,function(e){e.categoryMatches=[],(0,ei.forEach)(e.categoryMatchesMap,function(t,i){e.categoryMatches.push(Nt.tokenIdxToClass[i].tokenTypeIdx)})})}Nt.assignCategoriesTokensProp=lq;function cq(r){(0,ei.forEach)(r,function(e){Px([],e)})}Nt.assignCategoriesMapProp=cq;function Px(r,e){(0,ei.forEach)(r,function(t){e.categoryMatchesMap[t.tokenTypeIdx]=!0}),(0,ei.forEach)(e.CATEGORIES,function(t){var i=r.concat(e);(0,ei.contains)(i,t)||Px(i,t)})}Nt.singleAssignCategoriesToksMap=Px;function uq(r){return(0,ei.has)(r,"tokenTypeIdx")}Nt.hasShortKeyProperty=uq;function xx(r){return(0,ei.has)(r,"CATEGORIES")}Nt.hasCategoriesProperty=xx;function gq(r){return(0,ei.has)(r,"categoryMatches")}Nt.hasExtendingTokensTypesProperty=gq;function fq(r){return(0,ei.has)(r,"categoryMatchesMap")}Nt.hasExtendingTokensTypesMapProperty=fq;function Sye(r){return(0,ei.has)(r,"tokenTypeIdx")}Nt.isTokenType=Sye});var Dx=y(Ty=>{"use strict";Object.defineProperty(Ty,"__esModule",{value:!0});Ty.defaultLexerErrorProvider=void 0;Ty.defaultLexerErrorProvider={buildUnableToPopLexerModeMessage:function(r){return"Unable to pop Lexer Mode after encountering Token ->"+r.image+"<- The Mode Stack is empty"},buildUnexpectedCharactersMessage:function(r,e,t,i,n){return"unexpected character: ->"+r.charAt(e)+"<- at offset: "+e+","+(" skipped "+t+" characters.")}}});var Jd=y(Rc=>{"use strict";Object.defineProperty(Rc,"__esModule",{value:!0});Rc.Lexer=Rc.LexerDefinitionErrorType=void 0;var Vs=wx(),nr=Gt(),vye=df(),xye=Dx(),Pye=ky(),Dye;(function(r){r[r.MISSING_PATTERN=0]="MISSING_PATTERN",r[r.INVALID_PATTERN=1]="INVALID_PATTERN",r[r.EOI_ANCHOR_FOUND=2]="EOI_ANCHOR_FOUND",r[r.UNSUPPORTED_FLAGS_FOUND=3]="UNSUPPORTED_FLAGS_FOUND",r[r.DUPLICATE_PATTERNS_FOUND=4]="DUPLICATE_PATTERNS_FOUND",r[r.INVALID_GROUP_TYPE_FOUND=5]="INVALID_GROUP_TYPE_FOUND",r[r.PUSH_MODE_DOES_NOT_EXIST=6]="PUSH_MODE_DOES_NOT_EXIST",r[r.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]="MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE",r[r.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]="MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY",r[r.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]="MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST",r[r.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]="LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED",r[r.SOI_ANCHOR_FOUND=11]="SOI_ANCHOR_FOUND",r[r.EMPTY_MATCH_PATTERN=12]="EMPTY_MATCH_PATTERN",r[r.NO_LINE_BREAKS_FLAGS=13]="NO_LINE_BREAKS_FLAGS",r[r.UNREACHABLE_PATTERN=14]="UNREACHABLE_PATTERN",r[r.IDENTIFY_TERMINATOR=15]="IDENTIFY_TERMINATOR",r[r.CUSTOM_LINE_BREAK=16]="CUSTOM_LINE_BREAK"})(Dye=Rc.LexerDefinitionErrorType||(Rc.LexerDefinitionErrorType={}));var Wd={deferDefinitionErrorsHandling:!1,positionTracking:"full",lineTerminatorsPattern:/\n|\r\n?/g,lineTerminatorCharacters:[` +`,"\r"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:xye.defaultLexerErrorProvider,traceInitPerf:!1,skipValidations:!1};Object.freeze(Wd);var kye=function(){function r(e,t){var i=this;if(t===void 0&&(t=Wd),this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.config=void 0,this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},typeof t=="boolean")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object. +a boolean 2nd argument is no longer supported`);this.config=(0,nr.merge)(Wd,t);var n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n=="number"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT("Lexer Constructor",function(){var s,o=!0;i.TRACE_INIT("Lexer Config handling",function(){if(i.config.lineTerminatorsPattern===Wd.lineTerminatorsPattern)i.config.lineTerminatorsPattern=Vs.LineTerminatorOptimizedTester;else if(i.config.lineTerminatorCharacters===Wd.lineTerminatorCharacters)throw Error(`Error: Missing property on the Lexer config. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(t.safeMode&&t.ensureOptimizations)throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.');i.trackStartLines=/full|onlyStart/i.test(i.config.positionTracking),i.trackEndLines=/full/i.test(i.config.positionTracking),(0,nr.isArray)(e)?(s={modes:{}},s.modes[Vs.DEFAULT_MODE]=(0,nr.cloneArr)(e),s[Vs.DEFAULT_MODE]=Vs.DEFAULT_MODE):(o=!1,s=(0,nr.cloneObj)(e))}),i.config.skipValidations===!1&&(i.TRACE_INIT("performRuntimeChecks",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,Vs.performRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))}),i.TRACE_INIT("performWarningRuntimeChecks",function(){i.lexerDefinitionWarning=i.lexerDefinitionWarning.concat((0,Vs.performWarningRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))})),s.modes=s.modes?s.modes:{},(0,nr.forEach)(s.modes,function(u,g){s.modes[g]=(0,nr.reject)(u,function(f){return(0,nr.isUndefined)(f)})});var a=(0,nr.keys)(s.modes);if((0,nr.forEach)(s.modes,function(u,g){i.TRACE_INIT("Mode: <"+g+"> processing",function(){if(i.modes.push(g),i.config.skipValidations===!1&&i.TRACE_INIT("validatePatterns",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,Vs.validatePatterns)(u,a))}),(0,nr.isEmpty)(i.lexerDefinitionErrors)){(0,vye.augmentTokenTypes)(u);var f;i.TRACE_INIT("analyzeTokenTypes",function(){f=(0,Vs.analyzeTokenTypes)(u,{lineTerminatorCharacters:i.config.lineTerminatorCharacters,positionTracking:t.positionTracking,ensureOptimizations:t.ensureOptimizations,safeMode:t.safeMode,tracer:i.TRACE_INIT.bind(i)})}),i.patternIdxToConfig[g]=f.patternIdxToConfig,i.charCodeToPatternIdxToConfig[g]=f.charCodeToPatternIdxToConfig,i.emptyGroups=(0,nr.merge)(i.emptyGroups,f.emptyGroups),i.hasCustom=f.hasCustom||i.hasCustom,i.canModeBeOptimized[g]=f.canBeOptimized}})}),i.defaultMode=s.defaultMode,!(0,nr.isEmpty)(i.lexerDefinitionErrors)&&!i.config.deferDefinitionErrorsHandling){var l=(0,nr.map)(i.lexerDefinitionErrors,function(u){return u.message}),c=l.join(`----------------------- +`);throw new Error(`Errors detected in definition of Lexer: +`+c)}(0,nr.forEach)(i.lexerDefinitionWarning,function(u){(0,nr.PRINT_WARNING)(u.message)}),i.TRACE_INIT("Choosing sub-methods implementations",function(){if(Vs.SUPPORT_STICKY?(i.chopInput=nr.IDENTITY,i.match=i.matchWithTest):(i.updateLastIndex=nr.NOOP,i.match=i.matchWithExec),o&&(i.handleModes=nr.NOOP),i.trackStartLines===!1&&(i.computeNewColumn=nr.IDENTITY),i.trackEndLines===!1&&(i.updateTokenEndLineColumnLocation=nr.NOOP),/full/i.test(i.config.positionTracking))i.createTokenInstance=i.createFullToken;else if(/onlyStart/i.test(i.config.positionTracking))i.createTokenInstance=i.createStartOnlyToken;else if(/onlyOffset/i.test(i.config.positionTracking))i.createTokenInstance=i.createOffsetOnlyToken;else throw Error('Invalid config option: "'+i.config.positionTracking+'"');i.hasCustom?(i.addToken=i.addTokenUsingPush,i.handlePayload=i.handlePayloadWithCustom):(i.addToken=i.addTokenUsingMemberAccess,i.handlePayload=i.handlePayloadNoCustom)}),i.TRACE_INIT("Failed Optimization Warnings",function(){var u=(0,nr.reduce)(i.canModeBeOptimized,function(g,f,h){return f===!1&&g.push(h),g},[]);if(t.ensureOptimizations&&!(0,nr.isEmpty)(u))throw Error("Lexer Modes: < "+u.join(", ")+` > cannot be optimized. + Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode. + Or inspect the console log for details on how to resolve these issues.`)}),i.TRACE_INIT("clearRegExpParserCache",function(){(0,Pye.clearRegExpParserCache)()}),i.TRACE_INIT("toFastProperties",function(){(0,nr.toFastProperties)(i)})})}return r.prototype.tokenize=function(e,t){if(t===void 0&&(t=this.defaultMode),!(0,nr.isEmpty)(this.lexerDefinitionErrors)){var i=(0,nr.map)(this.lexerDefinitionErrors,function(o){return o.message}),n=i.join(`----------------------- +`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer: +`+n)}var s=this.tokenizeInternal(e,t);return s},r.prototype.tokenizeInternal=function(e,t){var i=this,n,s,o,a,l,c,u,g,f,h,p,C,w,B,v,D,T=e,H=T.length,j=0,$=0,V=this.hasCustom?0:Math.floor(e.length/10),W=new Array(V),Z=[],A=this.trackStartLines?1:void 0,ae=this.trackStartLines?1:void 0,ge=(0,Vs.cloneEmptyGroups)(this.emptyGroups),_=this.trackStartLines,L=this.config.lineTerminatorsPattern,N=0,ue=[],we=[],Te=[],Pe=[];Object.freeze(Pe);var Le=void 0;function se(){return ue}function Ae(dr){var Bi=(0,Vs.charCodeToOptimizedIndex)(dr),_n=we[Bi];return _n===void 0?Pe:_n}var be=function(dr){if(Te.length===1&&dr.tokenType.PUSH_MODE===void 0){var Bi=i.config.errorMessageProvider.buildUnableToPopLexerModeMessage(dr);Z.push({offset:dr.startOffset,line:dr.startLine!==void 0?dr.startLine:void 0,column:dr.startColumn!==void 0?dr.startColumn:void 0,length:dr.image.length,message:Bi})}else{Te.pop();var _n=(0,nr.last)(Te);ue=i.patternIdxToConfig[_n],we=i.charCodeToPatternIdxToConfig[_n],N=ue.length;var pa=i.canModeBeOptimized[_n]&&i.config.safeMode===!1;we&&pa?Le=Ae:Le=se}};function fe(dr){Te.push(dr),we=this.charCodeToPatternIdxToConfig[dr],ue=this.patternIdxToConfig[dr],N=ue.length,N=ue.length;var Bi=this.canModeBeOptimized[dr]&&this.config.safeMode===!1;we&&Bi?Le=Ae:Le=se}fe.call(this,t);for(var le;jc.length){c=a,u=g,le=tt;break}}}break}}if(c!==null){if(f=c.length,h=le.group,h!==void 0&&(p=le.tokenTypeIdx,C=this.createTokenInstance(c,j,p,le.tokenType,A,ae,f),this.handlePayload(C,u),h===!1?$=this.addToken(W,$,C):ge[h].push(C)),e=this.chopInput(e,f),j=j+f,ae=this.computeNewColumn(ae,f),_===!0&&le.canLineTerminator===!0){var It=0,Ur=void 0,oi=void 0;L.lastIndex=0;do Ur=L.test(c),Ur===!0&&(oi=L.lastIndex-1,It++);while(Ur===!0);It!==0&&(A=A+It,ae=f-oi,this.updateTokenEndLineColumnLocation(C,h,oi,It,A,ae,f))}this.handleModes(le,be,fe,C)}else{for(var pi=j,pr=A,di=ae,ai=!1;!ai&&j <"+e+">");var n=(0,nr.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent time: "+s+"ms"),this.traceInitIndent--,o}else return t()},r.SKIPPED="This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.",r.NA=/NOT_APPLICABLE/,r}();Rc.Lexer=kye});var HA=y(Si=>{"use strict";Object.defineProperty(Si,"__esModule",{value:!0});Si.tokenMatcher=Si.createTokenInstance=Si.EOF=Si.createToken=Si.hasTokenLabel=Si.tokenName=Si.tokenLabel=void 0;var Xs=Gt(),Rye=Jd(),kx=df();function Fye(r){return wq(r)?r.LABEL:r.name}Si.tokenLabel=Fye;function Nye(r){return r.name}Si.tokenName=Nye;function wq(r){return(0,Xs.isString)(r.LABEL)&&r.LABEL!==""}Si.hasTokenLabel=wq;var Tye="parent",hq="categories",pq="label",dq="group",Cq="push_mode",mq="pop_mode",Eq="longer_alt",Iq="line_breaks",yq="start_chars_hint";function Bq(r){return Lye(r)}Si.createToken=Bq;function Lye(r){var e=r.pattern,t={};if(t.name=r.name,(0,Xs.isUndefined)(e)||(t.PATTERN=e),(0,Xs.has)(r,Tye))throw`The parent property is no longer supported. +See: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.`;return(0,Xs.has)(r,hq)&&(t.CATEGORIES=r[hq]),(0,kx.augmentTokenTypes)([t]),(0,Xs.has)(r,pq)&&(t.LABEL=r[pq]),(0,Xs.has)(r,dq)&&(t.GROUP=r[dq]),(0,Xs.has)(r,mq)&&(t.POP_MODE=r[mq]),(0,Xs.has)(r,Cq)&&(t.PUSH_MODE=r[Cq]),(0,Xs.has)(r,Eq)&&(t.LONGER_ALT=r[Eq]),(0,Xs.has)(r,Iq)&&(t.LINE_BREAKS=r[Iq]),(0,Xs.has)(r,yq)&&(t.START_CHARS_HINT=r[yq]),t}Si.EOF=Bq({name:"EOF",pattern:Rye.Lexer.NA});(0,kx.augmentTokenTypes)([Si.EOF]);function Oye(r,e,t,i,n,s,o,a){return{image:e,startOffset:t,endOffset:i,startLine:n,endLine:s,startColumn:o,endColumn:a,tokenTypeIdx:r.tokenTypeIdx,tokenType:r}}Si.createTokenInstance=Oye;function Mye(r,e){return(0,kx.tokenStructuredMatcher)(r,e)}Si.tokenMatcher=Mye});var Cn=y(Wt=>{"use strict";var ka=Wt&&Wt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Wt,"__esModule",{value:!0});Wt.serializeProduction=Wt.serializeGrammar=Wt.Terminal=Wt.Alternation=Wt.RepetitionWithSeparator=Wt.Repetition=Wt.RepetitionMandatoryWithSeparator=Wt.RepetitionMandatory=Wt.Option=Wt.Alternative=Wt.Rule=Wt.NonTerminal=Wt.AbstractProduction=void 0;var lr=Gt(),Uye=HA(),ko=function(){function r(e){this._definition=e}return Object.defineProperty(r.prototype,"definition",{get:function(){return this._definition},set:function(e){this._definition=e},enumerable:!1,configurable:!0}),r.prototype.accept=function(e){e.visit(this),(0,lr.forEach)(this.definition,function(t){t.accept(e)})},r}();Wt.AbstractProduction=ko;var bq=function(r){ka(e,r);function e(t){var i=r.call(this,[])||this;return i.idx=1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,"definition",{get:function(){return this.referencedRule!==void 0?this.referencedRule.definition:[]},set:function(t){},enumerable:!1,configurable:!0}),e.prototype.accept=function(t){t.visit(this)},e}(ko);Wt.NonTerminal=bq;var Qq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.orgText="",(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return e}(ko);Wt.Rule=Qq;var Sq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.ignoreAmbiguities=!1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return e}(ko);Wt.Alternative=Sq;var vq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return e}(ko);Wt.Option=vq;var xq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return e}(ko);Wt.RepetitionMandatory=xq;var Pq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return e}(ko);Wt.RepetitionMandatoryWithSeparator=Pq;var Dq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return e}(ko);Wt.Repetition=Dq;var kq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return e}(ko);Wt.RepetitionWithSeparator=kq;var Rq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,i.ignoreAmbiguities=!1,i.hasPredicates=!1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,"definition",{get:function(){return this._definition},set:function(t){this._definition=t},enumerable:!1,configurable:!0}),e}(ko);Wt.Alternation=Rq;var Ly=function(){function r(e){this.idx=1,(0,lr.assign)(this,(0,lr.pick)(e,function(t){return t!==void 0}))}return r.prototype.accept=function(e){e.visit(this)},r}();Wt.Terminal=Ly;function Kye(r){return(0,lr.map)(r,zd)}Wt.serializeGrammar=Kye;function zd(r){function e(s){return(0,lr.map)(s,zd)}if(r instanceof bq){var t={type:"NonTerminal",name:r.nonTerminalName,idx:r.idx};return(0,lr.isString)(r.label)&&(t.label=r.label),t}else{if(r instanceof Sq)return{type:"Alternative",definition:e(r.definition)};if(r instanceof vq)return{type:"Option",idx:r.idx,definition:e(r.definition)};if(r instanceof xq)return{type:"RepetitionMandatory",idx:r.idx,definition:e(r.definition)};if(r instanceof Pq)return{type:"RepetitionMandatoryWithSeparator",idx:r.idx,separator:zd(new Ly({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof kq)return{type:"RepetitionWithSeparator",idx:r.idx,separator:zd(new Ly({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof Dq)return{type:"Repetition",idx:r.idx,definition:e(r.definition)};if(r instanceof Rq)return{type:"Alternation",idx:r.idx,definition:e(r.definition)};if(r instanceof Ly){var i={type:"Terminal",name:r.terminalType.name,label:(0,Uye.tokenLabel)(r.terminalType),idx:r.idx};(0,lr.isString)(r.label)&&(i.terminalLabel=r.label);var n=r.terminalType.PATTERN;return r.terminalType.PATTERN&&(i.pattern=(0,lr.isRegExp)(n)?n.source:n),i}else{if(r instanceof Qq)return{type:"Rule",name:r.name,orgText:r.orgText,definition:e(r.definition)};throw Error("non exhaustive match")}}}Wt.serializeProduction=zd});var My=y(Oy=>{"use strict";Object.defineProperty(Oy,"__esModule",{value:!0});Oy.RestWalker=void 0;var Rx=Gt(),mn=Cn(),Hye=function(){function r(){}return r.prototype.walk=function(e,t){var i=this;t===void 0&&(t=[]),(0,Rx.forEach)(e.definition,function(n,s){var o=(0,Rx.drop)(e.definition,s+1);if(n instanceof mn.NonTerminal)i.walkProdRef(n,o,t);else if(n instanceof mn.Terminal)i.walkTerminal(n,o,t);else if(n instanceof mn.Alternative)i.walkFlat(n,o,t);else if(n instanceof mn.Option)i.walkOption(n,o,t);else if(n instanceof mn.RepetitionMandatory)i.walkAtLeastOne(n,o,t);else if(n instanceof mn.RepetitionMandatoryWithSeparator)i.walkAtLeastOneSep(n,o,t);else if(n instanceof mn.RepetitionWithSeparator)i.walkManySep(n,o,t);else if(n instanceof mn.Repetition)i.walkMany(n,o,t);else if(n instanceof mn.Alternation)i.walkOr(n,o,t);else throw Error("non exhaustive match")})},r.prototype.walkTerminal=function(e,t,i){},r.prototype.walkProdRef=function(e,t,i){},r.prototype.walkFlat=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkOption=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkAtLeastOne=function(e,t,i){var n=[new mn.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkAtLeastOneSep=function(e,t,i){var n=Fq(e,t,i);this.walk(e,n)},r.prototype.walkMany=function(e,t,i){var n=[new mn.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkManySep=function(e,t,i){var n=Fq(e,t,i);this.walk(e,n)},r.prototype.walkOr=function(e,t,i){var n=this,s=t.concat(i);(0,Rx.forEach)(e.definition,function(o){var a=new mn.Alternative({definition:[o]});n.walk(a,s)})},r}();Oy.RestWalker=Hye;function Fq(r,e,t){var i=[new mn.Option({definition:[new mn.Terminal({terminalType:r.separator})].concat(r.definition)})],n=i.concat(e,t);return n}});var Cf=y(Uy=>{"use strict";Object.defineProperty(Uy,"__esModule",{value:!0});Uy.GAstVisitor=void 0;var Ro=Cn(),Gye=function(){function r(){}return r.prototype.visit=function(e){var t=e;switch(t.constructor){case Ro.NonTerminal:return this.visitNonTerminal(t);case Ro.Alternative:return this.visitAlternative(t);case Ro.Option:return this.visitOption(t);case Ro.RepetitionMandatory:return this.visitRepetitionMandatory(t);case Ro.RepetitionMandatoryWithSeparator:return this.visitRepetitionMandatoryWithSeparator(t);case Ro.RepetitionWithSeparator:return this.visitRepetitionWithSeparator(t);case Ro.Repetition:return this.visitRepetition(t);case Ro.Alternation:return this.visitAlternation(t);case Ro.Terminal:return this.visitTerminal(t);case Ro.Rule:return this.visitRule(t);default:throw Error("non exhaustive match")}},r.prototype.visitNonTerminal=function(e){},r.prototype.visitAlternative=function(e){},r.prototype.visitOption=function(e){},r.prototype.visitRepetition=function(e){},r.prototype.visitRepetitionMandatory=function(e){},r.prototype.visitRepetitionMandatoryWithSeparator=function(e){},r.prototype.visitRepetitionWithSeparator=function(e){},r.prototype.visitAlternation=function(e){},r.prototype.visitTerminal=function(e){},r.prototype.visitRule=function(e){},r}();Uy.GAstVisitor=Gye});var Xd=y(Ui=>{"use strict";var Yye=Ui&&Ui.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Ui,"__esModule",{value:!0});Ui.collectMethods=Ui.DslMethodsCollectorVisitor=Ui.getProductionDslName=Ui.isBranchingProd=Ui.isOptionalProd=Ui.isSequenceProd=void 0;var Vd=Gt(),Qr=Cn(),jye=Cf();function qye(r){return r instanceof Qr.Alternative||r instanceof Qr.Option||r instanceof Qr.Repetition||r instanceof Qr.RepetitionMandatory||r instanceof Qr.RepetitionMandatoryWithSeparator||r instanceof Qr.RepetitionWithSeparator||r instanceof Qr.Terminal||r instanceof Qr.Rule}Ui.isSequenceProd=qye;function Fx(r,e){e===void 0&&(e=[]);var t=r instanceof Qr.Option||r instanceof Qr.Repetition||r instanceof Qr.RepetitionWithSeparator;return t?!0:r instanceof Qr.Alternation?(0,Vd.some)(r.definition,function(i){return Fx(i,e)}):r instanceof Qr.NonTerminal&&(0,Vd.contains)(e,r)?!1:r instanceof Qr.AbstractProduction?(r instanceof Qr.NonTerminal&&e.push(r),(0,Vd.every)(r.definition,function(i){return Fx(i,e)})):!1}Ui.isOptionalProd=Fx;function Jye(r){return r instanceof Qr.Alternation}Ui.isBranchingProd=Jye;function Wye(r){if(r instanceof Qr.NonTerminal)return"SUBRULE";if(r instanceof Qr.Option)return"OPTION";if(r instanceof Qr.Alternation)return"OR";if(r instanceof Qr.RepetitionMandatory)return"AT_LEAST_ONE";if(r instanceof Qr.RepetitionMandatoryWithSeparator)return"AT_LEAST_ONE_SEP";if(r instanceof Qr.RepetitionWithSeparator)return"MANY_SEP";if(r instanceof Qr.Repetition)return"MANY";if(r instanceof Qr.Terminal)return"CONSUME";throw Error("non exhaustive match")}Ui.getProductionDslName=Wye;var Nq=function(r){Yye(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.separator="-",t.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]},t}return e.prototype.reset=function(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}},e.prototype.visitTerminal=function(t){var i=t.terminalType.name+this.separator+"Terminal";(0,Vd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitNonTerminal=function(t){var i=t.nonTerminalName+this.separator+"Terminal";(0,Vd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitOption=function(t){this.dslMethods.option.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.dslMethods.repetitionWithSeparator.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.dslMethods.repetitionMandatory.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.dslMethods.repetitionMandatoryWithSeparator.push(t)},e.prototype.visitRepetition=function(t){this.dslMethods.repetition.push(t)},e.prototype.visitAlternation=function(t){this.dslMethods.alternation.push(t)},e}(jye.GAstVisitor);Ui.DslMethodsCollectorVisitor=Nq;var Ky=new Nq;function zye(r){Ky.reset(),r.accept(Ky);var e=Ky.dslMethods;return Ky.reset(),e}Ui.collectMethods=zye});var Tx=y(Fo=>{"use strict";Object.defineProperty(Fo,"__esModule",{value:!0});Fo.firstForTerminal=Fo.firstForBranching=Fo.firstForSequence=Fo.first=void 0;var Hy=Gt(),Tq=Cn(),Nx=Xd();function Gy(r){if(r instanceof Tq.NonTerminal)return Gy(r.referencedRule);if(r instanceof Tq.Terminal)return Mq(r);if((0,Nx.isSequenceProd)(r))return Lq(r);if((0,Nx.isBranchingProd)(r))return Oq(r);throw Error("non exhaustive match")}Fo.first=Gy;function Lq(r){for(var e=[],t=r.definition,i=0,n=t.length>i,s,o=!0;n&&o;)s=t[i],o=(0,Nx.isOptionalProd)(s),e=e.concat(Gy(s)),i=i+1,n=t.length>i;return(0,Hy.uniq)(e)}Fo.firstForSequence=Lq;function Oq(r){var e=(0,Hy.map)(r.definition,function(t){return Gy(t)});return(0,Hy.uniq)((0,Hy.flatten)(e))}Fo.firstForBranching=Oq;function Mq(r){return[r.terminalType]}Fo.firstForTerminal=Mq});var Lx=y(Yy=>{"use strict";Object.defineProperty(Yy,"__esModule",{value:!0});Yy.IN=void 0;Yy.IN="_~IN~_"});var Yq=y(ls=>{"use strict";var Vye=ls&&ls.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(ls,"__esModule",{value:!0});ls.buildInProdFollowPrefix=ls.buildBetweenProdsFollowPrefix=ls.computeAllProdsFollows=ls.ResyncFollowsWalker=void 0;var Xye=My(),_ye=Tx(),Uq=Gt(),Kq=Lx(),Zye=Cn(),Hq=function(r){Vye(e,r);function e(t){var i=r.call(this)||this;return i.topProd=t,i.follows={},i}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.follows},e.prototype.walkTerminal=function(t,i,n){},e.prototype.walkProdRef=function(t,i,n){var s=Gq(t.referencedRule,t.idx)+this.topProd.name,o=i.concat(n),a=new Zye.Alternative({definition:o}),l=(0,_ye.first)(a);this.follows[s]=l},e}(Xye.RestWalker);ls.ResyncFollowsWalker=Hq;function $ye(r){var e={};return(0,Uq.forEach)(r,function(t){var i=new Hq(t).startWalking();(0,Uq.assign)(e,i)}),e}ls.computeAllProdsFollows=$ye;function Gq(r,e){return r.name+e+Kq.IN}ls.buildBetweenProdsFollowPrefix=Gq;function ewe(r){var e=r.terminalType.name;return e+r.idx+Kq.IN}ls.buildInProdFollowPrefix=ewe});var _d=y(Ra=>{"use strict";Object.defineProperty(Ra,"__esModule",{value:!0});Ra.defaultGrammarValidatorErrorProvider=Ra.defaultGrammarResolverErrorProvider=Ra.defaultParserErrorProvider=void 0;var mf=HA(),twe=Gt(),_s=Gt(),Ox=Cn(),jq=Xd();Ra.defaultParserErrorProvider={buildMismatchTokenMessage:function(r){var e=r.expected,t=r.actual,i=r.previous,n=r.ruleName,s=(0,mf.hasTokenLabel)(e),o=s?"--> "+(0,mf.tokenLabel)(e)+" <--":"token of type --> "+e.name+" <--",a="Expecting "+o+" but found --> '"+t.image+"' <--";return a},buildNotAllInputParsedMessage:function(r){var e=r.firstRedundant,t=r.ruleName;return"Redundant input, expecting EOF but found: "+e.image},buildNoViableAltMessage:function(r){var e=r.expectedPathsPerAlt,t=r.actual,i=r.previous,n=r.customUserDescription,s=r.ruleName,o="Expecting: ",a=(0,_s.first)(t).image,l=` +but found: '`+a+"'";if(n)return o+n+l;var c=(0,_s.reduce)(e,function(h,p){return h.concat(p)},[]),u=(0,_s.map)(c,function(h){return"["+(0,_s.map)(h,function(p){return(0,mf.tokenLabel)(p)}).join(", ")+"]"}),g=(0,_s.map)(u,function(h,p){return" "+(p+1)+". "+h}),f=`one of these possible Token sequences: +`+g.join(` +`);return o+f+l},buildEarlyExitMessage:function(r){var e=r.expectedIterationPaths,t=r.actual,i=r.customUserDescription,n=r.ruleName,s="Expecting: ",o=(0,_s.first)(t).image,a=` +but found: '`+o+"'";if(i)return s+i+a;var l=(0,_s.map)(e,function(u){return"["+(0,_s.map)(u,function(g){return(0,mf.tokenLabel)(g)}).join(",")+"]"}),c=`expecting at least one iteration which starts with one of these possible Token sequences:: + `+("<"+l.join(" ,")+">");return s+c+a}};Object.freeze(Ra.defaultParserErrorProvider);Ra.defaultGrammarResolverErrorProvider={buildRuleNotFoundError:function(r,e){var t="Invalid grammar, reference to a rule which is not defined: ->"+e.nonTerminalName+`<- +inside top level rule: ->`+r.name+"<-";return t}};Ra.defaultGrammarValidatorErrorProvider={buildDuplicateFoundError:function(r,e){function t(u){return u instanceof Ox.Terminal?u.terminalType.name:u instanceof Ox.NonTerminal?u.nonTerminalName:""}var i=r.name,n=(0,_s.first)(e),s=n.idx,o=(0,jq.getProductionDslName)(n),a=t(n),l=s>0,c="->"+o+(l?s:"")+"<- "+(a?"with argument: ->"+a+"<-":"")+` + appears more than once (`+e.length+" times) in the top level rule: ->"+i+`<-. + For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES + `;return c=c.replace(/[ \t]+/g," "),c=c.replace(/\s\s+/g,` +`),c},buildNamespaceConflictError:function(r){var e=`Namespace conflict found in grammar. +`+("The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <"+r.name+`>. +`)+`To resolve this make sure each Terminal and Non-Terminal names are unique +This is easy to accomplish by using the convention that Terminal names start with an uppercase letter +and Non-Terminal names start with a lower case letter.`;return e},buildAlternationPrefixAmbiguityError:function(r){var e=(0,_s.map)(r.prefixPath,function(n){return(0,mf.tokenLabel)(n)}).join(", "),t=r.alternation.idx===0?"":r.alternation.idx,i="Ambiguous alternatives: <"+r.ambiguityIndices.join(" ,")+`> due to common lookahead prefix +`+("in inside <"+r.topLevelRule.name+`> Rule, +`)+("<"+e+`> may appears as a prefix path in all these alternatives. +`)+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX +For Further details.`;return i},buildAlternationAmbiguityError:function(r){var e=(0,_s.map)(r.prefixPath,function(n){return(0,mf.tokenLabel)(n)}).join(", "),t=r.alternation.idx===0?"":r.alternation.idx,i="Ambiguous Alternatives Detected: <"+r.ambiguityIndices.join(" ,")+"> in "+(" inside <"+r.topLevelRule.name+`> Rule, +`)+("<"+e+`> may appears as a prefix path in all these alternatives. +`);return i=i+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES +For Further details.`,i},buildEmptyRepetitionError:function(r){var e=(0,jq.getProductionDslName)(r.repetition);r.repetition.idx!==0&&(e+=r.repetition.idx);var t="The repetition <"+e+"> within Rule <"+r.topLevelRule.name+`> can never consume any tokens. +This could lead to an infinite loop.`;return t},buildTokenNameError:function(r){return"deprecated"},buildEmptyAlternationError:function(r){var e="Ambiguous empty alternative: <"+(r.emptyChoiceIdx+1)+">"+(" in inside <"+r.topLevelRule.name+`> Rule. +`)+"Only the last alternative may be an empty alternative.";return e},buildTooManyAlternativesError:function(r){var e=`An Alternation cannot have more than 256 alternatives: +`+(" inside <"+r.topLevelRule.name+`> Rule. + has `+(r.alternation.definition.length+1)+" alternatives.");return e},buildLeftRecursionError:function(r){var e=r.topLevelRule.name,t=twe.map(r.leftRecursionPath,function(s){return s.name}),i=e+" --> "+t.concat([e]).join(" --> "),n=`Left Recursion found in grammar. +`+("rule: <"+e+`> can be invoked from itself (directly or indirectly) +`)+(`without consuming any Tokens. The grammar path that causes this is: + `+i+` +`)+` To fix this refactor your grammar to remove the left recursion. +see: https://en.wikipedia.org/wiki/LL_parser#Left_Factoring.`;return n},buildInvalidRuleNameError:function(r){return"deprecated"},buildDuplicateRuleNameError:function(r){var e;r.topLevelRule instanceof Ox.Rule?e=r.topLevelRule.name:e=r.topLevelRule;var t="Duplicate definition, rule: ->"+e+"<- is already defined in the grammar: ->"+r.grammarName+"<-";return t}}});var Wq=y(GA=>{"use strict";var rwe=GA&&GA.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(GA,"__esModule",{value:!0});GA.GastRefResolverVisitor=GA.resolveGrammar=void 0;var iwe=Hn(),qq=Gt(),nwe=Cf();function swe(r,e){var t=new Jq(r,e);return t.resolveRefs(),t.errors}GA.resolveGrammar=swe;var Jq=function(r){rwe(e,r);function e(t,i){var n=r.call(this)||this;return n.nameToTopRule=t,n.errMsgProvider=i,n.errors=[],n}return e.prototype.resolveRefs=function(){var t=this;(0,qq.forEach)((0,qq.values)(this.nameToTopRule),function(i){t.currTopLevel=i,i.accept(t)})},e.prototype.visitNonTerminal=function(t){var i=this.nameToTopRule[t.nonTerminalName];if(i)t.referencedRule=i;else{var n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,t);this.errors.push({message:n,type:iwe.ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:t.nonTerminalName})}},e}(nwe.GAstVisitor);GA.GastRefResolverVisitor=Jq});var $d=y(Lr=>{"use strict";var Fc=Lr&&Lr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Lr,"__esModule",{value:!0});Lr.nextPossibleTokensAfter=Lr.possiblePathsFrom=Lr.NextTerminalAfterAtLeastOneSepWalker=Lr.NextTerminalAfterAtLeastOneWalker=Lr.NextTerminalAfterManySepWalker=Lr.NextTerminalAfterManyWalker=Lr.AbstractNextTerminalAfterProductionWalker=Lr.NextAfterTokenWalker=Lr.AbstractNextPossibleTokensWalker=void 0;var zq=My(),Ut=Gt(),owe=Tx(),Dt=Cn(),Vq=function(r){Fc(e,r);function e(t,i){var n=r.call(this)||this;return n.topProd=t,n.path=i,n.possibleTokTypes=[],n.nextProductionName="",n.nextProductionOccurrence=0,n.found=!1,n.isAtEndOfPath=!1,n}return e.prototype.startWalking=function(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error("The path does not start with the walker's top Rule!");return this.ruleStack=(0,Ut.cloneArr)(this.path.ruleStack).reverse(),this.occurrenceStack=(0,Ut.cloneArr)(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes},e.prototype.walk=function(t,i){i===void 0&&(i=[]),this.found||r.prototype.walk.call(this,t,i)},e.prototype.walkProdRef=function(t,i,n){if(t.referencedRule.name===this.nextProductionName&&t.idx===this.nextProductionOccurrence){var s=i.concat(n);this.updateExpectedNext(),this.walk(t.referencedRule,s)}},e.prototype.updateExpectedNext=function(){(0,Ut.isEmpty)(this.ruleStack)?(this.nextProductionName="",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())},e}(zq.RestWalker);Lr.AbstractNextPossibleTokensWalker=Vq;var awe=function(r){Fc(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.path=i,n.nextTerminalName="",n.nextTerminalOccurrence=0,n.nextTerminalName=n.path.lastTok.name,n.nextTerminalOccurrence=n.path.lastTokOccurrence,n}return e.prototype.walkTerminal=function(t,i,n){if(this.isAtEndOfPath&&t.terminalType.name===this.nextTerminalName&&t.idx===this.nextTerminalOccurrence&&!this.found){var s=i.concat(n),o=new Dt.Alternative({definition:s});this.possibleTokTypes=(0,owe.first)(o),this.found=!0}},e}(Vq);Lr.NextAfterTokenWalker=awe;var Zd=function(r){Fc(e,r);function e(t,i){var n=r.call(this)||this;return n.topRule=t,n.occurrence=i,n.result={token:void 0,occurrence:void 0,isEndOfRule:void 0},n}return e.prototype.startWalking=function(){return this.walk(this.topRule),this.result},e}(zq.RestWalker);Lr.AbstractNextTerminalAfterProductionWalker=Zd;var Awe=function(r){Fc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkMany=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Ut.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof Dt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkMany.call(this,t,i,n)},e}(Zd);Lr.NextTerminalAfterManyWalker=Awe;var lwe=function(r){Fc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkManySep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Ut.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof Dt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkManySep.call(this,t,i,n)},e}(Zd);Lr.NextTerminalAfterManySepWalker=lwe;var cwe=function(r){Fc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOne=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Ut.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof Dt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOne.call(this,t,i,n)},e}(Zd);Lr.NextTerminalAfterAtLeastOneWalker=cwe;var uwe=function(r){Fc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOneSep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Ut.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof Dt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOneSep.call(this,t,i,n)},e}(Zd);Lr.NextTerminalAfterAtLeastOneSepWalker=uwe;function Xq(r,e,t){t===void 0&&(t=[]),t=(0,Ut.cloneArr)(t);var i=[],n=0;function s(c){return c.concat((0,Ut.drop)(r,n+1))}function o(c){var u=Xq(s(c),e,t);return i.concat(u)}for(;t.length=0;ge--){var _=B.definition[ge],L={idx:p,def:_.definition.concat((0,Ut.drop)(h)),ruleStack:C,occurrenceStack:w};g.push(L),g.push(o)}else if(B instanceof Dt.Alternative)g.push({idx:p,def:B.definition.concat((0,Ut.drop)(h)),ruleStack:C,occurrenceStack:w});else if(B instanceof Dt.Rule)g.push(fwe(B,p,C,w));else throw Error("non exhaustive match")}}return u}Lr.nextPossibleTokensAfter=gwe;function fwe(r,e,t,i){var n=(0,Ut.cloneArr)(t);n.push(r.name);var s=(0,Ut.cloneArr)(i);return s.push(1),{idx:e,def:r.definition,ruleStack:n,occurrenceStack:s}}});var eC=y(_t=>{"use strict";var $q=_t&&_t.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(_t,"__esModule",{value:!0});_t.areTokenCategoriesNotUsed=_t.isStrictPrefixOfPath=_t.containsPath=_t.getLookaheadPathsForOptionalProd=_t.getLookaheadPathsForOr=_t.lookAheadSequenceFromAlternatives=_t.buildSingleAlternativeLookaheadFunction=_t.buildAlternativesLookAheadFunc=_t.buildLookaheadFuncForOptionalProd=_t.buildLookaheadFuncForOr=_t.getProdType=_t.PROD_TYPE=void 0;var sr=Gt(),_q=$d(),hwe=My(),jy=df(),YA=Cn(),pwe=Cf(),li;(function(r){r[r.OPTION=0]="OPTION",r[r.REPETITION=1]="REPETITION",r[r.REPETITION_MANDATORY=2]="REPETITION_MANDATORY",r[r.REPETITION_MANDATORY_WITH_SEPARATOR=3]="REPETITION_MANDATORY_WITH_SEPARATOR",r[r.REPETITION_WITH_SEPARATOR=4]="REPETITION_WITH_SEPARATOR",r[r.ALTERNATION=5]="ALTERNATION"})(li=_t.PROD_TYPE||(_t.PROD_TYPE={}));function dwe(r){if(r instanceof YA.Option)return li.OPTION;if(r instanceof YA.Repetition)return li.REPETITION;if(r instanceof YA.RepetitionMandatory)return li.REPETITION_MANDATORY;if(r instanceof YA.RepetitionMandatoryWithSeparator)return li.REPETITION_MANDATORY_WITH_SEPARATOR;if(r instanceof YA.RepetitionWithSeparator)return li.REPETITION_WITH_SEPARATOR;if(r instanceof YA.Alternation)return li.ALTERNATION;throw Error("non exhaustive match")}_t.getProdType=dwe;function Cwe(r,e,t,i,n,s){var o=tJ(r,e,t),a=Kx(o)?jy.tokenStructuredMatcherNoCategories:jy.tokenStructuredMatcher;return s(o,i,a,n)}_t.buildLookaheadFuncForOr=Cwe;function mwe(r,e,t,i,n,s){var o=rJ(r,e,n,t),a=Kx(o)?jy.tokenStructuredMatcherNoCategories:jy.tokenStructuredMatcher;return s(o[0],a,i)}_t.buildLookaheadFuncForOptionalProd=mwe;function Ewe(r,e,t,i){var n=r.length,s=(0,sr.every)(r,function(l){return(0,sr.every)(l,function(c){return c.length===1})});if(e)return function(l){for(var c=(0,sr.map)(l,function(D){return D.GATE}),u=0;u{"use strict";var Hx=zt&&zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(zt,"__esModule",{value:!0});zt.checkPrefixAlternativesAmbiguities=zt.validateSomeNonEmptyLookaheadPath=zt.validateTooManyAlts=zt.RepetionCollector=zt.validateAmbiguousAlternationAlternatives=zt.validateEmptyOrAlternative=zt.getFirstNoneTerminal=zt.validateNoLeftRecursion=zt.validateRuleIsOverridden=zt.validateRuleDoesNotAlreadyExist=zt.OccurrenceValidationCollector=zt.identifyProductionForDuplicates=zt.validateGrammar=void 0;var er=Gt(),Sr=Gt(),No=Hn(),Gx=Xd(),Ef=eC(),bwe=$d(),Zs=Cn(),Yx=Cf();function Qwe(r,e,t,i,n){var s=er.map(r,function(h){return Swe(h,i)}),o=er.map(r,function(h){return jx(h,h,i)}),a=[],l=[],c=[];(0,Sr.every)(o,Sr.isEmpty)&&(a=(0,Sr.map)(r,function(h){return AJ(h,i)}),l=(0,Sr.map)(r,function(h){return lJ(h,e,i)}),c=gJ(r,e,i));var u=Pwe(r,t,i),g=(0,Sr.map)(r,function(h){return uJ(h,i)}),f=(0,Sr.map)(r,function(h){return aJ(h,r,n,i)});return er.flatten(s.concat(c,o,a,l,u,g,f))}zt.validateGrammar=Qwe;function Swe(r,e){var t=new oJ;r.accept(t);var i=t.allProductions,n=er.groupBy(i,nJ),s=er.pick(n,function(a){return a.length>1}),o=er.map(er.values(s),function(a){var l=er.first(a),c=e.buildDuplicateFoundError(r,a),u=(0,Gx.getProductionDslName)(l),g={message:c,type:No.ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,ruleName:r.name,dslName:u,occurrence:l.idx},f=sJ(l);return f&&(g.parameter=f),g});return o}function nJ(r){return(0,Gx.getProductionDslName)(r)+"_#_"+r.idx+"_#_"+sJ(r)}zt.identifyProductionForDuplicates=nJ;function sJ(r){return r instanceof Zs.Terminal?r.terminalType.name:r instanceof Zs.NonTerminal?r.nonTerminalName:""}var oJ=function(r){Hx(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitNonTerminal=function(t){this.allProductions.push(t)},e.prototype.visitOption=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e.prototype.visitAlternation=function(t){this.allProductions.push(t)},e.prototype.visitTerminal=function(t){this.allProductions.push(t)},e}(Yx.GAstVisitor);zt.OccurrenceValidationCollector=oJ;function aJ(r,e,t,i){var n=[],s=(0,Sr.reduce)(e,function(a,l){return l.name===r.name?a+1:a},0);if(s>1){var o=i.buildDuplicateRuleNameError({topLevelRule:r,grammarName:t});n.push({message:o,type:No.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:r.name})}return n}zt.validateRuleDoesNotAlreadyExist=aJ;function vwe(r,e,t){var i=[],n;return er.contains(e,r)||(n="Invalid rule override, rule: ->"+r+"<- cannot be overridden in the grammar: ->"+t+"<-as it is not defined in any of the super grammars ",i.push({message:n,type:No.ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,ruleName:r})),i}zt.validateRuleIsOverridden=vwe;function jx(r,e,t,i){i===void 0&&(i=[]);var n=[],s=tC(e.definition);if(er.isEmpty(s))return[];var o=r.name,a=er.contains(s,r);a&&n.push({message:t.buildLeftRecursionError({topLevelRule:r,leftRecursionPath:i}),type:No.ParserDefinitionErrorType.LEFT_RECURSION,ruleName:o});var l=er.difference(s,i.concat([r])),c=er.map(l,function(u){var g=er.cloneArr(i);return g.push(u),jx(r,u,t,g)});return n.concat(er.flatten(c))}zt.validateNoLeftRecursion=jx;function tC(r){var e=[];if(er.isEmpty(r))return e;var t=er.first(r);if(t instanceof Zs.NonTerminal)e.push(t.referencedRule);else if(t instanceof Zs.Alternative||t instanceof Zs.Option||t instanceof Zs.RepetitionMandatory||t instanceof Zs.RepetitionMandatoryWithSeparator||t instanceof Zs.RepetitionWithSeparator||t instanceof Zs.Repetition)e=e.concat(tC(t.definition));else if(t instanceof Zs.Alternation)e=er.flatten(er.map(t.definition,function(o){return tC(o.definition)}));else if(!(t instanceof Zs.Terminal))throw Error("non exhaustive match");var i=(0,Gx.isOptionalProd)(t),n=r.length>1;if(i&&n){var s=er.drop(r);return e.concat(tC(s))}else return e}zt.getFirstNoneTerminal=tC;var qx=function(r){Hx(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.alternations=[],t}return e.prototype.visitAlternation=function(t){this.alternations.push(t)},e}(Yx.GAstVisitor);function AJ(r,e){var t=new qx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){var a=er.dropRight(o.definition),l=er.map(a,function(c,u){var g=(0,bwe.nextPossibleTokensAfter)([c],[],null,1);return er.isEmpty(g)?{message:e.buildEmptyAlternationError({topLevelRule:r,alternation:o,emptyChoiceIdx:u}),type:No.ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,ruleName:r.name,occurrence:o.idx,alternative:u+1}:null});return s.concat(er.compact(l))},[]);return n}zt.validateEmptyOrAlternative=AJ;function lJ(r,e,t){var i=new qx;r.accept(i);var n=i.alternations;n=(0,Sr.reject)(n,function(o){return o.ignoreAmbiguities===!0});var s=er.reduce(n,function(o,a){var l=a.idx,c=a.maxLookahead||e,u=(0,Ef.getLookaheadPathsForOr)(l,r,c,a),g=xwe(u,a,r,t),f=fJ(u,a,r,t);return o.concat(g,f)},[]);return s}zt.validateAmbiguousAlternationAlternatives=lJ;var cJ=function(r){Hx(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e}(Yx.GAstVisitor);zt.RepetionCollector=cJ;function uJ(r,e){var t=new qx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){return o.definition.length>255&&s.push({message:e.buildTooManyAlternativesError({topLevelRule:r,alternation:o}),type:No.ParserDefinitionErrorType.TOO_MANY_ALTS,ruleName:r.name,occurrence:o.idx}),s},[]);return n}zt.validateTooManyAlts=uJ;function gJ(r,e,t){var i=[];return(0,Sr.forEach)(r,function(n){var s=new cJ;n.accept(s);var o=s.allProductions;(0,Sr.forEach)(o,function(a){var l=(0,Ef.getProdType)(a),c=a.maxLookahead||e,u=a.idx,g=(0,Ef.getLookaheadPathsForOptionalProd)(u,n,l,c),f=g[0];if((0,Sr.isEmpty)((0,Sr.flatten)(f))){var h=t.buildEmptyRepetitionError({topLevelRule:n,repetition:a});i.push({message:h,type:No.ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,ruleName:n.name})}})}),i}zt.validateSomeNonEmptyLookaheadPath=gJ;function xwe(r,e,t,i){var n=[],s=(0,Sr.reduce)(r,function(a,l,c){return e.definition[c].ignoreAmbiguities===!0||(0,Sr.forEach)(l,function(u){var g=[c];(0,Sr.forEach)(r,function(f,h){c!==h&&(0,Ef.containsPath)(f,u)&&e.definition[h].ignoreAmbiguities!==!0&&g.push(h)}),g.length>1&&!(0,Ef.containsPath)(n,u)&&(n.push(u),a.push({alts:g,path:u}))}),a},[]),o=er.map(s,function(a){var l=(0,Sr.map)(a.alts,function(u){return u+1}),c=i.buildAlternationAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:l,prefixPath:a.path});return{message:c,type:No.ParserDefinitionErrorType.AMBIGUOUS_ALTS,ruleName:t.name,occurrence:e.idx,alternatives:[a.alts]}});return o}function fJ(r,e,t,i){var n=[],s=(0,Sr.reduce)(r,function(o,a,l){var c=(0,Sr.map)(a,function(u){return{idx:l,path:u}});return o.concat(c)},[]);return(0,Sr.forEach)(s,function(o){var a=e.definition[o.idx];if(a.ignoreAmbiguities!==!0){var l=o.idx,c=o.path,u=(0,Sr.findAll)(s,function(f){return e.definition[f.idx].ignoreAmbiguities!==!0&&f.idx{"use strict";Object.defineProperty(If,"__esModule",{value:!0});If.validateGrammar=If.resolveGrammar=void 0;var Wx=Gt(),Dwe=Wq(),kwe=Jx(),hJ=_d();function Rwe(r){r=(0,Wx.defaults)(r,{errMsgProvider:hJ.defaultGrammarResolverErrorProvider});var e={};return(0,Wx.forEach)(r.rules,function(t){e[t.name]=t}),(0,Dwe.resolveGrammar)(e,r.errMsgProvider)}If.resolveGrammar=Rwe;function Fwe(r){return r=(0,Wx.defaults)(r,{errMsgProvider:hJ.defaultGrammarValidatorErrorProvider}),(0,kwe.validateGrammar)(r.rules,r.maxLookahead,r.tokenTypes,r.errMsgProvider,r.grammarName)}If.validateGrammar=Fwe});var yf=y(En=>{"use strict";var rC=En&&En.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(En,"__esModule",{value:!0});En.EarlyExitException=En.NotAllInputParsedException=En.NoViableAltException=En.MismatchedTokenException=En.isRecognitionException=void 0;var Nwe=Gt(),dJ="MismatchedTokenException",CJ="NoViableAltException",mJ="EarlyExitException",EJ="NotAllInputParsedException",IJ=[dJ,CJ,mJ,EJ];Object.freeze(IJ);function Twe(r){return(0,Nwe.contains)(IJ,r.name)}En.isRecognitionException=Twe;var qy=function(r){rC(e,r);function e(t,i){var n=this.constructor,s=r.call(this,t)||this;return s.token=i,s.resyncedTokens=[],Object.setPrototypeOf(s,n.prototype),Error.captureStackTrace&&Error.captureStackTrace(s,s.constructor),s}return e}(Error),Lwe=function(r){rC(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=dJ,s}return e}(qy);En.MismatchedTokenException=Lwe;var Owe=function(r){rC(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=CJ,s}return e}(qy);En.NoViableAltException=Owe;var Mwe=function(r){rC(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.name=EJ,n}return e}(qy);En.NotAllInputParsedException=Mwe;var Uwe=function(r){rC(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=mJ,s}return e}(qy);En.EarlyExitException=Uwe});var Vx=y(Ki=>{"use strict";Object.defineProperty(Ki,"__esModule",{value:!0});Ki.attemptInRepetitionRecovery=Ki.Recoverable=Ki.InRuleRecoveryException=Ki.IN_RULE_RECOVERY_EXCEPTION=Ki.EOF_FOLLOW_KEY=void 0;var Jy=HA(),cs=Gt(),Kwe=yf(),Hwe=Lx(),Gwe=Hn();Ki.EOF_FOLLOW_KEY={};Ki.IN_RULE_RECOVERY_EXCEPTION="InRuleRecoveryException";function zx(r){this.name=Ki.IN_RULE_RECOVERY_EXCEPTION,this.message=r}Ki.InRuleRecoveryException=zx;zx.prototype=Error.prototype;var Ywe=function(){function r(){}return r.prototype.initRecoverable=function(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=(0,cs.has)(e,"recoveryEnabled")?e.recoveryEnabled:Gwe.DEFAULT_PARSER_CONFIG.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=yJ)},r.prototype.getTokenToInsert=function(e){var t=(0,Jy.createTokenInstance)(e,"",NaN,NaN,NaN,NaN,NaN,NaN);return t.isInsertedInRecovery=!0,t},r.prototype.canTokenTypeBeInsertedInRecovery=function(e){return!0},r.prototype.tryInRepetitionRecovery=function(e,t,i,n){for(var s=this,o=this.findReSyncTokenType(),a=this.exportLexerState(),l=[],c=!1,u=this.LA(1),g=this.LA(1),f=function(){var h=s.LA(0),p=s.errorMessageProvider.buildMismatchTokenMessage({expected:n,actual:u,previous:h,ruleName:s.getCurrRuleFullName()}),C=new Kwe.MismatchedTokenException(p,u,s.LA(0));C.resyncedTokens=(0,cs.dropRight)(l),s.SAVE_ERROR(C)};!c;)if(this.tokenMatcher(g,n)){f();return}else if(i.call(this)){f(),e.apply(this,t);return}else this.tokenMatcher(g,o)?c=!0:(g=this.SKIP_TOKEN(),this.addToResyncTokens(g,l));this.importLexerState(a)},r.prototype.shouldInRepetitionRecoveryBeTried=function(e,t,i){return!(i===!1||e===void 0||t===void 0||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,t)))},r.prototype.getFollowsForInRuleRecovery=function(e,t){var i=this.getCurrentGrammarPath(e,t),n=this.getNextPossibleTokenTypes(i);return n},r.prototype.tryInRuleRecovery=function(e,t){if(this.canRecoverWithSingleTokenInsertion(e,t)){var i=this.getTokenToInsert(e);return i}if(this.canRecoverWithSingleTokenDeletion(e)){var n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new zx("sad sad panda")},r.prototype.canPerformInRuleRecovery=function(e,t){return this.canRecoverWithSingleTokenInsertion(e,t)||this.canRecoverWithSingleTokenDeletion(e)},r.prototype.canRecoverWithSingleTokenInsertion=function(e,t){var i=this;if(!this.canTokenTypeBeInsertedInRecovery(e)||(0,cs.isEmpty)(t))return!1;var n=this.LA(1),s=(0,cs.find)(t,function(o){return i.tokenMatcher(n,o)})!==void 0;return s},r.prototype.canRecoverWithSingleTokenDeletion=function(e){var t=this.tokenMatcher(this.LA(2),e);return t},r.prototype.isInCurrentRuleReSyncSet=function(e){var t=this.getCurrFollowKey(),i=this.getFollowSetFromFollowKey(t);return(0,cs.contains)(i,e)},r.prototype.findReSyncTokenType=function(){for(var e=this.flattenFollowSet(),t=this.LA(1),i=2;;){var n=t.tokenType;if((0,cs.contains)(e,n))return n;t=this.LA(i),i++}},r.prototype.getCurrFollowKey=function(){if(this.RULE_STACK.length===1)return Ki.EOF_FOLLOW_KEY;var e=this.getLastExplicitRuleShortName(),t=this.getLastExplicitRuleOccurrenceIndex(),i=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:t,inRule:this.shortRuleNameToFullName(i)}},r.prototype.buildFullFollowKeyStack=function(){var e=this,t=this.RULE_STACK,i=this.RULE_OCCURRENCE_STACK;return(0,cs.map)(t,function(n,s){return s===0?Ki.EOF_FOLLOW_KEY:{ruleName:e.shortRuleNameToFullName(n),idxInCallingRule:i[s],inRule:e.shortRuleNameToFullName(t[s-1])}})},r.prototype.flattenFollowSet=function(){var e=this,t=(0,cs.map)(this.buildFullFollowKeyStack(),function(i){return e.getFollowSetFromFollowKey(i)});return(0,cs.flatten)(t)},r.prototype.getFollowSetFromFollowKey=function(e){if(e===Ki.EOF_FOLLOW_KEY)return[Jy.EOF];var t=e.ruleName+e.idxInCallingRule+Hwe.IN+e.inRule;return this.resyncFollows[t]},r.prototype.addToResyncTokens=function(e,t){return this.tokenMatcher(e,Jy.EOF)||t.push(e),t},r.prototype.reSyncTo=function(e){for(var t=[],i=this.LA(1);this.tokenMatcher(i,e)===!1;)i=this.SKIP_TOKEN(),this.addToResyncTokens(i,t);return(0,cs.dropRight)(t)},r.prototype.attemptInRepetitionRecovery=function(e,t,i,n,s,o,a){},r.prototype.getCurrentGrammarPath=function(e,t){var i=this.getHumanReadableRuleStack(),n=(0,cs.cloneArr)(this.RULE_OCCURRENCE_STACK),s={ruleStack:i,occurrenceStack:n,lastTok:e,lastTokOccurrence:t};return s},r.prototype.getHumanReadableRuleStack=function(){var e=this;return(0,cs.map)(this.RULE_STACK,function(t){return e.shortRuleNameToFullName(t)})},r}();Ki.Recoverable=Ywe;function yJ(r,e,t,i,n,s,o){var a=this.getKeyForAutomaticLookahead(i,n),l=this.firstAfterRepMap[a];if(l===void 0){var c=this.getCurrRuleFullName(),u=this.getGAstProductions()[c],g=new s(u,n);l=g.startWalking(),this.firstAfterRepMap[a]=l}var f=l.token,h=l.occurrence,p=l.isEndOfRule;this.RULE_STACK.length===1&&p&&f===void 0&&(f=Jy.EOF,h=1),this.shouldInRepetitionRecoveryBeTried(f,h,o)&&this.tryInRepetitionRecovery(r,e,t,f)}Ki.attemptInRepetitionRecovery=yJ});var Wy=y(qt=>{"use strict";Object.defineProperty(qt,"__esModule",{value:!0});qt.getKeyForAutomaticLookahead=qt.AT_LEAST_ONE_SEP_IDX=qt.MANY_SEP_IDX=qt.AT_LEAST_ONE_IDX=qt.MANY_IDX=qt.OPTION_IDX=qt.OR_IDX=qt.BITS_FOR_ALT_IDX=qt.BITS_FOR_RULE_IDX=qt.BITS_FOR_OCCURRENCE_IDX=qt.BITS_FOR_METHOD_TYPE=void 0;qt.BITS_FOR_METHOD_TYPE=4;qt.BITS_FOR_OCCURRENCE_IDX=8;qt.BITS_FOR_RULE_IDX=12;qt.BITS_FOR_ALT_IDX=8;qt.OR_IDX=1<{"use strict";Object.defineProperty(zy,"__esModule",{value:!0});zy.LooksAhead=void 0;var Fa=eC(),$s=Gt(),wJ=Hn(),Na=Wy(),Nc=Xd(),qwe=function(){function r(){}return r.prototype.initLooksAhead=function(e){this.dynamicTokensEnabled=(0,$s.has)(e,"dynamicTokensEnabled")?e.dynamicTokensEnabled:wJ.DEFAULT_PARSER_CONFIG.dynamicTokensEnabled,this.maxLookahead=(0,$s.has)(e,"maxLookahead")?e.maxLookahead:wJ.DEFAULT_PARSER_CONFIG.maxLookahead,this.lookAheadFuncsCache=(0,$s.isES2015MapSupported)()?new Map:[],(0,$s.isES2015MapSupported)()?(this.getLaFuncFromCache=this.getLaFuncFromMap,this.setLaFuncCache=this.setLaFuncCacheUsingMap):(this.getLaFuncFromCache=this.getLaFuncFromObj,this.setLaFuncCache=this.setLaFuncUsingObj)},r.prototype.preComputeLookaheadFunctions=function(e){var t=this;(0,$s.forEach)(e,function(i){t.TRACE_INIT(i.name+" Rule Lookahead",function(){var n=(0,Nc.collectMethods)(i),s=n.alternation,o=n.repetition,a=n.option,l=n.repetitionMandatory,c=n.repetitionMandatoryWithSeparator,u=n.repetitionWithSeparator;(0,$s.forEach)(s,function(g){var f=g.idx===0?"":g.idx;t.TRACE_INIT(""+(0,Nc.getProductionDslName)(g)+f,function(){var h=(0,Fa.buildLookaheadFuncForOr)(g.idx,i,g.maxLookahead||t.maxLookahead,g.hasPredicates,t.dynamicTokensEnabled,t.lookAheadBuilderForAlternatives),p=(0,Na.getKeyForAutomaticLookahead)(t.fullRuleNameToShort[i.name],Na.OR_IDX,g.idx);t.setLaFuncCache(p,h)})}),(0,$s.forEach)(o,function(g){t.computeLookaheadFunc(i,g.idx,Na.MANY_IDX,Fa.PROD_TYPE.REPETITION,g.maxLookahead,(0,Nc.getProductionDslName)(g))}),(0,$s.forEach)(a,function(g){t.computeLookaheadFunc(i,g.idx,Na.OPTION_IDX,Fa.PROD_TYPE.OPTION,g.maxLookahead,(0,Nc.getProductionDslName)(g))}),(0,$s.forEach)(l,function(g){t.computeLookaheadFunc(i,g.idx,Na.AT_LEAST_ONE_IDX,Fa.PROD_TYPE.REPETITION_MANDATORY,g.maxLookahead,(0,Nc.getProductionDslName)(g))}),(0,$s.forEach)(c,function(g){t.computeLookaheadFunc(i,g.idx,Na.AT_LEAST_ONE_SEP_IDX,Fa.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,g.maxLookahead,(0,Nc.getProductionDslName)(g))}),(0,$s.forEach)(u,function(g){t.computeLookaheadFunc(i,g.idx,Na.MANY_SEP_IDX,Fa.PROD_TYPE.REPETITION_WITH_SEPARATOR,g.maxLookahead,(0,Nc.getProductionDslName)(g))})})})},r.prototype.computeLookaheadFunc=function(e,t,i,n,s,o){var a=this;this.TRACE_INIT(""+o+(t===0?"":t),function(){var l=(0,Fa.buildLookaheadFuncForOptionalProd)(t,e,s||a.maxLookahead,a.dynamicTokensEnabled,n,a.lookAheadBuilderForOptional),c=(0,Na.getKeyForAutomaticLookahead)(a.fullRuleNameToShort[e.name],i,t);a.setLaFuncCache(c,l)})},r.prototype.lookAheadBuilderForOptional=function(e,t,i){return(0,Fa.buildSingleAlternativeLookaheadFunction)(e,t,i)},r.prototype.lookAheadBuilderForAlternatives=function(e,t,i,n){return(0,Fa.buildAlternativesLookAheadFunc)(e,t,i,n)},r.prototype.getKeyForAutomaticLookahead=function(e,t){var i=this.getLastExplicitRuleShortName();return(0,Na.getKeyForAutomaticLookahead)(i,e,t)},r.prototype.getLaFuncFromCache=function(e){},r.prototype.getLaFuncFromMap=function(e){return this.lookAheadFuncsCache.get(e)},r.prototype.getLaFuncFromObj=function(e){return this.lookAheadFuncsCache[e]},r.prototype.setLaFuncCache=function(e,t){},r.prototype.setLaFuncCacheUsingMap=function(e,t){this.lookAheadFuncsCache.set(e,t)},r.prototype.setLaFuncUsingObj=function(e,t){this.lookAheadFuncsCache[e]=t},r}();zy.LooksAhead=qwe});var bJ=y(To=>{"use strict";Object.defineProperty(To,"__esModule",{value:!0});To.addNoneTerminalToCst=To.addTerminalToCst=To.setNodeLocationFull=To.setNodeLocationOnlyOffset=void 0;function Jwe(r,e){isNaN(r.startOffset)===!0?(r.startOffset=e.startOffset,r.endOffset=e.endOffset):r.endOffset{"use strict";Object.defineProperty(jA,"__esModule",{value:!0});jA.defineNameProp=jA.functionName=jA.classNameFromInstance=void 0;var Xwe=Gt();function _we(r){return SJ(r.constructor)}jA.classNameFromInstance=_we;var QJ="name";function SJ(r){var e=r.name;return e||"anonymous"}jA.functionName=SJ;function Zwe(r,e){var t=Object.getOwnPropertyDescriptor(r,QJ);return(0,Xwe.isUndefined)(t)||t.configurable?(Object.defineProperty(r,QJ,{enumerable:!1,configurable:!0,writable:!1,value:e}),!0):!1}jA.defineNameProp=Zwe});var kJ=y(vi=>{"use strict";Object.defineProperty(vi,"__esModule",{value:!0});vi.validateRedundantMethods=vi.validateMissingCstMethods=vi.validateVisitor=vi.CstVisitorDefinitionError=vi.createBaseVisitorConstructorWithDefaults=vi.createBaseSemanticVisitorConstructor=vi.defaultVisit=void 0;var us=Gt(),iC=Xx();function vJ(r,e){for(var t=(0,us.keys)(r),i=t.length,n=0;n: + `+(""+s.join(` + +`).replace(/\n/g,` + `)))}}};return t.prototype=i,t.prototype.constructor=t,t._RULE_NAMES=e,t}vi.createBaseSemanticVisitorConstructor=$we;function eBe(r,e,t){var i=function(){};(0,iC.defineNameProp)(i,r+"BaseSemanticsWithDefaults");var n=Object.create(t.prototype);return(0,us.forEach)(e,function(s){n[s]=vJ}),i.prototype=n,i.prototype.constructor=i,i}vi.createBaseVisitorConstructorWithDefaults=eBe;var _x;(function(r){r[r.REDUNDANT_METHOD=0]="REDUNDANT_METHOD",r[r.MISSING_METHOD=1]="MISSING_METHOD"})(_x=vi.CstVisitorDefinitionError||(vi.CstVisitorDefinitionError={}));function xJ(r,e){var t=PJ(r,e),i=DJ(r,e);return t.concat(i)}vi.validateVisitor=xJ;function PJ(r,e){var t=(0,us.map)(e,function(i){if(!(0,us.isFunction)(r[i]))return{msg:"Missing visitor method: <"+i+"> on "+(0,iC.functionName)(r.constructor)+" CST Visitor.",type:_x.MISSING_METHOD,methodName:i}});return(0,us.compact)(t)}vi.validateMissingCstMethods=PJ;var tBe=["constructor","visit","validateVisitor"];function DJ(r,e){var t=[];for(var i in r)(0,us.isFunction)(r[i])&&!(0,us.contains)(tBe,i)&&!(0,us.contains)(e,i)&&t.push({msg:"Redundant visitor method: <"+i+"> on "+(0,iC.functionName)(r.constructor)+` CST Visitor +There is no Grammar Rule corresponding to this method's name. +`,type:_x.REDUNDANT_METHOD,methodName:i});return t}vi.validateRedundantMethods=DJ});var FJ=y(Vy=>{"use strict";Object.defineProperty(Vy,"__esModule",{value:!0});Vy.TreeBuilder=void 0;var wf=bJ(),ti=Gt(),RJ=kJ(),rBe=Hn(),iBe=function(){function r(){}return r.prototype.initTreeBuilder=function(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=(0,ti.has)(e,"nodeLocationTracking")?e.nodeLocationTracking:rBe.DEFAULT_PARSER_CONFIG.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=ti.NOOP,this.cstFinallyStateUpdate=ti.NOOP,this.cstPostTerminal=ti.NOOP,this.cstPostNonTerminal=ti.NOOP,this.cstPostRule=ti.NOOP;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=wf.setNodeLocationFull,this.setNodeLocationFromNode=wf.setNodeLocationFull,this.cstPostRule=ti.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=ti.NOOP,this.setNodeLocationFromNode=ti.NOOP,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=wf.setNodeLocationOnlyOffset,this.setNodeLocationFromNode=wf.setNodeLocationOnlyOffset,this.cstPostRule=ti.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=ti.NOOP,this.setNodeLocationFromNode=ti.NOOP,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=ti.NOOP,this.setNodeLocationFromNode=ti.NOOP,this.cstPostRule=ti.NOOP,this.setInitialNodeLocation=ti.NOOP;else throw Error('Invalid config option: "'+e.nodeLocationTracking+'"')},r.prototype.setInitialNodeLocationOnlyOffsetRecovery=function(e){e.location={startOffset:NaN,endOffset:NaN}},r.prototype.setInitialNodeLocationOnlyOffsetRegular=function(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}},r.prototype.setInitialNodeLocationFullRecovery=function(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.setInitialNodeLocationFullRegular=function(e){var t=this.LA(1);e.location={startOffset:t.startOffset,startLine:t.startLine,startColumn:t.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.cstInvocationStateUpdate=function(e,t){var i={name:e,children:{}};this.setInitialNodeLocation(i),this.CST_STACK.push(i)},r.prototype.cstFinallyStateUpdate=function(){this.CST_STACK.pop()},r.prototype.cstPostRuleFull=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?(i.endOffset=t.endOffset,i.endLine=t.endLine,i.endColumn=t.endColumn):(i.startOffset=NaN,i.startLine=NaN,i.startColumn=NaN)},r.prototype.cstPostRuleOnlyOffset=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?i.endOffset=t.endOffset:i.startOffset=NaN},r.prototype.cstPostTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,wf.addTerminalToCst)(i,t,e),this.setNodeLocationFromToken(i.location,t)},r.prototype.cstPostNonTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,wf.addNoneTerminalToCst)(i,t,e),this.setNodeLocationFromNode(i.location,e.location)},r.prototype.getBaseCstVisitorConstructor=function(){if((0,ti.isUndefined)(this.baseCstVisitorConstructor)){var e=(0,RJ.createBaseSemanticVisitorConstructor)(this.className,(0,ti.keys)(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor},r.prototype.getBaseCstVisitorConstructorWithDefaults=function(){if((0,ti.isUndefined)(this.baseCstVisitorWithDefaultsConstructor)){var e=(0,RJ.createBaseVisitorConstructorWithDefaults)(this.className,(0,ti.keys)(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor},r.prototype.getLastExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-1]},r.prototype.getPreviousExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-2]},r.prototype.getLastExplicitRuleOccurrenceIndex=function(){var e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]},r}();Vy.TreeBuilder=iBe});var TJ=y(Xy=>{"use strict";Object.defineProperty(Xy,"__esModule",{value:!0});Xy.LexerAdapter=void 0;var NJ=Hn(),nBe=function(){function r(){}return r.prototype.initLexerAdapter=function(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1},Object.defineProperty(r.prototype,"input",{get:function(){return this.tokVector},set:function(e){if(this.selfAnalysisDone!==!0)throw Error("Missing invocation at the end of the Parser's constructor.");this.reset(),this.tokVector=e,this.tokVectorLength=e.length},enumerable:!1,configurable:!0}),r.prototype.SKIP_TOKEN=function(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):NJ.END_OF_FILE},r.prototype.LA=function(e){var t=this.currIdx+e;return t<0||this.tokVectorLength<=t?NJ.END_OF_FILE:this.tokVector[t]},r.prototype.consumeToken=function(){this.currIdx++},r.prototype.exportLexerState=function(){return this.currIdx},r.prototype.importLexerState=function(e){this.currIdx=e},r.prototype.resetLexerState=function(){this.currIdx=-1},r.prototype.moveToTerminatedState=function(){this.currIdx=this.tokVector.length-1},r.prototype.getLexerPosition=function(){return this.exportLexerState()},r}();Xy.LexerAdapter=nBe});var OJ=y(_y=>{"use strict";Object.defineProperty(_y,"__esModule",{value:!0});_y.RecognizerApi=void 0;var LJ=Gt(),sBe=yf(),Zx=Hn(),oBe=_d(),aBe=Jx(),ABe=Cn(),lBe=function(){function r(){}return r.prototype.ACTION=function(e){return e.call(this)},r.prototype.consume=function(e,t,i){return this.consumeInternal(t,e,i)},r.prototype.subrule=function(e,t,i){return this.subruleInternal(t,e,i)},r.prototype.option=function(e,t){return this.optionInternal(t,e)},r.prototype.or=function(e,t){return this.orInternal(t,e)},r.prototype.many=function(e,t){return this.manyInternal(e,t)},r.prototype.atLeastOne=function(e,t){return this.atLeastOneInternal(e,t)},r.prototype.CONSUME=function(e,t){return this.consumeInternal(e,0,t)},r.prototype.CONSUME1=function(e,t){return this.consumeInternal(e,1,t)},r.prototype.CONSUME2=function(e,t){return this.consumeInternal(e,2,t)},r.prototype.CONSUME3=function(e,t){return this.consumeInternal(e,3,t)},r.prototype.CONSUME4=function(e,t){return this.consumeInternal(e,4,t)},r.prototype.CONSUME5=function(e,t){return this.consumeInternal(e,5,t)},r.prototype.CONSUME6=function(e,t){return this.consumeInternal(e,6,t)},r.prototype.CONSUME7=function(e,t){return this.consumeInternal(e,7,t)},r.prototype.CONSUME8=function(e,t){return this.consumeInternal(e,8,t)},r.prototype.CONSUME9=function(e,t){return this.consumeInternal(e,9,t)},r.prototype.SUBRULE=function(e,t){return this.subruleInternal(e,0,t)},r.prototype.SUBRULE1=function(e,t){return this.subruleInternal(e,1,t)},r.prototype.SUBRULE2=function(e,t){return this.subruleInternal(e,2,t)},r.prototype.SUBRULE3=function(e,t){return this.subruleInternal(e,3,t)},r.prototype.SUBRULE4=function(e,t){return this.subruleInternal(e,4,t)},r.prototype.SUBRULE5=function(e,t){return this.subruleInternal(e,5,t)},r.prototype.SUBRULE6=function(e,t){return this.subruleInternal(e,6,t)},r.prototype.SUBRULE7=function(e,t){return this.subruleInternal(e,7,t)},r.prototype.SUBRULE8=function(e,t){return this.subruleInternal(e,8,t)},r.prototype.SUBRULE9=function(e,t){return this.subruleInternal(e,9,t)},r.prototype.OPTION=function(e){return this.optionInternal(e,0)},r.prototype.OPTION1=function(e){return this.optionInternal(e,1)},r.prototype.OPTION2=function(e){return this.optionInternal(e,2)},r.prototype.OPTION3=function(e){return this.optionInternal(e,3)},r.prototype.OPTION4=function(e){return this.optionInternal(e,4)},r.prototype.OPTION5=function(e){return this.optionInternal(e,5)},r.prototype.OPTION6=function(e){return this.optionInternal(e,6)},r.prototype.OPTION7=function(e){return this.optionInternal(e,7)},r.prototype.OPTION8=function(e){return this.optionInternal(e,8)},r.prototype.OPTION9=function(e){return this.optionInternal(e,9)},r.prototype.OR=function(e){return this.orInternal(e,0)},r.prototype.OR1=function(e){return this.orInternal(e,1)},r.prototype.OR2=function(e){return this.orInternal(e,2)},r.prototype.OR3=function(e){return this.orInternal(e,3)},r.prototype.OR4=function(e){return this.orInternal(e,4)},r.prototype.OR5=function(e){return this.orInternal(e,5)},r.prototype.OR6=function(e){return this.orInternal(e,6)},r.prototype.OR7=function(e){return this.orInternal(e,7)},r.prototype.OR8=function(e){return this.orInternal(e,8)},r.prototype.OR9=function(e){return this.orInternal(e,9)},r.prototype.MANY=function(e){this.manyInternal(0,e)},r.prototype.MANY1=function(e){this.manyInternal(1,e)},r.prototype.MANY2=function(e){this.manyInternal(2,e)},r.prototype.MANY3=function(e){this.manyInternal(3,e)},r.prototype.MANY4=function(e){this.manyInternal(4,e)},r.prototype.MANY5=function(e){this.manyInternal(5,e)},r.prototype.MANY6=function(e){this.manyInternal(6,e)},r.prototype.MANY7=function(e){this.manyInternal(7,e)},r.prototype.MANY8=function(e){this.manyInternal(8,e)},r.prototype.MANY9=function(e){this.manyInternal(9,e)},r.prototype.MANY_SEP=function(e){this.manySepFirstInternal(0,e)},r.prototype.MANY_SEP1=function(e){this.manySepFirstInternal(1,e)},r.prototype.MANY_SEP2=function(e){this.manySepFirstInternal(2,e)},r.prototype.MANY_SEP3=function(e){this.manySepFirstInternal(3,e)},r.prototype.MANY_SEP4=function(e){this.manySepFirstInternal(4,e)},r.prototype.MANY_SEP5=function(e){this.manySepFirstInternal(5,e)},r.prototype.MANY_SEP6=function(e){this.manySepFirstInternal(6,e)},r.prototype.MANY_SEP7=function(e){this.manySepFirstInternal(7,e)},r.prototype.MANY_SEP8=function(e){this.manySepFirstInternal(8,e)},r.prototype.MANY_SEP9=function(e){this.manySepFirstInternal(9,e)},r.prototype.AT_LEAST_ONE=function(e){this.atLeastOneInternal(0,e)},r.prototype.AT_LEAST_ONE1=function(e){return this.atLeastOneInternal(1,e)},r.prototype.AT_LEAST_ONE2=function(e){this.atLeastOneInternal(2,e)},r.prototype.AT_LEAST_ONE3=function(e){this.atLeastOneInternal(3,e)},r.prototype.AT_LEAST_ONE4=function(e){this.atLeastOneInternal(4,e)},r.prototype.AT_LEAST_ONE5=function(e){this.atLeastOneInternal(5,e)},r.prototype.AT_LEAST_ONE6=function(e){this.atLeastOneInternal(6,e)},r.prototype.AT_LEAST_ONE7=function(e){this.atLeastOneInternal(7,e)},r.prototype.AT_LEAST_ONE8=function(e){this.atLeastOneInternal(8,e)},r.prototype.AT_LEAST_ONE9=function(e){this.atLeastOneInternal(9,e)},r.prototype.AT_LEAST_ONE_SEP=function(e){this.atLeastOneSepFirstInternal(0,e)},r.prototype.AT_LEAST_ONE_SEP1=function(e){this.atLeastOneSepFirstInternal(1,e)},r.prototype.AT_LEAST_ONE_SEP2=function(e){this.atLeastOneSepFirstInternal(2,e)},r.prototype.AT_LEAST_ONE_SEP3=function(e){this.atLeastOneSepFirstInternal(3,e)},r.prototype.AT_LEAST_ONE_SEP4=function(e){this.atLeastOneSepFirstInternal(4,e)},r.prototype.AT_LEAST_ONE_SEP5=function(e){this.atLeastOneSepFirstInternal(5,e)},r.prototype.AT_LEAST_ONE_SEP6=function(e){this.atLeastOneSepFirstInternal(6,e)},r.prototype.AT_LEAST_ONE_SEP7=function(e){this.atLeastOneSepFirstInternal(7,e)},r.prototype.AT_LEAST_ONE_SEP8=function(e){this.atLeastOneSepFirstInternal(8,e)},r.prototype.AT_LEAST_ONE_SEP9=function(e){this.atLeastOneSepFirstInternal(9,e)},r.prototype.RULE=function(e,t,i){if(i===void 0&&(i=Zx.DEFAULT_RULE_CONFIG),(0,LJ.contains)(this.definedRulesNames,e)){var n=oBe.defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),s={message:n,type:Zx.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);var o=this.defineRule(e,t,i);return this[e]=o,o},r.prototype.OVERRIDE_RULE=function(e,t,i){i===void 0&&(i=Zx.DEFAULT_RULE_CONFIG);var n=[];n=n.concat((0,aBe.validateRuleIsOverridden)(e,this.definedRulesNames,this.className)),this.definitionErrors=this.definitionErrors.concat(n);var s=this.defineRule(e,t,i);return this[e]=s,s},r.prototype.BACKTRACK=function(e,t){return function(){this.isBackTrackingStack.push(1);var i=this.saveRecogState();try{return e.apply(this,t),!0}catch(n){if((0,sBe.isRecognitionException)(n))return!1;throw n}finally{this.reloadRecogState(i),this.isBackTrackingStack.pop()}}},r.prototype.getGAstProductions=function(){return this.gastProductionsCache},r.prototype.getSerializedGastProductions=function(){return(0,ABe.serializeGrammar)((0,LJ.values)(this.gastProductionsCache))},r}();_y.RecognizerApi=lBe});var HJ=y($y=>{"use strict";Object.defineProperty($y,"__esModule",{value:!0});$y.RecognizerEngine=void 0;var kr=Gt(),Gn=Wy(),Zy=yf(),MJ=eC(),Bf=$d(),UJ=Hn(),cBe=Vx(),KJ=HA(),nC=df(),uBe=Xx(),gBe=function(){function r(){}return r.prototype.initRecognizerEngine=function(e,t){if(this.className=(0,uBe.classNameFromInstance)(this),this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=nC.tokenStructuredMatcherNoCategories,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},(0,kr.has)(t,"serializedGrammar"))throw Error(`The Parser's configuration can no longer contain a property. + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0 + For Further details.`);if((0,kr.isArray)(e)){if((0,kr.isEmpty)(e))throw Error(`A Token Vocabulary cannot be empty. + Note that the first argument for the parser constructor + is no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset=="number")throw Error(`The Parser constructor no longer accepts a token vector as the first argument. + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0 + For Further details.`)}if((0,kr.isArray)(e))this.tokensMap=(0,kr.reduce)(e,function(o,a){return o[a.name]=a,o},{});else if((0,kr.has)(e,"modes")&&(0,kr.every)((0,kr.flatten)((0,kr.values)(e.modes)),nC.isTokenType)){var i=(0,kr.flatten)((0,kr.values)(e.modes)),n=(0,kr.uniq)(i);this.tokensMap=(0,kr.reduce)(n,function(o,a){return o[a.name]=a,o},{})}else if((0,kr.isObject)(e))this.tokensMap=(0,kr.cloneObj)(e);else throw new Error(" argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition");this.tokensMap.EOF=KJ.EOF;var s=(0,kr.every)((0,kr.values)(e),function(o){return(0,kr.isEmpty)(o.categoryMatches)});this.tokenMatcher=s?nC.tokenStructuredMatcherNoCategories:nC.tokenStructuredMatcher,(0,nC.augmentTokenTypes)((0,kr.values)(this.tokensMap))},r.prototype.defineRule=function(e,t,i){if(this.selfAnalysisDone)throw Error("Grammar rule <"+e+`> may not be defined after the 'performSelfAnalysis' method has been called' +Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);var n=(0,kr.has)(i,"resyncEnabled")?i.resyncEnabled:UJ.DEFAULT_RULE_CONFIG.resyncEnabled,s=(0,kr.has)(i,"recoveryValueFunc")?i.recoveryValueFunc:UJ.DEFAULT_RULE_CONFIG.recoveryValueFunc,o=this.ruleShortNameIdx<t},r.prototype.orInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(Gn.OR_IDX,t),n=(0,kr.isArray)(e)?e:e.DEF,s=this.getLaFuncFromCache(i),o=s.call(this,n);if(o!==void 0){var a=n[o];return a.ALT.call(this)}this.raiseNoAltException(t,e.ERR_MSG)},r.prototype.ruleFinallyStateUpdate=function(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){var e=this.LA(1),t=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new Zy.NotAllInputParsedException(t,e))}},r.prototype.subruleInternal=function(e,t,i){var n;try{var s=i!==void 0?i.ARGS:void 0;return n=e.call(this,t,s),this.cstPostNonTerminal(n,i!==void 0&&i.LABEL!==void 0?i.LABEL:e.ruleName),n}catch(o){this.subruleInternalError(o,i,e.ruleName)}},r.prototype.subruleInternalError=function(e,t,i){throw(0,Zy.isRecognitionException)(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,t!==void 0&&t.LABEL!==void 0?t.LABEL:i),delete e.partialCstResult),e},r.prototype.consumeInternal=function(e,t,i){var n;try{var s=this.LA(1);this.tokenMatcher(s,e)===!0?(this.consumeToken(),n=s):this.consumeInternalError(e,s,i)}catch(o){n=this.consumeInternalRecovery(e,t,o)}return this.cstPostTerminal(i!==void 0&&i.LABEL!==void 0?i.LABEL:e.name,n),n},r.prototype.consumeInternalError=function(e,t,i){var n,s=this.LA(0);throw i!==void 0&&i.ERR_MSG?n=i.ERR_MSG:n=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:t,previous:s,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new Zy.MismatchedTokenException(n,t,s))},r.prototype.consumeInternalRecovery=function(e,t,i){if(this.recoveryEnabled&&i.name==="MismatchedTokenException"&&!this.isBackTracking()){var n=this.getFollowsForInRuleRecovery(e,t);try{return this.tryInRuleRecovery(e,n)}catch(s){throw s.name===cBe.IN_RULE_RECOVERY_EXCEPTION?i:s}}else throw i},r.prototype.saveRecogState=function(){var e=this.errors,t=(0,kr.cloneArr)(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:t,CST_STACK:this.CST_STACK}},r.prototype.reloadRecogState=function(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK},r.prototype.ruleInvocationStateUpdate=function(e,t,i){this.RULE_OCCURRENCE_STACK.push(i),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(t,e)},r.prototype.isBackTracking=function(){return this.isBackTrackingStack.length!==0},r.prototype.getCurrRuleFullName=function(){var e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]},r.prototype.shortRuleNameToFullName=function(e){return this.shortRuleNameToFull[e]},r.prototype.isAtEndOfInput=function(){return this.tokenMatcher(this.LA(1),KJ.EOF)},r.prototype.reset=function(){this.resetLexerState(),this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]},r}();$y.RecognizerEngine=gBe});var YJ=y(ew=>{"use strict";Object.defineProperty(ew,"__esModule",{value:!0});ew.ErrorHandler=void 0;var $x=yf(),eP=Gt(),GJ=eC(),fBe=Hn(),hBe=function(){function r(){}return r.prototype.initErrorHandler=function(e){this._errors=[],this.errorMessageProvider=(0,eP.has)(e,"errorMessageProvider")?e.errorMessageProvider:fBe.DEFAULT_PARSER_CONFIG.errorMessageProvider},r.prototype.SAVE_ERROR=function(e){if((0,$x.isRecognitionException)(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:(0,eP.cloneArr)(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error("Trying to save an Error which is not a RecognitionException")},Object.defineProperty(r.prototype,"errors",{get:function(){return(0,eP.cloneArr)(this._errors)},set:function(e){this._errors=e},enumerable:!1,configurable:!0}),r.prototype.raiseEarlyExitException=function(e,t,i){for(var n=this.getCurrRuleFullName(),s=this.getGAstProductions()[n],o=(0,GJ.getLookaheadPathsForOptionalProd)(e,s,t,this.maxLookahead),a=o[0],l=[],c=1;c<=this.maxLookahead;c++)l.push(this.LA(c));var u=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:a,actual:l,previous:this.LA(0),customUserDescription:i,ruleName:n});throw this.SAVE_ERROR(new $x.EarlyExitException(u,this.LA(1),this.LA(0)))},r.prototype.raiseNoAltException=function(e,t){for(var i=this.getCurrRuleFullName(),n=this.getGAstProductions()[i],s=(0,GJ.getLookaheadPathsForOr)(e,n,this.maxLookahead),o=[],a=1;a<=this.maxLookahead;a++)o.push(this.LA(a));var l=this.LA(0),c=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:s,actual:o,previous:l,customUserDescription:t,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new $x.NoViableAltException(c,this.LA(1),l))},r}();ew.ErrorHandler=hBe});var JJ=y(tw=>{"use strict";Object.defineProperty(tw,"__esModule",{value:!0});tw.ContentAssist=void 0;var jJ=$d(),qJ=Gt(),pBe=function(){function r(){}return r.prototype.initContentAssist=function(){},r.prototype.computeContentAssist=function(e,t){var i=this.gastProductionsCache[e];if((0,qJ.isUndefined)(i))throw Error("Rule ->"+e+"<- does not exist in this grammar.");return(0,jJ.nextPossibleTokensAfter)([i],t,this.tokenMatcher,this.maxLookahead)},r.prototype.getNextPossibleTokenTypes=function(e){var t=(0,qJ.first)(e.ruleStack),i=this.getGAstProductions(),n=i[t],s=new jJ.NextAfterTokenWalker(n,e).startWalking();return s},r}();tw.ContentAssist=pBe});var e3=y(nw=>{"use strict";Object.defineProperty(nw,"__esModule",{value:!0});nw.GastRecorder=void 0;var In=Gt(),Lo=Cn(),dBe=Jd(),XJ=df(),_J=HA(),CBe=Hn(),mBe=Wy(),iw={description:"This Object indicates the Parser is during Recording Phase"};Object.freeze(iw);var WJ=!0,zJ=Math.pow(2,mBe.BITS_FOR_OCCURRENCE_IDX)-1,ZJ=(0,_J.createToken)({name:"RECORDING_PHASE_TOKEN",pattern:dBe.Lexer.NA});(0,XJ.augmentTokenTypes)([ZJ]);var $J=(0,_J.createTokenInstance)(ZJ,`This IToken indicates the Parser is in Recording Phase + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze($J);var EBe={name:`This CSTNode indicates the Parser is in Recording Phase + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},IBe=function(){function r(){}return r.prototype.initGastRecorder=function(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1},r.prototype.enableRecording=function(){var e=this;this.RECORDING_PHASE=!0,this.TRACE_INIT("Enable Recording",function(){for(var t=function(n){var s=n>0?n:"";e["CONSUME"+s]=function(o,a){return this.consumeInternalRecord(o,n,a)},e["SUBRULE"+s]=function(o,a){return this.subruleInternalRecord(o,n,a)},e["OPTION"+s]=function(o){return this.optionInternalRecord(o,n)},e["OR"+s]=function(o){return this.orInternalRecord(o,n)},e["MANY"+s]=function(o){this.manyInternalRecord(n,o)},e["MANY_SEP"+s]=function(o){this.manySepFirstInternalRecord(n,o)},e["AT_LEAST_ONE"+s]=function(o){this.atLeastOneInternalRecord(n,o)},e["AT_LEAST_ONE_SEP"+s]=function(o){this.atLeastOneSepFirstInternalRecord(n,o)}},i=0;i<10;i++)t(i);e.consume=function(n,s,o){return this.consumeInternalRecord(s,n,o)},e.subrule=function(n,s,o){return this.subruleInternalRecord(s,n,o)},e.option=function(n,s){return this.optionInternalRecord(s,n)},e.or=function(n,s){return this.orInternalRecord(s,n)},e.many=function(n,s){this.manyInternalRecord(n,s)},e.atLeastOne=function(n,s){this.atLeastOneInternalRecord(n,s)},e.ACTION=e.ACTION_RECORD,e.BACKTRACK=e.BACKTRACK_RECORD,e.LA=e.LA_RECORD})},r.prototype.disableRecording=function(){var e=this;this.RECORDING_PHASE=!1,this.TRACE_INIT("Deleting Recording methods",function(){for(var t=0;t<10;t++){var i=t>0?t:"";delete e["CONSUME"+i],delete e["SUBRULE"+i],delete e["OPTION"+i],delete e["OR"+i],delete e["MANY"+i],delete e["MANY_SEP"+i],delete e["AT_LEAST_ONE"+i],delete e["AT_LEAST_ONE_SEP"+i]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})},r.prototype.ACTION_RECORD=function(e){},r.prototype.BACKTRACK_RECORD=function(e,t){return function(){return!0}},r.prototype.LA_RECORD=function(e){return CBe.END_OF_FILE},r.prototype.topLevelRuleRecord=function(e,t){try{var i=new Lo.Rule({definition:[],name:e});return i.name=e,this.recordingProdStack.push(i),t.call(this),this.recordingProdStack.pop(),i}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+` + This error was thrown during the "grammar recording phase" For more info see: + https://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}},r.prototype.optionInternalRecord=function(e,t){return sC.call(this,Lo.Option,e,t)},r.prototype.atLeastOneInternalRecord=function(e,t){sC.call(this,Lo.RepetitionMandatory,t,e)},r.prototype.atLeastOneSepFirstInternalRecord=function(e,t){sC.call(this,Lo.RepetitionMandatoryWithSeparator,t,e,WJ)},r.prototype.manyInternalRecord=function(e,t){sC.call(this,Lo.Repetition,t,e)},r.prototype.manySepFirstInternalRecord=function(e,t){sC.call(this,Lo.RepetitionWithSeparator,t,e,WJ)},r.prototype.orInternalRecord=function(e,t){return yBe.call(this,e,t)},r.prototype.subruleInternalRecord=function(e,t,i){if(rw(t),!e||(0,In.has)(e,"ruleName")===!1){var n=new Error(" argument is invalid"+(" expecting a Parser method reference but got: <"+JSON.stringify(e)+">")+(` + inside top level rule: <`+this.recordingProdStack[0].name+">"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,In.peek)(this.recordingProdStack),o=e.ruleName,a=new Lo.NonTerminal({idx:t,nonTerminalName:o,label:i==null?void 0:i.LABEL,referencedRule:void 0});return s.definition.push(a),this.outputCst?EBe:iw},r.prototype.consumeInternalRecord=function(e,t,i){if(rw(t),!(0,XJ.hasShortKeyProperty)(e)){var n=new Error(" argument is invalid"+(" expecting a TokenType reference but got: <"+JSON.stringify(e)+">")+(` + inside top level rule: <`+this.recordingProdStack[0].name+">"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,In.peek)(this.recordingProdStack),o=new Lo.Terminal({idx:t,terminalType:e,label:i==null?void 0:i.LABEL});return s.definition.push(o),$J},r}();nw.GastRecorder=IBe;function sC(r,e,t,i){i===void 0&&(i=!1),rw(t);var n=(0,In.peek)(this.recordingProdStack),s=(0,In.isFunction)(e)?e:e.DEF,o=new r({definition:[],idx:t});return i&&(o.separator=e.SEP),(0,In.has)(e,"MAX_LOOKAHEAD")&&(o.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(o),s.call(this),n.definition.push(o),this.recordingProdStack.pop(),iw}function yBe(r,e){var t=this;rw(e);var i=(0,In.peek)(this.recordingProdStack),n=(0,In.isArray)(r)===!1,s=n===!1?r:r.DEF,o=new Lo.Alternation({definition:[],idx:e,ignoreAmbiguities:n&&r.IGNORE_AMBIGUITIES===!0});(0,In.has)(r,"MAX_LOOKAHEAD")&&(o.maxLookahead=r.MAX_LOOKAHEAD);var a=(0,In.some)(s,function(l){return(0,In.isFunction)(l.GATE)});return o.hasPredicates=a,i.definition.push(o),(0,In.forEach)(s,function(l){var c=new Lo.Alternative({definition:[]});o.definition.push(c),(0,In.has)(l,"IGNORE_AMBIGUITIES")?c.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:(0,In.has)(l,"GATE")&&(c.ignoreAmbiguities=!0),t.recordingProdStack.push(c),l.ALT.call(t),t.recordingProdStack.pop()}),iw}function VJ(r){return r===0?"":""+r}function rw(r){if(r<0||r>zJ){var e=new Error("Invalid DSL Method idx value: <"+r+`> + `+("Idx value must be a none negative value smaller than "+(zJ+1)));throw e.KNOWN_RECORDER_ERROR=!0,e}}});var r3=y(sw=>{"use strict";Object.defineProperty(sw,"__esModule",{value:!0});sw.PerformanceTracer=void 0;var t3=Gt(),wBe=Hn(),BBe=function(){function r(){}return r.prototype.initPerformanceTracer=function(e){if((0,t3.has)(e,"traceInitPerf")){var t=e.traceInitPerf,i=typeof t=="number";this.traceInitMaxIdent=i?t:1/0,this.traceInitPerf=i?t>0:t}else this.traceInitMaxIdent=0,this.traceInitPerf=wBe.DEFAULT_PARSER_CONFIG.traceInitPerf;this.traceInitIndent=-1},r.prototype.TRACE_INIT=function(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <"+e+">");var n=(0,t3.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent time: "+s+"ms"),this.traceInitIndent--,o}else return t()},r}();sw.PerformanceTracer=BBe});var i3=y(ow=>{"use strict";Object.defineProperty(ow,"__esModule",{value:!0});ow.applyMixins=void 0;function bBe(r,e){e.forEach(function(t){var i=t.prototype;Object.getOwnPropertyNames(i).forEach(function(n){if(n!=="constructor"){var s=Object.getOwnPropertyDescriptor(i,n);s&&(s.get||s.set)?Object.defineProperty(r.prototype,n,s):r.prototype[n]=t.prototype[n]}})})}ow.applyMixins=bBe});var Hn=y(Cr=>{"use strict";var o3=Cr&&Cr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Cr,"__esModule",{value:!0});Cr.EmbeddedActionsParser=Cr.CstParser=Cr.Parser=Cr.EMPTY_ALT=Cr.ParserDefinitionErrorType=Cr.DEFAULT_RULE_CONFIG=Cr.DEFAULT_PARSER_CONFIG=Cr.END_OF_FILE=void 0;var _i=Gt(),QBe=Yq(),n3=HA(),a3=_d(),s3=pJ(),SBe=Vx(),vBe=BJ(),xBe=FJ(),PBe=TJ(),DBe=OJ(),kBe=HJ(),RBe=YJ(),FBe=JJ(),NBe=e3(),TBe=r3(),LBe=i3();Cr.END_OF_FILE=(0,n3.createTokenInstance)(n3.EOF,"",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(Cr.END_OF_FILE);Cr.DEFAULT_PARSER_CONFIG=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:a3.defaultParserErrorProvider,nodeLocationTracking:"none",traceInitPerf:!1,skipValidations:!1});Cr.DEFAULT_RULE_CONFIG=Object.freeze({recoveryValueFunc:function(){},resyncEnabled:!0});var OBe;(function(r){r[r.INVALID_RULE_NAME=0]="INVALID_RULE_NAME",r[r.DUPLICATE_RULE_NAME=1]="DUPLICATE_RULE_NAME",r[r.INVALID_RULE_OVERRIDE=2]="INVALID_RULE_OVERRIDE",r[r.DUPLICATE_PRODUCTIONS=3]="DUPLICATE_PRODUCTIONS",r[r.UNRESOLVED_SUBRULE_REF=4]="UNRESOLVED_SUBRULE_REF",r[r.LEFT_RECURSION=5]="LEFT_RECURSION",r[r.NONE_LAST_EMPTY_ALT=6]="NONE_LAST_EMPTY_ALT",r[r.AMBIGUOUS_ALTS=7]="AMBIGUOUS_ALTS",r[r.CONFLICT_TOKENS_RULES_NAMESPACE=8]="CONFLICT_TOKENS_RULES_NAMESPACE",r[r.INVALID_TOKEN_NAME=9]="INVALID_TOKEN_NAME",r[r.NO_NON_EMPTY_LOOKAHEAD=10]="NO_NON_EMPTY_LOOKAHEAD",r[r.AMBIGUOUS_PREFIX_ALTS=11]="AMBIGUOUS_PREFIX_ALTS",r[r.TOO_MANY_ALTS=12]="TOO_MANY_ALTS"})(OBe=Cr.ParserDefinitionErrorType||(Cr.ParserDefinitionErrorType={}));function MBe(r){return r===void 0&&(r=void 0),function(){return r}}Cr.EMPTY_ALT=MBe;var aw=function(){function r(e,t){this.definitionErrors=[],this.selfAnalysisDone=!1;var i=this;if(i.initErrorHandler(t),i.initLexerAdapter(),i.initLooksAhead(t),i.initRecognizerEngine(e,t),i.initRecoverable(t),i.initTreeBuilder(t),i.initContentAssist(),i.initGastRecorder(t),i.initPerformanceTracer(t),(0,_i.has)(t,"ignoredIssues"))throw new Error(`The IParserConfig property has been deprecated. + Please use the flag on the relevant DSL method instead. + See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES + For further details.`);this.skipValidations=(0,_i.has)(t,"skipValidations")?t.skipValidations:Cr.DEFAULT_PARSER_CONFIG.skipValidations}return r.performSelfAnalysis=function(e){throw Error("The **static** `performSelfAnalysis` method has been deprecated. \nUse the **instance** method with the same name instead.")},r.prototype.performSelfAnalysis=function(){var e=this;this.TRACE_INIT("performSelfAnalysis",function(){var t;e.selfAnalysisDone=!0;var i=e.className;e.TRACE_INIT("toFastProps",function(){(0,_i.toFastProperties)(e)}),e.TRACE_INIT("Grammar Recording",function(){try{e.enableRecording(),(0,_i.forEach)(e.definedRulesNames,function(s){var o=e[s],a=o.originalGrammarAction,l=void 0;e.TRACE_INIT(s+" Rule",function(){l=e.topLevelRuleRecord(s,a)}),e.gastProductionsCache[s]=l})}finally{e.disableRecording()}});var n=[];if(e.TRACE_INIT("Grammar Resolving",function(){n=(0,s3.resolveGrammar)({rules:(0,_i.values)(e.gastProductionsCache)}),e.definitionErrors=e.definitionErrors.concat(n)}),e.TRACE_INIT("Grammar Validations",function(){if((0,_i.isEmpty)(n)&&e.skipValidations===!1){var s=(0,s3.validateGrammar)({rules:(0,_i.values)(e.gastProductionsCache),maxLookahead:e.maxLookahead,tokenTypes:(0,_i.values)(e.tokensMap),errMsgProvider:a3.defaultGrammarValidatorErrorProvider,grammarName:i});e.definitionErrors=e.definitionErrors.concat(s)}}),(0,_i.isEmpty)(e.definitionErrors)&&(e.recoveryEnabled&&e.TRACE_INIT("computeAllProdsFollows",function(){var s=(0,QBe.computeAllProdsFollows)((0,_i.values)(e.gastProductionsCache));e.resyncFollows=s}),e.TRACE_INIT("ComputeLookaheadFunctions",function(){e.preComputeLookaheadFunctions((0,_i.values)(e.gastProductionsCache))})),!r.DEFER_DEFINITION_ERRORS_HANDLING&&!(0,_i.isEmpty)(e.definitionErrors))throw t=(0,_i.map)(e.definitionErrors,function(s){return s.message}),new Error(`Parser Definition Errors detected: + `+t.join(` +------------------------------- +`))})},r.DEFER_DEFINITION_ERRORS_HANDLING=!1,r}();Cr.Parser=aw;(0,LBe.applyMixins)(aw,[SBe.Recoverable,vBe.LooksAhead,xBe.TreeBuilder,PBe.LexerAdapter,kBe.RecognizerEngine,DBe.RecognizerApi,RBe.ErrorHandler,FBe.ContentAssist,NBe.GastRecorder,TBe.PerformanceTracer]);var UBe=function(r){o3(e,r);function e(t,i){i===void 0&&(i=Cr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,_i.cloneObj)(i);return s.outputCst=!0,n=r.call(this,t,s)||this,n}return e}(aw);Cr.CstParser=UBe;var KBe=function(r){o3(e,r);function e(t,i){i===void 0&&(i=Cr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,_i.cloneObj)(i);return s.outputCst=!1,n=r.call(this,t,s)||this,n}return e}(aw);Cr.EmbeddedActionsParser=KBe});var l3=y(Aw=>{"use strict";Object.defineProperty(Aw,"__esModule",{value:!0});Aw.createSyntaxDiagramsCode=void 0;var A3=Ix();function HBe(r,e){var t=e===void 0?{}:e,i=t.resourceBase,n=i===void 0?"https://unpkg.com/chevrotain@"+A3.VERSION+"/diagrams/":i,s=t.css,o=s===void 0?"https://unpkg.com/chevrotain@"+A3.VERSION+"/diagrams/diagrams.css":s,a=` + + + + + +`,l=` + +`,c=` + ``` @@ -91,7 +91,7 @@ window.initialize( ) ``` -If you need to inline multiple JS or CSS files, you can concatenate them for now, and separate contents of each file with an `\n` symbol. _This can be a point of improvement (add support for file lists)_. +If you need to inline multiple JS or CSS files, you can concatenate them for now, and separate contents of each file with an `\n` symbol. *This can be a point of improvement (add support for file lists)*. ## Fancy mode @@ -134,7 +134,7 @@ You can think of it in these terms: Of course we're not working with functions here, but hopefully this analogy makes the concept easier to understand. -Finally, message can contain custom properties, and how you use them is _completely up to you_. They have an important limitation - all additional properties are string-typed, and require you to use a slightly more verbose API for sending them (more about it in the next section). +Finally, message can contain custom properties, and how you use them is *completely up to you*. They have an important limitation - all additional properties are string-typed, and require you to use a slightly more verbose API for sending them (more about it in the next section). ```js Byond.sendMessage({ @@ -195,7 +195,7 @@ To receive it in DM, you must register a delegate proc (callback) that will rece ```dm /datum/my_object/proc/initialize() // ... - window.subscribe(src, .proc/on_message) + window.subscribe(src, PROC_REF(on_message)) /datum/my_object/proc/on_message(type, payload) if (type == "click") @@ -209,8 +209,8 @@ You can send messages with custom fields in case if you want to bypass JSON seri ```js Byond.sendMessage({ - type: 'something', - ref: '[0x12345678]', + type: "something", + ref: "[0x12345678]", }); ``` diff --git a/tgui/docs/tutorial-and-examples.md b/tgui/docs/tutorial-and-examples.md index ffd309acaab3..2e02f0e491ac 100644 --- a/tgui/docs/tutorial-and-examples.md +++ b/tgui/docs/tutorial-and-examples.md @@ -13,15 +13,15 @@ ui_state() - `src_object` - The atom, which UI corresponds to in the game world. - `ui_interact` - The proc where you will handle a request to open an - interface. Typically, you would update an existing UI (if it exists), - or set up a new instance of UI by calling the `SStgui` subsystem. +interface. Typically, you would update an existing UI (if it exists), +or set up a new instance of UI by calling the `SStgui` subsystem. - `ui_data` - In this proc you munges whatever complex data your `src_object` - has into an associative list, which will then be sent to UI as a JSON string. +has into an associative list, which will then be sent to UI as a JSON string. - `ui_act` - This proc receives user actions and reacts to them by changing - the state of the game. +the state of the game. - `ui_state` - This proc dictates under what conditions a UI may be interacted - with. This may be the standard checks that check if you are in range and - conscious, or more. +with. This may be the standard checks that check if you are in range and +conscious, or more. Once backend is complete, you create an new interface component on the frontend, which will receive this JSON data and render it on screen. @@ -130,19 +130,25 @@ import { Window } from '../layouts'; export const SampleInterface = (props, context) => { const { act, data } = useBackend(context); // Extract `health` and `color` variables from the `data` object. - const { health, color } = data; + const { + health, + color, + } = data; return (
- {health} - {color} + + {health} + + + {color} +
@@ -155,22 +161,22 @@ export const SampleInterface = (props, context) => { Here are the key variables you get from a `useBackend(context)` function: - `config` is part of core tgui. It contains meta-information about the - interface and who uses it, BYOND refs to various objects, and so forth. - You are rarely going to use it, but sometimes it can be used to your - advantage when doing complex UIs. +interface and who uses it, BYOND refs to various objects, and so forth. +You are rarely going to use it, but sometimes it can be used to your +advantage when doing complex UIs. - `data` is the data returned from `ui_data` and `ui_static_data` procs in - your DM code. Pretty straight forward. +your DM code. Pretty straight forward. - Note, that javascript doesn't have associative arrays, so when you - return an associative list from DM, it will be available in `data` as a - javascript object instead of an array. You can use it normally - like so: `object.key`, so it's not a problem if it's representing a - data structure, but common `Array` methods, such as `array.map(item => ...)`, - are not available on it. Always prefer returning clean arrays from your - code, since arrays are easier to work with in javascript! + return an associative list from DM, it will be available in `data` as a + javascript object instead of an array. You can use it normally + like so: `object.key`, so it's not a problem if it's representing a + data structure, but common `Array` methods, such as `array.map(item => ...)`, + are not available on it. Always prefer returning clean arrays from your + code, since arrays are easier to work with in javascript! - `act(name, params)` is a function, which you can call to dispatch an action - to your DM code. It will be processed in `ui_act` proc. Action name will be - available in `params["action"]`, mixed together with the rest of parameters - you have passed in `params` object. +to your DM code. It will be processed in `ui_act` proc. Action name will be +available in `params["action"]`, mixed together with the rest of parameters +you have passed in `params` object. **Let's talk about the syntax.** @@ -181,19 +187,17 @@ expressions that look like html, and turns them into function calls. Take a look at this example: ```jsx -
You are in {status} condition!
+
+ You are in {status} condition! +
``` After compiling the code above, this is what it becomes: ```js -createElement( - 'div', +createElement('div', { className: 'color-' + status }, - 'You are in ', - status, - ' condition!' -); + 'You are in ', status, ' condition!'); ``` It is very important to remember, that JSX is just a javascript expression @@ -214,7 +218,11 @@ to a `` element. If `showProgress` is `false`, the whole expression evaluates to `false`, and `false` is not rendered by React. ```jsx -{showProgress && } + + {showProgress && ( + + )} + ``` You can also use the `||` operator (the logical OR), which works the same way, @@ -227,8 +235,10 @@ and builds a new array based on what was returned by that function. ```jsx - {items.map((item) => ( - + {items.map(item => ( + {item.content} ))} @@ -261,13 +271,22 @@ export const SampleInterface = (props, context) => { const HealthStatus = (props, context) => { const { act, data } = useBackend(context); - const { user } = props; - const { health, color } = data; + const { + user, + } = props; + const { + health, + color, + } = data; return ( -
+
- {health} - {color} + + {health} + + + {color} +
); @@ -314,19 +333,25 @@ import { Window } from '../layouts'; export const SampleInterface = (props, context) => { const { act, data } = useBackend(context); // Extract `health` and `color` variables from the `data` object. - const { health, color } = data; + const { + health, + color, + } = data; return (
- {health} - {color} + + {health} + + + {color} +
diff --git a/tgui/global.d.ts b/tgui/global.d.ts index c2e7b5ad00bc..542788717ab6 100644 --- a/tgui/global.d.ts +++ b/tgui/global.d.ts @@ -198,4 +198,6 @@ const Byond: ByondType; interface Window { Byond: ByondType; + __store__: Store; + __augmentStack__: (store: Store) => StackAugmentor; } diff --git a/tgui/package.json b/tgui/package.json index cb15f88c78ad..2c5059e3626c 100644 --- a/tgui/package.json +++ b/tgui/package.json @@ -1,15 +1,15 @@ { "private": true, "name": "tgui-workspace", - "version": "4.3.0", - "packageManager": "yarn@3.4.1", + "version": "4.3.1", + "packageManager": "yarn@3.3.1", "workspaces": [ "packages/*" ], "scripts": { "tgui:analyze": "webpack --analyze", "tgui:bench": "webpack --env TGUI_BENCH=1 && node packages/tgui-bench/index.js", - "tgui:build": "webpack", + "tgui:build": "BROWSERSLIST_IGNORE_OLD_DATA=true webpack", "tgui:dev": "node --experimental-modules packages/tgui-dev-server/index.js", "tgui:lint": "eslint packages --ext .js,.cjs,.ts,.tsx", "tgui:prettier": "prettier --check .", @@ -20,44 +20,44 @@ "tgui:tsc": "tsc" }, "dependencies": { - "@babel/core": "^7.21.0", - "@babel/eslint-parser": "^7.19.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-transform-jscript": "^7.20.2", - "@babel/preset-env": "^7.20.2", - "@babel/preset-typescript": "^7.21.0", - "@types/jest": "^27.5.2", - "@types/jsdom": "^16.2.15", - "@types/node": "^14.18.37", + "@babel/core": "^7.15.0", + "@babel/eslint-parser": "^7.15.0", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@babel/plugin-transform-jscript": "^7.14.5", + "@babel/preset-env": "^7.15.0", + "@babel/preset-typescript": "^7.15.0", + "@types/jest": "^29.2.4", + "@types/jsdom": "^20.0.1", + "@types/node": "14.x", "@types/webpack": "^5.28.0", "@types/webpack-env": "^1.18.0", - "@typescript-eslint/parser": "^4.33.0", - "babel-jest": "^27.5.1", - "babel-loader": "^8.3.0", - "babel-plugin-inferno": "^6.6.0", + "@typescript-eslint/parser": "^5.47.1", + "babel-jest": "^27.0.6", + "babel-loader": "^8.2.2", + "babel-plugin-inferno": "^6.3.0", "babel-plugin-transform-remove-console": "^6.9.4", "common": "workspace:*", "css-loader": "^5.2.7", "eslint": "^7.32.0", - "eslint-config-prettier": "^8.7.0", + "eslint-config-prettier": "^8.5.0", "eslint-plugin-radar": "^0.2.1", - "eslint-plugin-react": "^7.32.2", - "eslint-plugin-unused-imports": "^1.1.5", + "eslint-plugin-react": "^7.24.0", + "eslint-plugin-unused-imports": "^1.1.4", "file-loader": "^6.2.0", - "inferno": "^7.4.11", - "jest": "^27.5.1", - "jest-circus": "^27.5.1", + "inferno": "^7.4.8", + "jest": "^27.0.6", + "jest-circus": "^27.0.6", "jsdom": "^16.7.0", "mini-css-extract-plugin": "^1.6.2", - "prettier": "^2.8.4", - "sass": "^1.58.3", + "prettier": "2.8.4", + "sass": "^1.37.5", "sass-loader": "^11.1.1", "style-loader": "^2.0.0", - "terser-webpack-plugin": "^5.3.7", - "typescript": "^4.9.5", + "terser-webpack-plugin": "^5.1.4", + "typescript": "^4.9.4", "url-loader": "^4.1.1", - "webpack": "^5.76.0", - "webpack-bundle-analyzer": "^4.8.0", - "webpack-cli": "^4.10.0" + "webpack": "^5.75.0", + "webpack-bundle-analyzer": "^4.4.2", + "webpack-cli": "^4.7.2" } } diff --git a/tgui/packages/common/collections.ts b/tgui/packages/common/collections.ts index 49f500ebd29a..a005da7aa165 100644 --- a/tgui/packages/common/collections.ts +++ b/tgui/packages/common/collections.ts @@ -300,3 +300,48 @@ export const binaryInsertWith = copy.splice(binarySearch(getKey, collection, value), 0, value); return copy; }; + +/** + * This method takes a collection of items and a number, returning a collection + * of collections, where the maximum amount of items in each is that second arg + */ +export const paginate = (collection: T[], maxPerPage: number): T[][] => { + const pages: T[][] = []; + let page: T[] = []; + let itemsToAdd = maxPerPage; + + for (const item of collection) { + page.push(item); + itemsToAdd--; + if (!itemsToAdd) { + itemsToAdd = maxPerPage; + pages.push(page); + page = []; + } + } + if (page.length) { + pages.push(page); + } + return pages; +}; + +const isObject = (obj: unknown) => typeof obj === 'object' && obj !== null; + +// Does a deep merge of two objects. DO NOT FEED CIRCULAR OBJECTS!! +export const deepMerge = (...objects: any[]): any => { + const target = {}; + for (const object of objects) { + for (const key of Object.keys(object)) { + const targetValue = target[key]; + const objectValue = object[key]; + if (Array.isArray(targetValue) && Array.isArray(objectValue)) { + target[key] = [...targetValue, ...objectValue]; + } else if (isObject(targetValue) && isObject(objectValue)) { + target[key] = deepMerge(targetValue, objectValue); + } else { + target[key] = objectValue; + } + } + } + return target; +}; diff --git a/tgui/packages/common/color.js b/tgui/packages/common/color.js index 672fce529b61..b59d82247aae 100644 --- a/tgui/packages/common/color.js +++ b/tgui/packages/common/color.js @@ -22,6 +22,23 @@ export class Color { } return `rgba(${this.r | 0}, ${this.g | 0}, ${this.b | 0}, ${alpha})`; } + + // Darkens a color by a given percent. Returns a color, which can have toString called to get it's rgba() css value. + darken(percent) { + percent /= 100; + return new Color( + this.r - this.r * percent, + this.g - this.g * percent, + this.b - this.b * percent, + this.a + ); + } + + // Brightens a color by a given percent. Returns a color, which can have toString called to get it's rgba() css value. + lighten(percent) { + // No point in rewriting code we already have. + return this.darken(-percent); + } } /** diff --git a/tgui/packages/common/keys.ts b/tgui/packages/common/keys.ts new file mode 100644 index 000000000000..61b79992b486 --- /dev/null +++ b/tgui/packages/common/keys.ts @@ -0,0 +1,39 @@ +/** + * ### Key codes. + * event.keyCode is deprecated, use this reference instead. + * + * Handles modifier keys (Shift, Alt, Control) and arrow keys. + * + * For alphabetical keys, use the actual character (e.g. 'a') instead of the key code. + * + * Something isn't here that you want? Just add it: + * @url https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values + * @usage + * ```ts + * import { KEY } from 'tgui/common/keys'; + * + * if (event.key === KEY.Enter) { + * // do something + * } + * ``` + */ +export enum KEY { + Alt = 'Alt', + Backspace = 'Backspace', + Control = 'Control', + Delete = 'Delete', + Down = 'Down', + End = 'End', + Enter = 'Enter', + Escape = 'Esc', + Home = 'Home', + Insert = 'Insert', + Left = 'Left', + PageDown = 'PageDown', + PageUp = 'PageUp', + Right = 'Right', + Shift = 'Shift', + Space = ' ', + Tab = 'Tab', + Up = 'Up', +} diff --git a/tgui/packages/common/package.json b/tgui/packages/common/package.json index 54d73251a65a..bbf99bf1cadc 100644 --- a/tgui/packages/common/package.json +++ b/tgui/packages/common/package.json @@ -1,5 +1,5 @@ { "private": true, "name": "common", - "version": "4.3.0" + "version": "4.3.1" } diff --git a/tgui/packages/common/redux.js b/tgui/packages/common/redux.js deleted file mode 100644 index 3997134cd742..000000000000 --- a/tgui/packages/common/redux.js +++ /dev/null @@ -1,151 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { compose } from './fp'; - -/** - * Creates a Redux store. - */ -export const createStore = (reducer, enhancer) => { - // Apply a store enhancer (applyMiddleware is one of them). - if (enhancer) { - return enhancer(createStore)(reducer); - } - - let currentState; - let listeners = []; - - const getState = () => currentState; - - const subscribe = (listener) => { - listeners.push(listener); - }; - - const dispatch = (action) => { - currentState = reducer(currentState, action); - for (let i = 0; i < listeners.length; i++) { - listeners[i](); - } - }; - - // This creates the initial store by causing each reducer to be called - // with an undefined state - dispatch({ - type: '@@INIT', - }); - - return { - dispatch, - subscribe, - getState, - }; -}; - -/** - * Creates a store enhancer which applies middleware to all dispatched - * actions. - */ -export const applyMiddleware = (...middlewares) => { - // prettier-ignore - return createStore => (reducer, ...args) => { - const store = createStore(reducer, ...args); - - let dispatch = () => { - throw new Error( - 'Dispatching while constructing your middleware is not allowed.'); - }; - - const storeApi = { - getState: store.getState, - dispatch: (action, ...args) => dispatch(action, ...args), - }; - - const chain = middlewares.map(middleware => middleware(storeApi)); - dispatch = compose(...chain)(store.dispatch); - - return { - ...store, - dispatch, - }; - }; -}; - -/** - * Combines reducers by running them in their own object namespaces as - * defined in reducersObj paramter. - * - * Main difference from redux/combineReducers is that it preserves keys - * in the state that are not present in the reducers object. This function - * is also more flexible than the redux counterpart. - */ -export const combineReducers = (reducersObj) => { - const keys = Object.keys(reducersObj); - let hasChanged = false; - return (prevState = {}, action) => { - const nextState = { ...prevState }; - for (let key of keys) { - const reducer = reducersObj[key]; - const prevDomainState = prevState[key]; - const nextDomainState = reducer(prevDomainState, action); - if (prevDomainState !== nextDomainState) { - hasChanged = true; - nextState[key] = nextDomainState; - } - } - return hasChanged ? nextState : prevState; - }; -}; - -/** - * A utility function to create an action creator for the given action - * type string. The action creator accepts a single argument, which will - * be included in the action object as a field called payload. The action - * creator function will also have its toString() overriden so that it - * returns the action type, allowing it to be used in reducer logic that - * is looking for that action type. - * - * @param {string} type The action type to use for created actions. - * @param {any} prepare (optional) a method that takes any number of arguments - * and returns { payload } or { payload, meta }. If this is given, the - * resulting action creator will pass it's arguments to this method to - * calculate payload & meta. - * - * @public - */ -export const createAction = (type, prepare = null) => { - const actionCreator = (...args) => { - if (!prepare) { - return { type, payload: args[0] }; - } - const prepared = prepare(...args); - if (!prepared) { - throw new Error('prepare function did not return an object'); - } - const action = { type }; - if ('payload' in prepared) { - action.payload = prepared.payload; - } - if ('meta' in prepared) { - action.meta = prepared.meta; - } - return action; - }; - actionCreator.toString = () => '' + type; - actionCreator.type = type; - actionCreator.match = (action) => action.type === type; - return actionCreator; -}; - -// Implementation specific -// -------------------------------------------------------- - -export const useDispatch = (context) => { - return context.store.dispatch; -}; - -export const useSelector = (context, selector) => { - return selector(context.store.getState()); -}; diff --git a/tgui/packages/common/redux.test.ts b/tgui/packages/common/redux.test.ts new file mode 100644 index 000000000000..bf31cc97502a --- /dev/null +++ b/tgui/packages/common/redux.test.ts @@ -0,0 +1,68 @@ +import { + Action, + Reducer, + applyMiddleware, + combineReducers, + createAction, + createStore, +} from './redux'; + +// Dummy Reducer +const counterReducer: Reducer> = (state = 0, action) => { + switch (action.type) { + case 'INCREMENT': + return state + 1; + case 'DECREMENT': + return state - 1; + default: + return state; + } +}; + +// Dummy Middleware +const loggingMiddleware = (storeApi) => (next) => (action) => { + console.log('Middleware:', action); + return next(action); +}; + +// Dummy Action Creators +const increment = createAction('INCREMENT'); +const decrement = createAction('DECREMENT'); + +describe('Redux implementation tests', () => { + test('createStore works', () => { + const store = createStore(counterReducer); + expect(store.getState()).toBe(0); + }); + + test('createStore with applyMiddleware works', () => { + const store = createStore( + counterReducer, + applyMiddleware(loggingMiddleware) + ); + expect(store.getState()).toBe(0); + }); + + test('dispatch works', () => { + const store = createStore(counterReducer); + store.dispatch(increment()); + expect(store.getState()).toBe(1); + store.dispatch(decrement()); + expect(store.getState()).toBe(0); + }); + + test('combineReducers works', () => { + const rootReducer = combineReducers({ + counter: counterReducer, + }); + const store = createStore(rootReducer); + expect(store.getState()).toEqual({ counter: 0 }); + }); + + test('createAction works', () => { + const incrementAction = increment(); + expect(incrementAction).toEqual({ type: 'INCREMENT' }); + const decrementAction = decrement(); + expect(decrementAction).toEqual({ type: 'DECREMENT' }); + }); +}); diff --git a/tgui/packages/common/redux.ts b/tgui/packages/common/redux.ts new file mode 100644 index 000000000000..4e618bddafd0 --- /dev/null +++ b/tgui/packages/common/redux.ts @@ -0,0 +1,212 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +export type Reducer = ( + state: State | undefined, + action: ActionType +) => State; + +export type Store = { + dispatch: Dispatch; + subscribe: (listener: () => void) => void; + getState: () => State; +}; + +type MiddlewareAPI = { + getState: () => State; + dispatch: Dispatch; +}; + +export type Middleware = ( + storeApi: MiddlewareAPI +) => (next: Dispatch) => Dispatch; + +export type Action = { + type: TType; +}; + +export type AnyAction = Action & { + [extraProps: string]: any; +}; + +export type Dispatch = ( + action: ActionType +) => void; + +type StoreEnhancer = (createStoreFunction: Function) => Function; + +type PreparedAction = { + payload?: any; + meta?: any; +}; + +/** + * Creates a Redux store. + */ +export const createStore = ( + reducer: Reducer, + enhancer?: StoreEnhancer +): Store => { + // Apply a store enhancer (applyMiddleware is one of them). + if (enhancer) { + return enhancer(createStore)(reducer); + } + + let currentState: State; + let listeners: Array<() => void> = []; + + const getState = (): State => currentState; + + const subscribe = (listener: () => void): void => { + listeners.push(listener); + }; + + const dispatch = (action: ActionType): void => { + currentState = reducer(currentState, action); + for (let i = 0; i < listeners.length; i++) { + listeners[i](); + } + }; + + // This creates the initial store by causing each reducer to be called + // with an undefined state + dispatch({ type: '@@INIT' } as ActionType); + + return { + dispatch, + subscribe, + getState, + }; +}; + +/** + * Creates a store enhancer which applies middleware to all dispatched + * actions. + */ +export const applyMiddleware = ( + ...middlewares: Middleware[] +): StoreEnhancer => { + return ( + createStoreFunction: (reducer: Reducer, enhancer?: StoreEnhancer) => Store + ) => { + return (reducer, ...args): Store => { + const store = createStoreFunction(reducer, ...args); + + let dispatch: Dispatch = () => { + throw new Error( + 'Dispatching while constructing your middleware is not allowed.' + ); + }; + + const storeApi: MiddlewareAPI = { + getState: store.getState, + dispatch: (action, ...args) => dispatch(action, ...args), + }; + + const chain = middlewares.map((middleware) => middleware(storeApi)); + dispatch = chain.reduceRight( + (next, middleware) => middleware(next), + store.dispatch + ); + + return { + ...store, + dispatch, + }; + }; + }; +}; + +/** + * Combines reducers by running them in their own object namespaces as + * defined in reducersObj paramter. + * + * Main difference from redux/combineReducers is that it preserves keys + * in the state that are not present in the reducers object. This function + * is also more flexible than the redux counterpart. + */ +export const combineReducers = ( + reducersObj: Record +): Reducer => { + const keys = Object.keys(reducersObj); + + return (prevState = {}, action) => { + const nextState = { ...prevState }; + let hasChanged = false; + + for (const key of keys) { + const reducer = reducersObj[key]; + const prevDomainState = prevState[key]; + const nextDomainState = reducer(prevDomainState, action); + + if (prevDomainState !== nextDomainState) { + hasChanged = true; + nextState[key] = nextDomainState; + } + } + + return hasChanged ? nextState : prevState; + }; +}; + +/** + * A utility function to create an action creator for the given action + * type string. The action creator accepts a single argument, which will + * be included in the action object as a field called payload. The action + * creator function will also have its toString() overriden so that it + * returns the action type, allowing it to be used in reducer logic that + * is looking for that action type. + * + * @param {string} type The action type to use for created actions. + * @param {any} prepare (optional) a method that takes any number of arguments + * and returns { payload } or { payload, meta }. If this is given, the + * resulting action creator will pass it's arguments to this method to + * calculate payload & meta. + * + * @public + */ +export const createAction = ( + type: TAction, + prepare?: (...args: any[]) => PreparedAction +) => { + const actionCreator = (...args: any[]) => { + let action: Action & PreparedAction = { type }; + + if (prepare) { + const prepared = prepare(...args); + if (!prepared) { + throw new Error('prepare function did not return an object'); + } + action = { ...action, ...prepared }; + } else { + action.payload = args[0]; + } + + return action; + }; + + actionCreator.toString = () => type; + actionCreator.type = type; + actionCreator.match = (action) => action.type === type; + + return actionCreator; +}; + +// Implementation specific +// -------------------------------------------------------- + +export const useDispatch = (context: { + store: Store; +}): Dispatch => { + return context.store.dispatch; +}; + +export const useSelector = ( + context: { store: Store }, + selector: (state: State) => Selected +): Selected => { + return selector(context.store.getState()); +}; diff --git a/tgui/packages/common/timer.js b/tgui/packages/common/timer.ts similarity index 59% rename from tgui/packages/common/timer.js rename to tgui/packages/common/timer.ts index 7d89e935b9b5..49d36484200b 100644 --- a/tgui/packages/common/timer.js +++ b/tgui/packages/common/timer.ts @@ -10,9 +10,13 @@ * called for N milliseconds. If `immediate` is passed, trigger the * function on the leading edge, instead of the trailing. */ -export const debounce = (fn, time, immediate = false) => { - let timeout; - return (...args) => { +export const debounce = any>( + fn: F, + time: number, + immediate = false +): ((...args: Parameters) => void) => { + let timeout: ReturnType | null; + return (...args: Parameters) => { const later = () => { timeout = null; if (!immediate) { @@ -20,7 +24,7 @@ export const debounce = (fn, time, immediate = false) => { } }; const callNow = immediate && !timeout; - clearTimeout(timeout); + clearTimeout(timeout!); timeout = setTimeout(later, time); if (callNow) { fn(...args); @@ -32,18 +36,24 @@ export const debounce = (fn, time, immediate = false) => { * Returns a function, that, when invoked, will only be triggered at most once * during a given window of time. */ -export const throttle = (fn, time) => { - let previouslyRun, queuedToRun; - return function invokeFn(...args) { +export const throttle = any>( + fn: F, + time: number +): ((...args: Parameters) => void) => { + let previouslyRun: number | null, + queuedToRun: ReturnType | null; + return function invokeFn(...args: Parameters) { const now = Date.now(); - queuedToRun = clearTimeout(queuedToRun); + if (queuedToRun) { + clearTimeout(queuedToRun); + } if (!previouslyRun || now - previouslyRun >= time) { fn.apply(null, args); previouslyRun = now; } else { queuedToRun = setTimeout( - invokeFn.bind(null, ...args), - time - (now - previouslyRun) + () => invokeFn(...args), + time - (now - (previouslyRun ?? 0)) ); } }; @@ -54,5 +64,5 @@ export const throttle = (fn, time) => { * * @param {number} time */ -export const sleep = (time) => +export const sleep = (time: number): Promise => new Promise((resolve) => setTimeout(resolve, time)); diff --git a/tgui/packages/tgfont/README_ICON_TUTORIAL.txt b/tgui/packages/tgfont/README_ICON_TUTORIAL.txt new file mode 100644 index 000000000000..70b52e5a1836 --- /dev/null +++ b/tgui/packages/tgfont/README_ICON_TUTORIAL.txt @@ -0,0 +1,13 @@ +The following is the process to implement your own icon using an svg. + +If you plan on making your own SVG, consider [Inkscape](https://inkscape.org/). It is free and pretty powerful for vector graphics. + +1. Get whatever SVG you plan on using and put it in the `tgstation\tgui\packages\tgfont\icons` folder. + +2. In VS Code, press Ctrl+Shift+B, and select "tgui: rebuild tgfont". Wait for it to comlpete. + +Now your SVG will be able to be used in the game. + +When you reference your icon that you prefix it with "tg-", otherwise it will not find it. For example, with an SVG named "prosthetic-leg.svg", you would reference it with `icon_state = "tg-prosthetic-leg"`. + +Keep your SVG as simple as possible, the engine has trouble rendering SVGs that have a lot of little disconnected parts. diff --git a/tgui/packages/tgfont/config.cjs b/tgui/packages/tgfont/config.cjs index 4f6b58f1061e..73d96ac6ce90 100644 --- a/tgui/packages/tgfont/config.cjs +++ b/tgui/packages/tgfont/config.cjs @@ -7,8 +7,12 @@ module.exports = { name: 'tgfont', inputDir: './icons', + normalize: true, outputDir: './dist', fontTypes: ['woff2', 'eot'], assetTypes: ['css'], prefix: 'tg', + formatOptions: { + preserveAspectRatio: true, + }, }; diff --git a/tgui/packages/tgfont/icons/ATTRIBUTIONS.md b/tgui/packages/tgfont/icons/ATTRIBUTIONS.md index 0491b90e726e..2f218388d364 100644 --- a/tgui/packages/tgfont/icons/ATTRIBUTIONS.md +++ b/tgui/packages/tgfont/icons/ATTRIBUTIONS.md @@ -1,8 +1,6 @@ bad-touch.svg contains: - - hug by Phạm Thanh Lộc from the Noun Project - Fight by Rudez Studio from the Noun Project prosthetic-leg.svg contains: - - prosthetic leg by Gan Khoon Lay from the Noun Project diff --git a/tgui/packages/tgfont/icons/bad-touch.svg b/tgui/packages/tgfont/icons/bad-touch.svg index 6dc3c9a718a7..795f4c2d840a 100644 --- a/tgui/packages/tgfont/icons/bad-touch.svg +++ b/tgui/packages/tgfont/icons/bad-touch.svg @@ -1,23 +1,46 @@ - - - - - - - + +image/svg+xml + + + + - - - + + + diff --git a/tgui/packages/tgfont/icons/non-binary.svg b/tgui/packages/tgfont/icons/non-binary.svg index 9aaec674bbbc..c708c26d9855 100644 --- a/tgui/packages/tgfont/icons/non-binary.svg +++ b/tgui/packages/tgfont/icons/non-binary.svg @@ -1,17 +1,44 @@ - - - - + +image/svg+xml + - - - - - - + + + + + + diff --git a/tgui/packages/tgfont/icons/prosthetic-full.svg b/tgui/packages/tgfont/icons/prosthetic-full.svg new file mode 100644 index 000000000000..7d221244edcc --- /dev/null +++ b/tgui/packages/tgfont/icons/prosthetic-full.svg @@ -0,0 +1,27 @@ + +image/svg+xml + + diff --git a/tgui/packages/tgfont/icons/prosthetic-leg.svg b/tgui/packages/tgfont/icons/prosthetic-leg.svg index c1f6ceee3fc3..f4e16dccfb65 100644 --- a/tgui/packages/tgfont/icons/prosthetic-leg.svg +++ b/tgui/packages/tgfont/icons/prosthetic-leg.svg @@ -1,22 +1,35 @@ - - - - - - - + +image/svg+xml + + + + diff --git a/tgui/packages/tgfont/icons/syndicate-logo.svg b/tgui/packages/tgfont/icons/syndicate-logo.svg index eda92f9b3082..423dd7c62754 100644 --- a/tgui/packages/tgfont/icons/syndicate-logo.svg +++ b/tgui/packages/tgfont/icons/syndicate-logo.svg @@ -1,3 +1,13 @@ - - - + + + + + + image/svg+xml + + + + + + + diff --git a/tgui/packages/tgfont/package.json b/tgui/packages/tgfont/package.json index 56bb38bf68e8..9459aa129696 100644 --- a/tgui/packages/tgfont/package.json +++ b/tgui/packages/tgfont/package.json @@ -6,6 +6,6 @@ "tgfont:build": "node mkdist.cjs && fantasticon --config config.cjs" }, "dependencies": { - "fantasticon": "^1.2.3" + "fantasticon": "^1.2.2" } } diff --git a/tgui/packages/tgfont/static/tgfont.css b/tgui/packages/tgfont/static/tgfont.css index 6db47f9dece8..cf9427fc0df0 100644 --- a/tgui/packages/tgfont/static/tgfont.css +++ b/tgui/packages/tgfont/static/tgfont.css @@ -1,52 +1,53 @@ @font-face { - font-family: 'tgfont'; - src: url('./tgfont.woff2?45c3c7acc69dd413375d77898d24e41e') format('woff2'), - url('./tgfont.eot?45c3c7acc69dd413375d77898d24e41e#iefix') - format('embedded-opentype'); + font-family: "tgfont"; + src: url("./tgfont.woff2?ac4105718bed41e8015b97ba87c9ec71") format("woff2"), +url("./tgfont.eot?ac4105718bed41e8015b97ba87c9ec71#iefix") format("embedded-opentype"); } -i[class^='tg-']:before, -i[class*=' tg-']:before { - font-family: tgfont !important; - font-style: normal; - font-weight: normal !important; - font-variant: normal; - text-transform: none; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; +i[class^="tg-"]:before, i[class*=" tg-"]:before { + font-family: tgfont !important; + font-style: normal; + font-weight: normal !important; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } .tg-air-tank-slash:before { - content: '\f101'; + content: "\f101"; } .tg-air-tank:before { - content: '\f102'; + content: "\f102"; } .tg-bad-touch:before { - content: '\f103'; + content: "\f103"; } .tg-image-minus:before { - content: '\f104'; + content: "\f104"; } .tg-image-plus:before { - content: '\f105'; + content: "\f105"; } .tg-nanotrasen-logo:before { - content: '\f106'; + content: "\f106"; } .tg-non-binary:before { - content: '\f107'; + content: "\f107"; +} +.tg-prosthetic-full:before { + content: "\f108"; } .tg-prosthetic-leg:before { - content: '\f108'; + content: "\f109"; } .tg-sound-minus:before { - content: '\f109'; + content: "\f10a"; } .tg-sound-plus:before { - content: '\f10a'; + content: "\f10b"; } .tg-syndicate-logo:before { - content: '\f10b'; + content: "\f10c"; } diff --git a/tgui/packages/tgfont/static/tgfont.eot b/tgui/packages/tgfont/static/tgfont.eot index 09e774836e30..9b08d3483916 100644 Binary files a/tgui/packages/tgfont/static/tgfont.eot and b/tgui/packages/tgfont/static/tgfont.eot differ diff --git a/tgui/packages/tgfont/static/tgfont.woff2 b/tgui/packages/tgfont/static/tgfont.woff2 index 0590bf6c44fb..d443fb92c913 100644 Binary files a/tgui/packages/tgfont/static/tgfont.woff2 and b/tgui/packages/tgfont/static/tgfont.woff2 differ diff --git a/tgui/packages/tgui-bench/package.json b/tgui/packages/tgui-bench/package.json index 34547333d0b5..49bc0c423c28 100644 --- a/tgui/packages/tgui-bench/package.json +++ b/tgui/packages/tgui-bench/package.json @@ -1,13 +1,13 @@ { "private": true, "name": "tgui-bench", - "version": "4.3.0", + "version": "4.3.1", "dependencies": { "common": "workspace:*", - "fastify": "^3.29.5", - "fastify-static": "^4.7.0", - "inferno": "^7.4.11", - "inferno-vnode-flags": "^7.4.11", + "fastify": "^3.29.4", + "fastify-static": "^4.2.3", + "inferno": "^7.4.8", + "inferno-vnode-flags": "^7.4.8", "lodash": "^4.17.21", "platform": "^1.3.6", "tgui": "workspace:*" diff --git a/tgui/packages/tgui-bench/tests/DisposalUnit.test.tsx b/tgui/packages/tgui-bench/tests/DisposalUnit.test.tsx index 843bd70367a5..1ae610e2e2e1 100644 --- a/tgui/packages/tgui-bench/tests/DisposalUnit.test.tsx +++ b/tgui/packages/tgui-bench/tests/DisposalUnit.test.tsx @@ -1,9 +1,10 @@ -import { backendUpdate } from 'tgui/backend'; +import { StoreProvider, configureStore } from 'tgui/store'; + import { DisposalUnit } from 'tgui/interfaces/DisposalUnit'; +import { backendUpdate } from 'tgui/backend'; import { createRenderer } from 'tgui/renderer'; -import { configureStore, StoreProvider } from 'tgui/store'; -const store = configureStore({ sideEffets: false }); +const store = configureStore({ sideEffects: false }); const renderUi = createRenderer((dataJson: string) => { store.dispatch( diff --git a/tgui/packages/tgui-dev-server/dreamseeker.js b/tgui/packages/tgui-dev-server/dreamseeker.js index eb90b1dc3cfb..2b25b155ae0c 100644 --- a/tgui/packages/tgui-dev-server/dreamseeker.js +++ b/tgui/packages/tgui-dev-server/dreamseeker.js @@ -29,6 +29,9 @@ export class DreamSeeker { .map(key => encodeURIComponent(key) + '=' + encodeURIComponent(params[key])) .join('&'); + logger.log( + `topic call at ${this.client.defaults.baseURL + '/dummy?' + query}` + ); return this.client.get('/dummy?' + query); } } diff --git a/tgui/packages/tgui-dev-server/package.json b/tgui/packages/tgui-dev-server/package.json index f9a3480d7ca0..2477641c7e79 100644 --- a/tgui/packages/tgui-dev-server/package.json +++ b/tgui/packages/tgui-dev-server/package.json @@ -1,13 +1,13 @@ { "private": true, "name": "tgui-dev-server", - "version": "4.3.0", + "version": "4.3.1", "type": "module", "dependencies": { - "axios": "^0.21.4", - "glob": "^7.2.3", - "source-map": "^0.7.4", + "axios": "^0.21.1", + "glob": "^7.1.7", + "source-map": "^0.7.3", "stacktrace-parser": "^0.1.10", - "ws": "^7.5.9" + "ws": "^7.5.3" } } diff --git a/tgui/packages/tgui-dev-server/reloader.js b/tgui/packages/tgui-dev-server/reloader.js index 444d9e40cd59..c13a8afdfcfc 100644 --- a/tgui/packages/tgui-dev-server/reloader.js +++ b/tgui/packages/tgui-dev-server/reloader.js @@ -66,7 +66,7 @@ export const findCacheRoot = async () => { const onCacheRootFound = (cacheRoot) => { logger.log(`found cache at '${cacheRoot}'`); - // Plant a dummy + // Plant a dummy browser window file, we'll be using this to avoid world topic. For byond 514. fs.closeSync(fs.openSync(cacheRoot + '/dummy', 'w')); }; @@ -98,6 +98,9 @@ export const reloadByondCache = async (bundleDir) => { './*.+(bundle|chunk|hot-update).*' ); try { + // Plant a dummy browser window file, we'll be using this to avoid world topic. For byond 515. + fs.closeSync(fs.openSync(cacheDir + '/dummy', 'w')); + for (let file of garbage) { fs.unlinkSync(file); } diff --git a/tgui/packages/tgui-panel/audio/NowPlayingWidget.js b/tgui/packages/tgui-panel/audio/NowPlayingWidget.js index 6670fe0d5522..b3a972814dc1 100644 --- a/tgui/packages/tgui-panel/audio/NowPlayingWidget.js +++ b/tgui/packages/tgui-panel/audio/NowPlayingWidget.js @@ -6,34 +6,72 @@ import { toFixed } from 'common/math'; import { useDispatch, useSelector } from 'common/redux'; -import { Button, Flex, Knob } from 'tgui/components'; +import { Button, Collapsible, Flex, Knob, Section } from 'tgui/components'; import { useSettings } from '../settings'; import { selectAudio } from './selectors'; export const NowPlayingWidget = (props, context) => { - const audio = useSelector(context, selectAudio); - const dispatch = useDispatch(context); - const settings = useSettings(context); - const title = audio.meta?.title; + const audio = useSelector(context, selectAudio), + dispatch = useDispatch(context), + settings = useSettings(context), + title = audio.meta?.title, + URL = audio.meta?.link, + Artist = audio.meta?.artist || 'Unknown Artist', + upload_date = audio.meta?.upload_date || 'Unknown Date', + album = audio.meta?.album || 'Unknown Album', + duration = audio.meta?.duration, + date = !isNaN(upload_date) + ? upload_date?.substring(0, 4) + + '-' + + upload_date?.substring(4, 6) + + '-' + + upload_date?.substring(6, 8) + : upload_date; + return ( {(audio.playing && ( - <> - - Now playing: - - - {title || 'Unknown Track'} - - + + { + +
+ {URL !== 'Song Link Hidden' && ( + + URL: {URL} + + )} + + Duration: {duration} + + {Artist !== 'Song Artist Hidden' && + Artist !== 'Unknown Artist' && ( + + Artist: {Artist} + + )} + {album !== 'Song Album Hidden' && album !== 'Unknown Album' && ( + + Album: {album} + + )} + {upload_date !== 'Song Upload Date Hidden' && + upload_date !== 'Unknown Date' && ( + + Uploaded: {date} + + )} +
+
+ } +
)) || ( Nothing to play. diff --git a/tgui/packages/tgui-panel/chat/constants.js b/tgui/packages/tgui-panel/chat/constants.js index 0c0106449fc0..8b03835936fd 100644 --- a/tgui/packages/tgui-panel/chat/constants.js +++ b/tgui/packages/tgui-panel/chat/constants.js @@ -32,6 +32,7 @@ export const MESSAGE_TYPE_ADMINPM = 'adminpm'; export const MESSAGE_TYPE_COMBAT = 'combat'; export const MESSAGE_TYPE_ADMINCHAT = 'adminchat'; export const MESSAGE_TYPE_MODCHAT = 'modchat'; +export const MESSAGE_TYPE_PRAYER = 'prayer'; export const MESSAGE_TYPE_EVENTCHAT = 'eventchat'; export const MESSAGE_TYPE_ADMINLOG = 'adminlog'; export const MESSAGE_TYPE_ATTACKLOG = 'attacklog'; @@ -119,6 +120,12 @@ export const MESSAGE_TYPES = [ selector: '.mod_channel', admin: true, }, + { + type: MESSAGE_TYPE_PRAYER, + name: 'Prayers', + description: 'Prayers from players', + admin: true, + }, { type: MESSAGE_TYPE_ADMINLOG, name: 'Admin Log', diff --git a/tgui/packages/tgui-panel/chat/middleware.js b/tgui/packages/tgui-panel/chat/middleware.js index 24375b399942..d0ad08890eb9 100644 --- a/tgui/packages/tgui-panel/chat/middleware.js +++ b/tgui/packages/tgui-panel/chat/middleware.js @@ -6,7 +6,13 @@ import DOMPurify from 'dompurify'; import { storage } from 'common/storage'; -import { loadSettings, updateSettings } from '../settings/actions'; +import { + loadSettings, + updateSettings, + addHighlightSetting, + removeHighlightSetting, + updateHighlightSetting, +} from '../settings/actions'; import { selectSettings } from '../settings/selectors'; import { addChatPage, @@ -123,15 +129,21 @@ export const chatMiddleware = (store) => { chatRenderer.rebuildChat(); return next(action); } - if (type === updateSettings.type || type === loadSettings.type) { + + if ( + type === updateSettings.type || + type === loadSettings.type || + type === addHighlightSetting.type || + type === removeHighlightSetting.type || + type === updateHighlightSetting.type + ) { next(action); const settings = selectSettings(store.getState()); chatRenderer.setHighlight( - settings.highlightText, - settings.highlightColor, - settings.matchWord, - settings.matchCase + settings.highlightSettings, + settings.highlightSettingById ); + return; } if (type === 'roundrestart') { diff --git a/tgui/packages/tgui-panel/chat/renderer.js b/tgui/packages/tgui-panel/chat/renderer.js index 34908aa142cd..fbc84a7e314f 100644 --- a/tgui/packages/tgui-panel/chat/renderer.js +++ b/tgui/packages/tgui-panel/chat/renderer.js @@ -192,30 +192,79 @@ class ChatRenderer { } } - setHighlight(text, color, matchWord, matchCase) { - if (!text || !color) { - this.highlightRegex = null; - this.highlightColor = null; + setHighlight(highlightSettings, highlightSettingById) { + this.highlightParsers = null; + if (!highlightSettings) { return; } - const lines = String(text) - .split(',') - // eslint-disable-next-line no-useless-escape - .map((str) => str.trim().replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')) - // Must be longer than one character - .filter((str) => str && str.length > 1); - // Nothing to match, reset highlighting - if (lines.length === 0) { - this.highlightRegex = null; - this.highlightColor = null; - return; - } - const pattern = `${matchWord ? '\\b' : ''}(${lines.join('|')})${ - matchWord ? '\\b' : '' - }`; - const flags = 'g' + (matchCase ? '' : 'i'); - this.highlightRegex = new RegExp(pattern, flags); - this.highlightColor = color; + highlightSettings.map((id) => { + const setting = highlightSettingById[id]; + const text = setting.highlightText; + const highlightColor = setting.highlightColor; + const highlightWholeMessage = setting.highlightWholeMessage; + const matchWord = setting.matchWord; + const matchCase = setting.matchCase; + const allowedRegex = /^[a-z0-9_\-$/^[\s\]\\]+$/gi; + const lines = String(text) + .split(',') + .map((str) => str.trim()) + .filter( + (str) => + // Must be longer than one character + str && + str.length > 1 && + // Must be alphanumeric (with some punctuation) + allowedRegex.test(str) && + // Reset lastIndex so it does not mess up the next word + ((allowedRegex.lastIndex = 0) || true) + ); + let highlightWords; + let highlightRegex; + // Nothing to match, reset highlighting + if (lines.length === 0) { + return; + } + let regexExpressions = []; + // Organize each highlight entry into regex expressions and words + for (let line of lines) { + // Regex expression syntax is /[exp]/ + if (line.charAt(0) === '/' && line.charAt(line.length - 1) === '/') { + const expr = line.substring(1, line.length - 1); + // Check if this is more than one character + if (/^(\[.*\]|\\.|.)$/.test(expr)) { + continue; + } + regexExpressions.push(expr); + } else { + // Lazy init + if (!highlightWords) { + highlightWords = []; + } + highlightWords.push(line); + } + } + const regexStr = regexExpressions.join('|'); + const flags = 'g' + (matchCase ? '' : 'i'); + // setting regex overrides matchword + if (regexStr) { + highlightRegex = new RegExp('(' + regexStr + ')', flags); + } else { + const pattern = `${matchWord ? '\\b' : ''}(${lines.join('|')})${ + matchWord ? '\\b' : '' + }`; + highlightRegex = new RegExp(pattern, flags); + } + // Lazy init + if (!this.highlightParsers) { + this.highlightParsers = []; + } + this.highlightParsers.push({ + highlightWords, + highlightRegex, + highlightColor, + highlightWholeMessage, + }); + }); } scrollToBottom() { @@ -364,13 +413,18 @@ class ChatRenderer { } // Highlight text - if (!message.avoidHighlighting && this.highlightRegex) { - const highlighted = highlightNode(node, this.highlightRegex, (text) => - createHighlightNode(text, this.highlightColor) - ); - if (highlighted) { - node.className += ' ChatMessage--highlighted'; - } + if (!message.avoidHighlighting && this.highlightParsers) { + this.highlightParsers.map((parser) => { + const highlighted = highlightNode( + node, + parser.highlightRegex, + parser.highlightWords, + (text) => createHighlightNode(text, parser.highlightColor) + ); + if (highlighted && parser.highlightWholeMessage) { + node.className += ' ChatMessage--highlighted'; + } + }); } // Linkify text const linkifyNodes = node.querySelectorAll('.linkify'); @@ -507,7 +561,9 @@ class ChatRenderer { const cssRules = styleSheets[i].cssRules; for (let i = 0; i < cssRules.length; i++) { const rule = cssRules[i]; - cssText += rule.cssText + '\n'; + if (rule && typeof rule.cssText === 'string') { + cssText += rule.cssText + '\n'; + } } } cssText += 'body, html { background-color: #141414 }\n'; diff --git a/tgui/packages/tgui-panel/chat/replaceInTextNode.js b/tgui/packages/tgui-panel/chat/replaceInTextNode.js index fc10772622d3..753997b3b821 100644 --- a/tgui/packages/tgui-panel/chat/replaceInTextNode.js +++ b/tgui/packages/tgui-panel/chat/replaceInTextNode.js @@ -7,43 +7,120 @@ /** * Replaces text matching a regular expression with a custom node. */ -export const replaceInTextNode = (regex, createNode) => (node) => { +const regexParseNode = (params) => { + const { node, regex, createNode, captureAdjust } = params; const text = node.textContent; const textLength = text.length; + let nodes; + let new_node; let match; let lastIndex = 0; let fragment; let n = 0; + let count = 0; // eslint-disable-next-line no-cond-assign while ((match = regex.exec(text))) { n += 1; + // Safety check to prevent permanent + // client crashing + if (++count > 9999) { + return {}; + } // Lazy init fragment if (!fragment) { fragment = document.createDocumentFragment(); } - const matchText = match[0]; + // Lazy init nodes + if (!nodes) { + nodes = []; + } + const matchText = captureAdjust ? captureAdjust(match[0]) : match[0]; const matchLength = matchText.length; - const matchIndex = match.index; + // If matchText is set to be a substring nested within the original + // matched text make sure to properly offset the index + const matchIndex = match.index + match[0].indexOf(matchText); // Insert previous unmatched chunk if (lastIndex < matchIndex) { - fragment.appendChild( - document.createTextNode(text.substring(lastIndex, matchIndex)) - ); + new_node = document.createTextNode(text.substring(lastIndex, matchIndex)); + nodes.push(new_node); + fragment.appendChild(new_node); } lastIndex = matchIndex + matchLength; // Create a wrapper node - fragment.appendChild(createNode(matchText)); + new_node = createNode(matchText); + nodes.push(new_node); + fragment.appendChild(new_node); } if (fragment) { // Insert the remaining unmatched chunk if (lastIndex < textLength) { - fragment.appendChild( - document.createTextNode(text.substring(lastIndex, textLength)) - ); + new_node = document.createTextNode(text.substring(lastIndex, textLength)); + nodes.push(new_node); + fragment.appendChild(new_node); } // Commit the fragment node.parentNode.replaceChild(fragment, node); } + + return { + nodes: nodes, + n: n, + }; +}; + +/** + * Replace text of a node with custom nades if they match + * a regex expression or are in a word list + */ +export const replaceInTextNode = (regex, words, createNode) => (node) => { + let nodes; + let result; + let n = 0; + + if (regex) { + result = regexParseNode({ + node: node, + regex: regex, + createNode: createNode, + }); + nodes = result.nodes; + n += result.n; + } + + if (words) { + let i = 0; + let wordRegexStr = '('; + for (let word of words) { + // Capture if the word is at the beginning, end, middle, + // or by itself in a message + wordRegexStr += `^${word}\\W|\\W${word}\\W|\\W${word}$|^${word}$`; + // Make sure the last character for the expression is NOT '|' + if (++i !== words.length) { + wordRegexStr += '|'; + } + } + wordRegexStr += ')'; + const wordRegex = new RegExp(wordRegexStr, 'gi'); + if (regex && nodes) { + for (let a_node of nodes) { + result = regexParseNode({ + node: a_node, + regex: wordRegex, + createNode: createNode, + captureAdjust: (str) => str.replace(/^\W|\W$/g, ''), + }); + n += result.n; + } + } else { + result = regexParseNode({ + node: node, + regex: wordRegex, + createNode: createNode, + captureAdjust: (str) => str.replace(/^\W|\W$/g, ''), + }); + n += result.n; + } + } return n; }; @@ -71,6 +148,7 @@ const createHighlightNode = (text) => { export const highlightNode = ( node, regex, + words, createNode = createHighlightNode ) => { if (!createNode) { @@ -82,9 +160,9 @@ export const highlightNode = ( const node = childNodes[i]; // Is a text node if (node.nodeType === 3) { - n += replaceInTextNode(regex, createNode)(node); + n += replaceInTextNode(regex, words, createNode)(node); } else { - n += highlightNode(node, regex, createNode); + n += highlightNode(node, regex, words, createNode); } } return n; @@ -94,7 +172,7 @@ export const highlightNode = ( // -------------------------------------------------------- // prettier-ignore -const URL_REGEX = /(?:(?:https?:\/\/)|(?:www\.))(?:[^ ]*?\.[^ ]*?)+[-A-Za-z0-9+&@#/%?=~_|$!:,.;()]+/ig; +const URL_REGEX = /(?:(?:https?:\/\/)|(?:www\.))(?:[^ ]*?\.[^ ]*?)+[-A-Za-z0-9+&@#/%?=~_|$!:,.;(){}]+/ig; /** * Highlights the text in the node based on the provided regular expression. @@ -118,7 +196,7 @@ export const linkifyNode = (node) => { return n; }; -const linkifyTextNode = replaceInTextNode(URL_REGEX, (text) => { +const linkifyTextNode = replaceInTextNode(URL_REGEX, null, (text) => { const node = document.createElement('a'); node.href = text; node.textContent = text; diff --git a/tgui/packages/tgui-panel/package.json b/tgui/packages/tgui-panel/package.json index a73c931f7028..d60ccaaa9b17 100644 --- a/tgui/packages/tgui-panel/package.json +++ b/tgui/packages/tgui-panel/package.json @@ -1,11 +1,11 @@ { "private": true, "name": "tgui-panel", - "version": "4.3.0", + "version": "4.3.1", "dependencies": { "common": "workspace:*", - "dompurify": "^2.4.5", - "inferno": "^7.4.11", + "dompurify": "^2.3.1", + "inferno": "^7.4.8", "tgui": "workspace:*", "tgui-dev-server": "workspace:*", "tgui-polyfill": "workspace:*" diff --git a/tgui/packages/tgui-panel/settings/SettingsPanel.js b/tgui/packages/tgui-panel/settings/SettingsPanel.js index 5ab4a82ec528..4aff6d29a765 100644 --- a/tgui/packages/tgui-panel/settings/SettingsPanel.js +++ b/tgui/packages/tgui-panel/settings/SettingsPanel.js @@ -25,9 +25,20 @@ import { import { ChatPageSettings } from '../chat'; import { rebuildChat, saveChatToDisk } from '../chat/actions'; import { THEMES } from '../themes'; -import { changeSettingsTab, updateSettings } from './actions'; -import { FONTS, SETTINGS_TABS } from './constants'; -import { selectActiveTab, selectSettings } from './selectors'; +import { + changeSettingsTab, + updateSettings, + addHighlightSetting, + removeHighlightSetting, + updateHighlightSetting, +} from './actions'; +import { SETTINGS_TABS, FONTS, MAX_HIGHLIGHT_SETTINGS } from './constants'; +import { + selectActiveTab, + selectSettings, + selectHighlightSettings, + selectHighlightSettingById, +} from './selectors'; export const SettingsPanel = (props, context) => { const activeTab = useSelector(context, selectActiveTab); @@ -58,22 +69,17 @@ export const SettingsPanel = (props, context) => { {activeTab === 'general' && } {activeTab === 'chatPage' && } + {activeTab === 'textHighlight' && } ); }; export const SettingsGeneral = (props, context) => { - const { - theme, - fontFamily, - fontSize, - lineHeight, - highlightText, - highlightColor, - matchWord, - matchCase, - } = useSelector(context, selectSettings); + const { theme, fontFamily, fontSize, lineHeight } = useSelector( + context, + selectSettings + ); const dispatch = useDispatch(context); const [freeFont, setFreeFont] = useLocalState(context, 'freeFont', false); return ( @@ -172,64 +178,41 @@ export const SettingsGeneral = (props, context) => { - - - Highlight text (comma separated): - - -
+ ); +}; + +const TextHighlightSettings = (props, context) => { + const highlightSettings = useSelector(context, selectHighlightSettings); + const dispatch = useDispatch(context); + return ( +
+
+ + {highlightSettings.map((id, i) => ( + - + ))} + {highlightSettings.length < MAX_HIGHLIGHT_SETTINGS && ( + +