Merge commit 'ec9ee7eb00' into kek
# Conflicts:
# code/game/machinery/computer/launchpad_control.dm
# code/modules/wiremod/components/utility/combiner.dm
# code/modules/wiremod/port.dm
# code/modules/wiremod/shell/brain_computer_interface.dm
# tgui/packages/tgui/interfaces/IntegratedCircuit/index.js
#
# It looks like you may be committing a merge.
# If this is not correct, please remove the file
# .git/MERGE_HEAD
# and try again.
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch kek
# All conflicts fixed but you are still merging.
#
# Changes to be committed:
# modified: .github/CONTRIBUTING.md
# modified: .github/workflows/compile_changelogs.yml
# modified: .github/workflows/gbp.yml
# modified: .github/workflows/gbp_collect.yml
# modified: _maps/map_files/Deltastation/DeltaStation2.dmm
# modified: _maps/map_files/IceBoxStation/IceBoxStation.dmm
# modified: _maps/map_files/KiloStation/KiloStation.dmm
# modified: _maps/map_files/MetaStation/MetaStation.dmm
# modified: _maps/map_files/debug/runtimestation.dmm
# modified: _maps/map_files/tramstation/tramstation.dmm
# modified: code/__DEFINES/ai.dm
# modified: code/__DEFINES/atom_hud.dm
# modified: code/__DEFINES/botany.dm
# modified: code/__DEFINES/dcs/signals.dm
# new file: code/__DEFINES/drone.dm
# modified: code/__DEFINES/logging.dm
# modified: code/__DEFINES/machines.dm
# modified: code/__DEFINES/misc.dm
# deleted: code/__DEFINES/nanites.dm
# new file: code/__DEFINES/polls.dm
# modified: code/__DEFINES/power.dm
# modified: code/__DEFINES/projectiles.dm
# modified: code/__DEFINES/research.dm
# modified: code/__DEFINES/subsystems.dm
# modified: code/__DEFINES/traits.dm
# modified: code/__DEFINES/wiremod.dm
# modified: code/__HELPERS/files.dm
# modified: code/__HELPERS/game.dm
# modified: code/__HELPERS/path.dm
# modified: code/__HELPERS/unsorted.dm
# renamed: code/_globalvars/lists/admin.dm -> code/_globalvars/admin.dm
# modified: code/_globalvars/lists/maintenance_loot.dm
# modified: code/_globalvars/lists/mobs.dm
# deleted: code/_globalvars/misc.dm
# new file: code/_globalvars/time_vars.dm
# new file: code/controllers/subsystem/ai_controllers.dm
# modified: code/controllers/subsystem/explosions.dm
# new file: code/controllers/subsystem/processing/ai_behaviors.dm
# deleted: code/controllers/subsystem/processing/ai_controllers.dm
# deleted: code/controllers/subsystem/processing/nanites.dm
# modified: code/controllers/subsystem/processing/tramprocess.dm
# modified: code/datums/ai/_ai_behavior.dm
# modified: code/datums/ai/_ai_controller.dm
# new file: code/datums/ai/_ai_planning_subtree.dm
# modified: code/datums/ai/bane/bane_controller.dm
# new file: code/datums/ai/bane/bane_subtrees.dm
# modified: code/datums/ai/cursed/cursed_controller.dm
# new file: code/datums/ai/cursed/cursed_subtrees.dm
# modified: code/datums/ai/dog/dog_controller.dm
# new file: code/datums/ai/dog/dog_subtrees.dm
# modified: code/datums/ai/hauntium/haunted_controller.dm
# new file: code/datums/ai/hauntium/hauntium_subtrees.dm
# modified: code/datums/ai/hostile/hostile_controller.dm
# modified: code/datums/ai/monkey/monkey_controller.dm
# new file: code/datums/ai/monkey/monkey_subtrees.dm
# modified: code/datums/ai/movement/ai_movement_jps.dm
# modified: code/datums/ai/objects/vending_machines/vending_machine_controller.dm
# modified: code/datums/ai/robot_customer/robot_customer_controller.dm
# new file: code/datums/ai/robot_customer/robot_customer_subtrees.dm
# modified: code/datums/components/crafting/recipes.dm
# deleted: code/datums/components/footstep.dm
# deleted: code/datums/components/nanites.dm
# modified: code/datums/components/rust.dm
# modified: code/datums/components/shell.dm
# modified: code/datums/components/usb_port.dm
# modified: code/datums/dash_weapon.dm
# modified: code/datums/datacore.dm
# deleted: code/datums/diseases/advance/symptoms/nanites.dm
# new file: code/datums/elements/footstep.dm
# renamed: code/datums/components/kneecapping.dm -> code/datums/elements/kneecapping.dm
# renamed: code/datums/components/spooky.dm -> code/datums/elements/spooky.dm
# modified: code/datums/greyscale/json_configs/meter.json
# modified: code/datums/greyscale/json_configs/plushie_lizard.json
# new file: code/datums/id_trim/admin.dm
# renamed: code/datums/id_trim/misc.dm -> code/datums/id_trim/outfits.dm
# modified: code/datums/mood_events/generic_negative_events.dm
# modified: code/datums/mood_events/generic_positive_events.dm
# modified: code/game/area/space_station_13_areas.dm
# modified: code/game/data_huds.dm
# modified: code/game/machinery/computer/crew.dm
# modified: code/game/machinery/computer/launchpad_control.dm
# modified: code/game/machinery/computer/security.dm
# modified: code/game/machinery/computer/tram_controls.dm
# modified: code/game/machinery/porta_turret/portable_turret_construct.dm
# modified: code/game/machinery/scan_gate.dm
# modified: code/game/objects/effects/glowshroom.dm
# modified: code/game/objects/effects/misc.dm
# modified: code/game/objects/effects/spawners/bundle.dm
# modified: code/game/objects/effects/spawners/lootdrop.dm
# new file: code/game/objects/items/bouquets.dm
# new file: code/game/objects/items/choice_beacon.dm
# modified: code/game/objects/items/circuitboards/computer_circuitboards.dm
# modified: code/game/objects/items/circuitboards/machine_circuitboards.dm
# modified: code/game/objects/items/devices/scanners.dm
# modified: code/game/objects/items/granters.dm
# new file: code/game/objects/items/gun_maintenance.dm
# modified: code/game/objects/items/holy_weapons.dm
# modified: code/game/objects/items/implants/implant_deathrattle.dm
# deleted: code/game/objects/items/miscellaneous.dm
# modified: code/game/objects/items/pinpointer.dm
# modified: code/game/objects/items/plushes.dm
# modified: code/game/objects/items/pneumaticCannon.dm
# new file: code/game/objects/items/skub.dm
# modified: code/game/objects/items/storage/bags.dm
# modified: code/game/objects/items/storage/boxes.dm
# modified: code/game/objects/items/storage/wallets.dm
# new file: code/game/objects/items/virgin_mary.dm
# deleted: code/game/objects/structures/cannon.dm
# new file: code/game/objects/structures/cannons/cannon.dm
# new file: code/game/objects/structures/cannons/cannon_instructions.dm
# renamed: code/game/objects/items/stacks/cannonballs.dm -> code/game/objects/structures/cannons/cannonballs.dm
# modified: code/game/objects/structures/crates_lockers/closets/bodybag.dm
# modified: code/game/objects/structures/signs/signs_departments.dm
# modified: code/game/turfs/open/floor/iron_floor.dm
# modified: code/game/turfs/open/floor/misc_floor.dm
# modified: code/game/turfs/open/floor/plating/asteroid.dm
# modified: code/game/turfs/turf.dm
# modified: code/modules/admin/admin_investigate.dm
# modified: code/modules/admin/admin_verbs.dm
# modified: code/modules/admin/verbs/adminpm.dm
# modified: code/modules/admin/verbs/diagnostics.dm
# modified: code/modules/admin/verbs/mapping.dm
# modified: code/modules/antagonists/changeling/powers/mutations.dm
# modified: code/modules/antagonists/disease/disease_abilities.dm
# modified: code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm
# modified: code/modules/antagonists/revenant/revenant_abilities.dm
# modified: code/modules/antagonists/slaughter/slaughter.dm
# modified: code/modules/atmospherics/machinery/components/fusion/hfr_main_processes.dm
# modified: code/modules/atmospherics/machinery/other/meter.dm
# modified: code/modules/capture_the_flag/ctf_classes.dm
# modified: code/modules/capture_the_flag/ctf_equipment.dm
# modified: code/modules/client/player_details.dm
# modified: code/modules/clothing/spacesuits/hardsuit.dm
# modified: code/modules/clothing/under/costume.dm
# modified: code/modules/events/fake_virus.dm
# modified: code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
# modified: code/modules/hydroponics/grown/flowers.dm
# modified: code/modules/hydroponics/grown/rainbow_bunch.dm
# modified: code/modules/hydroponics/hydroponics.dm
# modified: code/modules/hydroponics/plant_genes.dm
# modified: code/modules/instruments/items.dm
# modified: code/modules/mining/lavaland/necropolis_chests.dm
# modified: code/modules/mining/minebot.dm
# modified: code/modules/mob/dead/new_player/poll.dm
# modified: code/modules/mob/living/brain/brain_item.dm
# modified: code/modules/mob/living/carbon/alien/alien.dm
# modified: code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
# modified: code/modules/mob/living/carbon/carbon_defines.dm
# modified: code/modules/mob/living/carbon/human/human.dm
# modified: code/modules/mob/living/carbon/human/human_defines.dm
# modified: code/modules/mob/living/carbon/human/species_types/jellypeople.dm
# modified: code/modules/mob/living/carbon/human/species_types/zombies.dm
# modified: code/modules/mob/living/living_defense.dm
# modified: code/modules/mob/living/living_defines.dm
# modified: code/modules/mob/living/simple_animal/constructs.dm
# modified: code/modules/mob/living/simple_animal/eldritch_demons.dm
# modified: code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
# modified: code/modules/mob/living/simple_animal/friendly/robot_customer.dm
# modified: code/modules/mob/living/simple_animal/simple_animal.dm
# modified: code/modules/mob/living/simple_animal/slime/powers.dm
# modified: code/modules/mob/mob_helpers.dm
# modified: code/modules/modular_computers/computers/item/computer_power.dm
# modified: code/modules/modular_computers/file_system/programs/radar.dm
# modified: code/modules/modular_computers/hardware/recharger.dm
# modified: code/modules/power/apc.dm
# modified: code/modules/power/power.dm
# renamed: code/modules/projectiles/ammunition/caseless/misc.dm -> code/modules/projectiles/ammunition/caseless/energy.dm
# new file: code/modules/projectiles/ammunition/caseless/harpoon.dm
# renamed: code/modules/projectiles/boxes_magazines/internal/misc.dm -> code/modules/projectiles/boxes_magazines/internal/meathook.dm
# modified: code/modules/projectiles/gun.dm
# modified: code/modules/projectiles/guns/ballistic.dm
# renamed: code/modules/projectiles/guns/misc/bow.dm -> code/modules/projectiles/guns/ballistic/bow.dm
# renamed: code/modules/projectiles/guns/misc/beam_rifle.dm -> code/modules/projectiles/guns/energy/beam_rifle.dm
# renamed: code/modules/projectiles/guns/misc/blastcannon.dm -> code/modules/projectiles/guns/special/blastcannon.dm
# renamed: code/modules/projectiles/guns/misc/chem_gun.dm -> code/modules/projectiles/guns/special/chem_gun.dm
# renamed: code/modules/projectiles/guns/misc/grenade_launcher.dm -> code/modules/projectiles/guns/special/grenade_launcher.dm
# renamed: code/modules/projectiles/guns/misc/medbeam.dm -> code/modules/projectiles/guns/special/medbeam.dm
# renamed: code/modules/projectiles/guns/misc/syringe_gun.dm -> code/modules/projectiles/guns/special/syringe_gun.dm
# renamed: code/modules/projectiles/projectile/bullets/cannon.dm -> code/modules/projectiles/projectile/bullets/cannonball.dm
# renamed: code/modules/projectiles/projectile/energy/misc.dm -> code/modules/projectiles/projectile/energy/decloner.dm
# new file: code/modules/projectiles/projectile/energy/ninja.dm
# modified: code/modules/research/designs.dm
# modified: code/modules/research/designs/comp_board_designs.dm
# modified: code/modules/research/designs/electronics_designs.dm
# modified: code/modules/research/designs/machine_designs.dm
# deleted: code/modules/research/designs/nanite_designs.dm
# deleted: code/modules/research/nanites/extra_settings/_extra_setting.dm
# deleted: code/modules/research/nanites/extra_settings/boolean.dm
# deleted: code/modules/research/nanites/extra_settings/number.dm
# deleted: code/modules/research/nanites/extra_settings/text.dm
# deleted: code/modules/research/nanites/extra_settings/type.dm
# deleted: code/modules/research/nanites/nanite_chamber.dm
# deleted: code/modules/research/nanites/nanite_chamber_computer.dm
# deleted: code/modules/research/nanites/nanite_cloud_controller.dm
# deleted: code/modules/research/nanites/nanite_hijacker.dm
# deleted: code/modules/research/nanites/nanite_misc_items.dm
# deleted: code/modules/research/nanites/nanite_program_hub.dm
# deleted: code/modules/research/nanites/nanite_programmer.dm
# deleted: code/modules/research/nanites/nanite_programs.dm
# deleted: code/modules/research/nanites/nanite_programs/buffing.dm
# deleted: code/modules/research/nanites/nanite_programs/healing.dm
# deleted: code/modules/research/nanites/nanite_programs/protocols.dm
# deleted: code/modules/research/nanites/nanite_programs/rogue.dm
# deleted: code/modules/research/nanites/nanite_programs/sensor.dm
# deleted: code/modules/research/nanites/nanite_programs/suppression.dm
# deleted: code/modules/research/nanites/nanite_programs/utility.dm
# deleted: code/modules/research/nanites/nanite_programs/weapon.dm
# deleted: code/modules/research/nanites/nanite_remote.dm
# deleted: code/modules/research/nanites/program_disks.dm
# deleted: code/modules/research/nanites/public_chamber.dm
# deleted: code/modules/research/nanites/rules.dm
# modified: code/modules/research/techweb/all_nodes.dm
# modified: code/modules/station_goals/bsa.dm
# modified: code/modules/tgui/tgui_alert.dm
# modified: code/modules/unit_tests/designs.dm
# modified: code/modules/vehicles/scooter.dm
# modified: code/modules/vending/_vending.dm
# modified: code/modules/vending/autodrobe.dm
# modified: code/modules/vending/clothesmate.dm
# modified: code/modules/wiremod/component_printer.dm
# modified: code/modules/wiremod/components/abstract/compare.dm
# modified: code/modules/wiremod/components/abstract/module.dm
# modified: code/modules/wiremod/components/action/light.dm
# modified: code/modules/wiremod/components/action/mmi.dm
# modified: code/modules/wiremod/components/action/pathfind.dm
# modified: code/modules/wiremod/components/action/pull.dm
# modified: code/modules/wiremod/components/action/radio.dm
# modified: code/modules/wiremod/components/action/soundemitter.dm
# modified: code/modules/wiremod/components/action/speech.dm
# modified: code/modules/wiremod/components/atom/direction.dm
# modified: code/modules/wiremod/components/atom/gps.dm
# modified: code/modules/wiremod/components/atom/health.dm
# modified: code/modules/wiremod/components/atom/hear.dm
# modified: code/modules/wiremod/components/atom/self.dm
# modified: code/modules/wiremod/components/atom/species.dm
# modified: code/modules/wiremod/components/list/concat.dm
# modified: code/modules/wiremod/components/list/get_column.dm
# modified: code/modules/wiremod/components/list/index.dm
# modified: code/modules/wiremod/components/list/index_table.dm
# modified: code/modules/wiremod/components/list/select.dm
# modified: code/modules/wiremod/components/list/split.dm
# modified: code/modules/wiremod/components/math/arithmetic.dm
# modified: code/modules/wiremod/components/math/length.dm
# modified: code/modules/wiremod/components/math/not.dm
# modified: code/modules/wiremod/components/math/random.dm
# modified: code/modules/wiremod/components/sensors/pressuresensor.dm
# modified: code/modules/wiremod/components/sensors/tempsensor.dm
# modified: code/modules/wiremod/components/string/concat.dm
# modified: code/modules/wiremod/components/string/textcase.dm
# modified: code/modules/wiremod/components/string/tonumber.dm
# modified: code/modules/wiremod/components/string/tostring.dm
# modified: code/modules/wiremod/components/utility/clock.dm
# new file: code/modules/wiremod/components/utility/combiner.dm
# modified: code/modules/wiremod/components/utility/delay.dm
# modified: code/modules/wiremod/components/utility/multiplexer.dm
# new file: code/modules/wiremod/duplicator.dm
# modified: code/modules/wiremod/integrated_circuit.dm
# modified: code/modules/wiremod/port.dm
# modified: code/modules/wiremod/shell/airlock.dm
# modified: code/modules/wiremod/shell/brain_computer_interface.dm
# modified: code/modules/wiremod/shell/compact_remote.dm
# modified: code/modules/wiremod/shell/controller.dm
# modified: code/modules/wiremod/shell/moneybot.dm
# modified: code/modules/wiremod/shell/scanner.dm
# deleted: html/changelogs/AutoChangeLog-pr-60095.yml
# deleted: html/changelogs/AutoChangeLog-pr-60139.yml
# new file: html/changelogs/AutoChangeLog-pr-60157.yml
# new file: html/changelogs/AutoChangeLog-pr-60314.yml
# deleted: html/changelogs/AutoChangeLog-pr-60338.yml
# deleted: html/changelogs/AutoChangeLog-pr-60392.yml
# deleted: html/changelogs/AutoChangeLog-pr-60395.yml
# deleted: html/changelogs/AutoChangeLog-pr-60398.yml
# deleted: html/changelogs/AutoChangeLog-pr-60408.yml
# deleted: html/changelogs/AutoChangeLog-pr-60414.yml
# deleted: html/changelogs/AutoChangeLog-pr-60419.yml
# deleted: html/changelogs/AutoChangeLog-pr-60420.yml
# deleted: html/changelogs/AutoChangeLog-pr-60425.yml
# deleted: html/changelogs/AutoChangeLog-pr-60428.yml
# deleted: html/changelogs/AutoChangeLog-pr-60429.yml
# new file: html/changelogs/AutoChangeLog-pr-60433.yml
# new file: html/changelogs/AutoChangeLog-pr-60476.yml
# new file: html/changelogs/AutoChangeLog-pr-60483.yml
# new file: html/changelogs/AutoChangeLog-pr-60492.yml
# new file: html/changelogs/AutoChangeLog-pr-60498.yml
# new file: html/changelogs/AutoChangeLog-pr-60501.yml
# modified: html/changelogs/archive/2021-07.yml
# new file: icons/effects/rust_overlay.dmi
# modified: icons/mob/actions/actions_items.dmi
# modified: icons/mob/clothing/under/costume.dmi
# modified: icons/mob/hud.dmi
# modified: icons/mob/lavaland/lavaland_monsters.dmi
# modified: icons/obj/atmospherics/pipes/meter.dmi
# new file: icons/obj/cannons.dmi
# modified: icons/obj/clothing/under/costume.dmi
# modified: icons/obj/computer.dmi
# modified: icons/obj/decals.dmi
# modified: icons/obj/device.dmi
# modified: icons/obj/guns/projectiles.dmi
# renamed: icons/obj/machines/nanite_chamber.dmi -> icons/obj/machines/bci_implanter.dmi
# modified: icons/obj/machines/research.dmi
# modified: icons/obj/stack_objects.dmi
# modified: icons/obj/surgery.dmi
# modified: icons/obj/wiremod_fab.dmi
# modified: icons/turf/areas.dmi
# modified: icons/turf/walls/wall.dmi
# modified: strings/cas_white.txt
# modified: strings/locations.json
# modified: tgstation.dme
# modified: tgui/packages/tgui/interfaces/AlertModal.js
# modified: tgui/packages/tgui/interfaces/IntegratedCircuit/index.js
# deleted: tgui/packages/tgui/interfaces/NaniteChamberControl.js
# deleted: tgui/packages/tgui/interfaces/NaniteCloudControl.js
# deleted: tgui/packages/tgui/interfaces/NaniteProgramHub.js
# deleted: tgui/packages/tgui/interfaces/NaniteProgrammer.js
# deleted: tgui/packages/tgui/interfaces/NaniteRemote.js
# modified: tgui/packages/tgui/interfaces/ScannerGate.js
# modified: tgui/packages/tgui/interfaces/Techweb.js
#
# ------------------------ >8 ------------------------
# Do not modify or remove the line above.
# Everything below it will be ignored.
diff --git a/strings/cas_white.txt b/strings/cas_white.txt
index 9429f88bcc..644ffdf21c 100644
--- a/strings/cas_white.txt
+++ b/strings/cas_white.txt
@@ -304,7 +304,7 @@ The vomitgoose.
Ziptie hogtying.
Defeating a changeling by sticking your hand down its pants.
A crateful of fresh organs.
-The primal, nerve-slapping sex that nanites are having inside you.
+The primal, nerve-slapping sex that nanites were having inside you.
Calling a shuttle because I broke a toenail.
Chunks of dead flyperson.
Curse of the Barnyard.
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index 81c872cdd4..64778b8b6b 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -828,3 +828,5 @@ This repository uses `LF` line endings for all code as specified in the **.gitat
Unless overridden or a non standard git binary is used the line ending settings should be applied to your clone automatically.
Note: VSC requires an [extension](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig) to take advantage of editorconfig.
+
+Github actions that require additional configuration are disabled on the repository until ACTION_ENABLER secret is created with non-empty value.
diff --git a/.github/workflows/compile_changelogs.yml b/.github/workflows/compile_changelogs.yml
index fc2f436986..9943765d6f 100644
--- a/.github/workflows/compile_changelogs.yml
+++ b/.github/workflows/compile_changelogs.yml
@@ -9,36 +9,36 @@ jobs:
name: "Compile changelogs"
runs-on: ubuntu-20.04
steps:
- - name: "Check for CHANGELOG_ENABLER secret and pass true to output if it exists to be checked by later steps"
+ - name: "Check for ACTION_ENABLER secret and pass true to output if it exists to be checked by later steps"
id: value_holder
env:
- CHANGELOG_ENABLER: ${{ secrets.CHANGELOG_ENABLER }}
+ ENABLER_SECRET: ${{ secrets.ACTION_ENABLER }}
run: |
unset SECRET_EXISTS
- if [ -n $CHANGELOG_ENABLER ]; then SECRET_EXISTS='true' ; fi
- echo ::set-output name=CL_ENABLED::${SECRET_EXISTS}
+ if [ -n $ENABLER_SECRET ]; then SECRET_EXISTS='true' ; fi
+ echo ::set-output name=ACTIONS_ENABLED::${SECRET_EXISTS}
- name: "Setup python"
- if: steps.value_holder.outputs.CL_ENABLED
+ if: steps.value_holder.outputs.ACTIONS_ENABLED
uses: actions/setup-python@v1
with:
python-version: '3.x'
- name: "Install deps"
- if: steps.value_holder.outputs.CL_ENABLED
+ if: steps.value_holder.outputs.ACTIONS_ENABLED
run: |
python -m pip install --upgrade pip
python -m pip install pyyaml
sudo apt-get install dos2unix
- name: "Checkout"
- if: steps.value_holder.outputs.CL_ENABLED
+ if: steps.value_holder.outputs.ACTIONS_ENABLED
uses: actions/checkout@v1
with:
fetch-depth: 25
- name: "Compile"
- if: steps.value_holder.outputs.CL_ENABLED
+ if: steps.value_holder.outputs.ACTIONS_ENABLED
run: |
python tools/ss13_genchangelog.py html/changelogs
- name: Commit
- if: steps.value_holder.outputs.CL_ENABLED
+ if: steps.value_holder.outputs.ACTIONS_ENABLED
run: |
git config --local user.email "action@github.com"
git config --local user.name "Changelogs"
@@ -46,7 +46,7 @@ jobs:
git add html/changelogs
git commit -m "Automatic changelog compile [ci skip]" -a || true
- name: "Push"
- if: steps.value_holder.outputs.CL_ENABLED
+ if: steps.value_holder.outputs.ACTIONS_ENABLED
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/gbp.yml b/.github/workflows/gbp.yml
index 454046068a..655f1241a1 100644
--- a/.github/workflows/gbp.yml
+++ b/.github/workflows/gbp.yml
@@ -6,13 +6,24 @@ jobs:
gbp:
runs-on: ubuntu-latest
steps:
+ - name: "Check for ACTION_ENABLER secret and pass true to output if it exists to be checked by later steps"
+ id: value_holder
+ env:
+ ENABLER_SECRET: ${{ secrets.ACTION_ENABLER }}
+ run: |
+ unset SECRET_EXISTS
+ if [ -n $ENABLER_SECRET ]; then SECRET_EXISTS='true' ; fi
+ echo ::set-output name=ACTIONS_ENABLED::${SECRET_EXISTS}
- name: Checkout
+ if: steps.value_holder.outputs.ACTIONS_ENABLED
uses: actions/checkout@v2
- name: Setup git
+ if: steps.value_holder.outputs.ACTIONS_ENABLED
run: |
git config --global user.name "gbp-action"
git config --global user.email "<>"
- name: Checkout alternate branch
+ if: steps.value_holder.outputs.ACTIONS_ENABLED
uses: actions/checkout@v2
with:
ref: "gbp-balances" # The branch name
@@ -20,8 +31,10 @@ jobs:
# This is to ensure we keep the gbp.toml from master
# without having to update our separate branch.
- name: Copy configuration
+ if: steps.value_holder.outputs.ACTIONS_ENABLED
run: cp ./.github/gbp.toml ./gbp-balances/.github/gbp.toml
- name: GBP action
+ if: steps.value_holder.outputs.ACTIONS_ENABLED
uses: tgstation/gbp-action@master
with:
branch: "gbp-balances"
diff --git a/.github/workflows/gbp_collect.yml b/.github/workflows/gbp_collect.yml
index 1f79f930fc..69701e546d 100644
--- a/.github/workflows/gbp_collect.yml
+++ b/.github/workflows/gbp_collect.yml
@@ -8,13 +8,24 @@ jobs:
gbp_collection:
runs-on: ubuntu-latest
steps:
+ - name: "Check for ACTION_ENABLER secret and pass true to output if it exists to be checked by later steps"
+ id: value_holder
+ env:
+ ENABLER_SECRET: ${{ secrets.ACTION_ENABLER }}
+ run: |
+ unset SECRET_EXISTS
+ if [ -n $ENABLER_SECRET ]; then SECRET_EXISTS='true' ; fi
+ echo ::set-output name=ACTIONS_ENABLED::${SECRET_EXISTS}
- name: Checkout
+ if: steps.value_holder.outputs.ACTIONS_ENABLED
uses: actions/checkout@v2
- name: Setup git
+ if: steps.value_holder.outputs.ACTIONS_ENABLED
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
- name: Checkout alternate branch
+ if: steps.value_holder.outputs.ACTIONS_ENABLED
uses: actions/checkout@v2
with:
ref: "gbp-balances" # The branch name
@@ -22,8 +33,10 @@ jobs:
# This is to ensure we keep the gbp.toml from master
# without having to update our separate branch.
- name: Copy configuration
+ if: steps.value_holder.outputs.ACTIONS_ENABLED
run: cp ./.github/gbp.toml ./gbp-balances/.github/gbp.toml
- name: GBP action
+ if: steps.value_holder.outputs.ACTIONS_ENABLED
uses: Mothblocks/gbp-action@collate-changes
with:
collect: "true"
diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm
index 41299db9a1..98f5b1d22a 100644
--- a/_maps/map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/map_files/Deltastation/DeltaStation2.dmm
@@ -4182,6 +4182,26 @@
/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible,
/turf/open/floor/iron/dark/corner,
/area/engineering/atmos)
+"aCt" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 1
+ },
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"aCu" = (
/obj/structure/disposalpipe/segment,
/obj/effect/landmark/start/hangover,
@@ -4394,6 +4414,22 @@
},
/turf/open/floor/iron/grimy,
/area/hallway/secondary/service)
+"aEM" = (
+/obj/machinery/light/directional/east,
+/obj/machinery/status_display/evac/directional/east,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"aEN" = (
/obj/effect/spawner/randomarcade{
dir = 1
@@ -5524,6 +5560,29 @@
},
/turf/open/floor/iron,
/area/cargo/qm)
+"aNy" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"aNC" = (
/obj/effect/landmark/start/prisoner,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
@@ -7824,13 +7883,6 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron/cafeteria,
/area/security/prison)
-"bhD" = (
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/obj/effect/turf_decal/tile/purple,
-/turf/open/floor/iron/white,
-/area/science/misc_lab)
"bhH" = (
/obj/machinery/light/small/directional/north,
/obj/effect/turf_decal/tile/blue{
@@ -8295,12 +8347,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/ai_monitored/security/armory)
-"bly" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 4
- },
-/turf/open/floor/iron/white,
-/area/science/misc_lab)
"blB" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -11764,17 +11810,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/grimy,
/area/service/chapel/main)
-"bLH" = (
-/obj/machinery/light/directional/north,
-/obj/machinery/component_printer,
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/turf/open/floor/iron/white,
-/area/science/misc_lab)
"bLU" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable,
@@ -12218,6 +12253,13 @@
},
/turf/open/space,
/area/space/nearstation)
+"bNG" = (
+/obj/structure/sign/poster/official/build{
+ pixel_y = -32
+ },
+/obj/structure/table/reinforced,
+/turf/open/floor/iron/white,
+/area/science/misc_lab)
"bNM" = (
/obj/machinery/door/poddoor/preopen{
id = "justicechamber";
@@ -13447,6 +13489,22 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/turf/open/floor/iron/grimy,
/area/ai_monitored/turret_protected/aisat_interior)
+"bTz" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"bTB" = (
/obj/item/kirbyplants/random,
/obj/machinery/turretid{
@@ -15385,6 +15443,10 @@
},
/turf/open/floor/iron,
/area/hallway/primary/central/aft)
+"ccN" = (
+/obj/structure/girder,
+/turf/open/floor/plating,
+/area/science/misc_lab)
"ccU" = (
/obj/effect/spawner/randomsnackvend,
/obj/machinery/light/directional/west,
@@ -18412,6 +18474,12 @@
},
/turf/open/space,
/area/space/nearstation)
+"crF" = (
+/obj/structure/table/reinforced,
+/obj/item/screwdriver,
+/obj/effect/spawner/lootdrop/maintenance/two,
+/turf/open/floor/iron,
+/area/science/misc_lab)
"crG" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/tile/neutral{
@@ -19931,16 +19999,6 @@
},
/turf/open/floor/iron,
/area/maintenance/disposal/incinerator)
-"cGu" = (
-/obj/machinery/airalarm/directional/north,
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/turf/open/floor/iron/white,
-/area/science/misc_lab)
"cGJ" = (
/obj/machinery/door/airlock/maintenance_hatch{
name = "Chapel Maintenance";
@@ -26213,77 +26271,6 @@
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/iron/dark,
/area/science/genetics)
-"djF" = (
-/turf/closed/wall/r_wall,
-/area/science/nanite)
-"djG" = (
-/obj/machinery/computer/nanite_cloud_controller,
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
-"djH" = (
-/obj/machinery/nanite_programmer,
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
-"djI" = (
-/obj/machinery/computer/nanite_chamber_control,
-/obj/structure/sign/poster/random{
- pixel_y = 32
- },
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
-"djJ" = (
-/obj/machinery/nanite_chamber,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
-"djK" = (
-/turf/closed/wall,
-/area/science/nanite)
"djL" = (
/obj/structure/disposalpipe/segment{
dir = 5
@@ -26695,57 +26682,6 @@
},
/turf/open/floor/iron/dark,
/area/science/genetics)
-"dlt" = (
-/obj/machinery/power/apc/auto_name/west,
-/obj/structure/cable,
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
-"dlu" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
-"dlv" = (
-/obj/machinery/light/directional/east,
-/obj/machinery/light_switch/directional/east,
-/obj/effect/turf_decal/loading_area{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"dlz" = (
/obj/structure/sign/warning/nosmoking,
/turf/closed/wall,
@@ -26923,70 +26859,6 @@
/obj/machinery/airalarm/directional/east,
/turf/open/floor/iron/dark,
/area/science/genetics)
-"dmF" = (
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/science/nanite)
-"dmG" = (
-/obj/machinery/nanite_program_hub,
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
-"dmH" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
-"dmI" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
-"dmJ" = (
-/obj/item/kirbyplants/random,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"dmL" = (
/obj/structure/disposalpipe/segment,
/obj/effect/turf_decal/stripes/line{
@@ -27808,55 +27680,6 @@
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/iron/dark,
/area/science/genetics)
-"dqo" = (
-/obj/structure/table/reinforced,
-/obj/item/nanite_scanner{
- pixel_x = -4;
- pixel_y = -4
- },
-/obj/item/nanite_scanner{
- pixel_x = 4;
- pixel_y = -4
- },
-/obj/item/nanite_remote{
- pixel_x = -4;
- pixel_y = 4
- },
-/obj/item/nanite_remote{
- pixel_x = 4;
- pixel_y = 4
- },
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/machinery/firealarm/directional/west,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
-"dqr" = (
-/obj/structure/disposalpipe/trunk{
- dir = 1
- },
-/obj/machinery/disposal/bin,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"dqu" = (
/obj/effect/turf_decal/stripes/line{
dir = 10
@@ -28103,65 +27926,6 @@
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/iron/dark,
/area/science/genetics)
-"drM" = (
-/obj/structure/table/reinforced,
-/obj/item/storage/box/disks_nanite{
- pixel_x = 4;
- pixel_y = -4
- },
-/obj/item/storage/box/disks_nanite{
- pixel_x = -4;
- pixel_y = 4
- },
-/obj/machinery/camera{
- c_tag = "Research Division - Nanite Lab";
- dir = 4;
- name = "science camera";
- network = list("ss13","rd")
- },
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/item/radio/intercom/directional/west,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
-"drN" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
-"drO" = (
-/obj/machinery/light/directional/east,
-/obj/machinery/status_display/evac/directional/east,
-/obj/effect/turf_decal/loading_area,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"drP" = (
/turf/closed/wall/r_wall,
/area/science/mixing)
@@ -28518,22 +28282,6 @@
},
/turf/open/floor/iron/dark/telecomms,
/area/tcommsat/server)
-"dtg" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"dti" = (
/obj/structure/closet/bombcloset,
/obj/effect/turf_decal/stripes/line{
@@ -28840,57 +28588,6 @@
},
/turf/open/floor/carpet,
/area/command/bridge)
-"duz" = (
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/machinery/airalarm/directional/west,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
-"duD" = (
-/obj/structure/chair/office/light{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
-"duE" = (
-/obj/machinery/computer/nanite_chamber_control{
- dir = 8
- },
-/obj/structure/sign/poster/random{
- pixel_x = 32
- },
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"duF" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -29129,6 +28826,12 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/turf/open/floor/iron,
/area/science/mixing)
+"dwo" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/science/misc_lab)
"dwt" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable,
@@ -32805,6 +32508,13 @@
heat_capacity = 1e+006
},
/area/maintenance/port/aft)
+"dMi" = (
+/obj/machinery/disposal/bin,
+/obj/structure/disposalpipe/trunk{
+ dir = 1
+ },
+/turf/open/floor/iron/white,
+/area/science/misc_lab)
"dMt" = (
/obj/structure/closet/firecloset,
/obj/machinery/light/small/directional/south,
@@ -33789,23 +33499,6 @@
},
/turf/open/floor/iron,
/area/medical/virology)
-"dQV" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/obj/effect/turf_decal/tile/purple,
-/turf/open/floor/iron/white,
-/area/science/misc_lab)
"dQW" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -34830,9 +34523,6 @@
/turf/open/floor/iron,
/area/engineering/atmos)
"dVY" = (
-/obj/structure/disposalpipe/segment{
- dir = 6
- },
/obj/structure/cable,
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -34847,6 +34537,9 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 8
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/open/floor/iron,
/area/hallway/secondary/exit/departure_lounge)
"dVZ" = (
@@ -35060,23 +34753,13 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/iron,
-/area/hallway/secondary/exit/departure_lounge)
+/turf/open/floor/iron/grimy,
+/area/service/chapel/main)
"dWU" = (
+/obj/effect/turf_decal/delivery,
/obj/structure/disposalpipe/segment{
- dir = 9
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/turf/open/floor/iron,
/area/hallway/secondary/exit/departure_lounge)
"dWV" = (
@@ -37287,12 +36970,6 @@
},
/turf/open/floor/iron,
/area/commons/fitness/recreation)
-"ehi" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 5
- },
-/turf/open/floor/iron,
-/area/science/misc_lab)
"ehq" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/neutral{
@@ -38554,20 +38231,6 @@
},
/turf/open/floor/iron/dark,
/area/science/xenobiology)
-"eAB" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"eAI" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/tile/neutral,
@@ -38955,12 +38618,6 @@
},
/turf/open/floor/iron/white,
/area/medical/virology)
-"eFU" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/open/floor/iron/grimy,
-/area/service/chapel/main)
"eFX" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable,
@@ -40690,13 +40347,6 @@
},
/turf/open/floor/iron,
/area/engineering/atmos/upper)
-"faO" = (
-/obj/effect/landmark/event_spawn,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 5
- },
-/turf/open/floor/iron,
-/area/science/misc_lab)
"faY" = (
/obj/effect/turf_decal/tile/red{
dir = 1
@@ -41090,6 +40740,13 @@
},
/turf/open/floor/iron,
/area/service/bar/atrium)
+"ffG" = (
+/obj/structure/table/reinforced,
+/obj/machinery/recharger,
+/obj/structure/cable,
+/obj/machinery/power/apc/auto_name/south,
+/turf/open/floor/iron/white,
+/area/science/misc_lab)
"ffH" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/tile/neutral{
@@ -41708,6 +41365,22 @@
},
/turf/open/floor/iron/grimy,
/area/service/theater/abandoned)
+"foP" = (
+/obj/effect/turf_decal/bot,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/table/reinforced,
+/obj/item/mmi,
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"fph" = (
/turf/open/floor/engine/vacuum,
/area/engineering/atmos/upper)
@@ -42073,29 +41746,6 @@
},
/turf/open/floor/iron,
/area/engineering/atmos/upper)
-"fuF" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/research{
- name = "Nanite Lab";
- req_access_txt = "47"
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/science/nanite)
"fuJ" = (
/obj/machinery/portable_atmospherics/canister/nitrous_oxide,
/obj/structure/cable,
@@ -42871,6 +42521,30 @@
},
/turf/open/floor/iron/dark,
/area/engineering/storage/tech)
+"fGC" = (
+/obj/machinery/door/airlock/research{
+ name = "Research Testing Range";
+ req_access_txt = "47"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/door/firedoor,
+/obj/structure/cable,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/science/misc_lab)
"fGF" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
@@ -44248,6 +43922,10 @@
},
/turf/open/floor/iron,
/area/security/prison)
+"geO" = (
+/obj/machinery/rnd/experimentor,
+/turf/open/floor/engine,
+/area/science/misc_lab)
"geT" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/tile/neutral{
@@ -44866,6 +44544,9 @@
/obj/effect/turf_decal/stripes/line{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/open/floor/iron,
/area/service/chapel/main)
"goR" = (
@@ -44890,22 +44571,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/hallway/secondary/service)
-"gpg" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/obj/machinery/door/window/brigdoor{
- dir = 4;
- name = "Test Range"
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 5
- },
-/turf/open/floor/iron,
-/area/science/misc_lab)
"gpk" = (
/obj/structure/chair/stool/directional/south,
/obj/effect/turf_decal/tile/red{
@@ -45162,12 +44827,6 @@
},
/turf/open/floor/engine/co2,
/area/engineering/atmos)
-"gsi" = (
-/obj/structure/cable,
-/obj/machinery/power/apc/auto_name/south,
-/obj/structure/filingcabinet/chestdrawer,
-/turf/open/floor/iron/white,
-/area/science/misc_lab)
"gsn" = (
/obj/machinery/door/airlock/command{
name = "Chief Medical Officer's Office";
@@ -45403,6 +45062,16 @@
},
/turf/open/floor/plating,
/area/maintenance/port/fore)
+"gve" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/effect/landmark/event_spawn,
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/floor/iron,
+/area/science/misc_lab)
"gvf" = (
/obj/effect/turf_decal/trimline/yellow/filled/warning{
dir = 4
@@ -46053,24 +45722,6 @@
},
/turf/open/floor/iron,
/area/hallway/primary/central/aft)
-"gFZ" = (
-/obj/machinery/nanite_program_hub,
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"gGK" = (
/obj/machinery/modular_computer/console/preset/id{
dir = 8
@@ -47726,30 +47377,6 @@
},
/turf/open/floor/iron/white,
/area/hallway/primary/central/aft)
-"hgS" = (
-/obj/machinery/door/airlock/research{
- name = "Circuits Testing Lab";
- req_access_txt = "47"
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/door/firedoor,
-/obj/structure/cable,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/science/misc_lab)
"hgT" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -48339,6 +47966,10 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/carpet,
/area/commons/dorms)
+"hpL" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/science/misc_lab)
"hpM" = (
/obj/structure/reagent_dispensers/fueltank,
/obj/effect/turf_decal/delivery,
@@ -48465,6 +48096,23 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/turf/open/floor/iron,
/area/security/office)
+"hrL" = (
+/obj/structure/disposalpipe/trunk{
+ dir = 1
+ },
+/obj/machinery/disposal/bin,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"hrT" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -50013,12 +49661,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/plating,
/area/maintenance/port/fore)
-"hOV" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/turf/open/floor/iron/white,
-/area/science/misc_lab)
"hOZ" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -52002,22 +51644,6 @@
/obj/machinery/power/apc/auto_name/west,
/turf/open/floor/iron,
/area/cargo/sorting)
-"imL" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 1
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"imN" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/neutral{
@@ -52111,6 +51737,16 @@
/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/command/gateway)
+"iod" = (
+/obj/structure/table/reinforced,
+/obj/machinery/camera{
+ c_tag = "Science - Experimentation Lab";
+ name = "science camera";
+ network = list("ss13","rd")
+ },
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/open/floor/iron,
+/area/science/misc_lab)
"iog" = (
/obj/item/clothing/suit/hazardvest{
desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks.";
@@ -52871,6 +52507,10 @@
},
/turf/open/floor/iron/dark,
/area/security/interrogation)
+"iyK" = (
+/obj/effect/turf_decal/tile/purple,
+/turf/closed/wall/r_wall,
+/area/science/misc_lab)
"iyX" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -53939,18 +53579,6 @@
/obj/machinery/power/apc/auto_name/east,
/turf/open/floor/iron,
/area/cargo/miningoffice)
-"iNP" = (
-/obj/structure/sign/poster/official/build{
- pixel_y = -32
- },
-/obj/structure/table/reinforced,
-/obj/machinery/recharger,
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/turf/open/floor/iron/white,
-/area/science/misc_lab)
"iNS" = (
/obj/structure/chair/office{
dir = 4
@@ -54463,6 +54091,25 @@
},
/turf/open/floor/iron/white,
/area/science/research)
+"iTT" = (
+/obj/structure/table/reinforced,
+/obj/effect/turf_decal/bot,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/item/radio/intercom/directional/west,
+/obj/item/storage/toolbox/electrical{
+ pixel_y = 3
+ },
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"iUx" = (
/obj/effect/turf_decal/tile/blue,
/obj/effect/turf_decal/tile/blue{
@@ -54861,6 +54508,22 @@
/obj/structure/cable,
/turf/open/floor/iron/grimy,
/area/command/heads_quarters/hos)
+"jca" = (
+/obj/machinery/light/directional/east,
+/obj/machinery/light_switch/directional/east,
+/obj/effect/turf_decal/loading_area,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"jcj" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 4
@@ -56804,6 +56467,10 @@
},
/turf/open/floor/iron/grimy,
/area/command/heads_quarters/captain)
+"jER" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron,
+/area/science/misc_lab)
"jES" = (
/obj/structure/table/reinforced,
/obj/item/folder/yellow,
@@ -57053,19 +56720,6 @@
/obj/item/pen,
/turf/open/floor/iron/grimy,
/area/command/bridge)
-"jHZ" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 4
- },
-/obj/effect/landmark/xeno_spawn,
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 5
- },
-/turf/open/floor/iron,
-/area/science/misc_lab)
"jId" = (
/obj/structure/table/wood,
/obj/item/lipstick/random{
@@ -58108,17 +57762,6 @@
/obj/machinery/light_switch/directional/south,
/turf/open/floor/wood,
/area/command/meeting_room/council)
-"jWm" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron,
-/area/hallway/secondary/exit/departure_lounge)
"jWo" = (
/obj/structure/cable,
/turf/open/floor/iron{
@@ -59302,15 +58945,6 @@
},
/turf/open/floor/engine/n2,
/area/engineering/atmos)
-"kon" = (
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/turf/open/floor/iron,
-/area/science/misc_lab)
"kot" = (
/obj/structure/sign/warning/securearea,
/turf/closed/wall,
@@ -60241,6 +59875,20 @@
},
/turf/open/floor/iron,
/area/engineering/break_room)
+"kzS" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"kAa" = (
/obj/structure/table/wood/poker,
/obj/item/storage/box/matches{
@@ -62030,6 +61678,10 @@
},
/turf/open/floor/iron,
/area/service/bar/atrium)
+"kYl" = (
+/obj/machinery/airalarm/directional/north,
+/turf/open/floor/iron/white,
+/area/science/misc_lab)
"kYo" = (
/obj/effect/turf_decal/bot,
/obj/machinery/firealarm/directional/north,
@@ -63854,6 +63506,29 @@
/obj/structure/reagent_dispensers/peppertank/directional/west,
/turf/open/floor/iron/dark,
/area/command/heads_quarters/hos)
+"luI" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/research{
+ name = "Circuits Lab";
+ req_access_txt = "47"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/science/misc_lab)
"lvk" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock{
@@ -63903,6 +63578,20 @@
},
/turf/open/floor/iron,
/area/engineering/atmos)
+"lvX" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"lvY" = (
/obj/structure/table/wood,
/obj/item/flashlight/lamp/green,
@@ -65220,6 +64909,22 @@
},
/turf/open/floor/iron,
/area/cargo/office)
+"lPk" = (
+/obj/machinery/camera{
+ c_tag = "Science - Firing Range";
+ name = "science camera";
+ network = list("ss13","rd")
+ },
+/obj/structure/table/reinforced,
+/obj/item/clothing/ears/earmuffs,
+/obj/item/clothing/ears/earmuffs,
+/obj/item/gun/energy/laser/practice,
+/obj/item/gun/energy/laser/practice{
+ pixel_x = 3;
+ pixel_y = -3
+ },
+/turf/open/floor/iron/white,
+/area/science/misc_lab)
"lPn" = (
/obj/structure/chair/comfy/brown{
buildstackamount = 0;
@@ -66638,6 +66343,11 @@
},
/turf/open/floor/plating,
/area/service/abandoned_gambling_den)
+"mhV" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/girder,
+/turf/open/floor/plating,
+/area/science/misc_lab)
"mhX" = (
/obj/machinery/camera{
c_tag = "Art Gallery";
@@ -67657,6 +67367,12 @@
},
/turf/open/floor/wood,
/area/commons/vacant_room/office)
+"muj" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 5
+ },
+/turf/open/floor/iron,
+/area/science/misc_lab)
"muI" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/tile/brown{
@@ -68497,6 +68213,9 @@
/obj/effect/decal/cleanable/cobweb,
/turf/open/floor/wood,
/area/service/library/abandoned)
+"mHE" = (
+/turf/open/floor/engine,
+/area/science/misc_lab)
"mHH" = (
/obj/effect/decal/cleanable/dirt,
/obj/item/kirbyplants/random,
@@ -68870,21 +68589,6 @@
},
/turf/open/floor/iron,
/area/commons/vacant_room/commissary)
-"mLZ" = (
-/obj/structure/closet/crate,
-/obj/item/target/alien,
-/obj/item/target/alien,
-/obj/item/target/clown,
-/obj/item/target/clown,
-/obj/item/target/syndicate,
-/obj/item/gun/energy/laser/practice,
-/obj/item/gun/energy/laser/practice,
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/obj/effect/turf_decal/tile/purple,
-/turf/open/floor/iron/white,
-/area/science/misc_lab)
"mMg" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/green,
@@ -69084,18 +68788,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/commons/toilet/restrooms)
-"mPh" = (
-/obj/structure/table/reinforced,
-/obj/item/clothing/ears/earmuffs,
-/obj/item/clothing/ears/earmuffs,
-/obj/item/gun/energy/laser/practice,
-/obj/item/gun/energy/laser/practice{
- pixel_x = 3;
- pixel_y = -3
- },
-/obj/structure/window/reinforced,
-/turf/open/floor/iron/white,
-/area/science/misc_lab)
"mPo" = (
/obj/machinery/research/explosive_compressor,
/obj/effect/turf_decal/bot,
@@ -70823,6 +70515,35 @@
},
/turf/open/floor/iron/dark,
/area/command/heads_quarters/hos)
+"nku" = (
+/obj/structure/table/reinforced,
+/obj/machinery/camera{
+ c_tag = "Research Division - Circuits Lab";
+ dir = 4;
+ name = "science camera";
+ network = list("ss13","rd")
+ },
+/obj/effect/turf_decal/bot,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/item/multitool{
+ pixel_x = -4;
+ pixel_y = -2
+ },
+/obj/item/multitool{
+ pixel_x = 4;
+ pixel_y = 2
+ },
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"nkz" = (
/obj/structure/table/wood,
/obj/item/flashlight/lamp,
@@ -72951,6 +72672,10 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/engineering/atmos/upper)
+"nNa" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/iron,
+/area/science/misc_lab)
"nNm" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/filingcabinet/filingcabinet,
@@ -73452,37 +73177,6 @@
/obj/structure/sign/warning/radiation,
/turf/closed/wall/r_wall,
/area/engineering/gravity_generator)
-"nTq" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/door/airlock/research{
- name = "Genetics Lab";
- req_access_txt = "9"
- },
-/obj/machinery/door/firedoor,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 8
- },
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"nTx" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -73696,18 +73390,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/maintenance/port/fore)
-"nUV" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/table/reinforced,
-/obj/item/multitool/circuit{
- pixel_x = 7
- },
-/obj/item/multitool/circuit,
-/obj/item/multitool/circuit{
- pixel_x = -8
- },
-/turf/open/floor/iron/white,
-/area/science/misc_lab)
"nUZ" = (
/obj/machinery/holopad,
/obj/structure/cable,
@@ -75094,10 +74776,6 @@
},
/turf/open/floor/iron/white,
/area/hallway/primary/central/aft)
-"oly" = (
-/obj/machinery/modular_computer/console/preset/civilian,
-/turf/open/floor/iron/white,
-/area/science/misc_lab)
"olC" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -75416,6 +75094,24 @@
},
/turf/open/floor/iron/dark,
/area/engineering/atmos)
+"ooQ" = (
+/obj/effect/turf_decal/bot,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/airalarm/directional/west,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/cell/high,
+/obj/structure/table/reinforced,
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"ooT" = (
/obj/effect/spawner/randomsnackvend,
/obj/effect/turf_decal/tile/red{
@@ -75471,6 +75167,22 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/cargo/sorting)
+"ops" = (
+/obj/effect/turf_decal/bot,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/table/reinforced,
+/obj/item/controller,
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"opA" = (
/obj/effect/turf_decal/tile/yellow{
dir = 4
@@ -76064,7 +75776,9 @@
/turf/open/floor/iron,
/area/cargo/warehouse)
"oyj" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
/turf/open/floor/iron/grimy,
/area/service/chapel/main)
"oyx" = (
@@ -76293,6 +76007,11 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/security/prison)
+"oBr" = (
+/obj/machinery/light/directional/north,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
+/turf/open/floor/iron/white,
+/area/science/misc_lab)
"oBs" = (
/turf/closed/wall,
/area/cargo/qm)
@@ -76590,6 +76309,29 @@
},
/turf/open/floor/iron,
/area/maintenance/starboard/fore)
+"oFz" = (
+/obj/structure/table/reinforced,
+/obj/effect/turf_decal/bot,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/firealarm/directional/west,
+/obj/item/multitool/circuit{
+ pixel_x = 7
+ },
+/obj/item/multitool/circuit{
+ pixel_x = -8
+ },
+/obj/item/multitool/circuit,
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"oFE" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/tile/neutral,
@@ -77161,6 +76903,9 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
dir = 8
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/open/floor/iron,
/area/hallway/secondary/exit/departure_lounge)
"oLh" = (
@@ -78461,6 +78206,20 @@
},
/turf/open/floor/iron,
/area/engineering/main)
+"pbQ" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"pcq" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/door/airlock/maintenance_hatch{
@@ -78884,6 +78643,21 @@
},
/turf/open/floor/iron,
/area/hallway/secondary/command)
+"pkr" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/component_printer,
+/obj/effect/turf_decal/bot,
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"pkx" = (
/obj/effect/turf_decal/tile/green,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -80798,32 +80572,6 @@
/obj/effect/landmark/start/hangover,
/turf/open/floor/iron,
/area/hallway/primary/port)
-"pLc" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/cable,
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"pLf" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
@@ -81105,6 +80853,28 @@
},
/turf/open/floor/iron/dark/corner,
/area/maintenance/disposal/incinerator)
+"pPE" = (
+/obj/structure/disposalpipe/junction{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"pPX" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/landmark/start/hangover,
@@ -81252,6 +81022,19 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/service/abandoned_gambling_den)
+"pRL" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"pRW" = (
/obj/machinery/computer/slot_machine,
/obj/effect/decal/cleanable/dirt,
@@ -82208,25 +81991,6 @@
},
/turf/open/floor/iron,
/area/science/research)
-"qdJ" = (
-/obj/machinery/nanite_programmer,
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"qdO" = (
/obj/machinery/light/directional/south,
/obj/structure/table/reinforced,
@@ -83738,15 +83502,6 @@
/obj/machinery/light_switch/directional/east,
/turf/open/floor/circuit/green,
/area/engineering/main)
-"qyo" = (
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/science/misc_lab)
"qyu" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -84418,10 +84173,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/hallway/secondary/entry)
-"qGq" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
-/turf/open/floor/iron,
-/area/science/misc_lab)
"qGs" = (
/obj/machinery/light/directional/west,
/obj/machinery/camera{
@@ -84698,6 +84449,12 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/iron,
/area/engineering/main)
+"qKy" = (
+/obj/structure/chair/office/light{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/science/misc_lab)
"qKC" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -85501,22 +85258,6 @@
},
/turf/open/floor/iron,
/area/cargo/storage)
-"qUc" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"qUh" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -88539,18 +88280,6 @@
/obj/machinery/airalarm/directional/east,
/turf/open/floor/iron,
/area/science/research)
-"rKf" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/rack,
-/obj/item/controller,
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/obj/effect/turf_decal/tile/purple,
-/obj/item/compact_remote,
-/obj/item/compact_remote,
-/turf/open/floor/iron/white,
-/area/science/misc_lab)
"rKh" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
@@ -88825,6 +88554,17 @@
dir = 1
},
/area/hallway/secondary/entry)
+"rMT" = (
+/obj/structure/closet/crate,
+/obj/item/target/alien,
+/obj/item/target/alien,
+/obj/item/target/clown,
+/obj/item/target/clown,
+/obj/item/target/syndicate,
+/obj/item/gun/energy/laser/practice,
+/obj/item/gun/energy/laser/practice,
+/turf/open/floor/iron/white,
+/area/science/misc_lab)
"rMV" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
@@ -88939,6 +88679,10 @@
},
/turf/open/floor/iron,
/area/cargo/storage)
+"rOQ" = (
+/obj/structure/table/reinforced,
+/turf/open/floor/iron,
+/area/science/misc_lab)
"rPb" = (
/obj/machinery/light/directional/east,
/obj/effect/turf_decal/tile/neutral{
@@ -89769,19 +89513,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white,
/area/medical/medbay/central)
-"saJ" = (
-/obj/structure/table/reinforced,
-/obj/item/storage/toolbox/electrical{
- pixel_y = 5
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/turf/open/floor/iron/white,
-/area/science/misc_lab)
"saQ" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/virology{
@@ -90530,6 +90261,12 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/hallway/secondary/entry)
+"sle" = (
+/obj/structure/sign/poster/random{
+ pixel_x = 32
+ },
+/turf/open/floor/engine,
+/area/science/misc_lab)
"slt" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 4
@@ -92663,15 +92400,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white,
/area/medical/virology)
-"sKO" = (
-/obj/structure/sign/poster/official/random{
- pixel_y = 32
- },
-/obj/structure/rack,
-/obj/item/integrated_circuit/loaded/speech_relay,
-/obj/item/integrated_circuit/loaded/hello_world,
-/turf/open/floor/iron/white,
-/area/science/misc_lab)
"sKP" = (
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/iron,
@@ -92989,6 +92717,20 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/plating,
/area/maintenance/port/fore)
+"sPX" = (
+/obj/item/kirbyplants/random,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"sQk" = (
/obj/machinery/light/directional/east,
/obj/effect/turf_decal/tile/yellow{
@@ -93163,6 +92905,12 @@
},
/turf/open/floor/iron,
/area/maintenance/starboard/aft)
+"sSW" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/science/misc_lab)
"sTm" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/public/glass{
@@ -93448,6 +93196,26 @@
},
/turf/open/floor/iron,
/area/security/office)
+"sWs" = (
+/obj/structure/sign/poster/random{
+ pixel_y = 32
+ },
+/obj/effect/turf_decal/bot,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/rack,
+/obj/item/integrated_circuit/loaded/speech_relay,
+/obj/item/integrated_circuit/loaded/hello_world,
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"sWu" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -93545,6 +93313,21 @@
},
/turf/open/floor/iron,
/area/cargo/miningoffice)
+"sXf" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/loading_area,
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"sXh" = (
/obj/structure/transit_tube/horizontal,
/obj/effect/turf_decal/tile/neutral{
@@ -95204,13 +94987,6 @@
},
/turf/open/floor/iron,
/area/maintenance/starboard/fore)
-"tuj" = (
-/obj/structure/chair/office/light{
- dir = 1;
- pixel_y = 3
- },
-/turf/open/floor/iron/white,
-/area/science/misc_lab)
"tuq" = (
/obj/effect/landmark/event_spawn,
/obj/effect/turf_decal/tile/red{
@@ -96629,9 +96405,6 @@
/obj/machinery/door/airlock/grunge{
name = "Chapel Hall"
},
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
/obj/effect/turf_decal/stripes/line{
dir = 8
},
@@ -96761,6 +96534,37 @@
},
/turf/open/floor/iron,
/area/engineering/atmos)
+"tNB" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/door/airlock/research{
+ name = "Genetics Lab";
+ req_access_txt = "9"
+ },
+/obj/machinery/door/firedoor,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"tNO" = (
/obj/structure/table/wood,
/obj/item/taperecorder,
@@ -98748,6 +98552,25 @@
},
/turf/open/floor/iron,
/area/hallway/primary/central/fore)
+"uqk" = (
+/obj/machinery/power/apc/auto_name/west,
+/obj/structure/cable,
+/obj/effect/turf_decal/bot,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/table/reinforced,
+/obj/item/compact_remote,
+/obj/item/compact_remote,
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"uqr" = (
/obj/structure/table/wood,
/obj/item/newspaper{
@@ -99772,6 +99595,13 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/turf/open/floor/iron/grimy,
/area/command/heads_quarters/hos)
+"uCC" = (
+/obj/structure/sign/poster/official/random{
+ pixel_y = 32
+ },
+/obj/structure/rack,
+/turf/open/floor/iron,
+/area/science/misc_lab)
"uCT" = (
/obj/structure/table/reinforced,
/obj/machinery/door/firedoor,
@@ -100226,6 +100056,21 @@
},
/turf/open/floor/iron,
/area/command/heads_quarters/ce)
+"uIy" = (
+/obj/effect/landmark/start/scientist,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/corner,
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"uID" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -100297,10 +100142,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/closed/wall/r_wall,
/area/ai_monitored/turret_protected/ai)
-"uJJ" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
-/turf/open/floor/iron/white,
-/area/science/misc_lab)
"uJK" = (
/obj/machinery/button/crematorium{
id = "cremawheat";
@@ -100476,6 +100317,20 @@
heat_capacity = 1e+006
},
/area/commons/fitness/recreation)
+"uMh" = (
+/obj/effect/landmark/xeno_spawn,
+/obj/machinery/door/window/brigdoor{
+ dir = 4;
+ name = "Test Range"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/science/misc_lab)
"uMi" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -101102,6 +100957,10 @@
},
/turf/open/floor/iron,
/area/cargo/storage)
+"uWD" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/science/misc_lab)
"uWH" = (
/obj/structure/table/wood,
/obj/item/storage/photo_album,
@@ -101527,18 +101386,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/wood,
/area/command/heads_quarters/captain)
-"veb" = (
-/obj/machinery/disposal/bin,
-/obj/structure/disposalpipe/trunk{
- dir = 1
- },
-/obj/machinery/light/directional/south,
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/turf/open/floor/iron/white,
-/area/science/misc_lab)
"vec" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/tank_holder/emergency_oxygen,
@@ -102381,6 +102228,21 @@
},
/turf/open/floor/iron,
/area/cargo/miningoffice)
+"voj" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/bot,
+/obj/machinery/module_duplicator,
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"voq" = (
/obj/structure/disposalpipe/segment,
/obj/effect/turf_decal/tile/purple{
@@ -102842,20 +102704,6 @@
},
/turf/open/floor/iron,
/area/service/hydroponics)
-"vwU" = (
-/obj/effect/landmark/start/scientist,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"vxa" = (
/obj/structure/cable,
/turf/open/floor/iron,
@@ -103731,13 +103579,6 @@
/obj/machinery/atmospherics/pipe/layer_manifold/cyan/visible,
/turf/open/floor/iron,
/area/engineering/supermatter/room)
-"vJu" = (
-/obj/machinery/door/airlock/maintenance_hatch{
- name = "Nanite Lab Maintenance";
- req_access_txt = "47"
- },
-/turf/open/floor/plating,
-/area/maintenance/port)
"vJB" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/door/morgue{
@@ -104632,6 +104473,13 @@
},
/turf/open/floor/iron,
/area/cargo/sorting)
+"vUT" = (
+/obj/machinery/door/airlock/maintenance_hatch{
+ name = "Circuits Lab Maintenance";
+ req_access_txt = "47"
+ },
+/turf/open/floor/plating,
+/area/maintenance/port)
"vVc" = (
/obj/structure/lattice/catwalk,
/turf/open/space/basic,
@@ -105167,28 +105015,6 @@
},
/turf/open/floor/carpet,
/area/service/chapel/office)
-"wbX" = (
-/obj/structure/table/reinforced,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high/plus{
- pixel_x = 5;
- pixel_y = 10
- },
-/obj/item/stock_parts/cell/high/plus,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/obj/machinery/camera{
- c_tag = "Research Division - Circuits";
- dir = 4;
- name = "science camera";
- network = list("ss13","rd")
- },
-/turf/open/floor/iron/white,
-/area/science/misc_lab)
"wcg" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/landmark/xeno_spawn,
@@ -105674,23 +105500,6 @@
},
/turf/open/floor/iron/dark,
/area/ai_monitored/aisat/exterior)
-"wjF" = (
-/obj/structure/chair/office/light{
- dir = 1;
- pixel_y = 3
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"wjG" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/delivery,
@@ -107410,6 +107219,9 @@
},
/turf/open/floor/iron/dark,
/area/ai_monitored/aisat/exterior)
+"wId" = (
+/turf/open/floor/plating,
+/area/science/misc_lab)
"wIn" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -107624,6 +107436,11 @@
dir = 1
},
/area/engineering/atmos)
+"wMH" = (
+/obj/structure/table/reinforced,
+/obj/machinery/cell_charger,
+/turf/open/floor/iron,
+/area/science/misc_lab)
"wMU" = (
/obj/machinery/button/flasher{
id = "Cell 5";
@@ -108031,22 +107848,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/plating,
/area/maintenance/starboard)
-"wTa" = (
-/obj/machinery/computer/nanite_cloud_controller,
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/stripes/line,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"wTb" = (
/obj/machinery/vending/cigarette,
/obj/effect/turf_decal/tile/neutral{
@@ -108282,26 +108083,6 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/iron,
/area/engineering/storage)
-"wVN" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 1
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"wWd" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible,
/obj/effect/turf_decal/tile/yellow{
@@ -108521,6 +108302,23 @@
},
/turf/open/floor/iron,
/area/maintenance/solars/port/aft)
+"wZp" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"wZs" = (
/obj/effect/spawner/structure/window/plasma/reinforced,
/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible,
@@ -109446,12 +109244,6 @@
},
/turf/open/floor/iron/dark,
/area/service/library)
-"xnL" = (
-/obj/structure/disposalpipe/segment{
- dir = 6
- },
-/turf/open/floor/iron/grimy,
-/area/service/chapel/main)
"xnP" = (
/obj/effect/turf_decal/bot,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -109480,28 +109272,6 @@
},
/turf/open/floor/iron,
/area/service/hydroponics)
-"xot" = (
-/obj/structure/disposalpipe/junction{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"xox" = (
/obj/effect/turf_decal/tile/yellow{
dir = 8
@@ -109511,17 +109281,6 @@
},
/turf/open/floor/iron/dark/corner,
/area/engineering/atmos)
-"xoY" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/delivery,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 5
- },
-/turf/open/floor/iron/white,
-/area/science/misc_lab)
"xpb" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable,
@@ -109789,6 +109548,14 @@
},
/turf/open/floor/iron/grimy,
/area/service/chapel/office)
+"xsp" = (
+/obj/machinery/door/airlock/maintenance_hatch{
+ name = "Maintenance Hatch";
+ req_one_access_txt = "12;47"
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron,
+/area/science/misc_lab)
"xsP" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/disposalpipe/segment{
@@ -110986,6 +110753,14 @@
},
/turf/open/floor/iron,
/area/command/heads_quarters/rd)
+"xKi" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/delivery,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/turf/open/floor/iron/white,
+/area/science/misc_lab)
"xKt" = (
/obj/structure/filingcabinet/employment,
/obj/machinery/airalarm/directional/east,
@@ -111035,9 +110810,6 @@
/obj/machinery/atmospherics/components/binary/thermomachine/freezer,
/turf/open/floor/iron,
/area/science/mixing)
-"xLa" = (
-/turf/open/floor/iron/white,
-/area/science/misc_lab)
"xLd" = (
/obj/machinery/holopad,
/obj/effect/turf_decal/tile/neutral{
@@ -112126,32 +111898,6 @@
},
/turf/open/floor/iron,
/area/hallway/secondary/command)
-"ybh" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/cable,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"ybi" = (
/turf/open/floor/iron/grimy,
/area/command/heads_quarters/hos)
@@ -112800,6 +112546,23 @@
},
/turf/open/floor/iron,
/area/command/heads_quarters/cmo)
+"ykV" = (
+/obj/structure/table/reinforced,
+/obj/effect/turf_decal/bot,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/item/paper_bin,
+/obj/item/pen,
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"ykY" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/tile/yellow{
@@ -137533,11 +137296,11 @@ exk
swm
pfQ
tCh
+crF
+rOQ
+gSi
map
vGv
-vGv
-vGv
-vGv
lmF
gSi
dul
@@ -137790,10 +137553,10 @@ ced
wXQ
moY
tCh
+iod
+qKy
+gSi
mLI
-xKO
-xKO
-xKO
bfJ
aST
gSi
@@ -138047,11 +137810,11 @@ cMY
ceb
moY
tCh
+wMH
+nNa
+gSi
uRm
-qGq
-ehi
-ehi
-faO
+xKO
aST
gSi
dlg
@@ -138304,11 +138067,11 @@ cMY
cea
kEw
tCh
+nNa
+nNa
+gSi
mLI
xKO
-xKO
-xKO
-ehi
mGu
gSi
dum
@@ -138560,12 +138323,12 @@ dcb
cMY
cea
laE
-tCh
-kon
-qyo
-qyo
-qyo
-jHZ
+xsp
+jER
+muj
+gSi
+mLI
+sSW
aST
gSi
yjc
@@ -138818,11 +138581,11 @@ cMY
deX
aiu
tCh
-nUV
-saJ
-wbX
-mPh
-gpg
+nNa
+dwo
+gSi
+gve
+uMh
nGU
gSi
dun
@@ -139075,12 +138838,12 @@ cMY
deX
joJ
tCh
-oly
-tuj
-xLa
-xLa
-xoY
-gsi
+mhV
+ccN
+gSi
+lPk
+xKi
+ffG
gSi
duo
dmu
@@ -139332,12 +139095,12 @@ cMY
deY
oAw
tCh
-bLH
-bly
-xLa
-uJJ
+wId
+xKO
+gSi
+oBr
ifR
-veb
+dMi
gSi
dup
dlg
@@ -139589,12 +139352,12 @@ cMY
cjp
hST
tCh
-cGu
-hOV
-hOV
-hOV
+wId
+wId
+gSi
+kYl
oox
-iNP
+bNG
gSi
duq
dlh
@@ -139846,11 +139609,11 @@ cMY
deZ
joJ
tCh
-sKO
-rKf
-bhD
-mLZ
-dQV
+uCC
+uWD
+iyK
+rMT
+oox
qhk
gSi
dur
@@ -140107,7 +139870,7 @@ tCh
tCh
gSi
sUT
-hgS
+fGC
gSi
gSi
dus
@@ -142673,16 +142436,16 @@ cNd
cOM
dgt
cMY
-djF
-djF
-djF
-nTq
-djF
-djF
-djF
-djF
-djF
-djF
+gSi
+gSi
+gSi
+tNB
+gSi
+gSi
+gSi
+gSi
+gSi
+gSi
cxO
oFE
caE
@@ -142930,16 +142693,16 @@ ddR
cNd
cNd
cMY
-djG
-dlt
-dmG
-ybh
-dqo
-drM
-gFZ
-duz
-wTa
-djF
+foP
+uqk
+ops
+aNy
+oFz
+iTT
+nku
+ooQ
+ykV
+gSi
dzp
pxk
caE
@@ -143187,16 +142950,16 @@ vHZ
vHZ
vHZ
cMY
-djH
-dlu
-dmH
-pLc
-drN
-vwU
-dtg
-dtg
-dtg
-vJu
+voj
+sXf
+kzS
+aNy
+pRL
+uIy
+bTz
+bTz
+bTz
+vUT
cxN
wJa
dBY
@@ -143444,16 +143207,16 @@ cNd
cON
eAA
cMY
-djI
-wjF
-dmI
-wVN
-eAB
-imL
-drN
-duD
-qUc
-djF
+sWs
+pRL
+pbQ
+aCt
+lvX
+wZp
+mHE
+geO
+mHE
+gSi
dzo
oks
exk
@@ -143701,16 +143464,16 @@ ddR
cNd
cNd
cMY
-djJ
-dlv
-dmJ
-xot
-dqr
-drO
-djJ
-duE
-qdJ
-djF
+pkr
+jca
+sPX
+pPE
+hrL
+aEM
+mHE
+sle
+mHE
+gSi
tbn
cjq
dBZ
@@ -143958,16 +143721,16 @@ cNc
cMY
cMY
dhU
-djK
-djK
-dmF
-fuF
-dmF
-djF
-djF
-djF
-djF
-djF
+tCh
+tCh
+hpL
+luI
+hpL
+gSi
+gSi
+gSi
+gSi
+gSi
drP
drP
drP
@@ -148614,7 +148377,7 @@ gKO
dYu
nlB
noK
-xnL
+hPv
oyj
nqU
rPJ
@@ -148871,8 +148634,8 @@ vcI
dSJ
nlB
yjE
-eFU
hPv
+dWS
lJI
dTS
iWi
@@ -149386,8 +149149,8 @@ dST
dTJ
dUB
dVl
+dWU
dVl
-dWS
tpS
dVl
dZn
@@ -149644,7 +149407,7 @@ sCL
vHW
vHW
oLg
-jWm
+gzW
gzW
gzW
gzW
@@ -149901,7 +149664,7 @@ dTE
dUx
dUx
dVY
-dWU
+dUx
dUx
dUx
dUx
diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm
index da42c20b8a..8a59befed3 100644
--- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm
+++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm
@@ -7972,20 +7972,6 @@
},
/turf/open/floor/iron,
/area/hallway/secondary/entry)
-"aQx" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
-"aQy" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"aQB" = (
/obj/structure/sign/warning/securearea{
pixel_x = 32
@@ -8090,6 +8076,16 @@
icon_state = "damaged2"
},
/area/icemoon/surface/outdoors)
+"aRs" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/structure/flora/rock/pile/icy{
+ pixel_x = 6;
+ pixel_y = 4
+ },
+/turf/open/floor/plating/asteroid/snow/standard_air,
+/area/science/research)
"aRK" = (
/turf/open/floor/iron,
/area/command/heads_quarters/ce)
@@ -10264,6 +10260,9 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/white,
/area/science/lab)
+"bia" = (
+/turf/open/floor/plating/asteroid/snow/standard_air,
+/area/science/research)
"bic" = (
/obj/item/radio/intercom/directional/north,
/obj/structure/table/glass,
@@ -17434,10 +17433,6 @@
},
/turf/open/floor/iron,
/area/science/misc_lab)
-"cbe" = (
-/obj/effect/turf_decal/bot,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"cbh" = (
/obj/structure/table,
/obj/item/folder/white,
@@ -21372,6 +21367,12 @@
/obj/item/reagent_containers/food/drinks/flask/gold,
/turf/open/floor/carpet,
/area/command/heads_quarters/captain)
+"dky" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/snow/standard_air,
+/area/science/research)
"dkZ" = (
/obj/machinery/light/small/directional/west,
/mob/living/simple_animal/mouse/brown/tom,
@@ -21911,12 +21912,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/cafeteria,
/area/service/kitchen)
-"dFk" = (
-/obj/machinery/nanite_program_hub,
-/obj/effect/turf_decal/bot,
-/obj/machinery/airalarm/directional/south,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"dFo" = (
/obj/effect/turf_decal/trimline/blue/corner{
dir = 8
@@ -22504,7 +22499,6 @@
dir = 8
},
/obj/structure/table,
-/obj/item/stamp/qm,
/obj/item/pen/red,
/obj/item/pen{
pixel_x = 4;
@@ -22590,9 +22584,6 @@
},
/turf/open/floor/plating/snowed/icemoon,
/area/icemoon/surface/outdoors)
-"dYq" = (
-/turf/closed/wall,
-/area/science/nanite)
"dYC" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
@@ -22922,13 +22913,6 @@
},
/turf/open/floor/iron,
/area/commons/dorms)
-"eja" = (
-/obj/effect/turf_decal/bot,
-/obj/machinery/computer/nanite_chamber_control{
- dir = 4
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"ejg" = (
/obj/structure/disposalpipe/segment{
dir = 6
@@ -23153,12 +23137,6 @@
},
/turf/open/floor/iron/dark,
/area/medical/virology)
-"epI" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/science/nanite)
"epN" = (
/obj/machinery/atmospherics/components/trinary/filter/atmos/n2{
dir = 4
@@ -23244,6 +23222,10 @@
/obj/machinery/light_switch/directional/east,
/turf/open/floor/iron,
/area/security/processing)
+"esv" = (
+/obj/machinery/module_duplicator,
+/turf/open/floor/iron,
+/area/science/misc_lab)
"esy" = (
/obj/structure/table/wood,
/obj/item/paper_bin{
@@ -23467,6 +23449,12 @@
},
/turf/open/floor/iron,
/area/engineering/main)
+"eAd" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/snow/standard_air,
+/area/science/research)
"eAh" = (
/obj/machinery/airalarm/directional/east,
/obj/machinery/light/directional/east,
@@ -23644,6 +23632,15 @@
/obj/effect/decal/cleanable/blood/old,
/turf/open/floor/iron,
/area/maintenance/port/fore)
+"eGA" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/snow/standard_air,
+/area/science/research)
"eGU" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
dir = 8
@@ -24105,6 +24102,13 @@
/obj/machinery/light/small/directional/east,
/turf/open/openspace/icemoon,
/area/security/execution/transfer)
+"eXz" = (
+/obj/effect/turf_decal/bot,
+/obj/structure/frame/machine{
+ anchored = 1
+ },
+/turf/open/floor/iron/dark,
+/area/science/research)
"eXP" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -24260,6 +24264,10 @@
"fbm" = (
/turf/open/floor/iron,
/area/command/heads_quarters/rd)
+"fbx" = (
+/obj/effect/turf_decal/bot,
+/turf/open/floor/iron/dark,
+/area/science/research)
"fbH" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -24290,6 +24298,12 @@
},
/turf/open/floor/plating,
/area/engineering/storage/tech)
+"fcy" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/snow/standard_air,
+/area/science/research)
"fdf" = (
/obj/machinery/power/apc/auto_name/west,
/obj/machinery/camera{
@@ -24765,6 +24779,17 @@
/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/plating,
/area/ai_monitored/turret_protected/aisat/maint)
+"frS" = (
+/obj/structure/table,
+/obj/machinery/requests_console/directional/east{
+ department = "Circuits Lab";
+ departmentType = 2;
+ name = "Circuits Lab Requests Console";
+ receive_ore_updates = 1
+ },
+/obj/item/clothing/shoes/wheelys/skishoes,
+/turf/open/floor/iron/dark,
+/area/science/research)
"frW" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
@@ -26432,15 +26457,6 @@
"gnP" = (
/turf/closed/wall,
/area/cargo/storage)
-"gnX" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/structure/chair/office/light{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/science/nanite)
"gor" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -26699,12 +26715,6 @@
},
/turf/open/floor/iron,
/area/ai_monitored/command/storage/eva)
-"gwd" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/science/nanite)
"gxp" = (
/obj/machinery/light_switch/directional/north,
/obj/structure/cable,
@@ -27030,6 +27040,19 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/commons/fitness)
+"gHf" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/statue/snow/snowman{
+ pixel_x = 6
+ },
+/obj/item/toy/snowball{
+ pixel_x = 16;
+ pixel_y = 4
+ },
+/turf/open/floor/plating/asteroid/snow/standard_air,
+/area/science/research)
"gHj" = (
/obj/effect/turf_decal/tile/purple{
dir = 1
@@ -27183,12 +27206,6 @@
/obj/machinery/firealarm/directional/east,
/turf/open/floor/plating,
/area/security/prison/safe)
-"gLd" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"gLf" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/door/poddoor/preopen{
@@ -27472,6 +27489,17 @@
/obj/structure/cable,
/turf/open/floor/iron/white,
/area/science/robotics/lab)
+"gTG" = (
+/obj/structure/statue/snow/snowman,
+/obj/item/toy/snowball{
+ pixel_x = -10;
+ pixel_y = 4
+ },
+/obj/item/food/snowcones/pwrgame{
+ pixel_x = 12
+ },
+/turf/open/floor/plating/asteroid/snow/standard_air,
+/area/science/research)
"gTH" = (
/obj/structure/rack,
/obj/item/clothing/shoes/magboots,
@@ -28146,6 +28174,11 @@
},
/turf/open/floor/iron/freezer,
/area/maintenance/starboard/fore)
+"hrr" = (
+/obj/structure/table,
+/obj/item/food/grown/carrot,
+/turf/open/floor/iron/dark,
+/area/science/research)
"hrF" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 4
@@ -28458,11 +28491,6 @@
},
/turf/open/floor/iron,
/area/ai_monitored/command/storage/eva)
-"hAK" = (
-/obj/structure/table,
-/obj/item/storage/box/disks_nanite,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"hBg" = (
/obj/effect/turf_decal/delivery,
/obj/structure/disposalpipe/segment,
@@ -29335,9 +29363,6 @@
/obj/structure/grille,
/turf/closed/wall/r_wall,
/area/engineering/atmos)
-"hZk" = (
-/turf/open/floor/iron,
-/area/science/nanite)
"hZo" = (
/obj/structure/sign/warning/securearea,
/turf/closed/wall/r_wall,
@@ -29404,11 +29429,6 @@
/obj/machinery/firealarm/directional/east,
/turf/open/floor/iron/white,
/area/science/mixing)
-"ibG" = (
-/obj/machinery/nanite_programmer,
-/obj/effect/turf_decal/bot,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"ibP" = (
/obj/machinery/door/airlock/external{
name = "External Access";
@@ -29439,10 +29459,6 @@
},
/turf/open/floor/engine,
/area/engineering/supermatter/room)
-"icS" = (
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/iron,
-/area/science/nanite)
"icU" = (
/obj/machinery/status_display/evac/directional/east,
/obj/effect/turf_decal/tile/red{
@@ -29714,6 +29730,11 @@
/obj/effect/turf_decal/tile/yellow,
/turf/open/floor/iron/dark,
/area/hallway/primary/aft)
+"ini" = (
+/obj/effect/turf_decal/loading_area,
+/obj/machinery/light_switch/directional/west,
+/turf/open/floor/iron/dark,
+/area/science/research)
"ink" = (
/obj/effect/turf_decal/tile/purple{
dir = 8
@@ -30025,6 +30046,10 @@
"iwd" = (
/turf/open/floor/carpet,
/area/service/chapel/main)
+"iwz" = (
+/obj/structure/flora/tree/dead,
+/turf/open/floor/plating/asteroid/snow/standard_air,
+/area/science/research)
"iwH" = (
/obj/machinery/door/airlock/maintenance{
req_access_txt = "12"
@@ -31291,6 +31316,14 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/engineering/atmos)
+"jiO" = (
+/obj/effect/spawner/structure/window,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "rnd2";
+ name = "research lab shutters"
+ },
+/turf/open/floor/plating,
+/area/science/research)
"jjv" = (
/turf/open/floor/iron/freezer,
/area/commons/toilet/locker)
@@ -32943,6 +32976,12 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron,
/area/cargo/storage)
+"kfx" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/plating/asteroid/snow/standard_air,
+/area/science/research)
"kfV" = (
/obj/structure/sink/kitchen{
pixel_y = 28
@@ -34140,6 +34179,10 @@
},
/turf/open/floor/iron,
/area/commons/dorms)
+"kPz" = (
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating/asteroid/snow/standard_air,
+/area/science/research)
"kPF" = (
/obj/effect/turf_decal/stripes/line{
dir = 5
@@ -34459,6 +34502,11 @@
/obj/structure/table/wood,
/turf/open/floor/carpet,
/area/command/heads_quarters/hos)
+"kYW" = (
+/obj/structure/table,
+/obj/item/clothing/shoes/wheelys/skishoes,
+/turf/open/floor/iron/dark,
+/area/science/research)
"kZi" = (
/obj/machinery/air_sensor/atmos/nitrogen_tank,
/turf/open/floor/engine/n2,
@@ -35750,13 +35798,6 @@
},
/turf/open/floor/plating,
/area/engineering/atmos)
-"lLp" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron,
-/area/science/nanite)
"lLw" = (
/obj/effect/landmark/blobstart,
/obj/effect/landmark/blobstart,
@@ -35937,16 +35978,6 @@
},
/turf/open/floor/iron,
/area/cargo/sorting)
-"lQm" = (
-/obj/machinery/camera{
- c_tag = "Nanite Lab";
- dir = 4;
- network = list("ss13","rd")
- },
-/obj/machinery/computer/nanite_cloud_controller,
-/obj/effect/turf_decal/bot,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"lQz" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/security{
@@ -37322,15 +37353,6 @@
},
/turf/open/floor/plating,
/area/maintenance/port)
-"mBm" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/science/nanite)
"mBy" = (
/obj/structure/urinal/directional/north,
/turf/open/floor/iron/freezer,
@@ -37492,6 +37514,14 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/hallway/primary/starboard)
+"mFt" = (
+/obj/machinery/light/directional/south,
+/obj/effect/turf_decal/bot,
+/obj/structure/frame/machine{
+ anchored = 1
+ },
+/turf/open/floor/iron/dark,
+/area/science/research)
"mFv" = (
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
@@ -37537,14 +37567,6 @@
},
/turf/open/floor/iron/dark,
/area/ai_monitored/command/nuke_storage)
-"mGC" = (
-/obj/machinery/power/apc/auto_name/west,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/structure/cable,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"mGX" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -38417,12 +38439,6 @@
/obj/effect/landmark/start/shaft_miner,
/turf/open/floor/iron,
/area/cargo/miningdock)
-"nee" = (
-/obj/machinery/light/directional/south,
-/obj/machinery/nanite_program_hub,
-/obj/effect/turf_decal/bot,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"nes" = (
/obj/machinery/light/directional/east,
/obj/item/radio/intercom/directional/east,
@@ -38549,11 +38565,6 @@
/obj/item/book/manual/wiki/security_space_law,
/turf/open/floor/iron,
/area/security/office)
-"nhP" = (
-/obj/effect/turf_decal/loading_area,
-/obj/machinery/light_switch/directional/west,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"nhQ" = (
/turf/open/floor/carpet,
/area/service/library)
@@ -41297,12 +41308,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/commons/storage/tools)
-"oMN" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/turf/open/floor/iron,
-/area/science/nanite)
"oMZ" = (
/obj/item/radio/intercom/directional/south,
/obj/effect/landmark/event_spawn,
@@ -41879,6 +41884,14 @@
/obj/machinery/light/directional/north,
/turf/open/floor/iron,
/area/command/teleporter)
+"peS" = (
+/obj/effect/turf_decal/bot,
+/obj/structure/frame/computer{
+ anchored = 1;
+ dir = 4
+ },
+/turf/open/floor/iron/dark,
+/area/science/research)
"pfQ" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/button/crematorium{
@@ -42222,6 +42235,19 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/security/office)
+"pnZ" = (
+/obj/machinery/power/apc/auto_name/west,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/cable,
+/turf/open/floor/iron/dark,
+/area/science/research)
+"poa" = (
+/obj/effect/turf_decal/bot,
+/obj/machinery/firealarm/directional/south,
+/turf/open/floor/iron/dark,
+/area/science/research)
"ppl" = (
/obj/effect/landmark/xeno_spawn,
/obj/structure/cable,
@@ -42821,11 +42847,6 @@
},
/turf/open/floor/iron/white,
/area/medical/virology)
-"pDu" = (
-/obj/machinery/computer/nanite_cloud_controller,
-/obj/effect/turf_decal/bot,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"pEc" = (
/obj/structure/extinguisher_cabinet/directional/east,
/obj/effect/turf_decal/tile/blue{
@@ -42916,6 +42937,10 @@
/obj/structure/disposalpipe/segment,
/turf/closed/wall,
/area/cargo/office)
+"pFJ" = (
+/obj/structure/flora/grass/brown,
+/turf/open/floor/plating/asteroid/snow/standard_air,
+/area/science/research)
"pFO" = (
/obj/machinery/camera{
c_tag = "Holodeck - Fore";
@@ -43252,6 +43277,18 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/carpet,
/area/service/library)
+"pOq" = (
+/obj/machinery/camera{
+ c_tag = "Circuits Lab";
+ dir = 4;
+ network = list("ss13","rd")
+ },
+/obj/effect/turf_decal/bot,
+/obj/structure/frame/machine{
+ anchored = 1
+ },
+/turf/open/floor/iron/dark,
+/area/science/research)
"pOt" = (
/obj/structure/chair/comfy/black{
dir = 4
@@ -43887,15 +43924,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/ai_monitored/command/storage/eva)
-"qea" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/science/nanite)
"qek" = (
/obj/machinery/door/firedoor,
/obj/effect/turf_decal/tile/blue,
@@ -43944,15 +43972,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/wood,
/area/command/heads_quarters/captain)
-"qeQ" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/science/nanite)
"qfA" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -44670,12 +44689,6 @@
},
/turf/open/floor/iron/white,
/area/medical/medbay)
-"qGG" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/science/nanite)
"qGO" = (
/obj/structure/window/reinforced{
dir = 8
@@ -45444,6 +45457,15 @@
},
/turf/open/floor/plating,
/area/maintenance/aft)
+"rcN" = (
+/obj/machinery/light/directional/east,
+/obj/effect/turf_decal/bot,
+/obj/structure/frame/computer{
+ anchored = 1;
+ dir = 8
+ },
+/turf/open/floor/iron/dark,
+/area/science/research)
"ren" = (
/obj/machinery/light_switch/directional/west,
/obj/machinery/autolathe,
@@ -46635,14 +46657,6 @@
/obj/machinery/airalarm/directional/south,
/turf/open/floor/iron/white,
/area/medical/medbay/lobby)
-"rIN" = (
-/obj/machinery/light/directional/east,
-/obj/effect/turf_decal/bot,
-/obj/machinery/computer/nanite_chamber_control{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"rIW" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
@@ -46839,6 +46853,15 @@
/obj/machinery/light_switch/directional/west,
/turf/open/floor/wood,
/area/commons/vacant_room/office)
+"rOb" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 1
+ },
+/turf/open/floor/iron/dark,
+/area/science/research)
"rOc" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -47102,6 +47125,10 @@
dir = 9
},
/area/science/research)
+"rXF" = (
+/obj/effect/turf_decal/loading_area,
+/turf/open/floor/iron/dark,
+/area/science/research)
"rXH" = (
/obj/item/radio/intercom/directional/east,
/obj/effect/turf_decal/tile/red,
@@ -47516,10 +47543,6 @@
/obj/machinery/light/directional/north,
/turf/open/floor/circuit,
/area/ai_monitored/command/nuke_storage)
-"sjr" = (
-/obj/effect/turf_decal/loading_area,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"sjv" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
dir = 5
@@ -47925,13 +47948,6 @@
},
/turf/open/floor/plating,
/area/security/office)
-"suU" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/iron,
-/area/science/nanite)
"suY" = (
/obj/machinery/vending/cigarette,
/turf/open/floor/wood,
@@ -48202,12 +48218,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/engine/vacuum,
/area/science/mixing/chamber)
-"sDW" = (
-/obj/structure/extinguisher_cabinet/directional/west,
-/obj/machinery/nanite_chamber,
-/obj/effect/turf_decal/bot,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"sEt" = (
/obj/machinery/power/rad_collector/anchored,
/obj/structure/window/plasma/reinforced{
@@ -48816,6 +48826,12 @@
},
/turf/open/floor/iron/white,
/area/science/xenobiology)
+"sVf" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/iron/dark,
+/area/science/research)
"sVk" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/delivery,
@@ -49187,16 +49203,6 @@
},
/turf/open/floor/iron,
/area/science/xenobiology)
-"tgl" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/structure/chair/office/light{
- dir = 8
- },
-/obj/effect/landmark/start/scientist,
-/turf/open/floor/iron,
-/area/science/nanite)
"tgF" = (
/obj/structure/table,
/obj/item/wrench,
@@ -50491,17 +50497,6 @@
},
/turf/open/floor/iron/showroomfloor,
/area/security/warden)
-"tTk" = (
-/obj/structure/table,
-/obj/item/nanite_remote,
-/obj/machinery/requests_console/directional/east{
- department = "Nanite Lab";
- departmentType = 2;
- name = "Nanite Lab Requests Console";
- receive_ore_updates = 1
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"tTm" = (
/obj/structure/chair{
dir = 8
@@ -51124,6 +51119,14 @@
},
/turf/open/floor/carpet,
/area/command/heads_quarters/captain)
+"uji" = (
+/obj/effect/turf_decal/bot,
+/obj/machinery/airalarm/directional/south,
+/obj/structure/frame/machine{
+ anchored = 1
+ },
+/turf/open/floor/iron/dark,
+/area/science/research)
"ujx" = (
/obj/structure/cable,
/obj/structure/sign/poster/random{
@@ -51845,12 +51848,6 @@
},
/turf/open/floor/iron/cafeteria,
/area/command/heads_quarters/rd)
-"uzl" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/turf/open/floor/iron,
-/area/science/nanite)
"uzt" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/food/drinks/mug/coco{
@@ -51870,7 +51867,6 @@
pixel_x = -3;
pixel_y = 7
},
-/obj/item/stamp/qm,
/obj/effect/turf_decal/tile/brown{
dir = 1
},
@@ -51943,6 +51939,15 @@
/obj/structure/sign/warning/electricshock,
/turf/closed/wall/r_wall,
/area/engineering/main)
+"uBX" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 1
+ },
+/turf/open/floor/iron/dark,
+/area/science/research)
"uBY" = (
/obj/machinery/power/apc/auto_name/north,
/obj/structure/cable,
@@ -53721,9 +53726,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/security/brig)
-"vHt" = (
-/turf/open/floor/iron,
-/area/science/misc_lab)
"vHw" = (
/obj/machinery/door/airlock/security/glass{
name = "Equipment Room";
@@ -53758,6 +53760,16 @@
},
/turf/open/floor/iron/dark,
/area/command/gateway)
+"vIe" = (
+/obj/machinery/disposal/bin,
+/obj/structure/disposalpipe/trunk{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/iron/dark,
+/area/science/research)
"vIi" = (
/obj/structure/extinguisher_cabinet/directional/east,
/obj/effect/turf_decal/tile/red{
@@ -53780,6 +53792,10 @@
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
/area/service/hydroponics)
+"vKo" = (
+/obj/structure/flora/grass/green,
+/turf/open/floor/plating/asteroid/snow/standard_air,
+/area/science/research)
"vKs" = (
/obj/machinery/modular_computer/console/preset/civilian{
dir = 4
@@ -54731,14 +54747,6 @@
/obj/item/assembly/timer,
/turf/open/floor/iron,
/area/security/office)
-"wkN" = (
-/obj/effect/spawner/structure/window,
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "rnd2";
- name = "research lab shutters"
- },
-/turf/open/floor/plating,
-/area/science/nanite)
"wld" = (
/turf/open/floor/iron,
/area/commons/fitness)
@@ -54832,6 +54840,7 @@
"wnf" = (
/obj/structure/table,
/obj/structure/cable,
+/obj/item/stamp/qm,
/turf/open/floor/carpet,
/area/cargo/qm)
"wnj" = (
@@ -54912,11 +54921,6 @@
/obj/item/trash/cheesie,
/turf/open/floor/plating,
/area/maintenance/port)
-"wpH" = (
-/obj/effect/turf_decal/bot,
-/obj/machinery/firealarm/directional/south,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"wpS" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/sign/warning/securearea{
@@ -54950,11 +54954,6 @@
/obj/item/storage/box/lights/mixed,
/turf/open/floor/plating,
/area/commons/storage/emergency/port)
-"wqH" = (
-/obj/machinery/nanite_chamber,
-/obj/effect/turf_decal/bot,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"wqZ" = (
/obj/machinery/field/generator,
/turf/open/floor/plating,
@@ -55580,6 +55579,16 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/science/mixing)
+"wMX" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/item/stack/sheet/mineral/snow{
+ pixel_x = -3;
+ pixel_y = 5
+ },
+/turf/open/floor/plating/asteroid/snow/standard_air,
+/area/science/research)
"wNj" = (
/obj/structure/sign/warning/securearea{
pixel_x = -32
@@ -56213,6 +56222,14 @@
},
/turf/open/floor/iron/white,
/area/science/genetics)
+"xeS" = (
+/obj/structure/extinguisher_cabinet/directional/west,
+/obj/effect/turf_decal/bot,
+/obj/structure/frame/machine{
+ anchored = 1
+ },
+/turf/open/floor/iron/dark,
+/area/science/research)
"xfb" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -56365,6 +56382,16 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/maintenance/starboard/aft)
+"xje" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/structure/flora/grass/both{
+ pixel_x = -4;
+ pixel_y = -4
+ },
+/turf/open/floor/plating/asteroid/snow/standard_air,
+/area/science/research)
"xju" = (
/obj/structure/chair/office{
dir = 1
@@ -57191,11 +57218,6 @@
},
/turf/open/floor/iron,
/area/commons/storage/primary)
-"xEM" = (
-/obj/structure/table,
-/obj/item/nanite_scanner,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"xFn" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -58243,16 +58265,6 @@
/obj/machinery/power/apc/auto_name/east,
/turf/open/floor/iron/white,
/area/medical/medbay/lobby)
-"yiW" = (
-/obj/machinery/disposal/bin,
-/obj/structure/disposalpipe/trunk{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"yjo" = (
/obj/machinery/camera{
c_tag = "Chapel South";
@@ -105036,13 +105048,13 @@ boB
qaX
jrH
sve
-dYq
-dYq
-dYq
-wkN
-wkN
-wkN
-dYq
+bhA
+bhA
+bhA
+jiO
+jiO
+jiO
+bhA
bhA
xtW
ovK
@@ -105064,7 +105076,7 @@ bPN
uOi
cba
gZY
-vHt
+esv
bQZ
nlW
xIk
@@ -105293,13 +105305,13 @@ iEK
bpZ
uIv
bta
-mGC
-nhP
-sDW
-eja
-hAK
-ibG
-lQm
+pnZ
+ini
+xeS
+peS
+hrr
+eXz
+pOq
bEC
bEC
bGc
@@ -105550,13 +105562,13 @@ bng
boQ
brx
bro
-aQx
-suU
-qeQ
-tgl
-qGG
-oMN
-wpH
+uBX
+kfx
+dky
+dky
+gHf
+aRs
+poa
bEC
umY
uej
@@ -105807,13 +105819,13 @@ boA
bpZ
bqf
bBD
-gLd
-qea
-hZk
-hZk
-hZk
-icS
-nee
+sVf
+eGA
+pFJ
+bia
+bia
+kPz
+mFt
pLE
nCs
gLx
@@ -106064,13 +106076,13 @@ bnk
bpo
bqk
bBD
-gLd
-gwd
-hZk
-hZk
-hZk
-icS
-dFk
+sVf
+eAd
+iwz
+gTG
+vKo
+kPz
+uji
pLE
ont
eeA
@@ -106321,13 +106333,13 @@ biW
bpZ
bth
brn
-aQy
-lLp
-mBm
-gnX
-epI
-uzl
-cbe
+rOb
+xje
+fcy
+fcy
+fcy
+wMX
+fbx
pLE
kdp
dFZ
@@ -106578,13 +106590,13 @@ bnl
bpq
vdl
kXt
-yiW
-sjr
-wqH
-rIN
-xEM
-tTk
-pDu
+vIe
+rXF
+eXz
+rcN
+kYW
+frS
+eXz
pLE
tZf
mqf
@@ -106840,8 +106852,8 @@ bpE
bpE
bpE
bpE
-dYq
-dYq
+boB
+boB
pLE
qSi
sql
diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm
index 623f8b2fd9..c80ee5f72e 100644
--- a/_maps/map_files/KiloStation/KiloStation.dmm
+++ b/_maps/map_files/KiloStation/KiloStation.dmm
@@ -5023,6 +5023,15 @@
icon_state = "platingdmg1"
},
/area/maintenance/starboard/fore)
+"aow" = (
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/machinery/light/directional/east,
+/obj/machinery/bounty_board/directional/north,
+/turf/open/floor/iron/dark,
+/area/science/research)
"aox" = (
/turf/closed/wall,
/area/maintenance/central)
@@ -5780,6 +5789,11 @@
/obj/machinery/power/apc/auto_name/north,
/turf/open/floor/carpet,
/area/medical/psychology)
+"aqQ" = (
+/obj/effect/turf_decal/sand/plating,
+/obj/item/stack/sheet/glass,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
"aqR" = (
/obj/machinery/door/airlock/maintenance{
name = "morgue maintenance";
@@ -11572,6 +11586,9 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/hallway/primary/fore)
+"aNt" = (
+/turf/open/floor/iron/showroomfloor,
+/area/command/heads_quarters/rd)
"aNu" = (
/turf/closed/wall,
/area/medical/morgue)
@@ -15445,15 +15462,6 @@
/obj/structure/tank_dispenser,
/turf/open/floor/iron/dark,
/area/science/mixing)
-"aXE" = (
-/obj/machinery/nanite_chamber,
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/iron/dark,
-/area/science/research)
"aXH" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
@@ -15603,23 +15611,6 @@
"aXW" = (
/turf/closed/wall/rust,
/area/maintenance/starboard/fore)
-"aXX" = (
-/obj/structure/chair/office/light{
- dir = 1;
- pixel_y = 3
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/iron/dark,
-/area/science/research)
"aXY" = (
/obj/effect/turf_decal/tile/purple{
dir = 4
@@ -15866,21 +15857,6 @@
icon_state = "panelscorched"
},
/area/maintenance/central)
-"aYN" = (
-/obj/machinery/nanite_program_hub,
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/turf/open/floor/iron/dark,
-/area/science/research)
"aYO" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/highsecurity{
@@ -15904,58 +15880,6 @@
},
/turf/open/floor/iron/showroomfloor,
/area/science/research)
-"aYR" = (
-/obj/machinery/computer/nanite_cloud_controller,
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/iron/dark,
-/area/science/research)
-"aYS" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/iron/dark,
-/area/science/research)
-"aYT" = (
-/obj/machinery/nanite_programmer,
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/iron/dark,
-/area/science/research)
-"aYU" = (
-/obj/machinery/nanite_program_hub,
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/research)
"aYY" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
@@ -16167,21 +16091,6 @@
dir = 1
},
/area/hallway/primary/fore)
-"aZt" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/bot,
-/obj/machinery/holopad,
-/turf/open/floor/iron/dark,
-/area/science/research)
"aZu" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 4
@@ -16482,23 +16391,6 @@
/obj/structure/cable,
/turf/open/floor/iron/showroomfloor,
/area/medical/medbay/central)
-"aZX" = (
-/obj/effect/turf_decal/bot,
-/obj/machinery/computer/nanite_chamber_control{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/iron/dark,
-/area/science/research)
"aZZ" = (
/obj/effect/turf_decal/tile/purple{
dir = 1
@@ -16989,17 +16881,6 @@
"bbi" = (
/turf/closed/wall/r_wall,
/area/science/mixing/chamber)
-"bbj" = (
-/obj/structure/table,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/item/storage/box/disks_nanite{
- pixel_y = 4
- },
-/obj/item/hand_labeler,
-/turf/open/floor/iron/dark,
-/area/science/research)
"bbk" = (
/obj/effect/turf_decal/stripes/line{
dir = 5
@@ -17162,17 +17043,6 @@
/obj/effect/landmark/start/hangover,
/turf/open/floor/iron,
/area/hallway/primary/starboard)
-"bbJ" = (
-/obj/machinery/computer/nanite_cloud_controller,
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/iron/dark,
-/area/science/research)
"bbK" = (
/obj/machinery/door/airlock/research/glass/incinerator/toxmix_interior,
/obj/effect/mapping_helpers/airlock/locked,
@@ -17181,17 +17051,6 @@
},
/turf/open/floor/engine,
/area/science/mixing/chamber)
-"bbL" = (
-/obj/machinery/nanite_chamber,
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/iron/dark,
-/area/science/research)
"bbN" = (
/turf/closed/wall,
/area/science/mixing)
@@ -18182,23 +18041,6 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/iron/dark,
/area/science/research)
-"beE" = (
-/obj/structure/chair/office/light{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/landmark/start/scientist,
-/turf/open/floor/iron/dark,
-/area/science/research)
"beI" = (
/obj/machinery/portable_atmospherics/canister/toxins,
/obj/effect/turf_decal/bot,
@@ -31610,6 +31452,37 @@
},
/turf/open/floor/plating,
/area/security/prison)
+"cfs" = (
+/obj/structure/cable,
+/obj/item/solar_assembly,
+/obj/item/solar_assembly,
+/obj/item/solar_assembly,
+/obj/item/solar_assembly,
+/obj/item/solar_assembly,
+/obj/item/solar_assembly,
+/obj/item/solar_assembly,
+/obj/item/solar_assembly,
+/obj/item/solar_assembly,
+/obj/item/solar_assembly,
+/obj/item/solar_assembly,
+/obj/item/solar_assembly,
+/obj/item/solar_assembly,
+/obj/item/solar_assembly,
+/obj/item/solar_assembly,
+/obj/item/solar_assembly,
+/obj/item/stack/sheet/glass/fifty,
+/obj/structure/closet/crate/engineering/electrical,
+/obj/structure/sign/warning/xeno_mining{
+ pixel_x = 32
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/cobweb/cobweb2,
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/machinery/light/small/directional/north,
+/turf/open/floor/plating,
+/area/maintenance/solars/starboard/aft)
"cft" = (
/obj/effect/turf_decal/stripes/line{
dir = 10
@@ -37018,25 +36891,6 @@
icon_state = "platingdmg3"
},
/area/maintenance/port/aft)
-"cxk" = (
-/obj/machinery/power/solar_control{
- dir = 4;
- id = "aftport";
- name = "Port Quarter Solar Control"
- },
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/obj/structure/sign/warning/vacuum/external{
- pixel_x = -32
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable,
-/turf/open/floor/plating{
- icon_state = "panelscorched"
- },
-/area/maintenance/solars/port/aft)
"cxl" = (
/obj/structure/sign/warning/nosmoking{
pixel_x = 30
@@ -37804,6 +37658,14 @@
/obj/machinery/power/apc/auto_name/west,
/turf/open/floor/iron/dark,
/area/security/processing)
+"czz" = (
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple,
+/turf/open/floor/iron/showroomfloor,
+/area/command/heads_quarters/rd)
"czA" = (
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
@@ -41007,24 +40869,6 @@
/obj/structure/cable,
/turf/open/floor/engine,
/area/engineering/supermatter/room)
-"cYO" = (
-/obj/structure/chair/office/light{
- dir = 8
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/landmark/start/research_director,
-/turf/open/floor/iron/showroomfloor,
-/area/command/heads_quarters/rd)
"cYR" = (
/obj/effect/turf_decal/tile/neutral{
dir = 4
@@ -41497,6 +41341,22 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/command/heads_quarters/hos)
+"dkL" = (
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/light/small/directional/north,
+/obj/machinery/camera{
+ c_tag = "Toxins Launch Site";
+ name = "science camera";
+ network = list("ss13","rd")
+ },
+/obj/structure/cable,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/module_duplicator,
+/turf/open/floor/iron/dark,
+/area/science/test_area)
"dkX" = (
/obj/structure/sign/poster/contraband/random,
/turf/closed/wall/rust,
@@ -42006,18 +41866,6 @@
/obj/effect/landmark/start/bartender,
/turf/open/floor/wood,
/area/service/bar)
-"dyq" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/sign/poster/contraband/rebels_unite{
- pixel_x = -32;
- pixel_y = 32
- },
-/obj/effect/turf_decal/trimline/purple/filled/corner,
-/obj/effect/turf_decal/trimline/purple/filled/corner{
- dir = 1
- },
-/turf/open/floor/plating/rust/plasma,
-/area/maintenance/space_hut/plasmaman)
"dyu" = (
/obj/structure/flora/grass/jungle{
icon_state = "bushb1"
@@ -42898,6 +42746,24 @@
dir = 1
},
/area/service/chapel/main)
+"dWe" = (
+/obj/effect/turf_decal/bot,
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/structure/sign/warning/vacuum/external{
+ pixel_x = -32
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable,
+/obj/structure/frame/computer{
+ anchored = 1;
+ dir = 4
+ },
+/turf/open/floor/plating{
+ icon_state = "panelscorched"
+ },
+/area/maintenance/solars/port/aft)
"dWo" = (
/obj/effect/turf_decal/stripes/line{
dir = 10
@@ -43812,6 +43678,23 @@
},
/turf/open/floor/engine,
/area/engineering/supermatter)
+"erH" = (
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 10
+ },
+/obj/structure/disposalpipe/segment,
+/obj/structure/chair/office/light{
+ dir = 4
+ },
+/obj/effect/landmark/start/research_director,
+/turf/open/floor/iron/showroomfloor,
+/area/command/heads_quarters/rd)
"erO" = (
/obj/effect/turf_decal/tile/yellow{
dir = 4
@@ -44832,6 +44715,24 @@
/obj/effect/landmark/start/cook,
/turf/open/floor/iron/showroomfloor,
/area/service/kitchen)
+"eML" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/machinery/camera{
+ c_tag = "Research Hallway";
+ name = "science camera";
+ network = list("ss13","rd")
+ },
+/obj/machinery/status_display/evac/directional/north,
+/obj/structure/railing{
+ dir = 4
+ },
+/turf/open/floor/iron/dark,
+/area/science/research)
"eNm" = (
/obj/effect/turf_decal/tile/blue{
dir = 8
@@ -46440,6 +46341,23 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/maintenance/disposal/incinerator)
+"fxL" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/sign/poster/contraband/rebels_unite{
+ pixel_x = -32;
+ pixel_y = -32
+ },
+/obj/effect/turf_decal/trimline/purple/filled/corner{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/purple/filled/corner{
+ dir = 8
+ },
+/obj/item/toy/plush/plasmamanplushie{
+ name = "Dianion XV"
+ },
+/turf/open/floor/plating/plasma/rust,
+/area/maintenance/space_hut/plasmaman)
"fyi" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
@@ -47499,19 +47417,6 @@
/obj/structure/cable,
/turf/open/floor/iron/showroomfloor,
/area/engineering/break_room)
-"fRy" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/machinery/computer/rdconsole{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/command/heads_quarters/rd)
"fSn" = (
/turf/closed/wall/r_wall/rust,
/area/medical/psychology)
@@ -48945,6 +48850,27 @@
/obj/effect/landmark/start/hangover,
/turf/open/floor/iron/dark,
/area/service/library)
+"gCO" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/trimline/purple/filled/line{
+ dir = 1
+ },
+/turf/open/floor/plating/plasma/rust,
+/area/maintenance/space_hut/plasmaman)
+"gCQ" = (
+/obj/machinery/computer/robotics{
+ dir = 1
+ },
+/obj/effect/turf_decal/bot,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/iron/dark,
+/area/command/heads_quarters/rd)
"gDl" = (
/obj/effect/turf_decal/stripes/line{
dir = 6
@@ -49292,6 +49218,11 @@
/obj/machinery/light_switch/directional/west,
/turf/open/floor/iron/dark,
/area/service/chapel/main)
+"gOl" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/trimline/purple/filled/line,
+/turf/open/floor/plating/plasma/rust,
+/area/maintenance/space_hut/plasmaman)
"gOw" = (
/obj/structure/sign/warning/fire,
/turf/closed/wall/r_wall,
@@ -49986,22 +49917,6 @@
luminosity = 2
},
/area/engineering/storage/tech)
-"hdL" = (
-/obj/structure/chair/office/light,
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/landmark/start/research_director,
-/turf/open/floor/iron/showroomfloor,
-/area/command/heads_quarters/rd)
"hdT" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
@@ -50274,6 +50189,16 @@
/obj/structure/sign/departments/custodian,
/turf/closed/wall/rust,
/area/service/janitor)
+"hiG" = (
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/purple,
+/obj/structure/chair/office/light,
+/obj/effect/landmark/start/research_director,
+/turf/open/floor/iron/showroomfloor,
+/area/command/heads_quarters/rd)
"hjs" = (
/obj/effect/turf_decal/stripes/corner{
dir = 1
@@ -50490,27 +50415,6 @@
/obj/effect/turf_decal/stripes/corner,
/turf/open/floor/engine,
/area/engineering/supermatter/room)
-"hop" = (
-/obj/structure/table,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/item/clipboard,
-/obj/item/nanite_remote{
- pixel_x = -4;
- pixel_y = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/item/nanite_scanner{
- pixel_x = 4
- },
-/obj/machinery/airalarm/directional/north,
-/obj/machinery/light/directional/east,
-/obj/effect/turf_decal/stripes/corner,
-/turf/open/floor/iron/dark,
-/area/science/research)
"hoE" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -50641,6 +50545,11 @@
},
/turf/open/floor/iron/dark,
/area/science/xenobiology)
+"hsn" = (
+/obj/effect/turf_decal/box,
+/obj/structure/cable,
+/turf/open/floor/iron/solarpanel/airless,
+/area/solars/starboard/aft)
"hsu" = (
/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible,
/turf/closed/wall/rust,
@@ -50753,6 +50662,22 @@
/obj/machinery/bounty_board/directional/north,
/turf/open/floor/iron/dark,
/area/medical/storage)
+"hwx" = (
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/purple,
+/obj/structure/table/reinforced,
+/obj/item/reagent_containers/food/drinks/mug/coco,
+/turf/open/floor/iron/showroomfloor,
+/area/command/heads_quarters/rd)
"hwB" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/mining/glass{
@@ -52927,6 +52852,12 @@
},
/turf/open/floor/iron/dark,
/area/security/office)
+"ivb" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 4
+ },
+/turf/open/floor/iron/showroomfloor,
+/area/command/heads_quarters/rd)
"ivj" = (
/obj/structure/sign/warning/electricshock,
/turf/closed/wall/r_wall,
@@ -54388,6 +54319,19 @@
/obj/machinery/light/directional/east,
/turf/open/floor/iron/dark,
/area/engineering/atmos)
+"iYZ" = (
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/item/kirbyplants/potty,
+/turf/open/floor/iron/showroomfloor,
+/area/command/heads_quarters/rd)
"iZc" = (
/obj/structure/chair/sofa{
color = "#c45c57"
@@ -54438,6 +54382,20 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/maintenance/starboard)
+"jaC" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/machinery/computer/rdconsole{
+ dir = 8
+ },
+/obj/effect/turf_decal/bot,
+/turf/open/floor/iron/dark,
+/area/command/heads_quarters/rd)
"jaD" = (
/obj/effect/turf_decal/delivery,
/obj/machinery/space_heater,
@@ -56137,21 +56095,6 @@
/obj/effect/decal/cleanable/blood/old,
/turf/open/floor/iron/dark,
/area/engineering/supermatter/room)
-"jPh" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/obj/machinery/light/small/directional/north,
-/obj/effect/decal/cleanable/cobweb/cobweb2,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/sign/warning/xeno_mining{
- pixel_x = 32
- },
-/obj/structure/cable,
-/turf/open/floor/plating{
- icon_state = "platingdmg3"
- },
-/area/maintenance/solars/starboard/aft)
"jPk" = (
/obj/structure/table/glass,
/obj/item/storage/box/rxglasses{
@@ -58068,27 +58011,6 @@
},
/turf/open/floor/engine,
/area/engineering/supermatter/room)
-"kzj" = (
-/obj/effect/turf_decal/bot,
-/obj/machinery/computer/nanite_chamber_control,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/machinery/camera{
- c_tag = "Nanite Lab";
- name = "science camera";
- network = list("ss13","rd")
- },
-/obj/machinery/status_display/evac/directional/north,
-/turf/open/floor/iron/dark,
-/area/science/research)
"kzk" = (
/obj/effect/turf_decal/tile/yellow,
/obj/effect/decal/cleanable/dirt,
@@ -60737,6 +60659,23 @@
/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/command/heads_quarters/hop)
+"lGH" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/sign/poster/contraband/rebels_unite{
+ pixel_x = 32;
+ pixel_y = 32
+ },
+/obj/effect/turf_decal/trimline/purple/filled/corner{
+ dir = 8
+ },
+/obj/effect/turf_decal/trimline/purple/filled/corner{
+ dir = 4
+ },
+/obj/item/toy/plush/plasmamanplushie{
+ name = "Lithium II"
+ },
+/turf/open/floor/plating/plasma/rust,
+/area/maintenance/space_hut/plasmaman)
"lGO" = (
/obj/structure/lattice/catwalk,
/obj/structure/railing{
@@ -64215,6 +64154,16 @@
icon_state = "panelscorched"
},
/area/maintenance/disposal/incinerator)
+"njW" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/railing{
+ dir = 1
+ },
+/turf/open/floor/iron/dark,
+/area/science/research)
"nlh" = (
/obj/structure/frame/machine,
/obj/effect/turf_decal/stripes/line{
@@ -65368,20 +65317,6 @@
/obj/effect/mapping_helpers/airlock/abandoned,
/turf/open/floor/iron/dark,
/area/cargo/warehouse)
-"nOe" = (
-/obj/machinery/computer/aifixer{
- dir = 4
- },
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/iron/dark,
-/area/command/heads_quarters/rd)
"nOQ" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
@@ -65529,6 +65464,18 @@
},
/turf/open/floor/engine,
/area/engineering/storage/tech)
+"nRi" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/sign/poster/contraband/rebels_unite{
+ pixel_x = -32;
+ pixel_y = 32
+ },
+/obj/effect/turf_decal/trimline/purple/filled/corner,
+/obj/effect/turf_decal/trimline/purple/filled/corner{
+ dir = 1
+ },
+/turf/open/floor/plating/plasma/rust,
+/area/maintenance/space_hut/plasmaman)
"nRr" = (
/obj/machinery/power/solar{
id = "aftstarboard";
@@ -68686,6 +68633,26 @@
icon_state = "platingdmg1"
},
/area/maintenance/disposal/incinerator)
+"pid" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 10
+ },
+/obj/structure/cable,
+/obj/machinery/computer/shuttle/mining/common,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/commons/fitness/recreation)
"pie" = (
/obj/machinery/power/port_gen/pacman,
/obj/structure/sign/warning/electricshock{
@@ -69070,11 +69037,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/ai_monitored/command/storage/eva)
-"pqf" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/trimline/purple/filled/line,
-/turf/open/floor/plating/rust/plasma,
-/area/maintenance/space_hut/plasmaman)
"pqg" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -72052,23 +72014,6 @@
/obj/machinery/vending/drugs,
/turf/open/floor/iron/showroomfloor,
/area/medical/surgery)
-"qBh" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/sign/poster/contraband/rebels_unite{
- pixel_x = 32;
- pixel_y = 32
- },
-/obj/effect/turf_decal/trimline/purple/filled/corner{
- dir = 8
- },
-/obj/effect/turf_decal/trimline/purple/filled/corner{
- dir = 4
- },
-/obj/item/toy/plush/plasmamanplushie{
- name = "Lithium II"
- },
-/turf/open/floor/plating/rust/plasma,
-/area/maintenance/space_hut/plasmaman)
"qCn" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -72842,6 +72787,18 @@
},
/turf/open/floor/iron,
/area/hallway/secondary/exit/departure_lounge)
+"qRl" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/machinery/airalarm/directional/north,
+/obj/machinery/light/directional/east,
+/obj/effect/turf_decal/stripes/corner,
+/turf/open/floor/iron/dark,
+/area/science/research)
"qRs" = (
/obj/effect/turf_decal/bot,
/obj/machinery/conveyor{
@@ -73449,6 +73406,11 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/maintenance/disposal/incinerator)
+"rhC" = (
+/obj/structure/lattice/catwalk,
+/obj/item/stack/sheet/glass,
+/turf/open/space/basic,
+/area/solars/port/aft)
"rhG" = (
/obj/structure/table,
/obj/effect/turf_decal/tile/neutral{
@@ -74201,6 +74163,20 @@
dir = 4
},
/area/service/chapel/main)
+"rvF" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/machinery/holopad,
+/obj/structure/railing/corner{
+ dir = 4
+ },
+/turf/open/floor/iron/dark,
+/area/science/research)
"rwo" = (
/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{
dir = 4
@@ -74978,6 +74954,26 @@
"rPt" = (
/turf/closed/wall/r_wall/rust,
/area/command/heads_quarters/captain)
+"rPu" = (
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/purple,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 10
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 10
+ },
+/turf/open/floor/iron/showroomfloor,
+/area/command/heads_quarters/rd)
"rQj" = (
/obj/effect/turf_decal/arrows/white{
dir = 4
@@ -75977,27 +75973,6 @@
icon_state = "platingdmg3"
},
/area/maintenance/port/aft)
-"smq" = (
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 10
- },
-/obj/effect/landmark/start/research_director,
-/obj/structure/disposalpipe/segment{
- dir = 10
- },
-/turf/open/floor/iron/showroomfloor,
-/area/command/heads_quarters/rd)
"sns" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
@@ -79426,6 +79401,21 @@
},
/turf/open/floor/iron,
/area/hallway/secondary/exit/departure_lounge)
+"tNe" = (
+/obj/effect/turf_decal/stripes/corner,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 9
+ },
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
+ },
+/obj/machinery/research/explosive_compressor,
+/turf/open/floor/iron/showroomfloor,
+/area/science/test_area)
"tNt" = (
/turf/open/floor/plating,
/area/maintenance/disposal/incinerator)
@@ -79579,19 +79569,6 @@
},
/turf/open/floor/iron,
/area/engineering/break_room)
-"tOW" = (
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 10
- },
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/iron/showroomfloor,
-/area/command/heads_quarters/rd)
"tPt" = (
/obj/structure/bookcase/random/fiction,
/turf/open/floor/wood,
@@ -79924,20 +79901,6 @@
/obj/structure/flora/ausbushes/ywflowers,
/turf/open/floor/grass,
/area/service/chapel/main)
-"tWx" = (
-/obj/machinery/computer/robotics{
- dir = 4
- },
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/iron/dark,
-/area/command/heads_quarters/rd)
"tXc" = (
/obj/machinery/holopad,
/turf/open/floor/iron,
@@ -80451,22 +80414,6 @@
/obj/machinery/light/floor,
/turf/open/floor/engine/vacuum,
/area/engineering/atmos)
-"uhS" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/machinery/light/small/directional/north,
-/obj/machinery/camera{
- c_tag = "Toxins Launch Site";
- name = "science camera";
- network = list("ss13","rd")
- },
-/obj/machinery/research/explosive_compressor,
-/obj/structure/cable,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/iron/dark,
-/area/science/test_area)
"uij" = (
/obj/machinery/door/poddoor/preopen{
id = "gravity";
@@ -81348,15 +81295,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/cargo/warehouse)
-"uBq" = (
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 4
- },
-/turf/open/floor/iron/showroomfloor,
-/area/command/heads_quarters/rd)
"uBS" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -82441,6 +82379,21 @@
icon_state = "platingdmg3"
},
/area/maintenance/starboard/aft)
+"vbD" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/item/tank/internals/plasmaman/belt/full,
+/obj/structure/table,
+/obj/structure/sign/poster/contraband/rebels_unite{
+ pixel_x = 32;
+ pixel_y = -32
+ },
+/obj/effect/turf_decal/trimline/purple/filled/corner{
+ dir = 1
+ },
+/obj/effect/turf_decal/trimline/purple/filled/corner,
+/obj/item/flashlight/lamp,
+/turf/open/floor/plating/plasma/rust,
+/area/maintenance/space_hut/plasmaman)
"vbO" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
dir = 8
@@ -83271,22 +83224,6 @@
},
/turf/open/floor/iron/dark,
/area/science/mixing)
-"vse" = (
-/obj/structure/table,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/item/folder,
-/obj/item/nanite_scanner{
- pixel_x = -4;
- pixel_y = 4
- },
-/obj/item/nanite_remote,
-/obj/machinery/light/directional/east,
-/obj/machinery/bounty_board/directional/north,
-/turf/open/floor/iron/dark,
-/area/science/research)
"vsF" = (
/obj/machinery/light/directional/north,
/obj/effect/spawner/structure/window/hollow/reinforced/middle{
@@ -83614,13 +83551,6 @@
dir = 1
},
/area/maintenance/aft)
-"vzj" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/trimline/purple/filled/line{
- dir = 1
- },
-/turf/open/floor/plating/rust/plasma,
-/area/maintenance/space_hut/plasmaman)
"vzr" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -83678,41 +83608,6 @@
},
/turf/open/floor/iron,
/area/maintenance/disposal/incinerator)
-"vAo" = (
-/obj/effect/turf_decal/stripes/corner,
-/obj/structure/table,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 9
- },
-/obj/item/paper_bin{
- pixel_x = -4;
- pixel_y = 4
- },
-/obj/item/assembly/signaler{
- desc = "Used to remotely activate devices. Allows for syncing when using a secure signaler on another. Slightly scooted.";
- pixel_x = 8;
- pixel_y = 4
- },
-/obj/item/assembly/signaler{
- desc = "Used to remotely activate devices. Allows for syncing when using a secure signaler on another. Slightly scooted.";
- pixel_x = 8;
- pixel_y = 4
- },
-/obj/item/assembly/signaler{
- desc = "Used to remotely activate devices. Allows for syncing when using a secure signaler on another. Slightly scooted.";
- pixel_x = 8;
- pixel_y = 4
- },
-/obj/item/pen,
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/turf/open/floor/iron/showroomfloor,
-/area/science/test_area)
"vAx" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -85130,21 +85025,6 @@
},
/turf/open/floor/iron/dark,
/area/commons/storage/primary)
-"wiR" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/item/tank/internals/plasmaman/belt/full,
-/obj/structure/table,
-/obj/structure/sign/poster/contraband/rebels_unite{
- pixel_x = 32;
- pixel_y = -32
- },
-/obj/effect/turf_decal/trimline/purple/filled/corner{
- dir = 1
- },
-/obj/effect/turf_decal/trimline/purple/filled/corner,
-/obj/item/flashlight/lamp,
-/turf/open/floor/plating/rust/plasma,
-/area/maintenance/space_hut/plasmaman)
"wje" = (
/obj/structure/table/glass,
/obj/machinery/computer/med_data/laptop,
@@ -85487,6 +85367,12 @@
icon_state = "platingdmg1"
},
/area/security/office)
+"woi" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/turf/open/floor/iron/dark,
+/area/science/research)
"woB" = (
/obj/machinery/door/poddoor/shutters/preopen{
id = "ceprivate";
@@ -85508,6 +85394,14 @@
/obj/machinery/status_display/evac/directional/east,
/turf/open/floor/iron/showroomfloor,
/area/medical/medbay/central)
+"woH" = (
+/mob/living/simple_animal/hostile/carp{
+ environment_smash = 0;
+ name = "Tuna";
+ real_name = "Tuna"
+ },
+/turf/open/floor/plating/asteroid/airless,
+/area/space/nearstation)
"woL" = (
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
@@ -87076,26 +86970,6 @@
},
/turf/open/floor/iron,
/area/maintenance/disposal/incinerator)
-"wYW" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/obj/machinery/computer/shuttle/mining/common,
-/turf/open/floor/iron,
-/area/commons/fitness/recreation)
"wZx" = (
/obj/machinery/light/small/directional/south,
/obj/effect/turf_decal/sand/plating,
@@ -87429,6 +87303,10 @@
/obj/machinery/airalarm/directional/south,
/turf/open/floor/iron/dark,
/area/science/test_area)
+"xfU" = (
+/obj/item/circuitboard/computer/solar_control,
+/turf/open/floor/plating/asteroid/airless,
+/area/space/nearstation)
"xgo" = (
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
@@ -87782,6 +87660,20 @@
},
/turf/open/floor/iron/dark,
/area/engineering/atmos)
+"xoq" = (
+/obj/machinery/computer/aifixer{
+ dir = 1
+ },
+/obj/effect/turf_decal/bot,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/iron/dark,
+/area/command/heads_quarters/rd)
"xoK" = (
/obj/machinery/portable_atmospherics/canister/nitrous_oxide,
/obj/effect/turf_decal/delivery,
@@ -89337,23 +89229,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/dark,
/area/command/heads_quarters/ce)
-"xUP" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/sign/poster/contraband/rebels_unite{
- pixel_x = -32;
- pixel_y = -32
- },
-/obj/effect/turf_decal/trimline/purple/filled/corner{
- dir = 4
- },
-/obj/effect/turf_decal/trimline/purple/filled/corner{
- dir = 8
- },
-/obj/item/toy/plush/plasmamanplushie{
- name = "Dianion XV"
- },
-/turf/open/floor/plating/rust/plasma,
-/area/maintenance/space_hut/plasmaman)
"xUW" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -89490,6 +89365,18 @@
/obj/effect/landmark/start/hangover,
/turf/open/floor/iron/dark,
/area/service/bar)
+"xYR" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/structure/railing{
+ dir = 4
+ },
+/turf/open/floor/iron/dark,
+/area/science/research)
"xZt" = (
/obj/structure/chair/stool/directional/north,
/obj/structure/cable,
@@ -102324,7 +102211,7 @@ tnI
oUy
aau
aeU
-cmU
+aqQ
jOe
jOe
jOe
@@ -102840,7 +102727,7 @@ asO
cmU
cmU
foo
-foo
+rhC
foo
foo
foo
@@ -104315,7 +104202,7 @@ aeu
aeU
aeU
coy
-aeU
+woH
aDS
nBm
bFI
@@ -104640,7 +104527,7 @@ acK
cmU
aeU
aUz
-aeU
+xfU
aeU
cnS
cuU
@@ -105415,7 +105302,7 @@ vIb
cnO
kuW
cuZ
-cxk
+dWe
cnN
aeu
aeU
@@ -107692,7 +107579,7 @@ wrV
wrV
wrV
ich
-wYW
+pid
ney
vqR
qlh
@@ -127970,12 +127857,12 @@ ifJ
rYN
aWW
aZv
-vse
-aXE
+aow
+aXI
+aXI
aXI
-aYR
beD
-bbj
+woi
aOi
bep
aZi
@@ -128228,10 +128115,10 @@ iOj
vlS
rJG
rJG
-kzj
-aXX
-aYS
-aZt
+eML
+xYR
+xYR
+rvF
bbl
aOi
cmg
@@ -128486,10 +128373,10 @@ ltR
mjr
vlS
vlS
-aYN
-aYT
-aYS
-bbJ
+vlS
+vlS
+njW
+bbl
aOo
bgj
aYe
@@ -128741,11 +128628,11 @@ aww
wtC
uNr
lov
-nOe
-vlS
+iYZ
+hwx
+xoq
vlS
-aYU
-beE
+njW
bbl
aOi
aRp
@@ -128998,12 +128885,12 @@ aWU
iOj
hea
hRI
-cYO
-tWx
+aNt
+hiG
+gCQ
vlS
-vlS
-aZX
-bbL
+njW
+bbl
aOi
bep
baU
@@ -129255,12 +129142,12 @@ baJ
iOj
pvu
xsN
-uBq
-hdL
+ivb
+czz
eSG
vlS
rJG
-hop
+qRl
aOr
aRB
aSJ
@@ -129511,8 +129398,8 @@ fsn
bcH
iOj
tGO
-smq
-tOW
+rPu
+erH
dPy
fPK
qOj
@@ -129770,7 +129657,7 @@ iOj
iOj
pgF
swx
-fRy
+jaC
oAb
tJP
vlS
@@ -129845,7 +129732,7 @@ erS
deb
aeu
ckU
-jPh
+cfs
cGv
cGV
clb
@@ -131898,10 +131785,10 @@ aeu
aUz
cmU
nRr
-nRr
-nRr
-nRr
-nRr
+hsn
+hsn
+hsn
+hsn
kuv
nRr
nRr
@@ -132413,15 +132300,15 @@ aeU
cmU
nRr
nRr
-nRr
-nRr
-nRr
+hsn
+hsn
+hsn
kuv
nRr
nRr
nRr
-nRr
-nRr
+hsn
+hsn
acm
aeo
acm
@@ -132607,7 +132494,7 @@ bbi
caT
xpL
pbn
-vAo
+tNe
xEu
xEu
gVX
@@ -132862,7 +132749,7 @@ cbk
aOU
kRX
qoN
-uhS
+dkL
sln
cHQ
sLE
@@ -132926,7 +132813,7 @@ aeU
cmU
nRr
nRr
-nRr
+hsn
nRr
nRr
xOh
@@ -133442,12 +133329,12 @@ nRr
nRr
nRr
nRr
-nRr
+hsn
xOh
kuv
xOh
-nRr
-nRr
+hsn
+hsn
nRr
nRr
nRr
@@ -133959,9 +133846,9 @@ nRr
nRr
nRr
kuv
-nRr
-nRr
-nRr
+hsn
+hsn
+hsn
nRr
nRr
acm
@@ -139809,8 +139696,8 @@ aaa
aeo
aaa
pFC
-dyq
-xUP
+nRi
+fxL
pFC
viq
aaa
@@ -140066,8 +139953,8 @@ aaa
aaQ
aaa
pFC
-pqf
-vzj
+gOl
+gCO
pFC
viq
aaa
@@ -140323,8 +140210,8 @@ aaa
aeo
aaa
pFC
-qBh
-wiR
+lGH
+vbD
pFC
viq
aaa
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index d3950a6b8b..164edfdd93 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -1405,6 +1405,37 @@
/obj/machinery/door/firedoor,
/turf/open/floor/iron,
/area/cargo/sorting)
+"ajN" = (
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/research{
+ name = "Xenobiology Entrance";
+ req_access_txt = "47"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/turf/open/floor/iron/white,
+/area/science/research)
"ajO" = (
/obj/structure/closet,
/obj/item/clothing/gloves/color/fyellow,
@@ -4374,9 +4405,6 @@
/obj/effect/spawner/lootdrop/maintenance/three,
/turf/open/floor/plating,
/area/maintenance/starboard)
-"aHw" = (
-/turf/open/floor/plating,
-/area/medical/medbay/central)
"aHx" = (
/turf/closed/wall/r_wall,
/area/hallway/primary/fore)
@@ -4748,16 +4776,6 @@
icon_state = "platingdmg1"
},
/area/maintenance/port/fore)
-"aLn" = (
-/obj/structure/table,
-/obj/machinery/microwave,
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/machinery/light/small/directional/east,
-/turf/open/floor/iron,
-/area/science/nanite)
"aLs" = (
/obj/structure/sign/plaques/kiddie{
pixel_y = 32
@@ -6020,21 +6038,6 @@
},
/turf/open/floor/iron,
/area/hallway/secondary/entry)
-"aXh" = (
-/obj/machinery/door/window/northleft{
- name = "Nanite Lab"
- },
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron,
-/area/science/nanite)
"aXm" = (
/obj/effect/turf_decal/siding/wood,
/obj/structure/disposalpipe/segment{
@@ -7072,6 +7075,21 @@
},
/turf/open/floor/iron,
/area/security/brig)
+"bih" = (
+/obj/structure/chair/comfy{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/machinery/airalarm/directional/south,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 1
+ },
+/obj/effect/landmark/start/scientist,
+/turf/open/floor/iron,
+/area/science/research)
"bio" = (
/obj/machinery/camera{
c_tag = "AI Chamber - Aft";
@@ -7282,20 +7300,6 @@
},
/turf/open/floor/circuit,
/area/ai_monitored/turret_protected/ai)
-"bkv" = (
-/obj/structure/window/reinforced/tinted{
- dir = 1
- },
-/obj/machinery/disposal/bin,
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/structure/disposalpipe/trunk{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/science/nanite)
"bkB" = (
/obj/item/extinguisher,
/turf/open/floor/plating,
@@ -7534,14 +7538,6 @@
},
/turf/open/floor/iron,
/area/hallway/primary/starboard)
-"bmT" = (
-/obj/machinery/nanite_program_hub,
-/obj/machinery/requests_console/directional/north{
- department = "Nanite Lab";
- name = "Nanite Lab Requests Console"
- },
-/turf/open/floor/circuit/green,
-/area/science/nanite)
"bmX" = (
/obj/effect/turf_decal/tile/blue,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
@@ -7823,6 +7819,21 @@
},
/turf/open/floor/iron,
/area/security/checkpoint/customs)
+"bpx" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/machinery/light/small/directional/west,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
+ },
+/obj/structure/disposalpipe/junction/flip{
+ dir = 8
+ },
+/turf/open/floor/iron/white,
+/area/science/research)
"bpF" = (
/obj/structure/toilet{
pixel_y = 8
@@ -10776,6 +10787,14 @@
/obj/machinery/atmospherics/components/unary/cryo_cell,
/turf/open/floor/iron/dark/textured,
/area/medical/cryo)
+"cah" = (
+/obj/item/radio/intercom/directional/west,
+/obj/structure/frame/computer{
+ anchored = 1;
+ dir = 4
+ },
+/turf/open/floor/circuit/green/off,
+/area/science/research)
"car" = (
/obj/structure/cable,
/turf/open/floor/iron,
@@ -12867,9 +12886,6 @@
},
/turf/open/floor/engine,
/area/engineering/supermatter/room)
-"ctL" = (
-/turf/closed/wall/r_wall,
-/area/science/nanite)
"ctU" = (
/obj/machinery/door/airlock/security/glass{
name = "Security Post - Cargo";
@@ -12902,6 +12918,23 @@
},
/turf/open/floor/wood,
/area/cargo/qm)
+"cui" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/science/research)
"cuj" = (
/obj/machinery/camera{
c_tag = "Supermatter Chamber";
@@ -14228,6 +14261,18 @@
},
/turf/open/floor/iron,
/area/security/checkpoint/science)
+"cHh" = (
+/obj/structure/table,
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/structure/extinguisher_cabinet/directional/south,
+/obj/item/reagent_containers/food/drinks/britcup{
+ pixel_y = 2
+ },
+/turf/open/floor/iron,
+/area/science/research)
"cHu" = (
/obj/structure/cable,
/obj/machinery/camera{
@@ -15503,6 +15548,22 @@
},
/turf/open/space/basic,
/area/space)
+"cTr" = (
+/obj/structure/chair/comfy{
+ dir = 4
+ },
+/obj/machinery/camera{
+ c_tag = "Science Break Room";
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/machinery/light/small/directional/west,
+/obj/machinery/light_switch/directional/south,
+/turf/open/floor/iron,
+/area/science/research)
"cTz" = (
/obj/structure/table,
/obj/item/paper_bin{
@@ -15527,13 +15588,6 @@
/obj/machinery/space_heater,
/turf/open/floor/plating,
/area/maintenance/department/science/xenobiology)
-"cTN" = (
-/obj/structure/sign/warning/securearea,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/closed/wall,
-/area/science/nanite)
"cTU" = (
/obj/structure/cable,
/obj/machinery/power/apc/auto_name/north,
@@ -16546,6 +16600,17 @@
/obj/machinery/duct,
/turf/open/floor/plating,
/area/maintenance/fore)
+"dhj" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/science/research)
"dhn" = (
/obj/structure/table,
/obj/item/poster/random_contraband,
@@ -16803,6 +16868,26 @@
/obj/structure/disposalpipe/trunk,
/turf/open/floor/iron,
/area/science/lab)
+"dkc" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 8
+ },
+/obj/structure/disposalpipe/sorting/mail{
+ dir = 1;
+ sortType = 28
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/turf/open/floor/iron/white,
+/area/science/research)
"dki" = (
/obj/machinery/atmospherics/pipe/smart/simple/supply/visible,
/turf/closed/wall/r_wall,
@@ -18550,16 +18635,6 @@
},
/turf/open/floor/iron/white,
/area/medical/pharmacy)
-"dMl" = (
-/obj/structure/table,
-/obj/effect/spawner/lootdrop/donkpockets,
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/machinery/firealarm/directional/south,
-/turf/open/floor/iron,
-/area/science/nanite)
"dMw" = (
/obj/effect/turf_decal/stripes/line,
/obj/machinery/status_display/evac/directional/south,
@@ -19116,6 +19191,17 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/service/bar)
+"dWO" = (
+/obj/structure/chair/comfy{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/item/radio/intercom/directional/south,
+/turf/open/floor/iron,
+/area/science/research)
"dWU" = (
/obj/machinery/disposal/bin,
/obj/effect/turf_decal/bot,
@@ -21984,20 +22070,6 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
-"eQK" = (
-/obj/structure/table/glass,
-/obj/item/storage/box/disks_nanite{
- pixel_x = -5;
- pixel_y = 6
- },
-/obj/item/storage/box/disks_nanite{
- pixel_x = 6;
- pixel_y = 3
- },
-/obj/machinery/light_switch/directional/north,
-/obj/effect/turf_decal/bot,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"eRa" = (
/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
dir = 10
@@ -22421,6 +22493,17 @@
},
/turf/open/floor/iron/dark,
/area/command/bridge)
+"eWT" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible,
+/obj/machinery/duct,
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 9
+ },
+/obj/structure/cable,
+/turf/open/floor/iron/white,
+/area/medical/cryo)
"eWV" = (
/obj/structure/table,
/obj/item/paper/fluff/holodeck/disclaimer,
@@ -22723,17 +22806,6 @@
/obj/item/shard,
/turf/open/space/basic,
/area/space/nearstation)
-"fde" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/science/nanite)
"fdq" = (
/obj/structure/chair/stool/directional/north,
/obj/structure/disposalpipe/segment{
@@ -25026,15 +25098,6 @@
},
/turf/open/floor/iron/white,
/area/science/mixing)
-"fQU" = (
-/obj/structure/table,
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/structure/extinguisher_cabinet/directional/south,
-/turf/open/floor/iron,
-/area/science/nanite)
"fRh" = (
/obj/item/radio/intercom/directional/west,
/obj/structure/table/glass,
@@ -25288,6 +25351,18 @@
/obj/item/pen/invisible,
/turf/open/floor/engine/cult,
/area/service/library)
+"fVN" = (
+/obj/structure/cable,
+/obj/machinery/light/directional/north,
+/obj/machinery/power/apc/auto_name/north,
+/obj/effect/turf_decal/siding/wood{
+ dir = 9
+ },
+/mob/living/simple_animal/pet/dog/corgi/puppy/void{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/science/research)
"fWg" = (
/obj/structure/chair,
/obj/machinery/computer/security/telescreen/interrogation{
@@ -25325,6 +25400,20 @@
},
/turf/open/floor/circuit/green,
/area/science/robotics/mechbay)
+"fXt" = (
+/obj/structure/cable,
+/obj/item/food/cracker,
+/obj/item/food/cracker{
+ pixel_x = 9;
+ pixel_y = 9
+ },
+/obj/item/trash/boritos{
+ desc = "Why does it look like boritos? Nobody would feed unhealthy snacks to pets, right?";
+ name = "cracker bag";
+ pixel_x = -14
+ },
+/turf/open/floor/grass,
+/area/science/research)
"fXC" = (
/obj/structure/window/reinforced{
dir = 8
@@ -25686,11 +25775,6 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard)
-"gdG" = (
-/obj/machinery/computer/nanite_cloud_controller,
-/obj/machinery/airalarm/directional/north,
-/turf/open/floor/circuit/green,
-/area/science/nanite)
"gdY" = (
/obj/machinery/photocopier{
pixel_y = 3
@@ -25877,6 +25961,12 @@
},
/turf/open/floor/plating,
/area/maintenance/fore)
+"ghY" = (
+/mob/living/simple_animal/pet/penguin/baby{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/science/research)
"gib" = (
/obj/effect/turf_decal/stripes/line,
/obj/structure/disposalpipe/segment,
@@ -26631,6 +26721,14 @@
},
/turf/open/floor/iron/freezer,
/area/security/prison)
+"gvE" = (
+/obj/machinery/light_switch/directional/north,
+/obj/effect/turf_decal/siding/wood{
+ dir = 5
+ },
+/mob/living/simple_animal/pet/dog/corgi/puppy/slime,
+/turf/open/floor/grass,
+/area/science/research)
"gvH" = (
/obj/structure/lattice/catwalk,
/obj/item/barcodescanner,
@@ -26880,37 +26978,6 @@
},
/turf/open/floor/engine,
/area/science/xenobiology)
-"gAI" = (
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/research{
- name = "Nanite Laboratory";
- req_access_txt = "47"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 4
- },
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/turf/open/floor/iron/white,
-/area/science/nanite)
"gAP" = (
/obj/structure/sign/departments/cargo,
/turf/closed/wall,
@@ -27409,6 +27476,10 @@
/obj/effect/landmark/start/hangover/closet,
/turf/open/floor/iron/dark,
/area/commons/locker)
+"gHY" = (
+/obj/structure/closet/firecloset,
+/turf/open/floor/plating,
+/area/maintenance/aft)
"gId" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 4
@@ -27549,32 +27620,6 @@
},
/turf/open/floor/iron/dark,
/area/science/mixing)
-"gLm" = (
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/cable,
-/obj/machinery/door/airlock/research{
- name = "Xenobiology Space Bridge";
- req_access_txt = "55"
- },
-/obj/machinery/door/firedoor,
-/obj/machinery/door/poddoor/preopen{
- id = "xeno_blastdoor";
- name = "biohazard containment door"
- },
-/turf/open/floor/iron/white,
-/area/science/nanite)
"gMj" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/wood,
@@ -27821,6 +27866,31 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/plating,
/area/engineering/main)
+"gTG" = (
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/research{
+ name = "Xenobiology Access";
+ req_access_txt = "47"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/obj/structure/cable,
+/turf/open/floor/iron/white,
+/area/science/research)
"gTQ" = (
/obj/machinery/light/directional/east,
/obj/structure/disposalpipe/segment,
@@ -28106,6 +28176,13 @@
/obj/effect/spawner/lootdrop/glowstick,
/turf/open/floor/iron/white,
/area/medical/abandoned)
+"gZq" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/science/research)
"gZM" = (
/obj/structure/sign/warning/pods,
/turf/closed/wall/r_wall,
@@ -30757,17 +30834,6 @@
},
/turf/open/floor/iron,
/area/service/hydroponics)
-"hXe" = (
-/obj/effect/decal/cleanable/blood/old,
-/obj/machinery/camera{
- c_tag = "Science Maintenance Corridor";
- dir = 8
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/open/floor/iron/white,
-/area/science/nanite)
"hXg" = (
/obj/effect/turf_decal/stripes/line,
/obj/structure/cable,
@@ -31718,18 +31784,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/commons/dorms)
-"inN" = (
-/obj/structure/window/reinforced/tinted{
- dir = 1
- },
-/obj/item/kirbyplants/random,
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/machinery/light/small/directional/east,
-/turf/open/floor/iron,
-/area/science/nanite)
"inS" = (
/obj/item/radio/intercom/directional/south,
/obj/effect/turf_decal/tile/neutral{
@@ -31756,23 +31810,6 @@
/obj/effect/turf_decal/trimline/brown/warning,
/turf/open/floor/iron/white,
/area/hallway/primary/central)
-"iog" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/science/nanite)
"iov" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -31895,6 +31932,18 @@
},
/turf/open/floor/engine/plasma,
/area/engineering/atmos)
+"iqC" = (
+/obj/structure/window/reinforced/tinted{
+ dir = 1
+ },
+/obj/item/kirbyplants/random,
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/machinery/light/small/directional/east,
+/turf/open/floor/iron,
+/area/science/research)
"iqL" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/yellow{
@@ -33301,6 +33350,18 @@
},
/turf/open/floor/iron,
/area/service/hydroponics/garden)
+"iQR" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron,
+/area/science/research)
"iQX" = (
/obj/machinery/porta_turret/ai,
/obj/machinery/flasher/directional/north{
@@ -33699,6 +33760,16 @@
"iXC" = (
/turf/open/floor/engine/air,
/area/engineering/atmos)
+"iXU" = (
+/obj/structure/table,
+/obj/effect/spawner/lootdrop/donkpockets,
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/machinery/firealarm/directional/south,
+/turf/open/floor/iron,
+/area/science/research)
"iYi" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -35302,6 +35373,10 @@
},
/turf/open/floor/iron,
/area/service/hydroponics)
+"jBe" = (
+/obj/effect/decal/cleanable/garbage,
+/turf/open/floor/iron/white,
+/area/science/research)
"jBf" = (
/obj/structure/table/glass,
/obj/item/paper_bin{
@@ -35686,6 +35761,19 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/hallway/secondary/service)
+"jJh" = (
+/obj/structure/window/reinforced/tinted{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/science/research)
"jJq" = (
/obj/machinery/portable_atmospherics/canister/oxygen,
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
@@ -38575,6 +38663,21 @@
},
/turf/open/floor/iron,
/area/hallway/primary/starboard)
+"kId" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/machinery/light/small/directional/west,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/turf/open/floor/iron/white,
+/area/science/research)
"kIj" = (
/obj/machinery/airalarm/directional/east,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
@@ -39443,6 +39546,12 @@
},
/turf/open/floor/iron,
/area/cargo/miningoffice)
+"kXQ" = (
+/obj/structure/frame/machine{
+ anchored = 1
+ },
+/turf/open/floor/circuit/green/off,
+/area/science/research)
"kYe" = (
/obj/effect/turf_decal/tile/neutral{
dir = 4
@@ -40766,13 +40875,6 @@
},
/turf/open/floor/iron/white,
/area/science/storage)
-"lta" = (
-/obj/machinery/computer/nanite_chamber_control{
- dir = 4
- },
-/obj/item/radio/intercom/directional/west,
-/turf/open/floor/circuit/green,
-/area/science/nanite)
"ltg" = (
/obj/machinery/door/airlock/grunge{
name = "Prison Workshop"
@@ -43518,6 +43620,10 @@
/obj/effect/spawner/lootdrop/gross_decal_spawner,
/turf/open/floor/iron/white,
/area/medical/abandoned)
+"mpa" = (
+/obj/structure/sign/warning/securearea,
+/turf/closed/wall,
+/area/science/research)
"mph" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/circuit,
@@ -43908,6 +44014,12 @@
/obj/structure/cable,
/turf/open/floor/wood,
/area/service/lawoffice)
+"mvj" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/science/research)
"mvv" = (
/obj/machinery/light/small/directional/south,
/obj/effect/decal/cleanable/cobweb,
@@ -44245,6 +44357,20 @@
},
/turf/open/floor/iron/white,
/area/medical/medbay/central)
+"mAN" = (
+/obj/machinery/door/window/northleft{
+ name = "Petting Zoo"
+ },
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/science/research)
"mBw" = (
/obj/structure/cable,
/obj/structure/disposalpipe/junction{
@@ -44371,6 +44497,13 @@
/obj/machinery/light_switch/directional/west,
/turf/open/floor/iron,
/area/commons/dorms)
+"mCH" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 10
+ },
+/obj/structure/flora/ausbushes/stalkybush,
+/turf/open/floor/grass,
+/area/science/research)
"mDk" = (
/obj/machinery/power/rad_collector/anchored,
/obj/structure/window/plasma/reinforced{
@@ -45157,13 +45290,6 @@
/obj/machinery/libraryscanner,
/turf/open/floor/wood,
/area/service/library)
-"mQQ" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
-/obj/effect/turf_decal/siding/green{
- dir = 1
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"mQU" = (
/obj/structure/plasticflaps,
/obj/structure/window/reinforced{
@@ -46351,6 +46477,24 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/carpet,
/area/command/heads_quarters/hos)
+"niR" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/machinery/holopad,
+/turf/open/floor/iron,
+/area/science/research)
"niS" = (
/obj/machinery/light/directional/east,
/obj/structure/disposalpipe/segment,
@@ -46446,11 +46590,6 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/commons/storage/primary)
-"nkS" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"nkV" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/stripes/white/line{
@@ -46668,31 +46807,6 @@
},
/turf/open/floor/iron/dark,
/area/service/chapel/main)
-"noS" = (
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/research{
- name = "Nanite and Xenobiology Access";
- req_access_txt = "47"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/obj/structure/cable,
-/turf/open/floor/iron/white,
-/area/science/research)
"noT" = (
/obj/structure/table/glass,
/obj/item/food/chips{
@@ -46890,20 +47004,6 @@
},
/turf/open/floor/iron,
/area/hallway/primary/starboard)
-"nsC" = (
-/obj/machinery/door/window/northright{
- name = "Nanite Lab"
- },
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/iron,
-/area/science/nanite)
"nsG" = (
/obj/machinery/hydroponics/soil,
/obj/machinery/camera{
@@ -47965,17 +48065,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/grimy,
/area/service/chapel/office)
-"nIx" = (
-/obj/structure/chair/comfy{
- dir = 4
- },
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/item/radio/intercom/directional/south,
-/turf/open/floor/iron,
-/area/science/nanite)
"nID" = (
/obj/machinery/door/airlock/maintenance{
name = "Genetics Maintenance";
@@ -48070,6 +48159,13 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/hallway/primary/port)
+"nJl" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 6
+ },
+/obj/structure/flora/ausbushes/grassybush,
+/turf/open/floor/grass,
+/area/science/research)
"nJN" = (
/obj/machinery/power/apc/auto_name/east,
/obj/structure/cable,
@@ -49109,6 +49205,17 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/maintenance/port/fore)
+"obj" = (
+/obj/effect/decal/cleanable/blood/old,
+/obj/machinery/camera{
+ c_tag = "Science Maintenance Corridor";
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron/white,
+/area/science/research)
"obv" = (
/obj/structure/sign/poster/contraband/random{
pixel_x = 32
@@ -49786,17 +49893,6 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/hallway/primary/port)
-"onG" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible,
-/obj/machinery/duct,
-/obj/effect/turf_decal/trimline/blue/filled/line{
- dir = 9
- },
-/obj/structure/cable,
-/turf/open/floor/iron/white,
-/area/medical/coldroom)
"onR" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/medical/glass{
@@ -50083,20 +50179,6 @@
},
/turf/open/floor/iron,
/area/security/brig)
-"orG" = (
-/obj/effect/landmark/blobstart,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 4
- },
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/turf/open/floor/iron/white,
-/area/science/nanite)
"orL" = (
/obj/machinery/biogenerator,
/obj/effect/decal/cleanable/dirt,
@@ -50727,18 +50809,6 @@
/obj/item/radio/intercom/directional/west,
/turf/open/floor/iron/white,
/area/medical/medbay/central)
-"oDK" = (
-/obj/machinery/door/airlock/maintenance{
- name = "Medbay Maintenance";
- req_access_txt = "5"
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 4
- },
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/plating,
-/area/medical/medbay/central)
"oDQ" = (
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
@@ -51418,15 +51488,6 @@
/obj/structure/cable/multilayer/connected,
/turf/open/floor/iron/dark,
/area/ai_monitored/aisat/exterior)
-"oOD" = (
-/obj/structure/chair/office/light{
- dir = 4
- },
-/obj/effect/turf_decal/siding/green{
- dir = 5
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"oOF" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -51709,6 +51770,10 @@
/obj/machinery/firealarm/directional/east,
/turf/open/floor/iron/dark,
/area/command/heads_quarters/hos)
+"oTI" = (
+/obj/effect/turf_decal/siding/wood,
+/turf/open/floor/grass,
+/area/science/research)
"oTJ" = (
/obj/effect/turf_decal/tile/neutral{
dir = 8
@@ -51749,11 +51814,6 @@
dir = 1
},
/area/hallway/primary/central)
-"oTY" = (
-/obj/machinery/holopad,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"oUb" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/purple{
@@ -52602,6 +52662,21 @@
},
/turf/open/floor/plating,
/area/maintenance/aft)
+"pgi" = (
+/obj/structure/window/reinforced/tinted{
+ dir = 1
+ },
+/obj/item/kirbyplants/random,
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/machinery/light/small/directional/west,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/science/research)
"pgt" = (
/obj/machinery/light/small/directional/west,
/obj/effect/decal/cleanable/dirt,
@@ -54523,16 +54598,6 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard)
-"pPZ" = (
-/obj/structure/chair/office/light{
- dir = 8
- },
-/obj/structure/cable,
-/obj/effect/turf_decal/siding/green{
- dir = 9
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"pQi" = (
/obj/effect/turf_decal/trimline/red/filled/line{
dir = 4
@@ -54927,6 +54992,10 @@
},
/turf/open/floor/iron,
/area/science/robotics/lab)
+"pWO" = (
+/obj/structure/sign/warning/biohazard,
+/turf/closed/wall/r_wall,
+/area/science/research)
"pWR" = (
/obj/machinery/ai_slipper{
uses = 10
@@ -54965,6 +55034,20 @@
/obj/machinery/light_switch/directional/south,
/turf/open/floor/iron/dark,
/area/engineering/storage/tech)
+"pXA" = (
+/obj/effect/landmark/blobstart,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/turf/open/floor/iron/white,
+/area/science/research)
"pXT" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/public/glass{
@@ -56658,20 +56741,6 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/security/office)
-"qCP" = (
-/obj/structure/chair/comfy{
- dir = 8
- },
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/machinery/airalarm/directional/south,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/science/nanite)
"qCQ" = (
/obj/structure/window/reinforced{
dir = 1;
@@ -57223,22 +57292,6 @@
/obj/structure/grille,
/turf/closed/wall/r_wall,
/area/engineering/atmos)
-"qMf" = (
-/obj/structure/chair/comfy{
- dir = 4
- },
-/obj/machinery/camera{
- c_tag = "Science Break Room";
- dir = 4
- },
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/machinery/light/small/directional/west,
-/obj/machinery/light_switch/directional/south,
-/turf/open/floor/iron,
-/area/science/nanite)
"qMr" = (
/turf/closed/wall,
/area/service/kitchen/coldroom)
@@ -58262,14 +58315,6 @@
icon_state = "platingdmg3"
},
/area/solars/port/fore)
-"rdZ" = (
-/obj/structure/cable,
-/obj/effect/landmark/start/scientist,
-/obj/effect/turf_decal/siding/green{
- dir = 1
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"rec" = (
/obj/docking_port/stationary/random{
dir = 4;
@@ -58852,16 +58897,6 @@
/obj/machinery/atmospherics/pipe/smart/simple/dark/visible,
/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
-"rnM" = (
-/obj/machinery/computer/nanite_chamber_control{
- dir = 8
- },
-/obj/machinery/camera{
- c_tag = "Science Nanites Lab";
- dir = 8
- },
-/turf/open/floor/circuit/green,
-/area/science/nanite)
"rnV" = (
/obj/structure/sign/warning/securearea,
/turf/closed/wall/r_wall,
@@ -59034,26 +59069,6 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard)
-"rqN" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 8
- },
-/obj/structure/disposalpipe/sorting/mail{
- dir = 1;
- sortType = 28
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/turf/open/floor/iron/white,
-/area/science/nanite)
"rqO" = (
/obj/machinery/door/firedoor,
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
@@ -59068,6 +59083,17 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/security/brig)
+"rqT" = (
+/obj/machinery/camera{
+ c_tag = "Science Petting Zoo";
+ dir = 8
+ },
+/obj/structure/frame/computer{
+ anchored = 1;
+ dir = 8
+ },
+/turf/open/floor/circuit/green/off,
+/area/science/research)
"rrj" = (
/obj/machinery/door/airlock/maintenance{
name = "Storage Room";
@@ -59232,19 +59258,6 @@
},
/turf/open/floor/iron,
/area/engineering/break_room)
-"rsu" = (
-/obj/structure/window/reinforced/tinted{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/science/nanite)
"rtc" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -61180,10 +61193,6 @@
/obj/machinery/light/small/directional/west,
/turf/open/floor/wood,
/area/command/heads_quarters/captain/private)
-"rYp" = (
-/obj/structure/closet/firecloset,
-/turf/open/floor/plating,
-/area/medical/medbay/central)
"rYC" = (
/turf/open/floor/plating{
icon_state = "platingdmg2"
@@ -61318,6 +61327,14 @@
},
/turf/open/floor/iron,
/area/hallway/secondary/command)
+"sbQ" = (
+/obj/machinery/airalarm/directional/north,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/structure/flora/ausbushes/brflowers,
+/turf/open/floor/grass,
+/area/science/research)
"sbW" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable,
@@ -62148,6 +62165,20 @@
"soZ" = (
/turf/open/floor/wood,
/area/command/corporate_showroom)
+"spa" = (
+/obj/structure/window/reinforced/tinted{
+ dir = 1
+ },
+/obj/machinery/disposal/bin,
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/structure/disposalpipe/trunk{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/science/research)
"spg" = (
/obj/machinery/light/small/directional/west,
/turf/open/floor/plating,
@@ -62178,10 +62209,6 @@
dir = 1
},
/area/engineering/atmos)
-"spG" = (
-/obj/structure/sign/warning/biohazard,
-/turf/closed/wall/r_wall,
-/area/science/nanite)
"spT" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -62877,6 +62904,16 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/science/robotics/mechbay)
+"sBX" = (
+/obj/structure/table,
+/obj/machinery/microwave,
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/machinery/light/small/directional/east,
+/turf/open/floor/iron,
+/area/science/research)
"sCb" = (
/obj/machinery/door/airlock/command{
name = "Command Desk";
@@ -62946,6 +62983,12 @@
},
/turf/open/floor/iron,
/area/engineering/atmos)
+"sDy" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/science/research)
"sDL" = (
/obj/effect/turf_decal/tile/blue,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -64108,13 +64151,6 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/engineering/main)
-"sVU" = (
-/obj/effect/turf_decal/trimline/blue/filled/corner{
- dir = 8
- },
-/obj/machinery/light/directional/south,
-/turf/open/floor/iron/white,
-/area/science/misc_lab)
"sWb" = (
/obj/machinery/atmospherics/pipe/smart/simple/orange/hidden{
dir = 6
@@ -66693,21 +66729,6 @@
/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/command/bridge)
-"tOv" = (
-/obj/structure/window/reinforced/tinted{
- dir = 1
- },
-/obj/item/kirbyplants/random,
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/machinery/light/small/directional/west,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/science/nanite)
"tOw" = (
/obj/structure/sink{
dir = 8;
@@ -67623,23 +67644,6 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/science/robotics/mechbay)
-"ueO" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/science/nanite)
"ueU" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
@@ -68667,6 +68671,13 @@
},
/turf/open/floor/iron,
/area/commons/locker)
+"uuh" = (
+/obj/structure/sign/warning/securearea,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/closed/wall,
+/area/science/research)
"uui" = (
/obj/structure/cable,
/obj/effect/turf_decal/stripes/line{
@@ -68754,6 +68765,32 @@
},
/turf/open/floor/iron,
/area/engineering/gravity_generator)
+"uvd" = (
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/cable,
+/obj/machinery/door/airlock/research{
+ name = "Xenobiology Space Bridge";
+ req_access_txt = "55"
+ },
+/obj/machinery/door/firedoor,
+/obj/machinery/door/poddoor/preopen{
+ id = "xeno_blastdoor";
+ name = "biohazard containment door"
+ },
+/turf/open/floor/iron/white,
+/area/science/research)
"uvj" = (
/obj/structure/closet/lasertag/blue,
/obj/effect/turf_decal/tile/neutral{
@@ -68901,21 +68938,6 @@
},
/turf/open/floor/iron/dark,
/area/science/genetics)
-"uxi" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/structure/cable,
-/obj/machinery/light/small/directional/west,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/obj/structure/disposalpipe/segment{
- dir = 9
- },
-/turf/open/floor/iron/white,
-/area/science/nanite)
"uxy" = (
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
@@ -69220,6 +69242,11 @@
/obj/machinery/light_switch/directional/east,
/turf/open/floor/iron/dark,
/area/ai_monitored/security/armory)
+"uDl" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/siding/wood,
+/turf/open/floor/grass,
+/area/science/research)
"uDq" = (
/obj/structure/sign/poster/contraband/random{
pixel_x = -32
@@ -69332,18 +69359,6 @@
},
/turf/open/floor/plating,
/area/engineering/supermatter/room)
-"uFU" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/iron,
-/area/science/nanite)
"uFV" = (
/obj/item/kirbyplants/random,
/obj/effect/turf_decal/trimline/blue/filled/line{
@@ -69360,10 +69375,6 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/science/robotics/lab)
-"uFZ" = (
-/obj/machinery/nanite_programmer,
-/turf/open/floor/circuit/green,
-/area/science/nanite)
"uGc" = (
/obj/structure/girder,
/obj/structure/grille,
@@ -69728,6 +69739,14 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/engineering/main)
+"uML" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/plating,
+/area/maintenance/aft)
"uMZ" = (
/obj/machinery/computer/security/telescreen/entertainment/directional/north,
/turf/open/floor/wood,
@@ -69753,14 +69772,6 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/turf/open/floor/iron/white/smooth_large,
/area/medical/treatment_center)
-"uNj" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 4
- },
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/plating,
-/area/medical/medbay/central)
"uNx" = (
/obj/structure/rack,
/obj/effect/spawner/lootdrop/techstorage/security,
@@ -69875,6 +69886,19 @@
},
/turf/open/floor/iron/dark,
/area/command/gateway)
+"uPi" = (
+/obj/machinery/door/window/northright{
+ name = "Petting Zoo"
+ },
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/science/research)
"uPD" = (
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
@@ -70588,10 +70612,6 @@
},
/turf/open/floor/iron/white,
/area/science/research)
-"uZY" = (
-/obj/machinery/nanite_chamber,
-/turf/open/floor/circuit/green,
-/area/science/nanite)
"vaD" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -71578,21 +71598,6 @@
icon_state = "wood-broken5"
},
/area/service/library)
-"vqp" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/structure/cable,
-/obj/machinery/light/small/directional/west,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/obj/structure/disposalpipe/junction/flip{
- dir = 8
- },
-/turf/open/floor/iron/white,
-/area/science/nanite)
"vqw" = (
/obj/effect/turf_decal/tile/yellow,
/obj/effect/turf_decal/tile/yellow{
@@ -73212,6 +73217,18 @@
},
/turf/open/floor/iron/white,
/area/science/cytology)
+"vSv" = (
+/obj/machinery/door/airlock/maintenance{
+ name = "Medbay Maintenance";
+ req_access_txt = "5"
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/plating,
+/area/maintenance/aft)
"vSJ" = (
/obj/item/radio/intercom/directional/north,
/obj/machinery/camera{
@@ -74017,10 +74034,6 @@
},
/turf/open/floor/iron,
/area/security/warden)
-"whv" = (
-/obj/structure/sign/warning/securearea,
-/turf/closed/wall,
-/area/science/nanite)
"whB" = (
/obj/effect/turf_decal/trimline/blue/filled/line,
/turf/open/floor/iron/white,
@@ -75418,20 +75431,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/dark,
/area/engineering/gravity_generator)
-"wHW" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/science/nanite)
"wHY" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/blue{
@@ -76733,6 +76732,14 @@
/obj/effect/landmark/start/research_director,
/turf/open/floor/iron/dark,
/area/command/heads_quarters/rd)
+"xev" = (
+/obj/effect/turf_decal/trimline/blue/filled/corner{
+ dir = 8
+ },
+/obj/machinery/light/directional/south,
+/obj/machinery/module_duplicator,
+/turf/open/floor/iron/white,
+/area/science/misc_lab)
"xeO" = (
/obj/machinery/door/airlock/engineering{
name = "Starboard Quarter Solar Access";
@@ -77238,12 +77245,6 @@
/obj/effect/landmark/start/hangover/closet,
/turf/open/floor/iron/dark,
/area/commons/locker)
-"xmN" = (
-/obj/effect/turf_decal/siding/green{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"xmT" = (
/obj/structure/lattice,
/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{
@@ -77441,10 +77442,6 @@
/obj/effect/landmark/start/chaplain,
/turf/open/floor/iron/dark,
/area/service/chapel/main)
-"xrs" = (
-/obj/effect/decal/cleanable/garbage,
-/turf/open/floor/iron/white,
-/area/science/nanite)
"xrA" = (
/obj/machinery/air_sensor/atmos/carbon_tank,
/turf/open/floor/engine/co2,
@@ -78597,30 +78594,6 @@
},
/turf/open/floor/iron,
/area/maintenance/department/science/xenobiology)
-"xJV" = (
-/obj/item/nanite_scanner{
- pixel_x = -4;
- pixel_y = -4
- },
-/obj/item/nanite_scanner{
- pixel_x = 4;
- pixel_y = -4
- },
-/obj/item/nanite_remote{
- pixel_x = -4;
- pixel_y = 4
- },
-/obj/item/nanite_remote{
- pixel_x = 4;
- pixel_y = 4
- },
-/obj/effect/turf_decal/bot,
-/obj/structure/table/glass,
-/obj/structure/cable,
-/obj/machinery/light/directional/north,
-/obj/machinery/power/apc/auto_name/north,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"xJX" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/external{
@@ -79736,6 +79709,20 @@
},
/turf/open/floor/iron/dark,
/area/security/brig)
+"ydr" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/science/research)
"ydE" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/rack,
@@ -79778,12 +79765,6 @@
/obj/structure/lattice/catwalk,
/turf/open/space/basic,
/area/solars/port/aft)
-"yeh" = (
-/obj/effect/turf_decal/siding/green{
- dir = 4
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"yej" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/door/poddoor/preopen{
@@ -100820,7 +100801,7 @@ bLd
css
lUJ
olq
-onG
+eWT
tqf
aiX
mRw
@@ -102910,7 +102891,7 @@ vgF
wMP
cqi
tay
-aHw
+jNL
diR
bbw
iRA
@@ -103166,12 +103147,12 @@ dqj
cEP
cFS
cGN
-oDK
-uNj
+vSv
+uML
cJr
qqO
cLd
-iRA
+wRK
sNW
uXo
qkk
@@ -103424,11 +103405,11 @@ wEy
tfh
fTw
tay
-rYp
+gHY
diR
aQv
pfR
-iRA
+wRK
axD
aSC
cmS
@@ -103685,7 +103666,7 @@ tay
tay
tay
mhN
-iRA
+wRK
yih
aSC
qis
@@ -104199,7 +104180,7 @@ rXb
fRx
qRV
sjN
-iRA
+wRK
cFQ
nMX
kKn
@@ -104456,7 +104437,7 @@ aCl
fej
tay
mhN
-iRA
+wRK
fZo
nMX
kKn
@@ -104713,7 +104694,7 @@ tay
tay
tay
pug
-iRA
+wRK
qOc
nMX
kKn
@@ -104970,7 +104951,7 @@ leR
leR
leR
cvC
-iRA
+wRK
wRK
ldn
sxa
@@ -113934,7 +113915,7 @@ yjC
lGi
eAF
xAx
-sVU
+xev
nhL
oLk
kYe
@@ -116257,7 +116238,7 @@ cIg
cIg
cIg
dpV
-noS
+gTG
dpV
nOc
bjK
@@ -116513,9 +116494,9 @@ xZW
eZf
gXs
wmS
-vqp
-rqN
-uxi
+bpx
+dkc
+kId
gkv
uhC
fsL
@@ -116770,9 +116751,9 @@ dwL
cmY
ifi
ovj
-hXe
-orG
-xrs
+obj
+pXA
+jBe
dvY
kQY
lFg
@@ -117024,12 +117005,12 @@ ovj
ovj
ovj
dwL
-ctL
-ctL
-ctL
-cTN
-gAI
-whv
+cgo
+cgo
+cgo
+uuh
+ajN
+mpa
nOc
dyc
bjK
@@ -117280,14 +117261,14 @@ myQ
xZF
gGR
nGT
-ctL
-uFZ
-lta
-uZY
-tOv
-ueO
-qMf
-ctL
+cgo
+kXQ
+cah
+kXQ
+pgi
+cui
+cTr
+cgo
cEz
bjK
dyc
@@ -117537,14 +117518,14 @@ ovj
cpJ
ten
ovj
-ctL
-xJV
-pPZ
-xmN
-rsu
-ueO
-fQU
-ctL
+cgo
+fVN
+gZq
+mCH
+jJh
+cui
+cHh
+cgo
qfG
jTf
xaN
@@ -117794,14 +117775,14 @@ cos
dxh
hPn
crZ
-ctL
-bmT
-rdZ
-nkS
-aXh
-iog
-qCP
-ctL
+cgo
+mvj
+fXt
+uDl
+mAN
+niR
+bih
+cgo
vPM
ciL
sgX
@@ -118051,14 +118032,14 @@ cot
cnb
cra
csa
-ctL
-gdG
-mQQ
-oTY
-nsC
-uFU
-nIx
-ctL
+cgo
+sbQ
+ghY
+oTI
+uPi
+iQR
+dWO
+cgo
dww
cFu
dyc
@@ -118308,14 +118289,14 @@ nbv
nbv
cou
csb
-ctL
-eQK
-oOD
-yeh
-bkv
-wHW
-dMl
-ctL
+cgo
+gvE
+sDy
+nJl
+spa
+ydr
+iXU
+cgo
dvY
dvY
dvY
@@ -118565,14 +118546,14 @@ mhf
nbv
rYC
csc
-ctL
-uFZ
-rnM
-uZY
-inN
-fde
-aLn
-ctL
+cgo
+kXQ
+rqT
+kXQ
+iqC
+dhj
+sBX
+cgo
aaa
aaa
aaa
@@ -118823,13 +118804,13 @@ cpK
cwG
pPA
dwL
-ctL
-ctL
-ctL
-spG
-gLm
-spG
-ctL
+cgo
+cgo
+cgo
+pWO
+uvd
+pWO
+cgo
aaa
aaa
aaa
diff --git a/_maps/map_files/debug/runtimestation.dmm b/_maps/map_files/debug/runtimestation.dmm
index 066fffbf7e..adaecc5ce3 100644
--- a/_maps/map_files/debug/runtimestation.dmm
+++ b/_maps/map_files/debug/runtimestation.dmm
@@ -1472,10 +1472,6 @@
},
/turf/open/floor/plating,
/area/cargo/storage)
-"fd" = (
-/obj/structure/sign/departments/nanites,
-/turf/closed/wall/r_wall,
-/area/construction)
"fe" = (
/obj/machinery/computer/cargo{
dir = 8
@@ -2053,11 +2049,9 @@
/turf/open/floor/iron,
/area/hallway/primary/central)
"kp" = (
-/obj/machinery/computer/rdconsole{
- dir = 1
- },
+/obj/structure/server,
/turf/open/floor/iron/dark,
-/area/science/nanite)
+/area/science/misc_lab)
"kQ" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{
dir = 8
@@ -2092,7 +2086,7 @@
dir = 8
},
/turf/open/floor/iron/dark,
-/area/science/nanite)
+/area/science/misc_lab)
"nq" = (
/obj/effect/turf_decal/stripes/corner{
dir = 8
@@ -2136,12 +2130,6 @@
/obj/machinery/door/airlock,
/turf/open/floor/plating,
/area/engineering/atmos)
-"qd" = (
-/obj/machinery/airalarm/unlocked{
- pixel_y = 23
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"qQ" = (
/turf/open/floor/engine,
/area/cargo/miningoffice)
@@ -2164,10 +2152,9 @@
/turf/open/floor/iron,
/area/hallway/primary/central)
"sr" = (
-/obj/machinery/public_nanite_chamber,
-/obj/effect/turf_decal/stripes/box,
-/turf/open/floor/iron,
-/area/hallway/secondary/entry)
+/obj/machinery/door/airlock/shell,
+/turf/open/floor/iron/dark,
+/area/construction)
"sE" = (
/obj/machinery/power/rtg/advanced,
/obj/structure/cable,
@@ -2178,6 +2165,10 @@
/obj/item/storage/box/shipping,
/turf/open/floor/iron,
/area/commons/storage/primary)
+"tE" = (
+/obj/machinery/door/airlock/research,
+/turf/open/floor/iron/dark,
+/area/construction)
"tG" = (
/obj/docking_port/stationary/random{
id = "pod_lavaland";
@@ -2185,6 +2176,10 @@
},
/turf/open/space/basic,
/area/space)
+"tV" = (
+/obj/structure/bot,
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"uf" = (
/obj/structure/fans/tiny/invisible,
/obj/effect/turf_decal/stripes/line{
@@ -2212,14 +2207,25 @@
/turf/open/floor/iron,
/area/commons/storage/primary)
"uQ" = (
-/obj/machinery/nanite_programmer,
/obj/machinery/light/directional/west,
+/obj/structure/table,
+/obj/item/compact_remote,
+/obj/item/compact_remote,
+/obj/item/compact_remote{
+ pixel_x = -5
+ },
+/obj/item/controller{
+ pixel_x = 5
+ },
+/obj/item/controller{
+ pixel_x = 5
+ },
/turf/open/floor/iron/dark,
-/area/science/nanite)
+/area/science/misc_lab)
"vm" = (
-/obj/machinery/computer/nanite_cloud_controller,
+/mob/living/circuit_drone,
/turf/open/floor/iron/dark,
-/area/science/nanite)
+/area/science/misc_lab)
"vv" = (
/obj/machinery/door/airlock,
/turf/open/floor/plating,
@@ -2272,7 +2278,7 @@
/area/hallway/primary/central)
"wU" = (
/turf/closed/wall/r_wall,
-/area/science/nanite)
+/area/science/misc_lab)
"yK" = (
/obj/structure/fans/tiny/invisible,
/obj/effect/turf_decal/stripes/line{
@@ -2286,9 +2292,11 @@
/turf/open/floor/iron,
/area/engineering/atmos)
"AE" = (
-/obj/item/disk/tech_disk/debug,
+/obj/machinery/airalarm/unlocked{
+ pixel_y = 23
+ },
/turf/open/floor/iron/dark,
-/area/science/nanite)
+/area/science/misc_lab)
"AP" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{
dir = 8
@@ -2326,11 +2334,9 @@
/turf/open/floor/iron,
/area/cargo/miningoffice)
"CT" = (
-/obj/machinery/computer/nanite_chamber_control{
- dir = 8
- },
+/obj/machinery/component_printer,
/turf/open/floor/iron/dark,
-/area/science/nanite)
+/area/science/misc_lab)
"CV" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden,
/obj/structure/cable,
@@ -2338,9 +2344,11 @@
/area/medical/chemistry)
"Df" = (
/obj/machinery/light/directional/east,
-/mob/living/carbon/human,
+/obj/item/integrated_circuit/loaded/hello_world,
+/obj/item/integrated_circuit/loaded/speech_relay,
+/obj/structure/rack,
/turf/open/floor/iron/dark,
-/area/science/nanite)
+/area/science/misc_lab)
"DW" = (
/obj/effect/turf_decal/tile/blue{
dir = 8
@@ -2397,7 +2405,7 @@
"Ir" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
-/area/science/nanite)
+/area/science/misc_lab)
"Iy" = (
/obj/structure/closet/secure_closet/research_director{
locked = 0
@@ -2444,13 +2452,13 @@
/turf/open/floor/iron/dark,
/area/medical/chemistry)
"LH" = (
-/obj/machinery/door/airlock,
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{
dir = 4
},
-/turf/open/floor/plating,
-/area/science/nanite)
+/obj/machinery/door/airlock/research,
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"LW" = (
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/iron,
@@ -2471,9 +2479,9 @@
/turf/open/floor/iron,
/area/engineering/atmos)
"Nb" = (
-/obj/machinery/nanite_chamber,
+/obj/machinery/bci_implanter,
/turf/open/floor/iron/dark,
-/area/science/nanite)
+/area/science/misc_lab)
"Nc" = (
/obj/machinery/chem_recipe_debug,
/turf/open/floor/iron,
@@ -2488,9 +2496,13 @@
/turf/open/floor/iron,
/area/science)
"Ov" = (
-/obj/machinery/nanite_program_hub,
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/cell/bluespace,
+/obj/item/stock_parts/cell/bluespace,
+/obj/item/stock_parts/cell/bluespace,
/turf/open/floor/iron/dark,
-/area/science/nanite)
+/area/science/misc_lab)
"OU" = (
/obj/item/disk/tech_disk/debug,
/turf/open/floor/iron,
@@ -2574,7 +2586,7 @@
dir = 4
},
/turf/open/floor/iron/dark,
-/area/science/nanite)
+/area/science/misc_lab)
"Vy" = (
/obj/structure/cable,
/turf/open/floor/iron,
@@ -2605,6 +2617,10 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/engineering/gravity_generator)
+"WK" = (
+/obj/structure/money_bot,
+/turf/open/floor/iron/dark,
+/area/science/misc_lab)
"WT" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
@@ -2634,16 +2650,17 @@
/area/science)
"XN" = (
/obj/structure/table,
-/obj/item/nanite_remote{
- pixel_x = -4;
- pixel_y = 4
+/obj/item/organ/cyberimp/bci{
+ pixel_y = 5
+ },
+/obj/item/organ/cyberimp/bci{
+ pixel_y = 5
},
-/obj/item/nanite_scanner{
- pixel_x = 4;
- pixel_y = -4
+/obj/item/organ/cyberimp/bci{
+ pixel_y = 5
},
/turf/open/floor/iron/dark,
-/area/science/nanite)
+/area/science/misc_lab)
"XR" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{
dir = 9
@@ -2661,9 +2678,15 @@
/area/commons/storage/primary)
"Ym" = (
/obj/structure/table,
-/obj/item/storage/box/disks_nanite,
+/obj/item/storage/toolbox/electrical,
+/obj/item/multitool/circuit{
+ pixel_x = -4
+ },
+/obj/item/multitool{
+ pixel_x = 4
+ },
/turf/open/floor/iron/dark,
-/area/science/nanite)
+/area/science/misc_lab)
"Yy" = (
/obj/machinery/light/directional/north,
/obj/machinery/rnd/production/circuit_imprinter/department,
@@ -2677,7 +2700,7 @@
/area/engineering/atmos)
"ZP" = (
/turf/open/floor/iron/dark,
-/area/science/nanite)
+/area/science/misc_lab)
(1,1,1) = {"
aa
@@ -5851,7 +5874,7 @@ eh
eh
eh
rn
-sr
+eh
eh
ge
aa
@@ -6125,11 +6148,11 @@ dn
dn
dn
dL
-ef
+sr
nn
ZP
ZP
-ZP
+WK
Ir
aa
aa
@@ -6217,7 +6240,7 @@ dn
dn
dn
dL
-ef
+cN
AE
kp
XN
@@ -6309,11 +6332,11 @@ dn
dn
dn
dL
-cN
-qd
+tE
ZP
ZP
ZP
+tV
Ir
aa
aa
@@ -6401,7 +6424,7 @@ dn
dn
dn
dL
-fd
+cN
ZP
Df
Nb
diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm
index 7d118dfed3..8a40af6c2c 100644
--- a/_maps/map_files/tramstation/tramstation.dmm
+++ b/_maps/map_files/tramstation/tramstation.dmm
@@ -332,16 +332,6 @@
},
/turf/open/floor/iron,
/area/hallway/primary/port)
-"abe" = (
-/obj/effect/turf_decal/trimline/neutral/filled/line{
- dir = 5
- },
-/obj/machinery/newscaster/security_unit/directional/north,
-/obj/effect/turf_decal/trimline/green/filled/warning{
- dir = 5
- },
-/turf/open/floor/iron,
-/area/hallway/primary/port)
"abg" = (
/obj/machinery/door/airlock/external{
name = "Port Docking Bay 1";
@@ -350,16 +340,6 @@
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/turf/open/floor/plating,
/area/hallway/secondary/entry)
-"abi" = (
-/obj/effect/turf_decal/trimline/neutral/filled/line{
- dir = 9
- },
-/obj/machinery/newscaster/security_unit/directional/north,
-/obj/effect/turf_decal/trimline/green/filled/warning{
- dir = 9
- },
-/turf/open/floor/iron,
-/area/hallway/primary/port)
"abj" = (
/obj/effect/decal/cleanable/cobweb,
/obj/effect/turf_decal/trimline/neutral/filled/line{
@@ -565,10 +545,6 @@
/obj/machinery/duct,
/turf/open/floor/iron/freezer,
/area/security/prison)
-"abP" = (
-/obj/item/assembly/igniter,
-/turf/closed/mineral/random/stationside/asteroid,
-/area/maintenance/department/medical)
"abU" = (
/obj/effect/turf_decal/trimline/green/filled/corner,
/obj/effect/turf_decal/trimline/green/filled/line{
@@ -613,16 +589,6 @@
/obj/structure/ladder,
/turf/open/floor/iron/dark,
/area/ai_monitored/command/nuke_storage)
-"ace" = (
-/obj/effect/turf_decal/trimline/green/filled/corner{
- dir = 8
- },
-/obj/effect/turf_decal/trimline/green/filled/line{
- dir = 5
- },
-/obj/machinery/newscaster/security_unit/directional/north,
-/turf/open/floor/iron,
-/area/security/courtroom)
"acg" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
@@ -1673,11 +1639,6 @@
},
/turf/open/floor/iron,
/area/security/courtroom)
-"afR" = (
-/obj/structure/table/wood,
-/obj/machinery/newscaster/security_unit/directional/south,
-/turf/open/floor/wood,
-/area/service/library)
"afU" = (
/obj/structure/table/wood,
/obj/item/paper_bin,
@@ -2556,12 +2517,6 @@
/obj/machinery/airalarm/directional/south,
/turf/open/floor/iron,
/area/command/gateway)
-"ajj" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/newscaster/security_unit/directional/north,
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
-/turf/open/floor/plating,
-/area/commons/vacant_room/commissary)
"ajk" = (
/obj/structure/closet/secure_closet/quartermaster,
/obj/effect/turf_decal/trimline/brown/filled/line{
@@ -2758,25 +2713,6 @@
/obj/structure/closet/wardrobe/mixed,
/turf/open/floor/iron/cafeteria,
/area/commons/locker)
-"ajT" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/siding/thinplating/dark{
- dir = 1
- },
-/obj/item/kirbyplants/random,
-/obj/machinery/newscaster/security_unit/directional/north,
-/obj/effect/landmark/start/hangover,
-/turf/open/floor/iron/dark,
-/area/hallway/primary/port)
"ajU" = (
/obj/structure/railing/corner,
/turf/open/floor/glass,
@@ -3295,17 +3231,6 @@
},
/turf/open/floor/iron,
/area/maintenance/tram/mid)
-"alu" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/effect/turf_decal/trimline/purple/filled/line{
- dir = 8
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 4
- },
-/obj/machinery/airalarm/directional/west,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"alx" = (
/obj/machinery/vending/coffee,
/obj/effect/turf_decal/stripes/line{
@@ -3734,17 +3659,6 @@
dir = 8
},
/area/service/chapel)
-"anf" = (
-/obj/machinery/computer/nanite_chamber_control,
-/obj/effect/turf_decal/trimline/purple/filled/line{
- dir = 1
- },
-/obj/machinery/requests_console/directional/north{
- department = "Nanite Lab";
- name = "Nanite Lab Requests Console"
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"anj" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable,
@@ -4779,11 +4693,6 @@
},
/turf/open/floor/iron,
/area/security/brig)
-"aqf" = (
-/obj/structure/table/wood,
-/obj/machinery/newscaster/security_unit/directional/north,
-/turf/open/floor/wood,
-/area/service/library)
"aqg" = (
/obj/effect/turf_decal/trimline/neutral/filled/line{
dir = 1
@@ -4836,13 +4745,6 @@
/obj/machinery/power/apc/auto_name/north,
/turf/open/floor/carpet,
/area/security/detectives_office)
-"aqo" = (
-/obj/effect/turf_decal/trimline/neutral/filled/line{
- dir = 1
- },
-/obj/machinery/newscaster/security_unit/directional/north,
-/turf/open/floor/iron,
-/area/hallway/primary/tram/left)
"aqp" = (
/obj/effect/turf_decal/tile/red{
dir = 4
@@ -5782,14 +5684,6 @@
/obj/machinery/light/directional/south,
/turf/open/floor/iron/dark,
/area/service/bar)
-"asL" = (
-/obj/effect/turf_decal/trimline/purple/filled/line{
- dir = 1
- },
-/obj/structure/cable,
-/obj/machinery/power/apc/auto_name/north,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"asM" = (
/obj/effect/turf_decal/stripes/line{
dir = 5
@@ -6250,22 +6144,6 @@
/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/command/gateway)
-"auc" = (
-/obj/structure/table,
-/obj/effect/turf_decal/trimline/purple/filled/line{
- dir = 8
- },
-/obj/item/storage/box/disks_nanite{
- pixel_x = -5;
- pixel_y = 6
- },
-/obj/item/storage/box/disks_nanite{
- pixel_x = 6;
- pixel_y = 3
- },
-/obj/item/radio/intercom/directional/west,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"auf" = (
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
@@ -6585,13 +6463,6 @@
/obj/item/stamp/hos,
/turf/open/floor/carpet,
/area/command/heads_quarters/hos)
-"avj" = (
-/obj/effect/turf_decal/trimline/neutral/filled/line{
- dir = 4
- },
-/obj/machinery/newscaster/security_unit/directional/east,
-/turf/open/floor/iron,
-/area/hallway/primary/tram/left)
"avk" = (
/obj/effect/turf_decal/trimline/white/filled/line{
dir = 1
@@ -6815,29 +6686,11 @@
},
/turf/open/floor/iron,
/area/hallway/primary/tram/center)
-"avX" = (
-/obj/effect/turf_decal/trimline/neutral/filled/line{
- dir = 4
- },
-/obj/machinery/newscaster/security_unit/directional/east,
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/iron,
-/area/hallway/primary/tram/center)
"avY" = (
/obj/structure/ladder,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/hallway/primary/tram/right)
-"awe" = (
-/obj/effect/turf_decal/trimline/neutral/filled/line{
- dir = 8
- },
-/obj/machinery/newscaster/security_unit/directional/west,
-/obj/structure/disposalpipe/junction{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/hallway/primary/tram/right)
"awf" = (
/obj/effect/turf_decal/trimline/neutral/filled/corner,
/obj/structure/disposalpipe/segment{
@@ -7149,10 +7002,6 @@
/obj/machinery/airalarm/directional/east,
/turf/open/floor/iron,
/area/engineering/break_room)
-"awX" = (
-/obj/machinery/newscaster/security_unit/directional/east,
-/turf/open/floor/wood,
-/area/service/lawoffice)
"awY" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -7710,9 +7559,6 @@
/obj/machinery/light/directional/north,
/turf/open/floor/iron,
/area/service/kitchen)
-"ayQ" = (
-/turf/closed/wall/r_wall,
-/area/science/nanite)
"ayR" = (
/obj/effect/turf_decal/trimline/purple/filled/line{
dir = 4
@@ -8189,16 +8035,6 @@
/obj/item/radio/intercom,
/turf/open/floor/iron,
/area/security/courtroom)
-"aAs" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
-/obj/effect/turf_decal/trimline/neutral/filled/line{
- dir = 9
- },
-/obj/machinery/newscaster/security_unit/directional/west,
-/obj/structure/reagent_dispensers/water_cooler,
-/obj/machinery/firealarm/directional/north,
-/turf/open/floor/iron/dark,
-/area/security/courtroom)
"aAt" = (
/obj/effect/turf_decal/trimline/green/filled/line,
/obj/effect/turf_decal/trimline/green/filled/line{
@@ -8604,15 +8440,6 @@
/obj/effect/turf_decal/trimline/neutral/filled/arrow_ccw,
/turf/open/floor/iron,
/area/hallway/primary/tram/center)
-"aBS" = (
-/obj/structure/chair/office{
- dir = 1
- },
-/obj/effect/landmark/start/lawyer,
-/obj/machinery/newscaster/security_unit/directional/west,
-/obj/machinery/firealarm/directional/south,
-/turf/open/floor/wood,
-/area/service/lawoffice)
"aBU" = (
/obj/effect/turf_decal/caution/stand_clear,
/obj/machinery/door/poddoor/shutters{
@@ -8962,13 +8789,6 @@
},
/turf/open/floor/wood,
/area/service/library)
-"aCU" = (
-/obj/effect/turf_decal/trimline/neutral/filled/line{
- dir = 8
- },
-/obj/machinery/newscaster/security_unit/directional/west,
-/turf/open/floor/iron,
-/area/hallway/primary/tram/left)
"aDa" = (
/obj/structure/bed,
/obj/item/bedsheet/dorms,
@@ -9018,23 +8838,6 @@
},
/turf/open/floor/carpet,
/area/security/detectives_office)
-"aDo" = (
-/obj/effect/turf_decal/trimline/neutral/filled/line{
- dir = 8
- },
-/obj/machinery/newscaster/security_unit/directional/west,
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
-/turf/open/floor/iron,
-/area/hallway/primary/tram/center)
-"aDp" = (
-/obj/structure/chair/comfy/beige{
- dir = 8
- },
-/obj/machinery/newscaster/security_unit/directional/east,
-/turf/open/floor/iron/grimy,
-/area/hallway/secondary/entry)
"aDq" = (
/obj/structure/sign/warning/vacuum/external{
pixel_y = 32
@@ -9368,20 +9171,6 @@
/obj/structure/extinguisher_cabinet/directional/east,
/turf/open/floor/iron,
/area/hallway/primary/tram/left)
-"aEo" = (
-/obj/machinery/newscaster/security_unit/directional/east,
-/turf/open/floor/iron/dark,
-/area/service/chapel)
-"aEp" = (
-/obj/effect/turf_decal/trimline/neutral/filled/line{
- dir = 4
- },
-/obj/machinery/newscaster/security_unit/directional/east,
-/obj/structure/disposalpipe/segment{
- dir = 9
- },
-/turf/open/floor/iron,
-/area/hallway/primary/tram/right)
"aEq" = (
/obj/effect/turf_decal/trimline/neutral/filled/corner,
/obj/effect/turf_decal/trimline/neutral/filled/line{
@@ -9505,12 +9294,6 @@
"aEJ" = (
/turf/closed/wall,
/area/construction/mining/aux_base)
-"aEK" = (
-/obj/machinery/newscaster/security_unit/directional/south,
-/obj/effect/turf_decal/trimline/red/filled/line,
-/obj/effect/turf_decal/trimline/neutral/filled/warning,
-/turf/open/floor/iron,
-/area/hallway/primary/tram/left)
"aEL" = (
/obj/effect/turf_decal/trimline/yellow/warning,
/obj/effect/turf_decal/trimline/neutral/filled/corner{
@@ -10430,16 +10213,6 @@
/obj/item/canvas/twentythree_twentythree,
/turf/open/floor/iron,
/area/commons/storage/art)
-"aHM" = (
-/obj/structure/table/wood,
-/obj/machinery/computer/med_data/laptop,
-/obj/effect/turf_decal/trimline/blue/filled/line{
- dir = 9
- },
-/obj/machinery/newscaster/security_unit/directional/north,
-/obj/machinery/firealarm/directional/west,
-/turf/open/floor/iron/white,
-/area/medical/psychology)
"aHN" = (
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 8
@@ -10630,18 +10403,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/maintenance/tram/left)
-"aIs" = (
-/obj/machinery/disposal/bin,
-/obj/structure/disposalpipe/trunk{
- dir = 2
- },
-/obj/effect/turf_decal/trimline/purple/filled/line{
- dir = 5
- },
-/obj/machinery/light_switch/directional/east,
-/obj/structure/extinguisher_cabinet/directional/north,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"aIu" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 8
@@ -10771,14 +10532,6 @@
name = "Holodeck Projector Floor"
},
/area/holodeck/rec_center)
-"aIT" = (
-/obj/structure/filingcabinet,
-/obj/effect/turf_decal/trimline/purple/filled/line{
- dir = 6
- },
-/obj/machinery/firealarm/directional/east,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"aIU" = (
/obj/effect/turf_decal/trimline/neutral/filled/line{
dir = 10
@@ -12911,6 +12664,15 @@
/obj/item/stack/package_wrap,
/turf/open/floor/iron,
/area/commons/storage/primary)
+"aWS" = (
+/obj/structure/chair/office{
+ dir = 1
+ },
+/obj/effect/landmark/start/lawyer,
+/obj/machinery/firealarm/directional/south,
+/obj/machinery/newscaster/directional/west,
+/turf/open/floor/wood,
+/area/service/lawoffice)
"aWV" = (
/obj/machinery/vending/wardrobe/chap_wardrobe,
/turf/open/floor/iron/grimy,
@@ -13300,29 +13062,16 @@
},
/turf/open/floor/plating/airless,
/area/mine/explored)
-"bap" = (
-/obj/structure/table,
-/obj/effect/turf_decal/trimline/purple/filled/line{
+"bav" = (
+/obj/structure/table/wood,
+/obj/machinery/computer/med_data/laptop,
+/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 9
},
-/obj/item/nanite_scanner{
- pixel_x = -4;
- pixel_y = -4
- },
-/obj/item/nanite_scanner{
- pixel_x = 4;
- pixel_y = -4
- },
-/obj/item/nanite_remote{
- pixel_x = -4;
- pixel_y = 4
- },
-/obj/item/nanite_remote{
- pixel_x = 4;
- pixel_y = 4
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
+/obj/machinery/firealarm/directional/west,
+/obj/machinery/newscaster/directional/north,
+/turf/open/floor/iron/white,
+/area/medical/psychology)
"baB" = (
/obj/structure/girder,
/obj/effect/decal/cleanable/dirt,
@@ -13371,14 +13120,6 @@
/obj/machinery/door/firedoor,
/turf/open/floor/iron,
/area/hallway/primary/tram/right)
-"baY" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"bbb" = (
/obj/machinery/door/airlock/maintenance_hatch{
req_one_access_txt = "12"
@@ -13498,6 +13239,20 @@
},
/turf/open/floor/iron,
/area/hallway/secondary/exit)
+"bdd" = (
+/obj/effect/turf_decal/trimline/neutral/filled/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/newscaster/directional/north,
+/turf/open/floor/iron/dark,
+/area/service/bar)
"bdh" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 4
@@ -14325,10 +14080,6 @@
/obj/effect/landmark/start/hangover,
/turf/open/floor/iron,
/area/hallway/secondary/exit/departure_lounge)
-"bsR" = (
-/obj/structure/cable,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"bsW" = (
/obj/effect/turf_decal/trimline/brown/filled/line{
dir = 4
@@ -14352,14 +14103,6 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/tcommsat/computer)
-"btO" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "rnd2";
- name = "research lab shutters"
- },
-/turf/open/floor/plating,
-/area/science/nanite)
"btP" = (
/obj/effect/turf_decal/trimline/green/filled/corner{
dir = 1
@@ -14379,6 +14122,17 @@
},
/turf/open/floor/iron/dark,
/area/service/hydroponics)
+"bum" = (
+/obj/effect/turf_decal/trimline/neutral/filled/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/structure/cable,
+/obj/machinery/newscaster/directional/north,
+/turf/open/floor/iron/dark,
+/area/service/bar)
"bup" = (
/obj/effect/turf_decal/trimline/yellow/filled/corner{
dir = 8
@@ -14601,14 +14355,6 @@
/obj/machinery/light/small/directional/west,
/turf/open/floor/plating,
/area/engineering/atmos)
-"byG" = (
-/obj/machinery/biogenerator,
-/obj/effect/turf_decal/trimline/neutral/filled/line{
- dir = 6
- },
-/obj/machinery/newscaster/security_unit/directional/south,
-/turf/open/floor/iron,
-/area/service/hydroponics/garden)
"byJ" = (
/obj/structure/table/glass,
/obj/machinery/light/directional/west,
@@ -14701,6 +14447,14 @@
/obj/structure/cable,
/turf/open/floor/circuit,
/area/ai_monitored/turret_protected/ai)
+"bAL" = (
+/obj/machinery/vending/cigarette,
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 5
+ },
+/obj/machinery/newscaster/directional/north,
+/turf/open/floor/iron,
+/area/engineering/break_room)
"bAS" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/robot_debris,
@@ -14940,15 +14694,6 @@
/obj/machinery/firealarm/directional/south,
/turf/open/floor/iron,
/area/commons/storage/art)
-"bFL" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 1
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"bFS" = (
/obj/structure/grille,
/obj/effect/decal/cleanable/dirt,
@@ -15346,23 +15091,6 @@
},
/turf/open/floor/iron,
/area/hallway/primary/port)
-"bMh" = (
-/obj/structure/disposalpipe/segment,
-/obj/effect/turf_decal/trimline/purple/filled/corner{
- dir = 8
- },
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/iron/white,
-/area/science/research)
-"bMz" = (
-/obj/machinery/nanite_programmer,
-/obj/structure/window/reinforced{
- dir = 1
- },
-/turf/open/floor/circuit/green,
-/area/science/nanite)
"bMC" = (
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
@@ -15559,6 +15287,15 @@
},
/turf/open/floor/iron,
/area/hallway/primary/tram/center)
+"bQd" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/camera{
+ c_tag = "Civilian - Library Back Room";
+ dir = 5
+ },
+/obj/machinery/newscaster/directional/west,
+/turf/open/floor/iron/grimy,
+/area/service/library)
"bQC" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
dir = 8
@@ -16192,21 +15929,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible,
/turf/open/floor/iron/dark,
/area/science/xenobiology)
-"cdt" = (
-/obj/effect/turf_decal/trimline/blue/filled/line,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/newscaster/security_unit/directional/south,
-/turf/open/floor/iron/white,
-/area/medical/medbay/central)
"cdu" = (
/obj/structure/reagent_dispensers/fueltank,
/obj/effect/decal/cleanable/dirt,
@@ -17254,6 +16976,14 @@
},
/turf/open/floor/iron/white,
/area/science/research)
+"czW" = (
+/obj/effect/turf_decal/trimline/neutral/filled/line{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment,
+/obj/machinery/newscaster/directional/east,
+/turf/open/floor/iron,
+/area/hallway/primary/tram/center)
"cAa" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -17301,13 +17031,6 @@
/obj/effect/turf_decal/sand/plating,
/turf/open/floor/plating,
/area/maintenance/central/secondary)
-"cAT" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"cAU" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -17620,17 +17343,6 @@
/obj/effect/spawner/lootdrop/food_packaging,
/turf/open/floor/plating,
/area/maintenance/central)
-"cII" = (
-/obj/effect/turf_decal/trimline/neutral/filled/line{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 4
- },
-/obj/structure/cable,
-/obj/machinery/newscaster/security_unit/directional/north,
-/turf/open/floor/iron/dark,
-/area/service/bar)
"cIN" = (
/obj/structure/rack,
/obj/item/stack/sheet/iron/ten,
@@ -18545,18 +18257,6 @@
},
/turf/open/floor/iron/dark,
/area/science/xenobiology)
-"dbl" = (
-/obj/machinery/nanite_chamber,
-/obj/effect/turf_decal/trimline/purple/filled/line{
- dir = 1
- },
-/obj/machinery/camera{
- c_tag = "Science - Nanite Lab";
- dir = 6;
- network = list("ss13","science")
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"dbr" = (
/obj/machinery/door/airlock/medical/glass{
name = "Treatment Center";
@@ -18912,6 +18612,10 @@
},
/turf/open/floor/iron,
/area/security/checkpoint/medical)
+"djm" = (
+/obj/machinery/newscaster/directional/east,
+/turf/open/floor/wood,
+/area/service/lawoffice)
"djI" = (
/obj/machinery/recharge_station,
/obj/effect/turf_decal/delivery,
@@ -18927,16 +18631,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/maintenance/central/secondary)
-"dkt" = (
-/obj/machinery/computer/atmos_alert{
- dir = 8
- },
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 8
- },
-/obj/machinery/newscaster/security_unit/directional/east,
-/turf/open/floor/iron/dark,
-/area/engineering/engine_smes)
"dku" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
dir = 8
@@ -20037,13 +19731,6 @@
},
/turf/open/floor/iron/white,
/area/medical/medbay/central)
-"dFo" = (
-/obj/structure/chair/office/light{
- dir = 1
- },
-/obj/effect/landmark/start/scientist,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"dFv" = (
/obj/effect/spawner/lootdrop/food_packaging,
/obj/effect/decal/cleanable/dirt,
@@ -21117,6 +20804,16 @@
},
/turf/open/floor/iron,
/area/engineering/atmos)
+"dZf" = (
+/obj/effect/turf_decal/trimline/purple/filled/line{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 10
+ },
+/obj/machinery/newscaster/directional/north,
+/turf/open/floor/iron/white,
+/area/science/lab)
"dZO" = (
/obj/machinery/light/directional/west,
/obj/machinery/camera/motion{
@@ -21753,15 +21450,6 @@
},
/turf/open/floor/iron,
/area/security/prison)
-"emO" = (
-/obj/machinery/newscaster/security_unit/directional/west,
-/obj/structure/disposalpipe/segment,
-/obj/machinery/camera{
- c_tag = "Civilian - Library Back Room";
- dir = 5
- },
-/turf/open/floor/iron/grimy,
-/area/service/library)
"emS" = (
/obj/machinery/light/small/directional/south,
/obj/machinery/button/door/directional/west{
@@ -22347,6 +22035,13 @@
/obj/item/clothing/shoes/sneakers/orange,
/turf/open/floor/iron/cafeteria,
/area/security/prison)
+"ewP" = (
+/obj/effect/spawner/randomcolavend,
+/obj/machinery/newscaster/directional/west,
+/turf/open/floor/iron/cafeteria{
+ dir = 5
+ },
+/area/science/breakroom)
"ewQ" = (
/obj/effect/turf_decal/trimline/neutral/filled/corner{
dir = 1
@@ -22619,6 +22314,16 @@
},
/turf/open/floor/iron/white,
/area/medical/medbay/central)
+"eCL" = (
+/obj/effect/turf_decal/trimline/neutral/filled/line{
+ dir = 8
+ },
+/obj/structure/disposalpipe/junction{
+ dir = 1
+ },
+/obj/machinery/newscaster/directional/west,
+/turf/open/floor/iron,
+/area/hallway/primary/tram/right)
"eCN" = (
/obj/effect/landmark/start/depsec/supply,
/obj/structure/chair/office{
@@ -23448,6 +23153,10 @@
},
/turf/open/floor/iron,
/area/hallway/secondary/exit)
+"eWl" = (
+/obj/item/assembly/igniter,
+/turf/closed/mineral/random/stationside/asteroid,
+/area/mine/explored)
"eWn" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -23655,13 +23364,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/maintenance/starboard/secondary)
-"fat" = (
-/obj/effect/spawner/randomcolavend,
-/obj/machinery/newscaster/security_unit/directional/west,
-/turf/open/floor/iron/cafeteria{
- dir = 5
- },
-/area/science/breakroom)
"fay" = (
/obj/machinery/modular_computer/console/preset/engineering{
dir = 4
@@ -23861,6 +23563,14 @@
"ffq" = (
/turf/open/floor/iron,
/area/hallway/secondary/command)
+"ffr" = (
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/machinery/newscaster/directional/north,
+/turf/open/floor/iron,
+/area/cargo/miningdock)
"ffs" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/structure/cable,
@@ -25298,20 +25008,6 @@
},
/turf/open/floor/iron,
/area/maintenance/tram/mid)
-"fIg" = (
-/obj/effect/turf_decal/siding/thinplating{
- dir = 4
- },
-/obj/effect/turf_decal/trimline/neutral/filled/line{
- dir = 8
- },
-/obj/machinery/newscaster/security_unit/directional/west,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/structure/cable,
-/obj/machinery/light/directional/west,
-/turf/open/floor/iron,
-/area/commons/dorms)
"fIp" = (
/obj/effect/turf_decal/sand/plating,
/obj/effect/decal/cleanable/oil/slippery,
@@ -26483,9 +26179,6 @@
/obj/machinery/status_display/evac/directional/north,
/turf/open/floor/iron/white,
/area/science/research)
-"gfd" = (
-/turf/open/floor/circuit/green,
-/area/science/nanite)
"gfe" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible,
/obj/effect/turf_decal/trimline/red/filled/corner{
@@ -26612,6 +26305,16 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/white,
/area/medical/medbay/central)
+"ghR" = (
+/obj/effect/turf_decal/trimline/green/filled/corner{
+ dir = 8
+ },
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 5
+ },
+/obj/machinery/newscaster/directional/north,
+/turf/open/floor/iron,
+/area/security/courtroom)
"ghY" = (
/obj/effect/turf_decal/trimline/yellow/warning,
/obj/machinery/light/small/directional/north,
@@ -26964,6 +26667,16 @@
},
/turf/open/floor/plating,
/area/maintenance/tram/mid)
+"gqH" = (
+/obj/machinery/computer/atmos_alert{
+ dir = 8
+ },
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 8
+ },
+/obj/machinery/newscaster/directional/east,
+/turf/open/floor/iron/dark,
+/area/engineering/engine_smes)
"gqQ" = (
/obj/machinery/door/airlock/virology{
name = "Break Room";
@@ -27734,6 +27447,27 @@
/obj/item/flashlight/lamp/green,
/turf/open/floor/carpet,
/area/commons/vacant_room/office)
+"gGs" = (
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 9
+ },
+/obj/structure/disposalpipe/trunk{
+ dir = 4
+ },
+/obj/machinery/disposal/bin,
+/obj/machinery/newscaster/directional/north,
+/turf/open/floor/iron,
+/area/engineering/main)
+"gGD" = (
+/obj/effect/turf_decal/trimline/neutral/filled/line{
+ dir = 9
+ },
+/obj/effect/turf_decal/trimline/green/filled/warning{
+ dir = 9
+ },
+/obj/machinery/newscaster/directional/north,
+/turf/open/floor/iron,
+/area/hallway/primary/port)
"gGM" = (
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
@@ -28618,14 +28352,6 @@
/obj/structure/cable,
/turf/open/floor/engine,
/area/engineering/supermatter/room)
-"gXR" = (
-/obj/machinery/vending/cigarette,
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 5
- },
-/obj/machinery/newscaster/security_unit/directional/north,
-/turf/open/floor/iron,
-/area/engineering/break_room)
"gYh" = (
/obj/machinery/computer/operating{
dir = 8
@@ -28957,6 +28683,13 @@
/obj/structure/cable,
/turf/open/floor/engine/hull/reinforced,
/area/space/nearstation)
+"hdD" = (
+/obj/effect/turf_decal/trimline/neutral/filled/line{
+ dir = 4
+ },
+/obj/machinery/newscaster/directional/east,
+/turf/open/floor/iron,
+/area/hallway/primary/tram/left)
"hdK" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 9
@@ -29760,26 +29493,6 @@
/obj/structure/extinguisher_cabinet/directional/east,
/turf/open/floor/iron,
/area/maintenance/disposal/incinerator)
-"hqq" = (
-/obj/machinery/door/airlock/research{
- name = "Nanite Laboratory";
- req_one_access_txt = "7"
- },
-/obj/machinery/door/firedoor,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/trimline/purple/filled/line{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"hqr" = (
/obj/machinery/door/firedoor,
/obj/effect/turf_decal/trimline/neutral/filled/line{
@@ -30991,19 +30704,6 @@
},
/turf/open/floor/iron,
/area/cargo/office)
-"hPF" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 8
- },
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"hPX" = (
/obj/machinery/light/small/directional/east,
/obj/effect/decal/cleanable/dirt,
@@ -31526,17 +31226,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron,
/area/hallway/primary/port)
-"idv" = (
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 8
- },
-/obj/machinery/atmospherics/components/unary/portables_connector/visible,
-/obj/machinery/portable_atmospherics/canister/oxygen,
-/obj/machinery/airalarm/directional/north,
-/obj/machinery/newscaster/security_unit/directional/west,
-/obj/machinery/light/directional/west,
-/turf/open/floor/iron,
-/area/engineering/atmos)
"idX" = (
/obj/machinery/door/airlock/maintenance_hatch{
req_one_access_txt = "12"
@@ -31811,6 +31500,19 @@
},
/turf/open/floor/iron,
/area/engineering/main)
+"iiG" = (
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 8
+ },
+/obj/effect/turf_decal/trimline/neutral/filled/line{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/light/directional/east,
+/obj/machinery/newscaster/directional/east,
+/turf/open/floor/iron,
+/area/commons/dorms)
"iiH" = (
/turf/open/openspace,
/area/science/research)
@@ -32193,18 +31895,6 @@
/obj/machinery/door/firedoor,
/turf/open/floor/iron/grimy,
/area/service/chapel/office)
-"ist" = (
-/obj/structure/table,
-/obj/item/stack/sheet/iron/fifty,
-/obj/item/stack/sheet/iron/fifty,
-/obj/item/stack/sheet/iron/fifty,
-/obj/item/stack/sheet/glass/fifty,
-/obj/item/stack/sheet/plasteel{
- amount = 15
- },
-/obj/machinery/newscaster/security_unit/directional/west,
-/turf/open/floor/iron/dark,
-/area/science/robotics/lab)
"isF" = (
/obj/effect/turf_decal/siding/thinplating/dark/corner{
dir = 1
@@ -32435,18 +32125,6 @@
/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/command/bridge)
-"ixu" = (
-/obj/effect/turf_decal/trimline/purple/filled/line{
- dir = 1
- },
-/obj/machinery/camera{
- c_tag = "Science - Lower Main South";
- dir = 6;
- network = list("ss13","science")
- },
-/obj/machinery/newscaster/security_unit/directional/north,
-/turf/open/floor/iron/white,
-/area/science/research)
"ixB" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -33304,6 +32982,21 @@
/obj/item/radio/intercom/directional/south,
/turf/open/floor/iron,
/area/hallway/secondary/exit/departure_lounge)
+"iLM" = (
+/obj/effect/turf_decal/trimline/blue/filled/line,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/newscaster/directional/south,
+/turf/open/floor/iron/white,
+/area/medical/medbay/central)
"iLW" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/camera{
@@ -33942,6 +33635,16 @@
},
/turf/open/floor/iron/dark,
/area/medical/psychology)
+"iWB" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
+/obj/effect/turf_decal/trimline/neutral/filled/line{
+ dir = 9
+ },
+/obj/structure/reagent_dispensers/water_cooler,
+/obj/machinery/firealarm/directional/north,
+/obj/machinery/newscaster/directional/west,
+/turf/open/floor/iron/dark,
+/area/security/courtroom)
"iWV" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -34800,13 +34503,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/white,
/area/science/explab)
-"jqL" = (
-/obj/machinery/nanite_program_hub,
-/obj/structure/window/reinforced{
- dir = 4
- },
-/turf/open/floor/circuit/green,
-/area/science/nanite)
"jqQ" = (
/turf/open/floor/engine,
/area/engineering/supermatter/room)
@@ -34939,6 +34635,12 @@
},
/turf/open/floor/iron/white,
/area/medical/treatment_center)
+"jtT" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
+/obj/machinery/newscaster/directional/north,
+/turf/open/floor/plating,
+/area/commons/vacant_room/commissary)
"jtY" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/cafeteria{
@@ -35366,6 +35068,13 @@
"jCF" = (
/turf/open/floor/iron,
/area/command/heads_quarters/ce)
+"jCN" = (
+/obj/effect/turf_decal/trimline/neutral/filled/line{
+ dir = 8
+ },
+/obj/machinery/newscaster/directional/west,
+/turf/open/floor/iron,
+/area/hallway/primary/tram/left)
"jDb" = (
/obj/structure/table,
/obj/item/paper/pamphlet/radstorm,
@@ -38108,11 +37817,6 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/iron/dark,
/area/command/teleporter)
-"kzT" = (
-/obj/machinery/holopad,
-/obj/effect/turf_decal/bot,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"kzW" = (
/obj/effect/spawner/lootdrop/garbage_spawner,
/obj/effect/decal/cleanable/dirt,
@@ -38299,13 +38003,6 @@
},
/turf/closed/wall/r_wall,
/area/engineering/supermatter)
-"kDj" = (
-/obj/effect/turf_decal/trimline/blue/filled/line{
- dir = 1
- },
-/obj/machinery/newscaster/security_unit/directional/north,
-/turf/open/floor/iron/white,
-/area/medical/medbay/central)
"kDm" = (
/obj/structure/chair/plastic{
dir = 1
@@ -38399,6 +38096,16 @@
},
/turf/open/floor/engine/vacuum,
/area/engineering/atmos)
+"kEQ" = (
+/obj/effect/turf_decal/trimline/neutral/filled/line{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/obj/machinery/newscaster/directional/north,
+/turf/open/floor/iron,
+/area/commons/lounge)
"kFd" = (
/obj/structure/cable,
/obj/machinery/power/apc/auto_name/north,
@@ -39285,14 +38992,6 @@
},
/turf/open/floor/engine,
/area/engineering/supermatter/room)
-"kXA" = (
-/obj/structure/filingcabinet,
-/obj/effect/turf_decal/trimline/brown/filled/line{
- dir = 9
- },
-/obj/machinery/newscaster/security_unit/directional/north,
-/turf/open/floor/iron,
-/area/cargo/qm)
"kXD" = (
/obj/effect/turf_decal/trimline/neutral/filled/corner,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
@@ -41034,6 +40733,13 @@
},
/turf/open/floor/iron,
/area/cargo/storage)
+"lCz" = (
+/obj/structure/chair/comfy/beige{
+ dir = 8
+ },
+/obj/machinery/newscaster/directional/east,
+/turf/open/floor/iron/grimy,
+/area/hallway/secondary/entry)
"lCG" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 8
@@ -41146,6 +40852,18 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/security/prison)
+"lGl" = (
+/obj/structure/rack,
+/obj/item/storage/toolbox/mechanical{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/item/storage/toolbox/electrical,
+/obj/item/clothing/head/welding,
+/obj/item/clothing/glasses/welding,
+/obj/machinery/newscaster/directional/north,
+/turf/open/floor/iron/dark,
+/area/science/robotics/lab)
"lGw" = (
/obj/machinery/door/airlock/security{
name = "Permanent Cell 5"
@@ -43048,6 +42766,25 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/iron/white,
/area/medical/medbay/central)
+"mvS" = (
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/thinplating/dark{
+ dir = 1
+ },
+/obj/item/kirbyplants/random,
+/obj/effect/landmark/start/hangover,
+/obj/machinery/newscaster/directional/north,
+/turf/open/floor/iron/dark,
+/area/hallway/primary/port)
"mvV" = (
/obj/effect/turf_decal/trimline/purple/filled/corner,
/obj/effect/landmark/start/geneticist,
@@ -43225,17 +42962,6 @@
},
/turf/open/floor/iron/dark,
/area/command/teleporter)
-"mzy" = (
-/obj/effect/turf_decal/trimline/purple/filled/line{
- dir = 6
- },
-/obj/structure/rack,
-/obj/machinery/light/directional/south,
-/obj/item/controller,
-/obj/item/compact_remote,
-/obj/item/compact_remote,
-/turf/open/floor/iron,
-/area/science/misc_lab)
"mzF" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/grille/broken,
@@ -44753,6 +44479,14 @@
/obj/machinery/light/small/directional/west,
/turf/open/floor/plating,
/area/maintenance/port/fore)
+"nie" = (
+/obj/machinery/biogenerator,
+/obj/effect/turf_decal/trimline/neutral/filled/line{
+ dir = 6
+ },
+/obj/machinery/newscaster/directional/south,
+/turf/open/floor/iron,
+/area/service/hydroponics/garden)
"niO" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 10
@@ -44766,16 +44500,6 @@
},
/turf/open/floor/iron/dark,
/area/ai_monitored/turret_protected/aisat_interior)
-"nju" = (
-/obj/effect/turf_decal/trimline/neutral/filled/line{
- dir = 1
- },
-/obj/structure/disposalpipe/segment{
- dir = 6
- },
-/obj/machinery/newscaster/security_unit/directional/north,
-/turf/open/floor/iron,
-/area/commons/lounge)
"njM" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 4
@@ -44799,21 +44523,6 @@
/obj/structure/cable,
/turf/open/floor/iron/cafeteria,
/area/commons/locker)
-"nkz" = (
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
-/obj/effect/turf_decal/trimline/purple/filled/corner{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"nkC" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
@@ -44927,6 +44636,18 @@
},
/turf/open/floor/iron/dark,
/area/command/bridge)
+"nnC" = (
+/obj/effect/turf_decal/trimline/purple/filled/line{
+ dir = 1
+ },
+/obj/machinery/camera{
+ c_tag = "Science - Lower Main South";
+ dir = 6;
+ network = list("ss13","science")
+ },
+/obj/machinery/newscaster/directional/north,
+/turf/open/floor/iron/white,
+/area/science/research)
"nnQ" = (
/obj/machinery/door/airlock/maintenance_hatch{
name = "Tunnel Access";
@@ -45104,6 +44825,11 @@
/obj/effect/landmark/start/scientist,
/turf/open/floor/iron,
/area/science/lab)
+"nrv" = (
+/obj/structure/table/wood,
+/obj/machinery/newscaster/directional/south,
+/turf/open/floor/wood,
+/area/service/library)
"nrF" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/landmark/event_spawn,
@@ -47427,6 +47153,20 @@
},
/turf/open/floor/iron,
/area/ai_monitored/command/storage/eva)
+"ond" = (
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/neutral/filled/line{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/machinery/light/directional/west,
+/obj/machinery/newscaster/directional/west,
+/turf/open/floor/iron,
+/area/commons/dorms)
"one" = (
/turf/closed/wall/r_wall,
/area/engineering/atmos)
@@ -48429,15 +48169,6 @@
},
/turf/open/floor/iron/dark,
/area/ai_monitored/security/armory)
-"oHX" = (
-/obj/effect/turf_decal/trimline/purple/filled/line{
- dir = 10
- },
-/obj/structure/rack,
-/obj/item/integrated_circuit/loaded/speech_relay,
-/obj/item/integrated_circuit/loaded/hello_world,
-/turf/open/floor/iron,
-/area/science/misc_lab)
"oIj" = (
/obj/effect/turf_decal/trimline/purple/filled/line,
/obj/effect/turf_decal/trimline/neutral/filled/warning,
@@ -48816,6 +48547,19 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/maintenance/starboard/central)
+"oPN" = (
+/obj/effect/turf_decal/trimline/purple/filled/line{
+ dir = 6
+ },
+/obj/structure/rack,
+/obj/machinery/light/directional/south,
+/obj/item/controller,
+/obj/item/compact_remote,
+/obj/item/integrated_circuit/loaded/hello_world,
+/obj/item/integrated_circuit/loaded/speech_relay,
+/obj/item/compact_remote,
+/turf/open/floor/iron,
+/area/science/misc_lab)
"oPY" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/trimline/neutral/filled/line{
@@ -49103,20 +48847,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron,
/area/security/brig)
-"oUr" = (
-/obj/effect/turf_decal/trimline/neutral/filled/line{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/newscaster/security_unit/directional/north,
-/turf/open/floor/iron/dark,
-/area/service/bar)
"oUw" = (
/obj/structure/table,
/obj/item/stock_parts/scanning_module{
@@ -49681,11 +49411,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/engineering/atmospherics_engine)
-"pfi" = (
-/obj/effect/turf_decal/trimline/purple/filled/corner,
-/obj/structure/cable,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"pfo" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 1
@@ -49855,6 +49580,13 @@
/obj/effect/mapping_helpers/airlock/abandoned,
/turf/open/floor/plating,
/area/maintenance/central/secondary)
+"pie" = (
+/obj/effect/turf_decal/trimline/purple/filled/line{
+ dir = 10
+ },
+/obj/machinery/module_duplicator,
+/turf/open/floor/iron,
+/area/science/misc_lab)
"pil" = (
/obj/structure/railing/corner{
dir = 1
@@ -51405,6 +51137,16 @@
/obj/structure/reagent_dispensers/watertank,
/turf/open/floor/plating,
/area/maintenance/central)
+"pNm" = (
+/obj/effect/turf_decal/trimline/neutral/filled/line{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/obj/machinery/newscaster/directional/west,
+/turf/open/floor/iron,
+/area/hallway/primary/tram/center)
"pNt" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -51769,6 +51511,13 @@
},
/turf/open/floor/iron,
/area/hallway/primary/tram/left)
+"pTk" = (
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 1
+ },
+/obj/machinery/newscaster/directional/north,
+/turf/open/floor/iron/white,
+/area/medical/medbay/central)
"pTG" = (
/obj/effect/turf_decal/trimline/neutral/filled/corner{
dir = 1
@@ -51793,10 +51542,6 @@
},
/turf/open/floor/iron/dark,
/area/security/brig)
-"pUB" = (
-/obj/machinery/computer/nanite_cloud_controller,
-/turf/open/floor/circuit/green,
-/area/science/nanite)
"pUM" = (
/obj/effect/turf_decal/trimline/red/filled/line,
/turf/open/floor/iron,
@@ -52054,16 +51799,6 @@
},
/turf/open/floor/iron,
/area/security/prison)
-"qab" = (
-/obj/structure/cable,
-/obj/machinery/newscaster/security_unit/directional/north,
-/obj/machinery/light_switch/directional/north{
- pixel_x = 12
- },
-/turf/open/floor/iron/cafeteria{
- dir = 5
- },
-/area/command/heads_quarters/rd)
"qan" = (
/obj/effect/turf_decal/stripes/line{
dir = 5
@@ -52101,6 +51836,23 @@
/obj/effect/spawner/lootdrop/food_packaging,
/turf/open/floor/plating,
/area/maintenance/starboard/central)
+"qbv" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/neutral/filled/line{
+ dir = 1
+ },
+/obj/machinery/newscaster/directional/north,
+/turf/open/floor/iron,
+/area/hallway/secondary/construction/engineering)
"qbC" = (
/obj/effect/turf_decal/trimline/neutral/filled/line{
dir = 1
@@ -52253,6 +52005,24 @@
},
/turf/open/floor/iron,
/area/engineering/atmos)
+"qeq" = (
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 9
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
+/obj/structure/rack,
+/obj/item/storage/toolbox/mechanical{
+ pixel_x = -2;
+ pixel_y = -1
+ },
+/obj/item/multitool,
+/obj/machinery/camera/emp_proof{
+ c_tag = "Secure - Telecomms Control Room";
+ dir = 6
+ },
+/obj/machinery/newscaster/directional/north,
+/turf/open/floor/iron,
+/area/tcommsat/computer)
"qes" = (
/obj/effect/turf_decal/trimline/blue/filled/corner,
/obj/effect/turf_decal/trimline/blue/filled/corner{
@@ -52405,14 +52175,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plating/airless,
/area/mine/explored)
-"qiA" = (
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/obj/machinery/newscaster/security_unit/directional/north,
-/turf/open/floor/iron,
-/area/cargo/miningdock)
"qiW" = (
/turf/open/floor/iron,
/area/security/processing)
@@ -53663,6 +53425,16 @@
},
/turf/open/floor/iron/dark,
/area/tcommsat/computer)
+"qJo" = (
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/trimline/purple/filled/line{
+ dir = 8
+ },
+/turf/open/floor/iron/white,
+/area/science/research)
"qJp" = (
/obj/effect/decal/cleanable/dirt,
/obj/item/chair,
@@ -54433,13 +54205,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible,
/turf/open/floor/iron/white,
/area/science/mixing)
-"rbD" = (
-/obj/structure/disposalpipe/segment,
-/obj/effect/turf_decal/trimline/purple/filled/line{
- dir = 4
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"rbI" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 4
@@ -55481,26 +55246,6 @@
},
/turf/open/floor/iron,
/area/security/office)
-"rwO" = (
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/structure/table,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"rwY" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 10
@@ -58923,6 +58668,20 @@
},
/turf/open/floor/iron,
/area/hallway/secondary/construction/engineering)
+"sPg" = (
+/obj/structure/disposalpipe/junction/flip{
+ dir = 1
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/purple/filled/line{
+ dir = 8
+ },
+/turf/open/floor/iron/white,
+/area/science/research)
"sPj" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -61406,12 +61165,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/maintenance/disposal)
-"tJq" = (
-/obj/effect/turf_decal/trimline/purple/filled/line{
- dir = 4
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"tJC" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
@@ -61747,16 +61500,6 @@
},
/turf/open/floor/iron,
/area/engineering/atmos)
-"tOO" = (
-/obj/machinery/door/airlock/research{
- name = "Nanite Laboratory";
- req_one_access_txt = "7"
- },
-/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/trimline/purple/filled/line,
-/obj/structure/cable,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"tOS" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 4
@@ -61891,17 +61634,6 @@
},
/turf/open/floor/iron,
/area/service/hydroponics/garden)
-"tRs" = (
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 9
- },
-/obj/machinery/newscaster/security_unit/directional/north,
-/obj/structure/disposalpipe/trunk{
- dir = 4
- },
-/obj/machinery/disposal/bin,
-/turf/open/floor/iron,
-/area/engineering/main)
"tRt" = (
/obj/effect/turf_decal/trimline/green/filled/corner{
dir = 4
@@ -62809,19 +62541,6 @@
},
/turf/open/floor/vault,
/area/hallway/primary/tram/center)
-"uhs" = (
-/obj/effect/turf_decal/siding/thinplating{
- dir = 8
- },
-/obj/effect/turf_decal/trimline/neutral/filled/line{
- dir = 4
- },
-/obj/machinery/newscaster/security_unit/directional/east,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/light/directional/east,
-/turf/open/floor/iron,
-/area/commons/dorms)
"uht" = (
/turf/closed/wall,
/area/medical/treatment_center)
@@ -62859,6 +62578,17 @@
},
/turf/open/floor/iron,
/area/maintenance/tram/right)
+"uiu" = (
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 8
+ },
+/obj/machinery/atmospherics/components/unary/portables_connector/visible,
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/obj/machinery/airalarm/directional/north,
+/obj/machinery/light/directional/west,
+/obj/machinery/newscaster/directional/west,
+/turf/open/floor/iron,
+/area/engineering/atmos)
"uiJ" = (
/obj/effect/turf_decal/stripes/line,
/obj/effect/turf_decal/trimline/brown/filled/line{
@@ -63130,6 +62860,16 @@
/obj/structure/railing,
/turf/open/floor/plating,
/area/maintenance/tram/right)
+"uoz" = (
+/obj/effect/turf_decal/trimline/neutral/filled/line{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/obj/machinery/newscaster/directional/east,
+/turf/open/floor/iron,
+/area/hallway/primary/tram/right)
"uoJ" = (
/obj/structure/disposalpipe/segment,
/obj/effect/turf_decal/trimline/purple/filled/corner{
@@ -63420,6 +63160,16 @@
},
/turf/open/floor/carpet,
/area/service/library)
+"utD" = (
+/obj/structure/cable,
+/obj/machinery/light_switch/directional/north{
+ pixel_x = 12
+ },
+/obj/machinery/newscaster/directional/north,
+/turf/open/floor/iron/cafeteria{
+ dir = 5
+ },
+/area/command/heads_quarters/rd)
"utP" = (
/obj/structure/fluff/tram_rail/end{
dir = 8
@@ -64118,16 +63868,6 @@
/obj/item/clothing/mask/breath,
/turf/open/floor/iron,
/area/engineering/atmos)
-"uLU" = (
-/obj/effect/turf_decal/trimline/purple/filled/line{
- dir = 1
- },
-/obj/structure/disposalpipe/segment{
- dir = 10
- },
-/obj/machinery/newscaster/security_unit/directional/north,
-/turf/open/floor/iron/white,
-/area/science/lab)
"uLZ" = (
/obj/effect/turf_decal/trimline/red/corner,
/obj/effect/turf_decal/trimline/red/filled/line{
@@ -64348,20 +64088,6 @@
"uQe" = (
/turf/open/floor/plating,
/area/science/mixing)
-"uQm" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/landmark/event_spawn,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"uQq" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable,
@@ -64371,24 +64097,11 @@
},
/turf/open/floor/plating,
/area/science/xenobiology)
-"uQs" = (
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 9
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
-/obj/structure/rack,
-/obj/item/storage/toolbox/mechanical{
- pixel_x = -2;
- pixel_y = -1
- },
-/obj/item/multitool,
-/obj/machinery/camera/emp_proof{
- c_tag = "Secure - Telecomms Control Room";
- dir = 6
- },
-/obj/machinery/newscaster/security_unit/directional/north,
-/turf/open/floor/iron,
-/area/tcommsat/computer)
+"uQv" = (
+/obj/structure/table/wood,
+/obj/machinery/newscaster/directional/north,
+/turf/open/floor/wood,
+/area/service/library)
"uQB" = (
/obj/machinery/door/airlock/medical/glass{
name = "Medical Freezer";
@@ -64446,14 +64159,6 @@
icon_state = "wood-broken3"
},
/area/maintenance/central)
-"uRy" = (
-/obj/structure/filingcabinet,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/effect/turf_decal/trimline/purple/filled/line,
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"uRU" = (
/obj/effect/turf_decal/siding/thinplating/corner{
dir = 1
@@ -64465,6 +64170,28 @@
/obj/machinery/duct,
/turf/open/floor/iron,
/area/commons/dorms)
+"uRZ" = (
+/obj/effect/turf_decal/siding/thinplating/corner{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating/corner{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/neutral/filled/corner{
+ dir = 1
+ },
+/obj/effect/turf_decal/trimline/neutral/filled/corner{
+ dir = 4
+ },
+/obj/machinery/holopad,
+/obj/effect/turf_decal/bot,
+/obj/machinery/camera{
+ c_tag = "Civilian - Lounge South";
+ dir = 6
+ },
+/obj/machinery/newscaster/directional/north,
+/turf/open/floor/iron,
+/area/commons/lounge)
"uSn" = (
/obj/machinery/door/airlock/hatch,
/obj/effect/decal/cleanable/dirt,
@@ -65076,10 +64803,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/maintenance/starboard/central)
-"vfl" = (
-/obj/machinery/light/directional/west,
-/turf/open/floor/circuit/green,
-/area/science/nanite)
"vfo" = (
/obj/effect/turf_decal/trimline/brown/filled/corner{
dir = 4
@@ -65723,6 +65446,16 @@
/obj/structure/table,
/turf/open/floor/iron/dark,
/area/security/interrogation)
+"vqD" = (
+/obj/effect/turf_decal/trimline/neutral/filled/line{
+ dir = 5
+ },
+/obj/effect/turf_decal/trimline/green/filled/warning{
+ dir = 5
+ },
+/obj/machinery/newscaster/directional/north,
+/turf/open/floor/iron,
+/area/hallway/primary/port)
"vrc" = (
/obj/machinery/telecomms/bus/preset_two,
/turf/open/floor/iron/dark/telecomms,
@@ -65798,19 +65531,6 @@
/obj/machinery/light/small/directional/north,
/turf/open/floor/iron/dark,
/area/maintenance/starboard/secondary)
-"vux" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/science/nanite)
"vuO" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
@@ -66163,20 +65883,6 @@
/obj/machinery/status_display/evac/directional/west,
/turf/open/floor/iron,
/area/hallway/secondary/exit/departure_lounge)
-"vDR" = (
-/obj/structure/disposalpipe/junction/flip{
- dir = 1
- },
-/obj/effect/turf_decal/trimline/purple/filled/corner{
- dir = 1
- },
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 4
- },
-/turf/open/floor/iron/white,
-/area/science/research)
"vDX" = (
/obj/structure/grille,
/obj/effect/decal/cleanable/dirt,
@@ -67650,18 +67356,6 @@
},
/turf/open/floor/iron/white,
/area/medical/medbay/central)
-"wdt" = (
-/obj/structure/rack,
-/obj/item/storage/toolbox/mechanical{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/item/storage/toolbox/electrical,
-/obj/item/clothing/head/welding,
-/obj/item/clothing/glasses/welding,
-/obj/machinery/newscaster/security_unit/directional/north,
-/turf/open/floor/iron/dark,
-/area/science/robotics/lab)
"wdJ" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -67770,23 +67464,6 @@
/obj/effect/landmark/start/shaft_miner,
/turf/open/floor/iron,
/area/cargo/miningdock)
-"wfD" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 4
- },
-/obj/effect/turf_decal/trimline/neutral/filled/line{
- dir = 1
- },
-/obj/machinery/newscaster/security_unit/directional/north,
-/turf/open/floor/iron,
-/area/hallway/secondary/construction/engineering)
"wfN" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 9
@@ -68165,6 +67842,12 @@
/obj/effect/landmark/blobstart,
/turf/open/floor/iron,
/area/hallway/secondary/entry)
+"wmU" = (
+/obj/effect/turf_decal/trimline/red/filled/line,
+/obj/effect/turf_decal/trimline/neutral/filled/warning,
+/obj/machinery/newscaster/directional/south,
+/turf/open/floor/iron,
+/area/hallway/primary/tram/left)
"wnM" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -68572,6 +68255,13 @@
},
/turf/open/floor/iron/dark,
/area/service/hydroponics)
+"wuT" = (
+/obj/effect/turf_decal/trimline/neutral/filled/line{
+ dir = 1
+ },
+/obj/machinery/newscaster/directional/north,
+/turf/open/floor/iron,
+/area/hallway/primary/tram/left)
"wuW" = (
/obj/effect/turf_decal/trimline/red/filled/corner{
dir = 1
@@ -69763,6 +69453,10 @@
/obj/effect/turf_decal/trimline/yellow/filled/line,
/turf/open/floor/iron,
/area/tcommsat/computer)
+"wOc" = (
+/obj/machinery/newscaster/directional/east,
+/turf/open/floor/iron/dark,
+/area/service/chapel)
"wOm" = (
/obj/structure/table,
/obj/machinery/light/directional/north,
@@ -70654,28 +70348,6 @@
},
/turf/open/floor/plating/airless,
/area/mine/explored)
-"xib" = (
-/obj/effect/turf_decal/siding/thinplating/corner{
- dir = 1
- },
-/obj/effect/turf_decal/siding/thinplating/corner{
- dir = 4
- },
-/obj/effect/turf_decal/trimline/neutral/filled/corner{
- dir = 1
- },
-/obj/effect/turf_decal/trimline/neutral/filled/corner{
- dir = 4
- },
-/obj/machinery/holopad,
-/obj/effect/turf_decal/bot,
-/obj/machinery/newscaster/security_unit/directional/north,
-/obj/machinery/camera{
- c_tag = "Civilian - Lounge South";
- dir = 6
- },
-/turf/open/floor/iron,
-/area/commons/lounge)
"xif" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
@@ -72538,6 +72210,18 @@
},
/turf/open/floor/iron,
/area/hallway/primary/tram/right)
+"xQT" = (
+/obj/structure/table,
+/obj/item/stack/sheet/iron/fifty,
+/obj/item/stack/sheet/iron/fifty,
+/obj/item/stack/sheet/iron/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/plasteel{
+ amount = 15
+ },
+/obj/machinery/newscaster/directional/west,
+/turf/open/floor/iron/dark,
+/area/science/robotics/lab)
"xQU" = (
/obj/effect/turf_decal/trimline/red/filled/corner{
dir = 1
@@ -72937,6 +72621,14 @@
},
/turf/open/floor/iron,
/area/engineering/atmos)
+"xXj" = (
+/obj/structure/filingcabinet,
+/obj/effect/turf_decal/trimline/brown/filled/line{
+ dir = 9
+ },
+/obj/machinery/newscaster/directional/north,
+/turf/open/floor/iron,
+/area/cargo/qm)
"xXn" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
dir = 8
@@ -88974,7 +88666,7 @@ aCa
arm
aqW
awG
-emO
+bQd
aeB
bfh
jIX
@@ -91796,7 +91488,7 @@ fyx
ahI
lmq
aCa
-aqf
+uQv
rBn
dQU
ahj
@@ -91806,7 +91498,7 @@ ufR
aeQ
dQU
jBt
-afR
+nrv
aCa
rCB
fNa
@@ -92548,7 +92240,7 @@ aXi
aXi
aXi
aej
-oUr
+bdd
aLM
aej
aae
@@ -94362,7 +94054,7 @@ aMK
ldH
aNF
aOP
-nju
+kEQ
jAa
aQb
aQy
@@ -95411,7 +95103,7 @@ aOP
aOP
aOP
aOP
-xib
+uRZ
itG
arc
aUD
@@ -98202,7 +97894,7 @@ aam
aam
aam
aej
-cII
+bum
aLM
aej
cIH
@@ -100284,7 +99976,7 @@ awp
ann
cRi
ain
-aEo
+wOc
axc
axc
axc
@@ -100553,7 +100245,7 @@ nSi
guA
xBP
sXN
-uQs
+qeq
tYP
pcR
tnM
@@ -103372,7 +103064,7 @@ awy
awy
awy
aUb
-dkt
+gqH
aln
kZF
aIG
@@ -103633,7 +103325,7 @@ aUb
aUb
aUb
aIG
-tRs
+gGs
iTQ
nsJ
lAN
@@ -105164,7 +104856,7 @@ ahg
dCy
iiQ
afB
-wfD
+qbv
aim
iXL
ntM
@@ -105915,7 +105607,7 @@ aBM
aBM
aBM
aiF
-ajj
+jtT
cuP
akO
alh
@@ -106195,7 +105887,7 @@ afB
fxN
gcl
iXL
-gXR
+bAL
gOs
kSp
vNq
@@ -106720,7 +106412,7 @@ uYT
imM
viG
otN
-idv
+uiu
pJF
pVU
kIo
@@ -115403,7 +115095,7 @@ aae
aae
aae
sHb
-qiA
+ffr
svb
bWH
aht
@@ -115441,7 +115133,7 @@ adS
vkh
ifA
xaQ
-fat
+ewP
uJg
gJC
awJ
@@ -116481,7 +116173,7 @@ bJd
bJd
bJd
bJd
-ixu
+nnC
vyG
fls
aRL
@@ -119580,7 +119272,7 @@ xVI
omI
kgw
nAo
-oHX
+pie
der
mkm
czI
@@ -119837,7 +119529,7 @@ pft
ixB
utS
vVw
-mzy
+oPN
der
der
der
@@ -155534,7 +155226,7 @@ dDP
koi
jKC
aGt
-byG
+nie
abG
yee
yee
@@ -156037,7 +155729,7 @@ oev
aBa
erb
tjo
-aDp
+lCz
tpy
aFB
tjo
@@ -158084,7 +157776,7 @@ ahu
ahu
ahu
aak
-ajT
+mvS
akz
alV
iZU
@@ -158869,7 +158561,7 @@ azw
axV
axV
aEX
-aCU
+jCN
aEx
anG
iSC
@@ -159607,7 +159299,7 @@ aae
aae
aak
aak
-abe
+vqD
act
adf
adK
@@ -159655,7 +159347,7 @@ wBq
sXx
sXx
vkV
-uhs
+iiG
kGg
uRU
aOb
@@ -159888,7 +159580,7 @@ aGY
auf
aGY
aGY
-aqo
+wuT
auY
awK
axX
@@ -161954,7 +161646,7 @@ qbg
axX
aBH
bxq
-aEK
+wmU
aJV
aJV
pwy
@@ -162177,7 +161869,7 @@ aae
aae
aak
aak
-abi
+gGD
acv
adl
adM
@@ -162225,7 +161917,7 @@ kqJ
qhf
qhf
kqJ
-fIg
+ond
iiX
dGK
aOb
@@ -162973,7 +162665,7 @@ ptd
aZQ
aZQ
ara
-avj
+hdD
aEn
axZ
aYE
@@ -163462,7 +163154,7 @@ aae
aae
aae
aFF
-aAs
+iWB
epC
bTH
wQD
@@ -163475,7 +163167,7 @@ aFF
api
doY
aep
-aBS
+aWS
abW
ahu
ahu
@@ -164760,7 +164452,7 @@ aFF
aJc
aBE
ahv
-awX
+djm
abW
aae
aae
@@ -165004,7 +164696,7 @@ aae
ccM
ccM
aFF
-ace
+ghR
aSe
jiB
oXV
@@ -169149,7 +168841,7 @@ iBv
ibO
ayf
aFa
-aDo
+pNm
iUK
avn
avn
@@ -170200,7 +169892,7 @@ aIk
uYR
uht
uht
-kDj
+pTk
dJz
xCV
jyn
@@ -172244,7 +171936,7 @@ nbz
nbz
aHr
eLP
-cdt
+iLM
uht
uht
qch
@@ -173253,7 +172945,7 @@ bhS
aLX
xyy
atB
-avX
+czW
aEy
ayn
uZH
@@ -173787,7 +173479,7 @@ rKf
kdk
vKS
eVQ
-aHM
+bav
adD
hVT
aez
@@ -176633,7 +176325,7 @@ agq
lbM
jwN
sYs
-agq
+aae
aae
aae
aae
@@ -176890,7 +176582,7 @@ jOR
wEN
fwP
fwP
-agq
+aae
aae
aae
aae
@@ -177135,7 +176827,7 @@ aae
aae
aae
aae
-agq
+aae
lbM
agq
xCz
@@ -177146,8 +176838,8 @@ fwP
jOR
aEg
lAc
-agq
-agq
+aae
+aae
aae
aae
aae
@@ -177383,7 +177075,7 @@ aBM
aae
aae
dyg
-ist
+xQT
hHc
ooo
cVj
@@ -177403,8 +177095,8 @@ wWv
jOR
aEg
hYK
-abP
-agq
+eWl
+aae
aae
aae
aae
@@ -177652,16 +177344,16 @@ aae
lbM
tAu
sYs
-agq
-agq
+aae
+aae
wEN
oWE
lbM
jOR
-agq
-agq
-agq
-agq
+aae
+aae
+aae
+aae
aae
aae
aae
@@ -177908,14 +177600,14 @@ dyg
aae
lbM
lbM
-ayQ
-ayQ
-ayQ
-ayQ
-ayQ
-ayQ
-ayQ
-ayQ
+aae
+aae
+aae
+aae
+aae
+aae
+aae
+aae
aae
aae
aae
@@ -178154,7 +177846,7 @@ wbP
akA
bdB
gIt
-wdt
+lGl
tuP
aPX
kvX
@@ -178165,14 +177857,14 @@ dyg
aae
aae
aae
-ayQ
-bap
-auc
-alu
-bMz
-vfl
-pUB
-ayQ
+aae
+aae
+aae
+aae
+aae
+aae
+aae
+aae
aae
aae
aae
@@ -178422,14 +178114,14 @@ dyg
aae
aae
aae
-ayQ
-anf
-dFo
-cAT
-vux
-uQm
-gfd
-ayQ
+aae
+aae
+aae
+aae
+aae
+aae
+aae
+aae
aae
aae
aae
@@ -178679,14 +178371,14 @@ dyg
der
der
der
-ayQ
-dbl
-kzT
-cAT
-rwO
-vux
-jqL
-ayQ
+der
+aae
+aae
+aae
+aae
+aae
+aae
+aae
aae
aae
aae
@@ -178936,14 +178628,14 @@ dyg
bwc
dCn
pto
-ayQ
-asL
-bsR
-hPF
-baY
-bFL
-uRy
-ayQ
+der
+aae
+aae
+aae
+aae
+aae
+aae
+aae
aae
aae
aae
@@ -179193,13 +178885,13 @@ dyg
lSU
wtF
jhg
-ayQ
-aIs
-rbD
-nkz
-pfi
-tJq
-aIT
+der
+aae
+aae
+aae
+aae
+aae
+aae
lQG
lQG
lQG
@@ -179408,7 +179100,7 @@ gJG
okm
jZN
bSv
-kXA
+xXj
ari
scx
tEA
@@ -179421,7 +179113,7 @@ vfE
uEE
oDL
atP
-awe
+eCL
aEE
ayw
hlI
@@ -179450,13 +179142,13 @@ dyg
der
jFq
der
-ayQ
-ayQ
-btO
-hqq
-tOO
-btO
-ayQ
+der
+der
+der
+der
+der
+der
+der
lQG
dGu
dGu
@@ -179710,8 +179402,8 @@ ydX
eaF
eaF
eaF
-vDR
-bMh
+sPg
+qJo
fgV
czV
lQG
@@ -180733,7 +180425,7 @@ yju
hIG
jrL
vmv
-qab
+utD
lev
lev
lev
@@ -182008,7 +181700,7 @@ ojc
ngB
buy
kvg
-uLU
+dZf
vLU
kkY
ply
@@ -183541,7 +183233,7 @@ aAS
ayA
ayA
aFi
-aEp
+uoz
aGb
aod
dCt
diff --git a/code/__DEFINES/ai.dm b/code/__DEFINES/ai.dm
index 66caa5bdf6..d6018a8d8e 100644
--- a/code/__DEFINES/ai.dm
+++ b/code/__DEFINES/ai.dm
@@ -1,4 +1,4 @@
-#define GET_AI_BEHAVIOR(behavior_type) SSai_controllers.ai_behaviors[behavior_type]
+#define GET_AI_BEHAVIOR(behavior_type) SSai_behaviors.ai_behaviors[behavior_type]
#define HAS_AI_CONTROLLER_TYPE(thing, type) istype(thing?.ai_controller, type)
#define AI_STATUS_ON 1
@@ -12,6 +12,10 @@
///For JPS pathing, the maximum length of a path we'll try to generate. Should be modularized depending on what we're doing later on
#define AI_MAX_PATH_LENGTH 30 // 30 is possibly overkill since by default we lose interest after 14 tiles of distance, but this gives wiggle room for weaving around obstacles
+///Cooldown on planning if planning failed last time
+
+#define AI_FAILED_PLANNING_COOLDOWN 1.5 SECONDS
+
///Flags for ai_behavior new()
#define AI_CONTROLLER_INCOMPATIBLE (1<<0)
@@ -20,6 +24,10 @@
///Does this task let you perform the action while you move closer? (Things like moving and shooting)
#define AI_BEHAVIOR_MOVE_AND_PERFORM (1<<1)
+///Subtree defines
+
+///This subtree should cancel any further planning, (Including from other subtrees)
+#define SUBTREE_RETURN_FINISH_PLANNING 1
// Monkey AI controller blackboard keys
diff --git a/code/__DEFINES/atom_hud.dm b/code/__DEFINES/atom_hud.dm
index 6495c88136..855e4d7242 100644
--- a/code/__DEFINES/atom_hud.dm
+++ b/code/__DEFINES/atom_hud.dm
@@ -38,8 +38,6 @@
#define GLAND_HUD "17"
#define SENTIENT_DISEASE_HUD "18"
#define AI_DETECT_HUD "19"
-#define NANITE_HUD "20"
-#define DIAG_NANITE_FULL_HUD "21"
/// Displays launchpads' targeting reticle
#define DIAG_LAUNCHPAD_HUD "22"
//for antag huds. these are used at the /mob level
diff --git a/code/__DEFINES/botany.dm b/code/__DEFINES/botany.dm
index 20371614bd..01e3803150 100644
--- a/code/__DEFINES/botany.dm
+++ b/code/__DEFINES/botany.dm
@@ -64,3 +64,7 @@
#define REAGENT_TRANSFER_ID (1<<5)
/// Plants that have a unique effect on attack_self.
#define ATTACK_SELF_ID (1<<6)
+
+#define GLOWSHROOM_SPREAD_BASE_DIMINISH_FACTOR 10
+#define GLOWSHROOM_SPREAD_DIMINISH_FACTOR_PER_GLOWSHROOM 0.2
+#define GLOWSHROOM_BASE_INTEGRITY 60
diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm
index a33ff8b10c..b625e7fb94 100644
--- a/code/__DEFINES/dcs/signals.dm
+++ b/code/__DEFINES/dcs/signals.dm
@@ -515,6 +515,8 @@
///from base of /mob/living/proc/apply_damage(): (damage, damagetype, def_zone)
#define COMSIG_MOB_APPLY_DAMGE "mob_apply_damage"
+///from base of /mob/living/attack_alien(): (user)
+#define COMSIG_MOB_ATTACK_ALIEN "mob_attack_alien"
///from base of /mob/throw_item(): (atom/target)
#define COMSIG_MOB_THROW "mob_throw"
///from base of /mob/verb/examinate(): (atom/target)
@@ -1107,49 +1109,6 @@
///(customer, container) venue signal sent when a venue sells an item. source is the thing sold, which can be a datum, so we send container for location checks
#define COMSIG_ITEM_SOLD_TO_CUSTOMER "item_sold_to_customer"
-//Nanites
-
-///() returns TRUE if nanites are found
-#define COMSIG_HAS_NANITES "has_nanites"
-///() returns TRUE if nanites have stealth
-#define COMSIG_NANITE_IS_STEALTHY "nanite_is_stealthy"
-///() deletes the nanite component
-#define COMSIG_NANITE_DELETE "nanite_delete"
-///(list/nanite_programs) - makes the input list a copy the nanites' program list
-#define COMSIG_NANITE_GET_PROGRAMS "nanite_get_programs"
-///(amount) Returns nanite amount
-#define COMSIG_NANITE_GET_VOLUME "nanite_get_volume"
-///(amount) Sets current nanite volume to the given amount
-#define COMSIG_NANITE_SET_VOLUME "nanite_set_volume"
-///(amount) Adjusts nanite volume by the given amount
-#define COMSIG_NANITE_ADJUST_VOLUME "nanite_adjust"
-///(amount) Sets maximum nanite volume to the given amount
-#define COMSIG_NANITE_SET_MAX_VOLUME "nanite_set_max_volume"
-///(amount(0-100)) Sets cloud ID to the given amount
-#define COMSIG_NANITE_SET_CLOUD "nanite_set_cloud"
-///(method) Modify cloud sync status. Method can be toggle, enable or disable
-#define COMSIG_NANITE_SET_CLOUD_SYNC "nanite_set_cloud_sync"
-///(amount) Sets safety threshold to the given amount
-#define COMSIG_NANITE_SET_SAFETY "nanite_set_safety"
-///(amount) Sets regeneration rate to the given amount
-#define COMSIG_NANITE_SET_REGEN "nanite_set_regen"
-///(code(1-9999)) Called when sending a nanite signal to a mob.
-#define COMSIG_NANITE_SIGNAL "nanite_signal"
-///(comm_code(1-9999), comm_message) Called when sending a nanite comm signal to a mob.
-#define COMSIG_NANITE_COMM_SIGNAL "nanite_comm_signal"
-///(mob/user, full_scan) - sends to chat a scan of the nanites to the user, returns TRUE if nanites are detected
-#define COMSIG_NANITE_SCAN "nanite_scan"
-///(list/data, scan_level) - adds nanite data to the given data list - made for ui_data procs
-#define COMSIG_NANITE_UI_DATA "nanite_ui_data"
-///(datum/nanite_program/new_program, datum/nanite_program/source_program) Called when adding a program to a nanite component
-#define COMSIG_NANITE_ADD_PROGRAM "nanite_add_program"
- ///Installation successful
- #define COMPONENT_PROGRAM_INSTALLED (1<<0)
- ///Installation failed, but there are still nanites
- #define COMPONENT_PROGRAM_NOT_INSTALLED (1<<1)
-///(datum/component/nanites, full_overwrite, copy_activation) Called to sync the target's nanites to a given nanite component
-#define COMSIG_NANITE_SYNC "nanite_sync"
-
// /datum/component/storage signals
///() - returns bool.
@@ -1369,6 +1328,12 @@
/// Cancels the attack chain, but without performing any other action.
#define COMSIG_CANCEL_USB_CABLE_ATTACK (1<<2)
+/// Called when the circuit component is saved.
+#define COMSIG_CIRCUIT_COMPONENT_SAVE "circuit_component_save"
+
+/// Called when an external object is loaded.
+#define COMSIG_MOVABLE_CIRCUIT_LOADED "movable_circuit_loaded"
+
/// Sent from /obj/structure/industrial_lift/tram when its travelling status updates. (travelling)
#define COMSIG_TRAM_SET_TRAVELLING "tram_set_travelling"
diff --git a/code/__DEFINES/drone.dm b/code/__DEFINES/drone.dm
new file mode 100644
index 0000000000..46c19fdbaf
--- /dev/null
+++ b/code/__DEFINES/drone.dm
@@ -0,0 +1,28 @@
+
+/// If drones are blacklisted from certain sensitive machines
+GLOBAL_VAR_INIT(drone_machine_blacklist_enabled, TRUE)
+
+#define DRONE_HANDS_LAYER 1
+#define DRONE_HEAD_LAYER 2
+#define DRONE_TOTAL_LAYERS 2
+
+/// Message displayed when new drone spawns in drone network
+#define DRONE_NET_CONNECT span_notice("DRONE NETWORK: [name] connected.")
+/// Message displayed when drone in network dies
+#define DRONE_NET_DISCONNECT span_danger("DRONE NETWORK: [name] is not responding.")
+
+/// Maintenance Drone icon_state (multiple colors)
+#define MAINTDRONE "drone_maint"
+/// Repair Drone icon_state
+#define REPAIRDRONE "drone_repair"
+/// Scout Drone icon_state
+#define SCOUTDRONE "drone_scout"
+/// Clockwork Drone icon_state
+#define CLOCKDRONE "drone_clock"
+
+/// [MAINTDRONE] hacked icon_state
+#define MAINTDRONE_HACKED "drone_maint_red"
+/// [REPAIRDRONE] hacked icon_state
+#define REPAIRDRONE_HACKED "drone_repair_hacked"
+/// [SCOUTDRONE] hacked icon_state
+#define SCOUTDRONE_HACKED "drone_scout_hacked"
diff --git a/code/__DEFINES/logging.dm b/code/__DEFINES/logging.dm
index 863c65f05c..755f30e908 100644
--- a/code/__DEFINES/logging.dm
+++ b/code/__DEFINES/logging.dm
@@ -14,7 +14,6 @@
#define INVESTIGATE_HALLUCINATIONS "hallucinations"
#define INVESTIGATE_RADIATION "radiation"
#define INVESTIGATE_EXONET "exonet"
-#define INVESTIGATE_NANITES "nanites"
#define INVESTIGATE_PRESENTS "presents"
#define INVESTIGATE_HYPERTORUS "hypertorus"
#define INVESTIGATE_ACCESSCHANGES "id_card_changes"
diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm
index 0958d7472c..6e47918df5 100644
--- a/code/__DEFINES/machines.dm
+++ b/code/__DEFINES/machines.dm
@@ -41,7 +41,6 @@
#define BIOGENERATOR (1<<4) //Uses biomass
#define LIMBGROWER (1<<5) //Uses synthetic flesh
#define SMELTER (1<<6) //uses various minerals
-#define NANITE_COMPILER (1<<7) //Prints nanite disks
/// Protolathes for offstation roles. More limited tech tree.
#define AWAY_LATHE (1<<8)
/// Imprinters for offstation roles. More limited tech tree.
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index bd90150936..6cc07276f5 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -180,15 +180,6 @@ GLOBAL_LIST_EMPTY(bloody_footprints_cache)
//Maximum amount of time, (in deciseconds) a tile can be wet for.
#define MAXIMUM_WET_TIME 5 MINUTES
-//unmagic-strings for types of polls
-#define POLLTYPE_OPTION "OPTION"
-#define POLLTYPE_TEXT "TEXT"
-#define POLLTYPE_RATING "NUMVAL"
-#define POLLTYPE_MULTI "MULTICHOICE"
-#define POLLTYPE_IRV "IRV"
-
-
-
//subtypesof(), typesof() without the parent path
#define subtypesof(typepath) ( typesof(typepath) - typepath )
@@ -494,7 +485,6 @@ GLOBAL_LIST_INIT(pda_styles, sortList(list(MONO, VT, ORBITRON, SHARE)))
#define VOMIT_TOXIC 1
#define VOMIT_PURPLE 2
-#define VOMIT_NANITE 3
//chem grenades defines
#define GRENADE_EMPTY 1
diff --git a/code/__DEFINES/nanites.dm b/code/__DEFINES/nanites.dm
deleted file mode 100644
index abd2327dd5..0000000000
--- a/code/__DEFINES/nanites.dm
+++ /dev/null
@@ -1,53 +0,0 @@
-#define NANITE_SYNC_DELAY 300
-
-#define NANITE_SHOCK_IMMUNE 1
-#define NANITE_EMP_IMMUNE 2
-
-#define NANITE_PROGRAM_LIMIT 20
-
-
-#define NANITE_BASE_RESEARCH 3.5
-
-#define NANITE_CLOUD_TOGGLE 1
-#define NANITE_CLOUD_DISABLE 2
-#define NANITE_CLOUD_ENABLE 3
-
-//Nanite excess thresholds
-#define NANITE_EXCESS_MINOR 25
-#define NANITE_EXCESS_VOMIT 100
-#define NANITE_EXCESS_BURST 350
-
-///Nanite Protocol types
-#define NANITE_PROTOCOL_REPLICATION "nanite_replication"
-#define NANITE_PROTOCOL_STORAGE "nanite_storage"
-
-///Nanite extra settings types: used to help uis know what type an extra setting is
-#define NESTYPE_TEXT "text"
-#define NESTYPE_NUMBER "number"
-#define NESTYPE_TYPE "type"
-#define NESTYPE_BOOLEAN "boolean"
-
-///Nanite Extra Settings - Note that these will also be the names displayed in the UI
-#define NES_SENT_CODE "Sent Code"
-#define NES_DELAY "Delay"
-#define NES_MODE "Mode"
-#define NES_COMM_CODE "Comm Code"
-#define NES_RELAY_CHANNEL "Relay Channel"
-#define NES_HEALTH_PERCENT "Health Percent"
-#define NES_DIRECTION "Direction"
-#define NES_NANITE_PERCENT "Nanite Percent"
-#define NES_DAMAGE_TYPE "Damage Type"
-#define NES_DAMAGE "Damage"
-#define NES_SENTENCE "Sentence"
-#define NES_MESSAGE "Message"
-#define NES_DIRECTIVE "Directive"
-#define NES_INCLUSIVE_MODE "Inclusive Mode"
-#define NES_RACE "Race"
-#define NES_HALLUCINATION_TYPE "Hallucination Type"
-#define NES_HALLUCINATION_DETAIL "Hallucination Detail"
-#define NES_MOOD_MESSAGE "Mood Message"
-#define NES_PROGRAM_OVERWRITE "Program Overwrite"
-#define NES_CLOUD_OVERWRITE "Cloud Overwrite"
-#define NES_SCAN_TYPE "Scan Type"
-#define NES_BUTTON_NAME "Button Name"
-#define NES_ICON "Icon"
diff --git a/code/__DEFINES/polls.dm b/code/__DEFINES/polls.dm
new file mode 100644
index 0000000000..a5a0616d8d
--- /dev/null
+++ b/code/__DEFINES/polls.dm
@@ -0,0 +1,7 @@
+
+//unmagic-strings for types of polls
+#define POLLTYPE_OPTION "OPTION"
+#define POLLTYPE_TEXT "TEXT"
+#define POLLTYPE_RATING "NUMVAL"
+#define POLLTYPE_MULTI "MULTICHOICE"
+#define POLLTYPE_IRV "IRV"
diff --git a/code/__DEFINES/power.dm b/code/__DEFINES/power.dm
index 7c5c2d0a82..ec8888c43a 100644
--- a/code/__DEFINES/power.dm
+++ b/code/__DEFINES/power.dm
@@ -7,3 +7,12 @@
#define SOLAR_TRACK_OFF 0
#define SOLAR_TRACK_TIMED 1
#define SOLAR_TRACK_AUTO 2
+
+///conversion ratio from joules to watts
+#define WATTS / 0.002
+///conversion ratio from watts to joules
+#define JOULES * 0.002
+
+GLOBAL_VAR_INIT(CHARGELEVEL, 0.001) // Cap for how fast cells charge, as a percentage-per-tick (.001 means cellcharge is capped to 1% per second)
+
+GLOBAL_LIST_EMPTY(powernets)
diff --git a/code/__DEFINES/projectiles.dm b/code/__DEFINES/projectiles.dm
index 07137c192f..aecd71092a 100644
--- a/code/__DEFINES/projectiles.dm
+++ b/code/__DEFINES/projectiles.dm
@@ -1,3 +1,6 @@
+
+GLOBAL_LIST_EMPTY_TYPED(proj_by_path_key, /obj/projectile) // A list of projectile objects, which are keyed by their path
+
// check_pierce() return values
/// Default behavior: hit and delete self
#define PROJECTILE_PIERCE_NONE 0
diff --git a/code/__DEFINES/research.dm b/code/__DEFINES/research.dm
index d8db678bc2..a43053e262 100644
--- a/code/__DEFINES/research.dm
+++ b/code/__DEFINES/research.dm
@@ -22,14 +22,12 @@
//! Techweb names for new point types. Can be used to define specific point values for specific types of research (science, security, engineering, etc.)
#define TECHWEB_POINT_TYPE_GENERIC "General Research"
-#define TECHWEB_POINT_TYPE_NANITES "Nanite Research"
#define TECHWEB_POINT_TYPE_DEFAULT TECHWEB_POINT_TYPE_GENERIC
//! Associative names for techweb point values, see: [all_nodes][code/modules/research/techweb/all_nodes.dm]
#define TECHWEB_POINT_TYPE_LIST_ASSOCIATIVE_NAMES list(\
TECHWEB_POINT_TYPE_GENERIC = "General Research",\
- TECHWEB_POINT_TYPE_NANITES = "Nanite Research"\
)
/// Amount of cash you can get from a maxcap
diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm
index 8aca8dad26..586a49d964 100644
--- a/code/__DEFINES/subsystems.dm
+++ b/code/__DEFINES/subsystems.dm
@@ -170,6 +170,7 @@
#define FIRE_PRIORITY_AIR 20
#define FIRE_PRIORITY_NPC 20
#define FIRE_PRIORITY_NPC_MOVEMENT 21
+#define FIRE_PRIORITY_NPC_ACTIONS 22
#define FIRE_PRIORITY_PROCESS 25
#define FIRE_PRIORITY_THROWING 25
#define FIRE_PRIORITY_REAGENTS 26
diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index 4c740d88bb..c499c088f2 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -293,8 +293,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_PERMANENTLY_ONFIRE "permanently_onfire"
/// Galactic Common Sign Language
#define TRAIT_SIGN_LANG "sign_language"
-/// The mob's nanites are sending a monitoring signal visible on diag HUD
-#define TRAIT_NANITE_MONITORING "nanite_monitoring"
/// nobody can use martial arts on this mob
#define TRAIT_MARTIAL_ARTS_IMMUNE "martial_arts_immune"
/// You've been cursed with a living duffelbag, and can't have more added
@@ -598,7 +596,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define GENETICS_SPELL "genetics_spell"
#define EYES_COVERED "eyes_covered"
#define HYPNOCHAIR_TRAIT "hypnochair"
-#define NANITES_TRAIT "nanites"
#define FLASHLIGHT_EYES "flashlight_eyes"
#define IMPURE_OCULINE "impure_oculine"
#define BLINDFOLD_TRAIT "blindfolded"
diff --git a/code/__DEFINES/wiremod.dm b/code/__DEFINES/wiremod.dm
index 05d30d4359..70182fcc15 100644
--- a/code/__DEFINES/wiremod.dm
+++ b/code/__DEFINES/wiremod.dm
@@ -138,5 +138,7 @@
#define CIRCUIT_FLAG_INPUT_SIGNAL (1<<0)
/// Creates an output trigger that sends a pulse whenever the component is successfully triggered
#define CIRCUIT_FLAG_OUTPUT_SIGNAL (1<<1)
+/// Prohibits the component from being duplicated via the module duplicator
+#define CIRCUIT_FLAG_UNDUPEABLE (1<<2)
/// This circuit component does not show in the menu.
-#define CIRCUIT_FLAG_HIDDEN (1<<2)
+#define CIRCUIT_FLAG_HIDDEN (1<<3)
diff --git a/code/__HELPERS/files.dm b/code/__HELPERS/files.dm
index 3b9d35243f..144f127e3b 100644
--- a/code/__HELPERS/files.dm
+++ b/code/__HELPERS/files.dm
@@ -1,3 +1,11 @@
+
+/**
+ * For FTP requests. (i.e. downloading runtime logs.)
+ *
+ * However it'd be ok to use for accessing attack logs and such too, which are even laggier.
+ */
+GLOBAL_VAR_INIT(fileaccess_timer, 0)
+
/client/proc/browse_files(root_type=BROWSE_ROOT_ALL_LOGS, max_iterations=10, list/valid_extensions=list("txt","log","htm", "html"))
// wow why was this ever a parameter
var/root = "data/logs/"
diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm
index 7d1cd02fc4..99aff26872 100644
--- a/code/__HELPERS/game.dm
+++ b/code/__HELPERS/game.dm
@@ -369,7 +369,7 @@
if(flashwindow)
window_flash(M.client)
var/list/answers = ignore_category ? list("Yes", "No", "Never for this round") : list("Yes", "No")
- switch(tgui_alert(M, Question, "A limited-time offer!", answers, timeout=poll_time))
+ switch(tgui_alert(M, Question, "A limited-time offer!", answers, poll_time, autofocus = FALSE))
if("Yes")
to_chat(M, span_notice("Choice registered: Yes."))
if(time_passed + poll_time <= world.time)
diff --git a/code/__HELPERS/path.dm b/code/__HELPERS/path.dm
index 06388051a3..7ae72c3fa2 100644
--- a/code/__HELPERS/path.dm
+++ b/code/__HELPERS/path.dm
@@ -16,8 +16,9 @@
* * id: An ID card representing what access we have and what doors we can open. Its location relative to the pathing atom is irrelevant
* * simulated_only: Whether we consider turfs without atmos simulation (AKA do we want to ignore space)
* * exclude: If we want to avoid a specific turf, like if we're a mulebot who already got blocked by some turf
+ * * skip_first: Whether or not to delete the first item in the path. This would be done because the first item is the starting tile, which can break movement for some creatures.
*/
-/proc/get_path_to(caller, end, max_distance = 30, mintargetdist, id=null, simulated_only = TRUE, turf/exclude)
+/proc/get_path_to(caller, end, max_distance = 30, mintargetdist, id=null, simulated_only = TRUE, turf/exclude, skip_first=TRUE)
if(!caller || !get_turf(end))
return
@@ -34,6 +35,8 @@
SSpathfinder.mobs.found(l)
if(!path)
path = list()
+ if(length(path) > 0 && skip_first)
+ path.Cut(1,2)
return path
/**
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index 2cdf763d8d..411c4f148d 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -315,10 +315,10 @@ Turf and target are separate in case you want to teleport some distance from a t
// Format an energy value measured in Power Cell units.
/proc/DisplayEnergy(units)
// APCs process every (SSmachines.wait * 0.1) seconds, and turn 1 W of
- // excess power into GLOB.CELLRATE energy units when charging cells.
+ // excess power into watts when charging cells.
// With the current configuration of wait=20 and CELLRATE=0.002, this
// means that one unit is 1 kJ.
- return DisplayJoules(units * SSmachines.wait * 0.1 / GLOB.CELLRATE)
+ return DisplayJoules(units * SSmachines.wait * 0.1 WATTS)
/proc/get_mob_by_ckey(key)
if(!key)
diff --git a/code/_globalvars/lists/admin.dm b/code/_globalvars/admin.dm
similarity index 86%
rename from code/_globalvars/lists/admin.dm
rename to code/_globalvars/admin.dm
index f2e08ec085..f614061366 100644
--- a/code/_globalvars/lists/admin.dm
+++ b/code/_globalvars/admin.dm
@@ -10,3 +10,5 @@ GLOBAL_VAR(stickbanadminexemptiontimerid) //stores the timerid of the callback t
return smites
GLOBAL_LIST_INIT_TYPED(smites, /datum/smite, init_smites())
+
+GLOBAL_VAR_INIT(admin_notice, "") // Admin notice that all clients see when joining the server
diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm
index 14ba43ef0e..530542d658 100644
--- a/code/_globalvars/lists/maintenance_loot.dm
+++ b/code/_globalvars/lists/maintenance_loot.dm
@@ -314,6 +314,7 @@ GLOBAL_LIST_INIT(rarity_loot, list(//rare: really good items
list(//misc
/obj/item/disk/nuclear/fake = 1,
/obj/item/book/granter/crafting_recipe/pipegun_prime = 1,
+ /obj/item/book/granter/crafting_recipe/trash_cannon = 1,
) = 1,
))
diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm
index ff6f2b79b2..1ccd4a338e 100644
--- a/code/_globalvars/lists/mobs.dm
+++ b/code/_globalvars/lists/mobs.dm
@@ -24,7 +24,7 @@ GLOBAL_LIST_EMPTY(alive_mob_list) //all alive mobs, including clientless. Exclud
GLOBAL_LIST_EMPTY(suicided_mob_list) //contains a list of all mobs that suicided, including their associated ghosts.
GLOBAL_LIST_EMPTY(drones_list)
GLOBAL_LIST_EMPTY(dead_mob_list) //all dead mobs, including clientless. Excludes /mob/dead/new_player
-GLOBAL_LIST_EMPTY(joined_player_list) //all clients that have joined the game at round-start or as a latejoin.
+GLOBAL_LIST_EMPTY(joined_player_list) //all ckeys that have joined the game at round-start or as a latejoin.
GLOBAL_LIST_EMPTY(new_player_list) //all /mob/dead/new_player, in theory all should have clients and those that don't are in the process of spawning and get deleted when done.
GLOBAL_LIST_EMPTY(pre_setup_antags) //minds that have been picked as antag by the gamemode. removed as antag datums are set.
GLOBAL_LIST_EMPTY(silicon_mobs) //all silicon mobs
@@ -39,7 +39,6 @@ GLOBAL_LIST_EMPTY(spidermobs) //all sentient spider mobs
GLOBAL_LIST_EMPTY(bots_list)
GLOBAL_LIST_EMPTY(aiEyes)
GLOBAL_LIST_EMPTY(suit_sensors_list) //all people with suit sensors on
-GLOBAL_LIST_EMPTY(nanite_sensors_list) //app people with nanite monitoring program
/// All alive mobs with clients.
GLOBAL_LIST_EMPTY(alive_player_list)
diff --git a/code/_globalvars/misc.dm b/code/_globalvars/misc.dm
deleted file mode 100644
index 32cec5cd52..0000000000
--- a/code/_globalvars/misc.dm
+++ /dev/null
@@ -1,38 +0,0 @@
-GLOBAL_VAR_INIT(admin_notice, "") // Admin notice that all clients see when joining the server
-
-GLOBAL_VAR_INIT(timezoneOffset, 0) // The difference betwen midnight (of the host computer) and 0 world.ticks.
-
-GLOBAL_VAR_INIT(year, time2text(world.realtime,"YYYY"))
-GLOBAL_VAR_INIT(year_integer, text2num(year)) // = 2013???
-
- // For FTP requests. (i.e. downloading runtime logs.)
- // However it'd be ok to use for accessing attack logs and such too, which are even laggier.
-GLOBAL_VAR_INIT(fileaccess_timer, 0)
-
-GLOBAL_DATUM_INIT(data_core, /datum/datacore, new)
-
-GLOBAL_VAR_INIT(CELLRATE, 0.002) // conversion ratio between a watt-tick and kilojoule
-GLOBAL_VAR_INIT(CHARGELEVEL, 0.001) // Cap for how fast cells charge, as a percentage-per-tick (.001 means cellcharge is capped to 1% per second)
-
-GLOBAL_LIST_EMPTY(powernets)
-
-GLOBAL_VAR_INIT(bsa_unlock, FALSE) //BSA unlocked by head ID swipes
-
-GLOBAL_LIST_EMPTY(player_details) // ckey -> /datum/player_details
-
-///All currently running polls held as datums
-GLOBAL_LIST_EMPTY(polls)
-GLOBAL_PROTECT(polls)
-
-///All poll option datums of running polls
-GLOBAL_LIST_EMPTY(poll_options)
-GLOBAL_PROTECT(poll_options)
-
-GLOBAL_VAR_INIT(internal_tick_usage, 0.2 * world.tick_lag)
-
-GLOBAL_VAR_INIT(glowshrooms, 0)
-
-/// If drones are blacklisted from certain sensitive machines
-GLOBAL_VAR_INIT(drone_machine_blacklist_enabled, TRUE)
-
-GLOBAL_LIST_EMPTY_TYPED(proj_by_path_key, /obj/projectile) // A list of projectile objects, which are keyed by their path
diff --git a/code/_globalvars/time_vars.dm b/code/_globalvars/time_vars.dm
new file mode 100644
index 0000000000..cc83072114
--- /dev/null
+++ b/code/_globalvars/time_vars.dm
@@ -0,0 +1,6 @@
+
+/// The difference betwen midnight (of the host computer) and 0 world.ticks.
+GLOBAL_VAR_INIT(timezoneOffset, 0)
+
+GLOBAL_VAR_INIT(year, time2text(world.realtime,"YYYY"))
+GLOBAL_VAR_INIT(year_integer, text2num(year)) // = 2013???
diff --git a/code/controllers/subsystem/ai_controllers.dm b/code/controllers/subsystem/ai_controllers.dm
new file mode 100644
index 0000000000..5319d7316f
--- /dev/null
+++ b/code/controllers/subsystem/ai_controllers.dm
@@ -0,0 +1,33 @@
+/// The subsystem used to tick [/datum/ai_controllers] instances. Handling the re-checking of plans.
+SUBSYSTEM_DEF(ai_controllers)
+ name = "AI Controller Ticker"
+ flags = SS_POST_FIRE_TIMING|SS_BACKGROUND
+ priority = FIRE_PRIORITY_NPC
+ runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME
+ init_order = INIT_ORDER_AI_CONTROLLERS
+ wait = 0.5 SECONDS //Plan every half second if required, not great not terrible.
+
+ ///List of all ai_subtree singletons, key is the typepath while assigned value is a newly created instance of the typepath. See setup_subtrees()
+ var/list/ai_subtrees = list()
+ ///List of all ai controllers currently running
+ var/list/active_ai_controllers = list()
+
+/datum/controller/subsystem/ai_controllers/Initialize(timeofday)
+ setup_subtrees()
+ return ..()
+
+/datum/controller/subsystem/ai_controllers/proc/setup_subtrees()
+ ai_subtrees = list()
+ for(var/subtree_type in subtypesof(/datum/ai_planning_subtree))
+ var/datum/ai_planning_subtree/subtree = new subtree_type
+ ai_subtrees[subtree_type] = subtree
+
+/datum/controller/subsystem/ai_controllers/fire(resumed)
+ for(var/datum/ai_controller/ai_controller as anything in active_ai_controllers)
+ if(!COOLDOWN_FINISHED(ai_controller, failed_planning_cooldown))
+ continue
+
+ if(!LAZYLEN(ai_controller.current_behaviors))
+ ai_controller.SelectBehaviors(wait * 0.1)
+ if(!LAZYLEN(ai_controller.current_behaviors)) //Still no plan
+ COOLDOWN_START(ai_controller, failed_planning_cooldown, AI_FAILED_PLANNING_COOLDOWN)
diff --git a/code/controllers/subsystem/explosions.dm b/code/controllers/subsystem/explosions.dm
index 7f56fd9564..6810725442 100644
--- a/code/controllers/subsystem/explosions.dm
+++ b/code/controllers/subsystem/explosions.dm
@@ -414,7 +414,7 @@ SUBSYSTEM_DEF(explosions)
/// The probability that a distant explosion SFX will be a far explosion sound rather than an echo. (0-100)
#define FAR_SOUND_PROB 75
/// The upper limit on screenshake amplitude for nearby explosions.
-#define NEAR_SHAKE_CAP 7
+#define NEAR_SHAKE_CAP 5
/// The upper limit on screenshake amplifude for distant explosions.
#define FAR_SHAKE_CAP 1.5
/// The duration of the screenshake for nearby explosions.
@@ -458,9 +458,9 @@ SUBSYSTEM_DEF(explosions)
continue
var/distance = get_dist(epicenter, listener_turf)
- var/base_shake_amount
- if(near_distance > distance)
- base_shake_amount = sqrt((near_distance - distance) / 10)
+ if(epicenter == listener_turf)
+ distance = 0
+ var/base_shake_amount = sqrt(near_distance / (distance + 1))
if(distance <= round(near_distance + world.view - 2, 1)) // If you are close enough to see the effects of the explosion first-hand (ignoring walls)
listener.playsound_local(epicenter, null, 100, TRUE, frequency, S = near_sound)
@@ -477,16 +477,14 @@ SUBSYSTEM_DEF(explosions)
listener.playsound_local(epicenter, null, far_volume, TRUE, frequency, S = echo_sound, distance_multiplier = 0)
if(base_shake_amount || quake_factor)
- if(!base_shake_amount) // Devastating explosions rock the station and ground
- base_shake_amount = quake_factor * 3
- shake_camera(listener, FAR_SHAKE_DURATION, clamp(base_shake_amount / 4, 0, FAR_SHAKE_CAP))
+ base_shake_amount = max(base_shake_amount, quake_factor * 3, 0) // Devastating explosions rock the station and ground
+ shake_camera(listener, FAR_SHAKE_DURATION, min(base_shake_amount, FAR_SHAKE_CAP))
else if(!isspaceturf(listener_turf) && echo_factor) // Big enough explosions echo through the hull.
var/echo_volume
if(quake_factor)
- base_shake_amount = quake_factor
echo_volume = 60
- shake_camera(listener, FAR_SHAKE_DURATION, clamp(base_shake_amount / 4, 0, FAR_SHAKE_CAP))
+ shake_camera(listener, FAR_SHAKE_DURATION, clamp(quake_factor / 4, 0, FAR_SHAKE_CAP))
else
echo_volume = 40
listener.playsound_local(epicenter, null, echo_volume, TRUE, frequency, S = echo_sound, distance_multiplier = 0)
diff --git a/code/controllers/subsystem/processing/ai_behaviors.dm b/code/controllers/subsystem/processing/ai_behaviors.dm
new file mode 100644
index 0000000000..4c98567405
--- /dev/null
+++ b/code/controllers/subsystem/processing/ai_behaviors.dm
@@ -0,0 +1,20 @@
+/// The subsystem used to tick [/datum/ai_behavior] instances. Handling the individual actions an AI can take like punching someone in the fucking NUTS
+PROCESSING_SUBSYSTEM_DEF(ai_behaviors)
+ name = "AI Behavior Ticker"
+ flags = SS_POST_FIRE_TIMING|SS_BACKGROUND
+ priority = FIRE_PRIORITY_NPC_ACTIONS
+ runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME
+ init_order = INIT_ORDER_AI_CONTROLLERS
+ wait = 1
+ ///List of all ai_behavior singletons, key is the typepath while assigned value is a newly created instance of the typepath. See SetupAIBehaviors()
+ var/list/ai_behaviors
+
+/datum/controller/subsystem/processing/ai_behaviors/Initialize(timeofday)
+ SetupAIBehaviors()
+ return ..()
+
+/datum/controller/subsystem/processing/ai_behaviors/proc/SetupAIBehaviors()
+ ai_behaviors = list()
+ for(var/behavior_type in subtypesof(/datum/ai_behavior))
+ var/datum/ai_behavior/ai_behavior = new behavior_type
+ ai_behaviors[behavior_type] = ai_behavior
diff --git a/code/controllers/subsystem/processing/ai_controllers.dm b/code/controllers/subsystem/processing/ai_controllers.dm
deleted file mode 100644
index fbdb7adb37..0000000000
--- a/code/controllers/subsystem/processing/ai_controllers.dm
+++ /dev/null
@@ -1,23 +0,0 @@
-/// The subsystem used to tick [/datum/ai_controllers] instances. Handling the re-checking of plans.
-PROCESSING_SUBSYSTEM_DEF(ai_controllers)
- name = "AI behavior"
- flags = SS_POST_FIRE_TIMING|SS_BACKGROUND
- priority = FIRE_PRIORITY_NPC
- runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME
- init_order = INIT_ORDER_AI_CONTROLLERS
- wait = 8 //Uses the value of CLICK_CD_MELEE because that seemed like a nice standard for the speed of AI behavior
-
- ///an assoc list of all ai_behaviors by type, to
- var/list/ai_behaviors
-
-/datum/controller/subsystem/processing/ai_controllers/Initialize(timeofday)
- SetupAIBehaviors()
- return ..()
-
-/datum/controller/subsystem/processing/ai_controllers/proc/SetupAIBehaviors()
- ai_behaviors = list()
- for(var/i in subtypesof(/datum/ai_behavior))
- var/datum/ai_behavior/ai_behavior = new i
- ai_behaviors[i] = ai_behavior
-
-
diff --git a/code/controllers/subsystem/processing/nanites.dm b/code/controllers/subsystem/processing/nanites.dm
deleted file mode 100644
index b8109a904a..0000000000
--- a/code/controllers/subsystem/processing/nanites.dm
+++ /dev/null
@@ -1,22 +0,0 @@
-PROCESSING_SUBSYSTEM_DEF(nanites)
- name = "Nanites"
- flags = SS_BACKGROUND|SS_POST_FIRE_TIMING|SS_NO_INIT
- wait = 1 SECONDS
-
- var/list/datum/nanite_cloud_backup/cloud_backups = list()
- var/list/mob/living/nanite_monitored_mobs = list()
- var/list/datum/nanite_program/relay/nanite_relays = list()
- var/neural_network_count = 0
-
-/datum/controller/subsystem/processing/nanites/proc/check_hardware(datum/nanite_cloud_backup/backup)
- if(QDELETED(backup.storage) || (backup.storage.machine_stat & (NOPOWER|BROKEN)))
- return FALSE
- return TRUE
-
-/datum/controller/subsystem/processing/nanites/proc/get_cloud_backup(cloud_id, force = FALSE)
- for(var/I in cloud_backups)
- var/datum/nanite_cloud_backup/backup = I
- if(!force && !check_hardware(backup))
- return
- if(backup.cloud_id == cloud_id)
- return backup
diff --git a/code/controllers/subsystem/processing/tramprocess.dm b/code/controllers/subsystem/processing/tramprocess.dm
index f72ba30dde..6e1b98ead3 100644
--- a/code/controllers/subsystem/processing/tramprocess.dm
+++ b/code/controllers/subsystem/processing/tramprocess.dm
@@ -1,5 +1,6 @@
PROCESSING_SUBSYSTEM_DEF(tramprocess)
name = "Tram Process"
wait = 1
- /// only used on maps with trams, so only enabled by such.
+ flags = SS_TICKER
+ // only used on maps with trams, so only enabled by such.
can_fire = FALSE
diff --git a/code/datums/ai/_ai_behavior.dm b/code/datums/ai/_ai_behavior.dm
index 0ce84505a1..e441236db2 100644
--- a/code/datums/ai/_ai_behavior.dm
+++ b/code/datums/ai/_ai_behavior.dm
@@ -19,7 +19,7 @@
///Called when the action is finished.
/datum/ai_behavior/proc/finish_action(datum/ai_controller/controller, succeeded)
- controller.current_behaviors.Remove(src)
+ LAZYREMOVE(controller.current_behaviors, src)
controller.behavior_args -= type
if(behavior_flags & AI_BEHAVIOR_REQUIRE_MOVEMENT) //If this was a movement task, reset our movement target.
controller.current_movement_target = null
diff --git a/code/datums/ai/_ai_controller.dm b/code/datums/ai/_ai_controller.dm
index d2aee869cc..bcbc063aa4 100644
--- a/code/datums/ai/_ai_controller.dm
+++ b/code/datums/ai/_ai_controller.dm
@@ -1,6 +1,7 @@
/*
AI controllers are a datumized form of AI that simulates the input a player would otherwise give to a atom. What this means is that these datums
-have ways of interacting with a specific atom and control it. They posses a blackboard with the information the AI knows and has, and will plan behaviors it will try to execute.
+have ways of interacting with a specific atom and control it. They posses a blackboard with the information the AI knows and has, and will plan behaviors it will try to execute through
+multiple modular subtrees with behaviors
*/
/datum/ai_controller
@@ -9,7 +10,7 @@ have ways of interacting with a specific atom and control it. They posses a blac
///Bitfield of traits for this AI to handle extra behavior
var/ai_traits
///Current actions being performed by the AI.
- var/list/current_behaviors = list()
+ var/list/current_behaviors
///Current actions and their respective last time ran as an assoc list.
var/list/behavior_cooldowns = list()
///Current status of AI (OFF/ON)
@@ -26,12 +27,20 @@ have ways of interacting with a specific atom and control it. They posses a blac
var/continue_processing_when_client = FALSE
///distance to give up on target
var/max_target_distance = 14
+ ///Cooldown for new plans, to prevent AI from going nuts if it can't think of new plans and looping on end
+ COOLDOWN_DECLARE(failed_planning_cooldown)
+ ///All subtrees this AI has available, will run them in order, so make sure they're in the order you want them to run. On initialization of this type, it will start as a typepath(s) and get converted to references of ai_subtrees found in SSai_controllers when init_subtrees() is called
+ var/list/planning_subtrees
+
+ // Movement related things here
///Reference to the movement datum we use. Is a type on initialize but becomes a ref afterwards.
var/datum/ai_movement/ai_movement = /datum/ai_movement/dumb
///Cooldown until next movement
COOLDOWN_DECLARE(movement_cooldown)
///Delay between movements. This is on the controller so we can keep the movement datum singleton
var/movement_delay = 0.1 SECONDS
+
+ // The variables below are fucking stupid and should be put into the blackboard at some point.
///A list for the path we're currently following, if we're using JPS pathing
var/list/movement_path
///Cooldown for JPS movement, how often we're allowed to try making a new path
@@ -40,7 +49,9 @@ have ways of interacting with a specific atom and control it. They posses a blac
var/paused_until = 0
/datum/ai_controller/New(atom/new_pawn)
- ai_movement = SSai_movement.movement_types[ai_movement]
+ change_ai_movement_type(ai_movement)
+ init_subtrees()
+
PossessPawn(new_pawn)
/datum/ai_controller/Destroy(force, ...)
@@ -48,6 +59,25 @@ have ways of interacting with a specific atom and control it. They posses a blac
UnpossessPawn(FALSE)
return ..()
+///Overrides the current ai_movement of this controller with a new one
+/datum/ai_controller/proc/change_ai_movement_type(datum/ai_movement/new_movement)
+ ai_movement = SSai_movement.movement_types[new_movement]
+
+///Completely replaces the planning_subtrees with a new set based on argument provided, list provided must contain specifically typepaths
+/datum/ai_controller/proc/replace_planning_subtrees(list/typepaths_of_new_subtrees)
+ planning_subtrees = typepaths_of_new_subtrees
+ init_subtrees()
+
+///Loops over the subtrees in planning_subtrees and looks at the ai_controllers to grab a reference, ENSURE planning_subtrees ARE TYPEPATHS AND NOT INSTANCES/REFERENCES BEFORE EXECUTING THIS
+/datum/ai_controller/proc/init_subtrees()
+ if(!LAZYLEN(planning_subtrees))
+ return
+ var/list/temp_subtree_list = list()
+ for(var/subtree in planning_subtrees)
+ var/subtree_instance = SSai_controllers.ai_subtrees[subtree]
+ temp_subtree_list += subtree_instance
+ planning_subtrees = temp_subtree_list
+
///Proc to move from one pawn to another, this will destroy the target's existing controller.
/datum/ai_controller/proc/PossessPawn(atom/new_pawn)
if(pawn) //Reset any old signals
@@ -93,17 +123,16 @@ have ways of interacting with a specific atom and control it. They posses a blac
return FALSE
return TRUE
-/// Generates a plan and see if our existing one is still valid.
+
+///Runs any actions that are currently running
/datum/ai_controller/process(delta_time)
if(!able_to_run())
walk(pawn, 0) //stop moving
return //this should remove them from processing in the future through event-based stuff.
- if(!current_behaviors?.len)
- SelectBehaviors(delta_time)
- if(!current_behaviors?.len)
- PerformIdleBehavior(delta_time) //Do some stupid shit while we have nothing to do
- return
+ if(!LAZYLEN(current_behaviors))
+ PerformIdleBehavior(delta_time) //Do some stupid shit while we have nothing to do
+ return
if(current_movement_target && get_dist(pawn, current_movement_target) > max_target_distance) //The distance is out of range
CancelActions()
@@ -144,7 +173,15 @@ have ways of interacting with a specific atom and control it. They posses a blac
///This is where you decide what actions are taken by the AI.
/datum/ai_controller/proc/SelectBehaviors(delta_time)
SHOULD_NOT_SLEEP(TRUE) //Fuck you don't sleep in procs like this.
- return
+ if(!COOLDOWN_FINISHED(src, failed_planning_cooldown))
+ return FALSE
+
+ LAZYINITLIST(current_behaviors)
+
+ if(LAZYLEN(planning_subtrees))
+ for(var/datum/ai_planning_subtree/subtree as anything in planning_subtrees)
+ if(subtree.SelectBehaviors(src, delta_time) == SUBTREE_RETURN_FINISH_PLANNING)
+ break
///This proc handles changing ai status, and starts/stops processing if required.
/datum/ai_controller/proc/set_ai_status(new_ai_status)
@@ -154,9 +191,11 @@ have ways of interacting with a specific atom and control it. They posses a blac
ai_status = new_ai_status
switch(ai_status)
if(AI_STATUS_ON)
- START_PROCESSING(SSai_controllers, src)
+ SSai_controllers.active_ai_controllers += src
+ START_PROCESSING(SSai_behaviors, src)
if(AI_STATUS_OFF)
- STOP_PROCESSING(SSai_controllers, src)
+ STOP_PROCESSING(SSai_behaviors, src)
+ SSai_controllers.active_ai_controllers -= src
CancelActions()
/datum/ai_controller/proc/PauseAi(time)
@@ -170,7 +209,7 @@ have ways of interacting with a specific atom and control it. They posses a blac
arguments[1] = src
if(!behavior.setup(arglist(arguments)))
return
- current_behaviors += behavior
+ LAZYADD(current_behaviors, behavior)
arguments.Cut(1, 2)
if(length(arguments))
behavior_args[behavior_type] = arguments
@@ -183,6 +222,8 @@ have ways of interacting with a specific atom and control it. They posses a blac
behavior.perform(arglist(arguments))
/datum/ai_controller/proc/CancelActions()
+ if(!LAZYLEN(current_behaviors))
+ return
for(var/i in current_behaviors)
var/datum/ai_behavior/current_behavior = i
current_behavior.finish_action(src, FALSE)
diff --git a/code/datums/ai/_ai_planning_subtree.dm b/code/datums/ai/_ai_planning_subtree.dm
new file mode 100644
index 0000000000..8f186d586a
--- /dev/null
+++ b/code/datums/ai/_ai_planning_subtree.dm
@@ -0,0 +1,6 @@
+///A subtree is attached to a controller and is occasionally called by /ai_controller/SelectBehaviors(), this mainly exists to act as a way to subtype and modify SelectBehaviors() without needing to subtype the ai controller itself
+/datum/ai_planning_subtree
+
+///Determines what behaviors should the controller try processing; if this returns SUBTREE_RETURN_FINISH_PLANNING then the controller won't go through the other subtrees should multiple exist in controller.planning_subtrees
+/datum/ai_planning_subtree/proc/SelectBehaviors(datum/ai_controller/controller, delta_time)
+ return
diff --git a/code/datums/ai/bane/bane_controller.dm b/code/datums/ai/bane/bane_controller.dm
index 1c9b4d9ce5..8d6820a800 100644
--- a/code/datums/ai/bane/bane_controller.dm
+++ b/code/datums/ai/bane/bane_controller.dm
@@ -5,6 +5,7 @@ And the only victory you achieved was a lie. Now you understand Gotham is beyond
/datum/ai_controller/bane
movement_delay = 0.4 SECONDS
blackboard = list(BB_BANE_BATMAN = null)
+ planning_subtrees = list(/datum/ai_planning_subtree/bane_hunting)
/datum/ai_controller/bane/TryPossessPawn(atom/new_pawn)
if(!isliving(new_pawn))
@@ -16,19 +17,3 @@ And the only victory you achieved was a lie. Now you understand Gotham is beyond
if(IS_DEAD_OR_INCAP(living_pawn))
return FALSE
return ..()
-
-/datum/ai_controller/bane/SelectBehaviors(delta_time)
- current_behaviors = list()
- var/mob/living/batman = blackboard[BB_BANE_BATMAN]
- if(!batman)
- for(var/mob/living/possibly_the_dark_knight in oview(7, pawn))
- if(IS_DEAD_OR_INCAP(possibly_the_dark_knight)) //I HAVE BROKEN THE BAT
- continue
- blackboard[BB_BANE_BATMAN] = possibly_the_dark_knight
- batman = possibly_the_dark_knight
- break
- if(batman)
- current_movement_target = batman
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/break_spine/bane)
-
-
diff --git a/code/datums/ai/bane/bane_subtrees.dm b/code/datums/ai/bane/bane_subtrees.dm
new file mode 100644
index 0000000000..cd94da40b8
--- /dev/null
+++ b/code/datums/ai/bane/bane_subtrees.dm
@@ -0,0 +1,14 @@
+///The bat is broken!
+/datum/ai_planning_subtree/bane_hunting/SelectBehaviors(datum/ai_controller/controller, delta_time)
+ var/mob/living/batman = controller.blackboard[BB_BANE_BATMAN]
+ if(!batman)
+ for(var/mob/living/possibly_the_dark_knight in oview(7, controller.pawn))
+ if(IS_DEAD_OR_INCAP(possibly_the_dark_knight)) //I HAVE BROKEN THE BAT
+ continue
+ controller.blackboard[BB_BANE_BATMAN] = possibly_the_dark_knight
+ batman = possibly_the_dark_knight
+ break
+ if(batman)
+ controller.current_movement_target = batman
+ LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/break_spine/bane))
+ return SUBTREE_RETURN_FINISH_PLANNING
diff --git a/code/datums/ai/cursed/cursed_controller.dm b/code/datums/ai/cursed/cursed_controller.dm
index f0a33de05a..bc8ee10d62 100644
--- a/code/datums/ai/cursed/cursed_controller.dm
+++ b/code/datums/ai/cursed/cursed_controller.dm
@@ -12,6 +12,7 @@
BB_TARGET_SLOT,
BB_CURSED_THROW_ATTEMPT_COUNT
)
+ planning_subtrees = list(/datum/ai_planning_subtree/cursed)
/datum/ai_controller/cursed/TryPossessPawn(atom/new_pawn)
if(!isitem(new_pawn))
@@ -24,23 +25,6 @@
UnregisterSignal(pawn, list(COMSIG_MOVABLE_IMPACT, COMSIG_ITEM_EQUIPPED))
return ..() //Run parent at end
-/datum/ai_controller/cursed/SelectBehaviors(delta_time)
- current_behaviors = list()
- var/obj/item/item_pawn = pawn
-
-
- //make sure we have a target
- var/mob/living/carbon/curse_target = blackboard[BB_CURSE_TARGET]
- if(!curse_target)
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/find_and_set/cursed)
- return
- //make sure attack is valid
- if(get_dist(curse_target, item_pawn) > CURSED_VIEW_RANGE)
- blackboard[BB_CURSE_TARGET] = null
- return
- current_movement_target = curse_target
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/item_move_close_and_attack/cursed)
-
/datum/ai_controller/cursed/PerformIdleBehavior(delta_time)
var/obj/item/item_pawn = pawn
if(ismob(item_pawn.loc)) //Being held. dont teleport
diff --git a/code/datums/ai/cursed/cursed_subtrees.dm b/code/datums/ai/cursed/cursed_subtrees.dm
new file mode 100644
index 0000000000..a692065477
--- /dev/null
+++ b/code/datums/ai/cursed/cursed_subtrees.dm
@@ -0,0 +1,14 @@
+/datum/ai_planning_subtree/cursed/SelectBehaviors(datum/ai_controller/controller, delta_time)
+ var/obj/item/item_pawn = controller.pawn
+
+ //make sure we have a target
+ var/mob/living/carbon/curse_target = controller.blackboard[BB_CURSE_TARGET]
+ if(!curse_target)
+ LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/find_and_set/cursed))
+ return
+ //make sure attack is valid
+ if(get_dist(curse_target, item_pawn) > CURSED_VIEW_RANGE)
+ controller.blackboard[BB_CURSE_TARGET] = null
+ return
+ controller.current_movement_target = curse_target
+ LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/item_move_close_and_attack/cursed))
diff --git a/code/datums/ai/dog/dog_controller.dm b/code/datums/ai/dog/dog_controller.dm
index da2ed7b44e..0fc6f0d6db 100644
--- a/code/datums/ai/dog/dog_controller.dm
+++ b/code/datums/ai/dog/dog_controller.dm
@@ -9,10 +9,10 @@
BB_DOG_PLAYING_DEAD = FALSE,\
BB_DOG_HARASS_TARGET = null)
ai_movement = /datum/ai_movement/jps
+ planning_subtrees = list(/datum/ai_planning_subtree/dog)
COOLDOWN_DECLARE(heel_cooldown)
COOLDOWN_DECLARE(command_cooldown)
- COOLDOWN_DECLARE(reset_ignore_cooldown)
/datum/ai_controller/dog/process(delta_time)
@@ -55,52 +55,6 @@
return simple_pawn.access_card
-/datum/ai_controller/dog/SelectBehaviors(delta_time)
- current_behaviors = list()
- var/mob/living/living_pawn = pawn
-
- // occasionally reset our ignore list
- if(COOLDOWN_FINISHED(src, reset_ignore_cooldown) && length(blackboard[BB_FETCH_IGNORE_LIST]))
- COOLDOWN_START(src, reset_ignore_cooldown, AI_FETCH_IGNORE_DURATION)
- blackboard[BB_FETCH_IGNORE_LIST] = list()
-
- // if we were just ordered to heel, chill out for a bit
- if(!COOLDOWN_FINISHED(src, heel_cooldown))
- return
-
- // if we're not already carrying something and we have a fetch target (and we're not already doing something with it), see if we can eat/equip it
- if(!blackboard[BB_SIMPLE_CARRY_ITEM] && blackboard[BB_FETCH_TARGET])
- var/atom/movable/interact_target = blackboard[BB_FETCH_TARGET]
- if(in_range(living_pawn, interact_target) && (isturf(interact_target.loc)))
- current_movement_target = interact_target
- if(IS_EDIBLE(interact_target))
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/eat_snack)
- else if(isitem(interact_target))
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/simple_equip)
- else
- blackboard[BB_FETCH_TARGET] = null
- blackboard[BB_FETCH_DELIVER_TO] = null
- return
-
- // if we're carrying something and we have a destination to deliver it, do that
- if(blackboard[BB_SIMPLE_CARRY_ITEM] && blackboard[BB_FETCH_DELIVER_TO])
- var/atom/return_target = blackboard[BB_FETCH_DELIVER_TO]
- if(!can_see(pawn, return_target, length=AI_DOG_VISION_RANGE))
- // if the return target isn't in sight, we'll just forget about it and carry the thing around
- blackboard[BB_FETCH_DELIVER_TO] = null
- return
- current_movement_target = return_target
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/deliver_item)
- return
-
- // occasionally see if there's any loose snacks in sight nearby
- if(DT_PROB(40, delta_time))
- for(var/obj/item/potential_snack in oview(living_pawn,2))
- if(IS_EDIBLE(potential_snack) && (isturf(potential_snack.loc) || ishuman(potential_snack.loc)))
- current_movement_target = potential_snack
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/eat_snack)
- return
-
/datum/ai_controller/dog/PerformIdleBehavior(delta_time)
var/mob/living/living_pawn = pawn
if(!isturf(living_pawn.loc) || living_pawn.pulledby)
@@ -150,7 +104,7 @@
current_movement_target = thrown_thing
blackboard[BB_FETCH_TARGET] = thrown_thing
blackboard[BB_FETCH_DELIVER_TO] = throwing_datum.thrower
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/fetch)
+ LAZYADD(current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/fetch))
/// Someone's interacting with us by hand, see if they're being nice or mean
/datum/ai_controller/dog/proc/on_attack_hand(datum/source, mob/living/user)
@@ -299,7 +253,7 @@
if(COMMAND_DIE)
blackboard[BB_DOG_ORDER_MODE] = DOG_COMMAND_NONE
CancelActions()
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/play_dead)
+ LAZYADD(current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/play_dead))
/// Someone we like is pointing at something, see if it's something we might want to interact with (like if they might want us to fetch something for them)
/datum/ai_controller/dog/proc/check_point(mob/pointing_friend, atom/movable/pointed_movable)
@@ -330,12 +284,12 @@
blackboard[BB_FETCH_TARGET] = pointed_movable
blackboard[BB_FETCH_DELIVER_TO] = pointing_friend
if(living_pawn.buckled)
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/resist)//in case they are in bed or something
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/fetch)
+ LAZYADD(current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/resist))//in case they are in bed or something
+ LAZYADD(current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/fetch))
if(DOG_COMMAND_ATTACK)
pawn.visible_message(span_notice("[pawn] follows [pointing_friend]'s gesture towards [pointed_movable] and growls intensely!"))
current_movement_target = pointed_movable
blackboard[BB_DOG_HARASS_TARGET] = WEAKREF(pointed_movable)
if(living_pawn.buckled)
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/resist)//in case they are in bed or something
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/harass)
+ LAZYADD(current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/resist))//in case they are in bed or something
+ LAZYADD(current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/harass))
diff --git a/code/datums/ai/dog/dog_subtrees.dm b/code/datums/ai/dog/dog_subtrees.dm
new file mode 100644
index 0000000000..1eab7b8725
--- /dev/null
+++ b/code/datums/ai/dog/dog_subtrees.dm
@@ -0,0 +1,40 @@
+/datum/ai_planning_subtree/dog
+ COOLDOWN_DECLARE(heel_cooldown)
+ COOLDOWN_DECLARE(reset_ignore_cooldown)
+
+/datum/ai_planning_subtree/dog/SelectBehaviors(datum/ai_controller/dog/controller, delta_time)
+ var/mob/living/living_pawn = controller.pawn
+
+ // occasionally reset our ignore list
+ if(COOLDOWN_FINISHED(src, reset_ignore_cooldown) && length(controller.blackboard[BB_FETCH_IGNORE_LIST]))
+ COOLDOWN_START(src, reset_ignore_cooldown, AI_FETCH_IGNORE_DURATION)
+ controller.blackboard[BB_FETCH_IGNORE_LIST] = list()
+
+ // if we were just ordered to heel, chill out for a bit
+ if(!COOLDOWN_FINISHED(src, heel_cooldown))
+ return
+
+ // if we're not already carrying something and we have a fetch target (and we're not already doing something with it), see if we can eat/equip it
+ if(!controller.blackboard[BB_SIMPLE_CARRY_ITEM] && controller.blackboard[BB_FETCH_TARGET])
+ var/atom/movable/interact_target = controller.blackboard[BB_FETCH_TARGET]
+ if(in_range(living_pawn, interact_target) && (isturf(interact_target.loc)))
+ controller.current_movement_target = interact_target
+ if(IS_EDIBLE(interact_target))
+ LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/eat_snack))
+ else if(isitem(interact_target))
+ LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/simple_equip))
+ else
+ controller.blackboard[BB_FETCH_TARGET] = null
+ controller.blackboard[BB_FETCH_DELIVER_TO] = null
+ return
+
+ // if we're carrying something and we have a destination to deliver it, do that
+ if(controller.blackboard[BB_SIMPLE_CARRY_ITEM] && controller.blackboard[BB_FETCH_DELIVER_TO])
+ var/atom/return_target = controller.blackboard[BB_FETCH_DELIVER_TO]
+ if(!can_see(controller.pawn, return_target, length=AI_DOG_VISION_RANGE))
+ // if the return target isn't in sight, we'll just forget about it and carry the thing around
+ controller.blackboard[BB_FETCH_DELIVER_TO] = null
+ return
+ controller.current_movement_target = return_target
+ LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/deliver_item))
+ return
diff --git a/code/datums/ai/hauntium/haunted_controller.dm b/code/datums/ai/hauntium/haunted_controller.dm
index 87f4ebfc21..6e9670a85d 100644
--- a/code/datums/ai/hauntium/haunted_controller.dm
+++ b/code/datums/ai/hauntium/haunted_controller.dm
@@ -4,6 +4,7 @@
blackboard = list(BB_TO_HAUNT_LIST = list(),
BB_HAUNT_TARGET,
BB_HAUNTED_THROW_ATTEMPT_COUNT)
+ planning_subtrees = list(/datum/ai_planning_subtree/haunted)
/datum/ai_controller/haunted/TryPossessPawn(atom/new_pawn)
if(!isitem(new_pawn))
@@ -15,30 +16,6 @@
UnregisterSignal(pawn, COMSIG_ITEM_EQUIPPED)
return ..() //Run parent at end
-/datum/ai_controller/haunted/SelectBehaviors(delta_time)
- current_behaviors = list()
- var/obj/item/item_pawn = pawn
-
- if(ismob(item_pawn.loc)) //We're being held, maybe escape?
- if(DT_PROB(HAUNTED_ITEM_ESCAPE_GRASP_CHANCE, delta_time))
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/item_escape_grasp)
- return
-
- if(!DT_PROB(HAUNTED_ITEM_ATTACK_HAUNT_CHANCE, delta_time))
- return
-
- var/list/to_haunt_list = blackboard[BB_TO_HAUNT_LIST]
-
- for(var/i in to_haunt_list)
- if(to_haunt_list[i] <= 0)
- continue
- var/mob/living/potential_target = i
- if(get_dist(potential_target, item_pawn) <= 7)
- blackboard[BB_HAUNT_TARGET] = potential_target
- current_movement_target = potential_target
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/item_move_close_and_attack/haunted)
- return
-
/datum/ai_controller/haunted/PerformIdleBehavior(delta_time)
var/obj/item/item_pawn = pawn
if(ismob(item_pawn.loc)) //Being held. dont teleport
diff --git a/code/datums/ai/hauntium/hauntium_subtrees.dm b/code/datums/ai/hauntium/hauntium_subtrees.dm
new file mode 100644
index 0000000000..a1b043897b
--- /dev/null
+++ b/code/datums/ai/hauntium/hauntium_subtrees.dm
@@ -0,0 +1,22 @@
+/datum/ai_planning_subtree/haunted/SelectBehaviors(datum/ai_controller/controller, delta_time)
+ var/obj/item/item_pawn = controller.pawn
+
+ if(ismob(item_pawn.loc)) //We're being held, maybe escape?
+ if(DT_PROB(HAUNTED_ITEM_ESCAPE_GRASP_CHANCE, delta_time))
+ LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/item_escape_grasp))
+ return SUBTREE_RETURN_FINISH_PLANNING
+
+ if(!DT_PROB(HAUNTED_ITEM_ATTACK_HAUNT_CHANCE, delta_time))
+ return
+
+ var/list/to_haunt_list = controller.blackboard[BB_TO_HAUNT_LIST]
+
+ for(var/i in to_haunt_list)
+ if(to_haunt_list[i] <= 0)
+ continue
+ var/mob/living/potential_target = i
+ if(get_dist(potential_target, item_pawn) <= 7)
+ controller.blackboard[BB_HAUNT_TARGET] = potential_target
+ controller.current_movement_target = potential_target
+ LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/item_move_close_and_attack/haunted))
+ return SUBTREE_RETURN_FINISH_PLANNING
diff --git a/code/datums/ai/hostile/hostile_controller.dm b/code/datums/ai/hostile/hostile_controller.dm
index e6681a4127..d4c68c86a6 100644
--- a/code/datums/ai/hostile/hostile_controller.dm
+++ b/code/datums/ai/hostile/hostile_controller.dm
@@ -41,7 +41,7 @@
return ..() //Run parent at end
/datum/ai_controller/hostile_friend/proc/on_prebuckle(mob/source, mob/living/buckler, force, buckle_mob_flags)
- if(force)
+ if(force || ai_status == AI_STATUS_OFF)
return
if(WEAKREF(buckler) != blackboard[BB_HOSTILE_FRIEND])
return COMPONENT_BLOCK_BUCKLE
@@ -114,7 +114,7 @@
if(!COOLDOWN_FINISHED(src, command_cooldown))
return
- if(!istype(clicker) || !blackboard[BB_HOSTILE_FRIEND] == WEAKREF(clicker))
+ if(!istype(clicker) || blackboard[BB_HOSTILE_FRIEND] == WEAKREF(clicker))
return
. = COMPONENT_CANCEL_CLICK_ALT
INVOKE_ASYNC(src, .proc/command_radial, clicker)
@@ -187,8 +187,8 @@
current_movement_target = commander
var/mob/living/living_pawn = pawn
if(living_pawn.buckled)
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/resist)//in case they are in bed or something
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/follow)
+ LAZYADD(current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/resist))//in case they are in bed or something
+ LAZYADD(current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/follow))
// attack: harass whoever the commander points to
if(COMMAND_ATTACK)
pawn.visible_message(span_danger("[pawn] [blackboard[BB_HOSTILE_ATTACK_WORD]] at [commander]'s command, and [pawn.p_they()] growl[pawn.p_s()] intensely.")) // imagine getting intimidated by a corgi
@@ -218,5 +218,5 @@
current_movement_target = pointed_movable
blackboard[BB_ATTACK_TARGET] = WEAKREF(pointed_movable)
if(living_pawn.buckled)
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/resist)//in case they are in bed or something
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/attack)
+ LAZYADD(current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/resist))//in case they are in bed or something
+ LAZYADD(current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/attack))
diff --git a/code/datums/ai/monkey/monkey_controller.dm b/code/datums/ai/monkey/monkey_controller.dm
index 9641b497d9..921a7b93d2 100644
--- a/code/datums/ai/monkey/monkey_controller.dm
+++ b/code/datums/ai/monkey/monkey_controller.dm
@@ -6,6 +6,7 @@ have ways of interacting with a specific mob and control it.
/datum/ai_controller/monkey
movement_delay = 0.4 SECONDS
+ planning_subtrees = list(/datum/ai_planning_subtree/monkey_tree)
blackboard = list(
BB_MONKEY_AGRESSIVE = FALSE,
BB_MONKEY_BEST_FORCE_FOUND = 0,
@@ -42,6 +43,8 @@ have ways of interacting with a specific mob and control it.
RegisterSignal(new_pawn, COMSIG_PARENT_ATTACKBY, .proc/on_attackby)
RegisterSignal(new_pawn, COMSIG_ATOM_ATTACK_HAND, .proc/on_attack_hand)
RegisterSignal(new_pawn, COMSIG_ATOM_ATTACK_PAW, .proc/on_attack_paw)
+ RegisterSignal(new_pawn, COMSIG_ATOM_ATTACK_ANIMAL, .proc/on_attack_animal)
+ RegisterSignal(new_pawn, COMSIG_MOB_ATTACK_ALIEN, .proc/on_attack_alien)
RegisterSignal(new_pawn, COMSIG_ATOM_BULLET_ACT, .proc/on_bullet_act)
RegisterSignal(new_pawn, COMSIG_ATOM_HITBY, .proc/on_hitby)
RegisterSignal(new_pawn, COMSIG_LIVING_START_PULL, .proc/on_startpulling)
@@ -57,7 +60,7 @@ have ways of interacting with a specific mob and control it.
/datum/ai_controller/monkey/UnpossessPawn(destroy)
UnregisterSignal(pawn, list(COMSIG_PARENT_ATTACKBY, COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_ATTACK_PAW, COMSIG_ATOM_BULLET_ACT, COMSIG_ATOM_HITBY, COMSIG_LIVING_START_PULL,\
- COMSIG_LIVING_TRY_SYRINGE, COMSIG_ATOM_HULK_ATTACK, COMSIG_CARBON_CUFF_ATTEMPTED, COMSIG_MOB_MOVESPEED_UPDATED))
+ COMSIG_LIVING_TRY_SYRINGE, COMSIG_ATOM_HULK_ATTACK, COMSIG_CARBON_CUFF_ATTEMPTED, COMSIG_MOB_MOVESPEED_UPDATED, COMSIG_ATOM_ATTACK_ANIMAL, COMSIG_MOB_ATTACK_ALIEN))
RemoveElement(/datum/element/connect_loc_behalf, pawn, loc_connections)
return ..() //Run parent at end
@@ -78,92 +81,6 @@ have ways of interacting with a specific mob and control it.
if(IS_DEAD_OR_INCAP(living_pawn))
return FALSE
-/datum/ai_controller/monkey/SelectBehaviors(delta_time)
- current_behaviors = list()
- var/mob/living/living_pawn = pawn
-
- if(SHOULD_RESIST(living_pawn) && DT_PROB(MONKEY_RESIST_PROB, delta_time))
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/resist) //BRO IM ON FUCKING FIRE BRO
- return //IM NOT DOING ANYTHING ELSE BUT EXTUINGISH MYSELF, GOOD GOD HAVE MERCY.
-
- var/list/enemies = blackboard[BB_MONKEY_ENEMIES]
-
- if(HAS_TRAIT(pawn, TRAIT_PACIFISM)) //Not a pacifist? lets try some combat behavior.
- return
-
- var/mob/living/selected_enemy
- if(length(enemies) || blackboard[BB_MONKEY_AGRESSIVE]) //We have enemies or are pissed
- var/list/valids = list()
- for(var/mob/living/possible_enemy in view(MONKEY_ENEMY_VISION, living_pawn))
- if(possible_enemy == living_pawn || (!enemies[possible_enemy] && (!blackboard[BB_MONKEY_AGRESSIVE] || HAS_AI_CONTROLLER_TYPE(possible_enemy, /datum/ai_controller/monkey)))) //Are they an enemy? (And do we even care?)
- continue
- // Weighted list, so the closer they are the more likely they are to be chosen as the enemy
- valids[possible_enemy] = CEILING(100 / (get_dist(living_pawn, possible_enemy) || 1), 1)
-
- selected_enemy = pickweight(valids)
-
- if(selected_enemy)
- if(!selected_enemy.stat) //He's up, get him!
- if(living_pawn.health < MONKEY_FLEE_HEALTH) //Time to skeddadle
- blackboard[BB_MONKEY_CURRENT_ATTACK_TARGET] = selected_enemy
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/monkey_flee)
- return //I'm running fuck you guys
-
- if(TryFindWeapon()) //Getting a weapon is higher priority if im not fleeing.
- return
-
- blackboard[BB_MONKEY_CURRENT_ATTACK_TARGET] = selected_enemy
- current_movement_target = selected_enemy
- if(blackboard[BB_MONKEY_RECRUIT_COOLDOWN] < world.time)
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/recruit_monkeys)
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/battle_screech/monkey)
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/monkey_attack_mob)
- return //Focus on this
-
- else //He's down, can we disposal him?
- var/obj/machinery/disposal/bodyDisposal = locate(/obj/machinery/disposal/) in view(MONKEY_ENEMY_VISION, living_pawn)
- if(bodyDisposal)
- blackboard[BB_MONKEY_CURRENT_ATTACK_TARGET] = selected_enemy
- blackboard[BB_MONKEY_TARGET_DISPOSAL] = bodyDisposal
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/disposal_mob)
- return
-
- if(prob(5))
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/use_in_hand)
-
- if(selected_enemy || !DT_PROB(MONKEY_SHENANIGAN_PROB, delta_time))
- return
-
- if(world.time >= blackboard[BB_MONKEY_NEXT_HUNGRY] && TryFindFood())
- return
-
- if(prob(50))
- var/list/possible_targets = list()
- for(var/atom/thing in view(2, living_pawn))
- if(!thing.mouse_opacity)
- continue
- if(thing.IsObscured())
- continue
- possible_targets += thing
- var/atom/target = pick(possible_targets)
- if(target)
- current_movement_target = target
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/use_on_object)
- return
-
- if(prob(5) && (locate(/obj/item) in living_pawn.held_items))
- var/list/possible_receivers = list()
- for(var/mob/living/candidate in oview(2, pawn))
- possible_receivers += candidate
-
- if(length(possible_receivers))
- var/mob/living/target = pick(possible_receivers)
- current_movement_target = target
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/give)
- return
-
- TryFindWeapon()
-
///re-used behavior pattern by monkeys for finding a weapon
/datum/ai_controller/monkey/proc/TryFindWeapon()
var/mob/living/living_pawn = pawn
@@ -196,9 +113,9 @@ have ways of interacting with a specific mob and control it.
blackboard[BB_MONKEY_PICKUPTARGET] = weapon
current_movement_target = weapon
if(pickpocket)
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/monkey_equip/pickpocket)
+ LAZYADD(current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/monkey_equip/pickpocket))
else
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/monkey_equip/ground)
+ LAZYADD(current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/monkey_equip/ground))
return TRUE
/// Returns either the best weapon from the given choices or null if held weapons are better
@@ -291,16 +208,25 @@ have ways of interacting with a specific mob and control it.
if(I.force && I.damtype != STAMINA)
retaliate(user)
-/datum/ai_controller/monkey/proc/on_attack_hand(datum/source, mob/living/L)
+/datum/ai_controller/monkey/proc/on_attack_hand(datum/source, mob/living/user)
SIGNAL_HANDLER
if(prob(MONKEY_RETALIATE_PROB))
- retaliate(L)
+ retaliate(user)
+/datum/ai_controller/monkey/proc/on_attack_paw(datum/source, mob/living/user)
+ SIGNAL_HANDLER
+ if(prob(MONKEY_RETALIATE_PROB))
+ retaliate(user)
-/datum/ai_controller/monkey/proc/on_attack_paw(datum/source, mob/living/L)
+/datum/ai_controller/monkey/proc/on_attack_animal(datum/source, mob/living/user)
+ SIGNAL_HANDLER
+ if(user.melee_damage_upper > 0 && prob(MONKEY_RETALIATE_PROB))
+ retaliate(user)
+
+/datum/ai_controller/monkey/proc/on_attack_alien(datum/source, mob/living/user)
SIGNAL_HANDLER
if(prob(MONKEY_RETALIATE_PROB))
- retaliate(L)
+ retaliate(user)
/datum/ai_controller/monkey/proc/on_bullet_act(datum/source, obj/projectile/Proj)
SIGNAL_HANDLER
diff --git a/code/datums/ai/monkey/monkey_subtrees.dm b/code/datums/ai/monkey/monkey_subtrees.dm
new file mode 100644
index 0000000000..faeb2391ae
--- /dev/null
+++ b/code/datums/ai/monkey/monkey_subtrees.dm
@@ -0,0 +1,84 @@
+/datum/ai_planning_subtree/monkey_tree/SelectBehaviors(datum/ai_controller/monkey/controller, delta_time)
+ var/mob/living/living_pawn = controller.pawn
+
+ if(SHOULD_RESIST(living_pawn) && DT_PROB(MONKEY_RESIST_PROB, delta_time))
+ LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/resist)) //BRO IM ON FUCKING FIRE BRO
+ return SUBTREE_RETURN_FINISH_PLANNING //IM NOT DOING ANYTHING ELSE BUT EXTUINGISH MYSELF, GOOD GOD HAVE MERCY.
+
+ var/list/enemies = controller.blackboard[BB_MONKEY_ENEMIES]
+
+ if(HAS_TRAIT(controller.pawn, TRAIT_PACIFISM)) //Not a pacifist? lets try some combat behavior.
+ return
+
+ var/mob/living/selected_enemy
+ if(length(enemies) || controller.blackboard[BB_MONKEY_AGRESSIVE]) //We have enemies or are pissed
+ var/list/valids = list()
+ for(var/mob/living/possible_enemy in view(MONKEY_ENEMY_VISION, living_pawn))
+ if(possible_enemy == living_pawn || (!enemies[possible_enemy] && (!controller.blackboard[BB_MONKEY_AGRESSIVE] || HAS_AI_CONTROLLER_TYPE(possible_enemy, /datum/ai_controller/monkey)))) //Are they an enemy? (And do we even care?)
+ continue
+ // Weighted list, so the closer they are the more likely they are to be chosen as the enemy
+ valids[possible_enemy] = CEILING(100 / (get_dist(living_pawn, possible_enemy) || 1), 1)
+
+ selected_enemy = pickweight(valids)
+
+ if(selected_enemy)
+ if(!selected_enemy.stat) //He's up, get him!
+ if(living_pawn.health < MONKEY_FLEE_HEALTH) //Time to skeddadle
+ controller.blackboard[BB_MONKEY_CURRENT_ATTACK_TARGET] = selected_enemy
+ LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/monkey_flee))
+ return //I'm running fuck you guys
+
+ if(controller.TryFindWeapon()) //Getting a weapon is higher priority if im not fleeing.
+ return SUBTREE_RETURN_FINISH_PLANNING
+
+ controller.blackboard[BB_MONKEY_CURRENT_ATTACK_TARGET] = selected_enemy
+ controller.current_movement_target = selected_enemy
+ if(controller.blackboard[BB_MONKEY_RECRUIT_COOLDOWN] < world.time)
+ LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/recruit_monkeys))
+ LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/battle_screech/monkey))
+ LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/monkey_attack_mob))
+ return SUBTREE_RETURN_FINISH_PLANNING //Focus on this
+
+ else //He's down, can we disposal him?
+ var/obj/machinery/disposal/bodyDisposal = locate(/obj/machinery/disposal/) in view(MONKEY_ENEMY_VISION, living_pawn)
+ if(bodyDisposal)
+ controller.blackboard[BB_MONKEY_CURRENT_ATTACK_TARGET] = selected_enemy
+ controller.blackboard[BB_MONKEY_TARGET_DISPOSAL] = bodyDisposal
+ LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/disposal_mob))
+ return SUBTREE_RETURN_FINISH_PLANNING
+
+ if(prob(5))
+ LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/use_in_hand))
+
+ if(selected_enemy || !DT_PROB(MONKEY_SHENANIGAN_PROB, delta_time))
+ return
+
+ if(world.time >= controller.blackboard[BB_MONKEY_NEXT_HUNGRY] && controller.TryFindFood())
+ return
+
+ if(prob(50))
+ var/list/possible_targets = list()
+ for(var/atom/thing in view(2, living_pawn))
+ if(!thing.mouse_opacity)
+ continue
+ if(thing.IsObscured())
+ continue
+ possible_targets += thing
+ var/atom/target = pick(possible_targets)
+ if(target)
+ controller.current_movement_target = target
+ LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/use_on_object))
+ return
+
+ if(prob(5) && (locate(/obj/item) in living_pawn.held_items))
+ var/list/possible_receivers = list()
+ for(var/mob/living/candidate in oview(2, controller.pawn))
+ possible_receivers += candidate
+
+ if(length(possible_receivers))
+ var/mob/living/target = pick(possible_receivers)
+ controller.current_movement_target = target
+ LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/give))
+ return
+
+ controller.TryFindWeapon()
diff --git a/code/datums/ai/movement/ai_movement_jps.dm b/code/datums/ai/movement/ai_movement_jps.dm
index 015fea1f24..ea05b0fc89 100644
--- a/code/datums/ai/movement/ai_movement_jps.dm
+++ b/code/datums/ai/movement/ai_movement_jps.dm
@@ -19,9 +19,10 @@
// right now I'm just taking the shortest minimum distance of our current behaviors, at some point in the future
// we should let whatever sets the current_movement_target also set the min distance and max path length
// (or at least cache it on the controller)
- for(var/datum/ai_behavior/iter_behavior as anything in controller.current_behaviors)
- if(iter_behavior.required_distance < minimum_distance)
- minimum_distance = iter_behavior.required_distance
+ if(LAZYLEN(controller.current_behaviors))
+ for(var/datum/ai_behavior/iter_behavior as anything in controller.current_behaviors)
+ if(iter_behavior.required_distance < minimum_distance)
+ minimum_distance = iter_behavior.required_distance
if(get_dist(movable_pawn, controller.current_movement_target) <= minimum_distance)
continue
diff --git a/code/datums/ai/objects/vending_machines/vending_machine_controller.dm b/code/datums/ai/objects/vending_machines/vending_machine_controller.dm
index 86b617b496..5ed0a4dea3 100644
--- a/code/datums/ai/objects/vending_machines/vending_machine_controller.dm
+++ b/code/datums/ai/objects/vending_machines/vending_machine_controller.dm
@@ -15,7 +15,7 @@
var/obj/machinery/vending/vendor_pawn = new_pawn
vendor_pawn.tiltable = FALSE //Not manually tiltable by hitting it anymore. We are now agressively doing it ourselves.
vendor_pawn.AddElement(/datum/element/waddling)
- vendor_pawn.AddComponent(/datum/component/footstep, FOOTSTEP_OBJ_MACHINE, 1, -6, vary = TRUE)
+ vendor_pawn.AddElement(/datum/element/footstep, FOOTSTEP_OBJ_MACHINE, 1, -6, vary = TRUE)
vendor_pawn.squish_damage = 15
return ..() //Run parent at end
@@ -24,7 +24,7 @@
vendor_pawn.tiltable = TRUE
vendor_pawn.RemoveElement(/datum/element/waddling)
vendor_pawn.squish_damage = initial(vendor_pawn.squish_damage)
- qdel(vendor_pawn.GetComponent(/datum/component/footstep))
+ RemoveElement(/datum/element/footstep, FOOTSTEP_OBJ_MACHINE, 1, -6, vary = TRUE)
return ..() //Run parent at end
/datum/ai_controller/vending_machine/SelectBehaviors(delta_time)
@@ -34,7 +34,7 @@
if(vendor_pawn.tilted) //We're tilted, try to untilt
if(blackboard[BB_VENDING_UNTILT_COOLDOWN] > world.time)
return
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/vendor_rise_up)
+ LAZYADD(current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/vendor_rise_up))
return
else //Not tilted, try to find target to tilt onto.
if(blackboard[BB_VENDING_TILT_COOLDOWN] > world.time)
@@ -44,6 +44,6 @@
continue
current_movement_target = living_target
blackboard[BB_VENDING_CURRENT_TARGET] = living_target
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/vendor_crush)
+ LAZYADD(current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/vendor_crush))
return
blackboard[BB_VENDING_TILT_COOLDOWN] = world.time + search_for_enemy_cooldown
diff --git a/code/datums/ai/robot_customer/robot_customer_controller.dm b/code/datums/ai/robot_customer/robot_customer_controller.dm
index 1ab1e7d535..2c59fe5d94 100644
--- a/code/datums/ai/robot_customer/robot_customer_controller.dm
+++ b/code/datums/ai/robot_customer/robot_customer_controller.dm
@@ -9,7 +9,7 @@
BB_CUSTOMER_LEAVING = FALSE,
BB_CUSTOMER_ATTENDING_VENUE = null,
BB_CUSTOMER_SAID_CANT_FIND_SEAT_LINE = FALSE)
-
+ planning_subtrees = list(/datum/ai_planning_subtree/robot_customer)
/datum/ai_controller/robot_customer/TryPossessPawn(atom/new_pawn)
if(!istype(new_pawn, /mob/living/simple_animal/robot_customer))
@@ -23,34 +23,6 @@
UnregisterSignal(pawn, list(COMSIG_PARENT_ATTACKBY, COMSIG_LIVING_GET_PULLED, COMSIG_ATOM_ATTACK_HAND))
return ..() //Run parent at end
-/datum/ai_controller/robot_customer/SelectBehaviors(delta_time)
- current_behaviors = list()
- if(blackboard[BB_CUSTOMER_LEAVING])
- var/datum/venue/attending_venue = blackboard[BB_CUSTOMER_ATTENDING_VENUE]
- current_movement_target = attending_venue.restaurant_portal
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/leave_venue)
- return
-
- if(blackboard[BB_CUSTOMER_CURRENT_TARGET])
- current_movement_target = blackboard[BB_CUSTOMER_CURRENT_TARGET]
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/break_spine/robot_customer)
- return
-
- var/obj/my_seat = blackboard[BB_CUSTOMER_MY_SEAT]
-
- if(!my_seat) //We havn't got a seat yet! find one!
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/find_seat)
- return
-
- current_movement_target = my_seat
-
- if(!blackboard[BB_CUSTOMER_CURRENT_ORDER]) //We havn't ordered yet even ordered yet. go on! go over there and go do it!
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/order_food)
- return
- else
- current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/wait_for_food)
-
-
/datum/ai_controller/robot_customer/proc/on_attackby(datum/source, obj/item/I, mob/living/user)
SIGNAL_HANDLER
var/datum/venue/attending_venue = blackboard[BB_CUSTOMER_ATTENDING_VENUE]
diff --git a/code/datums/ai/robot_customer/robot_customer_subtrees.dm b/code/datums/ai/robot_customer/robot_customer_subtrees.dm
new file mode 100644
index 0000000000..d87643dae7
--- /dev/null
+++ b/code/datums/ai/robot_customer/robot_customer_subtrees.dm
@@ -0,0 +1,25 @@
+/datum/ai_planning_subtree/robot_customer/SelectBehaviors(datum/ai_controller/controller, delta_time)
+ if(controller.blackboard[BB_CUSTOMER_LEAVING])
+ var/datum/venue/attending_venue = controller.blackboard[BB_CUSTOMER_ATTENDING_VENUE]
+ controller.current_movement_target = attending_venue.restaurant_portal
+ LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/leave_venue))
+ return SUBTREE_RETURN_FINISH_PLANNING
+
+ if(controller.blackboard[BB_CUSTOMER_CURRENT_TARGET])
+ controller.current_movement_target = controller.blackboard[BB_CUSTOMER_CURRENT_TARGET]
+ LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/break_spine/robot_customer))
+ return SUBTREE_RETURN_FINISH_PLANNING
+
+ var/obj/my_seat = controller.blackboard[BB_CUSTOMER_MY_SEAT]
+
+ if(!my_seat) //We havn't got a seat yet! find one!
+ LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/find_seat))
+ return SUBTREE_RETURN_FINISH_PLANNING
+
+ controller.current_movement_target = my_seat
+
+ if(!controller.blackboard[BB_CUSTOMER_CURRENT_ORDER]) //We havn't ordered yet even ordered yet. go on! go over there and go do it!
+ LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/order_food))
+ return SUBTREE_RETURN_FINISH_PLANNING
+ else
+ LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/wait_for_food))
diff --git a/code/datums/components/crafting/recipes.dm b/code/datums/components/crafting/recipes.dm
index ae175a8af4..5a26c5ac75 100644
--- a/code/datums/components/crafting/recipes.dm
+++ b/code/datums/components/crafting/recipes.dm
@@ -544,6 +544,32 @@
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
+/datum/crafting_recipe/trash_cannon
+ name = "Trash Cannon"
+ always_available = FALSE
+ tool_behaviors = list(TOOL_WELDER, TOOL_SCREWDRIVER)
+ result = /obj/structure/cannon/trash
+ reqs = list(
+ /obj/item/melee/skateboard/improvised = 1,
+ /obj/item/tank/internals/oxygen/red = 1,
+ /datum/reagent/drug/maint/tar = 15,
+ /obj/item/restraints/handcuffs/cable = 1,
+ /obj/item/storage/toolbox = 1,
+ )
+ category = CAT_WEAPONRY
+ subcategory = CAT_WEAPON
+
+/datum/crafting_recipe/trashball
+ name = "Trashball"
+ always_available = FALSE
+ result = /obj/item/stack/cannonball/trashball
+ reqs = list(
+ /obj/item/stack/sheet = 5,
+ /datum/reagent/consumable/space_cola = 10,
+ )
+ category = CAT_WEAPONRY
+ subcategory = CAT_AMMO
+
/datum/crafting_recipe/chainsaw
name = "Chainsaw"
result = /obj/item/chainsaw
diff --git a/code/datums/components/footstep.dm b/code/datums/components/footstep.dm
deleted file mode 100644
index 01be6039a9..0000000000
--- a/code/datums/components/footstep.dm
+++ /dev/null
@@ -1,146 +0,0 @@
-///Footstep component. Plays footsteps at parents location when it is appropriate.
-/datum/component/footstep
- ///How many steps the parent has taken since the last time a footstep was played.
- var/steps = 0
- ///volume determines the extra volume of the footstep. This is multiplied by the base volume, should there be one.
- var/volume
- ///e_range stands for extra range - aka how far the sound can be heard. This is added to the base value and ignored if there isn't a base value.
- var/e_range
- ///footstep_type is a define which determines what kind of sounds should get chosen.
- var/footstep_type
- ///This can be a list OR a soundfile OR null. Determines whatever sound gets played.
- var/footstep_sounds
- ///Whether or not to add variation to the sounds played
- var/sound_vary = FALSE
-
-/datum/component/footstep/Initialize(footstep_type_ = FOOTSTEP_MOB_BAREFOOT, volume_ = 0.5, e_range_ = -8, vary)
- if(!ismovable(parent))
- return COMPONENT_INCOMPATIBLE
- volume = volume_
- e_range = e_range_
- footstep_type = footstep_type_
- sound_vary = vary
- switch(footstep_type)
- if(FOOTSTEP_MOB_HUMAN)
- if(!ishuman(parent))
- return COMPONENT_INCOMPATIBLE
- RegisterSignal(parent, list(COMSIG_MOVABLE_MOVED), .proc/play_humanstep)
- return
- if(FOOTSTEP_MOB_CLAW)
- footstep_sounds = GLOB.clawfootstep
- if(FOOTSTEP_MOB_BAREFOOT)
- footstep_sounds = GLOB.barefootstep
- if(FOOTSTEP_MOB_HEAVY)
- footstep_sounds = GLOB.heavyfootstep
- if(FOOTSTEP_MOB_SHOE)
- footstep_sounds = GLOB.footstep
- if(FOOTSTEP_MOB_SLIME)
- footstep_sounds = 'sound/effects/footstep/slime1.ogg'
- if(FOOTSTEP_OBJ_MACHINE)
- footstep_sounds = 'sound/effects/bang.ogg'
- RegisterSignal(parent, list(COMSIG_MOVABLE_MOVED), .proc/play_simplestep_machine) //Note that this doesn't get called for humans.
- return
- if(FOOTSTEP_OBJ_ROBOT)
- footstep_sounds = 'sound/effects/tank_treads.ogg'
- RegisterSignal(parent, list(COMSIG_MOVABLE_MOVED), .proc/play_simplestep_machine) //Note that this doesn't get called for humans.
- return
- RegisterSignal(parent, list(COMSIG_MOVABLE_MOVED), .proc/play_simplestep) //Note that this doesn't get called for humans.
-
-///Prepares a footstep. Determines if it should get played. Returns the turf it should get played on. Note that it is always a /turf/open
-/datum/component/footstep/proc/prepare_step()
- var/turf/open/T = get_turf(parent)
- if(!istype(T))
- return
-
- var/mob/living/LM = parent
-
- if(!T.footstep || LM.buckled || LM.throwing || LM.movement_type & (VENTCRAWLING | FLYING) || HAS_TRAIT(LM, TRAIT_IMMOBILIZED))
- return
-
- if(LM.body_position == LYING_DOWN) //play crawling sound if we're lying
- playsound(T, 'sound/effects/footstep/crawl1.ogg', 15 * volume, falloff_distance = 1, vary = sound_vary)
- return
-
- if(iscarbon(LM))
- var/mob/living/carbon/C = LM
- if(!C.get_bodypart(BODY_ZONE_L_LEG) && !C.get_bodypart(BODY_ZONE_R_LEG))
- return
- if(C.m_intent == MOVE_INTENT_WALK)
- return// stealth
- steps++
-
- if(steps >= 6)
- steps = 0
-
- if(steps % 2)
- return
-
- if(steps != 0 && !LM.has_gravity(T)) // don't need to step as often when you hop around
- return
- return T
-
-/datum/component/footstep/proc/play_simplestep()
- SIGNAL_HANDLER
-
- var/turf/open/T = prepare_step()
- if(!T)
- return
- if(isfile(footstep_sounds) || istext(footstep_sounds))
- playsound(T, footstep_sounds, volume, falloff_distance = 1, vary = sound_vary)
- return
- var/turf_footstep
- switch(footstep_type)
- if(FOOTSTEP_MOB_CLAW)
- turf_footstep = T.clawfootstep
- if(FOOTSTEP_MOB_BAREFOOT)
- turf_footstep = T.barefootstep
- if(FOOTSTEP_MOB_HEAVY)
- turf_footstep = T.heavyfootstep
- if(FOOTSTEP_MOB_SHOE)
- turf_footstep = T.footstep
- if(!turf_footstep)
- return
- playsound(T, pick(footstep_sounds[turf_footstep][1]), footstep_sounds[turf_footstep][2] * volume, TRUE, footstep_sounds[turf_footstep][3] + e_range, falloff_distance = 1, vary = sound_vary)
-
-/datum/component/footstep/proc/play_humanstep()
- SIGNAL_HANDLER
-
- if(HAS_TRAIT(parent, TRAIT_SILENT_FOOTSTEPS))
- return
-
- var/volume_multiplier = 1
- var/range_adjustment = 0
-
- if(HAS_TRAIT(parent, TRAIT_LIGHT_STEP))
- volume_multiplier = 0.6
- range_adjustment = -2
-
- var/turf/open/T = prepare_step()
- if(!T)
- return
- var/mob/living/carbon/human/H = parent
-
- if ((H.wear_suit?.body_parts_covered | H.w_uniform?.body_parts_covered | H.shoes?.body_parts_covered) & FEET)
- // we are wearing shoes
- playsound(T, pick(GLOB.footstep[T.footstep][1]),
- GLOB.footstep[T.footstep][2] * volume * volume_multiplier,
- TRUE,
- GLOB.footstep[T.footstep][3] + e_range + range_adjustment, falloff_distance = 1, vary = sound_vary)
- else
- if(H.dna.species.special_step_sounds)
- playsound(T, pick(H.dna.species.special_step_sounds), 50, TRUE, falloff_distance = 1, vary = sound_vary)
- else
- playsound(T, pick(GLOB.barefootstep[T.barefootstep][1]),
- GLOB.barefootstep[T.barefootstep][2] * volume * volume_multiplier,
- TRUE,
- GLOB.barefootstep[T.barefootstep][3] + e_range + range_adjustment, falloff_distance = 1, vary = sound_vary)
-
-
-///Prepares a footstep for machine walking
-/datum/component/footstep/proc/play_simplestep_machine()
- SIGNAL_HANDLER
-
- var/turf/open/T = get_turf(parent)
- if(!istype(T))
- return
- playsound(T, footstep_sounds, 50, falloff_distance = 1, vary = sound_vary)
diff --git a/code/datums/components/nanites.dm b/code/datums/components/nanites.dm
deleted file mode 100644
index 4004e1b0a1..0000000000
--- a/code/datums/components/nanites.dm
+++ /dev/null
@@ -1,479 +0,0 @@
-#define HARMONIC_REGEN_BOOST 0.1
-
-/datum/component/nanites
- dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS
-
- var/mob/living/host_mob
- var/nanite_volume = 100 //amount of nanites in the system, used as fuel for nanite programs
- var/max_nanites = 500 //maximum amount of nanites in the system
- var/regen_rate = 0.5 //nanites generated per second
- var/safety_threshold = 50 //how low nanites will get before they stop processing/triggering
- var/cloud_id = 0 //0 if not connected to the cloud, 1-100 to set a determined cloud backup to draw from
- var/cloud_active = TRUE //if false, won't sync to the cloud
- var/next_sync = 0
- var/list/datum/nanite_program/programs = list()
- var/max_programs = NANITE_PROGRAM_LIMIT
-
- var/list/datum/nanite_program/protocol/protocols = list() ///Separate list of protocol programs, to avoid looping through the whole programs list when cheking for conflicts
- var/start_time = 0 ///Timestamp to when the nanites were first inserted in the host
- var/stealth = FALSE //if TRUE, does not appear on HUDs and health scans
- var/diagnostics = FALSE //if TRUE, displays program list when scanned by nanite scanners
-
-/datum/component/nanites/Initialize(amount = 100, cloud = 0)
- if(!isliving(parent) && !istype(parent, /datum/nanite_cloud_backup))
- return COMPONENT_INCOMPATIBLE
-
- nanite_volume = amount
- cloud_id = cloud
-
- //Nanites without hosts are non-interactive through normal means
- if(isliving(parent))
- host_mob = parent
-
- if(!(host_mob.mob_biotypes & (MOB_ORGANIC|MOB_UNDEAD))) //Shouldn't happen, but this avoids HUD runtimes in case a silicon gets them somehow.
- return COMPONENT_INCOMPATIBLE
-
- start_time = world.time
-
- host_mob.hud_set_nanite_indicator()
- START_PROCESSING(SSnanites, src)
-
- if(cloud_id && cloud_active)
- cloud_sync()
-
-/datum/component/nanites/RegisterWithParent()
- RegisterSignal(parent, COMSIG_HAS_NANITES, .proc/confirm_nanites)
- RegisterSignal(parent, COMSIG_NANITE_IS_STEALTHY, .proc/check_stealth)
- RegisterSignal(parent, COMSIG_NANITE_DELETE, .proc/delete_nanites)
- RegisterSignal(parent, COMSIG_NANITE_UI_DATA, .proc/nanite_ui_data)
- RegisterSignal(parent, COMSIG_NANITE_GET_PROGRAMS, .proc/get_programs)
- RegisterSignal(parent, COMSIG_NANITE_SET_VOLUME, .proc/set_volume)
- RegisterSignal(parent, COMSIG_NANITE_ADJUST_VOLUME, .proc/adjust_nanites)
- RegisterSignal(parent, COMSIG_NANITE_SET_MAX_VOLUME, .proc/set_max_volume)
- RegisterSignal(parent, COMSIG_NANITE_SET_CLOUD, .proc/set_cloud)
- RegisterSignal(parent, COMSIG_NANITE_SET_CLOUD_SYNC, .proc/set_cloud_sync)
- RegisterSignal(parent, COMSIG_NANITE_SET_SAFETY, .proc/set_safety)
- RegisterSignal(parent, COMSIG_NANITE_SET_REGEN, .proc/set_regen)
- RegisterSignal(parent, COMSIG_NANITE_ADD_PROGRAM, .proc/add_program)
- RegisterSignal(parent, COMSIG_NANITE_SCAN, .proc/nanite_scan)
- RegisterSignal(parent, COMSIG_NANITE_SYNC, .proc/sync)
-
- if(isliving(parent))
- RegisterSignal(parent, COMSIG_ATOM_EMP_ACT, .proc/on_emp)
- RegisterSignal(parent, COMSIG_LIVING_DEATH, .proc/on_death)
- RegisterSignal(parent, COMSIG_MOB_ALLOWED, .proc/check_access)
- RegisterSignal(parent, COMSIG_LIVING_ELECTROCUTE_ACT, .proc/on_shock)
- RegisterSignal(parent, COMSIG_LIVING_MINOR_SHOCK, .proc/on_minor_shock)
- RegisterSignal(parent, COMSIG_SPECIES_GAIN, .proc/check_viable_biotype)
- RegisterSignal(parent, COMSIG_NANITE_SIGNAL, .proc/receive_signal)
- RegisterSignal(parent, COMSIG_NANITE_COMM_SIGNAL, .proc/receive_comm_signal)
-
-/datum/component/nanites/UnregisterFromParent()
- UnregisterSignal(parent, list(COMSIG_HAS_NANITES,
- COMSIG_NANITE_IS_STEALTHY,
- COMSIG_NANITE_DELETE,
- COMSIG_NANITE_UI_DATA,
- COMSIG_NANITE_GET_PROGRAMS,
- COMSIG_NANITE_SET_VOLUME,
- COMSIG_NANITE_ADJUST_VOLUME,
- COMSIG_NANITE_SET_MAX_VOLUME,
- COMSIG_NANITE_SET_CLOUD,
- COMSIG_NANITE_SET_CLOUD_SYNC,
- COMSIG_NANITE_SET_SAFETY,
- COMSIG_NANITE_SET_REGEN,
- COMSIG_NANITE_ADD_PROGRAM,
- COMSIG_NANITE_SCAN,
- COMSIG_NANITE_SYNC,
- COMSIG_ATOM_EMP_ACT,
- COMSIG_LIVING_DEATH,
- COMSIG_MOB_ALLOWED,
- COMSIG_LIVING_ELECTROCUTE_ACT,
- COMSIG_LIVING_MINOR_SHOCK,
- COMSIG_MOVABLE_HEAR,
- COMSIG_SPECIES_GAIN,
- COMSIG_NANITE_SIGNAL,
- COMSIG_NANITE_COMM_SIGNAL))
-
-/datum/component/nanites/Destroy()
- STOP_PROCESSING(SSnanites, src)
- QDEL_LIST(programs)
- if(host_mob)
- set_nanite_bar(TRUE)
- host_mob.hud_set_nanite_indicator()
- host_mob = null
- return ..()
-
-/datum/component/nanites/InheritComponent(datum/component/nanites/new_nanites, i_am_original, amount, cloud)
- if(new_nanites)
- adjust_nanites(null, new_nanites.nanite_volume)
- else
- adjust_nanites(null, amount) //just add to the nanite volume
-
-/datum/component/nanites/process(delta_time)
- if(!IS_IN_STASIS(host_mob))
- adjust_nanites(null, (regen_rate + (SSresearch.science_tech.researched_nodes["nanite_harmonic"] ? HARMONIC_REGEN_BOOST : 0)) * delta_time)
- add_research()
- for(var/X in programs)
- var/datum/nanite_program/NP = X
- NP.on_process()
- if(cloud_id && cloud_active && world.time > next_sync)
- cloud_sync()
- next_sync = world.time + NANITE_SYNC_DELAY
- set_nanite_bar()
-
-///Deletes nanites!
-/datum/component/nanites/proc/delete_nanites()
- SIGNAL_HANDLER
-
- qdel(src)
-
-///Syncs the nanite component to another, making it so programs are the same with the same programming (except activation status)
-/datum/component/nanites/proc/sync(datum/signal_source, datum/component/nanites/source, full_overwrite = TRUE, copy_activation = FALSE)
- SIGNAL_HANDLER
-
- var/list/programs_to_remove = programs.Copy()
- var/list/programs_to_add = source.programs.Copy()
- for(var/X in programs)
- var/datum/nanite_program/NP = X
- for(var/Y in programs_to_add)
- var/datum/nanite_program/SNP = Y
- if(NP.type == SNP.type)
- programs_to_remove -= NP
- programs_to_add -= SNP
- SNP.copy_programming(NP, copy_activation)
- break
- if(full_overwrite)
- for(var/X in programs_to_remove)
- qdel(X)
- for(var/X in programs_to_add)
- var/datum/nanite_program/SNP = X
- add_program(null, SNP.copy())
-
-///Syncs the nanites to their assigned cloud copy, if it is available. If it is not, there is a small chance of a software error instead.
-/datum/component/nanites/proc/cloud_sync()
- if(cloud_id)
- var/datum/nanite_cloud_backup/backup = SSnanites.get_cloud_backup(cloud_id)
- if(backup)
- var/datum/component/nanites/cloud_copy = backup.nanites
- if(cloud_copy)
- sync(null, cloud_copy)
- return
- //Without cloud syncing nanites can accumulate errors and/or defects
- if(prob(8) && programs.len)
- var/datum/nanite_program/NP = pick(programs)
- NP.software_error()
-
-///Adds a nanite program, replacing existing unique programs of the same type. A source program can be specified to copy its programming onto the new one.
-/datum/component/nanites/proc/add_program(datum/source, datum/nanite_program/new_program, datum/nanite_program/source_program)
- SIGNAL_HANDLER
-
- for(var/X in programs)
- var/datum/nanite_program/NP = X
- if(NP.unique && NP.type == new_program.type)
- qdel(NP)
- if(programs.len >= max_programs)
- return COMPONENT_PROGRAM_NOT_INSTALLED
- if(source_program)
- source_program.copy_programming(new_program)
- programs += new_program
- new_program.on_add(src)
- return COMPONENT_PROGRAM_INSTALLED
-
-/datum/component/nanites/proc/consume_nanites(amount, force = FALSE)
- if(!force && safety_threshold && (nanite_volume - amount < safety_threshold))
- return FALSE
- adjust_nanites(null, -amount)
- return (nanite_volume > 0)
-
-///Modifies the current nanite volume, then checks if the nanites are depleted or exceeding the maximum amount
-/datum/component/nanites/proc/adjust_nanites(datum/source, amount)
- SIGNAL_HANDLER
-
- nanite_volume += amount
- if(nanite_volume > max_nanites)
- reject_excess_nanites()
- if(nanite_volume <= 0) //oops we ran out
- qdel(src)
-
-/**
- * Handles how nanites leave the host's body if they find out that they're currently exceeding the maximum supported amount
- *
- * IC explanation:
- * Normally nanites simply discard excess volume by slowing replication or 'sweating' it out in imperceptible amounts,
- * but if there is a large excess volume, likely due to a programming change that leaves them unable to support their current volume,
- * the nanites attempt to leave the host as fast as necessary to prevent nanite poisoning. This can range from minor oozing to nanites
- * rapidly bursting out from every possible pathway, causing temporary inconvenience to the host.
- */
-/datum/component/nanites/proc/reject_excess_nanites()
- var/excess = nanite_volume - max_nanites
- nanite_volume = max_nanites
-
- switch(excess)
- if(0 to NANITE_EXCESS_MINOR) //Minor excess amount, the extra nanites are quietly expelled without visible effects
- return
- if((NANITE_EXCESS_MINOR + 0.1) to NANITE_EXCESS_VOMIT) //Enough nanites getting rejected at once to be visible to the naked eye
- host_mob.visible_message(span_warning("A grainy grey slurry starts oozing out of [host_mob]."), span_warning("A grainy grey slurry starts oozing out of your skin."), null, 4);
- if((NANITE_EXCESS_VOMIT + 0.1) to NANITE_EXCESS_BURST) //Nanites getting rejected in massive amounts, but still enough to make a semi-orderly exit through vomit
- if(iscarbon(host_mob))
- var/mob/living/carbon/C = host_mob
- host_mob.visible_message(span_warning("[host_mob] vomits a grainy grey slurry!"), span_warning("You suddenly vomit a metallic-tasting grainy grey slurry!"), null);
- C.vomit(0, FALSE, TRUE, FLOOR(excess / 100, 1), FALSE, VOMIT_NANITE, FALSE, TRUE, 0)
- else
- host_mob.visible_message(span_warning("A metallic grey slurry bursts out of [host_mob]'s skin!"), span_userdanger("A metallic grey slurry violently bursts out of your skin!"), null);
- if(isturf(host_mob.drop_location()))
- var/turf/T = host_mob.drop_location()
- T.add_vomit_floor(host_mob, VOMIT_NANITE, 0)
- if((NANITE_EXCESS_BURST + 0.1) to INFINITY) //Way too many nanites, they just leave through the closest exit before they harm/poison the host
- host_mob.visible_message(span_warning("A torrent of metallic grey slurry violently bursts out of [host_mob]'s face and floods out of [host_mob.p_their()] skin!"),
- span_userdanger("A torrent of metallic grey slurry violently bursts out of your eyes, ears, and mouth, and floods out of your skin!"));
-
- host_mob.blind_eyes(15) //nanites coming out of your eyes
- host_mob.Paralyze(120)
- if(iscarbon(host_mob))
- var/mob/living/carbon/C = host_mob
- var/obj/item/organ/ears/ears = C.getorganslot(ORGAN_SLOT_EARS)
- if(ears)
- ears.adjustEarDamage(0, 30) //nanites coming out of your ears
- C.vomit(0, FALSE, TRUE, 2, FALSE, VOMIT_NANITE, FALSE, TRUE, 0) //nanites coming out of your mouth
-
- //nanites everywhere
- if(isturf(host_mob.drop_location()))
- var/turf/T = host_mob.drop_location()
- T.add_vomit_floor(host_mob, VOMIT_NANITE, 0)
- for(var/turf/adjacent_turf in oview(host_mob, 1))
- if(adjacent_turf.density || !adjacent_turf.Adjacent(T))
- continue
- adjacent_turf.add_vomit_floor(host_mob, VOMIT_NANITE, 0)
-
-///Updates the nanite volume bar visible in diagnostic HUDs
-/datum/component/nanites/proc/set_nanite_bar(remove = FALSE)
- var/image/holder = host_mob.hud_list[DIAG_NANITE_FULL_HUD]
- var/icon/I = icon(host_mob.icon, host_mob.icon_state, host_mob.dir)
- holder.pixel_y = I.Height() - world.icon_size
- holder.icon_state = null
- if(remove || stealth)
- return //bye icon
- var/nanite_percent = (nanite_volume / max_nanites) * 100
- nanite_percent = clamp(CEILING(nanite_percent, 10), 10, 100)
- holder.icon_state = "nanites[nanite_percent]"
-
-/datum/component/nanites/proc/on_emp(datum/source, severity)
- SIGNAL_HANDLER
-
- nanite_volume *= (rand(60, 90) * 0.01) //Lose 10-40% of nanites
- adjust_nanites(null, -(rand(5, 50))) //Lose 5-50 flat nanite volume
- if(prob(40/severity))
- cloud_id = 0
- for(var/X in programs)
- var/datum/nanite_program/NP = X
- NP.on_emp(severity)
-
-
-/datum/component/nanites/proc/on_shock(datum/source, shock_damage, siemens_coeff = 1, flags = NONE)
- SIGNAL_HANDLER
-
- if(flags & SHOCK_ILLUSION || shock_damage < 1)
- return
-
- if(!HAS_TRAIT_NOT_FROM(host_mob, TRAIT_SHOCKIMMUNE, "nanites"))//Another shock protection must protect nanites too, but nanites protect only host
- nanite_volume *= (rand(45, 80) * 0.01) //Lose 20-55% of nanites
- adjust_nanites(null, -(rand(5, 50))) //Lose 5-50 flat nanite volume
- for(var/X in programs)
- var/datum/nanite_program/NP = X
- NP.on_shock(shock_damage)
-
-/datum/component/nanites/proc/on_minor_shock(datum/source)
- SIGNAL_HANDLER
-
- adjust_nanites(null, -(rand(5, 15))) //Lose 5-15 flat nanite volume
- for(var/X in programs)
- var/datum/nanite_program/NP = X
- NP.on_minor_shock()
-
-/datum/component/nanites/proc/check_stealth(datum/source)
- SIGNAL_HANDLER
-
- return stealth
-
-/datum/component/nanites/proc/on_death(datum/source, gibbed)
- SIGNAL_HANDLER
-
- for(var/X in programs)
- var/datum/nanite_program/NP = X
- NP.on_death(gibbed)
-
-/datum/component/nanites/proc/receive_signal(datum/source, code, source = "an unidentified source")
- SIGNAL_HANDLER
-
- for(var/X in programs)
- var/datum/nanite_program/NP = X
- NP.receive_signal(code, source)
-
-/datum/component/nanites/proc/receive_comm_signal(datum/source, comm_code, comm_message, comm_source = "an unidentified source")
- SIGNAL_HANDLER
-
- for(var/X in programs)
- if(istype(X, /datum/nanite_program/comm))
- var/datum/nanite_program/comm/NP = X
- NP.receive_comm_signal(comm_code, comm_message, comm_source)
-
-/datum/component/nanites/proc/check_viable_biotype()
- SIGNAL_HANDLER
-
- if(!(host_mob.mob_biotypes & (MOB_ORGANIC|MOB_UNDEAD)))
- qdel(src) //bodytype no longer sustains nanites
-
-/datum/component/nanites/proc/check_access(datum/source, obj/O)
- SIGNAL_HANDLER
-
- for(var/datum/nanite_program/access/access_program in programs)
- if(access_program.activated)
- return O.check_access_list(access_program.access)
- else
- return FALSE
- return FALSE
-
-/datum/component/nanites/proc/set_volume(datum/source, amount)
- SIGNAL_HANDLER
-
- nanite_volume = clamp(amount, 0, max_nanites)
-
-/datum/component/nanites/proc/set_max_volume(datum/source, amount)
- SIGNAL_HANDLER
-
- max_nanites = max(1, amount)
-
-/datum/component/nanites/proc/set_cloud(datum/source, amount)
- SIGNAL_HANDLER
-
- cloud_id = clamp(amount, 0, 100)
-
-/datum/component/nanites/proc/set_cloud_sync(datum/source, method)
- SIGNAL_HANDLER
-
- switch(method)
- if(NANITE_CLOUD_TOGGLE)
- cloud_active = !cloud_active
- if(NANITE_CLOUD_DISABLE)
- cloud_active = FALSE
- if(NANITE_CLOUD_ENABLE)
- cloud_active = TRUE
-
-/datum/component/nanites/proc/set_safety(datum/source, amount)
- SIGNAL_HANDLER
-
- safety_threshold = clamp(amount, 0, max_nanites)
-
-/datum/component/nanites/proc/set_regen(datum/source, amount)
- SIGNAL_HANDLER
-
- regen_rate = amount
-
-/datum/component/nanites/proc/confirm_nanites()
- SIGNAL_HANDLER
-
- return TRUE //yup i exist
-
-/datum/component/nanites/proc/get_programs(datum/source, list/nanite_programs)
- SIGNAL_HANDLER
-
- nanite_programs |= programs
-
-/datum/component/nanites/proc/add_research()
- var/research_value = NANITE_BASE_RESEARCH
- if(!ishuman(host_mob))
- if(!iscarbon(host_mob))
- research_value *= 0.4
- else
- research_value *= 0.8
- if(!host_mob.client)
- research_value *= 0.5
- if(host_mob.stat == DEAD)
- research_value *= 0.75
- SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_NANITES = research_value))
-
-/datum/component/nanites/proc/nanite_scan(datum/source, mob/user, full_scan)
- SIGNAL_HANDLER
-
- if(!full_scan)
- if(!stealth)
- to_chat(user, span_notice("Nanites Detected"))
- to_chat(user, span_notice("Saturation: [nanite_volume]/[max_nanites]"))
- return TRUE
- else
- to_chat(user, span_info("NANITES DETECTED"))
- to_chat(user, span_info("================"))
- to_chat(user, span_info("Saturation: [nanite_volume]/[max_nanites]"))
- to_chat(user, span_info("Safety Threshold: [safety_threshold]"))
- to_chat(user, span_info("Cloud ID: [cloud_id ? cloud_id : "None"]"))
- to_chat(user, span_info("Cloud Sync: [cloud_active ? "Active" : "Disabled"]"))
- to_chat(user, span_info("================"))
- to_chat(user, span_info("Program List:"))
- if(!diagnostics)
- to_chat(user, span_alert("Nanite debugging disabled."))
- else
- for(var/X in programs)
- var/datum/nanite_program/NP = X
- to_chat(user, span_info("[NP.name] | [NP.activated ? "Active" : "Inactive"]"))
- return TRUE
-
-/datum/component/nanites/proc/nanite_ui_data(datum/source, list/data, scan_level)
- SIGNAL_HANDLER
-
- data["has_nanites"] = TRUE
- data["nanite_volume"] = nanite_volume
- data["regen_rate"] = regen_rate + (SSresearch.science_tech.researched_nodes["nanite_harmonic"] ? HARMONIC_REGEN_BOOST : 0)
- data["safety_threshold"] = safety_threshold
- data["cloud_id"] = cloud_id
- data["cloud_active"] = cloud_active
- var/list/mob_programs = list()
- var/id = 1
- for(var/X in programs)
- var/datum/nanite_program/P = X
- var/list/mob_program = list()
- mob_program["name"] = P.name
- mob_program["desc"] = P.desc
- mob_program["id"] = id
-
- if(scan_level >= 2)
- mob_program["activated"] = P.activated
- mob_program["use_rate"] = P.use_rate
- mob_program["can_trigger"] = P.can_trigger
- mob_program["trigger_cost"] = P.trigger_cost
- mob_program["trigger_cooldown"] = P.trigger_cooldown / 10
-
- if(scan_level >= 3)
- mob_program["timer_restart"] = P.timer_restart / 10
- mob_program["timer_shutdown"] = P.timer_shutdown / 10
- mob_program["timer_trigger"] = P.timer_trigger / 10
- mob_program["timer_trigger_delay"] = P.timer_trigger_delay / 10
- var/list/extra_settings = P.get_extra_settings_frontend()
- mob_program["extra_settings"] = extra_settings
- if(LAZYLEN(extra_settings))
- mob_program["has_extra_settings"] = TRUE
- else
- mob_program["has_extra_settings"] = FALSE
-
- if(scan_level >= 4)
- mob_program["activation_code"] = P.activation_code
- mob_program["deactivation_code"] = P.deactivation_code
- mob_program["kill_code"] = P.kill_code
- mob_program["trigger_code"] = P.trigger_code
- var/list/rules = list()
- var/rule_id = 1
- for(var/Z in P.rules)
- var/datum/nanite_rule/nanite_rule = Z
- var/list/rule = list()
- rule["display"] = nanite_rule.display()
- rule["program_id"] = id
- rule["id"] = rule_id
- rules += list(rule)
- rule_id++
- mob_program["rules"] = rules
- if(LAZYLEN(rules))
- mob_program["has_rules"] = TRUE
- id++
- mob_programs += list(mob_program)
- data["mob_programs"] = mob_programs
-
-#undef HARMONIC_REGEN_BOOST
diff --git a/code/datums/components/rust.dm b/code/datums/components/rust.dm
index 92833de3d8..54fe02ae80 100644
--- a/code/datums/components/rust.dm
+++ b/code/datums/components/rust.dm
@@ -1,6 +1,6 @@
/**
* Adding this component to an Atom will have it automatically render an overlay.
- * The overlay can be specified in new as the first and only parameter; it defaults to "rust" if not included.
+ * The overlay can be specified in new as the first paramter; if not set it defaults to rust_overlay's rust_default
*/
/datum/component/rust
dupe_mode = COMPONENT_DUPE_UNIQUE
@@ -19,22 +19,21 @@
var/atom/wall_new = new /turf/open/floor/plating(src)
wall_new.AddComponent(/datum/component/rust)
-/datum/component/rust/Initialize(rust_iconstate = "rust")
+/datum/component/rust/Initialize(mutable_appearance/overlay)
. = ..()
if(!isatom(parent))
return COMPONENT_INCOMPATIBLE
+ rust_overlay = overlay || mutable_appearance('icons/effects/rust_overlay.dmi', "rust_default")
+ // Unfortunately registering with parent sometimes doesn't cause an overlay update
+ ADD_TRAIT(parent, TRAIT_RUSTY, src)
var/atom/parent_atom = parent
- if(!(rust_iconstate in icon_states(parent_atom.icon)))
- return COMPONENT_INCOMPATIBLE
-
- rust_overlay = mutable_appearance(parent_atom.icon, rust_iconstate)
+ parent_atom.update_icon(UPDATE_OVERLAYS)
/datum/component/rust/RegisterWithParent()
RegisterSignal(parent, COMSIG_ATOM_UPDATE_OVERLAYS, .proc/apply_rust_overlay)
RegisterSignal(parent, list(COMSIG_ATOM_SECONDARY_TOOL_ACT(TOOL_WELDER), COMSIG_ATOM_SECONDARY_TOOL_ACT(TOOL_RUSTSCRAPER)), .proc/secondary_tool_act)
RegisterSignal(parent, COMSIG_PARENT_PREQDELETED, .proc/parent_del)
RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/handle_examine)
- ADD_TRAIT(parent, TRAIT_RUSTY, src)
/datum/component/rust/UnregisterFromParent()
UnregisterSignal(parent,\
diff --git a/code/datums/components/shell.dm b/code/datums/components/shell.dm
index 9633575f58..3e875dc439 100644
--- a/code/datums/components/shell.dm
+++ b/code/datums/components/shell.dm
@@ -23,10 +23,7 @@
src.shell_flags = shell_flags || src.shell_flags
src.capacity = capacity || src.capacity
- src.unremovable_circuit_components = unremovable_circuit_components
-
- for(var/obj/item/circuit_component/circuit_component as anything in unremovable_circuit_components)
- circuit_component.removable = FALSE
+ set_unremovable_circuit_components(unremovable_circuit_components)
/datum/component/shell/RegisterWithParent()
RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, .proc/on_attack_by)
@@ -39,6 +36,35 @@
if(shell_flags & SHELL_FLAG_REQUIRE_ANCHOR)
RegisterSignal(parent, COMSIG_OBJ_DEFAULT_UNFASTEN_WRENCH, .proc/on_unfasten)
RegisterSignal(parent, COMSIG_ATOM_USB_CABLE_TRY_ATTACH, .proc/on_atom_usb_cable_try_attach)
+ RegisterSignal(parent, COMSIG_MOVABLE_CIRCUIT_LOADED, .proc/on_load)
+
+/datum/component/shell/proc/set_unremovable_circuit_components(list/components)
+ if(unremovable_circuit_components)
+ QDEL_LIST(unremovable_circuit_components)
+
+ unremovable_circuit_components = components
+
+ for(var/obj/item/circuit_component/circuit_component as anything in unremovable_circuit_components)
+ circuit_component.removable = FALSE
+ RegisterSignal(circuit_component, COMSIG_CIRCUIT_COMPONENT_SAVE, .proc/save_component)
+
+/datum/component/shell/proc/save_component(datum/source, list/objects)
+ SIGNAL_HANDLER
+ objects += parent
+
+/datum/component/shell/proc/on_load(datum/source, obj/item/integrated_circuit/circuit, list/components)
+ SIGNAL_HANDLER
+ var/list/components_in_list = list()
+ for(var/obj/item/circuit_component/component as anything in components)
+ components_in_list += component.type
+
+ for(var/obj/item/circuit_component/component as anything in unremovable_circuit_components)
+ if(component.type in components_in_list)
+ continue
+ var/new_type = component.type
+ components += new new_type()
+ set_unremovable_circuit_components(components)
+ attach_circuit(circuit)
/datum/component/shell/UnregisterFromParent()
@@ -51,6 +77,7 @@
COMSIG_PARENT_EXAMINE,
COMSIG_ATOM_ATTACK_GHOST,
COMSIG_ATOM_USB_CABLE_TRY_ATTACH,
+ COMSIG_MOVABLE_CIRCUIT_LOADED,
))
QDEL_NULL(attached_circuit)
@@ -181,9 +208,9 @@
/**
* Checks for when the circuitboard moves. If it moves, removes it from the component.
*/
-/datum/component/shell/proc/on_circuit_moved(obj/item/integrated_circuit/circuit, atom/new_loc)
+/datum/component/shell/proc/on_circuit_moved(obj/item/integrated_circuit/circuit, atom/old_loc)
SIGNAL_HANDLER
- if(new_loc != parent)
+ if(circuit.loc != parent)
remove_circuit()
/**
@@ -208,7 +235,7 @@
*/
/datum/component/shell/proc/attach_circuit(obj/item/integrated_circuit/circuitboard, mob/living/user)
var/atom/movable/parent_atom = parent
- if(!user.transferItemToLoc(circuitboard, parent_atom))
+ if(user && !user.transferItemToLoc(circuitboard, parent_atom))
return
locked = FALSE
attached_circuit = circuitboard
@@ -226,6 +253,9 @@
if(shell_flags & SHELL_FLAG_REQUIRE_ANCHOR)
on_unfasten(parent_atom, parent_atom.anchored)
+ if(circuitboard.loc != parent_atom)
+ circuitboard.forceMove(parent_atom)
+
/**
* Removes the circuit from the component. Doesn't do any checks to see for an existing circuit so that should be done beforehand.
*/
diff --git a/code/datums/components/usb_port.dm b/code/datums/components/usb_port.dm
index 4770fd600f..e4022f5ff1 100644
--- a/code/datums/components/usb_port.dm
+++ b/code/datums/components/usb_port.dm
@@ -15,20 +15,39 @@
/// The beam connecting the USB cable to the machine
var/datum/beam/usb_cable_beam
+ /// The current physical object that the beam is connected to and listens to.
+ var/atom/movable/physical_object
+
/datum/component/usb_port/Initialize(list/circuit_component_types)
if (!isatom(parent))
return COMPONENT_INCOMPATIBLE
circuit_components = list()
- for(var/circuit_component_type in circuit_component_types)
- var/obj/item/circuit_component/circuit_component = new circuit_component_type(null)
- circuit_components += circuit_component
+ set_circuit_components(circuit_component_types)
+
+/datum/component/usb_port/proc/set_circuit_components(list/components)
+ var/should_register = FALSE
+ if(length(circuit_components))
+ UnregisterFromParent()
+ should_register = TRUE
+ QDEL_LIST(circuit_components)
+
+ for(var/circuit_component in components)
+ var/obj/item/circuit_component/component = circuit_component
+ if(ispath(circuit_component))
+ component = new circuit_component(null)
+ RegisterSignal(component, COMSIG_CIRCUIT_COMPONENT_SAVE, .proc/save_component)
+ circuit_components += component
+
+ if(should_register)
+ RegisterWithParent()
/datum/component/usb_port/RegisterWithParent()
RegisterSignal(parent, COMSIG_ATOM_USB_CABLE_TRY_ATTACH, .proc/on_atom_usb_cable_try_attach)
RegisterSignal(parent, COMSIG_MOVABLE_MOVED, .proc/on_moved)
RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/on_examine)
+ RegisterSignal(parent, COMSIG_MOVABLE_CIRCUIT_LOADED, .proc/on_load)
for(var/obj/item/circuit_component/component as anything in circuit_components)
component.register_usb_parent(parent)
@@ -38,14 +57,36 @@
COMSIG_ATOM_USB_CABLE_TRY_ATTACH,
COMSIG_MOVABLE_MOVED,
COMSIG_PARENT_EXAMINE,
+ COMSIG_MOVABLE_CIRCUIT_LOADED,
))
for(var/obj/item/circuit_component/component as anything in circuit_components)
component.unregister_usb_parent(parent)
unregister_circuit_signals()
+ unregister_physical_signals()
attached_circuit = null
+/datum/component/usb_port/proc/save_component(datum/source, list/objects)
+ SIGNAL_HANDLER
+ objects += parent
+
+/datum/component/usb_port/proc/on_load(datum/source, obj/item/integrated_circuit/circuit, list/components)
+ SIGNAL_HANDLER
+ var/list/components_in_list = list()
+ for(var/obj/item/circuit_component/component as anything in components)
+ components_in_list += component.type
+
+ for(var/obj/item/circuit_component/component as anything in circuit_components)
+ if(component.type in components_in_list)
+ continue
+ components += component.type
+ set_circuit_components(components)
+ var/obj/item/usb_cable/cable = new(circuit.drop_location())
+ cable.attached_circuit = circuit
+
+ on_atom_usb_cable_try_attach(src, cable, null)
+
/datum/component/usb_port/Destroy()
QDEL_LIST(circuit_components)
QDEL_NULL(usb_cable_beam)
@@ -62,20 +103,23 @@
UnregisterSignal(attached_circuit, list(
COMSIG_CIRCUIT_SHELL_REMOVED,
COMSIG_PARENT_QDELETING,
+ COMSIG_CIRCUIT_SET_SHELL,
))
- var/shell = attached_circuit.shell
- if (!isnull(shell))
- UnregisterSignal(shell, COMSIG_MOVABLE_MOVED)
- UnregisterSignal(shell, COMSIG_PARENT_EXAMINE)
+/datum/component/usb_port/proc/unregister_physical_signals()
+ if (isnull(physical_object))
+ return
+
+ UnregisterSignal(physical_object, list(
+ COMSIG_MOVABLE_MOVED,
+ COMSIG_PARENT_EXAMINE,
+ ))
/datum/component/usb_port/proc/attach_circuit_components(obj/item/integrated_circuit/circuitboard)
for(var/obj/item/circuit_component/component as anything in circuit_components)
circuitboard.add_component(component)
RegisterSignal(component, COMSIG_CIRCUIT_COMPONENT_REMOVED, .proc/on_circuit_component_removed)
- return
-
/datum/component/usb_port/proc/on_examine(datum/source, mob/user, list/examine_text)
SIGNAL_HANDLER
@@ -95,15 +139,18 @@
var/atom/atom_parent = parent
if (!isnull(attached_circuit))
- atom_parent.balloon_alert(user, "usb already connected")
+ if(user)
+ atom_parent.balloon_alert(user, "usb already connected")
return COMSIG_CANCEL_USB_CABLE_ATTACK
if (isnull(connecting_cable.attached_circuit))
- connecting_cable.balloon_alert(user, "connect to a shell first")
+ if(user)
+ connecting_cable.balloon_alert(user, "connect to a shell first")
return COMSIG_CANCEL_USB_CABLE_ATTACK
if (!IN_GIVEN_RANGE(connecting_cable.attached_circuit, parent, USB_CABLE_MAX_RANGE))
- connecting_cable.balloon_alert(user, "too far away")
+ if(user)
+ connecting_cable.balloon_alert(user, "too far away")
return COMSIG_CANCEL_USB_CABLE_ATTACK
usb_cable_ref = WEAKREF(connecting_cable)
@@ -111,17 +158,38 @@
connecting_cable.forceMove(attached_circuit)
attach_circuit_components(attached_circuit)
- attached_circuit.interact(user)
+ if(user)
+ attached_circuit.interact(user)
- usb_cable_beam = atom_parent.Beam(attached_circuit.shell, "usb_cable_beam", 'icons/obj/wiremod.dmi')
+ var/new_physical_object = attached_circuit.shell
+ if(!new_physical_object)
+ new_physical_object = attached_circuit
RegisterSignal(attached_circuit, COMSIG_CIRCUIT_SHELL_REMOVED, .proc/on_circuit_shell_removed)
RegisterSignal(attached_circuit, COMSIG_PARENT_QDELETING, .proc/on_circuit_deleting)
- RegisterSignal(attached_circuit.shell, COMSIG_MOVABLE_MOVED, .proc/on_moved)
- RegisterSignal(attached_circuit.shell, COMSIG_PARENT_EXAMINE, .proc/on_examine_shell)
+ RegisterSignal(attached_circuit, COMSIG_CIRCUIT_SET_SHELL, .proc/on_set_shell)
+ set_physical_object(new_physical_object)
return COMSIG_USB_CABLE_ATTACHED
+/datum/component/usb_port/proc/set_physical_object(atom/movable/new_physical_object)
+ if(physical_object)
+ unregister_physical_signals()
+ if(usb_cable_beam)
+ QDEL_NULL(usb_cable_beam)
+
+ var/atom/atom_parent = parent
+ usb_cable_beam = atom_parent.Beam(new_physical_object, "usb_cable_beam", 'icons/obj/wiremod.dmi')
+
+ RegisterSignal(new_physical_object, COMSIG_MOVABLE_MOVED, .proc/on_moved)
+ RegisterSignal(new_physical_object, COMSIG_PARENT_EXAMINE, .proc/on_examine_shell)
+ physical_object = new_physical_object
+
+// Adds support for loading circuits without shells but with usb cables, or loading circuits with shells because the shells might not load first.
+/datum/component/usb_port/proc/on_set_shell(datum/source, atom/movable/new_shell)
+ SIGNAL_HANDLER
+ set_physical_object(new_shell)
+
/datum/component/usb_port/proc/on_moved()
SIGNAL_HANDLER
@@ -157,11 +225,13 @@
component.moveToNullspace()
unregister_circuit_signals()
+ unregister_physical_signals()
var/atom/atom_parent = parent
usb_cable.forceMove(atom_parent.drop_location())
usb_cable.balloon_alert_to_viewers("snap")
+ physical_object = null
attached_circuit = null
usb_cable_ref = null
diff --git a/code/datums/dash_weapon.dm b/code/datums/dash_weapon.dm
index b13354ce70..1f72fb416e 100644
--- a/code/datums/dash_weapon.dm
+++ b/code/datums/dash_weapon.dm
@@ -33,11 +33,11 @@
/datum/action/innate/dash/proc/Teleport(mob/user, atom/target)
if(!IsAvailable())
return
- var/turf/T = get_turf(target)
+ var/turf/target_turf = get_turf(target)
if(target in view(user.client.view, user))
var/obj/spot1 = new phaseout(get_turf(user), user.dir)
- user.forceMove(T)
- playsound(T, dash_sound, 25, TRUE)
+ user.forceMove(target_turf)
+ playsound(target_turf, dash_sound, 25, TRUE)
var/obj/spot2 = new phasein(get_turf(user), user.dir)
spot1.Beam(spot2,beam_effect,time=2 SECONDS)
current_charges--
@@ -49,4 +49,4 @@
owner.update_action_buttons_icon()
if(recharge_sound)
playsound(dashing_item, recharge_sound, 50, TRUE)
- to_chat(owner, span_notice("[src] now has [current_charges]/[max_charges] charges."))
+ dashing_item.balloon_alert(owner, "[current_charges]/[max_charges] dash charges")
diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm
index 95990b7515..a11e07f2f3 100644
--- a/code/datums/datacore.dm
+++ b/code/datums/datacore.dm
@@ -1,3 +1,6 @@
+
+GLOBAL_DATUM_INIT(data_core, /datum/datacore, new)
+
//TODO: someone please get rid of this shit
/datum/datacore
var/list/medical = list()
diff --git a/code/datums/diseases/advance/symptoms/nanites.dm b/code/datums/diseases/advance/symptoms/nanites.dm
deleted file mode 100644
index 1ca11b28e2..0000000000
--- a/code/datums/diseases/advance/symptoms/nanites.dm
+++ /dev/null
@@ -1,71 +0,0 @@
-/datum/symptom/nano_boost
- name = "Nano-symbiosis"
- desc = "The virus reacts to nanites in the host's bloodstream by enhancing their replication cycle."
- stealth = 0
- resistance = 2
- stage_speed = 2
- transmittable = -1
- level = 7
- severity = 0
- symptom_delay_min = 1
- symptom_delay_max = 1
- var/reverse_boost = FALSE
- threshold_descs = list(
- "Transmission 5" = "Increases the virus' growth rate while nanites are present.",
- "Stage Speed 7" = "Increases the replication boost."
- )
-
-/datum/symptom/nano_boost/Start(datum/disease/advance/A)
- . = ..()
- if(!.)
- return
- if(A.totalTransmittable() >= 5) //reverse boost
- reverse_boost = TRUE
- if(A.totalStageSpeed() >= 7) //more nanites
- power = 2
-
-/datum/symptom/nano_boost/Activate(datum/disease/advance/A)
- . = ..()
- if(!.)
- return
- var/mob/living/carbon/M = A.affected_mob
- SEND_SIGNAL(M, COMSIG_NANITE_ADJUST_VOLUME, 0.5 * power)
- if(reverse_boost && SEND_SIGNAL(M, COMSIG_HAS_NANITES))
- if(prob(A.stage_prob))
- A.stage = min(A.stage + 1,A.max_stages)
-
-/datum/symptom/nano_destroy
- name = "Silicolysis"
- desc = "The virus reacts to nanites in the host's bloodstream by attacking and consuming them."
- stealth = 0
- resistance = 4
- stage_speed = -1
- transmittable = 1
- level = 7
- severity = 0
- symptom_delay_min = 1
- symptom_delay_max = 1
- var/reverse_boost = FALSE
- threshold_descs = list(
- "Stage Speed 5" = "Increases the virus' growth rate while nanites are present.",
- "Resistance 7" = "Severely increases the rate at which the nanites are destroyed."
- )
-
-/datum/symptom/nano_destroy/Start(datum/disease/advance/A)
- . = ..()
- if(!.)
- return
- if(A.totalStageSpeed() >= 5) //reverse boost
- reverse_boost = TRUE
- if(A.totalResistance() >= 7) //more nanites
- power = 3
-
-/datum/symptom/nano_destroy/Activate(datum/disease/advance/A)
- . = ..()
- if(!.)
- return
- var/mob/living/carbon/M = A.affected_mob
- SEND_SIGNAL(M, COMSIG_NANITE_ADJUST_VOLUME, -0.4 * power)
- if(reverse_boost && SEND_SIGNAL(M, COMSIG_HAS_NANITES))
- if(prob(A.stage_prob))
- A.stage = min(A.stage + 1,A.max_stages)
diff --git a/code/datums/elements/footstep.dm b/code/datums/elements/footstep.dm
new file mode 100644
index 0000000000..0c07ea30b9
--- /dev/null
+++ b/code/datums/elements/footstep.dm
@@ -0,0 +1,155 @@
+///Footstep element. Plays footsteps at parents location when it is appropriate.
+/datum/element/footstep
+ element_flags = ELEMENT_DETACH|ELEMENT_BESPOKE
+ id_arg_index = 2
+ ///A list containing living mobs and the number of steps they have taken since the last time their footsteps were played.
+ var/list/steps_for_living = list()
+ ///volume determines the extra volume of the footstep. This is multiplied by the base volume, should there be one.
+ var/volume
+ ///e_range stands for extra range - aka how far the sound can be heard. This is added to the base value and ignored if there isn't a base value.
+ var/e_range
+ ///footstep_type is a define which determines what kind of sounds should get chosen.
+ var/footstep_type
+ ///This can be a list OR a soundfile OR null. Determines whatever sound gets played.
+ var/footstep_sounds
+ ///Whether or not to add variation to the sounds played
+ var/sound_vary = FALSE
+
+/datum/element/footstep/Attach(datum/target, footstep_type = FOOTSTEP_MOB_BAREFOOT, volume = 0.5, e_range = -8, sound_vary = FALSE)
+ . = ..()
+ if(!ismovable(target))
+ return ELEMENT_INCOMPATIBLE
+ src.volume = volume
+ src.e_range = e_range
+ src.footstep_type = footstep_type
+ src.sound_vary = sound_vary
+ switch(footstep_type)
+ if(FOOTSTEP_MOB_HUMAN)
+ if(!ishuman(target))
+ return ELEMENT_INCOMPATIBLE
+ RegisterSignal(target, COMSIG_MOVABLE_MOVED, .proc/play_humanstep)
+ steps_for_living[target] = 0
+ return
+ if(FOOTSTEP_MOB_CLAW)
+ footstep_sounds = GLOB.clawfootstep
+ if(FOOTSTEP_MOB_BAREFOOT)
+ footstep_sounds = GLOB.barefootstep
+ if(FOOTSTEP_MOB_HEAVY)
+ footstep_sounds = GLOB.heavyfootstep
+ if(FOOTSTEP_MOB_SHOE)
+ footstep_sounds = GLOB.footstep
+ if(FOOTSTEP_MOB_SLIME)
+ footstep_sounds = 'sound/effects/footstep/slime1.ogg'
+ if(FOOTSTEP_OBJ_MACHINE)
+ footstep_sounds = 'sound/effects/bang.ogg'
+ RegisterSignal(target, COMSIG_MOVABLE_MOVED, .proc/play_simplestep_machine)
+ return
+ if(FOOTSTEP_OBJ_ROBOT)
+ footstep_sounds = 'sound/effects/tank_treads.ogg'
+ RegisterSignal(target, COMSIG_MOVABLE_MOVED, .proc/play_simplestep_machine)
+ return
+ RegisterSignal(target, COMSIG_MOVABLE_MOVED, .proc/play_simplestep)
+ steps_for_living[target] = 0
+
+/datum/element/footstep/Detach(atom/movable/source)
+ UnregisterSignal(source, COMSIG_MOVABLE_MOVED)
+ steps_for_living -= source
+ return ..()
+
+///Prepares a footstep for living mobs. Determines if it should get played. Returns the turf it should get played on. Note that it is always a /turf/open
+/datum/element/footstep/proc/prepare_step(mob/living/source)
+ var/turf/open/turf = get_turf(source)
+ if(!istype(turf))
+ return
+
+ if(!turf.footstep || source.buckled || source.throwing || source.movement_type & (VENTCRAWLING | FLYING) || HAS_TRAIT(source, TRAIT_IMMOBILIZED))
+ return
+
+ if(source.body_position == LYING_DOWN) //play crawling sound if we're lying
+ playsound(turf, 'sound/effects/footstep/crawl1.ogg', 15 * volume, falloff_distance = 1, vary = sound_vary)
+ return
+
+ if(iscarbon(source))
+ var/mob/living/carbon/carbon_source = source
+ if(!carbon_source.get_bodypart(BODY_ZONE_L_LEG) && !carbon_source.get_bodypart(BODY_ZONE_R_LEG))
+ return
+ if(carbon_source.m_intent == MOVE_INTENT_WALK)
+ return// stealth
+ steps_for_living[source] += 1
+ var/steps = steps_for_living[source]
+
+ if(steps >= 6)
+ steps_for_living[source] = 0
+ steps = 0
+
+ if(steps % 2)
+ return
+
+ if(steps != 0 && !source.has_gravity(turf)) // don't need to step as often when you hop around
+ return
+ return turf
+
+/datum/element/footstep/proc/play_simplestep(mob/living/source)
+ SIGNAL_HANDLER
+
+ var/turf/open/source_loc = prepare_step(source)
+ if(!source_loc)
+ return
+ if(isfile(footstep_sounds) || istext(footstep_sounds))
+ playsound(source_loc, footstep_sounds, volume, falloff_distance = 1, vary = sound_vary)
+ return
+ var/turf_footstep
+ switch(footstep_type)
+ if(FOOTSTEP_MOB_CLAW)
+ turf_footstep = source_loc.clawfootstep
+ if(FOOTSTEP_MOB_BAREFOOT)
+ turf_footstep = source_loc.barefootstep
+ if(FOOTSTEP_MOB_HEAVY)
+ turf_footstep = source_loc.heavyfootstep
+ if(FOOTSTEP_MOB_SHOE)
+ turf_footstep = source_loc.footstep
+ if(!turf_footstep)
+ return
+ playsound(source_loc, pick(footstep_sounds[turf_footstep][1]), footstep_sounds[turf_footstep][2] * volume, TRUE, footstep_sounds[turf_footstep][3] + e_range, falloff_distance = 1, vary = sound_vary)
+
+/datum/element/footstep/proc/play_humanstep(mob/living/carbon/human/source)
+ SIGNAL_HANDLER
+
+ if(HAS_TRAIT(source, TRAIT_SILENT_FOOTSTEPS))
+ return
+
+ var/volume_multiplier = 1
+ var/range_adjustment = 0
+
+ if(HAS_TRAIT(source, TRAIT_LIGHT_STEP))
+ volume_multiplier = 0.6
+ range_adjustment = -2
+
+ var/turf/open/source_loc = prepare_step(source)
+ if(!source_loc)
+ return
+
+ if ((source.wear_suit?.body_parts_covered | source.w_uniform?.body_parts_covered | source.shoes?.body_parts_covered) & FEET)
+ // we are wearing shoes
+ playsound(source_loc, pick(GLOB.footstep[source_loc.footstep][1]),
+ GLOB.footstep[source_loc.footstep][2] * volume * volume_multiplier,
+ TRUE,
+ GLOB.footstep[source_loc.footstep][3] + e_range + range_adjustment, falloff_distance = 1, vary = sound_vary)
+ else
+ if(source.dna.species.special_step_sounds)
+ playsound(source_loc, pick(source.dna.species.special_step_sounds), 50, TRUE, falloff_distance = 1, vary = sound_vary)
+ else
+ playsound(source_loc, pick(GLOB.barefootstep[source_loc.barefootstep][1]),
+ GLOB.barefootstep[source_loc.barefootstep][2] * volume * volume_multiplier,
+ TRUE,
+ GLOB.barefootstep[source_loc.barefootstep][3] + e_range + range_adjustment, falloff_distance = 1, vary = sound_vary)
+
+
+///Prepares a footstep for machine walking
+/datum/element/footstep/proc/play_simplestep_machine(atom/movable/source)
+ SIGNAL_HANDLER
+
+ var/turf/open/source_loc = get_turf(source)
+ if(!istype(source_loc))
+ return
+ playsound(source_loc, footstep_sounds, 50, falloff_distance = 1, vary = sound_vary)
diff --git a/code/datums/components/kneecapping.dm b/code/datums/elements/kneecapping.dm
similarity index 100%
rename from code/datums/components/kneecapping.dm
rename to code/datums/elements/kneecapping.dm
diff --git a/code/datums/components/spooky.dm b/code/datums/elements/spooky.dm
similarity index 73%
rename from code/datums/components/spooky.dm
rename to code/datums/elements/spooky.dm
index b53aae93ac..3643bac10d 100644
--- a/code/datums/components/spooky.dm
+++ b/code/datums/elements/spooky.dm
@@ -1,10 +1,20 @@
-/datum/component/spooky
+/datum/element/spooky
+ element_flags = ELEMENT_DETACH|ELEMENT_BESPOKE
+ id_arg_index = 2
var/too_spooky = TRUE //will it spawn a new instrument?
-/datum/component/spooky/Initialize()
- RegisterSignal(parent, COMSIG_ITEM_ATTACK, .proc/spectral_attack)
+/datum/element/spooky/Attach(datum/target, too_spooky = TRUE)
+ . = ..()
+ if(!isitem(target))
+ return ELEMENT_INCOMPATIBLE
+ src.too_spooky = too_spooky
+ RegisterSignal(target, COMSIG_ITEM_ATTACK, .proc/spectral_attack)
-/datum/component/spooky/proc/spectral_attack(datum/source, mob/living/carbon/C, mob/user)
+/datum/element/spooky/Detach(datum/source)
+ UnregisterSignal(source, COMSIG_ITEM_ATTACK)
+ return ..()
+
+/datum/element/spooky/proc/spectral_attack(datum/source, mob/living/carbon/C, mob/user)
SIGNAL_HANDLER
if(ishuman(user)) //this weapon wasn't meant for mortals.
@@ -36,26 +46,27 @@
C.Jitter(15)
C.stuttering = 20
-/datum/component/spooky/proc/spectral_change(mob/living/carbon/human/H, mob/user)
+/datum/element/spooky/proc/spectral_change(mob/living/carbon/human/H, mob/user)
if((H.getStaminaLoss() > 95) && (!istype(H.dna.species, /datum/species/skeleton)) && (!istype(H.dna.species, /datum/species/golem)) && (!istype(H.dna.species, /datum/species/android)) && (!istype(H.dna.species, /datum/species/jelly)))
H.Paralyze(20)
H.set_species(/datum/species/skeleton)
H.visible_message(span_warning("[H] has given up on life as a mortal."))
var/T = get_turf(H)
if(too_spooky)
- if(prob(30))
- new/obj/item/instrument/saxophone/spectral(T)
- else if(prob(30))
- new/obj/item/instrument/trumpet/spectral(T)
- else if(prob(30))
- new/obj/item/instrument/trombone/spectral(T)
+ if(prob(90))
+ var/obj/item/instrument = pick(
+ /obj/item/instrument/saxophone/spectral,
+ /obj/item/instrument/trumpet/spectral,
+ /obj/item/instrument/trombone/spectral,
+ )
+ new instrument(T)
else
to_chat(H, span_boldwarning("The spooky gods forgot to ship your instrument. Better luck next unlife."))
to_chat(H, span_boldnotice("You are the spooky skeleton!"))
to_chat(H, span_boldnotice("A new life and identity has begun. Help your fellow skeletons into bringing out the spooky-pocalypse. You haven't forgotten your past life, and are still beholden to past loyalties."))
change_name(H) //time for a new name!
-/datum/component/spooky/proc/change_name(mob/living/carbon/human/H)
+/datum/element/spooky/proc/change_name(mob/living/carbon/human/H)
var/t = sanitize_name(stripped_input(H, "Enter your new skeleton name", H.real_name, null, MAX_NAME_LEN))
if(!t)
t = "spooky skeleton"
diff --git a/code/datums/greyscale/json_configs/meter.json b/code/datums/greyscale/json_configs/meter.json
index 3acd68b6f7..73cfb73995 100644
--- a/code/datums/greyscale/json_configs/meter.json
+++ b/code/datums/greyscale/json_configs/meter.json
@@ -2,9 +2,8 @@
"meter": [
{
"type": "icon_state",
- "icon_state": "pressure0",
- "blend_mode": "overlay",
- "color_ids": [ 1 ]
+ "icon_state": "pressure_off",
+ "blend_mode": "overlay"
},
{
"type": "icon_state",
diff --git a/code/datums/greyscale/json_configs/plushie_lizard.json b/code/datums/greyscale/json_configs/plushie_lizard.json
index 47e86a61d8..5326beac0b 100644
--- a/code/datums/greyscale/json_configs/plushie_lizard.json
+++ b/code/datums/greyscale/json_configs/plushie_lizard.json
@@ -1,5 +1,5 @@
{
- "": [
+ "map_plushie_lizard": [
{
"type": "icon_state",
"icon_state": "plushie_lizard_body",
diff --git a/code/datums/id_trim/admin.dm b/code/datums/id_trim/admin.dm
new file mode 100644
index 0000000000..0bc937aecc
--- /dev/null
+++ b/code/datums/id_trim/admin.dm
@@ -0,0 +1,18 @@
+/// Trim for admins and debug cards. Has every single access in the game.
+/datum/id_trim/admin
+ assignment = "Jannie"
+ trim_state = "trim_ert_janitor"
+
+/datum/id_trim/admin/New()
+ . = ..()
+ // Every single access in the game, all on one handy trim.
+ access = SSid_access.get_region_access_list(list(REGION_ALL_GLOBAL))
+
+/// Trim for highlander cards, used during the highlander adminbus event.
+/datum/id_trim/highlander
+ assignment = "Highlander"
+ trim_state = "trim_ert_deathcommando"
+
+/datum/id_trim/highlander/New()
+ . = ..()
+ access = SSid_access.get_region_access_list(list(REGION_CENTCOM, REGION_ALL_STATION))
diff --git a/code/datums/id_trim/misc.dm b/code/datums/id_trim/outfits.dm
similarity index 61%
rename from code/datums/id_trim/misc.dm
rename to code/datums/id_trim/outfits.dm
index fdf21a1637..48b4969a20 100644
--- a/code/datums/id_trim/misc.dm
+++ b/code/datums/id_trim/outfits.dm
@@ -1,21 +1,6 @@
-/// Trim for admins and debug cards. Has every single access in the game.
-/datum/id_trim/admin
- assignment = "Jannie"
- trim_state = "trim_ert_janitor"
-
-/datum/id_trim/admin/New()
- . = ..()
- // Every single access in the game, all on one handy trim.
- access = SSid_access.get_region_access_list(list(REGION_ALL_GLOBAL))
-
-/// Trim for highlander cards, used during the highlander adminbus event.
-/datum/id_trim/highlander
- assignment = "Highlander"
- trim_state = "trim_ert_deathcommando"
-
-/datum/id_trim/highlander/New()
- . = ..()
- access = SSid_access.get_region_access_list(list(REGION_CENTCOM, REGION_ALL_STATION))
+/**
+ * This file contains all the trims associated with outfits.
+ */
/// Trim for the assassin outfit.
/datum/id_trim/reaper_assassin
diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm
index cb6774ee6b..b9e02d4a07 100644
--- a/code/datums/mood_events/generic_negative_events.dm
+++ b/code/datums/mood_events/generic_negative_events.dm
@@ -279,13 +279,6 @@
description = "THEY'RE CUTTING ME OPEN!!\n"
mood_change = -8
-/datum/mood_event/nanite_sadness
- description = "+++++++HAPPINESS SUPPRESSION+++++++\n"
- mood_change = -7
-
-/datum/mood_event/nanite_sadness/add_effects(message)
- description = "+++++++[message]+++++++\n"
-
/datum/mood_event/bald
description = "I need something to cover my head...\n"
mood_change = -3
diff --git a/code/datums/mood_events/generic_positive_events.dm b/code/datums/mood_events/generic_positive_events.dm
index 5be193843e..ef8db10eef 100644
--- a/code/datums/mood_events/generic_positive_events.dm
+++ b/code/datums/mood_events/generic_positive_events.dm
@@ -186,13 +186,6 @@
description = "What a peculiar emblem. It makes me feel hopeful for my future.\n"
mood_change = 10
-/datum/mood_event/nanite_happiness
- description = "+++++++HAPPINESS ENHANCEMENT+++++++\n"
- mood_change = 7
-
-/datum/mood_event/nanite_happiness/add_effects(message)
- description = "+++++++[message]+++++++\n"
-
/datum/mood_event/area
description = "" //Fill this out in the area
mood_change = 0
diff --git a/code/game/area/space_station_13_areas.dm b/code/game/area/space_station_13_areas.dm
index 967bcb5255..307ddf61fe 100644
--- a/code/game/area/space_station_13_areas.dm
+++ b/code/game/area/space_station_13_areas.dm
@@ -1413,10 +1413,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
icon_state = "abandoned_sci"
sound_environment = SOUND_AREA_SMALL_ENCLOSED
-/area/science/nanite
- name = "Nanite Lab"
- icon_state = "nanite"
-
// Telecommunications Satellite
/area/tcommsat
diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm
index 50b0770604..5da00a215b 100644
--- a/code/game/data_huds.dm
+++ b/code/game/data_huds.dm
@@ -18,7 +18,7 @@
/datum/atom_hud/data
/datum/atom_hud/data/human/medical
- hud_icons = list(STATUS_HUD, HEALTH_HUD, NANITE_HUD)
+ hud_icons = list(STATUS_HUD, HEALTH_HUD)
/datum/atom_hud/data/human/medical/basic
@@ -47,7 +47,7 @@
hud_icons = list(ID_HUD)
/datum/atom_hud/data/human/security/advanced
- hud_icons = list(ID_HUD, IMPTRACK_HUD, IMPLOYAL_HUD, IMPCHEM_HUD, WANTED_HUD, NANITE_HUD)
+ hud_icons = list(ID_HUD, IMPTRACK_HUD, IMPLOYAL_HUD, IMPCHEM_HUD, WANTED_HUD)
/datum/atom_hud/data/human/fan_hud
hud_icons = list(FAN_HUD)
@@ -55,10 +55,10 @@
/datum/atom_hud/data/diagnostic
/datum/atom_hud/data/diagnostic/basic
- hud_icons = list(DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_BOT_HUD, DIAG_CIRCUIT_HUD, DIAG_TRACK_HUD, DIAG_AIRLOCK_HUD, DIAG_NANITE_FULL_HUD, DIAG_LAUNCHPAD_HUD)
+ hud_icons = list(DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_BOT_HUD, DIAG_CIRCUIT_HUD, DIAG_TRACK_HUD, DIAG_AIRLOCK_HUD, DIAG_LAUNCHPAD_HUD)
/datum/atom_hud/data/diagnostic/advanced
- hud_icons = list(DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_BOT_HUD, DIAG_CIRCUIT_HUD, DIAG_TRACK_HUD, DIAG_AIRLOCK_HUD, DIAG_NANITE_FULL_HUD, DIAG_LAUNCHPAD_HUD, DIAG_PATH_HUD)
+ hud_icons = list(DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_BOT_HUD, DIAG_CIRCUIT_HUD, DIAG_TRACK_HUD, DIAG_AIRLOCK_HUD, DIAG_LAUNCHPAD_HUD, DIAG_PATH_HUD)
/datum/atom_hud/data/bot_path
hud_icons = list(DIAG_PATH_HUD)
@@ -300,14 +300,6 @@ Security HUDs! Basic mode shows only the job.
Diagnostic HUDs!
************************************************/
-/mob/living/proc/hud_set_nanite_indicator()
- var/image/holder = hud_list[NANITE_HUD]
- var/icon/I = icon(icon, icon_state, dir)
- holder.pixel_y = I.Height() - world.icon_size
- holder.icon_state = null
- if(HAS_TRAIT(src, TRAIT_NANITE_MONITORING))
- holder.icon_state = "nanite_ping"
-
//For Diag health and cell bars!
/proc/RoundDiagBar(value)
switch(value * 100)
diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm
index 4ad557c379..8c83ef3b39 100644
--- a/code/game/machinery/computer/crew.dm
+++ b/code/game/machinery/computer/crew.dm
@@ -34,11 +34,6 @@
. = ..()
records = add_output_port("Crew Monitoring Data", PORT_TYPE_TABLE)
-/obj/item/circuit_component/medical_console_data/Destroy()
- records = null
- return ..()
-
-
/obj/item/circuit_component/medical_console_data/register_usb_parent(atom/movable/parent)
. = ..()
if(istype(parent, /obj/machinery/computer/crew))
@@ -189,9 +184,9 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
return data_by_z["[z]"]
var/list/results = list()
- for(var/tracked_mob in GLOB.suit_sensors_list | GLOB.nanite_sensors_list)
+ for(var/tracked_mob in GLOB.suit_sensors_list)
if(!tracked_mob)
- stack_trace("Null entry in suit sensors or nanite sensors list.")
+ stack_trace("Null entry in suit sensors list.")
continue
var/mob/living/tracked_living_mob = tracked_mob
@@ -208,31 +203,25 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
if(pos.z != z && (!is_station_level(pos.z) || !is_station_level(z)))
continue
- var/sensor_mode
-
- // Set sensor level based on whether we're in the nanites list or the suit sensor list.
- if(tracked_living_mob in GLOB.nanite_sensors_list)
- sensor_mode = SENSOR_COORDS
- else
- var/mob/living/carbon/human/tracked_human = tracked_living_mob
+ var/mob/living/carbon/human/tracked_human = tracked_living_mob
- // Check their humanity.
- if(!ishuman(tracked_human))
- stack_trace("Non-human mob is in suit_sensors_list: [tracked_living_mob] ([tracked_living_mob.type])")
- continue
+ // Check their humanity.
+ if(!ishuman(tracked_human))
+ stack_trace("Non-human mob is in suit_sensors_list: [tracked_living_mob] ([tracked_living_mob.type])")
+ continue
- // Check they have a uniform
- var/obj/item/clothing/under/uniform = tracked_human.w_uniform
- if (!istype(uniform))
- stack_trace("Human without a suit sensors compatible uniform is in suit_sensors_list: [tracked_human] ([tracked_human.type]) ([uniform?.type])")
- continue
+ // Check they have a uniform
+ var/obj/item/clothing/under/uniform = tracked_human.w_uniform
+ if (!istype(uniform))
+ stack_trace("Human without a suit sensors compatible uniform is in suit_sensors_list: [tracked_human] ([tracked_human.type]) ([uniform?.type])")
+ continue
- // Check if their uniform is in a compatible mode.
- if((uniform.has_sensor <= NO_SENSORS) || !uniform.sensor_mode)
- stack_trace("Human without active suit sensors is in suit_sensors_list: [tracked_human] ([tracked_human.type]) ([uniform.type])")
- continue
+ // Check if their uniform is in a compatible mode.
+ if((uniform.has_sensor <= NO_SENSORS) || !uniform.sensor_mode)
+ stack_trace("Human without active suit sensors is in suit_sensors_list: [tracked_human] ([tracked_human.type]) ([uniform.type])")
+ continue
- sensor_mode = uniform.sensor_mode
+ var/sensor_mode = uniform.sensor_mode
// The entry for this human
var/list/entry = list(
diff --git a/code/game/machinery/computer/launchpad_control.dm b/code/game/machinery/computer/launchpad_control.dm
index 26513a5e0f..a4bb748cde 100644
--- a/code/game/machinery/computer/launchpad_control.dm
+++ b/code/game/machinery/computer/launchpad_control.dm
@@ -33,11 +33,24 @@
var/obj/machinery/computer/launchpad/attached_console
+/obj/item/circuit_component/bluespace_launchpad/get_ui_notices()
+ . = ..()
+ var/current_launchpad = launchpad_id.input_value
+ if(isnull(current_launchpad))
+ return
+
+ var/obj/machinery/launchpad/the_pad = attached_console.launchpads[current_launchpad]
+ if(isnull(the_pad))
+ return
+
+ . += create_ui_notice("Minimum Range: [-the_pad.range]", "orange", "minus")
+ . += create_ui_notice("Maximum Range: [the_pad.range]", "orange", "plus")
+
/obj/item/circuit_component/bluespace_launchpad/Initialize()
. = ..()
- launchpad_id = add_input_port("Launchpad ID", PORT_TYPE_NUMBER, FALSE)
- x_pos = add_input_port("X offset", PORT_TYPE_NUMBER, FALSE)
- y_pos = add_input_port("Y offset", PORT_TYPE_NUMBER, FALSE)
+ launchpad_id = add_input_port("Launchpad ID", PORT_TYPE_NUMBER, FALSE, default = 1)
+ x_pos = add_input_port("X offset", PORT_TYPE_NUMBER)
+ y_pos = add_input_port("Y offset", PORT_TYPE_NUMBER)
send_trigger = add_input_port("Send", PORT_TYPE_SIGNAL)
retrieve_trigger = add_input_port("Retrieve", PORT_TYPE_SIGNAL)
@@ -46,18 +59,6 @@
why_fail = add_output_port("Fail reason", PORT_TYPE_STRING)
on_fail = add_output_port("Failed", PORT_TYPE_SIGNAL)
-/obj/item/circuit_component/bluespace_launchpad/Destroy()
- launchpad_id = null
- x_pos = null
- y_pos = null
- send_trigger = null
- retrieve_trigger = null
- sent = null
- retrieved = null
- on_fail = null
- why_fail = null
- return ..()
-
/obj/item/circuit_component/bluespace_launchpad/register_usb_parent(atom/movable/parent)
. = ..()
if(istype(parent, /obj/machinery/computer/launchpad))
@@ -78,36 +79,45 @@
on_fail.set_output(COMPONENT_SIGNAL)
return
+<<<<<<< HEAD
var/current_launchpad = launchpad_id.value
if(isnull(current_launchpad))
+=======
+ if(!launchpad_id.input_value)
+>>>>>>> ec9ee7eb00
return
- var/obj/machinery/launchpad/the_pad = attached_console.launchpads[current_launchpad]
+ var/obj/machinery/launchpad/the_pad = KEYBYINDEX(attached_console.launchpads, launchpad_id.input_value)
if(isnull(the_pad))
+ why_fail.set_output("Invalid launchpad selected!")
+ on_fail.set_output(COMPONENT_SIGNAL)
return
+<<<<<<< HEAD
var/x_dest = x_pos.value
if(isnull(x_dest))
return
var/y_dest = y_pos.value
if(isnull(y_dest))
+=======
+ the_pad.set_offset(x_pos.input_value, y_pos.input_value)
+
+ if(COMPONENT_TRIGGERED_BY(port, x_pos))
+ x_pos.set_input(the_pad.x_offset, FALSE)
+>>>>>>> ec9ee7eb00
return
- if(x_dest > the_pad.range || y_dest > the_pad.range)
- why_fail.set_output("Cannot go that far! Current maximum reach: [the_pad.range]")
- on_fail.set_output(COMPONENT_SIGNAL)
+ if(COMPONENT_TRIGGERED_BY(port, y_pos))
+ y_pos.set_input(the_pad.y_offset, FALSE)
return
var/checks = attached_console.teleport_checks(the_pad)
-
if(!isnull(checks))
why_fail.set_output(checks)
on_fail.set_output(COMPONENT_SIGNAL)
return
- the_pad.set_offset(x_dest, y_dest)
-
if(COMPONENT_TRIGGERED_BY(send_trigger, port))
the_pad.doteleport(null, TRUE, alternate_log_name = parent.get_creator())
diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm
index 90ce2197c5..1f3e0445c6 100644
--- a/code/game/machinery/computer/security.dm
+++ b/code/game/machinery/computer/security.dm
@@ -44,12 +44,6 @@
records = add_output_port("Security Records", PORT_TYPE_TABLE)
on_fail = add_output_port("Failed", PORT_TYPE_SIGNAL)
-/obj/item/circuit_component/arrest_console_data/Destroy()
- records = null
- on_fail = null
- return ..()
-
-
/obj/item/circuit_component/arrest_console_data/register_usb_parent(atom/movable/parent)
. = ..()
if(istype(parent, /obj/machinery/computer/secure_data))
@@ -150,13 +144,6 @@
new_status_set = add_output_port("Set Status", PORT_TYPE_STRING)
on_fail = add_output_port("Failed", PORT_TYPE_SIGNAL)
-/obj/item/circuit_component/arrest_console_arrest/Destroy()
- targets = null
- new_status = null
- new_status_set = null
- on_fail = null
- return ..()
-
/obj/item/circuit_component/arrest_console_arrest/input_received(datum/port/input/port)
. = ..()
if(.)
diff --git a/code/game/machinery/computer/tram_controls.dm b/code/game/machinery/computer/tram_controls.dm
index 132f9c9bb1..535cda95cd 100644
--- a/code/game/machinery/computer/tram_controls.dm
+++ b/code/game/machinery/computer/tram_controls.dm
@@ -139,14 +139,6 @@
UnregisterSignal(computer.tram_part, list(COMSIG_TRAM_SET_TRAVELLING, COMSIG_TRAM_TRAVEL))
return ..()
-/obj/item/circuit_component/tram_controls/Destroy()
- new_destination = null
- trigger_move = null
- location = null
- travelling_output = null
- computer = null
- return ..()
-
/obj/item/circuit_component/tram_controls/input_received(datum/port/input/port)
. = ..()
if (.)
diff --git a/code/game/machinery/porta_turret/portable_turret_construct.dm b/code/game/machinery/porta_turret/portable_turret_construct.dm
index d3c7817224..38d2392684 100644
--- a/code/game/machinery/porta_turret/portable_turret_construct.dm
+++ b/code/game/machinery/porta_turret/portable_turret_construct.dm
@@ -19,6 +19,26 @@
var/finish_name = "turret" //the name applied to the product turret
var/obj/item/gun/installed_gun = null
+/obj/machinery/porta_turret_construct/examine(mob/user)
+ . = ..()
+ switch(build_step)
+ if(PTURRET_UNSECURED)
+ . += span_notice("The external bolts are unwrenched, and the frame could be pried apart.")
+ if(PTURRET_BOLTED)
+ . += span_notice("The frame requires metal for its internal armor, the external bolts are wrenched in place.")
+ if(PTURRET_START_INTERNAL_ARMOUR)
+ . += span_notice("The turret's armor needs to be bolted in place, the armor looked like it could be welded out.")
+ if(PTURRET_INTERNAL_ARMOUR_ON)
+ . += span_notice("The turret requires an energy based gun to function, the armor is secured by bolts.")
+ if(PTURRET_GUN_EQUIPPED)
+ . += span_notice("The turret requires an proximity sensor to function. The energy gun could be removed.")
+ if(PTURRET_SENSORS_ON)
+ . += span_notice("The turret's access hatch is unscrewed. The proximity sensor could be removed.")
+ if(PTURRET_CLOSED)
+ . += span_notice("The turret requires metal for its external armor, the access hatch could be unscrewed.")
+ if(PTURRET_START_EXTERNAL_ARMOUR)
+ . += span_notice("The turret's armor needs to be welded in place, the armor looks like it could be pried off.")
+
/obj/machinery/porta_turret_construct/attackby(obj/item/I, mob/user, params)
//this is a bit unwieldy but self-explanatory
switch(build_step)
diff --git a/code/game/machinery/scan_gate.dm b/code/game/machinery/scan_gate.dm
index 9fd3f0d851..c052f69fe7 100644
--- a/code/game/machinery/scan_gate.dm
+++ b/code/game/machinery/scan_gate.dm
@@ -1,6 +1,5 @@
#define SCANGATE_NONE "Off"
#define SCANGATE_MINDSHIELD "Mindshield"
-#define SCANGATE_NANITES "Nanites"
#define SCANGATE_DISEASE "Disease"
#define SCANGATE_GUNS "Guns"
#define SCANGATE_WANTED "Wanted"
@@ -36,8 +35,6 @@
var/scangate_mode = SCANGATE_NONE
///Is searching for a disease, what severity is enough to trigger the gate?
var/disease_threshold = DISEASE_SEVERITY_MINOR
- ///If scanning for a nanite strain, what cloud is it looking for?
- var/nanite_cloud = 1
///If scanning for a specific species, what species is it looking for?
var/detect_species = SCANGATE_HUMAN
///Flips all scan results for inverse scanning. Signals if scan returns false.
@@ -134,14 +131,6 @@
if(SCANGATE_MINDSHIELD)
if(HAS_TRAIT(M, TRAIT_MINDSHIELD))
beep = TRUE
- if(SCANGATE_NANITES)
- if(SEND_SIGNAL(M, COMSIG_HAS_NANITES))
- if(nanite_cloud)
- var/datum/component/nanites/nanites = M.GetComponent(/datum/component/nanites)
- if(nanites && nanites.cloud_id == nanite_cloud)
- beep = TRUE
- else
- beep = TRUE
if(SCANGATE_DISEASE)
if(iscarbon(M))
var/mob/living/carbon/C = M
@@ -227,7 +216,6 @@
data["locked"] = locked
data["scan_mode"] = scangate_mode
data["reverse"] = reverse
- data["nanite_cloud"] = nanite_cloud
data["disease_threshold"] = disease_threshold
data["target_species"] = detect_species
data["target_nutrition"] = detect_nutrition
@@ -254,10 +242,6 @@
var/new_threshold = params["new_threshold"]
disease_threshold = new_threshold
. = TRUE
- if("set_nanite_cloud")
- var/new_cloud = text2num(params["new_cloud"])
- nanite_cloud = clamp(round(new_cloud, 1), 1, 100)
- . = TRUE
//Some species are not scannable, like abductors (too unknown), androids (too artificial) or skeletons (too magic)
if("set_target_species")
var/new_species = params["new_species"]
@@ -279,7 +263,6 @@
#undef SCANGATE_NONE
#undef SCANGATE_MINDSHIELD
-#undef SCANGATE_NANITES
#undef SCANGATE_DISEASE
#undef SCANGATE_GUNS
#undef SCANGATE_WANTED
diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm
index e4559484ce..bb1613a116 100644
--- a/code/game/objects/effects/glowshroom.dm
+++ b/code/game/objects/effects/glowshroom.dm
@@ -1,6 +1,6 @@
-#define GLOWSHROOM_SPREAD_BASE_DIMINISH_FACTOR 10
-#define GLOWSHROOM_SPREAD_DIMINISH_FACTOR_PER_GLOWSHROOM 0.2
-#define GLOWSHROOM_BASE_INTEGRITY 60
+
+GLOBAL_VAR_INIT(glowshrooms, 0)
+
/obj/structure/glowshroom
name = "glowshroom"
desc = "Mycena Bregprox, a species of mushroom that glows in the dark."
@@ -252,9 +252,3 @@
myseed.potency = 50
myseed.endurance = 50
myseed.yield = 5
-
-
-
-#undef GLOWSHROOM_SPREAD_BASE_DIMINISH_FACTOR
-#undef GLOWSHROOM_SPREAD_DIMINISH_FACTOR_PER_GLOWSHROOM
-#undef GLOWSHROOM_BASE_INTEGRITY
diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm
index e5bdececf7..ff6843bfc2 100644
--- a/code/game/objects/effects/misc.dm
+++ b/code/game/objects/effects/misc.dm
@@ -65,6 +65,9 @@
/obj/effect/abstract/marker/at
name = "active turf marker"
+/obj/effect/abstract/marker/intercom
+ name = "intercom range marker"
+ color = COLOR_YELLOW
/obj/effect/dummy/lighting_obj
name = "lighting fx obj"
diff --git a/code/game/objects/effects/spawners/bundle.dm b/code/game/objects/effects/spawners/bundle.dm
index 3e8e2d070f..f6115e2f5b 100644
--- a/code/game/objects/effects/spawners/bundle.dm
+++ b/code/game/objects/effects/spawners/bundle.dm
@@ -63,6 +63,15 @@
/obj/item/clothing/under/suit/black,
/obj/item/clothing/head/that)
+/obj/effect/spawner/bundle/costume/referee
+ name = "referee costume spawner"
+ items = list(
+ /obj/item/clothing/mask/whistle,
+ /obj/item/clothing/gloves/color/latex,
+ /obj/item/clothing/shoes/laceup,
+ /obj/item/clothing/head/soft/black,
+ /obj/item/clothing/under/costume/referee)
+
/obj/effect/spawner/bundle/costume/highlander
name = "highlander costume spawner"
items = list(
diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm
index 9e52d8279d..9bf1f1ed28 100644
--- a/code/game/objects/effects/spawners/lootdrop.dm
+++ b/code/game/objects/effects/spawners/lootdrop.dm
@@ -489,11 +489,6 @@
/obj/item/circuitboard/computer/teleporter,
/obj/item/circuitboard/machine/destructive_analyzer,
/obj/item/circuitboard/computer/rdconsole,
- /obj/item/circuitboard/computer/nanite_chamber_control,
- /obj/item/circuitboard/computer/nanite_cloud_controller,
- /obj/item/circuitboard/machine/nanite_chamber,
- /obj/item/circuitboard/machine/nanite_programmer,
- /obj/item/circuitboard/machine/nanite_program_hub,
/obj/item/circuitboard/computer/scan_consolenew,
/obj/item/circuitboard/machine/dnascanner
)
diff --git a/code/game/objects/items/bouquets.dm b/code/game/objects/items/bouquets.dm
new file mode 100644
index 0000000000..c4360015a4
--- /dev/null
+++ b/code/game/objects/items/bouquets.dm
@@ -0,0 +1,21 @@
+// Bouquets
+/obj/item/bouquet
+ name = "mixed bouquet"
+ desc = "A bouquet of sunflowers, lilies, and geraniums. How delightful."
+ icon = 'icons/obj/items_and_weapons.dmi'
+ icon_state = "mixedbouquet"
+
+/obj/item/bouquet/sunflower
+ name = "sunflower bouquet"
+ desc = "A bright bouquet of sunflowers."
+ icon_state = "sunbouquet"
+
+/obj/item/bouquet/poppy
+ name = "poppy bouquet"
+ desc = "A bouquet of poppies. You feel loved just looking at it."
+ icon_state = "poppybouquet"
+
+/obj/item/bouquet/rose
+ name = "rose bouquet"
+ desc = "A bouquet of roses. A bundle of love."
+ icon_state = "rosebouquet"
diff --git a/code/game/objects/items/choice_beacon.dm b/code/game/objects/items/choice_beacon.dm
new file mode 100644
index 0000000000..7b43a6205c
--- /dev/null
+++ b/code/game/objects/items/choice_beacon.dm
@@ -0,0 +1,139 @@
+/obj/item/choice_beacon
+ name = "choice beacon"
+ desc = "Hey, why are you viewing this?!! Please let CentCom know about this odd occurrence."
+ icon = 'icons/obj/device.dmi'
+ icon_state = "gangtool-blue"
+ inhand_icon_state = "radio"
+ var/uses = 1
+
+/obj/item/choice_beacon/attack_self(mob/user)
+ if(canUseBeacon(user))
+ generate_options(user)
+
+/obj/item/choice_beacon/proc/generate_display_names() // return the list that will be used in the choice selection. entries should be in (type.name = type) fashion. see choice_beacon/hero for how this is done.
+ return list()
+
+/obj/item/choice_beacon/proc/canUseBeacon(mob/living/user)
+ if(user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
+ return TRUE
+ else
+ playsound(src, 'sound/machines/buzz-sigh.ogg', 40, TRUE)
+ return FALSE
+
+/obj/item/choice_beacon/proc/generate_options(mob/living/M)
+ var/list/display_names = generate_display_names()
+ if(!display_names.len)
+ return
+ var/choice = input(M,"Which item would you like to order?","Select an Item") as null|anything in sortList(display_names)
+ if(!choice || !M.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
+ return
+
+ spawn_option(display_names[choice],M)
+ uses--
+ if(!uses)
+ qdel(src)
+ else
+ to_chat(M, span_notice("[uses] use[uses > 1 ? "s" : ""] remaining on the [src]."))
+
+/obj/item/choice_beacon/proc/spawn_option(obj/choice,mob/living/M)
+ podspawn(list(
+ "target" = get_turf(src),
+ "style" = STYLE_BLUESPACE,
+ "spawn" = choice,
+ ))
+ var/msg = "After making your selection, you notice a strange target on the ground. It might be best to step back!"
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(istype(H.ears, /obj/item/radio/headset))
+ msg = "You hear something crackle in your ears for a moment before a voice speaks. \"Please stand by for a message from Central Command. Message as follows: [span_bold("Item request received. Your package is inbound, please stand back from the landing site.")] Message ends.\""
+ to_chat(M, msg)
+
+/obj/item/choice_beacon/ingredient
+ name = "ingredient delivery beacon"
+ desc = "Summon a box of ingredients to help you get started cooking."
+ icon_state = "gangtool-white"
+
+/obj/item/choice_beacon/ingredient/generate_display_names()
+ var/list/ingredients = list()
+ for(var/V in subtypesof(/obj/item/storage/box/ingredients))
+ var/obj/item/storage/box/ingredients/A = V
+ ingredients[initial(A.theme_name)] = A
+ return ingredients
+
+/obj/item/choice_beacon/ingredient/spawn_option(obj/choice,mob/living/M)
+ new choice(get_turf(M))
+ to_chat(M, span_hear("You hear something crackle from the beacon for a moment before a voice speaks. \"Please stand by for a message from Sophronia Broadcasting. Message as follows: Please enjoy your Sophronia Broadcasting's 'Plasteel Chef' Ingredients Box, exactly as shown in the hit show! Message ends.\""))
+
+/obj/item/choice_beacon/hero
+ name = "heroic beacon"
+ desc = "To summon heroes from the past to protect the future."
+
+/obj/item/choice_beacon/hero/generate_display_names()
+ var/static/list/hero_item_list
+ if(!hero_item_list)
+ hero_item_list = list()
+ var/list/templist = typesof(/obj/item/storage/box/hero) //we have to convert type = name to name = type, how lovely!
+ for(var/V in templist)
+ var/atom/A = V
+ hero_item_list[initial(A.name)] = A
+ return hero_item_list
+
+/obj/item/choice_beacon/hero/spawn_option(obj/choice,mob/living/M)
+ new choice(get_turf(M))
+ to_chat(M, span_hear("You hear something crackle from the beacon for a moment before a voice speaks. \"Please stand by for a message from Sophronia Broadcasting. Message as follows: Please enjoy your Sophronia Broadcasting's 'History Comes Alive branded' Costume Set, exactly as shown in the hit show! Message ends.\""))
+
+/obj/item/choice_beacon/augments
+ name = "augment beacon"
+ desc = "Summons augmentations. Can be used 3 times!"
+ uses = 3
+
+/obj/item/choice_beacon/augments/generate_display_names()
+ var/static/list/augment_list
+ if(!augment_list)
+ augment_list = list()
+ var/list/templist = list(
+ /obj/item/organ/cyberimp/brain/anti_drop,
+ /obj/item/organ/cyberimp/arm/toolset,
+ /obj/item/organ/cyberimp/arm/surgery,
+ /obj/item/organ/cyberimp/chest/thrusters,
+ /obj/item/organ/lungs/cybernetic/tier3,
+ /obj/item/organ/liver/cybernetic/tier3) //cyberimplants range from a nice bonus to fucking broken bullshit so no subtypesof
+ for(var/V in templist)
+ var/atom/A = V
+ augment_list[initial(A.name)] = A
+ return augment_list
+
+/obj/item/choice_beacon/augments/spawn_option(obj/choice,mob/living/M)
+ new choice(get_turf(M))
+ to_chat(M, span_hear("You hear something crackle from the beacon for a moment before a voice speaks. \"Please stand by for a message from S.E.L.F. Message as follows: Item request received. Your package has been transported, use the autosurgeon supplied to apply the upgrade. Message ends.\""))
+
+/obj/item/choice_beacon/holy
+ name = "armaments beacon"
+ desc = "Contains a set of armaments for the chaplain."
+
+/obj/item/choice_beacon/holy/canUseBeacon(mob/living/user)
+ if(user.mind && user.mind.holy_role)
+ return ..()
+ else
+ playsound(src, 'sound/machines/buzz-sigh.ogg', 40, TRUE)
+ return FALSE
+
+/obj/item/choice_beacon/holy/generate_display_names()
+ var/static/list/holy_item_list
+ if(!holy_item_list)
+ holy_item_list = list()
+ var/list/templist = typesof(/obj/item/storage/box/holy)
+ for(var/V in templist)
+ var/atom/A = V
+ holy_item_list[initial(A.name)] = A
+ return holy_item_list
+
+/obj/item/choice_beacon/holy/spawn_option(obj/choice,mob/living/M)
+ if(!GLOB.holy_armor_type)
+ ..()
+ playsound(src, 'sound/effects/pray_chaplain.ogg', 40, TRUE)
+ SSblackbox.record_feedback("tally", "chaplain_armor", 1, "[choice]")
+ GLOB.holy_armor_type = choice
+ else
+ to_chat(M, span_warning("A selection has already been made. Self-Destructing..."))
+ return
diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm
index 6c01db3872..b37d5c7d87 100644
--- a/code/game/objects/items/circuitboards/computer_circuitboards.dm
+++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm
@@ -364,16 +364,6 @@
greyscale_colors = CIRCUIT_COLOR_SCIENCE
build_path = /obj/machinery/computer/mecha
-/obj/item/circuitboard/computer/nanite_chamber_control
- name = "Nanite Chamber Control (Computer Board)"
- greyscale_colors = CIRCUIT_COLOR_SCIENCE
- build_path = /obj/machinery/computer/nanite_chamber_control
-
-/obj/item/circuitboard/computer/nanite_cloud_controller
- name = "Nanite Cloud Control (Computer Board)"
- greyscale_colors = CIRCUIT_COLOR_SCIENCE
- build_path = /obj/machinery/computer/nanite_cloud_controller
-
/obj/item/circuitboard/computer/rdconsole
name = "R&D Console (Computer Board)"
greyscale_colors = CIRCUIT_COLOR_SCIENCE
diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm
index 9a8c25187b..a43f6bd92f 100644
--- a/code/game/objects/items/circuitboards/machine_circuitboards.dm
+++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm
@@ -885,32 +885,6 @@
/obj/item/stock_parts/manipulator = 1)
needs_anchored = FALSE
-/obj/item/circuitboard/machine/nanite_chamber
- name = "Nanite Chamber (Machine Board)"
- greyscale_colors = CIRCUIT_COLOR_SCIENCE
- build_path = /obj/machinery/nanite_chamber
- req_components = list(
- /obj/item/stock_parts/scanning_module = 2,
- /obj/item/stock_parts/micro_laser = 2,
- /obj/item/stock_parts/manipulator = 1)
-
-/obj/item/circuitboard/machine/nanite_program_hub
- name = "Nanite Program Hub (Machine Board)"
- greyscale_colors = CIRCUIT_COLOR_SCIENCE
- build_path = /obj/machinery/nanite_program_hub
- req_components = list(
- /obj/item/stock_parts/matter_bin = 1,
- /obj/item/stock_parts/manipulator = 1)
-
-/obj/item/circuitboard/machine/nanite_programmer
- name = "Nanite Programmer (Machine Board)"
- greyscale_colors = CIRCUIT_COLOR_SCIENCE
- build_path = /obj/machinery/nanite_programmer
- req_components = list(
- /obj/item/stock_parts/manipulator = 2,
- /obj/item/stock_parts/micro_laser = 2,
- /obj/item/stock_parts/scanning_module = 1)
-
/obj/item/circuitboard/machine/processor/slime
name = "Slime Processor (Machine Board)"
greyscale_colors = CIRCUIT_COLOR_SCIENCE
@@ -921,27 +895,6 @@
greyscale_colors = CIRCUIT_COLOR_SCIENCE
build_path = /obj/machinery/rnd/production/protolathe/department/science
-/obj/item/circuitboard/machine/public_nanite_chamber
- name = "Public Nanite Chamber (Machine Board)"
- greyscale_colors = CIRCUIT_COLOR_SCIENCE
- build_path = /obj/machinery/public_nanite_chamber
- var/cloud_id = 1
- req_components = list(
- /obj/item/stock_parts/micro_laser = 2,
- /obj/item/stock_parts/manipulator = 1)
-
-/obj/item/circuitboard/machine/public_nanite_chamber/multitool_act(mob/living/user)
- . = ..()
- var/new_cloud = input("Set the public nanite chamber's Cloud ID (1-100).", "Cloud ID", cloud_id) as num|null
- if(!new_cloud || (loc != user))
- to_chat(user, span_warning("You must hold the circuitboard to change its Cloud ID!"))
- return
- cloud_id = clamp(round(new_cloud, 1), 1, 100)
-
-/obj/item/circuitboard/machine/public_nanite_chamber/examine(mob/user)
- . = ..()
- . += "Cloud ID is currently set to [cloud_id]."
-
/obj/item/circuitboard/machine/quantumpad
name = "Quantum Pad (Machine Board)"
greyscale_colors = CIRCUIT_COLOR_SCIENCE
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 5b76faea2f..183022b171 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -6,7 +6,6 @@ T-RAY
HEALTH ANALYZER
GAS ANALYZER
SLIME SCANNER
-NANITE SCANNER
GENE SCANNER
*/
@@ -412,7 +411,6 @@ GENE SCANNER
render_list += "Detected cybernetic modifications:\n"
render_list += "[cyberimp_detect]\n"
- SEND_SIGNAL(M, COMSIG_NANITE_SCAN, user, FALSE)
to_chat(user, jointext(render_list, ""), trailing_newline = FALSE) // we handled the last
so we don't need handholding
/proc/chemscan(mob/living/user, mob/living/M)
@@ -778,35 +776,6 @@ GENE SCANNER
\n[span_notice("Progress in core mutation: [T.applied] / [SLIME_EXTRACT_CROSSING_REQUIRED]")]"
to_chat(user, to_render + "\n========================")
-
-/obj/item/nanite_scanner
- name = "nanite scanner"
- icon = 'icons/obj/device.dmi'
- icon_state = "nanite_scanner"
- inhand_icon_state = "electronic"
- worn_icon_state = "electronic"
- lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
- desc = "A hand-held body scanner able to detect nanites and their programming."
- flags_1 = CONDUCT_1
- item_flags = NOBLUDGEON
- slot_flags = ITEM_SLOT_BELT
- throwforce = 3
- w_class = WEIGHT_CLASS_TINY
- throw_speed = 3
- throw_range = 7
- custom_materials = list(/datum/material/iron=200)
-
-/obj/item/nanite_scanner/attack(mob/living/M, mob/living/carbon/human/user)
- user.visible_message(span_notice("[user] analyzes [M]'s nanites."), \
- span_notice("You analyze [M]'s nanites."))
-
- add_fingerprint(user)
-
- var/response = SEND_SIGNAL(M, COMSIG_NANITE_SCAN, user, TRUE)
- if(!response)
- to_chat(user, span_info("No nanites detected in the subject."))
-
/obj/item/sequence_scanner
name = "genetic sequence scanner"
icon = 'icons/obj/device.dmi'
diff --git a/code/game/objects/items/granters.dm b/code/game/objects/items/granters.dm
index 48d4e4005f..5e8976e58d 100644
--- a/code/game/objects/items/granters.dm
+++ b/code/game/objects/items/granters.dm
@@ -444,3 +444,18 @@
/obj/item/book/granter/crafting_recipe/pipegun_prime/recoil(mob/living/carbon/user)
to_chat(user, span_warning("The book turns to dust in your hands."))
qdel(src)
+
+/obj/item/book/granter/crafting_recipe/trash_cannon
+ name = "diary of a demoted engineer"
+ desc = "A lost journal. The engineer seems very deranged about their demotion."
+ crafting_recipe_types = list(
+ /datum/crafting_recipe/trash_cannon,
+ /datum/crafting_recipe/trashball,
+ )
+ icon_state = "book1"
+ oneuse = TRUE
+ remarks = list("\"I'll show them! I'll build a CANNON!\"", "\"Gunpowder is ideal, but i'll have to improvise...\"", "\"I savor the look on the CE's face when I BLOW down the walls to engineering!\"", "\"If the supermatter gets loose from my rampage, so be it!\"", "\"I'VE GONE COMPLETELY MENTAL!\"")
+
+/obj/item/book/granter/crafting_recipe/trash_cannon/recoil(mob/living/carbon/user)
+ to_chat(user, span_warning("The book turns to dust in your hands."))
+ qdel(src)
diff --git a/code/game/objects/items/gun_maintenance.dm b/code/game/objects/items/gun_maintenance.dm
new file mode 100644
index 0000000000..0e8ae498a5
--- /dev/null
+++ b/code/game/objects/items/gun_maintenance.dm
@@ -0,0 +1,6 @@
+/obj/item/gun_maintenance_supplies
+ name = "gun maintenance supplies"
+ desc = "plastic box containing gun maintenance supplies and spare parts. Use them on a Mosin Nagant to clean it."
+ icon = 'icons/obj/storage.dmi'
+ icon_state = "plasticbox"
+ w_class = WEIGHT_CLASS_SMALL
diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm
index c8a5c05214..0aa2211581 100644
--- a/code/game/objects/items/holy_weapons.dm
+++ b/code/game/objects/items/holy_weapons.dm
@@ -40,59 +40,6 @@
slowdown = 0
clothing_flags = NONE
-/obj/item/choice_beacon/holy
- name = "armaments beacon"
- desc = "Contains a set of armaments for the chaplain."
-
-/obj/item/choice_beacon/holy/canUseBeacon(mob/living/user)
- if(user.mind && user.mind.holy_role)
- return ..()
- else
- playsound(src, 'sound/machines/buzz-sigh.ogg', 40, TRUE)
- return FALSE
-
-/obj/item/choice_beacon/holy/generate_display_names()
- var/static/list/holy_item_list
- if(!holy_item_list)
- holy_item_list = list()
- var/list/templist = typesof(/obj/item/storage/box/holy)
- for(var/V in templist)
- var/atom/A = V
- holy_item_list[initial(A.name)] = A
- return holy_item_list
-
-/obj/item/choice_beacon/holy/spawn_option(obj/choice,mob/living/M)
- if(!GLOB.holy_armor_type)
- ..()
- playsound(src, 'sound/effects/pray_chaplain.ogg', 40, TRUE)
- SSblackbox.record_feedback("tally", "chaplain_armor", 1, "[choice]")
- GLOB.holy_armor_type = choice
- else
- to_chat(M, span_warning("A selection has already been made. Self-Destructing..."))
- return
-
-
-/obj/item/storage/box/holy/clock
- name = "Forgotten kit"
-
-/obj/item/storage/box/holy/clock/PopulateContents()
- new /obj/item/clothing/head/helmet/chaplain/clock(src)
- new /obj/item/clothing/suit/armor/riot/chaplain/clock(src)
-
-/obj/item/storage/box/holy
- name = "Templar Kit"
-
-/obj/item/storage/box/holy/PopulateContents()
- new /obj/item/clothing/head/helmet/chaplain(src)
- new /obj/item/clothing/suit/armor/riot/chaplain(src)
-
-/obj/item/storage/box/holy/student
- name = "Profane Scholar Kit"
-
-/obj/item/storage/box/holy/student/PopulateContents()
- new /obj/item/clothing/suit/armor/riot/chaplain/studentuni(src)
- new /obj/item/clothing/head/helmet/chaplain/cage(src)
-
/obj/item/clothing/suit/armor/riot/chaplain/studentuni
name = "student robe"
desc = "The uniform of a bygone institute of learning."
@@ -109,13 +56,6 @@
dynamic_hair_suffix = ""
worn_y_offset = 7
-/obj/item/storage/box/holy/sentinel
- name = "Stone Sentinel Kit"
-
-/obj/item/storage/box/holy/sentinel/PopulateContents()
- new /obj/item/clothing/suit/armor/riot/chaplain/ancient(src)
- new /obj/item/clothing/head/helmet/chaplain/ancient(src)
-
/obj/item/clothing/head/helmet/chaplain/ancient
name = "ancient helmet"
desc = "None may pass!"
@@ -128,13 +68,6 @@
icon_state = "knight_ancient"
inhand_icon_state = "knight_ancient"
-/obj/item/storage/box/holy/witchhunter
- name = "Witchhunter Kit"
-
-/obj/item/storage/box/holy/witchhunter/PopulateContents()
- new /obj/item/clothing/suit/armor/riot/chaplain/witchhunter(src)
- new /obj/item/clothing/head/helmet/chaplain/witchunter_hat(src)
-
/obj/item/clothing/suit/armor/riot/chaplain/witchhunter
name = "witchunter garb"
desc = "This worn outfit saw much use back in the day."
@@ -150,13 +83,6 @@
flags_cover = HEADCOVERSEYES
flags_inv = HIDEEYES|HIDEHAIR
-/obj/item/storage/box/holy/adept
- name = "Divine Adept Kit"
-
-/obj/item/storage/box/holy/adept/PopulateContents()
- new /obj/item/clothing/suit/armor/riot/chaplain/adept(src)
- new /obj/item/clothing/head/helmet/chaplain/adept(src)
-
/obj/item/clothing/head/helmet/chaplain/adept
name = "adept hood"
desc = "Its only heretical when others do it."
@@ -171,16 +97,6 @@
icon_state = "crusader"
inhand_icon_state = "crusader"
-/obj/item/storage/box/holy/follower
- name = "Followers of the Chaplain Kit"
-
-/obj/item/storage/box/holy/follower/PopulateContents()
- new /obj/item/clothing/suit/hooded/chaplain_hoodie/leader(src)
- new /obj/item/clothing/suit/hooded/chaplain_hoodie(src)
- new /obj/item/clothing/suit/hooded/chaplain_hoodie(src)
- new /obj/item/clothing/suit/hooded/chaplain_hoodie(src)
- new /obj/item/clothing/suit/hooded/chaplain_hoodie(src)
-
/obj/item/clothing/suit/hooded/chaplain_hoodie
name = "follower hoodie"
desc = "Hoodie made for acolytes of the chaplain."
diff --git a/code/game/objects/items/implants/implant_deathrattle.dm b/code/game/objects/items/implants/implant_deathrattle.dm
index dd41812cb5..a7afe701c2 100644
--- a/code/game/objects/items/implants/implant_deathrattle.dm
+++ b/code/game/objects/items/implants/implant_deathrattle.dm
@@ -68,7 +68,7 @@
if(implant.imp_in == owner || !implant.imp_in)
continue
- // Deliberately the same message framing as nanite message + ghost deathrattle
+ // Deliberately the same message framing as ghost deathrattle
var/mob/living/recipient = implant.imp_in
to_chat(recipient, "You hear a strange, robotic voice in your head... \"[span_robot("[name] has died at [area].")]\"")
recipient.playsound_local(get_turf(recipient), sound, vol = 75, vary = FALSE, pressure_affected = FALSE, use_reverb = FALSE)
diff --git a/code/game/objects/items/miscellaneous.dm b/code/game/objects/items/miscellaneous.dm
deleted file mode 100644
index 4bd6c9f00d..0000000000
--- a/code/game/objects/items/miscellaneous.dm
+++ /dev/null
@@ -1,407 +0,0 @@
-/obj/item/choice_beacon
- name = "choice beacon"
- desc = "Hey, why are you viewing this?!! Please let CentCom know about this odd occurrence."
- icon = 'icons/obj/device.dmi'
- icon_state = "gangtool-blue"
- inhand_icon_state = "radio"
- var/uses = 1
-
-/obj/item/choice_beacon/attack_self(mob/user)
- if(canUseBeacon(user))
- generate_options(user)
-
-/obj/item/choice_beacon/proc/generate_display_names() // return the list that will be used in the choice selection. entries should be in (type.name = type) fashion. see choice_beacon/hero for how this is done.
- return list()
-
-/obj/item/choice_beacon/proc/canUseBeacon(mob/living/user)
- if(user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
- return TRUE
- else
- playsound(src, 'sound/machines/buzz-sigh.ogg', 40, TRUE)
- return FALSE
-
-/obj/item/choice_beacon/proc/generate_options(mob/living/M)
- var/list/display_names = generate_display_names()
- if(!display_names.len)
- return
- var/choice = input(M,"Which item would you like to order?","Select an Item") as null|anything in sortList(display_names)
- if(!choice || !M.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
- return
-
- spawn_option(display_names[choice],M)
- uses--
- if(!uses)
- qdel(src)
- else
- to_chat(M, span_notice("[uses] use[uses > 1 ? "s" : ""] remaining on the [src]."))
-
-/obj/item/choice_beacon/proc/spawn_option(obj/choice,mob/living/M)
- podspawn(list(
- "target" = get_turf(src),
- "style" = STYLE_BLUESPACE,
- "spawn" = choice,
- ))
- var/msg = "After making your selection, you notice a strange target on the ground. It might be best to step back!"
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(istype(H.ears, /obj/item/radio/headset))
- msg = "You hear something crackle in your ears for a moment before a voice speaks. \"Please stand by for a message from Central Command. Message as follows: [span_bold("Item request received. Your package is inbound, please stand back from the landing site.")] Message ends.\""
- to_chat(M, msg)
-
-/obj/item/choice_beacon/ingredient
- name = "ingredient delivery beacon"
- desc = "Summon a box of ingredients to help you get started cooking."
- icon_state = "gangtool-white"
-
-/obj/item/choice_beacon/ingredient/generate_display_names()
- var/list/ingredients = list()
- for(var/V in subtypesof(/obj/item/storage/box/ingredients))
- var/obj/item/storage/box/ingredients/A = V
- ingredients[initial(A.theme_name)] = A
- return ingredients
-
-/obj/item/choice_beacon/ingredient/spawn_option(obj/choice,mob/living/M)
- new choice(get_turf(M))
- to_chat(M, span_hear("You hear something crackle from the beacon for a moment before a voice speaks. \"Please stand by for a message from Sophronia Broadcasting. Message as follows: Please enjoy your Sophronia Broadcasting's 'Plasteel Chef' Ingredients Box, exactly as shown in the hit show! Message ends.\""))
-
-/obj/item/storage/box/ingredients //This box is for the randomly chosen version the chef used to spawn with, it shouldn't actually exist.
- name = "ingredients box"
- illustration = "fruit"
- var/theme_name
-
-/obj/item/storage/box/ingredients/Initialize()
- . = ..()
- if(theme_name)
- name = "[name] ([theme_name])"
- desc = "A box containing supplementary ingredients for the aspiring chef. The box's theme is '[theme_name]'."
- inhand_icon_state = "syringe_kit"
-
-/obj/item/storage/box/ingredients/wildcard
- theme_name = "wildcard"
-
-/obj/item/storage/box/ingredients/wildcard/PopulateContents()
- for(var/i in 1 to 7)
- var/randomFood = pick(/obj/item/food/grown/chili,
- /obj/item/food/grown/tomato,
- /obj/item/food/grown/carrot,
- /obj/item/food/grown/potato,
- /obj/item/food/grown/potato/sweet,
- /obj/item/food/grown/apple,
- /obj/item/food/chocolatebar,
- /obj/item/food/grown/cherries,
- /obj/item/food/grown/banana,
- /obj/item/food/grown/cabbage,
- /obj/item/food/grown/soybeans,
- /obj/item/food/grown/corn,
- /obj/item/food/grown/mushroom/plumphelmet,
- /obj/item/food/grown/mushroom/chanterelle)
- new randomFood(src)
-
-/obj/item/storage/box/ingredients/fiesta
- theme_name = "fiesta"
-
-/obj/item/storage/box/ingredients/fiesta/PopulateContents()
- new /obj/item/food/tortilla(src)
- for(var/i in 1 to 2)
- new /obj/item/food/grown/corn(src)
- new /obj/item/food/grown/soybeans(src)
- new /obj/item/food/grown/chili(src)
-
-/obj/item/storage/box/ingredients/italian
- theme_name = "italian"
-
-/obj/item/storage/box/ingredients/italian/PopulateContents()
- for(var/i in 1 to 3)
- new /obj/item/food/grown/tomato(src)
- new /obj/item/food/meatball(src)
- new /obj/item/reagent_containers/food/drinks/bottle/wine(src)
-
-/obj/item/storage/box/ingredients/vegetarian
- theme_name = "vegetarian"
-
-/obj/item/storage/box/ingredients/vegetarian/PopulateContents()
- for(var/i in 1 to 2)
- new /obj/item/food/grown/carrot(src)
- new /obj/item/food/grown/eggplant(src)
- new /obj/item/food/grown/potato(src)
- new /obj/item/food/grown/apple(src)
- new /obj/item/food/grown/corn(src)
- new /obj/item/food/grown/tomato(src)
-
-/obj/item/storage/box/ingredients/american
- theme_name = "american"
-
-/obj/item/storage/box/ingredients/american/PopulateContents()
- for(var/i in 1 to 2)
- new /obj/item/food/grown/potato(src)
- new /obj/item/food/grown/tomato(src)
- new /obj/item/food/grown/corn(src)
- new /obj/item/food/meatball(src)
-
-/obj/item/storage/box/ingredients/fruity
- theme_name = "fruity"
-
-/obj/item/storage/box/ingredients/fruity/PopulateContents()
- for(var/i in 1 to 2)
- new /obj/item/food/grown/apple(src)
- new /obj/item/food/grown/citrus/orange(src)
- new /obj/item/food/grown/citrus/lemon(src)
- new /obj/item/food/grown/citrus/lime(src)
- new /obj/item/food/grown/watermelon(src)
-
-/obj/item/storage/box/ingredients/sweets
- theme_name = "sweets"
-
-/obj/item/storage/box/ingredients/sweets/PopulateContents()
- for(var/i in 1 to 2)
- new /obj/item/food/grown/cherries(src)
- new /obj/item/food/grown/banana(src)
- new /obj/item/food/chocolatebar(src)
- new /obj/item/food/grown/cocoapod(src)
- new /obj/item/food/grown/apple(src)
-
-/obj/item/storage/box/ingredients/delights
- theme_name = "delights"
-
-/obj/item/storage/box/ingredients/delights/PopulateContents()
- for(var/i in 1 to 2)
- new /obj/item/food/grown/potato/sweet(src)
- new /obj/item/food/grown/bluecherries(src)
- new /obj/item/food/grown/vanillapod(src)
- new /obj/item/food/grown/cocoapod(src)
- new /obj/item/food/grown/berries(src)
-
-/obj/item/storage/box/ingredients/grains
- theme_name = "grains"
-
-/obj/item/storage/box/ingredients/grains/PopulateContents()
- for(var/i in 1 to 3)
- new /obj/item/food/grown/oat(src)
- new /obj/item/food/grown/wheat(src)
- new /obj/item/food/grown/cocoapod(src)
- new /obj/item/reagent_containers/honeycomb(src)
- new /obj/item/seeds/poppy(src)
-
-/obj/item/storage/box/ingredients/carnivore
- theme_name = "carnivore"
-
-/obj/item/storage/box/ingredients/carnivore/PopulateContents()
- new /obj/item/food/meat/slab/bear(src)
- new /obj/item/food/meat/slab/spider(src)
- new /obj/item/food/spidereggs(src)
- new /obj/item/food/fishmeat/carp(src)
- new /obj/item/food/meat/slab/xeno(src)
- new /obj/item/food/meat/slab/corgi(src)
- new /obj/item/food/meatball(src)
-
-/obj/item/storage/box/ingredients/exotic
- theme_name = "exotic"
-
-/obj/item/storage/box/ingredients/exotic/PopulateContents()
- for(var/i in 1 to 2)
- new /obj/item/food/fishmeat/carp(src)
- new /obj/item/food/grown/soybeans(src)
- new /obj/item/food/grown/cabbage(src)
- new /obj/item/food/grown/chili(src)
-
-/obj/item/storage/box/ingredients/random
- theme_name = "random"
- desc = "This box should not exist, contact the proper authorities."
-
-/obj/item/storage/box/ingredients/random/Initialize()
- .=..()
- var/chosen_box = pick(subtypesof(/obj/item/storage/box/ingredients) - /obj/item/storage/box/ingredients/random)
- new chosen_box(loc)
- return INITIALIZE_HINT_QDEL
-
-/obj/item/choice_beacon/hero
- name = "heroic beacon"
- desc = "To summon heroes from the past to protect the future."
-
-/obj/item/choice_beacon/hero/generate_display_names()
- var/static/list/hero_item_list
- if(!hero_item_list)
- hero_item_list = list()
- var/list/templist = typesof(/obj/item/storage/box/hero) //we have to convert type = name to name = type, how lovely!
- for(var/V in templist)
- var/atom/A = V
- hero_item_list[initial(A.name)] = A
- return hero_item_list
-
-/obj/item/choice_beacon/hero/spawn_option(obj/choice,mob/living/M)
- new choice(get_turf(M))
- to_chat(M, span_hear("You hear something crackle from the beacon for a moment before a voice speaks. \"Please stand by for a message from Sophronia Broadcasting. Message as follows: Please enjoy your Sophronia Broadcasting's 'History Comes Alive branded' Costume Set, exactly as shown in the hit show! Message ends.\""))
-
-
-/obj/item/storage/box/hero
- name = "Courageous Tomb Raider - 1940's."
- desc = "This legendary figure of still dubious historical accuracy is thought to have been a world-famous archeologist who embarked on countless adventures in far away lands, along with his trademark whip and fedora hat."
-
-/obj/item/storage/box/hero/PopulateContents()
- new /obj/item/clothing/head/fedora/curator(src)
- new /obj/item/clothing/suit/curator(src)
- new /obj/item/clothing/under/rank/civilian/curator/treasure_hunter(src)
- new /obj/item/clothing/shoes/workboots/mining(src)
- new /obj/item/melee/curator_whip(src)
-
-/obj/item/storage/box/hero/astronaut
- name = "First Man on the Moon - 1960's."
- desc = "One small step for a man, one giant leap for mankind. Relive the beginnings of space exploration with this fully functional set of vintage EVA equipment."
-
-/obj/item/storage/box/hero/astronaut/PopulateContents()
- new /obj/item/clothing/suit/space/nasavoid(src)
- new /obj/item/clothing/head/helmet/space/nasavoid(src)
- new /obj/item/tank/internals/oxygen(src)
- new /obj/item/gps(src)
-
-/obj/item/storage/box/hero/scottish
- name = "Braveheart, the Scottish rebel - 1300's."
- desc = "Seemingly a legendary figure in the battle for Scottish independence, this historical figure is closely associated with blue facepaint, big swords, strange man skirts, and his ever enduring catchphrase: 'FREEDOM!!'"
-
-/obj/item/storage/box/hero/scottish/PopulateContents()
- new /obj/item/clothing/under/costume/kilt(src)
- new /obj/item/claymore/weak/ceremonial(src)
- new /obj/item/toy/crayon/spraycan(src)
- new /obj/item/clothing/shoes/sandal(src)
-
-/obj/item/storage/box/hero/carphunter
- name = "Carp Hunter, Wildlife Expert - 2506."
- desc = "Despite his nickname, this wildlife expert was mainly known as a passionate environmentalist and conservationist, often coming in contact with dangerous wildlife to teach about the beauty of nature."
-
-/obj/item/storage/box/hero/carphunter/PopulateContents()
- new /obj/item/clothing/suit/space/hardsuit/carp/old(src)
- new /obj/item/clothing/mask/gas/carp(src)
- new /obj/item/kitchen/knife/hunting(src)
- new /obj/item/storage/box/papersack/meat(src)
-
-/obj/item/choice_beacon/augments
- name = "augment beacon"
- desc = "Summons augmentations. Can be used 3 times!"
- uses = 3
-
-/obj/item/choice_beacon/augments/generate_display_names()
- var/static/list/augment_list
- if(!augment_list)
- augment_list = list()
- var/list/templist = list(
- /obj/item/organ/cyberimp/brain/anti_drop,
- /obj/item/organ/cyberimp/arm/toolset,
- /obj/item/organ/cyberimp/arm/surgery,
- /obj/item/organ/cyberimp/chest/thrusters,
- /obj/item/organ/lungs/cybernetic/tier3,
- /obj/item/organ/liver/cybernetic/tier3) //cyberimplants range from a nice bonus to fucking broken bullshit so no subtypesof
- for(var/V in templist)
- var/atom/A = V
- augment_list[initial(A.name)] = A
- return augment_list
-
-/obj/item/choice_beacon/augments/spawn_option(obj/choice,mob/living/M)
- new choice(get_turf(M))
- to_chat(M, span_hear("You hear something crackle from the beacon for a moment before a voice speaks. \"Please stand by for a message from S.E.L.F. Message as follows: Item request received. Your package has been transported, use the autosurgeon supplied to apply the upgrade. Message ends.\""))
-
-/obj/item/skub
- desc = "It's skub."
- name = "skub"
- icon = 'icons/obj/items_and_weapons.dmi'
- icon_state = "skub"
- w_class = WEIGHT_CLASS_BULKY
- attack_verb_continuous = list("skubs")
- attack_verb_simple = list("skub")
-
-/obj/item/skub/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/container_item/tank_holder, "holder_skub", FALSE)
-
-/obj/item/skub/suicide_act(mob/living/user)
- user.visible_message(span_suicide("[user] has declared themself as anti-skub! The skub tears them apart!"))
-
- user.gib()
- playsound(src, 'sound/items/eatfood.ogg', 50, TRUE, -1)
- return MANUAL_SUICIDE
-
-/obj/item/virgin_mary
- name = "\proper a picture of the virgin mary"
- desc = "A small, cheap icon depicting the virgin mother."
- icon = 'icons/obj/blackmarket.dmi'
- icon_state = "madonna"
- resistance_flags = FLAMMABLE
- ///Has this item been used already.
- var/used_up = FALSE
- ///List of mobs that have already been mobbed.
- var/static/list/mob_mobs = list()
-
-#define NICKNAME_CAP (MAX_NAME_LEN/2)
-/obj/item/virgin_mary/attackby(obj/item/W, mob/user, params)
- . = ..()
- if(resistance_flags & ON_FIRE)
- return
- if(!burn_paper_product_attackby_check(W, user, TRUE))
- return
- if(used_up)
- return
- if(!isliving(user) || !user.mind) //A sentient mob needs to be burning it, ya cheezit.
- return
- var/mob/living/joe = user
-
- if(joe in mob_mobs) //Only one nickname fuckhead
- to_chat(joe, span_warning("You have already been initiated into the mafioso life."))
- return
-
- to_chat(joe, span_notice("As you burn the picture, a nickname comes to mind..."))
- var/nickname = stripped_input(joe, "Pick a nickname", "Mafioso Nicknames", null, NICKNAME_CAP, TRUE)
- nickname = reject_bad_name(nickname, allow_numbers = FALSE, max_length = NICKNAME_CAP, ascii_only = TRUE)
- if(!nickname)
- return
- var/new_name
- var/space_position = findtext(joe.real_name, " ")
- if(space_position)//Can we find a space?
- new_name = "[copytext(joe.real_name, 1, space_position)] \"[nickname]\" [copytext(joe.real_name, space_position)]"
- else //Append otherwise
- new_name = "[joe.real_name] \"[nickname]\""
- joe.real_name = new_name
- used_up = TRUE
- mob_mobs += joe
- joe.say("My soul will burn like this saint if I betray my family. I enter alive and I will have to get out dead.", forced = /obj/item/virgin_mary)
- to_chat(joe, span_userdanger("Being inducted into the mafia does not grant antagonist status."))
-
-#undef NICKNAME_CAP
-
-/obj/item/virgin_mary/suicide_act(mob/living/user)
- user.visible_message(span_suicide("[user] starts saying their Hail Mary's at a terrifying pace! It looks like [user.p_theyre()] trying to enter the afterlife!"))
- user.say("Hail Mary, full of grace, the Lord is with thee. Blessed are thou amongst women, and blessed is the fruit of thy womb, Jesus. Holy Mary, mother of God, pray for us sinners, now and at the hour of our death. Amen. ", forced = /obj/item/virgin_mary)
- addtimer(CALLBACK(src, .proc/manual_suicide, user), 75)
- addtimer(CALLBACK(user, /atom/movable/proc/say, "O my Mother, preserve me this day from mortal sin..."), 50)
- return MANUAL_SUICIDE
-
-/obj/item/virgin_mary/proc/manual_suicide(mob/living/user)
- user.adjustOxyLoss(200)
- user.death(0)
-
-// Bouquets
-/obj/item/bouquet
- name = "mixed bouquet"
- desc = "A bouquet of sunflowers, lilies, and geraniums. How delightful."
- icon = 'icons/obj/items_and_weapons.dmi'
- icon_state = "mixedbouquet"
-
-/obj/item/bouquet/sunflower
- name = "sunflower bouquet"
- desc = "A bright bouquet of sunflowers."
- icon_state = "sunbouquet"
-
-/obj/item/bouquet/poppy
- name = "poppy bouquet"
- desc = "A bouquet of poppies. You feel loved just looking at it."
- icon_state = "poppybouquet"
-
-/obj/item/bouquet/rose
- name = "rose bouquet"
- desc = "A bouquet of roses. A bundle of love."
- icon_state = "rosebouquet"
-
-/obj/item/gun_maintenance_supplies
- name = "gun maintenance supplies"
- desc = "plastic box containing gun maintenance supplies and spare parts. Use them on a Mosin Nagant to clean it."
- icon = 'icons/obj/storage.dmi'
- icon_state = "plasticbox"
- w_class = WEIGHT_CLASS_SMALL
diff --git a/code/game/objects/items/pinpointer.dm b/code/game/objects/items/pinpointer.dm
index 072dc87cbd..53b65285c8 100644
--- a/code/game/objects/items/pinpointer.dm
+++ b/code/game/objects/items/pinpointer.dm
@@ -100,8 +100,6 @@
var/turf/here = get_turf(src)
var/turf/there = get_turf(H)
if(here && there && (there.z == here.z || (is_station_level(here.z) && is_station_level(there.z)))) // Device and target should be on the same level or different levels of the same station
- if (H in GLOB.nanite_sensors_list)
- return TRUE
if (istype(H.w_uniform, /obj/item/clothing/under))
var/obj/item/clothing/under/U = H.w_uniform
if(U.has_sensor && (U.sensor_mode >= SENSOR_COORDS || ignore_suit_sensor_level)) // Suit sensors must be on maximum or a contractor pinpointer
diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm
index 841b5d834e..c99bdfd2f6 100644
--- a/code/game/objects/items/plushes.dm
+++ b/code/game/objects/items/plushes.dm
@@ -502,7 +502,7 @@
/obj/item/toy/plush/lizard_plushie
name = "lizard plushie"
desc = "An adorable stuffed toy that resembles a lizardperson."
- icon_state = "map_pushie_lizard"
+ icon_state = "map_plushie_lizard"
greyscale_config = /datum/greyscale_config/plush_lizard
attack_verb_continuous = list("claws", "hisses", "tail slaps")
attack_verb_simple = list("claw", "hiss", "tail slap")
diff --git a/code/game/objects/items/pneumaticCannon.dm b/code/game/objects/items/pneumaticCannon.dm
index e00fe68aae..6f4da1b5a9 100644
--- a/code/game/objects/items/pneumaticCannon.dm
+++ b/code/game/objects/items/pneumaticCannon.dm
@@ -83,6 +83,7 @@
else if(W.type == type)
to_chat(user, span_warning("You're fairly certain that putting a pneumatic cannon inside another pneumatic cannon would cause a spacetime disruption."))
else if(W.tool_behaviour == TOOL_WRENCH)
+ playsound(src, 'sound/items/ratchet.ogg', 50, TRUE)
switch(pressureSetting)
if(1)
pressureSetting = 2
diff --git a/code/game/objects/items/skub.dm b/code/game/objects/items/skub.dm
new file mode 100644
index 0000000000..a35f817f54
--- /dev/null
+++ b/code/game/objects/items/skub.dm
@@ -0,0 +1,19 @@
+/obj/item/skub
+ desc = "It's skub."
+ name = "skub"
+ icon = 'icons/obj/items_and_weapons.dmi'
+ icon_state = "skub"
+ w_class = WEIGHT_CLASS_BULKY
+ attack_verb_continuous = list("skubs")
+ attack_verb_simple = list("skub")
+
+/obj/item/skub/ComponentInitialize()
+ . = ..()
+ AddComponent(/datum/component/container_item/tank_holder, "holder_skub", FALSE)
+
+/obj/item/skub/suicide_act(mob/living/user)
+ user.visible_message(span_suicide("[user] has declared themself as anti-skub! The skub tears them apart!"))
+
+ user.gib()
+ playsound(src, 'sound/items/eatfood.ogg', 50, TRUE, -1)
+ return MANUAL_SUICIDE
diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm
index 10a8a18236..4281c26161 100644
--- a/code/game/objects/items/storage/bags.dm
+++ b/code/game/objects/items/storage/bags.dm
@@ -460,6 +460,7 @@
icon_state = "construction_bag"
worn_icon_state = "construction_bag"
desc = "A bag for storing small construction components."
+ slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_POCKETS
resistance_flags = FLAMMABLE
/obj/item/storage/bag/construction/ComponentInitialize()
diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm
index 75b14bd6cb..3dd39d019a 100644
--- a/code/game/objects/items/storage/boxes.dm
+++ b/code/game/objects/items/storage/boxes.dm
@@ -105,14 +105,6 @@
for(var/i in 1 to 7)
new /obj/item/disk/data(src)
-/obj/item/storage/box/disks_nanite
- name = "nanite program disks box"
- illustration = "disk_kit"
-
-/obj/item/storage/box/disks_nanite/PopulateContents()
- for(var/i in 1 to 7)
- new /obj/item/disk/nanite_program(src)
-
// Ordinary survival box
/obj/item/storage/box/survival
name = "survival box"
@@ -1392,3 +1384,246 @@
/obj/item/slimecross/stabilized/rainbow=1,\
)
generate_items_inside(items_inside,src)
+
+/obj/item/storage/box/ingredients //This box is for the randomly chosen version the chef used to spawn with, it shouldn't actually exist.
+ name = "ingredients box"
+ illustration = "fruit"
+ var/theme_name
+
+/obj/item/storage/box/ingredients/Initialize()
+ . = ..()
+ if(theme_name)
+ name = "[name] ([theme_name])"
+ desc = "A box containing supplementary ingredients for the aspiring chef. The box's theme is '[theme_name]'."
+ inhand_icon_state = "syringe_kit"
+
+/obj/item/storage/box/ingredients/wildcard
+ theme_name = "wildcard"
+
+/obj/item/storage/box/ingredients/wildcard/PopulateContents()
+ for(var/i in 1 to 7)
+ var/randomFood = pick(/obj/item/food/grown/chili,
+ /obj/item/food/grown/tomato,
+ /obj/item/food/grown/carrot,
+ /obj/item/food/grown/potato,
+ /obj/item/food/grown/potato/sweet,
+ /obj/item/food/grown/apple,
+ /obj/item/food/chocolatebar,
+ /obj/item/food/grown/cherries,
+ /obj/item/food/grown/banana,
+ /obj/item/food/grown/cabbage,
+ /obj/item/food/grown/soybeans,
+ /obj/item/food/grown/corn,
+ /obj/item/food/grown/mushroom/plumphelmet,
+ /obj/item/food/grown/mushroom/chanterelle)
+ new randomFood(src)
+
+/obj/item/storage/box/ingredients/fiesta
+ theme_name = "fiesta"
+
+/obj/item/storage/box/ingredients/fiesta/PopulateContents()
+ new /obj/item/food/tortilla(src)
+ for(var/i in 1 to 2)
+ new /obj/item/food/grown/corn(src)
+ new /obj/item/food/grown/soybeans(src)
+ new /obj/item/food/grown/chili(src)
+
+/obj/item/storage/box/ingredients/italian
+ theme_name = "italian"
+
+/obj/item/storage/box/ingredients/italian/PopulateContents()
+ for(var/i in 1 to 3)
+ new /obj/item/food/grown/tomato(src)
+ new /obj/item/food/meatball(src)
+ new /obj/item/reagent_containers/food/drinks/bottle/wine(src)
+
+/obj/item/storage/box/ingredients/vegetarian
+ theme_name = "vegetarian"
+
+/obj/item/storage/box/ingredients/vegetarian/PopulateContents()
+ for(var/i in 1 to 2)
+ new /obj/item/food/grown/carrot(src)
+ new /obj/item/food/grown/eggplant(src)
+ new /obj/item/food/grown/potato(src)
+ new /obj/item/food/grown/apple(src)
+ new /obj/item/food/grown/corn(src)
+ new /obj/item/food/grown/tomato(src)
+
+/obj/item/storage/box/ingredients/american
+ theme_name = "american"
+
+/obj/item/storage/box/ingredients/american/PopulateContents()
+ for(var/i in 1 to 2)
+ new /obj/item/food/grown/potato(src)
+ new /obj/item/food/grown/tomato(src)
+ new /obj/item/food/grown/corn(src)
+ new /obj/item/food/meatball(src)
+
+/obj/item/storage/box/ingredients/fruity
+ theme_name = "fruity"
+
+/obj/item/storage/box/ingredients/fruity/PopulateContents()
+ for(var/i in 1 to 2)
+ new /obj/item/food/grown/apple(src)
+ new /obj/item/food/grown/citrus/orange(src)
+ new /obj/item/food/grown/citrus/lemon(src)
+ new /obj/item/food/grown/citrus/lime(src)
+ new /obj/item/food/grown/watermelon(src)
+
+/obj/item/storage/box/ingredients/sweets
+ theme_name = "sweets"
+
+/obj/item/storage/box/ingredients/sweets/PopulateContents()
+ for(var/i in 1 to 2)
+ new /obj/item/food/grown/cherries(src)
+ new /obj/item/food/grown/banana(src)
+ new /obj/item/food/chocolatebar(src)
+ new /obj/item/food/grown/cocoapod(src)
+ new /obj/item/food/grown/apple(src)
+
+/obj/item/storage/box/ingredients/delights
+ theme_name = "delights"
+
+/obj/item/storage/box/ingredients/delights/PopulateContents()
+ for(var/i in 1 to 2)
+ new /obj/item/food/grown/potato/sweet(src)
+ new /obj/item/food/grown/bluecherries(src)
+ new /obj/item/food/grown/vanillapod(src)
+ new /obj/item/food/grown/cocoapod(src)
+ new /obj/item/food/grown/berries(src)
+
+/obj/item/storage/box/ingredients/grains
+ theme_name = "grains"
+
+/obj/item/storage/box/ingredients/grains/PopulateContents()
+ for(var/i in 1 to 3)
+ new /obj/item/food/grown/oat(src)
+ new /obj/item/food/grown/wheat(src)
+ new /obj/item/food/grown/cocoapod(src)
+ new /obj/item/reagent_containers/honeycomb(src)
+ new /obj/item/seeds/poppy(src)
+
+/obj/item/storage/box/ingredients/carnivore
+ theme_name = "carnivore"
+
+/obj/item/storage/box/ingredients/carnivore/PopulateContents()
+ new /obj/item/food/meat/slab/bear(src)
+ new /obj/item/food/meat/slab/spider(src)
+ new /obj/item/food/spidereggs(src)
+ new /obj/item/food/fishmeat/carp(src)
+ new /obj/item/food/meat/slab/xeno(src)
+ new /obj/item/food/meat/slab/corgi(src)
+ new /obj/item/food/meatball(src)
+
+/obj/item/storage/box/ingredients/exotic
+ theme_name = "exotic"
+
+/obj/item/storage/box/ingredients/exotic/PopulateContents()
+ for(var/i in 1 to 2)
+ new /obj/item/food/fishmeat/carp(src)
+ new /obj/item/food/grown/soybeans(src)
+ new /obj/item/food/grown/cabbage(src)
+ new /obj/item/food/grown/chili(src)
+
+/obj/item/storage/box/ingredients/random
+ theme_name = "random"
+ desc = "This box should not exist, contact the proper authorities."
+
+/obj/item/storage/box/ingredients/random/Initialize()
+ .=..()
+ var/chosen_box = pick(subtypesof(/obj/item/storage/box/ingredients) - /obj/item/storage/box/ingredients/random)
+ new chosen_box(loc)
+ return INITIALIZE_HINT_QDEL
+
+/obj/item/storage/box/hero
+ name = "Courageous Tomb Raider - 1940's."
+ desc = "This legendary figure of still dubious historical accuracy is thought to have been a world-famous archeologist who embarked on countless adventures in far away lands, along with his trademark whip and fedora hat."
+
+/obj/item/storage/box/hero/PopulateContents()
+ new /obj/item/clothing/head/fedora/curator(src)
+ new /obj/item/clothing/suit/curator(src)
+ new /obj/item/clothing/under/rank/civilian/curator/treasure_hunter(src)
+ new /obj/item/clothing/shoes/workboots/mining(src)
+ new /obj/item/melee/curator_whip(src)
+
+/obj/item/storage/box/hero/astronaut
+ name = "First Man on the Moon - 1960's."
+ desc = "One small step for a man, one giant leap for mankind. Relive the beginnings of space exploration with this fully functional set of vintage EVA equipment."
+
+/obj/item/storage/box/hero/astronaut/PopulateContents()
+ new /obj/item/clothing/suit/space/nasavoid(src)
+ new /obj/item/clothing/head/helmet/space/nasavoid(src)
+ new /obj/item/tank/internals/oxygen(src)
+ new /obj/item/gps(src)
+
+/obj/item/storage/box/hero/scottish
+ name = "Braveheart, the Scottish rebel - 1300's."
+ desc = "Seemingly a legendary figure in the battle for Scottish independence, this historical figure is closely associated with blue facepaint, big swords, strange man skirts, and his ever enduring catchphrase: 'FREEDOM!!'"
+
+/obj/item/storage/box/hero/scottish/PopulateContents()
+ new /obj/item/clothing/under/costume/kilt(src)
+ new /obj/item/claymore/weak/ceremonial(src)
+ new /obj/item/toy/crayon/spraycan(src)
+ new /obj/item/clothing/shoes/sandal(src)
+
+/obj/item/storage/box/hero/carphunter
+ name = "Carp Hunter, Wildlife Expert - 2506."
+ desc = "Despite his nickname, this wildlife expert was mainly known as a passionate environmentalist and conservationist, often coming in contact with dangerous wildlife to teach about the beauty of nature."
+
+/obj/item/storage/box/hero/carphunter/PopulateContents()
+ new /obj/item/clothing/suit/space/hardsuit/carp/old(src)
+ new /obj/item/clothing/mask/gas/carp(src)
+ new /obj/item/kitchen/knife/hunting(src)
+ new /obj/item/storage/box/papersack/meat(src)
+
+/obj/item/storage/box/holy/clock
+ name = "Forgotten kit"
+
+/obj/item/storage/box/holy/clock/PopulateContents()
+ new /obj/item/clothing/head/helmet/chaplain/clock(src)
+ new /obj/item/clothing/suit/armor/riot/chaplain/clock(src)
+
+/obj/item/storage/box/holy
+ name = "Templar Kit"
+
+/obj/item/storage/box/holy/PopulateContents()
+ new /obj/item/clothing/head/helmet/chaplain(src)
+ new /obj/item/clothing/suit/armor/riot/chaplain(src)
+
+/obj/item/storage/box/holy/student
+ name = "Profane Scholar Kit"
+
+/obj/item/storage/box/holy/student/PopulateContents()
+ new /obj/item/clothing/suit/armor/riot/chaplain/studentuni(src)
+ new /obj/item/clothing/head/helmet/chaplain/cage(src)
+
+/obj/item/storage/box/holy/sentinel
+ name = "Stone Sentinel Kit"
+
+/obj/item/storage/box/holy/sentinel/PopulateContents()
+ new /obj/item/clothing/suit/armor/riot/chaplain/ancient(src)
+ new /obj/item/clothing/head/helmet/chaplain/ancient(src)
+
+/obj/item/storage/box/holy/witchhunter
+ name = "Witchhunter Kit"
+
+/obj/item/storage/box/holy/witchhunter/PopulateContents()
+ new /obj/item/clothing/suit/armor/riot/chaplain/witchhunter(src)
+ new /obj/item/clothing/head/helmet/chaplain/witchunter_hat(src)
+
+/obj/item/storage/box/holy/adept
+ name = "Divine Adept Kit"
+
+/obj/item/storage/box/holy/adept/PopulateContents()
+ new /obj/item/clothing/suit/armor/riot/chaplain/adept(src)
+ new /obj/item/clothing/head/helmet/chaplain/adept(src)
+
+/obj/item/storage/box/holy/follower
+ name = "Followers of the Chaplain Kit"
+
+/obj/item/storage/box/holy/follower/PopulateContents()
+ new /obj/item/clothing/suit/hooded/chaplain_hoodie/leader(src)
+ new /obj/item/clothing/suit/hooded/chaplain_hoodie(src)
+ new /obj/item/clothing/suit/hooded/chaplain_hoodie(src)
+ new /obj/item/clothing/suit/hooded/chaplain_hoodie(src)
+ new /obj/item/clothing/suit/hooded/chaplain_hoodie(src)
diff --git a/code/game/objects/items/storage/wallets.dm b/code/game/objects/items/storage/wallets.dm
index 570e9a2f92..9f0ec16315 100644
--- a/code/game/objects/items/storage/wallets.dm
+++ b/code/game/objects/items/storage/wallets.dm
@@ -43,29 +43,20 @@
/obj/item/storage/wallet/Exited(atom/movable/gone, direction)
. = ..()
- refreshID(removed = TRUE)
+ if(istype(gone, /obj/item/card/id))
+ refreshID()
/**
* Calculates the new front ID.
*
* Picks the ID card that has the most combined command or higher tier accesses.
- * Arguments:
- * * removed - If this proc was called because a card was removed. There's a chance we don't need to calculate the new front ID if a card was removed.
*/
-/obj/item/storage/wallet/proc/refreshID(removed = FALSE)
+/obj/item/storage/wallet/proc/refreshID()
LAZYCLEARLIST(combined_access)
- // If the front_id is still in our wallet an we removed a card, we can return early.
- if((front_id in src) && removed)
- return
-
front_id = null
var/winning_tally = 0
- for(var/card in contents)
- var/obj/item/card/id/id_card = card
- if(!istype(id_card))
- continue
-
+ for(var/obj/item/card/id/id_card in contents)
// Certain IDs can forcibly jump to the front so they can disguise other cards in wallets. Chameleon/Agent ID cards are an example of this.
if(HAS_TRAIT(id_card, TRAIT_MAGNETIC_ID_CARD))
front_id = id_card
@@ -94,7 +85,8 @@
/obj/item/storage/wallet/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs)
. = ..()
- refreshID(removed = FALSE)
+ if(istype(arrived, /obj/item/card/id))
+ refreshID()
/obj/item/storage/wallet/update_overlays()
. = ..()
diff --git a/code/game/objects/items/virgin_mary.dm b/code/game/objects/items/virgin_mary.dm
new file mode 100644
index 0000000000..d5ac9f761f
--- /dev/null
+++ b/code/game/objects/items/virgin_mary.dm
@@ -0,0 +1,57 @@
+/obj/item/virgin_mary
+ name = "\proper a picture of the virgin mary"
+ desc = "A small, cheap icon depicting the virgin mother."
+ icon = 'icons/obj/blackmarket.dmi'
+ icon_state = "madonna"
+ resistance_flags = FLAMMABLE
+ ///Has this item been used already.
+ var/used_up = FALSE
+ ///List of mobs that have already been mobbed.
+ var/static/list/mob_mobs = list()
+
+#define NICKNAME_CAP (MAX_NAME_LEN/2)
+/obj/item/virgin_mary/attackby(obj/item/W, mob/user, params)
+ . = ..()
+ if(resistance_flags & ON_FIRE)
+ return
+ if(!burn_paper_product_attackby_check(W, user, TRUE))
+ return
+ if(used_up)
+ return
+ if(!isliving(user) || !user.mind) //A sentient mob needs to be burning it, ya cheezit.
+ return
+ var/mob/living/joe = user
+
+ if(joe in mob_mobs) //Only one nickname fuckhead
+ to_chat(joe, span_warning("You have already been initiated into the mafioso life."))
+ return
+
+ to_chat(joe, span_notice("As you burn the picture, a nickname comes to mind..."))
+ var/nickname = stripped_input(joe, "Pick a nickname", "Mafioso Nicknames", null, NICKNAME_CAP, TRUE)
+ nickname = reject_bad_name(nickname, allow_numbers = FALSE, max_length = NICKNAME_CAP, ascii_only = TRUE)
+ if(!nickname)
+ return
+ var/new_name
+ var/space_position = findtext(joe.real_name, " ")
+ if(space_position)//Can we find a space?
+ new_name = "[copytext(joe.real_name, 1, space_position)] \"[nickname]\" [copytext(joe.real_name, space_position)]"
+ else //Append otherwise
+ new_name = "[joe.real_name] \"[nickname]\""
+ joe.real_name = new_name
+ used_up = TRUE
+ mob_mobs += joe
+ joe.say("My soul will burn like this saint if I betray my family. I enter alive and I will have to get out dead.", forced = /obj/item/virgin_mary)
+ to_chat(joe, span_userdanger("Being inducted into the mafia does not grant antagonist status."))
+
+#undef NICKNAME_CAP
+
+/obj/item/virgin_mary/suicide_act(mob/living/user)
+ user.visible_message(span_suicide("[user] starts saying their Hail Mary's at a terrifying pace! It looks like [user.p_theyre()] trying to enter the afterlife!"))
+ user.say("Hail Mary, full of grace, the Lord is with thee. Blessed are thou amongst women, and blessed is the fruit of thy womb, Jesus. Holy Mary, mother of God, pray for us sinners, now and at the hour of our death. Amen. ", forced = /obj/item/virgin_mary)
+ addtimer(CALLBACK(src, .proc/manual_suicide, user), 75)
+ addtimer(CALLBACK(user, /atom/movable/proc/say, "O my Mother, preserve me this day from mortal sin..."), 50)
+ return MANUAL_SUICIDE
+
+/obj/item/virgin_mary/proc/manual_suicide(mob/living/user)
+ user.adjustOxyLoss(200)
+ user.death(0)
diff --git a/code/game/objects/structures/cannon.dm b/code/game/objects/structures/cannon.dm
deleted file mode 100644
index ce8b1807b8..0000000000
--- a/code/game/objects/structures/cannon.dm
+++ /dev/null
@@ -1,103 +0,0 @@
-/obj/structure/cannon
- name = "cannon"
- desc = "Holemaker Deluxe: A sporty model with a good stop power. Any cannon enthusiast should be expected to start here."
- density = TRUE
- anchored = TRUE
- icon_state = "falconet_patina"
- max_integrity = 300
- var/obj/item/stack/cannonball/loaded_cannonball = null
- var/charge_ignited = FALSE
- var/fire_delay = 15
- var/charge_size = 15
- var/fire_sound = 'sound/weapons/gun/general/cannon.ogg'
-
-/obj/structure/cannon/Initialize()
- . = ..()
- create_reagents(charge_size)
-
-/obj/structure/cannon/proc/fire()
- for(var/mob/shaken_mob in urange(10, src))
- if(shaken_mob.stat == CONSCIOUS)
- shake_camera(shaken_mob, 3, 1)
-
- playsound(src, fire_sound, 50, TRUE)
- if(loaded_cannonball)
- var/obj/projectile/fired_projectile = new loaded_cannonball.projectile_type(get_turf(src))
- QDEL_NULL(loaded_cannonball)
- fired_projectile.firer = src
- fired_projectile.fired_from = src
- fired_projectile.fire(dir2angle(dir))
- reagents.remove_all()
- charge_ignited = FALSE
-
-/obj/structure/cannon/attackby(obj/item/W, mob/user, params)
- if(charge_ignited)
- to_chat(user, span_danger("[src] is about to fire!"))
- return
- var/ignition_message = W.ignition_effect(src, user)
-
- if(istype(W, /obj/item/stack/cannonball))
- if(loaded_cannonball)
- to_chat(user, span_warning("[src] is already loaded!"))
- else
- var/obj/item/stack/cannonball/cannoneers_balls = W
- loaded_cannonball = new cannoneers_balls.type(src, 1)
- loaded_cannonball.copy_evidences(cannoneers_balls)
- to_chat(user, span_notice("You load a [cannoneers_balls.singular_name] into [src]."))
- cannoneers_balls.use(1, transfer = TRUE)
- return
-
- else if(ignition_message)
- if(!reagents.has_reagent(/datum/reagent/gunpowder,15))
- to_chat(user, span_warning("[src] needs at least 15u of gunpowder to fire!"))
- return
- visible_message(ignition_message)
- log_game("Cannon fired by [key_name(user)] in [AREACOORD(src)]")
- addtimer(CALLBACK(src, .proc/fire), fire_delay)
- charge_ignited = TRUE
- return
-
- else if(istype(W, /obj/item/reagent_containers))
- var/obj/item/reagent_containers/powder_keg = W
- if(!(powder_keg.reagent_flags & OPENCONTAINER))
- return ..()
- if(istype(powder_keg, /obj/item/reagent_containers/glass/rag))
- return ..()
-
- if(!powder_keg.reagents.total_volume)
- to_chat(user, span_warning("[powder_keg] is empty!"))
- return
- else if(!powder_keg.reagents.has_reagent(/datum/reagent/gunpowder, charge_size))
- to_chat(user, span_warning("[powder_keg] doesn't have at least 15u of gunpowder to fill [src]!"))
- return
- if(reagents.has_reagent(/datum/reagent/gunpowder, charge_size))
- to_chat(user, span_warning("[src] already contains a full charge of powder! It would be unwise to add more."))
- return
- powder_keg.reagents.trans_id_to(src, /datum/reagent/gunpowder, amount = charge_size)
- to_chat(user, span_notice("You load [src] with a charge of powder from [powder_keg]."))
- return
- if(W.tool_behaviour == TOOL_WRENCH)
- if(default_unfasten_wrench(user, W, time = 2 SECONDS))
- return
- ..()
-
-/obj/item/paper/crumpled/muddy/fluff/cannon_instructions
- name = "Mast of Cannon's Past's Cannon Instructions"
- desc = "A quickly written note detailing the basics of firing a cannon. Who wrote this?"
- info = @{"
-
-Ye don't know how to load cannon, and ye call yerself a fearsome pirate? I think ye be more alike a space sailor under the space monarchy's flag! Alas, everyone must learn how to blast holes in enemy ships. And thus:
-
-