diff --git a/.github/actions/setup_bun/action.yml b/.github/actions/setup_bun/action.yml
new file mode 100644
index 00000000000..727596ed3ab
--- /dev/null
+++ b/.github/actions/setup_bun/action.yml
@@ -0,0 +1,17 @@
+# This action is a wrapper around `oven-sh/setup-bun` to use the version specified in
+# `dependencies.sh`.
+name: Setup Bun
+description: Install Bun using the version specified in `dependencies.sh`
+
+runs:
+ using: composite
+ steps:
+ - name: Configure Bun version
+ shell: bash
+ run: |
+ source dependencies.sh
+ echo "BUN_VERSION_REQUIRED=$BUN_VERSION" >> $GITHUB_ENV
+ - name: Install Bun
+ uses: oven-sh/setup-bun@v2
+ with:
+ bun-version: ${{ env.BUN_VERSION_REQUIRED }}
diff --git a/.github/actions/setup_node/action.yml b/.github/actions/setup_node/action.yml
new file mode 100644
index 00000000000..d017766117f
--- /dev/null
+++ b/.github/actions/setup_node/action.yml
@@ -0,0 +1,26 @@
+# This action is a wrapper around `actions/setup-node`, to use the version specified in
+# `dependencies.sh`.
+name: Setup Node
+description: Install Node using the version specified in `dependencies.sh`; additionally, restores the Yarn cache if one exists
+
+inputs:
+ restore-yarn-cache:
+ description: "If `true`, restores the Yarn cache alongside installing node."
+ required: false
+ type: boolean
+ default: false
+
+runs:
+ using: composite
+ steps:
+ - name: Configure Node version
+ shell: bash
+ run: |
+ source dependencies.sh
+ echo "NODE_VERSION_REQUIRED=$NODE_VERSION_LTS" >> $GITHUB_ENV
+ - name: Install Node
+ uses: actions/setup-node@v4
+ with:
+ node-version: ${{ env.NODE_VERSION_REQUIRED }}
+ cache: ${{ fromJSON(inputs.restore-yarn-cache) && 'yarn' || '' }}
+ cache-dependency-path: ${{ fromJSON(inputs.restore-yarn-cache) && 'tgui/yarn.lock' || '' }}
diff --git a/.github/workflows/byond.yml b/.github/workflows/byond.yml
index 3c0012a9ce5..1e89d02d09a 100644
--- a/.github/workflows/byond.yml
+++ b/.github/workflows/byond.yml
@@ -69,6 +69,7 @@ jobs:
bash tools/ci/check_filedirs.sh aurorastation.dme
bash tools/ci/check_changelogs.sh
bash tools/ci/check_grep.sh $PWD
+ bash tools/ci/check_shell_scripts.sh
awk -f tools/indentation.awk **/*.dm
- name: "Check if running CI"
@@ -281,18 +282,14 @@ jobs:
- name: Set ENV variables
run: bash dependencies.sh
- #Setup NodeJS using YARN as cache
- - name: Setup Node
- uses: actions/setup-node@v3
- with:
- node-version: ${{ env.NODE_VERSION_LTS }}
- cache: "yarn"
- cache-dependency-path: tgui/yarn.lock
+ #Setup bun
+ - name: Setup Bun
+ uses: ./.github/actions/setup_bun
#Lint TGUI
- name: Check Tgui
run: |
- tools/build/build --ci lint tgui-test
+ tools/build/build.sh --ci lint tgui-test
###########################################
############### MISC LINTING ##############
diff --git a/.github/workflows/update_tgui.yml b/.github/workflows/update_tgui.yml
new file mode 100644
index 00000000000..a023a52b467
--- /dev/null
+++ b/.github/workflows/update_tgui.yml
@@ -0,0 +1,31 @@
+name: "Build TGUI"
+on:
+ workflow_dispatch:
+
+jobs:
+ update-tgui:
+ concurrency: tgui
+ permissions:
+ contents: read
+ pull-requests: write
+ runs-on: ubuntu-24.04
+ steps:
+ - name: Install Bun
+ uses: ./.github/actions/setup_bun
+
+ - name: Update TGUI
+ run: |
+ tools/bootstrap/javascript tools/build/build.sh tgui
+
+ - name: Commit TGUI
+ run: |
+ git pull origin master
+ git config --local user.email "action@github.com"
+ git config --local user.name "AuroraBuildBot"
+ git add --force tgui/public/*
+ git commit -m "Automatic TGUI compile [ci skip]" -a || true
+
+ - name: Push
+ uses: ad-m/github-push-action@master
+ with:
+ github_token: ${{ secrets.BOT_TOKEN_AURORA }}
diff --git a/.gitignore b/.gitignore
index e8f27065444..e24b8fa4900 100644
--- a/.gitignore
+++ b/.gitignore
@@ -73,3 +73,6 @@ define_sanity_output.txt
# Tracy dumps
*.utracy
+
+# JavaScript tools
+**/node_modules
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
index d0ecf1ccc9a..6a81025a513 100644
--- a/.vscode/extensions.json
+++ b/.vscode/extensions.json
@@ -6,7 +6,9 @@
"dbaeumer.vscode-eslint",
"vscode.typescript-language-features",
"redhat.vscode-yaml",
- "esbenp.prettier-vscode",
- "rome.rome"
+ "rome.rome",
+ "dbaeumer.vscode-eslint",
+ "editorconfig.editorconfig",
+ "biomejs.biome"
]
}
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 4a44976f9ca..1e74c4aca2f 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,25 +1,27 @@
{
- "eslint.nodePath": "./tgui/.yarn/sdks",
- "eslint.workingDirectories": ["./tgui"],
- "prettier.prettierPath": "./tgui/.yarn/sdks/prettier/index.cjs",
- "typescript.tsdk": "./tgui/.yarn/sdks/typescript/lib",
"typescript.enablePromptUseWorkspaceTsdk": true,
"search.exclude": {
"**/.yarn": true,
"**/.pnp.*": true
},
"editor.codeActionsOnSave": {
- "source.fixAll.eslint": "explicit"
+ "source.organizeImports.biome": "explicit",
+ "source.fixAll.biome": "explicit"
},
"editor.insertSpaces": false,
"files.eol": "\n",
"files.insertFinalNewline": true,
"files.trimTrailingWhitespace": true,
"gitlens.advanced.blame.customArguments": ["-w"],
- "[javascript][typescript][typescriptreact][javascriptreact][html][scss][css][json][jsonc][markdown][yaml]": {
- "editor.rulers": [80],
+ "[javascript][typescript][javascriptreact][typescriptreact][css][json][jsonc]": {
+ "editor.defaultFormatter": "biomejs.biome",
+ "editor.formatOnSave": true,
+ "editor.rulers": [80]
+ },
+ "[yaml][markdown][html][scss]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
- "editor.formatOnSave": true
+ "editor.formatOnSave": true,
+ "editor.rulers": [80]
},
"workbench.editorAssociations": {
"*.dmi": "dmiEditor.dmiEditor"
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
index defa41d9ba9..1f7c9117e5e 100644
--- a/.vscode/tasks.json
+++ b/.vscode/tasks.json
@@ -16,8 +16,7 @@
},
"problemMatcher": [
"$dreammaker",
- "$tsc",
- "$eslint-stylish"
+ "$tsc"
],
"group": {
"kind": "build",
@@ -61,8 +60,7 @@
"command": ".\\bin\\tgui-build.cmd"
},
"problemMatcher": [
- "$tsc",
- "$eslint-stylish"
+ "$tsc"
],
"group": "build",
"label": "tgui: build"
@@ -74,38 +72,11 @@
"command": ".\\bin\\tgui-dev.cmd"
},
"problemMatcher": [
- "$tsc",
- "$eslint-stylish"
+ "$tsc"
],
"group": "build",
"label": "tgui: dev server"
},
- {
- "type": "shell",
- "command": "bin/tgui-bench",
- "windows": {
- "command": ".\\bin\\tgui-bench.cmd"
- },
- "problemMatcher": [
- "$tsc",
- "$eslint-stylish"
- ],
- "group": "build",
- "label": "tgui: bench"
- },
- {
- "type": "shell",
- "command": "bin/tgui-sonar",
- "windows": {
- "command": ".\\bin\\tgui-sonar.cmd"
- },
- "problemMatcher": [
- "$tsc",
- "$eslint-stylish"
- ],
- "group": "build",
- "label": "tgui: sonar"
- },
{
"type": "shell",
"command": "bin/tgfont",
@@ -113,8 +84,7 @@
"command": ".\\bin\\tgfont.cmd"
},
"problemMatcher": [
- "$tsc",
- "$eslint-stylish"
+ "$tsc"
],
"group": "build",
"label": "tgui: rebuild tgfont"
diff --git a/aurorastation.dme b/aurorastation.dme
index 8b5ecd1d2a2..a43de7cdd45 100644
--- a/aurorastation.dme
+++ b/aurorastation.dme
@@ -155,6 +155,7 @@
#include "code\__DEFINES\targeting.dm"
#include "code\__DEFINES\technomancer.dm"
#include "code\__DEFINES\text.dm"
+#include "code\__DEFINES\tgs.config.dm"
#include "code\__DEFINES\tgs.dm"
#include "code\__DEFINES\tgui.dm"
#include "code\__DEFINES\time.dm"
@@ -184,6 +185,7 @@
#include "code\__DEFINES\dcs\signals\signals_record.dm"
#include "code\__DEFINES\dcs\signals\signals_spatial_grid.dm"
#include "code\__DEFINES\dcs\signals\signals_subsystem.dm"
+#include "code\__DEFINES\dcs\signals\signals_tgui.dm"
#include "code\__DEFINES\dcs\signals\signals_tools.dm"
#include "code\__DEFINES\dcs\signals\signals_turf.dm"
#include "code\__DEFINES\dcs\signals\signals_weather.dm"
@@ -404,6 +406,7 @@
#include "code\controllers\subsystems\stickyban.dm"
#include "code\controllers\subsystems\sun.dm"
#include "code\controllers\subsystems\sunlight.dm"
+#include "code\controllers\subsystems\tgui.dm"
#include "code\controllers\subsystems\throwing.dm"
#include "code\controllers\subsystems\ticker.dm"
#include "code\controllers\subsystems\time_track.dm"
@@ -448,7 +451,6 @@
#include "code\controllers\subsystems\processing\electronics.dm"
#include "code\controllers\subsystems\processing\fast_process.dm"
#include "code\controllers\subsystems\processing\modifiers.dm"
-#include "code\controllers\subsystems\processing\nanoui.dm"
#include "code\controllers\subsystems\processing\ntsl2.dm"
#include "code\controllers\subsystems\processing\obj_tab_items.dm"
#include "code\controllers\subsystems\processing\odyssey.dm"
@@ -457,7 +459,6 @@
#include "code\controllers\subsystems\processing\projectiles.dm"
#include "code\controllers\subsystems\processing\psi.dm"
#include "code\controllers\subsystems\processing\shuttle.dm"
-#include "code\controllers\subsystems\processing\tgui.dm"
#include "code\datums\ai_law_sets.dm"
#include "code\datums\ai_laws.dm"
#include "code\datums\beam.dm"
@@ -465,6 +466,7 @@
#include "code\datums\callback.dm"
#include "code\datums\cargo.dm"
#include "code\datums\category.dm"
+#include "code\datums\chat_payload.dm"
#include "code\datums\computerfiles.dm"
#include "code\datums\datum.dm"
#include "code\datums\datumvars.dm"
@@ -616,6 +618,7 @@
#include "code\datums\outfits\event\outfit_killers.dm"
#include "code\datums\outfits\event\outfit_megacorps.dm"
#include "code\datums\outfits\event\outfit_nanotrasen.dm"
+#include "code\datums\outfits\event\outfit_oe.dm"
#include "code\datums\outfits\event\outfit_scc.dm"
#include "code\datums\outfits\event\outfit_siib.dm"
#include "code\datums\outfits\event\outfit_tfcl.dm"
@@ -3166,13 +3169,6 @@
#include "code\modules\multiz\zmimic\mimic_common.dm"
#include "code\modules\multiz\zmimic\mimic_movable.dm"
#include "code\modules\multiz\zmimic\mimic_turf.dm"
-#include "code\modules\nano\nanoexternal.dm"
-#include "code\modules\nano\nanomapgen.dm"
-#include "code\modules\nano\nanoui.dm"
-#include "code\modules\nano\modules\follow_menu.dm"
-#include "code\modules\nano\modules\human_appearance.dm"
-#include "code\modules\nano\modules\nano_module.dm"
-#include "code\modules\nano\modules\narrate_panel.dm"
#include "code\modules\ntsl2\guide.dm"
#include "code\modules\ntsl2\ntsl2_program.dm"
#include "code\modules\ntsl2\ntsl2_types.dm"
@@ -3935,8 +3931,11 @@
#include "code\modules\tgui\modules\armor_values.dm"
#include "code\modules\tgui\modules\faction_select.dm"
#include "code\modules\tgui\modules\flavor_text.dm"
+#include "code\modules\tgui\modules\follow_menu.dm"
#include "code\modules\tgui\modules\hivenet_manifest.dm"
+#include "code\modules\tgui\modules\human_appearance.dm"
#include "code\modules\tgui\modules\ipc_diagnostic.dm"
+#include "code\modules\tgui\modules\narrate_panel.dm"
#include "code\modules\tgui\modules\neural_configuration.dm"
#include "code\modules\tgui\states\admin.dm"
#include "code\modules\tgui\states\always.dm"
@@ -3959,6 +3958,8 @@
#include "code\modules\tgui\states\self.dm"
#include "code\modules\tgui\states\zlevel.dm"
#include "code\modules\tgui_input\alert.dm"
+#include "code\modules\tgui_input\checkboxes.dm"
+#include "code\modules\tgui_input\keycombo.dm"
#include "code\modules\tgui_input\list.dm"
#include "code\modules\tgui_input\number.dm"
#include "code\modules\tgui_input\text.dm"
diff --git a/biome.json b/biome.json
new file mode 100644
index 00000000000..77ea1bef89f
--- /dev/null
+++ b/biome.json
@@ -0,0 +1,75 @@
+{
+ "$schema": "https://biomejs.dev/schemas/2.1.2/schema.json",
+ "assist": {
+ "actions": {
+ "source": {
+ "organizeImports": "on"
+ }
+ },
+ "enabled": true
+ },
+ "css": {
+ "formatter": {
+ "quoteStyle": "double"
+ }
+ },
+ "files": {
+ "ignoreUnknown": false,
+ "includes": [
+ "**",
+ "!**/node_modules",
+ "!tgui/public",
+ "tgui/public/tgui.html",
+ "!tgui/packages/tgui-setup/helpers.js"
+ ]
+ },
+ "formatter": {
+ "enabled": true,
+ "indentStyle": "tab",
+ "lineEnding": "lf"
+ },
+ "javascript": {
+ "formatter": {
+ "indentStyle": "space",
+ "quoteStyle": "single"
+ }
+ },
+ "linter": {
+ "enabled": true,
+ "rules": {
+ "recommended": true,
+ "a11y": "off",
+ "correctness": {
+ "noUnusedImports": "warn",
+ "noUnusedVariables": "off",
+ "useExhaustiveDependencies": "off",
+ "noUnusedFunctionParameters": "off",
+ "useHookAtTopLevel": "off"
+ },
+ "security": {
+ "noDangerouslySetInnerHtml": "off"
+ },
+ "style": {
+ "noNonNullAssertion": "off",
+ "useSelfClosingElements": "error",
+ "useTemplate": "off",
+ "useNodejsImportProtocol": "off"
+ },
+ "suspicious": {
+ "noArrayIndexKey": "off",
+ "noExplicitAny": "off",
+ "noImplicitAnyLet": "off",
+ "noShadowRestrictedNames": "off"
+ },
+ "complexity": {
+ "noImportantStyles": "off",
+ "useOptionalChain": "off"
+ }
+ }
+ },
+ "vcs": {
+ "clientKind": "git",
+ "enabled": false,
+ "useIgnoreFile": false
+ }
+}
diff --git a/bun.lock b/bun.lock
new file mode 100644
index 00000000000..779e0ce9801
--- /dev/null
+++ b/bun.lock
@@ -0,0 +1,32 @@
+{
+ "lockfileVersion": 1,
+ "workspaces": {
+ "": {
+ "devDependencies": {
+ "@biomejs/biome": "^2.1.2",
+ "prettier": "^3.6.2",
+ },
+ },
+ },
+ "packages": {
+ "@biomejs/biome": ["@biomejs/biome@2.4.15", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.4.15", "@biomejs/cli-darwin-x64": "2.4.15", "@biomejs/cli-linux-arm64": "2.4.15", "@biomejs/cli-linux-arm64-musl": "2.4.15", "@biomejs/cli-linux-x64": "2.4.15", "@biomejs/cli-linux-x64-musl": "2.4.15", "@biomejs/cli-win32-arm64": "2.4.15", "@biomejs/cli-win32-x64": "2.4.15" }, "bin": { "biome": "bin/biome" } }, "sha512-j5VH3a/h/HXTKBM50MDMxRCzkeLv9S2XJcW2WgnZT1+xyisi+0bISrXR82gCX+8S9lvK0skEvHJRN+3Ktr2hlw=="],
+
+ "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.4.15", "", { "os": "darwin", "cpu": "arm64" }, "sha512-rF3PPqLq1yoST79zaQbDjVJwsuIeci/O+9bgNmC5QpgOqz6aqYuzA4abyAGx+mgyiDXn4A049xAN8gijbuR1Qg=="],
+
+ "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.4.15", "", { "os": "darwin", "cpu": "x64" }, "sha512-/5KHXYMfSJs1fNXiX30xFtI8JcCFV6zaVVLxOa0M2sfqBKHkpQhRTv94yxQWxeTY2lzo2OuTlNvPC+hDQt2wcQ=="],
+
+ "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.4.15", "", { "os": "linux", "cpu": "arm64" }, "sha512-owaAMZD/T4LrD0ELNCk0Km3qrRHuM0X6EAyVE1FSqGY0rbLoiDLrO4Us2tllm6cAeB2Ioa9C2C08NZPdr8+0Ug=="],
+
+ "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.4.15", "", { "os": "linux", "cpu": "arm64" }, "sha512-ZPcxznxm0pogHBLZhYntyR3sR+MrZjqJIKEr7ZqVen0Rl+P/4upVmfYXjftizi9RoqZntg33fv/1fbdhbYXpEQ=="],
+
+ "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.4.15", "", { "os": "linux", "cpu": "x64" }, "sha512-0jj7THz12GbUOLmMibktK6DZjqz2zV64KFxyBtcFTKPiiOIY0a7vns1elpO1dERvxpsZ5ik0oFfz0oGwFde1+g=="],
+
+ "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.4.15", "", { "os": "linux", "cpu": "x64" }, "sha512-CNq/9W38SYSH023lfcQ4KKU8K0YX8T//FZUhcgtMMRABDojx5XsMV7jlweAvGSl389wJQB29Qo6Zb/a+jdvt+w=="],
+
+ "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.4.15", "", { "os": "win32", "cpu": "arm64" }, "sha512-ouhkYdlhp/1GghEJPdWwD/Vi3gQ1nFxuSpMolWsbq3Lsq3QUR4jl6UdhhscdCugKU5vOEuMiJhvKj66O0OCq+w=="],
+
+ "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.4.15", "", { "os": "win32", "cpu": "x64" }, "sha512-zBrGq5mx5wwpnow4+2BxUvleDM+GNd4sLbPaMapsSLQLD0NGRCquqPBTgN+7XkUteHvj7M+BstuI8tmnV7+HgQ=="],
+
+ "prettier": ["prettier@3.8.3", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw=="],
+ }
+}
diff --git a/code/ZAS/Airflow.dm b/code/ZAS/Airflow.dm
index 132f34f96b5..766f5810afc 100644
--- a/code/ZAS/Airflow.dm
+++ b/code/ZAS/Airflow.dm
@@ -2,7 +2,6 @@
Contains helper procs for airflow, handled in /connection_group.
*/
-/mob/var/tmp/last_airflow_stun = 0
/mob/proc/airflow_stun()
if(stat == 2)
return 0
@@ -60,11 +59,6 @@ Contains helper procs for airflow, handled in /connection_group.
if(4,5)
if(n < GLOB.vsc.airflow_medium_pressure) return 0
-/atom/movable/var/tmp/turf/airflow_dest
-/atom/movable/var/tmp/airflow_speed = 0
-/atom/movable/var/tmp/airflow_time = 0
-/atom/movable/var/tmp/last_airflow = 0
-
/atom/movable/proc/AirflowCanMove(n)
return 1
diff --git a/code/ZAS/Phoron.dm b/code/ZAS/Phoron.dm
index d554c7a9d33..bb76edb4c62 100644
--- a/code/ZAS/Phoron.dm
+++ b/code/ZAS/Phoron.dm
@@ -20,8 +20,6 @@ GLOBAL_DATUM_INIT(contamination_overlay, /image, image('icons/effects/contaminat
///Does being in sleeping gas cause you to hallucinate?
var/N2O_HALLUCINATION = TRUE
-/obj/var/contaminated = 0
-
/obj/item/proc/can_contaminate()
if(item_flags & ITEM_FLAG_PHORON_GUARD)
return FALSE
diff --git a/code/__DEFINES/_flags.dm b/code/__DEFINES/_flags.dm
index 79d9e700376..fecfb93bb32 100644
--- a/code/__DEFINES/_flags.dm
+++ b/code/__DEFINES/_flags.dm
@@ -56,6 +56,8 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
#define PASSDOORHATCH (1<<15)
#define PASSTRACE (1<<16) //Used by turrets in the check_trajectory proc to target mobs hiding behind certain things (such as closets)
#define PASSRAILING (1<<17)
+/// Allows you to pass over energy shields, these also have additional handling for blocking projectiles in their on_hit().
+#define PASSSHIELD (1<<18)
//Movement Types
#define GROUND (1<<0)
diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm
index d8f8e0ac04d..dfca0aed569 100644
--- a/code/__DEFINES/combat.dm
+++ b/code/__DEFINES/combat.dm
@@ -32,3 +32,24 @@
#define BULLET_ACT_FORCE_PIERCE "PIERCE" //It pierces through the object regardless of the bullet being piercing by default.
#define NICE_SHOT_RICOCHET_BONUS 10 //if the shooter has the NICE_SHOT trait and they fire a ricocheting projectile, add this to the ricochet chance and auto aim angle
+
+//attack visual effects
+#define ATTACK_EFFECT_PUNCH "punch"
+#define ATTACK_EFFECT_KICK "kick"
+#define ATTACK_EFFECT_SMASH "smash"
+#define ATTACK_EFFECT_CLAW "claw"
+#define ATTACK_EFFECT_SLASH "slash"
+#define ATTACK_EFFECT_DISARM "disarm"
+#define ATTACK_EFFECT_BITE "bite"
+#define ATTACK_EFFECT_MECHFIRE "mech_fire"
+#define ATTACK_EFFECT_MECHTOXIN "mech_toxin"
+#define ATTACK_EFFECT_BOOP "boop" //Honk
+#define ATTACK_EFFECT_VOID "void"
+#define ATTACK_EFFECT_CPR "cpr"
+
+/// Attack animation for sharp items
+#define ATTACK_ANIMATION_SLASH "slash"
+/// Attack animation for pointy items
+#define ATTACK_ANIMATION_PIERCE "pierce"
+/// Animation for blunt attacks
+#define ATTACK_ANIMATION_BLUNT "blunt"
diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm
index f5d03812dcd..2d526bf5c34 100644
--- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm
+++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm
@@ -9,6 +9,8 @@
#define COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON "atom_init_success_on"
///from base of atom/examine(): (/mob, list/examine_text)
#define COMSIG_ATOM_EXAMINE "atom_examine"
+///from base of atom/examine_tags(): (/mob, list/examine_tags)
+#define COMSIG_ATOM_EXAMINE_TAGS "atom_examine_tags"
///from base of atom/Entered(): (atom/movable/arrived, atom/old_loc, list/atom/old_locs)
#define COMSIG_ATOM_ENTERED "atom_entered"
/// Sent from the atom that just Entered src. From base of atom/Entered(): (/atom/destination, atom/old_loc, list/atom/old_locs)
diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm
index e3f7e76ecf7..e692d92b97f 100644
--- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm
+++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm
@@ -46,6 +46,9 @@
/// Sent when a mob rests.
#define COMSIG_MOB_RESTED "mob_rested"
+/// Sent from /mob/proc/update_canmove() when the mob transitions into lying down.
+#define COMSIG_MOB_LYING_DOWN "mob_lying_down"
+
/// From /obj/item/organ/external/take_damage. Updates the limb's colour matrix. Very laggy, so we do it on reaction to stuff.
#define COMSIG_UPDATE_LIMB_IMAGE "update_limb_image"
diff --git a/code/__DEFINES/dcs/signals/signals_object/signals_object.dm b/code/__DEFINES/dcs/signals/signals_object/signals_object.dm
index f3ec1a99257..846f51b5939 100644
--- a/code/__DEFINES/dcs/signals/signals_object/signals_object.dm
+++ b/code/__DEFINES/dcs/signals/signals_object/signals_object.dm
@@ -24,6 +24,8 @@
#define COMSIG_ITEM_ATTACK_SELF "item_attack_self"
//from base of obj/item/attack_self_secondary(): (/mob)
#define COMSIG_ITEM_ATTACK_SELF_SECONDARY "item_attack_self_secondary"
+/// Sent from /obj/item/proc/animate_attack() : (atom/movable/attacker, atom/attacked_atom, animation_type, list/image_override, list/animation_override, list/angle_override)
+#define COMSIG_ITEM_ATTACK_ANIMATION "item_attack_animation"
///from base of [obj/item/attack()]: (atom/target, mob/user, proximity_flag, click_parameters)
#define COMSIG_ITEM_AFTERATTACK "item_afterattack"
diff --git a/code/__DEFINES/dcs/signals/signals_tgui.dm b/code/__DEFINES/dcs/signals/signals_tgui.dm
new file mode 100644
index 00000000000..67b979be780
--- /dev/null
+++ b/code/__DEFINES/dcs/signals/signals_tgui.dm
@@ -0,0 +1,2 @@
+/// Window is fully visible and we can make fragile calls
+#define COMSIG_TGUI_WINDOW_VISIBLE "tgui_window_visible"
diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm
index 4a832647a1d..cfb9545b8c3 100644
--- a/code/__DEFINES/mobs.dm
+++ b/code/__DEFINES/mobs.dm
@@ -51,8 +51,6 @@
#define LEFT 1
#define RIGHT 2
-#define FIST_ATTACK_ANIMATION -1
-
// Pulse levels, very simplified.
#define PULSE_NONE 0 // So !M.pulse checks would be possible.
#define PULSE_SLOW 1 // <60 bpm
diff --git a/code/__DEFINES/modular_guns.dm b/code/__DEFINES/modular_guns.dm
index 8a268ea1c14..162908f45b2 100644
--- a/code/__DEFINES/modular_guns.dm
+++ b/code/__DEFINES/modular_guns.dm
@@ -8,9 +8,9 @@
///The maximum improvement that can be applied to a weapon component.
#define IMPROVEMENT_CAP 100
///The maximum increase an individual variable can recieve over it's initial value.
-#define INCREASE_CAP 2
+#define INCREASE_CAP 1.5
///The maximum decrease an individual variable can recieve under it's initial value.
-#define DECREASE_CAP 0.2
+#define DECREASE_CAP 0.5
///All improvements are multiplied by this value, tweak down if they are too strong, up if they are too weak.
#define IMPROVEMENT_MULTIPLIER 1
diff --git a/code/__DEFINES/organs.dm b/code/__DEFINES/organs.dm
index 7aaf62e4086..33aecdde263 100644
--- a/code/__DEFINES/organs.dm
+++ b/code/__DEFINES/organs.dm
@@ -49,8 +49,8 @@
*/
#define COMSIG_GRAVITY_WEAKNESS_EVENT "gravity_weakness_event"
-/// Raised external organ (a limb) takes damage. Used for the synthetic endoskeleton at the moment. Must supply damage.
-#define COMSIG_EXTERNAL_ORGAN_DAMAGE "machine_internal_damage"
+/// This is raised when you want to send damage to the synthetic endoskeleton. Must supply a damage number.
+#define COMSIG_DAMAGE_TO_ENDOSKELETON "machine_internal_damage"
/// Sent when the burst damage is cleared by the posibrain.
#define COMSIG_SYNTH_EMP_DAMAGE_CLEARED "emp_damage_cleared"
diff --git a/code/__DEFINES/ship_weapons.dm b/code/__DEFINES/ship_weapons.dm
index 0d9035029bf..4e3726744aa 100644
--- a/code/__DEFINES/ship_weapons.dm
+++ b/code/__DEFINES/ship_weapons.dm
@@ -23,6 +23,7 @@
#define SHIP_AMMO_IMPACT_HE "high explosive"
#define SHIP_AMMO_IMPACT_PROBE "sensor probe"
#define SHIP_AMMO_IMPACT_FMJ "full metal jacket"
+#define SHIP_AMMO_IMPACT_FRAG "fragmentation"
#define SHIP_AMMO_IMPACT_AP "armour-piercing"
#define SHIP_AMMO_IMPACT_LASER "laser"
#define SHIP_AMMO_IMPACT_BUNKERBUSTER "bunker-buster"
diff --git a/code/__DEFINES/span.dm b/code/__DEFINES/span.dm
index 3ccaa9294d5..61c79492ecd 100644
--- a/code/__DEFINES/span.dm
+++ b/code/__DEFINES/span.dm
@@ -24,6 +24,7 @@
#define SPAN_COLOR(color, str) SPAN_STYLE("color: [color]", "[str]")
#define SPAN_CAUTION(str) ("" + str + " ")
#define SPAN_STORYTELLER(str) ("" + str + " ")
+#define SPAN_BOLDANNOUNCE(str) ("" + str + " ")
#define SPAN_MACHINE_WARNING(str) ("" + str + " ")
#define SPAN_MACHINE_DANGER(str) ("" + str + " ")
@@ -42,6 +43,9 @@
#define SPAN_BOLDNOTICE(str) ("" + str + " ")
#define SPAN_BOLDWARNING(X) "[X] "
+// Spans that use embedded tgui components:
+#define SPAN_TOOLTIP(tip, main_text) ("" + main_text + " ")
+
/*
#####################
Font sizes
diff --git a/code/__DEFINES/subsystem-priority.dm b/code/__DEFINES/subsystem-priority.dm
index 572c39c4edb..2ec6f3aadcf 100644
--- a/code/__DEFINES/subsystem-priority.dm
+++ b/code/__DEFINES/subsystem-priority.dm
@@ -36,7 +36,6 @@
#define SS_PRIORITY_STATPANELS 25 // Statpanels.
#define SS_PRIORITY_LIGHTING 25 // Queued lighting engine updates.
#define SS_PRIORITY_MACHINERY 25 // Machinery + powernet ticks.
-#define SS_PRIORITY_NANOUI 25 // UI updates.
#define SS_PRIORITY_ELECTRONICS 20 // Integrated Electronics processing.
#define SS_PRIORITY_CALAMITY 20 // Singularity, Tesla, Nar'sie, blob, etc.
#define SS_PRIORITY_EVENT 20
diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm
index 864b8941fd4..9a3bb4d4ce8 100644
--- a/code/__DEFINES/subsystems.dm
+++ b/code/__DEFINES/subsystems.dm
@@ -277,6 +277,7 @@
#define FIRE_PRIORITY_SPACEDRIFT 30
#define FIRE_PRIORITY_DEFAULT 50
#define FIRE_PRIORITY_MOBS 100
+#define FIRE_PRIORITY_TGUI 110
#define FIRE_PRIORITY_STATPANEL 390
#define FIRE_PRIORITY_CHAT 400
#define FIRE_PRIORITY_RUNECHAT 410
diff --git a/code/__DEFINES/text.dm b/code/__DEFINES/text.dm
index 63bafbaa4c4..d0a991f5ca1 100644
--- a/code/__DEFINES/text.dm
+++ b/code/__DEFINES/text.dm
@@ -50,7 +50,7 @@
#define CHAT_MESSAGE_WIDTH 112
// Setting this much higher than 1024 could allow spammers to DOS the server easily.
-#define MAX_MESSAGE_LEN 1024
+#define MAX_MESSAGE_LEN 4096
#define MAX_PAPER_MESSAGE_LEN 3072
#define MAX_BOOK_MESSAGE_LEN 9216
#define MAX_LNAME_LEN 64
diff --git a/code/__DEFINES/tgs.config.dm b/code/__DEFINES/tgs.config.dm
new file mode 100644
index 00000000000..4f6ba1af61c
--- /dev/null
+++ b/code/__DEFINES/tgs.config.dm
@@ -0,0 +1,11 @@
+#define TGS_EXTERNAL_CONFIGURATION
+#define TGS_DEFINE_AND_SET_GLOBAL(Name, Value) GLOBAL_VAR_INIT(##Name, ##Value); GLOBAL_PROTECT(##Name)
+#define TGS_READ_GLOBAL(Name) GLOB.##Name
+#define TGS_WRITE_GLOBAL(Name, Value) GLOB.##Name = ##Value
+#define TGS_WORLD_ANNOUNCE(message) to_chat(world, SPAN_BOLDANNOUNCE("[html_encode(##message)]"))
+#define TGS_INFO_LOG(message) log_world("TGS Info: [##message]")
+#define TGS_WARNING_LOG(message) log_world("TGS Warn: [##message]")
+#define TGS_ERROR_LOG(message) stack_trace("TGS Error: [##message]")
+#define TGS_NOTIFY_ADMINS(event) message_admins(##event)
+#define TGS_CLIENT_COUNT GLOB.clients.len
+#define TGS_PROTECT_DATUM(Path) GENERAL_PROTECT_DATUM(##Path)
diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm
index ef53d466e84..24887137230 100644
--- a/code/__DEFINES/tgs.dm
+++ b/code/__DEFINES/tgs.dm
@@ -1,55 +1,68 @@
// tgstation-server DMAPI
+// The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in IETF RFC 2119.
-#define TGS_DMAPI_VERSION "6.6.2"
+#define TGS_DMAPI_VERSION "7.3.3"
// All functions and datums outside this document are subject to change with any version and should not be relied on.
// CONFIGURATION
-/// Create this define if you want to do TGS configuration outside of this file.
+/// Consumers SHOULD create this define if you want to do TGS configuration outside of this file.
#ifndef TGS_EXTERNAL_CONFIGURATION
-// Comment this out once you've filled in the below.
-//#error TGS API unconfigured
+// Consumers MUST comment this out once you've filled in the below and are not using [TGS_EXTERNAL_CONFIGURATION].
+// #error TGS API unconfigured
-// Uncomment this if you wish to allow the game to interact with TGS 3..
+// Consumers MUST uncomment this if you wish to allow the game to interact with TGS version 3.
// This will raise the minimum required security level of your game to TGS_SECURITY_TRUSTED due to it utilizing call()().
//#define TGS_V3_API
// Required interfaces (fill in with your codebase equivalent):
/// Create a global variable named `Name` and set it to `Value`.
-#define TGS_DEFINE_AND_SET_GLOBAL(Name, Value) var/global/##Name = ##Value
+#define TGS_DEFINE_AND_SET_GLOBAL(Name, Value)
/// Read the value in the global variable `Name`.
-#define TGS_READ_GLOBAL(Name) global.##Name
+#define TGS_READ_GLOBAL(Name)
/// Set the value in the global variable `Name` to `Value`.
-#define TGS_WRITE_GLOBAL(Name, Value) global.##Name = ##Value
+#define TGS_WRITE_GLOBAL(Name, Value)
/// Disallow ANYONE from reflecting a given `path`, security measure to prevent in-game use of DD -> TGS capabilities.
#define TGS_PROTECT_DATUM(Path)
/// Display an announcement `message` from the server to all players.
-#define TGS_WORLD_ANNOUNCE(message) world << "TGS Notification : [html_encode(##message)]"
+#define TGS_WORLD_ANNOUNCE(message)
/// Notify current in-game administrators of a string `event`.
-#define TGS_NOTIFY_ADMINS(event) message_admins(##event)
+#define TGS_NOTIFY_ADMINS(event)
/// Write an info `message` to a server log.
-#define TGS_INFO_LOG(message) log_tgs("[##message]")
+#define TGS_INFO_LOG(message)
/// Write an warning `message` to a server log.
-#define TGS_WARNING_LOG(message) log_tgs("[##message]", SEVERITY_WARNING)
+#define TGS_WARNING_LOG(message)
/// Write an error `message` to a server log.
-#define TGS_ERROR_LOG(message) log_tgs("[##message]", SEVERITY_ERROR)
+#define TGS_ERROR_LOG(message)
/// Get the number of connected /clients.
-#define TGS_CLIENT_COUNT clients.len
+#define TGS_CLIENT_COUNT
#endif
+#ifndef TGS_FILE2TEXT_NATIVE
+#ifdef file2text
+#error Your codebase is re-defining the BYOND proc file2text. The DMAPI requires the native version to read the result of world.Export(). You SHOULD fix this by adding "#define TGS_FILE2TEXT_NATIVE file2text" before your override of file2text to allow the DMAPI to use the native version. This will only be used for world.Export(), not regular file accesses
+#endif
+#define TGS_FILE2TEXT_NATIVE file2text
+#endif
+
+// SpacemanDMM compatibility
+#ifndef CAN_BE_REDEFINED
+#define CAN_BE_REDEFINED(X)
+#endif
+
// EVENT CODES
/// Before a reboot mode change, extras parameters are the current and new reboot mode enums.
@@ -73,12 +86,12 @@
#define TGS_EVENT_REPO_MERGE_PULL_REQUEST 3
/// Before the repository makes a sychronize operation. Parameters: Absolute repostiory path.
#define TGS_EVENT_REPO_PRE_SYNCHRONIZE 4
-/// Before a BYOND install operation begins. Parameters: [/datum/tgs_version] of the installing BYOND.
-#define TGS_EVENT_BYOND_INSTALL_START 5
-/// When a BYOND install operation fails. Parameters: Error message
-#define TGS_EVENT_BYOND_INSTALL_FAIL 6
-/// When the active BYOND version changes. Parameters: (Nullable) [/datum/tgs_version] of the current BYOND, [/datum/tgs_version] of the new BYOND.
-#define TGS_EVENT_BYOND_ACTIVE_VERSION_CHANGE 7
+/// Before a engine install operation begins. Parameters: Version string of the installing engine.
+#define TGS_EVENT_ENGINE_INSTALL_START 5
+/// When a engine install operation fails. Parameters: Error message
+#define TGS_EVENT_ENGINE_INSTALL_FAIL 6
+/// When the active engine version changes. Parameters: (Nullable) Version string of the current engine, version string of the new engine.
+#define TGS_EVENT_ENGINE_ACTIVE_VERSION_CHANGE 7
/// When the compiler starts running. Parameters: Game directory path, origin commit SHA.
#define TGS_EVENT_COMPILE_START 8
/// When a compile is cancelled. No parameters.
@@ -108,7 +121,7 @@
// #define TGS_EVENT_DREAM_DAEMON_LAUNCH 22
/// After a single submodule update is performed. Parameters: Updated submodule name.
#define TGS_EVENT_REPO_SUBMODULE_UPDATE 23
-/// After CodeModifications are applied, before DreamMaker is run. Parameters: Game directory path, origin commit sha, byond version.
+/// After CodeModifications are applied, before DreamMaker is run. Parameters: Game directory path, origin commit sha, version string of the used engine.
#define TGS_EVENT_PRE_DREAM_MAKER 24
/// Whenever a deployment folder is deleted from disk. Parameters: Game directory path.
#define TGS_EVENT_DEPLOYMENT_CLEANUP 25
@@ -122,6 +135,7 @@
/// The watchdog will restart on reboot.
#define TGS_REBOOT_MODE_RESTART 2
+// Note that security levels are currently meaningless in OpenDream
/// DreamDaemon Trusted security level.
#define TGS_SECURITY_TRUSTED 0
/// DreamDaemon Safe security level.
@@ -136,20 +150,26 @@
/// DreamDaemon invisible visibility level.
#define TGS_VISIBILITY_INVISIBLE 2
+/// The Build Your Own Net Dream engine.
+#define TGS_ENGINE_TYPE_BYOND 0
+/// The OpenDream engine.
+#define TGS_ENGINE_TYPE_OPENDREAM 1
+
//REQUIRED HOOKS
/**
- * Call this somewhere in [/world/proc/New] that is always run. This function may sleep!
+ * Consumers MUST call this somewhere in [/world/proc/New] that is always run. This function may sleep!
*
* * event_handler - Optional user defined [/datum/tgs_event_handler].
* * minimum_required_security_level: The minimum required security level to run the game in which the DMAPI is integrated. Can be one of [TGS_SECURITY_ULTRASAFE], [TGS_SECURITY_SAFE], or [TGS_SECURITY_TRUSTED].
+ * * http_handler - Optional user defined [/datum/tgs_http_handler].
*/
-/world/proc/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE)
+/world/proc/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE, datum/tgs_http_handler/http_handler)
CAN_BE_REDEFINED(TRUE)
return
/**
- * Call this when your initializations are complete and your game is ready to play before any player interactions happen.
+ * Consumers MUST call this when world initializations are complete and the game is ready to play before any player interactions happen.
*
* This may use [/world/var/sleep_offline] to make this happen so ensure no changes are made to it while this call is running.
* Afterwards, consider explicitly setting it to what you want to avoid this BYOND bug: http://www.byond.com/forum/post/2575184
@@ -159,12 +179,10 @@
CAN_BE_REDEFINED(TRUE)
return
-/// Put this at the start of [/world/proc/Topic].
+/// Consumers MUST run this macro at the start of [/world/proc/Topic].
#define TGS_TOPIC var/tgs_topic_return = TgsTopic(args[1]); if(tgs_topic_return) return tgs_topic_return
-/**
- * Call this as late as possible in [world/proc/Reboot] (BEFORE ..()).
- */
+/// Consumers MUST call this as late as possible in [world/proc/Reboot] (BEFORE ..()).
/world/proc/TgsReboot()
CAN_BE_REDEFINED(TRUE)
return
@@ -261,7 +279,7 @@
/// The [/datum/tgs_chat_channel] the user was from.
var/datum/tgs_chat_channel/channel
-/// User definable handler for TGS events.
+/// User definable handler for TGS events This abstract version SHOULD be overridden to be used.
/datum/tgs_event_handler
/// If the handler receieves [TGS_EVENT_HEALTH_CHECK] events.
var/receive_health_checks = FALSE
@@ -275,7 +293,41 @@
set waitfor = FALSE
return
-/// User definable chat command.
+/// User definable handler for HTTP calls. This abstract version MUST be overridden to be used.
+/datum/tgs_http_handler
+
+/**
+ * User definable callback for executing HTTP GET requests.
+ * MUST perform BYOND sleeps while the request is in flight.
+ * MUST return a [/datum/tgs_http_result].
+ * SHOULD log its own errors
+ *
+ * url - The full URL to execute the GET request for including query parameters.
+ */
+/datum/tgs_http_handler/proc/PerformGet(url)
+ CRASH("[type]/PerformGet not implemented!")
+
+/// Result of a [/datum/tgs_http_handler] call. MUST NOT be overridden.
+/datum/tgs_http_result
+ /// HTTP response as text
+ var/response_text
+ /// Boolean request success flag. Set for any 2XX response code.
+ var/success
+
+/**
+ * Create a [/datum/tgs_http_result].
+ *
+ * * response_text - HTTP response as text. Must be provided in New().
+ * * success - Boolean request success flag. Set for any 2XX response code. Must be provided in New().
+ */
+/datum/tgs_http_result/New(response_text, success)
+ if(response_text && !istext(response_text))
+ CRASH("response_text was not text!")
+
+ src.response_text = response_text
+ src.success = success
+
+/// User definable chat command. This abstract version MUST be overridden to be used.
/datum/tgs_chat_command
/// The string to trigger this command on a chat bot. e.g `@bot name ...` or `!tgs name ...`.
var/name = ""
@@ -288,29 +340,36 @@
/**
* Process command activation. Should return a [/datum/tgs_message_content] to respond to the issuer with.
+ * MUST be implemented
*
- * sender - The [/datum/tgs_chat_user] who issued the command.
- * params - The trimmed string following the command `/datum/tgs_chat_command/var/name].
+ * * sender - The [/datum/tgs_chat_user] who issued the command.
+ * * params - The trimmed string following the command `/datum/tgs_chat_command/var/name].
*/
/datum/tgs_chat_command/proc/Run(datum/tgs_chat_user/sender, params)
CRASH("[type] has no implementation for Run()")
-/// User definable chat message.
+/// User definable chat message. MUST NOT be overridden.
/datum/tgs_message_content
- /// The tring content of the message. Must be provided in New().
+ /// The string content of the message. Must be provided in New().
var/text
/// The [/datum/tgs_chat_embed] to embed in the message. Not supported on all chat providers.
var/datum/tgs_chat_embed/structure/embed
+/**
+ * Create a [/datum/tgs_message_content].
+ *
+ * * text - The string content of the message.
+ */
/datum/tgs_message_content/New(text)
+ ..()
if(!istext(text))
TGS_ERROR_LOG("[/datum/tgs_message_content] created with no text!")
text = null
src.text = text
-/// User definable chat embed. Currently mirrors Discord chat embeds. See https://discord.com/developers/docs/resources/channel#embed-object-embed-structure for details.
+/// User definable chat embed. Currently mirrors Discord chat embeds. See https://discord.com/developers/docs/resources/message#embed-object for details.
/datum/tgs_chat_embed/structure
var/title
var/description
@@ -322,13 +381,13 @@
/// Colour must be #AARRGGBB or #RRGGBB hex string.
var/colour
- /// See https://discord.com/developers/docs/resources/channel#embed-object-embed-image-structure for details.
+ /// See https://discord.com/developers/docs/resources/message#embed-object-embed-image-structure for details.
var/datum/tgs_chat_embed/media/image
- /// See https://discord.com/developers/docs/resources/channel#embed-object-embed-thumbnail-structure for details.
+ /// See https://discord.com/developers/docs/resources/message#embed-object-embed-thumbnail-structure for details.
var/datum/tgs_chat_embed/media/thumbnail
- /// See https://discord.com/developers/docs/resources/channel#embed-object-embed-image-structure for details.
+ /// See https://discord.com/developers/docs/resources/message#embed-object-embed-video-structure for details.
var/datum/tgs_chat_embed/media/video
var/datum/tgs_chat_embed/footer/footer
@@ -337,7 +396,7 @@
var/list/datum/tgs_chat_embed/field/fields
-/// Common datum for similar discord embed medias.
+/// Common datum for similar Discord embed medias.
/datum/tgs_chat_embed/media
/// Must be set in New().
var/url
@@ -345,48 +404,58 @@
var/height
var/proxy_url
+/// Create a [/datum/tgs_chat_embed].
/datum/tgs_chat_embed/media/New(url)
+ ..()
if(!istext(url))
CRASH("[/datum/tgs_chat_embed/media] created with no url!")
src.url = url
-/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-footer-structure for details.
+/// See https://discord.com/developers/docs/resources/message#embed-object-embed-footer-structure for details.
/datum/tgs_chat_embed/footer
/// Must be set in New().
var/text
var/icon_url
var/proxy_icon_url
+/// Create a [/datum/tgs_chat_embed/footer].
/datum/tgs_chat_embed/footer/New(text)
+ ..()
if(!istext(text))
CRASH("[/datum/tgs_chat_embed/footer] created with no text!")
src.text = text
-/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-provider-structure for details.
+/// See https://discord.com/developers/docs/resources/message#embed-object-embed-provider-structure for details.
/datum/tgs_chat_embed/provider
var/name
var/url
-/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-author-structure for details. Must have name set in New().
+/// See https://discord.com/developers/docs/resources/message#embed-object-embed-author-structure for details. Must have name set in New().
/datum/tgs_chat_embed/provider/author
var/icon_url
var/proxy_icon_url
+/// Create a [/datum/tgs_chat_embed/footer].
/datum/tgs_chat_embed/provider/author/New(name)
+ ..()
if(!istext(name))
CRASH("[/datum/tgs_chat_embed/provider/author] created with no name!")
src.name = name
-/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-field-structure for details. Must have name and value set in New().
+/// See https://discord.com/developers/docs/resources/message#embed-object-embed-field-structure for details.
/datum/tgs_chat_embed/field
+ /// Must be set in New().
var/name
+ /// Must be set in New().
var/value
var/is_inline
+/// Create a [/datum/tgs_chat_embed/field].
/datum/tgs_chat_embed/field/New(name, value)
+ ..()
if(!istext(name))
CRASH("[/datum/tgs_chat_embed/field] created with no name!")
@@ -429,6 +498,7 @@
/**
* Send a message to connected chats. This function may sleep!
+ * If TGS is offline when called, the message may be placed in a queue to be sent and this function will return immediately. Your message will be sent when TGS reconnects to the game.
*
* message - The [/datum/tgs_message_content] to send.
* admin_only: If [TRUE], message will be sent to admin connected chats. Vice-versa applies.
@@ -439,6 +509,7 @@
/**
* Send a private message to a specific user. This function may sleep!
+ * If TGS is offline when called, the message may be placed in a queue to be sent and this function will return immediately. Your message will be sent when TGS reconnects to the game.
*
* message - The [/datum/tgs_message_content] to send.
* user: The [/datum/tgs_chat_user] to PM.
@@ -449,6 +520,7 @@
/**
* Send a message to connected chats that are flagged as game-related in TGS. This function may sleep!
+ * If TGS is offline when called, the message may be placed in a queue to be sent and this function will return immediately. Your message will be sent when TGS reconnects to the game.
*
* message - The [/datum/tgs_message_content] to send.
* channels - Optional list of [/datum/tgs_chat_channel]s to restrict the message to.
@@ -462,6 +534,11 @@
CAN_BE_REDEFINED(TRUE)
return
+/// Returns the running engine type
+/world/proc/TgsEngine()
+ CAN_BE_REDEFINED(TRUE)
+ return
+
/// Returns the current [/datum/tgs_version] of the DMAPI being used if it was activated, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping!
/world/proc/TgsApiVersion()
CAN_BE_REDEFINED(TRUE)
@@ -497,10 +574,21 @@
CAN_BE_REDEFINED(TRUE)
return
+/**
+ * Trigger an event in TGS. Requires TGS version >= 6.3.0. Returns [TRUE] if the event was triggered successfully, [FALSE] otherwise. This function may sleep!
+ *
+ * event_name - The name of the event to trigger
+ * parameters - Optional list of string parameters to pass as arguments to the event script. The first parameter passed to a script will always be the running game's directory followed by these parameters.
+ * wait_for_completion - If set, this function will not return until the event has run to completion.
+ */
+/world/proc/TgsTriggerEvent(event_name, list/parameters, wait_for_completion = FALSE)
+ CAN_BE_REDEFINED(TRUE)
+ return
+
/*
The MIT License
-Copyright (c) 2017-2023 Jordan Brown
+Copyright (c) 2017-2024 Jordan Brown
Permission is hereby granted, free of charge,
to any person obtaining a copy of this software and
diff --git a/code/__DEFINES/tgui.dm b/code/__DEFINES/tgui.dm
index db68d7089a6..b0cd0a979d4 100644
--- a/code/__DEFINES/tgui.dm
+++ b/code/__DEFINES/tgui.dm
@@ -24,6 +24,16 @@
/// Window is free and ready to receive data
#define TGUI_WINDOW_READY 2
+/// Though not the maximum renderable ByondUis within tgui, this is the maximum that the server will manage per-UI
+#define TGUI_MANAGED_BYONDUI_LIMIT 10
+
+// These are defines instead of being inline, as they're being sent over
+// from tgui-core, so can't be easily played with
+#define TGUI_MANAGED_BYONDUI_TYPE_RENDER "renderByondUi"
+#define TGUI_MANAGED_BYONDUI_TYPE_UNMOUNT "unmountByondUi"
+
+#define TGUI_MANAGED_BYONDUI_PAYLOAD_ID "renderByondUi"
+
/// Get a window id based on the provided pool index
#define TGUI_WINDOW_ID(index) "tgui-window-[index]"
/// Get a pool index of the provided window id
diff --git a/code/__HELPERS/areas.dm b/code/__HELPERS/areas.dm
index e5e7fba837d..18edf8f24b0 100644
--- a/code/__HELPERS/areas.dm
+++ b/code/__HELPERS/areas.dm
@@ -94,6 +94,9 @@
/proc/is_shuttle_area(var/area/A)
. = istype(A,/area/horizon/shuttle)
+/proc/is_shieldless_exterior(var/area/A)
+ . = istype(A,/area/horizon/exterior/no_shields)
+
/proc/is_area_with_turf(var/area/A)
. = isnum(A.x)
diff --git a/code/__HELPERS/icon_smoothing.dm b/code/__HELPERS/icon_smoothing.dm
index d40e4f19849..9d001ba9f93 100644
--- a/code/__HELPERS/icon_smoothing.dm
+++ b/code/__HELPERS/icon_smoothing.dm
@@ -274,7 +274,7 @@
/**
* Blend atoms
*/
-/atom/proc/handle_blending(adjacencies, var/list/dir_mods)
+/atom/proc/handle_blending(adjacencies, list/dir_mods)
SHOULD_NOT_SLEEP(TRUE)
LAZYINITLIST(dir_mods)
@@ -282,10 +282,10 @@
var/walls_found = 0
for(var/adjacency in list(N_NORTH, N_EAST, N_SOUTH, N_WEST))
if(adjacencies & adjacency)
- var/turf/T = get_step(src, REVERSE_DIR(adjacency))
+ var/turf/T = get_step(src, GLOB.ndir_to_dir[adjacency]) // get_step() expects byond native directions, so we convert N_* bitfields
if(is_type_in_list(T, can_blend_with))
if(attach_overlay)
- AddOverlays("[REVERSE_DIR(adjacency)]_[attach_overlay]")
+ AddOverlays("[GLOB.ndir_to_dir[adjacency]]_[attach_overlay]")
walls_found |= adjacency
dir_mods["[adjacency]"] = "-[blend_overlay]"
for(var/adjacency in list(N_NORTH, N_SOUTH))
@@ -297,7 +297,7 @@
var/has_adjacency = walls_found & adjacency
var/has_diagonal = walls_found & diagonal
- if(((adjacencies & adjacency) && (adjacencies && diagonal)) && (has_adjacency || has_diagonal))
+ if(((adjacencies & adjacency) && (adjacencies & diagonal)) && (has_adjacency || has_diagonal))
dir_mods["[adjacency][diagonal]"] = "-[prefix][has_adjacency ? "wall" : "win"]-[suffix][has_diagonal ? "wall" : "win"]"
if(attach_overlay)
AddOverlays("[prefix][suffix]_[attach_overlay]")
@@ -305,10 +305,15 @@
#undef ndir_to_initial
-/atom/proc/cardinal_smooth(adjacencies)
+/atom/proc/cardinal_smooth(adjacencies, list/dir_mods)
SHOULD_NOT_SLEEP(TRUE)
+ /**
+ * Below here we evaluate an object by their 4 corners and tell them how they're supposed to smooth depending on its adjacencies.
+ * The adjacencies we care about is the things that the atom can smooth with, determined in 'calculate_adjacencies()'.
+ * Think this as mapping an icon, every 16x16 corner counts.
+ */
- //NW CORNER
+ // NW CORNER
var/nw = "1-i"
if((adjacencies & N_NORTH) && (adjacencies & N_WEST))
if(adjacencies & N_NORTHWEST)
@@ -321,7 +326,7 @@
else if(adjacencies & N_WEST)
nw = "1-w"
- //NE CORNER
+ // NE CORNER
var/ne = "2-i"
if((adjacencies & N_NORTH) && (adjacencies & N_EAST))
if(adjacencies & N_NORTHEAST)
@@ -334,7 +339,7 @@
else if(adjacencies & N_EAST)
ne = "2-e"
- //SW CORNER
+ // SW CORNER
var/sw = "3-i"
if((adjacencies & N_SOUTH) && (adjacencies & N_WEST))
if(adjacencies & N_SOUTHWEST)
@@ -347,7 +352,7 @@
else if(adjacencies & N_WEST)
sw = "3-w"
- //SE CORNER
+ // SE CORNER
var/se = "4-i"
if((adjacencies & N_SOUTH) && (adjacencies & N_EAST))
if(adjacencies & N_SOUTHEAST)
@@ -360,6 +365,36 @@
else if(adjacencies & N_EAST)
se = "4-e"
+ /**
+ * Here we handle blend overlays. This is an extra step if we want our icons to take account whatever is defined in their 'can_blend_with' list
+ * and apply a different smooth overlay for them. An example to this is windows, they'll smooth regularly among themselves but if there's
+ * a wall next to them they'll apply a junction part. See 'handle_blending()' for blending direction modifiers (dir_mods).
+ */
+ if(length(dir_mods))
+
+ nw += LAZYACCESS(dir_mods, "[N_NORTH][N_WEST][N_NORTHWEST]") \
+ || LAZYACCESS(dir_mods, "[N_NORTH][N_WEST]") \
+ || LAZYACCESS(dir_mods, "[N_NORTH]") \
+ || LAZYACCESS(dir_mods, "[N_WEST]")
+
+ ne += LAZYACCESS(dir_mods, "[N_NORTH][N_EAST][N_NORTHEAST]") \
+ || LAZYACCESS(dir_mods, "[N_NORTH][N_EAST]") \
+ || LAZYACCESS(dir_mods, "[N_NORTH]") \
+ || LAZYACCESS(dir_mods, "[N_EAST]")
+
+ sw += LAZYACCESS(dir_mods, "[N_SOUTH][N_WEST][N_SOUTHWEST]") \
+ || LAZYACCESS(dir_mods, "[N_SOUTH][N_WEST]") \
+ || LAZYACCESS(dir_mods, "[N_SOUTH]") \
+ || LAZYACCESS(dir_mods, "[N_WEST]")
+
+ se += LAZYACCESS(dir_mods, "[N_SOUTH][N_EAST][N_SOUTHEAST]") \
+ || LAZYACCESS(dir_mods, "[N_SOUTH][N_EAST]") \
+ || LAZYACCESS(dir_mods, "[N_SOUTH]") \
+ || LAZYACCESS(dir_mods, "[N_EAST]")
+
+ /**
+ * Here we apply all the 4 corners we calculated and clean the cached corners.
+ */
var/list/New
var/list/Old
var/cut_f = smoothing_hints & SMOOTHHINT_CUT_F
diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm
index 8b6897358a6..d0baafa1094 100644
--- a/code/__HELPERS/text.dm
+++ b/code/__HELPERS/text.dm
@@ -912,3 +912,31 @@
/proc/endswith(input_text, ending)
var/input_length = LAZYLEN(ending)
return !!findtext(input_text, ending, -input_length)
+
+///Returns a string based on the weight class define used as argument
+/proc/weight_class_to_text(w_class)
+ switch(w_class)
+ if(WEIGHT_CLASS_TINY)
+ . = "tiny"
+ if(WEIGHT_CLASS_SMALL)
+ . = "small"
+ if(WEIGHT_CLASS_NORMAL)
+ . = "normal-sized"
+ if(WEIGHT_CLASS_BULKY)
+ . = "bulky"
+ if(WEIGHT_CLASS_HUGE)
+ . = "huge"
+ if(WEIGHT_CLASS_GIGANTIC)
+ . = "gigantic"
+ else
+ . = ""
+
+/proc/weight_class_to_tooltip(w_class)
+ switch(w_class)
+ if(WEIGHT_CLASS_TINY to WEIGHT_CLASS_SMALL)
+ return "This item can fit into pockets, boxes and backpacks."
+ if(WEIGHT_CLASS_NORMAL)
+ return "This item can fit into backpacks."
+ if(WEIGHT_CLASS_BULKY to WEIGHT_CLASS_GIGANTIC)
+ return "This item is too large to fit into any standard storage."
+ return ""
diff --git a/code/__HELPERS/turfs.dm b/code/__HELPERS/turfs.dm
index f93e5bbdc31..5e7be94c355 100644
--- a/code/__HELPERS/turfs.dm
+++ b/code/__HELPERS/turfs.dm
@@ -50,6 +50,8 @@
turfs += T
if(turfs.len)
return pick(turfs)
+ else
+ return null
///Returns a turf based on text inputs, original turf and viewing client
/proc/parse_caught_click_modifiers(list/modifiers, turf/origin, client/viewing_client)
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index 0f1515c4ffd..9fc9da65ddd 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -623,11 +623,6 @@ Turf and target are seperate in case you want to teleport some distance from a t
if (progbar)
qdel(progbar)
-/// Integer. Unique sequential ID from the `do_after` proc used to validate `DO_USER_UNIQUE_ACT` flag checks.
-/mob/var/do_unique_user_handle = 0
-/// The mob currently interacting with the atom during a `do_after` timer. Used to validate `DO_TARGET_UNIQUE_ACT` flag checks.
-/atom/var/mob/do_unique_target_user
-
/**
* Timed actions involving one mob user and (optionally) one target.
*
diff --git a/code/_globalvars/lists/mapping.dm b/code/_globalvars/lists/mapping.dm
index 7a406477291..a130b776b1c 100644
--- a/code/_globalvars/lists/mapping.dm
+++ b/code/_globalvars/lists/mapping.dm
@@ -93,6 +93,18 @@ GLOBAL_LIST_INIT(alldirs, list(
SOUTHWEST,
))
+/// Used in N_* directions (defined in \code\_DEFINES\icon_smoothing.dm) to Byond native conversions
+GLOBAL_LIST_INIT(ndir_to_dir, alist(
+ N_NORTH = NORTH,
+ N_SOUTH = SOUTH,
+ N_EAST = EAST,
+ N_WEST = WEST,
+ N_NORTHEAST = NORTHEAST,
+ N_NORTHWEST = NORTHWEST,
+ N_SOUTHEAST = SOUTHEAST,
+ N_SOUTHWEST = SOUTHWEST
+))
+
/// Just a list of all the area objects in the game
/// Note, areas can have duplicate types
GLOBAL_LIST_EMPTY(areas)
diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm
index da088571bec..ae783d2aa6a 100644
--- a/code/_onclick/click.dm
+++ b/code/_onclick/click.dm
@@ -3,10 +3,6 @@
~Sayu
*/
-// 1 decisecond click delay (above and beyond mob/next_move)
-/mob/var/next_click = 0
-
-
/**
* Before anything else, defer these calls to a per-mobtype handler. This allows us to
* remove istype() spaghetti code, but requires the addition of other handler procs to simplify it.
diff --git a/code/_onclick/click_handling.dm b/code/_onclick/click_handling.dm
index 286905a12e9..5098404d7f6 100644
--- a/code/_onclick/click_handling.dm
+++ b/code/_onclick/click_handling.dm
@@ -11,15 +11,6 @@ if(!click_handlers) { \
click_handlers += new/datum/click_handler/default(src) \
}
-/**
- * LAZYLIST (Instances of `/datum/click_handler`). Click handlers for this mob that should intercept and handle click
- * calls.
- *
- * The 'topmost'/'active' click handler for the mob is the handler currently at index `1`. By default, this will be
- * `/datum/click_handler/default`.
- */
-/mob/var/list/click_handlers
-
// In the mob code, because otherwise it's a redefinition
// /mob/Destroy()
// QDEL_LIST(click_handlers)
diff --git a/code/_onclick/hud/action.dm b/code/_onclick/hud/action.dm
index 69e323792aa..a5eb04343f3 100644
--- a/code/_onclick/hud/action.dm
+++ b/code/_onclick/hud/action.dm
@@ -284,6 +284,22 @@
check_flags = AB_CHECK_STUNNED|AB_CHECK_ALIVE|AB_CHECK_INSIDE
button_icon_state = "night_eyes"
+/datum/action/item_action/organ/night_eyes/Trigger()
+ if(!Checks())
+ return
+ var/obj/item/organ/internal/eyes/night/target_eyes = target
+ target_eyes.night_vision()
+
+/datum/action/item_action/organ/extended_eyes
+ check_flags = AB_CHECK_STUNNED|AB_CHECK_ALIVE|AB_CHECK_INSIDE
+ button_icon_state = "night_eyes"
+
+/datum/action/item_action/organ/extended_eyes/Trigger()
+ if(!Checks())
+ return
+ var/obj/item/organ/internal/eyes/night/target_eyes = target
+ target_eyes.extended_vision()
+
/datum/action/item_action/organ/night_eyes/rev
check_flags = AB_CHECK_ALIVE|AB_CHECK_INSIDE
button_icon_state = "rev_eyes"
diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm
index b097111884d..14c1882fa69 100644
--- a/code/_onclick/hud/hud.dm
+++ b/code/_onclick/hud/hud.dm
@@ -5,11 +5,6 @@
GLOBAL_DATUM_INIT(global_hud, /datum/global_hud, new)
GLOBAL_LIST(global_huds)
-/datum/hud/var/atom/movable/screen/grab_intent
-/datum/hud/var/atom/movable/screen/hurt_intent
-/datum/hud/var/atom/movable/screen/disarm_intent
-/datum/hud/var/atom/movable/screen/help_intent
-
/datum/global_hud
var/atom/movable/screen/vr_control
var/atom/movable/screen/druggy
@@ -111,12 +106,11 @@ GLOBAL_LIST(global_huds)
O.layer = IMPAIRED_LAYER
O.mouse_opacity = MOUSE_OPACITY_TRANSPARENT
-/*
- The hud datum
- Used to show and hide huds for all the different mob types,
- including inventories and item quick actions.
-*/
-
+/**
+ * The hud datum
+ * Used to show and hide huds for all the different mob types,
+ * including inventories and item quick actions.
+ */
/datum/hud
///The mob that possesses the HUD
var/mob/mymob
@@ -136,12 +130,21 @@ GLOBAL_LIST(global_huds)
///Boolean, if the action buttons are hidden
var/action_buttons_hidden = FALSE
+ /*
+ STOP ADDING SNOWFLAKE HUD ELEMENTS LIKE /datum/hud/var/atom/movable/screen/help_intent
+ IN DIFFERENT FILES ENTIRELY. IF YOU ARE ADDING A NEW HUD ELEMENT TO THIS, PUT IT IN THIS FILE UNDER THIS LIST,
+ AND INCLUDE A QDEL_NULL() FOR IT IN THE DESTROY PROC.
+ */
var/atom/movable/screen/blobpwrdisplay
var/atom/movable/screen/blobhealthdisplay
var/atom/movable/screen/r_hand_hud_object
var/atom/movable/screen/l_hand_hud_object
var/atom/movable/screen/action_intent
var/atom/movable/screen/movement_intent/move_intent
+ var/atom/movable/screen/grab_intent
+ var/atom/movable/screen/hurt_intent
+ var/atom/movable/screen/disarm_intent
+ var/atom/movable/screen/help_intent
var/list/adding
var/list/other
@@ -177,26 +180,27 @@ GLOBAL_LIST(global_huds)
..()
/datum/hud/Destroy()
- grab_intent = null
- hurt_intent = null
- disarm_intent = null
- help_intent = null
- blobpwrdisplay = null
- blobhealthdisplay = null
- r_hand_hud_object = null
- l_hand_hud_object = null
- action_intent = null
- move_intent = null
- adding = null
- other = null
- hotkeybuttons = null
-// item_action_list = null // ?
mymob = null
+ QDEL_NULL(blobpwrdisplay)
+ QDEL_NULL(blobhealthdisplay)
+ QDEL_NULL(r_hand_hud_object)
+ QDEL_NULL(l_hand_hud_object)
+ QDEL_NULL(action_intent)
+ QDEL_NULL(move_intent)
+ QDEL_NULL(grab_intent)
+ QDEL_NULL(hurt_intent)
+ QDEL_NULL(disarm_intent)
+ QDEL_NULL(help_intent)
+
+ adding?.Cut()
+ other?.Cut()
+ QDEL_LIST(hotkeybuttons)
QDEL_LIST_ASSOC_VAL(plane_masters)
QDEL_LIST_ASSOC_VAL(plane_master_controllers)
+ QDEL_NULL(hide_actions_toggle)
- . = ..()
+ return ..()
/datum/hud/proc/hidden_inventory_update()
if(!mymob)
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index d3725ee8186..5e8fe70050f 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -26,10 +26,10 @@
/atom/movable/screen/Destroy(force = FALSE)
master = null
screen_loc = null
- if(hud?.mymob?.client)
+ if(length(hud?.mymob?.client?.screen))
hud.mymob.client.screen -= src
hud = null
- . = ..()
+ return ..()
/// Screen elements are always on top of the players screen and don't move so yes they are adjacent
/atom/movable/screen/Adjacent(atom/neighbor, atom/target, atom/movable/mover)
diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index 6ee66f8150f..de3344d68d6 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -150,7 +150,7 @@ This calls [atom/proc/tool_act], among others.
return 0
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
- user.do_attack_animation(target_mob, src)
+ user.do_attack_animation(target_mob, used_item = src)
if(!user.aura_check(AURA_TYPE_WEAPON, src, user))
return FALSE
diff --git a/code/controllers/subsystems/chat.dm b/code/controllers/subsystems/chat.dm
index d76ce698d6f..2d227a07ed9 100644
--- a/code/controllers/subsystems/chat.dm
+++ b/code/controllers/subsystems/chat.dm
@@ -10,31 +10,82 @@ SUBSYSTEM_DEF(chat)
flags = SS_TICKER | SS_NO_INIT
wait = 1
priority = FIRE_PRIORITY_CHAT
- init_order = INIT_ORDER_CHAT
+ init_order = INITSTAGE_MAX
- var/list/payload_by_client = list()
+ /// Assosciates a ckey with a list of messages to send to them.
+ var/list/list/datum/chat_payload/client_to_payloads = list()
+
+ /// Associates a ckey with an assosciative list of their last CHAT_RELIABILITY_HISTORY_SIZE messages.
+ var/list/list/datum/chat_payload/client_to_reliability_history = list()
+
+ /// Assosciates a ckey with their next sequence number.
+ var/list/client_to_sequence_number = list()
+
+/datum/controller/subsystem/chat/proc/generate_payload(client/target, message_data)
+ var/sequence = client_to_sequence_number[target.ckey]
+ client_to_sequence_number[target.ckey] += 1
+
+ var/datum/chat_payload/payload = new
+ payload.sequence = sequence
+ payload.content = message_data
+
+ if(!(target.ckey in client_to_reliability_history))
+ client_to_reliability_history[target.ckey] = list()
+ var/list/client_history = client_to_reliability_history[target.ckey]
+ client_history["[sequence]"] = payload
+
+ if(length(client_history) > 5)
+ var/oldest = text2num(client_history[1])
+ for(var/index in 2 to length(client_history))
+ var/test = text2num(client_history[index])
+ if(test < oldest)
+ oldest = test
+ client_history -= "[oldest]"
+ return payload
+
+/datum/controller/subsystem/chat/proc/send_payload_to_client(client/target, datum/chat_payload/payload)
+ target.tgui_panel.window.send_message("chat/message", payload.into_message())
+ SEND_TEXT(target, payload.get_content_as_html())
/datum/controller/subsystem/chat/fire()
- for(var/key in payload_by_client)
- var/client/client = key
- var/payload = payload_by_client[key]
- payload_by_client -= key
- if(client)
- // Send to tgchat
- client.tgui_panel?.window.send_message("chat/message", payload)
- // Send to old chat
- for(var/message in payload)
- to_target(client, message_to_html(message))
+ for(var/ckey in client_to_payloads)
+ var/client/target = GLOB.directory[ckey]
+ if(isnull(target)) // verify client still exists
+ LAZYREMOVE(client_to_payloads, ckey)
+ continue
+
+ for(var/datum/chat_payload/payload as anything in client_to_payloads[ckey])
+ send_payload_to_client(target, payload)
+ LAZYREMOVE(client_to_payloads, ckey)
+
if(MC_TICK_CHECK)
return
-/datum/controller/subsystem/chat/proc/queue(target, message)
- if(islist(target))
- for(var/_target in target)
- var/client/client = CLIENT_FROM_VAR(_target)
- if(client)
- LAZYADD(payload_by_client[client], list(message))
+/datum/controller/subsystem/chat/proc/queue(queue_target, list/message_data)
+ var/list/targets = islist(queue_target) ? queue_target : list(queue_target)
+ for(var/target in targets)
+ var/client/client = CLIENT_FROM_VAR(target)
+ if(isnull(client))
+ continue
+ LAZYADDASSOCLIST(client_to_payloads, client.ckey, generate_payload(client, message_data))
+
+/datum/controller/subsystem/chat/proc/send_immediate(send_target, list/message_data)
+ var/list/targets = islist(send_target) ? send_target : list(send_target)
+ for(var/target in targets)
+ var/client/client = CLIENT_FROM_VAR(target)
+ if(isnull(client))
+ continue
+ send_payload_to_client(client, generate_payload(client, message_data))
+
+/datum/controller/subsystem/chat/proc/handle_resend(client/client, sequence)
+ var/list/client_history = client_to_reliability_history[client.ckey]
+ sequence = "[sequence]"
+ if(isnull(client_history) || !(sequence in client_history))
return
- var/client/client = CLIENT_FROM_VAR(target)
- if(client)
- LAZYADD(payload_by_client[client], list(message))
+
+ var/datum/chat_payload/payload = client_history[sequence]
+ if(payload.resends > 3)
+ return // we tried but byond said no
+
+ payload.resends += 1
+ send_payload_to_client(client, client_history[sequence])
diff --git a/code/controllers/subsystems/garbage.dm b/code/controllers/subsystems/garbage.dm
index 37e9b91fa51..9ec3886daa6 100644
--- a/code/controllers/subsystems/garbage.dm
+++ b/code/controllers/subsystems/garbage.dm
@@ -306,6 +306,18 @@ SUBSYSTEM_DEF(garbage)
if (time > 0.1 SECONDS)
postpone(time)
+
+ // Standard sentry logging for hard dels other than the two subsystems that will always hard del every round
+ var/sentry_threshold = 0.25 SECONDS
+ if (time > sentry_threshold && SSsentry)
+ SSsentry.capture_message(
+ "Hard delete: [type]",
+ "warning",
+ "garbage",
+ tags = list("datum_type" = "[type]"),
+ extra = list("ref_id" = refID, "time_ms" = tick_usage, "details" = detail)
+ )
+
var/threshold = 0.5 // Used to be CONFIG_GET(number/hard_deletes_overrun_threshold)
if (threshold && (time > threshold SECONDS))
if (!(type_info.qdel_flags & QDEL_ITEM_ADMINS_WARNED))
@@ -318,7 +330,7 @@ SUBSYSTEM_DEF(garbage)
"warning",
"garbage",
tags = list("datum_type" = "[type]"),
- extra = list("ref_id" = refID, "time_ms" = tick_usage)
+ extra = list("ref_id" = refID, "time_ms" = tick_usage, "details" = detail)
)
type_info.hard_deletes_over_threshold++
var/overrun_limit = 0 // Used to be CONFIG_GET(number/hard_deletes_overrun_limit)
diff --git a/code/controllers/subsystems/initialization/atlas.dm b/code/controllers/subsystems/initialization/atlas.dm
index 3f0eae924bf..d14a5adab22 100644
--- a/code/controllers/subsystems/initialization/atlas.dm
+++ b/code/controllers/subsystems/initialization/atlas.dm
@@ -23,37 +23,50 @@ SUBSYSTEM_DEF(atlas)
/**
* Note that the dirs here are REVERSE because they're used for entry points, so it'd be the dir facing starboard for example.
* These are strings because otherwise the list indexes would be out of bounds. Thanks BYOND.
+ *
+ * SOUTH = 1, NORTH = 2, WEST = 4, EAST = 8,
+ * NORTH-EAST = 5, SOUTH-EAST = 6, NORTH-WEST = 9, SOUTH-WEST = 10,
*/
var/list/naval_to_dir = list(
- "1" = list(
+ "1" = list( //Ship Fore is facing North. (These are reversed, a shot travelling south would enter from the north.)
"starboard" = WEST,
"port" = EAST,
"fore" = SOUTH,
- "aft" = NORTH
+ "aft" = NORTH,
+ "aft-starboard" = NORTH|WEST,
+ "fore-starboard" = SOUTH|WEST,
+ "aft-port" = NORTH|EAST,
+ "fore-port" = SOUTH|EAST
),
- "2" = list(
+ "2" = list( //Ship Fore is facing South.
"starboard" = EAST,
"port" = WEST,
"fore" = NORTH,
- "aft" = SOUTH
+ "aft" = SOUTH,
+ "aft-starboard" = SOUTH|EAST,
+ "fore-starboard" = NORTH|EAST,
+ "aft-port" = SOUTH|WEST,
+ "fore-port" = NORTH|WEST
),
- "4" = list(
+ "4" = list( //Ship Fore is facing West.
"starboard" = NORTH,
"port" = SOUTH,
"fore" = WEST,
- "aft" = EAST
+ "aft" = EAST,
+ "aft-starboard" = EAST|NORTH,
+ "fore-starboard" = WEST|NORTH,
+ "aft-port" = EAST|SOUTH,
+ "fore-port" = WEST|SOUTH
),
- "4" = list(
- "starboard" = NORTH,
- "port" = SOUTH,
- "fore" = WEST,
- "aft" = EAST
- ),
- "8" = list(
+ "8" = list( //Ship Fore is facing East.
"starboard" = SOUTH,
"port" = NORTH,
"fore" = EAST,
- "aft" = WEST
+ "aft" = WEST,
+ "aft-starboard" = WEST|SOUTH,
+ "fore-starboard" = EAST|SOUTH,
+ "aft-port" = WEST|NORTH,
+ "fore-port" = EAST|NORTH
)
)
@@ -62,49 +75,49 @@ SUBSYSTEM_DEF(atlas)
"1" = "aft",
"2" = "fore",
"4" = "port",
- "5" = "port",
- "6" = "port",
+ "5" = "aft-port",
+ "6" = "fore-port",
"8" = "starboard",
- "9" = "starboard",
- "10" = "starboard"
+ "9" = "aft-starboard",
+ "10" = "fore-starboard"
),
"2" = list(
"1" = "fore",
"2" = "aft",
"4" = "starboard",
- "5" = "starboard",
- "6" = "starboard",
+ "5" = "fore-starboard",
+ "6" = "aft-starboard",
"8" = "port",
- "9" = "port",
- "10" = "port"
+ "9" = "fore-port",
+ "10" = "aft-port"
),
"4" = list(
"1" = "starboard",
"2" = "port",
"4" = "aft",
- "5" = "starboard",
- "6" = "port",
+ "5" = "starboard-aft",
+ "6" = "port-aft",
"8" = "fore",
- "9" = "starboard",
- "10" = "port"
+ "9" = "starboard-fore",
+ "10" = "port-fore"
),
"5" = list( //northeast
- "1" = "starboard",
- "2" = "port",
- "4" = "port",
+ "1" = "aft-starboard",
+ "2" = "fore-port",
+ "4" = "aft-port",
"5" = "aft",
"6" = "port",
- "8" = "starboard",
+ "8" = "fore-starboard",
"9" = "starboard",
"10" = "fore"
),
"6" = list( //southeast
- "1" = "starboard",
- "2" = "port",
- "4" = "starboard",
+ "1" = "fore-starboard",
+ "2" = "aft-port",
+ "4" = "aft-starboard",
"5" = "starboard",
"6" = "aft",
- "8" = "port",
+ "8" = "fore-port",
"9" = "fore",
"10" = "port"
),
@@ -112,31 +125,31 @@ SUBSYSTEM_DEF(atlas)
"1" = "port",
"2" = "starboard",
"4" = "fore",
- "5" = "port",
- "6" = "starboard",
+ "5" = "port-fore",
+ "6" = "starboard-fore",
"8" = "aft",
- "9" = "port",
- "10" = "starboard"
+ "9" = "port-aft",
+ "10" = "starboard-aft"
),
"9" = list( //northwest
- "1" = "port",
- "2" = "starboard",
- "4" = "port",
+ "1" = "aft-port",
+ "2" = "fore-starboard",
+ "4" = "fore-port",
"5" = "port",
- "6" = "fore",
- "8" = "starboard",
+ "6" = "aft-starboard",
+ "8" = "fore",
"9" = "aft",
"10" = "starboard"
),
"10" = list( //southwest
- "1" = "port",
- "2" = "starboard",
- "4" = "starboard",
+ "1" = "fore-port",
+ "2" = "aft-starboard",
+ "4" = "fore-starboard",
"5" = "fore",
"6" = "starboard",
- "8" = "port",
- "9" = "port",
- "10" = "aft"
+ "8" = "aft-port",
+ "9" = "aft",
+ "10" = "port"
)
)
diff --git a/code/controllers/subsystems/job.dm b/code/controllers/subsystems/job.dm
index ae9441b7b63..58f5246fc9e 100644
--- a/code/controllers/subsystems/job.dm
+++ b/code/controllers/subsystems/job.dm
@@ -410,9 +410,6 @@ SUBSYSTEM_DEF(jobs)
Debug("ER/([H]): Completed.")
return H
-/mob/living/carbon/human
- var/tmp/centcomm_despawn_timer
-
/mob/living/proc/centcomm_timeout()
if (!istype(get_area(src), /area/centcom/spawning))
return FALSE
diff --git a/code/controllers/subsystems/mob_ai.dm b/code/controllers/subsystems/mob_ai.dm
index fff49cc8e96..2f13e380797 100644
--- a/code/controllers/subsystems/mob_ai.dm
+++ b/code/controllers/subsystems/mob_ai.dm
@@ -66,9 +66,6 @@ SUBSYSTEM_DEF(mob_ai)
mutexes -= mob_weakref
-/mob
- var/thinking_enabled = FALSE
-
/**
* Perform AI logic for a mob, called by the AI subsystem
*
diff --git a/code/controllers/subsystems/night_lighting.dm b/code/controllers/subsystems/night_lighting.dm
index 9780477bf75..625269650d4 100644
--- a/code/controllers/subsystems/night_lighting.dm
+++ b/code/controllers/subsystems/night_lighting.dm
@@ -50,12 +50,16 @@ SUBSYSTEM_DEF(nightlight)
/datum/controller/subsystem/nightlight/proc/get_apc_list(var/whitelisted_only = 1)
var/list/obj/structure/machinery/power/apc/lighting_apcs = list()
- for (var/A in get_sorted_areas())
- var/area/B = A
- if (B.no_light_control || (!(B.allow_nightmode) && whitelisted_only))
+ for (var/obj/structure/machinery/power/apc/APC in SSmachinery.apc_units)
+ if (QDELETED(APC) || APC.aidisabled)
continue
- if (B.apc && !B.apc.aidisabled)
- lighting_apcs += B.apc
+
+ var/area/apc_area = APC.area || get_area(APC)
+ if (!apc_area)
+ continue
+ if (apc_area.no_light_control || (!(apc_area.allow_nightmode) && whitelisted_only))
+ continue
+ lighting_apcs += APC
CHECK_TICK
diff --git a/code/controllers/subsystems/plants.dm b/code/controllers/subsystems/plants.dm
index 78747e967e7..60ef691e6a0 100644
--- a/code/controllers/subsystems/plants.dm
+++ b/code/controllers/subsystems/plants.dm
@@ -12,6 +12,8 @@ SUBSYSTEM_DEF(plants)
var/list/seeds = list()
/// Gene obfuscation for delicious trial and error goodness.
var/list/gene_tag_masks = list()
+ /// Reverse lookup for gene_tag_masks, keyed by real gene tag.
+ var/list/gene_masks_by_tag = list()
/// Stores images of growth, fruits and seeds.
var/list/plant_icon_cache = list()
/// List of all harvested product sprites.
@@ -83,6 +85,7 @@ SUBSYSTEM_DEF(plants)
used_masks += gene_mask
plant_traits -= gene_tag
gene_tag_masks[gene_mask] = gene_tag
+ gene_masks_by_tag[gene_tag] = gene_mask
plant_gene_datums[gene_mask] = G
gene_masked_list += (list(list("tag" = gene_tag, "mask" = gene_mask)))
@@ -93,6 +96,7 @@ SUBSYSTEM_DEF(plants)
src.product_descs = SSplants.product_descs
src.seeds = SSplants.seeds
src.gene_tag_masks = SSplants.gene_tag_masks
+ src.gene_masks_by_tag = SSplants.gene_masks_by_tag
src.plant_icon_cache = SSplants.plant_icon_cache
src.plant_sprites = SSplants.plant_sprites
src.plant_product_sprites = SSplants.plant_product_sprites
@@ -146,6 +150,9 @@ SUBSYSTEM_DEF(plants)
SET_SEED_TRAIT(seed, TRAIT_HIGHKPA_TOLERANCE, 200)
return seed
+/datum/controller/subsystem/plants/proc/get_gene_mask(var/gene_tag)
+ return gene_masks_by_tag[gene_tag] || gene_tag
+
/// Debug for testing seed genes.
/client/proc/show_plant_genes()
set category = "Debug"
diff --git a/code/controllers/subsystems/processing/nanoui.dm b/code/controllers/subsystems/processing/nanoui.dm
deleted file mode 100644
index ee84adf78be..00000000000
--- a/code/controllers/subsystems/processing/nanoui.dm
+++ /dev/null
@@ -1,241 +0,0 @@
-PROCESSING_SUBSYSTEM_DEF(nanoui)
- // Subsystem stuff.
- name = "NanoUI"
- flags = SS_NO_INIT
- priority = SS_PRIORITY_NANOUI
- stat_tag = "A"
-
- // NanoUI stuff.
- var/list/open_nanouis = list()
-
-/**
- * Get an open /nanoui ui for the current user, src_object and ui_key and try to update it with data
- *
- * * user - /mob The mob who opened/owns the ui
- * * src_object - /obj|/mob The obj or mob which the ui belongs to
- * * ui_key - A string key used for the ui
- * * data - List, the data to be passed to the ui, if it exists
- * * force_open - Boolean, the ui is being forced to (re)open, so close ui if it exists (instead of updating)
- *
- * Returns the `/nanoui` found ui, for null if none exists
- */
-/datum/controller/subsystem/processing/nanoui/proc/try_update_ui(mob/user, src_object, ui_key, datum/nanoui/ui, data, force_open = FALSE)
- if (!ui) // no ui has been passed, so we'll search for one
- ui = get_open_ui(user, src_object, ui_key)
-
- if (ui)
- // The UI is already open
- if (!force_open)
- ui.push_data(data)
- return ui
- else
- ui.reinitialise(new_initial_data=data)
- return ui
-
- return null
-
-/**
- * Get an open /nanoui ui for the current user, src_object and ui_key
- *
- * * user - The `/mob` who opened/owns the ui
- * * src_object - The `/obj` or `/mob` which the ui belongs to
- * * ui_key - A string key used for the ui
- */
-/datum/controller/subsystem/processing/nanoui/proc/get_open_ui(mob/user, src_object, ui_key)
- var/src_object_key = REF(src_object)
- if (!LAZYLEN(open_nanouis[src_object_key]) || !LAZYLEN(open_nanouis[src_object_key][ui_key]))
- return null
-
- for (var/datum/nanoui/ui in open_nanouis[src_object_key][ui_key])
- if (ui.user == user)
- return ui
-
- //testing("nanomanager/get_open_ui mob [user.name] [src_object:name] [ui_key] - ui not found")
- return null
-
-/**
- * Update all `/nanoui` uis attached to src_object
- *
- * * src_object - The `/obj` or `/mob` which the uis are attached to
- *
- * Returns the number of UIs updated
- */
-/datum/controller/subsystem/processing/nanoui/proc/update_uis(src_object)
- var/src_object_key = REF(src_object)
- if (!LAZYLEN(open_nanouis[src_object_key]))
- return 0
-
- . = 0
- var/list/obj_uis = open_nanouis[src_object_key]
- for (var/ui_key in obj_uis)
- for (var/thing in obj_uis[ui_key])
- var/datum/nanoui/ui = thing
- if(ui && ui.src_object && ui.user && ui.src_object.ui_host())
- ui.process(1)
- .++
-
-/**
- * Close all `/nanoui` uis attached to src_object
- *
- * * src_object - The `/obj` or `/mob` which the uis are attached to
- *
- * Returns the number of UIs closed
- */
-/datum/controller/subsystem/processing/nanoui/proc/close_uis(src_object)
- var/src_object_key = REF(src_object)
- if (!open_nanouis[src_object_key] || !islist(open_nanouis[src_object_key]))
- return 0
-
- . = 0
- var/list/obj_uis = open_nanouis[src_object_key]
- for (var/ui_key in obj_uis)
- for (var/thing in obj_uis[ui_key])
- var/datum/nanoui/ui = thing
- if(ui && ui.src_object && ui.user && ui.src_object.ui_host())
- ui.close()
- .++
-
-/**
- * Update /nanoui uis belonging to user
- *
- * * user - The `/mob` who owns the uis
- * * src_object - An `/obj` or `/mob` that, if is provided, only update uis which are attached to it (optional)
- * * ui_key - A string, if ui_key is provided, only update uis with a matching ui_key (optional)
- *
- * Returns the number of UIs updated
- */
-/datum/controller/subsystem/processing/nanoui/proc/update_user_uis(mob/user, src_object, ui_key)
- if (!LAZYLEN(user.open_nanouis))
- return 0 // has no open uis
-
- . = 0
- for (var/thing in user.open_nanouis)
- var/datum/nanoui/ui = thing
- if (NULL_OR_EQUAL(src_object, ui.src_object) && NULL_OR_EQUAL(ui_key, ui.ui_key))
- ui.process(1)
- .++
-
-/datum/controller/subsystem/processing/nanoui/proc/close_user_uis(mob/user, src_object, ui_key)
- if (!LAZYLEN(user.open_nanouis))
- return 0
-
- for (var/thing in user.open_nanouis)
- var/datum/nanoui/ui = thing
- if (NULL_OR_EQUAL(src_object, ui.src_object) && NULL_OR_EQUAL(ui_key, ui.ui_key))
- ui.close()
- .++
-
- //testing("nanomanager/close_user_uis mob [user.name] closed [open_nanouis.len] of [.] uis")
-
-/**
- * Add a /nanoui ui to the list of open uis
- * This is called by the /nanoui open() proc
- *
- * * ui - The `/nanoui` ui to add
- */
-/datum/controller/subsystem/processing/nanoui/proc/ui_opened(datum/nanoui/ui)
- var/src_object_key = REF(ui.src_object)
- LAZYINITLIST(open_nanouis[src_object_key])
-
- LAZYADD(ui.user.open_nanouis, ui)
- LAZYADD(open_nanouis[src_object_key][ui.ui_key], ui)
- START_PROCESSING(SSnanoui, ui)
- //testing("nanomanager/ui_opened mob [ui.user.name] [ui.src_object:name] [ui.ui_key] - user.open_nanouis [ui.user.open_nanouis.len] | uis [uis.len] | processing_uis [processing_uis.len]")
-
-/**
- * Remove a /nanoui ui from the list of open uis
- * This is called by the /nanoui close() proc
- *
- * * ui - A `/nanoui` to remove
- *
- * Returns FALSE if no ui was removed, TRUE if removed successfully
- */
-/datum/controller/subsystem/processing/nanoui/proc/ui_closed(datum/nanoui/ui)
- var/src_object_key = REF(ui.src_object)
- var/ui_key = ui.ui_key
- var/list/obj_uis = open_nanouis[src_object_key]
-
- if (!LAZYLEN(obj_uis) || !obj_uis[ui_key])
- return 0 // Wasn't open.
-
- STOP_PROCESSING(SSnanoui, ui)
- if(ui.user) // Sanity check in case a user has been deleted (say a blown up borg watching the alarm interface)
- LAZYREMOVE(ui.user.open_nanouis, ui)
-
- obj_uis[ui_key] -= ui
-
- if (!LAZYLEN(obj_uis[ui_key]))
- obj_uis -= ui_key
-
- if (!LAZYLEN(obj_uis))
- open_nanouis -= src_object_key
-
- //testing("nanomanager/ui_closed mob [ui.user.name] [ui.src_object:name] [ui.ui_key] - user.open_nanouis [ui.user.open_nanouis.len] | uis [uis.len] | processing_uis [processing_uis.len]")
-
- return 1
-
-/**
- * This is called on user logout
- * Closes/clears all uis attached to the user's `/mob`
- *
- * * user - The user's `/mob`
- */
-/datum/controller/subsystem/processing/nanoui/proc/user_logout(mob/user)
- return close_user_uis(user)
-
-/**
- * This is called when a player transfers from one mob to another
- * Transfers all open UIs to the new mob
- *
- * * oldMob - The user's old `/mob`
- * * newMob - The user's new `/mob`
- */
-/datum/controller/subsystem/processing/nanoui/proc/user_transferred(mob/oldMob, mob/newMob)
- //testing("nanomanager/user_transferred from mob [oldMob.name] to mob [newMob.name]")
- if (!oldMob || !LAZYLEN(oldMob.open_nanouis) || !LAZYLEN(open_nanouis))
- //testing("nanomanager/user_transferred mob [oldMob.name] has no open uis")
- return 0 // has no open uis
-
- for (var/thing in oldMob.open_nanouis)
- var/datum/nanoui/ui = thing
- ui.user = newMob
- LAZYADD(newMob.open_nanouis, ui)
-
- oldMob.open_nanouis = null
-
- return 1 // success
-
-/datum/asset/nanoui
- var/list/common = list()
-
- var/list/common_dirs = list(
- "nano/css/",
- "nano/js/",
- "nano/images/",
- "nano/images/status_icons/",
- "nano/templates/"
- )
- var/list/uncommon_dirs = list()
-
-/datum/asset/nanoui/register()
- // Crawl the directories to find files.
- for (var/path in common_dirs)
- var/list/filenames = flist(path)
- for(var/filename in filenames)
- if(copytext(filename, length(filename)) != "/") // Ignore directories.
- if(fexists(path + filename))
- common[filename] = fcopy_rsc(path + filename)
- SSassets.transport.register_asset(filename, common[filename])
- for (var/path in uncommon_dirs)
- var/list/filenames = flist(path)
- for(var/filename in filenames)
- if(copytext(filename, length(filename)) != "/") // Ignore directories.
- if(fexists(path + filename))
- SSassets.transport.register_asset(filename, fcopy_rsc(path + filename))
-
-/datum/asset/nanoui/send(client, uncommon)
- if(!islist(uncommon))
- uncommon = list(uncommon)
-
- SSassets.transport.send_assets(client, uncommon)
- SSassets.transport.send_assets(client, common)
diff --git a/code/controllers/subsystems/records.dm b/code/controllers/subsystems/records.dm
index 07679c4e122..d20e39211f5 100644
--- a/code/controllers/subsystems/records.dm
+++ b/code/controllers/subsystems/records.dm
@@ -213,7 +213,7 @@ SUBSYSTEM_DEF(records)
return GLOB.always_state
/datum/controller/subsystem/records/ui_status(mob/user, datum/ui_state/state)
- return (isnewplayer(user) || isghost(user) || issilicon(user)) ? UI_INTERACTIVE : UI_CLOSE
+ return (isnewplayer(user) || isghost(user) || tgui_silicon_user(user)) ? UI_INTERACTIVE : UI_CLOSE
/datum/controller/subsystem/records/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
. = ..()
diff --git a/code/controllers/subsystems/statpanel.dm b/code/controllers/subsystems/statpanel.dm
index 465c6fad443..575d914a0db 100644
--- a/code/controllers/subsystems/statpanel.dm
+++ b/code/controllers/subsystems/statpanel.dm
@@ -186,6 +186,11 @@ SUBSYSTEM_DEF(statpanels)
atoms_to_display += turf_content
/// Set the atoms we're meant to display
+ // Lazy-init: SSstatpanels can fire for a client whose obj_window was never
+ // created (mob transfer / relogin) or was nulled by /datum/object_window_info/Destroy()
+ // while mob.listed_turf survived. Without this guard we'd null-deref atoms_to_show.
+ if(!target.obj_window)
+ target.obj_window = new /datum/object_window_info(target)
var/datum/object_window_info/obj_window = target.obj_window
obj_window.atoms_to_show = atoms_to_display
START_PROCESSING(SSobj_tab_items, obj_window)
@@ -210,6 +215,9 @@ SUBSYSTEM_DEF(statpanels)
// No turf? go away
if(!load_from.mob?.listed_turf)
return list()
+ // Lazy-init for the same lifecycle reasons as set_turf_examine_tab
+ if(!load_from.obj_window)
+ load_from.obj_window = new /datum/object_window_info(load_from)
var/datum/object_window_info/obj_window = load_from.obj_window
var/list/already_seen = obj_window.atoms_to_images
var/list/to_make = obj_window.atoms_to_imagify
diff --git a/code/controllers/subsystems/processing/tgui.dm b/code/controllers/subsystems/tgui.dm
similarity index 71%
rename from code/controllers/subsystems/processing/tgui.dm
rename to code/controllers/subsystems/tgui.dm
index 77186dbf75b..563730f6b77 100644
--- a/code/controllers/subsystems/processing/tgui.dm
+++ b/code/controllers/subsystems/tgui.dm
@@ -10,11 +10,11 @@
*
*/
-PROCESSING_SUBSYSTEM_DEF(tgui)
+SUBSYSTEM_DEF(tgui)
name = "tgui"
wait = 9
flags = SS_NO_INIT
- priority = SS_PRIORITY_NANOUI
+ priority = FIRE_PRIORITY_TGUI
runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT
/// A list of UIs scheduled to process
@@ -24,54 +24,39 @@ PROCESSING_SUBSYSTEM_DEF(tgui)
/// The HTML base used for all UIs.
var/basehtml
-/datum/controller/subsystem/processing/tgui/PreInit()
- basehtml = file2text('tgui/public/tgui.html')
- // Inject inline polyfills
- var/polyfill = file2text('tgui/public/tgui-polyfill.min.js')
- polyfill = ""
- basehtml = replacetextEx(basehtml, "", polyfill)
- basehtml = replacetextEx(basehtml, "", "NanoTrasen © 2457-[text2num(time2text(world.realtime, "YYYY")) + 442]")
+/datum/controller/subsystem/tgui/PreInit()
+ basehtml = file2text("tgui/public/tgui.html")
- basehtml = replacetext(basehtml, "tgui:stylesheet", MAP_STYLESHEET)
+ // Inject inline helper functions
+ var/helpers = file2text("tgui/public/helpers.min.js")
+ helpers = ""
+ basehtml = replacetextEx(basehtml, "", helpers)
-/datum/controller/subsystem/processing/tgui/OnConfigLoad()
- var/storage_iframe = GLOB.config.storage_cdn_iframe
- if(storage_iframe && storage_iframe != /datum/configuration::storage_cdn_iframe)
- basehtml = replacetextEx(basehtml, "tgui:storagecdn", storage_iframe)
- return
+ // Inject inline ntos-error styles
+ var/ntos_error = file2text("tgui/public/ntos-error.min.css")
+ ntos_error = ""
+ basehtml = replacetextEx(basehtml, "", ntos_error)
- if(GLOB.config.asset_transport == "webroot")
- var/datum/asset_transport/webroot/webroot = SSassets.transport
+ basehtml = replacetextEx(basehtml, "", "Nanotrasen (c) 2395-[num2text(GLOB.game_year)]")
- var/datum/asset_cache_item/item = webroot.register_asset("iframe.html", file("tgui/public/iframe.html"))
- basehtml = replacetext(basehtml, "tgui:storagecdn", webroot.get_asset_url("iframe.html", item))
- return
-
- if(!storage_iframe)
- return
-
- basehtml = replacetextEx(basehtml, "tgui:storagecdn", storage_iframe)
-
-/datum/controller/subsystem/processing/tgui/Shutdown()
+/datum/controller/subsystem/tgui/Shutdown()
close_all_uis()
-/datum/controller/subsystem/processing/tgui/stat_entry(msg)
+/datum/controller/subsystem/tgui/stat_entry(msg)
msg = "P:[length(all_uis)]"
return ..()
-/datum/controller/subsystem/processing/tgui/fire(resumed = FALSE)
- CAN_BE_REDEFINED(TRUE)
+/datum/controller/subsystem/tgui/fire(resumed = FALSE)
if(!resumed)
src.current_run = all_uis.Copy()
// Cache for sanic speed (lists are references anyways)
var/list/current_run = src.current_run
- var/seconds_per_tick = wait * 0.1
while(current_run.len)
var/datum/tgui/ui = current_run[current_run.len]
current_run.len--
// TODO: Move user/src_object check to process()
if(ui?.user && ui.src_object)
- ui.process(seconds_per_tick)
+ ui.process(wait * 0.1)
else
ui.close(0)
if(MC_TICK_CHECK)
@@ -84,9 +69,9 @@ PROCESSING_SUBSYSTEM_DEF(tgui)
* Returns null if pool was exhausted.
*
* required user mob
- * return datum/tgui
+ * return datum/tgui_window
*/
-/datum/controller/subsystem/processing/tgui/proc/request_pooled_window(mob/user)
+/datum/controller/subsystem/tgui/proc/request_pooled_window(mob/user)
if(!user.client)
return null
var/list/windows = user.client.tgui_windows
@@ -122,7 +107,7 @@ PROCESSING_SUBSYSTEM_DEF(tgui)
*
* required user mob
*/
-/datum/controller/subsystem/processing/tgui/proc/force_close_all_windows(mob/user)
+/datum/controller/subsystem/tgui/proc/force_close_all_windows(mob/user)
log_tgui(user, context = "SStgui/force_close_all_windows")
if(user.client)
user.client.tgui_windows = list()
@@ -138,14 +123,12 @@ PROCESSING_SUBSYSTEM_DEF(tgui)
* required user mob
* required window_id string
*/
-/datum/controller/subsystem/processing/tgui/proc/force_close_window(mob/user, window_id)
+/datum/controller/subsystem/tgui/proc/force_close_window(mob/user, window_id)
log_tgui(user, context = "SStgui/force_close_window")
// Close all tgui datums based on window_id.
for(var/datum/tgui/ui in user.tgui_open_uis)
if(ui.window && ui.window.id == window_id)
ui.close(can_be_suspended = FALSE)
- // Unset machine just to be sure.
- user.unset_machine()
// Close window directly just to be sure.
user << browse(null, "window=[window_id]")
@@ -161,7 +144,7 @@ PROCESSING_SUBSYSTEM_DEF(tgui)
*
* return datum/tgui The found UI.
*/
-/datum/controller/subsystem/processing/tgui/proc/try_update_ui(
+/datum/controller/subsystem/tgui/proc/try_update_ui(
mob/user,
datum/src_object,
datum/tgui/ui)
@@ -191,7 +174,8 @@ PROCESSING_SUBSYSTEM_DEF(tgui)
*
* return datum/tgui The found UI.
*/
-/datum/controller/subsystem/processing/tgui/proc/get_open_ui(mob/user, datum/src_object)
+/datum/controller/subsystem/tgui/proc/get_open_ui(mob/user, datum/src_object)
+ // No UIs opened for this src_object
if(!LAZYLEN(src_object?.open_uis))
return null
for(var/datum/tgui/ui in src_object.open_uis)
@@ -209,15 +193,15 @@ PROCESSING_SUBSYSTEM_DEF(tgui)
*
* return int The number of UIs updated.
*/
-/datum/controller/subsystem/processing/tgui/proc/update_uis(datum/src_object)
+/datum/controller/subsystem/tgui/proc/update_uis(datum/src_object)
+ // No UIs opened for this src_object
if(!LAZYLEN(src_object?.open_uis))
return 0
var/count = 0
- var/seconds_per_tick = wait * 0.1
for(var/datum/tgui/ui in src_object.open_uis)
// Check if UI is valid.
if(ui?.src_object && ui.user && ui.src_object.ui_host(ui.user))
- INVOKE_ASYNC(ui, TYPE_PROC_REF(/datum/tgui, process), seconds_per_tick, TRUE)
+ INVOKE_ASYNC(ui, TYPE_PROC_REF(/datum/tgui, process), wait * 0.1, TRUE)
count++
return count
@@ -230,7 +214,7 @@ PROCESSING_SUBSYSTEM_DEF(tgui)
*
* return int The number of UIs closed.
*/
-/datum/controller/subsystem/processing/tgui/proc/close_uis(datum/src_object)
+/datum/controller/subsystem/tgui/proc/close_uis(datum/src_object)
// No UIs opened for this src_object
if(!LAZYLEN(src_object?.open_uis))
return 0
@@ -249,7 +233,7 @@ PROCESSING_SUBSYSTEM_DEF(tgui)
*
* return int The number of UIs closed.
*/
-/datum/controller/subsystem/processing/tgui/proc/close_all_uis()
+/datum/controller/subsystem/tgui/proc/close_all_uis()
var/count = 0
for(var/datum/tgui/ui in all_uis)
// Check if UI is valid.
@@ -268,14 +252,13 @@ PROCESSING_SUBSYSTEM_DEF(tgui)
*
* return int The number of UIs updated.
*/
-/datum/controller/subsystem/processing/tgui/proc/update_user_uis(mob/user, datum/src_object)
+/datum/controller/subsystem/tgui/proc/update_user_uis(mob/user, datum/src_object)
var/count = 0
if(length(user?.tgui_open_uis) == 0)
return count
- var/seconds_per_tick = wait * 0.1
for(var/datum/tgui/ui in user.tgui_open_uis)
if(isnull(src_object) || ui.src_object == src_object)
- ui.process(seconds_per_tick, force = 1)
+ ui.process(wait * 0.1, force = 1)
count++
return count
@@ -289,7 +272,7 @@ PROCESSING_SUBSYSTEM_DEF(tgui)
*
* return int The number of UIs closed.
*/
-/datum/controller/subsystem/processing/tgui/proc/close_user_uis(mob/user, datum/src_object)
+/datum/controller/subsystem/tgui/proc/close_user_uis(mob/user, datum/src_object)
var/count = 0
if(length(user?.tgui_open_uis) == 0)
return count
@@ -306,7 +289,7 @@ PROCESSING_SUBSYSTEM_DEF(tgui)
*
* required ui datum/tgui The UI to be added.
*/
-/datum/controller/subsystem/processing/tgui/proc/on_open(datum/tgui/ui)
+/datum/controller/subsystem/tgui/proc/on_open(datum/tgui/ui)
ui.user?.tgui_open_uis |= ui
LAZYOR(ui.src_object.open_uis, ui)
all_uis |= ui
@@ -320,7 +303,7 @@ PROCESSING_SUBSYSTEM_DEF(tgui)
*
* return bool If the UI was removed or not.
*/
-/datum/controller/subsystem/processing/tgui/proc/on_close(datum/tgui/ui)
+/datum/controller/subsystem/tgui/proc/on_close(datum/tgui/ui)
// Remove it from the list of processing UIs.
all_uis -= ui
current_run -= ui
@@ -340,7 +323,7 @@ PROCESSING_SUBSYSTEM_DEF(tgui)
*
* return int The number of UIs closed.
*/
-/datum/controller/subsystem/processing/tgui/proc/on_logout(mob/user)
+/datum/controller/subsystem/tgui/proc/on_logout(mob/user)
close_user_uis(user)
/**
@@ -353,7 +336,7 @@ PROCESSING_SUBSYSTEM_DEF(tgui)
*
* return bool If the UIs were transferred.
*/
-/datum/controller/subsystem/processing/tgui/proc/on_transfer(mob/source, mob/target)
+/datum/controller/subsystem/tgui/proc/on_transfer(mob/source, mob/target)
// The old mob had no open UIs.
if(length(source?.tgui_open_uis) == 0)
return FALSE
diff --git a/code/controllers/subsystems/virtual_reality.dm b/code/controllers/subsystems/virtual_reality.dm
index 6a818b22028..be73e30bdae 100644
--- a/code/controllers/subsystems/virtual_reality.dm
+++ b/code/controllers/subsystems/virtual_reality.dm
@@ -55,11 +55,6 @@ SUBSYSTEM_DEF(virtualreality)
if(bound && network)
bounded[network].Remove(bound)
-
-/mob
- var/mob/living/vr_mob = null // In which mob is our mind
- var/mob/living/old_mob = null // Which mob is our old mob
-
/// Return to original body
/mob/proc/body_return()
set name = "Return to Body"
diff --git a/code/datums/chat_payload.dm b/code/datums/chat_payload.dm
new file mode 100644
index 00000000000..fd35bbc4eec
--- /dev/null
+++ b/code/datums/chat_payload.dm
@@ -0,0 +1,16 @@
+/// Stores information about a chat payload
+/datum/chat_payload
+ /// Sequence number of this payload
+ var/sequence = 0
+ /// Message we are sending
+ var/list/content
+ /// Resend count
+ var/resends = 0
+
+/// Converts the chat payload into a JSON string
+/datum/chat_payload/proc/into_message()
+ return "{\"sequence\":[sequence],\"content\":[json_encode(content)]}"
+
+/// Returns an HTML-encoded message from our contents.
+/datum/chat_payload/proc/get_content_as_html()
+ return message_to_html(content)
diff --git a/code/datums/components/armor/synthetic_armor.dm b/code/datums/components/armor/synthetic_armor.dm
index f7b24768494..79d01d71ed6 100644
--- a/code/datums/components/armor/synthetic_armor.dm
+++ b/code/datums/components/armor/synthetic_armor.dm
@@ -23,7 +23,7 @@
var/key = get_armor_key(damage_type, damage_flags)
var/damage_taken
if(blocked)
- damage_taken = round(damage * blocked)
+ damage_taken = damage * (1 - blocked)
else
damage_taken = damage
var/new_armor = max(0, get_value(key) - armor_degradation_coef * damage_taken)
diff --git a/code/datums/components/leanable.dm b/code/datums/components/leanable.dm
index 96edea51472..55b590793b9 100644
--- a/code/datums/components/leanable.dm
+++ b/code/datums/components/leanable.dm
@@ -95,7 +95,9 @@
shift_pixel_x = 10
animate(src, pixel_x = shift_pixel_x, pixel_y = shift_pixel_y, time = 1)
if(direction == NORTH)
- src.add_filter("cutout", 1, alpha_mask_filter(icon = icon('icons/effects/effects.dmi', "cutout")))
+ src.appearance_flags |= KEEP_TOGETHER
+ src.add_filter("cutout", 1, alpha_mask_filter(y = 0, icon = icon('icons/effects/effects.dmi', "white")))
+ animate(src.get_filter("cutout"), y = 10, time = 1, flags = ANIMATION_PARALLEL)
if(direction == SOUTH)
src.layer = ABOVE_DOOR_LAYER
set_density(FALSE)
@@ -105,7 +107,7 @@
SPAN_NOTICE("[src] leans against [lean_target]."),
SPAN_NOTICE("You lean against [lean_target]."),
)
- RegisterSignals(src, list(COMSIG_MOVABLE_MOVED, COMSIG_MOB_RESISTED), PROC_REF(stop_leaning), src)
+ RegisterSignals(src, list(COMSIG_MOVABLE_MOVED, COMSIG_MOB_RESISTED, COMSIG_MOB_LYING_DOWN), PROC_REF(stop_leaning), src)
/mob/living/proc/stop_leaning()
SIGNAL_HANDLER
@@ -116,11 +118,13 @@
UnregisterSignal(src, list(
COMSIG_MOVABLE_MOVED,
COMSIG_MOB_RESISTED,
+ COMSIG_MOB_LYING_DOWN,
))
SEND_SIGNAL(src, COMSIG_LIVING_STOPPED_LEANING)
to_chat(src, SPAN_NOTICE("You stop leaning on the wall."))
REMOVE_TRAIT(src, TRAIT_UNDENSE, TRAIT_SOURCE_WALL_LEANING)
REMOVE_TRAIT(src, TRAIT_LEANING, TRAIT_SOURCE_WALL_LEANING)
+ appearance_flags &= ~KEEP_TOGETHER
remove_filter("cutout")
/datum/component/leanable/proc/stopped_leaning(datum/source)
diff --git a/code/datums/components/local_network.dm b/code/datums/components/local_network.dm
index fdce8aa8a49..3064a4176a0 100644
--- a/code/datums/components/local_network.dm
+++ b/code/datums/components/local_network.dm
@@ -47,11 +47,6 @@
lan = null
return lan
-/datum/component/local_network_member/nano_host()
- if(parent)
- return parent.nano_host()
- . = ..()
-
/datum/component/local_network_member/proc/get_new_tag(mob/user)
var/new_ident = input(user, "Enter a new ident tag.", "[parent]", id_tag) as null|text
if(new_ident && parent && user.Adjacent(parent) && CanInteract(user, GLOB.physical_state))
diff --git a/code/datums/components/medical/medicalAnalyzer.dm b/code/datums/components/medical/medicalAnalyzer.dm
index 6fdb128836c..7a8ef7fb81c 100644
--- a/code/datums/components/medical/medicalAnalyzer.dm
+++ b/code/datums/components/medical/medicalAnalyzer.dm
@@ -84,6 +84,15 @@
reagent_results = list()
return TRUE
+/datum/component/health_analyzer/ui_status(mob/user, datum/ui_state/state)
+ var/obj/item/rig_module/containing_rig_module = owner?.loc
+ if(!containing_rig_module)
+ return ..()
+ else if(containing_rig_module)
+ return UI_INTERACTIVE
+
+ return UI_CLOSE
+
/datum/component/health_analyzer/proc/attack(mob/living/target_mob, mob/living/user, target_zone)
sound_scan = TRUE
@@ -104,6 +113,8 @@
user.visible_message("\The [user] stops scanning \the [target_mob].")
/datum/component/health_analyzer/proc/attack_self(mob/user)
+ if(scan_title == "" || scan_title == null)
+ health_scan_mob(user, user, FALSE, sound_scan = sound_scan)
ui_interact(user)
owner.add_fingerprint(user)
diff --git a/code/datums/components/overhead_emote/overhead_emote_singleton.dm b/code/datums/components/overhead_emote/overhead_emote_singleton.dm
index 8a89597efce..cc7a187d031 100644
--- a/code/datums/components/overhead_emote/overhead_emote_singleton.dm
+++ b/code/datums/components/overhead_emote/overhead_emote_singleton.dm
@@ -39,8 +39,8 @@ ABSTRACT_TYPE(/singleton/overhead_emote)
var/self_message = SPAN_NOTICE("You lift your hand to meet [original]'s, delivering a stunning [emote_description]!")
reciprocator.visible_message(others_message, self_message)
- INVOKE_ASYNC(reciprocator, TYPE_PROC_REF(/atom/movable, do_attack_animation), original, FIST_ATTACK_ANIMATION)
- INVOKE_ASYNC(original, TYPE_PROC_REF(/atom/movable, do_attack_animation), reciprocator, FIST_ATTACK_ANIMATION)
+ INVOKE_ASYNC(reciprocator, TYPE_PROC_REF(/atom/movable, do_attack_animation), original)
+ INVOKE_ASYNC(original, TYPE_PROC_REF(/atom/movable, do_attack_animation), reciprocator)
if(emote_sound)
playsound(reciprocator.loc, emote_sound, 30, 1)
@@ -54,8 +54,8 @@ ABSTRACT_TYPE(/singleton/overhead_emote)
var/self_message = SPAN_NOTICE("You lift your hand to meet [original]'s, who was expecting a [original_emote.emote_description], but received a [fail_emote.emote_description] instead.")
reciprocator.visible_message(others_message, self_message)
- INVOKE_ASYNC(reciprocator, TYPE_PROC_REF(/atom/movable, do_attack_animation), original, FIST_ATTACK_ANIMATION)
- INVOKE_ASYNC(original, TYPE_PROC_REF(/atom/movable, do_attack_animation), reciprocator, FIST_ATTACK_ANIMATION)
+ INVOKE_ASYNC(reciprocator, TYPE_PROC_REF(/atom/movable, do_attack_animation), original)
+ INVOKE_ASYNC(original, TYPE_PROC_REF(/atom/movable, do_attack_animation), reciprocator)
playsound(reciprocator.loc, SFX_PUNCH_MISS, 30, 1)
diff --git a/code/datums/components/psionics/psiblock_drugs.dm b/code/datums/components/psionics/psiblock_drugs.dm
index 5d94738764b..9d385adb854 100644
--- a/code/datums/components/psionics/psiblock_drugs.dm
+++ b/code/datums/components/psionics/psiblock_drugs.dm
@@ -63,7 +63,7 @@
return
to_chat(minister, SPAN_BAD("Why should you care how [ministree] feels?"))
- *moodlet_value = 0
+ *moodlet_value = *moodlet_value * 0.5
/datum/component/timed_life/psiblock_drugs/proc/modify_ministry_receiving(ministree, minister, moodlet_value)
SIGNAL_HANDLER
@@ -71,7 +71,7 @@
return
to_chat(ministree, SPAN_BAD("You feel nothing from [minister]'s words."))
- *moodlet_value = 0
+ *moodlet_value = *moodlet_value * 0.5
/datum/component/timed_life/psiblock_drugs/proc/modify_leadership_empathy(leader, moodlet_value)
SIGNAL_HANDLER
@@ -79,7 +79,7 @@
return
to_chat(leader, SPAN_BAD("Why should you care about how others feel?"))
- *moodlet_value = 0
+ *moodlet_value = *moodlet_value * 0.5
/datum/component/timed_life/psiblock_drugs/process(seconds_per_tick)
diff --git a/code/datums/components/synthetic_endoskeleton/synthetic_endoskeleton.dm b/code/datums/components/synthetic_endoskeleton/synthetic_endoskeleton.dm
index b7415dd7cd9..ad8bd423cf8 100644
--- a/code/datums/components/synthetic_endoskeleton/synthetic_endoskeleton.dm
+++ b/code/datums/components/synthetic_endoskeleton/synthetic_endoskeleton.dm
@@ -23,7 +23,7 @@
log_debug("Synthetic endoskeleton component spawned on non-IPC. Deleting.")
qdel_self()
- RegisterSignal(owner, COMSIG_EXTERNAL_ORGAN_DAMAGE, PROC_REF(receive_damage))
+ RegisterSignal(owner, COMSIG_DAMAGE_TO_ENDOSKELETON, PROC_REF(receive_damage))
RegisterSignal(owner, COMSIG_SYNTH_ENDOSKELETON_REPAIR, PROC_REF(heal_damage))
RegisterSignal(owner, COMSIG_SYNTH_ENDOSKELETON_FULL_REPAIR, PROC_REF(full_repair))
@@ -55,6 +55,7 @@
owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/endoskeleton, multiplicative_slowdown = 1)
if(0.75 to 1)
owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/endoskeleton, multiplicative_slowdown = 1.5)
+ SEND_SIGNAL(owner, COMSIG_SYNTH_SET_SELF_PRESERVATION, FALSE)
if(!damage)
STOP_PROCESSING(SSprocessing, src)
diff --git a/code/datums/langchat/langchat.dm b/code/datums/langchat/langchat.dm
index 213e2c13fe3..12e231581af 100644
--- a/code/datums/langchat/langchat.dm
+++ b/code/datums/langchat/langchat.dm
@@ -27,17 +27,6 @@
#define langchat_client_enabled(M) (M && M.client && M.client.prefs && (M.client.prefs.toggles_secondary & FLOATING_MESSAGES))
-/*
- * Duplicate vars and logic created for untranslated images for the sake of getting an untranslated langchat to display for listeners who do not understand
- * the language being spoken. Someone could certainly think of cleaner ways to do this, but for want of a better solution right now, it has been implemented
- * in this rote manner to make it easier to strip out in future if it needs replaced.
- */
-
-/atom/var/image/langchat_image
-/atom/var/image/langchat_image_untranslated
-/atom/var/list/mob/langchat_listeners
-/atom/var/list/mob/langchat_listeners_untranslated
-
/// Hides the images, if they exist. Do not null the langchat images; they are rotated when the mob is buckled or proned to maintain text orientation.
/atom/proc/langchat_drop_images()
if(langchat_listeners)
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index db9b0457e9d..1f1423f6e6e 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -94,7 +94,6 @@
current.remove_vampire_powers()
current.mind = null
- SSnanoui.user_transferred(current, new_character)
SStgui.on_transfer(current, new_character)
if(current.client && GLOB.ticket_panels[current.client])
var/datum/ticket_panel/tp = GLOB.ticket_panels[current.client]
diff --git a/code/datums/outfits/event/outfit_oe.dm b/code/datums/outfits/event/outfit_oe.dm
new file mode 100644
index 00000000000..1369e236d6a
--- /dev/null
+++ b/code/datums/outfits/event/outfit_oe.dm
@@ -0,0 +1,23 @@
+/obj/outfit/admin/oe_enforcer
+ name = "Outer Eyes Enforcer"
+
+ uniform = /obj/item/clothing/under/color/purple
+ shoes = /obj/item/clothing/shoes/jackboots
+ gloves = /obj/item/clothing/gloves/black
+ suit = /obj/item/clothing/suit/space/void/outereyes
+ suit_store = /obj/item/gun/projectile/automatic/rifle/dnac
+ mask = /obj/item/clothing/mask/balaclava
+ belt = /obj/item/storage/belt/military
+ l_ear = /obj/item/radio/headset/raider
+ head = /obj/item/clothing/head/helmet/space/void/outereyes
+ r_pocket = /obj/item/melee/energy/sword/knife
+ l_pocket = /obj/item/coin/phoron
+
+ accessory = /obj/item/clothing/accessory/holster/hip
+ accessory_contents = list(/obj/item/gun/projectile/xanupistol = 1)
+
+ belt_contents = list(
+ /obj/item/grenade/flashbang = 2,
+ /obj/item/ammo_magazine/a65 = 3,
+ /obj/item/ammo_magazine/c46m/extended = 2
+ )
diff --git a/code/datums/skills/occupational/medical.dm b/code/datums/skills/occupational/medical.dm
index c749937dd0c..2b2010142bb 100644
--- a/code/datums/skills/occupational/medical.dm
+++ b/code/datums/skills/occupational/medical.dm
@@ -69,12 +69,38 @@
/singleton/skill/anatomy
name = "Anatomy"
- description = "Not currently implemented."
+ description = "Governs the speed at which you can check yourself for injuries, as well as the quality of the information obtained when doing so."
maximum_level = SKILL_LEVEL_PROFESSIONAL
- uneducated_skill_cap = SKILL_LEVEL_TRAINED
+ uneducated_skill_cap = SKILL_LEVEL_PROFESSIONAL
category = /singleton/skill_category/occupational
subcategory = SKILL_SUBCATEGORY_MEDICAL
component_type = ANATOMY_SKILL_COMPONENT
+ skill_level_descriptions = alist(
+ SKILL_LEVEL_UNFAMILIAR = "You have zero training or knowledge of anatomy. " \
+ + " - You can only distinguish visible damage like cuts and burns.",
+ SKILL_LEVEL_FAMILIAR = "You have minimal training on the basics of anatomy. " \
+ + "You can diagnose the following conditions: " \
+ + " - External injuries. " \
+ + " - Limb dislocation. " \
+ + " - Simple bleeds.",
+ SKILL_LEVEL_TRAINED = "You have years of formal training and experience with anatomy. " \
+ + "You can diagnose the following conditions: " \
+ + " - External injuries at a high level of detail. " \
+ + " - Limb dislocation. " \
+ + " - Broken bones. " \
+ + " - Distinguish between simple bleeds and severed arteries. " \
+ + " - Limb necrosis. " \
+ + " - Tag injuries by triage priority.",
+ SKILL_LEVEL_PROFESSIONAL = "You have extensive training and experience with anatomy. " \
+ + "You can diagnose the following conditions at the highest level of detail: " \
+ + " - External injuries at a high level of detail. " \
+ + " - Limb dislocation. " \
+ + " - Broken bones. " \
+ + " - Distinguish between simple bleeds and severed arteries. " \
+ + " - Limb necrosis. " \
+ + " - Tag injuries by triage priority."
+ )
+ required = TRUE
/singleton/skill/forensics
name = "Forensics"
diff --git a/code/datums/underwear/undershirt.dm b/code/datums/underwear/undershirt.dm
index 8867673f887..f3fd7e0d348 100644
--- a/code/datums/underwear/undershirt.dm
+++ b/code/datums/underwear/undershirt.dm
@@ -38,11 +38,6 @@
icon_state = "tank_midriff"
has_color = TRUE
-/datum/category_item/underwear/undershirt/tank_top_midriff_short
- name = "Tank Top, Midriff Short"
- icon_state = "tank_midriff_short"
- has_color = TRUE
-
/datum/category_item/underwear/undershirt/tank_top_expedition
name = "Tank Top, Expedition"
icon_state = "tank_expedition"
@@ -59,14 +54,6 @@
name = "Tank Top, Fleet Feminine"
icon_state = "tank_fleet_fem"
-/datum/category_item/underwear/undershirt/tank_top_fire
- name = "Tank Top, Fire"
- icon_state = "tank_fire"
-
-/datum/category_item/underwear/undershirt/tank_top_fire_fem
- name = "Tank Top, Fire Feminine"
- icon_state = "tank_fire_fem"
-
/datum/category_item/underwear/undershirt/tank_top_stripes
name = "Tank Top, Stripes"
icon_state = "tank_stripes"
@@ -83,22 +70,6 @@
name = "Tank Top, Stripes Alt Feminine"
icon_state = "tank_stripes_alt_fem"
-/datum/category_item/underwear/undershirt/tank_top_sun
- name = "Tank Top, Sun"
- icon_state = "tank_sun"
-
-/datum/category_item/underwear/undershirt/tank_top_sun_fem
- name = "Tank Top, Sun Feminine"
- icon_state = "tank_sun_fem"
-
-/datum/category_item/underwear/undershirt/tank_top_sun_alt
- name = "Tank Top, Sun Alt"
- icon_state = "tank_sun_alt"
-
-/datum/category_item/underwear/undershirt/tank_top_sun_alt_fem
- name = "Tank Top, Sun Alt Feminine"
- icon_state = "tank_sun_alt_fem"
-
/datum/category_item/underwear/undershirt/tank_top_tight
name = "Tank Top, Tight"
icon_state = "tank_tight"
@@ -137,95 +108,11 @@
icon_state = "undershirt_fem"
has_color = TRUE
-/datum/category_item/underwear/undershirt/undershirt_heart
- name = "Undershirt, Heart"
- icon_state = "heart"
-
-/datum/category_item/underwear/undershirt/undershirt_heart_fem
- name = "Undershirt, Heart Feminine"
- icon_state = "heart_fem"
-
-/datum/category_item/underwear/undershirt/undershirt_heart_echelon
- name = "Undershirt, Heart Echelon"
- icon_state = "heart_echelon"
-
-/datum/category_item/underwear/undershirt/undershirt_heart_echelon_fem
- name = "Undershirt, Heart Echelon Feminine"
- icon_state = "heart_echelon_fem"
-
-/datum/category_item/underwear/undershirt/shirt_love_nt
- name = "Undershirt, I<3NT"
- icon_state = "ilovent"
-
-/datum/category_item/underwear/undershirt/shirt_love_nt_fem
- name = "Undershirt, I<3NT Feminine"
- icon_state = "ilovent_fem"
-
/datum/category_item/underwear/undershirt/shirt
name = "Shirt"
icon_state = "shirt"
has_color = TRUE
-/datum/category_item/underwear/undershirt/shirt_alien
- name = "Shirt, Alien"
- icon_state = "shirt_alien"
-
-/datum/category_item/underwear/undershirt/shirt_band
- name = "Shirt, Band"
- icon_state = "shirt_band"
-
-/datum/category_item/underwear/undershirt/shirt_clown
- name = "Shirt, Clown"
- icon_state = "shirt_clown"
-
-/datum/category_item/underwear/undershirt/shirt_ian
- name = "Shirt, Ian"
- icon_state = "shirt_ian"
-
-/datum/category_item/underwear/undershirt/shirt_jersey
- name = "Shirt, Blue Jersey"
- icon_state = "shirt_jersey"
-
-/datum/category_item/underwear/undershirt/shirt_jersey_red
- name = "Shirt, Red Jersey"
- icon_state = "shirt_jersey_red"
-
-/datum/category_item/underwear/undershirt/shirt_meat
- name = "Shirt, Meat"
- icon_state = "shirt_meat"
-
-/datum/category_item/underwear/undershirt/shirt_scc
- name = "Shirt, SCC"
- icon_state = "shirt_scc"
-
-/datum/category_item/underwear/undershirt/shirt_scc_fem
- name = "Shirt, SCC feminine"
- icon_state = "shirt_scc_fem"
-
-/datum/category_item/underwear/undershirt/shirt_nt
- name = "Shirt, NT"
- icon_state = "shirt_nano"
-
-/datum/category_item/underwear/undershirt/shirt_nt_red
- name = "Shirt, NT Red"
- icon_state = "shirt_nano_red"
-
-/datum/category_item/underwear/undershirt/shirt_peace
- name = "Shirt, Peace"
- icon_state = "shirt_peace"
-
-/datum/category_item/underwear/undershirt/shirt_question
- name = "Shirt, Question"
- icon_state = "shirt_question"
-
-/datum/category_item/underwear/undershirt/shirt_skull
- name = "Shirt, Skull"
- icon_state = "shirt_skull"
-
-/datum/category_item/underwear/undershirt/shirt_ss13
- name = "Shirt, SS13"
- icon_state = "shirt_ss13"
-
/datum/category_item/underwear/undershirt/shirt_blue_striped
name = "Shirt, Blue Stripes"
icon_state = "shirt_stripes"
@@ -234,34 +121,10 @@
name = "Shirt, Blue Stripes Alt"
icon_state = "shirt_stripes_alt"
-/datum/category_item/underwear/undershirt/shirt_tiedye
- name = "Shirt, Tiedye"
- icon_state = "shirt_tiedye"
-
/datum/category_item/underwear/undershirt/shirt_tight
name = "Shirt, Tight"
icon_state = "tight"
-/datum/category_item/underwear/undershirt/shirt_wing
- name = "Shirt, Wing"
- icon_state = "wing_shirt"
-
-/datum/category_item/underwear/undershirt/shirt_pinkblack
- name = "Shirt, Pink-Black"
- icon_state = "pinkblack_tshirt"
-
-/datum/category_item/underwear/undershirt/sport_shirt_blue
- name = "Sport Shirt, Blue"
- icon_state = "sportblue"
-
-/datum/category_item/underwear/undershirt/sport_shirt_green
- name = "Sport Shirt, Green"
- icon_state = "sportgreen"
-
-/datum/category_item/underwear/undershirt/sport_shirt_red
- name = "Sport Shirt, Red"
- icon_state = "sportred"
-
/datum/category_item/underwear/undershirt/shirt_army
name = "Shirt, Army"
icon_state = "shirt_army"
@@ -286,38 +149,6 @@
name = "Shirt, Fleet Feminine"
icon_state = "shirt_fleet_fem"
-/datum/category_item/underwear/undershirt/shirt_zavodskoi
- name = "Shirt, Zavodskoi Interstellar"
- icon_state = "shirt_necropolis"
-
-/datum/category_item/underwear/undershirt/shirt_zavodskoi_fem
- name = "Shirt, Zavodskoi Interstellar Feminine"
- icon_state = "shirt_necropolis_fem"
-
-/datum/category_item/underwear/undershirt/shirt_epmc
- name = "Shirt, EPMC"
- icon_state = "shirt_epmc"
-
-/datum/category_item/underwear/undershirt/shirt_epmc_fem
- name = "Shirt, EPMC Feminine"
- icon_state = "shirt_epmc_fem"
-
-/datum/category_item/underwear/undershirt/bowlinga
- name = "Bowling Shirt, Aqua"
- icon_state = "bowlinga"
-
-/datum/category_item/underwear/undershirt/bowlingp
- name = "Bowling Shirt, Pink"
- icon_state = "bowlingp"
-
-/datum/category_item/underwear/undershirt/bowlingr
- name = "Bowling Shirt, Red"
- icon_state = "bowlingr"
-
-/datum/category_item/underwear/undershirt/bowlingw
- name = "Bowling Shirt, White"
- icon_state = "bowlingw"
-
/datum/category_item/underwear/undershirt/longjon
name = "Long John Shirt"
icon_state = "ljont"
diff --git a/code/datums/uplink/ammunition.dm b/code/datums/uplink/ammunition.dm
index 3d4fa95a9be..c20e75fb3eb 100644
--- a/code/datums/uplink/ammunition.dm
+++ b/code/datums/uplink/ammunition.dm
@@ -123,11 +123,11 @@
path = /obj/item/ammo_magazine/super_heavy
desc = "A spare magazine, for the super heavy K2557 pistol."
-/datum/uplink_item/item/ammo/shotgun_slug
- name = "Shotgun Slug"
- telecrystal_cost = 1
- path = /obj/item/ammo_casing/shotgun
- desc = "A shotgun slug."
+/datum/uplink_item/item/ammo/shotgun_slugs
+ name = "Box of Slug Shells"
+ telecrystal_cost = 2
+ path = /obj/item/storage/box/shells/slugs
+ desc = "Contains eight shotgun slug shells."
/datum/uplink_item/item/ammo/tungsten_ammo_box
name = "Tungsten Ammo Box"
@@ -137,13 +137,13 @@
/datum/uplink_item/item/ammo/slug_magazine
name = "Slug Magazine"
- telecrystal_cost = 8
+ telecrystal_cost = 2
path = /obj/item/ammo_magazine/assault_shotgun
desc = "A magazine for an assault shotgun, loaded with slug shells."
/datum/uplink_item/item/ammo/buckshot_magazine
name = "Buckshot Magazine"
- telecrystal_cost = 4
+ telecrystal_cost = 1
path = /obj/item/ammo_magazine/assault_shotgun/shells
desc = "A magazine for an assault shotgun, loaded with buckshot shells."
diff --git a/code/datums/uplink/announcements.dm b/code/datums/uplink/announcements.dm
index 70a5a081736..9b39dacc46c 100644
--- a/code/datums/uplink/announcements.dm
+++ b/code/datums/uplink/announcements.dm
@@ -54,7 +54,7 @@
record.sex = I.sex
record.employer = I.employer_faction
var/datum/faction/id_faction = SSjobs.name_factions[I.employer_faction]
- var/faction_abbreviation = id_faction.title_suffix
+ var/faction_abbreviation = id_faction?.title_suffix
var/assignment = "[I.assignment][ faction_abbreviation ? " ([faction_abbreviation])" : ""]"
record.rank = assignment
record.real_rank = assignment
diff --git a/code/datums/uplink/hardsuits_and_modules.dm b/code/datums/uplink/hardsuits_and_modules.dm
index b2458049dd3..faf5c820eaa 100644
--- a/code/datums/uplink/hardsuits_and_modules.dm
+++ b/code/datums/uplink/hardsuits_and_modules.dm
@@ -104,13 +104,6 @@
path = /obj/item/rig_module/storage
desc = "A small hardsuit mounted storage unit, capable of holding a few items."
-/datum/uplink_item/item/hardsuit_modules/vitalscanner
- name = "Vitals Tracker Module"
- telecrystal_cost = 1
- bluecrystal_cost = 1
- path = /obj/item/rig_module/device/healthscanner/vitalscanner
- desc = "A module that allows a hardsuit to scan the users vitals, and give readouts of them."
-
/datum/uplink_item/item/hardsuit_modules/basicinjector
name = "Emergency Chemical Injector"
telecrystal_cost = 2
diff --git a/code/datums/wires/alarm.dm b/code/datums/wires/alarm.dm
index 27946fa12ae..ac75f7c0057 100644
--- a/code/datums/wires/alarm.dm
+++ b/code/datums/wires/alarm.dm
@@ -6,7 +6,8 @@
wires = list(
WIRE_POWER,
WIRE_IDSCAN, WIRE_AI,
- WIRE_PANIC, WIRE_ALARM
+ WIRE_PANIC, WIRE_ALARM,
+ WIRE_RCON
)
add_duds(3)
..()
@@ -24,6 +25,7 @@
. += A.locked ? "The air alarm is locked." : "The air alarm is unlocked."
. += (A.shorted || (A.stat & (NOPOWER|BROKEN))) ? "The Air Alarm is offline." : "The Air Alarm is working properly!"
. += A.aidisabled ? "The 'AI control allowed' light is off." : "The 'AI control allowed' light is on."
+ . += A.rcon_setting ? "The remote control link is enabled." : "The remote control link is disabled."
/datum/wires/alarm/on_cut(wire, mend, source)
var/obj/structure/machinery/alarm/A = holder
@@ -51,6 +53,12 @@
A.post_alert(2)
A.update_icon()
+ if(WIRE_RCON)
+ if(!mend)
+ A.rcon_setting = FALSE
+ else
+ A.rcon_setting = TRUE
+
/datum/wires/alarm/on_pulse(wire)
var/obj/structure/machinery/alarm/A = holder
switch(wire)
@@ -67,7 +75,6 @@
A.shorted = 0
A.update_icon()
-
if (WIRE_AI)
if (A.aidisabled == 0)
A.aidisabled = 1
@@ -83,7 +90,7 @@
A.mode = 1 // AALARM_MODE_SCRUB
A.apply_mode()
- if(WIRE_ALARM)
+ if(WIRE_ALARM, WIRE_RCON)
if (A.alarm_area.atmosalert(0, A))
A.post_alert(0)
A.update_icon()
diff --git a/code/datums/wires/radio.dm b/code/datums/wires/radio.dm
index 02c2284958d..c234334c2f0 100644
--- a/code/datums/wires/radio.dm
+++ b/code/datums/wires/radio.dm
@@ -31,7 +31,7 @@
if(WIRE_TRANSMIT)
R.set_broadcasting(!R.get_broadcasting() && !is_cut(WIRE_SIGNAL))
- SSnanoui.update_uis(holder)
+ SStgui.update_uis(holder)
/datum/wires/radio/on_cut(wire, mend, source)
var/obj/item/radio/R = holder
@@ -45,4 +45,4 @@
if(WIRE_TRANSMIT)
R.set_broadcasting(mend && !is_cut(WIRE_SIGNAL))
- SSnanoui.update_uis(holder)
+ SStgui.update_uis(holder)
diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index cf44b2ff2e2..6a64545f853 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -215,7 +215,7 @@
target_mob.standard_weapon_hit_effects(src, user, damageamount, armorpercent, target_zone)
user.visible_message("[endmessage3rd][punct] ", "[endmessage1st][punct] ")
- user.do_attack_animation(target_mob)
+ user.do_attack_animation(target_mob, used_item = src)
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
if(soundname)
diff --git a/code/game/atom/_atom.dm b/code/game/atom/_atom.dm
index 7d222ab3698..a5237effb0f 100644
--- a/code/game/atom/_atom.dm
+++ b/code/game/atom/_atom.dm
@@ -138,19 +138,31 @@
/// This atom's cache of overlays that can only be removed explicitly, like C4. Do not manipulate directly- See SSoverlays.
var/list/atom_protected_overlay_cache
+ /// The mob currently interacting with the atom during a `do_after` timer. Used to validate `DO_TARGET_UNIQUE_ACT` flag checks.
+ var/mob/do_unique_target_user
+
+ /*
+ * Duplicate vars and logic created for untranslated images for the sake of getting an untranslated langchat to display for listeners who do not understand
+ * the language being spoken. Someone could certainly think of cleaner ways to do this, but for want of a better solution right now, it has been implemented
+ * in this rote manner to make it easier to strip out in future if it needs replaced.
+ */
+
+ var/image/langchat_image
+ var/image/langchat_image_untranslated
+ var/list/mob/langchat_listeners
+ var/list/mob/langchat_listeners_untranslated
+
/atom/Destroy(force)
if(opacity)
updateVisibility(src)
- if(reagents)
- QDEL_NULL(reagents)
+ QDEL_NULL(reagents)
// Checking length(overlays) before cutting has significant speed benefits
if(length(overlays))
overlays.Cut()
- if(light)
- QDEL_NULL(light)
+ QDEL_NULL(light)
if(smoothing_flags & SMOOTH_QUEUED)
SSicon_smooth.remove_from_queues(src)
@@ -167,8 +179,12 @@
// The component is attached to us normaly and will be deleted elsewhere
orbiters = null
-
- . = ..()
+ do_unique_target_user = null
+ QDEL_NULL(langchat_image)
+ QDEL_NULL(langchat_image_untranslated)
+ langchat_listeners?.Cut()
+ langchat_listeners_untranslated?.Cut()
+ return ..()
/atom/proc/handle_ricochet(obj/projectile/ricocheting_projectile)
var/turf/p_turf = get_turf(ricocheting_projectile)
diff --git a/code/game/atom/atom_examine.dm b/code/game/atom/atom_examine.dm
index 3f4a3d6a249..ab8d049536d 100644
--- a/code/game/atom/atom_examine.dm
+++ b/code/game/atom/atom_examine.dm
@@ -87,6 +87,15 @@
if(src.desc)
. += src.desc
+ var/list/tags_list = examine_tags(user)
+ if(length(tags_list))
+ var/tag_string = list()
+ for (var/atom_tag in tags_list)
+ tag_string += (isnull(tags_list[atom_tag]) ? atom_tag : SPAN_TOOLTIP(tags_list[atom_tag], atom_tag))
+ // some regex to ensure that we don't add another "and" if the final element's main text (not tooltip) has one
+ tag_string = english_list(tag_string, and_text = (findtext(tag_string[length(tag_string)], regex(@">.*?and .*?<"))) ? " " : " and ")
+ . += "It is a [tag_string] [examine_descriptor(user)]."
+
// Returns a SPAN_* based on health, if configured.
var/list/condition_hints = src.condition_hints()
if(length(condition_hints))
@@ -145,6 +154,35 @@
if(H.glasses)
H.glasses.glasses_examine_atom(src, H)
+/// What this atom should be called in examine tags
+/atom/proc/examine_descriptor(mob/user)
+ return "object"
+
+/**
+ * A list of "tags" displayed after atom's description in examine.
+ * This should return an assoc list of tags -> tooltips for them. If item is null, then no tooltip is assigned.
+ *
+ * * TGUI tooltips (not the main text) in chat cannot use HTML stuff at all, so
+ * trying something like `ffff ` will not work for tooltips.
+ *
+ * For example:
+ * ```byond
+ * . = list()
+ * .["small"] = "It is a small item."
+ * .["fireproof"] = "It is made of fire-retardant materials."
+ * .["and conductive"] = "It's made of conductive materials and whatnot. Blah blah blah." // having "and " in the end tag's main text/key works too!
+ * ```
+ * will result in
+ *
+ * It is a *small*, *fireproof* *and conductive* item.
+ *
+ * where "item" is pulled from [/atom/proc/examine_descriptor]
+ */
+/atom/proc/examine_tags(mob/user)
+ . = list()
+
+ SEND_SIGNAL(src, COMSIG_ATOM_EXAMINE_TAGS, user, .)
+
/**
* Used to check if "examine_fluff" from the HTML link in examine() is true, i.e. if it was clicked.
*/
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 13fcc2b8e92..72ba517426e 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -543,6 +543,18 @@
if(src.z == H.z && get_dist(src, H) <= range)
H.intent_listen(src, message)
+/proc/get_intent_listeners(var/atom/source, var/range = 7, var/list/hearers = list())
+ SHOULD_NOT_SLEEP(TRUE)
+ var/list/listeners = list()
+ if(air_sound(source))
+ if(!length(hearers))
+ hearers = get_hearers_in_view(range, source)
+ for(var/mob/living/carbon/human/H as anything in GLOB.intent_listener)
+ if((H in hearers))
+ if(source.z == H.z && get_dist(source, H) <= range)
+ listeners += H
+ return listeners
+
/atom/movable/proc/dropInto(var/atom/destination)
while(istype(destination))
var/atom/drop_destination = destination.onDropInto(src)
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 8332eef368b..ec9f6c8cd35 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -87,6 +87,11 @@
/// Whether this atom should have its dir automatically changed when it moves. Setting this to FALSE allows for things such as directional windows to retain dir on moving without snowflake code all of the place.
var/set_dir_on_move = TRUE
+ var/tmp/turf/airflow_dest
+ var/tmp/airflow_speed = 0
+ var/tmp/airflow_time = 0
+ var/tmp/last_airflow = 0
+
/atom/movable/Initialize(mapload, ...)
. = ..()
update_emissive_blocker()
@@ -114,14 +119,11 @@
QDEL_LAZYLIST(contained_mobs)
- . = ..()
-
for(var/movable_content in contents)
qdel(movable_content)
//Pretend this is moveToNullspace()
moveToNullspace()
- loc = null
//This absolutely must be after moveToNullspace()
//We rely on Entered and Exited to manage this list, and the copy of this list that is on any /atom/movable "Containers"
@@ -150,6 +152,9 @@
QDEL_NULL(light)
QDEL_NULL(static_light)
+ airflow_dest = null
+ loc = null
+ return ..()
/atom/movable/proc/moveToNullspace()
. = TRUE
@@ -577,11 +582,19 @@
/* END Spatial grid stuffs */
for(var/datum/dynamic_light_source/light as anything in hybrid_light_sources)
+ if(!light) // datum was deleted but list entry not yet pruned
+ LAZYREMOVE(hybrid_light_sources, light)
+ continue
+ if(!light.source_atom)
+ continue
light.source_atom.update_light()
if(!isturf(loc))
light.find_containing_atom()
for(var/datum/static_light_source/L as anything in static_light_sources) // Cycle through the light sources on this atom and tell them to update.
- L.source_atom.static_update_light()
+ if(!L) // datum was deleted but list entry not yet pruned
+ LAZYREMOVE(static_light_sources, L)
+ continue
+ L.source_atom?.static_update_light()
/atom/movable/Exited(atom/movable/gone, direction)
. = ..()
@@ -817,6 +830,192 @@
// This is instant on byond's end, but to our clients this looks like a quick drop
animate(src, alpha = old_alpha, pixel_x = old_x, pixel_y = old_y, transform = old_transform, time = 3, easing = CUBIC_EASING)
+/atom/movable/proc/do_item_attack_animation(atom/attacked_atom, visual_effect_icon, obj/item/used_item, animation_type)
+ if (!visual_effect_icon)
+ if (used_item)
+ used_item.animate_attack(src, attacked_atom, animation_type)
+ return
+
+ var/image/attack_image = image(icon = 'icons/effects/effects.dmi', icon_state = visual_effect_icon)
+ attack_image.plane = attacked_atom.plane + 1
+ // Scale the icon.
+ attack_image.transform *= 0.4
+ // The icon should not rotate.
+ attack_image.appearance_flags = APPEARANCE_UI
+ var/atom/movable/flick_visual/attack = attacked_atom.flick_overlay_view(attack_image, 1 SECONDS)
+ var/matrix/copy_transform = new(transform)
+ animate(attack, alpha = 175, transform = copy_transform.Scale(0.75), time = 0.3 SECONDS)
+ animate(time = 0.1 SECONDS)
+ animate(alpha = 0, time = 0.3 SECONDS, easing = CIRCULAR_EASING|EASE_OUT)
+
+/obj/item/proc/animate_attack(atom/movable/attacker, atom/attacked_atom, animation_type)
+ var/list/image_override = list()
+ var/list/animation_override = list()
+ var/used_icon_angle = icon_angle
+ var/list/angle_override = list()
+ SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_ANIMATION, attacker, attacked_atom, animation_type, image_override, animation_override, angle_override)
+ var/image/attack_image = null
+ if (!length(image_override))
+ attack_image = isnull(attack_icon) ? image(icon = src) : image(icon = attack_icon, icon_state = attack_icon_state)
+ else
+ attack_image = image_override[1]
+
+ if (length(animation_override))
+ animation_type = animation_override[1]
+ else if (!animation_type)
+ var/damage_flags = damage_flags()
+ if(damage_flags & DAMAGE_FLAG_SHARP|DAMAGE_FLAG_EDGE)
+ animation_type = pick(ATTACK_ANIMATION_SLASH, ATTACK_ANIMATION_PIERCE)
+ else if(damage_flags & DAMAGE_FLAG_SHARP)
+ animation_type = ATTACK_ANIMATION_SLASH
+ else if (damage_flags & DAMAGE_FLAG_EDGE)
+ animation_type = ATTACK_ANIMATION_PIERCE
+ else
+ animation_type = ATTACK_ANIMATION_BLUNT
+
+ if (length(angle_override))
+ used_icon_angle = angle_override[1]
+
+ attack_image.plane = attacked_atom.plane + 1
+ attack_image.pixel_w = attacker.get_standard_pixel_x() + attacker.pixel_w - attacked_atom.get_standard_pixel_x() - attacked_atom.pixel_w
+ attack_image.pixel_z = attacker.get_standard_pixel_y() + attacker.pixel_z - attacked_atom.get_standard_pixel_y() - attacked_atom.pixel_z
+ // Scale the icon.
+ attack_image.transform *= 0.5
+ // The icon should not rotate.
+ attack_image.appearance_flags = APPEARANCE_UI
+
+ var/atom/movable/flick_visual/attack = attacked_atom.flick_overlay_view(attack_image, 1 SECONDS)
+ var/matrix/copy_transform = new(attacker.transform)
+ var/x_sign = 0
+ var/y_sign = 0
+ var/direction = get_dir(attacker, attacked_atom)
+ if (direction & NORTH)
+ y_sign = -1
+ else if (direction & SOUTH)
+ y_sign = 1
+
+ if (direction & EAST)
+ x_sign = -1
+ else if (direction & WEST)
+ x_sign = 1
+
+ // Attacking self, or something on the same turf as us
+ if (!direction)
+ y_sign = 1
+ // Not a fan of this, but its the "cleanest" way to animate this
+ x_sign = 0.25 * (prob(50) ? 1 : -1)
+ // For piercing attacks
+ direction = SOUTH
+
+ // And animate the attack!
+ switch (animation_type)
+ if (ATTACK_ANIMATION_BLUNT)
+ attack.pixel_x = 14 * x_sign
+ attack.pixel_y = 12 * y_sign
+ animate(attack, alpha = 175, transform = copy_transform.Scale(0.75), pixel_x = 4 * x_sign, pixel_y = 3 * y_sign, time = 0.2 SECONDS)
+ animate(time = 0.1 SECONDS)
+ animate(alpha = 0, time = 0.1 SECONDS, easing = CIRCULAR_EASING|EASE_OUT)
+
+ if (ATTACK_ANIMATION_PIERCE)
+ var/attack_angle = dir2angle(direction) + rand(-7, 7)
+ // Deducting 90 because we're assuming that icon_angle of 0 means an east-facing sprite
+ var/anim_angle = attack_angle - 90 - used_icon_angle
+ var/angle_mult = 1
+ if (x_sign && y_sign)
+ angle_mult = 1.4
+ attack.pixel_x = 22 * x_sign * angle_mult
+ attack.pixel_y = 18 * y_sign * angle_mult
+ attack.transform = attack.transform.Turn(anim_angle)
+ copy_transform = copy_transform.Turn(anim_angle)
+ animate(
+ attack,
+ pixel_x = (22 * x_sign - 12 * sin(attack_angle)) * angle_mult,
+ pixel_y = (18 * y_sign - 8 * cos(attack_angle)) * angle_mult,
+ time = 0.1 SECONDS,
+ easing = CUBIC_EASING|EASE_IN,
+ )
+ animate(
+ attack,
+ alpha = 175,
+ transform = copy_transform.Scale(0.75),
+ pixel_x = (22 * x_sign + 26 * sin(attack_angle)) * angle_mult,
+ pixel_y = (18 * y_sign + 22 * cos(attack_angle)) * angle_mult,
+ time = 0.3 SECONDS,
+ easing = CUBIC_EASING|EASE_OUT,
+ )
+ animate(
+ alpha = 0,
+ pixel_x = -3 * -(x_sign + sin(attack_angle)),
+ pixel_y = -2 * -(y_sign + cos(attack_angle)),
+ time = 0.1 SECONDS,
+ easing = CIRCULAR_EASING|EASE_OUT
+ )
+
+ if (ATTACK_ANIMATION_SLASH)
+ attack.pixel_x = 18 * x_sign
+ attack.pixel_y = 14 * y_sign
+ var/x_rot_sign = 0
+ var/y_rot_sign = 0
+ var/attack_dir = (prob(50) ? 1 : -1)
+ var/anim_angle = dir2angle(direction) - 90 - used_icon_angle
+
+ if (x_sign)
+ y_rot_sign = attack_dir
+ if (y_sign)
+ x_rot_sign = attack_dir
+
+ // Animations are flipped, so flip us too!
+ if (x_sign > 0 || y_sign < 0)
+ attack_dir *= -1
+
+ // We're swinging diagonally, use separate logic
+ var/anim_dir = attack_dir
+ if (x_sign && y_sign)
+ if (attack_dir < 0)
+ x_rot_sign = -x_sign * 1.4
+ y_rot_sign = 0
+ else
+ x_rot_sign = 0
+ y_rot_sign = -y_sign * 1.4
+
+ // Flip us if we've been flipped *unless* we're flipped due to both axis
+ if ((x_sign < 0 && y_sign > 0) || (x_sign > 0 && y_sign < 0))
+ anim_dir *= -1
+
+ attack.pixel_x += 10 * x_rot_sign
+ attack.pixel_y += 8 * y_rot_sign
+ attack.transform = attack.transform.Turn(anim_angle - 45 * anim_dir)
+ copy_transform = copy_transform.Scale(0.75)
+ animate(attack, alpha = 175, time = 0.3 SECONDS, flags = ANIMATION_PARALLEL)
+ animate(time = 0.1 SECONDS)
+ animate(alpha = 0, time = 0.1 SECONDS, easing = CIRCULAR_EASING|EASE_OUT)
+
+ animate(attack, transform = copy_transform.Turn(anim_angle + 45 * anim_dir), time = 0.3 SECONDS, flags = ANIMATION_PARALLEL)
+
+ var/x_return = 10 * -x_rot_sign
+ var/y_return = 8 * -y_rot_sign
+
+ if (!x_rot_sign)
+ x_return = 18 * x_sign
+ if (!y_rot_sign)
+ y_return = 14 * y_sign
+
+ var/angle_mult = 1
+ if (x_sign && y_sign)
+ angle_mult = 1.4
+ if (attack_dir > 0)
+ x_return = 8 * x_sign
+ y_return = 14 * y_sign
+ else
+ x_return = 18 * x_sign
+ y_return = 6 * y_sign
+
+ animate(attack, pixel_x = 4 * x_sign * angle_mult, time = 0.2 SECONDS, easing = CIRCULAR_EASING | EASE_IN, flags = ANIMATION_PARALLEL)
+ animate(pixel_x = x_return, time = 0.2 SECONDS, easing = CIRCULAR_EASING | EASE_OUT)
+
+ animate(attack, pixel_y = 3 * y_sign * angle_mult, time = 0.2 SECONDS, easing = CIRCULAR_EASING | EASE_IN, flags = ANIMATION_PARALLEL)
+ animate(pixel_y = y_return, time = 0.2 SECONDS, easing = CIRCULAR_EASING | EASE_OUT)
+
/atom/movable/proc/get_floating_chat_x_offset()
return 0
diff --git a/code/game/gamemodes/cult/cultify/mob.dm b/code/game/gamemodes/cult/cultify/mob.dm
index 7a303018c70..b519ab7e836 100644
--- a/code/game/gamemodes/cult/cultify/mob.dm
+++ b/code/game/gamemodes/cult/cultify/mob.dm
@@ -1,8 +1,3 @@
-/mob
- //thou shall always be able to see the Geometer of Blood
- var/image/narsimage = null
- var/image/narglow = null
-
/mob/proc/cultify()
return
diff --git a/code/game/gamemodes/endgame/supermatter_cascade/portal.dm b/code/game/gamemodes/endgame/supermatter_cascade/portal.dm
index e4f45ab6fe4..1f8f63d9361 100644
--- a/code/game/gamemodes/endgame/supermatter_cascade/portal.dm
+++ b/code/game/gamemodes/endgame/supermatter_cascade/portal.dm
@@ -54,11 +54,6 @@
spawn (0)
AM.singularity_pull(src, src.current_size)
-
-/mob
- //thou shall always be able to see the rift
- var/image/riftimage = null
-
/mob/proc/see_rift(var/obj/singularity/narsie/large/exit/R)
var/turf/T_mob = get_turf(src)
if((R.z == T_mob.z) && (get_dist(R,T_mob) <= (R.consume_range+10)) && !(R in view(T_mob)))
diff --git a/code/game/gamemodes/technomancer/instability.dm b/code/game/gamemodes/technomancer/instability.dm
index 9357fefb54f..c8ba4c842d5 100644
--- a/code/game/gamemodes/technomancer/instability.dm
+++ b/code/game/gamemodes/technomancer/instability.dm
@@ -8,13 +8,6 @@
#define TECHNOMANCER_INSTABILITY_PRECISION 0.1 // Instability is rounded to this.
#define TECHNOMANCER_INSTABILITY_MIN_GLOW 10 // When above this number, the entity starts glowing, affecting others.
-
-/mob/living
- atom_flags = CRITICAL_ATOM
- var/instability = 0
- var/last_instability = 0 // Used to calculate instability delta.
- var/last_instability_event = null // most recent world.time that something bad happened due to instability.
-
// Proc: adjust_instability()
// Parameters: 0
// Description: Does nothing, because inheritance.
diff --git a/code/game/objects/effects/chem/foam.dm b/code/game/objects/effects/chem/foam.dm
index 8d89eed11dc..6b93e7f42e3 100644
--- a/code/game/objects/effects/chem/foam.dm
+++ b/code/game/objects/effects/chem/foam.dm
@@ -180,7 +180,7 @@
/obj/structure/foamedmetal/attack_hand(var/mob/user)
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
- user.do_attack_animation(src, FIST_ATTACK_ANIMATION)
+ user.do_attack_animation(src)
if ((user.mutations & HULK) || (prob(75 - metal * 25)))
user.visible_message(SPAN_WARNING("[user] smashes through the foamed metal."), SPAN_NOTICE("You smash through the metal foam wall."))
qdel(src)
@@ -238,7 +238,7 @@
qdel(src)
return TRUE
- user.do_attack_animation(src, attacking_item)
+ user.do_attack_animation(src, used_item = attacking_item)
if(prob(attacking_item.force * 20 - metal * 25))
user.visible_message(SPAN_WARNING("[user] smashes through the foamed metal."), SPAN_NOTICE("You smash through the foamed metal with \the [attacking_item]."))
qdel(src)
diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm
index 751f1ed62a0..068eccaa700 100644
--- a/code/game/objects/effects/effect_system.dm
+++ b/code/game/objects/effects/effect_system.dm
@@ -14,10 +14,6 @@ would spawn and follow the beaker, even if it is carried or thrown.
pass_flags = PASSTABLE | PASSGRILLE
blocks_emissive = EMISSIVE_BLOCK_GENERIC
-/obj/effect/Destroy()
- QDEL_NULL(reagents)
- return ..()
-
/datum/effect/effect/system
var/number = 3
var/cardinals = 0
diff --git a/code/game/objects/effects/gibs.dm b/code/game/objects/effects/gibs.dm
index 2a643f5cf43..da1c89c007e 100644
--- a/code/game/objects/effects/gibs.dm
+++ b/code/game/objects/effects/gibs.dm
@@ -1,25 +1,24 @@
-/proc/gibs(atom/location, var/list/viruses, var/datum/dna/MobDNA, gibber_type = /obj/effect/gibspawner/generic, var/fleshcolor, var/bloodcolor)
- new gibber_type(location,viruses,MobDNA,fleshcolor,bloodcolor)
+/proc/gibs(atom/location, var/datum/dna/MobDNA, gibber_type = /obj/effect/gibspawner/generic, var/fleshcolor, var/bloodcolor)
+ new gibber_type(location,MobDNA,fleshcolor,bloodcolor)
/obj/effect/gibspawner
icon = 'icons/effects/map_effects.dmi'
icon_state = "gibspawner"
var/sparks = 0 //whether sparks spread on Gib()
- var/virusProb = 20 //the chance for viruses to spread on the gibs
var/list/gibtypes = list()
var/list/gibamounts = list()
var/list/gibdirections = list() //of lists
var/fleshcolor //Used for gibbed humans.
var/bloodcolor //Used for gibbed humans.
-/obj/effect/gibspawner/Initialize(mapload, list/viruses, datum/dna/MobDNA, fleshcolor, bloodcolor)
+/obj/effect/gibspawner/Initialize(mapload, datum/dna/MobDNA, fleshcolor, bloodcolor)
. = ..()
if(fleshcolor) src.fleshcolor = fleshcolor
if(bloodcolor) src.bloodcolor = bloodcolor
- Gib(loc,viruses,MobDNA)
+ Gib(loc,MobDNA)
-/obj/effect/gibspawner/proc/Gib(atom/location, var/list/viruses = list(), var/datum/dna/MobDNA = null)
+/obj/effect/gibspawner/proc/Gib(atom/location, var/datum/dna/MobDNA = null)
if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len)
to_world(SPAN_WARNING("Gib list length mismatch!"))
return
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 361339ec34b..a7eec14b0ab 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -136,6 +136,8 @@
var/zoomdevicename
/// Boolean, `TRUE` if item is actively being used to zoom. For scoped guns and binoculars.
var/zoom = FALSE
+ /// The message used when stopping looking through a pair of binoculars/scope
+ var/zoom_out_message
/// Boolean, if item_state, lefthand, righthand, and worn sprite are all in one dmi
var/contained_sprite = FALSE
@@ -205,6 +207,13 @@
/// Used to override hardcoded clothing dmis in human clothing pr
var/icon_override
+ /// Angle of the icon, used for piercing and slashing attack animations, clockwise from *east-facing* sprites
+ var/icon_angle = 0
+ ///icon file for an alternate attack icon
+ var/attack_icon
+ ///icon state for an alternate attack icon
+ var/attack_icon_state
+
var/charge_failure_message = " cannot be recharged."
var/held_maptext
@@ -259,8 +268,16 @@
var/mob/m = loc
m.drop_from_inventory(src, null)
- if(!QDELETED(action))
+ if(islist(action))
+ var/list/action_list = action
+ for(var/i in 1 to action_list.len)
+ var/datum/action/A = action_list[i]
+ if(!QDELETED(A))
+ QDEL_NULL(A)
+ action_list.Cut()
+ else if(!QDELETED(action))
QDEL_NULL(action) // /mob/living/proc/handle_actions() creates it, for ungodly reasons
+
action = null
if(!QDELETED(hidden_uplink))
@@ -327,23 +344,22 @@
I.forceMove(T)
-/obj/item/get_examine_text(mob/user, distance, is_adjacent, infix, suffix, get_extended = FALSE)
- var/size
- switch(src.w_class)
- if (WEIGHT_CLASS_HUGE to INFINITY)
- size = "huge"
- if (WEIGHT_CLASS_BULKY to WEIGHT_CLASS_HUGE)
- size = "bulky"
- if (WEIGHT_CLASS_NORMAL to WEIGHT_CLASS_BULKY)
- size = "normal-sized"
- if (WEIGHT_CLASS_SMALL to WEIGHT_CLASS_NORMAL)
- size = "small"
- if (0 to WEIGHT_CLASS_SMALL)
- size = "tiny"
- //Changed this switch to ranges instead of tiered values, to cope with granularity and also
- //things outside its range ~Nanako
+/obj/item/examine_descriptor(mob/user)
+ return "item"
- . = ..(user, distance, is_adjacent, "It is a [size] item.", get_extended = get_extended)
+/obj/item/examine_tags(mob/user)
+ var/list/parent_tags = ..()
+ parent_tags.Insert(1, weight_class_to_text(w_class)) // To make size display first, otherwise it looks goofy
+ . = parent_tags
+ .[weight_class_to_text(w_class)] = weight_class_to_tooltip(w_class)
+
+ if (siemens_coefficient == 0)
+ .["insulated"] = "It is made from a robust electrical insulator and will block any electricity passing through it!"
+ else if (siemens_coefficient <= 0.5)
+ .["partially insulated"] = "It is made from a poor insulator that will dampen (but not fully block) electric shocks passing through it."
+
+/obj/item/get_examine_text(mob/user, distance, is_adjacent, infix, suffix, get_extended = FALSE)
+ . = ..(user, distance, is_adjacent, get_extended = get_extended)
var/datum/component/armor/armor_component = GetComponent(/datum/component/armor)
if(armor_component && !armor_component.hidden)
. += FONT_SMALL(SPAN_NOTICE("\[?\] This item has armor values. \[Show Armor Values\] "))
@@ -1005,9 +1021,11 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
M.client.pixel_x = 0
M.client.pixel_y = 0
- if(!cannotzoom)
- if(show_zoom_message)
+ if(!cannotzoom && show_zoom_message)
+ if(!zoom_out_message)
M.visible_message("[zoomdevicename ? "[M] looks up from \the [src.name]" : "[M] lowers \the [src.name]"].")
+ else
+ M.visible_message("[zoomdevicename ? "[M] [zoom_out_message] \the [src.name]." : "[M] [zoom_out_message]"]")
if(ishuman(M))
var/mob/living/carbon/human/H = M
@@ -1328,10 +1346,10 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
. = ..()
if(in_inventory || in_storage)
var/mob/user = usr
- if(!(user.client.prefs.toggles_secondary & HIDE_ITEM_TOOLTIPS))
- tip_timer = addtimer(CALLBACK(src, PROC_REF(openTip), location, control, params, user), 8, TIMER_STOPPABLE)
if(QDELETED(src))
return
+ if(!(user.client.prefs.toggles_secondary & HIDE_ITEM_TOOLTIPS))
+ tip_timer = addtimer(CALLBACK(src, PROC_REF(openTip), location, control, params, user), 8, TIMER_STOPPABLE)
if(!(user.client.prefs.toggles_secondary & SEE_ITEM_OUTLINES))
return
var/mob/living/L = user
diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm
index dbc3600e5dd..b1b07164e57 100644
--- a/code/game/objects/items/devices/radio/intercom.dm
+++ b/code/game/objects/items/devices/radio/intercom.dm
@@ -4,7 +4,7 @@ pixel_y = 20;
#define PRESET_SOUTH \
dir = SOUTH; \
-pixel_y = -6;
+pixel_y = -2;
#define PRESET_WEST \
dir = WEST; \
diff --git a/code/game/objects/items/devices/suit_cooling.dm b/code/game/objects/items/devices/suit_cooling.dm
index 5a1930c7385..11bec517459 100644
--- a/code/game/objects/items/devices/suit_cooling.dm
+++ b/code/game/objects/items/devices/suit_cooling.dm
@@ -1,7 +1,7 @@
/obj/item/suit_cooling_unit
name = "portable suit cooling unit"
desc = "A portable heat sink and liquid cooled radiator that can be hooked up to a space suit's existing temperature controls to provide industrial levels of cooling."
- w_class = WEIGHT_CLASS_BULKY
+ w_class = WEIGHT_CLASS_NORMAL
icon = 'icons/obj/item/suitcooler.dmi'
icon_state = "suitcooler0"
item_state = "coolingpack"
@@ -17,14 +17,25 @@
origin_tech = list(TECH_MAGNET = 2, TECH_MATERIAL = 2)
- var/celltype = /obj/item/cell/high
+ // Type of cell the IPC cooling unit starts with.
+ var/celltype = /obj/item/cell/apc
matter = list(MATERIAL_ALUMINIUM = 25000, MATERIAL_GLASS = 3500)
- var/on = 0 //is it turned on?
- var/cover_open = 0 //is the cover open?
+
+ // Is it turned on?
+ var/on = 0
+ // Is the cover open?
+ var/cover_open = 0
+
var/obj/item/cell/cell
- var/max_cooling = 24 //in degrees kelvin per second - probably don't need to mess with heat capacity here
- var/charge_consumption = 8.3 //charge per second at max_cooling
+
+ // In degrees kelvin per second - probably don't need to mess with heat capacity here
+ var/max_cooling = 24
+
+ // Base charge consumption per second. Modified by how much cooling work the cooler is doing.
+ var/charge_consumption = 15.4
+
+ // Target to cool an IPC to.
var/thermostat = T20C
//TODO: make it heat up the surroundings when not in space
@@ -241,3 +252,6 @@
/obj/item/suit_cooling_unit/no_cell
celltype = null
+
+/obj/item/suit_cooling_unit/hyper_cell // Mostly for special spawns, events, etc., so they don't have to worry about cell charge.
+ celltype = /obj/item/cell/hyper
diff --git a/code/game/objects/items/stacks/telecrystal.dm b/code/game/objects/items/stacks/telecrystal.dm
index 7eb77201608..09f5eafce0d 100644
--- a/code/game/objects/items/stacks/telecrystal.dm
+++ b/code/game/objects/items/stacks/telecrystal.dm
@@ -42,7 +42,7 @@
else if(crystal_type == CRYSTAL_TYPE_BLUECRYSTAL)
I.hidden_uplink.bluecrystals += amount
I.hidden_uplink.update_tgui_data()
- SSnanoui.update_uis(I.hidden_uplink)
+ SStgui.update_uis(I.hidden_uplink)
use(amount)
to_chat(user, SPAN_NOTICE("You slot \the [src] into \the [I] and charge its internal uplink."))
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm b/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm
index 99848dc4245..cdd3219aa4a 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm
@@ -4,7 +4,9 @@
build_path = /obj/structure/machinery/shield_gen/external
origin_tech = list(TECH_BLUESPACE = 4, TECH_PHORON = 3)
req_components = list(
- "/obj/item/stock_parts/manipulator/pico" = 2,
+ "/obj/item/stock_parts/manipulator" = 2,
+ "/obj/item/stock_parts/micro_laser" = 2,
+ "/obj/item/stock_parts/capacitor" = 2,
"/obj/item/stock_parts/subspace/transmitter" = 1,
"/obj/item/stock_parts/subspace/crystal" = 1,
"/obj/item/stock_parts/subspace/amplifier" = 1,
@@ -17,7 +19,9 @@
build_path = /obj/structure/machinery/shield_gen
origin_tech = list(TECH_BLUESPACE = 4, TECH_PHORON = 3)
req_components = list(
- "/obj/item/stock_parts/manipulator/pico" = 2,
+ "/obj/item/stock_parts/manipulator" = 2,
+ "/obj/item/stock_parts/micro_laser" = 2,
+ "/obj/item/stock_parts/capacitor" = 2,
"/obj/item/stock_parts/subspace/transmitter" = 1,
"/obj/item/stock_parts/subspace/crystal" = 1,
"/obj/item/stock_parts/subspace/amplifier" = 1,
@@ -30,7 +34,8 @@
build_path = /obj/structure/machinery/shield_capacitor
origin_tech = list(TECH_MAGNET = 3, TECH_POWER = 4)
req_components = list(
- "/obj/item/stock_parts/manipulator/pico" = 2,
+ "/obj/item/stock_parts/capacitor" = 4,
+ "/obj/item/stock_parts/micro_laser" = 1,
"/obj/item/stock_parts/subspace/filter" = 1,
"/obj/item/stock_parts/subspace/treatment" = 1,
"/obj/item/stock_parts/subspace/analyzer" = 1,
diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm
index cd749b4f00e..b04398747aa 100644
--- a/code/game/objects/items/weapons/grenades/flashbang.dm
+++ b/code/game/objects/items/weapons/grenades/flashbang.dm
@@ -36,13 +36,21 @@
if(M.flash_act(ignore_inherent = TRUE))
M.Weaken(10)
- // 1 - 9x/70 gives us 100% at zero, 87% at 1 turf, all the way to 10% at 7
- var/bang_intensity = 1 - (9 * get_dist(T, M) / 70)
- M.noise_act(intensity = EAR_PROTECTION_MODERATE, damage_pwr = 10 * bang_intensity, deafen_pwr = 15 * (1 - bang_intensity))
+ var/distance_to_grenade = get_dist(T, M)
- if(M.get_hearing_sensitivity()) // we only stun if they've got sensitive ears
+ // 1 - 9x/70 gives us 100% at zero, 87% at 1 turf, all the way to 10% at 7
+ var/bang_intensity = 1 - (9 * distance_to_grenade / 70)
+
+ var/ear_damage = 10 * bang_intensity
+ var/deafen_damage = 15 * (1 - bang_intensity)
+
+
+ // we only stun if they've got sensitive ears and got it active as well as if it is close enough.
+ if(M.get_hearing_sensitivity() && astype(M, /mob/living/carbon/human)?.is_listening() && distance_to_grenade < 5)
// checking for protection is handled by noise_act
- M.noise_act(intensity = EAR_PROTECTION_MAJOR, stun_pwr = 2)
+ M.noise_act(intensity = EAR_PROTECTION_MAJOR, stun_pwr = 2, damage_pwr = ear_damage, deafen_pwr = deafen_damage)
+ else
+ M.noise_act(intensity = EAR_PROTECTION_MODERATE, damage_pwr = ear_damage, deafen_pwr = deafen_damage)
M.disable_cloaking_device()
M.update_icon()
diff --git a/code/game/objects/items/weapons/grenades/fragmentation.dm b/code/game/objects/items/weapons/grenades/fragmentation.dm
index bb12f49253d..cc87cc1be8d 100644
--- a/code/game/objects/items/weapons/grenades/fragmentation.dm
+++ b/code/game/objects/items/weapons/grenades/fragmentation.dm
@@ -1,8 +1,29 @@
-/proc/fragem(var/source,var/fragx,var/fragy,var/light_dam,var/flash_dam,var/p_dam,var/p_range,var/can_cover=TRUE,var/shard_range = 50)
+/**
+ * Fragem works by shooting a projectile containing fragments at every tile in a circle around it.
+ *
+ * Source is the tile the projectiles spawn on.
+ *
+ * fragx and fragy are the upper and lower bounds of the random number of fragments produced.
+ *
+ * light_dam and flash_dam are the parameters for the explosion produced by the grenade. light_dam is the radius of minor explosive damage, flash_dam is the radius of the flash effect.
+ *
+ * p_dam is the damage of each individual fragments.
+ *
+ * p_range is the distance each projectile travels before losing a fragment. When a projectile loses all of its fragments, it is deleted.
+ *
+ * can_cover determines if a mob can lie on the source turf to absorb most of the fragments.
+ *
+ * shard_range is the maximum range of the projectiles produced by the fragem. This is separate from p_range to allow for projectiles that lose fragments over distance but have a hard maximum range. Default 50
+ *
+ * spread_range is the radius of the circle used to launch projectiles. Lower values mean less projectiles are used but if set too low gaps may appear in the spread pattern. Default 7
+ *
+ * maim_rate is the bonus for projectiles to decapitate or gib limbs. Negative values reduce this chance, positive values increase it. There is a minimum maim multiplier of 0.1, see handle_limb_gibbing for details.
+ */
+/proc/fragem(var/source,var/fragx,var/fragy,var/light_dam,var/flash_dam,var/p_dam,var/p_range,var/can_cover=TRUE,var/shard_range = 50,var/spread_range = 7,var/maim_rate)
var/turf/O = get_turf(source)
var/fragger = rand(fragx,fragy)
explosion(O, -1, -1, light_dam, flash_dam)
- var/list/target_turfs = getcircle(O, 7)
+ var/list/target_turfs = getcircle(O, spread_range)
var/fragments_per_projectile = round(fragger/target_turfs.len)
for(var/turf/T in target_turfs)
@@ -12,9 +33,10 @@
P.damage = p_dam
P.pellets = fragments_per_projectile
P.range_step = p_range
+ if (maim_rate)
+ P.maim_rate = maim_rate
P.range = shard_range
P.name = "shrapnel"
-
P.preparePixelProjectile(T, get_turf(source))
P.firer = source
P.fired_from = source
diff --git a/code/game/objects/items/weapons/material/shards.dm b/code/game/objects/items/weapons/material/shards.dm
index 2303abaf704..94d48999bd5 100644
--- a/code/game/objects/items/weapons/material/shards.dm
+++ b/code/game/objects/items/weapons/material/shards.dm
@@ -106,6 +106,11 @@
/obj/item/material/shard/shrapnel/Initialize(newloc, material_key)
. = ..(loc, MATERIAL_STEEL)
+/obj/item/material/shard/shrapnel/large/Initialize(newloc, material_key) //Shrapnel large enough to be removed by hand. Used by ship weapons.
+ . = ..(loc, MATERIAL_STEEL)
+ icon_state = "large"
+ w_class = WEIGHT_CLASS_NORMAL
+
/obj/item/material/shard/shrapnel/flechette/Initialize(newloc, material_key)
. = ..(loc, MATERIAL_TITANIUM)
diff --git a/code/game/objects/items/weapons/material/twohanded.dm b/code/game/objects/items/weapons/material/twohanded.dm
index 31ac7e91371..3eba17f35fc 100644
--- a/code/game/objects/items/weapons/material/twohanded.dm
+++ b/code/game/objects/items/weapons/material/twohanded.dm
@@ -200,11 +200,12 @@
/obj/item/material/twohanded/fireaxe // DEM AXES MAN, marker -Agouri
icon_state = "fireaxe0"
base_icon = "fireaxe"
+ icon_angle = -180
name = "fire axe"
desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?"
unwielded_force_divisor = 0.25
force_divisor = 0.7 // 10/42 with hardness 60 (steel) and 0.25 unwielded divisor
- sharp = 1
+ sharp = FALSE
edge = TRUE
w_class = WEIGHT_CLASS_BULKY
slot_flags = SLOT_BACK
@@ -243,6 +244,7 @@
/obj/item/material/twohanded/spear
icon_state = "spearglass0"
base_icon = "spearglass"
+ icon_angle = -45
name = "spear"
desc = "A haphazardly-constructed yet still deadly weapon of ancient design."
force = 15
diff --git a/code/game/objects/items/weapons/storage/briefcase.dm b/code/game/objects/items/weapons/storage/briefcase.dm
index 11120702657..bccb17704f2 100644
--- a/code/game/objects/items/weapons/storage/briefcase.dm
+++ b/code/game/objects/items/weapons/storage/briefcase.dm
@@ -33,6 +33,7 @@
use_sound = 'sound/items/storage/toolbox.ogg'
drop_sound = 'sound/items/drop/toolbox.ogg'
pickup_sound = 'sound/items/pickup/toolbox.ogg'
+ rustle_sound = 'sound/items/rustle/toolbox.ogg'
/obj/item/storage/briefcase/nt
name = "\improper NT briefcase"
diff --git a/code/game/objects/items/weapons/storage/pill_bottle.dm b/code/game/objects/items/weapons/storage/pill_bottle.dm
index 378401015ee..30b6da75758 100644
--- a/code/game/objects/items/weapons/storage/pill_bottle.dm
+++ b/code/game/objects/items/weapons/storage/pill_bottle.dm
@@ -13,6 +13,7 @@
use_sound = 'sound/items/storage/pillbottle.ogg'
drop_sound = 'sound/items/drop/pillbottle.ogg'
pickup_sound = 'sound/items/pickup/pillbottle.ogg'
+ rustle_sound = 'sound/items/pickup/pillbottle.ogg'
max_storage_space = DEFAULT_BOX_STORAGE
/obj/item/storage/pill_bottle/attack_self(mob/living/user)
diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm
index a11c21edc2f..2a2d98f02f5 100644
--- a/code/game/objects/items/weapons/weaponry.dm
+++ b/code/game/objects/items/weapons/weaponry.dm
@@ -89,7 +89,7 @@
/obj/effect/energy_net/attack_hand(var/mob/user)
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
- user.do_attack_animation(src, FIST_ATTACK_ANIMATION)
+ user.do_attack_animation(src)
if(user == affecting)
to_chat(user, SPAN_WARNING("You can't claw at \the [src] while trapped inside it! You need to use a weapon."))
return
@@ -110,7 +110,7 @@
/obj/effect/energy_net/attackby(obj/item/attacking_item, mob/user)
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
- user.do_attack_animation(src, attacking_item)
+ user.do_attack_animation(src, used_item = attacking_item)
var/attack_force = attacking_item.force
if(user == affecting)
attack_force /= 2
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index 2107d72de22..73dbb9594dc 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -108,6 +108,15 @@
var/persistant_objects_expiration_time_days = PERSISTENT_DEFAULT_EXPIRATION_DAYS
/* END PERSISTENCE VARS */
+ /// for easy reference of talking atoms
+ var/datum/talking_atom/talking_atom
+
+ /// Whether this object has been contaminated by atmos gasses like chlorine or phoron.
+ var/contaminated = FALSE
+
+ /// Allow overriding rad resistance.
+ var/rad_resistance_modifier = 1
+
/obj/Initialize(mapload, ...)
. = ..()
if(maxhealth)
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index fb2705f1b10..766a38cd711 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -6,16 +6,20 @@
pass_flags_self = PASSSTRUCTURE
should_use_health = TRUE
- var/material_alteration = MATERIAL_ALTERATION_ALL // Overrides for material shit. Set them manually if you don't want colors etc. See wood chairs/office chairs.
+ /// Overrides for material shit. Set them manually if you don't want colors etc. See wood chairs/office chairs.
+ var/material_alteration = MATERIAL_ALTERATION_ALL
var/climbable
var/parts
var/list/climbers
- var/list/footstep_sound //footstep sounds when stepped on
+ /// Footstep sounds when stepped on
+ var/list/footstep_sound
var/material/material
- var/build_amt = 2 // used by some structures to determine into how many pieces they should disassemble into or be made with
+ /// Used by some structures to determine into how many pieces they should disassemble into or be made with
+ var/build_amt = 2
- var/slowdown = 0 //amount that pulling mobs have their movement delayed by
+ /// Amount that pulling mobs have their movement delayed by
+ var/slowdown = 0
/obj/structure/Initialize(mapload)
. = ..()
@@ -40,6 +44,14 @@
material = null
return ..()
+/obj/structure/examine_descriptor(mob/user)
+ return "structure"
+
+/obj/structure/examine_tags(atom/source, mob/user, list/examine_list)
+ . = ..()
+ if(climbable)
+ .["climbable"] = "It can be climbed on, either by dragging your mob onto it or middle-clicking it."
+
/obj/structure/attackby(obj/item/attacking_item, mob/user, params)
. = ..()
if(user?.a_intent == I_HURT && maxhealth)
@@ -95,9 +107,13 @@
else
dismantle_material = get_material()
if(should_use_health && health <= 0)
- build_amt /= rand(2, 4) //if the structure is destroyed by damage, it will yield less materials
- for(var/i = 1 to build_amt)
- dismantle_material.place_sheet(loc)
+ build_amt /= rand(2, 4) //if the structure is destroyed by damage, it will yield less materials.
+ build_amt = max(1, min(build_amt, 5)) //Bound between 5 and 1, as shards don't stack into sheets.
+ for(var/i = 1 to build_amt)
+ dismantle_material.place_shard(loc)
+ else
+ for(var/i = 1 to build_amt)
+ dismantle_material.place_sheet(loc)
qdel(src)
/obj/structure/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit)
diff --git a/code/game/objects/structures/_machinery.dm b/code/game/objects/structures/_machinery.dm
index f08c063abce..574e007f162 100644
--- a/code/game/objects/structures/_machinery.dm
+++ b/code/game/objects/structures/_machinery.dm
@@ -250,12 +250,17 @@ Class Procs:
for(var/i = 1 to 2)
if(prob(50))
metal_to_spawn++
+ else
+ new /obj/item/material/shard(current_turf, DEFAULT_WALL_MATERIAL)
if(metal_to_spawn)
new /obj/item/stack/material/steel(get_turf(src), metal_to_spawn)
if(!should_use_health)
return FALSE
qdel(src)
+/obj/structure/machinery/examine_descriptor(mob/user)
+ return "machine"
+
// /obj/structure/machinery/proc/process_all()
// /* Uncomment this if/when you need component processing
// if(processing_flags & MACHINERY_PROCESS_COMPONENTS)
@@ -641,5 +646,5 @@ Class Procs:
/obj/structure/machinery/ui_status(mob/user, datum/ui_state/state)
. = ..()
if(. < UI_INTERACTIVE)
- if(user.machine)
+ if(user?.machine)
user.unset_machine()
diff --git a/code/game/objects/structures/crates_lockers/crates/gear_loadout.dm b/code/game/objects/structures/crates_lockers/crates/gear_loadout.dm
index d6d8e773ffd..0d12a0c4f41 100644
--- a/code/game/objects/structures/crates_lockers/crates/gear_loadout.dm
+++ b/code/game/objects/structures/crates_lockers/crates/gear_loadout.dm
@@ -1498,6 +1498,10 @@
new /obj/item/coin/phoron(src)
new /obj/item/coin/phoron(src)
new /obj/item/coin/phoron(src)
+ new /obj/item/modkit/multi_species(src)
+ new /obj/item/modkit/multi_species(src)
+ new /obj/item/modkit/multi_species(src)
+ new /obj/item/modkit/multi_species(src)
/obj/structure/closet/crate/secure/gear_loadout/outereyes/single/fill()
new /obj/item/clothing/head/helmet/space/void/outereyes(src)
@@ -1514,6 +1518,7 @@
new /obj/item/ammo_magazine/c46m/extended(src)
new /obj/item/melee/energy/sword/knife(src)
new /obj/item/coin/phoron(src)
+ new /obj/item/modkit/multi_species(src)
/obj/structure/closet/crate/secure/gear_loadout/zavodskoi/fill()
new /obj/item/rig/combat/zavod_heavy(src)
diff --git a/code/game/objects/structures/full_window_frame.dm b/code/game/objects/structures/full_window_frame.dm
index dbe0d2a3ee4..9e4e414d438 100644
--- a/code/game/objects/structures/full_window_frame.dm
+++ b/code/game/objects/structures/full_window_frame.dm
@@ -6,6 +6,7 @@
maxhealth = OBJECT_HEALTH_MEDIUM
color = COLOR_GRAY20
build_amt = 4
+ pass_flags_self = PASSRAILING
layer = WINDOW_FRAME_LAYER
anchored = TRUE
density = TRUE
@@ -59,6 +60,11 @@
return TRUE
return FALSE
+/obj/structure/window_frame/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit)
+ . = ..()
+ if(. != BULLET_ACT_HIT)
+ return .
+
/obj/structure/window_frame/attackby(obj/item/attacking_item, mob/user)
if((attacking_item.tool_behaviour == TOOL_SCREWDRIVER) && (istype(loc, /turf/simulated) || anchored))
if(has_glass_installed)
diff --git a/code/game/objects/structures/gore/wall.dm b/code/game/objects/structures/gore/wall.dm
index 4b8a45cdfc9..29e55ffb443 100644
--- a/code/game/objects/structures/gore/wall.dm
+++ b/code/game/objects/structures/gore/wall.dm
@@ -30,7 +30,7 @@
/obj/structure/gore/resin/attack_hand(var/mob/user)
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
- user.do_attack_animation(src, FIST_ATTACK_ANIMATION)
+ user.do_attack_animation(src)
if((user.mutations & HULK))
visible_message(SPAN_DANGER("\The [user] destroys \the [src]!"))
add_damage(maxhealth)
diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm
index f02cea9d467..65a82cc687e 100644
--- a/code/game/objects/structures/grille.dm
+++ b/code/game/objects/structures/grille.dm
@@ -159,6 +159,9 @@
var/damage = hitting_projectile.get_structure_damage()
var/passthrough = 0
+ if(piercing_hit)
+ return BULLET_ACT_FORCE_PIERCE //Shots that would have penetrated anyway don't get the damage reduction or chance to not penetrate.
+
if(!damage)
return BULLET_ACT_BLOCK
@@ -181,7 +184,7 @@
passthrough = 1
if(passthrough)
- . = BULLET_ACT_HIT
+ . = BULLET_ACT_FORCE_PIERCE
damage = between(0, (damage - hitting_projectile.damage)*(hitting_projectile.damage_type == DAMAGE_BRUTE? 0.4 : 1), 10) //if the bullet passes through then the grille avoids most of the damage
add_damage(damage * 0.2)
diff --git a/code/game/objects/structures/machinery/alarm.dm b/code/game/objects/structures/machinery/alarm.dm
index a58c2b3518d..a34f6978d47 100644
--- a/code/game/objects/structures/machinery/alarm.dm
+++ b/code/game/objects/structures/machinery/alarm.dm
@@ -118,9 +118,8 @@ pixel_x = 10;
var/breach_detection = 1
//var/skipprocess = 0 //Experimenting
var/alarm_frequency = 1437
- var/remote_control = 0
- var/rcon_setting = 2
- var/rcon_time = 0
+ /// If true, RCON is enabled. If false, RCON has been disabled.
+ var/rcon_setting = TRUE
var/locked = 1
var/aidisabled = 0
var/shorted = 0
@@ -475,18 +474,6 @@ pixel_x = 10;
mode=AALARM_MODE_FILL
apply_mode()
- //atmos computer remote controll stuff
- switch(rcon_setting)
- if(RCON_NO)
- remote_control = 0
- if(RCON_AUTO)
- if(danger_level == 2)
- remote_control = 1
- else
- remote_control = 0
- if(RCON_YES)
- remote_control = 1
-
return
/obj/structure/machinery/alarm/proc/handle_heating_cooling(datum/gas_mixture/environment, seconds_per_tick)
@@ -698,6 +685,22 @@ pixel_x = 10;
frequency.post_signal(src, alert_signal)
+/obj/structure/machinery/alarm/proc/is_alarming()
+ return max(danger_level, alarm_area?.atmosalm) > 0
+
+/obj/structure/machinery/alarm/proc/is_remote_user(mob/user)
+ if(!user)
+ return FALSE
+ for(var/datum/tgui/open_tgui in user.tgui_open_uis)
+ if(open_tgui.interface == "AtmosAlarmControl")
+ return TRUE
+ return FALSE
+
+/obj/structure/machinery/alarm/proc/is_unlocked_for(mob/user)
+ if(is_remote_user(user) && rcon_setting)
+ return TRUE
+ return !locked || issilicon(user)
+
/obj/structure/machinery/alarm/attack_ai(mob/user)
if(!ai_can_interact(user))
return
@@ -751,7 +754,8 @@ pixel_x = 10;
data["target_temperature"] = round(target_temperature - T0C, 0.1)
// Access
- data["locked"] = locked && !issilicon(user)
+ data["locked"] = !is_unlocked_for(user)
+ data["remote_view"] = is_remote_user(user)
data["shorted"] = shorted
data["rcon"] = rcon_setting
@@ -848,14 +852,6 @@ pixel_x = 10;
// Actions available without unlocking
switch(action)
- if("rcon")
- var/new_rcon = text2num(params["value"])
- switch(new_rcon)
- if(RCON_NO) rcon_setting = RCON_NO
- if(RCON_AUTO) rcon_setting = RCON_AUTO
- if(RCON_YES) rcon_setting = RCON_YES
- return TRUE
-
if("temperature")
var/list/tlv = TLV["temperature"]
var/max_temperature = min(tlv[3] - T0C, MAX_TEMPERATURE)
@@ -871,7 +867,7 @@ pixel_x = 10;
return TRUE
// Actions that require the alarm to be unlocked
- if(locked && !issilicon(usr))
+ if(!is_unlocked_for(usr))
return
switch(action)
@@ -962,11 +958,10 @@ pixel_x = 10;
apply_mode()
return TRUE
-/// Snowflake proc to make it so users of the Atmosphere Control app (having the UI open) have full access to an alarm.
+/// Lets Atmosphere Control users remotely view alarms.
/obj/structure/machinery/alarm/ui_status(mob/user)
- for(var/datum/tgui/open_tgui in user.tgui_open_uis)
- if(open_tgui.interface == "AtmosAlarmControl")
- return UI_INTERACTIVE
+ if(is_remote_user(user) && rcon_setting)
+ return UI_INTERACTIVE
return ..()
/**
diff --git a/code/game/objects/structures/machinery/atmo_control.dm b/code/game/objects/structures/machinery/atmo_control.dm
index 69fcdca9d06..09becf19622 100644
--- a/code/game/objects/structures/machinery/atmo_control.dm
+++ b/code/game/objects/structures/machinery/atmo_control.dm
@@ -141,7 +141,7 @@
var/list/sensor_information = list()
var/datum/radio_frequency/radio_connection
- var/ui_type = "AtmosControl"
+ ui_type = "AtmosControl"
circuit = /obj/item/circuitboard/air_management
/obj/structure/machinery/computer/general_air_control/Destroy()
diff --git a/code/game/objects/structures/machinery/atmoalter/canister.dm b/code/game/objects/structures/machinery/atmoalter/canister.dm
index 486db49bb92..2a2093a19f3 100644
--- a/code/game/objects/structures/machinery/atmoalter/canister.dm
+++ b/code/game/objects/structures/machinery/atmoalter/canister.dm
@@ -441,7 +441,7 @@ update_flag
if(attacking_item.item_flags & ITEM_FLAG_NO_BLUDGEON)
return TRUE
visible_message(SPAN_WARNING("\The [user] hits \the [src] with \the [attacking_item]!"), SPAN_NOTICE("You hit \the [src] with \the [attacking_item]."))
- user.do_attack_animation(src, attacking_item)
+ user.do_attack_animation(src, used_item = attacking_item)
playsound(src, 'sound/weapons/smash.ogg', 60, 1)
add_damage(attacking_item.force)
if(!istype(attacking_item, /obj/item/forensics))
diff --git a/code/game/objects/structures/machinery/biogenerator.dm b/code/game/objects/structures/machinery/biogenerator.dm
index 42824879b73..e9b97eff581 100644
--- a/code/game/objects/structures/machinery/biogenerator.dm
+++ b/code/game/objects/structures/machinery/biogenerator.dm
@@ -124,7 +124,8 @@ FOODSTUFFS
/singleton/biorecipe/food/bio_vitamin
name = "Flavored Vitamin"
object = /obj/item/reagent_containers/pill/bio_vitamin
- amount = list(1,5,10,25,50)
+ // Pill bottles can at most hold 14 pills
+ amount = list(1,3,5,10,14)
/singleton/biorecipe/food/liquidfood
name = "Food Ration"
diff --git a/code/game/objects/structures/machinery/computer/buildandrepair.dm b/code/game/objects/structures/machinery/computer/buildandrepair.dm
index 6a394a3ac97..9a863b95b79 100644
--- a/code/game/objects/structures/machinery/computer/buildandrepair.dm
+++ b/code/game/objects/structures/machinery/computer/buildandrepair.dm
@@ -8,6 +8,8 @@
icon_state = "0"
build_amt = 5
var/state = 0
+ maxhealth = OBJECT_HEALTH_MEDIUM
+
var/obj/item/circuitboard/circuit = null
/obj/structure/computerframe/attackby(obj/item/attacking_item, mob/user)
diff --git a/code/game/objects/structures/machinery/computer/computer.dm b/code/game/objects/structures/machinery/computer/computer.dm
index b84ecef4389..abd74c754e3 100644
--- a/code/game/objects/structures/machinery/computer/computer.dm
+++ b/code/game/objects/structures/machinery/computer/computer.dm
@@ -32,6 +32,9 @@
/// The access cable inserted into this computer, if any.
var/obj/item/access_cable/inserted_cable
+ /// Contains the name of the TGUI interface file opened when using this computer. If null,
+ var/ui_type = ""
+
/obj/structure/machinery/computer/Initialize()
. = ..()
overlay_layer = layer
@@ -45,11 +48,6 @@
inserted_cable = null
return ..()
-/obj/structure/machinery/computer/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = TRUE)
- if(!operable() || !is_station_level(z) || user.stat)
- user.unset_machine()
- return
-
/obj/structure/machinery/computer/emp_act(severity)
. = ..()
diff --git a/code/game/objects/structures/machinery/dna_machines.dm b/code/game/objects/structures/machinery/dna_machines.dm
index 8d5c7f08ae6..f86c9de109f 100644
--- a/code/game/objects/structures/machinery/dna_machines.dm
+++ b/code/game/objects/structures/machinery/dna_machines.dm
@@ -248,10 +248,7 @@
/obj/structure/machinery/computer/scan_consolenew/attackby(obj/item/attacking_item, mob/user)
if (istype(attacking_item, /obj/item/disk/data)) //INSERT SOME diskS
if (!src.disk)
- user.drop_from_inventory(attacking_item, src)
- src.disk = attacking_item
- to_chat(user, "You insert [attacking_item].")
- SSnanoui.update_uis(src) // update all UIs attached to src
+ to_chat(user, "You try to insert [attacking_item], but the drive seems jammed.")
return TRUE
else
return ..()
diff --git a/code/game/objects/structures/machinery/doors/airlock.dm b/code/game/objects/structures/machinery/doors/airlock.dm
index 2047a7b7cdb..9a7530daa70 100644
--- a/code/game/objects/structures/machinery/doors/airlock.dm
+++ b/code/game/objects/structures/machinery/doors/airlock.dm
@@ -1089,13 +1089,13 @@ About the new airlock wires panel:
stripe_overlay = new(stripe_file)
stripe_overlay.Blend(stripe_color, ICON_MULTIPLY)
SSicon_cache.airlock_icon_cache["[ikey]"] = stripe_overlay
- if(!glass)
- var/ikey2 = "[airlock_type]-[stripe_color]-fillstripe"
- stripe_filling_overlay = SSicon_cache.airlock_icon_cache["[ikey2]"]
- if(!stripe_filling_overlay)
- stripe_filling_overlay = new(stripe_fill_file)
- stripe_filling_overlay.Blend(stripe_color, ICON_MULTIPLY)
- SSicon_cache.airlock_icon_cache["[ikey2]"] = stripe_filling_overlay
+
+ var/ikey2 = "[airlock_type]-[stripe_color]-fillstripe"
+ stripe_filling_overlay = SSicon_cache.airlock_icon_cache["[ikey2]"]
+ if(!stripe_filling_overlay)
+ stripe_filling_overlay = new(stripe_fill_file)
+ stripe_filling_overlay.Blend(stripe_color, ICON_MULTIPLY)
+ SSicon_cache.airlock_icon_cache["[ikey2]"] = stripe_filling_overlay
if(arePowerSystemsOn())
switch(state)
@@ -1434,7 +1434,7 @@ About the new airlock wires panel:
return
if(H.default_attack?.attack_door && !(stat & (BROKEN|NOPOWER)))
user.visible_message(SPAN_DANGER("\The [user] forcefully strikes \the [src] with their [H.default_attack.attack_name]!"))
- user.do_attack_animation(src, null)
+ user.do_attack_animation(src, H.default_attack.attack_effect)
playsound(loc, hitsound, 60, TRUE)
add_damage(H.default_attack.attack_door)
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
diff --git a/code/game/objects/structures/machinery/doors/door.dm b/code/game/objects/structures/machinery/doors/door.dm
index 74a8e74cbfc..1de42cda807 100644
--- a/code/game/objects/structures/machinery/doors/door.dm
+++ b/code/game/objects/structures/machinery/doors/door.dm
@@ -256,7 +256,7 @@
// Emitter Blasts - these will eventually completely destroy the door, given enough time.
if (damage > 90)
- destroy_hits--
+ destroy_hits -= (1 * hitting_projectile.anti_materiel_potential)
if (destroy_hits <= 0)
visible_message(SPAN_DANGER("\The [src.name] disintegrates!"))
switch (hitting_projectile.damage_type)
diff --git a/code/game/objects/structures/machinery/embedded_controller/docking_program.dm b/code/game/objects/structures/machinery/embedded_controller/docking_program.dm
index fa992ccddb2..6eb60977af2 100644
--- a/code/game/objects/structures/machinery/embedded_controller/docking_program.dm
+++ b/code/game/objects/structures/machinery/embedded_controller/docking_program.dm
@@ -274,7 +274,6 @@
signal.data["dock_status"] = get_docking_status()
post_signal(signal)
-//this is mostly for NanoUI
/datum/computer/file/embedded_program/docking/proc/get_docking_status()
switch (dock_state)
if (STATE_UNDOCKED) return "undocked"
diff --git a/code/game/objects/structures/machinery/portable_turret.dm b/code/game/objects/structures/machinery/portable_turret.dm
index ed3072241a1..567db53276d 100644
--- a/code/game/objects/structures/machinery/portable_turret.dm
+++ b/code/game/objects/structures/machinery/portable_turret.dm
@@ -26,8 +26,8 @@
req_one_access = list(ACCESS_SECURITY, ACCESS_HEADS)
- light_range = 3
- light_power = 2
+ light_range = 2
+ light_power = 1
armor = list(
MELEE = ARMOR_MELEE_KEVLAR,
diff --git a/code/game/objects/structures/machinery/telecomms/broadcasting.dm b/code/game/objects/structures/machinery/telecomms/broadcasting.dm
index 64b37ce6f9b..271aaff621a 100644
--- a/code/game/objects/structures/machinery/telecomms/broadcasting.dm
+++ b/code/game/objects/structures/machinery/telecomms/broadcasting.dm
@@ -151,11 +151,9 @@
if (TRANSMISSION_SUBSPACE)
// Reach any radios on the levels
var/list/all_radios_of_our_frequency = SSradio.get_devices(frequency, RADIO_CHAT)
- radios = all_radios_of_our_frequency.Copy()
-
- for (var/obj/item/radio/subspace_radio in radios)
- if(!subspace_radio.can_receive(frequency, signal_reaches_every_z_level))
- radios -= subspace_radio
+ for (var/obj/item/radio/subspace_radio in all_radios_of_our_frequency)
+ if(subspace_radio.can_receive(frequency, signal_reaches_every_z_level))
+ radios += subspace_radio
// Cool antag radios can hear all Horizon comms
for (var/antag_freq in list(SYND_FREQ, RAID_FREQ, NINJ_FREQ))
diff --git a/code/game/objects/structures/machinery/telecomms/machine_interactions.dm b/code/game/objects/structures/machinery/telecomms/machine_interactions.dm
index f0e0c473ba6..5cedd20603f 100644
--- a/code/game/objects/structures/machinery/telecomms/machine_interactions.dm
+++ b/code/game/objects/structures/machinery/telecomms/machine_interactions.dm
@@ -29,7 +29,7 @@
if(!istype(user, /mob/living/silicon))
if(user.a_intent == I_HURT)
user.visible_message(SPAN_DANGER("\The [user] strikes [src]!"))
- user.do_attack_animation(user, attacking_item)
+ user.do_attack_animation(user, used_item = attacking_item)
playsound(loc, hitsound, 60, TRUE)
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
integrity = between(0, integrity - round(attacking_item.force / 3), initial(integrity))
diff --git a/code/game/objects/structures/machinery/vending/_vending.dm b/code/game/objects/structures/machinery/vending/_vending.dm
index a91013fcf10..a2534f3f8f3 100644
--- a/code/game/objects/structures/machinery/vending/_vending.dm
+++ b/code/game/objects/structures/machinery/vending/_vending.dm
@@ -63,6 +63,7 @@
density = 1
clicksound = SFX_BUTTON
manufacturer = "idris"
+ maxhealth = OBJECT_HEALTH_HIGH
// Every vending machine has one of these.
/// `icon_state` when off. Defined on init.
@@ -96,7 +97,7 @@
var/categories = CAT_NORMAL
/// What we're requesting payment for right now
var/datum/data/vending_product/currently_vending = null
- /// Status screen messages like "insufficient funds", displayed in NanoUI
+ /// Status screen messages like "insufficient funds", displayed in UI
var/status_message = ""
/// Set to 1 if status_message is an error
var/status_error = 0
@@ -358,6 +359,24 @@
return
return
+/obj/structure/machinery/vending/on_death(damage, damage_flags, damage_type, armor_penetration, obj/weapon)
+ var/turf/current_turf = get_turf(src)
+ if(current_turf)
+ var/list/stocked_products = list()
+ for(var/datum/data/vending_product/product in product_records)
+ if(product.amount > 0)
+ stocked_products += product
+
+ var/items_to_drop = rand(1, 5)
+ while(items_to_drop-- > 0 && length(stocked_products))
+ var/datum/data/vending_product/product = pick(stocked_products)
+ new product.product_path(current_turf)
+ product.amount--
+ if(product.amount < 1)
+ stocked_products -= product
+
+ . = ..()
+
/obj/structure/machinery/vending/emag_act(var/remaining_charges, var/mob/user)
if (!emagged)
src.emagged = 1
@@ -751,7 +770,6 @@
sel_key = params["vendItem"]
var/datum/data/vending_product/R = product_records[key]
- // This should not happen unless the request from NanoUI was bad
if(!(R.category & categories))
return
diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm
index 2f7e84d50e9..927e6c22348 100644
--- a/code/game/objects/structures/noticeboard.dm
+++ b/code/game/objects/structures/noticeboard.dm
@@ -90,8 +90,7 @@
if(href_list["read"])
var/obj/item/paper/P = locate(href_list["read"])
if((P && P.loc == src))
- usr << browse("
[P.name] [P.info] ", "window=[P.name]")
- onclose(usr, "[P.name]")
+ P.show_content(usr)
return
/obj/structure/noticeboard/command
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index ae4bd4de385..2cad8a5c5a4 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -114,7 +114,7 @@
if(. != BULLET_ACT_HIT)
return .
- add_damage(proj_damage)
+ add_damage(proj_damage, hitting_projectile.damage_flags(), hitting_projectile.damage_type, hitting_projectile.armor_penetration, hitting_projectile)
/obj/structure/window/ex_act(severity)
switch(severity)
diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm
index ff981c97dbe..b86db50919a 100644
--- a/code/game/turfs/simulated/floor.dm
+++ b/code/game/turfs/simulated/floor.dm
@@ -26,6 +26,9 @@
/// If the turf should generate details. Default: TRUE
var/has_edge_icon = TRUE
+/turf/simulated/floor/examine_descriptor(mob/user)
+ return "floor"
+
/turf/simulated/floor/disassembly_hints(mob/user, distance, is_adjacent)
. += ..()
if(flooring)
diff --git a/code/game/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm
index ae52c41ae6e..467fbb568f9 100644
--- a/code/game/turfs/simulated/wall_attacks.dm
+++ b/code/game/turfs/simulated/wall_attacks.dm
@@ -139,7 +139,7 @@
WR.scrape(user)
return
else if(attacking_item.force >= 10)
- user.do_attack_animation(src, attacking_item)
+ user.do_attack_animation(src, used_item = attacking_item)
to_chat(user, SPAN_NOTICE("\The [src] crumbles away under the force of your [attacking_item]."))
dismantle_wall(TRUE)
return
diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm
index 104a39b4f84..6ada1a0b148 100644
--- a/code/game/turfs/simulated/walls.dm
+++ b/code/game/turfs/simulated/walls.dm
@@ -62,6 +62,9 @@
state = SPAN_NOTICE("\The [src] seems completely intact.")
. = state
+/turf/simulated/wall/examine_descriptor(mob/user)
+ return "wall"
+
/turf/simulated/wall/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
if(locate(/obj/effect/overlay/wallrot) in src)
diff --git a/code/game/turfs/unsimulated/floor.dm b/code/game/turfs/unsimulated/floor.dm
index 4f2a2740e20..ebce3c7ba98 100644
--- a/code/game/turfs/unsimulated/floor.dm
+++ b/code/game/turfs/unsimulated/floor.dm
@@ -3,6 +3,9 @@
icon = 'icons/turf/flooring/tiles.dmi'
icon_state = "tiled_preview"
+/turf/unsimulated/floor/examine_descriptor(mob/user)
+ return "floor"
+
/turf/unsimulated/floor/monotile
icon_state = "monotile_preview"
diff --git a/code/game/turfs/unsimulated/walls.dm b/code/game/turfs/unsimulated/walls.dm
index 1467831b41c..844df462165 100644
--- a/code/game/turfs/unsimulated/walls.dm
+++ b/code/game/turfs/unsimulated/walls.dm
@@ -7,6 +7,9 @@
blocks_air = TRUE
pass_flags_self = PASSCLOSEDTURF
+/turf/unsimulated/wall/examine_descriptor(mob/user)
+ return "wall"
+
/turf/unsimulated/wall/fakeglass
name = "window"
icon = 'icons/turf/walls.dmi'
diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm
index 972aa5519d3..32f5789b9b2 100644
--- a/code/game/verbs/ooc.dm
+++ b/code/game/verbs/ooc.dm
@@ -265,14 +265,6 @@
else //Delayed to avoid wingets from Login calls.
addtimer(CALLBACK(src, VERB_REF(fit_viewport), 1 SECONDS))
-/client/verb/refresh_tgui()
- set name = "Refresh TGUI"
- set category = "OOC.Debug"
-
- for(var/window_id in tgui_windows)
- var/datum/tgui_window/window = tgui_windows[window_id]
- window.reinitialize()
-
/client/verb/fix_stat_panel()
set name = "Fix-Stat-Panel"
set hidden = TRUE
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 285bc8ea8ac..86bc426af60 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -1453,3 +1453,10 @@ var/global/enabled_spooking = 0
to_world(FONT_LARGE(EXAMINE_BLOCK_ODYSSEY(SPAN_NOTICE("The scenario canonicity has been changed to [SPAN_BOLD(canonicity)] by an administrator."))))
log_and_message_admins("has set the Odyssey canonicity to [canonicity]", usr)
feedback_add_details("admin_verb","SEOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+/datum/admins/proc/open_narrate_panel()
+ set category = "Special Verbs.Narration/Messaging"
+ set name = "Narrate Panel"
+
+ var/datum/tgui_module/narrate_panel/NP = new /datum/tgui_module/narrate_panel(usr)
+ NP.ui_interact(usr)
diff --git a/code/modules/admin/admin_attack_log.dm b/code/modules/admin/admin_attack_log.dm
index e1c1ba975fa..60c835a286b 100644
--- a/code/modules/admin/admin_attack_log.dm
+++ b/code/modules/admin/admin_attack_log.dm
@@ -1,7 +1,3 @@
-/mob/var/mob/lastattacker = null
-/mob/var/mob/lastattacked = null
-/mob/var/attack_log = list()
-
/proc/log_and_message_admins(var/message as text, var/mob/user = usr, var/turf/location)
var/turf/T = location ? location : (user ? get_turf(user) : null)
if(T)
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 080c60966ce..916fe9716a4 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -106,7 +106,8 @@ GLOBAL_LIST_INIT(admin_verbs_admin, list(
/client/proc/toggle_aooc,
/client/proc/force_away_mission,
/client/proc/alooc,
- /client/proc/create_portal
+ /client/proc/create_portal,
+ /datum/admins/proc/open_narrate_panel
))
GLOBAL_LIST_INIT(admin_verbs_ban, list(
@@ -179,7 +180,6 @@ GLOBAL_LIST_INIT(admin_verbs_server, list(
/datum/admins/proc/toggle_round_spookyness,
/datum/admins/proc/toggle_space_ninja,
/client/proc/toggle_random_events,
- /client/proc/nanomapgen_DumpImage,
/client/proc/toggle_recursive_explosions,
/client/proc/restart_controller,
/client/proc/cmd_ss_panic,
@@ -354,7 +354,6 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, list(
/datum/admins/proc/adjump,
/datum/admins/proc/toggle_space_ninja,
/client/proc/toggle_random_events,
- /client/proc/nanomapgen_DumpImage,
/client/proc/play_local_sound,
/client/proc/play_sound,
/client/proc/play_server_sound,
@@ -430,6 +429,7 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, list(
/client/proc/force_away_mission,
/client/proc/profiler_start,
/client/proc/create_portal,
+ /datum/admins/proc/open_narrate_panel
))
GLOBAL_LIST_INIT(admin_verbs_mod, list(
@@ -473,7 +473,6 @@ GLOBAL_LIST_INIT(admin_verbs_dev, list( //will need to be altered - Ryan784
/client/proc/jumptoship,
/client/proc/jumptosector,
/client/proc/cmd_dev_say,
- /client/proc/nanomapgen_DumpImage,
/client/proc/admin_ghost,
/client/proc/air_report,
/client/proc/enable_debug_verbs,
diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm
index 37afb399f1b..91f00a7dc2f 100644
--- a/code/modules/admin/player_panel.dm
+++ b/code/modules/admin/player_panel.dm
@@ -139,7 +139,7 @@
/datum/tgui_module/moderator/shared/player_panel/ui_interact(mob/user, var/datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
- ui = new(user, src, "PlayerPanel", "Player Panel", 960, 600)
+ ui = new(user, src, "PlayerPanel", "Player Panel", 1080, 720)
ui.open()
/datum/tgui_module/moderator/shared/player_panel/ui_data(mob/user)
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index fde6a515bfc..603011407f8 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -463,21 +463,6 @@
usr << browse(HTML_SKELETON(replacetext(SSatoms.InitLog(), "\n", " ")), "window=initlog")
-/client/proc/reload_nanoui_resources()
- set category = "Debug"
- set name = "Reload NanoUI Resources"
- set desc = "Force the client to redownload NanoUI Resources"
-
- // Close open NanoUIs.
- SSnanoui.close_user_uis(usr)
-
- // Re-load the assets.
- var/datum/asset/assets = get_asset_datum(/datum/asset/nanoui)
- assets.register()
-
- // Clear the user's cache so they get resent.
- usr.client.sent_assets = list()
-
/**
* Used to generate lag and load the MC to test how things work under live server stress
*/
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index e8c058e2929..cc6fd7814fe 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -782,7 +782,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
message_admins("[key_name_admin(usr)] has gibbed [key_name_admin(M)]", 1)
if(isobserver(M))
- gibs(M.loc, M.viruses)
+ gibs(M.loc)
return
M.gib()
diff --git a/code/modules/atmospherics/components/unary/vent_pump.dm b/code/modules/atmospherics/components/unary/vent_pump.dm
index 0e7fac74aed..845eb2e1de6 100644
--- a/code/modules/atmospherics/components/unary/vent_pump.dm
+++ b/code/modules/atmospherics/components/unary/vent_pump.dm
@@ -407,13 +407,13 @@
to_chat(user, SPAN_WARNING("\The [attacking_item] can only be used to tear open welded air vents!"))
return TRUE
user.visible_message(SPAN_WARNING("\The [user] starts using \the [attacking_item] to hack open \the [src]!"), SPAN_NOTICE("You start hacking open \the [src] with \the [attacking_item]..."))
- user.do_attack_animation(src, attacking_item)
+ user.do_attack_animation(src, used_item = attacking_item)
playsound(loc, 'sound/weapons/smash.ogg', 60, TRUE)
var/cut_amount = 3
for(var/i = 0; i <= cut_amount; i++)
if(!attacking_item || !do_after(user, 30, src))
return TRUE
- user.do_attack_animation(src, attacking_item)
+ user.do_attack_animation(src, used_item = attacking_item)
user.visible_message(SPAN_WARNING("\The [user] smashes \the [attacking_item] into \the [src]!"), SPAN_NOTICE("You smash \the [attacking_item] into \the [src]."))
playsound(loc, 'sound/weapons/smash.ogg', 60, TRUE)
if(i == cut_amount)
diff --git a/code/modules/atmospherics/components/unary/vent_scrubber.dm b/code/modules/atmospherics/components/unary/vent_scrubber.dm
index 88c426d5893..040cfab61b8 100644
--- a/code/modules/atmospherics/components/unary/vent_scrubber.dm
+++ b/code/modules/atmospherics/components/unary/vent_scrubber.dm
@@ -412,13 +412,13 @@
to_chat(user, SPAN_WARNING("\The [attacking_item] can only be used to tear open welded scrubbers!"))
return TRUE
user.visible_message(SPAN_WARNING("\The [user] starts using \the [attacking_item] to hack open \the [src]!"), SPAN_NOTICE("You start hacking open \the [src] with \the [attacking_item]..."))
- user.do_attack_animation(src, attacking_item)
+ user.do_attack_animation(src, used_item = attacking_item)
playsound(loc, 'sound/weapons/smash.ogg', 60, TRUE)
var/cut_amount = 3
for(var/i = 0; i <= cut_amount; i++)
if(!attacking_item || !do_after(user, 30, src))
return TRUE
- user.do_attack_animation(src, attacking_item)
+ user.do_attack_animation(src, used_item = attacking_item)
user.visible_message(SPAN_WARNING("\The [user] smashes \the [attacking_item] into \the [src]!"), SPAN_NOTICE("You smash \the [attacking_item] into \the [src]."))
playsound(loc, 'sound/weapons/smash.ogg', 60, TRUE)
if(i == cut_amount)
diff --git a/code/modules/atmospherics/vent_passive.dm b/code/modules/atmospherics/vent_passive.dm
index 923c79fd50e..abc063626c1 100644
--- a/code/modules/atmospherics/vent_passive.dm
+++ b/code/modules/atmospherics/vent_passive.dm
@@ -128,13 +128,13 @@
to_chat(user, SPAN_WARNING("\The [attacking_item] can only be used to tear open welded air vents!"))
return TRUE
user.visible_message(SPAN_WARNING("\The [user] starts using \the [attacking_item] to hack open \the [src]!"), SPAN_NOTICE("You start hacking open \the [src] with \the [attacking_item]..."))
- user.do_attack_animation(src, attacking_item)
+ user.do_attack_animation(src, used_item = attacking_item)
playsound(loc, 'sound/weapons/smash.ogg', 60, TRUE)
var/cut_amount = 3
for(var/i = 0; i <= cut_amount; i++)
if(!attacking_item || !do_after(user, 30, src))
return TRUE
- user.do_attack_animation(src, attacking_item)
+ user.do_attack_animation(src, used_item = attacking_item)
user.visible_message(SPAN_WARNING("\The [user] smashes \the [attacking_item] into \the [src]!"), SPAN_NOTICE("You smash \the [attacking_item] into \the [src]."))
playsound(loc, 'sound/weapons/smash.ogg', 60, TRUE)
if(i == cut_amount)
diff --git a/code/modules/client/client_color.dm b/code/modules/client/client_color.dm
index d844bada8fb..f7ae91979d9 100644
--- a/code/modules/client/client_color.dm
+++ b/code/modules/client/client_color.dm
@@ -4,11 +4,6 @@
var/override = FALSE //If set to override we will stop multiplying the moment we get here. NOTE: Priority remains, if your override is on position 4, the other 3 will still have a say.
var/disability = FALSE
-/mob
- var/list/client_colors = list()
-
-
-
/*
Adds an instance of color_type to the mob's client_colors list
color_type - a typepath (subtyped from /datum/client_color)
diff --git a/code/modules/client/preference_setup/global/01_ui.dm b/code/modules/client/preference_setup/global/01_ui.dm
index 8bb41cc3706..3e89a876196 100644
--- a/code/modules/client/preference_setup/global/01_ui.dm
+++ b/code/modules/client/preference_setup/global/01_ui.dm
@@ -6,7 +6,6 @@
S["UI_style"] >> pref.UI_style
S["UI_style_color"] >> pref.UI_style_color
S["UI_style_alpha"] >> pref.UI_style_alpha
- S["tgui_fancy"] >> pref.tgui_fancy
S["tgui_lock"] >> pref.tgui_lock
S["ooccolor"] >> pref.ooccolor
S["clientfps"] >> pref.clientfps
@@ -21,7 +20,6 @@
S["UI_style"] << pref.UI_style
S["UI_style_color"] << pref.UI_style_color
S["UI_style_alpha"] << pref.UI_style_alpha
- S["tgui_fancy"] << pref.tgui_fancy
S["tgui_lock"] << pref.tgui_lock
S["ooccolor"] << pref.ooccolor
S["clientfps"] << pref.clientfps
@@ -39,7 +37,6 @@
"UI_style",
"UI_style_color",
"UI_style_alpha",
- "tgui_fancy",
"tgui_lock",
"ooccolor",
"clientfps",
@@ -63,7 +60,6 @@
"UI_style",
"UI_style_color",
"UI_style_alpha",
- "tgui_fancy",
"tgui_lock",
"ooccolor",
"clientfps",
@@ -83,7 +79,6 @@
"UI_style_alpha" = pref.UI_style_alpha,
"UI_style_color" = pref.UI_style_color,
"UI_style" = pref.UI_style,
- "tgui_fancy" = pref.tgui_fancy,
"tgui_lock" = pref.tgui_lock,
"ooccolor" = pref.ooccolor,
"clientfps" = pref.clientfps,
@@ -100,7 +95,6 @@
pref.UI_style_color = sanitize_hexcolor(pref.UI_style_color, initial(pref.UI_style_color))
pref.UI_style_alpha = sanitize_integer(text2num(pref.UI_style_alpha), 0, 255, initial(pref.UI_style_alpha))
pref.clientfps = sanitize_integer(text2num(pref.clientfps), 0, 1000, initial(pref.clientfps))
- pref.tgui_fancy = sanitize_bool(pref.tgui_fancy, TRUE)
pref.tgui_lock = sanitize_bool(pref.tgui_lock, FALSE)
pref.tgui_inputs = sanitize_bool(pref.tgui_inputs, TRUE)
pref.tgui_buttons_large = sanitize_bool(pref.tgui_buttons_large, FALSE)
@@ -116,7 +110,6 @@
dat += "-Color: [pref.UI_style_color] [HTML_RECT(pref.UI_style_color)] - reset "
dat += "-Alpha(transparency): [pref.UI_style_alpha] - reset "
dat += "Tooltip Style: [pref.tooltip_style] "
- dat += "TGUI Fancy: [pref.tgui_fancy ? "ON" : "OFF"] "
dat += "TGUI Lock: [pref.tgui_lock ? "ON" : "OFF"] "
dat += "TGUI Inputs: [pref.tgui_inputs ? "ON" : "OFF"] "
dat += "TGUI Input Large Buttons: [pref.tgui_buttons_large ? "ON" : "OFF"] "
@@ -152,10 +145,6 @@
pref.UI_style_alpha = UI_style_alpha_new
return TOPIC_REFRESH
- else if(href_list["select_tguif"])
- pref.tgui_fancy = !pref.tgui_fancy
- return TOPIC_REFRESH
-
else if(href_list["select_tguil"])
pref.tgui_lock = !pref.tgui_lock
return TOPIC_REFRESH
diff --git a/code/modules/client/preference_setup/loadout/gear_tweaks.dm b/code/modules/client/preference_setup/loadout/gear_tweaks.dm
index 998ac37606b..825bbb91554 100644
--- a/code/modules/client/preference_setup/loadout/gear_tweaks.dm
+++ b/code/modules/client/preference_setup/loadout/gear_tweaks.dm
@@ -58,7 +58,7 @@ Color adjustment
..()
/datum/gear_tweak/color/get_contents(var/metadata)
- return "Color: ⚫ "
+ return "Color: ● "
/datum/gear_tweak/color/get_default()
return valid_colors ? valid_colors[1] : COLOR_GRAY
@@ -104,7 +104,7 @@ Alpha adjustment
GLOBAL_DATUM_INIT(gear_tweak_accent_color, /datum/gear_tweak/color/accent, new())
/datum/gear_tweak/color/accent/get_contents(var/metadata)
- return "Accent Color: ⚫ "
+ return "Accent Color: ● "
/datum/gear_tweak/color/accent/tweak_item(var/obj/item/I, var/metadata, var/mob/living/carbon/human/H)
if(valid_colors && !(metadata in valid_colors))
diff --git a/code/modules/client/preference_setup/loadout/items/augments.dm b/code/modules/client/preference_setup/loadout/items/augments.dm
index 75c69436e4d..83d8ea9f12a 100644
--- a/code/modules/client/preference_setup/loadout/items/augments.dm
+++ b/code/modules/client/preference_setup/loadout/items/augments.dm
@@ -51,6 +51,8 @@
path = /obj/item/organ/internal/augment/tool/combitool
cost = 5
flags = GEAR_HAS_NAME_SELECTION | GEAR_HAS_DESC_SELECTION
+ // Vaurca get a vaurca specific version of this
+ whitelisted = list(SPECIES_HUMAN, SPECIES_HUMAN_OFFWORLD, SPECIES_TAJARA, SPECIES_TAJARA_ZHAN, SPECIES_TAJARA_MSAI, SPECIES_SKRELL, SPECIES_SKRELL_AXIORI, SPECIES_IPC, SPECIES_IPC_G1, SPECIES_IPC_G2, SPECIES_IPC_XION, SPECIES_IPC_ZENGHU, SPECIES_IPC_BISHOP, SPECIES_IPC_SHELL, SPECIES_UNATHI)
/datum/gear/augment/combitool/New()
..()
diff --git a/code/modules/client/preference_setup/loadout/items/shirts.dm b/code/modules/client/preference_setup/loadout/items/shirts.dm
index 602dc228224..68ea6ca44b6 100644
--- a/code/modules/client/preference_setup/loadout/items/shirts.dm
+++ b/code/modules/client/preference_setup/loadout/items/shirts.dm
@@ -46,6 +46,9 @@ ABSTRACT_TYPE(/datum/gear/shirts)
shirt["halter top"] = /obj/item/clothing/under/dressshirt/haltertop
shirt["tank top"] = /obj/item/clothing/under/dressshirt/tanktop
shirt["tank top, feminine"] = /obj/item/clothing/under/dressshirt/tanktop/feminine
+ shirt["tank top, cropped"] = /obj/item/clothing/under/dressshirt/tanktop/cropped
+ shirt["tank top, feminine cropped"] = /obj/item/clothing/under/dressshirt/tanktop/cropped/feminine
+ shirt["tank top, midriff"] = /obj/item/clothing/under/dressshirt/tanktop/midriff
gear_tweaks += new /datum/gear_tweak/path(shirt)
/datum/gear/shirts/stripes
@@ -75,3 +78,40 @@ ABSTRACT_TYPE(/datum/gear/shirts)
shirts["red silversun shirt"] = /obj/item/clothing/under/dressshirt/silversun/red
shirts["random colored silversun shirt"] = /obj/item/clothing/under/dressshirt/silversun/random
gear_tweaks += new /datum/gear_tweak/path(shirts)
+
+/datum/gear/shirts/precoloured
+ display_name = "pre-coloured shirt selection"
+ description = "A selection of pre-coloured and graphic shirts."
+ flags = GEAR_HAS_NAME_SELECTION | GEAR_HAS_DESC_SELECTION
+ path = /obj/item/clothing/under/dressshirt/corgi
+
+/datum/gear/shirts/precoloured/New()
+ ..()
+ var/list/colouredshirts = list()
+ colouredshirts["corgi t-shirt"] = /obj/item/clothing/under/dressshirt/corgi
+ colouredshirts["heart t-shirt"] = /obj/item/clothing/under/dressshirt/heart
+ colouredshirts["heart t-shirt, alt"] = /obj/item/clothing/under/dressshirt/heart/alt
+ colouredshirts["I love NT t-shirt"] = /obj/item/clothing/under/dressshirt/lovent
+ colouredshirts["band t-shirt"] = /obj/item/clothing/under/dressshirt/band
+ colouredshirts["alien t-shirt"] = /obj/item/clothing/under/dressshirt/alien
+ colouredshirts["tie-dye t-shirt"] = /obj/item/clothing/under/dressshirt/tiedye
+ colouredshirts["skull t-shirt"] = /obj/item/clothing/under/dressshirt/skull
+ colouredshirts["sports t-shirt, blue"] = /obj/item/clothing/under/dressshirt/sport
+ colouredshirts["sports t-shirt, green"] = /obj/item/clothing/under/dressshirt/sport/green
+ colouredshirts["sports t-shirt, red"] = /obj/item/clothing/under/dressshirt/sport/red
+ colouredshirts["wing t-shirt"] = /obj/item/clothing/under/dressshirt/wing
+ colouredshirts["peace t-shirt"] = /obj/item/clothing/under/dressshirt/peace
+ colouredshirts["steak t-shirt"] = /obj/item/clothing/under/dressshirt/meat
+ colouredshirts["question mark t-shirt"] = /obj/item/clothing/under/dressshirt/questionmark
+ colouredshirts["white bowling t-shirt"] = /obj/item/clothing/under/dressshirt/bowling
+ colouredshirts["aqua bowling t-shirt"] = /obj/item/clothing/under/dressshirt/bowling/aqua
+ colouredshirts["purple bowling t-shirt"] = /obj/item/clothing/under/dressshirt/bowling/purple
+ colouredshirts["red bowling t-shirt"] = /obj/item/clothing/under/dressshirt/bowling/red
+ colouredshirts["blue jersey"] = /obj/item/clothing/under/dressshirt/jersey
+ colouredshirts["red jersey"] = /obj/item/clothing/under/dressshirt/jersey/red
+ colouredshirts["pink and black t-shirt"] = /obj/item/clothing/under/dressshirt/pinkblack
+ colouredshirts["blue NanoTrasen t-shirt"] = /obj/item/clothing/under/dressshirt/nanotrasen
+ colouredshirts["red NanoTrasen t-shirt"] = /obj/item/clothing/under/dressshirt/nanotrasen/red
+ colouredshirts["fire tank top"] = /obj/item/clothing/under/dressshirt/tanktop/fire
+ colouredshirts["sun tank top"] = /obj/item/clothing/under/dressshirt/tanktop/sun
+ gear_tweaks += new /datum/gear_tweak/path(colouredshirts)
diff --git a/code/modules/client/preference_setup/origin/origin.dm b/code/modules/client/preference_setup/origin/origin.dm
index 292fe98f2cf..4dbf1e70907 100644
--- a/code/modules/client/preference_setup/origin/origin.dm
+++ b/code/modules/client/preference_setup/origin/origin.dm
@@ -1,7 +1,3 @@
-/mob/living/carbon/human
- var/singleton/origin_item/culture/culture
- var/singleton/origin_item/origin/origin
-
/datum/category_item/player_setup_item/origin
name = "Origin"
sort_order = 1
diff --git a/code/modules/client/preference_setup/preference_setup.dm b/code/modules/client/preference_setup/preference_setup.dm
index 46f4ef5d959..e677108ab8b 100644
--- a/code/modules/client/preference_setup/preference_setup.dm
+++ b/code/modules/client/preference_setup/preference_setup.dm
@@ -9,7 +9,7 @@
#define SQL_PREFERENCES 0x2
// General-purpose helper for drawing a colored box.
-#define HTML_RECT(color) "
"
+#define HTML_RECT(color) "
"
// A bit of a hack to allow unit testing of category items.
#ifdef UNIT_TEST
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 4287ce1c510..ed3d511060a 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -26,7 +26,6 @@ GLOBAL_LIST_EMPTY_TYPED(preferences_datums, /datum/preferences)
var/sfx_toggles = ASFX_DEFAULT
var/UI_style_color = "#ffffff"
var/UI_style_alpha = 255
- var/tgui_fancy = TRUE
var/tgui_lock = FALSE
var/tgui_inputs = TRUE
var/tgui_buttons_large = FALSE
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 1bdba12895a..e55047a1a7b 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -77,6 +77,16 @@
QDEL_LIST(accessories)
return ..()
+/obj/item/clothing/examine_descriptor(mob/user)
+ return "clothing"
+
+/obj/item/clothing/examine_tags(mob/user)
+ . = ..()
+ if(item_flags & ITEM_FLAG_THICK_MATERIAL)
+ .["thick"] = "Stops or slows minor piercing effects, such as from injectors."
+ if(item_flags & ITEM_FLAG_INJECTION_PORT)
+ .["port-enabled"] = "Has a dedicated injection port for syringes and hypo-sprays to be used on the wearer."
+
//Updates the icons of the mob wearing the clothing item, if any.
/obj/item/clothing/proc/update_clothing_icon()
return
diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm
index c0cd8b186a3..660eb4a610f 100644
--- a/code/modules/clothing/head/hardhat.dm
+++ b/code/modules/clothing/head/hardhat.dm
@@ -5,6 +5,7 @@
icon_state = "hardhat_yellow"
item_state = "hardhat_yellow"
light_overlay = "hardhat_light"
+ item_flags = ITEM_FLAG_THICK_MATERIAL
contained_sprite = TRUE
action_button_name = "Toggle Headlamp"
light_range = 4 //luminosity when on
diff --git a/code/modules/clothing/head/wide_hats.dm b/code/modules/clothing/head/wide_hats.dm
index 9d924c4440f..be1c803c7a2 100644
--- a/code/modules/clothing/head/wide_hats.dm
+++ b/code/modules/clothing/head/wide_hats.dm
@@ -52,11 +52,13 @@
item_state = "boonie"
build_from_parts = TRUE
worn_overlay = "over"
+ sprite_sheets = null
/obj/item/clothing/head/bucket/boonie/camo
icon_state = "camo_boonie"
item_state = "camo_boonie"
has_accents = TRUE
+ sprite_sheets = null
/obj/item/clothing/head/fedora
name = "fedora"
diff --git a/code/modules/clothing/spacesuits/rig/modules/computer.dm b/code/modules/clothing/spacesuits/rig/modules/computer.dm
index a4f6736deca..dbbb30a26ae 100644
--- a/code/modules/clothing/spacesuits/rig/modules/computer.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/computer.dm
@@ -25,9 +25,6 @@
module.holder.ui_interact(usr)
-/mob
- var/get_rig_stats = 0
-
/obj/item/rig_module/ai_container
name = "IIS module"
desc = "An integrated intelligence system module suitable for most hardsuits."
diff --git a/code/modules/clothing/spacesuits/rig/modules/utility.dm b/code/modules/clothing/spacesuits/rig/modules/utility.dm
index f81510d7289..6d76f923b3d 100644
--- a/code/modules/clothing/spacesuits/rig/modules/utility.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/utility.dm
@@ -42,6 +42,15 @@
. = ..()
+/obj/item/rig_module/device/proc/handle_device_engage(atom/target, mob/user)
+ var/resolved = target.attackby(device, user)
+ if(!resolved && device && target)
+ if(device.afterattack(target, user, TRUE))
+ return TRUE
+ else
+ return FALSE
+ return TRUE
+
/obj/item/rig_module/device/healthscanner
name = "health scanner module"
desc = "A hardsuit-mounted health scanner."
@@ -51,19 +60,25 @@
construction_cost = list("$glass" = 5250, DEFAULT_WALL_MATERIAL = 2500)
construction_time = 300
- engage_string = "Run Self-Diagnostic"
+ engage_string = "Run Diagnostic"
device_type = /obj/item/healthanalyzer
category = MODULE_MEDICAL
-/obj/item/rig_module/device/healthscanner/vitalscanner
- name = "integrated vitals tracker"
- desc = "A hardsuit-mounted vitals tracker."
- interface_name = "vitals tracker"
- interface_desc = "Shows an informative health readout of the user."
+/obj/item/rig_module/device/healthscanner/engage(atom/target, mob/user)
+ if(!..() || !device)
+ return FALSE
- category = MODULE_GENERAL
+ if(!target.Adjacent(user))
+ return FALSE
+
+ var/obj/item/healthanalyzer/our_device = device
+ if(!target || user == target)
+ our_device.attack_self(user)
+ return TRUE
+
+ return handle_device_engage(target, user)
/obj/item/rig_module/device/drill
name = "hardsuit diamond drill mount"
@@ -158,15 +173,6 @@
if("rfd_settings")
our_device.attack_self(user)
-/obj/item/rig_module/device/rfd_c/handle_device_engage(atom/target, mob/user)
- var/resolved = target.attackby(device, user)
- if(!resolved && device && target)
- if(device.afterattack(target, user, TRUE))
- return TRUE
- else
- return FALSE
- return TRUE
-
/obj/item/rig_module/device/rfd_c/engage(atom/target, mob/user)
if(!..() || !device)
return FALSE
@@ -186,12 +192,6 @@
return handle_device_engage(target, user)
-/obj/item/rig_module/device/proc/handle_device_engage(atom/target, mob/user)
- var/resolved = target.attackby(device, user)
- if(!resolved && device && target)
- device.afterattack(target, user, TRUE)
- return TRUE
-
/obj/item/rig_module/chem_dispenser
name = "mounted chemical dispenser"
desc = "A complex web of tubing and needles suitable for hardsuit use."
@@ -477,9 +477,6 @@
construction_cost = list(DEFAULT_WALL_MATERIAL = 15000, MATERIAL_GLASS = 4250, MATERIAL_SILVER = 4250, MATERIAL_URANIUM = 5250)
construction_time = 300
- suit_overlay_active = "maneuvering_active"
- suit_overlay_inactive = "maneuvering_inactive"
-
interface_name = "maneuvering jets"
interface_desc = "An inbuilt EVA maneuvering system that runs off the hardsuit air supply."
diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm
index c2787e31c82..4a70736f1ab 100644
--- a/code/modules/clothing/spacesuits/rig/rig.dm
+++ b/code/modules/clothing/spacesuits/rig/rig.dm
@@ -100,6 +100,8 @@
var/malfunctioning = 0
var/malfunction_delay = 0
var/electrified = 0
+ /// Ensures that you can't queue up multiple piece toggle commands at once and bug anything out.
+ var/piece_being_deployed = FALSE
/// Rate at which the suit cell will passively use power when online.
var/cell_draw_rate = CHARGE_DRAIN_DEFAULT
@@ -842,6 +844,8 @@
return TRUE
/obj/item/rig/proc/toggle_piece(var/piece, var/mob/initiator, var/deploy_mode)
+ if(piece_being_deployed)
+ return
if(!usr || sealing || !cell || !cell.charge)
return
@@ -877,6 +881,7 @@
use_obj = chest
check_slot = wearer.wear_suit
+ piece_being_deployed = TRUE
if(use_obj)
// Handle retracting the piece, if possible.
if(check_slot == use_obj && deploy_mode != ONLY_DEPLOY)
@@ -890,6 +895,7 @@
if(use_obj == boots && chest_slot == chest_obj)
to_chat(wearer, SPAN_WARNING("The chest piece of the hardsuit must be retracted before you can retract your boots!"))
sound_to(wearer, 'sound/machines/terminal/terminal_error.ogg')
+ piece_being_deployed = FALSE
return
if(check_slot == use_obj)
@@ -904,16 +910,21 @@
// Handle deploying the piece, if possible.
else if (deploy_mode != ONLY_RETRACT)
if(check_slot && check_slot == use_obj)
+ piece_being_deployed = FALSE
return TRUE
if(!do_after(wearer, 8))
if(wearer)
to_chat(wearer, SPAN_WARNING("You must remain still while the suit deploys its parts."))
+ piece_being_deployed = FALSE
return FALSE
// If we're deploying the chest, we also try to deploy boots. If we can't also deploy boots, the entire thing fails.
if(use_obj == chest)
- if(!toggle_piece("boots", initiator, ONLY_DEPLOY))
+ var/obj/item/boots_slot = wearer.shoes
+ var/obj/item/boots_obj = boots
+ if(boots_slot != boots_obj)
to_chat(initiator, SPAN_DANGER("You are unable to deploy \the [piece] as the boots were unable to also deploy!"))
playsound(src, 'sound/items/rfd_empty.ogg', 20, FALSE)
+ piece_being_deployed = FALSE
return FALSE
use_obj.forceMove(wearer)
if(src.color)
@@ -923,6 +934,7 @@
if(check_slot)
to_chat(initiator, SPAN_DANGER("You are unable to deploy \the [piece] as \the [check_slot] [check_slot.gender == PLURAL ? "are" : "is"] in the way."))
playsound(src, 'sound/items/rfd_empty.ogg', 20, FALSE)
+ piece_being_deployed = FALSE
return FALSE
else
to_chat(wearer, SPAN_NOTICE("Your [use_obj.name] [use_obj.gender == PLURAL ? "deploy" : "deploys"] swiftly."))
@@ -933,10 +945,42 @@
update_icon(TRUE)
+ piece_being_deployed = FALSE
return TRUE
/obj/item/rig/proc/deploy(mob/M,var/sealed)
+ var/mob/living/carbon/human/H = M
+ if(!H || !istype(H)) return
+
+ if(H.back != src)
+ return
+
+ if(sealed)
+ if(H.head)
+ var/obj/item/garbage = H.head
+ H.head = null
+ qdel(garbage)
+
+ if(H.gloves)
+ var/obj/item/garbage = H.gloves
+ H.gloves = null
+ qdel(garbage)
+
+ if(H.shoes)
+ var/obj/item/garbage = H.shoes
+ H.shoes = null
+ qdel(garbage)
+
+ if(H.wear_suit)
+ var/obj/item/garbage = H.wear_suit
+ H.wear_suit = null
+ qdel(garbage)
+
+ for(var/piece in list("helmet","gauntlets","boots",BP_CHEST))
+ toggle_piece(piece, H, ONLY_DEPLOY)
+
+/obj/item/rig/proc/retract(mob/M,var/sealed)
var/mob/living/carbon/human/H = M
if(!H || !istype(H)) return
@@ -966,7 +1010,7 @@
qdel(garbage)
for(var/piece in list("helmet","gauntlets",BP_CHEST,"boots"))
- toggle_piece(piece, H, ONLY_DEPLOY)
+ toggle_piece(piece, H, ONLY_RETRACT)
/obj/item/rig/proc/null_wearer(var/mob/user)
for(var/piece in list("helmet","gauntlets",BP_CHEST,"boots"))
diff --git a/code/modules/clothing/spacesuits/rig/rig_verbs.dm b/code/modules/clothing/spacesuits/rig/rig_verbs.dm
index 42e6d4303e0..b5ed0d6e5ef 100644
--- a/code/modules/clothing/spacesuits/rig/rig_verbs.dm
+++ b/code/modules/clothing/spacesuits/rig/rig_verbs.dm
@@ -130,6 +130,27 @@
deploy(wearer)
+/obj/item/rig/verb/retract_suit()
+ set name = "Retract All Hardsuit Parts"
+ set desc = "Retracts helmet, gloves and boots."
+ set category = "Hardsuit.Core Functions"
+ set src = usr.contents
+
+ if(!istype(wearer) || !wearer.back == src)
+ to_chat(usr, SPAN_WARNING("The hardsuit is not being worn."))
+ return
+
+ if(use_check_and_message(usr))
+ return
+
+ if(!check_suit_access(usr))
+ return
+
+ if(!check_power_cost(usr))
+ return
+
+ deploy(wearer)
+
/obj/item/rig/verb/toggle_seals_verb()
set name = "Engage/Disengage Hardsuit"
set desc = "Activates or deactivates your hardsuit."
diff --git a/code/modules/clothing/spacesuits/rig/suits/light.dm b/code/modules/clothing/spacesuits/rig/suits/light.dm
index c0e55fe7fc3..208a5e9c053 100644
--- a/code/modules/clothing/spacesuits/rig/suits/light.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/light.dm
@@ -223,7 +223,7 @@
boot_type = null
initial_modules = list(
- /obj/item/rig_module/device/healthscanner/vitalscanner,
+ /obj/item/rig_module/device/healthscanner,
/obj/item/rig_module/chem_dispenser/offworlder,
/obj/item/rig_module/storage
)
@@ -278,7 +278,7 @@
)
initial_modules = list(
- /obj/item/rig_module/device/healthscanner/vitalscanner,
+ /obj/item/rig_module/device/healthscanner,
/obj/item/rig_module/chem_dispenser/offworlder,
/obj/item/rig_module/actuators/combat,
/obj/item/rig_module/chem_dispenser/combat
@@ -293,7 +293,7 @@
/obj/item/rig/light/offworlder/frontier/equipped
initial_modules = list(
- /obj/item/rig_module/device/healthscanner/vitalscanner,
+ /obj/item/rig_module/device/healthscanner,
/obj/item/rig_module/chem_dispenser/offworlder,
/obj/item/rig_module/actuators/combat,
/obj/item/rig_module/fabricator/energy_net,
@@ -302,7 +302,7 @@
)
/obj/item/rig/light/offworlder/frontier/ninja
initial_modules = list(
- /obj/item/rig_module/device/healthscanner/vitalscanner,
+ /obj/item/rig_module/device/healthscanner,
/obj/item/rig_module/chem_dispenser/offworlder,
/obj/item/rig_module/actuators/combat,
/obj/item/rig_module/fabricator/energy_net,
diff --git a/code/modules/clothing/under/accessories/badges.dm b/code/modules/clothing/under/accessories/badges.dm
index 4935f9246ac..352afe66cfd 100644
--- a/code/modules/clothing/under/accessories/badges.dm
+++ b/code/modules/clothing/under/accessories/badges.dm
@@ -165,23 +165,31 @@
/obj/item/clothing/accessory/badge/officer
name = "security officer's badge"
desc = "A bronze security badge."
- icon_state = "bronzebadge"
- overlay_state = "bronzebadge"
- slot_flags = SLOT_TIE
+ icon_state = "officerbadge"
+ item_state = "officerbadge"
+ overlay_state = "officerbadge"
/obj/item/clothing/accessory/badge/warden
name = "warden's badge"
desc = "A silver security badge."
- icon_state = "silverbadge"
- overlay_state = "silverbadge"
- slot_flags = SLOT_TIE
+ icon_state = "wardenbadge"
+ item_state = "wardenbadge"
+ overlay_state = "wardenbadge"
/obj/item/clothing/accessory/badge/hos
name = "head of security's badge"
desc = "An immaculately polished gold security badge."
- icon_state = "goldbadge"
- overlay_state = "goldbadge"
- slot_flags = SLOT_TIE
+ icon_state = "hosbadge"
+ item_state = "hosbadge"
+ overlay_state = "hosbadge"
+
+/obj/item/clothing/accessory/badge/investigator
+ name = "\improper investigator badge"
+ desc = "This badge marks the holder as an investigative agent."
+ icon_state = "invbadge"
+ overlay_state = "invbadge"
+ badge_string = "Corporate Investigator"
+
/obj/item/clothing/accessory/badge/bssb
name = "\improper BSSB agent's badge"
@@ -252,13 +260,6 @@
icon_state = "marshalbadge"
badge_string = "Federal Marshal"
-/obj/item/clothing/accessory/badge/investigator
- name = "\improper investigator badge"
- desc = "This badge marks the holder as an investigative agent."
- icon_state = "invbadge"
- overlay_state = "invbadge"
- badge_string = "Corporate Investigator"
-
/obj/item/clothing/accessory/badge/idbadge
name = "\improper ID badge"
desc = "A descriptive identification badge with the holder's credentials."
diff --git a/code/modules/clothing/under/shirts/shirts.dm b/code/modules/clothing/under/shirts/shirts.dm
index f09e4c2ab9c..e26756aba28 100644
--- a/code/modules/clothing/under/shirts/shirts.dm
+++ b/code/modules/clothing/under/shirts/shirts.dm
@@ -175,6 +175,22 @@
icon_state = "tanktop_fem"
item_state = "tanktop_fem"
+/obj/item/clothing/under/dressshirt/tanktop/cropped
+ name = "cropped tank top"
+ desc = "A short, simple, cheap tank top."
+ icon_state = "tanktop_crop"
+ item_state = "tanktop_crop"
+
+/obj/item/clothing/under/dressshirt/tanktop/cropped/feminine
+ icon_state = "tanktop_crop_fem"
+ item_state = "tanktop_crop_fem"
+
+/obj/item/clothing/under/dressshirt/tanktop/midriff
+ name = "midriff tank top"
+ desc = "A very short tank top that only covers the chest."
+ icon_state = "tanktop_midriff"
+ item_state = "tanktop_midriff"
+
// Polo Shirts
/obj/item/clothing/under/dressshirt/polo
@@ -233,3 +249,153 @@
if(prob(50))
icon_state = "hawaii_red"
color = color_rotation(rand(-11,12)*15)
+
+
+//pre-coloured shirts
+
+/obj/item/clothing/under/dressshirt/corgi
+ name = "corgi t-shirt"
+ desc = "A t-shirt with a corgi on it, cute!"
+ icon_state = "tshirt_corgi"
+ item_state = "tshirt_corgi"
+
+/obj/item/clothing/under/dressshirt/heart
+ name = "heart t-shirt"
+ desc = "A t-shirt with a cartoon heart on it."
+ icon_state = "tshirt_heart"
+ item_state = "tshirt_heart"
+
+/obj/item/clothing/under/dressshirt/heart/alt
+ icon_state = "tshirt_heart_alt"
+ item_state = "tshirt_heart_alt"
+
+/obj/item/clothing/under/dressshirt/lovent
+ name = "\improper I love NT t-shirt"
+ desc = "A white t-shirt with the text \"I ❤ NT\" on it. Another way to show your love of NanoTrasen!"
+ icon_state = "tshirt_lovent"
+ item_state = "tshirt_lovent"
+
+/obj/item/clothing/under/dressshirt/band
+ name = "band t-shirt"
+ desc = "A t-shirt with the logo of a band on it."
+ icon_state = "tshirt_band"
+ item_state = "tshirt_band"
+
+/obj/item/clothing/under/dressshirt/alien
+ name = "alien t-shirt"
+ desc = "A t-shirt with a cartoon alien head on it. Doesn't really look like any known species."
+ icon_state = "tshirt_alien"
+ item_state = "tshirt_alien"
+
+/obj/item/clothing/under/dressshirt/tiedye
+ name = "tie-dye t-shirt"
+ desc = "A tie-dyed t-shirt with a rainbow swirl on it."
+ icon_state = "tshirt_tiedye"
+ item_state = "tshirt_tiedye"
+
+/obj/item/clothing/under/dressshirt/skull
+ name = "skull t-shirt"
+ desc = "A red t-shirt featuring a human skull, badass?"
+ icon_state = "tshirt_skull"
+ item_state = "tshirt_skull"
+
+/obj/item/clothing/under/dressshirt/sport
+ name = "blue sports t-shirt"
+ desc = "A t-shirt for sports. Takes you back to school PE days."
+ icon_state = "tshirt_sportblue"
+ item_state = "tshirt_sportblue"
+
+/obj/item/clothing/under/dressshirt/sport/green
+ name = "green sports t-shirt"
+ icon_state = "tshirt_sportgreen"
+ item_state = "tshirt_sportgreen"
+
+/obj/item/clothing/under/dressshirt/sport/red
+ name = "red sports t-shirt"
+ icon_state = "tshirt_sportred"
+ item_state = "tshirt_sportred"
+
+/obj/item/clothing/under/dressshirt/wing
+ name = "wing t-shirt"
+ desc = "A t-shirt with a cartoon wing printed on it."
+ icon_state = "tshirt_wing"
+ item_state = "tshirt_wing"
+
+/obj/item/clothing/under/dressshirt/peace
+ name = "peace t-shirt"
+ desc = "A white t-shirt with the symbol of peace on the front and back."
+ icon_state = "tshirt_peace"
+ item_state = "tshirt_peace"
+
+/obj/item/clothing/under/dressshirt/meat
+ name = "steak t-shirt"
+ desc = "A t-shirt with a cartoon steak on it. Tasty."
+ icon_state = "tshirt_meat"
+ item_state = "tshirt_meat"
+
+/obj/item/clothing/under/dressshirt/questionmark
+ name = "question mark t-shirt"
+ desc = "A t-shirt with a question mark on it? For some reason?"
+ icon_state = "tshirt_question"
+ item_state = "tshirt_question"
+
+/obj/item/clothing/under/dressshirt/bowling
+ name = "white bowling t-shirt"
+ desc = "A t-shirt for bowling."
+ icon_state = "tshirt_bowlingw"
+ item_state = "tshirt_bowlingw"
+
+/obj/item/clothing/under/dressshirt/bowling/aqua
+ name = "aqua bowling t-shirt"
+ icon_state = "tshirt_bowlinga"
+ item_state = "tshirt_bowlinga"
+
+/obj/item/clothing/under/dressshirt/bowling/purple
+ name = "purple bowling t-shirt"
+ icon_state = "tshirt_bowlingp"
+ item_state = "tshirt_bowlingp"
+
+/obj/item/clothing/under/dressshirt/bowling/red
+ name = "red bowling t-shirt"
+ icon_state = "tshirt_bowlingr"
+ item_state = "tshirt_bowlingr"
+
+/obj/item/clothing/under/dressshirt/jersey
+ name = "blue jersey"
+ desc = "A sports shirt with numbers on the back."
+ icon_state = "shirt_jersey"
+ item_state = "shirt_jersey"
+
+/obj/item/clothing/under/dressshirt/jersey/red
+ name = "red jersey"
+ icon_state = "shirt_jersey_red"
+ item_state = "shirt_jersey_red"
+
+/obj/item/clothing/under/dressshirt/pinkblack
+ name = "pink and black t-shirt"
+ desc = "A pink t-shirt with black sleeves."
+ icon_state = "tshirt_pinkblack"
+ item_state = "tshirt_pinkblack"
+
+/obj/item/clothing/under/dressshirt/nanotrasen
+ name = "blue NanoTrasen t-shirt"
+ desc = "A t-shirt with the letters \"NT\" printed on it."
+ icon_state = "tshirt_nt_blue"
+ item_state = "tshirt_nt_blue"
+
+/obj/item/clothing/under/dressshirt/nanotrasen/red
+ name = "red NanoTrasen t-shirt"
+ icon_state = "tshirt_nt_red"
+ item_state = "tshirt_nt_red"
+
+/obj/item/clothing/under/dressshirt/tanktop/fire
+ name = "fire tank top"
+ desc = "A tank top with a flame decal on it."
+ icon_state = "tanktop_fire"
+ item_state = "tanktop_fire"
+
+/obj/item/clothing/under/dressshirt/tanktop/sun
+ name = "sun tank top"
+ desc = "A tank top with a sun decal on it."
+ icon_state = "tanktop_sun"
+ item_state = "tanktop_sun"
diff --git a/code/modules/detectivework/tools/crimekit.dm b/code/modules/detectivework/tools/crimekit.dm
index 2b4d4a7957f..d79ce2aff3a 100644
--- a/code/modules/detectivework/tools/crimekit.dm
+++ b/code/modules/detectivework/tools/crimekit.dm
@@ -11,6 +11,7 @@
use_sound = 'sound/items/storage/toolbox.ogg'
drop_sound = 'sound/items/drop/toolbox.ogg'
pickup_sound = 'sound/items/pickup/toolbox.ogg'
+ rustle_sound = 'sound/items/rustle/toolbox.ogg'
/obj/item/storage/briefcase/crimekit/fill()
..()
diff --git a/code/modules/detectivework/tools/rag.dm b/code/modules/detectivework/tools/rag.dm
index c56c604b5d5..70a6b591f14 100644
--- a/code/modules/detectivework/tools/rag.dm
+++ b/code/modules/detectivework/tools/rag.dm
@@ -1,11 +1,3 @@
-/mob
- var/bloody_hands = null
- var/datum/weakref/bloody_hands_mob
- var/track_footprint = 0
- var/list/feet_blood_DNA
- var/track_footprint_type
- var/footprint_color
-
/obj/item/clothing/gloves
var/transfer_blood = 0
var/datum/weakref/bloody_hands_mob
diff --git a/code/modules/emotes/definitions/_mob.dm b/code/modules/emotes/definitions/_mob.dm
index 9e33236aa5f..32b359b13d8 100644
--- a/code/modules/emotes/definitions/_mob.dm
+++ b/code/modules/emotes/definitions/_mob.dm
@@ -1,7 +1,3 @@
-/mob
- var/list/default_emotes = list()
- var/list/usable_emotes = list()
-
/mob/proc/update_emotes(var/skip_sort)
usable_emotes.Cut()
for(var/emote in default_emotes)
diff --git a/code/modules/emotes/emote_mob.dm b/code/modules/emotes/emote_mob.dm
index 2143ccb6b3f..11909b383b7 100644
--- a/code/modules/emotes/emote_mob.dm
+++ b/code/modules/emotes/emote_mob.dm
@@ -159,9 +159,9 @@
if (message)
log_emote("[name]/[key] : [message]")
- message = process_chat_markup(message, list("~", "_"))
- var/langchat_message = message
+ var/langchat_message = process_chat_markup(message, list("~", "_"))
message = format_emote(src, message)
+ message = process_chat_markup(message, list("~", "_"))
var/list/emote_viewers = list()
if(m_type == VISIBLE_MESSAGE)
visible_message(message, show_observers = do_show_observers)
diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm
index 0b9d55b9fac..9fc6e562778 100644
--- a/code/modules/games/cards.dm
+++ b/code/modules/games/cards.dm
@@ -205,7 +205,7 @@
cards -= cards[1]
H.concealed = TRUE
H.update_icon()
- user.do_attack_animation(src, null)
+ user.do_attack_animation(src)
balloon_alert_to_viewers("deals a card")
H.throw_at(get_step(target,target.dir), 10, 1, user, FALSE)
if(!length(cards))
diff --git a/code/modules/ghostroles/spawner/human/human.dm b/code/modules/ghostroles/spawner/human/human.dm
index 13152e9e5dc..fbbd7971199 100644
--- a/code/modules/ghostroles/spawner/human/human.dm
+++ b/code/modules/ghostroles/spawner/human/human.dm
@@ -200,7 +200,3 @@
M.ghost_spawner = WEAKREF(src)
return M
-
-/// Used for cryo to free up a slot when a ghost cryos.
-/mob/living/carbon/human
- var/datum/weakref/ghost_spawner
diff --git a/code/modules/hallucinations/mob.dm b/code/modules/hallucinations/mob.dm
index c9c9b12e069..cdcefd5cd83 100644
--- a/code/modules/hallucinations/mob.dm
+++ b/code/modules/hallucinations/mob.dm
@@ -1,7 +1,3 @@
-/mob/living/carbon
- var/next_hallucination = 0 //Hallucination spam limit var
- var/list/hallucinations = list() //Hallucinations currently affecting the mob. Not to be confused with singular "hallucination" which is a NUM variable like confused/drowsy/eye_blind etc
-
//Hallucinated Hearing
/mob/living/carbon/hear_say(var/message, var/verb = "says", var/datum/language/language, var/alt_name = "",var/italics = 0, var/mob/speaker, var/sound/speech_sound, var/sound_vol)
if(hallucination >= 60 && prob(1))
diff --git a/code/modules/heavy_vehicle/mecha.dm b/code/modules/heavy_vehicle/mecha.dm
index c6644c32ace..cab3572e6fa 100644
--- a/code/modules/heavy_vehicle/mecha.dm
+++ b/code/modules/heavy_vehicle/mecha.dm
@@ -325,9 +325,6 @@
if(istype(exosuit) && exosuit.head && exosuit.head.radio && exosuit.head.radio.is_functional())
return ..()
-/obj/item/radio/exosuit/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/ui_state/state = GLOB.mech_state)
- . = ..()
-
/mob/living/heavy_vehicle/proc/become_remote()
for(var/mob/user in pilots)
eject(user, FALSE)
diff --git a/code/modules/hydroponics/seed_machines.dm b/code/modules/hydroponics/seed_machines.dm
index fd5f1f98c40..1b04dcaaf21 100644
--- a/code/modules/hydroponics/seed_machines.dm
+++ b/code/modules/hydroponics/seed_machines.dm
@@ -245,6 +245,7 @@
var/gene_tag = params["gene"]
if(!gene_tag)
return TRUE
+ var/gene_label = params["gene_label"] || SSplants.get_gene_mask(gene_tag)
last_action = world.time
active = TRUE
@@ -259,8 +260,8 @@
if(!genetics.roundstart)
loaded_disk.genesource += " (variety #[genetics.uid])"
- loaded_disk.name += " ([SSplants.gene_tag_masks[gene_tag]], #[genetics.uid])"
- loaded_disk.desc += " The label reads 'gene [SSplants.gene_tag_masks[gene_tag]], sampled from [genetics.display_name]'."
+ loaded_disk.name += " ([gene_label], #[genetics.uid])"
+ loaded_disk.desc += " The label reads 'gene [gene_label], sampled from [genetics.display_name]'."
eject_disk = TRUE
degradation += rand(20,60)
@@ -312,7 +313,7 @@
for(var/datum/plantgene/P in loaded_disk.genes)
if(data["locus"] != "")
data["locus"] += ", "
- data["locus"] += "[SSplants.gene_tag_masks[P.genetype]]"
+ data["locus"] += "[SSplants.get_gene_mask(P.genetype)]"
data["loadedseed"] = seed ? "[seed.name]" : null
diff --git a/code/modules/hydroponics/spreading/spreading.dm b/code/modules/hydroponics/spreading/spreading.dm
index 734e5b201e4..9dc331b4afe 100644
--- a/code/modules/hydroponics/spreading/spreading.dm
+++ b/code/modules/hydroponics/spreading/spreading.dm
@@ -188,15 +188,17 @@
SHOULD_NOT_SLEEP(TRUE)
overlays.Cut()
- var/growth = 0
- if(growth_threshold)
- growth = min(max_growth, round(health/growth_threshold))
+ var/effective_max = max_growth
var/at_fringe = get_dist(src,parent)
if(spread_distance > 5)
if(at_fringe >= (spread_distance-3))
- max_growth--
+ effective_max--
if(at_fringe >= (spread_distance-2))
- max_growth--
+ effective_max--
+
+ var/growth = 0
+ if(growth_threshold)
+ growth = min(effective_max, round(health/growth_threshold))
var/image/our_icon = seed.get_icon(growth)
@@ -205,7 +207,7 @@
AddOverlays(our_icon)
- if(growth>2 && growth == max_growth)
+ if(growth>2 && growth == effective_max)
layer = (seed && seed.force_layer) ? seed.force_layer : 5
if(growth_type in list(GROWTH_VINES,GROWTH_BIOMASS))
opacity = 1
diff --git a/code/modules/martial_arts/martial.dm b/code/modules/martial_arts/martial.dm
index 1f0b08dd98b..c9703e275a6 100644
--- a/code/modules/martial_arts/martial.dm
+++ b/code/modules/martial_arts/martial.dm
@@ -166,7 +166,7 @@
/datum/martial_art/proc/simple_animal_basic_disarm(var/mob/living/carbon/human/A, var/mob/living/simple_animal/D)
if(A.a_intent == I_DISARM)
A.visible_message("[SPAN_BOLD("\The [A]")] [D.response_disarm] \the [D]")
- A.do_attack_animation(D)
+ A.do_attack_animation(D, ATTACK_EFFECT_DISARM)
D.poke(1)
D.handle_attack_by(A)
diff --git a/code/modules/martial_arts/revenant.dm b/code/modules/martial_arts/revenant.dm
index e00e6c79d2a..c24350b58d2 100644
--- a/code/modules/martial_arts/revenant.dm
+++ b/code/modules/martial_arts/revenant.dm
@@ -21,7 +21,7 @@
return TRUE
/datum/martial_art/revenant/proc/bash_slash(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- A.do_attack_animation(D)
+ A.do_attack_animation(D, ATTACK_EFFECT_CLAW)
D.visible_message(SPAN_DANGER("[A] bashes [D] away!"), SPAN_DANGER("[A] bashes you away!"))
D.apply_damage(rand(5, 10), DAMAGE_BRUTE, damage_flags = DAMAGE_FLAG_SHARP)
var/throw_range = rand(1, 2)
diff --git a/code/modules/martial_arts/skrell.dm b/code/modules/martial_arts/skrell.dm
index f0accb2d89a..7eec629c40f 100644
--- a/code/modules/martial_arts/skrell.dm
+++ b/code/modules/martial_arts/skrell.dm
@@ -22,7 +22,7 @@
return 0
/datum/martial_art/karak_virul/proc/leg_sweep(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- A.do_attack_animation(D)
+ A.do_attack_animation(D, ATTACK_EFFECT_KICK)
if(D.stat || D.weakened)
return 0
D.visible_message(SPAN_WARNING("[A] leg sweeps [D]!"))
diff --git a/code/modules/martial_arts/sleeping_carp.dm b/code/modules/martial_arts/sleeping_carp.dm
index f8a2e4d6ed7..5dda83f04dc 100644
--- a/code/modules/martial_arts/sleeping_carp.dm
+++ b/code/modules/martial_arts/sleeping_carp.dm
@@ -37,7 +37,7 @@
/datum/martial_art/the_sleeping_carp/proc/wristWrench(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
if(!D.stat && !D.stunned && !D.weakened)
- A.do_attack_animation(D)
+ A.do_attack_animation(D, ATTACK_EFFECT_DISARM)
D.visible_message(SPAN_WARNING("[A] grabs [D]'s wrist and wrenches it sideways!"))
playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
D.drop_item()
@@ -48,7 +48,7 @@
/datum/martial_art/the_sleeping_carp/proc/backKick(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
if(A.dir == D.dir && !D.stat && !D.weakened)
- A.do_attack_animation(D)
+ A.do_attack_animation(D, ATTACK_EFFECT_KICK)
D.visible_message(SPAN_WARNING("[A] kicks [D] in the back!"))
step_to(D,get_step(D,D.dir),1)
D.Weaken(4)
@@ -59,7 +59,7 @@
/datum/martial_art/the_sleeping_carp/proc/kneeStomach(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
if(!D.stat && !D.weakened)
- A.do_attack_animation(D)
+ A.do_attack_animation(D, ATTACK_EFFECT_KICK)
D.visible_message(SPAN_WARNING("[A] knees [D] in the stomach!"), \
SPAN_DANGER("[A] winds you with a knee in the stomach!"))
D.audible_message("[D] gags!")
@@ -73,7 +73,7 @@
/datum/martial_art/the_sleeping_carp/proc/headKick(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
if(!D.stat && !D.weakened)
- A.do_attack_animation(D)
+ A.do_attack_animation(D, ATTACK_EFFECT_KICK)
D.visible_message(SPAN_WARNING("[A] kicks [D] in the head!"), \
SPAN_DANGER("[A] kicks you in the jaw!"))
D.apply_damage(20, DAMAGE_BRUTE, BP_HEAD)
@@ -86,7 +86,7 @@
/datum/martial_art/the_sleeping_carp/proc/elbowDrop(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
if(D.weakened || D.resting || D.stat)
- A.do_attack_animation(D)
+ A.do_attack_animation(D, ATTACK_EFFECT_SMASH)
D.visible_message(SPAN_DANGER("[A] elbow drops [D]!"))
if(D.shock_stage >= 60)
D.death() //FINISH HIM!
diff --git a/code/modules/martial_arts/sol_combat.dm b/code/modules/martial_arts/sol_combat.dm
index a96a11da2cf..5efb5a62546 100644
--- a/code/modules/martial_arts/sol_combat.dm
+++ b/code/modules/martial_arts/sol_combat.dm
@@ -49,7 +49,7 @@
AM.throw_at(sweeptarget, ((clamp((1 - (clamp(distfromcaster - 2, 0, distfromcaster))), 1, 1))), 1)
/datum/martial_art/sol_combat/proc/quick_choke(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)//is actually lung punch
- A.do_attack_animation(D)
+ A.do_attack_animation(D, ATTACK_EFFECT_SMASH)
A.visible_message(SPAN_WARNING("[A] pounds [D] on the chest!"))
playsound(get_turf(A), "punch", 50, 1, -1)
if(!(D.species.flags & NO_BREATHE))
@@ -75,12 +75,16 @@
if(check_streak(A,D))
return 1
add_logs(A, D, "punched")
- A.do_attack_animation(D)
+
var/picked_hit_type = pick("punched", "kicked")
+ var/attack_animation = ATTACK_EFFECT_PUNCH
+ if(picked_hit_type == "kicked")
+ attack_animation = ATTACK_EFFECT_KICK
+ A.do_attack_animation(D, attack_animation)
var/bonus_damage = 10
if(D.weakened || D.resting || D.lying)
bonus_damage += 5
- picked_hit_type = "stomped on"
+ picked_hit_type = "stomped"
D.apply_damage(bonus_damage, DAMAGE_BRUTE)
if(picked_hit_type == "kicked" || picked_hit_type == "stomped")
playsound(get_turf(D), SFX_SWING_HIT, 50, 1, -1)
@@ -96,7 +100,7 @@
/datum/martial_art/sol_combat/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
add_to_streak("D",D)
- A.do_attack_animation(D)
+ A.do_attack_animation(D, ATTACK_EFFECT_DISARM)
if(check_streak(A,D))
return 1
diff --git a/code/modules/martial_arts/tajara.dm b/code/modules/martial_arts/tajara.dm
index 50a276879de..fb74e9598b0 100644
--- a/code/modules/martial_arts/tajara.dm
+++ b/code/modules/martial_arts/tajara.dm
@@ -24,7 +24,7 @@
/datum/martial_art/baghrar/proc/eye_rake(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
if(!istajara(A))
return 0
- A.do_attack_animation(D)
+ A.do_attack_animation(D, ATTACK_EFFECT_CLAW)
playsound(get_turf(A), 'sound/weapons/slice.ogg', 50, 1, -1)
if(!D.species.has_limbs[BP_HEAD])
@@ -53,7 +53,7 @@
return 1
/datum/martial_art/baghrar/proc/claw_punch(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)//is actually lung punch
- A.do_attack_animation(D)
+ A.do_attack_animation(D, ATTACK_EFFECT_CLAW)
A.visible_message(SPAN_DANGER("[A] lunges forwards and strikes [D] with their claws!"))
playsound(get_turf(A), 'sound/weapons/slice.ogg', 50, 1, -1)
var/obj/item/organ/external/affecting = D.get_organ(ran_zone(A.zone_sel.selecting))
@@ -65,7 +65,7 @@
/datum/martial_art/baghrar/proc/rraknar_stab(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
if(!istajara(A))
return 0
- A.do_attack_animation(D)
+ A.do_attack_animation(D, ATTACK_EFFECT_CLAW)
var/obj/item/organ/external/organ = D.get_organ(A.zone_sel.selecting)
A.visible_message(SPAN_DANGER("[A] stabs [D]'s [organ.name] with their claws!"))
D.apply_damage(organ.brute_dam, DAMAGE_BRUTE, organ, damage_flags = DAMAGE_FLAG_SHARP|DAMAGE_FLAG_EDGE)
diff --git a/code/modules/martial_arts/unathi.dm b/code/modules/martial_arts/unathi.dm
index 1ff7c171d6e..7bb55bf7363 100644
--- a/code/modules/martial_arts/unathi.dm
+++ b/code/modules/martial_arts/unathi.dm
@@ -54,7 +54,7 @@
/datum/martial_art/kis_khan/simple_animal_basic_disarm(var/mob/living/carbon/human/A, var/mob/living/simple_animal/D)
if(!D.paralysis)
A.visible_message("[SPAN_BOLD("[A]")] delivers a blow to \the [SPAN_BOLD("[D]")]'s head, making [D.get_pronoun("him")] fall unconscious!")
- A.do_attack_animation(D)
+ A.do_attack_animation(D, ATTACK_EFFECT_DISARM)
playsound(D.loc, SFX_PUNCH, 25, TRUE, MEDIUM_RANGE_SOUND_EXTRARANGE+4)
D.AdjustParalysis(5)
else
@@ -74,7 +74,7 @@
return 1
/datum/martial_art/kis_khan/proc/swift_disarm(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- A.do_attack_animation(D)
+ A.do_attack_animation(D, ATTACK_EFFECT_DISARM)
if(prob(80))
if(D.hand)
if(istype(D.l_hand, /obj/item))
@@ -94,7 +94,7 @@
return 1
/datum/martial_art/kis_khan/proc/hammering_strike(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- A.do_attack_animation(D)
+ A.do_attack_animation(D, ATTACK_EFFECT_SMASH)
A.visible_message(SPAN_DANGER("[A] slams [D] away!"))
playsound(D.loc, "punch", 50, 1, -1)
D.apply_effect(2, WEAKEN)
diff --git a/code/modules/martial_arts/vaurca.dm b/code/modules/martial_arts/vaurca.dm
index fba6b1822af..7ab7efcfb3b 100644
--- a/code/modules/martial_arts/vaurca.dm
+++ b/code/modules/martial_arts/vaurca.dm
@@ -45,7 +45,7 @@
/datum/martial_art/vkutet/proc/piercing_strike(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
if(!isvaurca(A))
return 0
- A.do_attack_animation(D)
+ A.do_attack_animation(D, ATTACK_EFFECT_CLAW)
var/atk_verb = pick("slices", "pinches", "chops", "bites", "claws")
D.visible_message(SPAN_DANGER("[A] [atk_verb] [D]!"), \
SPAN_DANGER("[A] [atk_verb] you!"))
diff --git a/code/modules/martial_arts/zombie.dm b/code/modules/martial_arts/zombie.dm
index f14177fc07c..126ddf13428 100644
--- a/code/modules/martial_arts/zombie.dm
+++ b/code/modules/martial_arts/zombie.dm
@@ -28,7 +28,7 @@
/datum/martial_art/zombie/proc/strong_bite(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- A.do_attack_animation(D)
+ A.do_attack_animation(D, ATTACK_EFFECT_BITE)
var/atk_verb = pick("chomps", "bites")
D.visible_message(SPAN_DANGER("[A] [atk_verb] down hard on [D]!"), SPAN_DANGER("[A] [atk_verb] down hard on you!"))
D.apply_damage(rand(5, 10), DAMAGE_BRUTE, damage_flags = DAMAGE_FLAG_SHARP, armor_pen = 100)
diff --git a/code/modules/mob/abstract/freelook/eye.dm b/code/modules/mob/abstract/freelook/eye.dm
index 0e95bf88024..45d637a6955 100644
--- a/code/modules/mob/abstract/freelook/eye.dm
+++ b/code/modules/mob/abstract/freelook/eye.dm
@@ -122,9 +122,6 @@
return
return loc
-/mob
- var/mob/abstract/eye/eyeobj
-
/mob/proc/EyeMove(n, direct)
if(!eyeobj)
return
diff --git a/code/modules/mob/abstract/ghost/ghost.dm b/code/modules/mob/abstract/ghost/ghost.dm
index d06f26e5afe..21470976270 100644
--- a/code/modules/mob/abstract/ghost/ghost.dm
+++ b/code/modules/mob/abstract/ghost/ghost.dm
@@ -6,7 +6,7 @@
/// This variable generally controls whether a ghost has restrictions on where it can go or not (ex. if the ghost can bypass holy places).
var/has_ghost_restrictions = TRUE
/// If the ghost has antagHUD.
- var/antagHUD = 0
+ var/antagHUD = FALSE
/// Necessary for seeing wires.
var/obj/item/multitool/ghost_multitool
/// The POI we're orbiting.
@@ -22,6 +22,7 @@
/mob/abstract/ghost/Destroy()
QDEL_NULL(ghost_multitool)
+ orbiting_ref = null
return ..()
/mob/abstract/ghost/Topic(href, href_list)
diff --git a/code/modules/mob/abstract/ghost/observer/observer.dm b/code/modules/mob/abstract/ghost/observer/observer.dm
index 23d974a1f3f..4a29695a996 100644
--- a/code/modules/mob/abstract/ghost/observer/observer.dm
+++ b/code/modules/mob/abstract/ghost/observer/observer.dm
@@ -22,17 +22,17 @@
/// This variable is set to 1 when you enter the game as an observer. Remains null if you died in the game and are a ghost. Not reliable for admins; they change mobs a lot.
var/started_as_observer
/// If the ghost has enabled antagHUD.
- var/has_enabled_antagHUD = 0
+ var/has_enabled_antagHUD = FALSE
/// If the ghost has enabled medHUD.
- var/medHUD = 0
+ var/medHUD = FALSE
/// If this is an adminghost.
- var/admin_ghosted = 0
+ var/admin_ghosted = FALSE
/// If this ghost has enabled chat anonymization.
- var/anonsay = 0
+ var/anonsay = FALSE
/// If the ghost can be seen through cult shenanigans.
- var/is_manifest = 0
+ var/is_manifest = FALSE
/// Cooldown for ghost abilities, such as move_item().
- var/ghost_cooldown = 0
+ var/ghost_cooldown = FALSE
/mob/abstract/ghost/observer/Initialize(mapload, mob/body)
. = ..()
@@ -87,12 +87,21 @@
src.LoadComponent(/datum/component/health_analyzer/observer)
/mob/abstract/ghost/observer/Destroy()
- if(client)
+ // Handling client images
+ if(client && length(client.images))
for(var/image/I in client.images)
- if(I.loc == src)
- qdel(I)
+ // Something deleted the image, clear it and move on.
+ if (!istype(I) || QDELETED(I))
+ client.images -= I
+ continue
+
+ if(I.loc != src)
+ continue
+
+ qdel(I)
+ client.images -= I
+
QDEL_NULL(hud)
- mind = null
return ..()
/mob/abstract/ghost/observer/proc/initialise_postkey(set_timers = TRUE)
diff --git a/code/modules/mob/animations.dm b/code/modules/mob/animations.dm
index 2a66bc58a38..7c8105019fb 100644
--- a/code/modules/mob/animations.dm
+++ b/code/modules/mob/animations.dm
@@ -7,10 +7,6 @@ currently only humans get dizzy
value of dizziness ranges from 0 to 1000
below 100 is not dizzy
*/
-
-/mob/var/dizziness = 0//Carbon
-/mob/var/is_dizzy = 0
-
/mob/proc/make_dizzy(var/amount)
if(!istype(src, /mob/living/carbon/human)) // for the moment, only humans get dizzy
return
@@ -43,8 +39,6 @@ note dizziness decrements automatically in the mob's Life() proc.
client.pixel_y = 0
// jitteriness - copy+paste of dizziness
-/mob/var/is_jittery = 0
-/mob/var/jitteriness = 0//Carbon
/mob/proc/make_jittery(var/amount)
return
@@ -69,10 +63,6 @@ note dizziness decrements automatically in the mob's Life() proc.
pixel_x = old_x
pixel_y = old_y
-
-//handles up-down floaty effect in space and zero-gravity
-/mob/var/is_floating = FALSE
-
/mob/proc/update_floating()
if(anchored || buckled_to)
set_floating(FALSE)
@@ -129,39 +119,23 @@ note dizziness decrements automatically in the mob's Life() proc.
//reset the pixel offsets to defaults
is_floating = FALSE
-/atom/movable/proc/do_attack_animation(atom/A, atom/movable/weapon, var/image/attack_image, var/initial_pixel_x = 0, var/initial_pixel_y = 0)
+/atom/movable/proc/do_attack_animation(atom/attacked_atom, visual_effect_icon, obj/item/used_item, no_effect, fov_effect = TRUE, item_animation_override = null)
+ if(!no_effect && (visual_effect_icon || used_item))
+ do_item_attack_animation(attacked_atom, visual_effect_icon, used_item, animation_type = item_animation_override)
+
+ if(attacked_atom == src)
+ return //don't do an animation if attacking self
var/pixel_x_diff = 0
var/pixel_y_diff = 0
var/turn_dir = 1
- var/direction = get_dir(src, A)
- switch(direction)
- if(NORTH)
- pixel_y_diff = 8
- if(SOUTH)
- pixel_y_diff = -8
- if(EAST)
- pixel_x_diff = 8
- if(WEST)
- pixel_x_diff = -8
- if(NORTHEAST)
- pixel_x_diff = 8
- pixel_y_diff = 8
- if(NORTHWEST)
- pixel_x_diff = -8
- pixel_y_diff = 8
- if(SOUTHEAST)
- pixel_x_diff = 8
- pixel_y_diff = -8
- if(SOUTHWEST)
- pixel_x_diff = -8
- pixel_y_diff = -8
+ var/direction = get_dir(src, attacked_atom)
if(direction & NORTH)
pixel_y_diff = 8
- turn_dir = rand(50) ? -1 : 1
+ turn_dir = prob(50) ? -1 : 1
else if(direction & SOUTH)
pixel_y_diff = -8
- turn_dir = rand(50) ? -1 : 1
+ turn_dir = prob(50) ? -1 : 1
if(direction & EAST)
pixel_x_diff = 8
@@ -169,80 +143,10 @@ note dizziness decrements automatically in the mob's Life() proc.
pixel_x_diff = -8
turn_dir = -1
- if(!initial_pixel_x)
- initial_pixel_x = initial(pixel_x)
- if(!initial_pixel_y)
- initial_pixel_y = initial(pixel_y)
-
- animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, time = 2)
- animate(pixel_x = initial_pixel_x, pixel_y = initial_pixel_y, time = 2)
var/matrix/initial_transform = matrix(transform)
var/matrix/rotated_transform = transform.Turn(15 * turn_dir)
-
- animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, transform = rotated_transform, time = 2, easing = BACK_EASING | EASE_IN)
- animate(pixel_x = initial_pixel_x, pixel_y = initial_pixel_y, transform = initial_transform, time = 2, easing = SINE_EASING)
-
-// either attack_item OR attack_image should be used. if both are used, attack_image will be the one chosen
-/mob/do_attack_animation(atom/A, var/atom/attack_item, var/image/attack_image)
- set waitfor = FALSE
-
- var/initial_pixel_x = get_standard_pixel_x()
- var/initial_pixel_y = get_standard_pixel_y()
- ..(A, attack_item, attack_image, initial_pixel_x, initial_pixel_y)
-
- if(is_floating)
- addtimer(CALLBACK(src, PROC_REF(start_floating)), 4)
-
- if(attack_item == FIST_ATTACK_ANIMATION) // only play the physical movement
- return
- // What icon do we use for the attack?
- var/image/I
- if(attack_image)
- I = attack_image
- else if(attack_item)
- I = image(attack_item.icon, A, attack_item.icon_state, A.layer + 1)
- else
- if(hand && l_hand) // Attacked with item in left hand.
- I = image(l_hand.icon, A, l_hand.icon_state, A.layer + 1)
- else if (!hand && r_hand) // Attacked with item in right hand.
- I = image(r_hand.icon, A, r_hand.icon_state, A.layer + 1)
- else // Attacked with a fist?
- return
-
- // Who can see the attack?
- var/list/viewing = list()
- for (var/mob/M in viewers(A))
- if (M.client)
- viewing |= M.client
- flick_overlay(I, viewing, 5) // 5 ticks/half a second
-
- // Scale the icon.
- I.transform *= 0.75
- // Set the direction of the icon animation.
- var/direction = get_dir(src, A)
- if(direction & NORTH)
- I.pixel_y = -16
- else if(direction & SOUTH)
- I.pixel_y = 16
-
- if(direction & EAST)
- I.pixel_x = -16
- else if(direction & WEST)
- I.pixel_x = 16
-
- if(!direction) // Attacked self?!
- I.pixel_z = 16
-
- var/matrix/M = new
- M.Turn(pick(-20, 20))
- // And animate the attack!
- animate(I, alpha = 175, pixel_x = initial_pixel_x, pixel_y = initial_pixel_y, pixel_z = 0, time = 2, easing = CUBIC_EASING)
- sleep(2)
- animate(I, transform = M, time = 1) // apply the fancy matrix
- sleep(1)
- animate(I, transform = matrix(), time = 1) // back to a default matrix
- sleep(1)
- animate(I, alpha = 0, time = 1)
+ animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, transform=rotated_transform, time = 1, easing=BACK_EASING|EASE_IN, flags = ANIMATION_PARALLEL)
+ animate(pixel_x = pixel_x - pixel_x_diff, pixel_y = pixel_y - pixel_y_diff, transform=initial_transform, time = 2, easing=SINE_EASING, flags = ANIMATION_PARALLEL)
/mob/proc/spin(spintime, speed)
spawn()
diff --git a/code/modules/mob/death.dm b/code/modules/mob/death.dm
index 66416bfd8cf..b634e3d6ff4 100644
--- a/code/modules/mob/death.dm
+++ b/code/modules/mob/death.dm
@@ -18,7 +18,7 @@
flick(anim, animation)
if(do_gibs)
- gibs(loc, viruses, dna, get_gibs_type())
+ gibs(loc, dna, get_gibs_type())
QDEL_IN(animation, 15)
QDEL_IN(src, 15)
diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm
index 0cfb28f2fe0..7cd76b21f25 100644
--- a/code/modules/mob/living/carbon/brain/MMI.dm
+++ b/code/modules/mob/living/carbon/brain/MMI.dm
@@ -144,6 +144,7 @@
new /obj/effect/decal/cleanable/blood/gibs(get_turf(src))
set_cradle_state(STATE_EMPTY)
update_name()
+ return ..()
/obj/item/mmi/attack_self(mob/user)
if(cradle_state == STATE_BRAIN)
diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm
index 1e11b4f98eb..de5fa482c8c 100644
--- a/code/modules/mob/living/carbon/brain/posibrain.dm
+++ b/code/modules/mob/living/carbon/brain/posibrain.dm
@@ -7,6 +7,10 @@
origin_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2, TECH_DATA = 4)
req_access = list(ACCESS_ROBOTICS)
can_be_ipc = TRUE
+
+ should_use_health = TRUE
+ maxhealth = OBJECT_HEALTH_MEDIUM
+
var/searching = FALSE
/obj/item/mmi/digital/posibrain/Initialize()
@@ -15,6 +19,13 @@
brainmob.name = L.get_random_name()
brainmob.real_name = brainmob.name
+/obj/item/mmi/digital/posibrain/on_death(damage, damage_flags, damage_type, armor_penetration, obj/weapon)
+ playsound(src, SFX_BREAK_GLASS, 100, 1)
+ visible_message(SPAN_DANGER("\The [src] shatters spectacularly into a million pieces!"))
+ to_chat(brainmob, SPAN_DANGER("Your vision goes dark as your posibrain is destroyed, and your consciousness ceases to be."))
+ new /obj/effect/decal/cleanable/blood/gibs/robot(get_turf(src))
+ . = ..()
+
/obj/item/mmi/digital/posibrain/update_icon()
if(brainmob.ckey)
icon_state = "[initial(icon_state)]-occupied"
@@ -23,9 +34,6 @@
else
icon_state = initial(icon_state)
-/obj/item/mmi/digital/posibrain/attackby(obj/item/attacking_item, mob/user)
- return
-
/obj/item/mmi/digital/posibrain/attack_self(mob/user)
if(brainmob.ckey)
to_chat(user, SPAN_WARNING("\The [src] already has an active occupant!"))
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index ad677045d20..08d6660d9fd 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -39,14 +39,19 @@
. = 1
/mob/living/carbon/Destroy()
- QDEL_NULL(touching)
+ species = null
+ QDEL_NULL(handcuffed)
+ QDEL_NULL(legcuffed)
+ QDEL_NULL(op_stage)
+ chem_doses?.Cut()
QDEL_NULL(bloodstr)
- QDEL_NULL(dna)
+ QDEL_NULL(touching)
QDEL_NULL(breathing)
// Delete and null a direct list of references to our internal organs (such as brain, lungs, heart, etc).
QDEL_LIST(internal_organs)
// Null an Associative list of String = Reference to the same organs.
- internal_organs_by_name = null
+ internal_organs_by_name?.Cut()
+ QDEL_LIST(hallucinations)
return ..()
/mob/living/carbon/rejuvenate()
@@ -215,52 +220,118 @@
var/mob/living/carbon/human/H = src
src.visible_message(
SPAN_NOTICE("[src] examines [src.get_pronoun("himself")]."), \
- SPAN_NOTICE("You check yourself for injuries.") \
+ SPAN_NOTICE("You start checking yourself for injuries.") \
)
+ var/anatomy = GET_SKILL_LEVEL(M, ANATOMY_SKILL_COMPONENT)
+ if (!do_after(M, 5 SECONDS * (1 / (anatomy ? anatomy : 1))))
+ to_chat(M, SPAN_WARNING("You must stand still to examine yourself for injuries."))
+ return
+
+ // Set to vanilla-equivalent for people without the skill.
+ if(!anatomy)
+ anatomy = 2
+ var/painful_check = FALSE
for(var/obj/item/organ/external/org in H.organs)
var/list/status = list()
var/brutedamage = org.brute_dam
var/burndamage = org.burn_dam
+
+ // Basic Anatomy 1: All the obvious stuff
+ // Damaged and missing limbs
switch(brutedamage)
- if(1 to 20)
- status += "bruised"
- if(20 to 40)
- status += "wounded"
- if(40 to INFINITY)
- status += "mangled"
+ if(1 to 10)
+ status += (anatomy < 3 ? "bruised" : "superficially cut")
+ if(10 to 25)
+ status += (anatomy < 3 ? "wounded" : "moderately injured")
+ if(25 to 50)
+ status += (anatomy < 3 ? "badly injured" : "significantly injured")
+ if(50 to 75)
+ status += (anatomy < 3 ? "severely injured" : "mangled and difficult to move")
+ if(75 to 100)
+ status += (anatomy < 3 ? "extremely injured" : SPAN_DANGER("horribly mangled, and it feels like it may give out at any moment"))
+ if(100 to INFINITY)
+ status += (anatomy < 3 ? "critically injured" : SPAN_DANGER("ruined beyond recognition, and you can barely feel it at all"))
switch(burndamage)
if(1 to 10)
- status += "numb"
- if(10 to 40)
- status += "blistered"
- if(40 to INFINITY)
- status += "peeling away"
+ status += (anatomy < 3 ? "numb" : "lightly burned")
+ if(10 to 25)
+ status += (anatomy < 3 ? "blistered" : "moderately burned")
+ if(25 to 50)
+ status += (anatomy < 3 ? "peeling away" : "marked by notable partial-thickness burns")
+ if(50 to 75)
+ status += (anatomy < 3 ? "visibly charred" : "covered in extensive partial-thickness burns")
+ if(75 to 100)
+ status += (anatomy < 3 ? "like black leather" : SPAN_DANGER("burned down to deadened, leathery tissue and looks close to being unrecoverable"))
+ if(100 to INFINITY)
+ status += (anatomy < 3 ? "like charcoal" : SPAN_DANGER("charred beyond recognition and may be beyond saving"))
if(org.is_stump())
status += SPAN_DANGER("MISSING")
if(org.status & ORGAN_MUTATED)
status += "weirdly shapen"
- if(org.dislocated == 2)
- status += "dislocated"
- if(org.status & ORGAN_BROKEN)
- status += "hurts when touched"
- if(org.status & ORGAN_DEAD)
- status += "is necrotic"
if(!org.is_usable())
status += "dangling uselessly"
- if(org.status & ORGAN_BLEEDING)
- status += SPAN_DANGER("bleeding")
+ // End of basic Anatomy 1.
+
+ // Advanced Anatomy 1: Slightly harder.
+ // Dislocation
+ // Broken limbs
+ // Regular and arterial bleeding are vague
+ // Necrotic is vague
+ if(org.dislocated == 2)
+ status += (anatomy >= 2 ? "dislocated" : "hanging oddly")
+ if(org.status & ORGAN_BROKEN)
+ status += (anatomy < 3 ? "hurts when touched" : "broken")
+ painful_check = TRUE
+ // Anatomy 2 can't distinguish between regular bleeding and arterial.
+ // Bleeding without arterial
+ if(anatomy < 3 && ((org.status & ORGAN_BLEEDING) && !(org.status & ORGAN_ARTERY_CUT)))
+ status += "bleeding"
+ // Bleeding and arterial
+ else if(anatomy < 3 && ((org.status & ORGAN_BLEEDING) && (org.status & ORGAN_ARTERY_CUT)))
+ status += SPAN_DANGER("gushing with blood")
+ // Arterial without bleeding
+ else if(anatomy < 3 && (!(org.status & ORGAN_BLEEDING) && (org.status & ORGAN_ARTERY_CUT)))
+ if(!(org.status & (ORGAN_DEAD | ORGAN_BROKEN)))
+ status += "hurts when touched"
+ painful_check = TRUE
+ status += "swelled and has darkly discolored spots"
+
+ if(anatomy < 3 && (org.status & ORGAN_DEAD))
+ status += "feels numb and pale"
+ // End of advanced Anatomy 1.
+
+ // Anatomy 3: Descriptions start to get more medical.
+ // Necrotic and arterials are plainly visible
+ // Bleeding gets an extra description
+ if(anatomy >= 3)
+ if(org.status & ORGAN_DEAD)
+ status += (anatomy < 4 ? "possibly necrotic" : "visible discoloration of skin that indicates tissue necrosis")
+ // Bleeding & arterial
+ if((org.status & ORGAN_BLEEDING) && (org.status & ORGAN_ARTERY_CUT))
+ status += SPAN_DANGER("spraying blood from a severed artery")
+ // bleeding and no arterial
+ else if((org.status & ORGAN_BLEEDING) && !(org.status & ORGAN_ARTERY_CUT))
+ status += "bandage-ably cut"
+ // arterial and no bleeding
+ else if(!(org.status & ORGAN_BLEEDING) && (org.status & ORGAN_ARTERY_CUT))
+ status += SPAN_DANGER("swollen from an internal arterial bleed")
+ // End of Anatomy 3
+
var/output = ""
if(length(status))
output = "My [org.name] is [SPAN_WARNING("[english_list(status)].")]"
else
- output = "My [org.name] feels [SPAN_NOTICE("OK.")]"
+ output = (anatomy < 3 ? "My [org.name] feels [SPAN_NOTICE("OK.")]" : "My [org.name] has [SPAN_NOTICE("no visible signs of injuries.")]")
if(length(org.implants))
output += " [SPAN_WARNING("I can feel something inside it.")]"
to_chat(src, output)
+ if(painful_check)
+ custom_pain("Pain jolts through your body", 10, FALSE, null, TRUE)
+
if((isskeleton(H)) && (!H.w_uniform) && (!H.wear_suit))
H.play_xylophone()
else
diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm
index 5835789e1e1..12f41aec587 100644
--- a/code/modules/mob/living/carbon/carbon_defines.dm
+++ b/code/modules/mob/living/carbon/carbon_defines.dm
@@ -50,7 +50,9 @@
/// Map organ names to organs.
var/list/organs_by_name = list()
- /// So internal organs have less ickiness too.
+ /// List of references to all internal organs
+ var/list/internal_organs = list()
+ /// Associative List of "name" = ref
var/list/internal_organs_by_name = list()
var/list/stasis_sources = list()
@@ -58,3 +60,8 @@
/// For special cases where something permanently removes a mob's ability to feel pain.
var/pain_immune = FALSE
+ /// Hallucination spam limit var
+ var/next_hallucination = 0
+ /// Hallucinations currently affecting the mob. Not to be confused with singular "hallucination" which is a NUM variable like confused/drowsy/eye_blind etc
+ var/list/hallucinations = list()
+ var/shock_stage = 0
diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm
index 09568fad545..51e77e580c7 100644
--- a/code/modules/mob/living/carbon/human/death.dm
+++ b/code/modules/mob/living/carbon/human/death.dm
@@ -14,7 +14,7 @@
I.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)), rand(1,3), round(30/I.w_class))
..(species.gibbed_anim)
- gibs(loc, viruses, dna, null, species.flesh_color, get_blood_color())
+ gibs(loc, dna, null, species.flesh_color, get_blood_color())
/mob/living/carbon/human/dust()
vr_disconnect()
diff --git a/code/modules/mob/living/carbon/human/diona_gestalt.dm b/code/modules/mob/living/carbon/human/diona_gestalt.dm
index 1f6085d19e0..ed09e03829e 100644
--- a/code/modules/mob/living/carbon/human/diona_gestalt.dm
+++ b/code/modules/mob/living/carbon/human/diona_gestalt.dm
@@ -7,10 +7,6 @@
#define COLD_DAMAGE_LEVEL_2 1.5
#define COLD_DAMAGE_LEVEL_3 3
-/mob/living/carbon/human
- var/datum/dionastats/DS
-
-
/mob/living/carbon/human/proc/setup_gestalt()
composition_reagent = /singleton/reagent/nutriment //Dionae aren't animals, so eating them doesn't give animal protein
setup_dionastats()
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index e706b97817f..363485acba8 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -4,21 +4,12 @@
voice_name = "unknown"
icon = 'icons/mob/human.dmi'
icon_state = "body_m_s"
-
mob_size = 9 //Based on average weight of a human
-
- var/pronouns = NEUTER
-
- /// Used so species that need special items (autoinhalers for vaurca/RMT for offworlders) don't get them twice when they shouldn't.
- var/species_items_equipped
-
- var/list/hud_list[11]
- /// To check if we've need to roll for damage on movement while an item is imbedded in us.
- var/embedded_flag
- /// This is very not good, but it's much much better than calling get_rig() every update_canmove() call.
- var/obj/item/rig/wearing_rig
- /// Pref holder for the speech bubble style.
- var/speech_bubble_type
+ mob_bump_flag = HUMAN
+ mob_push_flags = ~HEAVY
+ mob_swap_flags = ~HEAVY
+ light_system = MOVABLE_LIGHT
+ blocks_emissive = EMISSIVE_BLOCK_NONE
/mob/living/carbon/human/Initialize(mapload, var/new_species = null)
if(!dna)
@@ -118,9 +109,9 @@
// It's actually the set of all Limbs (left arm, head, leg leg, etc) we have. We Qdel and null the set of all limbs, which is unique to /human.
QDEL_LIST(organs)
// Then also null the associative list of those same limbs, which contains the same references.
- organs_by_name = null
- bad_internal_organs = null
- bad_external_organs = null
+ QDEL_LIST_ASSOC_VAL(organs_by_name)
+ bad_internal_organs?.Cut()
+ bad_external_organs?.Cut()
QDEL_NULL(vessel)
@@ -150,13 +141,14 @@
//Yes this is shit, but since someone had the brillant mind to use images for this, we must suffer
if(length(hud_list))
for(var/image/hud_overlay/an_hud_overlay in hud_list)
- if(an_hud_overlay.owner)
- an_hud_overlay.owner.client?.images -= an_hud_overlay
+ if(length(an_hud_overlay.owner?.client?.images))
+ an_hud_overlay.owner.client.images -= an_hud_overlay
an_hud_overlay.owner = null
qdel(an_hud_overlay)
- hud_list = null
+ hud_list.Cut()
- . = ..()
+ wearing_rig = null
+ return ..()
/mob/living/carbon/human/can_devour(atom/movable/victim, var/silent = FALSE)
if(!should_have_organ(BP_STOMACH))
@@ -1437,14 +1429,15 @@
blood_color = null
return 1
-/mob/living/carbon/human/get_visible_implants(var/class = 0)
+/mob/living/carbon/human/get_visible_implants(var/class = 0) //Default class 0, class 1 is tiny objects, so class 0 will show everything.
var/list/visible_implants = list()
for(var/obj/item/organ/external/organ in src.organs)
for(var/obj/item/O in organ.implants)
if(!istype(O,/obj/item/implant) && (O.w_class > class) && !istype(O,/obj/item/material/shard/shrapnel))
visible_implants += O
-
+ if(istype(O,/obj/item/material/shard/shrapnel) && (O.w_class > class + 2)) //If the shrapnel is larger than class 2 (small), it is visible.
+ visible_implants += O
return(visible_implants)
/mob/living/carbon/human/embedded_needs_process()
diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm
index 88e28965ed0..4560ef1e660 100644
--- a/code/modules/mob/living/carbon/human/human_attackhand.dm
+++ b/code/modules/mob/living/carbon/human/human_attackhand.dm
@@ -255,7 +255,7 @@
if(!attack)
return 0
- H.do_attack_animation(src)
+ H.do_attack_animation(src, attack.attack_effect)
if(!attack_message)
attack.show_attack(H, src, hit_zone, rand_damage)
else
@@ -363,7 +363,7 @@
src.attack_log += "\[[time_stamp()]\] Has been disarmed by [M.name] ([M.ckey]) "
msg_admin_attack("[key_name(M)] disarmed [src.name] ([src.ckey]) (JMP )",ckey=key_name(M),ckey_target=key_name(src))
- M.do_attack_animation(src)
+ M.do_attack_animation(src, ATTACK_EFFECT_DISARM)
if(w_uniform)
w_uniform.add_fingerprint(M)
@@ -512,7 +512,7 @@
to_chat(H, cpr_attempt_message)
- H.do_attack_animation(src, null, image('icons/hud/mob/generic.dmi', src, "cpr", src.layer + 1))
+ H.do_attack_animation(src, ATTACK_EFFECT_CPR)
var/starting_pixel_y = pixel_y
animate(src, pixel_y = starting_pixel_y + 4, time = 2)
animate(src, pixel_y = starting_pixel_y, time = 2)
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index fc14e29f070..1b8abf87e12 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -1,8 +1,4 @@
/mob/living/carbon/human
- light_system = MOVABLE_LIGHT
-
- blocks_emissive = EMISSIVE_BLOCK_NONE
-
// Tail Style
var/tail_style = null
@@ -103,10 +99,6 @@
var/list/gunshot_residue
var/pulling_punches // Are you trying not to hurt your opponent?
- mob_bump_flag = HUMAN
- mob_push_flags = ~HEAVY
- mob_swap_flags = ~HEAVY
-
var/flash_protection = 0 // Total level of flash protection
var/equipment_tint_total = 0 // Total level of visualy impairing items
var/equipment_darkness_modifier // Darkvision modifier from equipped items
@@ -134,3 +126,48 @@
var/triage_tag = TRIAGE_NONE
var/lobotomized = FALSE //additional check for isAdvancedToolUser that can be set manually by things
+
+ var/list/organs = list()
+
+ ///Container for blood and BLOOD ONLY. Do not transfer other chems here.
+ var/datum/reagents/vessel
+
+ /// Used for cryo to free up a slot when a ghost cryos.
+ var/datum/weakref/ghost_spawner
+
+ var/next_stance_collapse = 0
+
+ var/datum/dionastats/DS
+
+ var/oxygen_alert = 0
+ var/phoron_alert = 0
+ var/co2_alert = 0
+ var/fire_alert = 0
+ var/pressure_alert = 0
+ var/temperature_alert = 0
+
+ var/datum/weakref/srom_pulled_by
+ var/datum/weakref/srom_pulling
+
+ /// Our set of "raw" overlays that can be modified, but cannot be directly applied to the mob without preprocessing.
+ var/list/overlays_raw[TOTAL_LAYERS]
+ /// store what the body last looked like, so we only have to update it if something changed
+ var/previous_damage_appearance
+
+ var/singleton/origin_item/culture/culture
+ var/singleton/origin_item/origin/origin
+
+ var/tmp/centcomm_despawn_timer
+
+ var/pronouns = NEUTER
+
+ /// Used so species that need special items (autoinhalers for vaurca/RMT for offworlders) don't get them twice when they shouldn't.
+ var/species_items_equipped
+
+ var/list/hud_list[11]
+ /// To check if we've need to roll for damage on movement while an item is imbedded in us.
+ var/embedded_flag
+ /// This is very not good, but it's much much better than calling get_rig() every update_canmove() call.
+ var/obj/item/rig/wearing_rig
+ /// Pref holder for the speech bubble style.
+ var/speech_bubble_type
diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm
index d16844dd3fd..5b69458befd 100644
--- a/code/modules/mob/living/carbon/human/human_organs.dm
+++ b/code/modules/mob/living/carbon/human/human_organs.dm
@@ -4,10 +4,6 @@
eyes.update_colour()
regenerate_icons()
-/mob/living/carbon/var/list/internal_organs = list()
-/mob/living/carbon/var/shock_stage = 0
-/mob/living/carbon/human/var/list/organs = list()
-
/mob/living/carbon/human/proc/recheck_bad_external_organs()
var/damage_this_tick = getToxLoss()
var/arterial_check = 0
@@ -57,9 +53,6 @@
if (W.infection_check())
W.germ_level += 1
-/mob/living/carbon/human
- var/next_stance_collapse = 0
-
/mob/living/carbon/human/proc/handle_stance()
// Don't need to process any of this if they aren't standing anyways
// unless their stance is damaged, and we want to check if they should stay down
diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm
index 8b94f6fe909..d117a220282 100644
--- a/code/modules/mob/living/carbon/human/human_powers.dm
+++ b/code/modules/mob/living/carbon/human/human_powers.dm
@@ -541,7 +541,7 @@
sleep(10)
playsound(src, 'sound/items/countdown.ogg', 125, 1)
sleep(20)
- explosion(src, -1, 1, 5)
+ explosion(get_turf(src), -1, 1, 5)
src.gib()
/mob/living/carbon/human/proc/hivenet()
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 0f0ee6832ac..c830fca13f2 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -45,14 +45,6 @@
///The maximum dose that can be received, above this level all further radiation is taken as damage directly to the body, ignoring armor. Very rapidly fatal.
#define RADIATION_MAX_DOSE 1000
-/mob/living/carbon/human
- var/oxygen_alert = 0
- var/phoron_alert = 0
- var/co2_alert = 0
- var/fire_alert = 0
- var/pressure_alert = 0
- var/temperature_alert = 0
-
/mob/living/carbon/human/Life(seconds_per_tick, times_fired)
if (transforming)
return
@@ -1595,7 +1587,7 @@
stamina = min(max_stamina, stamina+regen)
adjustNutritionLoss(stamina_recovery*0.09)
adjustHydrationLoss(stamina_recovery*0.32)
- if (client)
+ if (client && hud_used && hud_used.move_intent)
hud_used.move_intent.update_move_icon(src)
/mob/living/carbon/human/proc/update_oxy_overlay()
diff --git a/code/modules/mob/living/carbon/human/species/outsider/revenant.dm b/code/modules/mob/living/carbon/human/species/outsider/revenant.dm
index b0b020a15e5..2a38a09bc5a 100644
--- a/code/modules/mob/living/carbon/human/species/outsider/revenant.dm
+++ b/code/modules/mob/living/carbon/human/species/outsider/revenant.dm
@@ -166,6 +166,7 @@
icon_state = "revenant_eyes"
eye_emote = null
vision_color = null
+ action_button_name = list("Activate Low Light Vision")
default_action_type = /datum/action/item_action/organ/night_eyes/rev
/obj/item/organ/internal/eyes/night/revenant/flash_act()
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index 7c3d6f250a5..6301f9c2334 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -471,6 +471,9 @@
/// Controls whether this species spawns with a Morale Component.
var/has_morale = TRUE
+ /// A list of species components that should only EVER apply to this species. This is because some components must be removed if the species changes (imagine changing from IPC to human as a merc).
+ var/list/species_components
+
/datum/species/proc/get_eyes(var/mob/living/carbon/human/H)
return
@@ -625,7 +628,11 @@
for(var/spell/spell in H.spell_list)
if(istype(spell, spell_path))
H.remove_spell(spell)
- return
+
+ if(length(species_components))
+ for(var/comp_type in species_components)
+ for(var/datum/component/comp in H.GetComponents(comp_type))
+ qdel(comp)
/datum/species/proc/add_inherent_verbs(var/mob/living/carbon/human/H)
if(inherent_verbs)
@@ -660,6 +667,10 @@
if(has_psionics)
H.set_psi_rank(has_psionics)
+ if(length(species_components))
+ for(var/comp_type in species_components)
+ H.AddComponent(comp_type)
+
/datum/species/proc/handle_death(var/mob/living/carbon/human/H, var/gibbed = 0) //Handles any species-specific death events (such as dionaea nymph spawns).
return
diff --git a/code/modules/mob/living/carbon/human/species/species_attack.dm b/code/modules/mob/living/carbon/human/species/species_attack.dm
index b3b26a3ec9c..fc8b49c97f7 100644
--- a/code/modules/mob/living/carbon/human/species/species_attack.dm
+++ b/code/modules/mob/living/carbon/human/species/species_attack.dm
@@ -7,6 +7,7 @@
edge = TRUE
damage = 5
attack_name = "sharp bite"
+ attack_effect = ATTACK_EFFECT_BITE
/datum/unarmed_attack/diona
attack_verb = list("lashed", "bludgeoned")
@@ -28,6 +29,7 @@
edge = TRUE
damage = 5
attack_name = "claws"
+ attack_effect = ATTACK_EFFECT_CLAW
/datum/unarmed_attack/claws/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage)
var/obj/item/organ/external/affecting = target.get_organ(zone)
@@ -124,6 +126,7 @@
attack_name = "heavy fist"
shredding = TRUE
sparring_variant_type = /datum/unarmed_attack/pain_strike/heavy
+ attack_effect = ATTACK_EFFECT_SMASH
/datum/unarmed_attack/industrial/heavy
damage = 9
@@ -140,6 +143,7 @@
attack_sound = 'sound/weapons/beartrap_shut.ogg'
attack_name = "power fist"
shredding = TRUE
+ attack_effect = ATTACK_EFFECT_SMASH
/datum/unarmed_attack/terminator/apply_effects(var/mob/living/carbon/human/user,var/mob/living/carbon/human/target,var/armor,var/attack_damage,var/zone)
..()
@@ -225,6 +229,7 @@
attack_sound = 'sound/weapons/heavysmash.ogg'
attack_name = "crushing fist"
shredding = TRUE
+ attack_effect = ATTACK_EFFECT_SMASH
/datum/unarmed_attack/shocking
attack_verb = list("prodded", "touched")
@@ -265,6 +270,7 @@
attack_door = 20
crowbar_door = TRUE
sparring_variant_type = /datum/unarmed_attack/pain_strike/heavy
+ attack_effect = ATTACK_EFFECT_SMASH
/datum/unarmed_attack/vaurca_bulwark/apply_effects(var/mob/living/carbon/human/user,var/mob/living/carbon/human/target,var/armor,var/zone)
..()
@@ -290,6 +296,7 @@
attack_sound = 'sound/weapons/beartrap_shut.ogg'
attack_name = "industrial claw"
shredding = TRUE
+ attack_effect = ATTACK_EFFECT_SMASH
/datum/unarmed_attack/tesla_body/apply_effects(var/mob/living/carbon/human/user,var/mob/living/carbon/human/target,var/armor,var/attack_damage,var/zone)
..()
diff --git a/code/modules/mob/living/carbon/human/species/station/ipc/ipc.dm b/code/modules/mob/living/carbon/human/species/station/ipc/ipc.dm
index 0c5dccdfe32..7930b942fcf 100644
--- a/code/modules/mob/living/carbon/human/species/station/ipc/ipc.dm
+++ b/code/modules/mob/living/carbon/human/species/station/ipc/ipc.dm
@@ -163,6 +163,8 @@
melee = ARMOR_MELEE_KNIVES
)
+ species_components = list(/datum/component/synthetic_endoskeleton)
+
// Special snowflake machine vars.
var/sprint_temperature_factor = 1.05
/// Species-based multiplier to movement power costs in the power core.
@@ -217,7 +219,6 @@
/datum/species/machine/handle_post_spawn(var/mob/living/carbon/human/H)
. = ..()
- H.AddComponent(/datum/component/synthetic_endoskeleton)
check_tag(H, H.client)
var/obj/item/organ/internal/machine/power_core/C = H.internal_organs_by_name[BP_CELL]
if(C)
diff --git a/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm b/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm
index 5b58a8692a2..3ab0ac68452 100644
--- a/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm
+++ b/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm
@@ -5,8 +5,8 @@
category_name = "Tajara"
bodytype = BODYTYPE_TAJARA
species_height = HEIGHT_CLASS_SHORT
- height_min = 150
- height_max = 190
+ height_min = 145 // human default: 145
+ height_max = 180 // human default: 203
icobase = 'icons/mob/human_races/tajara/r_tajaran.dmi'
deform = 'icons/mob/human_races/tajara/r_def_tajaran.dmi'
preview_icon = 'icons/mob/human_races/tajara/tajaran_preview.dmi'
@@ -27,7 +27,7 @@
darksight = 8
slowdown = -0.4
- brute_mod = 1.2
+ brute_mod = 1.1
fall_mod = 0.5
grab_mod = 1.25 // Fur easy to cling onto
diff --git a/code/modules/mob/living/carbon/human/species/station/tajara/tajaran_subspecies.dm b/code/modules/mob/living/carbon/human/species/station/tajara/tajaran_subspecies.dm
index deed857b277..bc6b87ed4e9 100644
--- a/code/modules/mob/living/carbon/human/species/station/tajara/tajaran_subspecies.dm
+++ b/code/modules/mob/living/carbon/human/species/station/tajara/tajaran_subspecies.dm
@@ -10,6 +10,8 @@
an easy path to education. Zhan-Khazan are in a transformative state in modern Tajaran society, \
but still deal with the many barriers from centuries of the caste system."
species_height = HEIGHT_CLASS_TALL
+ height_min = 160 // taj default: 145
+ height_max = 195 // taj default: 180
secondary_langs = list(LANGUAGE_SIIK_TAJR, LANGUAGE_DELVAHII)
@@ -17,7 +19,7 @@
sprint_speed_factor = 0.55
standing_jump_range = 2
stamina = 100 // As opposed to 90
- brute_mod = 1.1 // Less Brute Damage
+ brute_mod = 1.05 // Less Brute Damage
ethanol_resistance = 1 // Default value
climb_coeff = 1.1
@@ -59,12 +61,14 @@
When these roles were shrunken down however, the M'sai commonly found themselves taking \
similar work to the Zhan-Khazan. As a result, the two races share much in common with their culture."
species_height = HEIGHT_CLASS_AVERAGE
+ height_min = 155 // taj default: 145
+ height_max = 175 // taj default: 180
slowdown = -0.6
sprint_speed_factor = 0.75
standing_jump_range = 3
stamina = 80 // As opposed to 90
- brute_mod = 1.3 // More Brute Damage
+ brute_mod = 1.15 // More Brute Damage
ethanol_resistance = 0.7 // Species Default 0.9
maneuvers = list(
diff --git a/code/modules/mob/living/carbon/human/unarmed_attack.dm b/code/modules/mob/living/carbon/human/unarmed_attack.dm
index 8fbc25dd476..04f68afd103 100644
--- a/code/modules/mob/living/carbon/human/unarmed_attack.dm
+++ b/code/modules/mob/living/carbon/human/unarmed_attack.dm
@@ -9,6 +9,8 @@ GLOBAL_LIST_EMPTY(sparring_attack_cache)
var/armor_penetration = 0
var/attack_sound = SFX_PUNCH
var/miss_sound = SFX_PUNCH_MISS
+ /// The attack effect played with this attack.
+ var/attack_effect = ATTACK_EFFECT_PUNCH
var/shredding = 0 // Calls the old attack_alien() behavior on objects/mobs when on harm intent.
var/attack_door = 0 // Whether the attack can damage airlocks and how much damage it does
var/crowbar_door = FALSE
@@ -166,6 +168,7 @@ GLOBAL_LIST_EMPTY(sparring_attack_cache)
sharp = 0
edge = FALSE
attack_name = "bite"
+ attack_effect = ATTACK_EFFECT_BITE
/datum/unarmed_attack/bite/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone)
if(user.incapacitated())
@@ -254,6 +257,7 @@ GLOBAL_LIST_EMPTY(sparring_attack_cache)
desc = "A high risk, pretty low reward move. It could be useful if your shoes has a knife sticking out the front, or if you're a trained martial arts master. Make sure to target the lower parts of the body, or else you won't be able to reach!"
damage = 0
attack_name = "kick"
+ attack_effect = ATTACK_EFFECT_KICK
/datum/unarmed_attack/kick/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone)
if(user.legcuffed || user.incapacitated())
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 8dc14551d51..d4b4ee2e3b2 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -100,10 +100,6 @@ There are several things that need to be remembered:
ret.layer = layer
return ret
-/mob/living/carbon/human
- var/list/overlays_raw[TOTAL_LAYERS] // Our set of "raw" overlays that can be modified, but cannot be directly applied to the mob without preprocessing.
- var/previous_damage_appearance // store what the body last looked like, so we only have to update it if something changed
-
// Updates overlays from overlays_raw.
/mob/living/carbon/human/update_icon()
if (QDELETED(src))
diff --git a/code/modules/mob/living/default_language.dm b/code/modules/mob/living/default_language.dm
index f44357ea871..28b082eb80c 100644
--- a/code/modules/mob/living/default_language.dm
+++ b/code/modules/mob/living/default_language.dm
@@ -1,6 +1,3 @@
-/mob/living
- var/datum/language/default_language
-
/mob/living/verb/set_default_language_verb()
set name = "Set Default Language"
set category = "IC.Language"
diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm
index 69d198e9096..3de7757607b 100644
--- a/code/modules/mob/living/life.dm
+++ b/code/modules/mob/living/life.dm
@@ -196,9 +196,6 @@
/mob/living/proc/handle_hud_icons_health()
return
-/mob/living
- var/datum/weakref/last_weather
-
/mob/living/proc/is_outside()
var/turf/T = loc
return istype(T) && T.is_outside()
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 88c13c7835e..b4faa5b04eb 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -53,9 +53,6 @@ default behaviour is:
return TRUE
return FALSE
-/mob/living
- var/tmp/last_push_notif
-
/mob/living/Collide(atom/movable/target_movable_atom)
if(now_pushing || !loc)
return
@@ -745,10 +742,6 @@ default behaviour is:
to_chat(src, SPAN_NOTICE("You can't move..."))
return
var/resisting = 0
- for(var/obj/O in requests)
- requests.Remove(O)
- qdel(O)
- resisting++
var/resist_power = get_resist_power() // How easily the mob can break out of a grab
for(var/obj/item/grab/G in grabbed_by)
resisting++
@@ -926,19 +919,17 @@ default behaviour is:
AddElement(/datum/element/connect_loc, loc_connections)
/mob/living/Destroy()
+ cameraFollow = null
+ if (length(actions))
+ for (var/datum/action/action in actions)
+ action.Remove(src)
+ actions -= action
- //Aiming overlay
- QDEL_NULL(aiming)
- QDEL_LIST(aimed_at_by)
-
- //Psi complexus
+ QDEL_NULL(stamina_bar)
+ QDEL_LIST(auras)
QDEL_NULL(psi)
-
- if(vr_mob)
- vr_mob = null
- if(old_mob)
- old_mob = null
-
+ QDEL_NULL(aiming)
+ aimed_at_by?.Cut()
//Remove contained mobs
if(loc)
for(var/mob/M in contents)
@@ -947,12 +938,11 @@ default behaviour is:
for(var/mob/M in contents)
qdel(M)
- QDEL_NULL(reagents)
-
- if(auras)
- for(var/a in auras)
- remove_aura(a)
-
+ prepared_maneuver = null
+ available_maneuvers?.Cut()
+ default_language = null
+ QDEL_NULL(z_eye)
+ last_weather = null
return ..()
/mob/living/proc/nervous_system_failure()
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index 47edd11ff1d..65cddec66bb 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -503,19 +503,50 @@
A.Remove(src)
for(var/obj/item/I in src)
- if(I.action_button_name)
+ if(!I.action_button_name)
+ continue
- //If the item_action object does not exist, try to create it
+ var/list/action_names = islist(I.action_button_name) ? I.action_button_name : list(I.action_button_name)
+ var/list/action_types = islist(I.default_action_type) ? I.default_action_type : list(I.default_action_type)
+
+ if(action_names.len > 1)
+ if(!islist(I.action))
+ I.action = I.action ? list(I.action) : list()
+
+ var/list/actions_list = I.action
+
+ for(var/i in 1 to action_names.len)
+ var/action_name = action_names[i]
+ if(!action_name)
+ continue
+
+ var/datum/action/item_action = (i <= actions_list.len) ? actions_list[i] : null
+
+ if(!item_action)
+ var/action_type = action_types.len >= i ? action_types[i] : action_types[1]
+ if(!action_type)
+ continue
+
+ item_action = new action_type
+ actions_list.Add(item_action)
+
+ item_action.name = action_name
+ item_action.SetTarget(I)
+ item_action.Grant(src)
+
+ else
if(!I.action)
- //Try to use the default action type, if there is none, skip this implant
- if(I.default_action_type)
- I.action = new I.default_action_type
+ var/action_type = action_types.len ? action_types[1] : null
+ if(action_type)
+ I.action = new action_type
else
continue
- I.action.name = I.action_button_name
- I.action.SetTarget(I)
- I.action.Grant(src)
+ var/datum/action/item_action = I.action
+ item_action.name = action_names[1]
+ item_action.SetTarget(I)
+ item_action.Grant(src)
+
return
/mob/living/update_action_buttons()
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index 032446b4ad7..a7c659175c0 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -86,6 +86,9 @@
var/burn_mod = 1
var/brute_mod = 1
+ /// Override for the visual attack effect shown on 'do_attack_animation()'.
+ var/attack_vis_effect
+
/// used to limit people from queuing up limb-breaks
var/limb_breaking = FALSE
/// Basically a catch-all aura/force-field thing.
@@ -102,3 +105,27 @@
/// Time since last weather effect
var/weather_cooldown_time = 0
+
+ var/datum/psi_complexus/psi
+
+ ///The obj to overlay on the aim target
+ var/obj/aiming_overlay/aiming
+
+ ///A list of mobs the target is being aimed at by
+ var/list/aimed_at_by
+
+ var/singleton/maneuver/prepared_maneuver
+ var/list/available_maneuvers = list()
+
+ var/datum/language/default_language
+
+ var/atom/movable/z_observer/z_eye
+
+ atom_flags = CRITICAL_ATOM
+ var/instability = 0
+ var/last_instability = 0 // Used to calculate instability delta.
+ var/last_instability_event = null // most recent world.time that something bad happened due to instability.
+
+ var/datum/weakref/last_weather
+
+ var/tmp/last_push_notif
diff --git a/code/modules/mob/living/living_maneuvers.dm b/code/modules/mob/living/living_maneuvers.dm
index 75bc69d6bfb..42cc448b7d4 100644
--- a/code/modules/mob/living/living_maneuvers.dm
+++ b/code/modules/mob/living/living_maneuvers.dm
@@ -1,7 +1,3 @@
-/mob/living
- var/singleton/maneuver/prepared_maneuver
- var/list/available_maneuvers = list()
-
/mob/living/begin_falling(var/lastloc, var/below)
if(throwing)
return
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index 5658b3ed41d..caf2a24e2ba 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -330,6 +330,9 @@ var/list/channel_to_radio_key = new
listening = get_hearers_in_view(message_range, src)
+ var/sensitive_listener = get_intent_listeners(src, message_range + 1)
+ listening = mergelists(listening, sensitive_listener, TRUE)
+
if(client)
for (var/mob/player_mob in GLOB.player_list)
if(!player_mob || player_mob.stat != DEAD || (player_mob in listening))
diff --git a/code/modules/mob/living/silicon/death.dm b/code/modules/mob/living/silicon/death.dm
index 51aa3051f9d..05d311f355d 100644
--- a/code/modules/mob/living/silicon/death.dm
+++ b/code/modules/mob/living/silicon/death.dm
@@ -1,6 +1,6 @@
/mob/living/silicon/gib()
..("gibbed-r")
- gibs(loc, viruses, null, /obj/effect/gibspawner/robot)
+ gibs(loc, null, /obj/effect/gibspawner/robot)
/mob/living/silicon/dust()
..(/obj/effect/decal/remains/robot)
diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
index 2ec1a6b9c04..fee86ea65df 100644
--- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
+++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
@@ -238,7 +238,7 @@
held_item = null
eject_brain()
- gibs(loc, viruses, null, /obj/effect/gibspawner/robot) //TODO: use gib() or refactor spiderbots into synthetics.
+ gibs(loc, null, /obj/effect/gibspawner/robot) //TODO: use gib() or refactor spiderbots into synthetics.
qdel(src)
return
diff --git a/code/modules/mob/living/simple_animal/hostile/adhomai.dm b/code/modules/mob/living/simple_animal/hostile/adhomai.dm
index e49647b5a7d..bcbd53a258d 100644
--- a/code/modules/mob/living/simple_animal/hostile/adhomai.dm
+++ b/code/modules/mob/living/simple_animal/hostile/adhomai.dm
@@ -21,6 +21,7 @@
melee_damage_lower = 15
melee_damage_upper = 15
attacktext = "bites"
+ attack_vis_effect = ATTACK_EFFECT_BITE
attack_sound = 'sound/weapons/bite.ogg'
environment_smash = 1
@@ -57,6 +58,7 @@
melee_damage_lower = 15
melee_damage_upper = 15
attacktext = "bites"
+ attack_vis_effect = ATTACK_EFFECT_BITE
attack_sound = 'sound/weapons/bite.ogg'
faction = "Adhomai"
@@ -177,4 +179,4 @@
/obj/projectile/beam/tesla/plasmageist/on_hit(atom/target, blocked, def_zone)
. = ..()
if(isliving(target))
- explosion(target, -1, 0, 2)
+ explosion(get_turf(target), -1, 0, 2)
diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm
index c8fd579102a..1872876f7a4 100644
--- a/code/modules/mob/living/simple_animal/hostile/alien.dm
+++ b/code/modules/mob/living/simple_animal/hostile/alien.dm
@@ -13,6 +13,7 @@
melee_damage_lower = 5
melee_damage_upper = 15
attacktext = "mauls"
+ attack_vis_effect = ATTACK_EFFECT_CLAW
cold_damage_per_tick = 0
speak_chance = 5
speak = list("Hruuugh!","Hrunnph")
@@ -34,6 +35,7 @@
melee_damage_lower = 1
melee_damage_upper = 8
attacktext = "gouges"
+ attack_vis_effect = ATTACK_EFFECT_SLASH
cold_damage_per_tick = 0
speak_chance = 5
speak = list("Awrr?","Aowrl!","Worrl")
@@ -59,6 +61,7 @@
melee_damage_lower = 3
melee_damage_upper = 12
attacktext = "gouges"
+ attack_vis_effect = ATTACK_EFFECT_SLASH
cold_damage_per_tick = 0
speak_chance = 5
speak = list("Shuhn","Shrunnph?","Shunpf")
diff --git a/code/modules/mob/living/simple_animal/hostile/bat.dm b/code/modules/mob/living/simple_animal/hostile/bat.dm
index d7ef9f3e938..eb278ca8b02 100644
--- a/code/modules/mob/living/simple_animal/hostile/bat.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bat.dm
@@ -24,6 +24,7 @@
melee_damage_upper = 10
resist_mod = 10 // can't grab a cloud of bats easily
attacktext = "bites"
+ attack_vis_effect = ATTACK_EFFECT_BITE
attack_sound = 'sound/weapons/bite.ogg'
//Space carp aren't affected by atmos.
diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm
index 8747f50abb2..2396d3ce6c8 100644
--- a/code/modules/mob/living/simple_animal/hostile/bear.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bear.dm
@@ -35,6 +35,7 @@
var/turns_since_hit = 0//If the bear chases someone too long without hitting them, it will try to change to another nearby target instead
attacktext = null//This allows custom attacking emotes
+ attack_vis_effect = ATTACK_EFFECT_CLAW
var/quiet_sounds = list('sound/effects/creatures/bear_quiet_1.ogg',
'sound/effects/creatures/bear_quiet_2.ogg',
diff --git a/code/modules/mob/living/simple_animal/hostile/cavern_geist.dm b/code/modules/mob/living/simple_animal/hostile/cavern_geist.dm
index 89df833f51c..885925b6c2c 100644
--- a/code/modules/mob/living/simple_animal/hostile/cavern_geist.dm
+++ b/code/modules/mob/living/simple_animal/hostile/cavern_geist.dm
@@ -31,6 +31,7 @@
mob_size = 25
environment_smash = 2
attacktext = "mangles"
+ attack_vis_effect = ATTACK_EFFECT_SLASH
attack_sound = 'sound/weapons/bloodyslice.ogg'
lighting_alpha = LIGHTING_PLANE_ALPHA_SOMEWHAT_INVISIBLE
diff --git a/code/modules/mob/living/simple_animal/hostile/changeling.dm b/code/modules/mob/living/simple_animal/hostile/changeling.dm
index e4df40d8bf1..b67081bd65d 100644
--- a/code/modules/mob/living/simple_animal/hostile/changeling.dm
+++ b/code/modules/mob/living/simple_animal/hostile/changeling.dm
@@ -34,6 +34,7 @@
mob_size = 25
environment_smash = 2
attacktext = "mangles"
+ attack_vis_effect = ATTACK_EFFECT_SLASH
attack_sound = 'sound/weapons/bloodyslice.ogg'
emote_sounds = list('sound/effects/creatures/bear_loud_1.ogg', 'sound/effects/creatures/bear_loud_2.ogg', 'sound/effects/creatures/bear_loud_3.ogg', 'sound/effects/creatures/bear_loud_4.ogg')
@@ -165,6 +166,7 @@
mob_size = 15
attacktext = "mangles"
attack_sound = 'sound/weapons/bloodyslice.ogg'
+ attack_vis_effect = ATTACK_EFFECT_SLASH
lighting_alpha = LIGHTING_PLANE_ALPHA_SOMEWHAT_INVISIBLE
diff --git a/code/modules/mob/living/simple_animal/hostile/commanded/bear_companion.dm b/code/modules/mob/living/simple_animal/hostile/commanded/bear_companion.dm
index e282387782f..15e48a034c9 100644
--- a/code/modules/mob/living/simple_animal/hostile/commanded/bear_companion.dm
+++ b/code/modules/mob/living/simple_animal/hostile/commanded/bear_companion.dm
@@ -39,6 +39,8 @@
butchering_products = list(/obj/item/clothing/head/bearpelt = 1)
meat_amount = 5
+ attack_vis_effect = ATTACK_EFFECT_CLAW
+
/mob/living/simple_animal/hostile/commanded/bear/hit_with_weapon(obj/item/O, mob/living/user, var/effective_force, var/hit_zone)
. = ..()
if(.)
diff --git a/code/modules/mob/living/simple_animal/hostile/commanded/guard_dog.dm b/code/modules/mob/living/simple_animal/hostile/commanded/guard_dog.dm
index babcdee9adf..25adb384d55 100644
--- a/code/modules/mob/living/simple_animal/hostile/commanded/guard_dog.dm
+++ b/code/modules/mob/living/simple_animal/hostile/commanded/guard_dog.dm
@@ -45,6 +45,7 @@
destroy_surroundings = FALSE
attack_emote = "growls at"
+ attack_vis_effect = ATTACK_EFFECT_BITE
butchering_products = list(/obj/item/stack/material/animalhide = 2)
diff --git a/code/modules/mob/living/simple_animal/hostile/creature.dm b/code/modules/mob/living/simple_animal/hostile/creature.dm
index 420a9f07bf7..43ef278efdf 100644
--- a/code/modules/mob/living/simple_animal/hostile/creature.dm
+++ b/code/modules/mob/living/simple_animal/hostile/creature.dm
@@ -11,6 +11,7 @@
melee_damage_upper = 30
organ_names = list("meaty core")
attacktext = "chomps"
+ attack_vis_effect = ATTACK_EFFECT_BITE
attack_sound = 'sound/weapons/bite.ogg'
faction = "creature"
speed = 4
diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm
index 6e437761dca..79046d965ee 100644
--- a/code/modules/mob/living/simple_animal/hostile/faithless.dm
+++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm
@@ -21,6 +21,7 @@
melee_damage_lower = 15
melee_damage_upper = 15
attacktext = "grips"
+ attack_vis_effect = ATTACK_EFFECT_SLASH
attack_sound = 'sound/hallucinations/growl1.ogg'
min_oxy = 0
diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
index ae18acf0980..31f17feaf23 100644
--- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
+++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
@@ -46,6 +46,7 @@
smart_melee = FALSE
attacktext = "bites"
+ attack_vis_effect = ATTACK_EFFECT_BITE
attack_emote = "skitters toward"
attack_sound = 'sound/weapons/bite.ogg'
emote_sounds = list('sound/effects/creatures/spider_critter.ogg')
diff --git a/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot.dm
index b6a483b22b8..f106ba7fba5 100644
--- a/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot.dm
@@ -43,6 +43,8 @@
psi_pingable = FALSE
sample_data = null
+ attack_vis_effect = ATTACK_EFFECT_SLASH
+
/// Weakref to the beacon that potentially spawned us.
var/datum/weakref/parent_beacon
diff --git a/code/modules/mob/living/simple_animal/hostile/ipc_zombie.dm b/code/modules/mob/living/simple_animal/hostile/ipc_zombie.dm
index 0933467441a..c05d3f75802 100644
--- a/code/modules/mob/living/simple_animal/hostile/ipc_zombie.dm
+++ b/code/modules/mob/living/simple_animal/hostile/ipc_zombie.dm
@@ -12,6 +12,7 @@
armor_penetration = 20
attack_sound = 'sound/weapons/smash.ogg'
attacktext = "smashes"
+ attack_vis_effect = ATTACK_EFFECT_SMASH
faction = "hivebot"
min_oxy = 0
max_oxy = 0
diff --git a/code/modules/mob/living/simple_animal/hostile/moghes.dm b/code/modules/mob/living/simple_animal/hostile/moghes.dm
index 3a372249719..6a38c625698 100644
--- a/code/modules/mob/living/simple_animal/hostile/moghes.dm
+++ b/code/modules/mob/living/simple_animal/hostile/moghes.dm
@@ -29,6 +29,7 @@
mob_size = 30
environment_smash = 2
attacktext = "chomps"
+ attack_vis_effect = ATTACK_EFFECT_BITE
attack_sound = 'sound/weapons/bloodyslice.ogg'
lighting_alpha = LIGHTING_PLANE_ALPHA_SOMEWHAT_INVISIBLE
@@ -159,6 +160,7 @@
melee_damage_lower = 5
melee_damage_upper = 8
attacktext = "rams"
+ attack_vis_effect = ATTACK_EFFECT_SLASH
attack_sound = 'sound/weapons/punch4_bass.ogg'
environment_smash = 1
diff --git a/code/modules/mob/living/simple_animal/hostile/phoron_worm.dm b/code/modules/mob/living/simple_animal/hostile/phoron_worm.dm
index b6c41c4fb09..8820fe979ae 100644
--- a/code/modules/mob/living/simple_animal/hostile/phoron_worm.dm
+++ b/code/modules/mob/living/simple_animal/hostile/phoron_worm.dm
@@ -24,6 +24,7 @@
mob_size = 30
environment_smash = 2
attacktext = "chomps"
+ attack_vis_effect = ATTACK_EFFECT_BITE
attack_sound = 'sound/weapons/bite.ogg'
faction = "worm"
diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm
index fffc98ea875..49bc034362d 100644
--- a/code/modules/mob/living/simple_animal/hostile/pirate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/pirate.dm
@@ -20,6 +20,7 @@
melee_damage_lower = 30
melee_damage_upper = 30
attacktext = "slashes"
+ attack_vis_effect = ATTACK_EFFECT_SLASH
attack_sound = 'sound/weapons/bladeslice.ogg'
min_oxy = 5
diff --git a/code/modules/mob/living/simple_animal/hostile/pra.dm b/code/modules/mob/living/simple_animal/hostile/pra.dm
index 22e30716ab8..0a98e152bf4 100644
--- a/code/modules/mob/living/simple_animal/hostile/pra.dm
+++ b/code/modules/mob/living/simple_animal/hostile/pra.dm
@@ -36,6 +36,7 @@
mob_size = 5
attacktext = "slashes"
+ attack_vis_effect = ATTACK_EFFECT_SLASH
attack_sound = 'sound/weapons/bladeslice.ogg'
speed = 2
@@ -174,6 +175,7 @@
melee_damage_upper = 5
attacktext = "smashed"
attack_sound = 'sound/weapons/genhit1.ogg'
+ attack_vis_effect = ATTACK_EFFECT_SMASH
speed = 1
ranged = TRUE
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/aquatic.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/aquatic.dm
index 4d7c3df37a1..0b4b851cdf8 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/aquatic.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/aquatic.dm
@@ -47,6 +47,7 @@ ABSTRACT_TYPE(/mob/living/simple_animal/hostile/retaliate/aquatic)
melee_damage_lower = 40
melee_damage_upper = 70
armor_penetration = 80
+ attack_vis_effect = ATTACK_EFFECT_BITE
//Admin shark for admin fun because why not, not meant for normal gameplay
/mob/living/simple_animal/hostile/retaliate/aquatic/thresher/deep_water
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/cavern.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/cavern.dm
index ca019a5cea9..162e1d5e6b0 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/cavern.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/cavern.dm
@@ -24,6 +24,7 @@
melee_damage_lower = 10
melee_damage_upper = 10
attacktext = "chomps"
+ attack_vis_effect = ATTACK_EFFECT_BITE
attack_sound = 'sound/weapons/bite.ogg'
speed = 4
projectiletype = /obj/projectile/beam/cavern
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/exoplanet.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/exoplanet.dm
index bb43982057b..5a85f93d886 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/exoplanet.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/exoplanet.dm
@@ -27,6 +27,7 @@
)
emote_see = list("skitters","oozes liquid from its mouth", "scratches at the ground", "clicks its claws")
+ attack_vis_effect = ATTACK_EFFECT_CLAW
/mob/living/simple_animal/hostile/retaliate/beast/charbaby
name = "charbaby"
@@ -66,5 +67,6 @@
icon_state = "lavadog"
icon_living = "lavadog"
icon_dead = "lavadog_dead"
+ attack_vis_effect = ATTACK_EFFECT_BITE
speak = list("Karuph!", "Karump!")
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/konyang.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/konyang.dm
index 3e0e1da202f..01f49ea1f7a 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/konyang.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/konyang.dm
@@ -21,6 +21,7 @@
melee_damage_upper = 30
armor_penetration = 20
attacktext = "claws"
+ attack_vis_effect = ATTACK_EFFECT_CLAW
attack_sound = 'sound/weapons/slice.ogg'
meat_amount = 8
diff --git a/code/modules/mob/living/simple_animal/hostile/rogue_maint_drone.dm b/code/modules/mob/living/simple_animal/hostile/rogue_maint_drone.dm
index 7713e2f0bcc..984a48196b6 100644
--- a/code/modules/mob/living/simple_animal/hostile/rogue_maint_drone.dm
+++ b/code/modules/mob/living/simple_animal/hostile/rogue_maint_drone.dm
@@ -15,6 +15,7 @@
melee_damage_upper = 8
armor_penetration = 5
attacktext = "slices"
+ attack_vis_effect = ATTACK_EFFECT_SLASH
faction = "silicon"
min_oxy = 0
minbodytemp = 0
diff --git a/code/modules/mob/living/simple_animal/hostile/sarlacc.dm b/code/modules/mob/living/simple_animal/hostile/sarlacc.dm
index b639175bcee..cea4f67c70e 100644
--- a/code/modules/mob/living/simple_animal/hostile/sarlacc.dm
+++ b/code/modules/mob/living/simple_animal/hostile/sarlacc.dm
@@ -135,9 +135,8 @@
/mob/living/simple_animal/hostile/greatworm/Destroy()
SSmobs.greatworms -= src
- if(sarlacc)
- qdel(sarlacc)
- sarlacc = null
+ QDEL_NULL(sarlacc)
+ QDEL_LIST(active_tentacles)
return ..()
/mob/living/simple_animal/hostile/greatworm/Life(seconds_per_tick, times_fired)
@@ -289,6 +288,7 @@
/mob/living/simple_animal/hostile/lesserworm/Destroy()
if(originator)
originator.active_tentacles -= src
+ originator = null
return ..()
/mob/living/simple_animal/hostile/lesserworm/proc/Penetrate()
diff --git a/code/modules/mob/living/simple_animal/hostile/space_fauna.dm b/code/modules/mob/living/simple_animal/hostile/space_fauna.dm
index ed8cef6a75c..a20d846f789 100644
--- a/code/modules/mob/living/simple_animal/hostile/space_fauna.dm
+++ b/code/modules/mob/living/simple_animal/hostile/space_fauna.dm
@@ -34,6 +34,7 @@
armor_penetration = 5
attack_flags = DAMAGE_FLAG_EDGE
attacktext = "bites"
+ attack_vis_effect = ATTACK_EFFECT_BITE
attack_sound = 'sound/weapons/bite.ogg'
//Space carp aren't affected by atmos.
@@ -254,7 +255,7 @@
return
/mob/living/simple_animal/hostile/carp/bloater/proc/explode()
- explosion(src, -1, 1, 2)
+ explosion(get_turf(src), -1, 1, 2)
src.gib()
/mob/living/simple_animal/hostile/carp/old
@@ -299,6 +300,7 @@
melee_damage_lower = 5
melee_damage_upper = 5
attacktext = "bites"
+ attack_vis_effect = ATTACK_EFFECT_BITE
attack_sound = 'sound/weapons/bite.ogg'
min_oxy = 0
diff --git a/code/modules/mob/living/simple_animal/hostile/spider_queen.dm b/code/modules/mob/living/simple_animal/hostile/spider_queen.dm
index a1f945e356e..ffc05470e29 100644
--- a/code/modules/mob/living/simple_animal/hostile/spider_queen.dm
+++ b/code/modules/mob/living/simple_animal/hostile/spider_queen.dm
@@ -38,6 +38,7 @@
mob_push_flags = ALLMOBS
attacktext = "bites"
+ attack_vis_effect = ATTACK_EFFECT_BITE
attack_sound = 'sound/weapons/bite.ogg'
pass_flags = PASSTABLE|PASSRAILING
diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm
index 7e8a0173bf5..8d280d8a78f 100644
--- a/code/modules/mob/living/simple_animal/hostile/tree.dm
+++ b/code/modules/mob/living/simple_animal/hostile/tree.dm
@@ -24,6 +24,7 @@
melee_damage_lower = 8
melee_damage_upper = 12
attacktext = "bites"
+ attack_vis_effect = ATTACK_EFFECT_BITE //what how
attack_sound = 'sound/weapons/bite.ogg'
//Space carp aren't affected by atmos.
diff --git a/code/modules/mob/living/simple_animal/hostile/vannatusk.dm b/code/modules/mob/living/simple_animal/hostile/vannatusk.dm
index 466ec6629c2..7c1987a4ca5 100644
--- a/code/modules/mob/living/simple_animal/hostile/vannatusk.dm
+++ b/code/modules/mob/living/simple_animal/hostile/vannatusk.dm
@@ -25,6 +25,7 @@
mob_size = 15
environment_smash = 2
attacktext = "mangles"
+ attack_vis_effect = ATTACK_EFFECT_CLAW
attack_emote = "charges toward"
attack_sound = 'sound/effects/creatures/vannatusk_attack.ogg'
emote_sounds = list('sound/effects/creatures/vannatusk_sound.ogg', 'sound/effects/creatures/vannatusk_sound_2.ogg')
diff --git a/code/modules/mob/living/simple_animal/hostile/viscerator.dm b/code/modules/mob/living/simple_animal/hostile/viscerator.dm
index 66adfb761cf..af617c7ee7c 100644
--- a/code/modules/mob/living/simple_animal/hostile/viscerator.dm
+++ b/code/modules/mob/living/simple_animal/hostile/viscerator.dm
@@ -12,6 +12,7 @@
armor_penetration = 20
density = 0
attacktext = "cuts"
+ attack_vis_effect = ATTACK_EFFECT_SLASH
attack_sound = 'sound/weapons/bladeslice.ogg'
blood_overlay_icon = null
faction = "syndicate"
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 8c63785dac7..b1f58f52965 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -620,14 +620,14 @@
if(!actual_damage)
actual_damage = harm_intent_damage ? rand(1, harm_intent_damage) : 0
apply_damage(actual_damage, attack.damage_type)
- user.do_attack_animation(src, FIST_ATTACK_ANIMATION)
+ user.do_attack_animation(src)
return
simple_harm_attack(user)
/mob/living/simple_animal/proc/simple_harm_attack(var/mob/living/user)
apply_damage(harm_intent_damage, damage_type, used_weapon = "Attack by [user.name]")
user.visible_message(SPAN_WARNING("\The [user] [response_harm] \the [src]!"), SPAN_WARNING("You [response_harm] \the [src]!"))
- user.do_attack_animation(src, FIST_ATTACK_ANIMATION)
+ user.do_attack_animation(src)
poke(TRUE)
/mob/living/simple_animal/attackby(obj/item/attacking_item, mob/user)
@@ -1142,6 +1142,16 @@
return TRUE
return FALSE
+/mob/living/simple_animal/do_attack_animation(atom/attacked_atom, visual_effect_icon, used_item, no_effect)
+ if(!no_effect && !visual_effect_icon && melee_damage_upper)
+ if(attack_vis_effect && !iswall(attacked_atom)) // override the standard visual effect.
+ visual_effect_icon = attack_vis_effect
+ else if(melee_damage_upper < 10)
+ visual_effect_icon = ATTACK_EFFECT_PUNCH
+ else
+ visual_effect_icon = ATTACK_EFFECT_SMASH
+ ..()
+
#undef BLOOD_NONE
#undef BLOOD_LIGHT
#undef BLOOD_MEDIUM
diff --git a/code/modules/mob/living/whisper.dm b/code/modules/mob/living/whisper.dm
index 07a75cf42a5..cc5e294edf2 100644
--- a/code/modules/mob/living/whisper.dm
+++ b/code/modules/mob/living/whisper.dm
@@ -60,11 +60,14 @@
var/list/observers = list()
var/list/all_in_range = hearers(watching_range, src)
for(var/mob/M as anything in all_in_range)
- if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTEARS)) //Preventing duplicate messages to ghostear'd observers
+ // If they got sensitive hearing enabled, increase the whisper hearing range by one
+ var/sensitive = astype(M, /mob/living/carbon/human)?.is_listening() ? 1 : 0
+ //Preventing duplicate messages to ghostear'd observers
+ if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTEARS))
continue
- if(get_dist(src, M) <= message_range) //In range to hear
+ if(get_dist(src, M) <= (message_range + sensitive)) //In range to hear
continue
- else if(get_dist(src, M) <= eavesdropping_range)
+ else if(get_dist(src, M) <= (eavesdropping_range + sensitive))
if(M.stat == DEAD && M.client)
observers += M
else
diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm
index 1c03b4b14f7..13db1a0ba53 100644
--- a/code/modules/mob/login.dm
+++ b/code/modules/mob/login.dm
@@ -25,9 +25,6 @@
message_admins(SPAN_WARNING("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(M)] (no longer logged in). "), 1)
log_access("Notice: [key_name(src)] has the same [matches] as [key_name(M)] (no longer logged in).")
-/mob
- var/client/my_client // Need to keep track of this ourselves, since by the time Logout() is called the client has already been nulled
-
/**
* Currently marked as SHOULD_NOT_OVERRIDE.
*
diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm
index d63394c3b8b..8a9d9ec4258 100644
--- a/code/modules/mob/logout.dm
+++ b/code/modules/mob/logout.dm
@@ -5,7 +5,6 @@
//TGUI
remove_all_indicators()
- SSnanoui.user_logout(src) // this is used to clean up (remove) this user's Nano UIs
GLOB.player_list -= src
disconnect_time = world.realtime
log_access("Logout: [key_name(src)]")
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index d2810c76e82..452ccef59c9 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -1,36 +1,89 @@
/mob/Destroy()//This makes sure that mobs with clients/keys are not just deleted from the game.
MOB_STOP_THINKING(src)
- // Tell any mobs touching us that they're not pulling us anymore.
- stop_pulling()
+ pulling?.pulledby = null
+ pulling = null
+ pullin?.icon_state = "pull0"
+ pullin = null
// Delete and null the grab objects that are touching this mob.
QDEL_LIST(grabbed_by)
GLOB.mob_list -= src
GLOB.dead_mob_list -= src
GLOB.living_mob_list -= src
GLOB.player_list -= src
- unset_machine()
QDEL_NULL(hud_used)
+ QDEL_NULL(cells)
+ QDEL_NULL(flash)
+ QDEL_NULL(blind)
+ QDEL_NULL(hands)
+ QDEL_NULL(pullin)
+ QDEL_NULL(purged)
+ QDEL_NULL(internals)
+ QDEL_NULL(oxygen)
+ QDEL_NULL(paralysis_indicator)
+ QDEL_NULL(i_select)
+ QDEL_NULL(m_select)
+ QDEL_NULL(toxin)
+ QDEL_NULL(bodytemp)
+ QDEL_NULL(healths)
+ QDEL_NULL(throw_icon)
+ QDEL_NULL(nutrition_icon)
+ QDEL_NULL(hydration_icon)
+ QDEL_NULL(pressure)
+ QDEL_NULL(damageoverlay)
+ QDEL_NULL(pain)
+ QDEL_NULL(item_use_icon)
+ QDEL_NULL(radio_use_icon)
+ QDEL_NULL(gun_move_icon)
+ QDEL_NULL(gun_setting_icon)
+ QDEL_NULL(unique_action_icon)
+ QDEL_NULL(toggle_firing_mode)
+ QDEL_NULL(energy_display)
+ QDEL_NULL(instability_display)
+ QDEL_NULL(up_hint)
+ QDEL_NULL(robot_pain)
QDEL_LIST(spell_masters)
- remove_screen_obj_references()
-
if(client)
for(var/atom/movable/AM in client.screen)
- qdel(AM)
+ if (!QDELING(AM))
+ qdel(AM)
client.screen = list()
- if (mind)
- mind.handle_mob_deletion(src)
+ mind?.handle_mob_deletion(src)
+ mind = null
- for(var/infection in viruses)
- qdel(infection)
-
- for(var/cc in client_colors)
- qdel(cc)
+ QDEL_NULL(ability_master)
+ QDEL_NULL(zone_sel)
+ machine = null
client_colors = null
- viruses.Cut()
+ additional_vision_handlers?.Cut()
+ pinned?.Cut()
+ QDEL_LIST(embedded)
+ languages?.Cut()
+ holo = null
+ l_hand = null
+ r_hand = null
+ back = null
+ internal = null
+ s_active = null
+ wear_mask = null
+ QDEL_NULL(dna)
+ LAssailant = null
+ spell_list?.Cut()
+ lastarea = null
+ control_object = null
+ teleop = null
+ listed_turf = null
item_verbs = null
+ // This is a nested assoc list, which must be cleared outside-in
+ if (length(progressbars))
+ for (var/location in progressbars)
+ for (var/ref in progressbars[location])
+ qdel(ref)
+ progressbars.Cut()
+
+ QDEL_NULL(typing_indicator)
//Added this to prevent nonliving mobs from ghostising
//The only non 'living' mobs are:
@@ -48,11 +101,21 @@
var/atom/movable/AM = src.loc
LAZYREMOVE(AM.contained_mobs, src)
- QDEL_NULL(ability_master)
-
- if(click_handlers)
- QDEL_LIST(click_handlers)
-
+ QDEL_LIST(click_handlers)
+ vr_mob = null
+ old_mob = null
+ lastattacker = null
+ lastattacked = null
+ QDEL_NULL(pointing_effect)
+ QDEL_LIST(open_nanouis)
+ QDEL_LIST(tgui_open_uis)
+ QDEL_NULL(narsimage)
+ QDEL_NULL(narglow)
+ QDEL_NULL(riftimage)
+ bloody_hands_mob = null
+ QDEL_NULL(eyeobj)
+ QDEL_NULL(bg)
+ my_client = null
return ..()
/mob/New()
@@ -60,32 +123,6 @@
GenerateTag()
return ..()
-/mob/proc/remove_screen_obj_references()
- flash = null
- blind = null
- hands = null
- pullin = null
- purged = null
- internals = null
- oxygen = null
- i_select = null
- m_select = null
- toxin = null
- bodytemp = null
- healths = null
- throw_icon = null
- nutrition_icon = null
- hydration_icon = null
- pressure = null
- damageoverlay = null
- pain = null
- item_use_icon = null
- gun_move_icon = null
- gun_setting_icon = null
- spell_masters = null
- zone_sel = null
-
-/mob/var/should_add_to_mob_list = TRUE
/mob/Initialize(mapload)
. = ..()
if(should_add_to_mob_list)
@@ -404,8 +441,6 @@
if(!. && iscarbon(loc) && isturf(loc.loc)) // We're inside someone, let us examine still.
return TRUE
-/mob/var/obj/effect/decal/point/pointing_effect = null//Spam control, can only point when the previous pointer qdels
-
/mob/verb/pointed(atom/A as mob|obj|turf in view())
set name = "Point To"
set category = "Object"
@@ -734,8 +769,8 @@
if(pulling)
pulling.pulledby = null
pulling = null
- if(pullin)
- pullin.icon_state = "pull0"
+ if(pullin)
+ pullin.icon_state = "pull0"
/mob/proc/start_pulling(var/atom/movable/AM)
@@ -916,6 +951,8 @@
if( lying != lying_prev )
update_icon()
+ if(lying)
+ SEND_SIGNAL(src, COMSIG_MOB_LYING_DOWN)
return canmove
@@ -1446,7 +1483,7 @@
if(. && LAZYLEN(spell_list))
for(var/spell/S in spell_list)
- if((!S.connected_button) || !statpanel(S.panel))
+ if(!S.connected_button)
continue //Not showing the noclothes spell
switch(S.charge_type)
if(Sp_RECHARGE)
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index fd63e192e41..b908ced793a 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -176,7 +176,6 @@
var/datum/hud/hud_used = null
var/list/grabbed_by = list( )
- var/list/requests = list( )
var/list/mapobjs = list()
@@ -186,10 +185,6 @@
var/job = null//Living
- var/const/blindness = 1//Carbon
- var/const/deafness = 2//Carbon
- var/const/muteness = 4//Carbon
-
var/can_pull_size = 10 // Maximum w_class the mob can pull.
var/can_pull_mobs = MOB_PULL_LARGER // Whether or not the mob can pull other mobs.
@@ -224,13 +219,6 @@
//Wizard mode, but can be used in other modes thanks to the brand new "Give Spell" badmin button
var/list/spell/spell_list
-//List of active diseases
-
- var/list/viruses = list() // replaces var/datum/disease/virus
-
-//Monkey/infected mode
- var/list/resistances = list()
-
mouse_drag_pointer = MOUSE_ACTIVE_POINTER
var/update_icon = 1 //Set to 1 to trigger update_icon() at the next life() call
@@ -288,3 +276,82 @@
/// A assoc lazylist of to_chat notifications, key = string message, value = world time integer
var/list/message_notifications
+
+ var/mob/living/vr_mob = null // In which mob is our mind
+ var/mob/living/old_mob = null // Which mob is our old mob
+
+ /**
+ * LAZYLIST (Instances of `/datum/click_handler`). Click handlers for this mob that should intercept and handle click
+ * calls.
+ *
+ * The 'topmost'/'active' click handler for the mob is the handler currently at index `1`. By default, this will be
+ * `/datum/click_handler/default`.
+ */
+ var/list/click_handlers
+
+ var/should_add_to_mob_list = TRUE
+
+ /// Integer. Unique sequential ID from the `do_after` proc used to validate `DO_USER_UNIQUE_ACT` flag checks.
+ var/do_unique_user_handle = 0
+
+ var/mob/lastattacker = null
+ var/mob/lastattacked = null
+ var/attack_log = list()
+
+ /// Spam control, can only point when the previous pointer qdels
+ var/obj/effect/decal/point/pointing_effect = null
+
+ /// 1 decisecond click delay (above and beyond mob/next_move)
+ var/next_click = 0
+
+ var/dizziness = 0//Carbon
+ var/is_dizzy = 0
+ var/is_jittery = 0
+ var/jitteriness = 0//Carbon
+
+ //handles up-down floaty effect in space and zero-gravity
+ var/is_floating = FALSE
+
+ // Used by the Nano UI Manager (/datum/SSnanoui) to track UIs opened by this mob
+ var/list/open_nanouis = list()
+
+ var/last_pain_message = ""
+ var/next_pain_time = 0
+
+ /**
+ * global
+ *
+ * Tracks open UIs for a user.
+ */
+ var/list/tgui_open_uis = list()
+
+ var/tmp/last_airflow_stun = 0
+
+ //thou shall always be able to see the Geometer of Blood
+ var/image/narsimage = null
+ var/image/narglow = null
+
+ //thou shall always be able to see the rift
+ var/image/riftimage = null
+
+ var/list/client_colors = list()
+
+ var/bloody_hands = null
+ var/datum/weakref/bloody_hands_mob
+ var/track_footprint = 0
+ var/list/feet_blood_DNA
+ var/track_footprint_type
+ var/footprint_color
+
+ var/mob/abstract/eye/eyeobj
+
+ var/mob/living/brain_ghost/bg
+
+ var/list/default_emotes = list()
+ var/list/usable_emotes = list()
+
+ var/client/my_client // Need to keep track of this ourselves, since by the time Logout() is called the client has already been nulled
+
+ var/get_rig_stats = 0
+
+ var/thinking_enabled = FALSE
diff --git a/code/modules/modular_computers/_description.dm b/code/modules/modular_computers/_description.dm
index 5d551a1549a..407c5f5cf9a 100644
--- a/code/modules/modular_computers/_description.dm
+++ b/code/modules/modular_computers/_description.dm
@@ -45,8 +45,7 @@ if one is destroyed the second will take over. If all relays are gone it stops w
possible to enable/disable Software Downloading, P2P file transfers and Communication (IC version of IRC, PDA messages for more than two people)
5. Software
-Software would almost exclusively use NanoUI modules. Few exceptions are text editor (uses similar screen as TCS IDE used for editing and classic HTML for previewing as Nano looks differently)
-and similar programs which for some reason require HTML UI. Most software will be highly dependent on NTNet to work as laptops are not physically connected to the station's network.
+Software would almost exclusively use TGUI modules. Most software will be highly dependent on NTNet to work as laptops are not physically connected to the station's network.
What i plan to add:
Note: XXXXDB programs will use ingame_manuals to display basic help for players, similar to how books, etc. do
diff --git a/code/modules/modular_computers/computers/modular_computer/core.dm b/code/modules/modular_computers/computers/modular_computer/core.dm
index 7d5bc187dd7..77c8a4bad2e 100644
--- a/code/modules/modular_computers/computers/modular_computer/core.dm
+++ b/code/modules/modular_computers/computers/modular_computer/core.dm
@@ -416,13 +416,10 @@
/obj/item/modular_computer/proc/update_uis()
if(active_program) //Should we update program ui or computer ui?
- SSnanoui.update_uis(active_program)
- SStgui.update_uis(src)
- if(active_program.NM)
- SSnanoui.update_uis(active_program.NM)
+ if(active_program)
+ SStgui.update_uis(active_program)
else
SStgui.update_uis(src)
- SSnanoui.update_uis(src)
/obj/item/modular_computer/proc/check_update_ui_need()
var/ui_update_needed = FALSE
@@ -458,18 +455,6 @@
if(ui_update_needed)
update_uis()
-// Used by camera monitor program
-/obj/item/modular_computer/check_eye(var/mob/user)
- if(active_program)
- return active_program.check_eye(user)
- return ..()
-
-// Used by camera monitor program
-/obj/item/modular_computer/grants_equipment_vision(var/mob/user)
- if(active_program)
- return active_program.grants_equipment_vision(user)
- return ..()
-
/obj/item/modular_computer/get_cell()
return battery_module ? battery_module.get_cell() : DEVICE_NO_CELL
diff --git a/code/modules/modular_computers/computers/modular_computer/ui.dm b/code/modules/modular_computers/computers/modular_computer/ui.dm
index 7652f8dc84e..51af5ce2a2d 100644
--- a/code/modules/modular_computers/computers/modular_computer/ui.dm
+++ b/code/modules/modular_computers/computers/modular_computer/ui.dm
@@ -37,9 +37,9 @@
/obj/item/modular_computer/proc/get_header_data(list/data)
LAZYINITLIST(data)
- data["PC_batteryicon"] = get_battery_icon()
+ data["PC_batteryicon"] = battery_module ? get_battery_icon() : null
data["PC_showbatteryicon"] = !!battery_module
- data["PC_batterypercent"] = battery_module ? "[round(battery_module.battery.percent())] %" : "N/C"
+ data["PC_batterypercent"] = battery_module ? "[round(battery_module.battery.percent())] %" : null
data["PC_apclinkicon"] = (tesla_link?.enabled && apc_powered) ? "charging.gif" : ""
data["PC_device_theme"] = active_program ? active_program.tgui_theme : "scc"
data["PC_ntneticon"] = get_ntnet_status_icon()
@@ -206,5 +206,15 @@
return UI_INTERACTIVE
. = ..()
if(. < UI_INTERACTIVE)
- if(user.machine)
+ if(user?.machine)
user.unset_machine()
+
+/obj/item/modular_computer/check_eye(mob/user)
+ if(active_program)
+ return active_program.check_eye(user)
+ return ..()
+
+/obj/item/modular_computer/grants_equipment_vision(mob/user)
+ if(active_program)
+ return active_program.grants_equipment_vision(user)
+ return ..()
diff --git a/code/modules/modular_computers/computers/subtypes/dev_silicon.dm b/code/modules/modular_computers/computers/subtypes/dev_silicon.dm
index 6721a1b8222..bfa09170fb8 100644
--- a/code/modules/modular_computers/computers/subtypes/dev_silicon.dm
+++ b/code/modules/modular_computers/computers/subtypes/dev_silicon.dm
@@ -19,6 +19,9 @@
/obj/item/modular_computer/silicon/ui_host()
. = computer_host
+/obj/item/modular_computer/silicon/ui_state(mob/user)
+ return GLOB.self_state
+
/obj/item/modular_computer/silicon/Initialize(mapload)
if(istype(loc, /mob/living/silicon))
computer_host = loc
diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm
index 08787f46ac7..dfb0d78d0f2 100644
--- a/code/modules/modular_computers/file_system/program.dm
+++ b/code/modules/modular_computers/file_system/program.dm
@@ -84,11 +84,7 @@ ABSTRACT_TYPE(/datum/computer_file/program)
var/tgui_theme = "scc"
/// If this TGUI should autoupdate or not.
- var/ui_auto_update = TRUE
-
- // TO BE DEPRECATED:
- var/datum/nano_module/NM // If the program uses NanoModule, put it here and it will be automagically opened. Otherwise implement ui_interact.
- var/nanomodule_path // Path to nanomodule, make sure to set this if implementing new program.
+ var/ui_auto_update = TRUE // Path to nanomodule, make sure to set this if implementing new program.
/datum/computer_file/program/New(obj/item/modular_computer/comp)
..()
@@ -136,7 +132,6 @@ ABSTRACT_TYPE(/datum/computer_file/program)
var/datum/computer_file/program/temp = ..(rename, computer)
temp.required_access_run = required_access_run
temp.required_access_download = required_access_download
- temp.nanomodule_path = nanomodule_path
temp.filedesc = filedesc
temp.program_icon_state = program_icon_state
temp.requires_ntnet = requires_ntnet
@@ -200,6 +195,14 @@ ABSTRACT_TYPE(/datum/computer_file/program)
return computer.get_ntnet_status(specific_action)
return FALSE
+/// Allows active programs to preserve non-standard user views, such as camera monitors.
+/datum/computer_file/program/proc/check_eye(mob/user)
+ return -1
+
+/// Allows active programs to grant equipment vision while controlling the user's view.
+/datum/computer_file/program/proc/grants_equipment_vision(mob/user)
+ return FALSE
+
// Called by Process() on device that runs us, once every tick.
/datum/computer_file/program/proc/process_tick()
return TRUE
@@ -307,31 +310,12 @@ ABSTRACT_TYPE(/datum/computer_file/program)
else // Should never happen - So fail silently
return FALSE
-// This attempts to retrieve header data for NanoUIs. If implementing completely new device of different type than existing ones
+// This attempts to retrieve header data for UIs. If implementing completely new device of different type than existing ones
// always include the device here in this proc. This proc basically relays the request to whatever is running the program.
/datum/computer_file/program/proc/get_header_data()
if(computer)
return computer.get_header_data()
-
-/datum/computer_file/program/Topic(href, href_list)
- if(..())
- return TRUE
- if(computer)
- return computer.Topic(href, href_list)
-
-// Relays the call to nano module, if we have one
-/datum/computer_file/program/proc/check_eye(var/mob/user)
- if(NM)
- return NM.check_eye(user)
- else
- return -1
-
-/// Relays the call to nano module, if we have one
-/datum/computer_file/program/proc/grants_equipment_vision(var/mob/user)
- if(NM)
- return NM.grants_equipment_vision(user)
-
/datum/computer_file/program/proc/message_dead(var/message)
for(var/mob/M in GLOB.player_list)
if(M.stat == DEAD && (M.client && M.client.prefs.toggles & CHAT_GHOSTEARS))
diff --git a/code/modules/modular_computers/file_system/program_events.dm b/code/modules/modular_computers/file_system/program_events.dm
index 9b03b8d6369..f49a38a1355 100644
--- a/code/modules/modular_computers/file_system/program_events.dm
+++ b/code/modules/modular_computers/file_system/program_events.dm
@@ -5,8 +5,6 @@
// When implementing new program based device, use this to run the program.
/datum/computer_file/program/proc/run_program(var/mob/user)
if(can_run(user, 1) || !requires_access_to_run)
- if(nanomodule_path)
- NM = new nanomodule_path(src, new /datum/topic_manager/program(src), src)
if(requires_ntnet && network_destination)
generate_network_log("Connection opened to [network_destination].")
program_state = PROGRAM_STATE_ACTIVE
@@ -18,9 +16,6 @@
program_state = PROGRAM_STATE_KILLED
if(network_destination)
generate_network_log("Connection to [network_destination] closed.")
- if(NM)
- qdel(NM)
- NM = null
return TRUE
// Is called when program service is being activated
diff --git a/code/modules/modular_computers/file_system/programs/_program.dm b/code/modules/modular_computers/file_system/programs/_program.dm
index 72030a2d2d1..c0293bdc125 100644
--- a/code/modules/modular_computers/file_system/programs/_program.dm
+++ b/code/modules/modular_computers/file_system/programs/_program.dm
@@ -1,39 +1,5 @@
-/obj/item/modular_computer/initial_data()
+/obj/item/modular_computer/proc/initial_data()
return list("_PC" = get_header_data())
-/datum/computer_file/program/initial_data()
+/datum/computer_file/program/proc/initial_data()
return list("_PC" = get_header_data())
-
-/obj/item/modular_computer/update_layout()
- return TRUE
-
-/datum/computer_file/program/update_layout()
- return TRUE
-
-/datum/nano_module/program
- available_to_ai = FALSE
- var/datum/computer_file/program/program // Program-Based computer program that runs this nano module. Defaults to null.
-
-/datum/nano_module/program/New(var/host, var/topic_manager, var/program)
- ..()
- src.program = program
-
-/datum/nano_module/program/Destroy()
- program = null
- return ..()
-
-/datum/topic_manager/program
- var/datum/program
-
-/datum/topic_manager/program/New(var/datum/program)
- ..()
- src.program = program
-
-/datum/topic_manager/program/Destroy()
- program = null
- return ..()
-
-// Calls forwarded to PROGRAM itself should begin with "PRG_"
-// Calls forwarded to COMPUTER running the program should begin with "PC_"
-/datum/topic_manager/program/Topic(href, href_list)
- return program && program.Topic(href, href_list)
diff --git a/code/modules/modular_computers/file_system/programs/civilian/cargo_order.dm b/code/modules/modular_computers/file_system/programs/civilian/cargo_order.dm
index 6d619a3de26..e87234b0b31 100644
--- a/code/modules/modular_computers/file_system/programs/civilian/cargo_order.dm
+++ b/code/modules/modular_computers/file_system/programs/civilian/cargo_order.dm
@@ -9,7 +9,6 @@
available_on_ntnet = TRUE
usage_flags = PROGRAM_ALL
tgui_id = "CargoOrder"
- ui_auto_update = FALSE
var/page = "main" //main - Main Menu, order - Order Page, item_details - Item Details Page, tracking - Tracking Page
var/selected_category = null // Category that is currently selected
diff --git a/code/modules/modular_computers/file_system/programs/command/card.dm b/code/modules/modular_computers/file_system/programs/command/card.dm
index 4c6aa651443..e60bb5daa69 100644
--- a/code/modules/modular_computers/file_system/programs/command/card.dm
+++ b/code/modules/modular_computers/file_system/programs/command/card.dm
@@ -11,7 +11,6 @@
size = 8
color = LIGHT_COLOR_BLUE
tgui_id = "IDCardModification"
- ui_auto_update = FALSE
var/is_centcom = FALSE
var/show_assignments = FALSE
diff --git a/code/modules/modular_computers/file_system/programs/command/command_and_communications.dm b/code/modules/modular_computers/file_system/programs/command/command_and_communications.dm
index 6eebe6b56e8..fe77a3024bf 100644
--- a/code/modules/modular_computers/file_system/programs/command/command_and_communications.dm
+++ b/code/modules/modular_computers/file_system/programs/command/command_and_communications.dm
@@ -12,7 +12,6 @@
network_destination = "station long-range communication array"
color = LIGHT_COLOR_BLUE
tgui_id = "CommandCommunications"
- ui_auto_update = FALSE
var/datum/comm_message_listener/message_core
var/intercept = FALSE
var/can_call_shuttle = FALSE //If calling the shuttle should be available from this console
@@ -272,7 +271,12 @@ GLOBAL_VAR_INIT(last_message_id, 0)
/datum/comm_message_listener/proc/Add(var/list/message)
messages[++messages.len] = message
-/datum/comm_message_listener/proc/Remove(var/list/message)
+/datum/comm_message_listener/proc/Remove(var/message)
+ if(isnum(message))
+ for(var/list/stored_message in messages)
+ if(stored_message["id"] == message)
+ message = stored_message
+ break
messages -= list(message)
/*
Command action procs
diff --git a/code/modules/modular_computers/file_system/programs/engineering/atmoscontrol.dm b/code/modules/modular_computers/file_system/programs/engineering/atmoscontrol.dm
index 74702b4e2bf..ac416d91793 100644
--- a/code/modules/modular_computers/file_system/programs/engineering/atmoscontrol.dm
+++ b/code/modules/modular_computers/file_system/programs/engineering/atmoscontrol.dm
@@ -48,7 +48,7 @@
// Opens the interface for the given air alarm.
if("alarm")
var/obj/structure/machinery/alarm/alarm = locate(params["alarm"]) in (monitored_alarms.len ? monitored_alarms : SSmachinery.processing)
- if(alarm)
+ if(alarm?.rcon_setting)
alarm.ui_interact(usr)
return TRUE
// Manually clear and repopulate the alarm list.
@@ -65,6 +65,8 @@
var/alarms = list()
for(var/obj/structure/machinery/alarm/alarm in monitored_alarms)
+ if(!alarm.rcon_setting)
+ continue
alarms += list(list(
"deck" = alarm.alarm_area.horizon_deck,
"dept" = alarm.alarm_area.department,
@@ -77,4 +79,3 @@
data["alarms"] = alarms
return data
-
diff --git a/code/modules/modular_computers/file_system/programs/engineering/lightingcontrol.dm b/code/modules/modular_computers/file_system/programs/engineering/lightingcontrol.dm
index 21fc2d4aa53..7f6dc3333a8 100644
--- a/code/modules/modular_computers/file_system/programs/engineering/lightingcontrol.dm
+++ b/code/modules/modular_computers/file_system/programs/engineering/lightingcontrol.dm
@@ -23,7 +23,9 @@
..()
lstate = SSnightlight.is_active() ? "dark" : "full"
-/datum/computer_file/program/lighting_control/proc/update_lighting()
+/datum/computer_file/program/lighting_control/proc/update_lighting(var/new_context = context, var/new_lstate = lstate)
+ context = new_context
+ lstate = new_lstate
// whether to only select areas explicitly marked for nightlighting
var/wl_only = context == "all" ? 0 : 1
@@ -48,7 +50,8 @@
lstate = params["mode"]
. = TRUE
if ("set")
- update_lighting()
+ update_lighting(params["context"] || context, params["mode"] || lstate)
+ . = TRUE
/datum/computer_file/program/lighting_control/ui_data(mob/user)
var/list/data = initial_data()
diff --git a/code/modules/modular_computers/file_system/programs/engineering/rcon.dm b/code/modules/modular_computers/file_system/programs/engineering/rcon.dm
index 54a3aa6213a..764093378b8 100644
--- a/code/modules/modular_computers/file_system/programs/engineering/rcon.dm
+++ b/code/modules/modular_computers/file_system/programs/engineering/rcon.dm
@@ -14,7 +14,6 @@
color = LIGHT_COLOR_YELLOW
tgui_id = "RCON"
tgui_theme = "hephaestus"
- ui_auto_update = FALSE
/datum/computer_file/program/rcon_console/New()
..()
diff --git a/code/modules/modular_computers/file_system/programs/security/camera.dm b/code/modules/modular_computers/file_system/programs/security/camera.dm
index 4744ee06a01..ee2a08d1700 100644
--- a/code/modules/modular_computers/file_system/programs/security/camera.dm
+++ b/code/modules/modular_computers/file_system/programs/security/camera.dm
@@ -162,9 +162,10 @@
return FALSE
set_current(C)
- user.set_machine(ui_host())
+ var/obj/host = ui_host()
+ if(host)
+ user.set_machine(host)
user.reset_view(current_camera)
- check_eye(user)
if(ishuman(user))
var/mob/living/carbon/human/H = user
@@ -172,6 +173,22 @@
return TRUE
+/datum/computer_file/program/camera_monitor/check_eye(mob/user)
+ if(user.stat || user.blinded)
+ return -1
+ if(!current_camera)
+ return 0
+
+ var/viewflag = current_camera.check_eye(user)
+ if(viewflag < 0)
+ reset_current()
+ return viewflag
+
+/datum/computer_file/program/camera_monitor/grants_equipment_vision(mob/user)
+ if(user.stat || user.blinded || !current_camera)
+ return FALSE
+ return current_camera.grants_equipment_vision(user)
+
/datum/computer_file/program/camera_monitor/proc/set_current(var/obj/structure/machinery/camera/C)
if(current_camera == C)
return
@@ -192,44 +209,14 @@
L.tracking_cancelled()
current_camera = null
-/datum/computer_file/program/camera_monitor/check_eye(var/mob/user as mob)
- var/obj/item/modular_computer/MC = user.machine
- if(istype(MC) && ui_host() == MC)
- if(!MC.working || user.blinded || user.stat)
- user.unset_machine()
- return -1
- if(!current_camera)
- return 0
- var/viewflag = current_camera.check_eye(user)
- if ( viewflag < 0 ) //camera doesn't work
- reset_current()
- return viewflag
-
-/datum/computer_file/program/camera_monitor/grants_equipment_vision(mob/user)
- var/obj/item/modular_computer/MC = user.machine
- if(istype(MC) && ui_host() == MC)
- if(!MC.working || user.blinded || user.stat)
- return FALSE
- if(!current_camera)
- return FALSE
- var/viewflag = current_camera.check_eye(user)
- if (viewflag < 0) //camera doesn't work
- return FALSE
- return TRUE
-
// ERT Variant of the program
/datum/computer_file/program/camera_monitor/ert
filename = "ntcammon"
filedesc = "Advanced Camera Monitoring"
extended_desc = "This program allows remote access to station's camera system. Some camera networks may have additional access requirements. This version has an integrated database with additional encrypted keys."
size = 14
- nanomodule_path = /datum/nano_module/camera_monitor/ert
available_on_ntnet = FALSE
-/datum/nano_module/camera_monitor/ert
- name = "Advanced Camera Monitoring Program"
- available_to_ai = FALSE
-
// The ERT variant has access to ERT and crescent cams, but still checks for accesses. ERT members should be able to use it.
/datum/computer_file/program/camera_monitor/ert/modify_networks_list(var/list/networks)
..()
@@ -242,13 +229,9 @@
filedesc = "Journalism Camera Monitoring"
extended_desc = "This program allows remote access to station's camera system. Some camera networks may have additional access requirements. This version has has a connection to news networks."
size = 2
- nanomodule_path = /datum/nano_module/camera_monitor/news
required_access_download = null
usage_flags = PROGRAM_ALL
-/datum/nano_module/camera_monitor/news
- name = "Journalism Camera Monitoring Program"
-
/datum/computer_file/program/camera_monitor/news/modify_networks_list(var/list/networks)
networks = list()
networks.Add(list(list("tag" = NETWORK_NEWS, "has_access" = 1)))
diff --git a/code/modules/modular_computers/file_system/programs/security/penalmechs.dm b/code/modules/modular_computers/file_system/programs/security/penalmechs.dm
index c7d137bcd98..2def9c74337 100644
--- a/code/modules/modular_computers/file_system/programs/security/penalmechs.dm
+++ b/code/modules/modular_computers/file_system/programs/security/penalmechs.dm
@@ -128,7 +128,6 @@
set_current(C)
user.machine = ui_host()
user.reset_view(current_camera)
- check_eye(user)
return TRUE
/datum/computer_file/program/penal_mechs/proc/set_current(var/obj/structure/machinery/camera/C)
@@ -150,11 +149,3 @@
if(istype(L))
L.tracking_cancelled()
current_camera = null
-
-/datum/computer_file/program/penal_mechs/check_eye(var/mob/user)
- if(!current_camera)
- return FALSE
- var/viewflag = current_camera.check_eye(user)
- if(viewflag < 0) //camera doesn't work
- reset_current()
- return viewflag
diff --git a/code/modules/modular_computers/file_system/programs/system/file_browser.dm b/code/modules/modular_computers/file_system/programs/system/file_browser.dm
index 336156123ec..0d993f0e4a4 100644
--- a/code/modules/modular_computers/file_system/programs/system/file_browser.dm
+++ b/code/modules/modular_computers/file_system/programs/system/file_browser.dm
@@ -12,6 +12,7 @@
undeletable = TRUE
tgui_id = "FileManager"
var/open_file
+ var/open_file_is_usb = FALSE
var/error
/datum/computer_file/program/filemanager/ui_data(mob/user)
@@ -27,7 +28,11 @@
if(!computer || !computer.hard_drive)
data["error"] = "I/O ERROR: Unable to access hard drive."
else
- HDD = computer.hard_drive
+ HDD = open_file_is_usb ? computer.portable_drive : computer.hard_drive
+ data["file_is_usb"] = open_file_is_usb
+ if(!HDD)
+ data["error"] = "I/O ERROR: Unable to open file."
+ return data
file = HDD.find_file_by_name(open_file)
script = file
if(!istype(file))
@@ -45,6 +50,7 @@
else
data["scriptdata"] = null
data["filedata"] = null
+ data["file_is_usb"] = FALSE
data["filename"] = null
HDD = computer.hard_drive
RHDD = computer.portable_drive
@@ -85,10 +91,23 @@
return
if(F.can_access_file(usr))
open_file = params["PRG_openfile"]
+ open_file_is_usb = FALSE
+
+ if("PRG_usbopenfile")
+ . = TRUE
+ var/obj/item/computer_hardware/hard_drive/RHDD = computer.portable_drive
+ if(!RHDD)
+ return
+ var/datum/computer_file/F = RHDD.find_file_by_name(params["PRG_usbopenfile"])
+ if(!F)
+ return
+ if(F.can_access_file(usr))
+ open_file = params["PRG_usbopenfile"]
+ open_file_is_usb = TRUE
if("PRG_newtextfile")
. = TRUE
- var/newname = sanitize(input(usr, "Enter file name or leave blank to cancel:", "File rename"))
+ var/newname = sanitize_filename(tgui_input_text(usr, "Enter file name or leave blank to cancel:", "File rename"))
if(!newname)
return TRUE
var/obj/item/computer_hardware/hard_drive/HDD = computer.hard_drive
@@ -97,7 +116,9 @@
var/datum/computer_file/data/F = new/datum/computer_file/data()
F.filename = newname
F.filetype = "TXT"
- HDD.store_file(F)
+ if(!HDD.store_file(F))
+ qdel(F)
+ error = "I/O ERROR: Unable to create file. The hard drive may be full, read-only, or contain a conflicting file."
if("PRG_deletefile")
. = TRUE
@@ -122,6 +143,7 @@
if("PRG_closefile")
. = TRUE
open_file = null
+ open_file_is_usb = FALSE
error = null
if("PRG_clone")
@@ -132,8 +154,13 @@
var/datum/computer_file/F = HDD.find_file_by_name(params["PRG_clone"])
if(!F || !istype(F))
return TRUE
+ if(istype(F, /datum/computer_file/program))
+ error = "I/O ERROR: Executable programs cannot be cloned from File Manager."
+ return TRUE
var/datum/computer_file/C = F.clone(1)
- HDD.store_file(C)
+ if(!HDD.store_file(C))
+ qdel(C)
+ error = "I/O ERROR: Unable to clone file. The hard drive may be full, read-only, or contain a conflicting file."
if("PRG_rename")
. = TRUE
@@ -143,7 +170,7 @@
var/datum/computer_file/file = HDD.find_file_by_name(params["PRG_rename"])
if(!file || !istype(file))
return TRUE
- var/newname = sanitize(input(usr, "Enter new file name:", "File rename", file.filename))
+ var/newname = sanitize_filename(tgui_input_text(usr, "Enter new file name or leave blank to cancel:", "File rename", file.filename))
if(file && newname)
file.filename = newname
@@ -163,7 +190,7 @@
var/oldtext = html_decode(F.stored_data)
oldtext = replacetext(oldtext, "\[editorbr\]", "\n")
- var/newtext = sanitize(replacetext(input(usr, "Editing file [open_file]. You may use most tags used in paper formatting:", "Text Editor", oldtext) as message|null, "\n", "\[editorbr\]"), MAX_TEXTFILE_LENGTH)
+ var/newtext = sanitize_filename(replacetext(tgui_input_text(usr, "Editing file [open_file]. You may use most tags used in paper formatting:", "Text Editor", oldtext), "\n", "\[editorbr\]"), MAX_TEXTFILE_LENGTH)
if(!newtext)
return
@@ -185,10 +212,10 @@
return TRUE
var/obj/item/computer_hardware/hard_drive/HDD = computer.hard_drive
if(!HDD)
- return TRUE
+ return FALSE
if(!computer.nano_printer)
error = "Missing Hardware: Your computer does not have required hardware to complete this operation."
- return TRUE
+ return FALSE
var/datum/computer_file/data/F = HDD.find_file_by_name(open_file)
var/datum/computer_file/script/S = F
if(!F)
@@ -196,21 +223,21 @@
if(istype(F))
if(!computer.nano_printer.print_text(F.stored_data))
error = "Hardware error: Printer was unable to print the file. It may be out of paper."
- return TRUE
+ return FALSE
else if(istype(S))
if(!computer.nano_printer.print_text(S.code))
error = "Hardware error: Printer was unable to print the file. It may be out of paper."
- return TRUE
+ return FALSE
if("PRG_copytousb")
. = TRUE
var/obj/item/computer_hardware/hard_drive/HDD = computer.hard_drive
var/obj/item/computer_hardware/hard_drive/portable/RHDD = computer.portable_drive
if(!HDD || !RHDD)
- return TRUE
+ return FALSE
var/datum/computer_file/F = HDD.find_file_by_name(params["PRG_copytousb"])
if(!F || !istype(F))
- return TRUE
+ return FALSE
var/is_usr_tech_support = FALSE
if(ishuman(usr))
var/mob/living/carbon/human/H = usr
@@ -270,7 +297,7 @@
return
if(F.password)
return
- F.password = sanitize(input(usr, "Enter an encryption key:", "Encrypt File"))
+ F.password = sanitize_filename(tgui_input_text(usr, "Enter an encryption key:", "Encrypt File"))
if("PRG_decrypt")
. = TRUE
diff --git a/code/modules/multiz/movement.dm b/code/modules/multiz/movement.dm
index 7545f3b0fba..d548bbc22e3 100644
--- a/code/modules/multiz/movement.dm
+++ b/code/modules/multiz/movement.dm
@@ -782,9 +782,6 @@
/mob/fall_get_specs(levels_fallen)
return list(mob_size, throw_range)
-/mob/living
- var/atom/movable/z_observer/z_eye
-
/atom/movable/z_observer
name = ""
simulated = FALSE
diff --git a/code/modules/nano/modules/nano_module.dm b/code/modules/nano/modules/nano_module.dm
deleted file mode 100644
index 9cf703ec89c..00000000000
--- a/code/modules/nano/modules/nano_module.dm
+++ /dev/null
@@ -1,63 +0,0 @@
-/datum/nano_module
- var/name
- var/datum/host
- var/available_to_ai = TRUE
- var/datum/topic_manager/topic_manager
-
-/datum/nano_module/New(var/datum/host, var/topic_manager)
- ..()
- src.host = host
- src.topic_manager = topic_manager
-
-/datum/nano_module/Destroy()
- host = null
- topic_manager = null
- return ..()
-
-/datum/nano_module/ui_host()
- return host ? host.ui_host() : src
-
-/datum/nano_module/proc/can_still_topic(var/datum/ui_state/state = GLOB.default_state)
- return CanUseTopic(usr, state) == STATUS_INTERACTIVE
-
-/datum/nano_module/proc/check_eye(var/mob/user)
- return -1
-
-/datum/nano_module/proc/grants_equipment_vision(var/mob/user)
- return FALSE
-
-/datum/nano_module/proc/check_access(var/mob/user, var/access)
- if(!access)
- return 1
-
- if(!istype(user))
- return 0
-
- var/obj/item/card/id/I = user.GetIdCard()
- if(!I)
- return 0
-
- if(access in I.access)
- return 1
-
- return 0
-
-/datum/nano_module/Topic(href, href_list)
- if(topic_manager && topic_manager.Topic(href, href_list))
- return TRUE
- . = ..()
-
-/datum/nano_module/nano_host()
- return host ? host : src
-
-/datum/nano_module/proc/get_host_z()
- return GET_Z(nano_host())
-
-/datum/proc/initial_data()
- return list()
-
-/datum/proc/update_layout()
- return FALSE
-
-/datum/proc/nano_host()
- return src
diff --git a/code/modules/nano/nanoexternal.dm b/code/modules/nano/nanoexternal.dm
deleted file mode 100644
index 23987d4af75..00000000000
--- a/code/modules/nano/nanoexternal.dm
+++ /dev/null
@@ -1,40 +0,0 @@
-// This file contains all Nano procs/definitions for external classes/objects
-
-/**
- * Called when a Nano UI window is closed
- * This is how Nano handles closed windows
- * It must be a verb so that it can be called using winset
- */
-/client/verb/nanoclose(var/uiref as text)
- set hidden = 1 // hide this verb from the user's panel
- set name = "nanoclose"
-
- var/datum/nanoui/ui = locate(uiref)
-
- if (istype(ui))
- ui.close()
-
- if(ui.ref)
- var/href = "close=1"
- src.Topic(href, params2list(href), ui.ref) // this will direct to the atom's Topic() proc via client.Topic()
- else if (ui.on_close_logic)
- // no atomref specified (or not found)
- // so just reset the user mob's machine var
- if(src && src.mob)
- src.mob.unset_machine()
-
-/**
- * The ui_interact proc is used to open and update Nano UIs
- * If ui_interact is not used then the UI will not update correctly
- * ui_interact is currently defined for /atom/movable
- *
- * @param user /mob The mob who is interacting with this ui
- * @param ui_key string A string key to use for this ui. Allows for multiple unique uis on one obj/mob (defaut value "main")
- * @param ui /datum/nanoui This parameter is passed by the nanoui process() proc when updating an open ui
- * @param force_open boolean Force the UI to (re)open, even if it's already open
- */
-/datum/proc/nanoui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/nanoui/master_ui = null, var/datum/ui_state/state = GLOB.default_state)
- return
-
-// Used by the Nano UI Manager (/datum/SSnanoui) to track UIs opened by this mob
-/mob/var/list/open_nanouis = list()
diff --git a/code/modules/nano/nanomapgen.dm b/code/modules/nano/nanomapgen.dm
deleted file mode 100644
index 90088c1d624..00000000000
--- a/code/modules/nano/nanomapgen.dm
+++ /dev/null
@@ -1,90 +0,0 @@
-// This file is a modified version of https://raw2.github.com/Baystation12/OldCode-BS12/master/code/TakePicture.dm
-
-#define NANOMAP_ICON_SIZE 4
-#define NANOMAP_MAX_ICON_DIMENSION 1024
-
-#define NANOMAP_TILES_PER_IMAGE (NANOMAP_MAX_ICON_DIMENSION / NANOMAP_ICON_SIZE)
-
-#define NANOMAP_TERMINALERR 5
-#define NANOMAP_INPROGRESS 2
-#define NANOMAP_BADOUTPUT 2
-#define NANOMAP_SUCCESS 1
-#define NANOMAP_WATCHDOGSUCCESS 4
-#define NANOMAP_WATCHDOGTERMINATE 3
-
-
-//Call these procs to dump your world to a series of image files (!!)
-//NOTE: Does not explicitly support non 32x32 icons or stuff with large pixel_* values, so don't blame me if it doesn't work perfectly
-
-/client/proc/nanomapgen_DumpImage()
- set name = "Generate NanoUI Map"
- set category = "Server"
-
- if(holder)
- nanomapgen_DumpTile(1, 1, text2num(input(usr,"Enter the Z level to generate")))
-
-/client/proc/nanomapgen_DumpTile(var/startX = 1, var/startY = 1, var/currentZ = 1, var/endX = -1, var/endY = -1)
-
- if (endX < 0 || endX > world.maxx)
- endX = world.maxx
-
- if (endY < 0 || endY > world.maxy)
- endY = world.maxy
-
- if (currentZ < 0 || currentZ > world.maxz)
- to_chat(usr, "NanoMapGen: ERROR: currentZ ([currentZ]) must be between 1 and [world.maxz] ")
-
- sleep(3)
- return NANOMAP_TERMINALERR
-
- if (startX > endX)
- to_chat(usr, "NanoMapGen: ERROR: startX ([startX]) cannot be greater than endX ([endX]) ")
-
- sleep(3)
- return NANOMAP_TERMINALERR
-
- if (startY > endX)
- to_chat(usr, "NanoMapGen: ERROR: startY ([startY]) cannot be greater than endY ([endY]) ")
- sleep(3)
- return NANOMAP_TERMINALERR
-
- var/icon/Tile = icon(file("nano/mapbase1024.png"))
- if (Tile.Width() != NANOMAP_MAX_ICON_DIMENSION || Tile.Height() != NANOMAP_MAX_ICON_DIMENSION)
- log_world("ERROR: NanoMapGen: ERROR: BASE IMAGE DIMENSIONS ARE NOT [NANOMAP_MAX_ICON_DIMENSION]x[NANOMAP_MAX_ICON_DIMENSION] ")
- sleep(3)
- return NANOMAP_TERMINALERR
-
- LOG_DEBUG("NanoMapGen: GENERATE MAP ([startX],[startY],[currentZ]) to ([endX],[endY],[currentZ]) ")
- to_chat(usr, "NanoMapGen: GENERATE MAP ([startX],[startY],[currentZ]) to ([endX],[endY],[currentZ]) ")
-
- var/count = 0;
- for(var/WorldX = startX, WorldX <= endX, WorldX++)
- for(var/WorldY = startY, WorldY <= endY, WorldY++)
-
- var/atom/Turf = locate(WorldX, WorldY, currentZ)
-
- var/icon/TurfIcon = new(Turf.icon, Turf.icon_state, dir = Turf.dir)
- TurfIcon.Scale(NANOMAP_ICON_SIZE, NANOMAP_ICON_SIZE)
-
- Tile.Blend(TurfIcon, ICON_OVERLAY, ((WorldX - 1) * NANOMAP_ICON_SIZE), ((WorldY - 1) * NANOMAP_ICON_SIZE))
-
- count++
-
- if (count % 8000 == 0)
- LOG_DEBUG("NanoMapGen: [count] tiles done ")
- sleep(1)
-
- var/mapFilename = "new_Aurora[currentZ]"
-
- LOG_DEBUG("NanoMapGen: sending [mapFilename] to client ")
-
- usr << browse(Tile, "window=picture;file=[mapFilename];display=0")
-
- LOG_DEBUG("NanoMapGen: Done. ")
-
- to_chat(usr, "NanoMapGen: Done. File [mapFilename] uploaded to your cache. ")
-
- if (Tile.Width() != NANOMAP_MAX_ICON_DIMENSION || Tile.Height() != NANOMAP_MAX_ICON_DIMENSION)
- return NANOMAP_BADOUTPUT
-
- return NANOMAP_SUCCESS
diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm
deleted file mode 100644
index c441af104f2..00000000000
--- a/code/modules/nano/nanoui.dm
+++ /dev/null
@@ -1,537 +0,0 @@
-/**********************************************************
-NANO UI FRAMEWORK
-
-nanoui class (or whatever Byond calls classes)
-
-nanoui is used to open and update nano browser uis
-**********************************************************/
-
-/datum/nanoui
- // the user who opened this ui
- var/mob/user
- // the object this ui "belongs" to
- var/datum/src_object
- // the title of this ui
- var/title
- // the key of this ui, this is to allow multiple (different) uis for each src_object
- var/ui_key
- // window_id is used as the window name/identifier for browse and onclose
- var/window_id
- // the browser window width
- var/width = 0
- // the browser window height
- var/height = 0
- // whether to use extra logic when window closes
- var/on_close_logic = 1
- // an extra ref to use when the window is closed, usually null
- var/atom/ref = null
- // options for modifying window behaviour
- var/window_options = "focus=0;can_close=1;can_minimize=1;can_maximize=0;can_resize=1;titlebar=1;" // window option is set using window_id
- // the list of stylesheets to apply to this ui
- var/list/stylesheets = list()
- // the list of javascript scripts to use for this ui
- var/list/scripts = list()
- // a list of templates which can be used with this ui
- var/templates[0]
- // the layout key for this ui (this is used on the frontend, leave it as "default" unless you know what you're doing)
- var/layout_key = "default"
- // this sets whether to re-render the ui layout with each update (default 0, turning on will break the map ui if it's in use)
- var/auto_update_layout = 0
- // this sets whether to re-render the ui content with each update (default 1)
- var/auto_update_content = 1
- // the default state to use for this ui (this is used on the frontend, leave it as "default" unless you know what you're doing)
- var/state_key = "default"
- // show the map ui, this is used by the default layout
- var/show_map = 0
- // the map z level to display
- var/map_z_level = 3
- // initial data, containing the full data structure, must be sent to the ui (the data structure cannot be extended later on)
- var/list/initial_data[0]
- // set to 1 to update the ui automatically every master_controller tick
- var/is_auto_updating = 0
- // the current status/visibility of the ui
- var/status = STATUS_INTERACTIVE
-
- // Relationship between a master interface and its children. Used in update_status
- var/datum/nanoui/master_ui
- var/list/datum/nanoui/children = list()
- var/datum/ui_state/state = null
-
-/**
- * Create a new nanoui instance.
- *
- * @param nuser /mob The mob who has opened/owns this ui
- * @param nsrc_object /obj|/mob The obj or mob which this ui belongs to
- * @param nui_key string A string key to use for this ui. Allows for multiple unique uis on one src_oject
- * @param ntemplate string The filename of the template file from /nano/templates (e.g. "my_template.tmpl")
- * @param ntitle string The title of this ui
- * @param nwidth int the width of the ui window
- * @param nheight int the height of the ui window
- * @param nref /atom A custom ref to use if "on_close_logic" is set to 1
- *
- * @return /nanoui new nanoui object
- */
-/datum/nanoui/New(nuser, nsrc_object, nui_key, ntemplate_filename, ntitle = 0, nwidth = 0, nheight = 0, var/atom/nref = null, var/datum/nanoui/master_ui = null, var/datum/ui_state/state = GLOB.default_state)
- user = nuser
- src_object = nsrc_object
- ui_key = nui_key
- window_id = "[ui_key][REF(src_object)]"
-
- src.master_ui = master_ui
- if(master_ui)
- master_ui.children += src
- src.state = state
-
- // add the passed template filename as the "main" template, this is required
- add_template("main", ntemplate_filename)
-
- if (ntitle)
- title = sanitize(ntitle)
- if (nwidth)
- width = nwidth
- if (nheight)
- height = nheight
- if (nref)
- ref = nref
-
- add_common_assets()
-
- var/datum/asset/assets = get_asset_datum(/datum/asset/nanoui)
- assets.send(user, assets)
-
-
-
-/**
- * Use this proc to add assets which are common to (and required by) all nano uis
- *
- * @return nothing
- */
-/datum/nanoui/proc/add_common_assets()
- add_script("https://cdnjs.cloudflare.com/ajax/libs/jquery/1.10.2/jquery.min.js")
- add_script("https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.0/jquery-ui.min.js")
- add_script("libraries.min.js") // A JS file comprising of jQuery, doT.js and jQuery Timer libraries (compressed together)
- add_script("nano_utility.js") // The NanoUtility JS, this is used to store utility functions.
- add_script("nano_template.js") // The NanoTemplate JS, this is used to render templates.
- add_script("nano_state_manager.js") // The NanoStateManager JS, it handles updates from the server and passes data to the current state
- add_script("nano_state.js") // The NanoState JS, this is the base state which all states must inherit from
- add_script("nano_state_default.js") // The NanoStateDefault JS, this is the "default" state (used by all UIs by default), which inherits from NanoState
- add_script("nano_base_callbacks.js") // The NanoBaseCallbacks JS, this is used to set up (before and after update) callbacks which are common to all UIs
- add_script("nano_base_helpers.js") // The NanoBaseHelpers JS, this is used to set up template helpers which are common to all UIs
- add_stylesheet("shared.css") // this CSS sheet is common to all UIs
- add_stylesheet("icons.css") // this CSS sheet is common to all UIs
-
-/**
- * Set the current status (also known as visibility) of this ui.
- *
- * @param state int The status to set, see the defines at the top of this file
- * @param push_update int (bool) Push an update to the ui to update it's status (an update is always sent if the status has changed to red (0))
- *
- * @return nothing
- */
-/datum/nanoui/proc/set_status(state, push_update)
- if (state != status) // Only update if it is different
- if (status == STATUS_DISABLED)
- status = state
- if (push_update)
- update()
- else
- status = state
- if (push_update || status == 0)
- push_data(null, 1) // Update the UI, force the update in case the status is 0, data is null so that previous data is used
-
-/**
- * Update the status (visibility) of this ui based on the user's status
- *
- * @param push_update int (bool) Push an update to the ui to update it's status. This is set to 0/false if an update is going to be pushed anyway (to avoid unnessary updates)
- *
- * @return nothing
- */
-/datum/nanoui/proc/update_status(var/push_update = 0)
- var/obj/host = src_object.ui_host()
- var/new_status = host.CanUseTopic(user, state)
- if(master_ui)
- new_status = min(new_status, master_ui.status)
-
- set_status(new_status, push_update)
- if(new_status == STATUS_CLOSE)
- close()
-
-/**
- * Set the ui to auto update (every master_controller tick)
- *
- * @param state int (bool) Set auto update to 1 or 0 (true/false)
- *
- * @return nothing
- */
-/datum/nanoui/proc/set_auto_update(nstate = 1)
- is_auto_updating = nstate
-
-/**
- * Set the initial data for the ui. This is vital as the data structure set here cannot be changed when pushing new updates.
- *
- * @param data /list The list of data for this ui
- *
- * @return nothing
- */
-/datum/nanoui/proc/set_initial_data(list/data)
- initial_data = data
-
-/**
- * Get config data to sent to the ui.
- *
- * @return /list config data
- */
-/datum/nanoui/proc/get_config_data()
- var/name = "[src_object]"
- name = sanitize(name)
- var/list/config_data = list(
- "title" = title,
- "srcObject" = list("name" = name),
- "stateKey" = state_key,
- "status" = status,
- "autoUpdateLayout" = auto_update_layout,
- "autoUpdateContent" = auto_update_content,
- "showMap" = show_map,
- "mapName" = "Aurora",
- "mapZLevel" = map_z_level,
- "mapZLevels" = SSatlas.current_map.map_levels,
- "user" = list("name" = user.name)
- )
- return config_data
-
-/**
- * Get data to sent to the ui.
- *
- * @param data /list The list of general data for this ui (can be null to use previous data sent)
- *
- * @return /list data to send to the ui
- */
-/datum/nanoui/proc/get_send_data(var/list/data)
- var/list/config_data = get_config_data()
-
- var/list/send_data = list("config" = config_data)
-
- if (!isnull(data))
- send_data["data"] = data
-
- return send_data
-
-/**
- * Set the browser window options for this ui
- *
- * @param nwindow_options string The new window options
- *
- * @return nothing
- */
-/datum/nanoui/proc/set_window_options(nwindow_options)
- window_options = nwindow_options
-
-/**
- * Add a CSS stylesheet to this UI
- * These must be added before the UI has been opened, adding after that will have no effect
- *
- * @param file string The name of the CSS file from /nano/css (e.g. "my_style.css")
- *
- * @return nothing
- */
-/datum/nanoui/proc/add_stylesheet(file)
- stylesheets.Add(file)
-
-/**
- * Add a JavsScript script to this UI
- * These must be added before the UI has been opened, adding after that will have no effect
- *
- * @param file string The name of the JavaScript file from /nano/js (e.g. "my_script.js")
- *
- * @return nothing
- */
-/datum/nanoui/proc/add_script(file)
- scripts.Add(file)
-
-/**
- * Add a template for this UI
- * Templates are combined with the data sent to the UI to create the rendered view
- * These must be added before the UI has been opened, adding after that will have no effect
- *
- * @param key string The key which is used to reference this template in the frontend
- * @param filename string The name of the template file from /nano/templates (e.g. "my_template.tmpl")
- *
- * @return nothing
- */
-/datum/nanoui/proc/add_template(key, filename)
- templates[key] = filename
-
-/**
- * Set the layout key for use in the frontend Javascript
- * The layout key is the basic layout key for the page
- * Two files are loaded on the client based on the layout key varable:
- * -> a template in /nano/templates with the filename "layout_.tmpl
- * -> a CSS stylesheet in /nano/css with the filename "layout_.css
- *
- * @param nlayout string The layout key to use
- *
- * @return nothing
- */
-/datum/nanoui/proc/set_layout_key(nlayout_key)
- layout_key = lowertext(nlayout_key)
-
-/**
- * Set the ui to update the layout (re-render it) on each update, turning this on will break the map ui (if it's being used)
- *
- * @param state int (bool) Set update to 1 or 0 (true/false) (default 0)
- *
- * @return nothing
- */
-/datum/nanoui/proc/set_auto_update_layout(nstate)
- auto_update_layout = nstate
-
-/**
- * Set the ui to update the main content (re-render it) on each update
- *
- * @param state int (bool) Set update to 1 or 0 (true/false) (default 1)
- *
- * @return nothing
- */
-/datum/nanoui/proc/set_auto_update_content(nstate)
- auto_update_content = nstate
-
-/**
- * Set the state key for use in the frontend Javascript
- *
- * @param nstate_key string The key of the state to use
- *
- * @return nothing
- */
-/datum/nanoui/proc/set_state_key(nstate_key)
- state_key = nstate_key
-
-/**
- * Toggle showing the map ui
- *
- * @param nstate_key boolean 1 to show map, 0 to hide (default is 0)
- *
- * @return nothing
- */
-/datum/nanoui/proc/set_show_map(nstate)
- show_map = nstate
-
-/**
- * Toggle showing the map ui
- *
- * @param nstate_key boolean 1 to show map, 0 to hide (default is 0)
- *
- * @return nothing
- */
-/datum/nanoui/proc/set_map_z_level(nz)
- map_z_level = nz
-
-/**
- * Set whether or not to use the "old" on close logic (mainly unset_machine())
- *
- * @param state int (bool) Set on_close_logic to 1 or 0 (true/false)
- *
- * @return nothing
- */
-/datum/nanoui/proc/use_on_close_logic(state)
- on_close_logic = state
-
-/**
- * Return the HTML for this UI
- *
- * @return string HTML for the UI
- */
-/datum/nanoui/proc/get_html()
-
- // before the UI opens, add the layout files based on the layout key
- add_stylesheet("layout_[layout_key].css")
- add_template("layout", "layout_[layout_key].tmpl")
-
- var/head_content = ""
-
- for (var/filename in scripts)
- head_content += " "
-
- for (var/filename in stylesheets)
- head_content += " "
-
- var/template_data_json = "{}" // An empty JSON object
- if (templates.len > 0)
- template_data_json = strip_improper(json_encode(templates))
-
- var/list/send_data = get_send_data(initial_data)
- var/initial_data_json = replacetext(replacetext(json_encode(send_data), """, """), "'", "'")
- initial_data_json = strip_improper(initial_data_json);
-
- var/url_parameters_json = json_encode(list("src" = "[REF(src)]"))
-
- return {"
-
-
-
-
-
- [head_content]
-
-
-
-
-
-
-
JAVASCRIPT REQUIRED
-
Your Internet Explorer's Javascript is disabled (or broken).
- Enable Javascript and then open this UI again.
-
-
-
-
- "}
-
-/**
- * Open this UI
- *
- * @return nothing
- */
-/datum/nanoui/proc/open()
- if(!user.client)
- return
-
- // An attempted fix to UIs sometimes locking up spamming runtime errors due to src_object being null for whatever reason.
- // This hard-deletes the UI, preventing the device that uses the UI from being locked up permanently.
- if(!src_object)
- del(src)
-
- var/window_size = ""
- if (width && height)
- window_size = "size=[width]x[height];"
- update_status(0)
- if(status == STATUS_CLOSE)
- return
-
- user << browse(get_html(), "window=[window_id];[window_size][window_options]")
- winset(user, "mapwindow.map", "focus=true") // return keyboard focus to map
- on_close_winset()
- //onclose(user, window_id)
- SSnanoui.ui_opened(src)
-
-/**
- * Reinitialise this UI, potentially with a different template and/or initial data
- *
- * @return nothing
- */
-/datum/nanoui/proc/reinitialise(template, new_initial_data)
- if(template)
- add_template("main", template)
- if(new_initial_data)
- set_initial_data(new_initial_data)
- open()
-
-/**
- * Close this UI
- *
- * @return nothing
- */
-/datum/nanoui/proc/close()
- is_auto_updating = 0
- SSnanoui.ui_closed(src)
- user << browse(null, "window=[window_id]")
- for(var/datum/nanoui/child in children)
- child.close()
- children.Cut()
- state = null
- master_ui = null
-
- if(istype(user))
- user.unset_machine()
-
-/**
- * Set the UI window to call the nanoclose verb when the window is closed
- * This allows Nano to handle closed windows
- *
- * @return nothing
- */
-/datum/nanoui/proc/on_close_winset()
- if(!user.client)
- return
- var/params = "[REF(src)]"
-
- winset(user, window_id, "on-close=\"nanoclose [params]\"")
-
-/**
- * Push data to an already open UI window
- *
- * @return nothing
- */
-/datum/nanoui/proc/push_data(data, force_push = 0)
- update_status(0)
- if (status == STATUS_DISABLED && !force_push)
- return // Cannot update UI, no visibility
-
- var/list/send_data = get_send_data(data)
-
- //to_chat(user, list2json(data) // used for debugging)
- send_output(user, list2params(list(json_encode(send_data))),"[window_id].browser:receiveUpdateData")
-
-/**
- * This Topic() proc is called whenever a user clicks on a link within a Nano UI
- * If the UI status is currently STATUS_INTERACTIVE then call the src_object Topic()
- * If the src_object Topic() returns 1 (true) then update all UIs attached to src_object
- *
- * @return nothing
- */
-/datum/nanoui/Topic(href, href_list)
- update_status(0) // update the status
- if (status != STATUS_INTERACTIVE || user != usr) // If UI is not interactive or usr calling Topic is not the UI user
- return
-
- // This is used to toggle the nano map ui
- var/map_update = 0
- if(href_list["showMap"])
- set_show_map(text2num(href_list["showMap"]))
- map_update = 1
-
- if(href_list["mapZLevel"])
- var/map_z = (text2num(href_list["mapZLevel"]))
- if(map_z in SSatlas.current_map.map_levels)
- set_map_z_level(map_z)
- map_update = 1
- else
- return
-
- if ((src_object && src_object.Topic(href, href_list, state)) || map_update)
- SSnanoui.update_uis(src_object) // update all UIs attached to src_object
-
-/**
- * Process this UI, updating the entire UI or just the status (aka visibility)
- * This process proc is called by the master_controller
- *
- * @param update string For this UI to update
- *
- * @return nothing
- */
-/datum/nanoui/process(update = 0)
- if (QDELETED(src_object) || QDELETED(user))
- close()
- return
-
- if (status && (update || is_auto_updating))
- update() // Update the UI (update_status() is called whenever a UI is updated)
- else
- update_status(1) // Not updating UI, so lets check here if status has changed
-
-/**
- * Update the UI
- *
- * @return nothing
- */
-/datum/nanoui/proc/update(var/force_open = 0)
- src_object.ui_interact(user, ui_key, src, force_open, master_ui, state)
diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm
index ef21e37f1fa..a6e31aeb2c0 100644
--- a/code/modules/organs/blood.dm
+++ b/code/modules/organs/blood.dm
@@ -2,8 +2,6 @@
BLOOD SYSTEM
****************************************************/
-/mob/living/carbon/human/var/datum/reagents/vessel //Container for blood and BLOOD ONLY. Do not transfer other chems here.
-
//Initializes blood vessels
/mob/living/carbon/human/proc/make_blood()
if(vessel)
diff --git a/code/modules/organs/internal/species/machine/_generic.dm b/code/modules/organs/internal/species/machine/_generic.dm
index 00e5c71a49e..bb6e4df0934 100644
--- a/code/modules/organs/internal/species/machine/_generic.dm
+++ b/code/modules/organs/internal/species/machine/_generic.dm
@@ -62,6 +62,11 @@
electronics.heal_damage(electronics.max_integrity)
integrity_event_cooldown = initial(integrity_event_cooldown)
+/obj/item/organ/internal/machine/heal_damage(amount)
+ . = ..()
+ if(initial(diagnostics_suite_visible) && !diagnostics_suite_visible)
+ diagnostics_suite_visible = TRUE
+
/obj/item/organ/internal/machine/process(seconds_per_tick)
..()
if(!owner)
@@ -107,11 +112,17 @@
/obj/item/organ/internal/machine/emp_act(severity)
. = ..()
+ var/damage_taken
switch(severity)
if(EMP_HEAVY)
- take_internal_damage(4 * emp_coeff)
+ damage_taken = 15 * emp_coeff
+ take_internal_damage(damage_taken)
if(EMP_LIGHT)
- take_internal_damage(2 * emp_coeff)
+ damage_taken = 10 * emp_coeff
+ take_internal_damage(damage_taken)
+
+ if(damage_taken)
+ SEND_SIGNAL(owner, COMSIG_DAMAGE_TO_ENDOSKELETON, damage_taken)
/**
* Called when prefs are synced to the organ to set the proper synthetic organ preset. Turns the pref into a preset singleton.
diff --git a/code/modules/organs/internal/species/machine/access_port.dm b/code/modules/organs/internal/species/machine/access_port.dm
index 62001dfa307..303da885afe 100644
--- a/code/modules/organs/internal/species/machine/access_port.dm
+++ b/code/modules/organs/internal/species/machine/access_port.dm
@@ -77,11 +77,13 @@
SIGNAL_HANDLER
if(internal_port)
crash_with("Insert_item with [jack] on access port called with [internal_port] of [owner] already present!")
+ return FALSE
internal_port = jack
jack.forceMove(src)
RegisterSignal(internal_port, COMSIG_QDELETING, PROC_REF(clear_port))
to_chat(owner, SPAN_MACHINE_WARNING("Internal firewall notice: [internal_port] inserted into [src]."))
+ return TRUE
/**
* This proc is called whenever the access cable is, for some reason, qdeleted (like with an explosion).
@@ -111,9 +113,16 @@
/obj/item/organ/internal/machine/access_port/insert_cable(obj/item/access_cable/cable, mob/user)
. = ..()
- insert_item(cable)
+ if (!insert_item(cable))
+ return
+
cable.create_cable(owner)
+/obj/item/organ/internal/machine/access_port/remove_cable(obj/item/access_cable/cable)
+ . = ..()
+ if(internal_port == cable)
+ clear_port()
+
/obj/item/organ/internal/machine/access_port/cable_interact(obj/item/access_cable/cable, mob/user)
var/obj/item/organ/internal/machine/internal_diagnostics/diagnostics_unit = owner.internal_organs_by_name[BP_DIAGNOSTICS_SUITE]
if(!diagnostics_unit)
@@ -277,6 +286,15 @@
user.visible_message(SPAN_WARNING("[user] tries to jack \the [src] into [human]'s access port..."))
if(!do_mob(user, human, 2 SECONDS))
return
+ // Re-check after the delay: port state may have changed during consent/wait window
+ var/obj/item/organ/internal/machine/access_port/fresh_port = human.internal_organs_by_name[BP_ACCESS_PORT]
+ if(!fresh_port)
+ to_chat(user, SPAN_WARNING("[human] no longer has an access port!"))
+ return
+ if(fresh_port.internal_port)
+ to_chat(user, SPAN_WARNING("The access port is now occupied by [fresh_port.internal_port]!"))
+ return
+ access_port = fresh_port
user.visible_message(SPAN_WARNING("[user] jacks \the [src] into [human]'s access port!"))
else
diff --git a/code/modules/organs/internal/species/machine/posibrain.dm b/code/modules/organs/internal/species/machine/posibrain.dm
index 58d4b6897be..bf1e8f715a0 100644
--- a/code/modules/organs/internal/species/machine/posibrain.dm
+++ b/code/modules/organs/internal/species/machine/posibrain.dm
@@ -7,7 +7,6 @@
parent_organ = BP_HEAD
vital = TRUE
robotic_sprite = FALSE
- diagnostics_suite_visible = FALSE
emp_coeff = 0.5
@@ -15,6 +14,9 @@
relative_size = 85
+ maxhealth = OBJECT_HEALTH_MEDIUM
+ should_use_health = TRUE
+
/// The type of 'robotic brain'. Must be a subtype of /obj/item/mmi/digital.
var/robotic_brain_type = /obj/item/mmi/digital/posibrain
/// The stored MMI object.
@@ -61,6 +63,13 @@
QDEL_NULL(sizzle)
return ..()
+/obj/item/organ/internal/machine/posibrain/on_death(damage, damage_flags, damage_type, armor_penetration, obj/weapon)
+ playsound(src, SFX_BREAK_GLASS, 100, 1)
+ visible_message(SPAN_DANGER("\The [src] shatters spectacularly into a million pieces!"))
+ to_chat(owner, SPAN_DANGER("Your vision goes dark as your posibrain is destroyed, and your consciousness ceases to be."))
+ new /obj/effect/decal/cleanable/blood/gibs/robot(get_turf(src))
+ . = ..()
+
/obj/item/organ/internal/machine/posibrain/rejuvenate()
. = ..()
SEND_SIGNAL(owner, COMSIG_SYNTH_ENDOSKELETON_FULL_REPAIR)
diff --git a/code/modules/organs/internal/species/machine/wireless_access.dm b/code/modules/organs/internal/species/machine/wireless_access.dm
index 39ee7808597..373eab72814 100644
--- a/code/modules/organs/internal/species/machine/wireless_access.dm
+++ b/code/modules/organs/internal/species/machine/wireless_access.dm
@@ -75,6 +75,11 @@
else
crash_with("Something terrible happened in synthetic internal PDA init! Loc: [loc]")
+/obj/item/modular_computer/handheld/pda/synthetic_internal/GetID()
+ var/obj/item/organ/internal/machine/wireless_access/access_point = loc
+ if(access_point.owner)
+ return access_point.owner.GetIdCard()
+
/obj/item/modular_computer/handheld/pda/synthetic_internal/Destroy()
if(access_point)
access_point.internal_pda = null
diff --git a/code/modules/organs/internal/species/tajara.dm b/code/modules/organs/internal/species/tajara.dm
index 061fa190cab..48bc6617370 100644
--- a/code/modules/organs/internal/species/tajara.dm
+++ b/code/modules/organs/internal/species/tajara.dm
@@ -2,14 +2,16 @@
name = "light sensitive eyes"
desc = "A pair of Tajaran eyes accustomed to the low light conditions of Adhomai."
icon = 'icons/obj/organs/tajara_organs.dmi'
- action_button_name = "Activate Low Light Vision"
- default_action_type = /datum/action/item_action/organ/night_eyes
+ action_button_name = list("Activate Low Light Vision", "Extend vision")
+ default_action_type = list(/datum/action/item_action/organ/night_eyes, /datum/action/item_action/organ/extended_eyes)
relative_size = 8
var/night_vision = FALSE
var/datum/client_color/vision_color = /datum/client_color/monochrome
var/datum/client_color/vision_mechanical_color = /datum/client_color/monochrome
var/eye_emote = "'s eyes dilate!"
var/allowed_model = PROSTHETIC_TESLA //what robotic model allows this eyes to use the night vision
+ var/cooldown = 30
+ zoom_out_message = "'s eyes widens as they stop focusing ahead."
/obj/item/organ/internal/eyes/night/Destroy()
disable_night_vision()
@@ -25,25 +27,49 @@
/obj/item/organ/internal/eyes/night/attack_self(var/mob/user)
. = ..()
+
+/obj/item/organ/internal/eyes/night/proc/ability_check()
if(owner.last_special > world.time)
- return
+ return FALSE
if(owner.stat || owner.paralysis || owner.stunned || owner.weakened)
- return
+ return FALSE
if(is_broken())
- return
+ return FALSE
if(status & ORGAN_ROBOT)
if(!robotic_check())
- return
+ return FALSE
+ owner.last_special = world.time + 20
+ return TRUE
+
+/obj/item/organ/internal/eyes/night/proc/night_vision()
+ if(attack_self())
+ return
+ if(!ability_check())
+ return
if(!night_vision)
enable_night_vision()
else
disable_night_vision()
- owner.last_special = world.time + 20
+/obj/item/organ/internal/eyes/night/proc/extended_vision()
+ if(attack_self())
+ return
+ if(!ability_check())
+ return
+ if(zoom)
+ owner.visible_message("[SPAN_BOLD("\The [owner]")]'s eyes widens as they stop focusing ahead.", range = 3)
+ else
+ owner.visible_message("[SPAN_BOLD("\The [owner]")]'s eyes begins to narrow as they focus on something in the distance.", range = 3)
+ if(!do_after(owner, 1.5 SECONDS))
+ owner.visible_message("[SPAN_BOLD("\The [owner]")]'s eyes stop focusing.", range = 3)
+ return
+ owner.visible_message("[SPAN_BOLD("\The [owner]")]'s eyes narrows as their lenses shift to focus ahead.", range = 3)
+
+ zoom(owner, 3, 7, FALSE, FALSE)
/obj/item/organ/internal/eyes/night/proc/robotic_check(var/mob/user)
if(robotize_type == allowed_model)
@@ -89,7 +115,7 @@
show_message = FALSE
break
if(show_message && eye_emote)
- owner.visible_message("[owner] [eye_emote]")
+ owner.visible_message("[SPAN_BOLD("\The [owner]")][eye_emote]")
night_vision = TRUE
if(can_change_invisible())
diff --git a/code/modules/organs/internal/species/vaurca.dm b/code/modules/organs/internal/species/vaurca.dm
index 5a2aa355f9f..aa38e35f771 100644
--- a/code/modules/organs/internal/species/vaurca.dm
+++ b/code/modules/organs/internal/species/vaurca.dm
@@ -3,6 +3,8 @@
desc = "A set of four vaurcaesian eyes, adapted to the low or no light tunnels of Sedantis."
icon = 'icons/obj/organs/vaurca_organs.dmi'
robotic_sprite = FALSE
+ action_button_name = list("Activate Low Light Vision")
+ default_action_type = list(/datum/action/item_action/organ/night_eyes)
vision_color = /datum/client_color/vaurca
vision_mechanical_color = /datum/client_color/monochrome
eye_emote = "'s eyes gently shift."
diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm
index 1f8acb92216..bab91b6c150 100644
--- a/code/modules/organs/organ_external.dm
+++ b/code/modules/organs/organ_external.dm
@@ -505,7 +505,7 @@
add_pain(0.6 * burn + 0.4 * brute)
if(owner)
- SEND_SIGNAL(owner, COMSIG_EXTERNAL_ORGAN_DAMAGE, burn + brute)
+ SEND_SIGNAL(owner, COMSIG_DAMAGE_TO_ENDOSKELETON, burn + brute)
//If there are still hurties to dispense
if (spillover)
@@ -594,13 +594,13 @@
if(W.w_class >= w_class && (dam_flags & DAMAGE_FLAG_EDGE))
edge_eligible = TRUE
- if(!blunt_eligible && edge_eligible && (brute >= max_damage / (DROPLIMB_THRESHOLD_EDGE + maim_bonus_to_add)))
+ if(!blunt_eligible && edge_eligible && (brute >= max_damage / max((DROPLIMB_THRESHOLD_EDGE + maim_bonus_to_add), 0.1)))
droplimb(0, DROPLIMB_EDGE)
- else if(burn >= max_damage / ((dam_flags & DAMAGE_FLAG_LASER ? DROPLIMB_THRESHOLD_DESTROY_PROJECTILE : DROPLIMB_THRESHOLD_DESTROY) + maim_bonus_to_add))
+ else if(burn >= max_damage / max((dam_flags & DAMAGE_FLAG_LASER ? DROPLIMB_THRESHOLD_DESTROY_PROJECTILE : DROPLIMB_THRESHOLD_DESTROY) + maim_bonus_to_add, 0.1))
droplimb(0, DROPLIMB_BURN)
- else if(blunt_eligible && brute >= max_damage / ((dam_flags & DAMAGE_FLAG_BULLET ? DROPLIMB_THRESHOLD_DESTROY_PROJECTILE : DROPLIMB_THRESHOLD_DESTROY) + maim_bonus_to_add))
+ else if(blunt_eligible && brute >= max_damage / max((dam_flags & DAMAGE_FLAG_BULLET ? DROPLIMB_THRESHOLD_DESTROY_PROJECTILE : DROPLIMB_THRESHOLD_DESTROY) + maim_bonus_to_add, 0.1))
droplimb(0, DROPLIMB_BLUNT)
- else if(brute >= max_damage / (DROPLIMB_THRESHOLD_TEAROFF + maim_bonus_to_add))
+ else if(brute >= max_damage / max((DROPLIMB_THRESHOLD_TEAROFF + maim_bonus_to_add), 0.1))
droplimb(0, DROPLIMB_EDGE)
/obj/item/organ/external/heal_damage(brute, burn, internal = 0, robo_repair = 0)
diff --git a/code/modules/organs/pain.dm b/code/modules/organs/pain.dm
index e9171af43c5..135c4e9264f 100644
--- a/code/modules/organs/pain.dm
+++ b/code/modules/organs/pain.dm
@@ -3,9 +3,6 @@
animate(pain, alpha = target, time = 15, easing = ELASTIC_EASING)
animate(pain, alpha = 0, time = 20)
-/mob/var/last_pain_message = ""
-/mob/var/next_pain_time = 0
-
// message is the custom message to be displayed
// power decides how much painkillers will stop the message
// force means it ignores anti-spam timer
diff --git a/code/modules/organs/subtypes/augment/augments/mind_blanker.dm b/code/modules/organs/subtypes/augment/augments/mind_blanker.dm
index d431215c6fb..a6f2cff8e91 100644
--- a/code/modules/organs/subtypes/augment/augments/mind_blanker.dm
+++ b/code/modules/organs/subtypes/augment/augments/mind_blanker.dm
@@ -64,7 +64,7 @@
return
to_chat(minister, SPAN_BAD("Why should you care how [ministree] feels?"))
- *moodlet_value = 0
+ *moodlet_value = *moodlet_value * 0.5
/obj/item/organ/internal/augment/bioaug/mind_blanker/proc/modify_ministry_receiving(ministree, minister, moodlet_value)
SIGNAL_HANDLER
@@ -72,7 +72,7 @@
return
to_chat(ministree, SPAN_BAD("You feel nothing from [minister]'s words."))
- *moodlet_value = 0
+ *moodlet_value = *moodlet_value * 0.5
/obj/item/organ/internal/augment/bioaug/mind_blanker/proc/modify_leadership_empathy(leader, moodlet_value)
SIGNAL_HANDLER
@@ -80,7 +80,7 @@
return
to_chat(leader, SPAN_BAD("Why should you care about how others feel?"))
- *moodlet_value = 0
+ *moodlet_value = *moodlet_value * 0.5
/obj/item/organ/internal/augment/bioaug/mind_blanker_lethal
name = "lethal mind blanker"
diff --git a/code/modules/organs/subtypes/autakh.dm b/code/modules/organs/subtypes/autakh.dm
index bbb66b5d8c8..afcf7616c9c 100644
--- a/code/modules/organs/subtypes/autakh.dm
+++ b/code/modules/organs/subtypes/autakh.dm
@@ -190,6 +190,7 @@
action_button_icon = "hunterseye"
cooldown = 30
activable = TRUE
+ zoom_out_message = " eyes whirrs loudly as the zoom lenses retract."
/obj/item/organ/internal/augment/farseer_eye/attack_self(var/mob/user)
. = ..()
diff --git a/code/modules/organs/subtypes/vaurca.dm b/code/modules/organs/subtypes/vaurca.dm
index ff4c59b0eae..f4b418495f3 100644
--- a/code/modules/organs/subtypes/vaurca.dm
+++ b/code/modules/organs/subtypes/vaurca.dm
@@ -399,17 +399,34 @@
ui_interact(user)
-/obj/item/organ/internal/vaurca/preserve/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
+/obj/item/organ/internal/vaurca/preserve/ui_interact(mob/user, datum/tgui/ui)
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "Tank", ui_x=400, ui_y=180)
+ ui.open()
+
+/obj/item/organ/internal/vaurca/preserve/ui_host(mob/user)
+ . = ..()
+ if(istype(loc,/obj/item/transfer_valve))
+ return loc
+
+/obj/item/organ/internal/vaurca/preserve/ui_data(mob/user)
var/mob/living/carbon/location = null
+ if(istype(loc, /obj/item/rig))
+ if(istype(loc.loc, /mob/living/carbon))
+ location = loc.loc
+ else if(istype(loc, /mob/living/carbon))
+ location = loc
+
var/using_internal
if(istype(location))
if(location.internal==src)
using_internal = 1
- // this is the data which will be sent to the ui
- var/data[0]
- data["tankPressure"] = round(SAFE_XGM_PRESSURE(air_contents))
+ var/list/data = list()
+
+ data["tankPressure"] = round(XGM_PRESSURE(air_contents))
data["releasePressure"] = round(distribute_pressure ? distribute_pressure : 0)
data["defaultReleasePressure"] = round(TANK_DEFAULT_RELEASE_PRESSURE)
data["maxReleasePressure"] = round(TANK_MAX_RELEASE_PRESSURE)
@@ -437,36 +454,13 @@
if(H.head && (H.head.item_flags & ITEM_FLAG_AIRTIGHT))
data["maskConnected"] = 1
- // update the ui if it exists, returns null if no ui is passed/found
- ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
- if (!ui)
- // the ui does not exist, so we'll create a new() one
- // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
- ui = new(user, src, ui_key, "tanks.tmpl", "Tank", 500, 300)
- // when the ui is first opened this is the data it will use
- ui.set_initial_data(data)
- // open the new ui window
- ui.open()
- // auto update every Master Controller tick
- ui.set_auto_update(1)
+ return data
-/obj/item/organ/internal/vaurca/preserve/Topic(href, href_list)
- ..()
- if (usr.stat|| usr.restrained())
- return 0
- if (src.loc != usr)
- return 0
-
- if (href_list["dist_p"])
- if (href_list["dist_p"] == "reset")
- src.distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE
- else if (href_list["dist_p"] == "max")
- src.distribute_pressure = TANK_MAX_RELEASE_PRESSURE
- else
- var/cp = text2num(href_list["dist_p"])
- src.distribute_pressure += cp
- src.distribute_pressure = min(max(round(src.distribute_pressure), 0), TANK_MAX_RELEASE_PRESSURE)
- if (href_list["stat"])
+/obj/item/organ/internal/vaurca/preserve/ui_act(action,params)
+ . = ..()
+ if(.)
+ return
+ if(action=="toggleReleaseValve")
if(istype(loc,/mob/living/carbon))
var/mob/living/carbon/location = loc
if(location.internal == src)
@@ -476,7 +470,6 @@
if (location.internals)
location.internals.icon_state = "internal0"
else
-
var/can_open_valve
if(location.wear_mask && (location.wear_mask.item_flags & ITEM_FLAG_AIRTIGHT))
can_open_valve = 1
@@ -491,11 +484,12 @@
if (location.internals)
location.internals.icon_state = "internal1"
else
- to_chat(usr, SPAN_NOTICE("You need something to connect to \the [src]."))
-
- src.add_fingerprint(usr)
- return 1
-
+ to_chat(usr, SPAN_WARNING("You need something to connect to \the [src]."))
+ . = TRUE
+ update_icon()
+ if(action=="setReleasePressure")
+ distribute_pressure = min(max(round(text2num(params["release_pressure"])), 0), TANK_MAX_RELEASE_PRESSURE)
+ . = TRUE
/obj/item/organ/internal/vaurca/preserve/remove_air(amount)
return air_contents.remove(amount)
diff --git a/code/modules/overmap/ship_weaponry/_ship_ammunition.dm b/code/modules/overmap/ship_weaponry/_ship_ammunition.dm
index b55b125dd2b..25c7efec515 100644
--- a/code/modules/overmap/ship_weaponry/_ship_ammunition.dm
+++ b/code/modules/overmap/ship_weaponry/_ship_ammunition.dm
@@ -66,8 +66,11 @@
/obj/item/ship_ammunition/attackby(obj/item/attacking_item, mob/user)
if(attacking_item.force > 10 && (ammunition_flags & SHIP_AMMO_FLAG_VERY_FRAGILE))
- log_and_message_admins("[user] has caused the cookoff of [src] by attacking it with [attacking_item]!", user)
- cookoff(FALSE)
+ if(istype(attacking_item, /obj/item/mecha_equipment/clamp))
+ return ..()
+ else
+ log_and_message_admins("[user] has caused the cookoff of [src] by attacking it with [attacking_item]!", user)
+ cookoff(FALSE)
else if(attacking_item.tool_behaviour == TOOL_PEN)
var/obj/item/pen/P = attacking_item
@@ -208,7 +211,7 @@
P.dir = S.dir
P.icon_state = overmap_icon_state
P.speed = get_speed()
- P.entry_target = entry_point
+ P.submap_target = entry_point
forceMove(P)
log_and_message_admins("A projectile ([name]) has entered the Overmap! (JMP )")
return TRUE
@@ -224,11 +227,87 @@
anti_materiel_potential = 3
impact_sounds = list(BULLET_IMPACT_MEAT = SOUNDS_BULLET_MEAT, BULLET_IMPACT_METAL = SOUNDS_BULLET_METAL)
accuracy = 100
- projectile_piercing = PASSMOB|PASSDOORS|PASSGLASS|PASSCLOSEDTURF|PASSWINDOW|PASSMACHINE|PASSBLOB|PASSFLAPS|PASSVEHICLE //It's a ship weapon let it try to penetrate everything.
+ projectile_piercing = PASSGLASS|PASSGRILLE|PASSBLOB|PASSMOB|PASSCLOSEDTURF|PASSMACHINE|PASSSTRUCTURE|PASSFLAPS|PASSDOORS|PASSVEHICLE|PASSWINDOW|PASSSHIELD //It's a ship weapon let it try to penetrate everything.
pierce_decay_damage = 0.95 //Ship weapon projectiles don't lose much damage on pierce by default, but this can be set per projectile.
+ ///This is passed to explosion(), it is stored here for when projectiles hit shields and need to damage the shield as if they had exploded.
+ var/list/explosion_strength = list(0, 0, 0)
+ ///The last thing this projectile pierced. Used for spalling effects in on_hit()
+ var/atom/last_thing_pierced = null
var/obj/item/ship_ammunition/ammo
var/primed = FALSE
- var/hit_target = FALSE //First target we hit. Used to report if a hit was successful.
+ ///First target we hit. Used to report if a hit was successful.
+ var/hit_target = FALSE
+
+/obj/projectile/ship_ammo/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) //When the projectile moves from a dense tile to a non-dense tile.
+ . = ..()
+ if(last_thing_pierced)
+ var/turf/entered_turf = isturf(loc) ? loc : get_turf(loc)
+ if(!(entered_turf.check_density(FALSE, TRUE))) //Checks for mobs so we don't spawn spalling inside the poor bridge crew, getting hit by the shell is bad enough.
+ handle_spalling(entered_turf, movement_dir, last_thing_pierced)
+ last_thing_pierced = null
+
+/**
+ * This creates a cone of shrapnel whenever a projectile pierces something dense and then crosses into a non-dense turf.
+ * This means that it won't spawn all the shrapnel inside the next thing it penetrates, to simulate spalling.
+ * All of of the projectile stats are set custom here, in future it might be good to set them dynmically based on the material of the thing pierced.
+ * Too many things don't have a material set, so that will have to wait.
+ */
+/obj/projectile/ship_ammo/proc/handle_spalling(atom/source, shrapnel_dir, thing_pierced)
+ set waitfor = FALSE
+
+ src.visible_message(SPAN_DANGER("Huge chunks of shrapnel spray out from \the [thing_pierced] as \the [src] punches through!"))
+
+ var/turf/O = get_turf(src)
+ var/list/target_turfs = list()
+ target_turfs += get_step(O, shrapnel_dir)
+ target_turfs += get_step(O, turn(shrapnel_dir, -45))
+ target_turfs += get_step(O, turn(shrapnel_dir, 45))
+ target_turfs += get_step(get_step(O, turn(shrapnel_dir, -45)), shrapnel_dir)
+ target_turfs += get_step(get_step(O, turn(shrapnel_dir, 45)), shrapnel_dir)
+
+ for(var/turf/T in target_turfs)
+ var/obj/projectile/bullet/pellet/fragment/spall/P
+ if(istype(thing_pierced, /obj/structure/window))
+ P = new /obj/projectile/bullet/pellet/fragment/spall/glass(O)
+ else if(istype(thing_pierced, /obj/structure/grille) || istype(thing_pierced, /obj/structure/window_frame))
+ P = new /obj/projectile/bullet/pellet/fragment/spall/metalrod(O)
+ else if(istype(thing_pierced, /obj/structure/machinery/door/airlock))
+ var/obj/structure/machinery/door/airlock/D = thing_pierced
+ if(D.window_material && D.window_material == SSmaterials.get_material_by_name(MATERIAL_GLASS))
+ P = new /obj/projectile/bullet/pellet/fragment/spall/glass(O)
+ else
+ P = new /obj/projectile/bullet/pellet/fragment/spall(O)
+ else
+ P = new /obj/projectile/bullet/pellet/fragment/spall(O)
+ P.preparePixelProjectile(T, src)
+ P.firer = src
+ P.fired_from = thing_pierced
+ P.fire()
+ return TRUE
+
+/obj/projectile/bullet/pellet/fragment/spall
+ damage = 2 //Between 30 and 3 damage, depending on how close you are. Pilot suits are 30 ballistic armour, so they should survive a lot of spall.
+ pellets = 15
+ armor_penetration = 10
+ range_step = 1
+ range = 15
+ embed_chance = 80 //Make the people hit pull big chunks of shrapnel out by hand.
+ maim_rate = -1 //We don't want this to decapitate people in the unlucky event they get hit by the shell (or shell explosion) directly, then more shrapnel afterwards.
+ anti_materiel_potential = 2 //Enough to break windows.
+ name = "spall"
+ shrapnel_type = /obj/item/material/shard/shrapnel/large
+
+/obj/projectile/bullet/pellet/fragment/spall/glass
+ damage = 1
+ armor_penetration = 5
+ name = "glass"
+ shrapnel_type = /obj/item/material/shard
+
+/obj/projectile/bullet/pellet/fragment/spall/metalrod
+ damage = 3
+ armor_penetration = 15
+ name = "metal rod"
+ shrapnel_type = /obj/item/stack/rods
/obj/projectile/ship_ammo/Destroy()
ammo = null
@@ -258,6 +337,14 @@
)
if(ammo && ammo.origin)
ammo.origin.signal_hit(hit_data)
+
+ if(istype(target, /turf/simulated/wall) || istype(target, /obj/structure/machinery/door)) //Stores the last thing we pierced for spalling purposes.
+ last_thing_pierced = target
+ else if (istype(target, /obj/structure)) //If it is a structure on a dense turf, that uses health,
+ if (target.should_use_health)
+ var/turf/T = get_turf(target)
+ if (T.check_density(FALSE, TRUE))
+ last_thing_pierced = target
return ..()
/obj/projectile/ship_ammo/proc/on_translate(var/turf/entry_turf, var/target_turf) //This proc is called when the projectile enters a new ship's overmap zlevel.
@@ -270,6 +357,5 @@
pellet.ammo.origin = ammo.origin
pellet.ammo.impact_type = ammo.impact_type
pellet.dir = dir
- var/turf/front_turf = get_step(pellet, pellet.dir)
- pellet.preparePixelProjectile(target_turf, front_turf)
+ pellet.preparePixelProjectile(target_turf, pellet, deviation = 3) //Deviation can be tuned. These spawn at the map edge so small deviations matter a lot.
pellet.fire()
diff --git a/code/modules/overmap/ship_weaponry/projectiles/_overmap_projectiles.dm b/code/modules/overmap/ship_weaponry/projectiles/_overmap_projectiles.dm
index 271d704536c..49d6243b9cc 100644
--- a/code/modules/overmap/ship_weaponry/projectiles/_overmap_projectiles.dm
+++ b/code/modules/overmap/ship_weaponry/projectiles/_overmap_projectiles.dm
@@ -9,8 +9,8 @@
var/obj/item/ship_ammunition/ammunition
/// The target is the actual overmap object we're hitting.
var/atom/target
- /// The entry target is where the projectile itself is going to spawn in world.
- var/obj/entry_target
+ /// The submap target is passed by the targetting console, it is the landmark selected on that console. This is the point on the submap (eg. The Horizon's Bridge) that the projectile will aim for when it enters.
+ var/obj/submap_target
var/range = OVERMAP_PROJECTILE_RANGE_MEDIUM
var/current_range_counter = 0
// A projectile with 0 speed does not move. Note that this is the 'lag' variable on walk_towards! Lower speed is better.
@@ -65,81 +65,132 @@
/obj/effect/overmap/projectile/Destroy()
ammunition = null
target = null
- entry_target = null
- walk(src, 0)
+ submap_target = null
return ..()
+///Gets the turf the projectile should enter on. If it's diagnonal it spawns in the corner, if it's orthogonal it spawns on the map edge relative to the target landmark.
+/obj/effect/overmap/projectile/proc/get_entry_turf(atom/target_landmark, direction)
+ var/turf/target = locate(target_landmark.x, target_landmark.y, target_landmark.z)
+ if(!target_landmark || !target)
+ return 0
+
+ switch(direction)
+ if(NORTH|WEST)
+ target = get_ranged_target_turf(locate(1, world.maxy, target.z), direction, max(8, 2 * ammunition.burst)) //We offset the target turf from the edge by 8 (one screen), or twice the burst size. Bursts get their positions randomized up to twice the burst size.
+ if(NORTH|EAST)
+ target = get_ranged_target_turf(locate(world.maxx, world.maxy, target.z), direction, max(8, 2 * ammunition.burst))
+ if(SOUTH|WEST)
+ target = get_ranged_target_turf(locate(1, 1, target.z), direction, max(8, 2 * ammunition.burst))
+ if(SOUTH|EAST)
+ target = get_ranged_target_turf(locate(world.maxx, 1, target.z), direction, max(8, 2 * ammunition.burst))
+ if(NORTH)
+ target = get_ranged_target_turf(locate(target.x, world.maxy, target.z), direction, max(8, 2 * ammunition.burst))
+ if(SOUTH)
+ target = get_ranged_target_turf(locate(target.x, 1, target.z), direction, max(8, 2 * ammunition.burst))
+ if(EAST)
+ target = get_ranged_target_turf(locate(world.maxx, target.y, target.z), direction, max(8, 2 * ammunition.burst))
+ if(WEST)
+ target = get_ranged_target_turf(locate(1, target.y, target.z), direction, max(8, 2 * ammunition.burst))
+ return target
+
/obj/effect/overmap/projectile/proc/prepare_for_entry()
moving = FALSE
entering = FALSE
walk(src, 0)
+///Checks if we can hit the thing we just bumped into. If we can, do the initial setup for the projectile entering the submab and continue.
/obj/effect/overmap/projectile/proc/check_entry()
. = FALSE
if(!ammunition)
return
var/turf/T = get_turf(src)
for(var/obj/effect/overmap/A in T)
- if(ammunition && A == ammunition.origin)
+ if(ammunition && A == ammunition.origin) //Don't collide with the thing that fired us.
continue
if(istype(A, /obj/effect/overmap/visitable))
var/obj/effect/overmap/visitable/V = A
- if((V.check_ownership(entry_target)) || (V == target)) //Target spotted!
+ if((V.check_ownership(submap_target)) || (V == target)) //If the visitable is owned by the target landmark, or is the target itself, we can hit it.
+ var/turf/target_turf = get_turf(submap_target)
+ var/obj/projectile/ship_ammo/widowmaker = new ammunition.original_projectile.type
+ prepare_for_entry()
+ widowmaker.ammo = ammunition
+ qdel(ammunition.original_projectile) //No longer needed.
+ ammunition.original_projectile = widowmaker
+ widowmaker.primed = TRUE
+
if(istype(V, /obj/effect/overmap/visitable/sector/exoplanet) && (ammunition.overmap_behaviour & SHIP_AMMO_CAN_HIT_PLANETS))
- . = TRUE
- //Manually stopping because this proc needs to sleep for a bit.
- prepare_for_entry()
- var/obj/projectile/ship_ammo/widowmaker = new ammunition.original_projectile.type
- widowmaker.ammo = ammunition
- qdel(ammunition.original_projectile) //No longer needed.
- var/turf/laze = get_turf(entry_target)
- ammunition.original_projectile = widowmaker
- playsound(laze, 'sound/weapons/gunshot/ship_weapons/orbital_travel.ogg', 60)
- laze.visible_message(SPAN_DANGER("A bright star is getting closer from the sky...! "))
- sleep(11 SECONDS) //Let the sound play!
- widowmaker.primed = TRUE
- widowmaker.forceMove(entry_target)
- widowmaker.on_hit(laze, is_landmark_hit = TRUE)
- log_and_message_admins("A projectile ([name]) has entered a z-level at [entry_target.name]! (JMP )")
- say_dead_direct("A projectile ([name]) has entered a z-level at [entry_target.name]!")
- qdel(widowmaker)
- qdel(src)
- else if(istype(V, /obj/effect/overmap/visitable) && (ammunition.overmap_behaviour & SHIP_AMMO_CAN_HIT_VISITABLES))
- . = TRUE
- if(istype(V, /obj/effect/overmap/visitable/ship))
- var/obj/effect/overmap/visitable/ship/VS = V
- if(istype(ammunition.origin, /obj/effect/overmap/visitable/ship))
- var/naval_heading = SSatlas.headings_to_naval["[VS.dir]"]["[ammunition.heading]"]
- var/corrected_heading = SSatlas.naval_to_dir["[VS.fore_dir]"][naval_heading]
- ammunition.heading = corrected_heading
- else //if it's not a ship it doesn't have a fore direction, so we need to autocorrect
- ammunition.heading = entry_target.dir
- prepare_for_entry()
- var/obj/projectile/ship_ammo/widowmaker = new ammunition.original_projectile.type
- widowmaker.ammo = ammunition
- qdel(ammunition.original_projectile) //No longer needed.
- ammunition.original_projectile = widowmaker
- widowmaker.primed = TRUE
- var/turf/entry_turf_initial = get_ranged_target_turf(entry_target, REVERSE_DIR(entry_target.dir), 20)
- var/entry_dir_choice = (dir & NORTH) || (dir & SOUTH) ? list(EAST, WEST) : list(NORTH, SOUTH)
- var/turf/entry_turf = get_ranged_target_turf(entry_turf_initial, entry_dir_choice, 5)
- widowmaker.forceMove(entry_turf)
- widowmaker.dir = ammunition.heading
- var/turf/target_turf = get_step(widowmaker, widowmaker.dir)
- widowmaker.on_translate(entry_turf, target_turf)
- log_and_message_admins("A projectile ([widowmaker.name]) has entered a z-level at [entry_target.name], with direction [dir2text(widowmaker.dir)]! (JMP )")
- say_dead_direct("A projectile ([widowmaker.name]) has entered a z-level at [entry_target.name], with direction [dir2text(widowmaker.dir)]!")
- widowmaker.preparePixelProjectile(target_turf, entry_turf)
- widowmaker.fired_from = src
- widowmaker.fire()
- qdel(src)
- if(istype(A, /obj/effect/overmap/event))
+ return check_entry_exoplanet(widowmaker, target_turf, target_turf)
+ else if(istype(V, /obj/effect/overmap/visitable/ship) && (ammunition.overmap_behaviour & SHIP_AMMO_CAN_HIT_VISITABLES))
+ return check_entry_ship(widowmaker, target_turf, V)
+ else if(ammunition.overmap_behaviour & SHIP_AMMO_CAN_HIT_VISITABLES)
+ return check_entry_visitable(widowmaker, target_turf)
+
+ if(istype(A, /obj/effect/overmap/event)) //Check hazards last, in case a ship is hiding in a hazard.
var/obj/effect/overmap/event/EV = A
if(EV.can_be_destroyed && (ammunition.overmap_behaviour & SHIP_AMMO_CAN_HIT_HAZARDS))
. = TRUE
qdel(EV)
qdel(src)
+///Handle bombardment of planets. Spawn the shot in a random open tile near the target and fire the projectile at it. If there is no open tile, call on_hit directly. This allows non-explosive weapons to strafe targets.
+/obj/effect/overmap/projectile/proc/check_entry_exoplanet(obj/projectile/ship_ammo/widowmaker, turf/entry_turf, turf/laze)
+ . = TRUE
+ playsound(laze, 'sound/weapons/gunshot/ship_weapons/orbital_travel.ogg', 60)
+ laze.visible_message(SPAN_DANGER("A bright star is getting closer from the sky...! "))
+ sleep(11 SECONDS) //Let the sound play!
+ var/turf/nearest_valid_turf
+
+ if (!(nearest_valid_turf = get_random_turf_in_range(entry_turf, 1, 5, TRUE, FALSE))) //Get a random empty turf between 1 and 5 tiles away from the target, if this fails call on_hit directly on the target turf.
+ widowmaker.forceMove(submap_target)
+ widowmaker.on_hit(laze, is_landmark_hit = TRUE)
+ log_and_message_admins("A ([widowmaker.name]) landed at ([entry_turf.x], [entry_turf.y], [entry_turf.z]) aimed at [submap_target.name]! (JMP )")
+ say_dead_direct("A ([widowmaker.name]) landed at ([entry_turf.x], [entry_turf.y], [entry_turf.z]) aimed at [submap_target.name]!")
+ qdel(widowmaker)
+ qdel(src)
+
+ else //If there's an empty turf, spawn our projectile there and aim it at the target.
+ widowmaker.on_translate(entry_turf, nearest_valid_turf)
+ log_and_message_admins("A ([widowmaker.name]) landed at ([entry_turf.x], [entry_turf.y], [entry_turf.z]) aimed at [submap_target.name]! (JMP )")
+ say_dead_direct("A ([widowmaker.name]) landed at ([entry_turf.x], [entry_turf.y], [entry_turf.z]) aimed at [submap_target.name]!")
+ widowmaker.preparePixelProjectile(nearest_valid_turf, entry_turf)
+ widowmaker.fired_from = src
+ widowmaker.fire()
+ qdel(src)
+
+//Handle hitting ships. This requires translating the projectile's direction to account for the relative rotation of the ship. The projectile then spawns at the edge of the map, aimed at the target landmark.
+/obj/effect/overmap/projectile/proc/check_entry_ship(obj/projectile/ship_ammo/widowmaker, turf/target_turf, obj/effect/overmap/visitable/ship/VS)
+ var/shot_direction = src.dir
+ var/naval_heading = SSatlas.headings_to_naval["[VS.dir]"]["[shot_direction]"]
+ var/corrected_heading = SSatlas.naval_to_dir["[VS.fore_dir]"][naval_heading]
+ shot_direction = corrected_heading
+
+ var/turf/entry_turf = get_entry_turf(submap_target, REVERSE_DIR(shot_direction))
+ widowmaker.forceMove(entry_turf)
+ widowmaker.dir = shot_direction
+ widowmaker.on_translate(entry_turf, target_turf)
+ log_and_message_admins("A ([widowmaker.name]) arrived [naval_heading] of \the [target] at ([entry_turf.x], [entry_turf.y], [entry_turf.z]) aimed at [submap_target.name], with direction [dir2text(shot_direction)]! (JMP )")
+ say_dead_direct("A ([widowmaker.name]) arrived [naval_heading] of \the [target] at ([entry_turf.x], [entry_turf.y], [entry_turf.z]) aimed at [submap_target.name], with direction [dir2text(shot_direction)]! (JMP )")
+ widowmaker.preparePixelProjectile(target_turf, entry_turf)
+ widowmaker.fired_from = src
+ widowmaker.fire()
+ qdel(src)
+ return TRUE
+
+///Handle hitting visitables that can't spin, such as asteroids and stations. Otherwise identical to hitting a ship.
+/obj/effect/overmap/projectile/proc/check_entry_visitable(obj/projectile/ship_ammo/widowmaker, turf/target_turf)
+ var/shot_direction = src.dir
+ var/turf/entry_turf = get_entry_turf(submap_target, REVERSE_DIR(shot_direction))
+ widowmaker.forceMove(entry_turf)
+ widowmaker.dir = shot_direction
+ widowmaker.on_translate(entry_turf, target_turf)
+ log_and_message_admins("A ([widowmaker.name]) flew in at ([entry_turf.x], [entry_turf.y], [entry_turf.z]) aimed at [submap_target.name], with direction [dir2text(shot_direction)]! (JMP )")
+ say_dead_direct("A ([widowmaker.name]) flew in at ([entry_turf.x], [entry_turf.y], [entry_turf.z]) aimed at [submap_target.name], with direction [dir2text(shot_direction)]! (JMP )")
+ widowmaker.preparePixelProjectile(target_turf, entry_turf)
+ widowmaker.fired_from = src
+ widowmaker.fire()
+ qdel(src)
+ return TRUE
+
/obj/effect/overmap/projectile/proc/move_to()
if(isnull(target) || !speed)
walk(src, 0)
diff --git a/code/modules/overmap/ship_weaponry/weaponry/autocannon.dm b/code/modules/overmap/ship_weaponry/weaponry/autocannon.dm
index 89102b085c0..bb0263de5d0 100644
--- a/code/modules/overmap/ship_weaponry/weaponry/autocannon.dm
+++ b/code/modules/overmap/ship_weaponry/weaponry/autocannon.dm
@@ -47,7 +47,7 @@
icon = 'icons/obj/guns/ship/ship_ammo_autocannon.dmi'
icon_state = "autocannon_frag"
overmap_icon_state = "cannon_salvo"
- impact_type = SHIP_AMMO_IMPACT_HE
+ impact_type = SHIP_AMMO_IMPACT_FRAG
ammunition_flags = SHIP_AMMO_FLAG_INFLAMMABLE|SHIP_AMMO_FLAG_VERY_HEAVY
caliber = SHIP_CALIBER_60MM
burst = 8
@@ -59,7 +59,8 @@
icon_state = "small"
damage = 100
armor_penetration = 60
- penetrating = 3
+ penetrating = 8
+ anti_materiel_potential = 6
/obj/projectile/ship_ammo/autocannon/he
name = "60mm HE shell"
@@ -67,6 +68,7 @@
damage = 80
armor_penetration = 30
penetrating = 0 // Explodes on the hull.
+ explosion_strength = list(0, 2, 3)
/obj/projectile/ship_ammo/autocannon/frag
name = "60mm fragmentation shell"
@@ -77,8 +79,8 @@
/obj/projectile/ship_ammo/autocannon/he/on_hit(atom/target, blocked, def_zone, is_landmark_hit)
. = ..()
- explosion(target, 0, 2, 3)
+ explosion(get_turf(target), explosion_strength[1], explosion_strength[2], explosion_strength[3])
/obj/projectile/ship_ammo/autocannon/frag/on_hit(atom/target, blocked, def_zone, is_landmark_hit)
- fragem(target, 70, 70, 1, 2, 15, 5, TRUE)
- ..()
+ fragem(src, 70, 70, 1, 2, 12, 4, TRUE, spread_range = 5) //Targets 5 tiles around the impact site and shoots a projectile at them.
+ . = ..()
diff --git a/code/modules/overmap/ship_weaponry/weaponry/blaster.dm b/code/modules/overmap/ship_weaponry/weaponry/blaster.dm
index 0cc3a9036f9..1b3895c9daa 100644
--- a/code/modules/overmap/ship_weaponry/weaponry/blaster.dm
+++ b/code/modules/overmap/ship_weaponry/weaponry/blaster.dm
@@ -27,14 +27,16 @@
damage = 10000
armor_penetration = 1000
penetrating = 1
+ explosion_strength = list(2, 5, 7)
/obj/projectile/ship_ammo/blaster/on_hit(atom/target, blocked, def_zone, is_landmark_hit)
. = ..()
+ var/turf/epicenter = get_turf(target)
if(ismob(target))
var/mob/M = target
M.visible_message(SPAN_DANGER("\The [src] disintegrates [M]'s chest and blasts them into pieces! "))
if(isturf(target) || isobj(target))
- explosion(target, 2, 5, 7)
+ explosion(epicenter, explosion_strength[1], explosion_strength[2], explosion_strength[3])
/obj/structure/machinery/ammunition_loader/blaster
name = "mining blaster loader"
diff --git a/code/modules/overmap/ship_weaponry/weaponry/bruiser.dm b/code/modules/overmap/ship_weaponry/weaponry/bruiser.dm
index 5fe533279db..8768efada21 100644
--- a/code/modules/overmap/ship_weaponry/weaponry/bruiser.dm
+++ b/code/modules/overmap/ship_weaponry/weaponry/bruiser.dm
@@ -119,10 +119,11 @@
damage = 150
armor_penetration = 75
penetrating = 0
+ explosion_strength = list(1, 3, 6)
/obj/projectile/ship_ammo/bruiser/he/on_hit(atom/target, blocked, def_zone, is_landmark_hit)
. = ..()
- explosion(target, 1, 3, 6)
+ explosion(get_turf(target), explosion_strength[1], explosion_strength[2], explosion_strength[3])
/obj/projectile/ship_ammo/bruiser/real/he
name = "178mm shell"
@@ -130,6 +131,7 @@
damage = 350
armor_penetration = 125
penetrating = 0
+ explosion_strength = list(3, 6, 8)
/obj/projectile/ship_ammo/bruiser/real/ap
name = "178mm shell"
@@ -137,6 +139,7 @@
damage = 250
armor_penetration = 250
penetrating = 2
+ explosion_strength = list(0, 2, 4)
/obj/projectile/ship_ammo/bruiser/real/canister
damage = 40
@@ -157,10 +160,11 @@
/obj/projectile/ship_ammo/bruiser/real/on_hit(atom/target, blocked, def_zone, is_landmark_hit)
. = ..()
+ var/turf/epicenter = get_turf(target)
if(ammo.impact_type == SHIP_AMMO_IMPACT_HE)
- explosion(target, 3, 6, 8)
+ explosion(epicenter, explosion_strength[1], explosion_strength[2], explosion_strength[3])
if(ammo.impact_type == SHIP_AMMO_IMPACT_AP)
- explosion(target, 0, 2, 4)
+ explosion(epicenter, explosion_strength[1], explosion_strength[2], explosion_strength[3])
/obj/projectile/ship_ammo/bruiser/real/beehive/on_hit(atom/target, blocked, def_zone, is_landmark_hit)
. = ..()
diff --git a/code/modules/overmap/ship_weaponry/weaponry/coilgun.dm b/code/modules/overmap/ship_weaponry/weaponry/coilgun.dm
index 0de2ab9bebf..1e5f9f88a9b 100644
--- a/code/modules/overmap/ship_weaponry/weaponry/coilgun.dm
+++ b/code/modules/overmap/ship_weaponry/weaponry/coilgun.dm
@@ -27,14 +27,16 @@
damage = 10000
armor_penetration = 1000
penetrating = 50
+ explosion_strength = list(1, 5, 3)
/obj/projectile/ship_ammo/coilgun/on_hit(atom/target, blocked, def_zone, is_landmark_hit)
. = ..()
+ var/turf/epicenter = get_turf(target)
if(ismob(target))
var/mob/M = target
M.visible_message(SPAN_DANGER("\The [src] blows [M]'s chest apart and punches straight through! "))
if(isturf(target) || isobj(target))
- explosion(target, 1, 5, 3)
+ explosion(epicenter, explosion_strength[1], explosion_strength[2], explosion_strength[3])
/obj/structure/machinery/ammunition_loader/sol
icon_state = "ammo_loader_sol"
diff --git a/code/modules/overmap/ship_weaponry/weaponry/francisca.dm b/code/modules/overmap/ship_weaponry/weaponry/francisca.dm
index 128686d24e2..26f8660a9d9 100644
--- a/code/modules/overmap/ship_weaponry/weaponry/francisca.dm
+++ b/code/modules/overmap/ship_weaponry/weaponry/francisca.dm
@@ -42,7 +42,7 @@
name_override = "40mm FRAG burst"
desc = "A box of fragmentation shells for use in a Francisca rotary gun."
icon_state = "box_inc"
- impact_type = SHIP_AMMO_IMPACT_HE
+ impact_type = SHIP_AMMO_IMPACT_FRAG
projectile_type_override = /obj/projectile/ship_ammo/francisca/frag
/obj/projectile/ship_ammo/francisca
@@ -50,20 +50,24 @@
icon_state = "small"
damage = 50
armor_penetration = 50
- penetrating = 2
+ penetrating = 3
+ anti_materiel_potential = 10
/obj/projectile/ship_ammo/francisca/ap
name = "40mm AP shell"
damage = 30
armor_penetration = 100
- penetrating = 4
+ penetrating = 8
+ anti_materiel_potential = 8
/obj/projectile/ship_ammo/francisca/frag
name = "40mm FRAG shell"
+ icon_state = "small"
damage = 30
armor_penetration = 50
penetrating = 1
+ anti_materiel_potential = 6
/obj/projectile/ship_ammo/francisca/frag/on_hit(atom/target, blocked, def_zone, is_landmark_hit)
- fragem(src, 70, 70, 1, 2, 10, 4, TRUE)
+ fragem(src, 70, 70, 1, 2, 12, 4, TRUE, spread_range = 5) //Targets 5 tiles around the impact site and shoots a projectile at them.
. = ..()
diff --git a/code/modules/overmap/ship_weaponry/weaponry/grauwolf.dm b/code/modules/overmap/ship_weaponry/weaponry/grauwolf.dm
index d9d26b16b43..058a128c32e 100644
--- a/code/modules/overmap/ship_weaponry/weaponry/grauwolf.dm
+++ b/code/modules/overmap/ship_weaponry/weaponry/grauwolf.dm
@@ -36,16 +36,21 @@
damage = 100
armor_penetration = 50
penetrating = 0
+ anti_materiel_potential = 6
+ explosion_strength = list(0, 2, 4)
/obj/projectile/ship_ammo/grauwolf/on_hit(atom/target, blocked, def_zone, is_landmark_hit)
. = ..()
+ var/turf/epicenter = get_turf(target)
if(ammo && ammo.impact_type == SHIP_AMMO_IMPACT_HE)
- explosion(target, 0, 2, 4)
+ explosion(epicenter, explosion_strength[1], explosion_strength[2], explosion_strength[3])
else
- explosion(target, 0, 1, 2)
+ explosion(epicenter, explosion_strength[1], explosion_strength[2], explosion_strength[3])
/obj/projectile/ship_ammo/grauwolf/ap
name = "armor-piercing flak"
damage = 50
armor_penetration = 50
- penetrating = 2
+ penetrating = 8
+ anti_materiel_potential = 8
+ explosion_strength = list(0, 1, 2)
diff --git a/code/modules/overmap/ship_weaponry/weaponry/lammergeier.dm b/code/modules/overmap/ship_weaponry/weaponry/lammergeier.dm
index 73d858354bf..8ffe1792590 100644
--- a/code/modules/overmap/ship_weaponry/weaponry/lammergeier.dm
+++ b/code/modules/overmap/ship_weaponry/weaponry/lammergeier.dm
@@ -26,14 +26,16 @@
damage = 10000
armor_penetration = 1000
penetrating = 1
+ explosion_strength = list(3, 6, 8)
/obj/projectile/ship_ammo/lammergeier/on_hit(atom/target, blocked, def_zone, is_landmark_hit)
. = ..()
+ var/turf/epicenter = get_turf(target)
if(ismob(target))
var/mob/M = target
M.visible_message(SPAN_DANGER("\The [src] blows [M]'s chest apart and punches straight through! "))
if(isturf(target) || isobj(target))
- explosion(target, 3, 6, 8)
+ explosion(epicenter, explosion_strength[1], explosion_strength[2], explosion_strength[3])
/obj/structure/machinery/ammunition_loader/lammergeier
name = "typhoon cannon loader"
diff --git a/code/modules/overmap/ship_weaponry/weaponry/leviathan.dm b/code/modules/overmap/ship_weaponry/weaponry/leviathan.dm
index 98dc9afa324..cd8dc95be6a 100644
--- a/code/modules/overmap/ship_weaponry/weaponry/leviathan.dm
+++ b/code/modules/overmap/ship_weaponry/weaponry/leviathan.dm
@@ -159,10 +159,10 @@
M.visible_message(SPAN_DANGER("[M] evaporates as they are engulfed by the beam! "))
M.dust()
return
- explosion(target, 6, 6, 6)
+ explosion(get_turf(target), 6, 6, 6)
else
target.visible_message(SPAN_DANGER("A giant, purple laser descends from the sky! "))
- explosion(target, 30, 30, 30)
+ explosion(get_turf(target), 30, 30, 30)
/obj/structure/machinery/zat_lever
name = "activation lever"
diff --git a/code/modules/overmap/ship_weaponry/weaponry/light_coilgun.dm b/code/modules/overmap/ship_weaponry/weaponry/light_coilgun.dm
index f3d9e570948..e60ba2924c8 100644
--- a/code/modules/overmap/ship_weaponry/weaponry/light_coilgun.dm
+++ b/code/modules/overmap/ship_weaponry/weaponry/light_coilgun.dm
@@ -28,11 +28,13 @@
damage = 10000
armor_penetration = 1000
penetrating = 1
+ explosion_strength = list(2, 3, 4)
/obj/projectile/ship_ammo/coilgun/light/on_hit(atom/target, blocked, def_zone, is_landmark_hit)
. = ..()
+ var/turf/epicenter = get_turf(target)
if(ismob(target))
var/mob/M = target
M.visible_message(SPAN_DANGER("\The [src] blows [M]'s chest apart and punches straight through! "))
if(isturf(target) || isobj(target))
- explosion(target, 2, 3, 4)
+ explosion(epicenter, explosion_strength[1], explosion_strength[2], explosion_strength[3])
diff --git a/code/modules/overmap/ship_weaponry/weaponry/longbow.dm b/code/modules/overmap/ship_weaponry/weaponry/longbow.dm
index 02a7815b8f9..51d469aa739 100644
--- a/code/modules/overmap/ship_weaponry/weaponry/longbow.dm
+++ b/code/modules/overmap/ship_weaponry/weaponry/longbow.dm
@@ -26,6 +26,7 @@
/obj/projectile/ship_ammo/longbow/on_hit(atom/target, blocked, def_zone, is_landmark_hit)
. = ..()
+ var/turf/epicenter = get_turf(target)
if(ismob(target))
var/mob/M = target
M.visible_message(SPAN_DANGER("\The [src] blows [M] apart and punches straight through! "))
@@ -39,13 +40,13 @@
qdel(target)
penetrated = TRUE
else
- explosion(target, 4, 8, 12)
+ explosion(epicenter, 4, 8, 12)
qdel(src)
if(SHIP_AMMO_IMPACT_HE)
- explosion(target, 6, 8, 10)
+ explosion(epicenter, 6, 8, 10)
if(SHIP_AMMO_IMPACT_BUNKERBUSTER)
target.visible_message(SPAN_DANGER("\The [src] punches straight through \the [target]! "))
- explosion(target, 1, 2, 4)
+ explosion(epicenter, 1, 2, 4)
target.ex_act(1)
if(!QDELING(target) && target.density)
qdel(target)
diff --git a/code/modules/overmap/ship_weaponry/weaponry/nephilim.dm b/code/modules/overmap/ship_weaponry/weaponry/nephilim.dm
index f7eab092117..2d910fc41c8 100644
--- a/code/modules/overmap/ship_weaponry/weaponry/nephilim.dm
+++ b/code/modules/overmap/ship_weaponry/weaponry/nephilim.dm
@@ -50,6 +50,7 @@
damage = 40
armor_penetration = 40
penetrating = 0
+ explosion_strength = list(0, 2, 3)
/obj/projectile/ship_ammo/nephilim/ap
@@ -60,4 +61,4 @@
/obj/projectile/ship_ammo/nephilim/he/on_hit(atom/target, blocked, def_zone, is_landmark_hit)
. = ..()
- explosion(target, 0, 2, 3)
+ explosion(get_turf(target), explosion_strength[1], explosion_strength[2], explosion_strength[3])
diff --git a/code/modules/overmap/ships/computers/engine_control.dm b/code/modules/overmap/ships/computers/engine_control.dm
index 209ffb05373..5a7a41f5999 100644
--- a/code/modules/overmap/ships/computers/engine_control.dm
+++ b/code/modules/overmap/ships/computers/engine_control.dm
@@ -30,7 +30,7 @@
/obj/structure/machinery/computer/ship/engines/ui_interact(mob/user, datum/tgui/ui)
if(!connected)
- display_reconnect_dialog(user, "ship control systems")
+ balloon_alert(user, "no connection!")
return
ui = SStgui.try_update_ui(user, src, ui)
diff --git a/code/modules/overmap/ships/computers/helm.dm b/code/modules/overmap/ships/computers/helm.dm
index cd9fc3fbff8..3d75449f8ff 100644
--- a/code/modules/overmap/ships/computers/helm.dm
+++ b/code/modules/overmap/ships/computers/helm.dm
@@ -117,6 +117,10 @@
return 1
/obj/structure/machinery/computer/ship/helm/ui_interact(mob/user, datum/tgui/ui)
+ if(!connected)
+ balloon_alert(user, "no connection!")
+ return
+
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "Helm", capitalize_first_letters(name))
@@ -126,55 +130,52 @@
/obj/structure/machinery/computer/ship/helm/ui_data(mob/user)
var/list/data = list()
- if(!connected)
- display_reconnect_dialog(user, "helm")
- else
- var/turf/T = get_turf(connected)
- var/obj/effect/overmap/visitable/sector/current_sector = locate() in T
+ var/turf/T = get_turf(connected)
+ var/obj/effect/overmap/visitable/sector/current_sector = locate() in T
- data["sector"] = current_sector ? current_sector.name : "Deep Space"
- data["sector_info"] = current_sector ? current_sector.desc : "Not Available"
- data["landed"] = connected.get_landed_info()
- data["ship_coord_x"] = connected.x
- data["ship_coord_y"] = connected.y
- data["dest"] = dy && dx
- data["autopilot_x"] = dx
- data["autopilot_y"] = dy
- data["speedlimit"] = speedlimit ? speedlimit*1000 : "Halted"
- data["accel"] = get_acceleration()
- data["heading"] = connected.get_heading() ? dir2angle(connected.get_heading()) : 0
- data["direction"] = dir2angle(connected.dir)
- data["autopilot"] = autopilot
- data["manual_control"] = viewing_overmap(user)
- data["canburn"] = connected.can_burn()
- data["canturn"] = connected.can_turn()
- data["cancombatroll"] = connected.can_combat_roll()
- data["cancombatturn"] = connected.can_combat_turn()
- data["accellimit"] = accellimit*1000
+ data["sector"] = current_sector ? current_sector.name : "Deep Space"
+ data["sector_info"] = current_sector ? current_sector.desc : "Not Available"
+ data["landed"] = connected.get_landed_info()
+ data["ship_coord_x"] = connected.x
+ data["ship_coord_y"] = connected.y
+ data["dest"] = dy && dx
+ data["autopilot_x"] = dx
+ data["autopilot_y"] = dy
+ data["speedlimit"] = speedlimit ? speedlimit*1000 : "Halted"
+ data["accel"] = get_acceleration()
+ data["heading"] = connected.get_heading() ? dir2angle(connected.get_heading()) : 0
+ data["direction"] = dir2angle(connected.dir)
+ data["autopilot"] = autopilot
+ data["manual_control"] = viewing_overmap(user)
+ data["canburn"] = connected.can_burn()
+ data["canturn"] = connected.can_turn()
+ data["cancombatroll"] = connected.can_combat_roll()
+ data["cancombatturn"] = connected.can_combat_turn()
+ data["accellimit"] = accellimit*1000
- var/speed = round(connected.get_speed()*1000, 0.01)
- data["speed"] = speed
- if(connected.get_speed() < SHIP_SPEED_SLOW)
- data["speed_slow"] = TRUE
- if(connected.get_speed() > SHIP_SPEED_FAST)
- data["speed_fast"] = TRUE
- var/list/speed_xy = connected.get_speed_xy()
- data["ship_speed_x"] = speed_xy[1]
- data["ship_speed_y"] = speed_xy[2]
+ var/speed = round(connected.get_speed()*1000, 0.01)
+ data["speed"] = speed
+ if(connected.get_speed() < SHIP_SPEED_SLOW)
+ data["speed_slow"] = TRUE
+ if(connected.get_speed() > SHIP_SPEED_FAST)
+ data["speed_fast"] = TRUE
+ var/list/speed_xy = connected.get_speed_xy()
+ data["ship_speed_x"] = speed_xy[1]
+ data["ship_speed_y"] = speed_xy[2]
- data["ETAnext"] = get_eta()
+ data["ETAnext"] = get_eta()
- var/list/locations[0]
- for (var/key in known_sectors)
- var/datum/computer_file/data/waypoint/R = known_sectors[key]
- var/list/rdata[0]
- rdata["name"] = R.fields["name"]
- rdata["x"] = R.fields["x"]
- rdata["y"] = R.fields["y"]
- rdata["reference"] = "[REF(R)]"
- locations.Add(list(rdata))
+ var/list/locations[0]
+ for (var/key in known_sectors)
+ var/datum/computer_file/data/waypoint/R = known_sectors[key]
+ var/list/rdata[0]
+ rdata["name"] = R.fields["name"]
+ rdata["x"] = R.fields["x"]
+ rdata["y"] = R.fields["y"]
+ rdata["reference"] = "[REF(R)]"
+ locations.Add(list(rdata))
- data["locations"] = locations
+ data["locations"] = locations
return data
@@ -367,6 +368,10 @@
ui_interact(user)
/obj/structure/machinery/computer/ship/navigation/ui_interact(mob/user, datum/tgui/ui)
+ if(!connected)
+ balloon_alert(user, "no connection!")
+ return
+
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "Nav", capitalize_first_letters(name), ui_x=470, ui_y=320)
@@ -376,25 +381,22 @@
/obj/structure/machinery/computer/ship/navigation/ui_data(mob/user)
var/list/data = list()
- if(!connected)
- display_reconnect_dialog(user, "navigation")
- else
- var/turf/T = get_turf(connected)
- var/obj/effect/overmap/visitable/sector/current_sector = locate() in T
+ var/turf/T = get_turf(connected)
+ var/obj/effect/overmap/visitable/sector/current_sector = locate() in T
- data["sector"] = current_sector ? current_sector.name : "Deep Space"
- data["sector_info"] = current_sector ? current_sector.desc : "Not Available"
- data["ship_coord_x"] = connected.x
- data["ship_coord_y"] = connected.y
- data["speed"] = round(connected.get_speed()*1000, 0.01)
- data["accel"] = round(connected.get_acceleration()*1000, 0.01)
- var/list/speed_xy = connected.get_speed_xy()
- data["ship_speed_x"] = speed_xy[1]
- data["ship_speed_y"] = speed_xy[2]
- data["direction"] = dir2angle(connected.dir)
- data["heading"] = connected.get_heading() ? dir2angle(connected.get_heading()) : 0
- data["ETAnext"] = get_eta()
- data["viewing"] = viewing_overmap(user)
+ data["sector"] = current_sector ? current_sector.name : "Deep Space"
+ data["sector_info"] = current_sector ? current_sector.desc : "Not Available"
+ data["ship_coord_x"] = connected.x
+ data["ship_coord_y"] = connected.y
+ data["speed"] = round(connected.get_speed()*1000, 0.01)
+ data["accel"] = round(connected.get_acceleration()*1000, 0.01)
+ var/list/speed_xy = connected.get_speed_xy()
+ data["ship_speed_x"] = speed_xy[1]
+ data["ship_speed_y"] = speed_xy[2]
+ data["direction"] = dir2angle(connected.dir)
+ data["heading"] = connected.get_heading() ? dir2angle(connected.get_heading()) : 0
+ data["ETAnext"] = get_eta()
+ data["viewing"] = viewing_overmap(user)
return data
diff --git a/code/modules/overmap/ships/computers/ship.dm b/code/modules/overmap/ships/computers/ship.dm
index 1962a5b64c3..687797f4e1e 100644
--- a/code/modules/overmap/ships/computers/ship.dm
+++ b/code/modules/overmap/ships/computers/ship.dm
@@ -22,11 +22,6 @@ somewhere on that shuttle. Subtypes of these can be then used to perform ship ov
. += "Consoles like these are typically access-locked."
. += "You can remove this lock with wirecutters , but it would take awhile! Alternatively, you can also use a cryptographic sequencer (emag) for instant removal."
-/obj/structure/machinery/computer/ship/proc/display_reconnect_dialog(var/mob/user, var/flavor)
- var/datum/browser/popup = new (user, "[src]", "[src]")
- popup.set_content("Error Unable to connect to [flavor].Reconnect ")
- popup.open()
-
/obj/structure/machinery/computer/ship/attackby(obj/item/attacking_item, mob/user)
if(attacking_item.tool_behaviour == TOOL_CABLECOIL) // Repair from hotwire
var/obj/item/stack/cable_coil/C = attacking_item
diff --git a/code/modules/power/sensors/powernet_sensor.dm b/code/modules/power/sensors/powernet_sensor.dm
index 9184fea260e..8b2f5ee41c3 100644
--- a/code/modules/power/sensors/powernet_sensor.dm
+++ b/code/modules/power/sensors/powernet_sensor.dm
@@ -5,7 +5,6 @@
// Powernet sensors are devices which relay information about connected powernet. This information may be relayed
// via two procs. Proc return_reading_text will return fully HTML styled string which contains all information. This
// may be used in PDAs or similar applications. Second proc, return_reading_data will return list containing needed data.
-// This is used in NanoUI, for example.
/obj/structure/machinery/power/sensor
name = "Powernet Sensor"
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index eea1678057d..ee43a4339f2 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -461,7 +461,7 @@ ABSTRACT_TYPE(/obj/item/gun)
break
var/acc = burst_accuracy[min(i, burst_accuracy.len)] - accuracy_decrease
- var/disp = dispersion[min(i, dispersion.len)] + dispersion_increase
+ var/disp = max(0, dispersion[min(i, dispersion.len)] + dispersion_increase)
process_accuracy(projectile, user, target, acc, disp)
if(pointblank)
diff --git a/code/modules/projectiles/guns/energy/modular.dm b/code/modules/projectiles/guns/energy/modular.dm
index fb2ed61252a..9d3c7701d3c 100644
--- a/code/modules/projectiles/guns/energy/modular.dm
+++ b/code/modules/projectiles/guns/energy/modular.dm
@@ -387,9 +387,12 @@
while(improvement_potential > 0 && damaged_components.len)
var/list/upgradable_components = list()
- for(var/obj/item/laser_components/component in damaged_components)
- if(component.total_improved < IMPROVEMENT_CAP)
- upgradable_components += component
+ for(var/obj/item/laser_components/component in damaged_components) //Only give it improvement potential if it's damaged.
+ if((component.total_improved + component.improvement_potential) < IMPROVEMENT_CAP) //Only give it improvement potential if it doesn't have enough to hit cap.
+ if(component.increasable_stats.len || component.decreaseable_stats.len) //Don't give it to components with nothing to improve.
+ upgradable_components += component
+ else
+ damaged_components.Remove(component) //If a component has reached the improvement cap, it can't be improved anymore.
if(!upgradable_components.len)
to_chat(user, SPAN_WARNING("There's nothing to improve on the components of this gun."))
@@ -527,10 +530,55 @@
return 1
/obj/item/gun/energy/laser/prototype/get_print_info()
- . = ..(FALSE)
+ . = ""
+
+ var/l_modified_damage = 1 / max(1, burst - 1)
+ var/l_modified_max_shots = 1
+ for(var/i in list(capacitor, focusing_lens, modulator) + gun_mods)
+ var/obj/item/laser_components/l_component = i
+ if(!l_component)
+ continue
+
+ if(l_component.damage != 0)
+ l_modified_damage *= l_component.damage
+ if(l_component.shots != 0)
+ l_modified_max_shots *= l_component.shots
+
+ var/obj/projectile/P = new projectile_type
+ . += "Max Shots: [round(l_modified_max_shots)] "
+ . += "Recharge Type: [self_recharge ? "self recharging" : "not self recharging"] "
+ if(self_recharge)
+ . += "Recharge Time: [initial(recharge_time)] "
+ . += "Primary Projectile "
+ . += "Damage: [round(min(60, l_modified_damage), 1)] "
+ . += "Damage Type: [initial(P.damage_type)] "
+ . += "Blocked by Armor Type: [initial(P.check_armor)] "
+ . += "Stuns: [initial(P.stun) ? "true" : "false"] "
+ if(initial(P.shrapnel_type))
+ var/obj/shrapnel = new P.shrapnel_type
+ . += "Shrapnel Type: [shrapnel.name] "
+ . += "Armor Penetration: [initial(P.armor_penetration)]% "
+ . += "Burst: [burst] "
+ . += "Reliability: [reliability] "
+
+ if(secondary_projectile_type)
+ var/obj/projectile/P_second = new secondary_projectile_type
+ . += "Secondary Projectile "
+ . += "Damage: [initial(P_second.damage)] "
+ . += "Damage Type: [initial(P_second.damage_type)] "
+ . += "Blocked by Armor Type: [initial(P_second.check_armor)] "
+ . += "Stuns: [initial(P_second.stun) ? "true" : "false"] "
+ if(initial(P_second.shrapnel_type))
+ var/obj/shrapnel_second = new P_second.shrapnel_type
+ . += "Shrapnel Type: [shrapnel_second.name] "
+ . += "Armor Penetration: [initial(P_second.armor_penetration)]% "
+
+ . += " "
for(var/i in list(capacitor, focusing_lens, modulator) + gun_mods)
var/obj/item/laser_components/l_component = i
+ if(!l_component)
+ continue
. += " Component Name: [initial(l_component.name)] "
var/l_repair_name = initial(l_component.repair_item.name) ? initial(l_component.repair_item.name) : "nothing"
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index ecddd1499a9..a6399f6af36 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -60,6 +60,8 @@
var/obj/projectile/energy/floramut/gene/projectile = .
projectile.gene = gene
+//*ADMIN SPAWN ONLY*/
+
/obj/item/gun/energy/meteorgun
name = "meteor gun"
desc = "For the love of god, make sure you're aiming this the right way!"
@@ -88,6 +90,105 @@
slot_flags = SLOT_BELT
can_turret = FALSE
+/obj/item/gun/energy/admin_ship_weapon
+ name = "ship artillery testing gun"
+ desc = "If you are holding this, admin-help, this fires ship-weapon bullets for testing purposes."
+ icon = 'icons/obj/guns/meteor_gun.dmi'
+ icon_state = "meteor_gun"
+ item_state = "meteor_gun"
+ slot_flags = SLOT_BELT
+ fire_sound='sound/weapons/gunshot/ship_weapons/flak_fire.ogg'
+ projectile_type = /obj/projectile/ship_ammo/autocannon
+ sel_mode = 1
+ accuracy = 1
+ max_shots = 1000
+ self_recharge = TRUE
+ recharge_time = 5
+ charge_meter = 0
+ can_switch_modes = FALSE
+
+ firemodes = list(
+ // Autocannon
+ list(mode_name="autocannon", burst=1, projectile_type=/obj/projectile/ship_ammo/autocannon),
+ list(mode_name="autocannon frag", burst=1, projectile_type=/obj/projectile/ship_ammo/autocannon/frag),
+ list(mode_name="autocannon he", burst=1, projectile_type=/obj/projectile/ship_ammo/autocannon/he),
+ // Blaster
+ list(mode_name="blaster", burst=1, projectile_type=/obj/projectile/ship_ammo/blaster),
+ // Bruiser
+ list(mode_name="bruiser canister", burst=1, projectile_type=/obj/projectile/ship_ammo/bruiser),
+ list(mode_name="bruiser flechette", burst=1, projectile_type=/obj/projectile/ship_ammo/bruiser/flechette),
+ list(mode_name="bruiser he", burst=1, projectile_type=/obj/projectile/ship_ammo/bruiser/he),
+ // Coilgun
+ list(mode_name="coilgun", burst=1, projectile_type=/obj/projectile/ship_ammo/coilgun),
+ list(mode_name="light coilgun", burst=1, projectile_type=/obj/projectile/ship_ammo/coilgun/light),
+ // Francisca
+ list(mode_name="francisca fmj", burst=1, projectile_type=/obj/projectile/ship_ammo/francisca),
+ list(mode_name="francisca ap", burst=1, projectile_type=/obj/projectile/ship_ammo/francisca/ap),
+ list(mode_name="francisca frag", burst=1, projectile_type=/obj/projectile/ship_ammo/francisca/frag),
+ // Grauwolf
+ list(mode_name="grauwolf he", burst=1, projectile_type=/obj/projectile/ship_ammo/grauwolf),
+ list(mode_name="grauwolf ap", burst=1, projectile_type=/obj/projectile/ship_ammo/grauwolf/ap),
+ // Lammergeier
+ list(mode_name="lammergeier", burst=1, projectile_type=/obj/projectile/ship_ammo/lammergeier),
+ // Leviathan
+ list(mode_name="leviathan", burst=1, projectile_type=/obj/projectile/ship_ammo/leviathan),
+ // Longbow
+ list(mode_name="longbow ap", burst=1, projectile_type=/obj/projectile/ship_ammo/longbow),
+ list(mode_name="longbow he", burst=1, projectile_type=/obj/projectile/ship_ammo/longbow),
+ list(mode_name="longbow bunkerbuster", burst=1, projectile_type=/obj/projectile/ship_ammo/longbow),
+ // Nephilim
+ list(mode_name="nephilim he", burst=1, projectile_type=/obj/projectile/ship_ammo/nephilim),
+ list(mode_name="nephilim ap", burst=1, projectile_type=/obj/projectile/ship_ammo/nephilim/ap),
+ )
+
+/obj/item/gun/energy/admin_ship_weapon/consume_next_projectile() //Longbow ammo has warhead data that can't simply be set in the firemodes.
+ var/obj/projectile/ship_ammo/projectile = ..()
+ if(!projectile)
+ return projectile
+
+ var/datum/firemode/current_mode = firemodes[sel_mode]
+ var/obj/item/ship_ammunition/loaded_ammo
+ switch(current_mode?.name)
+ if("longbow ap")
+ loaded_ammo = new /obj/item/ship_ammunition/longbow/preset_ap()
+ projectile.penetrating = 1
+ if("longbow he")
+ loaded_ammo = new /obj/item/ship_ammunition/longbow/preset_he()
+ if("longbow bunkerbuster")
+ loaded_ammo = new /obj/item/ship_ammunition/longbow/preset_bb()
+ projectile.penetrating = 3
+
+ if(!loaded_ammo)
+ return projectile
+
+ loaded_ammo.forceMove(projectile)
+ projectile.ammo = loaded_ammo
+ projectile.name = loaded_ammo.name
+ projectile.desc = loaded_ammo.desc
+ return projectile
+
+/obj/item/gun/energy/admin_ship_weapon/attack_self(mob/user) //So admins can shoot this at the ship from out of sight.
+ toggle_scope(2.0, user)
+
+/obj/item/gun/energy/admin_ship_weapon/crew
+ name = "horizon artillery testing gun"
+ desc = "If you are holding this, admin-help, this fires the horizon's guns"
+
+ firemodes = list(
+ // Francisca
+ list(mode_name="francisca fmj", burst=1, projectile_type=/obj/projectile/ship_ammo/francisca),
+ list(mode_name="francisca ap", burst=1, projectile_type=/obj/projectile/ship_ammo/francisca/ap),
+ list(mode_name="francisca frag", burst=1, projectile_type=/obj/projectile/ship_ammo/francisca/frag),
+ // Grauwolf
+ list(mode_name="grauwolf he", burst=1, projectile_type=/obj/projectile/ship_ammo/grauwolf),
+ list(mode_name="grauwolf ap", burst=1, projectile_type=/obj/projectile/ship_ammo/grauwolf/ap),
+ // Longbow
+ list(mode_name="longbow ap", burst=1, projectile_type=/obj/projectile/ship_ammo/longbow),
+ list(mode_name="longbow he", burst=1, projectile_type=/obj/projectile/ship_ammo/longbow),
+ list(mode_name="longbow bunkerbuster", burst=1, projectile_type=/obj/projectile/ship_ammo/longbow),
+ )
+
+//*END OF ADMIN SPAWN ONLY*//
/obj/item/gun/energy/mindflayer
name = "mind flayer"
diff --git a/code/modules/projectiles/modular/laser_base.dm b/code/modules/projectiles/modular/laser_base.dm
index 971e88cc41e..f960a7cbf5c 100644
--- a/code/modules/projectiles/modular/laser_base.dm
+++ b/code/modules/projectiles/modular/laser_base.dm
@@ -42,7 +42,13 @@
condition = reliability
/obj/item/laser_components/proc/handle_improvement(var/skill_level, var/mob/user)
- while (improvement_potential > 0)
+
+ if (total_improved >= IMPROVEMENT_CAP)
+ to_chat(user, SPAN_NOTICE("You don't see any way to improve \the [src] any further."))
+ improvement_potential = 0
+ return
+
+ while (improvement_potential > 0 && total_improved < IMPROVEMENT_CAP)
var/improvement = min(abs(improvement_potential / 100), 0.2) //Caps improvement from a single repair to 20%. This spreads the effect out across multiple stats
var/stat_direction = 1
@@ -66,8 +72,20 @@
break //No stats to improve, it shouldn't be possible to have improvement potential and no stats to improve, but just in case.
if (stat_name in src.vars)
+ var/initial_value = initial(src.vars[stat_name])
improvement_potential -= improvement * 100 //Decreases improvement potential before any skill modifiers.
+ if (initial_value < 0) //If the stat begins negative, such as base_malus for heat vents, handle comparisons by sign.
+ if (stat_direction > 0 && src.vars[stat_name] >= (initial_value * DECREASE_CAP))
+ continue
+ if (stat_direction < 0 && src.vars[stat_name] <= (initial_value * INCREASE_CAP))
+ continue
+ else
+ if (src.vars[stat_name] >= (initial_value * INCREASE_CAP) && stat_direction > 0) //It is possible to waste improvement potential by hitting the cap on a stat, this is fine, it should be harder to improve a component that's already of high quality.
+ continue
+ if (src.vars[stat_name] <= (initial_value * DECREASE_CAP) && stat_direction < 0)
+ continue
+
switch(skill_level ? skill_level : 6)
if(-INFINITY to 2)
improvement *= (rand(-5, -1) / 10) //Always damage it.
@@ -80,21 +98,37 @@
if(6 to INFINITY)
improvement *= (rand(8, 12) / 10)
- if (src.vars[stat_name] > (initial(src.vars[stat_name]) * INCREASE_CAP) && stat_direction > 0) //It is possible to waste improvement potential by hitting the cap on a stat, this is fine, it should be harder to improve a component that's already of high quality.
- continue
- if (src.vars[stat_name] < (initial(src.vars[stat_name]) * DECREASE_CAP) && stat_direction < 0)
- continue
-
- src.vars[stat_name] += stat_direction * abs(initial(src.vars[stat_name]) * improvement) //Adds improvement % of the initial value to the stat.
+ src.vars[stat_name] += stat_direction * abs(initial_value * improvement) //Adds improvement % of the initial value to the stat.
if (improvement > 0)
- to_chat(user, SPAN_NOTICE("Your careful repairs to \the [src] [stat_direction > 0 ? "increase" : "decrease"] its [replacetext(stat_name, "_", " ")] by [improvement * 100] percent!"))
- total_improved += improvement
+ total_improved += improvement * 100
+ if (initial_value < 0)
+ if (stat_direction > 0 && src.vars[stat_name] >= initial_value * DECREASE_CAP)
+ to_chat(user, SPAN_NOTICE("Your repairs to \the [src] have improved its [replacetext(stat_name, "_", " ")] as far as you think is possible."))
+ else if (stat_direction < 0 && src.vars[stat_name] <= initial_value * INCREASE_CAP)
+ to_chat(user, SPAN_NOTICE("Your repairs to \the [src] have improved its [replacetext(stat_name, "_", " ")] as far as you think is possible."))
+ else
+ to_chat(user, SPAN_NOTICE("Your careful repairs to \the [src] [stat_direction > 0 ? "increase" : "decrease"] its [replacetext(stat_name, "_", " ")] by [improvement * 100] percent!"))
+ else
+ if(src.vars[stat_name] >= initial_value * INCREASE_CAP && stat_direction > 0)
+ to_chat(user, SPAN_NOTICE("Your repairs to \the [src] have improved its [replacetext(stat_name, "_", " ")] as far as you think is possible."))
+ else if(src.vars[stat_name] <= initial_value * DECREASE_CAP && stat_direction < 0)
+ to_chat(user, SPAN_NOTICE("Your repairs to \the [src] have improved its [replacetext(stat_name, "_", " ")] as far as you think is possible."))
+ else
+ to_chat(user, SPAN_NOTICE("Your careful repairs to \the [src] [stat_direction > 0 ? "increase" : "decrease"] its [replacetext(stat_name, "_", " ")] by [improvement * 100] percent!"))
+
else if (improvement == 0)
to_chat(user, SPAN_NOTICE("Your repairs to \the [src], don't seem to improve it, but at least you didn't make it worse."))
else
to_chat(user, SPAN_WARNING("Your repairs to \the [src] end up damaging it!"))
+ else
+ break //The stat to improve isn't on this component, something went wrong with the lists of stats or the component itself.
+
+ if (total_improved > IMPROVEMENT_CAP)
+ improvement_potential = 0
+ to_chat(user, SPAN_NOTICE("You have improved \the [src] as much as you can."))
+
/obj/item/laser_components/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(distance > 1)
@@ -150,9 +184,21 @@
if (condition == 0 && malus == base_malus)
to_chat(user, SPAN_WARNING("\The [src] is not damaged."))
return ..()
- to_chat(user, SPAN_WARNING("You begin repairing \the [src]."))
+
var/skill_level = (GET_SKILL_LEVEL(user, FIREARMS_SKILL_COMPONENT) + GET_SKILL_LEVEL(user, RESEARCH_SKILL_COMPONENT))
- if(do_after(user, rand(2 SECONDS, 6 SECONDS), src, DO_UNIQUE) && repair_module(attacking_item, skill_level, user))
+
+ if(attacking_item.tool_behaviour == TOOL_WELDER)
+ var/obj/item/weldingtool/WT = attacking_item
+ if(WT.isOn() && WT.use_tool(src, user, rand(2 SECONDS, (10 - skill_level) SECONDS), volume = 50) && WT.use(0, user) && repair_module(attacking_item, skill_level, user))
+ user.visible_message(
+ SPAN_WARNING("[user] begins repairing \the [src]."),
+ SPAN_NOTICE("You begin repairing \the [src]."),
+ "You hear a welding torch on metal."
+ )
+ else
+ to_chat(user, SPAN_WARNING("You fail to repair \the [src]."))
+
+ else if(do_after(user, rand(2 SECONDS, (10 - skill_level) SECONDS), src, DO_UNIQUE) && repair_module(attacking_item, skill_level, user)) //Used if the repair item is not a tool.
to_chat(user, SPAN_NOTICE("You repair \the [src]."))
else
to_chat(user, SPAN_WARNING("You fail to repair \the [src]."))
@@ -189,7 +235,7 @@
return
if(malus == base_malus)
return 0
- if(W.use(2))
+ if(W.use(1)) //Welders burn fuel while active
handle_improvement(skill_level, user)
malus = max(malus - 5, base_malus)
return 1
@@ -332,8 +378,10 @@
var/success = FALSE
if(!istype(A))
return ..()
- if(!ready_to_craft)
- to_chat(user, SPAN_WARNING("You cannot modify \the [src] by hand, you need to use a weapons analyzer."))
+
+ var/skill_level = (GET_SKILL_LEVEL(user, FIREARMS_SKILL_COMPONENT) + GET_SKILL_LEVEL(user, RESEARCH_SKILL_COMPONENT))
+ if(!ready_to_craft && skill_level < 5)
+ to_chat(user, SPAN_WARNING("You cannot modify \the [src] by hand at your current skill level, you need to use a weapons analyzer."))
return
if(ismodifier(A) && gun_mods.len < modifier_cap)
@@ -389,9 +437,7 @@
/obj/item/laser_assembly/proc/finish()
- var/obj/structure/machinery/r_n_d/weapons_analyzer/an = analyzer.resolve()
- if(!an)
- return FALSE
+ var/obj/structure/machinery/r_n_d/weapons_analyzer/an = analyzer ? analyzer.resolve() : null
var/obj/item/gun/energy/laser/prototype/A = new /obj/item/gun/energy/laser/prototype
A.icon_state = icon_state
@@ -410,9 +456,13 @@
mod.forceMove(A)
if(mod.gun_overlay)
A.underlays += mod.gun_overlay
- A.forceMove(an)
- an.item = A
+ if(an)
+ A.forceMove(an)
+ an.item = A
+ else
+ A.forceMove(get_turf(src))
A.updatetype()
+ A.try_recharge()
A.pin = null
gun_mods = null
focusing_lens = null
diff --git a/code/modules/projectiles/modular/laser_components.dm b/code/modules/projectiles/modular/laser_components.dm
index f0483690043..3d22b02e776 100644
--- a/code/modules/projectiles/modular/laser_components.dm
+++ b/code/modules/projectiles/modular/laser_components.dm
@@ -303,7 +303,7 @@
accuracy = -1
icon_state = "rotating_lens"
increasable_stats = list()
- decreaseable_stats = list("fire_delay", "chargetime")
+ decreaseable_stats = list("burst_delay", "chargetime")
/obj/item/laser_components/modifier/scope
name = "telescopic sight"
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index 07fe18585a0..8a012fcc23e 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -78,7 +78,7 @@
var/pierce_chance = 0
/// 0-1 multiplier, the projectile's damage is modified by multiplying this after each pierce.
var/pierce_decay_damage = 0.7
- ///Used to determine whether or not to apply embed chances on hit.
+ ///Used to determine whether or not to apply embed chances on hit, also used in ship weapons for spalling.
var/last_hit_pierced = FALSE
/// If objects are below this layer, we pass through them.
var/hit_threshhold = PROJECTILE_HIT_THRESHHOLD_LAYER
@@ -1220,8 +1220,8 @@
var/obj/item/SP = new shrapnel_type(organ)
SP.edge = TRUE
SP.sharp = TRUE
- SP.name = (name != "shrapnel") ? "[initial(name)] shrapnel" : "shrapnel"
- SP.desc += " It looks like it was fired from [fired_from]."
+ SP.name = (name != "shrapnel") ? "[name] shrapnel" : "shrapnel"
+ SP.desc += " It looks like it came from from \a [fired_from]."
SP.forceMove(organ)
organ.embed(SP)
return SP
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index 7ce3d1727d5..f0f945fb636 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -397,7 +397,7 @@
M.emitter_blasts_taken += 1
else if(prob(33))
M.emitter_blasts_taken += 1
- explosion(target, -1, 0, 2)
+ explosion(get_turf(target), -1, 0, 2)
. = ..()
/obj/projectile/beam/thermaldrill
diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm
index be1db6e3506..4d2a7d12837 100644
--- a/code/modules/projectiles/projectile/bullets.dm
+++ b/code/modules/projectiles/projectile/bullets.dm
@@ -481,7 +481,7 @@
/obj/projectile/bullet/gauss/highex/on_hit(atom/target, blocked, def_zone)
. = ..()
- explosion(target, -1, 0, 2)
+ explosion(get_turf(target), -1, 0, 2)
if(ismovable(target))
var/atom/movable/T = target
var/throwdir = get_dir(firer,target)
@@ -502,7 +502,7 @@
armor_penetration = 5
/obj/projectile/bullet/cannonball/explosive/on_hit(atom/target, blocked, def_zone)
- explosion(target, -1, 1, 2)
+ explosion(get_turf(target), -1, 1, 2)
. = ..()
/obj/projectile/bullet/nuke
@@ -518,7 +518,7 @@
if(ishuman(mob))
mob.apply_damage(250, DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED)
new /obj/effect/temp_visual/nuke(target.loc)
- explosion(target,2,5,9)
+ explosion(get_turf(target),2,5,9)
. = ..()
/obj/projectile/bullet/shard
@@ -542,7 +542,7 @@
var/heavy_impact_range = 1
/obj/projectile/bullet/recoilless_rifle/on_hit(atom/target, blocked, def_zone)
- explosion(target, -1, heavy_impact_range, 2)
+ explosion(get_turf(target), -1, heavy_impact_range, 2)
. = ..()
/obj/projectile/bullet/peac
@@ -562,7 +562,7 @@
/obj/projectile/bullet/peac/on_hit(atom/target, blocked, def_zone)
. = ..()
- explosion(target, devastation_range, heavy_impact_range, light_impact_range)
+ explosion(get_turf(target), devastation_range, heavy_impact_range, light_impact_range)
/obj/projectile/bullet/peac/he
name = "high-explosive missile"
diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm
index 091df069b5d..a19652b52be 100644
--- a/code/modules/projectiles/projectile/energy.dm
+++ b/code/modules/projectiles/projectile/energy.dm
@@ -115,7 +115,7 @@
if(ismob(target))
var/mob/M = target
M.gib()
- explosion(target, -1, 0, 5)
+ explosion(get_turf(target), -1, 0, 5)
. = ..()
/obj/projectile/energy/bfg/New()
diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm
index bab1b6e2fcb..8c9d8bd4c8b 100644
--- a/code/modules/projectiles/projectile/special.dm
+++ b/code/modules/projectiles/projectile/special.dm
@@ -76,7 +76,7 @@
edge = TRUE
/obj/projectile/bullet/gyro/on_hit(atom/target, blocked, def_zone)
- explosion(target, -1, 0, 2)
+ explosion(get_turf(target), -1, 0, 2)
. = ..()
/obj/projectile/bullet/gyro/law
@@ -87,7 +87,7 @@
/obj/projectile/bullet/gyro/law/on_hit(atom/target, blocked, def_zone)
. = ..()
- explosion(target, -1, 0, 2)
+ explosion(get_turf(target), -1, 0, 2)
var/obj/T = target
var/throwdir = get_dir(firer,target)
T.throw_at(get_edge_target_turf(target, throwdir),3,3)
@@ -215,7 +215,7 @@
edge = TRUE
/obj/projectile/bullet/trod/on_hit(atom/target, blocked, def_zone)
- explosion(target, 0, 0, 4)
+ explosion(get_turf(target), 0, 0, 4)
. = ..()
/obj/projectile/chameleon
@@ -235,7 +235,7 @@
penetrating = 1
/obj/projectile/bullet/cannon/on_hit(atom/target, blocked, def_zone)
- explosion(target, 1, 2, 3, 3)
+ explosion(get_turf(target), 1, 2, 3, 3)
. = ..()
//magic
@@ -256,7 +256,7 @@
damage_type = DAMAGE_BURN
/obj/projectile/magic/fireball/on_hit(atom/target, blocked, def_zone)
- explosion(target, 0, 0, 4)
+ explosion(get_turf(target), 0, 0, 4)
. = ..()
/obj/projectile/magic/teleport //literaly bluespace crystal code, because i am lazy and it seems to work
@@ -301,7 +301,7 @@
/obj/item/missile/throw_impact(atom/hit_atom)
if(primed)
- explosion(hit_atom, 0, 1, 2, 4)
+ explosion(get_turf(hit_atom), 0, 1, 2, 4)
qdel(src)
else
..()
diff --git a/code/modules/projectiles/targeting/targeting_mob.dm b/code/modules/projectiles/targeting/targeting_mob.dm
index 564d9ecd876..1a8792e439e 100644
--- a/code/modules/projectiles/targeting/targeting_mob.dm
+++ b/code/modules/projectiles/targeting/targeting_mob.dm
@@ -1,10 +1,3 @@
-/mob/living
- ///The obj to overlay on the aim target
- var/obj/aiming_overlay/aiming
-
- ///A list of mobs the target is being aimed at by
- var/list/aimed_at_by
-
/mob/verb/toggle_gun_mode()
set name = "Toggle Gun Mode"
set desc = "Begin or stop aiming."
diff --git a/code/modules/psionics/abilities/hollow_purple.dm b/code/modules/psionics/abilities/hollow_purple.dm
index 75cf907b339..5bf9f9a8f85 100644
--- a/code/modules/psionics/abilities/hollow_purple.dm
+++ b/code/modules/psionics/abilities/hollow_purple.dm
@@ -77,7 +77,7 @@
if(target != firer)
var/mob/M = target
M.gib()
- explosion(target, 5, 5, 5)
+ explosion(get_turf(target), 5, 5, 5)
. = ..()
// /obj/projectile/hollow_purple/after_move()
diff --git a/code/modules/psionics/mob/mob.dm b/code/modules/psionics/mob/mob.dm
index dddb4da3b50..336ce6a444e 100644
--- a/code/modules/psionics/mob/mob.dm
+++ b/code/modules/psionics/mob/mob.dm
@@ -1,6 +1,3 @@
-/mob/living
- var/datum/psi_complexus/psi
-
/mob/living/proc/set_psi_rank(var/rank, var/defer_update, var/temporary)
if(HAS_TRAIT(src, TRAIT_PSIONICALLY_DEAF))
to_chat(src, SPAN_WARNING("Something tingles in your head."))
diff --git a/code/modules/radiation/radiation.dm b/code/modules/radiation/radiation.dm
index 9e52c54b5a2..f913946eeb3 100644
--- a/code/modules/radiation/radiation.dm
+++ b/code/modules/radiation/radiation.dm
@@ -58,10 +58,6 @@
SSradiation.resistance_cache[src] = (length(contents) + 1)
cached_rad_resistance = (density ? material.weight / RADIATION_MATERIAL_RESISTANCE_DIVISOR : 0)
-/obj
- /// Allow overriding rad resistance.
- var/rad_resistance_modifier = 1
-
/**
* Retrieves the atom's current radiation level. By default, this will return `loc.get_rads()`.
*
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index 7ca35691a6f..20beaa5d926 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -12,6 +12,7 @@
var/capacity = 1000
var/can_tamper = TRUE
var/is_leaking = FALSE
+ maxhealth = OBJECT_HEALTH_HIGH
/obj/structure/reagent_dispensers/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
@@ -97,6 +98,15 @@
var/splash_amount = min(amount_per_transfer_from_this,60) //Hard limit of 60 per process
reagents.trans_to_turf(get_turf(src),splash_amount)
+/obj/structure/reagent_dispensers/on_death(damage, damage_flags, damage_type, armor_penetration, obj/weapon)
+ if(!should_use_health)
+ return FALSE
+ if(reagents.total_volume > 0)
+ var/splash_area = max(1, round(sqrt(reagents.total_volume / 60.0))) //Splash roughly 60u on every turf.
+ reagents.splash_area(get_turf(src), splash_area, reagents.total_volume)
+ visible_message(SPAN_WARNING("As \the [src] is destroyed, it spills [reagents.get_primary_reagent_name()] everywhere!"))
+ dismantle()
+
//Fire extinguisher tank
/obj/structure/reagent_dispensers/extinguisher
@@ -255,6 +265,8 @@
amount_per_transfer_from_this = 45
can_tamper = FALSE
reagents_to_add = list(/singleton/reagent/capsaicin/condensed = 1000)
+ maxhealth = OBJECT_HEALTH_VERY_LOW //Made of glass.
+ material = MATERIAL_GLASS
/obj/structure/reagent_dispensers/virusfood
name = "virus food dispenser"
@@ -265,6 +277,8 @@
density = 0
can_tamper = FALSE
reagents_to_add = list(/singleton/reagent/nutriment/virusfood = 1000)
+ maxhealth = OBJECT_HEALTH_VERY_LOW //Made of glass.
+ material = MATERIAL_GLASS
/obj/structure/reagent_dispensers/acid
name = "sulphuric acid dispenser"
@@ -275,6 +289,8 @@
density = 0
can_tamper = FALSE
reagents_to_add = list(/singleton/reagent/acid = 1000)
+ maxhealth = OBJECT_HEALTH_VERY_LOW //Made of glass.
+ material = MATERIAL_GLASS
/obj/structure/reagent_dispensers/peppertank/luminol
name = "luminol dispenser"
@@ -282,6 +298,8 @@
icon_state = "luminoltank"
amount_per_transfer_from_this = 50
reagents_to_add = list(/singleton/reagent/luminol = 1000)
+ maxhealth = OBJECT_HEALTH_VERY_LOW //Made of glass.
+ material = MATERIAL_GLASS
/obj/structure/reagent_dispensers/peppertank/spacecleaner
name = "cleaner dispenser"
@@ -289,6 +307,8 @@
icon_state = "cleanertank"
amount_per_transfer_from_this = 250
reagents_to_add = list(/singleton/reagent/spacecleaner = 1000)
+ maxhealth = OBJECT_HEALTH_VERY_LOW //Made of glass.
+ material = MATERIAL_GLASS
//Water Cooler
@@ -305,6 +325,8 @@
reagents_to_add = list(/singleton/reagent/water = 500)
var/cups = 12
var/cup_type = /obj/item/reagent_containers/food/drinks/sillycup
+ maxhealth = OBJECT_HEALTH_LOW //Made of plastic.
+ material = MATERIAL_PLASTIC
/obj/structure/reagent_dispensers/water_cooler/attack_hand(var/mob/user)
if(cups > 0)
@@ -348,6 +370,8 @@
desc = "An empty keg."
icon_state = "keg"
amount_per_transfer_from_this = 10
+ maxhealth = OBJECT_HEALTH_LOW //Made of wood
+ material = MATERIAL_WOOD
/obj/structure/reagent_dispensers/keg/attackby(obj/item/attacking_item, mob/user)
if (istype(attacking_item, /obj/item/stack/rods))
@@ -479,6 +503,8 @@
icon_state = "chemical_barrel"
amount_per_transfer_from_this = 300
reagents_to_add = list(/singleton/reagent/radioactive_waste = 1000)
+ maxhealth = OBJECT_HEALTH_VERY_HIGH //Made of plasteel, because it's dangerous to break.
+ material = MATERIAL_PLASTEEL
/obj/structure/reagent_dispensers/antagonist_hints(mob/user, distance, is_adjacent)
. += ..()
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index b07a7d4dc5b..6c872ca91ac 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -716,9 +716,9 @@ won't update every console in existence) but it's more of a hassle to do. Also,
dat += "[last_category] "
var/temp_dat
for(var/M in D.materials)
- temp_dat += ", [D.materials[M]*linked_imprinter.mat_efficiency] [CallMaterialName(M)]"
+ temp_dat += ", [D.materials[M]*linked_lathe.mat_efficiency] [CallMaterialName(M)]"
for(var/T in D.chemicals)
- temp_dat += ", [D.chemicals[T]*linked_imprinter.mat_efficiency] [CallReagentName(T)]"
+ temp_dat += ", [D.chemicals[T]*linked_lathe.mat_efficiency] [CallReagentName(T)]"
if(temp_dat)
temp_dat = " \[[copytext(temp_dat, 3)]\]"
if(linked_lathe.canBuild(D))
diff --git a/code/modules/research/weaponsanalyzer.dm b/code/modules/research/weaponsanalyzer.dm
index 1f0421a5e15..8b30ceee471 100644
--- a/code/modules/research/weaponsanalyzer.dm
+++ b/code/modules/research/weaponsanalyzer.dm
@@ -23,6 +23,13 @@
var/mob/living/carbon/human/H = user
+ if(default_deconstruction_screwdriver(user, attacking_item))
+ return TRUE
+ if(default_deconstruction_crowbar(user, attacking_item))
+ return TRUE
+ if(default_part_replacement(user, attacking_item))
+ return TRUE
+
if(istype(attacking_item, /obj/item/gun))
check_swap(user, attacking_item)
item = attacking_item
@@ -55,7 +62,8 @@
addtimer(CALLBACK(src, PROC_REF(reset)), 15)
process = TRUE
update_icon()
-
+ else if(istype(attacking_item, /obj/item/combitool))
+ return
else if(attacking_item)
check_swap(user, attacking_item)
item = attacking_item
@@ -120,7 +128,7 @@
if(istype(item, /obj/item/laser_assembly))
var/obj/item/laser_assembly/A = item
A.update_icon()
- icon_state = process ? "[icon_state]_working" : "[icon_state]_on"
+ icon_state = process ? "[icon_state]_working" : "[icon_state]_on"
Icon_used = new /icon(item.icon, item.icon_state)
else if(item)
icon_state = "[icon_state]_on"
diff --git a/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm b/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm
index 11282354d88..955b891d8be 100644
--- a/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm
+++ b/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm
@@ -4,9 +4,6 @@
// This could be extended to atoms, but it's bad enough as is
// I genuinely tried to Add and Remove them from var and proc lists, but just couldn't get it working
-//for easy reference
-/obj/var/datum/talking_atom/talking_atom
-
/datum/talking_atom
var/list/heard_words = list()
var/last_talk_time = 0
diff --git a/code/modules/research/xenoarchaeology/misc.dm b/code/modules/research/xenoarchaeology/misc.dm
index fbc5cde3290..39aaeeb4556 100644
--- a/code/modules/research/xenoarchaeology/misc.dm
+++ b/code/modules/research/xenoarchaeology/misc.dm
@@ -70,4 +70,3 @@
/obj/structure/machinery/alarm/monitor/isolation
req_one_access = list(ACCESS_RESEARCH, ACCESS_ATMOSPHERICS, ACCESS_ENGINE_EQUIP)
locked = 0
- remote_control = 1
diff --git a/code/modules/shareddream/dream_entry.dm b/code/modules/shareddream/dream_entry.dm
index a9a11bbae60..b22259c5d57 100644
--- a/code/modules/shareddream/dream_entry.dm
+++ b/code/modules/shareddream/dream_entry.dm
@@ -1,13 +1,6 @@
///A list of `/turf` where the Srom is located, and people entering the shared dream (presumably Skrells sleeping) will be casted to
GLOBAL_LIST_EMPTY_TYPED(dream_entries, /turf)
-/mob
- var/mob/living/brain_ghost/bg
-
-/mob/living/carbon/human
- var/datum/weakref/srom_pulled_by
- var/datum/weakref/srom_pulling
-
/mob/living/carbon/human/proc/handle_shared_dreaming(var/force_wakeup = FALSE)
SHOULD_NOT_SLEEP(TRUE)
if(is_psi_blocked(src)) // Can't enter the dream if the caster is blocked from RECEIVING. It's a two-way street.
diff --git a/code/modules/shieldgen/_energy_field.dm b/code/modules/shieldgen/_energy_field.dm
index bf74e5c8f50..4040952b431 100644
--- a/code/modules/shieldgen/_energy_field.dm
+++ b/code/modules/shieldgen/_energy_field.dm
@@ -5,11 +5,11 @@
/// The actual strength of the field.
var/field_strength = 0
/// Current strengthening rate of a single field.
- var/strengthen_rate = 0.2
- /// Maximum rate by which an energy field can be strengthened.
- var/max_strengthen_rate = 0.5
- /// The percentage of the shield strength that needs to be replaced each second
- var/dissipation_rate = 0.030
+ var/strengthen_rate = 0.1
+ /// Maximum rate by which an energy field can be strengthened. This is set by shield components in RefreshComponents, the initial rate with standard components is 0.5 (2 Manipulators, Rating 1: give 0.1 each)
+ var/max_strengthen_rate = 0.3
+ /// The percentage of the shield strength that needs to be replaced each second. This is modified by shield components in RefreshComponents, the initial rate with standard components is 0.030. (2 Micro Lasers, Rating 1: subtract 0.003 each)
+ var/dissipation_rate = 0.036
/// An energy field will dissipate by at least this rate in renwicks per field tile (otherwise field would never dissipate completely as dissipation is a percentage)
var/min_dissipation = 0.01
/// Our target field strength.
@@ -18,8 +18,8 @@
var/max_field_strength = 10
/// The time passed since the last "fail", AKA losing charge faster than you can replenish it.
var/time_since_fail = 100
- /// How many renwicks per watt.
- var/energy_conversion_rate = 0.00006
+ /// How many renwicks per watt. This is modified by shield components in RefreshComponents, the initial rate with standard components is 0.00005 (2 Capacitors, Rating 1: give 0.00001 each)
+ var/energy_conversion_rate = 0.00003
/// If the field is strong, then the energy field objects will turn dense.
var/strong_field = FALSE
@@ -32,6 +32,7 @@
* @assumed_charge: the charge that is given to this energy field. You have to get the required energy first, if you want a balanced field.
*/
/datum/energy_field/proc/handle_strength(assumed_charge = 0)
+ assumed_charge = max(assumed_charge, 0)
if(length(field))
time_since_fail++
//the amount of renwicks that the generator can add this tick, over the entire field
@@ -40,7 +41,7 @@
var/renwick_increase_per_field = total_renwick_increase / length(field) //per field tile
var/renwick_upkeep_per_field = max(field_strength * dissipation_rate, min_dissipation)
var/amount_to_strengthen = renwick_increase_per_field - renwick_upkeep_per_field
- field_strength = min(field_strength + amount_to_strengthen, max_field_strength)
+ field_strength = max(min(field_strength + amount_to_strengthen, max_field_strength), 0)
if(field_strength < 1)
if(strong_field)
@@ -61,7 +62,7 @@
var/required_energy = 0
if(length(field))
var/renwick_upkeep_per_field = max(field_strength * dissipation_rate, min_dissipation)
- var/target_renwick_increase = min(target_field_strength - field_strength, strengthen_rate) + renwick_upkeep_per_field //per field tile
+ var/target_renwick_increase = max(min(target_field_strength - field_strength, strengthen_rate) + renwick_upkeep_per_field, 0) //per field tile
required_energy = length(field) * target_renwick_increase / energy_conversion_rate
return required_energy
@@ -100,8 +101,8 @@
data["average_field"] = round(field_strength, 0.01)
data["progress_field"] = (target_field_strength ? round(100 * field_strength / target_field_strength, 0.1) : "NA")
- data["power_take"] = round(length(field) * max(field_strength * dissipation_rate, min_dissipation) / energy_conversion_rate)
- data["shield_power"] = round(length(field) * min(strengthen_rate, target_field_strength - field_strength) / energy_conversion_rate)
+ data["power_take"] = round(length(field) * max(field_strength * dissipation_rate, min_dissipation) / energy_conversion_rate / 1000) //Divide by 100 to convert to kW
+ data["shield_power"] = round(max(length(field) * min(strengthen_rate, target_field_strength - field_strength) / energy_conversion_rate / 1000, 0)) //Divide by 100 to convert to kW
data["strengthen_rate"] = (strengthen_rate * 10)
data["max_strengthen_rate"] = (max_strengthen_rate * 10)
data["target_field_strength"] = target_field_strength
diff --git a/code/modules/shieldgen/emergency_shield.dm b/code/modules/shieldgen/emergency_shield.dm
index 87a611f4c68..356d264fefa 100644
--- a/code/modules/shieldgen/emergency_shield.dm
+++ b/code/modules/shieldgen/emergency_shield.dm
@@ -334,7 +334,7 @@
/obj/structure/machinery/shield/attackby(obj/item/attacking_item, mob/user)
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
- user.do_attack_animation(src, attacking_item)
+ user.do_attack_animation(src, used_item = attacking_item)
//Calculate damage
var/aforce = attacking_item.force
if(attacking_item.damtype == DAMAGE_BRUTE || attacking_item.damtype == DAMAGE_BURN)
diff --git a/code/modules/shieldgen/energy_field.dm b/code/modules/shieldgen/energy_field.dm
index 3c9de1eefaf..d13f073587c 100644
--- a/code/modules/shieldgen/energy_field.dm
+++ b/code/modules/shieldgen/energy_field.dm
@@ -18,6 +18,7 @@
var/ticks_recovering = 10
/// If strength goes is 1 or above, this is set to TRUE, this is to prevent flickering and animate being called constantly
var/is_strong = FALSE
+ pass_flags_self = PASSSHIELD //Currently only ship weapons have this flag.
atmos_canpass = CANPASS_ALWAYS
@@ -42,7 +43,8 @@
energy_field.remove_individual_field(src)
/obj/effect/energy_field/attackby(obj/item/attacking_item, mob/user)
- user.do_attack_animation(src, attacking_item)
+ user.do_attack_animation(src, used_item = attacking_item)
+ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
if(attacking_item.force < 10)
user.visible_message(SPAN_WARNING("[user] harmlessly attacks \the [src] with \the [attacking_item]."),
SPAN_WARNING("You attack \the [src] with \the [attacking_item], but it bounces off without doing any damage."))
@@ -55,7 +57,7 @@
if(istype(H))
if(H.species.can_shred(H))
H.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
- H.do_attack_animation(src, FIST_ATTACK_ANIMATION)
+ H.do_attack_animation(src)
H.visible_message(SPAN_WARNING("[H] shreds \the [src]!"), SPAN_WARNING("You shred \the [src]!"))
damage_field(1)
return
@@ -65,17 +67,76 @@
damage_field(0.5 + severity)
/obj/effect/energy_field/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit)
- . = ..()
+
+ var/initial_damage = hitting_projectile.get_structure_damage()
+ /**
+ * The shield has three possible interactions with a projectile:
+ *
+ * If the projectile is piercing (penetrating >= 1 and pierce_flags = PASSSHIELD), the shield will decrease what it can subsequently penetrate.
+ * The projectile will have it's pierces increased by half the shield's strength. If a projectile's pierces is greater than it's penetrating, it stops.
+ *
+ * Eg. A penetrating 10 shot hits a strength 10 shield. It will subsequently go through 4 additional walls (10/2 = 5, +1 for the shield tile), instead of the 10 it would originally.
+ */
+ if(piercing_hit)
+ hitting_projectile.pierces += round((energy_field.field_strength / 2))
+ if(hitting_projectile.pierces < hitting_projectile.penetrating)
+ visible_message(SPAN_WARNING("\The [src] flickers and fails as it is penetrated by the \the [hitting_projectile]."))
+ damage_field(initial_damage / 20) //The shield takes less damage if it is penetrated like this.
+ return BULLET_ACT_FORCE_PIERCE
+
+ /**
+ * A projectile without pass_flags = PASSSHIELD will have its damage reduced by the shield, if its damage is reduced to zero it is blocked.
+ * A strong projectile hitting a weak shield will penetrate it. A strength 10 field will always block a projectile.
+ * The projectile's damage is multiplied by 1 minus the shield's strength divided by 10, then the shield's strength is subtracted from it's damage.
+ *
+ * Eg. A 50 damage projectile hits a 5 strength shield. (damage multiplier: 1 - 5/10 = 0.5), (shot damage: = 50 * 0.5 = 25), (final damage: 25 - 5 = 20). Penetrates.
+ * Therefore the shot would continue on, but only deal 20 damage when it hits.
+ *
+ * Eg. A 50 damage projectile hits a 9 strength shield. (damage multiplier: 1 - 9/10 = 0.1), (shot damage: = 50 * 0.1 = 5), (final damage: 5 - 9 = -4). Blocked.
+ */
+ if(energy_field.field_strength < 10) //A strength 10 field will always block a projectile. Without modifications to the engines, one or more upgraded SMES units, or upgrades from research the Horizon cannot generate a field of strength 10 that covers the whole ship.
+ hitting_projectile.damage *= 1 - max(0, energy_field.field_strength / 10)
+ hitting_projectile.damage -= energy_field.field_strength
+ if(hitting_projectile.damage >= 0)
+ damage_field(initial_damage / 10)
+ visible_message(SPAN_WARNING("\The [src] flashes and depletes the [hitting_projectile]'s energy, but doesn't fully block it."))
+ return BULLET_ACT_FORCE_PIERCE
+ else
+ visible_message(SPAN_WARNING("\The [src] shimmers and absorbs \the [hitting_projectile]."))
+ return BULLET_ACT_BLOCK
+
+ /**
+ * An explosive projectile that fails to penetrate will be deleted before it can explode.
+ * All explosive ship weapons also have high damage, so this only really matters on a strength 10 shield.
+ * If the projectile is explosive, it deals whatever damage that explosion would have done to the shield.
+ */
+ if(istype(hitting_projectile, /obj/projectile/ship_ammo))
+ var/obj/projectile/ship_ammo/explosive_projectile = hitting_projectile
+ if(explosive_projectile.explosion_strength[3] || explosive_projectile.explosion_strength[2] || explosive_projectile.explosion_strength[1])
+ for(var/obj/effect/energy_field/shield_tile in energy_field.field)
+ var/distance = get_dist(src, shield_tile)
+ if(distance <= explosive_projectile.explosion_strength[1])
+ shield_tile.damage_field(3)
+ else if(distance <= explosive_projectile.explosion_strength[2])
+ shield_tile.damage_field(2)
+ else if(distance <= explosive_projectile.explosion_strength[3])
+ shield_tile.damage_field(1)
+ // explosive_projectile.explosion_strength = list(0, 0, 0) // Set the explosion strength to 0.
+ visible_message(SPAN_WARNING("\The [src] shimmers and absorbs \the [hitting_projectile]."))
+ return BULLET_ACT_BLOCK
+
+ damage_field(initial_damage / 10)
+
+ . = ..() //If we get down here fall back on normal piercing calculations, for normal projectiles hitting shields.
if(. != BULLET_ACT_HIT)
return .
- damage_field(hitting_projectile.get_structure_damage() / 10)
-
/obj/effect/energy_field/proc/damage_field(var/severity)
if(!severity)
return
damage += severity
+ energy_field.field_strength = max(energy_field.field_strength - (severity / length(energy_field.field)), 0)
if(!(datum_flags & DF_ISPROCESSING))
// Start processing ONLY when we're damaged. Through processing, we're going to slowly climb back up to field strength.
diff --git a/code/modules/shieldgen/shield_capacitor.dm b/code/modules/shieldgen/shield_capacitor.dm
index 5bbd8d2f3e1..181fe3ecc7a 100644
--- a/code/modules/shieldgen/shield_capacitor.dm
+++ b/code/modules/shieldgen/shield_capacitor.dm
@@ -14,13 +14,33 @@
var/stored_charge = 0
var/last_stored_charge = 0
var/time_since_fail = 100
- var/max_charge = 2e7 //20 MJ
- var/max_charge_rate = 9000000 //9 MW
+ ///How much energy the capacitor can store, value is in Joules, displayed in the UI as MJ. This value is calculated in RefreshParts() based on the components used, the value listed here is what base components provides, changing the value only here will not do anything.
+ var/max_charge = 20 MEGA //200 MJ
+ ///How much energy the capacitor can absorb per second, value is in Watts, displayed in the UI as MW. This value is calculated in RefreshParts() based on the components used, the value listed here is what base components provides, changing the value only here will not do anything.
+ var/max_charge_rate = 9 MEGA WATTS //9 MW
var/locked = FALSE
- var/charge_rate = 100000 //100 kW
+ var/charge_rate = 100 KILO WATTS //100 kW
var/obj/structure/machinery/shield_gen/owned_gen
+ component_types = list(
+ /obj/item/circuitboard/shield_cap,
+ /obj/item/stock_parts/capacitor = 4,
+ /obj/item/stock_parts/micro_laser = 1,
+ /obj/item/stock_parts/subspace/filter = 1,
+ /obj/item/stock_parts/subspace/treatment = 1,
+ /obj/item/stock_parts/subspace/analyzer = 1,
+ /obj/item/stock_parts/console_screen = 1,
+ /obj/item/stack/cable_coil = 5
+ )
+
+/obj/structure/machinery/shield_capacitor/upgrade_hints(mob/user, distance, is_adjacent)
+ . += ..()
+ . += "Upgraded capacitors will increase capacity."
+ . += SPAN_NOTICE(" - The current capacity is [max_charge / 1e6] MJ")
+ . += "Upgraded microlasers will increase the charging rate."
+ . += SPAN_NOTICE(" - The current maximum charge rate is [max_charge_rate / 1e6] MW")
+
/obj/structure/machinery/shield_capacitor/Initialize()
..()
return INITIALIZE_HINT_LATELOAD
@@ -29,8 +49,9 @@
. = ..()
for(var/obj/structure/machinery/shield_gen/possible_gen in range(1, src))
if(get_dir(src, possible_gen) == dir)
- possible_gen.owned_capacitor = src
- break
+ if(possible_gen.attach_capacitor(src))
+ owned_gen = possible_gen
+ break
/obj/structure/machinery/shield_capacitor/emag_act(var/remaining_charges, var/mob/user)
if(prob(75))
@@ -40,8 +61,26 @@
updateDialog()
spark(src, 5, GLOB.alldirs)
+/obj/structure/machinery/shield_capacitor/RefreshParts()
+ ..()
+ max_charge = 0
+ max_charge_rate = 6 MEGA WATTS //9 MW after base components. 15 MW with full upgrades.
+
+ for(var/obj/item/stock_parts/P in component_parts)
+ if(iscapacitor(P))
+ max_charge += P.rating * 5 MEGA
+ else if(ismicrolaser(P))
+ max_charge_rate += P.rating * 3 MEGA WATTS
+
/obj/structure/machinery/shield_capacitor/attackby(obj/item/attacking_item, mob/user)
+ if(default_part_replacement(user, attacking_item))
+ return TRUE
+ else if(default_deconstruction_screwdriver(user, attacking_item))
+ return TRUE
+ else if(default_deconstruction_crowbar(user, attacking_item))
+ return TRUE
+
if(istype(attacking_item, /obj/item/card/id))
if(allowed(user))
locked = !locked
@@ -55,14 +94,14 @@
if(anchored)
for(var/obj/structure/machinery/shield_gen/gen in range(1, src))
- if(get_dir(src, gen) == src.dir && !gen.owned_capacitor)
- owned_gen = gen
- owned_gen.owned_capacitor = src
- owned_gen.updateDialog()
+ if(get_dir(src, gen) == src.dir)
+ if(gen.attach_capacitor(src))
+ owned_gen = gen
+ break
else
- if(owned_gen && owned_gen.owned_capacitor == src)
- owned_gen.owned_capacitor = null
- owned_gen = null
+ if(owned_gen)
+ owned_gen.detach_capacitor(src)
+ owned_gen = null
else
..()
@@ -71,6 +110,11 @@
return
ui_interact(user)
+/obj/structure/machinery/shield_capacitor/attack_ai(mob/user)
+ if(!ai_can_interact(user))
+ return
+ return attack_hand(user)
+
/obj/structure/machinery/shield_capacitor/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
@@ -83,10 +127,10 @@
data["locked"] = locked
data["active"] = active
data["time_since_fail"] = time_since_fail
- data["charge_rate"] = charge_rate
- data["stored_charge"] = stored_charge
- data["max_charge"] = max_charge
- data["max_charge_rate"] = max_charge_rate
+ data["charge_rate"] = charge_rate / 1000 //UI expects kW
+ data["stored_charge"] = round(stored_charge / 1e6, 0.1) //UI expects MJ
+ data["max_charge"] = max_charge / 1e6 //UI expects MJ
+ data["max_charge_rate"] = max_charge_rate / 1000 //UI expects kW
return data
/obj/structure/machinery/shield_capacitor/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
@@ -101,7 +145,8 @@
active = !active
. = TRUE
if("charge_rate")
- charge_rate = between(10000, params["charge_rate"], max_charge_rate)
+ // UI sends kW; convert to W and clamp.
+ charge_rate = between(0 KILO WATTS, round(params["charge_rate"]) * 1000, max_charge_rate)
. = TRUE
/obj/structure/machinery/shield_capacitor/process()
@@ -140,4 +185,3 @@
/// Horizon-specific non-variant, for now.
/obj/structure/machinery/shield_capacitor/multiz
-
diff --git a/code/modules/shieldgen/shield_gen.dm b/code/modules/shieldgen/shield_gen.dm
index 74444065f45..5d177effd09 100644
--- a/code/modules/shieldgen/shield_gen.dm
+++ b/code/modules/shieldgen/shield_gen.dm
@@ -25,23 +25,52 @@
var/field_radius = 3
/// Maximum field radius.
var/max_field_radius = 100
- /// The shield capacitor attached to this shield generator.
- var/obj/structure/machinery/shield_capacitor/owned_capacitor
+ /// The shield capacitors attached to this shield generator.
+ var/list/owned_capacitors = list()
/// If this shield generator supports multi-z.
var/multiz = TRUE
+ ///How much the manipulator rating increases the maximum field strengthen rate. This increases how fast the shield can strengthen, allowing it to recover faster.
+ var/manipulator_bonus = 0.1 //Maximum recovery rate with base components is 0.5 renwicks per second, with maxed out manipulators it's 0.9 renwicks per second.
+ ///How much the capacitor rating increases the field conversion rate. This increases the efficiency of converting power into shield strength, decreasing all shield power costs.
+ var/capacitor_bonus = 0.000005
+ ///How much the micro laser rating decreased the field dissipation rate. This reduces the amount of shield strength lost per tick, reducing the shield upkeep.
+ var/micro_laser_bonus = 0.002
+
+ component_types = list(
+ /obj/item/circuitboard/shield_gen,
+ /obj/item/stock_parts/manipulator = 2,
+ /obj/item/stock_parts/micro_laser = 2,
+ /obj/item/stock_parts/capacitor = 2,
+ /obj/item/stock_parts/subspace/transmitter = 1,
+ /obj/item/stock_parts/subspace/crystal = 1,
+ /obj/item/stock_parts/subspace/amplifier = 1,
+ /obj/item/stock_parts/console_screen = 1,
+ /obj/item/stack/cable_coil = 5
+ )
/obj/structure/machinery/shield_gen/Initialize()
- for(var/obj/structure/machinery/shield_capacitor/possible_cap in range(1, src))
- if(get_dir(possible_cap, src) == possible_cap.dir)
- owned_capacitor = possible_cap
- break
+ owned_capacitors = list()
+ for(var/obj/structure/machinery/shield_capacitor/possible_cap in range(1, src)) //Attach nearby capacitors
+ attach_capacitor(possible_cap)
energy_field = new(src, get_shielded_turfs())
. = ..()
/obj/structure/machinery/shield_gen/Destroy()
- owned_capacitor = null
+ for(var/obj/structure/machinery/shield_capacitor/cap in owned_capacitors) //Detach any owned capacitors
+ detach_capacitor(cap)
+ owned_capacitors = list()
return ..()
+/obj/structure/machinery/shield_gen/upgrade_hints(mob/user, distance, is_adjacent)
+ . += ..()
+ . += "Upgraded manipulators will increase the maximum field strengthen rate."
+ . += SPAN_NOTICE("\t- The current maximum field strengthen rate is [energy_field.max_strengthen_rate] renwicks per second.")
+ . += "Upgraded capacitors will increase the field conversion rate."
+ . += SPAN_NOTICE("\t- The current field conversion efficiency increase is: [(initial(energy_field.energy_conversion_rate) + (2 * capacitor_bonus)) / energy_field.energy_conversion_rate * 100]% ")
+ . += "Upgraded micro lasers will decrease the energy field dispersion rate."
+ . += SPAN_NOTICE("\t- The current field dissipation rate decrease is: [(initial(energy_field.dissipation_rate) - (2 * micro_laser_bonus)) / energy_field.dissipation_rate * 100]% ")
+
+
/obj/structure/machinery/shield_gen/emag_act(var/remaining_charges, var/mob/user)
if(prob(75))
locked = !locked
@@ -52,6 +81,13 @@
spark(src, 5, GLOB.alldirs)
/obj/structure/machinery/shield_gen/attackby(obj/item/attacking_item, mob/user)
+ if(default_part_replacement(user, attacking_item))
+ return TRUE
+ else if(default_deconstruction_screwdriver(user, attacking_item))
+ return TRUE
+ else if(default_deconstruction_crowbar(user, attacking_item))
+ return TRUE
+
if(istype(attacking_item, /obj/item/card/id))
if(allowed(user))
locked = !locked
@@ -66,20 +102,38 @@
if(active)
toggle()
if(anchored)
+ // Attach nearby capacitors wrenching down the shield
+ owned_capacitors = list()
for(var/obj/structure/machinery/shield_capacitor/cap in range(1, src))
- if(cap.owned_gen)
- continue
- if(get_dir(cap, src) == cap.dir && cap.anchored)
- owned_capacitor = cap
- owned_capacitor.owned_gen = src
- break
+ attach_capacitor(cap)
else
- if(owned_capacitor && owned_capacitor.owned_gen == src)
- owned_capacitor.owned_gen = null
- owned_capacitor = null
+ // Detach any owned capacitors when unwrenching
+ for(var/obj/structure/machinery/shield_capacitor/cap in owned_capacitors)
+ detach_capacitor(cap)
+ owned_capacitors = list()
else
..()
+/obj/structure/machinery/shield_gen/RefreshParts()
+ ..()
+ var/max_strengthen_rate_increase = 0
+ var/energy_conversion_rate_increase = 0
+ var/dissipation_rate_decrease = 0
+
+ for(var/obj/item/stock_parts/P in component_parts)
+ if(ismanipulator(P))
+ max_strengthen_rate_increase += P.rating
+ else if(iscapacitor(P))
+ energy_conversion_rate_increase += P.rating
+ else if(ismicrolaser(P))
+ dissipation_rate_decrease += P.rating
+
+ if(energy_field)
+ energy_field.max_strengthen_rate = initial(energy_field.max_strengthen_rate) + (max_strengthen_rate_increase * manipulator_bonus)
+ energy_field.energy_conversion_rate = initial(energy_field.energy_conversion_rate) + (energy_conversion_rate_increase * capacitor_bonus)
+ energy_field.dissipation_rate = max(0, initial(energy_field.dissipation_rate) - (dissipation_rate_decrease * micro_laser_bonus))
+ energy_field.strengthen_rate = min(energy_field.strengthen_rate, energy_field.max_strengthen_rate) ///If the strengthen rate got decreased and the current strengthen rate is now above the max, reduce it to the max.
+
/obj/structure/machinery/shield_gen/attack_ai(mob/user)
if(!ai_can_interact(user))
return
@@ -98,22 +152,38 @@
to_chat(user, SPAN_WARNING("The device needs to be bolted to the ground first."))
return
else
- if(owned_capacitor)
- if(!((owned_capacitor in range(1, src)) && get_dir(owned_capacitor, src) == owned_capacitor.dir && owned_capacitor.anchored))
- if(owned_capacitor.owned_gen == src)
- owned_capacitor.owned_gen = null
- owned_capacitor = null
- if(!owned_capacitor)
+ for(var/obj/structure/machinery/shield_capacitor/cap in owned_capacitors) //Make sure the capacitors weren't blown up
+ if(!(cap in range(1, src)) || get_dir(cap, src) != cap.dir || !cap.anchored)
+ if(cap && cap.owned_gen == src)
+ cap.owned_gen = null
+ owned_capacitors -= cap
+ if(!owned_capacitors || owned_capacitors.len == 0) // Try to attach any valid adjacent capacitors
for(var/obj/structure/machinery/shield_capacitor/cap in range(1, src))
- if(cap.owned_gen)
- continue
- if(get_dir(cap, src) == cap.dir && cap.anchored)
- owned_capacitor = cap
- owned_capacitor.owned_gen = src
- updateDialog()
- break
+ attach_capacitor(cap)
return ui_interact(user)
+/obj/structure/machinery/shield_gen/proc/attach_capacitor(obj/structure/machinery/shield_capacitor/cap)
+ if(!cap || cap.owned_gen || !cap.anchored)
+ return FALSE
+ if(!(cap in range(1, src)) || get_dir(cap, src) != cap.dir)
+ return FALSE
+ if(!owned_capacitors)
+ owned_capacitors = list()
+ owned_capacitors += cap
+ cap.owned_gen = src
+ updateDialog()
+ return TRUE
+
+/obj/structure/machinery/shield_gen/proc/detach_capacitor(obj/structure/machinery/shield_capacitor/cap)
+ if(!cap)
+ return FALSE
+ if(owned_capacitors && (cap in owned_capacitors))
+ owned_capacitors -= cap
+ if(cap.owned_gen == src)
+ cap.owned_gen = null
+ updateDialog()
+ return TRUE
+
/obj/structure/machinery/shield_gen/process()
if(active)
if(!anchored)
@@ -128,15 +198,41 @@
energy_field.handle_strength(assumed_charge)
/**
- * Called whenever the field needs to take charge from the capacitor.
+ * Called whenever the field needs to take charge from attached capacitors.
*/
/obj/structure/machinery/shield_gen/proc/assume_charge(required_energy)
- if(!owned_capacitor || !owned_capacitor.active)
+ if(!owned_capacitors || owned_capacitors.len == 0)
return 0
- var/assumed_charge = min(owned_capacitor.stored_charge, required_energy)
- assumed_charge = max(assumed_charge, 0)
- owned_capacitor.stored_charge -= assumed_charge
- return assumed_charge
+ var/list/active_capacitors = list()
+ var/available_charge = 0
+ for(var/obj/structure/machinery/shield_capacitor/cap in owned_capacitors) //Loop through capacitors that can provide charge
+ if(!cap || !cap.active || cap.stored_charge <= 0)
+ continue
+ active_capacitors += cap
+ available_charge += cap.stored_charge
+
+ if(!active_capacitors.len || available_charge <= 0) //If we have no capacitors, or they're not charged stop
+ return 0
+
+ var/assumed_charge = min(available_charge, required_energy)
+ if(assumed_charge >= available_charge)
+ for(var/obj/structure/machinery/shield_capacitor/cap in active_capacitors)
+ cap.stored_charge = 0
+ return assumed_charge
+
+ var/remaining = assumed_charge
+ for(var/i = 1, i <= active_capacitors.len, i++)
+ var/obj/structure/machinery/shield_capacitor/cap = active_capacitors[i]
+ var/took = (i == active_capacitors.len) ? remaining : round(assumed_charge * (cap.stored_charge / available_charge))
+ took = min(took, cap.stored_charge, remaining)
+ if(took <= 0)
+ continue
+ cap.stored_charge -= took
+ remaining -= took
+ if(remaining <= 0)
+ break
+
+ return assumed_charge - remaining
/obj/structure/machinery/shield_gen/ex_act(var/severity)
if(active)
@@ -145,12 +241,18 @@
/obj/structure/machinery/shield_gen/proc/toggle()
if(!active)
- if(!owned_capacitor)
+ if(!owned_capacitors || owned_capacitors.len == 0)
balloon_alert_to_viewers("no capacitor")
return
- else if(!owned_capacitor?.active)
- balloon_alert_to_viewers("capacitor offline")
- return
+ else
+ var/has_active = FALSE
+ for(var/obj/structure/machinery/shield_capacitor/cap in owned_capacitors)
+ if(cap && cap.active)
+ has_active = TRUE
+ break
+ if(!has_active)
+ balloon_alert_to_viewers("capacitors offline")
+ return
active = !active
update_icon()
if(active)
@@ -213,7 +315,8 @@
/obj/structure/machinery/shield_gen/ui_data(mob/user)
var/list/data = list()
- data["owned_capacitor"] = !!owned_capacitor
+ data["owned_capacitor"] = length(owned_capacitors)
+ data["owned_capacitor_count"] = length(owned_capacitors)
data["active"] = active
data["time_since_fail"] = energy_field ? energy_field.time_since_fail : 0
data["multiz"] = multiz
diff --git a/code/modules/shieldgen/shield_gen_external.dm b/code/modules/shieldgen/shield_gen_external.dm
index 1467af01a87..9ba333e24ec 100644
--- a/code/modules/shieldgen/shield_gen_external.dm
+++ b/code/modules/shieldgen/shield_gen_external.dm
@@ -4,6 +4,18 @@
/obj/structure/machinery/shield_gen/external
name = "hull shield generator"
+ component_types = list(
+ /obj/item/circuitboard/shield_gen_ex,
+ /obj/item/stock_parts/manipulator = 2,
+ /obj/item/stock_parts/micro_laser = 2,
+ /obj/item/stock_parts/capacitor = 2,
+ /obj/item/stock_parts/subspace/transmitter = 1,
+ /obj/item/stock_parts/subspace/crystal = 1,
+ /obj/item/stock_parts/subspace/amplifier = 1,
+ /obj/item/stock_parts/console_screen = 1,
+ /obj/item/stack/cable_coil = 5
+ )
+
//Search for space turfs within range that are adjacent to a simulated turf.
/obj/structure/machinery/shield_gen/external/get_shielded_turfs()
var/list/out = list()
@@ -18,15 +30,15 @@
for (var/tt in RANGE_TURFS(field_radius, gen_turf))
T = tt
// Ignore station areas.
- if (GLOB.the_station_areas[T.loc] || is_shuttle_area(T.loc))
+ if ((GLOB.the_station_areas[T.loc] && !is_shieldless_exterior(T.loc)) || is_shuttle_area(T.loc))
continue
- else if (istype(T, /turf/space) || istype(T, /turf/simulated/floor/exoplanet/asteroid) || isopenturf(T) || istype(T, /turf/simulated/floor/reinforced))
+ else if (istype(T, /turf/space) || isopenturf(T) || istype(T, /turf/simulated/floor/reinforced))
for (var/uu in RANGE_TURFS(1, T))
U = uu
if (T == U)
continue
- if (GLOB.the_station_areas[U.loc] || istype(U, /turf/simulated/mineral/surface))
+ if (GLOB.the_station_areas[U.loc] && !is_shieldless_exterior(U.loc))
out += T
break
@@ -40,19 +52,21 @@
if(below)
for(var/turf/z as anything in below)
connected_levels += z
+
for(var/turf/z in connected_levels)
for (var/tt in RANGE_TURFS(field_radius, z))
T = tt
// Ignore station areas.
- if (GLOB.the_station_areas[T.loc] || istype(T.loc, /area/shuttle))
+ if ((GLOB.the_station_areas[T.loc] && !is_shieldless_exterior(T.loc)) || istype(T.loc, /area/shuttle))
continue
- else if (istype(T, /turf/space) || istype(T, /turf/simulated/floor/exoplanet/asteroid) || isopenturf(T) || istype(T, /turf/simulated/floor/reinforced))
+
+ else if (istype(T, /turf/space) || isopenturf(T) || istype(T, /turf/simulated/floor/reinforced))
for (var/uu in RANGE_TURFS(1, T))
U = uu
if (T == U)
continue
- if (GLOB.the_station_areas[U.loc])
+ if (GLOB.the_station_areas[U.loc] && !is_shieldless_exterior(U.loc))
out += T
break
return out
diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm
index 258a519542d..23edf40dea0 100644
--- a/code/modules/surgery/robotics.dm
+++ b/code/modules/surgery/robotics.dm
@@ -776,7 +776,7 @@
if(!istype(endoskeleton))
return FALSE
- return affected && affected.open == ORGAN_ENCASED_RETRACTED && affected.organ_tag == BP_CHEST && target_zone != BP_MOUTH && endoskeleton.damage > 0
+ return affected && affected.open == ORGAN_ENCASED_RETRACTED && affected.limb_name == BP_CHEST && target_zone != BP_MOUTH && endoskeleton.damage > 0
/singleton/surgery_step/robotics/repair_endoskeleton/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("[user] begins to repair the support structures of [target]'s endoskeleton with \the [tool]." , \
diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm
index 5d4d4550e6c..a005022e313 100644
--- a/code/modules/surgery/surgery.dm
+++ b/code/modules/surgery/surgery.dm
@@ -193,5 +193,5 @@
var/list/in_progress = list()
/datum/surgery_status/Destroy(force)
- in_progress = null
- . = ..()
+ in_progress?.Cut()
+ return ..()
diff --git a/code/modules/tgchat/README.md b/code/modules/tgchat/README.md
new file mode 100644
index 00000000000..d2a99e5ffd2
--- /dev/null
+++ b/code/modules/tgchat/README.md
@@ -0,0 +1,31 @@
+## /TG/ Chat
+
+/TG/ Chat, which will be referred to as TgChat from this point onwards, is a system in which we can send messages to clients in a controlled and semi-reliable manner. The standard way of sending messages to BYOND clients simply dumps whatever you output to them directly into their chat window, however BYOND allows us to load our own code on the client to change this behaviour in a way that allows us to do some pretty neat things.
+
+### Message Format
+
+TgChat handles sending messages from the server to the client through the use of JSON payloads, of which the format will change depending on the type of message and the intended client endpoint. An example of the payload for chat messages is as follows:
+
+```json
+{
+ "sequence": 0,
+ "content": {
+ "type": ". . .", // ?optional
+ "text": ". . .", // ?optional !atleast-one
+ "html": ". . .", // ?optional !atleast-one
+ "avoidHighlighting": 0 // ?optional
+ }
+}
+```
+
+### Reliability
+
+In the past there have been issues where BYOND will silently and without reason lose a message we sent to the client, to detect this and recover from it seamlessly TgChat also has a baked in reliability layer. This reliability layer is very primitive, and simply keeps track of received sequence numbers. Should the client receive an unexpected sequence number TgChat asks the server to resend any missing packets.
+
+### Ping System
+
+TgChat supports a round trip time ping measurement, which is displayed to the client so they can know how long it takes for their commands and inputs to reach the server. This is done by sending the client a ping request, `ping/soft`, which tells the client to send a ping to the server. When the server receives said ping it sends a reply, `ping/reply`, to the client with a payload containing the current DateTime which the client can reference against the initial ping request.
+
+### Chat Tabs, Local Storage, and Highlighting
+
+To make organizing and managing chat easier and more functional for both players and admins, TgChat has the ability to filter out messages based on their primary tag, such as individual departmental radios, to a dedicated chat tab for easier reading and comprehension. These tabs can also be configured to highlist messages based on a simple keyword search. You can set a multitude of different keywords to search for and they will be highlighting for instant alerting of the client. Said tabs, highlighting rules, and your chat history will persist thanks to use of local storage on the client. Using local storage TgChat can ensure that your preferences are saved and maintained between client restarts and switching between other /TG/ servers. Local Storage is also used to keep your chat history aswell, should you need to scroll through your chat logs.
diff --git a/code/modules/tgchat/to_chat.dm b/code/modules/tgchat/to_chat.dm
index 09c9b536c06..965d9545ff1 100644
--- a/code/modules/tgchat/to_chat.dm
+++ b/code/modules/tgchat/to_chat.dm
@@ -35,23 +35,8 @@
if(text) message["text"] = text
if(html) message["html"] = html
if(avoid_highlighting) message["avoidHighlighting"] = avoid_highlighting
- var/message_blob = TGUI_CREATE_MESSAGE("chat/message", message)
- var/message_html = message_to_html(message)
- if(islist(target))
- for(var/_target in target)
- var/client/client = CLIENT_FROM_VAR(_target)
- if(client)
- // Send to tgchat
- client.tgui_panel?.window.send_raw_message(message_blob)
- // Send to old chat
- to_target(client, message_html)
- return
- var/client/client = CLIENT_FROM_VAR(target)
- if(client)
- // Send to tgchat
- client.tgui_panel?.window.send_raw_message(message_blob)
- // Send to old chat
- to_target(client, message_html)
+ // send it immediately
+ SSchat.send_immediate(target, message)
/**
* Sends the message to the recipient (target).
@@ -74,7 +59,7 @@
trailing_newline = TRUE,
confidential = FALSE
)
- if(isnull(Master) || !SSchat?.initialized)
+ if(isnull(Master) || !SSchat?.initialized || !MC_RUNNING(SSchat.init_stage))
to_chat_immediate(target, html, type, text, avoid_highlighting)
return
diff --git a/code/modules/tgs/LICENSE b/code/modules/tgs/LICENSE
index 2bedf9a63aa..324c48e993e 100644
--- a/code/modules/tgs/LICENSE
+++ b/code/modules/tgs/LICENSE
@@ -1,6 +1,6 @@
The MIT License
-Copyright (c) 2017-2023 Jordan Brown
+Copyright (c) 2017-2024 Jordan Brown
Permission is hereby granted, free of charge,
to any person obtaining a copy of this software and
diff --git a/code/modules/tgs/README.md b/code/modules/tgs/README.md
index 6319028d810..473442fd119 100644
--- a/code/modules/tgs/README.md
+++ b/code/modules/tgs/README.md
@@ -1,13 +1,13 @@
# DMAPI Internals
-This folder should be placed on it's own inside a codebase that wishes to use the TGS DMAPI. Warranty void if modified.
+This folder should be placed on its own inside a codebase that wishes to use the TGS DMAPI. Warranty void if modified.
- [includes.dm](./includes.dm) is the file that should be included by DM code, it handles including the rest.
- The [core](./core) folder includes all code not directly part of any API version.
- The other versioned folders contain code for the different DMAPI versions.
- - [v3210](./v3210) contains the final TGS3 API.
- - [v4](./v4) is the legacy DMAPI 4 (Used in TGS 4.0.X versions).
- - [v5](./v5) is the current DMAPI version used by TGS >=4.1.
+ - [v3210](./v3210) contains the final TGS3 API.
+ - [v4](./v4) is the legacy DMAPI 4 (Used in TGS 4.0.X versions).
+ - [v5](./v5) is the current DMAPI version used by TGS >=4.1.
- [LICENSE](./LICENSE) is the MIT license for the DMAPI.
APIs communicate with TGS in two ways. All versions implement TGS -> DM communication using /world/Topic. DM -> TGS communication, called the bridge method, is different for each version.
diff --git a/code/modules/tgs/core/README.md b/code/modules/tgs/core/README.md
index b82d8f49e29..7886a857149 100644
--- a/code/modules/tgs/core/README.md
+++ b/code/modules/tgs/core/README.md
@@ -2,8 +2,8 @@
This folder contains all DMAPI code not directly involved in an API.
-- [_definitions.dm](./definitions.dm) contains defines needed across DMAPI internals.
+- [\_definitions.dm](./definitions.dm) contains defines needed across DMAPI internals.
+- [byond_world_export.dm](./byond_world_export.dm) contains the default `/datum/tgs_http_handler` implementation which uses `world.Export()`.
- [core.dm](./core.dm) contains the implementations of the `/world/proc/TgsXXX()` procs. Many map directly to the `/datum/tgs_api` functions. It also contains the /datum selection and setup code.
- [datum.dm](./datum.dm) contains the `/datum/tgs_api` declarations that all APIs must implement.
- [tgs_version.dm](./tgs_version.dm) contains the `/datum/tgs_version` definition
--
diff --git a/code/modules/tgs/core/byond_world_export.dm b/code/modules/tgs/core/byond_world_export.dm
new file mode 100644
index 00000000000..6ef8d841b8f
--- /dev/null
+++ b/code/modules/tgs/core/byond_world_export.dm
@@ -0,0 +1,22 @@
+/datum/tgs_http_handler/byond_world_export
+
+/datum/tgs_http_handler/byond_world_export/PerformGet(url)
+ // This is an infinite sleep until we get a response
+ var/export_response = world.Export(url)
+ TGS_DEBUG_LOG("byond_world_export: Export complete")
+
+ if(!export_response)
+ TGS_ERROR_LOG("byond_world_export: Failed request: [url]")
+ return new /datum/tgs_http_result(null, FALSE)
+
+ var/content = export_response["CONTENT"]
+ if(!content)
+ TGS_ERROR_LOG("byond_world_export: Failed request, missing content!")
+ return new /datum/tgs_http_result(null, FALSE)
+
+ var/response_json = TGS_FILE2TEXT_NATIVE(content)
+ if(!response_json)
+ TGS_ERROR_LOG("byond_world_export: Failed request, failed to load content!")
+ return new /datum/tgs_http_result(null, FALSE)
+
+ return new /datum/tgs_http_result(response_json, TRUE)
diff --git a/code/modules/tgs/core/core.dm b/code/modules/tgs/core/core.dm
index d6219fcd308..98f26090cad 100644
--- a/code/modules/tgs/core/core.dm
+++ b/code/modules/tgs/core/core.dm
@@ -1,7 +1,7 @@
-/world/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE)
+/world/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE, datum/tgs_http_handler/http_handler = null)
var/current_api = TGS_READ_GLOBAL(tgs)
if(current_api)
- TGS_ERROR_LOG("API datum already set ([REF(current_api)] ([current_api]))! Was TgsNew() called more than once?")
+ TGS_ERROR_LOG("API datum already set ([current_api])! Was TgsNew() called more than once?")
return
if(!(minimum_required_security_level in list(TGS_SECURITY_ULTRASAFE, TGS_SECURITY_SAFE, TGS_SECURITY_TRUSTED)))
@@ -42,11 +42,11 @@
var/datum/tgs_version/max_api_version = TgsMaximumApiVersion();
if(version.suite != null && version.minor != null && version.patch != null && version.deprecated_patch != null && version.deprefixed_parameter > max_api_version.deprefixed_parameter)
- TGS_ERROR_LOG("Detected unknown API version! Defaulting to latest. Update the DMAPI to fix this problem.")
+ TGS_ERROR_LOG("Detected unknown Interop API version! Defaulting to latest. Update the DMAPI to fix this problem.")
api_datum = /datum/tgs_api/latest
if(!api_datum)
- TGS_ERROR_LOG("Found unsupported API version: [raw_parameter]. If this is a valid version please report this, backporting is done on demand.")
+ TGS_ERROR_LOG("Found unsupported Interop API version: [raw_parameter]. If this is a valid version please report this, backporting is done on demand.")
return
TGS_INFO_LOG("Activating API for version [version.deprefixed_parameter]")
@@ -55,7 +55,10 @@
TGS_ERROR_LOG("Invalid parameter for event_handler: [event_handler]")
event_handler = null
- var/datum/tgs_api/new_api = new api_datum(event_handler, version)
+ if(!http_handler)
+ http_handler = new /datum/tgs_http_handler/byond_world_export
+
+ var/datum/tgs_api/new_api = new api_datum(event_handler, version, http_handler)
TGS_WRITE_GLOBAL(tgs, new_api)
@@ -107,6 +110,13 @@
if(api)
return api.ApiVersion()
+/world/TgsEngine()
+#ifdef OPENDREAM
+ return TGS_ENGINE_TYPE_OPENDREAM
+#else
+ return TGS_ENGINE_TYPE_BYOND
+#endif
+
/world/TgsInstanceName()
var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs)
if(api)
@@ -159,3 +169,11 @@
var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs)
if(api)
return api.Visibility()
+
+/world/TgsTriggerEvent(event_name, list/parameters, wait_for_completion = FALSE)
+ var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs)
+ if(api)
+ if(!istype(parameters, /list))
+ parameters = list()
+
+ return api.TriggerEvent(event_name, parameters, wait_for_completion)
diff --git a/code/modules/tgs/core/datum.dm b/code/modules/tgs/core/datum.dm
index 07ce3b68458..3ca53e9bf7c 100644
--- a/code/modules/tgs/core/datum.dm
+++ b/code/modules/tgs/core/datum.dm
@@ -6,8 +6,8 @@ TGS_DEFINE_AND_SET_GLOBAL(tgs, null)
var/list/warned_deprecated_command_runs
-/datum/tgs_api/New(datum/tgs_event_handler/event_handler, datum/tgs_version/version)
- . = ..()
+/datum/tgs_api/New(datum/tgs_event_handler/event_handler, datum/tgs_version/version, datum/tgs_http_handler/http_handler)
+ ..()
src.event_handler = event_handler
src.version = version
@@ -17,7 +17,7 @@ TGS_DEFINE_AND_SET_GLOBAL(tgs, null)
world.sleep_offline = FALSE // https://www.byond.com/forum/post/2894866
del(world)
world.sleep_offline = FALSE // just in case, this is BYOND after all...
- sleep(1)
+ sleep(world.tick_lag)
TGS_DEBUG_LOG("BYOND DIDN'T TERMINATE THE WORLD!!! TICK IS: [world.time], sleep_offline: [world.sleep_offline]")
/datum/tgs_api/latest
@@ -69,3 +69,6 @@ TGS_PROTECT_DATUM(/datum/tgs_api)
/datum/tgs_api/proc/Visibility()
return TGS_UNIMPLEMENTED
+
+/datum/tgs_api/proc/TriggerEvent(event_name, list/parameters, wait_for_completion)
+ return FALSE
diff --git a/code/modules/tgs/core/tgs_version.dm b/code/modules/tgs/core/tgs_version.dm
index a5dae1241a3..bc561e67487 100644
--- a/code/modules/tgs/core/tgs_version.dm
+++ b/code/modules/tgs/core/tgs_version.dm
@@ -1,4 +1,5 @@
/datum/tgs_version/New(raw_parameter)
+ ..()
src.raw_parameter = raw_parameter
deprefixed_parameter = replacetext(raw_parameter, "/tg/station 13 Server v", "")
var/list/version_bits = splittext(deprefixed_parameter, ".")
diff --git a/code/modules/tgs/includes.dm b/code/modules/tgs/includes.dm
index 23b714f9d06..f5118ed55a3 100644
--- a/code/modules/tgs/includes.dm
+++ b/code/modules/tgs/includes.dm
@@ -1,4 +1,5 @@
#include "core\_definitions.dm"
+#include "core\byond_world_export.dm"
#include "core\core.dm"
#include "core\datum.dm"
#include "core\tgs_version.dm"
diff --git a/code/modules/tgs/v4/api.dm b/code/modules/tgs/v4/api.dm
index 945e2e41176..7c87922750b 100644
--- a/code/modules/tgs/v4/api.dm
+++ b/code/modules/tgs/v4/api.dm
@@ -181,7 +181,7 @@
var/json = json_encode(data)
while(requesting_new_port && !override_requesting_new_port)
- sleep(1)
+ sleep(world.tick_lag)
//we need some port open at this point to facilitate return communication
if(!world.port)
@@ -209,7 +209,7 @@
requesting_new_port = FALSE
while(export_lock)
- sleep(1)
+ sleep(world.tick_lag)
export_lock = TRUE
last_interop_response = null
@@ -217,7 +217,7 @@
text2file(json, server_commands_json_path)
for(var/I = 0; I < EXPORT_TIMEOUT_DS && !last_interop_response; ++I)
- sleep(1)
+ sleep(world.tick_lag)
if(!last_interop_response)
TGS_ERROR_LOG("Failed to get export result for: [json]")
diff --git a/code/modules/tgs/v5/README.md b/code/modules/tgs/v5/README.md
index a8a0c748e7b..fb374c2f872 100644
--- a/code/modules/tgs/v5/README.md
+++ b/code/modules/tgs/v5/README.md
@@ -2,8 +2,8 @@
This DMAPI implements bridge requests using HTTP GET requests to TGS. It has no security restrictions.
-- [__interop_version.dm](./__interop_version.dm) contains the version of the API used between the DMAPI and TGS.
-- [_defines.dm](./_defines.dm) contains constant definitions.
+- [\_\_interop_version.dm](./__interop_version.dm) contains the version of the API used between the DMAPI and TGS.
+- [\_defines.dm](./_defines.dm) contains constant definitions.
- [api.dm](./api.dm) contains the bulk of the API code.
- [bridge.dm](./bridge.dm) contains functions related to making bridge requests.
- [chunking.dm](./chunking.dm) contains common function for splitting large raw data sets into chunks BYOND can natively process.
diff --git a/code/modules/tgs/v5/__interop_version.dm b/code/modules/tgs/v5/__interop_version.dm
index 1b52b31d6a7..9589cbf31bb 100644
--- a/code/modules/tgs/v5/__interop_version.dm
+++ b/code/modules/tgs/v5/__interop_version.dm
@@ -1 +1 @@
-"5.6.2"
+"5.10.1"
diff --git a/code/modules/tgs/v5/_defines.dm b/code/modules/tgs/v5/_defines.dm
index bdcd4e4dd58..a47bfd78000 100644
--- a/code/modules/tgs/v5/_defines.dm
+++ b/code/modules/tgs/v5/_defines.dm
@@ -8,16 +8,17 @@
#define DMAPI5_TOPIC_REQUEST_LIMIT 65528
#define DMAPI5_TOPIC_RESPONSE_LIMIT 65529
-#define DMAPI5_BRIDGE_COMMAND_PORT_UPDATE 0
#define DMAPI5_BRIDGE_COMMAND_STARTUP 1
#define DMAPI5_BRIDGE_COMMAND_PRIME 2
#define DMAPI5_BRIDGE_COMMAND_REBOOT 3
#define DMAPI5_BRIDGE_COMMAND_KILL 4
#define DMAPI5_BRIDGE_COMMAND_CHAT_SEND 5
#define DMAPI5_BRIDGE_COMMAND_CHUNK 6
+#define DMAPI5_BRIDGE_COMMAND_EVENT 7
#define DMAPI5_PARAMETER_ACCESS_IDENTIFIER "accessIdentifier"
#define DMAPI5_PARAMETER_CUSTOM_COMMANDS "customCommands"
+#define DMAPI5_PARAMETER_TOPIC_PORT "topicPort"
#define DMAPI5_CHUNK "chunk"
#define DMAPI5_CHUNK_PAYLOAD "payload"
@@ -34,6 +35,7 @@
#define DMAPI5_BRIDGE_PARAMETER_VERSION "version"
#define DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE "chatMessage"
#define DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL "minimumSecurityLevel"
+#define DMAPI5_BRIDGE_PARAMETER_EVENT_INVOCATION "eventInvocation"
#define DMAPI5_BRIDGE_RESPONSE_NEW_PORT "newPort"
#define DMAPI5_BRIDGE_RESPONSE_RUNTIME_INFORMATION "runtimeInformation"
@@ -80,6 +82,8 @@
#define DMAPI5_TOPIC_COMMAND_WATCHDOG_REATTACH 8
#define DMAPI5_TOPIC_COMMAND_SEND_CHUNK 9
#define DMAPI5_TOPIC_COMMAND_RECEIVE_CHUNK 10
+#define DMAPI5_TOPIC_COMMAND_RECEIVE_BROADCAST 11
+#define DMAPI5_TOPIC_COMMAND_COMPLETE_EVENT 12
#define DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE "commandType"
#define DMAPI5_TOPIC_PARAMETER_CHAT_COMMAND "chatCommand"
@@ -89,7 +93,9 @@
#define DMAPI5_TOPIC_PARAMETER_NEW_INSTANCE_NAME "newInstanceName"
#define DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE "chatUpdate"
#define DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION "newServerVersion"
+#define DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE "broadcastMessage"
+#define DMAPI5_TOPIC_RESPONSE_CLIENT_COUNT "clientCount"
#define DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE "commandResponse"
#define DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE "commandResponseMessage"
#define DMAPI5_TOPIC_RESPONSE_CHAT_RESPONSES "chatResponses"
@@ -114,3 +120,9 @@
#define DMAPI5_CUSTOM_CHAT_COMMAND_NAME "name"
#define DMAPI5_CUSTOM_CHAT_COMMAND_HELP_TEXT "helpText"
#define DMAPI5_CUSTOM_CHAT_COMMAND_ADMIN_ONLY "adminOnly"
+
+#define DMAPI5_EVENT_ID "eventId"
+
+#define DMAPI5_EVENT_INVOCATION_NAME "eventName"
+#define DMAPI5_EVENT_INVOCATION_PARAMETERS "parameters"
+#define DMAPI5_EVENT_INVOCATION_NOTIFY_COMPLETION "notifyCompletion"
diff --git a/code/modules/tgs/v5/api.dm b/code/modules/tgs/v5/api.dm
index 7226f29bba6..4ca9036b790 100644
--- a/code/modules/tgs/v5/api.dm
+++ b/code/modules/tgs/v5/api.dm
@@ -8,8 +8,12 @@
var/reboot_mode = TGS_REBOOT_MODE_NORMAL
+ /// List of chat messages list()s that attempted to be sent during a topic call. To be bundled in the result of the call
var/list/intercepted_message_queue
+ /// List of chat messages list()s that attempted to be sent during a topic call. To be bundled in the result of the call
+ var/list/offline_message_queue
+
var/list/custom_commands
var/list/test_merges
@@ -17,15 +21,23 @@
var/list/chat_channels
var/initialized = FALSE
+ var/initial_bridge_request_received = FALSE
+ var/datum/tgs_version/interop_version
var/chunked_requests = 0
var/list/chunked_topics = list()
+ var/list/pending_events = list()
+
var/detached = FALSE
-/datum/tgs_api/v5/New()
+ var/datum/tgs_http_handler/http_handler
+
+/datum/tgs_api/v5/New(datum/tgs_event_handler/event_handler, datum/tgs_version/version, datum/tgs_http_handler/http_handler)
. = ..()
- TGS_DEBUG_LOG("V5 API created")
+ interop_version = version
+ src.http_handler = http_handler
+ TGS_DEBUG_LOG("V5 API created: [json_encode(args)]")
/datum/tgs_api/v5/ApiVersion()
return new /datum/tgs_version(
@@ -38,8 +50,14 @@
access_identifier = world.params[DMAPI5_PARAM_ACCESS_IDENTIFIER]
var/datum/tgs_version/api_version = ApiVersion()
- version = null
- var/list/bridge_response = Bridge(DMAPI5_BRIDGE_COMMAND_STARTUP, list(DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL = minimum_required_security_level, DMAPI5_BRIDGE_PARAMETER_VERSION = api_version.raw_parameter, DMAPI5_PARAMETER_CUSTOM_COMMANDS = ListCustomCommands()))
+ version = null // we want this to be the TGS version, not the interop version
+
+ // sleep once to prevent an issue where world.Export on the first tick can hang indefinitely
+ TGS_DEBUG_LOG("Starting Export bug prevention sleep tick. time:[world.time] sleep_offline:[world.sleep_offline]")
+ sleep(world.tick_lag)
+ TGS_DEBUG_LOG("Export bug prevention sleep complete")
+
+ var/list/bridge_response = Bridge(DMAPI5_BRIDGE_COMMAND_STARTUP, list(DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL = minimum_required_security_level, DMAPI5_BRIDGE_PARAMETER_VERSION = api_version.raw_parameter, DMAPI5_PARAMETER_CUSTOM_COMMANDS = ListCustomCommands(), DMAPI5_PARAMETER_TOPIC_PORT = GetTopicPort()))
if(!istype(bridge_response))
TGS_ERROR_LOG("Failed initial bridge request!")
return FALSE
@@ -53,7 +71,8 @@
TGS_INFO_LOG("DMAPI validation, exiting...")
TerminateWorld()
- version = new /datum/tgs_version(runtime_information[DMAPI5_RUNTIME_INFORMATION_SERVER_VERSION])
+ initial_bridge_request_received = TRUE
+ version = new /datum/tgs_version(runtime_information[DMAPI5_RUNTIME_INFORMATION_SERVER_VERSION]) // reassigning this because it can change if TGS updates
security_level = runtime_information[DMAPI5_RUNTIME_INFORMATION_SECURITY_LEVEL]
visibility = runtime_information[DMAPI5_RUNTIME_INFORMATION_VISIBILITY]
instance_name = runtime_information[DMAPI5_RUNTIME_INFORMATION_INSTANCE_NAME]
@@ -78,7 +97,7 @@
if(revInfo)
tm.commit = revisionData[DMAPI5_REVISION_INFORMATION_COMMIT_SHA]
tm.origin_commit = revisionData[DMAPI5_REVISION_INFORMATION_ORIGIN_COMMIT_SHA]
- tm.timestamp = entry[DMAPI5_REVISION_INFORMATION_TIMESTAMP]
+ tm.timestamp = revisionData[DMAPI5_REVISION_INFORMATION_TIMESTAMP]
else
TGS_WARNING_LOG("Failed to decode [DMAPI5_TEST_MERGE_REVISION] from test merge #[tm.number]!")
@@ -102,15 +121,22 @@
initialized = TRUE
return TRUE
+/datum/tgs_api/v5/proc/GetTopicPort()
+#if defined(OPENDREAM) && defined(OPENDREAM_TOPIC_PORT_EXISTS)
+ return "[world.opendream_topic_port]"
+#else
+ return null
+#endif
+
/datum/tgs_api/v5/proc/RequireInitialBridgeResponse()
TGS_DEBUG_LOG("RequireInitialBridgeResponse()")
var/logged = FALSE
- while(!version)
+ while(!initial_bridge_request_received)
if(!logged)
TGS_DEBUG_LOG("RequireInitialBridgeResponse: Starting sleep")
logged = TRUE
- sleep(1)
+ sleep(world.tick_lag)
TGS_DEBUG_LOG("RequireInitialBridgeResponse: Passed")
@@ -183,17 +209,7 @@
var/datum/tgs_chat_channel/channel = I
ids += channel.id
- message2 = UpgradeDeprecatedChatMessage(message2)
-
- if (!length(channels))
- return
-
- var/list/data = message2._interop_serialize()
- data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = ids
- if(intercepted_message_queue)
- intercepted_message_queue += list(data)
- else
- Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data))
+ SendChatMessageRaw(message2, ids)
/datum/tgs_api/v5/ChatTargetedBroadcast(datum/tgs_message_content/message2, admin_only)
var/list/channels = list()
@@ -202,32 +218,82 @@
if (!channel.is_private_channel && ((channel.is_admin_channel && admin_only) || (!channel.is_admin_channel && !admin_only)))
channels += channel.id
+ SendChatMessageRaw(message2, channels)
+
+/datum/tgs_api/v5/ChatPrivateMessage(datum/tgs_message_content/message2, datum/tgs_chat_user/user)
+ SendChatMessageRaw(message2, list(user.channel.id))
+
+/datum/tgs_api/v5/proc/SendChatMessageRaw(datum/tgs_message_content/message2, list/channel_ids)
message2 = UpgradeDeprecatedChatMessage(message2)
- if (!length(channels))
+ if (!length(channel_ids))
return
var/list/data = message2._interop_serialize()
- data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = channels
+ data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = channel_ids
if(intercepted_message_queue)
intercepted_message_queue += list(data)
- else
- Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data))
+ return
-/datum/tgs_api/v5/ChatPrivateMessage(datum/tgs_message_content/message2, datum/tgs_chat_user/user)
- message2 = UpgradeDeprecatedChatMessage(message2)
- var/list/data = message2._interop_serialize()
- data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = list(user.channel.id)
- if(intercepted_message_queue)
- intercepted_message_queue += list(data)
+ if(offline_message_queue)
+ offline_message_queue += list(data)
+ return
+
+ if(detached)
+ offline_message_queue = list(data)
+
+ WaitForReattach(FALSE)
+
+ data = offline_message_queue
+ offline_message_queue = null
+
+ for(var/queued_message in data)
+ SendChatDataRaw(queued_message)
else
- Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data))
+ SendChatDataRaw(data)
+
+/datum/tgs_api/v5/proc/SendChatDataRaw(list/data)
+ Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data))
/datum/tgs_api/v5/ChatChannelInfo()
RequireInitialBridgeResponse()
WaitForReattach(TRUE)
return chat_channels.Copy()
+/datum/tgs_api/v5/TriggerEvent(event_name, list/parameters, wait_for_completion)
+ RequireInitialBridgeResponse()
+ WaitForReattach(TRUE)
+
+ if(interop_version.minor < 9)
+ TGS_WARNING_LOG("Interop version too low for custom events!")
+ return FALSE
+
+ var/str_parameters = list()
+ for(var/i in parameters)
+ str_parameters += "[i]"
+
+ var/list/response = Bridge(DMAPI5_BRIDGE_COMMAND_EVENT, list(DMAPI5_BRIDGE_PARAMETER_EVENT_INVOCATION = list(DMAPI5_EVENT_INVOCATION_NAME = event_name, DMAPI5_EVENT_INVOCATION_PARAMETERS = str_parameters, DMAPI5_EVENT_INVOCATION_NOTIFY_COMPLETION = wait_for_completion)))
+ if(!response)
+ return FALSE
+
+ var/event_id = response[DMAPI5_EVENT_ID]
+ if(!event_id)
+ return FALSE
+
+ TGS_DEBUG_LOG("Created event ID: [event_id]")
+ if(!wait_for_completion)
+ return TRUE
+
+ TGS_DEBUG_LOG("Waiting for completion of event ID: [event_id]")
+
+ while(!pending_events[event_id])
+ sleep(world.tick_lag)
+
+ TGS_DEBUG_LOG("Completed wait on event ID: [event_id]")
+ pending_events -= event_id
+
+ return TRUE
+
/datum/tgs_api/v5/proc/DecodeChannels(chat_update_json)
TGS_DEBUG_LOG("DecodeChannels()")
var/list/chat_channels_json = chat_update_json[DMAPI5_CHAT_UPDATE_CHANNELS]
diff --git a/code/modules/tgs/v5/bridge.dm b/code/modules/tgs/v5/bridge.dm
index 37f58bcdf63..62201fcc9e5 100644
--- a/code/modules/tgs/v5/bridge.dm
+++ b/code/modules/tgs/v5/bridge.dm
@@ -48,7 +48,9 @@
var/json = CreateBridgeData(command, data, TRUE)
var/encoded_json = url_encode(json)
- var/url = "http://127.0.0.1:[server_port]/Bridge?[DMAPI5_BRIDGE_DATA]=[encoded_json]"
+ var/api_prefix = interop_version.minor >= 8 ? "api/" : ""
+
+ var/url = "http://127.0.0.1:[server_port]/[api_prefix]Bridge?[DMAPI5_BRIDGE_DATA]=[encoded_json]"
return url
/datum/tgs_api/v5/proc/CreateBridgeData(command, list/data, needs_auth)
@@ -63,7 +65,7 @@
if(detached)
// Wait up to one minute
for(var/i in 1 to 600)
- sleep(1)
+ sleep(world.tick_lag)
if(!detached && (!require_channels || length(chat_channels)))
break
@@ -75,20 +77,25 @@
/datum/tgs_api/v5/proc/PerformBridgeRequest(bridge_request)
WaitForReattach(FALSE)
- // This is an infinite sleep until we get a response
- var/export_response = world.Export(bridge_request)
- if(!export_response)
- TGS_ERROR_LOG("Failed bridge request: [bridge_request]")
+ TGS_DEBUG_LOG("Bridge request start")
+ var/datum/tgs_http_result/result = http_handler.PerformGet(bridge_request)
+ TGS_DEBUG_LOG("Bridge request complete")
+
+ if(isnull(result))
+ TGS_ERROR_LOG("Failed bridge request, handler returned null!")
return
- var/response_json = file2text(export_response["CONTENT"])
- if(!response_json)
- TGS_ERROR_LOG("Failed bridge request, missing content!")
+ if(!istype(result) || result.type != /datum/tgs_http_result)
+ TGS_ERROR_LOG("Failed bridge request, handler returned non-[/datum/tgs_http_result]!")
return
- var/list/bridge_response = json_decode(response_json)
+ if(!result.success)
+ TGS_DEBUG_LOG("Failed bridge request, HTTP request failed!")
+ return
+
+ var/list/bridge_response = json_decode(result.response_text)
if(!bridge_response)
- TGS_ERROR_LOG("Failed bridge request, bad json: [response_json]")
+ TGS_ERROR_LOG("Failed bridge request, bad json: [result.response_text]")
return
var/error = bridge_response[DMAPI5_RESPONSE_ERROR_MESSAGE]
diff --git a/code/modules/tgs/v5/topic.dm b/code/modules/tgs/v5/topic.dm
index d7d47121381..59e5e63e5cd 100644
--- a/code/modules/tgs/v5/topic.dm
+++ b/code/modules/tgs/v5/topic.dm
@@ -94,7 +94,7 @@
if(DMAPI5_TOPIC_COMMAND_CHANGE_PORT)
var/new_port = topic_parameters[DMAPI5_TOPIC_PARAMETER_NEW_PORT]
if (!isnum(new_port) || !(new_port > 0))
- return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]]")
+ return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]")
if(event_handler != null)
event_handler.HandleEvent(TGS_EVENT_PORT_SWAP, new_port)
@@ -141,7 +141,7 @@
if(DMAPI5_TOPIC_COMMAND_SERVER_PORT_UPDATE)
var/new_port = topic_parameters[DMAPI5_TOPIC_PARAMETER_NEW_PORT]
if (!isnum(new_port) || !(new_port > 0))
- return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]]")
+ return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]")
server_port = new_port
return TopicResponse()
@@ -149,7 +149,9 @@
if(DMAPI5_TOPIC_COMMAND_HEALTHCHECK)
if(event_handler && event_handler.receive_health_checks)
event_handler.HandleEvent(TGS_EVENT_HEALTH_CHECK)
- return TopicResponse()
+ var/list/health_check_response = TopicResponse()
+ health_check_response[DMAPI5_TOPIC_RESPONSE_CLIENT_COUNT] = TGS_CLIENT_COUNT
+ return health_check_response;
if(DMAPI5_TOPIC_COMMAND_WATCHDOG_REATTACH)
detached = FALSE
@@ -157,7 +159,7 @@
var/error_message = null
if (new_port != null)
if (!isnum(new_port) || !(new_port > 0))
- error_message = "Invalid [DMAPI5_TOPIC_PARAMETER_NEW_PORT]]"
+ error_message = "Invalid [DMAPI5_TOPIC_PARAMETER_NEW_PORT]"
else
server_port = new_port
@@ -165,7 +167,7 @@
if (!istext(new_version_string))
if(error_message != null)
error_message += ", "
- error_message += "Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION]]"
+ error_message += "Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION]"
else
var/datum/tgs_version/new_version = new(new_version_string)
if (event_handler)
@@ -175,6 +177,11 @@
var/list/reattach_response = TopicResponse(error_message)
reattach_response[DMAPI5_PARAMETER_CUSTOM_COMMANDS] = ListCustomCommands()
+ reattach_response[DMAPI5_PARAMETER_TOPIC_PORT] = GetTopicPort()
+
+ for(var/eventId in pending_events)
+ pending_events[eventId] = TRUE
+
return reattach_response
if(DMAPI5_TOPIC_COMMAND_SEND_CHUNK)
@@ -267,4 +274,25 @@
return chunk_to_send
+ if(DMAPI5_TOPIC_COMMAND_RECEIVE_BROADCAST)
+ var/message = topic_parameters[DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE]
+ if (!istext(message))
+ return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE]")
+
+ TGS_WORLD_ANNOUNCE(message)
+ return TopicResponse()
+
+ if(DMAPI5_TOPIC_COMMAND_COMPLETE_EVENT)
+ var/event_id = topic_parameters[DMAPI5_EVENT_ID]
+ if (!istext(event_id))
+ return TopicResponse("Invalid or missing [DMAPI5_EVENT_ID]")
+
+ TGS_DEBUG_LOG("Completing event ID [event_id]...")
+ pending_events[event_id] = TRUE
+ return TopicResponse()
+
return TopicResponse("Unknown command: [command]")
+
+/datum/tgs_api/v5/proc/WorldBroadcast(message)
+ set waitfor = FALSE
+ TGS_WORLD_ANNOUNCE(message)
diff --git a/code/modules/tgs/v5/undefs.dm b/code/modules/tgs/v5/undefs.dm
index f163adaaafe..ca49e46cdff 100644
--- a/code/modules/tgs/v5/undefs.dm
+++ b/code/modules/tgs/v5/undefs.dm
@@ -8,16 +8,17 @@
#undef DMAPI5_TOPIC_REQUEST_LIMIT
#undef DMAPI5_TOPIC_RESPONSE_LIMIT
-#undef DMAPI5_BRIDGE_COMMAND_PORT_UPDATE
#undef DMAPI5_BRIDGE_COMMAND_STARTUP
#undef DMAPI5_BRIDGE_COMMAND_PRIME
#undef DMAPI5_BRIDGE_COMMAND_REBOOT
#undef DMAPI5_BRIDGE_COMMAND_KILL
#undef DMAPI5_BRIDGE_COMMAND_CHAT_SEND
#undef DMAPI5_BRIDGE_COMMAND_CHUNK
+#undef DMAPI5_BRIDGE_COMMAND_EVENT
#undef DMAPI5_PARAMETER_ACCESS_IDENTIFIER
#undef DMAPI5_PARAMETER_CUSTOM_COMMANDS
+#undef DMAPI5_PARAMETER_TOPIC_PORT
#undef DMAPI5_CHUNK
#undef DMAPI5_CHUNK_PAYLOAD
@@ -34,6 +35,7 @@
#undef DMAPI5_BRIDGE_PARAMETER_VERSION
#undef DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE
#undef DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL
+#undef DMAPI5_BRIDGE_PARAMETER_EVENT_INVOCATION
#undef DMAPI5_BRIDGE_RESPONSE_NEW_PORT
#undef DMAPI5_BRIDGE_RESPONSE_RUNTIME_INFORMATION
@@ -78,6 +80,10 @@
#undef DMAPI5_TOPIC_COMMAND_SERVER_PORT_UPDATE
#undef DMAPI5_TOPIC_COMMAND_HEALTHCHECK
#undef DMAPI5_TOPIC_COMMAND_WATCHDOG_REATTACH
+#undef DMAPI5_TOPIC_COMMAND_SEND_CHUNK
+#undef DMAPI5_TOPIC_COMMAND_RECEIVE_CHUNK
+#undef DMAPI5_TOPIC_COMMAND_RECEIVE_BROADCAST
+#undef DMAPI5_TOPIC_COMMAND_COMPLETE_EVENT
#undef DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE
#undef DMAPI5_TOPIC_PARAMETER_CHAT_COMMAND
@@ -87,7 +93,9 @@
#undef DMAPI5_TOPIC_PARAMETER_NEW_INSTANCE_NAME
#undef DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE
#undef DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION
+#undef DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE
+#undef DMAPI5_TOPIC_RESPONSE_CLIENT_COUNT
#undef DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE
#undef DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE
#undef DMAPI5_TOPIC_RESPONSE_CHAT_RESPONSES
@@ -112,3 +120,9 @@
#undef DMAPI5_CUSTOM_CHAT_COMMAND_NAME
#undef DMAPI5_CUSTOM_CHAT_COMMAND_HELP_TEXT
#undef DMAPI5_CUSTOM_CHAT_COMMAND_ADMIN_ONLY
+
+#undef DMAPI5_EVENT_ID
+
+#undef DMAPI5_EVENT_INVOCATION_NAME
+#undef DMAPI5_EVENT_INVOCATION_PARAMETERS
+#undef DMAPI5_EVENT_INVOCATION_NOTIFY_COMPLETION
diff --git a/code/modules/tgui/external.dm b/code/modules/tgui/external.dm
index bcd97a91245..aa4e9927758 100644
--- a/code/modules/tgui/external.dm
+++ b/code/modules/tgui/external.dm
@@ -42,7 +42,7 @@
*
* required user mob The mob interacting with the UI.
*
- * return list Statuic Data to be sent to the UI.
+ * return list Static Data to be sent to the UI.
*/
/datum/proc/ui_static_data(mob/user)
return list()
@@ -129,13 +129,6 @@
*/
/datum/var/list/tgui_shared_states
-/**
- * global
- *
- * Tracks open UIs for a user.
- */
-/mob/var/list/tgui_open_uis = list()
-
/**
* global
*
diff --git a/code/modules/nano/modules/follow_menu.dm b/code/modules/tgui/modules/follow_menu.dm
similarity index 100%
rename from code/modules/nano/modules/follow_menu.dm
rename to code/modules/tgui/modules/follow_menu.dm
diff --git a/code/modules/nano/modules/human_appearance.dm b/code/modules/tgui/modules/human_appearance.dm
similarity index 100%
rename from code/modules/nano/modules/human_appearance.dm
rename to code/modules/tgui/modules/human_appearance.dm
diff --git a/code/modules/nano/modules/narrate_panel.dm b/code/modules/tgui/modules/narrate_panel.dm
similarity index 88%
rename from code/modules/nano/modules/narrate_panel.dm
rename to code/modules/tgui/modules/narrate_panel.dm
index 03bc127bc02..6f91eea21eb 100644
--- a/code/modules/nano/modules/narrate_panel.dm
+++ b/code/modules/tgui/modules/narrate_panel.dm
@@ -16,49 +16,50 @@
if(.)
return
- var/mob/abstract/ghost/ghost = ui.user
- if(!istype(ghost))
+ var/mob/abstract/ghost/narrate_user = ui.user
+ var/is_admin = check_rights(R_ADMIN, user = ui.user)
+ if(!istype(narrate_user) && !is_admin)
return FALSE
if(action == "narrate")
var/narrate_text = sanitizeSafe(params["narrate_text"])
if(!length(narrate_text))
- to_chat(ghost, SPAN_WARNING("No text was supplied!"))
+ to_chat(narrate_user, SPAN_WARNING("No text was supplied!"))
return FALSE
var/narrate_style = params["narrate_style"]
if(!narrate_style)
- to_chat(ghost, SPAN_WARNING("No text style was supplied!"))
+ to_chat(narrate_user, SPAN_WARNING("No text style was supplied!"))
return FALSE
var/narrate_size = text2num(params["narrate_size"])
if(!isnum(narrate_size))
- to_chat(ghost, SPAN_WARNING("No text size was supplied!"))
+ to_chat(narrate_user, SPAN_WARNING("No text size was supplied!"))
return FALSE
var/narrate_range = text2num(params["narrate_range"])
if(!isnum(narrate_range))
- to_chat(ghost, SPAN_WARNING("No narrate range was supplied!"))
+ to_chat(narrate_user, SPAN_WARNING("No narrate range was supplied!"))
return FALSE
var/narrate_location = params["narrate_location"]
if(!narrate_location)
- to_chat(ghost, SPAN_WARNING("No narrate location was supplied!"))
+ to_chat(narrate_user, SPAN_WARNING("No narrate location was supplied!"))
return FALSE
var/list/mobs_to_message = list()
switch(narrate_location)
if("View")
- for(var/mob/M in get_hearers_in_view(narrate_range, ghost))
+ for(var/mob/M in get_hearers_in_view(narrate_range, narrate_user))
mobs_to_message |= M
if("Range")
- for(var/mob/M in get_hearers_in_range(narrate_range, ghost))
+ for(var/mob/M in get_hearers_in_range(narrate_range, narrate_user))
mobs_to_message |= M
if("Z-Level")
for(var/mob/M in GLOB.player_list)
- if(GET_Z(M) == ghost.z)
+ if(GET_Z(M) == narrate_user.z)
mobs_to_message |= M
if("Global")
diff --git a/code/modules/tgui/states.dm b/code/modules/tgui/states.dm
index d3ce59cf352..188fb7f48a1 100644
--- a/code/modules/tgui/states.dm
+++ b/code/modules/tgui/states.dm
@@ -70,7 +70,7 @@
// Disable UIs if unconscious.
else if(stat)
return UI_DISABLED
- // Update UIs if incapicitated but concious.
+ // Update UIs if incapicitated but conscious.
else if(incapacitated())
return UI_UPDATE
return UI_INTERACTIVE
@@ -86,6 +86,34 @@
return UI_DISABLED
return ..()
+/mob/living/silicon/ai/proc/can_use_remote_ui(src_object)
+ if(src_object == src)
+ return TRUE
+
+ if(control_disabled || !istype(src_object, /atom))
+ return FALSE
+
+ var/atom/source = src_object
+ var/atom/interaction_source = eyeobj || src
+ var/turf/interaction_turf = get_turf(interaction_source)
+ var/turf/source_turf = get_turf(source)
+ if(!interaction_turf || !source_turf || interaction_turf.z != source_turf.z)
+ return FALSE
+
+ var/view_setting = world.view
+ if(client)
+ view_setting = client.view
+
+ var/list/clientviewlist = getviewsize(view_setting)
+ var/x_range = round((clientviewlist[1] - 1) / 2)
+ var/y_range = round((clientviewlist[2] - 1) / 2)
+ if(!IsInRange(source_turf.x, interaction_turf.x - x_range, interaction_turf.x + x_range))
+ return FALSE
+ if(!IsInRange(source_turf.y, interaction_turf.y - y_range, interaction_turf.y + y_range))
+ return FALSE
+
+ return can_see(interaction_source, source, max(x_range, y_range))
+
/mob/living/silicon/robot/shared_ui_interaction(src_object)
// Disable UIs if the object isn't installed in the borg AND the borg has a dead cell, or no cell.
var/atom/device = src_object
@@ -129,6 +157,3 @@
/datum/ui_state/proc/href_list(mob/user)
return list()
-
-/datum/proc/nano_container()
- return src
diff --git a/code/modules/tgui/states/default.dm b/code/modules/tgui/states/default.dm
index 0f93514cfe6..24a3d7e1ff0 100644
--- a/code/modules/tgui/states/default.dm
+++ b/code/modules/tgui/states/default.dm
@@ -13,11 +13,18 @@
GLOBAL_DATUM_INIT(default_state, /datum/ui_state/default, new)
/datum/ui_state/default/can_use_topic(src_object, mob/user)
- return user.default_can_use_topic(src_object) // Call the individual mob-overridden procs.
+ return user?.default_can_use_topic(src_object) // Call the individual mob-overridden procs.
/mob/proc/default_can_use_topic(src_object)
return UI_CLOSE // Don't allow interaction by default.
+/mob/abstract/eye/freelook/aiEye/default_can_use_topic(src_object)
+ if(!isAI(owner))
+ return UI_CLOSE
+
+ var/mob/living/silicon/ai/ai = owner
+ return ai.default_can_use_topic(src_object)
+
/mob/living/default_can_use_topic(src_object)
. = shared_ui_interaction(src_object)
if(. > UI_CLOSE && loc) //must not be in nullspace.
@@ -41,8 +48,8 @@ GLOBAL_DATUM_INIT(default_state, /datum/ui_state/default, new)
if(. < UI_INTERACTIVE)
return
- // The AI can interact with anything it can see nearby, or with cameras while wireless control is enabled.
- if(!control_disabled)
+ // The AI can interact with anything visible from its eye while wireless control is enabled.
+ if(can_use_remote_ui(src_object))
return UI_INTERACTIVE
return UI_CLOSE
diff --git a/code/modules/tgui/status_composers.dm b/code/modules/tgui/status_composers.dm
index 7924ed9f2f2..4777c9d012c 100644
--- a/code/modules/tgui/status_composers.dm
+++ b/code/modules/tgui/status_composers.dm
@@ -11,6 +11,16 @@
)
)
+/// Returns the silicon mob represented by a TGUI user, including an AI using its camera eye.
+/proc/tgui_silicon_user(mob/user)
+ if(issilicon(user))
+ return user
+
+ if(istype(user, /mob/abstract/eye/freelook/aiEye))
+ var/mob/abstract/eye/freelook/aiEye/eye = user
+ if(issilicon(eye.owner))
+ return eye.owner
+
/// Returns a UI status such that users adjacent to source will be able to interact,
/// far away users will be able to see, and anyone farther won't see anything.
/// Dead users will receive updates no matter what, though you likely want to add
@@ -24,6 +34,9 @@
/// Returns a UI status such that the dead will be able to watch, but not interact.
/proc/ui_status_only_living(mob/user, source)
+ if(tgui_silicon_user(user))
+ return UI_INTERACTIVE
+
if (isliving(user))
return UI_INTERACTIVE
@@ -49,25 +62,33 @@
/// Being dead will disable UI, being incapacitated will continue updating it,
/// and anything else will make it interactive.
/proc/ui_status_user_is_abled(mob/user, atom/source)
+ var/mob/living/silicon/silicon_user = tgui_silicon_user(user)
+ if(silicon_user && silicon_user != user)
+ return silicon_user.shared_ui_interaction(source)
return user.shared_ui_interaction(source)
/// Returns a UI status such that those without blocked hands will be able to interact,
/// but everyone else can only watch.
/proc/ui_status_user_has_free_hands(mob/user, atom/source)
+ if(tgui_silicon_user(user))
+ return UI_INTERACTIVE
return user.use_check() ? UI_UPDATE : UI_INTERACTIVE
/// Returns a UI status such that advanced tool users will be able to interact,
/// but everyone else can only watch.
/proc/ui_status_user_is_advanced_tool_user(mob/user)
+ var/mob/living/silicon/silicon_user = tgui_silicon_user(user)
+ if(silicon_user)
+ return silicon_user.IsAdvancedToolUser() ? UI_INTERACTIVE : UI_UPDATE
return user.IsAdvancedToolUser() ? UI_INTERACTIVE : UI_UPDATE
/// Returns a UI status such that silicons will be able to interact with whatever
/// they would have access to if this was a machine. For example, AIs can
/// interact if there's cameras with wireless control is enabled.
/proc/ui_status_silicon_has_access(mob/user, atom/source)
- if (!issilicon(user))
+ var/mob/living/silicon/silicon_user = tgui_silicon_user(user)
+ if(!silicon_user)
return UI_CLOSE
- var/mob/living/silicon/silicon_user = user
return silicon_user.get_ui_access(source)
/// Returns a UI status representing this silicon's capability to access
@@ -83,8 +104,8 @@
return UI_DISABLED // Otherwise they can keep the UI open.
/mob/living/silicon/ai/get_ui_access(atom/source)
- // The AI can interact with anything it can see nearby, or with cameras while wireless control is enabled.
- if(!control_disabled && can_see(source))
+ // The AI can interact with anything visible from its eye while wireless control is enabled.
+ if(can_use_remote_ui(source))
return UI_INTERACTIVE
return UI_CLOSE
@@ -113,3 +134,11 @@
return UI_CLOSE
return UI_INTERACTIVE
+
+/// Return UI_INTERACTIVE if the user is inside the target atom, whether they can see it or not.
+/// Return UI_CLOSE otherwise.
+/proc/ui_status_user_inside(mob/user, atom/target)
+ if(target.contains(user))
+ return UI_INTERACTIVE
+
+ return UI_CLOSE
diff --git a/code/modules/tgui/tgui.dm b/code/modules/tgui/tgui.dm
index 62b40969958..b5391b4473d 100644
--- a/code/modules/tgui/tgui.dm
+++ b/code/modules/tgui/tgui.dm
@@ -37,11 +37,9 @@
var/datum/ui_state/state = null
/// Rate limit client refreshes to prevent DoS.
COOLDOWN_DECLARE(refresh_cooldown)
- /// Are byond mouse events beyond the window passed in to the ui
- var/mouse_hooked = FALSE
- /// Any partial packets that we have received from TGUI, waiting to be sent
- var/partial_packets
+ /// The id of any ByondUi elements that we have opened
+ var/list/open_byondui_elements
/**
* public
@@ -58,9 +56,6 @@
* return datum/tgui The requested UI.
*/
/datum/tgui/New(mob/user, datum/src_object, interface, title, ui_x, ui_y)
- log_tgui(user,
- "new [interface] fancy [user?.client?.prefs.tgui_fancy]",
- src_object = src_object)
src.user = user
src.src_object = src_object
src.window_key = "[REF(src_object)]-main"
@@ -85,7 +80,7 @@
* return bool - TRUE if a new pooled window is opened, FALSE in all other situations including if a new pooled window didn't open because one already exists.
*/
/datum/tgui/proc/open()
- if(!user?.client)
+ if(user && !user.client)
return FALSE
if(window)
return FALSE
@@ -100,7 +95,6 @@
if(!window.is_ready())
window.initialize(
strict_mode = TRUE,
- fancy = user.client.prefs.tgui_fancy,
assets = list(
get_asset_datum(/datum/asset/simple/tgui),
))
@@ -110,8 +104,6 @@
window.send_message("update", get_payload(
with_data = TRUE,
with_static_data = TRUE))
- if(mouse_hooked)
- window.set_mouse_macro()
SStgui.on_open(src)
return TRUE
@@ -146,11 +138,27 @@
window.release_lock()
window.close(can_be_suspended)
src_object.ui_close(user)
- SEND_SIGNAL(src, COMSIG_TGUI_CLOSE, user)
SStgui.on_close(src)
+
+ if(user.client)
+ terminate_byondui_elements()
+
state = null
qdel(src)
+/**
+ * public
+ *
+ * Closes all ByondUI elements, left dangling by a forceful TGUI exit,
+ * such as via Alt+F4, or terminating the process
+ *
+ */
+/datum/tgui/proc/terminate_byondui_elements()
+ set waitfor = FALSE
+
+ for(var/byondui_element in open_byondui_elements)
+ winset(user.client, byondui_element, list("parent" = ""))
+
/**
* public
*
@@ -161,18 +169,6 @@
/datum/tgui/proc/set_autoupdate(autoupdate)
src.autoupdate = autoupdate
-/**
- * public
- *
- * Enable/disable passing through byond mouse events to the window
- *
- * required value bool Enable/disable hooking.
- */
-/datum/tgui/proc/set_mouse_hook(value)
- src.mouse_hooked = value
- //Handle unhooking/hooking on already open windows ?
-
-
/**
* public
*
@@ -248,12 +244,13 @@
json_data["config"] = list(
"title" = title,
"status" = status,
- "interface" = interface,
+ "interface" = list(
+ "name" = interface,
+ ),
"refreshing" = refreshing,
"window" = list(
"key" = window_key,
"size" = window_size,
- "fancy" = user.client.prefs.tgui_fancy,
"locked" = user.client.prefs.tgui_lock,
"scale" = user.client.prefs.ui_scale,
),
@@ -329,31 +326,6 @@
// Pass act type messages to ui_act
if(type && copytext(type, 1, 5) == "act/")
var/act_type = copytext(type, 5)
-
- var/id = href_list["packetId"]
- if(!isnull(id))
- id = text2num(id)
-
- var/total = text2num(href_list["totalPackets"])
-
- if(total > MAX_MESSAGE_CHUNKS)
- return
-
- if(id == 1)
- partial_packets = new /list(total)
-
- partial_packets[id] = href_list["packet"]
-
- if(id != total)
- return
-
- var/assembled_payload = ""
- for(var/packet in partial_packets)
- assembled_payload += packet
-
- payload = json_decode(assembled_payload)
- partial_packets = null
-
log_tgui(user, "Action: [act_type] [href_list["payload"]]",
window = window,
src_object = src_object)
@@ -381,6 +353,18 @@
LAZYINITLIST(src_object.tgui_shared_states)
src_object.tgui_shared_states[href_list["key"]] = href_list["value"]
SStgui.update_uis(src_object)
+ if(TGUI_MANAGED_BYONDUI_TYPE_RENDER)
+ var/byond_ui_id = payload[TGUI_MANAGED_BYONDUI_PAYLOAD_ID]
+ if(!byond_ui_id || LAZYLEN(open_byondui_elements) > TGUI_MANAGED_BYONDUI_LIMIT)
+ return
+
+ LAZYOR(open_byondui_elements, byond_ui_id)
+ if(TGUI_MANAGED_BYONDUI_TYPE_UNMOUNT)
+ var/byond_ui_id = payload[TGUI_MANAGED_BYONDUI_PAYLOAD_ID]
+ if(!byond_ui_id)
+ return
+
+ LAZYREMOVE(open_byondui_elements, byond_ui_id)
/// Wrapper for behavior to potentially wait until the next tick if the server is overloaded
/datum/tgui/proc/on_act_message(act_type, payload, state)
diff --git a/code/modules/tgui/tgui_window.dm b/code/modules/tgui/tgui_window.dm
index 996013a1aa5..1b29cacdb79 100644
--- a/code/modules/tgui/tgui_window.dm
+++ b/code/modules/tgui/tgui_window.dm
@@ -11,6 +11,7 @@
var/is_browser = FALSE
var/status = TGUI_WINDOW_CLOSED
var/locked = FALSE
+ var/visible = FALSE
var/datum/tgui/locked_by
var/datum/subscriber_object
var/subscriber_delegate
@@ -19,12 +20,12 @@
var/sent_assets = list()
// Vars passed to initialize proc (and saved for later)
var/initial_strict_mode
- var/initial_fancy
var/initial_assets
var/initial_inline_html
var/initial_inline_js
var/initial_inline_css
- var/mouse_event_macro_set = FALSE
+
+ var/list/oversized_payloads = list()
/**
* public
@@ -50,7 +51,6 @@
* will be put into the queue until the window finishes loading.
*
* optional strict_mode bool - Enables strict error handling and BSOD.
- * optional fancy bool - If TRUE and if this is NOT a panel, will hide the window titlebar.
* optional assets list - List of assets to load during initialization.
* optional inline_html string - Custom HTML to inject.
* optional inline_js string - Custom JS to inject.
@@ -58,7 +58,6 @@
*/
/datum/tgui_window/proc/initialize(
strict_mode = FALSE,
- fancy = FALSE,
assets = list(),
inline_html = "",
inline_js = "",
@@ -68,7 +67,6 @@
window = src)
if(!client)
return
- src.initial_fancy = fancy
src.initial_assets = assets
src.initial_inline_html = inline_html
src.initial_inline_js = inline_js
@@ -76,16 +74,12 @@
status = TGUI_WINDOW_LOADING
fatally_errored = FALSE
// Build window options
- var/options = "file=[id].html;can_minimize=0;auto_format=0;"
- // Remove titlebar and resize handles for a fancy window
- if(fancy)
- options += "titlebar=0;can_resize=0;"
- else
- options += "titlebar=1;can_resize=1;"
+ var/options = "file=[id].html;can_minimize=0;auto_format=0;titlebar=0;can_resize=0;"
// Generate page html
var/html = SStgui.basehtml
html = replacetextEx(html, "\[tgui:windowId]", id)
html = replacetextEx(html, "\[tgui:strictMode]", strict_mode)
+ html = replacetextEx(html, "\[tgui:storagecdn]", GLOB.config.storage_cdn_iframe)
// Inject assets
var/inline_assets_str = ""
for(var/datum/asset/asset in assets)
@@ -128,7 +122,6 @@
/datum/tgui_window/proc/reinitialize()
initialize(
strict_mode = initial_strict_mode,
- fancy = initial_fancy,
assets = initial_assets,
inline_html = initial_inline_html,
inline_js = initial_inline_js,
@@ -220,12 +213,11 @@
/datum/tgui_window/proc/close(can_be_suspended = TRUE)
if(!client)
return
- if(mouse_event_macro_set)
- remove_mouse_macro()
if(can_be_suspended && can_be_suspended())
log_tgui(client,
context = "[id]/close (suspending)",
window = src)
+ visible = FALSE
status = TGUI_WINDOW_READY
send_message("suspend")
return
@@ -233,6 +225,7 @@
context = "[id]/close",
window = src)
release_lock()
+ visible = FALSE
status = TGUI_WINDOW_CLOSED
message_queue = null
// Do not close the window to give user some time
@@ -298,9 +291,6 @@
return
sent_assets |= list(asset)
. = asset.send(client)
- if(istype(asset, /datum/asset/spritesheet))
- var/datum/asset/spritesheet/spritesheet = asset
- send_message("asset/stylesheet", spritesheet.css_filename())
send_raw_message(asset.get_serialized_url_mappings())
/**
@@ -364,6 +354,11 @@
switch(type)
if("ping")
send_message("ping/reply", payload)
+ if("ping/set")
+ client?.avgping = payload["ping"]
+ if("visible")
+ visible = TRUE
+ SEND_SIGNAL(src, COMSIG_TGUI_WINDOW_VISIBLE, client)
if("suspend")
close(can_be_suspended = TRUE)
if("close")
@@ -372,40 +367,48 @@
client << link(href_list["url"])
if("cacheReloaded")
reinitialize()
+ if("chat/resend")
+ SSchat.handle_resend(client, payload)
+ if("oversizedPayloadRequest")
+ var/payload_id = payload["id"]
+ var/chunk_count = payload["chunkCount"]
+ var/permit_payload = chunk_count <= 32
+ if(permit_payload)
+ create_oversized_payload(payload_id, payload["type"], chunk_count)
+ send_message("oversizePayloadResponse", list("allow" = permit_payload, "id" = payload_id))
+ if("payloadChunk")
+ var/payload_id = payload["id"]
+ append_payload_chunk(payload_id, payload["chunk"])
+ send_message("acknowledgePayloadChunk", list("id" = payload_id))
-/datum/tgui_window/proc/set_mouse_macro()
- if(mouse_event_macro_set)
+/datum/tgui_window/vv_edit_var(var_name, var_value)
+ return var_name != NAMEOF(src, id) && ..()
+
+/datum/tgui_window/proc/create_oversized_payload(payload_id, message_type, chunk_count)
+ if(oversized_payloads[payload_id])
+ stack_trace("Attempted to create oversized tgui payload with duplicate ID.")
return
-
- var/list/byondToTguiEventMap = list(
- "MouseDown" = "byond/mousedown",
- "MouseUp" = "byond/mouseup"
+ oversized_payloads[payload_id] = list(
+ "type" = message_type,
+ "count" = chunk_count,
+ "chunks" = list(),
+ "timeout" = addtimer(CALLBACK(src, PROC_REF(remove_oversized_payload), payload_id), 1 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE)
)
- for(var/mouseMacro in byondToTguiEventMap)
- var/command_template = ".output CONTROL PAYLOAD"
- var/event_message = TGUI_CREATE_MESSAGE(byondToTguiEventMap[mouseMacro], null)
- var target_control = is_browser \
- ? "[id]:update" \
- : "[id].browser:update"
- var/with_id = replacetext(command_template, "CONTROL", target_control)
- var/full_command = replacetext(with_id, "PAYLOAD", event_message)
+/datum/tgui_window/proc/append_payload_chunk(payload_id, chunk)
+ var/list/payload = oversized_payloads[payload_id]
+ if(!payload)
+ return
+ var/list/chunks = payload["chunks"]
+ chunks += chunk
+ if(length(chunks) >= payload["count"])
+ deltimer(payload["timeout"])
+ var/message_type = payload["type"]
+ var/final_payload = chunks.Join()
+ remove_oversized_payload(payload_id)
+ on_message(message_type, json_decode(final_payload), list("type" = message_type, "payload" = final_payload, "tgui" = TRUE, "window_id" = id))
+ else
+ payload["timeout"] = addtimer(CALLBACK(src, PROC_REF(remove_oversized_payload), payload_id), 1 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE)
- var/list/params = list()
- params["parent"] = "default" //Technically this is external to tgui but whatever
- params["name"] = mouseMacro
- params["command"] = full_command
-
- winset(client, "[mouseMacro]Window[id]Macro", params)
- mouse_event_macro_set = TRUE
-
-/datum/tgui_window/proc/remove_mouse_macro()
- if(!mouse_event_macro_set)
- stack_trace("Unsetting mouse macro on tgui window that has none")
- var/list/byondToTguiEventMap = list(
- "MouseDown" = "byond/mousedown",
- "MouseUp" = "byond/mouseup"
- )
- for(var/mouseMacro in byondToTguiEventMap)
- winset(client, null, "[mouseMacro]Window[id]Macro.parent=null")
- mouse_event_macro_set = FALSE
+/datum/tgui_window/proc/remove_oversized_payload(payload_id)
+ oversized_payloads -= payload_id
diff --git a/code/modules/tgui_input/alert.dm b/code/modules/tgui_input/alert.dm
index 469cd7831b1..6efee72a7cd 100644
--- a/code/modules/tgui_input/alert.dm
+++ b/code/modules/tgui_input/alert.dm
@@ -10,7 +10,7 @@
* * timeout - The timeout of the alert, after which the modal will close and qdel itself. Set to zero for no timeout.
* * autofocus - The bool that controls if this alert should grab window focus.
*/
-/proc/tgui_alert(mob/user, message = "", title, list/buttons = list("Ok"), timeout = 0, autofocus = TRUE)
+/proc/tgui_alert(mob/user, message = "", title, list/buttons = list("Ok"), timeout = 0, autofocus = TRUE, ui_state = GLOB.always_state)
if (!user)
user = usr
if (!istype(user))
@@ -18,7 +18,11 @@
var/client/client = user
user = client.mob
else
- return
+ return null
+
+ if(isnull(user.client))
+ return null
+
// A gentle nudge - you should not be using TGUI alert for anything other than a simple message.
if(length(buttons) > 3)
log_tgui(user, "Error: TGUI Alert initiated with too many buttons. Use a list.", "TguiAlert")
@@ -29,7 +33,7 @@
return alert(user, message, title, buttons[1], buttons[2])
if(length(buttons) == 3)
return alert(user, message, title, buttons[1], buttons[2], buttons[3])
- var/datum/tgui_alert/alert = new(user, message, title, buttons, timeout, autofocus)
+ var/datum/tgui_alert/alert = new(user, message, title, buttons, timeout, autofocus, ui_state)
alert.ui_interact(user)
alert.wait()
if (alert)
@@ -59,19 +63,23 @@
var/autofocus
/// Boolean field describing if the tgui_alert was closed by the user.
var/closed
+ /// The TGUI UI state that will be returned in ui_state(). Default: always_state
+ var/datum/ui_state/state
-/datum/tgui_alert/New(mob/user, message, title, list/buttons, timeout, autofocus)
+/datum/tgui_alert/New(mob/user, message, title, list/buttons, timeout, autofocus, ui_state)
src.autofocus = autofocus
src.buttons = buttons.Copy()
src.message = message
src.title = title
+ src.state = ui_state
if (timeout)
src.timeout = timeout
start_time = world.time
QDEL_IN(src, timeout)
-/datum/tgui_alert/Destroy(force, ...)
+/datum/tgui_alert/Destroy(force)
SStgui.close_uis(src)
+ state = null
buttons?.Cut()
return ..()
@@ -94,7 +102,7 @@
closed = TRUE
/datum/tgui_alert/ui_state(mob/user)
- return GLOB.always_state
+ return state
/datum/tgui_alert/ui_static_data(mob/user)
var/list/data = list()
@@ -112,7 +120,7 @@
data["timeout"] = CLAMP01((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS))
return data
-/datum/tgui_alert/ui_act(action, list/params)
+/datum/tgui_alert/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
. = ..()
if (.)
return
diff --git a/code/modules/tgui_input/checkboxes.dm b/code/modules/tgui_input/checkboxes.dm
new file mode 100644
index 00000000000..51ce2a631aa
--- /dev/null
+++ b/code/modules/tgui_input/checkboxes.dm
@@ -0,0 +1,139 @@
+/**
+ * ### tgui_input_checkbox
+ * Opens a window with a list of checkboxes and returns a list of selected choices.
+ *
+ * user - The mob to display the window to
+ * message - The message inside the window
+ * title - The title of the window
+ * list/items - The list of items to display
+ * min_checked - The minimum number of checkboxes that must be checked (defaults to 1)
+ * max_checked - The maximum number of checkboxes that can be checked (optional)
+ * timeout - The timeout for the input (optional)
+ */
+/proc/tgui_input_checkboxes(mob/user, message, title = "Select", list/items, min_checked = 1, max_checked = 50, timeout = 0, ui_state = GLOB.always_state)
+ if (!user)
+ user = usr
+ if(!length(items))
+ return null
+ if (!istype(user))
+ if (istype(user, /client))
+ var/client/client = user
+ user = client.mob
+ else
+ return null
+
+ if(isnull(user.client))
+ return null
+
+ if(!user.client.prefs.tgui_inputs)
+ return input(user, message, title) as null|anything in items
+ var/datum/tgui_checkbox_input/input = new(user, message, title, items, min_checked, max_checked, timeout, ui_state)
+ input.ui_interact(user)
+ input.wait()
+ if (input)
+ . = input.choices
+ qdel(input)
+
+/// Window for tgui_input_checkboxes
+/datum/tgui_checkbox_input
+ /// Title of the window
+ var/title
+ /// Message to display
+ var/message
+ /// List of items to display
+ var/list/items
+ /// List of selected items
+ var/list/choices
+ /// Time when the input was created
+ var/start_time
+ /// Timeout for the input
+ var/timeout
+ /// Whether the input was closed
+ var/closed
+ /// Minimum number of checkboxes that must be checked
+ var/min_checked
+ /// Maximum number of checkboxes that can be checked
+ var/max_checked
+ /// The TGUI UI state that will be returned in ui_state(). Default: always_state
+ var/datum/ui_state/state
+
+/datum/tgui_checkbox_input/New(mob/user, message, title, list/items, min_checked, max_checked, timeout, ui_state)
+ src.title = title
+ src.message = message
+ src.items = items.Copy()
+ src.min_checked = min_checked
+ src.max_checked = max_checked
+ src.state = ui_state
+
+ if (timeout)
+ src.timeout = timeout
+ start_time = world.time
+ QDEL_IN(src, timeout)
+
+/datum/tgui_checkbox_input/Destroy(force)
+ SStgui.close_uis(src)
+ state = null
+ items?.Cut()
+ return ..()
+
+/datum/tgui_checkbox_input/proc/wait()
+ while (!closed && !QDELETED(src))
+ stoplag(1)
+
+/datum/tgui_checkbox_input/ui_interact(mob/user, datum/tgui/ui)
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "CheckboxInput")
+ ui.open()
+
+/datum/tgui_checkbox_input/ui_close(mob/user)
+ . = ..()
+ closed = TRUE
+
+/datum/tgui_checkbox_input/ui_state(mob/user)
+ return state
+
+/datum/tgui_checkbox_input/ui_data(mob/user)
+ var/list/data = list()
+
+ if(timeout)
+ data["timeout"] = CLAMP01((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS))
+
+ return data
+
+/datum/tgui_checkbox_input/ui_static_data(mob/user)
+ var/list/data = list()
+
+ data["items"] = items
+ data["min_checked"] = min_checked
+ data["max_checked"] = max_checked
+ data["large_buttons"] = user.client.prefs.tgui_buttons_large
+ data["message"] = message
+ data["swapped_buttons"] = user.client.prefs.tgui_inputs_swapped
+ data["title"] = title
+
+ return data
+
+/datum/tgui_checkbox_input/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
+ . = ..()
+ if (.)
+ return
+
+ switch(action)
+ if("submit")
+ var/list/selections = params["entry"]
+ if(length(selections) >= min_checked && length(selections) <= max_checked)
+ set_choices(selections)
+ closed = TRUE
+ SStgui.close_uis(src)
+ return TRUE
+
+ if("cancel")
+ closed = TRUE
+ SStgui.close_uis(src)
+ return TRUE
+
+ return FALSE
+
+/datum/tgui_checkbox_input/proc/set_choices(list/selections)
+ src.choices = selections.Copy()
diff --git a/code/modules/tgui_input/keycombo.dm b/code/modules/tgui_input/keycombo.dm
new file mode 100644
index 00000000000..45bd3c18034
--- /dev/null
+++ b/code/modules/tgui_input/keycombo.dm
@@ -0,0 +1,126 @@
+/**
+ * Creates a TGUI window with a key input. Returns the user's response as a full key with modifiers, eg ShiftK.
+ *
+ * This proc should be used to create windows for key entry that the caller will wait for a response from.
+ * If tgui fancy chat is turned off: Will return a normal input.
+ *
+ * Arguments:
+ * * user - The user to show the number input to.
+ * * message - The content of the number input, shown in the body of the TGUI window.
+ * * title - The title of the number input modal, shown on the top of the TGUI window.
+ * * default - The default (or current) key, shown as a placeholder.
+ */
+/proc/tgui_input_keycombo(mob/user = usr, message, title = "Key Input", default = 0, timeout = 0, ui_state = GLOB.always_state)
+ if (!istype(user))
+ if (istype(user, /client))
+ var/client/client = user
+ user = client.mob
+ else
+ return null
+
+ if (isnull(user.client))
+ return null
+
+ // Client does NOT have tgui_input on: Returns regular input
+ if(!user.client.prefs.tgui_inputs)
+ var/input_key = input(user, message, title + "(Modifiers are TGUI only, sorry!)", default) as null|text
+ return input_key[1]
+ var/datum/tgui_input_keycombo/key_input = new(user, message, title, default, timeout, ui_state)
+ key_input.ui_interact(user)
+ key_input.wait()
+ if (key_input)
+ . = key_input.entry
+ qdel(key_input)
+
+/**
+ * # tgui_input_keycombo
+ *
+ * Datum used for instantiating and using a TGUI-controlled key input that prompts the user with
+ * a message and listens for key presses.
+ */
+/datum/tgui_input_keycombo
+ /// Boolean field describing if the tgui_input_number was closed by the user.
+ var/closed
+ /// The default (or current) value, shown as a default. Users can press reset with this.
+ var/default
+ /// The entry that the user has return_typed in.
+ var/entry
+ /// The prompt's body, if any, of the TGUI window.
+ var/message
+ /// The time at which the number input was created, for displaying timeout progress.
+ var/start_time
+ /// The lifespan of the number input, after which the window will close and delete itself.
+ var/timeout
+ /// The title of the TGUI window
+ var/title
+ /// The TGUI UI state that will be returned in ui_state(). Default: always_state
+ var/datum/ui_state/state
+
+/datum/tgui_input_keycombo/New(mob/user, message, title, default, timeout, ui_state)
+ src.default = default
+ src.message = message
+ src.title = title
+ src.state = ui_state
+ if (timeout)
+ src.timeout = timeout
+ start_time = world.time
+ QDEL_IN(src, timeout)
+
+/datum/tgui_input_keycombo/Destroy(force)
+ SStgui.close_uis(src)
+ state = null
+ return ..()
+
+/**
+ * Waits for a user's response to the tgui_input_keycombo's prompt before returning. Returns early if
+ * the window was closed by the user.
+ */
+/datum/tgui_input_keycombo/proc/wait()
+ while (!entry && !closed && !QDELETED(src))
+ stoplag(1)
+
+/datum/tgui_input_keycombo/ui_interact(mob/user, datum/tgui/ui)
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "KeyComboModal")
+ ui.open()
+
+/datum/tgui_input_keycombo/ui_close(mob/user)
+ . = ..()
+ closed = TRUE
+
+/datum/tgui_input_keycombo/ui_state(mob/user)
+ return state
+
+/datum/tgui_input_keycombo/ui_static_data(mob/user)
+ var/list/data = list()
+ data["init_value"] = default // Default is a reserved keyword
+ data["large_buttons"] = user.client.prefs.tgui_buttons_large
+ data["message"] = message
+ data["swapped_buttons"] = user.client.prefs.tgui_inputs_swapped
+ data["title"] = title
+ return data
+
+/datum/tgui_input_keycombo/ui_data(mob/user)
+ var/list/data = list()
+ if(timeout)
+ data["timeout"] = CLAMP01((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS))
+ return data
+
+/datum/tgui_input_keycombo/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
+ . = ..()
+ if (.)
+ return
+ switch(action)
+ if("submit")
+ set_entry(params["entry"])
+ closed = TRUE
+ SStgui.close_uis(src)
+ return TRUE
+ if("cancel")
+ closed = TRUE
+ SStgui.close_uis(src)
+ return TRUE
+
+/datum/tgui_input_keycombo/proc/set_entry(entry)
+ src.entry = entry
diff --git a/code/modules/tgui_input/list.dm b/code/modules/tgui_input/list.dm
index 1192bb55b85..5448a4a4729 100644
--- a/code/modules/tgui_input/list.dm
+++ b/code/modules/tgui_input/list.dm
@@ -10,21 +10,28 @@
* * default - If an option is already preselected on the UI. Current values, etc.
* * timeout - The timeout of the input box, after which the menu will close and qdel itself. Set to zero for no timeout.
*/
-/proc/tgui_input_list(mob/user, message, title = "Select", list/items, default, timeout = 0)
+/proc/tgui_input_list(mob/user, message, title = "Select", list/items, default, timeout = 0, ui_state = GLOB.always_state)
if (!user)
user = usr
if(!length(items))
- return
+ return null
if (!istype(user))
if (istype(user, /client))
var/client/client = user
user = client.mob
else
- return
+ return null
+
+ if(isnull(user.client))
+ return null
+
/// Client does NOT have tgui_input on: Returns regular input
if(!user.client.prefs.tgui_inputs)
return input(user, message, title, default) as null|anything in items
- var/datum/tgui_list_input/input = new(user, message, title, items, default, timeout)
+ var/datum/tgui_list_input/input = new(user, message, title, items, default, timeout, ui_state)
+ if(input.invalid)
+ qdel(input)
+ return
input.ui_interact(user)
input.wait()
if (input)
@@ -56,13 +63,18 @@
var/timeout
/// Boolean field describing if the tgui_list_input was closed by the user.
var/closed
+ /// The TGUI UI state that will be returned in ui_state(). Default: always_state
+ var/datum/ui_state/state
+ /// Whether the tgui list input is invalid or not (i.e. due to all list entries being null)
+ var/invalid = FALSE
-/datum/tgui_list_input/New(mob/user, message, title, list/items, default, timeout)
+/datum/tgui_list_input/New(mob/user, message, title, list/items, default, timeout, ui_state)
src.title = title
src.message = message
src.items = list()
src.items_map = list()
src.default = default
+ src.state = ui_state
var/list/repeat_items = list()
// Gets rid of illegal characters
var/static/regex/whitelistedWords = regex(@{"([^\u0020-\u8000]+)"})
@@ -74,13 +86,17 @@
string_key = avoid_assoc_duplicate_keys(string_key, repeat_items)
src.items += string_key
src.items_map[string_key] = i
+
+ if(length(src.items) == 0)
+ invalid = TRUE
if (timeout)
src.timeout = timeout
start_time = world.time
QDEL_IN(src, timeout)
-/datum/tgui_list_input/Destroy(force, ...)
+/datum/tgui_list_input/Destroy(force)
SStgui.close_uis(src)
+ state = null
items?.Cut()
items_map?.Cut()
return ..()
@@ -96,7 +112,7 @@
/datum/tgui_list_input/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
- ui = new(user, src, "ListInputModal")
+ ui = new(user, src, "ListInputWindow")
ui.open()
/datum/tgui_list_input/ui_close(mob/user)
@@ -104,15 +120,15 @@
closed = TRUE
/datum/tgui_list_input/ui_state(mob/user)
- return GLOB.always_state
+ return state
/datum/tgui_list_input/ui_static_data(mob/user)
var/list/data = list()
data["init_value"] = default || items[1]
data["items"] = items
data["large_buttons"] = user.client.prefs.tgui_buttons_large
- data["swapped_buttons"] = user.client.prefs.tgui_inputs_swapped
data["message"] = message
+ data["swapped_buttons"] = user.client.prefs.tgui_inputs_swapped
data["title"] = title
return data
@@ -122,7 +138,7 @@
data["timeout"] = clamp((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS), 0, 1)
return data
-/datum/tgui_list_input/ui_act(action, list/params)
+/datum/tgui_list_input/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
. = ..()
if (.)
return
diff --git a/code/modules/tgui_input/number.dm b/code/modules/tgui_input/number.dm
index 8eb489be1f0..5c708f618e3 100644
--- a/code/modules/tgui_input/number.dm
+++ b/code/modules/tgui_input/number.dm
@@ -15,7 +15,7 @@
* * timeout - The timeout of the number input, after which the modal will close and qdel itself. Set to zero for no timeout.
* * round_value - whether the inputted number is rounded down into an integer.
*/
-/proc/tgui_input_number(mob/user, message, title = "Number Input", default = 0, max_value = 10000, min_value = 0, timeout = 0, round_value = TRUE)
+/proc/tgui_input_number(mob/user, message, title = "Number Input", default = 0, max_value = 10000, min_value = 0, timeout = 0, round_value = TRUE, ui_state = GLOB.always_state)
if (!user)
user = usr
if (!istype(user))
@@ -30,7 +30,7 @@
if(!user.client.prefs.tgui_inputs)
var/input_number = input(user, message, title, default) as null|num
return clamp(round_value ? round(input_number) : input_number, min_value, max_value)
- var/datum/tgui_input_number/number_input = new(user, message, title, default, max_value, min_value, timeout, round_value)
+ var/datum/tgui_input_number/number_input = new(user, message, title, default, max_value, min_value, timeout, round_value, ui_state)
number_input.ui_interact(user)
number_input.wait()
if (number_input)
@@ -64,14 +64,17 @@
var/timeout
/// The title of the TGUI window
var/title
+ /// The TGUI UI state that will be returned in ui_state(). Default: always_state
+ var/datum/ui_state/state
-/datum/tgui_input_number/New(mob/user, message, title, default, max_value, min_value, timeout, round_value)
+/datum/tgui_input_number/New(mob/user, message, title, default, max_value, min_value, timeout, round_value, ui_state)
src.default = default
src.max_value = max_value
src.message = message
src.min_value = min_value
src.title = title
src.round_value = round_value
+ src.state = ui_state
if (timeout)
src.timeout = timeout
start_time = world.time
@@ -87,8 +90,9 @@
if(default > max_value)
CRASH("Default value is greater than max value.")
-/datum/tgui_input_number/Destroy(force, ...)
+/datum/tgui_input_number/Destroy(force)
SStgui.close_uis(src)
+ state = null
return ..()
/**
@@ -110,7 +114,7 @@
closed = TRUE
/datum/tgui_input_number/ui_state(mob/user)
- return GLOB.always_state
+ return state
/datum/tgui_input_number/ui_static_data(mob/user)
if (!user.client)
@@ -119,10 +123,10 @@
var/list/data = list()
data["init_value"] = default // Default is a reserved keyword
data["large_buttons"] = user.client.prefs.tgui_buttons_large
- data["swapped_buttons"] = user.client.prefs.tgui_inputs_swapped
data["max_value"] = max_value
data["message"] = message
data["min_value"] = min_value
+ data["swapped_buttons"] = user.client.prefs.tgui_inputs_swapped
data["title"] = title
data["round_value"] = round_value
return data
@@ -133,7 +137,7 @@
data["timeout"] = CLAMP01((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS))
return data
-/datum/tgui_input_number/ui_act(action, list/params)
+/datum/tgui_input_number/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
. = ..()
if (.)
return
diff --git a/code/modules/tgui_input/say_modal/modal.dm b/code/modules/tgui_input/say_modal/modal.dm
index 4b96ab1791d..4caf3f82420 100644
--- a/code/modules/tgui_input/say_modal/modal.dm
+++ b/code/modules/tgui_input/say_modal/modal.dm
@@ -48,7 +48,6 @@
sleep(3 SECONDS)
window.initialize(
strict_mode = TRUE,
- fancy = TRUE,
inline_css = file("tgui/public/tgui-say.bundle.css"),
inline_js = file("tgui/public/tgui-say.bundle.js"),
);
diff --git a/code/modules/tgui_input/text.dm b/code/modules/tgui_input/text.dm
index c934a4276a6..6b3563a27a0 100644
--- a/code/modules/tgui_input/text.dm
+++ b/code/modules/tgui_input/text.dm
@@ -10,12 +10,12 @@
* * message - The content of the text input, shown in the body of the TGUI window.
* * title - The title of the text input modal, shown on the top of the TGUI window.
* * default - The default (or current) value, shown as a placeholder.
- * * max_length - Specifies a max length for input. MAX_MESSAGE_LEN is default (1024)
+ * * max_length - Specifies a max length for input. MAX_MESSAGE_LEN is default (4096)
* * multiline - Bool that determines if the input box is much larger. Good for large messages, laws, etc.
* * encode - Toggling this determines if input is filtered via html_encode. Setting this to FALSE gives raw input.
* * timeout - The timeout of the textbox, after which the modal will close and qdel itself. Set to zero for no timeout.
*/
-/proc/tgui_input_text(mob/user, message = "", title = "Text Input", default, max_length = MAX_MESSAGE_LEN, multiline = FALSE, encode = TRUE, timeout = 0)
+/proc/tgui_input_text(mob/user, message = "", title = "Text Input", default, max_length = MAX_MESSAGE_LEN, multiline = FALSE, encode = TRUE, timeout = 0, ui_state = GLOB.always_state)
if (!user)
user = usr
if (!istype(user))
@@ -39,7 +39,7 @@
return input(user, message, title, default) as message|null
else
return input(user, message, title, default) as text|null
- var/datum/tgui_input_text/text_input = new(user, message, title, default, max_length, multiline, encode, timeout)
+ var/datum/tgui_input_text/text_input = new(user, message, title, default, max_length, multiline, encode, timeout, ui_state)
text_input.ui_interact(user)
text_input.wait()
if (text_input)
@@ -73,21 +73,25 @@
var/timeout
/// The title of the TGUI window
var/title
+ /// The TGUI UI state that will be returned in ui_state(). Default: always_state
+ var/datum/ui_state/state
-/datum/tgui_input_text/New(mob/user, message, title, default, max_length, multiline, encode, timeout)
+/datum/tgui_input_text/New(mob/user, message, title, default, max_length, multiline, encode, timeout, ui_state)
src.default = default
src.encode = encode
src.max_length = max_length
src.message = message
src.multiline = multiline
src.title = title
+ src.state = ui_state
if (timeout)
src.timeout = timeout
start_time = world.time
QDEL_IN(src, timeout)
-/datum/tgui_input_text/Destroy(force, ...)
+/datum/tgui_input_text/Destroy(force)
SStgui.close_uis(src)
+ state = null
return ..()
/**
@@ -131,7 +135,7 @@
data["timeout"] = CLAMP01((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS))
return data
-/datum/tgui_input_text/ui_act(action, list/params)
+/datum/tgui_input_text/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
. = ..()
if (.)
return
diff --git a/code/modules/tgui_panel/external.dm b/code/modules/tgui_panel/external.dm
index 5ab90b3d61b..8874bf3a49e 100644
--- a/code/modules/tgui_panel/external.dm
+++ b/code/modules/tgui_panel/external.dm
@@ -32,3 +32,11 @@
tgui_panel.initialize(force = TRUE)
// Force show the panel to see if there are any errors
winset(src, "output_selector.legacy_output_selector", "left=output_browser")
+
+/client/verb/refresh_tgui()
+ set name = "Refresh TGUI"
+ set category = "OOC.Debug"
+
+ for(var/window_id in tgui_windows)
+ var/datum/tgui_window/window = tgui_windows[window_id]
+ window.reinitialize()
diff --git a/code/modules/turbolift/turbolift_areas.dm b/code/modules/turbolift/turbolift_areas.dm
index b5d62178ef3..73ba00edbd5 100644
--- a/code/modules/turbolift/turbolift_areas.dm
+++ b/code/modules/turbolift/turbolift_areas.dm
@@ -1,6 +1,7 @@
// Used for creating the exchange areas.
/area/turbolift
name = "Turbolift"
+ icon_state = "turbolift"
base_turf = /turf/simulated/open
requires_power = 0
station_area = TRUE
diff --git a/code/unit_tests/map_tests.dm b/code/unit_tests/map_tests.dm
index 017d0678876..178c3768f96 100644
--- a/code/unit_tests/map_tests.dm
+++ b/code/unit_tests/map_tests.dm
@@ -159,6 +159,8 @@
var/checks = 0
var/failed_checks = 0
for(var/obj/structure/machinery/door/airlock/A in world)
+ if(QDELETED(A))
+ continue
var/turf/T = get_turf(A)
checks++
TEST_ASSERT_NOTNULL(T, "A turf does not exist under the door at [A.x],[A.y],[A.z]")
@@ -180,8 +182,11 @@
var/checks = 0
var/failed_checks = 0
for(var/obj/structure/machinery/door/firedoor/F in world)
+ if(QDELETED(F))
+ continue
var/turf/T = get_turf(F)
checks++
+ TEST_ASSERT_NOTNULL(T, "A turf does not exist under the firedoor at [F.x],[F.y],[F.z]")
var/firelock_increment = 0
for(var/obj/structure/machinery/door/firedoor/FD in T)
firelock_increment += 1
diff --git a/code/unit_tests/zas_tests.dm b/code/unit_tests/zas_tests.dm
index b2b730a1e02..e9b77caa54d 100644
--- a/code/unit_tests/zas_tests.dm
+++ b/code/unit_tests/zas_tests.dm
@@ -124,7 +124,6 @@ GLOBAL_LIST_EMPTY(turfs_to_map_type)
/datum/unit_test/zas_area_test/ai_chamber
name = "ZAS: AI Chamber"
area_path = /area/horizon/ai/chamber
- expectation = UT_NORMAL_COOL
/datum/unit_test/zas_area_test/xenobio
name = "ZAS: Xenobiology"
diff --git a/config/example/config.txt b/config/example/config.txt
index 0824bb673a6..a486343be07 100644
--- a/config/example/config.txt
+++ b/config/example/config.txt
@@ -604,3 +604,7 @@ CACHE_ASSETS 0
#
#
#
+
+## Tgui payloads larger than the 2kb limit for BYOND topic requests are split into roughly 1kb chunks and sent in sequence.
+## This config option limits the maximum chunk count for which the server will accept a payload, default is 32
+TGUI_MAX_CHUNK_COUNT 32
diff --git a/dependencies.sh b/dependencies.sh
index dc296092ca2..a015b9e405d 100755
--- a/dependencies.sh
+++ b/dependencies.sh
@@ -17,9 +17,12 @@ echo "SPACEMAN_DMM_VERSION=$SPACEMAN_DMM_VERSION" >> "$GITHUB_ENV"
#node version
export NODE_VERSION=20
echo "NODE_VERSION=$NODE_VERSION" >> "$GITHUB_ENV"
-export NODE_VERSION_LTS=20.12.0
+export NODE_VERSION_LTS=22.11.0
echo "NODE_VERSION_LTS=$NODE_VERSION_LTS" >> "$GITHUB_ENV"
+# Bun version
+export BUN_VERSION=1.2.16
+echo "BUN_VERSION=$BUN_VERSION" >> "$GITHUB_ENV"
# Python version for mapmerge and other tools
# Ensure in https://www.python.org/ftp/python/ there is a file called python--embed-amd64.zip,
diff --git a/html/changelogs/Bat-TGUIHotfixes1.yml b/html/changelogs/Bat-TGUIHotfixes1.yml
new file mode 100644
index 00000000000..0d325c1f87d
--- /dev/null
+++ b/html/changelogs/Bat-TGUIHotfixes1.yml
@@ -0,0 +1,6 @@
+author: Batrachophrenoboocosmomachia
+delete-after: True
+changes:
+ - bugfix: "Fixes TGUI windows having their dimensions provided from datum init being overridden."
+ - bugfix: "Increases say window width."
+ - bugfix: "Re-enables spellcheck in tgui-say."
diff --git a/html/changelogs/Bat-TGUIHotfixes2.yml b/html/changelogs/Bat-TGUIHotfixes2.yml
new file mode 100644
index 00000000000..ae9154ea48e
--- /dev/null
+++ b/html/changelogs/Bat-TGUIHotfixes2.yml
@@ -0,0 +1,8 @@
+author: Batrachophrenoboocosmomachia
+delete-after: True
+changes:
+ - bugfix: "Fixes LateJoin and Manifest interfaces not displaying department colors by creating a shared component for both interfaces to use."
+ - bugfix: "Fixes the Manifest interface not displaying colors for crew status."
+ - bugfix: "Fixes status composer not allowing AIs to view TGUIs."
+ - bugfix: "Fixes inline icons in alt-click atom viewer."
+ - bugfix: "Fixes PDA light toggle icon not appearing."
diff --git a/html/changelogs/Bat-TGUIHotfixes3.yml b/html/changelogs/Bat-TGUIHotfixes3.yml
new file mode 100644
index 00000000000..31ab3960c0f
--- /dev/null
+++ b/html/changelogs/Bat-TGUIHotfixes3.yml
@@ -0,0 +1,5 @@
+author: Batrachophrenoboocosmomachia
+delete-after: True
+changes:
+ - bugfix: "Fixes SmartFridge interface crashing with stored items due to malformed image rendering."
+ - bugfix: "Forces chat pane to re-render immediately when filters are changed."
diff --git a/html/changelogs/Bat-TGUIHotfixes4.yml b/html/changelogs/Bat-TGUIHotfixes4.yml
new file mode 100644
index 00000000000..913c353d248
--- /dev/null
+++ b/html/changelogs/Bat-TGUIHotfixes4.yml
@@ -0,0 +1,17 @@
+author: Batrachophrenoboocosmomachia
+delete-after: True
+changes:
+ - bugfix: "Restores chat highlight background color selection functionality (PR #20701)"
+ - bugfix: "Restores customizable chat message retention settings."
+ - bugfix: "Updates recommended vscode extension config file."
+ - bugfix: "Fixes some mismapped and missing scss files as well as removing temporary working files leftover in PR."
+ - bugfix: "Fixes silicons/AI being unable to interact remotely with shield capacitor and shield generator machinery."
+ - bugfix: "Fixes gene data disks produced by xenobotany's lysis-isolation centrifuge machine not displaying gene names."
+ - bugfix: "Makes AI remote access to machinery TGUIs more consistent."
+ - bugfix: "Fixes the Sensors interface not displaying sensor machinery's current health."
+ - bugfix: "Fixes the Sensors interface displaying strange values for current range."
+ - bugfix: "Fixes modular computer software displaying device themes instead of explicit software themes."
+ - bugfix: "Fixes MC tab links."
+ - bugfix: "Fixes Manifest and LateJoin department colors to match pre-React settings."
+ - bugfix: "Aligns mismatched radio channel keys between tgui-say and the radio subsystem."
+ - spellcheck: "Fixes a typo in the TGUI fatal error message."
diff --git a/html/changelogs/Bat-TGUIReactMigration.yml b/html/changelogs/Bat-TGUIReactMigration.yml
new file mode 100644
index 00000000000..4078a497fb4
--- /dev/null
+++ b/html/changelogs/Bat-TGUIReactMigration.yml
@@ -0,0 +1,66 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# - (fixes bugs)
+# wip
+# - (work in progress)
+# qol
+# - (quality of life)
+# soundadd
+# - (adds a sound)
+# sounddel
+# - (removes a sound)
+# rscadd
+# - (adds a feature)
+# rscdel
+# - (removes a feature)
+# imageadd
+# - (adds an image or sprite)
+# imagedel
+# - (removes an image or sprite)
+# spellcheck
+# - (fixes spelling or grammar)
+# experiment
+# - (experimental change)
+# balance
+# - (balance changes)
+# code_imp
+# - (misc internal code change)
+# refactor
+# - (refactors code)
+# config
+# - (makes a change to the config files)
+# admin
+# - (makes changes to administrator tools)
+# server
+# - (miscellaneous changes to server)
+#################################
+
+# Your name.
+author: Batrachophrenoboocosmomachia
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit.
+# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - refactor: "Updates TGUI backend (both modules and tgui code) from Inferno to React."
+ - refactor: "Migrates all TGUI components and interfaces to the new React architecture."
+ - rscadd: "Adds item examine tags and descriptors w/ hoverable tooltips in chat window."
+ - rscdel: "Removal of all lingering NanoUI code and assets."
+ - server: "Build tool Javascript to Typescript migrations."
+ - code_imp: "Migration to bun 1.2.16."
+ - code_imp: "Migration from eslint 7.32.0 -> biome 2.1.2."
+ - code_imp: "Many many other dependency changes; see all 'package.json' diffs."
+ - bugfix: "Fixes runtime attempting to clone executable files in NTOS File Manager."
diff --git a/html/changelogs/MapFixFromTGW.yml b/html/changelogs/MapFixFromTGW.yml
deleted file mode 100644
index 5ef1eb1d4e7..00000000000
--- a/html/changelogs/MapFixFromTGW.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-author: TheGreyWolf
-
-delete-after: True
-
-changes:
- - bugfix: "Gives the role merchant a EFTPOS."
diff --git a/html/changelogs/TGWCleansUp.yml b/html/changelogs/TGWCleansUp.yml
new file mode 100644
index 00000000000..f0f984a2489
--- /dev/null
+++ b/html/changelogs/TGWCleansUp.yml
@@ -0,0 +1,14 @@
+author: TheGreyWolf
+
+delete-after: True
+
+changes:
+ - bugfix: "Fixed the taj sprites for the bucket hat, boonie hat and camo boonie hat."
+ - bugfix: "Fixed noticeboard not formatting certain symbols correctly."
+ - bugfix: "Fixed pill bottle sound when inserting items."
+ - bugfix: "Fixed the overflow of vitamins from biogenerators."
+ - bugfix: "Fixed the sound from the investigator crime scene kit and aluminium briefcase when inserting items."
+ - bugfix: "Fixed intercoms on south walls were too far in on the walls."
+ - bugfix: "Fixed the stripes disappearing briefly when a glass airlock denied access."
+ - bugfix: "Fixed the missing wall pharmacy vending machine sprite when vending."
+ - bugfix: "Fixed vaurca having access to the base combi-tool. They have their own in the loadout, they should be using that."
diff --git a/html/changelogs/archive/2026-05.yml b/html/changelogs/archive/2026-05.yml
index 4b942c96eb6..70a8e829538 100644
--- a/html/changelogs/archive/2026-05.yml
+++ b/html/changelogs/archive/2026-05.yml
@@ -413,3 +413,10 @@
kermit:
- rscadd: Adds 3x PsiProtect Broad Use pill bottles to the Pharmacy retail shelf
for prescription refills (and investigation).
+2026-05-31:
+ Kano:
+ - bugfix: Fixed the machinery repath in cryo outpost Odyssey map.
+ TheGreyWolf:
+ - bugfix: Gives the role merchant a EFTPOS.
+ Wowzewow (Wezzy):
+ - soundadd: Adds a whole lot more of pick up, drop, and handling sounds.
diff --git a/html/changelogs/archive/2026-06.yml b/html/changelogs/archive/2026-06.yml
new file mode 100644
index 00000000000..8d8bc239e5a
--- /dev/null
+++ b/html/changelogs/archive/2026-06.yml
@@ -0,0 +1,164 @@
+2026-06-01:
+ Llywelwyn:
+ - bugfix: Leaning on the north side of a wall now correctly hides your lower body
+ behind the wall instead of drawing you on top of it.
+ - code_imp: Adds a COMSIG_MOB_LYING_DOWN signal, sent when a mob transitions into
+ lying down.
+2026-06-02:
+ Batrachophrenoboocosmomachia:
+ - bugfix: 'Reverts #22556 (organ rejection changes).'
+ - bugfix: Fixes non-hardsuit health analyzer runtime.
+ - bugfix: Fixes hardsuit health analyzer not reliably self-scanning.
+ - bugfix: Adds additional safety checks to hardsuit deployment logic to better handle
+ boot checks.
+ - bugfix: Hardsuit Health Analyzer module works again.
+ - rscadd: Adds 'Retract All Parts' verb for hardsuits.
+ - rscdel: Removes Vitals Scanner module; hardsuits which had this module by default
+ have had it replaced with the Health Analzyer module.
+ - rscdel: Removes hardsuit Maneuvering Jets onmob sprites.
+ ElorgRHG:
+ - imageadd: Tweaked the sprites for security badge accessories and added belt sprites
+ for them.
+ Greenjoe:
+ - rscadd: Adds clothing item versions of various undershirt items. They can be selected
+ in the loadout. The undershirt versions of them are removed from the game. Some
+ other undershirts are removed outright.
+ Hellfirejag:
+ - rscdel: Removed a couple of completely vestigial global-ish mob vars to save on
+ memory and time.
+ - bugfix: Fixed a runtime error caused by giving any mob spell objects.
+ - bugfix: Fixed a runtime error caused by shift clicking a turf after logging out
+ and relogging.
+ - bugfix: Fixed some situations where an IPC datacable can get 'stuck'.
+ - bugfix: Fixed a runtime error caused by robotics consoles using a protolathe when
+ no circuit imprinter is connected.
+ - bugfix: Fixed a runtime error on objects caused by timers being created on objects
+ that are already being qdel'ed.
+ - rscadd: Tweaked the hard delete logging sensitivity to correctly catch and record
+ typical hard dels to the sentry logs. They will also now provide more usable
+ information in order to help find where the memory leaks are coming from.
+ - bugfix: Fixed a runtime error in organ rejection.
+ - bugfix: Fixed vines spamming runtime errors after they are 'damaged' by a player.
+ - bugfix: Fixed a runtime error related to the stamina bar.
+ - bugfix: Fixed a runtime regularly caused by flashlights.
+ - bugfix: Fixed a runtime error caused by explosive implants lying about being a
+ radio to the Radio Subsystem.
+ Llywelwyn:
+ - bugfix: Fake Crew Arrival Announcement uplink service now works even with an invalid
+ employer faction.
+ MattAtlas:
+ - bugfix: Synthetic external armour now deteriorates with the actual damage taken.
+ Previously, the calculation led to the armour instead taking less damage the
+ less it was blocked.
+ - bugfix: Fixing the synthetic endoskeleton now fixes the permanent paincrit effect
+ on IPCs. This was caused by the self preservation status being toggled when
+ the endoskeleton was destroyed, but it was never reset when the endoskeleton
+ was fixed.
+ - bugfix: Species components are now added and removed properly, meaning you can
+ switch from IPC to human and back and forth as a mercenary once more.
+ - bugfix: The Bishop internal PDA now uses your actual ID on your person as its
+ own ID.
+ - bugfix: Fixed the endoskeleton welder repair surgery. You can do this surgery
+ by using a welder while aiming chest and after having opened the chest fully.
+ - bugfix: The endoskeleton now takes damage from EMPs as well. This should make
+ them A LOT more effective against IPCs.
+ - qol: The posibrain will now show up in diagnostics.
+ - rscadd: Posibrains can now be destroyed by hitting them. This will completely
+ kill the IPC's consciousness!
+ TheGreyWolf:
+ - balance: Tajara brute mods were changed from 10%, 20% and 30% for zhan, base tajara
+ and m'sai to 5%, 10%, 15%.
+ - balance: Flashbangs no longer stun tajara unless they have sensitive hearing on.
+ - rscadd: The height difference between hharar, m'sai and zhan were tweaked to not
+ be identical.
+ - rscadd: Tajara eyes can now extend their vision, somewhat similarly to using a
+ binocular.
+ - rscadd: Tajara with sensitive hearing on can now hear whispers and people talking
+ into radios from 2 turfs away.
+ - bugfix: Fixed a bug with the autakh farseer eyes causing them to give the improper
+ message if retracted by movement or other sources.
+ hazelmouse:
+ - rscadd: Implemented a large revision of maintenance, in the hope of establishing
+ a more coherent style to be followed into the future. Expect slightly brighter
+ lighting and a more consistent use of decals.
+ - rscadd: Turrets now produce less light.
+ - rscadd: Telecommunications is no longer lit with blue lighting.
+ - rscadd: Several dark spots on the map are now better lit, including medical's
+ GTR and the INDRA chamber in engineering.
+ - rscadd: Implemented a few very ancillary changes to the Horizon's mapping outside
+ of maintenance, including adding tiles to all airlocks.
+ llywelwyn:
+ - bugfix: Modular energy guns with a reactor now self-recharge from assembly, instead
+ of only starting after the first shot is fired.
+2026-06-03:
+ Fenodyree:
+ - bugfix: Fixes Longbow shells exploding when mechs pick them up.
+ MattAtlas:
+ - admin: Added the Storyteller narrate panel for admins.
+2026-06-04:
+ Fenodyree:
+ - bugfix: Fixes modular lasers improvement cap.
+ - bugfix: Fixes negative initial values being handled incorrectly.
+ - bugfix: Fixes some repair edge cases.
+ - bugfix: Fixes welding repairs not needing eye protection.
+ - bugfix: Fixes gattling laser mod having the wrong improvable variables.
+ - bugfix: Fixes the weapon analyzer printout calculating modlaser stats incorrectly.
+ - bugfix: Fixes high skill users not being able to field repair modlasers.
+ - bugfix: Fixes the weapon analyzer ripping your combitool out of your hand.
+ - bugfix: Fixes the weapon analyzer not being deconstructable.
+ - balance: Drops the per var improvement cap by 50%, multiplicative scaling is no
+ joke.
+ - rscadd: Adds spalling when a projectile punches from a solid turf to an open turf.
+ These are big chunks of shrapnel with low damage and high embed chance.
+ - rscadd: Adds an admin only gun that fires ship weapon ammo.
+ - rscadd: 'Makes several indestructible structures breakable: vending machines,
+ computer frames, window frames and watertanks. They now also leave behind shrapnel
+ instead of just steel sheets.'
+ - rscadd: Adds a negative maim chance, which reduces the chance of decapitation
+ or limb loss.
+ - balance: Reworks shields, they take more power and are generally weaker. In exchange
+ they now block explosions and each generator can be upgraded with research components,
+ in addition to accepting multiple capacitors.
+ - balance: All non-exoplosive ship projectiles got buffs. All projectiles got additional
+ anti-material. Armour piercing shells now penetrate many more things.
+ - balance: Reworked overmap targetting. Shots now spawn on the map edge and aim
+ at their target, instead of spawning near their target and aiming straight forwards.
+ - bugfix: Fixes explosive projectiles destroying the thing they hit before the explosion
+ can happen, causing them not to explode.
+ - bugfix: Fixes projectiles not penetrating windows, because they hit the window
+ frame which was indestructible.
+ - bugfix: Fixes shrapnel getting misnamed, or named twice.
+ - bugfix: Fixes shields having no click delay when attacked with melee weapons.
+ Hellfirejag:
+ - bugfix: Fixed a hard delete caused by worm monsters.
+ - bugfix: Fixed negative dispersion (from high gun skill) sometimes wrapping back
+ around to inaccurate guns again.
+ - bugfix: Comprehensively destroyed an extremely large number of niche hard dels
+ across the entire Atom-Human Hierarchy.
+ - bugfix: Fixed some references being deleted instead of nulled.
+ Hellfirejag, TheGreyWolf:
+ - rscadd: Implemented the Anatomy skill. Anatomy determines the quality of information
+ received when medically examining your own injuries.
+ Llywelwyn:
+ - bugfix: Saved chat logs are now written with the correct text/html file type.
+ - bugfix: Emote markup like *bold* and /italics/ once again renders in chat instead
+ of showing literal tags.
+ - code_imp: Door tests skip qdeleted doors, so they should no longer intermittently
+ fail when landing zone generation clears a ruin.
+ - bugfix: Colour chips in character setup are correctly coloured again.
+ hazelmouse:
+ - bugfix: Removed an erroneous scrubber in the bar.
+ kermit, louiseisnthome:
+ - imageadd: Changes the Reade accent icon from purple splodges to one that represents
+ the gas giant.
+2026-06-05:
+ Baldos:
+ - balance: Added a new box to the uplink that contains 8 shotgun slugs for 2 TC,
+ and reduced the cost of Assault Shotgun's magazines.
+ Hellfirejag:
+ - balance: Tweaked the empathy penalty from mindblankers and PsiProtect drugs to
+ only cut the morale modifiers from Ministry and Leadership in half, rather than
+ fully negate them.
+ TheGreyWolf:
+ - bugfix: Added a changelog editing system that should cause fewer conflicts and
+ more accurate timestamps.
diff --git a/html/changelogs/fyni-outer-eyes-2-5-5.yml b/html/changelogs/fyni-outer-eyes-2-5-5.yml
new file mode 100644
index 00000000000..8e58e41dc2d
--- /dev/null
+++ b/html/changelogs/fyni-outer-eyes-2-5-5.yml
@@ -0,0 +1,5 @@
+author: fyni
+delete-after: True
+changes:
+ - rscadd: "Adds modkits to the two Outer Eyes antag loadouts so you can mod the voidsuit to fit other species."
+ - rscadd: "Adds the Outer Eyes Enforcer outfit, for quicker Outer Eyes spawning for admins."
\ No newline at end of file
diff --git a/html/changelogs/hazelmouse-eeeeee.yml b/html/changelogs/hazelmouse-eeeeee.yml
new file mode 100644
index 00000000000..b4df5326b24
--- /dev/null
+++ b/html/changelogs/hazelmouse-eeeeee.yml
@@ -0,0 +1,60 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# - (fixes bugs)
+# wip
+# - (work in progress)
+# qol
+# - (quality of life)
+# soundadd
+# - (adds a sound)
+# sounddel
+# - (removes a sound)
+# rscadd
+# - (adds a feature)
+# rscdel
+# - (removes a feature)
+# imageadd
+# - (adds an image or sprite)
+# imagedel
+# - (removes an image or sprite)
+# spellcheck
+# - (fixes spelling or grammar)
+# experiment
+# - (experimental change)
+# balance
+# - (balance changes)
+# code_imp
+# - (misc internal code change)
+# refactor
+# - (refactors code)
+# config
+# - (makes a change to the config files)
+# admin
+# - (makes changes to administrator tools)
+# server
+# - (miscellaneous changes to server)
+#################################
+
+# Your name.
+author: hazelmouse
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit.
+# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "Added a new exterior area subtype which shields cannot form around. Used to force shields to wrap around the actual walls and windows on deck three, rather than around the entirety of the Horizon's wings."
+ - imageadd: "Added several area sprites. Makes the map prettier in map editing programs."
+ - bugfix: "Shields no longer wrap in a large arc around the starboard thrusters."
diff --git a/html/changelogs/kano-dot-blend.yml b/html/changelogs/kano-dot-blend.yml
new file mode 100644
index 00000000000..eecec494897
--- /dev/null
+++ b/html/changelogs/kano-dot-blend.yml
@@ -0,0 +1,4 @@
+author: Kano
+delete-after: True
+changes:
+ - bugfix: "Fixed windows and grilles not applying the proper smooth overlays they're supposed to have."
diff --git a/html/changelogs/kano-dot-cryo-outpost-repath-fix.yml b/html/changelogs/kano-dot-cryo-outpost-repath-fix.yml
deleted file mode 100644
index dbeaf7999ae..00000000000
--- a/html/changelogs/kano-dot-cryo-outpost-repath-fix.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-author: Kano
-
-delete-after: True
-
-changes:
- - bugfix: "Fixed the machinery repath in cryo outpost Odyssey map."
diff --git a/html/changelogs/kermit-ipc-cooler-size.yml b/html/changelogs/kermit-ipc-cooler-size.yml
new file mode 100644
index 00000000000..e0dc9f79aae
--- /dev/null
+++ b/html/changelogs/kermit-ipc-cooler-size.yml
@@ -0,0 +1,7 @@
+author: kermit
+
+delete-after: True
+
+changes:
+ - qol: "Downsizes the IPC Suit Cooler from Bulky to Normal so they can fit in bags (on par with large oxygen tanks)."
+ - balance: "Downgrades the IPC Suit Cooler's cell to a heavy-duty cell (-50% charge capacity) and increases charge consumption modifer by 85% (result is: approx. 10 minutes cooling a cooler-less IPC; in ordinary EVA conditions, it still lasts ages, don't worry)."
diff --git a/html/changelogs/llywelwyn-sh.yml b/html/changelogs/llywelwyn-sh.yml
new file mode 100644
index 00000000000..26da84c3535
--- /dev/null
+++ b/html/changelogs/llywelwyn-sh.yml
@@ -0,0 +1,5 @@
+author: Llywelwyn
+delete-after: True
+changes:
+ - code_imp: "Shellcheck shell scripts in CI/CD."
+ - code_imp: "Fixes shellcheck warns in existing scripts."
diff --git a/html/changelogs/wezzy-sounds-joneses.yml b/html/changelogs/mattatlas-tgattackanims.yml
similarity index 90%
rename from html/changelogs/wezzy-sounds-joneses.yml
rename to html/changelogs/mattatlas-tgattackanims.yml
index 310242698f6..663bb08a194 100644
--- a/html/changelogs/wezzy-sounds-joneses.yml
+++ b/html/changelogs/mattatlas-tgattackanims.yml
@@ -44,7 +44,7 @@
#################################
# Your name.
-author: Wowzewow (Wezzy)
+author: MattAtlas (Porting), /tg/station (Original Code)
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
@@ -55,4 +55,4 @@ delete-after: True
# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit.
# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog.
changes:
- - soundadd: "Adds a whole lot more of pick up, drop, and handling sounds."
+ - rscadd: "Ported attack animations from /tg/station for attacking with items, unarmed attacks, and for simple mobs."
diff --git a/html/statbrowser.css b/html/statbrowser.css
index 3dd7f78b786..07704633be2 100644
--- a/html/statbrowser.css
+++ b/html/statbrowser.css
@@ -1,241 +1,295 @@
.light:root {
- --scrollbar-base: #f2f2f2;
- --scrollbar-thumb: #a7a7a7;
+ --color-base: #ffffff;
+ --scrollbar-base: #f2f2f2;
+ --scrollbar-thumb: #a7a7a7;
}
-html, body {
- scrollbar-color: var(--scrollbar-base) var(--scrollbar-thumb);
+html,
+body {
+ scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-base);
}
body {
- font-family: Verdana, Geneva, Tahoma, sans-serif;
- font-size: 12px !important;
- margin: 0 !important;
- padding: 0 !important;
- overflow-x: hidden;
- overflow-y: scroll;
-}
-
-body.dark {
- background-color: #131313;
- color: #b2c4dd;
- scrollbar-base-color: #1c1c1c;
- scrollbar-face-color: #3b3b3b;
- scrollbar-3dlight-color: #252525;
- scrollbar-highlight-color: #252525;
- scrollbar-track-color: #1c1c1c;
- scrollbar-arrow-color: #929292;
- scrollbar-shadow-color: #3b3b3b;
-}
-
-.dark:root {
- --scrollbar-base: #181818;
- --scrollbar-thumb: #363636;
-}
-
-#menu {
- background-color: #F0F0F0;
- position: fixed;
- width: 100%;
- z-index: 100;
-}
-
-.dark #menu {
- background-color: #202020;
-}
-
-#statcontent {
- padding: 7px 7px 7px 7px;
+ font-family: Verdana, Geneva, Tahoma, sans-serif;
+ font-size: 12px;
+ margin: 0 !important;
+ padding: 0 !important;
+ overflow: hidden;
}
a {
- color: black;
- text-decoration: none
+ color: #003399;
+ text-decoration: none;
}
-.dark a {
- color: #b2c4dd;
+a:hover {
+ color: #007fff;
}
-a:hover,
-.dark a:hover {
- text-decoration: underline;
-}
-
-ul {
- list-style-type: none;
- margin: 0;
- padding: 0;
- background-color: #333;
-}
-
-li {
- float: left;
-}
-
-li a {
- display: block;
- color: white;
- text-align: center;
- padding: 14px 16px;
- text-decoration: none;
-}
-
-li a:hover:not(.active) {
- background-color: #111;
-}
-
-.button-container {
- display: inline-flex;
- flex-wrap: wrap-reverse;
- flex-direction: row;
- align-items: flex-start;
- overflow-x: hidden;
- white-space: pre-wrap;
- padding: 0 4px;
-}
-
-.button {
- background-color: #dfdfdf;
- border: 1px solid #cecece;
- border-bottom-width: 2px;
- color: rgba(0, 0, 0, 0.7);
- padding: 6px 4px 4px;
- text-align: center;
- text-decoration: none;
- font-size: 12px;
- margin: 0;
- cursor: pointer;
- transition-duration: 100ms;
- order: 3;
- min-width: 40px;
-}
-
-.dark button {
- background-color: #222222;
- border-color: #343434;
- color: rgba(255, 255, 255, 0.5);
-}
-
-.button:hover {
- background-color: #ececec;
- transition-duration: 0;
-}
-
-.dark button:hover {
- background-color: #2e2e2e;
-}
-
-.button:active,
-.button.active {
- background-color: #ffffff;
- color: black;
- border-top-color: #cecece;
- border-left-color: #cecece;
- border-right-color: #cecece;
- border-bottom-color: #ffffff;
-}
-
-.dark .button:active,
-.dark .button.active {
- background-color: #444444;
- color: white;
- border-top-color: #343434;
- border-left-color: #343434;
- border-right-color: #343434;
- border-bottom-color: #ffffff;
-}
-
-.grid-container {
- margin: -2px;
- margin-right: -15px;
-}
-
-.grid-item {
- position: relative;
- display: inline-block;
- width: 100%;
- box-sizing: border-box;
- overflow: visible;
- padding: 3px 2px;
- text-decoration: none;
-}
-
-@media only screen and (min-width: 300px) {
- .grid-item {
- width: 50%;
- }
-}
-
-@media only screen and (min-width: 430px) {
- .grid-item {
- width: 33%;
- }
-}
-
-@media only screen and (min-width: 560px) {
- .grid-item {
- width: 25%;
- }
-}
-
-@media only screen and (min-width: 770px) {
- .grid-item {
- width: 20%;
- }
-}
-
-.grid-item:hover {
- z-index: 1;
-}
-
-.grid-item:hover .grid-item-text {
- width: auto;
- text-decoration: underline;
-}
-
-.grid-item-text {
- display: inline-block;
- width: 100%;
- background-color: #ffffff;
- margin: 0 -6px;
- padding: 0 6px;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- pointer-events: none;
-}
-
-.dark .grid-item-text {
- background-color: #131313;
-}
-
-.link {
- display: inline;
- background: none;
- border: none;
- padding: 7px 14px;
- color: black;
- text-decoration: none;
- cursor: pointer;
- font-size: 13px;
- margin: 2px 2px;
-}
-
-.dark .link {
- color: #abc6ec;
-}
-
-.link:hover {
- text-decoration: underline;
+h3 {
+ margin: 0 -0.5em 0.5em;
+ padding: 1em 0.66em 0.5em;
+ border-bottom: 0.1667em solid;
}
img {
- -ms-interpolation-mode: nearest-neighbor;
- image-rendering: pixelated;
+ -ms-interpolation-mode: nearest-neighbor;
+ image-rendering: pixelated;
}
-.interview_panel_controls,
-.interview_panel_stats {
- margin-bottom: 10px;
+.listed-turf-list {
+ display: flex;
+ flex-direction: column;
+ gap: 0.25em;
+}
+
+.listed-turf-item {
+ display: inline-flex;
+ align-items: center;
+ gap: 0.35em;
+ width: 100%;
+ cursor: pointer;
+}
+
+.listed-turf-item img {
+ flex: 0 0 auto;
+}
+
+.listed-turf-item .link {
+ min-width: 0;
+}
+
+.stat-container {
+ display: flex;
+ flex-direction: column;
+ height: 100vh;
+}
+
+#menu {
+ display: flex;
+ overflow-x: auto;
+ overflow-y: hidden;
+ padding: 0.25em 0.25em 0;
+ background-color: #ffffff;
+}
+
+.menu-wrap {
+ flex-wrap: wrap-reverse;
+}
+
+#menu.tabs-classic {
+ padding: 0.15em;
+}
+
+#menu.tabs-classic .button {
+ min-width: 2em;
+ margin: 0.1em;
+ padding: 0.25em 0.4em;
+ border: 0;
+ border-radius: 0.25em;
+}
+
+#menu.tabs-classic .button.active {
+ background-color: #0668b8;
+ color: white;
+}
+
+.button {
+ display: inline-table;
+ cursor: pointer;
+ user-select: none;
+ -ms-user-select: none; /* Remove after Byond 516 */
+ text-align: center;
+ font-size: 1em;
+ min-width: 2.9em;
+ padding: 0.5em 0.5em 0.4em;
+ background-color: transparent;
+ color: rgba(0, 0, 0, 0.5);
+ border: 0;
+ border-bottom: 0.1667em solid transparent;
+ border-radius: 0.25em 0.25em 0 0;
+}
+
+.button:hover {
+ background-color: #ececec;
+}
+
+.button.active {
+ cursor: default;
+ background-color: #dfdfdf;
+ color: black;
+ border-bottom-color: #000000;
+}
+
+.statcontent {
+ flex: 1;
+ padding: 0.75em 0.5em;
+ overflow-y: auto;
+ overflow-x: hidden;
+}
+
+.mcstatcontent {
+ flex: 1;
+ padding: 0.75em 0.5em;
+ overflow-y: auto;
+ overflow-x: auto;
+ white-space: pre;
+}
+
+.mcstatcontent td {
+ vertical-align: top;
+}
+
+.mcstatcontent .monospace {
+ font-family: "Consolas", "Lucida Console", "Courier New", monospace;
+}
+
+#under-menu {
+ height: 0.5em;
+ background-color: #eeeeee;
+}
+
+#under-content {
+ height: calc(0.5em - 4px);
+ background-color: #eeeeee;
+}
+
+.grid-container {
+ margin: -0.25em;
+}
+
+.grid-item {
+ display: inline-flex;
+ position: relative;
+ user-select: none;
+ -ms-user-select: none; /* Remove after Byond 516 */
+ width: 100%;
+ max-height: 1.85em;
+ text-decoration: none;
+ background-color: transparent;
+ color: black;
+}
+
+.grid-item:hover,
+.grid-item:active {
+ color: #003399;
+ z-index: 1;
+}
+
+.grid-item-text {
+ display: inline-block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ pointer-events: none;
+ width: 100%;
+ padding: 0.33em 0.5em;
+ border-radius: 0.25em;
+}
+
+.grid-item:hover .grid-item-text {
+ height: 100%;
+ overflow: visible;
+ white-space: normal;
+ background-color: #ececec;
+}
+
+.grid-item:active .grid-item-text {
+ background-color: #dfdfdf;
+}
+
+@media only screen and (min-width: 300px) {
+ .grid-item {
+ width: 50%;
+ }
+}
+
+@media only screen and (min-width: 430px) {
+ .grid-item {
+ width: 33%;
+ }
+}
+
+@media only screen and (min-width: 560px) {
+ .grid-item {
+ width: 25%;
+ }
+}
+
+@media only screen and (min-width: 770px) {
+ .grid-item {
+ width: 20%;
+ }
+}
+
+.status-info {
+ margin: 0 0.33em 0.25em;
+}
+
+.interview_panel_stats,
+.interview_panel_controls {
+ margin-bottom: 1em;
+}
+
+/**
+ * MARK: Dark theme colors
+ */
+.dark:root {
+ --color-base: #151515;
+ --scrollbar-base: #151515;
+ --scrollbar-thumb: #363636;
+}
+
+body.dark {
+ background-color: #151515;
+ color: #b2c4dd;
+}
+
+.dark a {
+ color: #6699ff;
+}
+
+.dark a:hover,
+.dark .grid-item:hover,
+.dark .grid-item:active {
+ color: #80bfff;
+}
+
+.dark #menu {
+ background-color: #151515;
+}
+
+.dark #menu.tabs-classic .button.active {
+ background-color: #20b142;
+}
+
+.dark .button {
+ color: rgba(255, 255, 255, 0.5);
+}
+
+.dark .button:hover {
+ background-color: #252525;
+}
+
+.dark .button.active {
+ background-color: #313131;
+ color: #d4dfec;
+ border-bottom-color: #d4dfec;
+}
+
+.dark #under-menu,
+.dark #under-content {
+ background-color: #202020;
+}
+
+.dark .grid-item {
+ color: #b2c4dd;
+}
+
+.dark .grid-item:hover .grid-item-text {
+ background-color: #252525;
+}
+
+.dark .grid-item:active .grid-item-text {
+ background-color: #313131;
}
diff --git a/html/statbrowser.html b/html/statbrowser.html
index 1aea8811d58..bbbd8fa53ab 100644
--- a/html/statbrowser.html
+++ b/html/statbrowser.html
@@ -1,3 +1,6 @@
-
-
-
+
diff --git a/html/statbrowser.js b/html/statbrowser.js
index c3c167ad4dc..1de23783591 100644
--- a/html/statbrowser.js
+++ b/html/statbrowser.js
@@ -1,977 +1,941 @@
// Polyfills and compatibility ------------------------------------------------
var decoder = decodeURIComponent || unescape;
if (!Array.prototype.includes) {
- Array.prototype.includes = function (thing) {
- for (var i = 0; i < this.length; i++) {
- if (this[i] == thing) return true;
- }
- return false;
- }
+ Array.prototype.includes = function (thing) {
+ for (var i = 0; i < this.length; i++) {
+ if (this[i] == thing) return true;
+ }
+ return false;
+ };
}
if (!String.prototype.trim) {
- String.prototype.trim = function () {
- return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
- };
+ String.prototype.trim = function () {
+ return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
+ };
}
// Status panel implementation ------------------------------------------------
-var status_tab_parts = ["Loading..."];
+//status_tab_parts expects a list to be returned, to which we'll send a list within a list
+//with just "loading" to not appear broken.
+var status_tab_parts = [['Loading...']];
var current_tab = null;
-var mc_tab_parts = [["Loading...", ""]];
-var spells = [];
-var spell_tabs = [];
+//mc_tab_parts expects a list to be returned, to which we'll send a list within a list
+//with just "loading" to not appear broken.
+var mc_tab_parts = [['Loading...']];
+var href_token = null;
var verb_tabs = [];
-var verbs = [["", ""]]; // list with a list inside
+var verbs = [['', '']]; // list with a list inside
var tickets = [];
-var interviewManager = { status: "", interviews: [] };
+var interviewManager = { status: '', interviews: [] };
var sdql2 = [];
var permanent_tabs = []; // tabs that won't be cleared by wipes
var turfcontents = [];
-var turfname = "";
+var turfname = '';
var imageRetryDelay = 500;
var imageRetryLimit = 50;
var menu = document.getElementById('menu');
-var under_menu = document.getElementById('under_menu');
var statcontentdiv = document.getElementById('statcontent');
var storedimages = [];
var split_admin_tabs = false;
+//The 'default' tab that everyone should have, that we swap to if the tab you're on is deleted or anything similar.
+var defaultTab = 'Status';
// Any BYOND commands that could result in the client's focus changing go through this
// to ensure that when we relinquish our focus, we don't do it after the result of
// a command has already taken focus for itself.
function run_after_focus(callback) {
- setTimeout(callback, 0);
+ setTimeout(callback, 0);
}
function createStatusTab(name) {
- if (name.indexOf(".") != -1) {
- var splitName = name.split(".");
- if (split_admin_tabs && splitName[0] === "Admin")
- name = splitName[1];
- else
- name = splitName[0];
- }
- if (document.getElementById(name) || name.trim() == "") {
- return;
- }
- if (!verb_tabs.includes(name) && !permanent_tabs.includes(name)) {
- return;
- }
- var B = document.createElement("BUTTON");
- B.onclick = function () {
- tab_change(name);
- this.blur();
- };
- B.id = name;
- B.textContent = name;
- B.className = "button";
- //ORDERING ALPHABETICALLY
- B.style.order = name.charCodeAt(0);
- if (name == "Status" || name == "MC") {
- B.style.order = name == "Status" ? 1 : 2;
- }
- //END ORDERING
- menu.appendChild(B);
- SendTabToByond(name);
- under_menu.style.height = menu.clientHeight + 'px';
+ if (name.indexOf('.') != -1) {
+ var splitName = name.split('.');
+ if (split_admin_tabs && splitName[0] === 'Admin') name = splitName[1];
+ else name = splitName[0];
+ }
+ if (document.getElementById(name) || name.trim() == '') {
+ return;
+ }
+ if (!verb_tabs.includes(name) && !permanent_tabs.includes(name)) {
+ return;
+ }
+ var button = document.createElement('DIV');
+ button.onclick = function () {
+ tab_change(name);
+ this.blur();
+ statcontentdiv.focus();
+ };
+ button.id = name;
+ button.textContent = name;
+ button.className = 'button';
+ //ORDERING ALPHABETICALLY
+ button.style.order = { Status: 1, MC: 2 }[name] || name.charCodeAt(0);
+ //END ORDERING
+ menu.appendChild(button);
+ SendTabToByond(name);
}
function removeStatusTab(name) {
- if (!document.getElementById(name) || permanent_tabs.includes(name)) {
- return;
- }
- for (var i = verb_tabs.length - 1; i >= 0; --i) {
- if (verb_tabs[i] == name) {
- verb_tabs.splice(i, 1);
- }
- }
- menu.removeChild(document.getElementById(name));
- TakeTabFromByond(name);
- under_menu.style.height = menu.clientHeight + 'px';
+ if (!document.getElementById(name) || permanent_tabs.includes(name)) {
+ return;
+ }
+ for (var i = verb_tabs.length - 1; i >= 0; --i) {
+ if (verb_tabs[i] == name) {
+ verb_tabs.splice(i, 1);
+ }
+ }
+ menu.removeChild(document.getElementById(name));
+ TakeTabFromByond(name);
}
function sortVerbs() {
- verbs.sort(function (a, b) {
- var selector = a[0] == b[0] ? 1 : 0;
- if (a[selector].toUpperCase() < b[selector].toUpperCase()) {
- return 1;
- }
- else if (a[selector].toUpperCase() > b[selector].toUpperCase()) {
- return -1;
- }
- return 0;
- })
-}
-
-window.onresize = function () {
- under_menu.style.height = menu.clientHeight + 'px';
+ verbs.sort((a, b) => {
+ var selector = a[0] == b[0] ? 1 : 0;
+ if (a[selector].toUpperCase() < b[selector].toUpperCase()) {
+ return 1;
+ } else if (a[selector].toUpperCase() > b[selector].toUpperCase()) {
+ return -1;
+ }
+ return 0;
+ });
}
function addPermanentTab(name) {
- if (!permanent_tabs.includes(name)) {
- permanent_tabs.push(name);
- }
- createStatusTab(name);
+ if (!permanent_tabs.includes(name)) {
+ permanent_tabs.push(name);
+ }
+ createStatusTab(name);
}
function removePermanentTab(name) {
- for (var i = permanent_tabs.length - 1; i >= 0; --i) {
- if (permanent_tabs[i] == name) {
- permanent_tabs.splice(i, 1);
- }
- }
- removeStatusTab(name);
+ for (var i = permanent_tabs.length - 1; i >= 0; --i) {
+ if (permanent_tabs[i] == name) {
+ permanent_tabs.splice(i, 1);
+ }
+ }
+ removeStatusTab(name);
}
function checkStatusTab() {
- for (var i = 0; i < menu.children.length; i++) {
- if (!verb_tabs.includes(menu.children[i].id) && !permanent_tabs.includes(menu.children[i].id)) {
- menu.removeChild(menu.children[i]);
- }
- }
+ for (var i = 0; i < menu.children.length; i++) {
+ if (
+ !verb_tabs.includes(menu.children[i].id) &&
+ !permanent_tabs.includes(menu.children[i].id)
+ ) {
+ menu.removeChild(menu.children[i]);
+ }
+ }
}
function remove_verb(v) {
- var verb_to_remove = v; // to_remove = [verb:category, verb:name]
- for (var i = verbs.length - 1; i >= 0; i--) {
- var part_to_remove = verbs[i];
- if (part_to_remove[1] == verb_to_remove[1]) {
- verbs.splice(i, 1)
- }
- }
+ var verb_to_remove = v; // to_remove = [verb:category, verb:name]
+ for (var i = verbs.length - 1; i >= 0; i--) {
+ var part_to_remove = verbs[i];
+ if (part_to_remove[1] == verb_to_remove[1]) {
+ verbs.splice(i, 1);
+ }
+ }
}
function check_verbs() {
- for (var v = verb_tabs.length - 1; v >= 0; v--) {
- //Aurora snowflake check because somehow we manage to break even ports
- if(!verb_tabs[v]){
- v--;
- continue;
- }
- verbs_cat_check(verb_tabs[v]);
- }
+ for (var v = verb_tabs.length - 1; v >= 0; v--) {
+ verbs_cat_check(verb_tabs[v]);
+ }
}
function verbs_cat_check(cat) {
- var tabCat = cat;
- if (cat.indexOf(".") != -1) {
- var splitName = cat.split(".");
- if (split_admin_tabs && splitName[0] === "Admin")
- tabCat = splitName[1];
- else
- tabCat = splitName[0];
- }
- var verbs_in_cat = 0;
- var verbcat = "";
- if (!verb_tabs.includes(tabCat) && !spell_tabs.includes(tabCat)) {
- removeStatusTab(tabCat);
- return;
- }
- for (var v = 0; v < verbs.length; v++) {
- var part = verbs[v];
- verbcat = part[0];
- if (verbcat.indexOf(".") != -1) {
- var splitName = verbcat.split(".");
- if (split_admin_tabs && splitName[0] === "Admin")
- verbcat = splitName[1];
- else
- verbcat = splitName[0];
- }
- if (verbcat != tabCat || verbcat.trim() == "") {
- continue;
- }
- else {
- verbs_in_cat = 1;
- break; // we only need one
- }
- }
- //More aurora snowflake code to handle spell tabs
- var spells_in_cat = 0;
- var spellcat = "";
- for(var v = (spells.length - 1); v >= 0; v--) {
- var spell = spells[v];
- spellcat = spell[0];
- if(spellcat != tabCat || spellcat.trim() == ""){
- continue;
- }
- else{
- spells_in_cat = 1;
- break;
- }
+ var tabCat = cat;
+ if (cat.indexOf('.') != -1) {
+ var splitName = cat.split('.');
+ if (split_admin_tabs && splitName[0] === 'Admin') tabCat = splitName[1];
+ else tabCat = splitName[0];
+ }
+ var verbs_in_cat = 0;
+ var verbcat = '';
+ if (!verb_tabs.includes(tabCat)) {
+ removeStatusTab(tabCat);
+ return;
+ }
+ for (var v = 0; v < verbs.length; v++) {
+ var part = verbs[v];
+ verbcat = part[0];
+ if (verbcat.indexOf('.') != -1) {
+ var splitName = verbcat.split('.');
+ if (split_admin_tabs && splitName[0] === 'Admin') verbcat = splitName[1];
+ else verbcat = splitName[0];
}
-
- if (verbs_in_cat != 1 && spells_in_cat != 1) {
- removeStatusTab(tabCat);
- if (current_tab == tabCat)
- tab_change("Status");
- }
+ if (verbcat != tabCat || verbcat.trim() == '') {
+ } else {
+ verbs_in_cat = 1;
+ break; // we only need one
+ }
+ }
+ if (verbs_in_cat != 1) {
+ removeStatusTab(tabCat);
+ if (current_tab == tabCat) tab_change(defaultTab);
+ }
}
function findVerbindex(name, verblist) {
- for (var i = 0; i < verblist.length; i++) {
- var part = verblist[i];
- if (part[1] == name)
- return i;
- }
+ for (var i = 0; i < verblist.length; i++) {
+ var part = verblist[i];
+ if (part[1] == name) return i;
+ }
}
function wipe_verbs() {
- verbs = [["", ""]];
- verb_tabs = [];
- checkStatusTab(); // remove all empty verb tabs
+ verbs = [['', '']];
+ verb_tabs = [];
+ checkStatusTab(); // remove all empty verb tabs
}
function update_verbs() {
- wipe_verbs();
- Byond.sendMessage("Update-Verbs");
+ wipe_verbs();
+ Byond.sendMessage('Update-Verbs');
}
function SendTabsToByond() {
- var tabstosend = [];
- tabstosend = tabstosend.concat(permanent_tabs, verb_tabs);
- for (var i = 0; i < tabstosend.length; i++) {
- SendTabToByond(tabstosend[i]);
- }
+ var tabstosend = [];
+ tabstosend = tabstosend.concat(permanent_tabs, verb_tabs);
+ for (var i = 0; i < tabstosend.length; i++) {
+ SendTabToByond(tabstosend[i]);
+ }
}
function SendTabToByond(tab) {
- Byond.sendMessage("Send-Tabs", {tab: tab});
+ Byond.sendMessage('Send-Tabs', { tab: tab });
}
//Byond can't have this tab anymore since we're removing it
function TakeTabFromByond(tab) {
- Byond.sendMessage("Remove-Tabs", {tab: tab});
-}
-
-function spell_cat_check(cat) {
- var spells_in_cat = 0;
- var spellcat = "";
- for (var s = 0; s < spells.length; s++) {
- var spell = spells[s];
- spellcat = spell[0];
- if (spellcat == cat) {
- spells_in_cat++;
- }
- }
- if (spells_in_cat < 1) {
- removeStatusTab(cat);
- }
+ Byond.sendMessage('Remove-Tabs', { tab: tab });
}
function tab_change(tab) {
- if (tab == current_tab) return;
- if (document.getElementById(current_tab))
- document.getElementById(current_tab).className = "button"; // disable active on last button
- current_tab = tab;
- set_byond_tab(tab);
- if (document.getElementById(tab))
- document.getElementById(tab).className = "button active"; // make current button active
- var spell_tabs_thingy = (spell_tabs.includes(tab));
- var verb_tabs_thingy = (verb_tabs.includes(tab));
- if (tab == "Status") {
- draw_status();
- } else if (tab == "MC") {
- draw_mc();
- } else if (spell_tabs_thingy) {
- draw_spells(tab);
- } else if (verb_tabs_thingy) {
- draw_verbs(tab);
- } else if (tab == "Debug Stat Panel") {
- draw_debug();
- } else if (tab == "SDQL2") {
- draw_sdql2();
- } else if (tab == turfname) {
- draw_listedturf();
- } else {
- statcontentdiv.textContext = "Loading...";
- }
- Byond.winset(Byond.windowId, {
- 'is-visible': true,
- });
+ if (tab == current_tab) return;
+ if (document.getElementById(current_tab))
+ document.getElementById(current_tab).className = 'button'; // disable active on last button
+ current_tab = tab;
+ set_byond_tab(tab);
+ if (document.getElementById(tab))
+ document.getElementById(tab).className = 'button active'; // make current button active
+ var verb_tabs_thingy = verb_tabs.includes(tab);
+ statcontentdiv.className = 'statcontent';
+ if (tab == 'Status') {
+ draw_status();
+ } else if (tab == 'MC') {
+ draw_mc();
+ } else if (verb_tabs_thingy) {
+ draw_verbs(tab);
+ } else if (tab == 'Debug Stat Panel') {
+ draw_debug();
+ } else if (tab == 'Tickets') {
+ draw_tickets();
+ draw_interviews();
+ } else if (tab == 'SDQL2') {
+ draw_sdql2();
+ } else if (tab == turfname) {
+ draw_listedturf();
+ } else {
+ statcontentdiv.textContext = 'Loading...';
+ }
+ Byond.winset(Byond.windowId, {
+ 'is-visible': true,
+ });
}
function set_byond_tab(tab) {
- Byond.sendMessage("Set-Tab", {tab: tab});
+ Byond.sendMessage('Set-Tab', { tab: tab });
}
function draw_debug() {
- statcontentdiv.textContent = "";
- var wipeverbstabs = document.createElement("div");
- var link = document.createElement("a");
- link.onclick = function () { wipe_verbs() };
- link.textContent = "Wipe All Verbs";
- wipeverbstabs.appendChild(link);
- document.getElementById("statcontent").appendChild(wipeverbstabs);
- var wipeUpdateVerbsTabs = document.createElement("div");
- var updateLink = document.createElement("a");
- updateLink.onclick = function () { update_verbs() };
- updateLink.textContent = "Wipe and Update All Verbs";
- wipeUpdateVerbsTabs.appendChild(updateLink);
- document.getElementById("statcontent").appendChild(wipeUpdateVerbsTabs);
- var text = document.createElement("div");
- text.textContent = "Verb Tabs:";
- document.getElementById("statcontent").appendChild(text);
- var table1 = document.createElement("table");
- for (var i = 0; i < verb_tabs.length; i++) {
- var part = verb_tabs[i];
- // Hide subgroups except admin subgroups if they are split
- if (verb_tabs[i].lastIndexOf(".") != -1) {
- var splitName = verb_tabs[i].split(".");
- if (split_admin_tabs && splitName[0] === "Admin")
- part = splitName[1];
- else
- continue;
- }
- var tr = document.createElement("tr");
- var td1 = document.createElement("td");
- td1.textContent = part;
- var a = document.createElement("a");
- a.onclick = function (part) {
- return function () { removeStatusTab(part) };
- }(part);
- a.textContent = " Delete Tab " + part;
- td1.appendChild(a);
- tr.appendChild(td1);
- table1.appendChild(tr);
- }
- document.getElementById("statcontent").appendChild(table1);
- var header2 = document.createElement("div");
- header2.textContent = "Verbs:";
- document.getElementById("statcontent").appendChild(header2);
- var table2 = document.createElement("table");
- for (var v = 0; v < verbs.length; v++) {
- var part2 = verbs[v];
- var trr = document.createElement("tr");
- var tdd1 = document.createElement("td");
- tdd1.textContent = part2[0];
- var tdd2 = document.createElement("td");
- tdd2.textContent = part2[1];
- trr.appendChild(tdd1);
- trr.appendChild(tdd2);
- table2.appendChild(trr);
- }
- document.getElementById("statcontent").appendChild(table2);
- var text3 = document.createElement("div");
- text3.textContent = "Permanent Tabs:";
- document.getElementById("statcontent").appendChild(text3);
- var table3 = document.createElement("table");
- for (var i = 0; i < permanent_tabs.length; i++) {
- var part3 = permanent_tabs[i];
- var trrr = document.createElement("tr");
- var tddd1 = document.createElement("td");
- tddd1.textContent = part3;
- trrr.appendChild(tddd1);
- table3.appendChild(trrr);
- }
- document.getElementById("statcontent").appendChild(table3);
-
+ statcontentdiv.textContent = '';
+ var wipeverbstabs = document.createElement('div');
+ var link = document.createElement('a');
+ link.onclick = () => {
+ wipe_verbs();
+ };
+ link.textContent = 'Wipe All Verbs';
+ wipeverbstabs.appendChild(link);
+ document.getElementById('statcontent').appendChild(wipeverbstabs);
+ var wipeUpdateVerbsTabs = document.createElement('div');
+ var updateLink = document.createElement('a');
+ updateLink.onclick = () => {
+ update_verbs();
+ };
+ updateLink.textContent = 'Wipe and Update All Verbs';
+ wipeUpdateVerbsTabs.appendChild(updateLink);
+ document.getElementById('statcontent').appendChild(wipeUpdateVerbsTabs);
+ var text = document.createElement('div');
+ text.textContent = 'Verb Tabs:';
+ document.getElementById('statcontent').appendChild(text);
+ var table1 = document.createElement('table');
+ for (var i = 0; i < verb_tabs.length; i++) {
+ var part = verb_tabs[i];
+ // Hide subgroups except admin subgroups if they are split
+ if (verb_tabs[i].lastIndexOf('.') != -1) {
+ var splitName = verb_tabs[i].split('.');
+ if (split_admin_tabs && splitName[0] === 'Admin') part = splitName[1];
+ else continue;
+ }
+ var tr = document.createElement('tr');
+ var td1 = document.createElement('td');
+ td1.textContent = part;
+ var a = document.createElement('a');
+ a.onclick = ((part) => () => {
+ removeStatusTab(part);
+ })(part);
+ a.textContent = ' Delete Tab ' + part;
+ td1.appendChild(a);
+ tr.appendChild(td1);
+ table1.appendChild(tr);
+ }
+ document.getElementById('statcontent').appendChild(table1);
+ var header2 = document.createElement('div');
+ header2.textContent = 'Verbs:';
+ document.getElementById('statcontent').appendChild(header2);
+ var table2 = document.createElement('table');
+ for (var v = 0; v < verbs.length; v++) {
+ var part2 = verbs[v];
+ var trr = document.createElement('tr');
+ var tdd1 = document.createElement('td');
+ tdd1.textContent = part2[0];
+ var tdd2 = document.createElement('td');
+ tdd2.textContent = part2[1];
+ trr.appendChild(tdd1);
+ trr.appendChild(tdd2);
+ table2.appendChild(trr);
+ }
+ document.getElementById('statcontent').appendChild(table2);
+ var text3 = document.createElement('div');
+ text3.textContent = 'Permanent Tabs:';
+ document.getElementById('statcontent').appendChild(text3);
+ var table3 = document.createElement('table');
+ for (var i = 0; i < permanent_tabs.length; i++) {
+ var part3 = permanent_tabs[i];
+ var trrr = document.createElement('tr');
+ var tddd1 = document.createElement('td');
+ tddd1.textContent = part3;
+ trrr.appendChild(tddd1);
+ table3.appendChild(trrr);
+ }
+ document.getElementById('statcontent').appendChild(table3);
}
+
function draw_status() {
- if (!document.getElementById("Status")) {
- createStatusTab("Status");
- current_tab = "Status";
- }
- statcontentdiv.textContent = '';
- for (var i = 0; i < status_tab_parts.length; i++) {
- if (status_tab_parts[i].trim() == "") {
- document.getElementById("statcontent").appendChild(document.createElement("br"));
- } else {
- var div = document.createElement("div");
- div.textContent = status_tab_parts[i];
- document.getElementById("statcontent").appendChild(div);
- }
- }
- if (verb_tabs.length == 0 || !verbs) {
- Byond.command("Fix-Stat-Panel");
- }
+ if (!document.getElementById('Status')) {
+ createStatusTab('Status');
+ current_tab = 'Status';
+ }
+ statcontentdiv.textContent = '';
+ var table = document.createElement('table');
+ for (var i = 0; i < status_tab_parts.length; i++) {
+ var part = status_tab_parts[i];
+ if (!Array.isArray(part)) {
+ var div = document.createElement('div');
+ if (part.trim() == '') {
+ table.appendChild(document.createElement('br'));
+ } else {
+ div.textContent = part;
+ table.appendChild(div);
+ }
+ } else {
+ var div;
+ if (part[0].trim() == 'same_line') {
+ var a = document.createElement('a');
+ a.href = 'byond://?' + part[2];
+ a.textContent = part[1];
+ div.appendChild(a);
+ } else {
+ div = document.createElement('div');
+ if (part[0].trim() == '') {
+ table.appendChild(document.createElement('br'));
+ } else {
+ div.textContent = part[0];
+ if (part[2]) {
+ var a = document.createElement('a');
+ a.href = 'byond://?' + part[2];
+ a.textContent = part[1];
+ div.appendChild(a);
+ }
+ table.appendChild(div);
+ }
+ }
+ }
+ }
+ document.getElementById('statcontent').appendChild(table);
+ if (verb_tabs.length == 0 || !verbs) {
+ Byond.command('Fix-Stat-Panel');
+ }
}
function draw_mc() {
- statcontentdiv.textContent = "";
- var table = document.createElement("table");
- for (var i = 0; i < mc_tab_parts.length; i++) {
- var part = mc_tab_parts[i];
- var tr = document.createElement("tr");
- var td1 = document.createElement("td");
- td1.textContent = part[0];
- var td2 = document.createElement("td");
- if (part[2]) {
- var a = document.createElement("a");
- a.href="byond://?_src_=vars;Vars=" + part[2];
- a.textContent = part[1];
- td2.appendChild(a);
- } else {
- td2.textContent = part[1];
- }
- tr.appendChild(td1);
- tr.appendChild(td2);
- table.appendChild(tr);
- }
- document.getElementById("statcontent").appendChild(table);
+ statcontentdiv.textContent = '';
+ statcontentdiv.className = 'mcstatcontent';
+ var table = document.createElement('table');
+ for (var i = 0; i < mc_tab_parts.length; i++) {
+ var part = mc_tab_parts[i];
+ var tr = document.createElement('tr');
+ var td0 = document.createElement('td');
+ td0.className = 'monospace';
+ td0.textContent = part[0];
+ var td1 = document.createElement('td');
+ if (part[2]) {
+ var a = document.createElement('a');
+ a.href = 'byond://?_src_=vars;Vars=' + part[2];
+ a.textContent = part[1];
+ td1.appendChild(a);
+ } else {
+ td1.textContent = part[1];
+ }
+ tr.appendChild(td0);
+ tr.appendChild(td1);
+ table.appendChild(tr);
+ }
+ document.getElementById('statcontent').appendChild(table);
}
+
+function remove_tickets() {
+ if (tickets) {
+ tickets = [];
+ removePermanentTab('Tickets');
+ if (current_tab == 'Tickets') tab_change(defaultTab);
+ }
+ checkStatusTab();
+}
+
function remove_sdql2() {
- if (sdql2) {
- sdql2 = [];
- removePermanentTab("SDQL2");
- if (current_tab == "SDQL2")
- tab_change("Status");
- }
- checkStatusTab();
+ if (sdql2) {
+ sdql2 = [];
+ removePermanentTab('SDQL2');
+ if (current_tab == 'SDQL2') tab_change(defaultTab);
+ }
+ checkStatusTab();
}
+
+function remove_interviews() {
+ if (tickets) {
+ tickets = [];
+ }
+ checkStatusTab();
+}
+
function iconError(e) {
- if(current_tab != turfname) {
- return;
- }
- setTimeout(function () {
- var node = e.target;
- var current_attempts = Number(node.getAttribute("data-attempts")) || 0
- if (current_attempts > imageRetryLimit) {
- return;
- }
- var src = node.src;
- node.src = null;
- node.src = src + '#' + current_attempts;
- node.setAttribute("data-attempts", current_attempts + 1)
- draw_listedturf();
- }, imageRetryDelay);
+ if (current_tab != turfname) {
+ return;
+ }
+ setTimeout(() => {
+ var node = e.target;
+ var current_attempts = Number(node.getAttribute('data-attempts')) || 0;
+ if (current_attempts > imageRetryLimit) {
+ return;
+ }
+ var src = node.src;
+ node.src = null;
+ node.src = src + '#' + current_attempts;
+ node.setAttribute('data-attempts', current_attempts + 1);
+ draw_listedturf();
+ }, imageRetryDelay);
}
function draw_listedturf() {
- statcontentdiv.textContent = "";
- var table = document.createElement("table");
- for (var i = 0; i < turfcontents.length; i++) {
- var part = turfcontents[i];
- var clickfunc = (function (part) {
- // The outer function is used to close over a fresh "part" variable,
- // rather than every onmousedown getting the "part" of the last entry.
- return function (e) {
- e.preventDefault();
- clickcatcher = "byond://?src=" + part[1];
- switch (e.button) {
- case 1:
- clickcatcher += ";statpanel_item_click=middle";
- break;
- case 2:
- clickcatcher += ";statpanel_item_click=right";
- break;
- default:
- clickcatcher += ";statpanel_item_click=left";
- }
- if (e.shiftKey) {
- clickcatcher += ";statpanel_item_shiftclick=1";
- }
- if (e.ctrlKey) {
- clickcatcher += ";statpanel_item_ctrlclick=1";
- }
- if (e.altKey) {
- clickcatcher += ";statpanel_item_altclick=1";
- }
- window.location.href = clickcatcher;
- };
- })(part);
- if (storedimages[part[1]] == null && part[2]) {
- var img = document.createElement("img");
- img.src = part[2];
- img.id = part[1];
- storedimages[part[1]] = part[2];
- img.onerror = iconError;
- img.onmousedown = clickfunc;
- table.appendChild(img);
- } else {
- var img = document.createElement("img");
- img.onerror = iconError;
- img.onmousedown = clickfunc;
- img.src = storedimages[part[1]];
- img.id = part[1];
- table.appendChild(img);
- }
- var b = document.createElement("div");
- var clickcatcher = "";
- b.className = "link";
- b.onmousedown = clickfunc;
- b.textContent = part[0];
- table.appendChild(b);
- table.appendChild(document.createElement("br"));
- }
- document.getElementById("statcontent").appendChild(table);
+ statcontentdiv.textContent = '';
+ var list = document.createElement('div');
+ list.className = 'listed-turf-list';
+ for (var i = 0; i < turfcontents.length; i++) {
+ var part = turfcontents[i];
+ var clickfunc = ((part) => {
+ // The outer function is used to close over a fresh "part" variable,
+ // rather than every onmousedown getting the "part" of the last entry.
+ return (e) => {
+ e.preventDefault();
+ clickcatcher = 'byond://?src=' + part[1];
+ switch (e.button) {
+ case 1:
+ clickcatcher += ';statpanel_item_click=middle';
+ break;
+ case 2:
+ clickcatcher += ';statpanel_item_click=right';
+ break;
+ default:
+ clickcatcher += ';statpanel_item_click=left';
+ }
+ if (e.shiftKey) {
+ clickcatcher += ';statpanel_item_shiftclick=1';
+ }
+ if (e.ctrlKey) {
+ clickcatcher += ';statpanel_item_ctrlclick=1';
+ }
+ if (e.altKey) {
+ clickcatcher += ';statpanel_item_altclick=1';
+ }
+ window.location.href = clickcatcher;
+ };
+ })(part);
+ var row = document.createElement('div');
+ row.className = 'listed-turf-item';
+ row.onmousedown = clickfunc;
+ if (storedimages[part[1]] == null && part[2]) {
+ var img = document.createElement('img');
+ img.src = part[2];
+ img.id = part[1];
+ storedimages[part[1]] = part[2];
+ img.onerror = iconError;
+ row.appendChild(img);
+ } else {
+ var img = document.createElement('img');
+ img.onerror = iconError;
+ img.src = storedimages[part[1]];
+ img.id = part[1];
+ row.appendChild(img);
+ }
+ var b = document.createElement('div');
+ var clickcatcher = '';
+ b.className = 'link';
+ b.textContent = part[0];
+ row.appendChild(b);
+ list.appendChild(row);
+ }
+ document.getElementById('statcontent').appendChild(list);
}
function remove_listedturf() {
- removePermanentTab(turfname);
- checkStatusTab();
- if (current_tab == turfname) {
- tab_change("Status");
- }
+ removePermanentTab(turfname);
+ checkStatusTab();
+ if (current_tab == turfname) {
+ tab_change(defaultTab);
+ }
}
function remove_mc() {
- removePermanentTab("MC");
- if (current_tab == "MC") {
- tab_change("Status");
- }
-};
+ removePermanentTab('MC');
+ if (current_tab == 'MC') {
+ tab_change(defaultTab);
+ }
+}
function draw_sdql2() {
- statcontentdiv.textContent = "";
- var table = document.createElement("table");
- for (var i = 0; i < sdql2.length; i++) {
- var part = sdql2[i];
- var tr = document.createElement("tr");
- var td1 = document.createElement("td");
- td1.textContent = part[0];
- var td2 = document.createElement("td");
- if (part[2]) {
- var a = document.createElement("a");
- a.href="byond://?src=" + part[2] + ";statpanel_item_click=left";
- a.textContent = part[1];
- td2.appendChild(a);
- } else {
- td2.textContent = part[1];
- }
- tr.appendChild(td1);
- tr.appendChild(td2);
- table.appendChild(tr);
- }
- document.getElementById("statcontent").appendChild(table);
+ statcontentdiv.textContent = '';
+ var table = document.createElement('table');
+ for (var i = 0; i < sdql2.length; i++) {
+ var part = sdql2[i];
+ var tr = document.createElement('tr');
+ var td1 = document.createElement('td');
+ td1.textContent = part[0];
+ var td2 = document.createElement('td');
+ if (part[2]) {
+ var a = document.createElement('a');
+ a.href = 'byond://?src=' + part[2] + ';statpanel_item_click=left';
+ a.textContent = part[1];
+ td2.appendChild(a);
+ } else {
+ td2.textContent = part[1];
+ }
+ tr.appendChild(td1);
+ tr.appendChild(td2);
+ table.appendChild(tr);
+ }
+ document.getElementById('statcontent').appendChild(table);
}
function draw_tickets() {
- statcontentdiv.textContent = "";
- var table = document.createElement("table");
- if (!tickets) {
- return;
- }
- for (var i = 0; i < tickets.length; i++) {
- var part = tickets[i];
- var tr = document.createElement("tr");
- var td1 = document.createElement("td");
- td1.textContent = part[0];
- var td2 = document.createElement("td");
- if (part[2]) {
- var a = document.createElement("a");
- a.href="byond://?_src_=holder;ahelp=" + part[2] + ";ahelp_action=ticket;statpanel_item_click=left;action=ticket";
- a.textContent = part[1];
- td2.appendChild(a);
- } else if (part[3]) {
- var a = document.createElement("a");
- a.href="byond://?src=" + part[3] + ";statpanel_item_click=left";
- a.textContent = part[1];
- td2.appendChild(a);
- } else {
- td2.textContent = part[1];
- }
- tr.appendChild(td1);
- tr.appendChild(td2);
- table.appendChild(tr);
- }
- document.getElementById("statcontent").appendChild(table);
+ statcontentdiv.textContent = '';
+ var table = document.createElement('table');
+ if (!tickets) {
+ return;
+ }
+ for (var i = 0; i < tickets.length; i++) {
+ var part = tickets[i];
+ var tr = document.createElement('tr');
+ var td1 = document.createElement('td');
+ td1.textContent = part[0];
+ var td2 = document.createElement('td');
+ if (part[2]) {
+ var a = document.createElement('a');
+ a.href =
+ 'byond://?_src_=holder;admin_token=' +
+ href_token +
+ ';ahelp=' +
+ part[2] +
+ ';ahelp_action=ticket;statpanel_item_click=left;action=ticket';
+ a.textContent = part[1];
+ td2.appendChild(a);
+ } else if (part[3]) {
+ var a = document.createElement('a');
+ a.href = 'byond://?src=' + part[3] + ';statpanel_item_click=left';
+ a.textContent = part[1];
+ td2.appendChild(a);
+ } else {
+ td2.textContent = part[1];
+ }
+ tr.appendChild(td1);
+ tr.appendChild(td2);
+ table.appendChild(tr);
+ }
+ document.getElementById('statcontent').appendChild(table);
}
function draw_interviews() {
- var body = document.createElement("div");
- var header = document.createElement("h3");
- header.textContent = "Interviews";
- body.appendChild(header);
- var manDiv = document.createElement("div");
- manDiv.className = "interview_panel_controls"
- var manLink = document.createElement("a");
- manLink.textContent = "Open Interview Manager Panel";
- manLink.href="byond://?_src_=holder;interview_man=1;statpanel_item_click=left";
- manDiv.appendChild(manLink);
- body.appendChild(manDiv);
+ var body = document.createElement('div');
+ var header = document.createElement('h3');
+ header.textContent = 'Interviews';
+ body.appendChild(header);
+ var manDiv = document.createElement('div');
+ manDiv.className = 'interview_panel_controls';
+ var manLink = document.createElement('a');
+ manLink.textContent = 'Open Interview Manager Panel';
+ manLink.href =
+ 'byond://?_src_=holder;admin_token=' +
+ href_token +
+ ';interview_man=1;statpanel_item_click=left';
+ manDiv.appendChild(manLink);
+ body.appendChild(manDiv);
- // List interview stats
- var statsDiv = document.createElement("table");
- statsDiv.className = "interview_panel_stats";
- for (var key in interviewManager.status) {
- var d = document.createElement("div");
- var tr = document.createElement("tr");
- var stat_name = document.createElement("td");
- var stat_text = document.createElement("td");
- stat_name.textContent = key;
- stat_text.textContent = interviewManager.status[key];
- tr.appendChild(stat_name);
- tr.appendChild(stat_text);
- statsDiv.appendChild(tr);
- }
- body.appendChild(statsDiv);
- document.getElementById("statcontent").appendChild(body);
+ // List interview stats
+ var statsDiv = document.createElement('table');
+ statsDiv.className = 'interview_panel_stats';
+ for (var key in interviewManager.status) {
+ var d = document.createElement('div');
+ var tr = document.createElement('tr');
+ var stat_name = document.createElement('td');
+ var stat_text = document.createElement('td');
+ stat_name.textContent = key;
+ stat_text.textContent = interviewManager.status[key];
+ tr.appendChild(stat_name);
+ tr.appendChild(stat_text);
+ statsDiv.appendChild(tr);
+ }
+ body.appendChild(statsDiv);
+ document.getElementById('statcontent').appendChild(body);
- // List interviews if any are open
- var table = document.createElement("table");
- table.className = "interview_panel_table";
- if (!interviewManager) {
- return;
- }
- for (var i = 0; i < interviewManager.interviews.length; i++) {
- var part = interviewManager.interviews[i];
- var tr = document.createElement("tr");
- var td = document.createElement("td");
- var a = document.createElement("a");
- a.textContent = part["status"];
- a.href="byond://?_src_=holder;interview=" + part["ref"] + ";statpanel_item_click=left";
- td.appendChild(a);
- tr.appendChild(td);
- table.appendChild(tr);
- }
- document.getElementById("statcontent").appendChild(table);
-}
-
-function draw_spells(cat) {
- statcontentdiv.textContent = "";
- var table = document.createElement("table");
- for (var i = 0; i < spells.length; i++) {
- var part = spells[i];
- if (part[0] != cat) continue;
- var tr = document.createElement("tr");
- var td1 = document.createElement("td");
- td1.textContent = part[1];
- var td2 = document.createElement("td");
- if (part[3]) {
- var a = document.createElement("a");
- a.href="byond://?src=" + part[3] + ";statpanel_item_click=left";
- a.textContent = part[2];
- td2.appendChild(a);
- } else {
- td2.textContent = part[2];
- }
- tr.appendChild(td1);
- tr.appendChild(td2);
- table.appendChild(tr);
- }
- document.getElementById("statcontent").appendChild(table);
+ // List interviews if any are open
+ var table = document.createElement('table');
+ table.className = 'interview_panel_table';
+ if (!interviewManager) {
+ return;
+ }
+ for (var i = 0; i < interviewManager.interviews.length; i++) {
+ var part = interviewManager.interviews[i];
+ var tr = document.createElement('tr');
+ var td = document.createElement('td');
+ var a = document.createElement('a');
+ a.textContent = part['status'];
+ a.href =
+ 'byond://?_src_=holder;admin_token=' +
+ href_token +
+ ';interview=' +
+ part['ref'] +
+ ';statpanel_item_click=left';
+ td.appendChild(a);
+ tr.appendChild(td);
+ table.appendChild(tr);
+ }
+ document.getElementById('statcontent').appendChild(table);
}
function make_verb_onclick(command) {
- return function () {
- run_after_focus(function () {
- Byond.command(command);
- });
- };
+ return () => {
+ run_after_focus(() => {
+ Byond.command(command);
+ });
+ };
}
function draw_verbs(cat) {
- statcontentdiv.textContent = "";
- var table = document.createElement("div");
- var additions = {}; // additional sub-categories to be rendered
- table.className = "grid-container";
- sortVerbs();
- if (split_admin_tabs && cat.lastIndexOf(".") != -1) {
- var splitName = cat.split(".");
- if (splitName[0] === "Admin")
- cat = splitName[1];
- }
- verbs.reverse(); // sort verbs backwards before we draw
- for (var i = 0; i < verbs.length; ++i) {
- var part = verbs[i];
- var name = part[0];
- if (split_admin_tabs && name.lastIndexOf(".") != -1) {
- var splitName = name.split(".");
- if (splitName[0] === "Admin")
- name = splitName[1];
- }
- var command = part[1];
+ statcontentdiv.textContent = '';
+ var table = document.createElement('div');
+ var additions = {}; // additional sub-categories to be rendered
+ table.className = 'grid-container';
+ sortVerbs();
+ if (split_admin_tabs && cat.lastIndexOf('.') != -1) {
+ var splitName = cat.split('.');
+ if (splitName[0] === 'Admin') cat = splitName[1];
+ }
+ verbs.reverse(); // sort verbs backwards before we draw
+ for (var i = 0; i < verbs.length; ++i) {
+ var part = verbs[i];
+ var name = part[0];
+ if (split_admin_tabs && name.lastIndexOf('.') != -1) {
+ var splitName = name.split('.');
+ if (splitName[0] === 'Admin') name = splitName[1];
+ }
+ var command = part[1];
- if (command && name.lastIndexOf(cat, 0) != -1 && (name.length == cat.length || name.charAt(cat.length) == ".")) {
- var subCat = name.lastIndexOf(".") != -1 ? name.split(".")[1] : null;
- if (subCat && !additions[subCat]) {
- var newTable = document.createElement("div");
- newTable.className = "grid-container";
- additions[subCat] = newTable;
- }
+ if (
+ command &&
+ name.lastIndexOf(cat, 0) != -1 &&
+ (name.length == cat.length || name.charAt(cat.length) == '.')
+ ) {
+ var subCat = name.lastIndexOf('.') != -1 ? name.split('.')[1] : null;
+ if (subCat && !additions[subCat]) {
+ var newTable = document.createElement('div');
+ newTable.className = 'grid-container';
+ additions[subCat] = newTable;
+ }
- var a = document.createElement("a");
- a.href = "#";
- a.onclick = make_verb_onclick(command.replace(/\s/g, "-"));
- a.className = "grid-item";
- var t = document.createElement("span");
- t.textContent = command;
- t.className = "grid-item-text";
- a.appendChild(t);
- (subCat ? additions[subCat] : table).appendChild(a);
- }
- }
+ var a = document.createElement('a');
+ a.href = '#';
+ a.onclick = make_verb_onclick(command.replace(/\s/g, '-'));
+ a.className = 'grid-item';
+ var t = document.createElement('span');
+ t.textContent = command;
+ t.className = 'grid-item-text';
+ a.appendChild(t);
+ (subCat ? additions[subCat] : table).appendChild(a);
+ }
+ }
- // Append base table to view
- var content = document.getElementById("statcontent");
- content.appendChild(table);
+ // Append base table to view
+ var content = document.getElementById('statcontent');
+ content.appendChild(table);
- // Append additional sub-categories if relevant
- for (var cat in additions) {
- if (additions.hasOwnProperty(cat)) {
- // do addition here
- var header = document.createElement("h3");
- header.textContent = cat;
- content.appendChild(header);
- content.appendChild(additions[cat]);
- }
- }
+ // Append additional sub-categories if relevant
+ for (var cat in additions) {
+ if (Object.hasOwn(additions, cat)) {
+ // do addition here
+ var header = document.createElement('h3');
+ header.textContent = cat;
+ content.appendChild(header);
+ content.appendChild(additions[cat]);
+ }
+ }
}
function set_theme(which) {
- if (which == "light") {
- document.body.className = "";
- document.documentElement.className = "light";
- set_style_sheet("browserOutput_white");
- } else if (which == "dark") {
- document.body.className = "dark";
- document.documentElement.className = "dark";
- set_style_sheet("browserOutput");
- }
+ if (which == 'light') {
+ document.body.className = '';
+ document.documentElement.className = 'light';
+ } else if (which == 'dark') {
+ document.body.className = 'dark';
+ document.documentElement.className = 'dark';
+ }
}
-function set_style_sheet(sheet) {
- if (document.getElementById("goonStyle")) {
- var currentSheet = document.getElementById("goonStyle");
- currentSheet.parentElement.removeChild(currentSheet);
- }
- var head = document.getElementsByTagName('head')[0];
- var sheetElement = document.createElement("link");
- sheetElement.id = "goonStyle";
- sheetElement.rel = "stylesheet";
- sheetElement.type = "text/css";
- sheetElement.href = sheet + ".css";
- sheetElement.media = 'all';
- head.appendChild(sheetElement);
+function set_font_size(size) {
+ document.body.style.setProperty('font-size', size);
+}
+
+function set_tabs_style(style) {
+ if (style == 'default') {
+ menu.classList.add('menu-wrap');
+ menu.classList.remove('tabs-classic');
+ } else if (style == 'classic') {
+ menu.classList.add('menu-wrap');
+ menu.classList.add('tabs-classic');
+ } else if (style == 'scrollable') {
+ menu.classList.remove('menu-wrap');
+ menu.classList.remove('tabs-classic');
+ }
}
function restoreFocus() {
- run_after_focus(function () {
- Byond.winset('map', {
- focus: true,
- });
- });
+ run_after_focus(() => {
+ Byond.winset('map', {
+ focus: true,
+ });
+ });
}
function getCookie(cname) {
- var name = cname + '=';
- var ca = document.cookie.split(';');
- for (var i = 0; i < ca.length; i++) {
- var c = ca[i];
- while (c.charAt(0) == ' ') c = c.substring(1);
- if (c.indexOf(name) === 0) {
- return decoder(c.substring(name.length, c.length));
- }
- }
- return '';
+ var name = cname + '=';
+ var ca = document.cookie.split(';');
+ for (var i = 0; i < ca.length; i++) {
+ var c = ca[i];
+ while (c.charAt(0) == ' ') c = c.substring(1);
+ if (c.indexOf(name) === 0) {
+ return decoder(c.substring(name.length, c.length));
+ }
+ }
+ return '';
}
function add_verb_list(payload) {
- var to_add = payload; // list of a list with category and verb inside it
- to_add.sort(); // sort what we're adding
- for (var i = 0; i < to_add.length; i++) {
- var part = to_add[i];
- if (!part[0])
- continue;
- var category = part[0];
- if (category.indexOf(".") != -1) {
- var splitName = category.split(".");
- if (split_admin_tabs && splitName[0] === "Admin")
- category = splitName[1];
- else
- category = splitName[0];
- }
- if (findVerbindex(part[1], verbs))
- continue;
- if (verb_tabs.includes(category)) {
- verbs.push(part);
- if (current_tab == category) {
- draw_verbs(category); // redraw if we added a verb to the tab we're currently in
- }
- } else if (category) {
- verb_tabs.push(category);
- verbs.push(part);
- createStatusTab(category);
- }
- }
-};
-
-function init_spells() {
- var cat = "";
- for (var i = 0; i < spell_tabs.length; i++) {
- cat = spell_tabs[i];
- if (cat.length > 0) {
- verb_tabs.push(cat);
- createStatusTab(cat);
- }
- }
+ var to_add = payload; // list of a list with category and verb inside it
+ to_add.sort(); // sort what we're adding
+ for (var i = 0; i < to_add.length; i++) {
+ var part = to_add[i];
+ if (!part[0]) continue;
+ var category = part[0];
+ if (category.indexOf('.') != -1) {
+ var splitName = category.split('.');
+ if (split_admin_tabs && splitName[0] === 'Admin') category = splitName[1];
+ else category = splitName[0];
+ }
+ if (findVerbindex(part[1], verbs)) continue;
+ if (verb_tabs.includes(category)) {
+ verbs.push(part);
+ if (current_tab == category) {
+ draw_verbs(category); // redraw if we added a verb to the tab we're currently in
+ }
+ } else if (category) {
+ verb_tabs.push(category);
+ verbs.push(part);
+ createStatusTab(category);
+ }
+ }
}
-document.addEventListener("mouseup", restoreFocus);
-document.addEventListener("keyup", restoreFocus);
+document.addEventListener('mouseup', restoreFocus);
+document.addEventListener('keyup', restoreFocus);
if (!current_tab) {
- addPermanentTab("Status");
- tab_change("Status");
+ addPermanentTab(defaultTab);
+ tab_change(defaultTab);
}
-window.onload = function () {
- Byond.sendMessage("Update-Verbs");
+window.onload = () => {
+ Byond.sendMessage('Update-Verbs');
};
-Byond.subscribeTo('update_spells', function (payload) {
- spell_tabs = payload.spell_tabs;
- var do_update = false;
- if (spell_tabs.includes(current_tab)) {
- do_update = true;
- }
- init_spells();
- if (payload.actions) {
- spells = payload.actions;
- if (do_update) {
- draw_spells(current_tab);
- }
- } else {
- remove_spells();
- }
-});
-
-Byond.subscribeTo('remove_verb_list', function (v) {
- var to_remove = v;
- for (var i = 0; i < to_remove.length; i++) {
- remove_verb(to_remove[i]);
- }
- check_verbs();
- sortVerbs();
- if (verb_tabs.includes(current_tab))
- draw_verbs(current_tab);
+Byond.subscribeTo('remove_verb_list', (v) => {
+ var to_remove = v;
+ for (var i = 0; i < to_remove.length; i++) {
+ remove_verb(to_remove[i]);
+ }
+ check_verbs();
+ sortVerbs();
+ if (verb_tabs.includes(current_tab)) draw_verbs(current_tab);
});
// passes a 2D list of (verbcategory, verbname) creates tabs and adds verbs to respective list
// example (IC, Say)
-Byond.subscribeTo('init_verbs', function (payload) {
- wipe_verbs(); // remove all verb categories so we can replace them
- checkStatusTab(); // remove all status tabs
- verb_tabs = payload.panel_tabs;
- verb_tabs.sort(); // sort it
- var do_update = false;
- var cat = "";
- for (var i = 0; i < verb_tabs.length; i++) {
- cat = verb_tabs[i];
- createStatusTab(cat); // create a category if the verb doesn't exist yet
- }
- if (verb_tabs.includes(current_tab)) {
- do_update = true;
- }
- if (payload.verblist) {
- add_verb_list(payload.verblist);
- sortVerbs(); // sort them
- if (do_update) {
- draw_verbs(current_tab);
- }
- }
- SendTabsToByond();
+Byond.subscribeTo('init_verbs', (payload) => {
+ wipe_verbs(); // remove all verb categories so we can replace them
+ checkStatusTab(); // remove all status tabs
+ verb_tabs = payload.panel_tabs;
+ verb_tabs.sort(); // sort it
+ var do_update = false;
+ var cat = '';
+ for (var i = 0; i < verb_tabs.length; i++) {
+ cat = verb_tabs[i];
+ createStatusTab(cat); // create a category if the verb doesn't exist yet
+ }
+ if (verb_tabs.includes(current_tab)) {
+ do_update = true;
+ }
+ if (payload.verblist) {
+ add_verb_list(payload.verblist);
+ sortVerbs(); // sort them
+ if (do_update) {
+ draw_verbs(current_tab);
+ }
+ }
+ SendTabsToByond();
});
-Byond.subscribeTo('update_stat', function (payload) {
- status_tab_parts = [payload.ping_str];
- var parsed = payload.global_data;
+Byond.subscribeTo('update_stat', (payload) => {
+ status_tab_parts = [];
- for (var i = 0; i < parsed.length; i++) if (parsed[i] != null) status_tab_parts.push(parsed[i]);
+ var parsed = payload.global_data;
- parsed = payload.other_str;
+ for (var i = 0; i < parsed.length; i++)
+ if (parsed[i] != null) status_tab_parts.push(parsed[i]);
- for (var i = 0; i < parsed.length; i++) if (parsed[i] != null) status_tab_parts.push(parsed[i]);
+ parsed = payload.other_str;
- if (current_tab == "Status") {
- draw_status();
- } else if (current_tab == "Debug Stat Panel") {
- draw_debug();
- }
+ for (var i = 0; i < parsed.length; i++)
+ if (parsed[i] != null) status_tab_parts.push(parsed[i]);
+
+ if (current_tab == 'Status') {
+ draw_status();
+ } else if (current_tab == 'Debug Stat Panel') {
+ draw_debug();
+ }
});
-Byond.subscribeTo('update_mc', function (payload) {
- mc_tab_parts = payload.mc_data;
- mc_tab_parts.splice(0, 0, ["Location:", payload.coord_entry]);
+Byond.subscribeTo('update_mc', (payload) => {
+ mc_tab_parts = payload.mc_data;
+ mc_tab_parts.splice(0, 0, ['Location:', payload.coord_entry]);
- if (!verb_tabs.includes("MC")) {
- verb_tabs.push("MC");
- }
+ if (!verb_tabs.includes('MC')) {
+ verb_tabs.push('MC');
+ }
- createStatusTab("MC");
+ createStatusTab('MC');
- if (current_tab == "MC") {
- draw_mc();
- }
+ if (current_tab == 'MC') {
+ draw_mc();
+ }
});
-Byond.subscribeTo('remove_spells', function () {
- for (var s = 0; s < spell_tabs.length; s++) {
- removeStatusTab(spell_tabs[s]);
- }
+Byond.subscribeTo('create_debug', () => {
+ if (!document.getElementById('Debug Stat Panel')) {
+ addPermanentTab('Debug Stat Panel');
+ } else {
+ removePermanentTab('Debug Stat Panel');
+ }
});
-Byond.subscribeTo('init_spells', function () {
- var cat = "";
- for (var i = 0; i < spell_tabs.length; i++) {
- cat = spell_tabs[i];
- if (cat.length > 0) {
- verb_tabs.push(cat);
- createStatusTab(cat);
- }
- }
+Byond.subscribeTo('create_listedturf', (TN) => {
+ remove_listedturf(); // remove the last one if we had one
+ turfname = TN;
+ addPermanentTab(turfname);
+ tab_change(turfname);
});
-Byond.subscribeTo('check_spells', function () {
- for (var v = 0; v < spell_tabs.length; v++) {
- spell_cat_check(spell_tabs[v]);
- }
+Byond.subscribeTo('remove_admin_tabs', () => {
+ href_token = null;
+ remove_mc();
+ remove_tickets();
+ remove_sdql2();
+ remove_interviews();
});
-Byond.subscribeTo('create_debug', function () {
- if (!document.getElementById("Debug Stat Panel")) {
- addPermanentTab("Debug Stat Panel");
- } else {
- removePermanentTab("Debug Stat Panel");
- }
+Byond.subscribeTo('update_listedturf', (TC) => {
+ turfcontents = TC;
+ if (current_tab == turfname) {
+ draw_listedturf();
+ }
});
-Byond.subscribeTo('create_listedturf', function (TN) {
- remove_listedturf(); // remove the last one if we had one
- turfname = TN;
- addPermanentTab(turfname);
- tab_change(turfname);
+Byond.subscribeTo('update_interviews', (I) => {
+ interviewManager = I;
+ if (current_tab == 'Tickets') {
+ draw_interviews();
+ }
});
-Byond.subscribeTo('remove_admin_tabs', function () {
- remove_mc();
- remove_sdql2();
+Byond.subscribeTo('update_split_admin_tabs', (status) => {
+ status = status == true;
+
+ if (split_admin_tabs !== status) {
+ if (split_admin_tabs === true) {
+ removeStatusTab('Events');
+ removeStatusTab('Fun');
+ removeStatusTab('Game');
+ }
+ update_verbs();
+ }
+ split_admin_tabs = status;
});
-Byond.subscribeTo('update_listedturf', function (TC) {
- turfcontents = TC;
- if (current_tab == turfname) {
- draw_listedturf();
- }
+Byond.subscribeTo('add_admin_tabs', (ht) => {
+ href_token = ht;
+ addPermanentTab('MC');
+ addPermanentTab('Tickets');
});
-Byond.subscribeTo('update_split_admin_tabs', function (status) {
- status = (status == true);
-
- if (split_admin_tabs !== status) {
- if (split_admin_tabs === true) {
- removeStatusTab("Events");
- removeStatusTab("Fun");
- removeStatusTab("Game");
- }
- update_verbs();
- }
- split_admin_tabs = status;
+Byond.subscribeTo('update_sdql2', (S) => {
+ sdql2 = S;
+ if (sdql2.length > 0 && !verb_tabs.includes('SDQL2')) {
+ verb_tabs.push('SDQL2');
+ addPermanentTab('SDQL2');
+ }
+ if (current_tab == 'SDQL2') {
+ draw_sdql2();
+ }
});
-Byond.subscribeTo('add_admin_tabs', function () {
- addPermanentTab("MC");
+Byond.subscribeTo('update_tickets', (T) => {
+ tickets = T;
+ if (!verb_tabs.includes('Tickets')) {
+ verb_tabs.push('Tickets');
+ addPermanentTab('Tickets');
+ }
+ if (current_tab == 'Tickets') {
+ draw_tickets();
+ }
});
-Byond.subscribeTo('update_sdql2', function (S) {
- sdql2 = S;
- if (sdql2.length > 0 && !verb_tabs.includes("SDQL2")) {
- verb_tabs.push("SDQL2");
- addPermanentTab("SDQL2");
- }
- if (current_tab == "SDQL2") {
- draw_sdql2();
- }
-});
Byond.subscribeTo('remove_listedturf', remove_listedturf);
Byond.subscribeTo('remove_sdql2', remove_sdql2);
diff --git a/icons/accent_tags.dmi b/icons/accent_tags.dmi
index 897ffbb79c1..b533246d20f 100644
Binary files a/icons/accent_tags.dmi and b/icons/accent_tags.dmi differ
diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi
index 1f224ccd19d..b9791113537 100644
Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ
diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi
index 66619bafa93..d71057500c4 100644
Binary files a/icons/mob/belt.dmi and b/icons/mob/belt.dmi differ
diff --git a/icons/mob/rig_modules.dmi b/icons/mob/rig_modules.dmi
index f921263c754..a184129e692 100644
Binary files a/icons/mob/rig_modules.dmi and b/icons/mob/rig_modules.dmi differ
diff --git a/icons/mob/species/tajaran/helmet.dmi b/icons/mob/species/tajaran/helmet.dmi
index f5ea1081364..96fd33fe36b 100644
Binary files a/icons/mob/species/tajaran/helmet.dmi and b/icons/mob/species/tajaran/helmet.dmi differ
diff --git a/icons/mob/ties.dmi b/icons/mob/ties.dmi
index 131a91bdc03..d3cf0dfb320 100644
Binary files a/icons/mob/ties.dmi and b/icons/mob/ties.dmi differ
diff --git a/icons/mob/underwear.dmi b/icons/mob/underwear.dmi
index 1e4d937665a..6747884b577 100644
Binary files a/icons/mob/underwear.dmi and b/icons/mob/underwear.dmi differ
diff --git a/icons/obj/clothing/ties.dmi b/icons/obj/clothing/ties.dmi
index 25669628e05..85f7c22c349 100644
Binary files a/icons/obj/clothing/ties.dmi and b/icons/obj/clothing/ties.dmi differ
diff --git a/icons/obj/item/clothing/under/shirt/shirts.dmi b/icons/obj/item/clothing/under/shirt/shirts.dmi
index 5c12e8914e1..e227bf858c3 100644
Binary files a/icons/obj/item/clothing/under/shirt/shirts.dmi and b/icons/obj/item/clothing/under/shirt/shirts.dmi differ
diff --git a/icons/obj/smooth/window/full_window.dmi b/icons/obj/smooth/window/full_window.dmi
index fd18f81ac8e..1643a30f94a 100644
Binary files a/icons/obj/smooth/window/full_window.dmi and b/icons/obj/smooth/window/full_window.dmi differ
diff --git a/icons/obj/smooth/window/full_window_frame_color.dmi b/icons/obj/smooth/window/full_window_frame_color.dmi
index a12bc46d219..be36161729d 100644
Binary files a/icons/obj/smooth/window/full_window_frame_color.dmi and b/icons/obj/smooth/window/full_window_frame_color.dmi differ
diff --git a/icons/obj/smooth/window/grille_over.dmi b/icons/obj/smooth/window/grille_over.dmi
index 13964268633..c5822ce2e21 100644
Binary files a/icons/obj/smooth/window/grille_over.dmi and b/icons/obj/smooth/window/grille_over.dmi differ
diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi
index 889b5180eec..4489b38921c 100755
Binary files a/icons/obj/vending.dmi and b/icons/obj/vending.dmi differ
diff --git a/icons/turf/areas.dmi b/icons/turf/areas.dmi
index 20490e14c9f..3f3f6e1f84c 100755
Binary files a/icons/turf/areas.dmi and b/icons/turf/areas.dmi differ
diff --git a/maps/sccv_horizon/areas/_horizon_areas.dm b/maps/sccv_horizon/areas/_horizon_areas.dm
index 3d470a50a63..9b8fda28f8c 100644
--- a/maps/sccv_horizon/areas/_horizon_areas.dm
+++ b/maps/sccv_horizon/areas/_horizon_areas.dm
@@ -22,7 +22,7 @@
/// SCCV Horizon master areas
/area/horizon
name = "Horizon (PARENT AREA - DON'T USE)"
- icon_state = "unknown"
+ icon_state = "horizon"
station_area = TRUE
ambience = AMBIENCE_GENERIC
// Remember to set this for new areas!!
@@ -46,3 +46,8 @@
ambience = AMBIENCE_SPACE
area_flags = AREA_FLAG_HIDE_FROM_HOLOMAP | AREA_FLAG_PREVENT_PERSISTENT_TRASH
area_blurb = "The sheer scale of the SCCV Horizon is never more apparent when crawling across its hull like an ant."
+
+// Same as above, except shields will not wrap around it.
+// For bits of space or the outer hull that shouldn't be covered by shields.
+/area/horizon/exterior/no_shields
+ icon_state = "exterior_noshield"
diff --git a/maps/sccv_horizon/areas/horizon_areas_command.dm b/maps/sccv_horizon/areas/horizon_areas_command.dm
index cd3a0ce0f92..4cd4b7ccb3b 100644
--- a/maps/sccv_horizon/areas/horizon_areas_command.dm
+++ b/maps/sccv_horizon/areas/horizon_areas_command.dm
@@ -29,6 +29,7 @@
/area/horizon/command/heads/xo
name = "Executive Officer's Office"
+ icon_state = "head_quarters"
area_blurb = "No one really knows what goes on in here, but Ian usually seems pretty happy so it's got that going for it.."
horizon_deck = 3
diff --git a/maps/sccv_horizon/areas/horizon_areas_engineering.dm b/maps/sccv_horizon/areas/horizon_areas_engineering.dm
index bca3d252a25..204c3864328 100644
--- a/maps/sccv_horizon/areas/horizon_areas_engineering.dm
+++ b/maps/sccv_horizon/areas/horizon_areas_engineering.dm
@@ -146,7 +146,7 @@
/area/horizon/engineering/atmos/propulsion
name = "Propulsion"
subdepartment = null
- icon_state = "blue2"
+ icon_state = "thrust"
sound_environment = SOUND_AREA_SMALL_ENCLOSED
area_blurb = "Every bulkhead is invisibly tense with the long-term strains of powerful impulse. The subtle aromas of various fuel compounds linger in the air."
location_ew = LOC_PORT
@@ -154,7 +154,7 @@
/area/horizon/engineering/atmos/propulsion/starboard
name = "Propulsion"
- icon_state = "blue-red2"
+ icon_state = "thrust"
location_ew = LOC_STARBOARD
/area/horizon/engineering/atmos/turbine
@@ -229,8 +229,9 @@
/// TCOMMS_AREAS
/area/horizon/tcommsat
+ icon_state = "tcomsatcham"
ambience = AMBIENCE_ENGINEERING
- area_lighting = LIGHT_HIGHSEC_COLORS
+ area_lighting = LIGHT_CLINICAL_COLORS
no_light_control = 1
station_area = TRUE
holomap_color = HOLOMAP_AREACOLOR_ENGINEERING
@@ -247,4 +248,3 @@
/area/horizon/tcommsat/chamber
name = "Telecomms Central Compartment"
- icon_state = "tcomsatcham"
diff --git a/maps/sccv_horizon/areas/horizon_areas_holodeck.dm b/maps/sccv_horizon/areas/horizon_areas_holodeck.dm
index 93b196436b3..059f758e6ca 100644
--- a/maps/sccv_horizon/areas/horizon_areas_holodeck.dm
+++ b/maps/sccv_horizon/areas/horizon_areas_holodeck.dm
@@ -1,6 +1,7 @@
/// HOLODECK_AREAS
/area/horizon/holodeck_control
name = "Holodeck Alpha"
+ icon_state = "holodeck_control"
area_flags = AREA_FLAG_RAD_SHIELDED
holomap_color = HOLOMAP_AREACOLOR_CIVILIAN
horizon_deck = 3
diff --git a/maps/sccv_horizon/areas/horizon_areas_medical.dm b/maps/sccv_horizon/areas/horizon_areas_medical.dm
index aad9ef30d8e..ec6a76e3b0b 100644
--- a/maps/sccv_horizon/areas/horizon_areas_medical.dm
+++ b/maps/sccv_horizon/areas/horizon_areas_medical.dm
@@ -1,5 +1,6 @@
/// MEDICAL_AREAS
/area/horizon/medical
+ icon_state = "medbay"
station_area = TRUE
area_lighting = LIGHT_CLINICAL_COLORS
holomap_color = HOLOMAP_AREACOLOR_MEDICAL
@@ -8,13 +9,11 @@
/area/horizon/medical/paramedic
name = "Paramedic Equipment Storage"
- icon_state = "medbay"
horizon_deck = 3
lightswitch = FALSE
/area/horizon/medical/reception
name = "Reception"
- icon_state = "medbay"
ambience = list('sound/ambience/signal.ogg')
horizon_deck = 2
@@ -39,18 +38,18 @@
/area/horizon/medical/gen_treatment
name = "General Treatment"
- icon_state = "cryo"
+ icon_state = "medbay2"
horizon_deck = 2
/area/horizon/medical/icu
name = "Intensive Care Unit"
- icon_state = "cryo"
+ icon_state = "medbay3"
area_blurb = "The sounds of pumps and cooling equipment can be heard within the room."
horizon_deck = 2
/area/horizon/medical/main_storage
name = "Main Storage"
- icon_state = "exam_room"
+ icon_state = "medbay4"
horizon_deck = 2
lightswitch = FALSE
@@ -110,7 +109,6 @@
/area/horizon/medical/hallway
name = "Atrium"
holomap_color = HOLOMAP_AREACOLOR_MEDICAL
- icon_state = "medbay"
horizon_deck = 2
/area/horizon/medical/hallway/upper
diff --git a/maps/sccv_horizon/areas/horizon_areas_operations.dm b/maps/sccv_horizon/areas/horizon_areas_operations.dm
index 3397e802911..cc92b22a4a3 100644
--- a/maps/sccv_horizon/areas/horizon_areas_operations.dm
+++ b/maps/sccv_horizon/areas/horizon_areas_operations.dm
@@ -1,7 +1,7 @@
/// OPERATIONS_AREAS
/area/horizon/operations
name = "Ops (PARENT AREA - DON'T USE)"
- icon_state = "dark"
+ icon_state = "operations"
area_lighting = LIGHT_ENGINEERING_COLORS
ambience = AMBIENCE_ENGINEERING
holomap_color = HOLOMAP_AREACOLOR_OPERATIONS
@@ -10,21 +10,18 @@
/area/horizon/operations/warehouse
name = "Warehouse"
- icon_state = "dark160"
sound_environment = SOUND_AREA_LARGE_ENCLOSED
area_blurb = "Scuff marks scar the floor from the movement of many crates and stored goods."
horizon_deck = 1
/area/horizon/operations/ship_supply_warehouse
name = "Ship Supply Warehouse"
- icon_state = "dark160"
sound_environment = SOUND_AREA_LARGE_ENCLOSED
area_blurb = "Scuff marks scar the floor from the movement of many crates and stored goods."
horizon_deck = 2
/area/horizon/operations/package_conveyors
name = "Package Conveyors"
- icon_state = "dark128"
horizon_deck = 1
/area/horizon/operations/lobby
@@ -66,6 +63,7 @@
/area/horizon/operations/secure_ammunition_storage
name = "Secure Ammunitions Storage"
+ icon_state = "ammo"
sound_environment = SOUND_AREA_SMALL_ENCLOSED
ambience = AMBIENCE_FOREBODING
holomap_color = HOLOMAP_AREACOLOR_OPERATIONS
@@ -75,7 +73,7 @@
/// OPERATIONS_AREAS - HANGAR_AREAS
/area/horizon/hangar
name = "Hangar (PARENT AREA - DON'T USE)"
- icon_state = "bluenew"
+ icon_state = "hangar"
area_lighting = LIGHT_ENGINEERING_COLORS
ambience = AMBIENCE_HANGAR
sound_environment = SOUND_ENVIRONMENT_HANGAR
@@ -143,6 +141,7 @@
/// WEAPONS_AREAS
/area/horizon/weapons
+ icon_state = "bridge_weapon"
area_lighting = LIGHT_ENGINEERING_COLORS
sound_environment = SOUND_AREA_LARGE_ENCLOSED
ambience = AMBIENCE_HIGHSEC
@@ -150,7 +149,6 @@
/area/horizon/weapons/longbow
name = "Longbow Weapon System"
- icon_state = "bridge_weapon"
horizon_deck = 3
area_blurb = "One of the SCCV Horizon's daunting weapons bays."
department = LOC_COMMAND
@@ -158,7 +156,6 @@
/area/horizon/weapons/grauwolf
name = "Grauwolf Weapon System"
- icon_state = "bridge_weapon"
horizon_deck = 2
area_blurb = "One of the SCCV Horizon's daunting weapons bays."
department = LOC_COMMAND
@@ -191,22 +188,21 @@
holomap_color = HOLOMAP_AREACOLOR_SCIENCE
department = LOC_SCIENCE
+/area/horizon/storage/secure/ops_vault
+ icon_state = "storage"
+ area_flags = AREA_FLAG_HIDE_FROM_HOLOMAP
+ department = LOC_COMMAND
+ area_lighting = LIGHT_HIGHSEC_COLORS
+
/// THE VAAAAAAUULLT
/area/horizon/storage/secure/ops_vault
name = "Secure Operational Storage"
- icon_state = "storage"
- area_lighting = LIGHT_HIGHSEC_COLORS
horizon_deck = 2
- area_flags = AREA_FLAG_HIDE_FROM_HOLOMAP
- department = LOC_COMMAND
area_blurb = "A place not to be visited unless things are going either horribly wrong or horribly right."
/// THE VAAAAAAUULLT
/area/horizon/storage/secure/tech_vault
name = "Secure Technical Storage"
- icon_state = "storage"
area_lighting = LIGHT_HIGHSEC_COLORS
horizon_deck = 3
- area_flags = AREA_FLAG_HIDE_FROM_HOLOMAP
- department = LOC_COMMAND
area_blurb = "A place not to be visited unless things are going either horribly wrong or horribly right."
diff --git a/maps/sccv_horizon/areas/horizon_areas_service.dm b/maps/sccv_horizon/areas/horizon_areas_service.dm
index 68907ad0069..54cc7e45448 100644
--- a/maps/sccv_horizon/areas/horizon_areas_service.dm
+++ b/maps/sccv_horizon/areas/horizon_areas_service.dm
@@ -116,6 +116,7 @@
name = "Chapel"
icon_state = "chapel"
area_blurb = "An impressive, spacious compartment nonetheless kept somewhat bland to accommodate the many disparate faiths whose practice may be attended here."
+ lightswitch = TRUE
/area/horizon/service/chapel/office
name = "Chapel Office"
diff --git a/maps/sccv_horizon/code/_sccv_horizon_shuttle_landmarks.dm b/maps/sccv_horizon/code/_sccv_horizon_shuttle_landmarks.dm
index c9c98535937..bd71c6920b6 100644
--- a/maps/sccv_horizon/code/_sccv_horizon_shuttle_landmarks.dm
+++ b/maps/sccv_horizon/code/_sccv_horizon_shuttle_landmarks.dm
@@ -33,42 +33,42 @@
landmark_tag = "nav_horizon_dock_deck_3_starboard_1"
docking_controller = "airlock_horizon_dock_deck_3_starboard_1"
base_turf = /turf/simulated/floor/reinforced/airless
- base_area = /area/horizon/exterior
+ base_area = /area/horizon/exterior/no_shields
/obj/effect/shuttle_landmark/horizon/dock/deck_3/starboard_2
name = "Third Deck Starboard Dock 2"
landmark_tag = "nav_horizon_dock_deck_3_starboard_2"
docking_controller = "airlock_horizon_dock_deck_3_starboard_2"
base_turf = /turf/simulated/floor/reinforced/airless
- base_area = /area/horizon/exterior
+ base_area = /area/horizon/exterior/no_shields
/obj/effect/shuttle_landmark/horizon/dock/deck_3/starboard_3
name = "Third Deck Starboard Dock 3"
landmark_tag = "nav_horizon_dock_deck_3_starboard_3"
docking_controller = "airlock_horizon_dock_deck_3_starboard_3"
base_turf = /turf/simulated/floor/reinforced/airless
- base_area = /area/horizon/exterior
+ base_area = /area/horizon/exterior/no_shields
/obj/effect/shuttle_landmark/horizon/dock/deck_3/port_1
name = "Third Deck Port Dock 1"
landmark_tag = "nav_horizon_dock_deck_3_port_2"
docking_controller = "airlock_horizon_dock_deck_3_port_2"
base_turf = /turf/simulated/floor/reinforced/airless
- base_area = /area/horizon/exterior
+ base_area = /area/horizon/exterior/no_shields
/obj/effect/shuttle_landmark/horizon/dock/deck_3/port_2
name = "Third Deck Port Dock 2"
landmark_tag = "nav_horizon_dock_deck_3_port_4"
docking_controller = "airlock_horizon_dock_deck_3_port_4"
base_turf = /turf/simulated/floor/reinforced/airless
- base_area = /area/horizon/exterior
+ base_area = /area/horizon/exterior/no_shields
/obj/effect/shuttle_landmark/horizon/dock/deck_3/port_3
name = "Third Deck Port Dock 3"
landmark_tag = "nav_horizon_dock_deck_3_port_5"
docking_controller = "airlock_horizon_dock_deck_3_port_5"
base_turf = /turf/simulated/floor/reinforced/airless
- base_area = /area/horizon/exterior
+ base_area = /area/horizon/exterior/no_shields
// ================================ exterior
diff --git a/maps/sccv_horizon/sccv_horizon.dmm b/maps/sccv_horizon/sccv_horizon.dmm
index f8ad5f51eed..630c8152dda 100644
--- a/maps/sccv_horizon/sccv_horizon.dmm
+++ b/maps/sccv_horizon/sccv_horizon.dmm
@@ -178,7 +178,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/structure/cable/green{
icon_state = "4-8"
},
@@ -360,6 +360,9 @@
dir = 1;
icon_state = "pipe-c"
},
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 8
+ },
/turf/simulated/floor/tiled,
/area/horizon/service/custodial)
"act" = (
@@ -518,7 +521,7 @@
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/operations/starboard/far)
"adm" = (
/obj/effect/floor_decal/corner/paleblue/diagonal,
@@ -644,7 +647,8 @@
/obj/structure/platform{
dir = 4
},
-/turf/simulated/floor,
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/far)
"aec" = (
/obj/structure/cable/green{
@@ -882,7 +886,8 @@
},
/obj/random/dirt_75,
/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"aeL" = (
/obj/structure/platform_deco,
@@ -908,6 +913,10 @@
/obj/structure/cable{
icon_state = "2-4"
},
+/obj/structure/machinery/light/small{
+ dir = 1
+ },
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/security)
"aeU" = (
@@ -931,14 +940,15 @@
/obj/structure/cable{
icon_state = "1-4"
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"afe" = (
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard)
"afi" = (
/obj/effect/floor_decal/spline/plain/mauve{
@@ -1039,7 +1049,7 @@
/obj/structure/railing/mapped,
/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/random/dirt_75,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/turf/simulated/floor/plating,
@@ -1319,6 +1329,12 @@
/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor/plating,
/area/horizon/hangar/intrepid)
+"agT" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/wing/port)
"agU" = (
/obj/structure/machinery/smartfridge/tradeshelf/clothing,
/obj/structure/machinery/firealarm/west,
@@ -1398,6 +1414,7 @@
/obj/structure/machinery/atmospherics/unary/freezer{
icon_state = "freezer"
},
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/medical/cryo)
"ahs" = (
@@ -1471,7 +1488,7 @@
dir = 4
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"ahI" = (
/obj/effect/floor_decal/corner/brown{
@@ -1663,13 +1680,13 @@
dir = 1;
icon_state = "pipe-c"
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/effect/floor_decal/industrial/warning{
dir = 6
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard/far)
"aiR" = (
/obj/effect/floor_decal/corner/green/diagonal,
@@ -1734,7 +1751,6 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/machinery/light/small/emergency,
/obj/structure/lattice/catwalk/indoor/grate/damaged{
color = "#4c535b"
},
@@ -1749,7 +1765,7 @@
/obj/random/tool,
/obj/random/tool,
/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/auxatmos)
"ajD" = (
/obj/structure/cable/green{
@@ -1812,6 +1828,7 @@
master_tag = "airlock_horizon_deck_2_port_1";
name = "airlock_horizon_deck_2_port_1"
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor,
/area/horizon/maintenance/deck_2/wing/port/far)
"ajY" = (
@@ -1904,8 +1921,7 @@
/obj/structure/machinery/alarm/east{
req_one_access = list(24,11,48)
},
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"akl" = (
/obj/structure/machinery/atmospherics/pipe/manifold/hidden{
@@ -1916,26 +1932,30 @@
master_tag = "airlock_horizon_dock_deck_3_starboard_3";
name = "airlock_horizon_dock_deck_3_starboard_3"
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/corner/dark_blue/diagonal,
+/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"aky" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
- },
/obj/structure/cable/green{
icon_state = "1-8"
},
/obj/effect/floor_decal/industrial/hatch/red,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
/obj/effect/floor_decal/industrial/warning{
dir = 8
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/aux{
+ dir = 8
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/turf/simulated/floor/tiled/dark,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/command/bridge/selfdestruct)
"akz" = (
/obj/effect/floor_decal/corner/red/diagonal,
@@ -1955,14 +1975,14 @@
master_tag = "airlock_horizon_deck_2_port_1";
name = "airlock_horizon_deck_2_port_1"
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/port/far)
"akD" = (
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
/obj/structure/reagent_dispensers/extinguisher,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/teleporter)
"akE" = (
/obj/structure/machinery/atmospherics/pipe/simple/visible/cyan{
@@ -2030,7 +2050,7 @@
/turf/simulated/floor/plating,
/area/horizon/engineering/storage_hard/lower)
"akY" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/structure/table/rack,
@@ -2297,8 +2317,9 @@
/turf/simulated/floor/wood,
/area/merchant_station)
"amR" = (
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_1/main/port)
+/area/horizon/maintenance/deck_2/wing/port/far)
"amS" = (
/obj/effect/floor_decal/industrial/warning{
dir = 5
@@ -2368,7 +2389,7 @@
},
/obj/effect/decal/cleanable/dirt,
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/cafe)
"anu" = (
/obj/structure/sign/radiation{
@@ -2411,7 +2432,10 @@
dir = 1
},
/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"anF" = (
/obj/effect/decal{
@@ -3019,9 +3043,11 @@
/turf/simulated/wall/shuttle/scc,
/area/horizon/shuttle/intrepid/flight_deck)
"ata" = (
-/obj/effect/decal/cleanable/blood/oil,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/aft)
+/area/horizon/maintenance/deck_2/wing/port)
"atd" = (
/obj/structure/ladder{
pixel_y = 8
@@ -3105,7 +3131,7 @@
name = "airlock_horizon_deck_1_aft_propulsion_2"
},
/obj/effect/map_effect/marker_helper/airlock/interior,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/atmos/propulsion)
"atv" = (
/obj/structure/disposalpipe/segment{
@@ -3398,19 +3424,12 @@
/turf/simulated/floor/plating,
/area/horizon/engineering/atmos/air)
"auD" = (
-/obj/structure/machinery/light/small/emergency{
- dir = 1
+/obj/structure/machinery/porta_turret/stationary,
+/obj/effect/floor_decal/industrial/warning/full,
+/obj/structure/sign/nosmoking_1{
+ pixel_y = 32
},
-/obj/effect/floor_decal/corner_wide/blue{
- dir = 10
- },
-/obj/effect/floor_decal/corner_wide/yellow{
- dir = 5
- },
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
- },
-/turf/simulated/floor/reinforced,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/command/bridge/selfdestruct)
"auK" = (
/obj/effect/floor_decal/industrial/warning{
@@ -3548,7 +3567,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"ave" = (
/obj/effect/floor_decal/industrial/hatch_door/red,
@@ -3677,7 +3696,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/starboard)
"avJ" = (
@@ -3686,14 +3705,10 @@
/turf/unsimulated/floor,
/area/antag/raider)
"avK" = (
-/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 8
- },
-/obj/random/dirt_75,
/obj/structure/machinery/atmospherics/pipe/simple/visible{
dir = 5
},
-/turf/simulated/floor/tiled/dark,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/auxatmos)
"avV" = (
/obj/effect/floor_decal/spline/fancy/wood{
@@ -3766,7 +3781,7 @@
dir = 4;
req_one_access = list(5,10,12)
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/main/starboard)
"awq" = (
/obj/structure/railing/mapped{
@@ -3865,6 +3880,7 @@
master_tag = "airlock_horizon_dock_deck_3_starboard_2";
name = "airlock_horizon_dock_deck_3_starboard_2"
},
+/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor/plating,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"axi" = (
@@ -3941,6 +3957,10 @@
"axx" = (
/obj/structure/machinery/alarm/north,
/obj/random/dirt_75,
+/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"axy" = (
@@ -4229,7 +4249,7 @@
pixel_y = 20
},
/obj/effect/map_effect/marker_helper/airlock/interior,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/aft_airlock)
"azy" = (
/turf/simulated/floor/holofloor/beach/sand{
@@ -4347,7 +4367,7 @@
req_access = list(23)
},
/obj/effect/floor_decal/industrial/hatch_door/engineering,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/storage/tech)
"aAg" = (
/obj/structure/machinery/light/small{
@@ -4363,6 +4383,9 @@
/obj/structure/machinery/atmospherics/unary/vent_pump/on{
dir = 8
},
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"aAq" = (
@@ -4385,8 +4408,11 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/security/evidence_storage)
"aAu" = (
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/near)
"aAD" = (
@@ -4399,7 +4425,7 @@
dir = 4;
req_access = list(12)
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"aAE" = (
/obj/structure/closet/crate/secure/legion,
@@ -4458,6 +4484,11 @@
},
/turf/simulated/floor/lino,
/area/horizon/service/cafeteria)
+"aBb" = (
+/obj/structure/lattice/catwalk,
+/obj/item/hullbeacon/red,
+/turf/simulated/open/airless,
+/area/horizon/exterior/no_shields)
"aBh" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
@@ -4516,9 +4547,15 @@
/turf/simulated/floor/tiled,
/area/merchant_station/warehouse)
"aBI" = (
-/obj/effect/floor_decal/industrial/warning,
-/obj/structure/machinery/light/small/emergency,
-/turf/simulated/floor/plating,
+/obj/structure/machinery/light/small,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/platform_deco{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"aBJ" = (
/obj/structure/machinery/atmospherics/pipe/manifold/visible,
@@ -4723,6 +4760,11 @@
},
/turf/simulated/floor/tiled/dark,
/area/horizon/command/bridge/aibunker)
+"aCR" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_1/operations/starboard)
"aCV" = (
/obj/effect/floor_decal/corner_wide/orange{
dir = 5
@@ -4731,9 +4773,8 @@
/area/horizon/medical/pharmacy)
"aCW" = (
/obj/structure/platform,
-/obj/effect/floor_decal/industrial/warning,
/obj/structure/railing/mapped,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"aDa" = (
/obj/structure/machinery/atmospherics/portables_connector{
@@ -4773,7 +4814,7 @@
c_tag = "Bridge - CIC Foyer";
dir = 4
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/port/far)
"aDv" = (
/obj/structure/bed/stool/chair/sofa/right/brown{
@@ -5041,14 +5082,12 @@
/turf/simulated/floor/tiled,
/area/horizon/operations/office)
"aFT" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 8
- },
/obj/structure/cable/green{
icon_state = "1-2"
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/medical/cryo)
"aFX" = (
@@ -5085,6 +5124,10 @@
},
/turf/simulated/floor/plating,
/area/horizon/hangar/auxiliary)
+"aGc" = (
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/reinforced/airless,
+/area/horizon/exterior/no_shields)
"aGj" = (
/obj/structure/window/shuttle/scc_space_ship,
/obj/structure/grille,
@@ -5521,7 +5564,10 @@
/obj/structure/machinery/atmospherics/unary/vent_pump/on{
dir = 1
},
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard)
"aIH" = (
/obj/structure/table/standard,
@@ -5592,8 +5638,8 @@
/obj/structure/cable/green{
icon_state = "1-8"
},
-/obj/random/dirt_75,
/obj/effect/decal/cleanable/dirt,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/main/starboard)
"aIU" = (
@@ -5603,6 +5649,9 @@
/area/horizon/maintenance/deck_2/aft)
"aIW" = (
/obj/effect/floor_decal/industrial/hatch/yellow,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
/turf/simulated/floor,
/area/horizon/maintenance/deck_2/wing/port/far)
"aIZ" = (
@@ -5689,12 +5738,13 @@
},
/area/centcom/specops)
"aJz" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/effect/decal/cleanable/cobweb2,
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/obj/random/dirt_75,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard)
"aJB" = (
/obj/effect/floor_decal/spline/plain/mauve{
@@ -5805,6 +5855,7 @@
master_tag = "airlock_horizon_deck_2_port_1";
name = "airlock_horizon_deck_2_port_1"
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor,
/area/horizon/maintenance/deck_2/wing/port/far)
"aKt" = (
@@ -5918,7 +5969,6 @@
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 4
},
-/obj/effect/floor_decal/corner,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/substation/xenoarchaeology)
"aKL" = (
@@ -5962,7 +6012,7 @@
dir = 8
},
/obj/structure/trash_pile,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/holodeck)
"aKV" = (
/obj/structure/machinery/vending/assist/synd,
@@ -6387,6 +6437,7 @@
"aNW" = (
/obj/effect/decal/cleanable/dirt,
/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/starboard)
"aNY" = (
@@ -6397,10 +6448,7 @@
/area/horizon/command/heads/captain)
"aOa" = (
/obj/effect/decal/cleanable/dirt,
-/obj/item/clothing/glasses/sunglasses,
-/obj/item/screwdriver,
/obj/structure/platform,
-/obj/structure/table/reinforced,
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/far)
"aOd" = (
@@ -6409,7 +6457,8 @@
/area/horizon/service/cafeteria)
"aOe" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/operations/starboard)
"aOf" = (
@@ -6604,22 +6653,12 @@
/turf/simulated/floor/tiled,
/area/horizon/operations/loading)
"aPd" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
/obj/random/dirt_75,
-/obj/structure/machinery/light/small/emergency{
- dir = 1
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
},
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/wing/starboard/far)
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/wing/port/near)
"aPe" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/structure/machinery/atmospherics/unary/vent_pump/high_volume,
@@ -6656,7 +6695,7 @@
/area/centcom/specops)
"aPh" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -6684,7 +6723,7 @@
dir = 4;
req_access = list(12)
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/wing/starboard)
"aPs" = (
/turf/simulated/wall/shuttle/scc_space_ship/cardinal,
@@ -6769,18 +6808,9 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/atmos/propulsion)
"aPJ" = (
-/obj/structure/machinery/door/firedoor{
- req_one_access = list(24,11,67,73);
- dir = 4
- },
-/obj/structure/machinery/door/airlock/maintenance_hatch{
- dir = 4
- },
-/obj/effect/floor_decal/industrial/hatch_door/yellow{
- dir = 4
- },
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_1/teleporter)
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/aux,
+/turf/simulated/floor/redgrid,
+/area/horizon/command/bridge/selfdestruct)
"aPM" = (
/obj/effect/floor_decal/corner/dark_green{
dir = 9
@@ -6837,6 +6867,9 @@
/area/horizon/engineering/atmos/storage)
"aQd" = (
/obj/effect/decal/cleanable/dirt,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/medical/cryo)
"aQe" = (
@@ -7024,7 +7057,7 @@
/turf/simulated/floor/holofloor/tiled,
/area/horizon/holodeck/source_gym)
"aSk" = (
-/obj/random/dirt_75,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor,
/area/horizon/maintenance/deck_2/wing/port/far)
"aSv" = (
@@ -7082,6 +7115,16 @@
/obj/structure/reagent_dispensers/fueltank,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/hangar/port)
+"aSC" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/main/starboard)
"aSE" = (
/obj/structure/table/reinforced/steel,
/obj/item/magnetic_lock,
@@ -7119,6 +7162,9 @@
req_access = list(56)
},
/mob/living/simple_animal/carp/fluff/ginny,
+/obj/structure/machinery/light{
+ dir = 1
+ },
/turf/simulated/floor/carpet,
/area/horizon/command/heads/chief)
"aSZ" = (
@@ -7265,6 +7311,7 @@
name_tag = "Deck 2 and 3 Security Subgrid"
},
/obj/structure/machinery/power/apc/low/south,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/security)
"aTL" = (
@@ -7296,6 +7343,7 @@
/turf/simulated/floor/plating,
/area/horizon/rnd/xenoarch/atrium)
"aTV" = (
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/atmos/storage_maintenance)
"aTY" = (
@@ -7403,7 +7451,8 @@
dir = 8;
must_start_working = 1
},
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/operations)
"aUP" = (
/obj/structure/platform,
@@ -7466,7 +7515,10 @@
dir = 1
},
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"aUX" = (
/obj/structure/railing/mapped,
@@ -8008,7 +8060,7 @@
/area/horizon/engineering/bluespace_drive)
"aYO" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden,
-/obj/random/dirt_75,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor,
/area/horizon/maintenance/deck_2/wing/port/far)
"aYQ" = (
@@ -8040,7 +8092,10 @@
/obj/effect/floor_decal/industrial/warning{
dir = 6
},
-/turf/simulated/floor/plating,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"aZb" = (
/obj/structure/machinery/door/airlock/hatch{
@@ -8369,6 +8424,9 @@
"bbr" = (
/obj/structure/table/rack,
/obj/random/junk,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/research)
"bbs" = (
@@ -8457,16 +8515,13 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/rnd/xenobiology/xenoflora)
"bcf" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/railing/mapped{
- dir = 8
- },
-/obj/structure/railing/mapped,
-/obj/effect/floor_decal/industrial/warning,
/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/wing/starboard/near)
+/area/horizon/maintenance/deck_2/wing/port/far)
"bci" = (
/obj/effect/floor_decal/corner/red/diagonal,
/obj/random/junk,
@@ -8518,7 +8573,8 @@
pixel_x = 1;
pixel_y = 5
},
-/turf/simulated/floor,
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/security/port)
"bcA" = (
/obj/structure/machinery/atmospherics/unary/vent_pump/high_volume{
@@ -8529,7 +8585,8 @@
master_tag = "airlock_horizon_dock_deck_3_port_4";
name = "airlock_horizon_dock_deck_3_port_4"
},
-/turf/simulated/floor/plating,
+/obj/structure/lattice/catwalk/indoor/grate,
+/turf/simulated/floor,
/area/horizon/hallway/primary/deck_3/port/docks)
"bcB" = (
/obj/effect/floor_decal/industrial/warning{
@@ -8549,9 +8606,11 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden{
dir = 6
},
-/obj/structure/railing/mapped{
+/obj/effect/floor_decal/industrial/warning{
dir = 4
},
+/obj/structure/table/rack,
+/obj/random/med_stack,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/medical/cryo)
"bcK" = (
@@ -8569,7 +8628,7 @@
},
/obj/item/hullbeacon/red,
/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"bcP" = (
/obj/structure/cable/green{
icon_state = "1-2"
@@ -8623,7 +8682,7 @@
"bcZ" = (
/obj/structure/railing/mapped,
/turf/simulated/open/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"bdb" = (
/obj/effect/floor_decal/corner_wide/blue{
dir = 5
@@ -8650,7 +8709,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 9
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard/amidships)
"bdm" = (
/turf/simulated/floor/holofloor/grass{
@@ -8661,11 +8720,12 @@
},
/area/horizon/holodeck/source_konyang)
"bdp" = (
-/obj/effect/floor_decal/corner/red/full{
- dir = 8
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/machinery/light/small{
+ dir = 4
},
-/turf/space,
-/area/centcom/control)
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/central_ring)
"bdr" = (
/obj/structure/table/stone/marble,
/obj/structure/machinery/door/firedoor,
@@ -8683,6 +8743,7 @@
/turf/simulated/floor/holofloor/wood,
/area/horizon/holodeck/source_theatre)
"bdv" = (
+/obj/structure/platform,
/turf/simulated/floor/tiled/ramp/bottom{
dir = 4
},
@@ -8701,6 +8762,14 @@
},
/turf/unsimulated/floor/wood,
/area/centcom/evac)
+"bdz" = (
+/obj/random/dirt_75,
+/obj/structure/lattice/catwalk/indoor,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/turf/simulated/floor,
+/area/horizon/maintenance/deck_3/auxatmos)
"bdD" = (
/obj/effect/floor_decal/spline/fancy/wood,
/obj/structure/bed/stool/chair/wood{
@@ -9105,10 +9174,7 @@
/obj/item/modular_computer/console/preset/ai{
dir = 8
},
-/turf/simulated/floor/bluegrid{
- name = "cooled mainframe floor";
- temperature = 278
- },
+/turf/simulated/floor,
/area/horizon/ai/chamber)
"bgu" = (
/obj/structure/cable/green{
@@ -9154,7 +9220,9 @@
/turf/unsimulated/floor,
/area/centcom/ferry)
"bgD" = (
-/turf/simulated/wall/r_wall,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/main/port)
"bgG" = (
/obj/effect/floor_decal/corner/dark_blue/full{
@@ -9710,15 +9778,12 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/auxatmos)
"bjl" = (
-/obj/effect/floor_decal/corner/mauve{
- dir = 10
+/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
},
-/obj/structure/machinery/atmospherics/unary/vent_pump/on{
- dir = 1;
- level = 2
- },
-/turf/simulated/floor/tiled,
-/area/horizon/rnd/hallway)
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/wing/port/nacelle)
"bjs" = (
/obj/effect/floor_decal/industrial/warning{
dir = 8
@@ -9825,7 +9890,10 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
},
-/turf/simulated/floor/plating,
+/obj/structure/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard)
"bjL" = (
/obj/structure/shuttle_part/ert{
@@ -9912,7 +9980,7 @@
"bkN" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/random/dirt_75,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -9947,7 +10015,7 @@
/area/antag/raider)
"bkY" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/structure/disposalpipe/segment{
@@ -10060,10 +10128,10 @@
/obj/effect/floor_decal/industrial/warning{
dir = 4
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port)
"blJ" = (
/obj/structure/railing/mapped{
@@ -10078,7 +10146,7 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/hangar/intrepid)
"blK" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -10212,7 +10280,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 8
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/cafe)
"bmS" = (
/obj/effect/map_effect/door_helper/unres,
@@ -10254,12 +10322,12 @@
/area/horizon/engineering/reactor/supermatter/mainchamber)
"bni" = (
/obj/random/dirt_75,
-/obj/random/dirt_75,
/obj/structure/cable{
icon_state = "4-8"
},
/obj/structure/machinery/alarm/north,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/port/shortcut)
"bnj" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -10446,7 +10514,7 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/atmos_crosser)
"boh" = (
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/structure/table/rack,
/obj/item/mecha_equipment/sleeper,
/obj/item/mecha_equipment/sleeper,
@@ -10492,7 +10560,7 @@
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
/obj/structure/curtain/black,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"bon" = (
/obj/random/pottedplant,
@@ -10625,6 +10693,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/effect/floor_decal/sign/cmo,
/turf/simulated/floor/tiled/white,
/area/horizon/medical/hallway/upper)
"boS" = (
@@ -10750,6 +10819,9 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 9
},
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/operations)
"bpu" = (
@@ -10774,6 +10846,10 @@
name = "Powernet Sensor - Deck 2 Engineering Subgrid";
name_tag = "Deck 2 Engineering Subgrid"
},
+/obj/structure/lattice/catwalk/indoor,
+/obj/structure/machinery/light/small{
+ dir = 1
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/engineering)
"bpB" = (
@@ -10830,7 +10906,9 @@
pixel_y = 13
},
/obj/structure/railing/mapped,
-/obj/effect/floor_decal/industrial/warning/cee,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/main/starboard)
"bpT" = (
@@ -10860,7 +10938,7 @@
/turf/simulated/floor/wood,
/area/horizon/service/cafeteria)
"bqi" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/structure/machinery/embedded_controller/radio/airlock/airlock_controller{
@@ -10876,7 +10954,7 @@
master_tag = "airlock_horizon_deck_1_aft_propulsion_2";
name = "airlock_horizon_deck_1_aft_propulsion_2"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/atmos/propulsion)
"bqj" = (
/obj/effect/floor_decal/corner_wide/blue/full{
@@ -11088,7 +11166,6 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/machinery/light/small,
/obj/structure/cable{
icon_state = "4-8"
},
@@ -11156,7 +11233,9 @@
/obj/structure/machinery/atmospherics/portables_connector{
dir = 1
},
-/turf/simulated/floor,
+/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/effect/floor_decal/industrial/warning/corner,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/far)
"bsh" = (
/turf/simulated/wall/shuttle/unique/ccia{
@@ -11177,6 +11256,7 @@
/obj/structure/machinery/embedded_controller/radio/airlock/airlock_controller{
pixel_y = 23
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor,
/area/horizon/ai/upload_foyer)
"bsv" = (
@@ -11213,6 +11293,12 @@
/area/horizon/service/chapel/main)
"bsJ" = (
/obj/random/junk,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"bsO" = (
@@ -11379,15 +11465,8 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/hangar/starboard)
"btW" = (
-/obj/structure/table/steel,
-/obj/effect/floor_decal/corner/purple{
- dir = 5
- },
-/obj/item/stack/material/steel/full{
- pixel_x = -6;
- pixel_y = 9
- },
-/turf/simulated/floor/tiled,
+/obj/structure/machinery/light/small/floor,
+/turf/simulated/floor/wood,
/area/horizon/maintenance/deck_2/wing/starboard)
"bud" = (
/obj/structure/machinery/camera/network/crescent{
@@ -11559,6 +11638,8 @@
icon_state = "0-2"
},
/obj/structure/machinery/power/apc/north,
+/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard)
"bvt" = (
@@ -11612,12 +11693,25 @@
/obj/effect/floor_decal/industrial/hatch/yellow,
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/cobweb,
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/wing_starboard)
+"bvM" = (
+/obj/structure/machinery/porta_turret,
+/obj/effect/floor_decal/industrial/warning/full,
+/obj/structure/machinery/light/small{
+ dir = 1
+ },
+/obj/structure/machinery/alarm/west,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/ai/upload)
"bvV" = (
/obj/random/dirt_75,
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"bvX" = (
/obj/structure/coatrack{
@@ -11745,7 +11839,7 @@
},
/obj/item/hullbeacon/red,
/turf/space,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"bxd" = (
/obj/structure/bed/stool/chair/office/light,
/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
@@ -11798,6 +11892,9 @@
/area/horizon/engineering/lobby)
"bxt" = (
/obj/effect/floor_decal/corner/grey/diagonal,
+/obj/structure/machinery/light/floor{
+ dir = 1
+ },
/turf/simulated/floor/tiled/white,
/area/horizon/medical/reception)
"bxA" = (
@@ -11809,6 +11906,7 @@
/obj/effect/floor_decal/corner/lime{
dir = 5
},
+/obj/structure/sign/poster/civilian/bay_55,
/turf/simulated/floor/tiled/white{
name = "cooled white floor";
temperature = 278.15
@@ -11820,7 +11918,10 @@
/obj/random/tech_supply{
pixel_y = 2
},
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/far)
"bxJ" = (
/obj/structure/table/rack,
@@ -11865,6 +11966,13 @@
},
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_2/fore)
+"bxY" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 5
+ },
+/obj/structure/machinery/light/small,
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_1/main/port)
"bya" = (
/obj/structure/stairs_railing{
dir = 4;
@@ -11897,7 +12005,7 @@
/area/horizon/rnd/hallway)
"byl" = (
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/maintenance/deck_2/wing/starboard/nacelle)
"byn" = (
/obj/structure/machinery/power/apc/low/north,
@@ -11931,7 +12039,7 @@
master_tag = "airlock_horizon_dock_deck_3_starboard_1";
name = "airlock_horizon_dock_deck_3_starboard_1"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"byt" = (
/obj/structure/machinery/atmospherics/binary/pump/fuel{
@@ -11972,8 +12080,6 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/security/evidence_storage)
"byC" = (
-/obj/random/dirt_75,
-/obj/random/dirt_75,
/obj/item/weldingtool/largetank{
pixel_y = 8;
pixel_x = 1
@@ -11982,6 +12088,7 @@
pixel_x = -8;
pixel_y = 6
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard)
"byG" = (
@@ -12127,6 +12234,15 @@
},
/turf/simulated/floor/tiled,
/area/horizon/operations/loading)
+"bzM" = (
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/wing/starboard/near)
"bzZ" = (
/obj/structure/machinery/button/remote/airlock{
dir = 8;
@@ -12772,6 +12888,12 @@
},
/turf/simulated/floor/tiled/full,
/area/horizon/engineering/locker_room)
+"bEr" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 5
+ },
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/wing/port)
"bEu" = (
/obj/structure/machinery/meter,
/obj/effect/floor_decal/corner/yellow{
@@ -12790,7 +12912,7 @@
master_tag = "airlock_horizon_deck_1_aft_port_1";
name = "airlock_horizon_deck_1_aft_port_1"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/auxatmos)
"bEA" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -12914,7 +13036,7 @@
"bFt" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/structure/disposalpipe/segment,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/turf/simulated/floor/plating,
@@ -12992,10 +13114,13 @@
/area/horizon/hallway/primary/deck_3/central)
"bGo" = (
/obj/random/junk,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 5
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port/shortcut)
"bGp" = (
/obj/structure/disposalpipe/segment{
@@ -13007,6 +13132,7 @@
/obj/random/junk,
/obj/random/dirt_75,
/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port)
"bGE" = (
@@ -13017,7 +13143,7 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/shuttle/quark/cargo_hold)
"bGJ" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/turf/simulated/floor/plating,
@@ -13040,6 +13166,9 @@
/obj/effect/floor_decal/industrial/hatch/yellow,
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/cobweb,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/wing_port)
"bGS" = (
@@ -13083,6 +13212,7 @@
/obj/structure/cable{
icon_state = "0-2"
},
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/engineering)
"bHv" = (
@@ -13115,7 +13245,7 @@
dir = 4
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/main/starboard)
"bHA" = (
/obj/effect/floor_decal/corner/dark_blue{
@@ -13290,7 +13420,7 @@
dir = 4
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/operations/starboard/far)
"bJc" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -13305,9 +13435,11 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/storage/eva)
"bJf" = (
-/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/near)
"bJk" = (
/obj/structure/cable{
@@ -13349,7 +13481,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/structure/machinery/vending/snack{
name = "Jacked Getmore Chocolate Corp";
prices = list();
@@ -13776,7 +13908,7 @@
},
/obj/structure/table/rack,
/obj/random/loot,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/holodeck)
"bMo" = (
/obj/structure/stairs/north,
@@ -13892,9 +14024,9 @@
/turf/simulated/open,
/area/horizon/maintenance/deck_2/wing/port/far)
"bMO" = (
-/obj/random/dirt_75,
/obj/structure/machinery/atmospherics/unary/vent_pump/on,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"bMX" = (
/obj/structure/machinery/portable_atmospherics/canister/empty/air,
@@ -13967,6 +14099,7 @@
icon_state = "2-8"
},
/obj/structure/machinery/alarm/east,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/civ_d2)
"bNG" = (
@@ -14013,8 +14146,8 @@
"bOg" = (
/obj/structure/machinery/porta_turret,
/obj/effect/floor_decal/industrial/warning/full,
-/obj/structure/machinery/alarm/cold/west,
-/turf/simulated/floor/tiled/dark/cooled,
+/obj/structure/machinery/alarm/west,
+/turf/simulated/floor/tiled/dark,
/area/horizon/ai/upload)
"bOl" = (
/obj/structure/shuttle_part/scc_space_ship{
@@ -14030,7 +14163,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/turf/simulated/floor,
@@ -14145,7 +14278,7 @@
dir = 4
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/research)
"bOZ" = (
/obj/structure/machinery/light,
@@ -14445,7 +14578,7 @@
/obj/structure/machinery/door/airlock/maintenance_hatch{
dir = 4
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/aft/starboard)
"bQN" = (
/obj/effect/decal/cleanable/dirt,
@@ -14453,7 +14586,6 @@
/turf/unsimulated/floor/monotile,
/area/antag/raider)
"bQO" = (
-/obj/effect/floor_decal/sign/cmo,
/obj/structure/cable/green{
icon_state = "2-8"
},
@@ -14692,6 +14824,15 @@
},
/turf/simulated/floor/marble/dark,
/area/horizon/command/bridge/minibar)
+"bSs" = (
+/obj/effect/floor_decal/corner/dark_green{
+ dir = 6
+ },
+/obj/structure/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/horizon/hangar/auxiliary)
"bSu" = (
/obj/structure/machinery/atmospherics/pipe/simple/visible/cyan,
/turf/simulated/floor/plating,
@@ -14795,7 +14936,8 @@
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/obj/structure/bed/stool/bar/padded/red,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"bTf" = (
/obj/structure/machinery/door/airlock/centcom{
@@ -14824,7 +14966,7 @@
dir = 4
},
/obj/structure/machinery/alarm/west,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/port)
"bTD" = (
/obj/item/deck/cards,
@@ -15015,11 +15157,9 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/far)
"bVg" = (
-/obj/effect/landmark{
- name = "Revenant"
- },
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/turf/simulated/floor/plating,
+/obj/structure/closet,
+/obj/random/loot,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"bVi" = (
/obj/structure/machinery/disposal/small/east{
@@ -15153,6 +15293,9 @@
/area/horizon/command/bridge/controlroom)
"bVV" = (
/obj/structure/machinery/alarm/south,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/auxatmos)
"bVZ" = (
@@ -15272,6 +15415,13 @@
},
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/atmos/turbine)
+"bWK" = (
+/obj/effect/floor_decal/corner_wide/yellow{
+ dir = 10
+ },
+/obj/structure/machinery/light/floor,
+/turf/simulated/floor/tiled,
+/area/horizon/engineering/hallway/fore)
"bWM" = (
/obj/item/paicard,
/obj/item/paicard,
@@ -15294,7 +15444,8 @@
master_tag = "airlock_horizon_dock_deck_3_starboard_1";
name = "airlock_horizon_dock_deck_3_starboard_1"
},
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/corner/dark_blue/diagonal,
+/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"bWV" = (
/obj/structure/machinery/atmospherics/pipe/simple/visible/green{
@@ -15398,7 +15549,6 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/random/dirt_75,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"bXG" = (
@@ -15423,6 +15573,9 @@
},
/obj/random/dirt_75,
/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"bXS" = (
@@ -15439,7 +15592,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/atmos)
"bXZ" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/turf/unsimulated/floor,
@@ -15496,6 +15649,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 5
},
+/obj/structure/machinery/light/small/floor,
/turf/simulated/floor/wood,
/area/horizon/service/cafeteria)
"bYO" = (
@@ -15513,6 +15667,9 @@
dir = 8;
icon_state = "pipe-c"
},
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard)
"bYQ" = (
@@ -15669,7 +15826,8 @@
master_tag = "airlock_horizon_dock_deck_3_port_5";
name = "airlock_horizon_dock_deck_3_port_5"
},
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/corner/dark_blue/diagonal,
+/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/port/docks)
"cah" = (
/turf/simulated/floor/grass/no_edge,
@@ -15688,7 +15846,7 @@
/area/horizon/engineering/hallway/fore)
"cav" = (
/obj/effect/floor_decal/industrial/warning,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/port/far)
"caw" = (
/obj/structure/table/wood,
@@ -15914,7 +16072,7 @@
},
/obj/structure/machinery/power/apc/west,
/obj/structure/cable/green,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/interstitial)
"cbU" = (
/turf/unsimulated/floor/plating,
@@ -16078,6 +16236,7 @@
master_tag = "airlock_horizon_deck_1_aft_port_1";
name = "airlock_horizon_deck_1_aft_port_1"
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/auxatmos)
"ccS" = (
@@ -16094,7 +16253,7 @@
master_tag = "airlock_horizon_dock_deck_3_starboard_3";
name = "airlock_horizon_dock_deck_3_starboard_3"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"ccY" = (
/obj/structure/bed/stool/chair/office/dark{
@@ -16357,7 +16516,9 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/yellow{
dir = 10
},
-/obj/structure/machinery/firealarm/east,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/simulated/floor/plating,
/area/horizon/engineering/storage/lower)
"cfg" = (
@@ -16470,6 +16631,9 @@
/obj/effect/floor_decal/industrial/hatch_door/yellow,
/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/starboard)
+"cfP" = (
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/maintenance/deck_2/wing/starboard)
"cfT" = (
/obj/effect/floor_decal/corner/green/diagonal,
/obj/effect/floor_decal/spline/fancy,
@@ -16572,7 +16736,11 @@
"cgw" = (
/obj/structure/cable,
/obj/structure/machinery/power/apc/west,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"cgH" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -16599,9 +16767,6 @@
/obj/random/loot,
/obj/random/junk,
/obj/effect/decal/cleanable/dirt,
-/obj/effect/floor_decal/industrial/warning{
- dir = 4
- },
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"cgR" = (
@@ -16840,6 +17005,9 @@
pixel_x = -6;
pixel_y = 3
},
+/obj/structure/machinery/light{
+ dir = 8
+ },
/turf/simulated/floor/wood,
/area/horizon/rnd/xenoarch/presentation)
"ciH" = (
@@ -16947,6 +17115,9 @@
/obj/structure/cable{
icon_state = "1-8"
},
+/obj/structure/machinery/light/floor{
+ dir = 8
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/hangar/auxiliary)
"cji" = (
@@ -17181,6 +17352,9 @@
/obj/structure/engineer_maintenance/pipe{
dir = 1
},
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/shields)
"clb" = (
@@ -17189,10 +17363,14 @@
},
/turf/simulated/floor/plating,
/area/turbolift/research/deck_1)
+"clc" = (
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/wing/port)
"cld" = (
/obj/effect/floor_decal/industrial/warning,
/obj/structure/machinery/pipedispenser,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/turf/simulated/floor/plating,
@@ -17264,6 +17442,7 @@
/obj/structure/cable/green{
icon_state = "1-8"
},
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/operations)
"cmj" = (
@@ -17301,9 +17480,6 @@
/turf/unsimulated/floor/plating,
/area/centcom/distress_prep)
"cmx" = (
-/obj/structure/machinery/light/small/emergency{
- dir = 1
- },
/obj/item/circuitboard/ghettosmes{
pixel_x = -4;
pixel_y = 3
@@ -17316,6 +17492,10 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
+/obj/effect/floor_decal/industrial/warning,
+/obj/structure/machinery/light/small{
+ dir = 1
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/wing_starboard)
"cmF" = (
@@ -17439,7 +17619,7 @@
/obj/random/dirt_75,
/obj/structure/reagent_dispensers/fueltank,
/obj/effect/floor_decal/industrial/outline/yellow,
-/turf/simulated/floor/tiled/dark,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/operations)
"cnw" = (
/obj/effect/floor_decal/corner/mauve/diagonal,
@@ -17482,7 +17662,7 @@
/turf/simulated/floor/tiled,
/area/horizon/medical/paramedic)
"cnN" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/effect/decal/cleanable/dirt,
@@ -17517,9 +17697,6 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
- },
/obj/effect/decal/cleanable/dirt,
/obj/structure/disposalpipe/segment{
dir = 1;
@@ -17531,7 +17708,9 @@
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 1
},
-/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard)
"coi" = (
@@ -17609,7 +17788,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/bluespace_drive/monitoring)
"coJ" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -17656,10 +17835,9 @@
/turf/simulated/floor/tiled,
/area/horizon/security/hallway)
"coT" = (
-/obj/structure/machinery/alarm/east,
-/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
-/area/horizon/maintenance/deck_2/cryo)
+/obj/effect/floor_decal/industrial/warning/cee,
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_1/main/starboard)
"coX" = (
/obj/structure/sink{
dir = 8;
@@ -17689,7 +17867,10 @@
/obj/structure/machinery/light/small,
/obj/random/dirt_75,
/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 5
+ },
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"cpn" = (
/obj/structure/machinery/atmospherics/unary/engine/scc_ship_engine,
@@ -17843,6 +18024,10 @@
name = "airlock_horizon_deck_1_fore_1"
},
/obj/effect/decal/cleanable/dirt,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/hangar/starboard)
"cqt" = (
@@ -17881,6 +18066,9 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"cqB" = (
+/obj/structure/platform{
+ dir = 1
+ },
/turf/simulated/floor/tiled/ramp/bottom{
dir = 8
},
@@ -17914,9 +18102,9 @@
/obj/effect/floor_decal/industrial/warning{
dir = 9
},
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/cafe)
"crp" = (
/obj/effect/floor_decal/corner/yellow{
@@ -17960,6 +18148,9 @@
/area/horizon/engineering/atmos/propulsion/starboard)
"crw" = (
/obj/structure/grille/broken,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/operations/machinist)
"crz" = (
@@ -18136,7 +18327,7 @@
/turf/unsimulated/floor,
/area/centcom/holding)
"csu" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/structure/table/rack,
@@ -18971,6 +19162,9 @@
/obj/random/dirt_75,
/obj/random/dirt_75,
/obj/structure/machinery/floodlight/randomcharge,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard)
"cxm" = (
@@ -19050,7 +19244,7 @@
dir = 4;
req_one_access = list(12)
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/wing/port/far)
"cxJ" = (
/obj/structure/cable{
@@ -19082,6 +19276,16 @@
},
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/starboard)
+"cxP" = (
+/obj/effect/floor_decal/industrial/hatch/red,
+/obj/effect/floor_decal/industrial/warning/cee{
+ dir = 1
+ },
+/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/command/bridge/selfdestruct)
"cxQ" = (
/obj/structure/machinery/light,
/obj/structure/machinery/computer/bluespacedrivecontrol{
@@ -19262,9 +19466,6 @@
/obj/item/stock_parts/console_screen,
/obj/item/stack/cable_coil/random,
/obj/item/stack/cable_coil/random,
-/obj/structure/machinery/light/small/emergency{
- dir = 4
- },
/turf/simulated/floor/carpet/rubber,
/area/horizon/maintenance/deck_1/workshop)
"cyU" = (
@@ -19417,11 +19618,12 @@
/turf/simulated/floor/bluegrid/server,
/area/horizon/rnd/server)
"czN" = (
-/obj/structure/railing/mapped,
-/obj/structure/lattice/catwalk/indoor,
-/obj/random/dirt_75,
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/research)
+/obj/effect/floor_decal/corner/white{
+ dir = 5
+ },
+/obj/structure/machinery/atmospherics/unary/vent_scrubber/on,
+/turf/simulated/floor/tiled,
+/area/horizon/rnd/hallway)
"czO" = (
/obj/effect/floor_decal/corner/dark_blue{
dir = 6
@@ -19477,6 +19679,7 @@
dir = 8;
icon_state = "pipe-c"
},
+/obj/structure/lattice/catwalk/indoor/grate/dark/damaged,
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/cafe)
"cAb" = (
@@ -19651,14 +19854,16 @@
/obj/structure/cable/green{
icon_state = "2-8"
},
+/obj/structure/machinery/light/floor,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/shuttle/intrepid/main_compartment)
"cBy" = (
+/obj/random/maintenance_junk_or_loot,
/obj/effect/floor_decal/industrial/warning{
- dir = 4
+ dir = 8
},
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_1/main/interstitial)
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/wing/port/far)
"cBz" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden{
dir = 4
@@ -19681,7 +19886,7 @@
master_tag = "airlock_horizon_deck_3_aft_1";
name = "airlock_horizon_deck_3_aft_1"
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"cBJ" = (
/obj/effect/floor_decal/corner/brown{
@@ -19842,10 +20047,11 @@
master_tag = "airlock_horizon_dock_deck_3_starboard_2";
name = "airlock_horizon_dock_deck_3_starboard_2"
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/corner/dark_blue/diagonal,
+/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"cCU" = (
/obj/effect/floor_decal/spline/plain/cee{
@@ -19877,7 +20083,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 5
},
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"cDb" = (
@@ -20123,9 +20329,10 @@
/turf/simulated/floor/tiled/white,
/area/horizon/rnd/conference)
"cFn" = (
-/obj/effect/floor_decal/industrial/outline/grey,
-/obj/structure/railing/mapped,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"cFq" = (
/obj/effect/floor_decal/corner/dark_green{
@@ -20139,26 +20346,23 @@
/area/horizon/crew/fitness/changing)
"cFr" = (
/obj/structure/machinery/portable_atmospherics/canister/air,
-/obj/structure/window/reinforced{
+/obj/structure/machinery/light/small{
dir = 8
},
-/obj/structure/machinery/light/small/emergency{
- dir = 8
- },
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"cFs" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 6
- },
/obj/structure/cable/green{
icon_state = "1-2"
},
/obj/effect/floor_decal/industrial/hatch/red,
-/obj/effect/floor_decal/industrial/warning/corner{
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/warning{
dir = 8
},
-/turf/simulated/floor/tiled/dark,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/command/bridge/selfdestruct)
"cFC" = (
/obj/structure/filingcabinet{
@@ -20370,9 +20574,6 @@
/obj/effect/floor_decal/corner/dark_green{
dir = 9
},
-/obj/structure/machinery/light{
- dir = 8
- },
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_1/central)
"cHk" = (
@@ -20556,7 +20757,7 @@
/turf/simulated/floor/tiled/white,
/area/horizon/rnd/conference)
"cII" = (
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/effect/floor_decal/corner/black/diagonal,
/turf/simulated/floor/tiled/dark,
/area/shuttle/burglar)
@@ -20666,9 +20867,6 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
- },
/obj/effect/decal/cleanable/dirt,
/obj/structure/disposalpipe/segment{
icon_state = "pipe-c"
@@ -20802,13 +21000,9 @@
/turf/unsimulated/floor/plating,
/area/shuttle/syndicate_elite)
"cJN" = (
-/obj/structure/platform_stairs/south_north_solo{
- dir = 1
- },
-/obj/structure/platform{
- dir = 8
- },
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning,
+/obj/random/dirt_75,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"cJO" = (
/obj/structure/machinery/door/firedoor,
@@ -20908,7 +21102,7 @@
name = "airlock_horizon_deck_1_aft_propulsion_1"
},
/obj/effect/map_effect/marker_helper/airlock/interior,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/atmos/propulsion/starboard)
"cKs" = (
/obj/effect/floor_decal/industrial/outline/security,
@@ -21027,7 +21221,8 @@
/area/horizon/engineering/atmos/air)
"cLM" = (
/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/auxatmos)
"cLT" = (
/obj/effect/floor_decal/spline/fancy/wood{
@@ -21044,6 +21239,7 @@
"cLU" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden,
/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/platform_deco,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"cLX" = (
@@ -21112,7 +21308,7 @@
dir = 1
},
/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"cMB" = (
/obj/structure/machinery/atmospherics/unary/vent_pump/on{
dir = 8
@@ -21120,6 +21316,9 @@
/obj/effect/floor_decal/industrial/warning{
dir = 8
},
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/simulated/floor/plating,
/area/horizon/engineering/storage/lower)
"cMK" = (
@@ -21377,7 +21576,7 @@
dir = 1
},
/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"cOo" = (
/obj/structure/machinery/embedded_controller/radio/simple_docking_controller{
frequency = 1380;
@@ -21392,6 +21591,9 @@
"cOz" = (
/obj/structure/table/rack,
/obj/random/contraband,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/far)
"cOB" = (
@@ -21458,7 +21660,7 @@
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/auxatmos)
"cOY" = (
/obj/structure/table/wood,
@@ -21490,11 +21692,10 @@
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_1/central)
"cPd" = (
-/obj/random/dirt_75,
-/obj/structure/cable,
-/obj/structure/machinery/power/apc/low/south,
-/turf/simulated/floor/tiled/dark,
-/area/horizon/maintenance/deck_1/main/port/shortcut)
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/maintenance/deck_2/wing/starboard)
"cPq" = (
/obj/effect/shuttle_landmark/horizon/exterior/deck_1/starboard_propulsion,
/turf/template_noop,
@@ -21877,11 +22078,8 @@
/obj/effect/floor_decal/industrial/warning{
dir = 9
},
-/obj/structure/machinery/light/small{
- dir = 4
- },
/obj/random/junk,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/interstitial)
"cRW" = (
/obj/structure/machinery/light/small{
@@ -22011,6 +22209,7 @@
/obj/structure/cable{
icon_state = "2-4"
},
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/engineering)
"cSA" = (
@@ -22122,6 +22321,9 @@
/area/horizon/medical/ward)
"cTn" = (
/obj/structure/bed/stool,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port)
"cTp" = (
@@ -22462,6 +22664,11 @@
},
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/starboard)
+"cVh" = (
+/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/wing/port/far)
"cVl" = (
/obj/structure/machinery/door/airlock/centcom{
name = "Arrival Hangar Maintenance";
@@ -22744,7 +22951,7 @@
cycle_to_external_air = 1
},
/obj/effect/map_effect/marker_helper/airlock/interior,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/shuttle/quark/cargo_hold)
"cWP" = (
/obj/effect/floor_decal/corner/red/diagonal,
@@ -22809,7 +23016,10 @@
/area/centcom/legion)
"cXF" = (
/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/corner/brown{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"cXG" = (
/obj/effect/floor_decal/industrial/hatch/yellow,
@@ -22963,7 +23173,7 @@
dir = 4
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/turf/simulated/floor/tiled/full,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/security/evidence_storage)
"cYv" = (
/obj/structure/machinery/door/airlock/glass_security{
@@ -23184,6 +23394,7 @@
master_tag = "airlock_horizon_deck_1_fore_1";
name = "airlock_horizon_deck_1_fore_1"
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/hangar/starboard)
"cZT" = (
@@ -23246,6 +23457,9 @@
dir = 9
},
/obj/effect/floor_decal/industrial/hatch/yellow,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/shields)
"cZY" = (
@@ -23255,10 +23469,10 @@
dir = 4;
pixel_y = 3
},
-/turf/simulated/floor/bluegrid{
- name = "cooled mainframe floor";
- temperature = 278
+/obj/effect/floor_decal/corner/dark_blue{
+ dir = 9
},
+/turf/simulated/floor/tiled/dark,
/area/horizon/ai/chamber)
"dab" = (
/obj/effect/floor_decal/corner/white/diagonal,
@@ -23285,7 +23499,7 @@
name = "Security Maintenance";
req_one_access = list(12,47)
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/research)
"dad" = (
/obj/structure/shuttle_part/mercenary/small{
@@ -23901,7 +24115,7 @@
/obj/item/material/shard{
icon_state = "small"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard)
"deZ" = (
/obj/structure/table/reinforced/glass,
@@ -24104,6 +24318,9 @@
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
+/obj/structure/machinery/light/floor{
+ dir = 1
+ },
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/reactor/indra/mainchamber)
"dfN" = (
@@ -24143,6 +24360,7 @@
name = "Powernet Sensor - Deck 1 Engineering Subgrid";
name_tag = "Deck 1 Engineering Subgrid"
},
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/engineering/lower)
"dgo" = (
@@ -24243,9 +24461,6 @@
"dgT" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden,
-/obj/effect/floor_decal/industrial/warning{
- dir = 8
- },
/obj/structure/cable/green{
icon_state = "2-4"
},
@@ -24255,6 +24470,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
},
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/medical/cryo)
"dhd" = (
@@ -24290,7 +24506,7 @@
/obj/structure/table/rack,
/obj/random/loot,
/obj/effect/floor_decal/industrial/warning,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/turf/simulated/floor,
@@ -24316,6 +24532,10 @@
/obj/structure/cable/green{
icon_state = "0-4"
},
+/obj/structure/lattice/catwalk/indoor,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/medical)
"dhr" = (
@@ -24339,6 +24559,9 @@
dir = 4;
icon_state = "pipe-j2"
},
+/obj/effect/floor_decal/corner_wide/green{
+ dir = 8
+ },
/turf/simulated/floor/tiled/white,
/area/horizon/medical/hallway/upper)
"dhv" = (
@@ -24484,7 +24707,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden{
dir = 5
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -24650,6 +24873,7 @@
master_tag = "airlock_horizon_deck_2_aft_sm";
name = "airlock_horizon_deck_2_aft_sm"
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/engineering/reactor/supermatter/airlock)
"djb" = (
@@ -24742,7 +24966,7 @@
master_tag = "airlock_horizon_dock_deck_3_starboard_3";
name = "airlock_horizon_dock_deck_3_starboard_3"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"djC" = (
/obj/structure/table/reinforced/steel,
@@ -24811,8 +25035,8 @@
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
-/obj/structure/machinery/light/small/emergency,
-/turf/simulated/floor/plating,
+/obj/structure/machinery/light/small,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port)
"dkb" = (
/turf/simulated/floor/plating,
@@ -25351,7 +25575,7 @@
/obj/item/storage/bag/inflatable,
/obj/random/loot,
/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/auxatmos)
"dnf" = (
/obj/structure/machinery/conveyor{
@@ -25447,6 +25671,7 @@
/area/horizon/maintenance/deck_2/research)
"dnK" = (
/obj/item/wrench,
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/medical/cryo)
"dnM" = (
@@ -25470,6 +25695,15 @@
/obj/structure/machinery/atmospherics/unary/vent_scrubber/on,
/turf/simulated/floor/tiled,
/area/horizon/engineering/hallway/aft)
+"dnX" = (
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/obj/effect/floor_decal/corner/dark_blue{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/ai/upload_foyer)
"doc" = (
/obj/structure/machinery/light{
dir = 4
@@ -25541,6 +25775,9 @@
/obj/structure/railing/mapped{
dir = 8
},
+/obj/effect/floor_decal/industrial/warning{
+ dir = 6
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/hangar/starboard)
"dos" = (
@@ -25598,7 +25835,7 @@
name = "Distro to Airlock";
target_pressure = 200
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/port/far)
"doW" = (
/obj/structure/shuttle_part/tcfl{
@@ -25649,13 +25886,15 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/lattice/catwalk/indoor/grate/damaged{
- color = "#4c535b"
- },
/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/simulated/floor/plating,
+/obj/structure/machinery/door/firedoor{
+ req_one_access = list(24,11,67,73);
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/hatch_door/yellow,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/main/port)
"dpf" = (
/obj/structure/cable{
@@ -25689,6 +25928,9 @@
/obj/structure/engineer_maintenance/pipe{
dir = 1
},
+/obj/structure/machinery/light{
+ dir = 4
+ },
/turf/simulated/floor/tiled,
/area/horizon/medical/gen_treatment)
"dpt" = (
@@ -25983,6 +26225,12 @@
/obj/random/pottedplant,
/turf/simulated/floor/wood,
/area/horizon/service/cafeteria)
+"dqJ" = (
+/obj/structure/ladder{
+ pixel_y = 16
+ },
+/turf/simulated/open/airless,
+/area/horizon/exterior/no_shields)
"dqK" = (
/obj/structure/machinery/atmospherics/unary/vent_pump{
external_pressure_bound = 0;
@@ -26011,6 +26259,10 @@
pixel_x = -5;
pixel_y = 6
},
+/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"dqQ" = (
@@ -26022,6 +26274,7 @@
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/machinery/alarm/north,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/port)
"dqR" = (
@@ -26071,6 +26324,9 @@
/obj/structure/machinery/power/breakerbox/activated{
RCon_tag = "Service Substation"
},
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/civ_d2)
"drf" = (
@@ -26215,6 +26471,7 @@
"dsf" = (
/obj/item/stack/rods,
/obj/effect/decal/cleanable/dirt,
+/obj/structure/platform,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/operations/starboard)
"dsj" = (
@@ -26314,7 +26571,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 6
},
-/turf/simulated/floor/carpet/rubber,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/aft)
"dsP" = (
/obj/structure/machinery/light{
@@ -26351,15 +26608,18 @@
/turf/simulated/floor/reinforced/airless,
/area/horizon/exterior)
"dta" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled,
+/obj/structure/machinery/atmospherics/unary/vent_scrubber/on,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard)
"dtb" = (
/obj/effect/floor_decal/industrial/warning/cee{
dir = 1
},
/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/central_ring)
"dtc" = (
/obj/structure/window/reinforced{
@@ -26644,6 +26904,7 @@
/area/horizon/holodeck/source_cafe)
"dvg" = (
/obj/structure/machinery/alarm/north,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/atmos_crosser)
"dvk" = (
@@ -26656,6 +26917,7 @@
name = "airlock_horizon_deck_3_aft_1"
},
/obj/effect/decal/cleanable/dirt,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"dvo" = (
@@ -26683,10 +26945,10 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/lattice/catwalk/indoor/grate/damaged{
- color = "#4c535b"
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard)
"dvv" = (
/obj/structure/machinery/door/airlock/glass_engineering{
@@ -27045,6 +27307,7 @@
/obj/structure/machinery/atmospherics/unary/vent_pump/on{
dir = 1
},
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/atmos/storage_maintenance)
"dxY" = (
@@ -27198,7 +27461,6 @@
/obj/structure/cable{
icon_state = "1-4"
},
-/obj/random/dirt_75,
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
@@ -27254,7 +27516,7 @@
/area/horizon/security/forensic_laboratory)
"dzv" = (
/obj/effect/floor_decal/industrial/warning,
-/turf/simulated/floor/carpet/rubber,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/aft)
"dzz" = (
/obj/effect/floor_decal/corner/dark_green/diagonal,
@@ -27326,7 +27588,7 @@
dir = 4
},
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/turf/simulated/floor/plating,
@@ -27351,7 +27613,7 @@
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"dAa" = (
/obj/effect/floor_decal/industrial/loading/research{
@@ -27367,7 +27629,10 @@
/obj/structure/closet/crate,
/obj/random/loot,
/obj/random/loot,
-/turf/simulated/floor,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/security/port)
"dAj" = (
/obj/structure/bed/stool/chair/padded/brown{
@@ -27410,6 +27675,10 @@
name_tag = "Operations Subgrid"
},
/obj/structure/machinery/power/apc/low/north,
+/obj/structure/lattice/catwalk/indoor,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/operations)
"dAp" = (
@@ -27492,7 +27761,7 @@
/obj/effect/floor_decal/industrial/hatch_door/engineering{
dir = 1
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/storage/lower)
"dAO" = (
/obj/structure/cable/green{
@@ -27596,7 +27865,7 @@
/area/horizon/holodeck/source_battlemonsters)
"dBq" = (
/obj/effect/floor_decal/industrial/warning,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"dBs" = (
/obj/effect/floor_decal/spline/plain{
@@ -27736,7 +28005,7 @@
/area/horizon/service/cafeteria)
"dCv" = (
/obj/effect/floor_decal/industrial/warning,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled,
/area/horizon/maintenance/deck_2/wing/starboard/nacelle)
"dCx" = (
/obj/effect/floor_decal/corner/brown{
@@ -27791,7 +28060,7 @@
dir = 1
},
/obj/structure/reagent_dispensers/watertank,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/teleporter)
"dCJ" = (
/obj/structure/bed/stool/chair/office/dark,
@@ -28153,7 +28422,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -28207,7 +28476,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 10
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/cafe)
"dFc" = (
/obj/effect/floor_decal/corner_wide/yellow{
@@ -28287,7 +28556,8 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 9
},
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard)
"dFI" = (
/obj/effect/floor_decal/corner/dark_green{
@@ -28335,11 +28605,21 @@
},
/obj/structure/table/rack,
/obj/random/loot,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/holodeck)
+"dFV" = (
+/obj/effect/floor_decal/corner_wide/yellow{
+ dir = 9
+ },
+/obj/structure/cable/green{
+ icon_state = "1-2"
+ },
+/obj/structure/machinery/alarm/west,
+/turf/simulated/floor/tiled,
+/area/horizon/engineering/hallway/aft)
"dFW" = (
/obj/effect/floor_decal/spline/plain{
dir = 1
@@ -28400,7 +28680,7 @@
dir = 4
},
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/tiled/dark,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/port)
"dGi" = (
/obj/effect/floor_decal/corner/dark_blue{
@@ -28549,7 +28829,8 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"dHn" = (
/obj/structure/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{
@@ -28857,7 +29138,7 @@
name = "airlock_horizon_dock_deck_3_port_2"
},
/obj/effect/map_effect/marker_helper/airlock/interior,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/port/docks)
"dJw" = (
/obj/effect/floor_decal/spline/fancy/wood{
@@ -28928,6 +29209,7 @@
/obj/structure/cable/green{
icon_state = "1-4"
},
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor,
/area/horizon/maintenance/substation/civ_d3)
"dJI" = (
@@ -28974,13 +29256,11 @@
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_2/central)
"dKr" = (
-/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/random/loot{
pixel_x = -10;
pixel_y = -11
},
-/obj/random/dirt_75,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"dKt" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -29020,7 +29300,7 @@
/obj/random/tech_supply,
/obj/random/tech_supply,
/obj/structure/machinery/firealarm/west,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/drone_fabrication)
"dKE" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -29041,9 +29321,8 @@
/turf/simulated/floor/plating,
/area/horizon/shuttle/intrepid/starboard_compartment)
"dKI" = (
-/obj/structure/railing/mapped,
/obj/effect/floor_decal/industrial/warning,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"dKN" = (
/obj/structure/shuttle/engine/propulsion/burst,
@@ -29159,6 +29438,13 @@
/obj/effect/shuttle_landmark/lift/morgue_bottom,
/turf/simulated/floor/plating,
/area/horizon/medical/morgue)
+"dLS" = (
+/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/wing/port/near)
"dLT" = (
/obj/effect/floor_decal/corner/mauve{
dir = 10
@@ -29197,13 +29483,14 @@
},
/area/centcom/holding)
"dMd" = (
-/obj/structure/cable/green{
- icon_state = "4-8"
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
},
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_1/operations/starboard/far)
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_1/main/interstitial)
"dMr" = (
/obj/structure/railing/mapped{
dir = 1
@@ -29402,7 +29689,6 @@
dir = 9
},
/obj/random/junk,
-/obj/random/canister/restricted,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"dNP" = (
@@ -29436,6 +29722,13 @@
/obj/item/pen,
/turf/simulated/floor/carpet,
/area/horizon/command/bridge/meeting_room)
+"dOk" = (
+/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_1/main/port)
"dOn" = (
/obj/effect/floor_decal/industrial/warning{
dir = 4
@@ -29545,7 +29838,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/turbolift/scc_ship/morgue_lift)
"dOS" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/item/storage/toolbox/electrical{
@@ -29634,7 +29927,7 @@
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/aft/port/far)
"dPE" = (
/obj/structure/flora/ausbushes/fullgrass,
@@ -29735,10 +30028,14 @@
/turf/simulated/floor/tiled,
/area/horizon/engineering/locker_room)
"dQk" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
-/turf/simulated/floor,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/random/dirt_75,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/security/port)
"dQl" = (
/obj/structure/bed/stool/chair/padded/red{
@@ -29770,16 +30067,17 @@
/obj/structure/cable{
icon_state = "0-2"
},
-/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/wing_port)
"dQA" = (
-/obj/effect/floor_decal/corner/mauve{
- dir = 5
+/obj/structure/table/standard,
+/obj/structure/bedsheetbin,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
},
-/obj/structure/machinery/atmospherics/unary/vent_scrubber/on,
-/turf/simulated/floor/tiled,
-/area/horizon/rnd/hallway)
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/wing/port/near)
"dQF" = (
/obj/structure/flora/pottedplant{
icon_state = "plant-22"
@@ -30078,6 +30376,9 @@
"dSz" = (
/obj/structure/machinery/alarm/west,
/obj/effect/decal/cleanable/dirt,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 6
+ },
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/starboard)
"dSC" = (
@@ -30089,15 +30390,13 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"dSD" = (
-/obj/structure/machinery/light/small{
- dir = 4
- },
/obj/structure/cable{
icon_state = "1-2"
},
/obj/structure/cable{
icon_state = "1-8"
},
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/civ_d2)
"dSJ" = (
@@ -30168,7 +30467,11 @@
/area/horizon/command/bridge/supply)
"dTn" = (
/obj/structure/trash_pile,
-/turf/simulated/floor/plating,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard)
"dTq" = (
/obj/structure/cable{
@@ -30181,7 +30484,7 @@
dir = 9
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard)
"dTu" = (
@@ -30215,9 +30518,6 @@
/area/centcom/bar)
"dTK" = (
/obj/structure/extinguisher_cabinet/east,
-/obj/effect/floor_decal/industrial/warning/corner{
- dir = 4
- },
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 9
},
@@ -30228,12 +30528,19 @@
c_tag = "Bridge - Restricted Area";
dir = 1
},
-/turf/simulated/floor/tiled/dark/full,
+/obj/effect/floor_decal/corner/dark_blue{
+ dir = 6
+ },
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/ai/upload_foyer)
"dTO" = (
/obj/effect/decal/cleanable/dirt,
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor,
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/security/port)
"dTW" = (
/obj/structure/machinery/door/firedoor,
@@ -30357,6 +30664,7 @@
master_tag = "airlock_horizon_deck_2_starboard_aft";
name = "airlock_horizon_deck_2_starboard_aft"
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"dUU" = (
@@ -30400,14 +30708,13 @@
/turf/simulated/floor/tiled/white,
/area/horizon/rnd/xenoarch/atrium)
"dUZ" = (
-/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/obj/effect/floor_decal/industrial/warning,
-/obj/structure/machinery/door/firedoor{
- req_one_access = list(24,11,67,73);
- dir = 4
+/obj/random/maintenance_junk_or_loot,
+/obj/random/dirt_75,
+/obj/structure/machinery/light/small{
+ dir = 8
},
/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_1/main/starboard)
+/area/horizon/maintenance/deck_2/wing/port/far)
"dVf" = (
/obj/effect/floor_decal/corner/mauve{
dir = 1
@@ -30548,14 +30855,12 @@
/turf/simulated/floor/tiled/white,
/area/merchant_station)
"dWf" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
- },
/obj/item/hoist_kit,
/obj/structure/sign/nosmoking_2{
pixel_x = -32
},
-/turf/simulated/floor/plating,
+/obj/random/dirt_75,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"dWp" = (
/obj/structure/disposalpipe/segment,
@@ -30619,7 +30924,7 @@
icon_state = "railing0-1";
name = "railing"
},
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/turf/unsimulated/floor/plating,
/area/centcom/specops)
"dWR" = (
@@ -30681,7 +30986,7 @@
icon_state = "4-8"
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/main/starboard)
"dXk" = (
@@ -30720,6 +31025,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 10
},
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/engineering/drone_fabrication)
"dXu" = (
@@ -30865,14 +31171,14 @@
/turf/simulated/wall/r_wall,
/area/horizon/operations/ship_supply_warehouse)
"dYE" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/railing/mapped{
- dir = 8
+/obj/effect/floor_decal/industrial/outline/grey,
+/obj/effect/decal/cleanable/dirt,
+/obj/random/canister/restricted,
+/obj/structure/machinery/light/small{
+ dir = 1
},
-/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/wing/starboard/near)
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/maintenance/deck_1/main/port)
"dYF" = (
/obj/effect/floor_decal/industrial/outline/service,
/obj/structure/closet/secure_closet/hydroponics,
@@ -30997,7 +31303,7 @@
pixel_y = 11;
req_one_access = list(12,31,73,76,77,78)
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/shuttle/canary)
"dZx" = (
/obj/structure/cable/green{
@@ -31022,6 +31328,9 @@
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 4
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"dZC" = (
@@ -31290,8 +31599,10 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 8
},
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"ebn" = (
/obj/structure/railing/mapped{
@@ -31927,7 +32238,10 @@
dir = 4
},
/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/auxatmos)
"eeS" = (
/obj/effect/step_trigger/thrower/shuttle/east,
@@ -32159,7 +32473,7 @@
dir = 4
},
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard/far)
"efN" = (
/obj/structure/railing/mapped,
@@ -32374,7 +32688,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 8
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/turf/simulated/floor/plating,
@@ -32395,7 +32709,10 @@
/obj/structure/table/rack,
/obj/random/loot,
/obj/random/loot,
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/research)
"ehx" = (
@@ -32503,6 +32820,9 @@
},
/obj/effect/floor_decal/industrial/outline/grey,
/obj/structure/machinery/papershredder,
+/obj/structure/machinery/light{
+ dir = 1
+ },
/turf/simulated/floor/tiled,
/area/horizon/security/investigations_hallway)
"eif" = (
@@ -32559,7 +32879,7 @@
/area/horizon/weapons/longbow)
"eiJ" = (
/obj/random/loot,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/random/contraband,
@@ -32568,7 +32888,7 @@
dir = 1
},
/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/cafe)
"eiK" = (
/obj/structure/cable/green{
@@ -32653,7 +32973,6 @@
dir = 8
},
/obj/effect/decal/cleanable/generic,
-/obj/structure/machinery/light/small/emergency,
/turf/simulated/floor/carpet/rubber,
/area/horizon/maintenance/deck_1/workshop)
"ejJ" = (
@@ -32677,6 +32996,10 @@
"ejX" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/machinery/atmospherics/unary/vent_pump/on,
+/obj/effect/floor_decal/industrial/warning,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/main/starboard)
"ekb" = (
@@ -32725,6 +33048,14 @@
},
/turf/unsimulated/floor,
/area/antag/mercenary)
+"eks" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
+/obj/random/dirt_75,
+/obj/random/dirt_75,
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_3/security/port)
"ekt" = (
/obj/structure/railing/mapped,
/obj/structure/lattice/catwalk/indoor,
@@ -32793,18 +33124,16 @@
/turf/simulated/floor/tiled,
/area/horizon/service/hydroponics)
"ekN" = (
-/obj/structure/platform/ledge/dark{
+/obj/effect/floor_decal/industrial/warning{
dir = 4
},
-/obj/structure/railing/mapped{
- dir = 8
- },
-/turf/simulated/open,
-/area/horizon/maintenance/deck_2/cryo)
+/turf/simulated/floor,
+/area/horizon/maintenance/deck_3/aft/starboard/far)
"ekP" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden{
dir = 10
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor,
/area/horizon/maintenance/deck_2/wing/port/far)
"ekR" = (
@@ -32831,7 +33160,7 @@
/area/centcom/bar)
"ekY" = (
/obj/structure/machinery/atmospherics/unary/vent_pump/high_volume,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/effect/map_effect/marker/airlock{
@@ -32839,6 +33168,7 @@
master_tag = "airlock_horizon_deck_1_aft_propulsion_1";
name = "airlock_horizon_deck_1_aft_propulsion_1"
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/engineering/atmos/propulsion/starboard)
"elb" = (
@@ -32864,7 +33194,7 @@
pixel_y = 35;
dir = 4
},
-/turf/simulated/floor/reinforced/airless,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/ai/upload_foyer)
"elq" = (
/obj/structure/machinery/light{
@@ -32964,6 +33294,12 @@
},
/turf/unsimulated/floor,
/area/centcom/bar)
+"elV" = (
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/wing/port)
"elY" = (
/obj/effect/landmark{
name = "Syndicate-Spawn"
@@ -33010,7 +33346,10 @@
dir = 5
},
/obj/structure/reagent_dispensers/fueltank,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/drone_fabrication)
"emr" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -33049,6 +33388,7 @@
},
/obj/structure/machinery/power/apc/low/west,
/obj/structure/machinery/light/small,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/hangar)
"emA" = (
@@ -33070,7 +33410,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/structure/cable/green{
@@ -33127,6 +33467,9 @@
/obj/structure/cable{
icon_state = "1-2"
},
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/elevator)
"enf" = (
@@ -33512,13 +33855,13 @@
"epn" = (
/obj/effect/floor_decal/industrial/hatch/yellow,
/obj/structure/reagent_dispensers/extinguisher,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/structure/sign/radiation{
pixel_y = 32
},
-/turf/simulated/floor/carpet/rubber,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/aft)
"epo" = (
/obj/effect/floor_decal/corner_wide/yellow{
@@ -33527,6 +33870,7 @@
/obj/structure/machinery/status_display{
pixel_y = -32
},
+/obj/structure/machinery/light,
/turf/simulated/floor/tiled,
/area/horizon/engineering/hallway/fore)
"epv" = (
@@ -33859,7 +34203,7 @@
/area/horizon/maintenance/deck_1/main/port)
"esh" = (
/obj/effect/floor_decal/industrial/outline/yellow,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard)
"esi" = (
/obj/effect/floor_decal/industrial/warning{
@@ -33935,6 +34279,7 @@
/area/horizon/operations/office)
"esN" = (
/obj/effect/decal/cleanable/dirt,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/teleporter)
"esQ" = (
@@ -33942,7 +34287,10 @@
dir = 4
},
/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 6
+ },
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"esV" = (
/obj/effect/floor_decal/spline/plain/corner{
@@ -34200,17 +34548,10 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/atmos/propulsion/starboard)
"euC" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/railing/mapped{
- dir = 1
- },
-/obj/structure/railing/mapped{
- dir = 8
- },
/obj/random/maintenance_junk_or_loot,
+/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/wing/starboard/near)
+/area/horizon/maintenance/deck_1/operations/starboard)
"euF" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -34257,7 +34598,7 @@
/obj/effect/landmark{
name = "Revenant"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port)
"euN" = (
/obj/structure/machinery/atmospherics/pipe/simple/visible/red{
@@ -34412,15 +34753,19 @@
/turf/simulated/floor/tiled/dark/full,
/area/shuttle/mercenary)
"ewx" = (
-/obj/structure/machinery/light/small/emergency{
- dir = 8
- },
/obj/structure/cable/green{
icon_state = "0-2"
},
/obj/structure/machinery/power/apc/hyper/north,
/obj/effect/floor_decal/industrial/hatch/red,
-/turf/simulated/floor/tiled/dark,
+/obj/effect/floor_decal/industrial/warning/corner,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/command/bridge/selfdestruct)
"ewy" = (
/obj/effect/floor_decal/corner/yellow{
@@ -34482,16 +34827,20 @@
/turf/simulated/floor/tiled/white,
/area/horizon/security/washroom)
"ewG" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "4-8"
},
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/random/dirt_75,
-/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/wing/port/nacelle)
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 8
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/wing/starboard/near)
"ewO" = (
/obj/structure/machinery/chemical_dispenser/bar_alc/full{
pixel_y = 7
@@ -34616,10 +34965,8 @@
/area/shuttle/skipjack)
"exE" = (
/obj/structure/bed/stool/chair/office/dark,
-/obj/effect/floor_decal/industrial/warning/corner{
- dir = 1
- },
-/turf/simulated/floor/plating,
+/obj/random/dirt_75,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"exF" = (
/obj/structure/shuttle_part/scc_space_ship{
@@ -34688,7 +35035,7 @@
name = "airlock_horizon_deck_3_aft_1";
frequency = 1001
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"eyg" = (
/obj/structure/table/steel,
@@ -34717,8 +35064,8 @@
/obj/structure/cable{
icon_state = "0-2"
},
-/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/structure/machinery/power/apc/high/east,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/engineering/drone_fabrication)
"eyq" = (
@@ -34780,10 +35127,11 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 9
},
-/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 1
+/obj/structure/lattice/catwalk/indoor,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
},
-/turf/simulated/floor/tiled/dark,
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/auxatmos)
"eyJ" = (
/obj/effect/floor_decal/industrial/outline/red,
@@ -35028,7 +35376,7 @@
/obj/random/dirt_75,
/obj/random/loot,
/obj/random/loot,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/aft/port)
"eAx" = (
/obj/effect/map_effect/window_spawner/full/reinforced/firedoor,
@@ -35064,7 +35412,7 @@
/area/horizon/shuttle/quark/cargo_hold)
"eAX" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/effect/floor_decal/industrial/warning{
@@ -35078,6 +35426,9 @@
dir = 1
},
/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port)
"eBd" = (
@@ -35160,13 +35511,17 @@
},
/area/centcom/holding)
"eBH" = (
-/obj/effect/floor_decal/industrial/warning/cee{
+/obj/effect/floor_decal/corner/black{
+ dir = 9
+ },
+/obj/structure/railing/mapped{
+ dir = 8
+ },
+/obj/structure/machinery/light/floor{
dir = 4
},
-/obj/structure/closet,
-/obj/random/loot,
/turf/simulated/floor/tiled/dark,
-/area/horizon/maintenance/deck_2/wing/starboard/near)
+/area/horizon/hangar/auxiliary)
"eBI" = (
/obj/structure/bed/stool/chair/folding{
dir = 8
@@ -35228,7 +35583,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 5
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/research)
"eCm" = (
/obj/structure/cable/green{
@@ -35251,6 +35606,12 @@
/obj/structure/grille,
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/starboard/far)
+"eCs" = (
+/obj/structure/platform,
+/turf/simulated/floor/tiled/ramp/bottom{
+ dir = 8
+ },
+/area/horizon/maintenance/deck_1/wing/starboard/far)
"eCw" = (
/obj/structure/shuttle/engine/propulsion/burst/right,
/turf/unsimulated/floor/plating,
@@ -35262,7 +35623,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 5
},
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/structure/cable{
icon_state = "1-4"
},
@@ -35335,6 +35696,9 @@
"eDs" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"eDt" = (
@@ -35379,6 +35743,10 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
+/obj/structure/lattice/catwalk/indoor,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/research)
"eDB" = (
@@ -35520,6 +35888,10 @@
/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/effect/decal/cleanable/dirt,
/obj/random/maintenance_junk_or_loot,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/machinery/alarm/north,
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"eEl" = (
@@ -35760,6 +36132,14 @@
},
/turf/simulated/floor/tiled/full,
/area/horizon/command/bridge/upperdeck)
+"eFv" = (
+/obj/effect/floor_decal/industrial/outline/operations,
+/obj/structure/table/rack{
+ dir = 8
+ },
+/obj/random/tech_supply,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/maintenance/deck_1/operations/starboard)
"eFB" = (
/turf/simulated/wall,
/area/horizon/rnd/eva)
@@ -36281,11 +36661,12 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9
- },
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled/dark/full,
+/obj/effect/floor_decal/corner_wide/blue{
+ dir = 5
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled/dark,
/area/horizon/storage/secure/tech_vault)
"eIO" = (
/obj/structure/machinery/flasher{
@@ -36322,7 +36703,7 @@
/area/horizon/engineering/atmos/propulsion/starboard)
"eJb" = (
/obj/structure/machinery/pipedispenser,
-/turf/simulated/floor/tiled/dark/full,
+/turf/simulated/floor/carpet/rubber,
/area/horizon/engineering/atmos/storage_maintenance)
"eJc" = (
/obj/effect/floor_decal/industrial/hatch_door/red{
@@ -36393,6 +36774,9 @@
/obj/effect/floor_decal/corner/dark_blue{
dir = 6
},
+/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 8
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/ai/upload_foyer)
"eJx" = (
@@ -36491,7 +36875,7 @@
master_tag = "airlock_horizon_deck_1_fore_1";
name = "airlock_horizon_deck_1_fore_1"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/hangar/starboard)
"eKK" = (
/obj/effect/map_effect/door_helper/unres{
@@ -36515,7 +36899,7 @@
dir = 8
},
/obj/effect/floor_decal/spline/plain,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/turf/unsimulated/floor/plating,
@@ -36555,12 +36939,22 @@
/turf/simulated/floor/wood,
/area/horizon/service/mess_hall)
"eLe" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden{
- dir = 10
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/obj/random/dirt_75,
-/turf/simulated/floor,
-/area/horizon/maintenance/deck_2/wing/port/far)
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
+/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 1
+ },
+/obj/structure/lattice/catwalk/indoor/grate,
+/turf/simulated/floor/plating,
+/area/horizon/rnd/hallway)
"eLj" = (
/obj/structure/table/glass{
table_reinf = "glass"
@@ -36740,7 +37134,7 @@
icon_state = "4-8"
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/operations/starboard/far)
"eNf" = (
@@ -36851,9 +37245,6 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/rnd/test_range)
"eNX" = (
-/obj/structure/railing/mapped{
- dir = 4
- },
/obj/effect/floor_decal/industrial/warning,
/obj/structure/machinery/alarm/north,
/obj/structure/reagent_dispensers/fueltank,
@@ -36960,7 +37351,7 @@
/obj/effect/shuttle_landmark/merchant/dock{
dir = 1
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/security/checkpoint2)
"eOU" = (
/turf/simulated/floor/holofloor/beach/sand{
@@ -37089,6 +37480,10 @@
/obj/structure/platform_stairs/full{
dir = 1
},
+/obj/structure/lattice/catwalk/indoor,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/simulated/floor,
/area/horizon/maintenance/substation/command)
"eQv" = (
@@ -37131,7 +37526,11 @@
"eQA" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/machinery/door/firedoor,
+/obj/effect/floor_decal/industrial/hatch_door/yellow{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard)
"eQC" = (
/obj/structure/platform/ledge,
@@ -37170,6 +37569,9 @@
"eQL" = (
/obj/structure/machinery/portable_atmospherics/canister/empty,
/obj/effect/floor_decal/industrial/outline/grey,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/auxatmos)
"eQO" = (
@@ -37278,7 +37680,7 @@
req_one_access = list(11,24)
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/substation/research)
"eRl" = (
/obj/structure/cable{
@@ -37287,6 +37689,10 @@
/obj/structure/cable{
icon_state = "2-8"
},
+/obj/structure/lattice/catwalk/indoor,
+/obj/structure/machinery/light/small{
+ dir = 1
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/hangar)
"eRt" = (
@@ -37378,7 +37784,7 @@
pixel_x = 3;
pixel_y = 3
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/drone_fabrication)
"eRR" = (
/obj/structure/cable/green{
@@ -37489,7 +37895,7 @@
pixel_x = 32;
req_access = list(13)
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/security/checkpoint2)
"eSz" = (
/obj/effect/floor_decal/corner/brown/diagonal,
@@ -37684,7 +38090,7 @@
},
/obj/item/hullbeacon/red,
/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"eTh" = (
/obj/structure/machinery/holosign/surgery{
id = 2
@@ -37773,6 +38179,10 @@
icon_state = "2-4"
},
/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/main/starboard)
"eTz" = (
@@ -38043,7 +38453,8 @@
/area/horizon/crew/lounge)
"eVJ" = (
/obj/structure/machinery/atmospherics/unary/vent_pump/on,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/far)
"eVM" = (
/obj/structure/machinery/requests_console/east{
@@ -38067,7 +38478,7 @@
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/auxatmos)
"eVT" = (
/obj/structure/lattice/catwalk,
@@ -38112,10 +38523,9 @@
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/research)
"eWg" = (
-/obj/structure/machinery/light/small/emergency,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 5
},
@@ -38123,6 +38533,9 @@
dir = 5
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"eWh" = (
@@ -38153,7 +38566,7 @@
"eWn" = (
/obj/structure/railing/mapped,
/turf/space,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"eWq" = (
/obj/effect/floor_decal/corner/grey/diagonal,
/obj/structure/bed/stool/chair/office/light{
@@ -38298,7 +38711,11 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden{
dir = 5
},
-/turf/simulated/floor,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
+/obj/random/dirt_75,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/far)
"eXH" = (
/obj/structure/disposalpipe/segment{
@@ -38327,10 +38744,9 @@
/obj/effect/floor_decal/industrial/warning{
dir = 9
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port)
"eXT" = (
-/obj/effect/floor_decal/industrial/outline/grey,
/obj/structure/closet/crate/tool,
/obj/random/tech_supply,
/obj/random/tech_supply,
@@ -38342,7 +38758,10 @@
/obj/random/tool,
/obj/random/dirt_75,
/obj/random/dirt_75,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/main/port/shortcut)
"eXV" = (
/turf/simulated/wall/r_wall,
@@ -38351,7 +38770,10 @@
/obj/structure/machinery/atmospherics/unary/vent_pump/on{
dir = 8
},
-/turf/simulated/floor/tiled/dark,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/auxatmos)
"eYf" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -38364,6 +38786,9 @@
icon_state = "2-8"
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port)
"eYg" = (
@@ -38397,17 +38822,17 @@
/area/horizon/maintenance/deck_3/aft/starboard)
"eYo" = (
/obj/random/dirt_75,
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
},
/turf/simulated/floor/tiled/dark,
-/area/horizon/maintenance/deck_1/main/port/shortcut)
+/area/horizon/maintenance/deck_2/wing/port/far)
"eYq" = (
/obj/effect/map_effect/map_helper/ruler_tiles_3{
dir = 4
},
/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"eYt" = (
/obj/structure/machinery/disposal/small/east{
pixel_x = -6
@@ -38515,6 +38940,7 @@
dir = 1
},
/obj/effect/decal/cleanable/dirt,
+/obj/structure/grille/broken,
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"eZu" = (
@@ -38528,6 +38954,9 @@
/obj/structure/cable/green{
icon_state = "0-4"
},
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
/turf/simulated/floor,
/area/horizon/ai/upload_foyer)
"eZv" = (
@@ -38547,7 +38976,7 @@
dir = 1
},
/obj/random/dirt_75,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"eZD" = (
/obj/effect/decal/cleanable/dirt,
@@ -38720,9 +39149,10 @@
/turf/simulated/floor/wood,
/area/horizon/service/mess_hall)
"faM" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/aft)
"faN" = (
@@ -38958,6 +39388,10 @@
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"fcK" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/simulated/floor,
/area/horizon/maintenance/deck_2/wing/port/far)
"fcL" = (
@@ -39009,7 +39443,7 @@
/obj/structure/railing/mapped{
dir = 8
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/turf/simulated/floor/plating,
@@ -39202,7 +39636,7 @@
/turf/simulated/floor/plating,
/area/horizon/operations/mining_main/refinery)
"feo" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/structure/disposalpipe/segment,
@@ -39278,6 +39712,10 @@
/obj/structure/cable{
icon_state = "2-4"
},
+/obj/structure/lattice/catwalk/indoor,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/medical)
"feB" = (
@@ -39380,10 +39818,10 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/shuttle/intrepid/flight_deck)
"feU" = (
-/turf/simulated/floor/bluegrid{
- name = "cooled mainframe floor";
- temperature = 278
+/obj/effect/floor_decal/corner/dark_blue{
+ dir = 9
},
+/turf/simulated/floor/tiled/dark,
/area/horizon/ai/chamber)
"feV" = (
/obj/structure/machinery/camera/network/reactor{
@@ -39552,11 +39990,11 @@
/turf/unsimulated/floor/plating,
/area/shuttle/legion)
"ffQ" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
},
/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/wing/port/nacelle)
+/area/horizon/maintenance/deck_2/wing/port/far)
"ffX" = (
/obj/effect/floor_decal/corner/mauve/full{
dir = 1
@@ -39613,6 +40051,17 @@
/obj/effect/floor_decal/industrial/outline/yellow,
/turf/simulated/floor/carpet/rubber,
/area/horizon/medical/pharmacy)
+"fgy" = (
+/obj/effect/floor_decal/industrial/outline/grey,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/cobweb2,
+/obj/structure/table/rack,
+/obj/random/technology_scanner,
+/obj/structure/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/maintenance/deck_1/main/port)
"fgz" = (
/obj/structure/machinery/washing_machine,
/obj/structure/machinery/light{
@@ -39660,6 +40109,10 @@
/obj/structure/machinery/camera/network/command{
c_tag = "AI Core - Upload Airlock"
},
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/structure/machinery/alarm/north,
/turf/simulated/floor,
/area/horizon/ai/upload_foyer)
"fgX" = (
@@ -39668,9 +40121,9 @@
/area/horizon/holodeck/source_combat_training)
"fgY" = (
/obj/structure/machinery/firealarm/south,
-/obj/effect/floor_decal/corner/dark_blue/full,
-/obj/structure/machinery/alarm/west,
-/turf/simulated/floor/tiled/dark,
+/obj/effect/floor_decal/industrial/warning/full,
+/obj/structure/machinery/porta_turret,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/ai/upload_foyer)
"fha" = (
/obj/item/modular_computer/console/preset/supply,
@@ -39807,6 +40260,13 @@
/obj/effect/floor_decal/industrial/outline/medical,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/medical/paramedic)
+"fhO" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_1/wing/starboard)
"fhQ" = (
/obj/effect/floor_decal/corner_wide/black{
dir = 6
@@ -39819,6 +40279,10 @@
},
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/atmos/propulsion)
+"fhX" = (
+/obj/structure/lattice/catwalk,
+/turf/simulated/open/airless,
+/area/horizon/exterior/no_shields)
"fic" = (
/obj/structure/machinery/power/terminal{
dir = 1
@@ -39830,6 +40294,7 @@
c_tag = "Engineering - Deck 3 - Civilian Substation";
dir = 1
},
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor,
/area/horizon/maintenance/substation/civ_d3)
"fie" = (
@@ -40006,7 +40471,10 @@
no_cargo = 1
},
/obj/random/plushie,
-/turf/simulated/floor/tiled,
+/obj/effect/floor_decal/corner/brown/full{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"fka" = (
/obj/structure/flora/ausbushes/sparsegrass,
@@ -40019,11 +40487,15 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/turf/simulated/floor/plating,
+/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard)
"fkf" = (
/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/auxatmos)
"fkg" = (
@@ -40124,7 +40596,10 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 10
},
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/drone_fabrication)
"fkY" = (
/obj/effect/floor_decal/corner/dark_blue/full{
@@ -40333,7 +40808,7 @@
master_tag = "airlock_horizon_dock_deck_3_starboard_2";
name = "airlock_horizon_dock_deck_3_starboard_2"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"fmy" = (
/obj/effect/decal/cleanable/cobweb2{
@@ -40400,6 +40875,12 @@
},
/turf/unsimulated/floor,
/area/antag/mercenary)
+"fmW" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 6
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/horizon/exterior/no_shields)
"fmX" = (
/obj/structure/shuttle_part/scc/scout{
icon_state = "7,7"
@@ -40770,7 +41251,7 @@
req_access = list(12);
name = "Deck 1 Starboard Primary Maintenance Conduit"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"fpl" = (
/obj/effect/floor_decal/corner/white/diagonal,
@@ -40887,7 +41368,8 @@
/obj/structure/machinery/atmospherics/pipe/simple/visible{
dir = 5
},
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/auxatmos)
"fpR" = (
/turf/simulated/open,
@@ -40925,7 +41407,7 @@
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"fqc" = (
/obj/effect/floor_decal/industrial/warning{
@@ -40939,7 +41421,7 @@
/obj/structure/cable/green{
icon_state = "0-8"
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/cafe)
"fqs" = (
/obj/effect/floor_decal/spline/plain{
@@ -40984,7 +41466,7 @@
/obj/effect/floor_decal/spline/fancy/wood/corner{
dir = 1
},
-/obj/structure/machinery/hologram/holopad,
+/obj/structure/machinery/light/small/floor,
/turf/simulated/floor/wood,
/area/horizon/service/bar)
"fqG" = (
@@ -41329,7 +41811,10 @@
/area/horizon/service/cafeteria)
"fta" = (
/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard)
"ftp" = (
/obj/effect/floor_decal/industrial/warning{
@@ -41632,11 +42117,13 @@
/turf/simulated/floor,
/area/tdome/tdome1)
"fvR" = (
+/obj/effect/floor_decal/industrial/outline/grey,
/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled/ramp/bottom{
- dir = 8
+/obj/structure/machinery/light/small{
+ dir = 1
},
-/area/horizon/maintenance/deck_1/wing/starboard/far)
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/maintenance/deck_1/main/port)
"fvV" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -41728,6 +42215,14 @@
/obj/structure/railing/mapped,
/turf/simulated/floor/tiled,
/area/horizon/operations/loading)
+"fxg" = (
+/obj/random/dirt_75,
+/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/wing/port/near)
"fxi" = (
/obj/structure/table/reinforced/steel,
/obj/item/storage/toolbox/mechanical{
@@ -41757,12 +42252,14 @@
/turf/unsimulated/floor/freezer,
/area/antag/mercenary)
"fxq" = (
-/obj/effect/floor_decal/industrial/warning/cee{
- dir = 8
+/obj/effect/floor_decal/corner_wide/yellow{
+ dir = 10
},
-/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_1/wing/starboard/far)
+/obj/structure/machinery/light/floor{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/horizon/engineering/hallway/fore)
"fxt" = (
/obj/effect/decal/fake_object{
dir = 1;
@@ -41874,7 +42371,7 @@
pixel_x = 25;
req_one_access = list(13,65)
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/security/checkpoint2)
"fxW" = (
/obj/structure/sink{
@@ -42119,6 +42616,8 @@
/obj/structure/cable{
icon_state = "1-4"
},
+/obj/structure/lattice/catwalk/indoor,
+/obj/structure/machinery/light/small,
/turf/simulated/floor,
/area/horizon/maintenance/substation/civ_d3)
"fzV" = (
@@ -42133,7 +42632,6 @@
/obj/structure/machinery/atmospherics/pipe/manifold/hidden{
dir = 1
},
-/obj/structure/machinery/meter,
/obj/structure/cable/green{
icon_state = "4-8"
},
@@ -42143,6 +42641,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 8
},
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/medical/cryo)
"fAi" = (
@@ -42164,14 +42663,11 @@
},
/area/shuttle/legion)
"fAu" = (
-/obj/structure/machinery/alarm/south,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/random/dirt_75,
-/obj/random/dirt_75,
-/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"fAJ" = (
/obj/effect/floor_decal/corner/brown/diagonal,
@@ -42335,7 +42831,7 @@
/obj/structure/machinery/access_button{
pixel_x = 28
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/port/docks)
"fCf" = (
/obj/effect/floor_decal/corner/black/diagonal,
@@ -42529,7 +43025,7 @@
dir = 10
},
/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"fDE" = (
/obj/structure/machinery/door/firedoor,
/obj/structure/cable/green{
@@ -42635,7 +43131,7 @@
icon_state = "1-2"
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"fEu" = (
/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
@@ -42673,7 +43169,9 @@
/obj/structure/bed/stool/chair/padded/brown{
dir = 4
},
-/obj/structure/disposalpipe/trunk,
+/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 8
+ },
/turf/simulated/floor/wood,
/area/horizon/command/heads/chief)
"fEH" = (
@@ -42750,7 +43248,8 @@
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor,
/area/horizon/ai/upload_foyer)
"fFc" = (
/obj/effect/floor_decal/spline/plain/cee{
@@ -42885,10 +43384,10 @@
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 1
},
-/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/structure/cable{
icon_state = "4-8"
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard)
"fGm" = (
@@ -43061,6 +43560,7 @@
/area/horizon/operations/machinist/surgicalbay)
"fHu" = (
/obj/effect/decal/cleanable/dirt,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/security/port)
"fHB" = (
@@ -43087,6 +43587,10 @@
},
/turf/unsimulated/floor,
/area/antag/ninja)
+"fHH" = (
+/obj/structure/lattice/catwalk/indoor,
+/turf/simulated/floor,
+/area/horizon/maintenance/deck_3/auxatmos)
"fHO" = (
/obj/structure/disposalpipe/sortjunction{
dir = 4;
@@ -43124,15 +43628,14 @@
/turf/simulated/floor/tiled,
/area/horizon/hangar/auxiliary)
"fIe" = (
-/obj/random/dirt_75,
-/obj/random/dirt_75,
/obj/effect/decal/cleanable/ash{
pixel_x = -11;
pixel_y = -2
},
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "2-8"
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/port/shortcut)
"fIj" = (
@@ -43152,9 +43655,11 @@
/turf/unsimulated/floor,
/area/centcom/legion)
"fIn" = (
-/obj/effect/decal/cleanable/dirt,
/obj/structure/reagent_dispensers/lube,
-/turf/simulated/floor/tiled,
+/obj/effect/floor_decal/corner/brown/full{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"fIo" = (
/obj/structure/cable/green{
@@ -43247,6 +43752,7 @@
master_tag = "airlock_horizon_deck_1_aft_propulsion_2";
name = "airlock_horizon_deck_1_aft_propulsion_2"
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/engineering/atmos/propulsion)
"fJc" = (
@@ -43293,7 +43799,6 @@
/obj/effect/floor_decal/corner/beige{
dir = 10
},
-/obj/structure/machinery/light,
/obj/structure/filingcabinet/chestdrawer,
/obj/effect/floor_decal/industrial/outline/security,
/turf/simulated/floor/tiled/white,
@@ -43453,6 +43958,9 @@
"fKl" = (
/obj/random/dirt_75,
/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/research)
"fKx" = (
@@ -43463,7 +43971,7 @@
/turf/simulated/floor/carpet/rubber,
/area/horizon/engineering/hallway/fore)
"fKy" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/random/dirt_75,
@@ -43485,7 +43993,7 @@
pixel_x = -31;
dir = 4
},
-/turf/simulated/floor/tiled/dark/cooled,
+/turf/simulated/floor/tiled/dark,
/area/horizon/ai/chamber)
"fKQ" = (
/obj/structure/closet/emcloset,
@@ -43636,12 +44144,10 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/ai/upload)
"fLy" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
- },
/obj/structure/machinery/light/small{
must_start_working = 1
},
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/medical/cryo)
"fLH" = (
@@ -43680,13 +44186,19 @@
/obj/structure/machinery/portable_atmospherics/powered/pump/filled{
start_pressure = 15000
},
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/turf/simulated/floor/plating,
/area/shuttle/mercenary)
"fLP" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/wall/r_wall,
-/area/horizon/maintenance/deck_1/main/port)
+/obj/structure/machinery/atmospherics/pipe/simple/visible{
+ dir = 4
+ },
+/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 6
+ },
+/turf/simulated/floor,
+/area/horizon/maintenance/deck_3/auxatmos)
"fLQ" = (
/obj/structure/table/rack,
/obj/effect/floor_decal/industrial/warning{
@@ -43908,7 +44420,7 @@
/obj/structure/bed/stool/chair/shuttle{
dir = 8
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/turf/simulated/floor/shuttle/black,
@@ -43930,6 +44442,15 @@
},
/turf/simulated/floor/tiled/dark/full,
/area/horizon/tcommsat/chamber)
+"fNn" = (
+/obj/effect/floor_decal/spline/fancy/wood{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 8
+ },
+/turf/simulated/floor/wood,
+/area/horizon/service/bar)
"fNB" = (
/obj/structure/machinery/camera/network/crescent{
c_tag = "Crescent Departures";
@@ -44093,6 +44614,9 @@
/obj/item/modular_computer/console/preset/medical{
dir = 1
},
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/medical/cryo)
"fOO" = (
@@ -44111,7 +44635,7 @@
},
/obj/item/material/shard,
/obj/effect/floor_decal/industrial/warning{
- dir = 6
+ dir = 10
},
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/starboard)
@@ -44187,7 +44711,7 @@
/obj/structure/machinery/access_button{
pixel_x = 28
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/port/docks)
"fPx" = (
/obj/structure/cable{
@@ -44311,11 +44835,12 @@
/turf/simulated/open,
/area/horizon/maintenance/deck_2/main/starboard)
"fQq" = (
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/random/dirt_75,
-/obj/random/dirt_75,
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/wing/port/nacelle)
+/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/wing/starboard/far)
"fQs" = (
/obj/structure/railing/mapped{
dir = 4
@@ -44404,7 +44929,7 @@
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"fQX" = (
/obj/structure/bed/stool/chair/padded/black{
@@ -44484,7 +45009,6 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/rnd/xenobiology/xenoflora)
"fRs" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/cable/green{
icon_state = "1-2"
@@ -44496,6 +45020,9 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 8
},
+/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
+ },
/turf/simulated/floor/wood,
/area/horizon/service/bar)
"fRu" = (
@@ -44532,6 +45059,9 @@
/obj/item/material/shard{
icon_state = "small"
},
+/obj/effect/floor_decal/industrial/warning{
+ dir = 6
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/main/starboard)
"fRL" = (
@@ -44547,7 +45077,7 @@
/obj/structure/machinery/door/firedoor{
dir = 4
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/atmos/air)
"fSa" = (
/obj/structure/cable/green{
@@ -44561,9 +45091,13 @@
/turf/simulated/floor/wood,
/area/horizon/command/bridge/minibar)
"fSb" = (
-/obj/random/junk,
-/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/outline/operations,
+/obj/structure/table/rack{
+ dir = 8
+ },
+/obj/random/tech_supply,
+/obj/random/tool,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/operations/starboard)
"fSf" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -44662,7 +45196,7 @@
dir = 4
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/port/near)
"fSH" = (
/obj/random/dirt_75,
@@ -44832,7 +45366,7 @@
dir = 4
},
/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port)
"fTE" = (
/obj/structure/flora/ausbushes/lavendergrass,
@@ -44940,7 +45474,7 @@
/obj/effect/decal/cleanable/cobweb2{
icon_state = "cobweb1"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port)
"fTZ" = (
/obj/effect/decal/cleanable/dirt,
@@ -45055,13 +45589,15 @@
/turf/simulated/floor/exoplanet/grass/grove,
/area/centcom/shared_dream)
"fUJ" = (
-/obj/effect/floor_decal/industrial/warning,
/obj/structure/machinery/light/small{
dir = 4
},
/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
dir = 1
},
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/operations)
"fUU" = (
@@ -45149,7 +45685,7 @@
/turf/simulated/floor/tiled/white,
/area/horizon/command/heads/cmo)
"fVk" = (
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/turf/unsimulated/floor/plating,
/area/centcom/ferry)
"fVp" = (
@@ -45208,7 +45744,7 @@
/turf/simulated/floor/tiled/white,
/area/horizon/rnd/lab)
"fVK" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/effect/floor_decal/industrial/warning,
@@ -45246,7 +45782,7 @@
dir = 4
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/aft/port)
"fWc" = (
/obj/structure/machinery/light_switch/south{
@@ -45301,6 +45837,7 @@
master_tag = "airlock_horizon_deck_1_aft_port_1";
name = "airlock_horizon_deck_1_aft_port_1"
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/auxatmos)
"fWo" = (
@@ -45610,10 +46147,11 @@
/obj/structure/machinery/atmospherics/unary/vent_pump/on{
dir = 1
},
+/obj/structure/machinery/firealarm/south,
/turf/simulated/floor/tiled,
/area/horizon/operations/lobby)
"fYN" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/turf/template_noop,
@@ -45739,6 +46277,11 @@
},
/turf/simulated/floor/tiled/white,
/area/horizon/rnd/chemistry)
+"fZT" = (
+/obj/structure/railing/mapped,
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/reinforced/airless,
+/area/horizon/exterior/no_shields)
"fZU" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
@@ -45794,14 +46337,13 @@
/area/shuttle/hapt)
"gao" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/railing/mapped{
+/obj/effect/floor_decal/industrial/warning{
dir = 4
},
-/obj/structure/reagent_dispensers/extinguisher,
-/obj/structure/railing/mapped{
- icon_state = "railing0-0"
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
},
-/turf/simulated/floor/tiled/dark/full,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/service/starboard)
"gaq" = (
/obj/structure/machinery/camera/network/third_deck{
@@ -46060,6 +46602,7 @@
dir = 8
},
/obj/structure/cable,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/civ_d2)
"gbK" = (
@@ -46118,7 +46661,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 5
},
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/random/maintenance_junk_or_loot,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/hangar/port)
@@ -46252,6 +46795,13 @@
},
/turf/simulated/floor/tiled,
/area/horizon/rnd/hallway/secondary)
+"gda" = (
+/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/wing/port/far)
"gdb" = (
/obj/structure/cable/green{
icon_state = "1-2"
@@ -46358,6 +46908,12 @@
},
/turf/unsimulated/floor,
/area/centcom/legion)
+"gel" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 5
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_1/main/port)
"gep" = (
/obj/structure/grille,
/obj/structure/machinery/door/firedoor,
@@ -46441,7 +46997,10 @@
/obj/structure/bed/stool/chair/office/dark{
dir = 8
},
-/turf/simulated/floor,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/starboard)
"geP" = (
/obj/structure/table/standard{
@@ -46457,6 +47016,9 @@
/obj/structure/machinery/atmospherics/unary/vent_pump/on{
dir = 4
},
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/atmos/storage_maintenance)
"geV" = (
@@ -46622,13 +47184,12 @@
/turf/simulated/floor/lino,
/area/horizon/service/bar)
"gfP" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/platform_deco{
+ dir = 4
},
-/turf/simulated/floor/tiled/dark,
-/area/horizon/maintenance/deck_2/wing/port/nacelle)
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/wing/starboard/far)
"gfR" = (
/turf/simulated/wall/shuttle/scc,
/area/horizon/shuttle/intrepid/engineering)
@@ -46645,6 +47206,7 @@
/area/horizon/hangar/auxiliary)
"ggh" = (
/obj/structure/machinery/atmospherics/pipe/simple/visible/black,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/atmos_crosser)
"ggl" = (
@@ -46677,6 +47239,13 @@
/obj/structure/window/reinforced,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/hangar/airstation)
+"ggG" = (
+/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/wing/port/near)
"ggJ" = (
/obj/effect/floor_decal/corner/black{
dir = 9
@@ -46778,7 +47347,7 @@
/area/horizon/engineering/reactor/indra/monitoring)
"ghA" = (
/obj/random/dirt_75,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/turf/simulated/floor/plating,
@@ -47259,11 +47828,6 @@
},
/turf/simulated/floor/holofloor/tiled,
/area/horizon/holodeck/source_thunderdomecourt)
-"gkW" = (
-/obj/structure/grille,
-/obj/structure/grille,
-/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
"gkY" = (
/obj/structure/cable/green{
icon_state = "4-8"
@@ -47285,8 +47849,9 @@
/turf/simulated/floor/plating,
/area/horizon/security/hallway)
"gla" = (
-/turf/simulated/floor/tiled/dark,
-/area/horizon/maintenance/deck_2/operations)
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor,
+/area/horizon/maintenance/deck_3/aft/starboard/far)
"glg" = (
/obj/structure/closet/crate/software_backup,
/obj/effect/floor_decal/industrial/outline/yellow,
@@ -47459,7 +48024,12 @@
/turf/space,
/area/horizon/exterior)
"gme" = (
-/obj/structure/girder,
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 8
+ },
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/aft)
"gmg" = (
@@ -47467,9 +48037,13 @@
dir = 10
},
/obj/random/dirt_75,
-/obj/random/dirt_75,
-/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"gmi" = (
/obj/structure/railing/mapped{
@@ -47668,9 +48242,12 @@
/area/horizon/hallway/primary/deck_2/fore)
"gnX" = (
/obj/random/junk,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/far)
"goa" = (
@@ -47689,6 +48266,10 @@
/obj/random/maintenance_junk_or_loot,
/turf/simulated/floor/tiled/dark,
/area/horizon/service/custodial/disposals/deck_1)
+"gog" = (
+/obj/random/dirt_75,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/maintenance/deck_2/wing/starboard)
"goh" = (
/obj/structure/table/standard,
/obj/structure/window/reinforced,
@@ -47760,7 +48341,12 @@
/turf/simulated/floor/tiled,
/area/horizon/security/hallway)
"gou" = (
-/turf/simulated/floor/plating,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/platform,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard)
"goB" = (
/obj/effect/floor_decal/corner/dark_green{
@@ -48006,9 +48592,11 @@
/turf/unsimulated/floor,
/area/centcom/spawning)
"gqp" = (
-/obj/structure/girder,
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/wing/starboard)
+/obj/effect/floor_decal/industrial/warning{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_1/operations/starboard)
"gqs" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
@@ -48348,7 +48936,7 @@
dir = 4
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/operations/starboard/far)
"grD" = (
/obj/effect/floor_decal/spline/fancy/wood{
@@ -48433,7 +49021,8 @@
/obj/structure/disposalpipe/segment{
icon_state = "pipe-c"
},
-/turf/simulated/floor/plating,
+/obj/random/maintenance_junk_or_loot,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard/far)
"gsz" = (
/obj/structure/machinery/smartfridge/chemistry{
@@ -48641,7 +49230,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 10
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"gur" = (
/obj/structure/table/reinforced/steel,
@@ -48793,7 +49382,6 @@
},
/area/horizon/holodeck/source_konyang)
"gvf" = (
-/obj/structure/machinery/light,
/obj/effect/floor_decal/industrial/hatch/yellow,
/obj/structure/machinery/vending/coffee,
/turf/simulated/floor/tiled/dark/full,
@@ -48884,7 +49472,7 @@
name = "airlock_horizon_deck_3_fore_starboard_1"
},
/obj/effect/map_effect/marker_helper/airlock/exterior,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/crewlounge)
"gvK" = (
/obj/structure/table/stone/marble,
@@ -48967,6 +49555,10 @@
icon_state = "white"
},
/area/tdome/tdomeobserve)
+"gwi" = (
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_1/wing/starboard)
"gwk" = (
/obj/effect/floor_decal/corner/dark_green/full{
dir = 1
@@ -49048,7 +49640,7 @@
/area/horizon/engineering/hallway/interior)
"gwI" = (
/obj/random/dirt_75,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"gwK" = (
/obj/structure/machinery/atmospherics/unary/engine/scc_shuttle,
@@ -49249,7 +49841,6 @@
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/random/dirt_75,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"gyf" = (
@@ -49368,7 +49959,7 @@
/turf/simulated/floor/tiled/white,
/area/horizon/medical/reception)
"gyK" = (
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/turf/simulated/open,
/area/horizon/maintenance/deck_2/wing/starboard)
"gyR" = (
@@ -49424,6 +50015,10 @@
/area/antag/mercenary)
"gzh" = (
/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning,
+/obj/structure/machinery/light/small{
+ dir = 1
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/elevator)
"gzj" = (
@@ -49437,7 +50032,7 @@
/area/centcom/bar)
"gzn" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/structure/cable{
@@ -49595,10 +50190,12 @@
/turf/simulated/floor/tiled/white,
/area/horizon/medical/main_storage)
"gAs" = (
-/obj/random/dirt_75,
-/obj/random/dirt_75,
+/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/wing/starboard)
+/area/horizon/maintenance/deck_2/wing/port)
"gAu" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden,
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -49853,7 +50450,7 @@
/obj/structure/bed/stool/padded/black,
/obj/effect/decal/cleanable/dirt,
/obj/structure/machinery/alarm/north,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/port/far)
"gBV" = (
/obj/structure/cable/yellow{
@@ -50050,10 +50647,7 @@
dir = 4
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
- },
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/main/starboard)
"gDD" = (
/obj/structure/flora/ausbushes/sparsegrass,
@@ -50304,8 +50898,7 @@
/obj/structure/railing/mapped{
dir = 8
},
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"gFn" = (
/obj/effect/floor_decal/corner/red/diagonal,
@@ -50391,7 +50984,7 @@
master_tag = "airlock_horizon_dock_deck_3_starboard_1";
name = "airlock_horizon_dock_deck_3_starboard_1"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"gFU" = (
/obj/structure/machinery/alarm/north,
@@ -50455,6 +51048,9 @@
/turf/unsimulated/floor/plating,
/area/antag/jockey)
"gGk" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 5
+ },
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"gGo" = (
@@ -50465,6 +51061,9 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
+/obj/structure/machinery/light/floor{
+ dir = 4
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/atmos)
"gGr" = (
@@ -50555,18 +51154,12 @@
/turf/simulated/floor/tiled,
/area/horizon/rnd/hallway)
"gGL" = (
-/obj/structure/platform{
- dir = 1
- },
+/obj/effect/floor_decal/industrial/warning,
+/obj/random/dirt_75,
/obj/structure/platform{
dir = 4
},
-/obj/structure/platform_deco{
- dir = 10
- },
-/obj/random/dirt_75,
-/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"gGS" = (
/obj/structure/bed/stool/chair/sofa/left/purple{
@@ -50617,10 +51210,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 4
},
-/obj/structure/machinery/light/small{
- dir = 8
- },
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/interstitial)
"gHg" = (
/turf/unsimulated/wall/riveted,
@@ -50701,7 +51291,7 @@
master_tag = "airlock_horizon_dock_deck_3_starboard_2";
name = "airlock_horizon_dock_deck_3_starboard_2"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"gHy" = (
/turf/simulated/wall/shuttle/unique/mercenary/small,
@@ -50781,7 +51371,7 @@
},
/obj/structure/lattice/catwalk,
/turf/space,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"gIb" = (
/obj/structure/table/reinforced/steel,
/obj/structure/machinery/door/window/southleft{
@@ -50801,14 +51391,14 @@
/obj/structure/railing/mapped{
dir = 4
},
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/medical/cryo)
"gIi" = (
-/obj/structure/machinery/floodlight,
/obj/effect/floor_decal/industrial/warning{
- dir = 5
+ dir = 1
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/wing/starboard)
"gIk" = (
/turf/unsimulated/wall/steel,
@@ -50840,6 +51430,9 @@
},
/obj/random/dirt_75,
/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard)
"gIO" = (
@@ -51042,17 +51635,11 @@
/turf/simulated/open,
/area/horizon/hallway/primary/deck_3/central)
"gJW" = (
-/obj/structure/railing/mapped{
+/obj/structure/platform,
+/obj/effect/floor_decal/industrial/warning{
dir = 8
},
-/obj/structure/railing/mapped{
- dir = 1
- },
-/obj/effect/floor_decal/industrial/warning{
- dir = 9
- },
-/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"gJX" = (
/obj/effect/floor_decal/industrial/warning,
@@ -51124,7 +51711,7 @@
pixel_x = 12;
pixel_y = 28
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/port/docks)
"gKg" = (
/turf/simulated/floor/holofloor/tiled,
@@ -51146,7 +51733,7 @@
/turf/simulated/floor/tiled,
/area/horizon/medical/morgue)
"gKz" = (
-/obj/structure/machinery/atmospherics/unary/vent_scrubber/on,
+/obj/structure/platform,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/operations/starboard)
"gKD" = (
@@ -51220,6 +51807,9 @@
/area/centcom/specops)
"gLE" = (
/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 5
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard)
"gLG" = (
@@ -51389,11 +51979,9 @@
/turf/simulated/floor/tiled,
/area/horizon/maintenance/deck_3/aft/starboard)
"gMA" = (
-/obj/effect/floor_decal/industrial/warning/corner{
- dir = 4
- },
-/obj/structure/grille,
-/turf/simulated/floor/reinforced/airless,
+/obj/structure/lattice,
+/obj/structure/grille/broken,
+/turf/space,
/area/horizon/exterior)
"gMC" = (
/obj/structure/cable{
@@ -51419,8 +52007,8 @@
/turf/simulated/floor/tiled/dark,
/area/shuttle/mercenary)
"gMP" = (
-/obj/random/dirt_75,
/obj/random/junk,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"gMR" = (
@@ -51434,16 +52022,14 @@
c_tag = "Engineering - Deck 2 - Medical Substation";
dir = 4
},
-/obj/structure/machinery/light/small/emergency{
- dir = 8
- },
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/medical)
"gMT" = (
/obj/structure/lattice/catwalk,
/obj/structure/railing/mapped,
/turf/space,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"gMZ" = (
/obj/effect/floor_decal/industrial/warning/corner{
dir = 1
@@ -51611,7 +52197,7 @@
/obj/structure/closet/crate,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard)
"gNN" = (
/obj/structure/cable/yellow{
@@ -52104,7 +52690,7 @@
"gSa" = (
/obj/effect/map_effect/map_helper/ruler_tiles_3,
/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"gSb" = (
/obj/structure/machinery/atmospherics/unary/vent_pump/on{
dir = 8
@@ -52220,7 +52806,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 4
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard/far)
"gSA" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -52338,8 +52924,13 @@
/turf/simulated/floor/tiled/white,
/area/horizon/rnd/xenoarch/atrium)
"gTF" = (
+/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/tiled/dark,
-/area/horizon/maintenance/deck_1/main/port/shortcut)
+/area/horizon/maintenance/deck_2/main/starboard)
"gTH" = (
/obj/effect/floor_decal/corner/red{
dir = 9
@@ -52480,6 +53071,15 @@
},
/turf/simulated/floor/reinforced/oxygen,
/area/horizon/engineering/atmos/air)
+"gUK" = (
+/obj/effect/floor_decal/corner/mauve{
+ dir = 10
+ },
+/obj/structure/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/horizon/rnd/hallway)
"gUM" = (
/obj/item/stack/packageWrap,
/obj/item/hand_labeler,
@@ -52503,10 +53103,11 @@
/turf/simulated/floor/tiled/white,
/area/horizon/medical/gen_treatment)
"gUT" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 4
- },
/obj/random/junk,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/platform_deco{
+ icon_state = "ledge_deco"
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"gUV" = (
@@ -52817,7 +53418,7 @@
/obj/effect/floor_decal/corner/dark_green{
dir = 10
},
-/obj/structure/machinery/firealarm/south,
+/obj/structure/machinery/light,
/turf/simulated/floor/tiled,
/area/horizon/operations/lobby)
"gWP" = (
@@ -52913,8 +53514,14 @@
/area/horizon/operations/machinist)
"gXo" = (
/obj/structure/machinery/anti_bluespace,
+/obj/structure/machinery/alarm/south,
+/obj/effect/floor_decal/industrial/warning/full,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/storage/secure/tech_vault)
+"gXr" = (
+/obj/structure/machinery/shield_diffuser,
+/turf/simulated/floor/reinforced/airless,
+/area/horizon/exterior/no_shields)
"gXu" = (
/obj/structure/cable/green{
icon_state = "4-8"
@@ -53361,7 +53968,6 @@
pixel_x = 32
},
/obj/structure/machinery/atmospherics/unary/vent_scrubber/on,
-/obj/effect/floor_decal/industrial/warning/corner,
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
@@ -53373,7 +53979,11 @@
pixel_y = 30;
req_access = list(16)
},
-/turf/simulated/floor/tiled/dark/full,
+/obj/effect/floor_decal/corner/dark_blue{
+ dir = 6
+ },
+/obj/effect/floor_decal/industrial/warning/corner,
+/turf/simulated/floor/tiled/dark,
/area/horizon/ai/upload_foyer)
"har" = (
/obj/effect/floor_decal/corner/dark_blue{
@@ -53420,11 +54030,8 @@
/turf/simulated/floor/wood,
/area/horizon/repoffice/consular_two)
"haz" = (
-/obj/effect/floor_decal/industrial/loading/yellow,
-/obj/structure/platform{
- dir = 8
- },
-/turf/simulated/floor/plating,
+/obj/random/dirt_75,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"haC" = (
/obj/structure/cable{
@@ -53592,6 +54199,12 @@
},
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/atmos)
+"hbQ" = (
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 8
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/horizon/exterior/no_shields)
"hbU" = (
/obj/effect/floor_decal/corner/lime/diagonal,
/obj/structure/machinery/camera/network/intrepid{
@@ -54292,7 +54905,7 @@
/obj/item/hullbeacon/red,
/obj/effect/floor_decal/industrial/warning/corner,
/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"hgh" = (
/obj/structure/disposalpipe/trunk{
dir = 1
@@ -54363,6 +54976,12 @@
/obj/effect/floor_decal/corner/green,
/turf/unsimulated/floor,
/area/centcom/bar)
+"hgJ" = (
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/machinery/light/floor,
+/turf/simulated/floor/tiled/full,
+/area/horizon/engineering/hallway/fore)
"hgK" = (
/obj/structure/machinery/portable_atmospherics/canister/air/airlock,
/obj/structure/machinery/atmospherics/portables_connector,
@@ -54520,6 +55139,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 6
},
+/obj/structure/machinery/light/small/floor,
/turf/simulated/floor/wood,
/area/horizon/service/cafeteria)
"hhX" = (
@@ -54625,12 +55245,10 @@
/area/horizon/operations/warehouse)
"hiU" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/effect/decal/cleanable/dirt,
/obj/structure/railing/mapped{
icon_state = "railing0-0"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/port)
"hiV" = (
@@ -54693,7 +55311,7 @@
req_one_access = list(24,11,67,73);
dir = 4
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/main/starboard)
"hjB" = (
/obj/structure/cable/green{
@@ -54949,7 +55567,7 @@
/obj/effect/floor_decal/industrial/warning/cee{
dir = 4
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/turf/simulated/floor,
@@ -55154,8 +55772,14 @@
/area/horizon/storage/secure/tech_vault)
"hmf" = (
/obj/structure/trash_pile,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
/obj/random/dirt_75,
-/turf/simulated/floor,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/far)
"hmg" = (
/obj/effect/floor_decal/corner/dark_green{
@@ -55243,7 +55867,10 @@
/obj/effect/floor_decal/industrial/warning{
dir = 4
},
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port)
"hmO" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -55461,7 +56088,10 @@
/obj/effect/decal/cleanable/dirt,
/obj/random/junk,
/obj/random/med_stack,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard)
"hnB" = (
/obj/structure/shuttle_part/scc_space_ship{
@@ -55709,7 +56339,7 @@
/turf/simulated/floor/tiled,
/area/horizon/command/bridge/supply)
"hpn" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/turf/simulated/floor/tiled/dark,
@@ -56030,10 +56660,6 @@
dir = 1
},
/obj/item/modular_computer/console/preset/command,
-/obj/structure/machinery/light/small,
-/obj/structure/machinery/light/small{
- dir = 1
- },
/turf/simulated/floor/tiled/dark,
/area/horizon/command/bridge/aibunker)
"hrK" = (
@@ -56312,7 +56938,7 @@
name = "Operations Substation";
req_one_access = list(11,24)
},
-/turf/simulated/floor/tiled/gunmetal/full,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/operations/warehouse)
"htJ" = (
/obj/structure/machinery/door/airlock/external,
@@ -56344,7 +56970,7 @@
id = "quark_bay_outer";
name = "Quark Shutter"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/shuttle/quark/cargo_hold)
"htP" = (
/obj/structure/window/reinforced/crescent{
@@ -56678,7 +57304,10 @@
/area/horizon/security/warden)
"hvn" = (
/obj/random/junk,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"hvt" = (
/obj/structure/machinery/atmospherics/portables_connector/fuel{
@@ -56878,8 +57507,8 @@
dir = 1
},
/obj/structure/trash_pile,
-/obj/structure/machinery/light/small/emergency,
-/turf/simulated/floor/plating,
+/obj/structure/machinery/light/small,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/research)
"hwP" = (
/obj/effect/floor_decal/corner/dark_green/full,
@@ -57083,7 +57712,7 @@
/obj/structure/closet,
/obj/random/loot,
/obj/random/junk,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/port/far)
"hyz" = (
/obj/structure/machinery/atmospherics/binary/pump/fuel{
@@ -57216,6 +57845,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 8
},
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/medical/cryo)
"hyZ" = (
@@ -57263,10 +57893,7 @@
/obj/structure/cable/green{
icon_state = "2-4"
},
-/turf/simulated/floor/bluegrid{
- name = "cooled mainframe floor";
- temperature = 278
- },
+/turf/simulated/floor/bluegrid,
/area/horizon/ai/chamber)
"hzl" = (
/obj/structure/cable/green{
@@ -57301,7 +57928,7 @@
must_start_working = 1
},
/obj/random/canister/filled/restricted,
-/turf/simulated/floor/tiled/dark/full,
+/turf/simulated/floor/carpet/rubber,
/area/horizon/engineering/atmos/storage_maintenance)
"hzx" = (
/obj/structure/railing/mapped{
@@ -57309,7 +57936,7 @@
},
/obj/structure/railing/mapped,
/obj/structure/lattice/catwalk,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/turf/simulated/open,
@@ -57340,9 +57967,8 @@
/obj/effect/floor_decal/industrial/warning{
dir = 10
},
-/obj/effect/decal/cleanable/cobweb2,
/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"hzW" = (
/obj/structure/railing/mapped{
@@ -57430,6 +58056,7 @@
"hAA" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/machinery/alarm/north,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/operations/starboard)
"hAB" = (
@@ -57689,6 +58316,13 @@
/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/tiled/white,
/area/horizon/medical/gen_treatment)
+"hCj" = (
+/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_1/wing/starboard)
"hCm" = (
/obj/effect/floor_decal/industrial/warning{
dir = 4
@@ -57728,17 +58362,22 @@
/turf/simulated/floor/reinforced,
/area/horizon/rnd/xenobiology)
"hCI" = (
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency,
-/obj/structure/machinery/light/small/emergency,
-/turf/simulated/floor/plating,
+/obj/random/dirt_75,
+/obj/structure/table/rack,
+/obj/random/loot,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"hCL" = (
-/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/platform_deco{
dir = 8
},
-/turf/simulated/floor/reinforced,
-/area/horizon/command/bridge/selfdestruct)
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_1/wing/starboard/far)
"hCM" = (
/obj/effect/floor_decal/spline/fancy/wood{
dir = 5
@@ -57806,7 +58445,7 @@
name = "Investigators' Office";
req_access = list(4)
},
-/turf/simulated/floor/tiled/full,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/security/investigators_office)
"hDb" = (
/obj/effect/landmark/entry_point/port{
@@ -57871,14 +58510,12 @@
/turf/simulated/floor/carpet/rubber,
/area/horizon/engineering/reactor/supermatter/monitoring)
"hDv" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/structure/machinery/floodlight,
-/obj/effect/floor_decal/industrial/warning{
- dir = 6
- },
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/outline/operations,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/wing/starboard)
"hDy" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -57931,7 +58568,7 @@
pixel_x = 20;
pixel_y = -28
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/port/far)
"hDH" = (
/obj/effect/floor_decal/corner_wide/paleblue{
@@ -57958,7 +58595,7 @@
/turf/simulated/floor/carpet/red,
/area/horizon/service/library)
"hDM" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/structure/lattice/catwalk/indoor,
@@ -57989,6 +58626,9 @@
/obj/random/junk,
/obj/structure/table/rack,
/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"hDX" = (
@@ -57997,7 +58637,6 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/random/dirt_75,
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
@@ -58032,7 +58671,7 @@
/area/shuttle/legion)
"hEh" = (
/obj/structure/machinery/alarm/north,
-/obj/random/dirt_75,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor,
/area/horizon/maintenance/deck_2/wing/port/far)
"hEk" = (
@@ -58101,7 +58740,7 @@
req_access = list(12);
name = "Deck 1 Starboard Primary Maintenance Conduit"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/wing/starboard)
"hEE" = (
/obj/structure/cable{
@@ -58112,14 +58751,14 @@
/obj/structure/machinery/door/firedoor,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/aux,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/fuel,
-/obj/effect/floor_decal/industrial/hatch_door/yellow{
- dir = 8
- },
/obj/structure/machinery/door/airlock/maintenance{
name = "Deck 1 Starboard Primary Maintenance Conduit";
req_one_access = list(12,31)
},
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/hatch_door/yellow{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/operations/starboard/amidships)
"hEH" = (
/obj/structure/cable/green{
@@ -58283,7 +58922,10 @@
/area/horizon/hangar/intrepid)
"hFZ" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/drone_fabrication)
"hGe" = (
/obj/structure/machinery/door/airlock/glass_security{
@@ -58323,6 +58965,7 @@
master_tag = "airlock_horizon_deck_2_starboard_aft";
name = "airlock_horizon_deck_2_starboard_aft"
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"hGq" = (
@@ -58377,14 +59020,10 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/security/evidence_storage)
"hGA" = (
-/obj/structure/railing/mapped{
- dir = 8
- },
-/obj/random/junk,
/obj/structure/platform{
dir = 4
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/far)
"hGF" = (
/obj/structure/flora/ausbushes/fullgrass,
@@ -58436,13 +59075,19 @@
/area/horizon/hallway/primary/deck_2/fore)
"hHp" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/structure/sign/double/barsign{
pixel_y = -32
},
/obj/structure/lattice/catwalk,
/turf/simulated/open,
/area/horizon/maintenance/deck_2/service/starboard)
+"hHr" = (
+/obj/effect/floor_decal/spline/fancy/wood,
+/obj/structure/railing/mapped,
+/obj/structure/machinery/light/small/floor,
+/turf/simulated/floor/wood,
+/area/horizon/service/cafeteria)
"hHv" = (
/obj/effect/floor_decal/industrial/warning/corner{
dir = 4
@@ -58717,6 +59362,10 @@
/obj/structure/cable{
icon_state = "1-4"
},
+/obj/structure/lattice/catwalk/indoor,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor,
/area/horizon/maintenance/substation/command)
"hJs" = (
@@ -59148,9 +59797,6 @@
/obj/structure/machinery/atmospherics/pipe/simple/visible/universal{
dir = 1
},
-/obj/structure/machinery/light/small/emergency{
- dir = 8
- },
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/near)
@@ -59168,10 +59814,10 @@
pixel_x = 0
},
/obj/structure/machinery/firealarm/south,
-/turf/simulated/floor/bluegrid{
- name = "cooled mainframe floor";
- temperature = 278
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
},
+/turf/simulated/floor,
/area/horizon/ai/chamber)
"hLX" = (
/obj/structure/machinery/door/airlock/external{
@@ -59222,7 +59868,10 @@
"hMc" = (
/obj/structure/closet,
/obj/random/loot,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard)
"hMf" = (
/obj/effect/floor_decal/corner/grey/diagonal,
@@ -59236,6 +59885,10 @@
dir = 8
},
/area/horizon/holodeck/source_sauna)
+"hMn" = (
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/maintenance/deck_1/main/port)
"hMC" = (
/obj/effect/floor_decal/industrial/warning{
dir = 6
@@ -59299,11 +59952,10 @@
/turf/unsimulated/floor/plating,
/area/shuttle/legion)
"hNb" = (
-/obj/effect/floor_decal/industrial/warning{
+/obj/effect/floor_decal/industrial/warning,
+/obj/structure/railing/mapped{
dir = 1
},
-/obj/effect/floor_decal/industrial/warning,
-/obj/random/maintenance_junk_or_loot,
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"hNe" = (
@@ -59321,6 +59973,7 @@
icon_state = "1-8"
},
/obj/structure/cable,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/operations)
"hNm" = (
@@ -59331,9 +59984,6 @@
/obj/structure/platform{
dir = 4
},
-/obj/structure/machinery/light/floor{
- dir = 8
- },
/obj/effect/floor_decal/spline/fancy/wood{
dir = 8
},
@@ -59360,10 +60010,11 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/command/bridge/aibunker)
"hNu" = (
-/obj/random/dirt_75,
-/obj/random/dirt_75,
-/turf/simulated/floor,
-/area/horizon/maintenance/deck_3/security/port)
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/wing/port)
"hNv" = (
/obj/effect/floor_decal/spline/plain/corner{
dir = 4
@@ -59497,7 +60148,7 @@
dir = 4
},
/turf/simulated/open/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"hOs" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -59525,7 +60176,7 @@
master_tag = "airlock_horizon_deck_1_aft_propulsion_1";
name = "airlock_horizon_deck_1_aft_propulsion_1"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/atmos/propulsion/starboard)
"hOw" = (
/obj/structure/cable/green{
@@ -59570,7 +60221,7 @@
"hOG" = (
/obj/effect/floor_decal/industrial/warning,
/obj/random/junk,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port)
"hOO" = (
/obj/structure/machinery/button/switch/windowtint{
@@ -59643,7 +60294,7 @@
/obj/item/pipe{
pixel_x = -5
},
-/turf/simulated/floor/tiled/dark/full,
+/turf/simulated/floor/carpet/rubber,
/area/horizon/engineering/atmos/storage_maintenance)
"hPl" = (
/obj/structure/bed/stool/chair/shuttle,
@@ -59735,7 +60386,7 @@
/turf/simulated/floor/tiled,
/area/horizon/crew/vacantoffice)
"hPB" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/turf/simulated/floor/tiled/dark,
@@ -59768,7 +60419,7 @@
pixel_x = -32;
pixel_y = -6
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/interstitial)
"hPK" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -59901,6 +60552,13 @@
/obj/item/stack/material/graphite/full,
/turf/simulated/floor,
/area/horizon/command/bridge/aibunker)
+"hQt" = (
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/platform_deco{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_1/wing/starboard/far)
"hQx" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
@@ -60079,7 +60737,8 @@
master_tag = "airlock_horizon_dock_deck_3_port_5";
name = "airlock_horizon_dock_deck_3_port_5"
},
-/turf/simulated/floor/plating,
+/obj/structure/lattice/catwalk/indoor/grate,
+/turf/simulated/floor,
/area/horizon/hallway/primary/deck_3/port/docks)
"hRQ" = (
/obj/structure/flora/grass/jungle,
@@ -60249,7 +60908,11 @@
/turf/simulated/floor/tiled/full,
/area/horizon/medical/ward)
"hTl" = (
-/turf/simulated/floor/plating,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"hTm" = (
/obj/structure/holostool{
@@ -60288,11 +60951,12 @@
/area/horizon/storage/eva)
"hTF" = (
/obj/structure/table/steel,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/random/contraband,
-/turf/simulated/floor,
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/security/port)
"hTG" = (
/obj/effect/floor_decal/corner_wide/yellow/full,
@@ -60322,7 +60986,7 @@
name = "airlock_horizon_dock_deck_3_port_4"
},
/obj/effect/map_effect/marker_helper/airlock/interior,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/port/docks)
"hTR" = (
/obj/structure/cable/green{
@@ -60559,6 +61223,9 @@
"hWq" = (
/obj/structure/bed/stool/chair/padded/brown,
/obj/structure/machinery/firealarm/north,
+/obj/effect/floor_decal/spline/fancy/wood{
+ dir = 1
+ },
/turf/simulated/floor/wood/walnut,
/area/horizon/medical/smoking)
"hWr" = (
@@ -60660,7 +61327,7 @@
},
/obj/structure/railing/mapped,
/turf/simulated/open/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"hXx" = (
/obj/structure/machinery/door/airlock/glass{
name = "Cryogenic Storage"
@@ -60913,7 +61580,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/supply/dock)
"hZk" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden{
@@ -60922,6 +61589,10 @@
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/near)
+"hZl" = (
+/obj/effect/floor_decal/industrial/warning/corner,
+/turf/simulated/floor/reinforced/airless,
+/area/horizon/exterior/no_shields)
"hZq" = (
/obj/effect/floor_decal/industrial/warning{
dir = 8
@@ -60985,8 +61656,8 @@
c_tag = "Engineering - Deck 2 - Port Pod Substation";
dir = 1
},
-/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/effect/decal/cleanable/dirt,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/wing_starboard)
"hZG" = (
@@ -61023,14 +61694,15 @@
/obj/structure/closet/crate,
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/random/loot,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/main/starboard)
"hZR" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/turf/simulated/floor/plating,
@@ -61084,6 +61756,7 @@
/area/horizon/rnd/xenobiology/xenoflora)
"iaw" = (
/obj/structure/disposalpipe/segment,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/research)
"iaB" = (
@@ -61104,7 +61777,10 @@
"iaC" = (
/obj/random/dirt_75,
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/near)
"iaD" = (
/obj/structure/railing/mapped{
@@ -61501,6 +62177,18 @@
"icP" = (
/turf/simulated/wall/r_wall,
/area/horizon/security/lobby)
+"icR" = (
+/obj/random/dirt_75,
+/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/wing/port/far)
+"icV" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/horizon/exterior/no_shields)
"icW" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/aux{
dir = 4
@@ -61606,7 +62294,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/port)
"idu" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/random/dirt_75,
@@ -61646,7 +62334,7 @@
/area/horizon/hangar/control)
"idJ" = (
/obj/effect/floor_decal/industrial/warning,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/random/maintenance_junk_or_loot,
@@ -61832,7 +62520,7 @@
},
/obj/effect/decal/cleanable/dirt,
/obj/structure/machinery/floodlight,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/interstitial)
"ieK" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -61937,7 +62625,6 @@
/turf/simulated/floor/plating,
/area/horizon/engineering/storage/lower)
"ifu" = (
-/obj/effect/floor_decal/industrial/outline/grey,
/obj/random/dirt_75,
/obj/item/storage/box/lights/mixed{
pixel_x = 6;
@@ -61947,7 +62634,8 @@
pixel_x = 6;
pixel_y = -4
},
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port/shortcut)
"ifw" = (
/obj/structure/machinery/hologram/holopad,
@@ -61969,9 +62657,9 @@
/area/horizon/security/checkpoint2)
"ifK" = (
/obj/structure/trash_pile,
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/random/dirt_75,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/research)
"ifN" = (
/obj/structure/railing/mapped{
@@ -62201,10 +62889,12 @@
/turf/simulated/floor/tiled,
/area/horizon/command/bridge/upperdeck)
"ihL" = (
-/obj/structure/machinery/porta_turret/stationary,
-/obj/effect/floor_decal/industrial/warning/full,
-/turf/simulated/floor/reinforced,
-/area/horizon/command/bridge/selfdestruct)
+/obj/effect/floor_decal/corner/brown{
+ dir = 5
+ },
+/obj/structure/machinery/firealarm/north,
+/turf/simulated/floor/tiled,
+/area/horizon/operations/lobby)
"ihS" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -62306,7 +62996,7 @@
dir = 4
},
/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"iiL" = (
/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
@@ -62356,7 +63046,7 @@
dir = 4
},
/turf/simulated/open/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"ijf" = (
/obj/effect/floor_decal/corner/brown/diagonal,
/obj/effect/floor_decal/industrial/hatch/yellow,
@@ -62504,7 +63194,10 @@
/obj/structure/sign/securearea{
pixel_y = 32
},
-/turf/simulated/floor,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/port/far)
"ikd" = (
/obj/structure/cable/green{
@@ -62866,7 +63559,7 @@
pixel_x = -22;
pixel_y = 32
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/port/docks)
"imk" = (
/obj/structure/cable/green{
@@ -62907,15 +63600,21 @@
/turf/simulated/floor/wood,
/area/horizon/command/heads/captain)
"imq" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/cable/green{
icon_state = "1-2"
},
/obj/effect/floor_decal/industrial/hatch/red,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
/obj/effect/floor_decal/industrial/warning{
dir = 8
},
-/turf/simulated/floor/tiled/dark,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
+/obj/item/radio/intercom/west,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/command/bridge/selfdestruct)
"ims" = (
/obj/structure/shuttle_part/scc/scout{
@@ -62923,12 +63622,6 @@
},
/turf/simulated/floor/plating,
/area/horizon/shuttle/canary)
-"imA" = (
-/obj/structure/grille/diagonal{
- dir = 1
- },
-/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
"imF" = (
/obj/effect/floor_decal/corner/red/full,
/turf/unsimulated/floor,
@@ -62938,6 +63631,7 @@
dir = 6
},
/obj/structure/railing/mapped,
+/obj/structure/machinery/light/small/floor,
/turf/simulated/floor/wood,
/area/horizon/service/cafeteria)
"imJ" = (
@@ -63224,10 +63918,9 @@
},
/area/horizon/medical/morgue)
"ioS" = (
-/obj/effect/floor_decal/industrial/warning,
-/obj/structure/grille,
+/obj/item/hullbeacon/green,
/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"ioU" = (
/obj/structure/machinery/button/remote/airlock/screamer{
channel = "Command";
@@ -63332,6 +64025,7 @@
shuttle_tag = "Quark";
cycle_to_external_air = 1
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/shuttle/quark/cargo_hold)
"ipD" = (
@@ -63364,7 +64058,7 @@
"ipQ" = (
/obj/random/dirt_75,
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/far)
"ipY" = (
/obj/structure/machinery/atmospherics/unary/vent_pump/high_volume/aux{
@@ -63388,6 +64082,7 @@
shuttle_tag = "Quark";
cycle_to_external_air = 1
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/shuttle/quark/cargo_hold)
"ipZ" = (
@@ -63549,6 +64244,16 @@
},
/turf/simulated/floor/tiled/full,
/area/horizon/medical/ward)
+"iqK" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
+/obj/random/maintenance_junk_or_loot,
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_1/main/port)
"iqN" = (
/obj/structure/cable/green{
icon_state = "4-8"
@@ -63577,16 +64282,14 @@
/obj/structure/machinery/atmospherics/pipe/simple/visible/universal{
dir = 4
},
-/turf/simulated/floor/tiled/dark,
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/auxatmos)
"iqW" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden{
dir = 4
},
-/obj/effect/floor_decal/industrial/warning{
- dir = 8
- },
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/medical/cryo)
"iqY" = (
@@ -64055,7 +64758,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/yellow{
dir = 4
},
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/starboard)
"iuf" = (
@@ -64114,19 +64817,11 @@
/turf/simulated/floor/carpet,
/area/horizon/repoffice/consular_one)
"iuG" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
},
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/random/dirt_75,
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/wing/starboard/far)
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/wing/port/far)
"iuJ" = (
/obj/effect/floor_decal/corner/dark_blue{
dir = 9
@@ -64291,7 +64986,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/turf/simulated/floor,
@@ -64508,7 +65203,7 @@
/obj/structure/machinery/light/small{
dir = 4
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/interstitial)
"ixn" = (
/obj/effect/floor_decal/corner_wide/yellow{
@@ -64614,9 +65309,12 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/security/firing_range)
"ixJ" = (
-/obj/structure/girder,
+/obj/structure/machinery/light/small{
+ dir = 1
+ },
+/obj/random/maintenance_junk_or_loot,
/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/wing/starboard/far)
+/area/horizon/maintenance/deck_2/aft)
"ixK" = (
/obj/structure/machinery/button/remote/airlock{
dir = 8;
@@ -64670,7 +65368,7 @@
pixel_y = 27;
dir = 8
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/ai/upload_foyer)
"ixR" = (
/obj/effect/floor_decal/spline/plain/black,
@@ -64719,7 +65417,7 @@
master_tag = "airlock_horizon_dock_deck_3_starboard_1";
name = "airlock_horizon_dock_deck_3_starboard_1"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"iyg" = (
/obj/structure/cable/green{
@@ -64939,7 +65637,7 @@
"izG" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/auxatmos)
"izH" = (
/obj/effect/floor_decal/corner/lime/diagonal,
@@ -64999,7 +65697,9 @@
/turf/unsimulated/floor,
/area/antag/mercenary)
"iAc" = (
-/obj/item/stack/material/wood/full,
+/obj/item/stack/material/wood/full{
+ pixel_y = 6
+ },
/obj/structure/table/steel,
/turf/simulated/floor/wood,
/area/horizon/maintenance/deck_2/wing/starboard)
@@ -65160,7 +65860,11 @@
/turf/simulated/floor/tiled,
/area/horizon/operations/lobby)
"iBh" = (
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"iBn" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -65446,7 +66150,7 @@
dir = 4
},
/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"iDk" = (
/obj/structure/cable/green{
icon_state = "1-2"
@@ -65481,6 +66185,9 @@
dir = 1;
icon_state = "pipe-c"
},
+/obj/effect/floor_decal/spline/fancy/wood{
+ dir = 6
+ },
/turf/simulated/floor/wood/walnut,
/area/horizon/medical/smoking)
"iDr" = (
@@ -65535,8 +66242,23 @@
/area/horizon/engineering/reactor/indra/office)
"iDV" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/alarm/north,
-/obj/random/maintenance_junk_or_loot,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/table/steel,
+/obj/item/paper{
+ pixel_x = -1;
+ pixel_y = 7
+ },
+/obj/item/paper{
+ pixel_x = 6;
+ pixel_y = 1
+ },
+/obj/item/pen/fountain/black{
+ pixel_x = -12;
+ pixel_y = -1
+ },
+/obj/structure/machinery/light/small{
+ dir = 1
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/operations/starboard)
"iEa" = (
@@ -65618,6 +66340,9 @@
/obj/structure/trash_pile,
/obj/structure/machinery/alarm/north,
/obj/effect/floor_decal/industrial/outline/grey,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/auxatmos)
"iEN" = (
@@ -65757,6 +66482,7 @@
icon_state = "0-8"
},
/obj/structure/machinery/power/apc/low/south,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/atmos_crosser)
"iFD" = (
@@ -65767,7 +66493,12 @@
/area/horizon/engineering/shields)
"iFI" = (
/obj/random/loot,
-/obj/structure/machinery/light/small/emergency{
+/obj/effect/decal/cleanable/dirt,
+/obj/random/med_stack,
+/obj/structure/closet/crate{
+ name = "Cremation Urn Materials"
+ },
+/obj/structure/machinery/light/small{
dir = 8
},
/turf/simulated/floor/plating,
@@ -65936,7 +66667,7 @@
/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
dir = 4
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/drone_fabrication)
"iGX" = (
/obj/structure/table/wood,
@@ -65979,10 +66710,10 @@
/obj/structure/cable/green{
icon_state = "1-8"
},
-/obj/structure/railing/mapped{
+/obj/structure/railing/mapped,
+/obj/effect/floor_decal/industrial/warning{
dir = 4
},
-/obj/structure/railing/mapped,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/medical/cryo)
"iHj" = (
@@ -66021,6 +66752,9 @@
"iHu" = (
/obj/structure/closet/crate/freezer/rations,
/obj/effect/floor_decal/industrial/outline/blue,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/simulated/floor/tiled/dark/full,
/area/horizon/command/bridge/aibunker)
"iHv" = (
@@ -66105,7 +66839,7 @@
dir = 4
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"iHT" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -66191,6 +66925,9 @@
/obj/structure/machinery/power/breakerbox/activated{
RCon_tag = "Operations Substation"
},
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/operations)
"iIN" = (
@@ -66232,7 +66969,7 @@
/obj/effect/floor_decal/industrial/outline/grey,
/obj/random/dirt_75,
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/security/port)
"iJa" = (
/obj/effect/floor_decal/corner/brown{
@@ -66288,13 +67025,10 @@
/turf/simulated/floor/plating,
/area/horizon/engineering/bluespace_drive)
"iJq" = (
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/random/dirt_75,
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/main/starboard)
+/obj/random/maintenance_junk_or_loot,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/maintenance/deck_2/wing/port/far)
"iJr" = (
/obj/structure/bed/stool/chair/holochair{
dir = 1
@@ -66458,6 +67192,7 @@
dir = 1;
name = "adjusted light fixture"
},
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/medical/cryo)
"iKz" = (
@@ -66532,14 +67267,17 @@
/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
dir = 4
},
+/obj/effect/floor_decal/spline/fancy/wood{
+ dir = 8
+ },
/turf/simulated/floor/wood/walnut,
/area/horizon/medical/smoking)
"iLt" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"iLu" = (
/obj/effect/floor_decal/corner/mauve/diagonal,
@@ -66632,11 +67370,14 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/atmos/turbine)
"iMi" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 5
- },
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"iMk" = (
/obj/effect/floor_decal/corner/mauve{
@@ -66754,7 +67495,7 @@
name = "airlock_horizon_deck_3_aft_1";
frequency = 1001
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"iMZ" = (
/obj/effect/floor_decal/industrial/warning{
@@ -66869,10 +67610,11 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 5
},
+/obj/structure/machinery/light/small/floor,
/turf/simulated/floor/wood,
/area/horizon/service/cafeteria)
"iNQ" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/random/dirt_75,
@@ -66937,7 +67679,7 @@
/area/horizon/operations/office_aux)
"iOp" = (
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/carpet/rubber,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/aft)
"iOq" = (
/obj/effect/floor_decal/industrial/hatch/yellow,
@@ -67057,9 +67799,6 @@
/area/horizon/service/kitchen)
"iPn" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/light/small/emergency{
- dir = 1
- },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard)
"iPo" = (
@@ -67069,7 +67808,7 @@
master_tag = "airlock_horizon_deck_2_starboard_aft";
name = "airlock_horizon_deck_2_starboard_aft"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"iPu" = (
/obj/random/pottedplant{
@@ -67249,7 +67988,11 @@
/obj/structure/bed/stool/chair/folding{
dir = 4
},
-/turf/simulated/floor/plating,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/floor_decal/corner/brown{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"iQu" = (
/obj/structure/platform{
@@ -67291,7 +68034,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 9
},
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port)
"iQJ" = (
@@ -67420,15 +68163,18 @@
/obj/effect/floor_decal/corner/dark_blue{
dir = 5
},
+/obj/structure/machinery/light{
+ dir = 1
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/command/bridge/aibunker)
"iRo" = (
/obj/structure/closet/crate,
/obj/random/loot,
+/obj/effect/floor_decal/industrial/outline/grey,
/obj/effect/floor_decal/industrial/warning{
dir = 10
},
-/obj/effect/floor_decal/industrial/outline/grey,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/auxatmos)
"iRu" = (
@@ -67510,6 +68256,7 @@
/turf/simulated/floor/tiled,
/area/horizon/hangar/operations)
"iSm" = (
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/service/port)
"iSo" = (
@@ -67634,8 +68381,8 @@
/turf/simulated/floor/tiled,
/area/horizon/hangar/intrepid)
"iTg" = (
-/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/effect/decal/cleanable/dirt,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/wing_starboard)
"iTh" = (
@@ -67650,7 +68397,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/security/port)
"iTo" = (
/obj/structure/table/rack,
@@ -67730,6 +68477,11 @@
/obj/structure/railing/mapped,
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/central)
+"iTN" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_1/operations/starboard)
"iTP" = (
/obj/effect/floor_decal/spline/fancy/wood{
dir = 8
@@ -67740,7 +68492,7 @@
/turf/simulated/floor/wood,
/area/horizon/service/mess_hall)
"iTV" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/structure/reagent_dispensers/watertank,
@@ -67798,9 +68550,10 @@
/area/centcom/evac)
"iUv" = (
/obj/structure/disposalpipe/segment,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/research)
"iUw" = (
@@ -67886,9 +68639,12 @@
/turf/simulated/floor/plating,
/area/horizon/hangar/intrepid)
"iVb" = (
-/obj/random/dirt_75,
-/turf/simulated/floor,
-/area/horizon/maintenance/deck_3/security/port)
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 6
+ },
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/wing/port)
"iVd" = (
/obj/item/reagent_containers/food/drinks/carton/soymilk{
pixel_x = 6;
@@ -67925,14 +68681,17 @@
/turf/simulated/open/airless,
/area/horizon/exterior)
"iVt" = (
-/obj/structure/machinery/light/small/emergency{
- dir = 8
- },
/obj/effect/floor_decal/industrial/hatch/red,
/obj/effect/floor_decal/industrial/warning/corner{
- dir = 1
+ dir = 4
},
-/turf/simulated/floor/tiled/dark,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/command/bridge/selfdestruct)
"iVx" = (
/obj/effect/floor_decal/spline/fancy/wood{
@@ -67944,15 +68703,12 @@
/turf/simulated/floor/wood,
/area/horizon/service/cafeteria)
"iVG" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
+/obj/effect/floor_decal/corner/dark_green{
+ dir = 10
},
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/floor_decal/spline/fancy/wood,
-/turf/simulated/floor/wood,
-/area/horizon/service/bar)
+/obj/structure/machinery/light,
+/turf/simulated/floor/tiled,
+/area/horizon/hallway/primary/deck_3/starboard)
"iVH" = (
/obj/effect/floor_decal/industrial/warning{
dir = 9
@@ -67964,7 +68720,7 @@
/turf/simulated/floor/reinforced,
/area/horizon/engineering/gravity_gen)
"iVO" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/random/junk,
@@ -67973,6 +68729,7 @@
/obj/structure/railing/mapped{
icon_state = "railing0-0"
},
+/obj/structure/machinery/alarm/north,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/port)
"iVP" = (
@@ -68062,6 +68819,12 @@
/area/horizon/operations/loading)
"iWj" = (
/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 6
+ },
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard)
"iWk" = (
@@ -68096,7 +68859,6 @@
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/random/dirt_75,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"iWu" = (
@@ -68427,7 +69189,8 @@
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor,
/area/horizon/ai/upload_foyer)
"iYD" = (
/obj/structure/table/wood,
@@ -68526,9 +69289,6 @@
/obj/structure/platform_deco/dark{
dir = 6
},
-/obj/structure/railing/mapped{
- dir = 4
- },
/turf/simulated/open,
/area/horizon/maintenance/deck_2/cryo)
"iZk" = (
@@ -68566,7 +69326,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/structure/bed/stool/bar/padded/red,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/turf/simulated/floor/tiled/dark,
@@ -68685,6 +69445,17 @@
/obj/structure/machinery/meter,
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/atmos/propulsion)
+"iZX" = (
+/obj/structure/platform{
+ dir = 4
+ },
+/obj/structure/platform,
+/obj/structure/platform_deco{
+ dir = 5;
+ pixel_y = -1
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/wing/port/far)
"iZZ" = (
/obj/effect/floor_decal/carpet{
dir = 4
@@ -68758,8 +69529,18 @@
dir = 8
},
/obj/structure/machinery/power/apc/low/east,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard/amidships)
+"jaF" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/service/port)
"jaG" = (
/obj/structure/platform{
dir = 4
@@ -68768,8 +69549,9 @@
/turf/simulated/floor/tiled/white,
/area/horizon/rnd/xenoarch/atrium)
"jaK" = (
+/obj/effect/floor_decal/corner/brown,
/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"jaO" = (
/obj/effect/floor_decal/industrial/warning{
@@ -68861,7 +69643,10 @@
/area/centcom/control)
"jbx" = (
/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard)
"jbC" = (
/obj/structure/machinery/light,
@@ -69120,10 +69905,12 @@
/turf/simulated/floor/plating,
/area/horizon/engineering/atmos/air)
"jdo" = (
-/obj/random/dirt_75,
-/obj/random/dirt_75,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
/turf/simulated/floor/tiled/dark,
-/area/horizon/maintenance/deck_1/main/port/shortcut)
+/area/horizon/maintenance/deck_1/wing/starboard)
"jdq" = (
/obj/structure/sign/drop{
desc = "A warning sign which reads 'DANGER: FALLING HAZARD' and 'THIS EQUIPMENT STARTS AND STOPS AUTOMATICALLY'.";
@@ -69145,12 +69932,12 @@
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/port/docks)
"jdR" = (
-/obj/structure/machinery/atmospherics/pipe/simple/visible{
+/obj/random/dirt_75,
+/obj/random/dirt_75,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
},
-/obj/random/dirt_75,
-/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/auxatmos)
"jdT" = (
/obj/structure/disposalpipe/segment{
@@ -69214,7 +70001,7 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/shuttle/quark/cockpit)
"jeB" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/structure/cable{
@@ -69472,7 +70259,7 @@
dir = 4;
icon_state = "pipe-c"
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/turf/simulated/floor,
@@ -69767,7 +70554,7 @@
dir = 8
},
/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"jib" = (
/obj/structure/shuttle_part/mercenary/small{
icon_state = "4,1"
@@ -69848,7 +70635,7 @@
"jiy" = (
/obj/effect/floor_decal/industrial/hatch/yellow,
/obj/structure/reagent_dispensers/watertank,
-/turf/simulated/floor/carpet/rubber,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/aft)
"jiA" = (
/obj/effect/floor_decal/corner/white{
@@ -70065,6 +70852,9 @@
},
/obj/effect/floor_decal/corner_wide/yellow/diagonal,
/obj/structure/disposalpipe/segment,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/break_room)
"jkm" = (
@@ -70141,6 +70931,9 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/cafe)
"jkJ" = (
@@ -70362,7 +71155,7 @@
icon_state = "1-8"
},
/obj/random/dirt_75,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"jlZ" = (
/obj/effect/floor_decal/industrial/warning{
@@ -70464,6 +71257,9 @@
"jmB" = (
/obj/structure/machinery/portable_atmospherics/powered/pump/filled,
/obj/effect/floor_decal/industrial/outline/blue,
+/obj/structure/machinery/light/small{
+ dir = 1
+ },
/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/auxatmos)
"jmD" = (
@@ -70525,7 +71321,6 @@
dir = 4
},
/obj/random/dirt_75,
-/obj/random/dirt_75,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/starboard)
"jmY" = (
@@ -70551,7 +71346,8 @@
pixel_x = -6;
pixel_y = 28
},
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/corner/dark_blue/diagonal,
+/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/port/docks)
"jnl" = (
/obj/structure/bed/stool,
@@ -70620,10 +71416,7 @@
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/lattice/catwalk/indoor/grate/damaged{
- color = "#4c535b"
- },
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/ramp/bottom,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"jnE" = (
/turf/simulated/floor/carpet/purple,
@@ -70686,9 +71479,8 @@
dir = 10
},
/obj/random/dirt_75,
-/obj/random/dirt_75,
/obj/item/material/shard,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/security/port)
"jnR" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -70818,6 +71610,16 @@
},
/turf/simulated/floor/exoplanet/grass/grove,
/area/centcom/shared_dream)
+"joO" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
+/obj/structure/platform_deco{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/maintenance/deck_1/wing/starboard/far)
"joT" = (
/obj/effect/floor_decal/corner/white/diagonal,
/turf/simulated/floor/holofloor/carpet/rubber,
@@ -70834,7 +71636,7 @@
/obj/effect/floor_decal/industrial/hatch_door/engineering{
dir = 1
},
-/turf/simulated/floor/tiled/dark,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/gravity_gen)
"jpd" = (
/obj/structure/bed/stool/padded/brown{
@@ -70858,19 +71660,20 @@
/turf/unsimulated/wall/darkshuttlewall,
/area/centcom/control)
"jpj" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/nacelle)
"jpk" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
- },
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
},
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 1
+ },
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/auxatmos)
"jpo" = (
/obj/structure/bed/stool/chair/padded/brown{
@@ -70938,7 +71741,7 @@
/obj/structure/machinery/door/firedoor{
dir = 4
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard)
"jpR" = (
/obj/structure/machinery/computer/slot_machine,
@@ -70973,6 +71776,7 @@
c_tag = "Engineering - Deck 3 - Command Substation";
dir = 4
},
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor,
/area/horizon/maintenance/substation/command)
"jqe" = (
@@ -70982,6 +71786,19 @@
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/near)
+"jqg" = (
+/obj/structure/machinery/door/firedoor{
+ req_one_access = list(24,11,67,73);
+ dir = 4
+ },
+/obj/structure/machinery/door/airlock/maintenance_hatch{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/hatch_door/yellow{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/hangar/intrepid/interstitial)
"jqj" = (
/obj/effect/floor_decal/industrial/warning{
dir = 4
@@ -70990,10 +71807,10 @@
dir = 8
},
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/central_ring)
"jqn" = (
/obj/structure/disposalpipe/segment{
@@ -71022,6 +71839,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/atmos_crosser)
"jqG" = (
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/atmos_crosser)
"jqI" = (
@@ -71060,6 +71878,7 @@
shuttle_tag = "Quark";
cycle_to_external_air = 1
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/shuttle/quark/cargo_hold)
"jqW" = (
@@ -71296,7 +72115,7 @@
dir = 8
},
/turf/simulated/open/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"jsL" = (
/obj/effect/floor_decal/corner/dark_blue/diagonal,
/obj/structure/table/steel,
@@ -71368,7 +72187,7 @@
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/turf/simulated/floor/plating,
@@ -71421,7 +72240,10 @@
/obj/item/storage/bag/inflatable,
/obj/random/loot,
/obj/item/storage/bag/inflatable,
-/turf/simulated/floor/tiled/dark,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"jtC" = (
/obj/effect/floor_decal/corner_wide/green{
@@ -71537,6 +72359,13 @@
/area/antag/ninja)
"jur" = (
/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 1
+ },
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/main/starboard)
"juN" = (
@@ -71583,7 +72412,7 @@
/obj/structure/machinery/door/airlock/external,
/obj/effect/map_effect/marker_helper/airlock/interior,
/obj/structure/machinery/atmospherics/pipe/simple/hidden,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/crewlounge)
"jvb" = (
/obj/random/pottedplant,
@@ -71731,10 +72560,9 @@
/obj/structure/cable/green{
icon_state = "0-4"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/service/starboard)
"jvO" = (
-/obj/structure/lattice/catwalk,
/obj/structure/machinery/atmospherics/pipe/zpipe/down/scrubbers{
dir = 1
},
@@ -71744,6 +72572,7 @@
/obj/structure/cable{
icon_state = "11-8"
},
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/open,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"jvW" = (
@@ -71855,6 +72684,9 @@
/obj/random/loot,
/obj/random/loot,
/obj/random/contraband,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard)
"jwz" = (
@@ -72015,7 +72847,10 @@
"jxL" = (
/obj/effect/decal/cleanable/dirt,
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 5
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard)
"jxU" = (
/obj/structure/machinery/computer/general_air_control/large_tank_control/wall{
@@ -72099,7 +72934,8 @@
"jyC" = (
/obj/structure/machinery/meter,
/obj/structure/machinery/atmospherics/pipe/manifold4w/visible,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/auxatmos)
"jyE" = (
/obj/structure/bonfire/fireplace,
@@ -72184,7 +73020,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden{
dir = 10
},
-/obj/structure/window/reinforced{
+/obj/effect/floor_decal/industrial/warning{
dir = 1
},
/turf/simulated/floor,
@@ -72368,9 +73204,6 @@
/obj/structure/platform_deco/ledge/dark{
dir = 5
},
-/obj/structure/railing/mapped{
- dir = 8
- },
/turf/simulated/open,
/area/horizon/maintenance/deck_2/cryo)
"jzT" = (
@@ -72496,9 +73329,8 @@
/obj/structure/machinery/firealarm/north,
/obj/structure/closet/emcloset,
/obj/effect/floor_decal/industrial/outline/emergency_closet,
-/obj/structure/machinery/light/spot{
- dir = 4;
- must_start_working = 1
+/obj/structure/machinery/light{
+ dir = 4
},
/turf/simulated/floor/tiled/dark,
/area/horizon/holodeck_control/beta)
@@ -72506,8 +73338,8 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/structure/machinery/alarm/east,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/engineering/drone_fabrication)
"jBb" = (
@@ -72517,15 +73349,13 @@
/turf/unsimulated/floor,
/area/centcom/ferry)
"jBf" = (
-/obj/effect/floor_decal/corner_wide/blue{
- dir = 5
- },
-/obj/effect/floor_decal/corner_wide/yellow{
- dir = 10
+/obj/structure/machinery/alarm/south,
+/obj/effect/floor_decal/industrial/hatch/red,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
},
/obj/effect/floor_decal/industrial/warning,
-/obj/structure/machinery/alarm/south,
-/turf/simulated/floor/reinforced,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/command/bridge/selfdestruct)
"jBg" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -72564,6 +73394,10 @@
},
/turf/unsimulated/floor,
/area/centcom/bar)
+"jBv" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_1/wing/starboard/far)
"jBx" = (
/obj/turbolift_map_holder/scc_ship/primary,
/turf/simulated/floor/plating,
@@ -72601,10 +73435,10 @@
/area/horizon/security/autopsy_laboratory)
"jBM" = (
/obj/effect/floor_decal/industrial/warning,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/port/far)
"jBR" = (
/obj/effect/floor_decal/industrial/warning/corner{
@@ -72737,13 +73571,14 @@
/turf/simulated/floor/tiled/white,
/area/horizon/rnd/test_range)
"jCu" = (
-/obj/effect/floor_decal/industrial/outline/red,
-/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/cable/green{
icon_state = "1-2"
},
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"jCA" = (
/obj/structure/machinery/door/airlock/centcom{
@@ -72756,7 +73591,7 @@
/area/centcom/spawning)
"jCB" = (
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/research)
"jCF" = (
/obj/structure/lattice,
@@ -72803,7 +73638,7 @@
/obj/structure/lattice/catwalk/indoor/grate/damaged{
color = "#4c535b"
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/turf/simulated/floor/plating,
@@ -73186,10 +74021,11 @@
/obj/effect/floor_decal/industrial/warning{
dir = 4
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
-/turf/simulated/floor/plating,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard/far)
"jGc" = (
/obj/effect/floor_decal/spline/fancy/wood,
@@ -73346,11 +74182,17 @@
/turf/simulated/floor/plating,
/area/horizon/engineering/reactor/supermatter/airlock)
"jGV" = (
-/obj/structure/platform_stairs/south_north_solo,
/obj/structure/platform{
dir = 4
},
-/turf/simulated/floor/plating,
+/obj/structure/platform,
+/obj/structure/platform_deco{
+ dir = 5
+ },
+/obj/random/dirt_75,
+/obj/random/dirt_75,
+/obj/random/canister/restricted,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"jHa" = (
/turf/simulated/wall,
@@ -73471,13 +74313,14 @@
/turf/unsimulated/floor,
/area/centcom/legion/hangar5)
"jIt" = (
-/obj/structure/machinery/light{
+/obj/structure/machinery/light/floor{
dir = 1
},
-/turf/simulated/floor/bluegrid{
- name = "cooled mainframe floor";
- temperature = 278
+/obj/effect/floor_decal/corner/dark_blue{
+ dir = 10
},
+/obj/structure/machinery/alarm/north,
+/turf/simulated/floor/tiled/dark,
/area/horizon/ai/chamber)
"jIw" = (
/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
@@ -73616,7 +74459,7 @@
name = "airlock_horizon_deck_3_aft_1"
},
/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"jJs" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -73741,9 +74584,9 @@
/turf/simulated/floor/tiled/white,
/area/horizon/rnd/lab)
"jKw" = (
-/obj/random/dirt_75,
/obj/random/junk,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/port/shortcut)
"jKx" = (
/obj/structure/table/standard,
@@ -73794,7 +74637,8 @@
pixel_x = 20;
pixel_y = 6
},
-/turf/simulated/floor/plating,
+/obj/structure/lattice/catwalk/indoor/grate,
+/turf/simulated/floor,
/area/horizon/hallway/primary/deck_3/port/docks)
"jKX" = (
/obj/structure/table/reinforced/wood,
@@ -73837,12 +74681,11 @@
/turf/simulated/floor/holofloor/wood,
/area/horizon/holodeck/source_sauna)
"jLi" = (
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/structure/cable/green{
icon_state = "4-8"
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/random/dirt_75,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/main/starboard)
"jLj" = (
@@ -73954,6 +74797,19 @@
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
/turf/simulated/floor/tiled/full,
/area/horizon/operations/mining_main/refinery)
+"jMp" = (
+/obj/structure/machinery/atmospherics/pipe/simple/visible/yellow{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/mauve/diagonal,
+/obj/effect/floor_decal/corner/mauve{
+ dir = 10
+ },
+/obj/structure/machinery/light/floor{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/horizon/rnd/xenoarch/atrium)
"jMt" = (
/obj/structure/cable/green{
icon_state = "1-2"
@@ -74006,17 +74862,15 @@
/turf/simulated/floor/tiled/white,
/area/horizon/medical/icu)
"jMM" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/light/small/emergency{
- dir = 1
+/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
},
-/obj/structure/lattice/catwalk/indoor/grate/damaged{
- color = "#4c535b"
+/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 8
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_1/main/port)
+/turf/simulated/floor,
+/area/horizon/maintenance/deck_3/auxatmos)
"jMO" = (
/obj/structure/shuttle_part/scc_space_ship{
icon_state = "d3-4-f"
@@ -74081,12 +74935,10 @@
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/port)
"jNs" = (
-/obj/structure/machinery/light/small/emergency{
- dir = 1
- },
+/obj/effect/decal/cleanable/dirt,
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_1/wing/port/far)
+/area/horizon/maintenance/deck_1/wing/starboard)
"jNt" = (
/obj/effect/floor_decal/industrial/warning,
/obj/random/dirt_75,
@@ -74104,8 +74956,8 @@
/obj/structure/machinery/atmospherics/pipe/simple/visible{
dir = 5
},
-/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"jNA" = (
/obj/structure/cable/green{
@@ -74165,7 +75017,7 @@
/obj/effect/floor_decal/industrial/warning,
/obj/effect/map_effect/map_helper/ruler_tiles_3,
/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"jNM" = (
/obj/structure/flora/ausbushes/ppflowers,
/obj/structure/flora/ausbushes/brflowers,
@@ -74272,7 +75124,10 @@
"jOh" = (
/obj/structure/table/rack,
/obj/random/loot,
-/turf/simulated/floor,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/far)
"jOj" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden{
@@ -74680,7 +75535,10 @@
"jQL" = (
/obj/effect/floor_decal/industrial/outline/grey,
/obj/random/canister/restricted,
-/turf/simulated/floor,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/security/port)
"jQT" = (
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/black,
@@ -74703,7 +75561,7 @@
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/item/reagent_containers/spray,
/obj/item/reagent_containers/spray,
-/turf/simulated/floor/tiled/dark,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/operations)
"jRe" = (
/obj/structure/table/glass{
@@ -74788,7 +75646,8 @@
/turf/simulated/floor/tiled/gridded,
/area/horizon/operations/warehouse)
"jRJ" = (
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/teleporter)
"jRL" = (
@@ -74805,7 +75664,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/turf/simulated/floor/tiled/dark/full,
@@ -74885,6 +75744,12 @@
},
/turf/unsimulated/floor,
/area/antag/mercenary)
+"jSc" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/random/maintenance_junk_or_loot,
+/obj/structure/lattice/catwalk/indoor,
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_1/wing/starboard/far)
"jSf" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 9
@@ -74971,8 +75836,8 @@
/turf/simulated/floor/tiled/gunmetal,
/area/horizon/operations/warehouse)
"jSx" = (
-/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"jSy" = (
/obj/structure/disposalpipe/segment{
@@ -75135,7 +76000,10 @@
/obj/random/loot,
/obj/structure/closet,
/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"jTF" = (
/obj/structure/bed/stool/chair{
@@ -75157,14 +76025,13 @@
},
/area/centcom/distress_prep)
"jTM" = (
-/obj/structure/machinery/door/firedoor{
- req_one_access = list(24,11,67,73);
- dir = 4
+/obj/random/dirt_75,
+/obj/structure/machinery/alarm/north,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
},
-/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/obj/effect/floor_decal/industrial/warning,
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_1/main/starboard)
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/cryo)
"jTO" = (
/obj/structure/machinery/door/airlock/maintenance{
dir = 4;
@@ -75217,7 +76084,7 @@
pixel_y = 3;
pixel_x = -8
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/drone_fabrication)
"jTV" = (
/obj/structure/disposalpipe/segment{
@@ -75480,7 +76347,7 @@
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/auxatmos)
"jVI" = (
/obj/structure/machinery/atmospherics/pipe/simple/visible/black{
@@ -75632,10 +76499,9 @@
/obj/effect/floor_decal/industrial/warning/corner{
dir = 8
},
-/obj/effect/floor_decal/industrial/warning,
/obj/structure/platform,
/obj/structure/railing/mapped,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"jWM" = (
/obj/effect/floor_decal/corner_wide/yellow{
@@ -75755,12 +76621,17 @@
/turf/simulated/wall,
/area/horizon/service/hydroponics/garden)
"jXE" = (
-/obj/effect/floor_decal/industrial/outline/yellow,
/obj/structure/machinery/atmospherics/pipe/simple/hidden{
dir = 6
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/port/far)
+"jXG" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 5
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/horizon/exterior/no_shields)
"jXH" = (
/obj/effect/floor_decal/industrial/warning{
dir = 8
@@ -76068,8 +76939,8 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"jZH" = (
-/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/structure/machinery/alarm/west,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"jZI" = (
@@ -76086,10 +76957,7 @@
icon_state = "1-4"
},
/obj/effect/floor_decal/industrial/warning/full,
-/turf/simulated/floor/bluegrid{
- name = "cooled mainframe floor";
- temperature = 278
- },
+/turf/simulated/floor/tiled/dark,
/area/horizon/ai/chamber)
"jZT" = (
/obj/structure/table/wood,
@@ -76349,7 +77217,10 @@
"kbC" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/trash_pile,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard)
"kbD" = (
/obj/structure/table/reinforced/steel,
@@ -76691,8 +77562,7 @@
/obj/structure/railing/mapped{
dir = 8
},
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"kdv" = (
/obj/structure/cable{
@@ -76719,10 +77589,12 @@
"kdG" = (
/obj/structure/closet/crate,
/obj/random/loot,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/cobweb2,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"kdL" = (
@@ -76974,7 +77846,7 @@
master_tag = "airlock_horizon_dock_deck_3_starboard_3";
name = "airlock_horizon_dock_deck_3_starboard_3"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"kfA" = (
/obj/effect/floor_decal/spline/fancy/wood/corner{
@@ -77013,7 +77885,7 @@
dir = 8
},
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/turf/simulated/floor/plating,
@@ -77073,6 +77945,9 @@
pixel_y = -32
},
/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/auxatmos)
"kgd" = (
@@ -77116,9 +77991,10 @@
/turf/unsimulated/wall/steel,
/area/antag/ninja)
"kgm" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/port/far)
"kgs" = (
@@ -77150,7 +78026,7 @@
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/teleporter)
"kgE" = (
@@ -77854,6 +78730,9 @@
dir = 1
},
/obj/effect/floor_decal/sign/w,
+/obj/structure/machinery/light/floor{
+ dir = 1
+ },
/turf/simulated/floor/tiled/white,
/area/horizon/medical/hallway)
"kle" = (
@@ -77862,6 +78741,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
+/obj/structure/machinery/light/small/floor,
/turf/simulated/floor/wood,
/area/horizon/service/mess_hall)
"klg" = (
@@ -77894,6 +78774,10 @@
/area/horizon/holodeck/source_trinary)
"kll" = (
/obj/effect/spider/stickyweb,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/sign/poster/civilian/bay_51{
+ pixel_y = 32
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/operations/starboard)
"kln" = (
@@ -77948,10 +78832,17 @@
/area/horizon/rnd/conference)
"klF" = (
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/tiled,
+/obj/effect/floor_decal/corner/brown{
+ dir = 9
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"klH" = (
/obj/structure/bed/stool/chair/office/light,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/medical/cryo)
"klK" = (
@@ -77999,11 +78890,15 @@
/area/horizon/service/hydroponics)
"klY" = (
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
-/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/obj/structure/table/rack,
+/obj/random/plushie,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"klZ" = (
/obj/structure/railing/mapped{
@@ -78087,7 +78982,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/atmos/storage_maintenance)
"kmr" = (
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/effect/floor_decal/industrial/warning{
dir = 9
},
@@ -78113,14 +79008,12 @@
/turf/simulated/floor/tiled/white,
/area/horizon/medical/ward)
"kmv" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/machinery/light/small{
+ dir = 8
},
-/obj/effect/floor_decal/corner/pink/diagonal,
-/obj/random/dirt_75,
-/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
-/area/horizon/maintenance/deck_2/wing/port/nacelle)
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/wing/port/far)
"kmF" = (
/obj/structure/machinery/firealarm/west,
/obj/structure/closet/secure_closet/engineering_electrical,
@@ -78171,7 +79064,7 @@
/obj/structure/machinery/door/airlock/maintenance{
req_access = list(12)
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/auxatmos)
"kmO" = (
/obj/structure/cable/green{
@@ -78317,9 +79210,9 @@
/area/horizon/hangar/operations)
"knA" = (
/obj/structure/machinery/alarm/south,
-/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/spiderling_remains,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/wing_starboard)
"knB" = (
@@ -78414,6 +79307,7 @@
/obj/structure/machinery/door/firedoor/multi_tile{
dir = 2
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor,
/area/horizon/maintenance/deck_2/wing/port/far)
"kor" = (
@@ -78437,8 +79331,10 @@
/area/horizon/stairwell/engineering/deck_2)
"kov" = (
/obj/structure/railing/mapped,
-/obj/structure/girder,
/obj/effect/decal/cleanable/cobweb2,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard)
"kow" = (
@@ -78552,6 +79448,10 @@
/obj/structure/cable{
icon_state = "2-4"
},
+/obj/structure/lattice/catwalk/indoor,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/xenoarchaeology)
"kpd" = (
@@ -78600,7 +79500,7 @@
dir = 6
},
/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port)
"kpl" = (
/obj/effect/floor_decal/industrial/hatch/grey,
@@ -78809,7 +79709,7 @@
},
/obj/structure/lattice/catwalk,
/turf/space,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"kqW" = (
/turf/simulated/floor/tiled/ramp/bottom{
dir = 4
@@ -78821,7 +79721,7 @@
},
/obj/item/hullbeacon/red,
/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"kri" = (
/obj/effect/floor_decal/corner/yellow/full{
dir = 4
@@ -78946,7 +79846,7 @@
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 4
},
-/turf/simulated/floor/tiled/dark/cooled,
+/turf/simulated/floor/tiled/dark,
/area/horizon/ai/upload)
"ksl" = (
/obj/structure/flora/log_bench,
@@ -79072,6 +79972,9 @@
/area/tdome/tdomeobserve)
"kti" = (
/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"ktm" = (
@@ -79126,8 +80029,8 @@
/obj/effect/floor_decal/industrial/warning{
dir = 8
},
-/obj/structure/machinery/light/small/emergency,
-/turf/simulated/floor/plating,
+/obj/structure/machinery/light/small,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port)
"ktG" = (
/obj/structure/table/reinforced,
@@ -79376,7 +80279,8 @@
dir = 5
},
/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/auxatmos)
"kuL" = (
/turf/simulated/wall,
@@ -79435,7 +80339,6 @@
/turf/simulated/floor/plating,
/area/horizon/engineering/reactor/indra/office)
"kvi" = (
-/obj/effect/floor_decal/sign/w,
/obj/structure/cable/green{
icon_state = "1-2"
},
@@ -79456,6 +80359,7 @@
pixel_y = 25;
req_access = list(5)
},
+/obj/effect/floor_decal/sign/w,
/turf/simulated/floor/tiled/white,
/area/horizon/medical/hallway/upper)
"kvn" = (
@@ -79496,7 +80400,7 @@
"kvw" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/random/dirt_75,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/turf/simulated/floor,
@@ -79547,6 +80451,10 @@
name = "Powernet Sensor - Deck 1 Research Subgrid";
name_tag = "Deck 1 Research Subgrid"
},
+/obj/structure/lattice/catwalk/indoor,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/xenoarchaeology)
"kvS" = (
@@ -79571,8 +80479,6 @@
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/random/dirt_75,
-/obj/random/dirt_75,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"kvX" = (
@@ -79798,7 +80704,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 4
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/random/maintenance_junk_or_loot,
@@ -80011,7 +80917,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/main/starboard)
"kyH" = (
@@ -80193,10 +81099,7 @@
"kzt" = (
/obj/structure/machinery/porta_turret/cannon,
/obj/effect/floor_decal/industrial/warning/full,
-/turf/simulated/floor/bluegrid{
- name = "cooled mainframe floor";
- temperature = 278
- },
+/turf/simulated/floor/bluegrid,
/area/horizon/ai/chamber)
"kzy" = (
/obj/random/dirt_75,
@@ -80211,9 +81114,11 @@
/obj/random/medical,
/obj/random/medical,
/obj/random/dirt_75,
-/obj/random/dirt_75,
/obj/random/med_stack,
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"kzB" = (
@@ -80258,7 +81163,7 @@
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/substation/medical)
"kzQ" = (
/obj/effect/floor_decal/spline/fancy/wood{
@@ -80304,7 +81209,7 @@
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/operations/starboard/far)
"kAa" = (
/obj/structure/cable/green{
@@ -80481,9 +81386,6 @@
c_tag = "Medical - Staff Smoking Lounge";
dir = 1
},
-/obj/effect/floor_decal/spline/fancy/wood{
- dir = 8
- },
/turf/simulated/floor/tiled/dark,
/area/horizon/medical/smoking)
"kBh" = (
@@ -80569,7 +81471,7 @@
"kBv" = (
/obj/random/junk,
/obj/effect/floor_decal/industrial/outline/yellow,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/port)
"kBw" = (
/obj/effect/decal/cleanable/dirt,
@@ -80661,6 +81563,12 @@
/obj/structure/machinery/light,
/turf/unsimulated/floor/rubber_carpet,
/area/centcom/control)
+"kCc" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/wing/port/near)
"kCe" = (
/obj/effect/decal/cleanable/cobweb2,
/obj/effect/decal/cleanable/dirt,
@@ -80669,6 +81577,9 @@
dir = 8
},
/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"kCi" = (
@@ -80833,11 +81744,11 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/stairwell/engineering/deck_2)
"kDq" = (
-/obj/structure/machinery/light,
-/turf/simulated/floor/bluegrid{
- name = "cooled mainframe floor";
- temperature = 278
+/obj/structure/machinery/light/floor,
+/obj/effect/floor_decal/corner/dark_blue{
+ dir = 5
},
+/turf/simulated/floor/tiled/dark,
/area/horizon/ai/chamber)
"kDs" = (
/obj/effect/decal/fake_object{
@@ -80984,8 +81895,8 @@
"kEf" = (
/obj/effect/floor_decal/industrial/outline/blue,
/obj/structure/machinery/portable_atmospherics/powered/pump/filled,
-/obj/structure/machinery/light/small{
- dir = 1
+/obj/structure/sign/air_station{
+ pixel_y = 32
},
/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/auxatmos)
@@ -81035,6 +81946,12 @@
},
/turf/simulated/floor/tiled/dark,
/area/horizon/weapons/grauwolf)
+"kEE" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/main/starboard)
"kEG" = (
/obj/structure/machinery/door/blast/regular{
id = "exteriorpropulsionstarboard"
@@ -81043,6 +81960,14 @@
/area/horizon/engineering/atmos/propulsion/starboard)
"kEI" = (
/obj/random/junk,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/structure/table/rack,
+/obj/random/dirt_75,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard)
"kEM" = (
@@ -81259,6 +82184,12 @@
},
/turf/unsimulated/floor,
/area/centcom/legion/hangar5)
+"kFV" = (
+/obj/structure/railing/mapped{
+ dir = 1
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/horizon/exterior/no_shields)
"kFZ" = (
/obj/structure/cable/green{
icon_state = "1-2"
@@ -81464,6 +82395,16 @@
/obj/structure/machinery/portable_atmospherics/canister/oxygen,
/turf/simulated/floor/plating,
/area/horizon/hangar/intrepid)
+"kGJ" = (
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/effect/floor_decal/spline/plain/black{
+ dir = 1
+ },
+/obj/structure/machinery/light/floor,
+/turf/simulated/floor/tiled/dark,
+/area/horizon/engineering/break_room)
"kGK" = (
/obj/structure/closet/emcloset,
/obj/effect/floor_decal/industrial/outline/emergency_closet,
@@ -81478,7 +82419,7 @@
/obj/structure/machinery/door/airlock/maintenance_hatch{
dir = 4
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/aft/starboard)
"kGR" = (
/obj/structure/cable/green{
@@ -81805,10 +82746,10 @@
/turf/simulated/floor/tiled,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"kIR" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
-/obj/random/dirt_75,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor,
/area/horizon/maintenance/deck_2/wing/port/far)
"kIS" = (
@@ -81816,7 +82757,7 @@
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/main/port/shortcut)
"kIT" = (
/obj/structure/grille,
@@ -81898,13 +82839,13 @@
/area/horizon/holodeck/source_moghes)
"kJG" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 8
},
/obj/structure/cable{
icon_state = "4-8"
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard)
"kJK" = (
@@ -82143,14 +83084,8 @@
/turf/simulated/floor/tiled,
/area/horizon/crew/fitness/gym)
"kLq" = (
-/obj/structure/railing/mapped{
- dir = 1
- },
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
- },
-/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/obj/structure/platform,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"kLr" = (
/obj/structure/cable/green{
@@ -82352,14 +83287,13 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"kMN" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/item/material/shard,
-/obj/structure/lattice/catwalk/indoor/grate/damaged{
- color = "#4c535b"
+/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
},
/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_1/main/port)
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_1/wing/starboard/far)
"kMP" = (
/obj/effect/floor_decal/industrial/warning{
dir = 6
@@ -82418,7 +83352,17 @@
/area/horizon/rnd/test_range)
"kNd" = (
/obj/random/dirt_75,
-/turf/simulated/floor/plating,
+/obj/item/trash/cigbutt/cigarbutt{
+ pixel_x = -2
+ },
+/obj/item/trash/cigbutt{
+ pixel_y = -12;
+ pixel_x = 7
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/main/port/shortcut)
"kNj" = (
/obj/effect/floor_decal/corner/dark_blue/full{
@@ -82532,11 +83476,11 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/service/bar)
"kOh" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/structure/machinery/recharge_station,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/drone_fabrication)
"kOq" = (
/obj/effect/floor_decal/spline/plain,
@@ -82558,6 +83502,7 @@
dir = 8;
pixel_x = 20
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/crewlounge)
"kOs" = (
@@ -82696,6 +83641,9 @@
/obj/structure/cable{
icon_state = "1-2"
},
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/starboard)
"kPR" = (
@@ -82933,12 +83881,15 @@
/obj/effect/landmark{
name = "Revenant"
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/random/maintenance_junk_or_loot,
/obj/random/dirt_75,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/research)
"kRR" = (
/obj/structure/machinery/door/blast/shutters/open{
@@ -82961,7 +83912,10 @@
/obj/structure/table/steel,
/obj/random/loot,
/obj/random/dirt_75,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard)
"kRV" = (
/obj/structure/holostool,
@@ -83003,7 +83957,7 @@
"kSk" = (
/obj/effect/decal/cleanable/cobweb,
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/effect/floor_decal/industrial/warning/corner{
@@ -83060,9 +84014,6 @@
/obj/effect/floor_decal/corner/dark_green{
dir = 6
},
-/obj/structure/machinery/light{
- dir = 4
- },
/obj/structure/machinery/atmospherics/unary/vent_pump/on{
dir = 8
},
@@ -83472,7 +84423,9 @@
/turf/simulated/floor/plating,
/area/horizon/operations/lobby)
"kVr" = (
-/turf/simulated/floor/plating,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/curtain/open/bar,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"kVs" = (
/obj/structure/bed/stool/padded/brown{
@@ -83599,7 +84552,7 @@
name = "airlock_horizon_deck_2_aft_sm"
},
/obj/effect/map_effect/marker_helper/airlock/interior,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/reactor/supermatter/airlock)
"kWk" = (
/obj/effect/map_effect/window_spawner/full/reinforced/grille/firedoor,
@@ -83639,6 +84592,15 @@
},
/turf/simulated/floor/tiled/dark,
/area/shuttle/legion)
+"kWH" = (
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/aux{
+ dir = 9
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/redgrid,
+/area/horizon/command/bridge/selfdestruct)
"kWJ" = (
/obj/structure/machinery/camera/network/medbay{
c_tag = "Medical - Morgue Port";
@@ -83659,7 +84621,7 @@
},
/area/horizon/medical/morgue)
"kWK" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/effect/decal/cleanable/dirt,
@@ -83788,7 +84750,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/turf/unsimulated/floor/plating,
@@ -83958,12 +84920,22 @@
},
/turf/simulated/floor,
/area/horizon/command/bridge/meeting_room)
+"kYu" = (
+/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_3/aft/starboard/far)
"kYw" = (
/obj/effect/floor_decal/industrial/outline/grey,
/obj/effect/floor_decal/industrial/warning{
dir = 4
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/random/canister/restricted,
@@ -84116,7 +85088,7 @@
req_access = list(12);
name = "Deck 2 Starboard Wingframe"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"kZl" = (
/obj/effect/floor_decal/corner/yellow{
@@ -84221,9 +85193,6 @@
/turf/simulated/floor/plating,
/area/shuttle/skipjack)
"lad" = (
-/obj/structure/railing/mapped{
- dir = 8
- },
/obj/effect/decal/cleanable/dirt,
/obj/structure/machinery/atmospherics/pipe/simple/visible/universal{
dir = 8
@@ -84231,7 +85200,7 @@
/obj/structure/platform{
dir = 4
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/far)
"lae" = (
/obj/effect/floor_decal/corner/paleblue,
@@ -84326,7 +85295,7 @@
dir = 8
},
/obj/structure/machinery/door/firedoor,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/port/near)
"laM" = (
/obj/effect/floor_decal/corner/dark_blue/full{
@@ -84336,7 +85305,7 @@
/obj/structure/cable/green{
icon_state = "0-8"
},
-/turf/simulated/floor/tiled/dark/cooled,
+/turf/simulated/floor/tiled/dark,
/area/horizon/ai/upload)
"laP" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/red{
@@ -84644,6 +85613,9 @@
/obj/random/junk,
/obj/structure/table/rack,
/obj/structure/grille/broken,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/medical/cryo)
"lcT" = (
@@ -84800,7 +85772,8 @@
pixel_x = 20;
pixel_y = 6
},
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/corner/dark_blue/diagonal,
+/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/port/docks)
"ldC" = (
/obj/structure/machinery/door/airlock/external{
@@ -84812,7 +85785,7 @@
name = "airlock_horizon_deck_1_fore_1"
},
/obj/effect/map_effect/marker_helper/airlock/exterior,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/hangar/starboard)
"ldE" = (
/obj/structure/machinery/atmospherics/pipe/simple/visible/yellow{
@@ -84892,7 +85865,10 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden{
dir = 10
},
-/turf/simulated/floor,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/far)
"lec" = (
/obj/structure/trash_pile,
@@ -85172,7 +86148,7 @@
/obj/effect/floor_decal/industrial/warning/full,
/obj/item/hullbeacon/red,
/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"lgc" = (
/obj/effect/floor_decal/corner/paleblue/diagonal,
/obj/effect/floor_decal/industrial/outline/grey,
@@ -85186,6 +86162,9 @@
"lgd" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/table/steel,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port)
"lge" = (
@@ -85308,7 +86287,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"lgZ" = (
/obj/structure/railing/mapped,
@@ -85394,6 +86373,7 @@
master_tag = "airlock_horizon_dock_deck_3_starboard_3";
name = "airlock_horizon_dock_deck_3_starboard_3"
},
+/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor/plating,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"lhU" = (
@@ -85451,7 +86431,11 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
},
-/turf/simulated/floor/tiled/dark,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"lir" = (
/obj/effect/floor_decal/corner_wide/lime{
@@ -85913,7 +86897,10 @@
},
/obj/random/dirt_75,
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/research)
"lkJ" = (
/obj/structure/closet/emcloset,
@@ -86077,6 +87064,9 @@
pixel_x = -32;
pixel_y = 32
},
+/obj/structure/machinery/light{
+ dir = 8
+ },
/turf/simulated/floor,
/area/horizon/command/bridge/aibunker)
"llW" = (
@@ -86089,6 +87079,12 @@
},
/turf/simulated/floor/tiled/dark,
/area/horizon/weapons/grauwolf)
+"lme" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_1/operations/starboard)
"lmo" = (
/obj/structure/machinery/atmospherics/unary/cryo_cell,
/turf/simulated/floor/tiled,
@@ -86157,11 +87153,16 @@
/obj/effect/floor_decal/industrial/warning,
/obj/effect/decal/cleanable/dirt,
/obj/random/maintenance_junk_or_loot,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port)
+"lmS" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/railing/mapped,
+/turf/simulated/open/airless,
+/area/horizon/exterior/no_shields)
"lmU" = (
/obj/structure/cable/green{
icon_state = "0-2"
@@ -86319,6 +87320,18 @@
},
/turf/simulated/floor/tiled,
/area/horizon/rnd/hallway/secondary)
+"lnW" = (
+/obj/structure/railing/mapped{
+ dir = 8
+ },
+/obj/effect/floor_decal/corner/black{
+ dir = 9
+ },
+/obj/structure/machinery/light/floor{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/hangar/auxiliary)
"lod" = (
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/structure/ladder/up{
@@ -86441,7 +87454,8 @@
"loS" = (
/obj/random/dirt_75,
/obj/structure/machinery/firealarm/west,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/operations)
"loZ" = (
/obj/effect/floor_decal/corner/brown/full{
@@ -86458,6 +87472,12 @@
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/tiled/dark/full,
/area/shuttle/skipjack)
+"lpj" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/horizon/exterior/no_shields)
"lpm" = (
/obj/structure/sign/double/map/left{
desc = "A framed picture of a station.";
@@ -86537,9 +87557,6 @@
icon_state = "1-2"
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/random/dirt_75,
-/obj/random/dirt_75,
-/obj/random/maintenance_junk_or_loot,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"lpy" = (
@@ -86680,15 +87697,15 @@
output_level = 45000
},
/obj/structure/cable/yellow,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor/carpet/rubber,
/area/horizon/maintenance/deck_1/workshop)
"lqg" = (
-/obj/structure/machinery/light{
- dir = 8
- },
-/obj/effect/floor_decal/corner/dark_blue/full,
-/obj/structure/machinery/atmospherics/unary/vent_pump/on{
- dir = 4
+/obj/structure/machinery/light/floor,
+/obj/effect/floor_decal/corner/dark_blue{
+ dir = 5
},
/turf/simulated/floor/tiled/dark,
/area/horizon/ai/upload_foyer)
@@ -86799,7 +87816,7 @@
name = "Deck 2 Starboard Wingframe";
req_one_access = list(12,31,67)
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"lqJ" = (
/obj/structure/disposalpipe/segment{
@@ -86918,7 +87935,7 @@
"lrn" = (
/obj/structure/machinery/suit_storage_unit/standard_unit,
/obj/effect/floor_decal/industrial/hatch/yellow,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/turf/simulated/floor/tiled/dark/full,
@@ -87201,7 +88218,7 @@
"ltf" = (
/obj/random/tool,
/obj/random/tech_supply,
-/turf/simulated/floor/tiled/dark/full,
+/turf/simulated/floor/carpet/rubber,
/area/horizon/engineering/atmos/storage_maintenance)
"ltg" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -87224,6 +88241,18 @@
},
/turf/simulated/floor/tiled/dark,
/area/horizon/service/hydroponics/hazard)
+"ltn" = (
+/obj/structure/railing/mapped{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/black{
+ dir = 6
+ },
+/obj/structure/machinery/light/floor{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/hangar/auxiliary)
"ltq" = (
/obj/structure/sink{
dir = 8;
@@ -87657,10 +88686,10 @@
/area/horizon/engineering/reactor/supermatter/mainchamber)
"lwq" = (
/obj/effect/floor_decal/industrial/warning{
- dir = 8
+ dir = 9
},
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/wing/port/nacelle)
+/turf/simulated/floor,
+/area/horizon/maintenance/deck_3/auxatmos)
"lws" = (
/obj/effect/floor_decal/corner/paleblue{
dir = 1
@@ -87729,7 +88758,7 @@
/turf/simulated/floor/tiled,
/area/horizon/security/checkpoint2)
"lxa" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/structure/machinery/atmospherics/unary/vent_pump/high_volume,
@@ -87738,7 +88767,8 @@
master_tag = "airlock_horizon_dock_deck_3_port_2";
name = "airlock_horizon_dock_deck_3_port_2"
},
-/turf/simulated/floor/plating,
+/obj/structure/lattice/catwalk/indoor/grate,
+/turf/simulated/floor,
/area/horizon/hallway/primary/deck_3/port/docks)
"lxb" = (
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply,
@@ -87967,7 +88997,7 @@
dir = 1
},
/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"lyH" = (
/obj/structure/machinery/firealarm/south,
/obj/effect/floor_decal/corner_wide/yellow/full{
@@ -88030,8 +89060,12 @@
/turf/unsimulated/floor/plating,
/area/antag/mercenary)
"lzd" = (
+/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_1/auxatmos)
+/area/horizon/maintenance/deck_2/wing/port/far)
"lze" = (
/obj/structure/shuttle_part/scc_space_ship{
icon_state = "d3-2-f"
@@ -88062,7 +89096,7 @@
"lzr" = (
/obj/effect/floor_decal/industrial/outline/grey,
/obj/random/canister/empty,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/security/port)
"lzv" = (
/obj/effect/floor_decal/spline/plain/corner{
@@ -88216,7 +89250,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 8
},
-/turf/simulated/floor/tiled/dark/full,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/holodeck)
"lAs" = (
/obj/effect/step_trigger/thrower/shuttle/north,
@@ -88464,11 +89498,18 @@
},
/turf/unsimulated/floor/rubber_carpet,
/area/centcom/control)
-"lCd" = (
+"lCc" = (
+/obj/random/dirt_75,
/obj/effect/floor_decal/industrial/warning{
dir = 9
},
/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/wing/starboard/far)
+"lCd" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"lCj" = (
/obj/structure/railing/mapped{
@@ -88504,6 +89545,9 @@
/obj/effect/decal/cleanable/cobweb,
/obj/structure/machinery/vending/engivend/low_supply,
/obj/effect/floor_decal/industrial/hatch/engineering,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor/carpet/rubber,
/area/horizon/maintenance/deck_1/workshop)
"lCB" = (
@@ -88623,7 +89667,7 @@
req_access = list(13)
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/security/checkpoint2)
"lDo" = (
/obj/effect/map_effect/window_spawner/full/reinforced/polarized/firedoor{
@@ -88671,7 +89715,6 @@
/obj/structure/cable{
icon_state = "0-8"
},
-/obj/structure/machinery/light/small/emergency,
/obj/structure/cable/green{
icon_state = "0-4"
},
@@ -88840,6 +89883,9 @@
/obj/random/dirt_75,
/obj/random/dirt_75,
/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/research)
"lEw" = (
@@ -88870,7 +89916,7 @@
/area/horizon/engineering/hallway/interior)
"lED" = (
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/structure/machinery/portable_atmospherics/canister/hydrogen,
@@ -88965,14 +90011,13 @@
/turf/simulated/floor/tiled/full,
/area/horizon/engineering/hallway/interior)
"lFe" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/cable{
- icon_state = "1-2"
- },
/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
-/area/horizon/maintenance/deck_2/wing/port/nacelle)
+/obj/random/maintenance_junk_or_loot,
+/obj/random/dirt_75,
+/obj/structure/table/rack,
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/wing/starboard/far)
"lFp" = (
/obj/structure/bed/stool/chair/unmovable,
/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
@@ -89052,11 +90097,11 @@
/obj/structure/cable/green{
icon_state = "1-4"
},
-/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/structure/machinery/light/small/emergency{
name = "broken light";
status = 2
},
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/wing_port)
"lGc" = (
@@ -89331,7 +90376,7 @@
dir = 4
},
/obj/structure/platform/ledge,
-/turf/simulated/floor/tiled/dark,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"lHY" = (
/obj/structure/disposalpipe/segment{
@@ -89445,7 +90490,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/structure/closet/crate,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/port)
"lID" = (
/obj/structure/cable/green{
@@ -89623,9 +90668,15 @@
/turf/unsimulated/floor/monotile,
/area/antag/mercenary)
"lJz" = (
-/obj/structure/machinery/atmospherics/unary/vent_scrubber/on,
-/turf/simulated/floor/tiled/full,
-/area/horizon/hallway/primary/deck_2/central)
+/obj/effect/floor_decal/industrial/hatch/yellow,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/shuttle/intrepid/main_compartment)
"lJB" = (
/obj/structure/tank_wall/nitrogen{
density = 0;
@@ -89779,22 +90830,17 @@
icon_state = "1-2"
},
/obj/effect/floor_decal/corner/dark_blue/diagonal,
-/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 8
- },
-/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 4
- },
/obj/structure/machinery/hologram/holopad/long_range,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/tiled/dark,
/area/horizon/ai/upload_foyer)
"lKn" = (
-/obj/structure/platform{
- dir = 4
- },
-/obj/structure/platform_stairs/south_north_solo,
/obj/structure/machinery/atmospherics/pipe/simple/hidden,
-/turf/simulated/floor/plating,
+/obj/structure/platform{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/ramp/bottom,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"lKo" = (
/turf/simulated/wall,
@@ -89834,9 +90880,6 @@
pixel_x = -28;
pixel_y = -10
},
-/obj/structure/machinery/light/small/emergency{
- dir = 8
- },
/turf/simulated/floor/tiled/dark/full,
/area/horizon/command/bridge/aibunker)
"lKy" = (
@@ -89850,7 +90893,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/security/port)
@@ -89874,7 +90917,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden{
dir = 10
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/turf/simulated/floor/plating,
@@ -89893,6 +90936,7 @@
c_tag = "Engineering - Deck 2 - Engineering Substation";
dir = 8
},
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/engineering)
"lKF" = (
@@ -89948,7 +90992,9 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/reactor/indra/monitoring)
"lKW" = (
-/turf/simulated/floor/tiled,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/railing/mapped,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard)
"lKZ" = (
/obj/structure/railing/mapped,
@@ -89980,7 +91026,7 @@
req_access = list(1);
dir = 4
},
-/turf/simulated/floor/tiled/full,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/security/interrogation/monitoring)
"lLe" = (
/obj/effect/floor_decal/spline/plain/mauve,
@@ -90059,7 +91105,7 @@
/turf/simulated/floor/carpet/rubber,
/area/horizon/rnd/xenoarch/spectrometry)
"lLQ" = (
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/structure/window/reinforced/crescent{
dir = 8
},
@@ -90086,7 +91132,7 @@
},
/area/centcom/control)
"lMe" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/structure/machinery/atmospherics/unary/vent_pump/high_volume,
@@ -90095,6 +91141,7 @@
master_tag = "airlock_horizon_deck_1_aft_port_1";
name = "airlock_horizon_deck_1_aft_port_1"
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/auxatmos)
"lMg" = (
@@ -90174,7 +91221,7 @@
dir = 4
},
/turf/space,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"lMB" = (
/obj/structure/machinery/atmospherics/pipe/simple/visible/purple,
/obj/structure/lattice/catwalk/indoor,
@@ -90292,6 +91339,7 @@
dir = 8
},
/obj/random/dirt_75,
+/obj/structure/trash_pile,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/starboard)
"lNC" = (
@@ -90302,11 +91350,11 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 8
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard)
"lNG" = (
/obj/structure/disposalpipe/segment{
@@ -90662,7 +91710,6 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/machinery/light/small/emergency,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
@@ -90875,7 +91922,7 @@
},
/obj/effect/map_effect/map_helper/ruler_tiles_3,
/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"lTr" = (
/obj/structure/window/reinforced/holowindow{
dir = 4
@@ -90936,7 +91983,7 @@
/obj/effect/map_effect/map_helper/ruler_tiles_3,
/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"lTO" = (
/obj/structure/machinery/door/firedoor{
dir = 4
@@ -90967,7 +92014,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 8
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/interstitial)
"lTW" = (
/turf/simulated/floor/holofloor/desert{
@@ -91048,13 +92095,12 @@
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_2/central)
"lUN" = (
+/obj/random/dirt_75,
/obj/effect/floor_decal/industrial/warning{
- dir = 8
+ dir = 1
},
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/railing/mapped,
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/main/starboard)
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/maintenance/deck_2/wing/starboard/far)
"lUT" = (
/obj/effect/floor_decal/spline/plain/mauve,
/obj/structure/window/reinforced,
@@ -91095,10 +92141,10 @@
/turf/simulated/wall,
/area/horizon/security/firing_range)
"lVK" = (
-/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
+/obj/structure/machinery/atmospherics/pipe/manifold4w/hidden/supply,
+/obj/structure/machinery/light/floor{
dir = 8
},
-/obj/structure/machinery/atmospherics/pipe/manifold4w/hidden/supply,
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/atmos)
"lVP" = (
@@ -91178,15 +92224,12 @@
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/central)
"lWb" = (
-/obj/random/junk,
-/obj/effect/floor_decal/industrial/loading/yellow{
- dir = 1
- },
/obj/structure/platform{
dir = 4
},
/obj/random/dirt_75,
-/turf/simulated/floor/plating,
+/obj/random/dirt_75,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"lWf" = (
/obj/structure/table/wood,
@@ -91293,7 +92336,7 @@
name = "Deck 3 Civilian Substation";
req_one_access = list(11,24)
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/substation/civ_d3)
"lWO" = (
/obj/structure/bed/stool/chair,
@@ -91495,14 +92538,17 @@
/turf/simulated/floor/plating,
/area/horizon/engineering/atmos/air)
"lYo" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/structure/railing/mapped{
dir = 4
},
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/tiled/dark,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/port/far)
"lYq" = (
/obj/structure/sign/fire{
@@ -91511,16 +92557,18 @@
pixel_y = 32
},
/obj/effect/decal/cleanable/dirt,
-/obj/effect/floor_decal/industrial/warning/cee,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 6
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/starboard)
"lYr" = (
/obj/random/junk,
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/research)
"lYv" = (
/obj/structure/cable/green{
@@ -91721,6 +92769,12 @@
},
/turf/simulated/floor/tiled/dark/full,
/area/horizon/rnd/xenoarch/hallway/hangar)
+"lZu" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/wing/port/far)
"lZy" = (
/obj/structure/machinery/atmospherics/pipe/simple/visible/black{
dir = 9
@@ -91895,6 +92949,10 @@
/area/antag/raider)
"maS" = (
/obj/structure/machinery/alarm/south,
+/obj/structure/lattice/catwalk/indoor,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/security)
"maY" = (
@@ -92052,7 +93110,7 @@
},
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/turf/simulated/floor/tiled/dark/full,
@@ -92276,7 +93334,8 @@
master_tag = "airlock_horizon_dock_deck_3_starboard_2";
name = "airlock_horizon_dock_deck_3_starboard_2"
},
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/corner/dark_blue/diagonal,
+/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"mdN" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -92377,11 +93436,9 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/medical/morgue)
"meo" = (
-/obj/effect/floor_decal/corner_wide/yellow{
- dir = 10
- },
/obj/structure/machinery/hologram/holopad,
-/turf/simulated/floor/tiled/dark,
+/obj/effect/floor_decal/industrial/hatch/yellow,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/break_room)
"mep" = (
/obj/effect/floor_decal/corner/white/diagonal,
@@ -92475,7 +93532,11 @@
},
/area/centcom/legion/hangar5)
"meP" = (
-/turf/simulated/floor/tiled,
+/obj/effect/floor_decal/corner/brown{
+ dir = 10
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"meU" = (
/obj/effect/floor_decal/spline/plain{
@@ -92499,6 +93560,14 @@
},
/turf/simulated/floor/tiled,
/area/horizon/security/brig)
+"mfb" = (
+/obj/structure/platform{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/ramp/bottom{
+ dir = 4
+ },
+/area/horizon/maintenance/deck_1/wing/starboard/far)
"mfe" = (
/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/aft/starboard/far)
@@ -92611,7 +93680,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/cafe)
"mfZ" = (
/obj/structure/cable/green{
@@ -92759,7 +93828,7 @@
/turf/simulated/floor/tiled/white,
/area/horizon/rnd/xenoarch/atrium)
"mgM" = (
-/turf/simulated/floor/tiled/dark/full,
+/turf/simulated/floor/tiled/dark,
/area/horizon/storage/secure/tech_vault)
"mgN" = (
/obj/effect/landmark/entry_point/port{
@@ -92887,7 +93956,7 @@
dir = 4
},
/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"mho" = (
/obj/structure/machinery/access_button{
dir = 1;
@@ -93240,7 +94309,7 @@
dir = 4
},
/obj/random/dirt_75,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/port)
"mji" = (
/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
@@ -93368,8 +94437,9 @@
/area/centcom/ferry)
"mjX" = (
/obj/structure/machinery/alarm/west,
-/obj/structure/girder,
-/turf/simulated/floor/plating,
+/obj/structure/machinery/floodlight,
+/obj/effect/floor_decal/industrial/outline/operations,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/wing/starboard)
"mka" = (
/obj/structure/machinery/firealarm/south,
@@ -93384,6 +94454,7 @@
/area/antag/raider)
"mkh" = (
/obj/structure/machinery/alarm/north,
+/obj/random/dirt_75,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/far)
"mki" = (
@@ -93459,7 +94530,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/atmos/turbine)
"mkO" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/effect/decal/cleanable/dirt,
@@ -93618,9 +94689,6 @@
name = "Powernet Sensor - Shield Subgrid";
name_tag = "Shield Subgrid"
},
-/obj/structure/machinery/light{
- dir = 8
- },
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/shields)
"mmk" = (
@@ -93935,6 +95003,14 @@
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/operations/starboard/far)
+"mor" = (
+/obj/random/dirt_75,
+/obj/random/dirt_75,
+/obj/structure/closet/crate,
+/obj/random/softcap,
+/obj/random/toolbox,
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/wing/starboard)
"moz" = (
/obj/structure/machinery/atmospherics/binary/pump{
dir = 8;
@@ -93943,15 +95019,10 @@
/turf/simulated/floor/plating,
/area/horizon/engineering/atmos/air)
"moG" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 6
- },
-/obj/structure/cable/green{
- icon_state = "1-2"
- },
-/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
-/area/horizon/maintenance/deck_2/operations)
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/maintenance/deck_1/operations/starboard)
"moI" = (
/obj/structure/cable/green{
icon_state = "1-4"
@@ -93982,7 +95053,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 8
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/interstitial)
"moQ" = (
/obj/structure/table/rack,
@@ -93991,7 +95062,7 @@
dir = 4
},
/obj/random/dirt_75,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/security/port)
"moS" = (
/obj/structure/table/stone/marble,
@@ -94305,9 +95376,14 @@
/turf/unsimulated/floor/plating,
/area/shuttle/syndicate_elite)
"mrf" = (
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/trash_pile,
-/turf/simulated/floor/plating,
+/obj/structure/platform{
+ dir = 8
+ },
+/obj/effect/floor_decal/industrial/warning,
+/obj/structure/bed/stool/chair/office/dark{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"mrg" = (
/obj/structure/machinery/atmospherics/pipe/simple/visible/red{
@@ -94500,7 +95576,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/research)
"msp" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -94589,7 +95665,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/structure/machinery/atmospherics/pipe/manifold/visible/scrubbers,
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
@@ -94663,7 +95739,7 @@
"mtA" = (
/obj/effect/floor_decal/industrial/warning,
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"mtC" = (
/obj/structure/machinery/meter{
@@ -94733,7 +95809,7 @@
/obj/structure/machinery/atmospherics/unary/vent_pump/high_volume{
dir = 1
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/effect/map_effect/marker/airlock{
@@ -94751,7 +95827,7 @@
/obj/structure/cable{
icon_state = "2-4"
},
-/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/wing_starboard)
"muo" = (
@@ -94947,13 +96023,9 @@
/turf/simulated/floor,
/area/horizon/command/heads/captain)
"mvt" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/floor_decal/industrial/warning/cee{
- dir = 4
- },
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/service/starboard)
+/obj/structure/machinery/atmospherics/unary/vent_pump/on,
+/turf/simulated/floor/tiled/full,
+/area/horizon/hallway/primary/deck_2/central)
"mvv" = (
/obj/structure/machinery/atmospherics/pipe/simple/heat_exchanging/junction{
dir = 4
@@ -95004,6 +96076,14 @@
/obj/structure/target_stake,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/security/firing_range)
+"mvR" = (
+/obj/effect/floor_decal/industrial/hatch/red,
+/obj/effect/floor_decal/industrial/warning/cee,
+/obj/structure/machinery/atmospherics/unary/vent_pump/aux{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/command/bridge/selfdestruct)
"mvS" = (
/obj/structure/cable/green{
icon_state = "1-2"
@@ -95023,7 +96103,7 @@
dir = 9
},
/obj/random/dirt_75,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/security/port)
"mvW" = (
/obj/structure/cable/green{
@@ -95177,7 +96257,8 @@
/obj/effect/floor_decal/industrial/hatch_door/red{
dir = 1
},
-/turf/simulated/floor/plating,
+/obj/structure/machinery/door/firedoor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"mxb" = (
/obj/structure/cable{
@@ -95235,7 +96316,7 @@
dir = 4
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"mxv" = (
/obj/structure/bed/stool/chair/shuttle{
@@ -95524,7 +96605,7 @@
icon_state = "4-8"
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/main/starboard)
"mzC" = (
/obj/structure/cable/green{
@@ -95552,7 +96633,10 @@
"mzX" = (
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/structure/reagent_dispensers/watertank,
-/turf/simulated/floor/tiled/dark,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"mzY" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/aux,
@@ -95581,18 +96665,15 @@
/area/horizon/stairwell/port/deck_2)
"mAe" = (
/obj/effect/floor_decal/industrial/warning,
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
- },
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"mAg" = (
/obj/structure/disposalpipe/segment,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/turf/simulated/floor,
@@ -95649,7 +96730,7 @@
dir = 4
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/wing/port/far)
"mAK" = (
/turf/simulated/floor/airless,
@@ -95848,7 +96929,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/turf/simulated/floor/plating,
@@ -95859,10 +96940,8 @@
/area/horizon/command/bridge/controlroom)
"mCw" = (
/obj/structure/railing/mapped,
-/obj/effect/floor_decal/industrial/warning{
- dir = 4
- },
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/turf/simulated/open,
/area/horizon/maintenance/deck_2/main/starboard)
"mCx" = (
/obj/effect/floor_decal/corner/dark_green/full{
@@ -95891,7 +96970,7 @@
/turf/simulated/floor/tiled/full,
/area/horizon/operations/commissary)
"mCO" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/effect/decal/cleanable/dirt,
@@ -96004,7 +97083,7 @@
dir = 5
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/turf/simulated/floor/plating,
@@ -96041,6 +97120,17 @@
},
/turf/simulated/floor/plating,
/area/horizon/service/hydroponics/lower)
+"mEa" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/platform_deco{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_1/wing/starboard/far)
"mEd" = (
/obj/effect/floor_decal/industrial/warning{
dir = 9
@@ -96066,14 +97156,10 @@
/turf/simulated/floor/carpet/rubber,
/area/horizon/tcommsat/chamber)
"mEk" = (
-/obj/structure/machinery/porta_turret/stationary,
-/obj/effect/floor_decal/industrial/warning/full,
-/obj/structure/machinery/camera/motion{
- c_tag = "Scuttling Device";
- network = list("Command","Security")
- },
-/turf/simulated/floor/reinforced,
-/area/horizon/command/bridge/selfdestruct)
+/obj/effect/floor_decal/spline/plain/black,
+/obj/structure/machinery/hologram/holopad,
+/turf/simulated/floor/tiled/dark,
+/area/horizon/service/bar)
"mEo" = (
/obj/structure/table/rack,
/obj/effect/floor_decal/industrial/outline/operations,
@@ -96090,7 +97176,10 @@
/obj/structure/table/steel,
/obj/random/junk,
/obj/random/contraband,
-/turf/simulated/floor,
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/security/port)
"mEq" = (
/obj/structure/machinery/light_switch/east{
@@ -96206,6 +97295,9 @@
/obj/structure/table/reinforced/steel,
/obj/random/contraband,
/obj/random/contraband,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/simulated/floor/carpet/rubber,
/area/horizon/maintenance/deck_1/workshop)
"mEZ" = (
@@ -96502,12 +97594,12 @@
/turf/unsimulated/floor/plating,
/area/centcom/legion)
"mGA" = (
-/obj/random/dirt_75,
-/obj/random/dirt_75,
/obj/structure/machinery/atmospherics/pipe/simple/visible{
dir = 6
},
-/turf/simulated/floor/tiled/dark,
+/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/auxatmos)
"mGB" = (
/obj/structure/machinery/button/remote/blast_door{
@@ -96547,7 +97639,7 @@
dir = 4;
req_one_access = list(5,10,12)
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/main/starboard)
"mGV" = (
/obj/effect/landmark/entry_point/port{
@@ -96585,6 +97677,9 @@
/obj/effect/floor_decal/corner/brown/full{
dir = 1
},
+/obj/structure/machinery/light/floor{
+ dir = 1
+ },
/turf/simulated/floor/tiled,
/area/horizon/operations/commissary)
"mHc" = (
@@ -96739,7 +97834,7 @@
"mHX" = (
/obj/effect/floor_decal/industrial/warning,
/obj/structure/machinery/alarm/north,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/turf/simulated/floor,
@@ -96803,7 +97898,7 @@
/obj/effect/floor_decal/industrial/hatch_door/engineering{
dir = 1
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/elevator)
"mIC" = (
/obj/effect/floor_decal/industrial/hatch_door/red,
@@ -96831,7 +97926,7 @@
"mIH" = (
/obj/random/junk,
/obj/effect/floor_decal/industrial/warning,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"mIQ" = (
/obj/effect/floor_decal/corner/dark_blue/full,
@@ -96993,7 +98088,7 @@
name = "airlock_horizon_deck_1_fore_1"
},
/obj/effect/map_effect/marker_helper/airlock/interior,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/hangar/starboard)
"mKj" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -97260,7 +98355,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/engineering/drone_fabrication)
"mMa" = (
@@ -97445,7 +98540,8 @@
/area/horizon/engineering/atmos/storage)
"mMO" = (
/obj/random/junk,
-/obj/structure/machinery/light/small/emergency{
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/machinery/light/small{
dir = 4
},
/turf/simulated/floor/plating,
@@ -97514,10 +98610,13 @@
/turf/unsimulated/floor,
/area/centcom/bar)
"mNb" = (
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/random/dirt_75,
/obj/random/dirt_75,
/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/research)
"mNc" = (
@@ -97583,7 +98682,7 @@
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"mNu" = (
/obj/effect/floor_decal/industrial/warning{
@@ -97921,7 +99020,6 @@
},
/area/shuttle/legion)
"mQw" = (
-/obj/structure/lattice/catwalk,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
@@ -97931,6 +99029,7 @@
/obj/structure/cable/green{
icon_state = "11-4"
},
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/open,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"mQz" = (
@@ -97962,7 +99061,7 @@
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/structure/closet/radiation,
/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/carpet/rubber,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/aft)
"mRn" = (
/obj/structure/platform/ledge,
@@ -98030,16 +99129,17 @@
master_tag = "airlock_horizon_dock_deck_3_starboard_1";
name = "airlock_horizon_dock_deck_3_starboard_1"
},
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/corner/dark_blue/diagonal,
+/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"mRS" = (
/obj/structure/table/steel,
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/random/loot,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/port/far)
"mRU" = (
/obj/structure/window/reinforced{
@@ -98376,8 +99476,10 @@
/turf/simulated/floor/shuttle/black,
/area/centcom/specops)
"mUv" = (
-/obj/effect/floor_decal/industrial/warning,
/obj/structure/trash_pile,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 6
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/starboard)
"mUw" = (
@@ -98441,10 +99543,7 @@
/obj/structure/window/borosilicate/reinforced/skrell{
dir = 1
},
-/turf/simulated/floor/bluegrid{
- name = "cooled mainframe floor";
- temperature = 278
- },
+/turf/simulated/floor/bluegrid,
/area/horizon/ai/chamber)
"mVm" = (
/obj/structure/railing/mapped,
@@ -98581,7 +99680,7 @@
name = "airlock_horizon_deck_1_aft_port_1"
},
/obj/effect/map_effect/marker_helper/airlock/exterior,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/auxatmos)
"mWm" = (
/obj/effect/map_effect/window_spawner/full/reinforced/indestructible,
@@ -98808,7 +99907,7 @@
"mYc" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/machinery/alarm/east,
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/random/maintenance_junk_or_loot,
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port)
@@ -98816,6 +99915,7 @@
/obj/structure/disposalpipe/segment{
icon_state = "pipe-c"
},
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor,
/area/horizon/maintenance/substation/command)
"mYf" = (
@@ -98891,7 +99991,7 @@
/area/horizon/hangar/intrepid)
"mYt" = (
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/structure/reagent_dispensers/fueltank,
@@ -98990,10 +100090,10 @@
/area/centcom/specops)
"mYY" = (
/obj/structure/machinery/alarm/north,
-/obj/random/dirt_75,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard)
"mZa" = (
@@ -99035,7 +100135,6 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/medical/cryo)
"mZg" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/cable/green{
icon_state = "1-2"
},
@@ -99043,7 +100142,8 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 8
},
-/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 8
},
/turf/simulated/floor/wood,
@@ -99118,12 +100218,11 @@
master_tag = "airlock_horizon_dock_deck_3_starboard_3";
name = "airlock_horizon_dock_deck_3_starboard_3"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"mZz" = (
-/obj/random/dirt_75,
-/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/operations)
"mZB" = (
/obj/effect/floor_decal/industrial/hatch_door/yellow{
@@ -99346,19 +100445,18 @@
},
/turf/simulated/floor/tiled/full,
/area/horizon/crew/lounge)
-"naR" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
- },
-/obj/structure/grille,
-/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
"naT" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/turf/simulated/floor/reinforced,
-/area/horizon/command/bridge/selfdestruct)
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/wing/starboard/far)
"naU" = (
/obj/effect/floor_decal/corner/dark_blue{
dir = 6
@@ -99383,8 +100481,7 @@
/area/horizon/medical/hallway/upper)
"nbn" = (
/obj/structure/railing/mapped,
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"nbp" = (
/obj/effect/decal/cleanable/dirt,
@@ -99398,7 +100495,8 @@
/obj/structure/cable/green{
icon_state = "2-4"
},
-/turf/simulated/floor/plating,
+/obj/structure/lattice/catwalk/indoor,
+/turf/simulated/open,
/area/horizon/medical/gen_treatment)
"nbt" = (
/obj/structure/machinery/atmospherics/pipe/simple/visible/black{
@@ -99574,7 +100672,7 @@
req_one_access = list(24,11,67,73);
dir = 4
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/main/starboard)
"ncM" = (
/obj/structure/machinery/mech_recharger,
@@ -99795,6 +100893,9 @@
/obj/item/modular_computer/laptop/preset/medical{
pixel_y = 11
},
+/obj/structure/machinery/light{
+ dir = 4
+ },
/turf/simulated/floor/wood,
/area/horizon/medical/psych)
"ndF" = (
@@ -99805,11 +100906,13 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/command/bridge/controlroom)
"ndG" = (
-/obj/effect/floor_decal/industrial/outline/grey,
/obj/random/dirt_75,
/obj/random/dirt_75,
/obj/structure/machinery/portable_atmospherics/canister/empty/carbon_dioxide,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/main/port/shortcut)
"ndK" = (
/obj/effect/floor_decal/industrial/warning{
@@ -99936,6 +101039,13 @@
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/auxatmos)
+"new" = (
+/obj/effect/floor_decal/corner/brown{
+ dir = 9
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_1/wing/starboard/far)
"nez" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
@@ -100074,12 +101184,17 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 6
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard)
"nfe" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/trash_pile,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port)
"nfp" = (
@@ -100121,18 +101236,21 @@
/area/horizon/maintenance/deck_1/wing/starboard)
"nfw" = (
/obj/structure/platform,
+/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/far)
"nfy" = (
/obj/effect/decal/cleanable/dirt,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
/obj/effect/floor_decal/industrial/warning/corner{
- dir = 1
+ dir = 4
},
-/obj/effect/floor_decal/industrial/warning/cee{
- dir = 8
- },
-/obj/structure/machinery/vending/cigarette/horizon,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/service/starboard)
"nfD" = (
/obj/structure/machinery/door/airlock/maintenance{
@@ -100173,6 +101291,7 @@
name_tag = "Deck 3 Command Subgrid"
},
/obj/structure/cable/green,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor,
/area/horizon/maintenance/substation/command)
"nfW" = (
@@ -100180,7 +101299,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/random/junk,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/random/contraband,
@@ -100210,16 +101329,12 @@
/obj/effect/floor_decal/industrial/warning{
dir = 10
},
-/obj/structure/railing/mapped{
- dir = 8
- },
-/obj/structure/railing/mapped,
/obj/structure/trash_pile,
/obj/structure/disposalpipe/segment{
dir = 1;
icon_state = "pipe-c"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard/far)
"ngz" = (
/obj/effect/floor_decal/industrial/warning{
@@ -100348,7 +101463,7 @@
/turf/simulated/floor/holofloor/wood,
/area/horizon/holodeck/source_sauna)
"nha" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/effect/floor_decal/industrial/warning{
@@ -100391,7 +101506,7 @@
frequency = 1109;
req_one_access = list(19)
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/ai/upload_foyer)
"nho" = (
/obj/structure/machinery/firealarm/west,
@@ -100417,10 +101532,12 @@
/turf/unsimulated/floor/rubber_carpet,
/area/centcom/control)
"nid" = (
-/obj/effect/floor_decal/industrial/warning,
/obj/structure/machinery/alarm/north,
/obj/structure/closet/crate/bin,
/obj/random/loot,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 6
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/starboard)
"nig" = (
@@ -100576,6 +101693,9 @@
/obj/effect/floor_decal/industrial/warning{
dir = 9
},
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/port/far)
"njg" = (
@@ -100650,9 +101770,6 @@
/obj/structure/platform/ledge/dark{
dir = 8
},
-/obj/structure/railing/mapped{
- dir = 4
- },
/turf/simulated/open,
/area/horizon/maintenance/deck_2/cryo)
"nku" = (
@@ -100707,7 +101824,7 @@
icon_state = "4-8"
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/turf/simulated/floor/plating,
@@ -101028,7 +102145,7 @@
name = "airlock_horizon_deck_1_aft_propulsion_2"
},
/obj/effect/map_effect/marker_helper/airlock/exterior,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/atmos/propulsion)
"nmz" = (
/obj/structure/machinery/atmospherics/portables_connector,
@@ -101066,7 +102183,7 @@
/area/horizon/engineering/atmos/storage)
"nmJ" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/turf/simulated/floor/plating,
@@ -101445,6 +102562,9 @@
/obj/structure/reagent_dispensers/watertank,
/obj/effect/floor_decal/industrial/hatch/yellow,
/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
/turf/simulated/floor,
/area/horizon/maintenance/deck_2/wing/port/far)
"nqw" = (
@@ -101528,7 +102648,7 @@
"nrf" = (
/obj/effect/floor_decal/industrial/warning,
/obj/random/dirt_75,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"nri" = (
/obj/effect/floor_decal/industrial/hatch/red,
@@ -101667,7 +102787,8 @@
/obj/structure/machinery/atmospherics/pipe/manifold/visible{
dir = 8
},
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/auxatmos)
"nsp" = (
/obj/effect/floor_decal/corner/dark_blue/diagonal,
@@ -101726,6 +102847,12 @@
/obj/structure/shuttle/engine/propulsion,
/turf/simulated/floor/plating,
/area/shuttle/mercenary)
+"nsQ" = (
+/obj/effect/floor_decal/industrial/warning/cee{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_1/main/starboard)
"nsR" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -101778,12 +102905,17 @@
master_tag = "airlock_horizon_deck_2_port_1";
name = "airlock_horizon_deck_2_port_1"
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/port/far)
"ntf" = (
/obj/effect/floor_decal/corner/dark_blue,
/turf/simulated/floor/tiled/dark,
/area/horizon/security/interrogation/monitoring)
+"nti" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/main/starboard)
"ntp" = (
/obj/structure/cable/green{
icon_state = "4-8"
@@ -101832,10 +102964,7 @@
/obj/structure/cable/green{
icon_state = "2-8"
},
-/turf/simulated/floor/bluegrid{
- name = "cooled mainframe floor";
- temperature = 278
- },
+/turf/simulated/floor/bluegrid,
/area/horizon/ai/chamber)
"ntv" = (
/obj/structure/cable{
@@ -101891,7 +103020,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/turf/simulated/floor,
@@ -102262,12 +103391,9 @@
/turf/simulated/floor/reinforced,
/area/shuttle/hapt)
"nwM" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 8
- },
-/obj/random/dirt_75,
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/wing/port/nacelle)
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/maintenance/deck_1/operations/starboard)
"nwN" = (
/turf/simulated/floor/holofloor/grass{
dir = 8;
@@ -102316,9 +103442,7 @@
c_tag = "Engineering - Deck 1 - Security Substation";
dir = 8
},
-/obj/structure/machinery/light/small{
- dir = 4
- },
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/security)
"nxb" = (
@@ -102327,7 +103451,13 @@
no_cargo = 1
},
/obj/random/firstaid,
-/turf/simulated/floor/tiled,
+/obj/effect/floor_decal/corner/brown{
+ dir = 6
+ },
+/obj/structure/machinery/light{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"nxd" = (
/obj/structure/machinery/door/airlock/centcom{
@@ -102413,13 +103543,19 @@
"nxT" = (
/turf/simulated/wall/shuttle/scc_space_ship/cardinal,
/area/horizon/command/heads/rd)
+"nxU" = (
+/obj/structure/trash_pile,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/railing/mapped,
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_1/operations/starboard)
"nxW" = (
/turf/simulated/wall/shuttle/hapt/blue,
/area/shuttle/hapt)
"nxZ" = (
-/obj/structure/lattice/catwalk/indoor,
/obj/structure/railing/mapped,
/obj/structure/machinery/alarm/north,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/research)
"nyc" = (
@@ -102598,13 +103734,13 @@
/turf/simulated/wall/shuttle/scc_space_ship/cardinal,
/area/horizon/command/bridge/controlroom)
"nzh" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/effect/floor_decal/industrial/warning{
dir = 6
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"nzj" = (
/obj/structure/disposalpipe/segment,
@@ -102718,7 +103854,7 @@
dir = 4
},
/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"nzX" = (
/obj/effect/floor_decal/spline/fancy/wood{
dir = 4
@@ -103101,7 +104237,7 @@
dir = 1
},
/turf/simulated/open/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"nCI" = (
/obj/structure/machinery/camera/network/service{
c_tag = "Service - Chapel Storage";
@@ -103348,14 +104484,14 @@
/area/horizon/command/bridge/minibar)
"nDP" = (
/obj/structure/machinery/recharge_station,
-/turf/simulated/floor/tiled/dark,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/ai/upload_foyer)
"nDQ" = (
/obj/effect/floor_decal/industrial/warning{
dir = 8
},
/obj/structure/reagent_dispensers/fueltank,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/holodeck)
"nDR" = (
/obj/structure/machinery/cryopod,
@@ -103388,19 +104524,12 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/storage/eva)
"nED" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/random/maintenance_junk_or_loot,
+/obj/structure/machinery/light/small{
+ dir = 8
},
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/random/dirt_75,
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/wing/starboard/far)
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/wing/port/nacelle)
"nEE" = (
/obj/effect/floor_decal/industrial/hatch_door/engineering{
dir = 1
@@ -103475,8 +104604,8 @@
/obj/effect/floor_decal/industrial/warning{
dir = 4
},
-/obj/effect/floor_decal/industrial/warning{
- dir = 8
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 1
},
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard)
@@ -103640,7 +104769,7 @@
/area/horizon/security/brig)
"nFV" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/structure/lattice/catwalk/indoor/grate/old,
/turf/unsimulated/floor/plating,
/area/antag/raider)
@@ -103675,8 +104804,10 @@
/turf/unsimulated/floor/plating,
/area/centcom/specops)
"nFZ" = (
-/obj/item/stack/tile/floor,
-/turf/simulated/floor/tiled,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/stack/tile/floor_dark,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard)
"nGb" = (
/obj/structure/lattice/catwalk,
@@ -103687,12 +104818,12 @@
dir = 8
},
/turf/simulated/open/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"nGe" = (
/obj/structure/window/reinforced/crescent,
/obj/effect/decal/cleanable/dirt,
/obj/structure/table/steel,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/effect/floor_decal/corner/grey{
@@ -103905,7 +105036,7 @@
/obj/structure/machinery/door/airlock/maintenance{
req_one_access = list(12,19)
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/security/port)
"nHo" = (
/obj/structure/window/shuttle/unique/scc/scout{
@@ -103922,9 +105053,13 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/security_port)
"nHy" = (
-/obj/effect/floor_decal/industrial/warning/cee{
- dir = 1
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
},
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/random/dirt_75,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard)
"nHB" = (
@@ -104117,7 +105252,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 5
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/turf/simulated/floor,
@@ -104519,16 +105654,15 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/auxatmos)
"nLp" = (
-/obj/structure/machinery/atmospherics/unary/vent_pump/on,
+/obj/structure/machinery/atmospherics/unary/vent_scrubber/on,
/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_2/central)
"nLs" = (
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/random/dirt_75,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/main/starboard)
@@ -104749,7 +105883,7 @@
master_tag = "airlock_horizon_deck_1_aft_propulsion_1";
name = "airlock_horizon_deck_1_aft_propulsion_1"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/atmos/propulsion/starboard)
"nMN" = (
/obj/structure/sign/directions/security{
@@ -104828,14 +105962,10 @@
/area/template_noop)
"nNG" = (
/obj/structure/platform,
-/obj/structure/platform{
- dir = 8
- },
-/obj/structure/platform_deco{
- dir = 9
- },
-/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/obj/random/dirt_75,
+/obj/random/dirt_75,
+/obj/random/canister/restricted,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"nNH" = (
/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
@@ -105077,6 +106207,11 @@
},
/turf/simulated/floor/exoplanet/grass/grove,
/area/centcom/shared_dream)
+"nPv" = (
+/obj/effect/floor_decal/industrial/outline/grey,
+/obj/random/canister/restricted,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/maintenance/deck_3/security/port)
"nPx" = (
/obj/structure/machinery/atmospherics/pipe/simple/visible/black,
/turf/simulated/wall/shuttle/scc_space_ship/cardinal,
@@ -105101,6 +106236,7 @@
/obj/random/dirt_75,
/obj/random/dirt_75,
/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/elevator)
"nPH" = (
@@ -105409,7 +106545,7 @@
dir = 4
},
/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"nRx" = (
/obj/structure/shuttle_part/mercenary/small{
icon_state = "2,0"
@@ -105589,6 +106725,7 @@
"nTg" = (
/obj/structure/disposalpipe/segment,
/obj/structure/machinery/alarm/east,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/research)
"nTj" = (
@@ -105607,7 +106744,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/rnd/xenoarch/atrium)
"nTn" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/structure/bed/stool/chair{
@@ -105818,15 +106955,7 @@
/turf/simulated/floor/tiled/white,
/area/horizon/medical/hallway)
"nUL" = (
-/obj/random/dirt_75,
-/obj/random/dirt_75,
-/obj/item/trash/cigbutt{
- pixel_y = -12;
- pixel_x = 7
- },
-/obj/item/trash/cigbutt/cigarbutt{
- pixel_x = -2
- },
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/port/shortcut)
"nUN" = (
@@ -105954,11 +107083,11 @@
/area/shuttle/burglar)
"nVI" = (
/obj/effect/floor_decal/corner/brown/diagonal,
-/obj/structure/machinery/light/spot{
- dir = 1
- },
/obj/structure/closet/lasertag,
/obj/effect/floor_decal/industrial/outline/red,
+/obj/structure/machinery/light{
+ dir = 1
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/holodeck_control)
"nVR" = (
@@ -105993,6 +107122,7 @@
/obj/random/dirt_75,
/obj/random/junk,
/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"nWe" = (
@@ -106028,8 +107158,8 @@
c_tag = "Engineering - Deck 2 - Starboard Auxiliary Atmospherics";
dir = 1
},
-/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"nWp" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -106041,12 +107171,16 @@
/area/horizon/security/checkpoint2)
"nWM" = (
/obj/effect/floor_decal/corner/dark_blue/diagonal,
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/cable{
icon_state = "1-2"
},
/obj/structure/machinery/hologram/holopad,
+/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 8
+ },
+/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/ai/upload_foyer)
"nWN" = (
@@ -106091,7 +107225,7 @@
/area/horizon/rnd/xenological)
"nWT" = (
/obj/random/dirt_75,
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"nXb" = (
@@ -106119,7 +107253,12 @@
/area/horizon/rnd/hallway)
"nXe" = (
/obj/effect/decal/cleanable/dirt,
-/obj/random/maintenance_junk_or_loot,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/table/steel,
+/obj/random/pottedplant_small{
+ pixel_x = 2;
+ pixel_y = 2
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/operations/starboard)
"nXf" = (
@@ -106151,6 +107290,13 @@
/obj/structure/stairs/north,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/service/starboard)
+"nXu" = (
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/platform_deco{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_1/wing/starboard/far)
"nXx" = (
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/structure/machinery/light/small{
@@ -106185,7 +107331,7 @@
/obj/structure/machinery/atmospherics/pipe/manifold/hidden{
dir = 1
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"nXS" = (
/obj/effect/floor_decal/spline/fancy/wood{
@@ -106242,7 +107388,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/structure/disposalpipe/segment,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/turf/simulated/floor,
@@ -106332,6 +107478,9 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/far)
"nZa" = (
@@ -106534,9 +107683,6 @@
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/starboard)
"oaF" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 4
- },
/obj/effect/floor_decal/industrial/warning{
dir = 8
},
@@ -106638,6 +107784,15 @@
/obj/random/maintenance_junk_or_loot,
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
+"obv" = (
+/obj/effect/floor_decal/corner/dark_green{
+ dir = 6
+ },
+/obj/structure/machinery/light{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/horizon/hallway/primary/deck_1/central)
"obw" = (
/obj/structure/table/stone/marble,
/obj/item/reagent_containers/glass/rag/advanced/idris{
@@ -106712,6 +107867,7 @@
pixel_x = 20;
pixel_y = 6
},
+/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor/plating,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"obN" = (
@@ -107052,7 +108208,10 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 10
},
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/drone_fabrication)
"odX" = (
/obj/structure/machinery/atmospherics/pipe/simple/visible/yellow{
@@ -107169,7 +108328,7 @@
/turf/simulated/floor/tiled/dark,
/area/shuttle/legion)
"oey" = (
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/structure/table/rack,
/obj/effect/map_effect/mecha_part_spawner/propulsion,
/obj/effect/floor_decal/industrial/outline/yellow,
@@ -107537,6 +108696,9 @@
/obj/structure/cable/green{
icon_state = "2-4"
},
+/obj/structure/machinery/light/floor{
+ dir = 4
+ },
/turf/simulated/floor/tiled/dark/full,
/area/horizon/command/bridge/aibunker)
"ogv" = (
@@ -107557,7 +108719,7 @@
name = "airlock_horizon_deck_1_aft_port_1"
},
/obj/effect/map_effect/marker_helper/airlock/interior,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/auxatmos)
"ogy" = (
/obj/structure/table/reinforced/steel,
@@ -107749,9 +108911,6 @@
/area/horizon/engineering/break_room)
"ohZ" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/light/small/emergency{
- dir = 1
- },
/obj/structure/bed/stool/chair,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard)
@@ -108038,10 +109197,10 @@
/turf/simulated/floor/tiled/white,
/area/horizon/medical/surgery)
"ojv" = (
-/obj/structure/railing/mapped{
- dir = 1
- },
/obj/effect/decal/cleanable/dirt,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard)
"ojI" = (
@@ -108120,18 +109279,30 @@
/turf/simulated/floor/plating,
/area/merchant_station/warehouse)
"okz" = (
-/obj/structure/cable{
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
-/area/horizon/maintenance/deck_1/main/port/shortcut)
+/turf/simulated/floor/tiled/full,
+/area/horizon/rnd/hallway)
"okF" = (
/obj/structure/machinery/portable_atmospherics/canister/air/airlock,
/obj/structure/machinery/atmospherics/portables_connector{
dir = 1
},
-/turf/simulated/floor,
+/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/far)
"okI" = (
/obj/structure/cable/green{
@@ -108187,7 +109358,8 @@
/turf/simulated/wall,
/area/horizon/security/meeting_room)
"olm" = (
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"oln" = (
/obj/structure/toilet{
@@ -108372,7 +109544,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/hangar/airstation)
"omI" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/effect/floor_decal/industrial/outline/service,
@@ -108388,7 +109560,8 @@
master_tag = "airlock_horizon_dock_deck_3_port_4";
name = "airlock_horizon_dock_deck_3_port_4"
},
-/turf/simulated/floor/plating,
+/obj/structure/lattice/catwalk/indoor/grate,
+/turf/simulated/floor,
/area/horizon/hallway/primary/deck_3/port/docks)
"omQ" = (
/obj/effect/floor_decal/industrial/warning{
@@ -108775,6 +109948,7 @@
/obj/structure/lattice/catwalk/indoor/grate/damaged{
color = "#4c535b"
},
+/obj/item/pen,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/starboard)
"opn" = (
@@ -108782,7 +109956,7 @@
/turf/simulated/floor/bluegrid,
/area/horizon/tcommsat/chamber)
"opo" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/turf/unsimulated/floor/plating,
@@ -108805,12 +109979,12 @@
icon_state = "1-4"
},
/obj/structure/machinery/power/apc/hyper/south,
-/obj/effect/floor_decal/industrial/warning/cee{
- dir = 1
- },
/obj/structure/railing/mapped{
dir = 4
},
+/obj/effect/floor_decal/industrial/warning{
+ dir = 5
+ },
/turf/simulated/floor,
/area/horizon/maintenance/substation/command)
"opE" = (
@@ -109319,8 +110493,8 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
},
-/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"osD" = (
/obj/effect/floor_decal/corner_wide/yellow{
@@ -109374,7 +110548,7 @@
/turf/simulated/floor/tiled,
/area/horizon/hangar/operations)
"osX" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/structure/lattice/catwalk/indoor/grate/damaged{
@@ -109497,6 +110671,10 @@
/obj/structure/cable{
icon_state = "1-4"
},
+/obj/structure/lattice/catwalk/indoor,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/engineering/lower)
"otK" = (
@@ -109663,7 +110841,7 @@
icon_state = "1-2"
},
/obj/structure/disposalpipe/segment,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -109808,7 +110986,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 9
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/holodeck)
"ovV" = (
/obj/structure/bed/stool/chair{
@@ -109919,7 +111097,7 @@
/area/shuttle/merchant)
"owF" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/structure/cable{
@@ -109937,11 +111115,9 @@
/turf/simulated/floor/tiled/gunmetal,
/area/horizon/operations/warehouse)
"owI" = (
-/obj/effect/floor_decal/industrial/warning/cee{
- dir = 4
- },
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"owJ" = (
/obj/structure/machinery/atmospherics/pipe/simple/visible/yellow{
@@ -109997,6 +111173,9 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
+/obj/structure/machinery/light/floor{
+ dir = 1
+ },
/turf/simulated/floor/tiled/dark/full,
/area/horizon/shuttle/intrepid/main_compartment)
"oxe" = (
@@ -110020,7 +111199,10 @@
no_cargo = 1
},
/obj/random/gloves,
-/turf/simulated/floor/tiled,
+/obj/effect/floor_decal/corner/brown{
+ dir = 5
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"oxq" = (
/obj/structure/bed/stool/chair/shuttle,
@@ -110083,6 +111265,12 @@
"oxM" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/machinery/alarm/north,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/wing_port)
"oxQ" = (
@@ -110093,7 +111281,7 @@
name = "airlock_horizon_deck_2_aft_sm"
},
/obj/effect/map_effect/marker_helper/airlock/exterior,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/reactor/supermatter/airlock)
"oxR" = (
/obj/effect/floor_decal/industrial/hatch/red,
@@ -110141,6 +111329,9 @@
"oyp" = (
/obj/structure/machinery/vending/cigarette/horizon,
/obj/effect/floor_decal/industrial/hatch/yellow,
+/obj/effect/floor_decal/spline/fancy/wood{
+ dir = 9
+ },
/turf/simulated/floor/wood/walnut,
/area/horizon/medical/smoking)
"oyq" = (
@@ -110167,9 +111358,9 @@
/area/horizon/command/heads/cmo)
"oyv" = (
/obj/effect/floor_decal/industrial/outline/grey,
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/random/canister/empty,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/security/port)
"oyz" = (
/obj/effect/floor_decal/corner_wide/lime/diagonal,
@@ -110282,7 +111473,7 @@
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_2/fore)
"ozq" = (
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"ozr" = (
@@ -110353,7 +111544,6 @@
/turf/simulated/floor/tiled,
/area/horizon/rnd/hallway/secondary)
"ozK" = (
-/obj/structure/machinery/atmospherics/unary/vent_scrubber/on,
/obj/effect/floor_decal/spline/fancy/wood{
dir = 1
},
@@ -110425,6 +111615,10 @@
/area/horizon/security/investigations_hallway)
"oAd" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden,
+/obj/structure/machinery/meter,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/medical/cryo)
"oAe" = (
@@ -110576,6 +111770,9 @@
dir = 4
},
/obj/item/radio/intercom/south,
+/obj/effect/floor_decal/corner/dark_blue{
+ dir = 9
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/ai/upload_foyer)
"oBl" = (
@@ -110618,6 +111815,7 @@
/area/shuttle/legion)
"oBz" = (
/obj/structure/machinery/atmospherics/pipe/simple/visible/red,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/atmos_crosser)
"oBD" = (
@@ -110761,6 +111959,9 @@
/obj/structure/machinery/power/breakerbox/activated{
RCon_tag = "Engineering Lower Deck Substation"
},
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/engineering/lower)
"oCI" = (
@@ -110800,7 +112001,7 @@
/obj/random/dirt_75,
/obj/effect/floor_decal/industrial/outline/grey,
/obj/random/dirt_75,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/main/port/shortcut)
"oCR" = (
/obj/structure/disposalpipe/segment,
@@ -111307,11 +112508,12 @@
/turf/simulated/floor/tiled,
/area/horizon/operations/machinist)
"oGs" = (
+/obj/effect/decal/cleanable/dirt,
/obj/effect/floor_decal/industrial/warning{
- dir = 8
+ dir = 10
},
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_1/wing/starboard/far)
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/main/starboard)
"oGt" = (
/obj/structure/machinery/door/airlock/glass{
dir = 1;
@@ -111366,11 +112568,13 @@
/obj/structure/cable/green{
icon_state = "2-8"
},
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"oGP" = (
/obj/structure/cable/green{
@@ -111508,7 +112712,7 @@
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/structure/closet/crate,
/obj/random/loot,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/port)
"oHG" = (
/obj/structure/railing/mapped{
@@ -111809,9 +113013,10 @@
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/obj/structure/railing/mapped,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/main/starboard)
"oJM" = (
@@ -111910,7 +113115,7 @@
master_tag = "airlock_horizon_dock_deck_3_starboard_1";
name = "airlock_horizon_dock_deck_3_starboard_1"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"oKh" = (
/obj/structure/railing/mapped,
@@ -111996,8 +113201,8 @@
/area/shuttle/transport1)
"oKI" = (
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply,
-/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"oKM" = (
/obj/effect/floor_decal/corner/dark_blue{
@@ -112346,8 +113551,11 @@
/area/horizon/engineering/atmos/propulsion/starboard)
"oMH" = (
/obj/random/junk,
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"oMK" = (
/obj/effect/decal/fake_object{
@@ -112531,7 +113739,7 @@
dir = 4;
req_one_access = list(5,12)
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/aft/starboard)
"oNN" = (
/turf/simulated/floor/holofloor/wood,
@@ -112565,7 +113773,7 @@
},
/obj/random/dirt_75,
/obj/random/dirt_75,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/research)
"oOg" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -112656,9 +113864,11 @@
/turf/simulated/floor/tiled/white,
/area/horizon/rnd/xenoarch/atrium)
"oOz" = (
-/obj/effect/floor_decal/industrial/outline/yellow,
/obj/structure/machinery/atmospherics/pipe/manifold4w/hidden,
-/turf/simulated/floor,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/far)
"oOI" = (
/obj/structure/table/reinforced/steel,
@@ -112763,13 +113973,12 @@
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/central)
"oPC" = (
-/obj/structure/machinery/door/window/eastright{
- dir = 1
- },
/obj/structure/machinery/atmospherics/pipe/manifold/hidden{
dir = 4
},
-/obj/effect/floor_decal/industrial/hatch/yellow,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
/turf/simulated/floor,
/area/horizon/hallway/primary/deck_3/port/docks)
"oPE" = (
@@ -112797,7 +114006,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/random/maintenance_junk_or_loot,
@@ -112806,7 +114015,10 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/cargo_compartment)
"oPN" = (
-/turf/simulated/floor/tiled/dark,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 5
+ },
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/auxatmos)
"oPO" = (
/obj/structure/machinery/door/airlock/maintenance_hatch{
@@ -112880,9 +114092,6 @@
/area/horizon/service/cafeteria)
"oQp" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/light/small/emergency{
- dir = 4
- },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"oQu" = (
@@ -112969,10 +114178,7 @@
"oRf" = (
/obj/structure/machinery/porta_turret,
/obj/effect/floor_decal/industrial/warning/full,
-/turf/simulated/floor/bluegrid{
- name = "cooled mainframe floor";
- temperature = 278
- },
+/turf/simulated/floor/tiled/dark,
/area/horizon/ai/chamber)
"oRi" = (
/obj/effect/floor_decal/corner/red{
@@ -113037,6 +114243,7 @@
"oRC" = (
/obj/random/dirt_75,
/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning/corner,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"oRD" = (
@@ -113406,10 +114613,10 @@
no_cargo = 1
},
/obj/random/lavalamp,
-/obj/structure/machinery/light/small/emergency{
- dir = 4
+/obj/effect/floor_decal/corner/brown{
+ dir = 6
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"oTp" = (
/turf/simulated/floor/wood,
@@ -113435,6 +114642,7 @@
/obj/random/loot,
/obj/random/bandana,
/obj/random/firstaid,
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/aft)
"oTJ" = (
@@ -113513,6 +114721,9 @@
dir = 8
},
/obj/structure/railing/mapped,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/main/starboard)
"oUg" = (
@@ -113568,8 +114779,10 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/medical/paramedic)
"oUx" = (
-/turf/simulated/floor/tiled/dark,
-/area/horizon/maintenance/deck_3/security/port)
+/obj/random/maintenance_junk_or_loot,
+/obj/structure/platform,
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_1/operations/starboard)
"oUB" = (
/obj/structure/disposalpipe/segment{
dir = 8;
@@ -113955,11 +115168,11 @@
/turf/simulated/floor/tiled/full,
/area/horizon/hangar/operations)
"oXf" = (
-/obj/effect/floor_decal/industrial/warning/corner,
/obj/structure/cable/green{
icon_state = "1-2"
},
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/operations)
"oXi" = (
/obj/effect/floor_decal/industrial/hatch_door/red,
@@ -113995,7 +115208,7 @@
dir = 4
},
/obj/structure/machinery/floodlight,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/interstitial)
"oXq" = (
/obj/structure/machinery/door/firedoor{
@@ -114120,11 +115333,8 @@
/turf/simulated/floor/tiled/gunmetal,
/area/horizon/operations/ship_supply_warehouse)
"oXN" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
- },
/obj/random/tool,
-/turf/simulated/floor/tiled/dark/full,
+/turf/simulated/floor/carpet/rubber,
/area/horizon/engineering/atmos/storage_maintenance)
"oXX" = (
/obj/structure/cable/green{
@@ -114150,7 +115360,8 @@
"oYa" = (
/obj/random/dirt_75,
/obj/random/dirt_75,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/far)
"oYb" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -114270,7 +115481,7 @@
/obj/effect/floor_decal/industrial/warning/cee,
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/central_ring)
"oYW" = (
/obj/structure/machinery/door/window/southleft{
@@ -114290,7 +115501,7 @@
/area/horizon/shuttle/canary)
"oZl" = (
/obj/structure/lattice/catwalk/indoor,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/turf/unsimulated/floor/plating,
@@ -114377,7 +115588,7 @@
/area/horizon/command/bridge/upperdeck)
"oZW" = (
/obj/structure/trash_pile,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/random/dirt_75,
@@ -114398,7 +115609,11 @@
/turf/simulated/floor/plating,
/area/horizon/operations/break_room)
"oZY" = (
-/turf/simulated/floor,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 6
+ },
+/obj/random/dirt_75,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/security/port)
"pai" = (
/obj/effect/floor_decal/corner/dark_green{
@@ -114419,7 +115634,7 @@
/turf/simulated/floor/tiled,
/area/horizon/crew/fitness/changing)
"pan" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -114535,7 +115750,7 @@
name = "Cryogenics Control Room";
req_access = list(66)
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/main/starboard)
"pbg" = (
/obj/effect/floor_decal/spline/plain/yellow{
@@ -114606,8 +115821,11 @@
/turf/simulated/open,
/area/horizon/medical/gen_treatment)
"pbN" = (
-/obj/structure/machinery/atmospherics/unary/vent_scrubber/on,
/obj/structure/machinery/disposal/small/east,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/obj/structure/disposalpipe/trunk,
/turf/simulated/floor/wood,
/area/horizon/command/heads/chief)
"pbO" = (
@@ -114639,6 +115857,7 @@
dir = 1;
icon_state = "pipe-c"
},
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor,
/area/horizon/maintenance/substation/command)
"pcg" = (
@@ -114677,6 +115896,7 @@
/obj/structure/cable{
icon_state = "1-4"
},
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/research)
"pcJ" = (
@@ -114899,14 +116119,17 @@
/obj/structure/machinery/power/breakerbox/activated{
RCon_tag = "Research Substation"
},
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/research)
"peq" = (
/obj/structure/cable/green{
icon_state = "2-8"
},
-/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/effect/decal/cleanable/dirt,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/wing_port)
"pet" = (
@@ -115015,7 +116238,10 @@
"peN" = (
/obj/structure/trash_pile,
/obj/random/dirt_75,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard)
"peQ" = (
/obj/structure/shuttle_part/scc_space_ship{
@@ -115115,6 +116341,9 @@
dir = 8;
c_tag = "Operations - Supply Corridor Aft"
},
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/operations)
"pfp" = (
@@ -115222,7 +116451,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled,
/area/horizon/maintenance/deck_2/wing/starboard/nacelle)
"pfP" = (
/obj/structure/cable{
@@ -115232,6 +116461,9 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/yellow,
/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/engineering/storage/lower)
"pfT" = (
@@ -115870,7 +117102,10 @@
},
/obj/random/dirt_75,
/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"pkh" = (
/obj/item/aiModule/conglomerate,
@@ -116280,7 +117515,7 @@
pixel_y = 6
},
/obj/random/dirt_75,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/turf/simulated/floor/plating,
@@ -116305,11 +117540,11 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/security/armoury)
"pnw" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/effect/landmark{
+ name = "Revenant"
},
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/wing/starboard/far)
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/wing/starboard/near)
"pnD" = (
/obj/structure/window/reinforced,
/obj/structure/window/reinforced{
@@ -116702,14 +117937,30 @@
/turf/simulated/floor/tiled,
/area/horizon/maintenance/deck_3/security/port)
"pqm" = (
-/turf/simulated/floor/reinforced,
+/obj/structure/sign/flag/scc{
+ pixel_x = 32
+ },
+/obj/effect/floor_decal/industrial/hatch/red,
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 8
+ },
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 5
+ },
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/command/bridge/selfdestruct)
"pqn" = (
/obj/structure/machinery/atmospherics/pipe/manifold/visible{
dir = 8
},
-/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"pqv" = (
/obj/effect/decal/cleanable/dirt,
@@ -116765,18 +118016,6 @@
/obj/structure/stairs/north,
/turf/simulated/floor/tiled,
/area/horizon/operations/loading)
-"prj" = (
-/obj/effect/floor_decal/corner_wide/yellow{
- dir = 10
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/simulated/floor/tiled/white,
-/area/horizon/medical/hallway)
"prm" = (
/obj/effect/floor_decal/spline/fancy/wood/corner{
dir = 1
@@ -116814,7 +118053,7 @@
/obj/structure/disposalpipe/segment{
icon_state = "pipe-c"
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -116993,6 +118232,12 @@
},
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/reactor/indra/mainchamber)
+"psu" = (
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 1
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/horizon/exterior/no_shields)
"psv" = (
/obj/structure/cable/green{
icon_state = "1-2"
@@ -117036,7 +118281,7 @@
dir = 4
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"psD" = (
/obj/structure/machinery/door/airlock/external{
@@ -117296,7 +118541,7 @@
},
/obj/structure/table/wood,
/obj/random/contraband,
-/turf/simulated/floor/tiled/dark,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/port)
"puG" = (
/obj/effect/floor_decal/corner_wide/paleblue/diagonal{
@@ -117361,13 +118606,6 @@
},
/turf/simulated/floor/tiled/full,
/area/horizon/security/investigations_hallway)
-"puX" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 5
- },
-/obj/structure/grille,
-/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
"pva" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/cable{
@@ -117393,7 +118631,10 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"pvl" = (
/obj/structure/railing/mapped,
@@ -117403,12 +118644,6 @@
/obj/structure/machinery/portable_atmospherics/canister/empty/carbon_dioxide,
/turf/simulated/floor/plating,
/area/horizon/engineering/reactor/indra/office)
-"pvs" = (
-/obj/structure/machinery/atmospherics/unary/vent_pump/aux{
- dir = 8
- },
-/turf/simulated/floor/reinforced,
-/area/horizon/command/bridge/selfdestruct)
"pvw" = (
/obj/effect/floor_decal/industrial/warning{
dir = 4
@@ -117452,7 +118687,7 @@
master_tag = "airlock_horizon_deck_1_aft_port_1";
name = "airlock_horizon_deck_1_aft_port_1"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/auxatmos)
"pvW" = (
/obj/structure/bed/stool/chair/padded/black{
@@ -117464,7 +118699,7 @@
/turf/simulated/floor/carpet,
/area/horizon/repoffice/representative_two)
"pwg" = (
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/maintenance/deck_2/wing/starboard/nacelle)
"pwj" = (
/obj/structure/closet/emcloset,
@@ -117508,10 +118743,12 @@
/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"pws" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/tiled,
-/area/horizon/maintenance/deck_1/operations/starboard)
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/wing/starboard/far)
"pwv" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
@@ -117547,9 +118784,15 @@
/turf/simulated/floor/plating,
/area/horizon/command/bridge/controlroom)
"pwz" = (
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
+/obj/structure/platform,
+/obj/structure/platform{
+ dir = 8
+ },
+/obj/structure/platform_deco{
+ dir = 9
+ },
+/obj/structure/machinery/portable_atmospherics/canister/air/warm,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"pwC" = (
/obj/effect/floor_decal/industrial/outline/grey,
@@ -117634,6 +118877,7 @@
dir = 4
},
/obj/structure/machinery/alarm/north,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/operations)
"pxv" = (
@@ -117721,7 +118965,10 @@
dir = 4
},
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/tiled/dark,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/port/far)
"pxP" = (
/obj/structure/machinery/light{
@@ -117782,7 +119029,10 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 5
},
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard)
"pyp" = (
/obj/structure/machinery/seed_storage/garden/xenobotany,
@@ -117837,7 +119087,7 @@
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/random/dirt_75,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"pyI" = (
/turf/simulated/wall/shuttle/scc_space_ship/cardinal,
@@ -117854,7 +119104,7 @@
/turf/simulated/floor/plating,
/area/horizon/engineering/atmos/turbine)
"pyM" = (
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 5
},
@@ -117998,13 +119248,9 @@
/turf/simulated/floor/wood,
/area/horizon/command/bridge/upperdeck)
"pzV" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
- },
-/obj/random/dirt_75,
-/obj/random/dirt_75,
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_1/main/starboard)
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/main/starboard)
"pzW" = (
/obj/effect/floor_decal/industrial/warning{
dir = 8
@@ -118024,8 +119270,14 @@
pixel_x = -11;
pixel_y = -2
},
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port/shortcut)
+"pAe" = (
+/turf/simulated/floor/tiled/ramp,
+/area/horizon/maintenance/deck_1/operations/starboard)
"pAi" = (
/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
@@ -118065,7 +119317,7 @@
name = "airlock_horizon_deck_2_port_1"
},
/obj/effect/map_effect/marker_helper/airlock/interior,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/port/far)
"pAA" = (
/obj/structure/machinery/access_button{
@@ -118197,7 +119449,7 @@
icon_state = "4-8"
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/aft/port)
"pBj" = (
/obj/effect/floor_decal/industrial/warning{
@@ -118284,7 +119536,7 @@
/obj/effect/floor_decal/corner/dark_blue{
dir = 5
},
-/obj/structure/machinery/light/small{
+/obj/structure/machinery/light{
dir = 1
},
/turf/simulated/floor/tiled/dark,
@@ -118385,7 +119637,7 @@
name = "airlock_horizon_deck_2_starboard_aft"
},
/obj/effect/map_effect/marker_helper/airlock/exterior,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"pCo" = (
/obj/structure/table/reinforced/steel,
@@ -118469,12 +119721,16 @@
master_tag = "airlock_horizon_deck_2_aft_sm";
name = "airlock_horizon_deck_2_aft_sm"
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/engineering/reactor/supermatter/airlock)
"pCM" = (
/obj/random/tool,
/obj/random/dirt_75,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard)
"pCP" = (
/obj/structure/railing/mapped{
@@ -118578,6 +119834,9 @@
dir = 8
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/machinery/light/small{
+ dir = 1
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"pDm" = (
@@ -118707,7 +119966,7 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard)
"pEj" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/effect/decal/cleanable/dirt,
@@ -118857,6 +120116,9 @@
/area/horizon/holodeck/source_battlemonsters)
"pFS" = (
/obj/structure/machinery/atmospherics/unary/vent_scrubber/on,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/main/starboard)
"pGe" = (
@@ -118884,7 +120146,8 @@
dir = 4
},
/obj/random/junk,
-/turf/simulated/floor/tiled/dark/full,
+/obj/random/dirt_75,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/far)
"pGm" = (
/obj/structure/tank_wall{
@@ -118918,6 +120181,13 @@
/obj/random/dirt_75,
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port/shortcut)
+"pGF" = (
+/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/wing/starboard)
"pGG" = (
/obj/structure/machinery/door/airlock/hatch{
dir = 4;
@@ -119269,7 +120539,7 @@
dir = 10
},
/obj/structure/machinery/alarm/east,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/port/far)
"pJa" = (
/obj/structure/shuttle_part/scc_space_ship{
@@ -119305,6 +120575,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/visible/purple{
dir = 6
},
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/atmos_crosser)
"pJs" = (
@@ -119497,7 +120768,13 @@
dir = 10
},
/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 1
+ },
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/auxatmos)
"pKx" = (
/turf/simulated/wall/shuttle/unique/tcfl{
@@ -119532,7 +120809,10 @@
"pKC" = (
/obj/effect/floor_decal/industrial/outline/grey,
/obj/random/dirt_75,
-/turf/simulated/floor,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/security/port)
"pKI" = (
/obj/effect/floor_decal/spline/plain/black{
@@ -119583,9 +120863,6 @@
/turf/simulated/floor/tiled,
/area/horizon/maintenance/deck_2/wing/starboard/nacelle)
"pLp" = (
-/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 8
- },
/obj/structure/cable/green{
icon_state = "1-2"
},
@@ -119596,6 +120873,7 @@
dir = 10
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/wood,
/area/horizon/service/bar)
"pLu" = (
@@ -119617,7 +120895,7 @@
req_access = list(1);
dir = 4
},
-/turf/simulated/floor/tiled/full,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/security/interrogation)
"pLy" = (
/obj/structure/machinery/atmospherics/pipe/manifold/hidden{
@@ -119725,10 +121003,10 @@
/area/horizon/command/heads/om)
"pMv" = (
/obj/effect/floor_decal/industrial/warning{
- dir = 1
+ dir = 6
},
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/wing/port/far)
+/turf/simulated/floor,
+/area/horizon/maintenance/deck_3/aft/starboard/far)
"pMw" = (
/obj/effect/floor_decal/industrial/warning{
dir = 8
@@ -119796,6 +121074,7 @@
icon_state = "2-8"
},
/obj/structure/machinery/power/apc/low/north,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/medical)
"pNc" = (
@@ -119910,6 +121189,9 @@
/area/centcom/spawning)
"pNT" = (
/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/research)
"pNX" = (
@@ -119919,6 +121201,7 @@
},
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/random/dirt_75,
+/obj/structure/machinery/alarm/north,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"pNY" = (
@@ -119933,14 +121216,12 @@
/turf/simulated/floor/wood,
/area/horizon/command/bridge/upperdeck)
"pOa" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
},
-/obj/structure/lattice/catwalk/indoor/grate/damaged{
- color = "#4c535b"
- },
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/wing/starboard)
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/wing/starboard/far)
"pOb" = (
/obj/effect/landmark/entry_point/fore{
name = "fore, starboard ballast"
@@ -120206,11 +121487,12 @@
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/port)
"pPQ" = (
-/obj/effect/floor_decal/industrial/warning,
-/obj/structure/machinery/light/small/emergency{
- dir = 1
+/obj/structure/machinery/door/firedoor{
+ req_one_access = list(24,11,67,73);
+ dir = 4
},
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/hatch_door/yellow,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/main/port)
"pPR" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -120242,7 +121524,10 @@
/obj/random/tool{
pixel_y = 6
},
-/turf/simulated/floor,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/security/port)
"pPZ" = (
/obj/structure/bed/stool/padded,
@@ -120542,6 +121827,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 1
},
+/obj/structure/machinery/light/small/floor,
/turf/simulated/floor/wood,
/area/horizon/service/bar)
"pRR" = (
@@ -120813,14 +122099,11 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"pTN" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/aux{
- dir = 4
- },
-/turf/simulated/floor/reinforced,
-/area/horizon/command/bridge/selfdestruct)
+/turf/simulated/floor/tiled/full,
+/area/horizon/hallway/primary/deck_2/central)
"pTZ" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/turf/unsimulated/floor,
@@ -120833,7 +122116,7 @@
dir = 8
},
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/holodeck)
"pUg" = (
/obj/structure/table/standard,
@@ -120976,7 +122259,7 @@
req_one_access = list(12,66);
name = "Deck 1 Starboard Primary Maintenance Conduit"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/teleporter)
"pVw" = (
/obj/structure/bed/stool/chair/office/dark{
@@ -121009,6 +122292,7 @@
/obj/structure/machinery/atmospherics/binary/pump{
name = "Mix to Connector"
},
+/obj/structure/machinery/firealarm/east,
/turf/simulated/floor/plating,
/area/horizon/engineering/storage/lower)
"pVD" = (
@@ -121342,7 +122626,8 @@
/area/merchant_station/warehouse)
"pXz" = (
/obj/effect/floor_decal/industrial/warning,
-/turf/simulated/floor/plating,
+/obj/structure/machinery/alarm/north,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port)
"pXA" = (
/obj/structure/lattice,
@@ -121439,10 +122724,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
- },
-/obj/random/dirt_75,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"pYd" = (
@@ -121469,7 +122751,7 @@
icon_state = "0-4"
},
/obj/structure/machinery/power/apc/low/south,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/port)
"pYr" = (
/obj/effect/floor_decal/industrial/warning{
@@ -121523,7 +122805,7 @@
name = "airlock_horizon_deck_2_starboard_aft"
},
/obj/effect/map_effect/marker_helper/airlock/interior,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"pYV" = (
/obj/effect/floor_decal/corner_wide/yellow{
@@ -121726,6 +123008,9 @@
"qaq" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/operations)
"qas" = (
@@ -121801,10 +123086,14 @@
/area/horizon/operations/machinist)
"qaV" = (
/obj/structure/machinery/alarm/west,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/main/starboard)
"qbc" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -121812,7 +123101,10 @@
/area/horizon/maintenance/deck_1/hangar/port)
"qbh" = (
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/security/port)
"qbj" = (
/obj/effect/floor_decal/industrial/warning/full,
@@ -122153,6 +123445,14 @@
},
/turf/simulated/floor/tiled/full,
/area/horizon/operations/mining_main/refinery)
+"qdE" = (
+/obj/random/maintenance_junk_or_loot,
+/obj/random/dirt_75,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/wing/port/far)
"qdL" = (
/obj/effect/floor_decal/corner/red{
dir = 10
@@ -122210,11 +123510,11 @@
/area/horizon/crew/fitness/changing)
"qec" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/railing/mapped{
+/obj/structure/machinery/light/small{
dir = 4
},
/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/aft)
+/area/horizon/maintenance/deck_2/wing/starboard)
"qee" = (
/obj/effect/floor_decal/industrial/warning{
dir = 1
@@ -122248,7 +123548,7 @@
name = "airlock_horizon_deck_1_aft_port_1"
},
/obj/effect/map_effect/marker_helper/airlock/exterior,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/auxatmos)
"qem" = (
/obj/structure/machinery/door/firedoor,
@@ -122258,7 +123558,7 @@
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"qep" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -122385,9 +123685,13 @@
/turf/simulated/floor/reinforced/airless,
/area/horizon/engineering/reactor/indra/mainchamber)
"qfa" = (
-/obj/effect/floor_decal/industrial/outline/grey,
+/obj/structure/cable,
+/obj/structure/machinery/power/apc/low/south,
/obj/random/dirt_75,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 5
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port/shortcut)
"qfo" = (
/turf/simulated/open/airless,
@@ -122490,6 +123794,9 @@
/obj/effect/floor_decal/corner/dark_blue{
dir = 5
},
+/obj/structure/machinery/light{
+ dir = 1
+ },
/turf/simulated/floor/tiled,
/area/horizon/security/investigations_hallway)
"qga" = (
@@ -122515,8 +123822,10 @@
/turf/simulated/wall/shuttle/scc_space_ship/cardinal,
/area/horizon/maintenance/deck_2/security_port)
"qgf" = (
-/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"qgh" = (
/obj/structure/cable/green{
@@ -122858,7 +124167,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port)
"qiW" = (
/obj/structure/platform/ledge{
@@ -122885,6 +124194,22 @@
},
/turf/simulated/floor/tiled/freezer,
/area/horizon/crew/fitness/showers)
+"qjh" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/wing/starboard/far)
"qjk" = (
/obj/effect/floor_decal/corner/dark_blue{
dir = 10
@@ -122902,15 +124227,21 @@
/turf/simulated/floor/holofloor/wood,
/area/horizon/holodeck/source_sauna)
"qjG" = (
-/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/random/dirt_75,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
+/obj/structure/machinery/light/small,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"qjH" = (
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/structure/table/rack,
/obj/random/loot,
-/turf/simulated/floor/tiled/dark,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"qjN" = (
/obj/structure/machinery/light,
@@ -123092,7 +124423,7 @@
name = "airlock_horizon_deck_1_aft_propulsion_1"
},
/obj/effect/map_effect/marker_helper/airlock/exterior,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/atmos/propulsion/starboard)
"qli" = (
/obj/structure/flora/ausbushes/sparsegrass,
@@ -123123,7 +124454,7 @@
dir = 4
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/aft/starboard)
"qlr" = (
/obj/structure/railing/mapped{
@@ -123358,6 +124689,9 @@
/obj/effect/floor_decal/spline/plain/corner/black{
dir = 1
},
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/break_room)
"qmh" = (
@@ -123458,9 +124792,6 @@
target_pressure = 200
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency{
- dir = 1
- },
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/starboard/far)
@@ -123685,9 +125016,6 @@
},
/area/centcom/control)
"qnV" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 8
- },
/obj/structure/trash_pile,
/obj/random/dirt_75,
/turf/simulated/floor/plating,
@@ -123731,7 +125059,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/research)
"qor" = (
/obj/structure/machinery/alarm/east,
@@ -123853,7 +125181,7 @@
"qpd" = (
/obj/effect/decal/cleanable/dirt,
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/tiled/dark,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/security/port)
"qpr" = (
/obj/structure/closet/secure_closet/guncabinet{
@@ -123984,7 +125312,6 @@
/turf/simulated/floor/tiled,
/area/horizon/security/investigations_hallway)
"qqm" = (
-/obj/structure/grille/broken,
/obj/item/material/shard{
icon_state = "medium"
},
@@ -124002,9 +125329,6 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/light/small{
- dir = 8
- },
/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/yellow,
/turf/simulated/floor/plating,
@@ -124043,6 +125367,9 @@
/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
dir = 4
},
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/atmos/storage_maintenance)
"qqF" = (
@@ -124071,10 +125398,10 @@
/turf/simulated/floor/tiled/white,
/area/horizon/shuttle/intrepid/medical)
"qqP" = (
-/obj/random/dirt_75,
/obj/structure/cable{
icon_state = "4-8"
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/port/shortcut)
"qqQ" = (
@@ -124194,12 +125521,19 @@
icon_state = "1-4"
},
/obj/structure/machinery/power/apc/low/west,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/civ_d2)
"qrM" = (
/obj/effect/decal/cleanable/dirt,
/obj/random/junk,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard)
"qrO" = (
/obj/item/reagent_containers/food/drinks/waterbottle{
@@ -124556,6 +125890,9 @@
},
/obj/structure/lattice/catwalk,
/obj/structure/disposalpipe/down,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/open,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"quC" = (
@@ -124600,7 +125937,7 @@
/obj/effect/floor_decal/industrial/hatch_door/engineering{
dir = 1
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/storage/lower)
"quS" = (
/obj/effect/floor_decal/industrial/warning,
@@ -124608,7 +125945,7 @@
dir = 4
},
/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"quT" = (
/obj/structure/shuttle_part/scc/mining{
icon_state = "1,1"
@@ -124676,7 +126013,7 @@
name = "Deck 2 Research Substation";
req_one_access = list(11,24)
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/substation/research)
"qve" = (
/obj/structure/railing/mapped{
@@ -124740,7 +126077,10 @@
pixel_y = 3
},
/obj/random/dirt_75,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard)
"qvD" = (
/obj/structure/machinery/light{
@@ -124888,7 +126228,7 @@
dir = 8
},
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard/amidships)
"qwU" = (
/obj/effect/floor_decal/spline/fancy/wood/corner{
@@ -124933,7 +126273,7 @@
pixel_x = 28;
pixel_y = 12
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/port/docks)
"qxm" = (
/obj/effect/floor_decal/corner/mauve/full{
@@ -125068,7 +126408,7 @@
},
/area/centcom/shared_dream)
"qyg" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/random/maintenance_junk_or_loot,
@@ -125110,7 +126450,7 @@
pixel_y = 32
},
/obj/effect/floor_decal/corner/red/diagonal,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/effect/floor_decal/industrial/outline/firefighting_closet,
@@ -125157,6 +126497,9 @@
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden,
/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"qyQ" = (
@@ -125339,7 +126682,7 @@
},
/obj/structure/closet/crate/bin,
/obj/random/loot,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard/amidships)
"qAF" = (
/turf/unsimulated/wall/darkshuttlewall,
@@ -125465,7 +126808,8 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/turf/simulated/floor/plating,
+/obj/structure/lattice/catwalk/indoor,
+/turf/simulated/open,
/area/horizon/medical/gen_treatment)
"qBm" = (
/obj/structure/machinery/portable_atmospherics/hydroponics,
@@ -125542,7 +126886,8 @@
"qBM" = (
/obj/random/junk,
/obj/random/dirt_75,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/near)
"qBN" = (
/obj/structure/flora/ausbushes/lavendergrass,
@@ -125572,11 +126917,13 @@
},
/area/centcom/control)
"qBY" = (
-/obj/effect/floor_decal/spline/fancy/wood{
+/obj/effect/floor_decal/industrial/warning{
dir = 4
},
-/turf/simulated/floor/wood,
-/area/horizon/service/bar)
+/obj/random/maintenance_junk_or_loot,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_1/operations/starboard/far)
"qBZ" = (
/turf/simulated/wall,
/area/horizon/stairwell/port/deck_3)
@@ -125620,24 +126967,30 @@
},
/area/tdome/tdomeobserve)
"qCx" = (
+/obj/effect/floor_decal/corner/white{
+ dir = 5
+ },
/obj/structure/machinery/light/floor{
dir = 1
},
-/turf/simulated/floor/tiled/full,
+/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_2/central)
"qCy" = (
/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/aft)
"qCB" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/machinery/portable_atmospherics/powered/pump/filled,
+/obj/effect/floor_decal/industrial/outline/yellow,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/main/starboard)
"qCN" = (
/obj/structure/bed/padded,
/obj/item/bedsheet/blue,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/effect/floor_decal/corner/dark_blue/full,
@@ -125792,7 +127145,6 @@
icon_state = "1-2"
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/random/dirt_75,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"qDQ" = (
@@ -125857,6 +127209,9 @@
/obj/structure/machinery/computer/ship/navigation{
dir = 8
},
+/obj/structure/machinery/light{
+ dir = 4
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/command/bridge/aibunker)
"qEl" = (
@@ -126314,23 +127669,20 @@
c_tag = "Engineering - Deck 2 - Research Substation";
dir = 1
},
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/research)
"qHn" = (
/obj/structure/closet/crate,
-/obj/structure/railing/mapped{
- dir = 4
- },
/obj/random/loot,
/obj/effect/decal/cleanable/cobweb2{
icon_state = "cobweb1"
},
-/obj/structure/railing/mapped{
- icon_state = "railing0-0"
- },
/obj/random/med_stack,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard)
"qHv" = (
/obj/effect/floor_decal/corner/brown{
@@ -126410,6 +127762,12 @@
"qHE" = (
/turf/simulated/wall/shuttle/scc_space_ship/cardinal,
/area/horizon/maintenance/deck_1/atmos_crosser)
+"qHG" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/wing/starboard)
"qHI" = (
/turf/simulated/wall,
/area/horizon/medical/main_storage)
@@ -126474,18 +127832,12 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/port/far)
"qIf" = (
-/obj/effect/floor_decal/corner_wide/blue{
- dir = 5
- },
-/obj/effect/floor_decal/corner_wide/yellow{
- dir = 10
- },
-/obj/effect/floor_decal/industrial/warning,
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/porta_turret/stationary,
+/obj/effect/floor_decal/industrial/warning/full,
/obj/structure/sign/nosmoking_1{
pixel_y = -32
},
-/turf/simulated/floor/reinforced,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/command/bridge/selfdestruct)
"qIg" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -126717,6 +128069,13 @@
/obj/effect/floor_decal/industrial/outline/service,
/turf/simulated/floor/tiled/gunmetal/full,
/area/horizon/operations/warehouse)
+"qJW" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/railing/mapped{
+ dir = 4
+ },
+/turf/simulated/open/airless,
+/area/horizon/exterior/no_shields)
"qJX" = (
/obj/structure/table/wood,
/obj/structure/machinery/power/outlet,
@@ -126818,7 +128177,8 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
},
-/turf/simulated/floor/tiled,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/operations/starboard)
"qKs" = (
/obj/structure/machinery/telepad,
@@ -126853,10 +128213,12 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/elevator)
"qKF" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
-/turf/simulated/floor/tiled/dark,
+/obj/structure/table/rack,
+/obj/random/loot,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/port/far)
"qKM" = (
/obj/effect/floor_decal/industrial/outline/grey,
@@ -127019,6 +128381,9 @@
},
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/atmos/air)
+"qLr" = (
+/turf/space,
+/area/horizon/exterior/no_shields)
"qLw" = (
/obj/structure/machinery/light{
dir = 4
@@ -127054,7 +128419,7 @@
/turf/simulated/floor/plating,
/area/horizon/engineering/atmos/air)
"qLN" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/effect/map_effect/marker/airlock{
@@ -127062,7 +128427,10 @@
master_tag = "airlock_horizon_deck_3_aft_1";
name = "airlock_horizon_deck_3_aft_1"
},
-/turf/simulated/floor,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"qLO" = (
/obj/structure/railing/mapped,
@@ -127084,7 +128452,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 4
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/turf/simulated/floor/plating,
@@ -127109,15 +128477,14 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/medical/gen_treatment)
"qLX" = (
-/obj/structure/machinery/portable_atmospherics/canister/empty/air,
-/obj/structure/window/reinforced{
- dir = 8
+/obj/effect/floor_decal/industrial/warning{
+ dir = 6
},
-/obj/structure/window/reinforced{
- dir = 1
- },
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/wing/port/nacelle)
+/obj/structure/table/reinforced,
+/obj/item/screwdriver,
+/obj/item/clothing/glasses/sunglasses,
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/wing/port/far)
"qMe" = (
/obj/structure/table/standard,
/obj/effect/floor_decal/corner/dark_green/diagonal,
@@ -127278,7 +128645,7 @@
name = "airlock_horizon_deck_2_aft_sm"
},
/obj/effect/map_effect/marker_helper/airlock/interior,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/reactor/supermatter/airlock)
"qMR" = (
/obj/effect/floor_decal/spline/plain/black{
@@ -127674,6 +129041,10 @@
},
/turf/simulated/floor/tiled,
/area/horizon/hangar/intrepid/interstitial)
+"qQf" = (
+/obj/structure/machinery/light/small/floor,
+/turf/simulated/floor/wood,
+/area/horizon/service/mess_hall)
"qQh" = (
/obj/structure/sign/greencross{
name = "Emergency Room"
@@ -128044,7 +129415,7 @@
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/main/starboard)
"qSA" = (
/turf/unsimulated/wall/steel,
@@ -128069,9 +129440,6 @@
/turf/simulated/floor/tiled,
/area/horizon/maintenance/deck_2/wing/starboard/nacelle)
"qSL" = (
-/obj/structure/machinery/light/small{
- dir = 8
- },
/obj/effect/floor_decal/corner/dark_blue/full,
/obj/structure/closet/walllocker/firecloset{
pixel_x = -32
@@ -128180,6 +129548,9 @@
/obj/random/loot,
/obj/random/maintenance_junk_or_loot,
/obj/random/contraband,
+/obj/structure/machinery/light/small{
+ dir = 1
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/central_ring)
"qTs" = (
@@ -128230,9 +129601,7 @@
"qTR" = (
/obj/structure/table/rack,
/obj/random/loot,
-/obj/effect/floor_decal/industrial/warning{
- dir = 6
- },
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"qTS" = (
@@ -128323,7 +129692,7 @@
/turf/simulated/floor/holofloor/carpet,
/area/horizon/holodeck/source_courtroom)
"qUT" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/structure/railing/mapped{
@@ -128346,7 +129715,7 @@
},
/obj/structure/lattice/catwalk,
/turf/simulated/open/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"qUY" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 9
@@ -128413,7 +129782,7 @@
/obj/effect/floor_decal/industrial/outline_segment/yellow{
dir = 4
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/turf/simulated/floor/tiled/dark,
@@ -128470,7 +129839,11 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 8
+ },
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/auxatmos)
"qVF" = (
/obj/structure/cable/green{
@@ -128519,7 +129892,7 @@
/obj/effect/floor_decal/industrial/warning/cee{
dir = 4
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/service/starboard)
"qWc" = (
/turf/simulated/floor/tiled/dark/full,
@@ -128553,7 +129926,8 @@
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 1
},
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"qWk" = (
/turf/simulated/wall/shuttle/scc_space_ship/cardinal,
@@ -128709,7 +130083,7 @@
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/trash_pile,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"qXl" = (
/obj/structure/machinery/atmospherics/pipe/simple/visible/purple{
@@ -128853,7 +130227,7 @@
/turf/unsimulated/floor/plating,
/area/centcom/specops)
"qXJ" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/structure/table/rack,
@@ -129396,7 +130770,8 @@
/obj/structure/machinery/light/small{
dir = 1
},
-/turf/simulated/floor/tiled/dark,
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"rbM" = (
/obj/structure/cable/green{
@@ -129423,7 +130798,7 @@
"rbW" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/greenglow,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/turf/simulated/floor/plating,
@@ -129609,7 +130984,7 @@
dir = 1
},
/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"rdq" = (
/obj/structure/grille,
/obj/structure/window/shuttle/scc_space_ship/cardinal,
@@ -129668,7 +131043,6 @@
dir = 1
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/random/dirt_75,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"rdS" = (
@@ -129779,6 +131153,9 @@
/obj/item/material/stool/chair/folding/camping,
/obj/item/material/stool/chair/folding/camping,
/obj/item/wrench,
+/obj/structure/machinery/light{
+ dir = 8
+ },
/turf/simulated/floor/wood,
/area/horizon/rnd/xenoarch/presentation)
"rer" = (
@@ -130186,10 +131563,13 @@
/turf/simulated/open,
/area/horizon/medical/hallway/upper)
"rhw" = (
-/obj/effect/decal/cleanable/dirt,
/obj/structure/bed/stool/chair/padded/black,
/obj/structure/machinery/alarm/north,
-/turf/simulated/floor/tiled,
+/obj/effect/floor_decal/corner/brown{
+ dir = 5
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"rhx" = (
/obj/structure/machinery/conveyor{
@@ -130238,6 +131618,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 8
},
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/medical/cryo)
"rhL" = (
@@ -130357,8 +131738,8 @@
/turf/simulated/floor/wood/maple,
/area/horizon/holodeck/source_cafe)
"rim" = (
-/obj/structure/lattice/catwalk/indoor,
/obj/structure/railing/mapped,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/research)
"rir" = (
@@ -130367,7 +131748,7 @@
/obj/effect/decal/cleanable/cobweb2{
icon_state = "cobweb1"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard)
"riy" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -130456,7 +131837,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/storage_hard/upper)
"riR" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -130475,19 +131856,22 @@
/turf/simulated/floor/plating,
/area/horizon/shuttle/intrepid/port_compartment)
"riV" = (
-/obj/structure/machinery/alarm/east,
+/obj/structure/machinery/light/floor{
+ dir = 1
+ },
/turf/simulated/floor/tiled/dark/full,
/area/horizon/storage/secure/tech_vault)
"rjd" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 5
},
-/turf/simulated/floor,
-/area/horizon/maintenance/deck_3/aft/starboard/far)
-"rjn" = (
-/obj/structure/railing/mapped{
+/obj/structure/platform_deco{
dir = 8
},
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/maintenance/deck_1/wing/starboard/far)
+"rjn" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/platform{
dir = 4
@@ -130574,6 +131958,9 @@
"rjI" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/railing/mapped,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/main/starboard)
"rjL" = (
@@ -130584,7 +131971,7 @@
/turf/simulated/floor/tiled,
/area/horizon/operations/machinist)
"rjP" = (
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/structure/cable/green{
icon_state = "4-8"
},
@@ -130714,11 +132101,12 @@
/turf/simulated/wall,
/area/horizon/maintenance/deck_3/aft/holodeck)
"rkL" = (
-/obj/effect/floor_decal/corner/white{
- dir = 5
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
},
-/turf/simulated/floor/tiled,
-/area/horizon/hallway/primary/deck_2/central)
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_1/operations/starboard/far)
"rkM" = (
/obj/effect/floor_decal/corner/mauve{
dir = 10
@@ -130820,7 +132208,7 @@
/obj/random/loot,
/obj/random/loot,
/obj/random/contraband,
-/turf/simulated/floor/carpet/rubber,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/aft)
"rlq" = (
/obj/effect/floor_decal/industrial/warning,
@@ -130860,10 +132248,12 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 1
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
-/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
/turf/simulated/floor/tiled/full,
/area/horizon/rnd/hallway)
"rlE" = (
@@ -130883,18 +132273,18 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/rnd/xenoarch/hallway/elevator)
"rlF" = (
-/obj/effect/floor_decal/industrial/outline/grey,
/obj/random/dirt_75,
/obj/random/dirt_75,
/obj/random/loot,
/obj/random/bomb_supply,
/obj/random/bomb_supply,
/obj/random/bomb_supply,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/structure/closet/crate/tool,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/main/port/shortcut)
"rlJ" = (
/obj/effect/floor_decal/corner_wide/paleblue/diagonal{
@@ -131107,7 +132497,7 @@
req_one_access = list(12,31);
name = "Deck 1 Starboard Primary Maintenance Conduit"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/operations/starboard)
"rmy" = (
/obj/effect/floor_decal/spline/fancy/wood/corner,
@@ -131212,7 +132602,7 @@
master_tag = "airlock_horizon_deck_2_aft_sm";
name = "airlock_horizon_deck_2_aft_sm"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/reactor/supermatter/airlock)
"rmU" = (
/obj/effect/floor_decal/industrial/warning{
@@ -131417,7 +132807,7 @@
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/port/far)
"roU" = (
@@ -131495,7 +132885,8 @@
/obj/structure/machinery/atmospherics/pipe/simple/visible{
dir = 9
},
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/auxatmos)
"rps" = (
/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
@@ -131580,10 +132971,10 @@
/turf/simulated/floor/tiled/white,
/area/horizon/medical/hallway/upper)
"rpV" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 5
+/obj/effect/floor_decal/industrial/warning/cee{
+ dir = 1
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port)
"rpY" = (
/obj/structure/cable/green{
@@ -131764,6 +133155,16 @@
},
/turf/unsimulated/floor/rubber_carpet,
/area/centcom/specops)
+"rqX" = (
+/obj/random/dirt_75,
+/obj/structure/machinery/door/firedoor{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/hatch_door/yellow{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/maintenance/deck_2/wing/starboard)
"rre" = (
/obj/effect/map_effect/window_spawner/full/reinforced/firedoor,
/turf/simulated/floor/tiled/dark/full,
@@ -131982,7 +133383,7 @@
dir = 4;
req_one_access = list(12)
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/aft/starboard)
"rsr" = (
/obj/structure/machinery/atmospherics/pipe/manifold/hidden{
@@ -132078,7 +133479,15 @@
/area/centcom/specops)
"rti" = (
/obj/structure/machinery/atmospherics/pipe/manifold4w/visible,
-/turf/simulated/floor/tiled/dark,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/random/dirt_75,
+/obj/random/dirt_75,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"rtj" = (
/obj/structure/machinery/door/firedoor/multi_tile,
@@ -132157,7 +133566,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 8
},
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/structure/reagent_dispensers/watertank,
/obj/effect/floor_decal/industrial/warning{
dir = 1
@@ -132212,9 +133621,15 @@
/turf/simulated/floor/plating,
/area/horizon/engineering/atmos/turbine)
"rtV" = (
-/obj/structure/machinery/atmospherics/pipe/simple/visible/universal,
-/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/effect/floor_decal/industrial/warning,
+/obj/random/smalltank,
+/obj/random/smalltank,
+/obj/structure/table/rack,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/auxatmos)
"ruc" = (
/obj/structure/machinery/door/window/eastleft,
@@ -132380,7 +133795,10 @@
/obj/item/material/shard{
icon_state = "medium"
},
-/turf/simulated/floor/tiled,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard)
"rvl" = (
/obj/structure/railing/mapped{
@@ -132393,7 +133811,7 @@
dir = 1
},
/mob/living/silicon/robot/shell,
-/turf/simulated/floor/tiled/dark,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/ai/upload_foyer)
"rvo" = (
/obj/structure/machinery/door/airlock/glass_command{
@@ -132404,8 +133822,12 @@
/area/shuttle/hapt)
"rvs" = (
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/obj/structure/table/rack,
+/obj/random/smalltank,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"rvy" = (
/turf/simulated/floor/shuttle/dark_red,
@@ -132521,12 +133943,12 @@
/area/horizon/medical/ward)
"rwq" = (
/obj/structure/trash_pile,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/far)
"rws" = (
/obj/random/dirt_75,
/obj/random/dirt_75,
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"rwv" = (
@@ -132539,10 +133961,10 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/turf/simulated/floor/bluegrid{
- name = "cooled mainframe floor";
- temperature = 278
+/obj/effect/floor_decal/corner/dark_blue{
+ dir = 9
},
+/turf/simulated/floor/tiled/dark,
/area/horizon/ai/chamber)
"rwJ" = (
/obj/effect/landmark/entry_point/aft{
@@ -132626,7 +134048,7 @@
/area/centcom/legion/hangar5)
"rxo" = (
/obj/effect/floor_decal/industrial/warning,
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/turf/unsimulated/floor/plating,
/area/centcom/specops)
"rxp" = (
@@ -132695,7 +134117,7 @@
/area/horizon/security/office)
"rxL" = (
/obj/random/keg,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard)
"rxO" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -132856,7 +134278,7 @@
dir = 4
},
/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"ryL" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/floor_decal/corner/grey/full{
@@ -133052,12 +134474,15 @@
/obj/structure/machinery/door/airlock/maintenance{
req_one_access = list(5,10,12)
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"rzO" = (
/obj/random/junk,
/obj/effect/floor_decal/industrial/outline/grey,
-/turf/simulated/floor,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/security/port)
"rzW" = (
/obj/effect/map_effect/window_spawner/full/reinforced/indestructible,
@@ -133110,7 +134535,7 @@
/obj/structure/machinery/access_button{
pixel_x = -28
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/port/docks)
"rAr" = (
/obj/effect/floor_decal/corner/dark_blue{
@@ -133313,6 +134738,14 @@
"rBJ" = (
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/reactor/indra/smes)
+"rBO" = (
+/obj/effect/floor_decal/industrial/warning,
+/obj/random/maintenance_junk_or_loot,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_1/wing/port/far)
"rBT" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -133320,7 +134753,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/turf/simulated/floor/plating,
@@ -133440,7 +134873,8 @@
c_tag = "Engineering - Deck 1 - Atmospherics Substation";
dir = 1
},
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/engineering/lower)
"rDi" = (
@@ -133520,8 +134954,10 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 8
},
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 5
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"rDL" = (
/obj/effect/floor_decal/spline/plain/corner,
@@ -133530,6 +134966,7 @@
"rDN" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard)
"rDS" = (
@@ -133560,9 +134997,16 @@
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"rEc" = (
-/obj/structure/foamedmetal,
-/turf/simulated/floor/plating,
-/area/horizon/exterior)
+/obj/effect/floor_decal/industrial/outline/grey,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/table/rack,
+/obj/random/tool,
+/obj/random/tech_supply,
+/obj/structure/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/maintenance/deck_1/main/port)
"rEd" = (
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 1
@@ -133668,7 +135112,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/effect/decal/cleanable/dirt,
/turf/unsimulated/floor,
/area/antag/jockey)
@@ -133765,7 +135209,7 @@
},
/obj/random/dirt_75,
/obj/random/dirt_75,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"rFo" = (
/obj/structure/shuttle/engine/propulsion/burst/right{
@@ -133797,7 +135241,7 @@
/area/horizon/operations/ship_supply_warehouse)
"rFB" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -133915,6 +135359,7 @@
/obj/structure/engineer_maintenance/electric{
dir = 8
},
+/obj/structure/machinery/light/floor,
/turf/simulated/floor/tiled/dark,
/area/horizon/command/bridge/aibunker)
"rGs" = (
@@ -134134,7 +135579,7 @@
/area/horizon/command/heads/rd)
"rHt" = (
/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard)
"rHz" = (
/obj/effect/floor_decal/spline/fancy/wood{
@@ -134420,7 +135865,8 @@
"rJP" = (
/obj/random/dirt_75,
/obj/structure/trash_pile,
-/turf/simulated/floor,
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/security/port)
"rJR" = (
/obj/structure/machinery/firealarm/south,
@@ -134733,7 +136179,7 @@
name = "airlock_horizon_deck_1_fore_1"
},
/obj/effect/map_effect/marker_helper/airlock/interior,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/hangar/starboard)
"rLY" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -134768,17 +136214,13 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/medical/reception)
"rMc" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/machinery/light/small{
- dir = 8
- },
/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/disposalpipe/segment,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/simulated/floor/plating,
-/area/horizon/engineering/storage/lower)
+/area/horizon/operations/machinist)
"rMe" = (
/obj/structure/window/shuttle/scc_space_ship,
/obj/structure/grille,
@@ -134805,13 +136247,12 @@
/turf/simulated/floor/plating,
/area/horizon/command/bridge/controlroom)
"rMf" = (
-/obj/structure/machinery/door/window{
- dir = 1
- },
/obj/structure/machinery/atmospherics/pipe/simple/hidden{
dir = 6
},
-/obj/effect/floor_decal/industrial/hatch/yellow,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
/turf/simulated/floor,
/area/horizon/hallway/primary/deck_3/port/docks)
"rMj" = (
@@ -135236,17 +136677,16 @@
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_2/central)
"rOO" = (
-/obj/effect/floor_decal/corner/dark_blue/full{
- dir = 4
- },
-/obj/structure/machinery/light{
- dir = 4
- },
-/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
+/obj/structure/machinery/atmospherics/portables_connector{
dir = 8
},
-/turf/simulated/floor/tiled/dark,
-/area/horizon/ai/upload_foyer)
+/obj/structure/machinery/portable_atmospherics/canister/air/airlock,
+/obj/effect/floor_decal/industrial/outline/red,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/maintenance/deck_2/wing/starboard/near)
"rOR" = (
/obj/structure/railing/mapped{
dir = 8
@@ -135308,7 +136748,9 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,
+/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 4
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/atmos)
"rPb" = (
@@ -135418,7 +136860,7 @@
/obj/structure/machinery/door/firedoor{
dir = 4
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/substation/medical)
"rPH" = (
/obj/structure/machinery/door/blast/odin/shuttle/tcfl/shutter{
@@ -135431,10 +136873,10 @@
/obj/effect/floor_decal/industrial/warning{
dir = 10
},
-/obj/structure/machinery/power/apc/low/north,
/obj/structure/cable/green{
icon_state = "0-2"
},
+/obj/structure/machinery/power/apc/north,
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"rPP" = (
@@ -135464,7 +136906,7 @@
icon_state = "0-4"
},
/obj/structure/machinery/power/apc/low/west,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/teleporter)
"rPW" = (
/obj/effect/decal/fake_object{
@@ -135595,7 +137037,7 @@
/obj/structure/disposalpipe/segment{
icon_state = "pipe-c"
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/structure/cable{
@@ -135688,7 +137130,7 @@
/obj/effect/landmark{
name = "Revenant"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/maintenance/deck_2/wing/starboard/nacelle)
"rRE" = (
/obj/structure/machinery/camera/network/engineering{
@@ -135699,12 +137141,12 @@
/obj/structure/cable{
icon_state = "0-4"
},
-/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/wing_port)
"rRL" = (
/obj/structure/table/wood/gamblingtable,
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard)
"rRO" = (
@@ -135807,10 +137249,10 @@
/obj/structure/cable/green{
icon_state = "0-8"
},
-/turf/simulated/floor/bluegrid{
- name = "cooled mainframe floor";
- temperature = 278
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
},
+/turf/simulated/floor,
/area/horizon/ai/chamber)
"rSo" = (
/obj/effect/floor_decal/industrial/warning{
@@ -135840,6 +137282,9 @@
"rSt" = (
/obj/effect/floor_decal/corner/pink/diagonal,
/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"rSu" = (
@@ -135935,9 +137380,13 @@
"rST" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/machinery/alarm/west,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/aft)
"rSV" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"rTf" = (
@@ -136003,9 +137452,13 @@
/turf/unsimulated/floor,
/area/antag/raider)
"rTp" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/aft)
+/obj/random/dirt_75,
+/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/wing/port/nacelle)
"rTt" = (
/obj/structure/machinery/vending/tool,
/obj/effect/floor_decal/corner/dark_green{
@@ -136313,10 +137766,13 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/storage_hard/lower)
"rUY" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
-/turf/simulated/floor/tiled,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard)
"rVa" = (
/obj/effect/floor_decal/spline/plain/corner{
@@ -136327,6 +137783,9 @@
"rVc" = (
/obj/effect/floor_decal/corner_wide/yellow/diagonal,
/obj/structure/reagent_dispensers/water_cooler,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/break_room)
"rVj" = (
@@ -136341,7 +137800,10 @@
pixel_x = -11
},
/obj/random/dirt_75,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"rVn" = (
/obj/structure/cable{
@@ -136455,7 +137917,7 @@
dir = 4
},
/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"rWr" = (
/obj/structure/railing/mapped{
dir = 8
@@ -136659,14 +138121,12 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/railing/mapped{
- dir = 1
- },
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/structure/disposalpipe/segment,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard)
"rXH" = (
@@ -136716,7 +138176,9 @@
/obj/effect/floor_decal/corner_wide/yellow{
dir = 5
},
-/obj/structure/machinery/alarm/north,
+/obj/structure/machinery/light{
+ dir = 1
+ },
/turf/simulated/floor/tiled,
/area/horizon/engineering/hallway/aft)
"rXX" = (
@@ -136742,11 +138204,12 @@
/turf/simulated/floor/wood,
/area/horizon/service/mess_hall)
"rYe" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/effect/decal/cleanable/dirt,
/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/starboard)
"rYf" = (
@@ -136828,6 +138291,9 @@
input_level = 50000;
output_level = 45000
},
+/obj/structure/machinery/light/small{
+ dir = 1
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/central_ring)
"rYP" = (
@@ -136846,7 +138312,13 @@
/obj/structure/machinery/atmospherics/pipe/simple/visible{
dir = 4
},
-/turf/simulated/floor/tiled/dark,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/obj/structure/sign/air_station{
+ pixel_y = 32
+ },
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"rYW" = (
/turf/simulated/wall/shuttle/unique/tcfl{
@@ -136883,7 +138355,7 @@
/obj/item/modular_computer/console/preset/engineering{
dir = 8
},
-/obj/structure/machinery/light{
+/obj/structure/machinery/light/small{
dir = 4
},
/turf/simulated/floor/tiled/dark/full,
@@ -136948,7 +138420,8 @@
master_tag = "airlock_horizon_dock_deck_3_port_5";
name = "airlock_horizon_dock_deck_3_port_5"
},
-/turf/simulated/floor/plating,
+/obj/structure/lattice/catwalk/indoor/grate,
+/turf/simulated/floor,
/area/horizon/hallway/primary/deck_3/port/docks)
"rZw" = (
/obj/structure/cable/green{
@@ -137074,11 +138547,14 @@
/area/horizon/repoffice/consular_one)
"sam" = (
/obj/structure/railing/mapped,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard)
"san" = (
/obj/random/junk,
-/turf/simulated/floor/tiled,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard)
"saD" = (
/obj/effect/floor_decal/industrial/warning{
@@ -137089,7 +138565,7 @@
name = "\improper CAUTION: HEAVY MACHINERY IN USE sign";
pixel_y = 32
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/interstitial)
"saG" = (
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
@@ -137122,6 +138598,15 @@
/obj/structure/table/rack,
/turf/unsimulated/floor,
/area/centcom/legion/hangar5)
+"sbd" = (
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/aux{
+ dir = 8
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/redgrid,
+/area/horizon/command/bridge/selfdestruct)
"sbk" = (
/obj/structure/machinery/alarm/tcom/north,
/obj/effect/floor_decal/spline/plain/black{
@@ -137165,7 +138650,15 @@
dir = 5
},
/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/obj/random/smalltank,
+/obj/structure/table/rack,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"sbD" = (
/obj/effect/floor_decal/industrial/outline/yellow,
@@ -137409,7 +138902,7 @@
},
/obj/structure/machinery/portable_atmospherics/canister/air/airlock,
/obj/effect/floor_decal/industrial/outline/red,
-/turf/simulated/floor/tiled/full,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"sdr" = (
/obj/structure/machinery/door/firedoor{
@@ -137630,8 +139123,9 @@
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
-/obj/structure/machinery/light/small/emergency,
-/turf/simulated/floor/plating,
+/obj/structure/machinery/light/small,
+/obj/random/dirt_75,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/far)
"sfe" = (
/obj/structure/cable/green{
@@ -137910,7 +139404,7 @@
/turf/simulated/floor/plating,
/area/horizon/hallway/primary/deck_2/starboard)
"sgB" = (
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/effect/floor_decal/industrial/warning/corner{
dir = 4
},
@@ -137936,6 +139430,7 @@
/area/shuttle/skipjack)
"sgF" = (
/obj/item/stack/rods,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/operations/starboard)
"sgH" = (
@@ -137999,6 +139494,11 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled,
/area/horizon/storage/primary)
+"sha" = (
+/obj/effect/floor_decal/industrial/warning,
+/obj/item/material/shard,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/maintenance/deck_1/main/port)
"shc" = (
/obj/structure/cable/green{
icon_state = "1-2"
@@ -138033,7 +139533,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/structure/disposalpipe/segment,
@@ -138143,6 +139643,7 @@
pixel_x = 20;
pixel_y = 6
},
+/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor/plating,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"shJ" = (
@@ -138348,6 +139849,7 @@
name = "airlock_horizon_deck_3_aft_1";
frequency = 1001
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"siA" = (
@@ -138381,8 +139883,6 @@
dir = 8
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/random/dirt_75,
-/obj/random/dirt_75,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"siM" = (
@@ -138503,12 +140003,11 @@
/turf/simulated/floor/tiled/white,
/area/horizon/rnd/telesci)
"sjz" = (
-/obj/effect/decal/cleanable/dirt,
/obj/effect/floor_decal/industrial/warning{
- dir = 8
+ dir = 4
},
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_1/wing/starboard/far)
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/wing/port/far)
"sjA" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -138827,7 +140326,7 @@
/area/horizon/crew/vacantoffice)
"slR" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/turf/simulated/floor/plating,
@@ -139043,9 +140542,8 @@
/obj/structure/window/reinforced,
/obj/effect/floor_decal/industrial/outline/emergency_closet,
/obj/structure/closet/emcloset,
-/obj/structure/machinery/light/spot{
- dir = 4;
- must_start_working = 1
+/obj/structure/machinery/light{
+ dir = 4
},
/turf/simulated/floor/tiled/dark,
/area/horizon/holodeck_control)
@@ -139138,7 +140636,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 8
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard)
"snH" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -139275,7 +140773,7 @@
dir = 1;
req_one_access = list(5,12)
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/aft/holodeck)
"spd" = (
/obj/effect/floor_decal/corner/purple{
@@ -139298,6 +140796,7 @@
icon_state = "1-8"
},
/obj/structure/machinery/alarm/east,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/hangar)
"sph" = (
@@ -139342,7 +140841,7 @@
pixel_x = 28;
pixel_y = 12
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/port/docks)
"spE" = (
/turf/simulated/wall,
@@ -139422,8 +140921,11 @@
/turf/simulated/floor/plating,
/area/horizon/medical/reception)
"sqM" = (
-/obj/effect/floor_decal/industrial/outline/grey,
-/turf/simulated/floor/plating,
+/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/main/port/shortcut)
"sqP" = (
/obj/structure/table/steel,
@@ -139432,6 +140934,13 @@
},
/turf/simulated/floor/shuttle/black,
/area/shuttle/hapt)
+"sqS" = (
+/obj/effect/floor_decal/corner/brown{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_1/wing/starboard/far)
"sqT" = (
/obj/effect/floor_decal/corner/teal{
dir = 10
@@ -139581,7 +141090,7 @@
dir = 4
},
/obj/structure/trash_pile,
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/cargo_compartment)
"ssd" = (
@@ -139775,7 +141284,8 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
},
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"ssL" = (
/obj/effect/floor_decal/corner/dark_blue/full{
@@ -139804,8 +141314,9 @@
},
/area/centcom/ferry)
"std" = (
-/turf/simulated/floor,
-/area/horizon/maintenance/deck_2/wing/port/far)
+/obj/random/dirt_75,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/maintenance/deck_1/main/port/shortcut)
"stp" = (
/obj/structure/table/standard{
no_cargo = 1
@@ -140090,7 +141601,7 @@
pixel_x = 32;
req_one_access = list(12,31,73,76,77,78)
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/shuttle/quark/cargo_hold)
"svw" = (
/obj/structure/cable/green{
@@ -140129,7 +141640,7 @@
/area/horizon/security/office)
"svM" = (
/obj/effect/floor_decal/industrial/outline/grey,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/random/canister/restricted,
@@ -140236,9 +141747,6 @@
/turf/unsimulated/floor/plating,
/area/centcom/legion)
"swm" = (
-/obj/structure/machinery/atmospherics/unary/vent_pump/on{
- dir = 1
- },
/obj/structure/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{
dir = 8;
frequency = 1380;
@@ -140277,7 +141785,7 @@
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/central)
"sws" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/effect/map_effect/marker/airlock/docking{
@@ -140285,14 +141793,15 @@
master_tag = "airlock_horizon_dock_deck_3_port_4";
name = "airlock_horizon_dock_deck_3_port_4"
},
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/corner/dark_blue/diagonal,
+/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/port/docks)
"swt" = (
/obj/structure/railing/mapped,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
-/obj/structure/lattice/catwalk/indoor,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/research)
"swu" = (
@@ -140367,6 +141876,7 @@
master_tag = "airlock_horizon_deck_2_port_1";
name = "airlock_horizon_deck_2_port_1"
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor,
/area/horizon/maintenance/deck_2/wing/port/far)
"swT" = (
@@ -140390,6 +141900,14 @@
/obj/structure/disposalpipe/segment,
/turf/simulated/floor/wood,
/area/horizon/command/heads/xo)
+"swW" = (
+/obj/random/maintenance_junk_or_loot,
+/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/wing/starboard)
"swX" = (
/obj/structure/railing/mapped,
/obj/structure/platform/ledge{
@@ -140466,13 +141984,10 @@
},
/area/centcom/control)
"sxq" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/railing/mapped{
+/obj/effect/floor_decal/industrial/warning{
dir = 1
},
-/turf/simulated/floor/tiled/ramp/bottom{
- dir = 4
- },
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard)
"sxz" = (
/obj/structure/table/standard,
@@ -140529,6 +142044,13 @@
/obj/effect/floor_decal/industrial/warning/full,
/turf/unsimulated/floor,
/area/centcom/control)
+"sxQ" = (
+/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/wing/port/far)
"sxS" = (
/turf/simulated/floor/wood,
/area/horizon/command/heads/rd)
@@ -140655,13 +142177,14 @@
/obj/random/dirt_75,
/obj/random/dirt_75,
/obj/random/junk,
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"syv" = (
/obj/effect/floor_decal/industrial/warning/cee{
dir = 4
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/cafe)
"syK" = (
/obj/effect/landmark/entry_point/starboard{
@@ -140746,7 +142269,7 @@
/obj/structure/machinery/atmospherics/unary/vent_pump/on{
dir = 8
},
-/turf/simulated/floor/tiled/dark/cooled,
+/turf/simulated/floor/tiled/dark,
/area/horizon/ai/upload)
"syZ" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -140876,7 +142399,7 @@
dir = 4;
req_one_access = list(5,12)
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"szR" = (
/turf/simulated/wall/r_wall,
@@ -140950,6 +142473,9 @@
pixel_x = -6
},
/obj/random/contraband,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"sAx" = (
@@ -141002,7 +142528,7 @@
/obj/structure/window/reinforced{
dir = 4
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/random/dirt_75,
@@ -141013,7 +142539,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 9
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/random/maintenance_junk_or_loot,
@@ -141269,16 +142795,16 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/shuttle/canary)
"sBT" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 10
- },
-/obj/structure/railing/mapped{
- dir = 8
- },
/obj/effect/decal/cleanable/cobweb2{
icon_state = "cobweb1"
},
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
+/obj/structure/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port)
"sBV" = (
/obj/structure/table/wood/gamblingtable,
@@ -141350,7 +142876,10 @@
/obj/structure/reagent_dispensers/watertank,
/obj/random/dirt_75,
/obj/random/dirt_75,
-/turf/simulated/floor,
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/security/port)
"sCr" = (
/obj/effect/floor_decal/spline/fancy/wood{
@@ -141488,8 +143017,11 @@
/area/horizon/rnd/conference)
"sDi" = (
/obj/random/dirt_75,
-/obj/structure/machinery/light/small/emergency,
-/turf/simulated/floor/plating,
+/obj/structure/machinery/light/small,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard)
"sDk" = (
/obj/structure/machinery/atmospherics/pipe/manifold/hidden,
@@ -141498,7 +143030,7 @@
master_tag = "airlock_horizon_deck_3_fore_starboard_1";
name = "airlock_horizon_deck_3_fore_starboard_1"
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/crewlounge)
"sDo" = (
/obj/structure/disposalpipe/segment,
@@ -141533,6 +143065,12 @@
/obj/structure/machinery/firealarm/south,
/turf/simulated/floor/tiled/dark,
/area/horizon/rnd/xenoarch/hallway/elevator)
+"sDx" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/wing/port)
"sDz" = (
/obj/structure/machinery/door/airlock/external{
dir = 4;
@@ -141596,7 +143134,7 @@
/obj/random/dirt_75,
/obj/random/dirt_75,
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/tiled/dark,
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/auxatmos)
"sDM" = (
/obj/structure/machinery/door/firedoor,
@@ -141635,6 +143173,9 @@
},
/obj/random/loot,
/obj/random/contraband,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/hangar/port)
"sDU" = (
@@ -141754,6 +143295,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/random/dirt_75,
/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/main/starboard)
"sES" = (
@@ -141994,13 +143536,11 @@
/turf/simulated/floor/plating,
/area/horizon/security/evidence_storage)
"sGD" = (
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/random/dirt_75,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/near)
"sGF" = (
/obj/effect/floor_decal/corner/lime{
@@ -142148,10 +143688,9 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/structure/railing/mapped,
/obj/structure/closet,
/obj/random/loot,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard/far)
"sHz" = (
/turf/simulated/floor/tiled/dark,
@@ -142253,6 +143792,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/operations/starboard)
"sIl" = (
@@ -142310,7 +143850,7 @@
/obj/random/junk,
/obj/random/dirt_75,
/obj/random/dirt_75,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/port)
"sIQ" = (
/obj/effect/floor_decal/industrial/warning{
@@ -142360,7 +143900,7 @@
welded = 1
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/central_ring)
"sJm" = (
/obj/structure/cable/green{
@@ -142466,7 +144006,10 @@
/obj/structure/machinery/light/small,
/obj/random/dirt_75,
/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/auxatmos)
"sJY" = (
/obj/structure/bed/stool/padded,
@@ -142626,9 +144169,14 @@
},
/area/centcom/legion/hangar5)
"sLa" = (
-/obj/effect/decal/cleanable/dirt,
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/tiled,
+/obj/effect/floor_decal/corner/brown{
+ dir = 6
+ },
+/obj/structure/machinery/light{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"sLf" = (
/obj/structure/table/reinforced/wood,
@@ -142718,6 +144266,12 @@
},
/turf/unsimulated/floor/blue_circuit,
/area/centcom/control)
+"sLF" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/horizon/exterior/no_shields)
"sLG" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -142766,6 +144320,7 @@
/obj/effect/floor_decal/corner/dark_blue{
dir = 4
},
+/obj/structure/machinery/light/floor,
/turf/simulated/floor/tiled/dark,
/area/horizon/command/bridge/controlroom)
"sLT" = (
@@ -142824,7 +144379,10 @@
"sMp" = (
/obj/random/maintenance_junk_or_loot,
/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"sMw" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -143432,6 +144990,9 @@
dir = 4
},
/obj/structure/machinery/disposal/small/east,
+/obj/structure/machinery/light/floor{
+ dir = 8
+ },
/turf/simulated/floor/tiled/full,
/area/horizon/command/bridge/upperdeck)
"sQG" = (
@@ -143549,7 +145110,7 @@
req_access = list(63)
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/turf/simulated/floor/tiled/full,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/security/firing_range)
"sRv" = (
/obj/structure/machinery/vending/zora{
@@ -143786,7 +145347,7 @@
/obj/structure/machinery/door/airlock/maintenance_hatch{
dir = 1
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"sSD" = (
/obj/structure/machinery/door/blast/shutters{
@@ -143818,7 +145379,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/port)
"sSL" = (
@@ -143853,7 +145414,7 @@
/area/horizon/engineering/atmos/air)
"sTe" = (
/obj/effect/decal/cleanable/cobweb,
-/obj/random/dirt_75,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"sTh" = (
@@ -144191,14 +145752,18 @@
dir = 1
},
/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/auxatmos)
"sWx" = (
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"sWC" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -144491,6 +146056,14 @@
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/near)
+"sYd" = (
+/obj/random/dirt_75,
+/obj/random/dirt_75,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/wing/port/nacelle)
"sYf" = (
/obj/effect/decal/fake_object/light_source/invisible,
/turf/unsimulated/floor/rubber_carpet,
@@ -144534,7 +146107,7 @@
/turf/simulated/floor/tiled/white,
/area/horizon/service/kitchen)
"sYx" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/effect/map_effect/marker/airlock{
@@ -144542,7 +146115,7 @@
master_tag = "airlock_horizon_deck_2_port_1";
name = "airlock_horizon_deck_2_port_1"
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/port/far)
"sYE" = (
/obj/structure/shuttle_part/ert{
@@ -144560,7 +146133,7 @@
dir = 8
},
/obj/structure/trash_pile,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard/amidships)
"sYJ" = (
/obj/effect/floor_decal/corner/green{
@@ -144647,7 +146220,7 @@
master_tag = "airlock_horizon_dock_deck_3_starboard_2";
name = "airlock_horizon_dock_deck_3_starboard_2"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"sZm" = (
/obj/structure/machinery/embedded_controller/radio/simple_docking_controller{
@@ -144681,7 +146254,6 @@
/area/horizon/maintenance/deck_2/wing/starboard/nacelle)
"sZy" = (
/obj/effect/decal/cleanable/spiderling_remains,
-/obj/structure/machinery/light/small/emergency,
/turf/simulated/floor/carpet/rubber,
/area/horizon/maintenance/deck_1/workshop)
"sZz" = (
@@ -144839,7 +146411,7 @@
/obj/structure/machinery/atmospherics/unary/vent_pump/on{
dir = 4
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/drone_fabrication)
"taQ" = (
/obj/effect/floor_decal/corner/dark_green{
@@ -144879,7 +146451,7 @@
/area/horizon/maintenance/deck_1/wing/starboard/far)
"tbc" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/turf/simulated/floor/plating,
@@ -144901,6 +146473,13 @@
},
/turf/simulated/floor/tiled/dark/full,
/area/horizon/rnd/xenobiology/xenoflora)
+"tbF" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/reinforced/airless,
+/area/horizon/exterior/no_shields)
"tbK" = (
/obj/structure/table/stone/marble,
/obj/structure/machinery/chemical_dispenser/coffeemaster/full,
@@ -144912,6 +146491,18 @@
},
/turf/simulated/open,
/area/horizon/maintenance/deck_2/main/starboard)
+"tbR" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_1/main/starboard)
"tbT" = (
/obj/structure/cable/green{
icon_state = "1-2"
@@ -144970,7 +146561,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 10
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/holodeck)
"tcr" = (
/obj/structure/tank_wall/oxygen{
@@ -144992,12 +146583,10 @@
/turf/simulated/floor/tiled/gunmetal/full,
/area/horizon/operations/ship_supply_warehouse)
"tcA" = (
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
-/area/horizon/maintenance/deck_2/main/starboard)
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/wing/port)
"tcB" = (
/obj/effect/floor_decal/corner_wide/lime/diagonal,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -145111,14 +146700,14 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
},
-/obj/effect/floor_decal/industrial/warning{
- dir = 4
- },
/obj/structure/machinery/power/apc/west,
/obj/structure/cable/green{
icon_state = "0-2"
},
/obj/structure/railing/mapped,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/main/starboard)
"tdm" = (
@@ -145352,6 +146941,9 @@
/area/horizon/engineering/storage/tech)
"teO" = (
/obj/effect/decal/cleanable/dirt,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 6
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/main/starboard)
"teR" = (
@@ -145411,7 +147003,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"tfs" = (
/obj/effect/floor_decal/industrial/hatch_door/red,
@@ -145471,7 +147063,7 @@
dir = 4
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"tfC" = (
/turf/simulated/floor/wood,
@@ -145528,7 +147120,7 @@
name = "Deck 2 Starboard Wingframe";
req_one_access = list(12,31,67)
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard)
"tfX" = (
/obj/structure/machinery/light/floor{
@@ -145555,12 +147147,23 @@
/obj/structure/closet/crate,
/obj/random/contraband,
/obj/random/loot,
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/aft)
"tgj" = (
/obj/structure/machinery/suit_cycler/freelancer,
/turf/unsimulated/floor,
/area/centcom/distress_prep)
+"tgl" = (
+/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 6
+ },
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/wing/starboard)
"tgm" = (
/obj/structure/railing/mapped{
dir = 8
@@ -145926,11 +147529,10 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/auxatmos)
"tim" = (
-/obj/random/dirt_75,
-/obj/random/dirt_75,
/obj/item/stack/material/steel{
amount = 10
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard)
"tis" = (
@@ -146148,8 +147750,10 @@
"tkj" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 5
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"tkk" = (
/turf/simulated/floor/shuttle/dark_blue,
@@ -146497,7 +148101,7 @@
/obj/item/hullbeacon/red,
/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"tmm" = (
/obj/structure/machinery/atmospherics/unary/vent_pump/aux{
dir = 4
@@ -146625,7 +148229,7 @@
},
/obj/effect/map_effect/marker_helper/airlock/interior,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/aux,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/shuttle/quark/cargo_hold)
"tna" = (
/obj/structure/machinery/atmospherics/pipe/simple/visible/purple{
@@ -146634,9 +148238,6 @@
/turf/space,
/area/horizon/exterior)
"tne" = (
-/obj/structure/machinery/light/small/emergency{
- dir = 8
- },
/obj/structure/cable{
icon_state = "0-8"
},
@@ -146646,6 +148247,7 @@
/obj/structure/cable{
icon_state = "1-8"
},
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/xenoarchaeology)
"tng" = (
@@ -146666,7 +148268,7 @@
/obj/structure/machinery/computer/drone_control{
dir = 4
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/drone_fabrication)
"tnj" = (
/obj/structure/disposalpipe/segment{
@@ -146696,7 +148298,8 @@
"tnn" = (
/obj/structure/machinery/atmospherics/pipe/manifold4w/visible,
/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/auxatmos)
"tno" = (
/obj/structure/machinery/light{
@@ -146775,6 +148378,7 @@
frequency = 1109;
req_one_access = list(19)
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor,
/area/horizon/ai/upload_foyer)
"tnL" = (
@@ -146800,6 +148404,9 @@
/obj/effect/floor_decal/industrial/warning{
dir = 9
},
+/obj/structure/machinery/light{
+ dir = 8
+ },
/turf/simulated/floor/reinforced,
/area/horizon/weapons/grauwolf)
"tnV" = (
@@ -146863,13 +148470,14 @@
master_tag = "airlock_horizon_deck_3_fore_starboard_1";
name = "airlock_horizon_deck_3_fore_starboard_1"
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/structure/machinery/embedded_controller/radio/airlock/airlock_controller{
dir = 4;
pixel_x = -20
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/crewlounge)
"tos" = (
@@ -146898,7 +148506,7 @@
dir = 4
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/operations/starboard)
"toJ" = (
/obj/structure/machinery/atmospherics/unary/vent_pump/on,
@@ -147018,7 +148626,7 @@
dir = 4
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"tpX" = (
/obj/structure/disposalpipe/segment,
@@ -147250,7 +148858,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 4
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard/far)
"tqZ" = (
/obj/structure/sign/flag/scc,
@@ -147287,14 +148895,14 @@
/area/horizon/rnd/xenoarch/storage)
"trh" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/port/far)
"trj" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/turf/simulated/floor/tiled/dark,
@@ -147429,10 +149037,11 @@
/obj/structure/machinery/atmospherics/pipe/simple/visible/purple{
dir = 9
},
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/atmos_crosser)
"trS" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/structure/machinery/atmospherics/unary/vent_pump/high_volume{
@@ -147455,6 +149064,7 @@
id_tag = "merchant_shuttle_dock_sensor";
pixel_x = -27
},
+/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor/plating,
/area/horizon/security/checkpoint2)
"trU" = (
@@ -147672,7 +149282,10 @@
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard)
"ttB" = (
/obj/effect/overlay/palmtree_r,
@@ -147901,15 +149514,10 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/starboard)
"tvn" = (
-/obj/structure/railing/mapped{
- pixel_y = -5
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/item/material/shard{
- icon_state = "small"
- },
+/obj/random/maintenance_junk_or_loot,
+/obj/structure/railing/mapped,
/turf/simulated/floor/tiled/dark,
-/area/horizon/maintenance/deck_2/main/starboard)
+/area/horizon/maintenance/deck_1/operations/starboard)
"tvp" = (
/obj/structure/shuttle_part/scc/scout{
icon_state = "7,9"
@@ -148092,7 +149700,7 @@
/obj/item/material/folding_table,
/obj/item/material/stool/chair/folding,
/obj/item/material/stool/chair/folding,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/drone_fabrication)
"twp" = (
/obj/structure/machinery/alarm/east,
@@ -148258,7 +149866,8 @@
"txy" = (
/obj/structure/machinery/light/small,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"txz" = (
/obj/effect/floor_decal/corner/green/full{
@@ -148276,7 +149885,11 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 5
},
-/turf/simulated/floor/tiled/dark/full,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/obj/structure/machinery/light/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/storage/secure/tech_vault)
"txD" = (
/obj/structure/disposalpipe/segment,
@@ -148843,6 +150456,12 @@
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/elevator)
+"tAV" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/horizon/exterior/no_shields)
"tAX" = (
/obj/structure/machinery/light{
dir = 1
@@ -148882,9 +150501,6 @@
pixel_x = 6;
pixel_y = -6
},
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
- },
/obj/item/pipe{
pixel_x = 10;
pixel_y = -2
@@ -148901,7 +150517,7 @@
pixel_x = -5;
pixel_y = -3
},
-/turf/simulated/floor/tiled/dark/full,
+/turf/simulated/floor/carpet/rubber,
/area/horizon/engineering/atmos/storage_maintenance)
"tBz" = (
/obj/structure/machinery/alarm/east,
@@ -149114,7 +150730,11 @@
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/tiled/dark,
+/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/item/material/shard{
+ icon_state = "small"
+ },
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/main/starboard)
"tDj" = (
/obj/structure/machinery/computer/shuttle_control/lift{
@@ -149140,7 +150760,7 @@
dir = 1
},
/obj/effect/floor_decal/industrial/warning,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/service/starboard)
"tDr" = (
/obj/structure/cable/green{
@@ -149228,6 +150848,15 @@
},
/turf/unsimulated/floor,
/area/centcom/spawning)
+"tDV" = (
+/obj/structure/cable/green{
+ icon_state = "1-2"
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/wing/starboard/near)
"tDZ" = (
/obj/effect/floor_decal/corner/dark_blue{
dir = 6
@@ -149256,10 +150885,10 @@
/turf/simulated/floor/tiled,
/area/horizon/crew/resdeck/living_quarters_lift)
"tEj" = (
-/obj/structure/machinery/atmospherics/unary/vent_pump/on{
- dir = 4
+/obj/effect/floor_decal/corner_wide/blue{
+ dir = 5
},
-/turf/simulated/floor/tiled/dark/full,
+/turf/simulated/floor/tiled/dark,
/area/horizon/storage/secure/tech_vault)
"tEl" = (
/obj/effect/floor_decal/industrial/warning,
@@ -149270,9 +150899,7 @@
/turf/simulated/floor/tiled/dark/full/airless,
/area/horizon/command/bridge/controlroom)
"tEm" = (
-/obj/structure/machinery/anti_bluespace,
-/obj/effect/floor_decal/industrial/warning/full,
-/turf/simulated/floor/reinforced,
+/turf/simulated/floor/redgrid,
/area/horizon/command/bridge/selfdestruct)
"tEq" = (
/turf/simulated/floor/exoplanet/water/shallow{
@@ -149354,7 +150981,7 @@
dir = 4;
name = "Deck 2 Starboard Wingframe"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard)
"tEP" = (
/obj/structure/plasticflaps/mining,
@@ -149371,9 +150998,14 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/rnd/lab)
"tEX" = (
-/obj/effect/floor_decal/industrial/warning,
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 6
+ },
+/obj/structure/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port)
"tFe" = (
/obj/effect/floor_decal/corner/red/diagonal,
@@ -149555,7 +151187,7 @@
dir = 4;
req_one_access = list(12,19)
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/aft/port)
"tFV" = (
/obj/effect/floor_decal/corner/paleblue/full{
@@ -149797,7 +151429,7 @@
/turf/simulated/floor/reinforced/airless,
/area/horizon/exterior)
"tHh" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/structure/machinery/atmospherics/unary/vent_pump/high_volume{
@@ -149818,6 +151450,7 @@
master_tag = "airlock_horizon_deck_2_aft_indra";
name = "airlock_horizon_deck_2_aft_indra"
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/engineering/aft_airlock)
"tHj" = (
@@ -149854,10 +151487,16 @@
/area/horizon/holodeck/source_desert)
"tHq" = (
/obj/effect/floor_decal/corner/dark_blue/diagonal,
+/obj/structure/machinery/atmospherics/unary/vent_pump/on{
+ dir = 4
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/ai/upload_foyer)
"tHu" = (
/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/cryo)
"tHw" = (
@@ -150157,7 +151796,7 @@
dir = 4;
req_one_access = list(12,19)
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/aft/port/far)
"tKa" = (
/obj/structure/machinery/vending/wallmed1{
@@ -150176,7 +151815,7 @@
"tKb" = (
/obj/effect/floor_decal/industrial/outline/grey,
/obj/structure/closet/secure_closet/refrigerator/cafe,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/cafe)
"tKc" = (
/obj/effect/decal/cleanable/dirt,
@@ -150226,24 +151865,15 @@
/turf/simulated/open,
/area/horizon/medical/gen_treatment)
"tKq" = (
-/obj/structure/railing/mapped{
- dir = 4
- },
-/obj/structure/railing/mapped{
- dir = 1
- },
-/obj/effect/floor_decal/industrial/warning{
- dir = 5
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/obj/structure/platform,
+/obj/structure/machinery/portable_atmospherics/canister/air/warm,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"tKs" = (
/obj/effect/floor_decal/industrial/warning{
dir = 8
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port)
"tKu" = (
/obj/structure/cable/green{
@@ -150277,7 +151907,10 @@
dir = 4
},
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"tKA" = (
/obj/effect/decal/fake_object{
@@ -150401,6 +152034,7 @@
master_tag = "airlock_horizon_deck_2_starboard_aft";
name = "airlock_horizon_deck_2_starboard_aft"
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"tLr" = (
@@ -150435,7 +152069,7 @@
pixel_y = -28
},
/obj/effect/map_effect/marker_helper/airlock/exterior,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/aft_airlock)
"tLB" = (
/obj/structure/machinery/light{
@@ -150500,7 +152134,7 @@
/obj/structure/machinery/door/airlock/maintenance_hatch{
dir = 4
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/security/port)
"tMs" = (
/obj/structure/closet/secure_closet/medical3,
@@ -150666,6 +152300,9 @@
/obj/structure/window/shuttle/scc_space_ship,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/atmos_crosser)
+"tOa" = (
+/turf/template_noop,
+/area/horizon/exterior/no_shields)
"tOf" = (
/obj/structure/bed/stool/chair/office/dark,
/turf/simulated/floor/carpet/rubber,
@@ -150784,7 +152421,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 6
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/security/port)
"tOT" = (
/obj/structure/flora/ausbushes/sparsegrass,
@@ -150796,12 +152433,11 @@
/turf/simulated/floor/grass/no_edge,
/area/horizon/hallway/primary/deck_2/fore)
"tOX" = (
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/random/dirt_75,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"tOZ" = (
/obj/structure/machinery/atmospherics/binary/pump{
@@ -150983,7 +152619,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/random/dirt_75,
@@ -151071,6 +152707,7 @@
/obj/structure/machinery/light/small/red{
dir = 4
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/shuttle/quark/cargo_hold)
"tRk" = (
@@ -151143,7 +152780,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/aux,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/fuel,
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/turf/simulated/floor/plating,
@@ -151315,7 +152952,7 @@
/obj/effect/decal/cleanable/cobweb2,
/obj/random/smokable,
/obj/random/smokable,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard/far)
"tTb" = (
/obj/structure/machinery/atmospherics/pipe/simple/heat_exchanging{
@@ -151357,6 +152994,15 @@
},
/turf/simulated/floor/tiled/dark,
/area/horizon/operations/commissary)
+"tTo" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/obj/structure/railing/mapped{
+ dir = 4
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/horizon/exterior/no_shields)
"tTp" = (
/obj/structure/machinery/atmospherics/unary/vent_pump/on,
/obj/effect/floor_decal/corner/dark_green{
@@ -151395,6 +153041,15 @@
},
/turf/simulated/floor/tiled/dark/full,
/area/horizon/rnd/xenoarch/atrium)
+"tTJ" = (
+/obj/effect/floor_decal/corner/brown{
+ dir = 5
+ },
+/obj/structure/machinery/light/floor{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/horizon/operations/office)
"tTQ" = (
/obj/structure/machinery/button/remote/blast_door{
dir = 1;
@@ -151478,6 +153133,9 @@
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/obj/random/maintenance_junk_or_loot,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"tUJ" = (
@@ -151522,8 +153180,7 @@
dir = 1
},
/obj/effect/floor_decal/industrial/warning,
-/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/service/starboard)
"tUS" = (
/obj/effect/floor_decal/industrial/warning,
@@ -151531,7 +153188,7 @@
/obj/random/dirt_75,
/obj/random/dirt_75,
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/port)
"tUW" = (
/obj/structure/machinery/telecomms/processor/preset_one,
@@ -151587,7 +153244,7 @@
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/structure/disposalpipe/segment,
@@ -151607,6 +153264,9 @@
dir = 1;
pixel_y = 22
},
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/auxatmos)
"tVm" = (
@@ -151679,6 +153339,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
+/obj/structure/railing/mapped,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/far)
"tVV" = (
@@ -151799,7 +153460,7 @@
dir = 4
},
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port)
"tWV" = (
/obj/structure/cable/green{
@@ -151820,7 +153481,7 @@
"tWX" = (
/obj/random/maintenance_junk_or_loot,
/obj/random/dirt_75,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/structure/table/rack,
@@ -151844,7 +153505,10 @@
/obj/random/dirt_75,
/obj/random/dirt_75,
/obj/random/dirt_75,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/research)
"tXd" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -151869,7 +153533,7 @@
name = "Research Maintenance";
req_one_access = list(12)
},
-/turf/simulated/floor/tiled/dark,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/port/far)
"tXi" = (
/obj/effect/floor_decal/industrial/warning{
@@ -152013,12 +153677,13 @@
},
/area/centcom/control)
"tYc" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/structure/cable{
icon_state = "2-4"
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"tYe" = (
@@ -152451,7 +154116,7 @@
dir = 4;
req_one_access = list(12)
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/main/port/shortcut)
"ubD" = (
/obj/effect/floor_decal/industrial/warning{
@@ -152517,10 +154182,13 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"ubX" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/aft)
"ubZ" = (
@@ -152940,11 +154608,11 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/central_ring)
"ufx" = (
-/obj/effect/floor_decal/industrial/outline/grey,
-/obj/structure/railing/mapped,
-/obj/random/canister/restricted,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/wing/starboard/near)
+/area/horizon/maintenance/deck_2/wing/starboard)
"ufG" = (
/obj/structure/bed/stool/chair/padded/black{
dir = 4
@@ -153089,7 +154757,10 @@
/area/horizon/security/washroom)
"ugu" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard)
"ugF" = (
/obj/structure/grille,
@@ -153245,7 +154916,7 @@
/obj/structure/railing/mapped{
dir = 1
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard/far)
"uhu" = (
/obj/effect/floor_decal/corner/red{
@@ -153387,7 +155058,7 @@
/area/antag/mercenary)
"uiw" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/turf/simulated/floor,
@@ -153475,7 +155146,7 @@
dir = 1
},
/obj/random/dirt_75,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/far)
"uiN" = (
/obj/structure/bed/stool/chair/sofa/right/brown,
@@ -153667,7 +155338,7 @@
},
/obj/structure/table/rack,
/obj/random/dirt_75,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/aft/port)
"ujU" = (
/obj/effect/floor_decal/industrial/warning{
@@ -153761,7 +155432,7 @@
"ukq" = (
/obj/random/junk,
/obj/effect/floor_decal/industrial/warning{
- dir = 1
+ dir = 9
},
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/starboard)
@@ -153770,7 +155441,7 @@
dir = 6
},
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port)
"ukx" = (
/obj/structure/platform_stairs/full{
@@ -153794,7 +155465,7 @@
master_tag = "airlock_horizon_dock_deck_3_starboard_2";
name = "airlock_horizon_dock_deck_3_starboard_2"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"ukI" = (
/obj/structure/machinery/portable_atmospherics/hydroponics,
@@ -153871,6 +155542,9 @@
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
+/obj/structure/machinery/light/floor{
+ dir = 1
+ },
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/reactor/indra/mainchamber)
"ulh" = (
@@ -153977,6 +155651,7 @@
icon_state = "0-4"
},
/obj/structure/machinery/power/apc/low/west,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/research)
"umh" = (
@@ -154083,6 +155758,12 @@
icon_state = "white"
},
/area/tdome/tdomeadmin)
+"umG" = (
+/obj/effect/floor_decal/corner/white{
+ dir = 5
+ },
+/turf/simulated/floor/tiled,
+/area/horizon/hallway/primary/deck_2/central)
"umM" = (
/obj/effect/floor_decal/spline/fancy/wood/corner{
dir = 1
@@ -154156,7 +155837,7 @@
dir = 4;
req_access = list(12)
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/auxatmos)
"uns" = (
/obj/structure/shuttle_part/scc_space_ship{
@@ -154326,7 +156007,7 @@
req_one_access = list(24,11,67,73);
dir = 4
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/main/starboard)
"uoP" = (
/obj/effect/floor_decal/corner/beige/diagonal,
@@ -154413,14 +156094,12 @@
/area/horizon/command/bridge/cciaroom)
"upp" = (
/obj/effect/decal/cleanable/dirt,
-/obj/effect/floor_decal/industrial/warning/corner{
- dir = 1
- },
/obj/structure/cable/green{
icon_state = "1-2"
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/medical/cryo)
"upx" = (
@@ -154669,7 +156348,7 @@
},
/obj/random/dirt_75,
/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/auxatmos)
"uqT" = (
/obj/effect/floor_decal/spline/fancy/wood{
@@ -154714,10 +156393,7 @@
pixel_y = 25;
req_access = list(16)
},
-/turf/simulated/floor/bluegrid{
- name = "cooled mainframe floor";
- temperature = 278
- },
+/turf/simulated/floor/bluegrid,
/area/horizon/ai/chamber)
"ura" = (
/obj/effect/floor_decal/corner/mauve{
@@ -154885,7 +156561,7 @@
pixel_x = 2;
pixel_y = 5
},
-/turf/simulated/floor/tiled/dark/full,
+/turf/simulated/floor/carpet/rubber,
/area/horizon/engineering/atmos/storage_maintenance)
"urV" = (
/obj/structure/machinery/light/small/emergency{
@@ -154903,7 +156579,7 @@
dir = 4
},
/obj/structure/platform/ledge,
-/turf/simulated/floor/tiled/dark,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"usa" = (
/obj/structure/stairs/south,
@@ -155021,15 +156697,11 @@
/turf/simulated/floor/bluegrid,
/area/horizon/tcommsat/chamber)
"usI" = (
-/obj/structure/machinery/light/small/emergency{
- dir = 8
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
},
-/obj/random/maintenance_junk_or_loot,
-/obj/random/dirt_75,
-/obj/random/dirt_75,
-/obj/structure/table/rack,
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/wing/starboard/far)
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/research)
"usJ" = (
/obj/structure/bed/stool/chair/padded/blue{
dir = 8
@@ -155043,7 +156715,11 @@
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply,
/obj/structure/machinery/alarm/south,
/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/auxatmos)
"uta" = (
/obj/effect/floor_decal/industrial/warning{
@@ -155139,17 +156815,19 @@
/turf/unsimulated/floor/plating,
/area/shuttle/transport1)
"utL" = (
-/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 10
},
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"utO" = (
/obj/effect/floor_decal/corner_wide/yellow{
@@ -155239,6 +156917,9 @@
},
/obj/structure/machinery/hologram/holopad,
/obj/item/radio/intercom/south,
+/obj/effect/floor_decal/spline/fancy/wood{
+ dir = 7
+ },
/turf/simulated/floor/wood/walnut,
/area/horizon/medical/smoking)
"uuv" = (
@@ -155321,7 +157002,7 @@
pixel_x = 12;
pixel_y = -28
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/port/docks)
"uvi" = (
/obj/effect/decal/cleanable/liquid_fuel,
@@ -155362,7 +157043,10 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/atmos)
"uvv" = (
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard)
"uvw" = (
/obj/structure/machinery/atmospherics/pipe/simple/visible/yellow{
@@ -155375,7 +157059,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/near)
"uvG" = (
@@ -155532,7 +157216,7 @@
dir = 6
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/turf/simulated/floor/plating,
@@ -155621,7 +157305,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/platform_stairs/south_north_solo,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port)
"uxj" = (
/obj/structure/closet/secure_closet/engineering_chief,
@@ -155715,8 +157399,14 @@
dir = 8
},
/obj/random/dirt_75,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/operations)
+"uxQ" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_3/aft/starboard/far)
"uxU" = (
/obj/effect/floor_decal/spline/plain,
/turf/simulated/floor/exoplanet/barren/raskara,
@@ -156180,6 +157870,9 @@
/obj/effect/floor_decal/corner/dark_green{
dir = 1
},
+/obj/structure/machinery/light/floor{
+ dir = 1
+ },
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_1/central)
"uBA" = (
@@ -156464,12 +158157,11 @@
},
/area/centcom/shared_dream)
"uDg" = (
-/obj/structure/table/rack,
-/obj/random/loot,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 5
},
-/turf/simulated/floor/plating,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor,
/area/horizon/maintenance/deck_2/wing/port/far)
"uDl" = (
/obj/effect/floor_decal/spline/fancy/wood/cee{
@@ -156522,6 +158214,10 @@
},
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/wing_port)
+"uDA" = (
+/obj/structure/lattice/catwalk,
+/turf/space,
+/area/horizon/exterior/no_shields)
"uDB" = (
/obj/effect/floor_decal/corner/mauve/diagonal,
/obj/structure/cable/green{
@@ -156590,7 +158286,10 @@
/obj/random/loot,
/obj/random/loot,
/obj/random/contraband,
-/turf/simulated/floor,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/security/port)
"uDP" = (
/obj/structure/machinery/disposal/small/east{
@@ -156603,7 +158302,7 @@
/turf/simulated/floor/tiled/white,
/area/horizon/medical/pharmacy)
"uDT" = (
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/drone_fabrication)
"uDV" = (
/obj/effect/floor_decal/corner/dark_blue{
@@ -156987,7 +158686,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"uGs" = (
/obj/structure/machinery/alarm/east{
@@ -157040,7 +158739,7 @@
master_tag = "airlock_horizon_deck_2_aft_sm";
name = "airlock_horizon_deck_2_aft_sm"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/reactor/supermatter/airlock)
"uGL" = (
/obj/effect/floor_decal/corner/dark_blue{
@@ -157219,7 +158918,7 @@
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
-/turf/simulated/floor/tiled/full,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/security/evidence_storage)
"uHE" = (
/obj/structure/machinery/atmospherics/unary/vent_pump/high_volume{
@@ -157230,6 +158929,7 @@
master_tag = "airlock_horizon_dock_deck_3_starboard_1";
name = "airlock_horizon_dock_deck_3_starboard_1"
},
+/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor/plating,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"uHG" = (
@@ -157271,7 +158971,7 @@
},
/obj/structure/machinery/power/apc/east,
/obj/random/dirt_75,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/operations)
"uId" = (
/obj/effect/decal/cleanable/dirt,
@@ -157516,7 +159216,7 @@
icon_state = "1-2"
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/turf/simulated/floor/plating,
@@ -157527,7 +159227,7 @@
},
/obj/structure/machinery/power/apc/south,
/obj/structure/cable,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port)
"uJw" = (
/obj/effect/floor_decal/spline/plain{
@@ -157580,6 +159280,7 @@
pixel_x = 2;
pixel_y = 8
},
+/obj/random/dirt_75,
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"uJZ" = (
@@ -157835,6 +159536,9 @@
/obj/structure/cable{
icon_state = "4-8"
},
+/obj/structure/machinery/atmospherics/unary/vent_pump/on{
+ dir = 4
+ },
/turf/simulated/floor/tiled/dark/full,
/area/horizon/storage/secure/tech_vault)
"uLC" = (
@@ -157950,7 +159654,7 @@
pixel_x = -28;
pixel_y = 12
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/port/docks)
"uMi" = (
/obj/effect/floor_decal/spline/plain{
@@ -158213,7 +159917,7 @@
"uOD" = (
/obj/effect/floor_decal/industrial/warning,
/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/carpet/rubber,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/aft)
"uOE" = (
/obj/structure/machinery/camera/network/service{
@@ -158362,7 +160066,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 8
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/turf/unsimulated/floor,
@@ -158375,8 +160079,6 @@
icon_state = "1-2"
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/random/dirt_75,
-/obj/random/dirt_75,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"uPK" = (
@@ -158420,6 +160122,9 @@
dir = 10
},
/obj/structure/disposalpipe/segment,
+/obj/effect/floor_decal/spline/fancy/wood{
+ dir = 4
+ },
/turf/simulated/floor/wood/walnut,
/area/horizon/medical/smoking)
"uPV" = (
@@ -158508,7 +160213,7 @@
/area/horizon/maintenance/deck_2/wing/port/far)
"uQG" = (
/obj/random/dirt_75,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/random/maintenance_junk_or_loot,
@@ -158861,6 +160566,9 @@
/area/shuttle/syndicate_elite)
"uSC" = (
/obj/structure/machinery/recharge_station,
+/obj/structure/machinery/light{
+ dir = 8
+ },
/turf/simulated/floor/tiled/dark/full,
/area/horizon/command/bridge/aibunker)
"uSF" = (
@@ -158939,14 +160647,13 @@
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/port/far)
"uTo" = (
-/obj/effect/floor_decal/industrial/warning/corner{
- dir = 4
- },
-/obj/effect/floor_decal/industrial/warning{
- dir = 10
- },
-/turf/simulated/floor/tiled/dark,
-/area/horizon/maintenance/deck_2/wing/starboard/near)
+/obj/structure/platform,
+/obj/random/dirt_75,
+/obj/structure/closet/crate/freezer,
+/obj/random/booze,
+/obj/random/booze,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/maintenance/deck_2/wing/starboard/far)
"uTs" = (
/obj/structure/machinery/atmospherics/unary/vent_scrubber/on,
/obj/effect/floor_decal/corner_wide/green{
@@ -158966,7 +160673,7 @@
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"uTA" = (
@@ -159238,6 +160945,7 @@
/obj/structure/machinery/light/small{
dir = 8
},
+/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor/plating,
/area/horizon/security/checkpoint2)
"uVk" = (
@@ -159385,11 +161093,11 @@
/turf/unsimulated/floor/plating,
/area/antag/raider)
"uWf" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 10
- },
/obj/structure/platform,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"uWh" = (
/obj/effect/floor_decal/industrial/outline/blue,
@@ -159570,7 +161278,7 @@
/obj/structure/sign/electricshock{
pixel_y = 32
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/main/starboard)
"uXo" = (
/obj/effect/floor_decal/industrial/warning{
@@ -159587,7 +161295,8 @@
master_tag = "airlock_horizon_dock_deck_3_starboard_3";
name = "airlock_horizon_dock_deck_3_starboard_3"
},
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/corner/dark_blue/diagonal,
+/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"uXq" = (
/obj/structure/cable/green{
@@ -159599,7 +161308,9 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 5
},
-/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard)
"uXr" = (
@@ -159654,13 +161365,15 @@
/turf/simulated/floor/tiled/white,
/area/horizon/rnd/xenological)
"uXF" = (
-/obj/effect/floor_decal/industrial/warning,
/obj/structure/closet,
/obj/random/loot,
/obj/structure/railing/mapped{
dir = 8
},
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"uXG" = (
/obj/effect/floor_decal/industrial/hatch/yellow,
@@ -159901,8 +161614,11 @@
/area/horizon/command/bridge/controlroom)
"uZR" = (
/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 8
+ },
/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/wing/port)
+/area/horizon/maintenance/deck_2/wing/starboard/far)
"uZS" = (
/obj/structure/cable/green{
icon_state = "1-2"
@@ -159919,6 +161635,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/engineering/lower)
"uZV" = (
@@ -160255,6 +161972,13 @@
},
/turf/simulated/floor/tiled/full,
/area/horizon/service/hydroponics/lower)
+"vcp" = (
+/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/operations)
"vcq" = (
/obj/effect/map_effect/window_spawner/full/reinforced/polarized/firedoor{
id = "bar_fore";
@@ -160414,6 +162138,9 @@
/obj/effect/floor_decal/corner/dark_green{
dir = 4
},
+/obj/structure/machinery/light/floor{
+ dir = 1
+ },
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_1/central)
"vcY" = (
@@ -160623,7 +162350,7 @@
name = "airlock_horizon_deck_2_aft_sm"
},
/obj/effect/map_effect/marker_helper/airlock/exterior,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/reactor/supermatter/airlock)
"veM" = (
/obj/effect/floor_decal/corner/white/diagonal,
@@ -160647,11 +162374,7 @@
/area/centcom/spawning)
"veP" = (
/obj/structure/machinery/portable_atmospherics/canister/empty/air,
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
- dir = 8
- },
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"veQ" = (
/obj/effect/floor_decal/corner/green{
@@ -160751,6 +162474,9 @@
/obj/structure/machinery/firealarm/west,
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_2/central)
+"vfC" = (
+/turf/simulated/floor/reinforced/airless,
+/area/horizon/exterior/no_shields)
"vfF" = (
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 1
@@ -160806,6 +162532,7 @@
name = "airlock_horizon_deck_3_aft_1"
},
/obj/effect/decal/cleanable/dirt,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"vgg" = (
@@ -161174,13 +162901,14 @@
"vjk" = (
/obj/effect/floor_decal/industrial/outline/grey,
/obj/structure/reagent_dispensers/extinguisher,
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/auxatmos)
"vjm" = (
/obj/effect/decal/cleanable/dirt,
-/obj/effect/floor_decal/industrial/warning{
- dir = 4
- },
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"vjo" = (
@@ -161326,7 +163054,7 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/research)
"vkn" = (
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 5
},
@@ -161410,10 +163138,10 @@
/turf/simulated/floor/wood,
/area/horizon/service/chapel/main)
"vkO" = (
-/obj/random/dirt_75,
/obj/structure/cable{
icon_state = "4-8"
},
+/obj/structure/lattice/catwalk/indoor/grate/dark/damaged,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard)
"vkY" = (
@@ -161490,7 +163218,10 @@
"vlx" = (
/obj/effect/decal/cleanable/dirt,
/mob/living/silicon/robot/drone/construction/matriarch,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/drone_fabrication)
"vlz" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -161635,7 +163366,7 @@
},
/area/horizon/holodeck/source_pool)
"vmv" = (
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/nacelle)
"vmw" = (
@@ -161805,6 +163536,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 8
},
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/medical/cryo)
"vnN" = (
@@ -161830,6 +163562,7 @@
/area/horizon/hallway/primary/deck_2/central)
"vnP" = (
/obj/random/junk,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/aft)
"vnS" = (
@@ -161917,7 +163650,7 @@
"vom" = (
/obj/effect/floor_decal/industrial/warning,
/obj/item/material/shard,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/port/far)
"vop" = (
/obj/effect/floor_decal/spline/plain/black{
@@ -161996,6 +163729,10 @@
"voK" = (
/obj/effect/decal/cleanable/dirt,
/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/main/starboard)
"voU" = (
@@ -162077,7 +163814,7 @@
/area/horizon/hallway/primary/deck_2/central)
"vpO" = (
/obj/random/canister/filled/restricted,
-/turf/simulated/floor/tiled/dark/full,
+/turf/simulated/floor/carpet/rubber,
/area/horizon/engineering/atmos/storage_maintenance)
"vpT" = (
/obj/effect/floor_decal/spline/plain/corner/black{
@@ -162212,9 +163949,6 @@
/turf/simulated/floor/tiled,
/area/horizon/security/brig)
"vqO" = (
-/obj/effect/floor_decal/corner_wide/green{
- dir = 6
- },
/obj/structure/disposalpipe/trunk{
dir = 8
},
@@ -162223,6 +163957,7 @@
dir = 8
},
/obj/structure/machinery/disposal/small/north,
+/obj/structure/machinery/light/floor,
/turf/simulated/floor/tiled/white,
/area/horizon/medical/gen_treatment)
"vqQ" = (
@@ -162232,8 +163967,8 @@
/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
},
-/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"vqT" = (
/obj/effect/decal/cleanable/dirt,
@@ -162241,7 +163976,7 @@
/obj/structure/closet,
/obj/random/loot,
/obj/random/junk,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/port)
"vqY" = (
/obj/structure/machinery/door/blast/odin/shuttle/tcfl/shutter{
@@ -162291,7 +164026,8 @@
/area/centcom/spawning)
"vrr" = (
/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/security/port)
"vrH" = (
/obj/structure/curtain/open/shower/security,
@@ -162374,21 +164110,23 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden{
dir = 10
},
-/obj/effect/floor_decal/industrial/warning{
- dir = 8
- },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/medical/cryo)
"vsg" = (
-/obj/structure/machinery/porta_turret/stationary,
-/obj/effect/floor_decal/industrial/warning/full,
/obj/structure/sign/flag/scc{
pixel_x = 32
},
-/obj/structure/machinery/light/small/emergency{
+/obj/effect/floor_decal/industrial/hatch/red,
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 1
+ },
+/obj/structure/machinery/light/small{
dir = 4
},
-/turf/simulated/floor/reinforced,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/command/bridge/selfdestruct)
"vsl" = (
/obj/structure/machinery/portable_atmospherics/canister/carbon_dioxide,
@@ -162448,15 +164186,14 @@
/turf/simulated/floor/plating,
/area/horizon/hangar/intrepid)
"vti" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
},
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/random/dirt_75,
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/wing/starboard/far)
+/obj/random/bomb_supply,
+/obj/random/bomb_supply,
+/obj/structure/closet/crate,
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_1/main/port)
"vtq" = (
/obj/structure/machinery/door/blast/regular{
dir = 4;
@@ -162469,7 +164206,8 @@
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
-/turf/simulated/floor/plating,
+/obj/structure/reagent_dispensers/watertank,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port)
"vtu" = (
/obj/effect/floor_decal/spline/plain/lime{
@@ -162486,12 +164224,13 @@
/obj/effect/floor_decal/industrial/warning{
dir = 6
},
-/turf/simulated/floor/plating,
+/obj/random/dirt_75,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/far)
"vtw" = (
/obj/structure/bed/stool/chair/sofa/left/red,
/obj/effect/floor_decal/corner/brown/diagonal,
-/obj/structure/machinery/light/spot{
+/obj/structure/machinery/light{
dir = 1
},
/turf/simulated/floor/tiled/dark,
@@ -162512,6 +164251,9 @@
icon_state = "0-4"
},
/obj/structure/machinery/power/apc/low/west,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 5
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/atmos/storage_maintenance)
"vtM" = (
@@ -162688,6 +164430,9 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/rnd/xenobiology/xenoflora)
"vvr" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 6
+ },
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/starboard)
"vvt" = (
@@ -162880,7 +164625,10 @@
/area/horizon/rnd/lab)
"vwJ" = (
/obj/structure/table/rack,
-/turf/simulated/floor,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/far)
"vwP" = (
/turf/simulated/wall/r_wall,
@@ -163059,12 +164807,12 @@
/turf/unsimulated/floor/plating,
/area/centcom/control)
"vyb" = (
-/obj/structure/machinery/door/window{
- dir = 1
- },
/obj/structure/machinery/atmospherics/pipe/manifold/hidden{
dir = 8
},
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
/turf/simulated/floor,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"vyc" = (
@@ -163120,10 +164868,8 @@
/area/horizon/security/hallway)
"vyC" = (
/obj/structure/machinery/floodlight,
-/obj/effect/floor_decal/industrial/warning{
- dir = 4
- },
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/outline/operations,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/wing/starboard)
"vyE" = (
/obj/structure/bed/stool/chair/office/dark{
@@ -163176,7 +164922,10 @@
/area/centcom/legion/hangar5)
"vyT" = (
/obj/random/junk,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard)
"vyX" = (
/obj/effect/decal/fake_object{
@@ -163200,7 +164949,7 @@
shuttle_tag = "Quark";
cycle_to_external_air = 1
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/shuttle/quark/cargo_hold)
"vzb" = (
/obj/structure/machinery/firealarm/west,
@@ -163414,7 +165163,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 9
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/cafe)
"vAL" = (
/obj/structure/machinery/light,
@@ -163530,7 +165279,6 @@
/turf/simulated/floor/plating,
/area/horizon/operations/package_conveyors)
"vBe" = (
-/obj/structure/grille/broken,
/obj/structure/machinery/door/firedoor,
/obj/item/material/shard{
icon_state = "small"
@@ -163539,7 +165287,7 @@
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"vBf" = (
/obj/structure/machinery/atmospherics/valve{
@@ -163656,6 +165404,9 @@
alarm_id = 1601;
req_one_access = list(11,24,52)
},
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/operations)
"vBO" = (
@@ -163677,7 +165428,7 @@
/area/centcom/legion)
"vBR" = (
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/tiled,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard)
"vBU" = (
/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
@@ -163848,12 +165599,23 @@
/obj/effect/decal/fake_object/light_source/invisible,
/turf/simulated/floor,
/area/tdome/tdome2)
+"vDf" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_1/main/starboard)
"vDg" = (
/obj/structure/cable/green{
icon_state = "1-8"
},
/obj/structure/cable/green,
/obj/structure/machinery/power/apc/low/east,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/xenoarchaeology)
"vDj" = (
@@ -164043,6 +165805,10 @@
/obj/structure/cable/green{
icon_state = "0-4"
},
+/obj/effect/floor_decal/industrial/warning,
+/obj/structure/machinery/light/small{
+ dir = 1
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/wing_starboard)
"vEo" = (
@@ -164441,7 +166207,7 @@
/area/horizon/maintenance/deck_2/central_ring)
"vHq" = (
/obj/structure/reagent_dispensers/watertank,
-/turf/simulated/floor/tiled/dark,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/port)
"vHL" = (
/obj/structure/table/standard,
@@ -164597,13 +166363,10 @@
/turf/simulated/floor/tiled/white,
/area/horizon/security/autopsy_laboratory)
"vIR" = (
-/obj/random/dirt_75,
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/port/shortcut)
"vIZ" = (
@@ -164792,10 +166555,11 @@
/turf/simulated/open,
/area/horizon/hallway/primary/deck_2/central)
"vKx" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
-/turf/simulated/floor/tiled/dark/full,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"vKz" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -165029,6 +166793,9 @@
/obj/structure/sign/nosmoking_1{
pixel_y = -32
},
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/auxatmos)
"vLF" = (
@@ -165063,7 +166830,10 @@
/area/horizon/hangar/auxiliary)
"vMb" = (
/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"vMk" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -165299,12 +167069,9 @@
/turf/simulated/floor/tiled,
/area/merchant_station)
"vON" = (
-/obj/structure/machinery/light/small/emergency{
- dir = 4
- },
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor,
/area/horizon/maintenance/deck_2/wing/port/far)
"vOR" = (
/obj/structure/lattice,
@@ -165376,6 +167143,9 @@
},
/turf/simulated/floor/tiled/dark,
/area/shuttle/syndicate_elite)
+"vPA" = (
+/turf/simulated/open/airless,
+/area/horizon/exterior/no_shields)
"vPO" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 5
@@ -165581,12 +167351,15 @@
/turf/unsimulated/floor,
/area/centcom/holding)
"vQY" = (
-/obj/effect/decal/cleanable/dirt,
/obj/structure/table/standard{
no_cargo = 1
},
/obj/random/contraband,
-/turf/simulated/floor/tiled,
+/obj/effect/floor_decal/corner/brown{
+ dir = 9
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"vRa" = (
/obj/effect/floor_decal/spline/fancy/wood/corner{
@@ -165647,7 +167420,7 @@
/area/horizon/rnd/xenobiology/xenoflora)
"vRz" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/turf/simulated/floor/plating,
@@ -165692,6 +167465,19 @@
/obj/structure/table/reinforced/steel,
/turf/simulated/floor/carpet/rubber,
/area/horizon/command/bridge/controlroom)
+"vRZ" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/item/material/ashtray/plastic{
+ pixel_x = -5;
+ pixel_y = 8
+ },
+/obj/item/paper/cig/fine{
+ pixel_x = 3;
+ pixel_y = 1
+ },
+/obj/structure/table/reinforced/steel,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/maintenance/deck_1/wing/starboard/far)
"vSa" = (
/obj/effect/floor_decal/industrial/hatch/red,
/obj/effect/floor_decal/industrial/warning/corner{
@@ -165954,10 +167740,12 @@
/turf/simulated/floor/wood,
/area/horizon/service/library)
"vUc" = (
-/obj/effect/floor_decal/industrial/warning{
+/obj/structure/machinery/anti_bluespace,
+/obj/effect/floor_decal/industrial/hatch/yellow,
+/obj/structure/machinery/light/small{
dir = 4
},
-/turf/simulated/floor/reinforced,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/command/bridge/selfdestruct)
"vUj" = (
/obj/structure/bed/stool/chair{
@@ -166323,7 +168111,7 @@
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/operations/starboard)
"vVO" = (
/obj/structure/disposalpipe/segment,
@@ -166771,7 +168559,8 @@
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 8
},
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/operations)
"vYp" = (
/obj/structure/cable/green{
@@ -166797,7 +168586,7 @@
master_tag = "airlock_horizon_deck_1_fore_1";
name = "airlock_horizon_deck_1_fore_1"
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/hangar/starboard)
"vYu" = (
/obj/structure/window/reinforced/holowindow{
@@ -166890,13 +168679,14 @@
/obj/structure/machinery/atmospherics/unary/vent_pump/high_volume{
dir = 1
},
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/effect/map_effect/marker/airlock{
frequency = 1004;
master_tag = "airlock_horizon_deck_1_fore_1";
name = "airlock_horizon_deck_1_fore_1"
},
/obj/effect/decal/cleanable/dirt,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/hangar/starboard)
"vZn" = (
@@ -166970,8 +168760,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
-/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port)
"vZQ" = (
/obj/structure/machinery/door/blast/odin/open{
@@ -167038,6 +168827,7 @@
/obj/item/material/shard{
icon_state = "small"
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard)
"wax" = (
@@ -167162,28 +168952,27 @@
/turf/simulated/floor/plating,
/area/horizon/shuttle/intrepid/main_compartment)
"wbr" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
-/obj/effect/floor_decal/industrial/warning{
- dir = 10
- },
/obj/structure/machinery/atmospherics/portables_connector,
/obj/structure/machinery/portable_atmospherics/canister/air/airlock,
/obj/structure/sign/nosmoking_1{
pixel_y = 32
},
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/auxatmos)
"wbs" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor,
/area/horizon/maintenance/deck_2/wing/port/far)
"wbv" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -167261,7 +169050,7 @@
dir = 4
},
/obj/effect/floor_decal/industrial/hatch/yellow,
-/obj/structure/railing/mapped,
+/obj/effect/floor_decal/industrial/warning/corner,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/medical/cryo)
"wcg" = (
@@ -167372,6 +169161,9 @@
/obj/structure/machinery/atmospherics/unary/vent_pump/on{
dir = 4
},
+/obj/effect/floor_decal/spline/fancy/wood{
+ dir = 10
+ },
/turf/simulated/floor/wood/walnut,
/area/horizon/medical/smoking)
"wcx" = (
@@ -167392,11 +169184,12 @@
/turf/simulated/floor/marble,
/area/horizon/holodeck/source_trinary)
"wcB" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/effect/floor_decal/industrial/warning{
+ dir = 5
},
+/obj/random/dirt_75,
/turf/simulated/floor/tiled/dark,
-/area/horizon/maintenance/deck_1/main/port/shortcut)
+/area/horizon/maintenance/deck_2/wing/starboard)
"wcC" = (
/obj/structure/bed/stool/bar/padded/blue,
/obj/effect/floor_decal/spline/fancy/wood,
@@ -167488,7 +169281,7 @@
},
/obj/random/loot,
/obj/random/loot,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port)
"wcW" = (
/obj/structure/disposalpipe/segment,
@@ -167496,7 +169289,7 @@
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/research)
"wcX" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -167522,7 +169315,7 @@
},
/obj/random/junk,
/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/interstitial)
"wdo" = (
/turf/simulated/floor/holofloor/tiled,
@@ -167557,7 +169350,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 4
},
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/operations/secure_ammunition_storage)
"wdK" = (
@@ -167651,7 +169444,8 @@
dir = 9
},
/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/auxatmos)
"wee" = (
/obj/structure/table/standard,
@@ -167686,6 +169480,12 @@
/area/horizon/medical/main_storage)
"wef" = (
/obj/random/maintenance_junk_or_loot,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
/turf/simulated/floor,
/area/horizon/maintenance/substation/command)
"weh" = (
@@ -167717,7 +169517,7 @@
pixel_x = -5;
pixel_y = -3
},
-/turf/simulated/floor/tiled/dark/full,
+/turf/simulated/floor/carpet/rubber,
/area/horizon/engineering/atmos/storage_maintenance)
"weq" = (
/obj/effect/floor_decal/industrial/hatch_door/red,
@@ -167880,6 +169680,9 @@
dir = 9
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"wfp" = (
@@ -168266,7 +170069,7 @@
dir = 4
},
/obj/random/dirt_75,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/turf/simulated/floor/plating,
@@ -168374,7 +170177,8 @@
dir = 8
},
/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/operations)
"wiq" = (
/obj/effect/floor_decal/corner/lime/diagonal,
@@ -168550,10 +170354,10 @@
/turf/simulated/floor/tiled/white,
/area/shuttle/hapt)
"wjI" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/aft/port)
"wjJ" = (
/obj/effect/floor_decal/corner_wide/black{
@@ -168586,16 +170390,11 @@
/turf/unsimulated/floor/plating,
/area/centcom/specops)
"wjV" = (
-/obj/random/dirt_75,
-/obj/effect/floor_decal/industrial/warning,
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/obj/effect/floor_decal/industrial/warning{
dir = 4
},
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 8
- },
/turf/simulated/floor/tiled/dark,
-/area/horizon/maintenance/deck_2/wing/starboard)
+/area/horizon/maintenance/deck_2/wing/port/near)
"wkc" = (
/obj/structure/bed/stool/chair/office/light{
dir = 8
@@ -169043,6 +170842,9 @@
"wmv" = (
/obj/effect/decal/cleanable/dirt,
/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/aft)
"wmD" = (
@@ -169405,14 +171207,11 @@
/area/centcom/bar)
"woF" = (
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
- },
/obj/structure/machinery/door/firedoor{
req_one_access = list(24,11,67,73);
dir = 4
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/main/starboard)
"woH" = (
/obj/structure/window/reinforced/crescent{
@@ -169447,12 +171246,7 @@
/obj/structure/ladder/up{
pixel_y = 13
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/cobweb2,
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/port)
"wpb" = (
@@ -169630,6 +171424,7 @@
/area/horizon/holodeck_control)
"wqg" = (
/obj/effect/decal/cleanable/dirt,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"wqh" = (
@@ -169917,14 +171712,12 @@
},
/area/centcom/spawning)
"wqY" = (
-/obj/effect/decal/cleanable/dirt,
/obj/structure/bed/stool/chair/padded/black{
dir = 4
},
-/obj/structure/machinery/light/small/emergency{
- dir = 8
- },
-/turf/simulated/floor/tiled,
+/obj/effect/floor_decal/corner/brown/full,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"wqZ" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -170175,17 +171968,17 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/service/bar)
"wsN" = (
-/obj/structure/railing/mapped,
-/obj/structure/railing/mapped{
- dir = 4
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/effect/floor_decal/industrial/warning{
- dir = 6
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/machinery/light/small{
+ dir = 8
},
-/obj/effect/decal/cleanable/dirt,
-/obj/random/maintenance_junk_or_loot,
/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_1/wing/starboard/far)
+/area/horizon/engineering/storage/lower)
"wsR" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -170326,7 +172119,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/turf/simulated/floor/plating,
@@ -170427,9 +172220,6 @@
/obj/structure/platform/ledge/dark{
dir = 8
},
-/obj/structure/railing/mapped{
- dir = 4
- },
/obj/structure/lattice,
/turf/simulated/open,
/area/horizon/maintenance/deck_2/cryo)
@@ -170538,7 +172328,7 @@
name = "Deck 2 Starboard Nacelle Substation";
req_one_access = list(11,24)
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/substation/wing_port)
"wuI" = (
/obj/structure/machinery/vending/coffee/free{
@@ -170773,6 +172563,9 @@
dir = 4
},
/obj/structure/disposalpipe/trunk,
+/obj/effect/floor_decal/spline/fancy/wood{
+ dir = 5
+ },
/turf/simulated/floor/wood/walnut,
/area/horizon/medical/smoking)
"wwE" = (
@@ -170834,6 +172627,10 @@
},
/turf/simulated/floor/tiled/dark,
/area/shuttle/mercenary)
+"wwN" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_1/operations/starboard)
"wwP" = (
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/structure/machinery/light{
@@ -170855,7 +172652,7 @@
/turf/simulated/floor/wood,
/area/horizon/command/bridge/meeting_room)
"wwX" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/structure/reagent_dispensers/watertank,
@@ -170884,7 +172681,8 @@
/area/horizon/engineering/atmos/storage)
"wxe" = (
/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/operations)
"wxj" = (
/obj/structure/curtain/open/bar,
@@ -170932,13 +172730,16 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/storage/tech)
"wxv" = (
-/obj/effect/decal/cleanable/dirt,
/obj/structure/table/standard{
no_cargo = 1
},
/obj/item/reagent_containers/glass/rag,
/obj/random/smokable,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/corner/brown/full{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"wxy" = (
/obj/effect/floor_decal/corner/dark_blue{
@@ -170979,7 +172780,7 @@
"wxG" = (
/obj/structure/disposalpipe/segment,
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/turf/simulated/floor/plating,
@@ -171087,7 +172888,10 @@
"wyA" = (
/obj/random/dirt_75,
/obj/structure/machinery/alarm/west,
-/turf/simulated/floor,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/security/port)
"wyB" = (
/obj/structure/machinery/atmospherics/pipe/manifold/visible/purple{
@@ -171214,6 +173018,10 @@
},
/turf/simulated/floor/lino,
/area/horizon/security/investigators_office)
+"wzp" = (
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/wing/port/far)
"wzr" = (
/obj/effect/shuttle_landmark/lift/operations_third_deck,
/turf/simulated/open,
@@ -171231,6 +173039,10 @@
},
/turf/unsimulated/floor/plating,
/area/centcom/specops)
+"wzz" = (
+/obj/item/hullbeacon/red,
+/turf/simulated/floor/reinforced/airless,
+/area/horizon/exterior/no_shields)
"wzD" = (
/obj/effect/floor_decal/spline/fancy/wood/corner,
/turf/unsimulated/floor/wood,
@@ -171313,7 +173125,7 @@
name = "airlock_horizon_deck_1_fore_1"
},
/obj/effect/map_effect/marker_helper/airlock/exterior,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/hangar/starboard)
"wzS" = (
/obj/effect/floor_decal/corner/beige/full{
@@ -171343,6 +173155,12 @@
},
/turf/simulated/floor/tiled/dark,
/area/horizon/rnd/xenobiology/xenoflora)
+"wAf" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/horizon/exterior/no_shields)
"wAh" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/fuel{
dir = 10
@@ -171565,7 +173383,7 @@
/area/horizon/rnd/lab)
"wCb" = (
/obj/effect/floor_decal/corner/brown/diagonal,
-/obj/structure/machinery/light/spot{
+/obj/structure/machinery/light{
dir = 1
},
/turf/simulated/floor/tiled/dark,
@@ -172034,6 +173852,9 @@
"wFH" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/bed/stool/bar/padded/red,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"wFI" = (
@@ -172062,7 +173883,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 5
},
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/starboard)
"wFZ" = (
@@ -172158,8 +173979,8 @@
/obj/effect/floor_decal/industrial/warning{
dir = 9
},
-/obj/structure/machinery/light/small/emergency,
-/turf/simulated/floor/plating,
+/obj/structure/machinery/light/small,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/research)
"wGH" = (
/turf/simulated/floor/tiled,
@@ -172188,7 +174009,7 @@
/obj/structure/railing/mapped{
dir = 4
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/obj/structure/table/rack/folding_table,
@@ -172204,7 +174025,7 @@
/obj/effect/floor_decal/industrial/outline/grey,
/obj/effect/floor_decal/industrial/warning,
/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/cafe)
"wGN" = (
/obj/structure/machinery/door/firedoor,
@@ -172216,7 +174037,7 @@
/obj/effect/floor_decal/industrial/hatch_door/engineering{
dir = 1
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/storage/lower)
"wGP" = (
/obj/structure/tank_wall/nitrogen{
@@ -172387,7 +174208,7 @@
/turf/simulated/floor/wood,
/area/horizon/service/mess_hall)
"wHx" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/random/junk,
@@ -172595,12 +174416,10 @@
/turf/simulated/open,
/area/horizon/security/investigations_hallway)
"wJL" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/effect/decal/cleanable/cobweb2{
icon_state = "cobweb1"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/port)
"wJM" = (
@@ -172612,6 +174431,9 @@
/area/horizon/service/custodial/disposals/deck_1)
"wJQ" = (
/obj/effect/floor_decal/corner_wide/yellow/full,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/shields)
"wJR" = (
@@ -172721,7 +174543,7 @@
name = "airlock_horizon_deck_1_fore_1"
},
/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/hangar/starboard)
"wKo" = (
/obj/effect/floor_decal/corner/brown{
@@ -172980,12 +174802,12 @@
/turf/simulated/floor/plating,
/area/merchant_station/warehouse)
"wMC" = (
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/railing/mapped{
- dir = 8
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
},
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/aft)
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_1/wing/starboard/far)
"wMJ" = (
/obj/structure/disposalpipe/segment,
/obj/structure/machinery/door/airlock/maintenance{
@@ -173272,7 +175094,7 @@
"wOw" = (
/obj/effect/floor_decal/corner/brown/diagonal,
/obj/structure/bed/stool/padded/red,
-/obj/structure/machinery/light/spot{
+/obj/structure/machinery/light{
dir = 1
},
/turf/simulated/floor/tiled/dark,
@@ -173299,6 +175121,7 @@
/obj/structure/machinery/light/small/red{
dir = 8
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/shuttle/quark/cargo_hold)
"wOz" = (
@@ -173424,7 +175247,7 @@
dir = 1
},
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/research)
"wPr" = (
/obj/effect/floor_decal/corner/brown{
@@ -173598,12 +175421,8 @@
/area/horizon/holodeck/source_wildlife)
"wQg" = (
/obj/effect/floor_decal/industrial/warning,
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
- },
/obj/structure/machinery/alarm/north,
-/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"wQj" = (
/obj/structure/flora/pottedplant{
@@ -173632,6 +175451,7 @@
pixel_x = -6;
pixel_y = 28
},
+/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor/plating,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"wQq" = (
@@ -173639,7 +175459,7 @@
dir = 10
},
/obj/random/junk,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port)
"wQs" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -174136,7 +175956,7 @@
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/hangar/starboard)
"wTq" = (
/obj/effect/spider/cocoon,
@@ -174164,7 +175984,8 @@
/area/horizon/crew/fitness/gym)
"wTw" = (
/obj/structure/machinery/atmospherics/unary/vent_scrubber/on,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/far)
"wTz" = (
/obj/structure/cable{
@@ -174179,6 +176000,15 @@
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/operations/starboard/far)
+"wTA" = (
+/obj/effect/floor_decal/corner/dark_green{
+ dir = 9
+ },
+/obj/structure/machinery/light{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/horizon/hallway/primary/deck_1/central)
"wTD" = (
/obj/effect/floor_decal/corner/dark_blue/full{
dir = 1
@@ -174309,7 +176139,7 @@
name = "airlock_horizon_dock_deck_3_port_5"
},
/obj/effect/map_effect/marker_helper/airlock/interior,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/port/docks)
"wUx" = (
/obj/structure/closet/bombclosetsecurity,
@@ -174510,7 +176340,7 @@
dir = 4
},
/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/interstitial)
"wVm" = (
/obj/structure/machinery/door/blast/shutters{
@@ -174820,7 +176650,7 @@
pixel_y = 13
},
/obj/effect/floor_decal/industrial/warning/cee,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/turf/simulated/floor/tiled/dark,
@@ -174834,7 +176664,7 @@
name = "\improper DANGER: MASS EJECTOR PATH sign"
},
/turf/space,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"wXN" = (
/obj/structure/machinery/atmospherics/pipe/manifold/visible/red{
dir = 4
@@ -174906,6 +176736,7 @@
/area/horizon/operations/lobby)
"wYd" = (
/obj/structure/machinery/atmospherics/pipe/simple/visible/purple,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/atmos_crosser)
"wYg" = (
@@ -175087,6 +176918,9 @@
pixel_y = 4
},
/obj/structure/machinery/alarm/north,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/simulated/floor,
/area/horizon/command/bridge/aibunker)
"wYJ" = (
@@ -175228,7 +177062,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/turf/simulated/floor/plating,
@@ -175249,8 +177083,7 @@
/area/shuttle/merchant)
"wZJ" = (
/obj/structure/machinery/nuclearbomb/station,
-/obj/effect/floor_decal/industrial/warning/full,
-/turf/simulated/floor/reinforced,
+/turf/simulated/floor/redgrid,
/area/horizon/command/bridge/selfdestruct)
"wZT" = (
/obj/effect/floor_decal/corner/mauve/diagonal,
@@ -175551,7 +177384,7 @@
},
/obj/structure/railing/mapped,
/turf/simulated/open/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"xbT" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
@@ -175664,7 +177497,7 @@
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/aft/port)
"xcO" = (
/turf/simulated/wall/shuttle/unique/ert{
@@ -176207,7 +178040,7 @@
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 4
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/main/port)
"xfX" = (
/obj/structure/machinery/door/airlock/security{
@@ -176237,6 +178070,7 @@
pixel_x = 3;
pixel_y = 8
},
+/obj/random/dirt_75,
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"xgd" = (
@@ -176250,9 +178084,6 @@
"xgn" = (
/obj/structure/table/reinforced/steel,
/obj/item/storage/bag/circuits/basic,
-/obj/structure/machinery/light/small/emergency{
- dir = 1
- },
/turf/simulated/floor/carpet/rubber,
/area/horizon/maintenance/deck_1/workshop)
"xgr" = (
@@ -176279,6 +178110,7 @@
dir = 4
},
/obj/structure/cable,
+/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/hangar)
"xgx" = (
@@ -176492,9 +178324,6 @@
/obj/effect/floor_decal/industrial/warning{
dir = 8
},
-/obj/structure/machinery/light/small/emergency{
- dir = 1
- },
/turf/simulated/floor,
/area/horizon/maintenance/substation/command)
"xid" = (
@@ -176507,7 +178336,7 @@
name = "Deck 2 Starboard Nacelle Substation";
req_one_access = list(11,24)
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/substation/wing_port)
"xie" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -176657,6 +178486,12 @@
/obj/effect/floor_decal/spline/plain/corner,
/turf/simulated/floor/exoplanet/grass,
/area/centcom/shared_dream)
+"xjN" = (
+/obj/structure/railing/mapped{
+ dir = 8
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/horizon/exterior/no_shields)
"xjP" = (
/obj/structure/machinery/camera/network/third_deck{
c_tag = "Third Deck - Crew Lounge Starboard"
@@ -176681,6 +178516,9 @@
/obj/structure/cable/green{
icon_state = "1-4"
},
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/hangar/starboard)
"xki" = (
@@ -176841,8 +178679,8 @@
/area/horizon/hallway/primary/deck_3/central)
"xli" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/sign/poster/pinup/bay_47{
- pixel_x = -32
+/obj/structure/machinery/light/small{
+ dir = 8
},
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/service/starboard)
@@ -176860,7 +178698,7 @@
name = "Deck 3 Civilian Substation";
req_one_access = list(11,24)
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/substation/civ_d3)
"xlm" = (
/turf/simulated/wall,
@@ -176951,7 +178789,8 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/port/shortcut)
"xma" = (
/obj/effect/floor_decal/spline/plain/corner{
@@ -177171,7 +179010,17 @@
"xnE" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
-/obj/random/maintenance_junk_or_loot,
+/obj/structure/table/steel,
+/obj/item/pen{
+ pixel_x = 10
+ },
+/obj/structure/sign/poster/civilian/bay_56{
+ pixel_y = 32
+ },
+/obj/item/paper/stickynotes/pad/random{
+ pixel_x = -1;
+ pixel_y = 6
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/operations/starboard)
"xnI" = (
@@ -177186,7 +179035,7 @@
/turf/simulated/floor/tiled,
/area/horizon/hangar/operations)
"xnL" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/structure/machinery/atmospherics/unary/vent_pump/high_volume{
@@ -177197,6 +179046,7 @@
master_tag = "airlock_horizon_deck_2_starboard_aft";
name = "airlock_horizon_deck_2_starboard_aft"
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"xnQ" = (
@@ -177249,6 +179099,12 @@
},
/turf/simulated/floor/tiled/dark,
/area/shuttle/legion)
+"xoq" = (
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/aux{
+ dir = 6
+ },
+/turf/simulated/floor/redgrid,
+/area/horizon/command/bridge/selfdestruct)
"xos" = (
/obj/effect/floor_decal/corner/mauve{
dir = 5
@@ -177259,11 +179115,11 @@
/obj/structure/cable/green{
icon_state = "0-2"
},
-/obj/structure/railing/mapped{
- dir = 4
- },
/obj/structure/machinery/atmospherics/pipe/simple/hidden,
/obj/structure/machinery/power/apc/high/west,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/medical/cryo)
"xoC" = (
@@ -177346,6 +179202,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/cobweb2,
/obj/structure/machinery/power/apc/east,
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/wing_starboard)
"xpu" = (
@@ -177469,11 +179326,16 @@
/area/centcom/shared_dream)
"xqg" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/light/small/emergency{
- dir = 4
+/obj/effect/floor_decal/corner/purple{
+ dir = 9
+ },
+/obj/structure/table/steel,
+/obj/item/stack/material/steel/full{
+ pixel_x = -6;
+ pixel_y = 9
},
/turf/simulated/floor/tiled,
-/area/horizon/maintenance/deck_1/wing/starboard/far)
+/area/horizon/maintenance/deck_2/wing/starboard)
"xqk" = (
/obj/effect/floor_decal/corner/purple{
dir = 9
@@ -177519,9 +179381,6 @@
/turf/simulated/floor/plating,
/area/horizon/engineering/atmos)
"xqu" = (
-/obj/structure/window/reinforced{
- dir = 8
- },
/obj/effect/decal/cleanable/dirt,
/obj/random/junk,
/turf/simulated/floor/plating,
@@ -177536,11 +179395,13 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/structure/machinery/alarm/north,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard)
"xqD" = (
@@ -177579,9 +179440,13 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port)
"xqL" = (
-/obj/effect/floor_decal/industrial/warning,
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 6
+ },
+/obj/structure/platform_deco{
+ icon_state = "ledge_deco"
+ },
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"xqT" = (
/obj/effect/floor_decal/corner_wide/blue{
@@ -177616,7 +179481,6 @@
/turf/simulated/floor/tiled,
/area/horizon/hangar/intrepid)
"xrf" = (
-/obj/structure/machinery/light/floor,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 8
},
@@ -177640,6 +179504,9 @@
pixel_y = -9
},
/obj/structure/machinery/power/apc/east,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/wing_port)
"xrw" = (
@@ -177713,7 +179580,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/structure/lattice/catwalk/indoor/grate/damaged{
color = "#4c535b"
},
@@ -177751,7 +179618,9 @@
/turf/simulated/floor/plating,
/area/horizon/engineering/atmos/air)
"xsf" = (
-/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/far)
"xsn" = (
@@ -177935,17 +179804,13 @@
/turf/unsimulated/floor/wood,
/area/antag/actor)
"xtc" = (
-/obj/effect/floor_decal/corner_wide/blue{
- dir = 10
- },
-/obj/effect/floor_decal/corner_wide/yellow{
- dir = 5
- },
+/obj/structure/machinery/firealarm/north,
+/obj/effect/floor_decal/industrial/hatch/red,
+/obj/effect/floor_decal/industrial/warning,
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
-/obj/structure/machinery/firealarm/north,
-/turf/simulated/floor/reinforced,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/command/bridge/selfdestruct)
"xtf" = (
/obj/structure/closet/secure_closet/refrigerator/standard,
@@ -177970,8 +179835,11 @@
/turf/simulated/floor/tiled,
/area/horizon/hangar/auxiliary)
"xtj" = (
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/cryo)
"xtu" = (
@@ -178009,8 +179877,9 @@
"xtE" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/railing/mapped{
- dir = 8
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/machinery/light/small{
+ dir = 4
},
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/near)
@@ -178056,6 +179925,7 @@
/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
dir = 1
},
+/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/atmos/storage_maintenance)
"xub" = (
@@ -178073,7 +179943,7 @@
/obj/effect/floor_decal/industrial/hatch_door/engineering{
dir = 1
},
-/turf/simulated/floor/tiled/full,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/atmos/propulsion/starboard)
"xuc" = (
/obj/structure/disposalpipe/trunk{
@@ -178197,9 +180067,6 @@
/obj/structure/cable{
icon_state = "1-4"
},
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
- },
/obj/structure/disposalpipe/segment{
dir = 1;
icon_state = "pipe-c"
@@ -178232,7 +180099,8 @@
dir = 9
},
/obj/structure/machinery/meter,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"xuR" = (
/obj/effect/floor_decal/corner/paleblue{
@@ -178255,6 +180123,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
+/obj/structure/railing/mapped,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/far)
"xuT" = (
@@ -178374,7 +180243,7 @@
/area/centcom/legion)
"xvQ" = (
/obj/item/material/shard,
-/turf/simulated/floor/tiled/dark,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/security/port)
"xvY" = (
/obj/structure/machinery/camera/network/service{
@@ -178387,7 +180256,7 @@
"xwd" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/random/junk,
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/machinery/light/small,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/operations/starboard)
"xwf" = (
@@ -178422,9 +180291,6 @@
/obj/effect/floor_decal/corner/dark_blue{
dir = 5
},
-/obj/structure/machinery/light/small{
- dir = 1
- },
/obj/structure/closet/walllocker/medical/firstaid{
pixel_y = 32
},
@@ -178455,6 +180321,7 @@
/obj/effect/floor_decal/corner/mauve{
dir = 10
},
+/obj/structure/machinery/light/floor,
/turf/simulated/floor/tiled/white,
/area/horizon/rnd/xenoarch/atrium)
"xwU" = (
@@ -178472,7 +180339,7 @@
dir = 4
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/research)
"xxb" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -178488,7 +180355,6 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 4
},
-/obj/structure/machinery/light/small/floor,
/turf/simulated/floor/wood,
/area/horizon/service/cafeteria)
"xxi" = (
@@ -178513,8 +180379,8 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 10
},
-/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"xxu" = (
/turf/simulated/wall,
@@ -178572,8 +180438,10 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"xxC" = (
-/obj/structure/table/rack,
-/obj/random/loot,
+/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"xxE" = (
@@ -178948,6 +180816,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden{
dir = 10
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"xzE" = (
@@ -178971,8 +180840,12 @@
/turf/simulated/floor/tiled/dark,
/area/shuttle/hapt)
"xzK" = (
+/obj/random/junk,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 9
+ },
/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/aft)
+/area/horizon/maintenance/deck_2/wing/starboard/far)
"xzL" = (
/obj/effect/floor_decal/industrial/warning{
dir = 8
@@ -179342,6 +181215,14 @@
},
/turf/simulated/floor/tiled,
/area/horizon/security/hallway)
+"xCH" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/obj/random/dirt_75,
+/obj/random/maintenance_junk_or_loot,
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_2/research)
"xCI" = (
/obj/structure/platform/ledge{
dir = 4
@@ -179431,7 +181312,10 @@
"xDi" = (
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/structure/reagent_dispensers/fueltank,
-/turf/simulated/floor/tiled/dark,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"xDm" = (
/obj/structure/machinery/light{
@@ -179475,7 +181359,7 @@
pixel_y = 24
},
/obj/effect/floor_decal/industrial/warning/full,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/turf/unsimulated/floor/plating,
@@ -179831,10 +181715,12 @@
/turf/simulated/floor/tiled/full,
/area/horizon/command/heads/om)
"xFD" = (
-/obj/structure/railing/mapped,
-/obj/structure/lattice/catwalk/indoor,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/research)
+/area/horizon/maintenance/deck_1/wing/starboard)
"xFJ" = (
/obj/structure/disposalpipe/segment{
icon_state = "pipe-c"
@@ -180204,6 +182090,9 @@
},
/area/horizon/holodeck/source_moghes)
"xIz" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/cryo)
"xIB" = (
@@ -180217,12 +182106,12 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/yellow{
dir = 4
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/interstitial)
"xIF" = (
/obj/effect/floor_decal/industrial/outline/grey,
/obj/structure/machinery/vending/quick_e_meals,
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/cafe)
"xIH" = (
/obj/structure/window/shuttle/scc_space_ship,
@@ -180338,7 +182227,7 @@
dir = 8
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled/dark/cooled,
+/turf/simulated/floor/tiled/dark,
/area/horizon/ai/upload)
"xIY" = (
/obj/structure/bed/stool/chair/office/light{
@@ -180406,7 +182295,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/turf/simulated/floor/plating,
@@ -180428,6 +182317,7 @@
master_tag = "airlock_horizon_deck_1_aft_port_1";
name = "airlock_horizon_deck_1_aft_port_1"
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/auxatmos)
"xJO" = (
@@ -180723,7 +182613,7 @@
/area/horizon/service/cafeteria)
"xLT" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 4
},
/turf/simulated/floor/plating,
@@ -180820,7 +182710,8 @@
/obj/structure/cable{
icon_state = "1-4"
},
-/turf/simulated/floor/tiled,
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/operations/starboard)
"xMC" = (
/obj/effect/floor_decal/industrial/outline_straight/yellow{
@@ -180918,7 +182809,7 @@
req_one_access = list(2,3,4)
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/turf/simulated/floor/tiled/full,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/security/evidence_storage)
"xNh" = (
/obj/effect/floor_decal/industrial/outline/service,
@@ -180950,6 +182841,9 @@
},
/area/horizon/medical/morgue)
"xNk" = (
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
/turf/simulated/floor,
/area/horizon/ai/upload_foyer)
"xNm" = (
@@ -181049,6 +182943,9 @@
/obj/random/dirt_75,
/obj/random/dirt_75,
/obj/random/dirt_75,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 5
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/far)
"xNW" = (
@@ -181212,7 +183109,7 @@
"xPf" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden,
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -181278,6 +183175,11 @@
/obj/structure/machinery/light_switch/west,
/turf/simulated/floor/tiled/white,
/area/horizon/medical/hallway/upper)
+"xPB" = (
+/obj/effect/floor_decal/industrial/warning/corner,
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/reinforced/airless,
+/area/horizon/exterior/no_shields)
"xPC" = (
/turf/simulated/floor/reinforced{
blocks_air = 1;
@@ -181493,8 +183395,8 @@
/area/horizon/engineering/lobby)
"xRs" = (
/obj/structure/machinery/atmospherics/pipe/manifold/visible,
-/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
"xRu" = (
/obj/structure/closet/crate,
@@ -181615,8 +183517,7 @@
dir = 4
},
/obj/structure/railing/mapped,
-/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard/far)
"xSC" = (
/obj/structure/bed/stool/padded/red,
@@ -181657,8 +183558,9 @@
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"xSQ" = (
-/obj/structure/closet/crate/bin,
-/obj/random/med_stack,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/whiteboard/portable,
+/obj/structure/machinery/alarm/north,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/operations/starboard)
"xSV" = (
@@ -181698,7 +183600,10 @@
/obj/structure/sign/securearea{
pixel_y = 32
},
-/turf/simulated/floor,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/aft/port/far)
"xTg" = (
/obj/effect/map_effect/window_spawner/full/reinforced/firedoor,
@@ -181859,7 +183764,8 @@
/turf/simulated/floor/tiled,
/area/horizon/hangar/intrepid/interstitial)
"xTV" = (
-/obj/structure/machinery/light/small/emergency,
+/obj/structure/lattice/catwalk/indoor,
+/obj/structure/machinery/light/small,
/turf/simulated/floor,
/area/horizon/maintenance/substation/civ_d3)
"xTW" = (
@@ -182008,7 +183914,7 @@
/obj/effect/map_effect/door_helper/unres{
dir = 4
},
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/operations/break_room)
"xUR" = (
/obj/structure/closet/secure_closet/guncabinet{
@@ -182027,9 +183933,12 @@
/area/horizon/engineering/hallway/fore)
"xUW" = (
/obj/structure/machinery/alarm/west,
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 8
},
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port)
"xUY" = (
@@ -182061,7 +183970,10 @@
dir = 4
},
/obj/random/maintenance_junk_or_loot,
-/turf/simulated/floor,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 5
+ },
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/far)
"xVj" = (
/obj/structure/machinery/camera/network/research{
@@ -182115,15 +184027,22 @@
/obj/effect/floor_decal/industrial/warning{
dir = 5
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_3/security/port)
+"xVE" = (
+/obj/effect/floor_decal/spline/fancy/wood{
+ dir = 1
+ },
+/obj/structure/machinery/light/small/floor,
+/turf/simulated/floor/wood,
+/area/horizon/service/cafeteria)
"xVO" = (
/obj/effect/floor_decal/industrial/warning{
dir = 5
},
/obj/item/hullbeacon/red,
/turf/simulated/floor/reinforced/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"xVV" = (
/obj/effect/floor_decal/corner/dark_blue{
dir = 8
@@ -182331,7 +184250,7 @@
/obj/effect/map_effect/door_helper/unres{
dir = 8
},
-/turf/simulated/floor,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/holodeck_control/beta)
"xXI" = (
/obj/structure/table/rack,
@@ -182446,7 +184365,7 @@
dir = 4
},
/turf/simulated/open/airless,
-/area/horizon/exterior)
+/area/horizon/exterior/no_shields)
"xYF" = (
/obj/structure/lattice,
/obj/structure/machinery/light{
@@ -182615,7 +184534,8 @@
},
/obj/structure/machinery/light/small,
/obj/random/dirt_75,
-/turf/simulated/floor/tiled/dark,
+/obj/structure/lattice/catwalk/indoor,
+/turf/simulated/floor,
/area/horizon/maintenance/deck_3/auxatmos)
"xZE" = (
/turf/simulated/wall,
@@ -182647,7 +184567,7 @@
"xZR" = (
/obj/structure/closet,
/obj/random/loot,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/port)
"xZU" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -182788,9 +184708,6 @@
/obj/effect/floor_decal/industrial/warning{
dir = 5
},
-/obj/structure/machinery/light{
- dir = 1
- },
/turf/simulated/floor/tiled/dark/full,
/area/turbolift/scc_ship/morgue_lift)
"yaW" = (
@@ -182924,6 +184841,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
+/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"ybZ" = (
@@ -182936,10 +184854,7 @@
/turf/simulated/floor/holofloor/wood,
/area/horizon/holodeck/source_sauna)
"ycp" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
- },
-/turf/simulated/floor/tiled/dark/full,
+/turf/simulated/floor/carpet/rubber,
/area/horizon/engineering/atmos/storage_maintenance)
"ycu" = (
/obj/effect/floor_decal/industrial/warning{
@@ -182969,7 +184884,7 @@
},
/area/shuttle/syndicate_elite)
"ycB" = (
-/obj/structure/machinery/light/small/emergency{
+/obj/structure/machinery/light/small{
dir = 1
},
/turf/simulated/floor/reinforced/airless,
@@ -183209,6 +185124,9 @@
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/simulated/floor/tiled/dark/full,
/area/horizon/shuttle/intrepid/main_compartment)
"yef" = (
@@ -183444,6 +185362,12 @@
/obj/effect/floor_decal/industrial/hatch_door/engineering,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/hallway/aft)
+"yfa" = (
+/obj/structure/machinery/shield_diffuser{
+ pixel_y = 2
+ },
+/turf/simulated/floor/reinforced/airless,
+/area/horizon/exterior/no_shields)
"yfc" = (
/obj/effect/floor_decal/corner/grey/diagonal{
dir = 4
@@ -183661,6 +185585,9 @@
/obj/item/circuitboard/optable,
/obj/item/circuitboard/security/engineering,
/obj/item/circuitboard/grill,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/simulated/floor/carpet/rubber,
/area/horizon/maintenance/deck_1/workshop)
"ygu" = (
@@ -184051,6 +185978,13 @@
/obj/effect/floor_decal/corner/mauve/full,
/turf/simulated/floor/tiled/white,
/area/horizon/rnd/xenobiology)
+"yji" = (
+/obj/random/maintenance_junk_or_loot,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 10
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/maintenance/deck_2/wing/port/far)
"yjj" = (
/obj/effect/floor_decal/spline/plain{
dir = 4
@@ -184067,15 +186001,15 @@
/turf/simulated/floor/grass/no_edge,
/area/horizon/service/hydroponics/lower)
"yjp" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/obj/effect/floor_decal/industrial/warning{
dir = 4
},
-/obj/structure/disposalpipe/segment{
- dir = 4
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/bed/stool/chair/office/dark{
+ dir = 8
},
-/obj/effect/floor_decal/spline/fancy/wood,
-/turf/simulated/floor/wood,
-/area/horizon/service/bar)
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_1/operations/starboard/far)
"yjt" = (
/obj/structure/machinery/portable_atmospherics/canister/oxygen,
/obj/effect/floor_decal/industrial/outline/medical,
@@ -202315,7 +204249,7 @@ swu
swu
ooy
wTz
-dMd
+nOK
ooy
swu
eSV
@@ -203323,7 +205257,7 @@ eSV
eSV
tua
gsg
-kVr
+xXe
xxB
mug
tss
@@ -203585,13 +205519,13 @@ rfC
rfC
tss
jFW
-efI
-efI
-tqS
-tqS
-tqS
-tqS
+qBY
+qBY
tqS
+yjp
+rkL
+rkL
+qBY
efI
xSt
aDC
@@ -203837,7 +205771,7 @@ vQY
wqY
taW
bJk
-jAH
+mEa
jAH
sSA
hnj
@@ -204090,8 +206024,8 @@ mhP
rfC
rfC
rhw
-cXF
-jaK
+jBv
+meP
fpc
vQA
gJW
@@ -204342,13 +206276,13 @@ eSV
eSV
rfC
prG
-jaK
+new
klF
iQp
kVr
-jaK
-jaK
-cXF
+sqS
+jBv
+meP
taW
nkF
kLq
@@ -204599,17 +206533,17 @@ eSV
eSV
tua
oxe
+jBv
+jBv
jaK
-jaK
-jaK
-xqg
+kVr
cXF
sLa
fIn
taW
lNe
tKq
-wsN
+dKI
taW
pYX
sCS
@@ -204856,8 +206790,8 @@ eSV
eSV
tua
oxm
-jaK
-cXF
+jBv
+jBv
meP
taW
taW
@@ -205121,11 +207055,11 @@ bMo
nju
ayn
taW
-vjm
+hCL
gUT
+vRZ
taW
-taW
-ahH
+dzV
wlr
wlr
htA
@@ -205379,10 +207313,10 @@ hFg
hFg
taW
bdv
-bdv
+mfb
taW
-fxq
-dzV
+taW
+ahH
dPK
jxs
yjC
@@ -205634,8 +207568,8 @@ sQE
sQE
ida
hFg
-oxe
-cXF
+jSc
+joO
aBI
taW
wQg
@@ -205892,7 +207826,7 @@ evv
lnz
hFg
kdG
-cXF
+rjd
xqL
jHt
mAe
@@ -206149,10 +208083,10 @@ aoJ
lnz
hFg
jOM
+eCs
cqB
-fvR
jHt
-mAe
+dKI
mcw
wlr
wji
@@ -206405,9 +208339,9 @@ scN
aoJ
lnz
xZm
-oxe
-oGs
-sjz
+vjm
+nXu
+hQt
jHt
mAe
uTy
@@ -206638,8 +208572,8 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
+qLr
+qLr
eTR
tDE
rSL
@@ -206663,8 +208597,8 @@ iZD
lnz
xZm
sTe
-xXe
-xXe
+wMC
+kMN
taW
owI
uKF
@@ -206889,14 +208823,14 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
eTR
tDE
rSL
@@ -207146,15 +209080,15 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-eTR
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+gMA
tDE
rSL
rSL
@@ -207403,14 +209337,14 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
eTR
tDE
rSL
@@ -207655,19 +209589,19 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
eTR
tDE
rSL
@@ -207911,20 +209845,20 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
sRg
tDE
tDE
@@ -207955,13 +209889,13 @@ nfd
lcZ
jxL
uvv
-rHt
-uvv
-afe
+jdo
+fhO
+hCj
kbC
ppE
-rHt
-uvv
+jNs
+gwi
vVL
aOe
jgx
@@ -208168,20 +210102,20 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
eTR
tDE
rSL
@@ -208424,21 +210358,21 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+sRg
+eTR
+eTR
+eTR
+eTR
+eTR
+eTR
+eTR
+eTR
+eTR
sRg
tDE
rSL
@@ -208681,12 +210615,12 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+eTR
qyQ
tDE
tDE
@@ -208733,7 +210667,7 @@ uOT
uOT
tJW
qHn
-hWT
+gqp
hWT
jgx
bzL
@@ -208937,13 +210871,13 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+eTR
tDE
tJJ
tJJ
@@ -208976,7 +210910,7 @@ nNk
dmm
hFg
plB
-rHt
+xFD
tJW
dIe
sxl
@@ -209193,14 +211127,14 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+gMA
tDE
qlh
hOu
@@ -209449,14 +211383,14 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
oMe
iWT
iWT
@@ -209706,14 +211640,14 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
oMe
xPC
xPC
@@ -209747,7 +211681,7 @@ wbG
nad
nid
uCN
-akV
+aCt
tJW
hQh
avE
@@ -209963,14 +211897,14 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
jLM
xPC
rkZ
@@ -210002,7 +211936,7 @@ vht
uUo
mwG
nad
-dUZ
+woF
hjs
woF
tJW
@@ -210220,14 +212154,14 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
oMe
xPC
xPC
@@ -210477,14 +212411,14 @@ eSV
eSV
eSV
iUQ
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
oMe
jOq
jOq
@@ -210513,8 +212447,8 @@ huR
idV
diA
qGr
-rMc
gWV
+wsN
quK
rXL
opl
@@ -210734,13 +212668,13 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
oMe
iWT
iWT
@@ -210991,13 +212925,13 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
oMe
xPC
xPC
@@ -211248,13 +213182,13 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
uui
xPC
rkZ
@@ -211294,9 +213228,9 @@ gRK
xnE
nXe
iFI
-gou
+nxU
+oUx
vrJ
-gou
san
bGJ
vBR
@@ -211505,13 +213439,13 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
oMe
xPC
xPC
@@ -211550,12 +213484,12 @@ lTB
gRK
iDV
nFZ
-gou
-gou
+iTN
+lKW
gKz
dta
pyo
-gou
+lme
rvf
ecj
gRK
@@ -211761,14 +213695,14 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
oMe
jOq
jOq
@@ -211806,14 +213740,14 @@ wtJ
lTB
gRK
xSQ
-jbx
-gou
-gou
-gou
-pws
+aCR
+moG
+nwM
+pAe
+hWT
sIk
-lKW
-lKW
+hWT
+hWT
sgF
uEI
hWT
@@ -212019,14 +213953,14 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
oMe
iWT
iWT
@@ -212063,8 +213997,8 @@ hrS
avG
gRK
dTn
-jbx
-gou
+iTN
+wwN
lKW
gou
fta
@@ -212276,14 +214210,14 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
oMe
xPC
xPC
@@ -212317,17 +214251,17 @@ ygr
meB
mUv
uCN
-akV
+aCt
gRK
kll
-vrJ
+euC
mMO
-vrJ
+tvn
dsf
iYO
xMz
rUY
-vrJ
+eFv
fSb
wZA
beE
@@ -212533,14 +214467,14 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
iXn
xPC
rkZ
@@ -212572,7 +214506,7 @@ pWo
meB
meB
meB
-jTM
+gDu
bHz
gDu
gRK
@@ -212790,14 +214724,14 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
oMe
xPC
xPC
@@ -212828,11 +214762,11 @@ xMp
vGz
aCt
ssf
-qLQ
-pkJ
+tbR
+coT
uCN
-aCt
-sae
+nsQ
+vDf
sae
qLQ
ssf
@@ -213047,14 +214981,14 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
oMe
oMe
jOq
@@ -213099,7 +215033,7 @@ lJn
jQA
dyx
uJc
-pzV
+ttN
wZA
dFP
jhe
@@ -213304,16 +215238,16 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
tJJ
tJJ
szc
@@ -213561,17 +215495,17 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
tJJ
tJJ
tJJ
@@ -213818,17 +215752,17 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
kEc
kEc
etP
@@ -213843,10 +215777,10 @@ hPJ
lKF
cbM
gHe
-cBy
+gHe
wVl
wdd
-cBy
+gHe
ieG
oXm
lKo
@@ -213855,7 +215789,7 @@ iBP
dYV
kYZ
lKo
-eYo
+qqP
bGo
fFU
wXy
@@ -214075,16 +216009,16 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
wXz
wZw
tHL
@@ -214333,16 +216267,16 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
kEc
ssy
etP
@@ -214356,7 +216290,7 @@ ahB
saD
bAv
cRS
-moN
+dMd
moN
lTV
lTV
@@ -214372,7 +216306,7 @@ lKo
bni
pAa
liX
-qfa
+std
lQd
lQd
lQd
@@ -214591,15 +216525,15 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
tDt
nPJ
lIN
@@ -214849,14 +216783,14 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
jSo
goe
tfG
@@ -214883,7 +216817,7 @@ mbO
mwx
chZ
lKo
-wcB
+qqP
ndG
hGt
hGt
@@ -215106,14 +217040,14 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
jSo
dJk
rGz
@@ -215140,7 +217074,7 @@ lKo
unM
lKo
lKo
-okz
+qqP
sqM
hGt
ozx
@@ -215363,13 +217297,13 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
owU
kEc
kEc
@@ -215620,12 +217554,12 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
+qLr
oBv
frp
rhP
@@ -215655,7 +217589,7 @@ hie
jvh
lKo
vIR
-cPd
+nUL
hGt
cbH
dnK
@@ -215664,7 +217598,7 @@ klH
fOM
hGt
lsX
-aPJ
+esN
qwi
nRa
lbj
@@ -215878,11 +217812,11 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
eTR
swu
wCk
@@ -215912,7 +217846,7 @@ rzj
mHI
lKo
eXT
-jdo
+nUL
hGt
irM
gIh
@@ -216135,11 +218069,11 @@ eSV
eSV
eSV
eSV
-rSL
-rSL
-rSL
-rSL
-rSL
+qLr
+qLr
+qLr
+qLr
+qLr
eTR
rSL
pFF
@@ -216426,7 +218360,7 @@ pcn
det
lKo
ifu
-gTF
+nUL
hGt
hGt
iKv
@@ -216692,7 +218626,7 @@ iNk
iNk
iNk
aAX
-aAX
+jqg
qwi
qwi
ieR
@@ -216941,7 +218875,7 @@ pdw
tVN
sJO
sJO
-sJO
+wTA
sJO
cyD
koZ
@@ -217243,7 +219177,7 @@ wGg
dAO
ixB
esA
-esA
+fUs
fUs
iJG
fdt
@@ -217455,7 +219389,7 @@ kBl
jwp
ooP
kST
-oWD
+obv
oWD
cyD
woc
@@ -217489,7 +219423,7 @@ hdc
bPS
uVW
nxM
-yed
+lJz
dwn
oEP
dwn
@@ -221829,7 +223763,7 @@ jRR
fpH
uxc
sio
-djZ
+vZK
vYZ
oeT
sxb
@@ -222086,7 +224020,7 @@ owQ
ahU
sBT
sQy
-vZK
+djZ
vYZ
oeT
nEo
@@ -222600,7 +224534,7 @@ owQ
ahU
tEX
gXz
-vts
+bxY
vYZ
oeT
uIj
@@ -222857,7 +224791,7 @@ owQ
ahU
pPQ
dpe
-vts
+pPQ
vYZ
hTy
hTy
@@ -223112,14 +225046,14 @@ uGV
uGV
lZy
ahU
-tEX
+dOk
vgh
rpV
hmM
-blI
+iqK
uku
esc
-rpV
+gel
gBg
xgH
qEr
@@ -223863,7 +225797,7 @@ iHh
iHh
hgK
qGq
-lzd
+bjj
aus
umn
jwD
@@ -224142,7 +226076,7 @@ cVG
xzl
mbV
rtS
-vts
+vti
eFV
onW
nLE
@@ -224639,7 +226573,7 @@ aus
bti
kYw
mha
-lzd
+xxb
eMv
nHV
nLo
@@ -224650,7 +226584,7 @@ nLo
nHV
qiR
yfU
-amR
+gxi
coJ
cVG
oDt
@@ -224941,7 +226875,7 @@ tzF
ggJ
ggJ
ggJ
-ggJ
+eBH
rNG
qCn
bdZ
@@ -225455,7 +227389,7 @@ bbj
jFo
jFo
gNE
-gNE
+ltn
gNE
gNE
gNE
@@ -226983,7 +228917,7 @@ oRJ
eLF
jVV
dHs
-bBk
+jMp
eEw
ktX
wIE
@@ -227989,10 +229923,10 @@ dfr
oDa
lHu
dfr
-sRg
-rEc
-fLP
-jMM
+xNA
+fvR
+bgD
+gxi
dok
dok
dok
@@ -228024,8 +229958,8 @@ caC
lnO
bhl
bhl
-lnO
rWr
+lnW
bdZ
bdZ
bdZ
@@ -228246,10 +230180,10 @@ aJU
aJU
aJU
xkJ
-sRg
-rEc
-bgD
-kMN
+xNA
+dYE
+sha
+gxi
dok
bJR
eJj
@@ -228281,7 +230215,7 @@ iBn
xie
iBn
hrU
-iBn
+bSs
swm
eTt
xth
@@ -228503,9 +230437,9 @@ aJU
aJU
aJU
lHu
-sRg
-rEc
-fLP
+xNA
+xNA
+xNA
woP
dok
oZQ
@@ -228760,10 +230694,10 @@ aJU
aJU
aJU
xkJ
-sRg
+xNA
rEc
-bgD
-fLP
+hMn
+gxi
dok
uBS
vrM
@@ -229017,10 +230951,10 @@ aJU
aJU
aJU
lHu
-sRg
-rEc
-bgD
+xNA
+fgy
bgD
+gxi
dok
dok
dok
@@ -229042,7 +230976,7 @@ upf
lgr
lgr
fVa
-jUl
+rBO
scr
njf
xZg
@@ -229274,8 +231208,8 @@ aJU
aJU
aJU
xkJ
-sRg
-sRg
+xNA
+xNA
xNA
xNA
gLM
@@ -233411,7 +235345,7 @@ eSV
eSV
eSV
xDX
-jNs
+kgm
jpS
vsr
eSV
@@ -264491,7 +266425,7 @@ sSL
mvX
fjk
sSp
-usI
+sSL
sSL
okw
bGR
@@ -264500,14 +266434,14 @@ okw
laV
sDE
fqa
-sDE
+naT
sDE
sDE
jnC
sDE
fqa
siH
-vti
+sDE
fQP
aef
urY
@@ -264748,7 +266682,7 @@ lqt
oRC
bsJ
kti
-oRC
+kti
kzy
okw
uDy
@@ -264761,12 +266695,12 @@ ncE
jGV
lWb
gGL
-qgf
+gfP
fjk
kvT
qjG
fjk
-kiI
+qjh
lHQ
mzX
fjk
@@ -265003,10 +266937,10 @@ wSb
xPN
iNQ
syu
-rSV
+srI
gMP
-kti
-kti
+srI
+srI
xid
peq
lFZ
@@ -265014,7 +266948,7 @@ okw
mCO
tkj
fjk
-xxC
+srI
nNG
haz
cJN
@@ -265023,7 +266957,7 @@ fjk
iWn
hCI
qqm
-aPd
+kiI
lHQ
qjH
fjk
@@ -265259,11 +267193,11 @@ eSV
tYz
rPj
sSL
-mvX
-kti
-kti
+lFe
+srI
+lCc
hDV
-qgf
+xxC
okw
oxM
xrs
@@ -265272,15 +267206,15 @@ baX
uUa
qem
srI
-qjG
-qjG
+uTo
+haz
tOX
srI
qem
-nED
-srI
+kvT
+lUN
vBe
-iuG
+kiI
lHQ
jTy
fjk
@@ -265519,7 +267453,7 @@ fjk
fjk
tfB
fjk
-ixJ
+fjk
fjk
okw
okw
@@ -265774,9 +267708,9 @@ aHz
fjk
tWX
nWa
-kti
+srI
tYc
-pnw
+jUn
lgY
jUn
nUl
@@ -265791,10 +267725,10 @@ wnP
aMt
kZc
srI
-nED
+kvT
klY
fjk
-nED
+kvT
qfP
fjk
fjk
@@ -266030,17 +267964,17 @@ tYz
jQD
fjk
sSp
-kti
+uZR
rSV
ybU
-bsJ
+xzK
fjk
sMp
+fQq
+fQq
+pOa
qgf
-qgf
-vMb
-qgf
-qgf
+fQq
fRc
rWx
ffJ
@@ -266308,8 +268242,8 @@ lik
qWj
sbt
eNL
-iuG
-qjG
+kiI
+pws
efY
ucz
fjk
@@ -266547,7 +268481,7 @@ cxh
gIJ
iWj
jmf
-jNB
+wcB
hwV
epZ
oly
@@ -266802,9 +268736,9 @@ fJX
fJX
tim
byC
-gAs
+jNB
vkO
-tDL
+jNB
tfU
pGJ
mKw
@@ -267057,11 +268991,11 @@ rZc
lkX
fJX
wYS
-iWj
+jNB
sam
qog
sdl
-pEd
+qHG
bSi
wjs
mEQ
@@ -267314,10 +269248,10 @@ xnV
njK
fJX
mYY
-pEd
+qec
kov
wrk
-pOa
+vkO
sDi
hwV
qJo
@@ -267570,10 +269504,10 @@ tYz
mHE
fJX
fJX
-iWj
+rqX
+fJX
fJX
fJX
-jNB
sdl
qvA
bSi
@@ -267827,10 +269761,10 @@ rZc
kiT
rir
deU
-iWj
+gog
fJX
-gLE
-jNB
+swW
+tgl
sdl
kRU
bSi
@@ -268084,7 +270018,7 @@ xnV
fJX
bjK
gNJ
-rDN
+cPd
eQA
rDN
mjM
@@ -268341,9 +270275,9 @@ bnZ
fJX
lNC
esh
-pEd
-gqp
-tDL
+cfP
+fJX
+pGF
dvt
hcp
peN
@@ -268598,9 +270532,9 @@ blA
fJX
snE
esh
-pEd
-gqp
-pEd
+cfP
+fJX
+mor
fke
kJG
gLE
@@ -268863,16 +270797,16 @@ uIt
wat
tfU
mZz
-wxe
-gla
-gla
-gla
+mZz
+mZz
+mZz
+mZz
aUO
wxe
loS
wij
oXf
-moG
+oXf
eXH
jgu
aNy
@@ -269109,7 +271043,7 @@ eSV
tYz
mHE
kzH
-vnD
+xqg
lQN
vnD
lXk
@@ -269117,11 +271051,11 @@ fJX
fJX
bvs
dFA
-pEd
+ufx
fJX
jRb
cnn
-wxe
+vcp
pfo
vYo
vBL
@@ -269366,9 +271300,9 @@ eSV
rZc
kiT
btW
-pEd
-tlD
pFs
+tlD
+btW
baC
baC
fJX
@@ -270393,15 +272327,15 @@ tHf
exF
xqu
pEd
-pFs
+btW
fJX
fJX
fJX
fJX
fJX
fpW
-wjV
-gqp
+eIx
+nHy
kEI
fJX
rPD
@@ -271429,7 +273363,7 @@ qyO
bnl
hLU
kDz
-jkr
+bzM
jkr
jkr
pyM
@@ -271679,7 +273613,7 @@ nXR
iPo
pYS
jOd
-oJM
+pZu
gFm
kdu
uWf
@@ -271688,7 +273622,7 @@ oaF
oaF
oaF
oaF
-uTo
+gun
nez
rdJ
dod
@@ -271937,14 +273871,14 @@ dUK
ppk
rsr
jqe
-oJM
+pnw
nbn
jWI
sjO
bzr
pTG
uyE
-cFn
+uyE
hNb
nLu
nwj
@@ -272193,7 +274127,7 @@ ppk
ppk
ppk
sdp
-sdp
+rOO
bVg
akk
aCW
@@ -272201,8 +274135,8 @@ sjO
bzr
svM
pTG
-ufx
-eBH
+pTG
+hNb
vaL
nwj
qNa
@@ -272227,7 +274161,7 @@ dhN
dhN
dhN
dhN
-fUl
+ihL
uHG
aaw
dEI
@@ -272974,7 +274908,7 @@ sON
ltE
dUV
khW
-ebm
+ewG
nwj
vwY
eTz
@@ -273247,7 +275181,7 @@ tWP
cxb
cxb
jdq
-aFJ
+tTJ
chu
tWP
tNC
@@ -273495,10 +275429,10 @@ cgw
hvn
iBh
iBh
+cFn
+iBh
+iBh
iBh
-dBq
-oJM
-oJM
oMH
tWP
vOb
@@ -273740,20 +275674,20 @@ eNf
oGM
sWx
cVF
-sWx
+tDV
utL
jCu
kvH
ape
nGt
dzZ
-ape
+xtE
mBL
-euC
+ape
+ape
xtE
-xtE
-dYE
-bcf
+ape
+ape
yki
pan
qVv
@@ -274513,7 +276447,7 @@ fRB
ykj
aEs
leL
-oZN
+kEE
qgh
rmS
ipa
@@ -274744,7 +276678,7 @@ dBi
lTn
cXW
lTn
-lTn
+dBi
lTn
lTn
xHQ
@@ -274782,7 +276716,7 @@ rmS
yaR
caI
gOt
-prj
+lss
rPd
nUu
vmb
@@ -276312,7 +278246,7 @@ jwC
fpR
fpR
fQk
-lUN
+rjI
dXe
ygJ
ygJ
@@ -277083,8 +279017,8 @@ unC
qiC
fpR
rFQ
-oZN
-iJq
+pzV
+aio
ygJ
tAr
kqK
@@ -277336,7 +279270,7 @@ gDn
pbP
tWW
tDd
-tvn
+unC
qiC
fpR
rFQ
@@ -277854,7 +279788,7 @@ oZN
uga
uga
mfn
-teO
+nti
hdD
fXk
bWj
@@ -278368,7 +280302,7 @@ jGr
xGE
fpR
rFQ
-teO
+oGs
aio
xlm
aUI
@@ -279396,7 +281330,7 @@ pPE
stI
kfX
qaV
-tcA
+aio
xlm
xlm
uwk
@@ -279652,7 +281586,7 @@ bim
bSB
whQ
mCw
-jur
+gTF
iZk
xlm
xlm
@@ -279688,7 +281622,7 @@ nku
msU
qVW
gGT
-mvt
+qVW
kYT
fhz
rfq
@@ -279908,7 +281842,7 @@ udq
tqs
bSB
xVm
-teO
+aSC
jur
nLs
koc
@@ -279953,10 +281887,10 @@ vlf
gyf
sAM
wwp
-qBY
vNU
+fNn
fqF
-yjp
+eGN
stz
fui
jrl
@@ -280165,7 +282099,7 @@ gTR
hIU
xeI
whQ
-oZN
+mCw
eTx
aIT
koc
@@ -280213,11 +282147,11 @@ hQe
ezA
ofw
ozK
-iVG
+eGN
moS
fui
jrl
-sdI
+mEk
tnA
crQ
tUB
@@ -280937,7 +282871,7 @@ tqs
bSB
whQ
jzS
-ekN
+qTS
jdZ
qTS
jEE
@@ -281176,7 +283110,7 @@ cSv
bHl
cwA
ksO
-mHM
+iGQ
aSM
oqf
lyi
@@ -281965,8 +283899,8 @@ qEQ
nIl
stI
stI
+jTM
tHu
-coT
xIz
xtj
jHa
@@ -282205,7 +284139,7 @@ egn
jxA
sRp
wUd
-wUd
+dFV
bVJ
wUd
rBX
@@ -282219,7 +284153,7 @@ iUf
aFt
nYs
uef
-bSB
+bWK
fKx
stI
stI
@@ -282527,7 +284461,7 @@ iGf
oiD
pqM
wwv
-rxQ
+qQf
fje
wFI
wFI
@@ -282736,10 +284670,10 @@ vKz
dwE
lGs
ujA
-lGs
+hgJ
dwE
upO
-bSB
+fxq
gvf
stI
oaA
@@ -282988,10 +284922,10 @@ dLd
tlL
gOK
lNY
-lql
+utO
wWv
djb
-utO
+lql
uFY
lql
lql
@@ -283765,8 +285699,8 @@ bLv
bLv
bLv
ecg
-rkL
-nLp
+umG
+mvt
ikp
gst
kBx
@@ -284022,10 +285956,10 @@ bLv
bLv
bLv
ecg
-rkL
qCx
+pTN
xrf
-gst
+edn
mlB
pQd
pwm
@@ -284279,8 +286213,8 @@ bLv
bLv
bLv
ecg
-rkL
-lJz
+umG
+nLp
qRi
rCg
iAR
@@ -286328,7 +288262,7 @@ iNU
enb
uWn
nJg
-vxx
+rMc
vxx
lbd
dpx
@@ -286370,7 +288304,7 @@ oGh
kwI
aoE
aoE
-yfn
+jaF
leN
nBM
pxy
@@ -287093,8 +289027,8 @@ wuX
dHB
aTV
ycp
-aTV
-aTV
+ycp
+ycp
hzs
vwP
ycF
@@ -287367,7 +289301,7 @@ cwK
ceN
nKX
vQS
-nqF
+rTg
fnk
qtl
cyZ
@@ -287624,7 +289558,7 @@ xMb
xRv
hQo
dZD
-nqF
+rTg
fnk
ovK
cyZ
@@ -287861,12 +289795,12 @@ epn
uOD
jOO
vDb
-xzK
+jOO
rST
-xzK
+jOO
faM
vnP
-ata
+jOO
jBy
qmF
fHs
@@ -287882,8 +289816,8 @@ nqF
ydZ
nqF
nqF
-fnk
-ovK
+paQ
+qgE
cyZ
ufu
hNT
@@ -288118,7 +290052,7 @@ jiy
dzv
jOO
ufs
-rTp
+qCy
vnP
dYY
dYY
@@ -288376,7 +290310,7 @@ uOD
jOO
pRY
ubX
-rTp
+qCy
dYY
oOR
lzQ
@@ -288397,11 +290331,11 @@ tmk
rJl
pAT
fnk
-qgE
+ovK
cyZ
goa
dkb
-bAg
+bdp
qKU
cyZ
mwl
@@ -288633,7 +290567,7 @@ dsL
aIU
pRY
tgg
-rTp
+qCy
dYY
pUg
hxH
@@ -288887,7 +290821,7 @@ bqw
ovm
cqF
jOO
-qec
+jOO
pRY
oTH
qCy
@@ -288911,7 +290845,7 @@ nXc
uGo
uGo
dVf
-ovK
+qgE
cyZ
dtb
jqj
@@ -289142,7 +291076,7 @@ oUm
dOx
qJs
ovm
-ubX
+ixJ
jOO
yak
pRY
@@ -289401,7 +291335,7 @@ ovm
ovm
oep
jOO
-wMC
+jOO
afY
afY
afY
@@ -289658,7 +291592,7 @@ ovm
tAI
tAI
tAI
-jOO
+nmJ
afY
hoc
xRV
@@ -290463,7 +292397,7 @@ pCI
oaL
hKx
apM
-lkG
+xCH
hCQ
hCQ
hCQ
@@ -291209,7 +293143,7 @@ twH
uXi
cwC
gbF
-gbF
+qcY
eMG
gbF
eRe
@@ -292252,7 +294186,7 @@ hfB
tuY
gGK
pfE
-qgE
+ovK
neT
jCF
gwn
@@ -292265,7 +294199,7 @@ jyQ
wGF
qTu
bJf
-fwI
+aPd
abh
efg
gos
@@ -292507,9 +294441,9 @@ cfm
cfm
cfm
tuY
-dQA
+paQ
rlz
-bjl
+qgE
neT
jCF
jCF
@@ -292758,15 +294692,15 @@ rrx
nRV
uJH
vZd
-xFD
+rim
cfm
cfm
cfm
cfm
tfn
-gBd
-qmR
-ovK
+czN
+eLe
+gUK
tuV
jCF
gwn
@@ -292778,7 +294712,7 @@ mFY
rmO
mso
qTu
-iHT
+wjV
iaC
fqG
fTe
@@ -293786,7 +295720,7 @@ jVY
kXk
eXV
kRy
-czN
+rim
rIA
gwn
gwn
@@ -294043,15 +295977,15 @@ kdc
xFe
eXV
lVs
-czN
+rim
rIA
gwn
gwn
gwn
neT
paQ
-qmR
-ovK
+okz
+qgE
ohz
ohz
moM
@@ -294300,14 +296234,14 @@ jgB
rkM
eXV
tXc
-czN
+rim
rIA
gwn
gwn
gwn
neT
fnk
-qmR
+okz
ovK
mFY
qcM
@@ -294574,13 +296508,13 @@ pnP
hpD
hvc
kmb
-ozc
+usI
rKb
taE
taE
bqZ
tXd
-ash
+dQA
fTe
xtB
nXi
@@ -294837,7 +296771,7 @@ twJ
hPT
bqZ
sKU
-ncB
+ggG
fTe
gsR
fFV
@@ -295094,7 +297028,7 @@ sUE
fwI
laK
tXd
-oMW
+kCc
fTe
meW
mbR
@@ -295608,7 +297542,7 @@ fpo
hdM
bqZ
tXd
-fwI
+dLS
sxD
fTe
fTe
@@ -295865,7 +297799,7 @@ gll
ncB
bqZ
mfu
-fwI
+dLS
lkJ
qTu
oHF
@@ -296122,7 +298056,7 @@ ash
jGx
bqZ
tXd
-iaC
+fxg
qTu
qTu
kBv
@@ -296383,7 +298317,7 @@ qTu
qTu
vgA
llu
-iey
+clc
vTm
kWK
obe
@@ -296635,12 +298569,12 @@ rzi
qYc
pnk
eAZ
-uZR
-iey
+ass
+bEr
xUW
-iey
-iey
-llu
+sDx
+sDx
+iVb
nSn
xnT
qHe
@@ -296892,12 +298826,12 @@ rzi
xqI
alf
bGw
-nBW
-iey
-iey
-llu
-iey
-iey
+ass
+ass
+ass
+tcA
+ass
+ass
tlN
hNn
xXl
@@ -297146,16 +299080,16 @@ eDy
qvd
lAg
rzi
-iey
-iey
nSn
-nBW
-iey
-iey
+nSn
+elV
+agT
+ass
+ata
nfe
-xqI
-iey
-iey
+gAs
+hNu
+hNu
cTn
lgd
rzi
@@ -297406,8 +299340,8 @@ rzi
xqI
nBW
iey
-nSn
-iey
+clc
+ass
xqI
cYQ
eRy
@@ -297921,7 +299855,7 @@ rzi
rzi
rzi
rzi
-iey
+ass
iQH
rzi
vHq
@@ -298154,7 +300088,7 @@ mGC
dZt
qBg
bce
-bvp
+kmv
bvp
vbn
uwY
@@ -298412,7 +300346,7 @@ htU
sWD
eXV
cOz
-sHs
+sxQ
bri
uwY
dQT
@@ -298669,7 +300603,7 @@ rlk
kpN
kpN
jPS
-ipQ
+icR
bvp
uwY
hAg
@@ -298683,7 +300617,7 @@ boy
egy
nsw
uwY
-pAV
+cVh
oom
wZE
wec
@@ -298940,12 +300874,12 @@ rjR
rGZ
itL
uwY
-pAV
+cVh
dCz
-cdm
-cdm
-xsf
-cdm
+lZu
+iuG
+cBy
+iuG
aMX
aMX
aMX
@@ -299200,9 +301134,9 @@ uwY
eVJ
fEm
xsf
-ipQ
-sHs
-sHs
+iJq
+iJq
+iJq
aMX
hqr
bMK
@@ -299453,19 +301387,19 @@ uwY
mEd
hql
uwY
-pAV
+dUZ
wTw
cuO
xNU
bxI
-sHs
-ihk
+eYo
+sjz
aMX
pGi
vtv
-ihk
-pMv
-ihk
+bvp
+uiM
+cdm
rwq
piA
bWZ
@@ -299697,7 +301631,7 @@ eTS
sBe
aMX
ihk
-ihk
+amR
aQm
acr
rIU
@@ -299715,12 +301649,12 @@ oYa
wSF
vON
uDg
-ihk
-ihk
+aSk
+aSk
aGt
-ihk
-ihk
-sHs
+bvp
+bvp
+bvp
uiM
ipQ
ipQ
@@ -299954,7 +301888,7 @@ qJp
bTv
aMX
pAV
-pAV
+bcf
bvp
uwY
mOQ
@@ -299967,10 +301901,10 @@ uwY
oHl
aGL
uwY
-pAV
-ihk
+qdE
+wzp
oMt
-aMX
+iZX
lad
hGA
rjn
@@ -300225,7 +302159,7 @@ uwY
uwY
uwY
kpN
-cdm
+qLX
xuS
aOa
doU
@@ -300233,7 +302167,7 @@ jXE
bsd
jOh
vwJ
-aSk
+gda
aSk
aIW
aMX
@@ -300488,7 +302422,7 @@ nfw
ldZ
oOz
okF
-std
+aSk
aSk
aSk
kIR
@@ -300731,15 +302665,15 @@ iml
ssr
lYo
pxO
-cdm
+bvp
kpN
qKF
-ihk
-pAV
-pAV
+ffQ
+lzd
+lzd
gnX
kpN
-xsf
+yji
oBu
lJr
wbs
@@ -301002,7 +302936,7 @@ kOu
kOu
kOu
kOu
-std
+aSk
xVh
aMX
sYx
@@ -301253,14 +303187,14 @@ evC
evC
evC
sKD
-qLX
+veP
cFr
veP
dWf
uJT
kOu
hEh
-eLe
+ekP
pAr
akB
ntb
@@ -301506,13 +303440,13 @@ aMX
sKD
sKD
sKD
-evC
-evC
-evC
+sKD
+sKD
+sKD
sKD
qnV
-nwM
-lwq
+bBm
+hnP
exE
xgc
kOu
@@ -301760,17 +303694,17 @@ qwo
bBm
bUr
bBm
+nED
bUr
-bUr
-sKD
-sKD
-sKD
-sKD
+hnP
+bBm
+sYd
+obs
sKD
axx
rVl
bvV
-mxY
+bjl
dqM
kOu
jrL
@@ -302021,17 +303955,17 @@ hnP
ssK
hDX
hDX
-ewG
-lFe
+hDX
+hDX
suc
-gfP
+hDX
qDP
lpw
uPG
-kmv
-kmv
pXR
-ffQ
+pXR
+pXR
+pXR
aeY
eZR
jZH
@@ -302279,11 +304213,11 @@ swi
hnP
bBm
sGd
-bBm
+hnP
kOu
huQ
aAl
-sGd
+rTp
bXN
rSt
rSt
@@ -302291,8 +304225,8 @@ iMi
tKz
rFk
dyP
-jSj
-eZR
+bBm
+bBm
eZC
gwI
gwI
@@ -302549,7 +304483,7 @@ gKj
dHQ
qzR
dKr
-fQq
+bBm
vQV
het
het
@@ -328220,47 +330154,47 @@ eSV
eSV
eSV
eSV
-iJX
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-hoE
+wAf
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+sLF
eSV
eSV
eSV
@@ -328476,49 +330410,49 @@ eSV
eSV
eSV
eSV
-iJX
-gFJ
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-tGt
-hoE
+wAf
+psu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+hbQ
+sLF
eSV
eSV
eSV
@@ -328733,49 +330667,49 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -328990,49 +330924,49 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -329247,49 +331181,49 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -329504,49 +331438,49 @@ eSV
eSV
eSV
eSV
-sIA
+jXG
ryE
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-pWB
-lEF
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+hZl
+fmW
eSV
eSV
eSV
@@ -329762,47 +331696,47 @@ eSV
eSV
eSV
eSV
-sIA
-hCm
-hCm
+jXG
+lpj
+lpj
ryE
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-pWB
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-lEF
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+hZl
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+fmW
eSV
eSV
eSV
@@ -330022,34 +331956,34 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -330279,34 +332213,34 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -330535,36 +332469,36 @@ eSV
eSV
eSV
eSV
-iJX
-gFJ
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-tGt
-hoE
+wAf
+psu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+hbQ
+sLF
eSV
eSV
eSV
@@ -330792,36 +332726,36 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -331049,37 +332983,37 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-tGt
-hoE
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+hbQ
+sLF
eSV
eSV
eSV
@@ -331305,38 +333239,38 @@ eSV
eSV
eSV
eSV
-iJX
-gFJ
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+wAf
+psu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -331562,39 +333496,39 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-tGt
-hoE
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+hbQ
+sLF
eSV
eSV
eSV
@@ -331819,39 +333753,39 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -332075,41 +334009,41 @@ eSV
eSV
eSV
eSV
-iJX
-gFJ
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-tGt
-hoE
+wAf
+psu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+hbQ
+sLF
eSV
eSV
eSV
@@ -332332,48 +334266,48 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-tGt
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-hoE
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+hbQ
+icV
+icV
+icV
+icV
+icV
+icV
+sLF
eSV
eSV
eSV
@@ -332589,50 +334523,50 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-tGt
-dbd
-hoE
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+hbQ
+icV
+sLF
eSV
eSV
eSV
@@ -332845,51 +334779,51 @@ eSV
eSV
eSV
eSV
-iJX
-gFJ
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+wAf
+psu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
eYq
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -333102,51 +335036,51 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-pWB
-hCm
-lEF
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+hZl
+lpj
+fmW
eSV
eSV
eSV
@@ -333359,49 +335293,49 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
gSa
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
wWR
eSV
eSV
@@ -333615,50 +335549,50 @@ eSV
eSV
eSV
eSV
-iJX
-gFJ
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+wAf
+psu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
gSa
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
eYq
-cKu
-uYQ
+vfC
+aGc
xKG
eSV
eSV
@@ -333872,50 +335806,50 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -334129,49 +336063,49 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
eYq
-cKu
-cKu
+vfC
+vfC
eYq
gSa
-cKu
+vfC
eYq
hig
oJZ
iyb
hig
eYq
-cKu
+vfC
gSa
eYq
-cKu
-cKu
+vfC
+vfC
quS
eSV
eSV
@@ -334385,51 +336319,51 @@ eSV
eSV
eSV
eSV
-iJX
-gFJ
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+wAf
+psu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
asF
bWN
uHE
hig
-cKu
-cKu
-cKu
-cKu
-pWB
-hCm
-lEF
+vfC
+vfC
+vfC
+vfC
+hZl
+lpj
+fmW
eSV
eSV
eSV
@@ -334642,49 +336576,49 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
hig
wQk
mRO
asF
-cKu
-cKu
-cKu
-cKu
-uYQ
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -334899,49 +336833,49 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
cOn
-cKu
-cKu
+vfC
+vfC
hig
gFS
byp
hig
-cKu
-cKu
+vfC
+vfC
gSa
-cKu
-uYQ
+vfC
+aGc
eSV
eSV
eSV
@@ -335155,38 +337089,38 @@ eSV
eSV
eSV
eSV
-iJX
-gFJ
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+wAf
+psu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
hig
oMr
oMr
@@ -335194,12 +337128,12 @@ hig
uXb
fXe
hig
-cKu
-cKu
-cKu
-cKu
-tGt
-hoE
+vfC
+vfC
+vfC
+vfC
+hbQ
+sLF
eSV
eSV
eSV
@@ -335412,38 +337346,38 @@ eSV
eSV
wWR
wWR
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
gHu
axa
mdM
@@ -335451,12 +337385,12 @@ ukD
jkv
bot
hig
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -335669,38 +337603,38 @@ wWR
wWR
wWR
wWR
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
sZh
cCR
obF
@@ -335708,13 +337642,13 @@ fmt
pJn
rDZ
hig
-cKu
-cKu
+vfC
+vfC
lTN
-cKu
-cKu
-tGt
-hoE
+vfC
+vfC
+hbQ
+sLF
eSV
eSV
eSV
@@ -335925,39 +337859,39 @@ wWR
wWR
wWR
wWR
-iJX
-gFJ
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+wAf
+psu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
hig
hig
hig
@@ -335968,10 +337902,10 @@ hig
oMr
oMr
hig
-cKu
-cKu
-cKu
-uYQ
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -336182,42 +338116,42 @@ wWR
wWR
wWR
wWR
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
cOn
-cKu
-cKu
+vfC
+vfC
hig
qot
uzq
@@ -336225,11 +338159,11 @@ djB
akl
lhM
kfy
-cKu
-cKu
-cKu
-cKu
-hoE
+vfC
+vfC
+vfC
+hbQ
+sLF
eSV
eSV
eSV
@@ -336439,42 +338373,42 @@ wWR
wWR
wWR
wWR
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
asF
isA
ffD
@@ -336482,11 +338416,11 @@ mZu
shA
uXp
ccS
-cKu
-cKu
-cKu
-cKu
-uYQ
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -336695,43 +338629,43 @@ wWR
wWR
wWR
wWR
-iJX
-gFJ
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+wAf
+psu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
asF
lKy
rhZ
@@ -336739,12 +338673,12 @@ hig
hig
hig
hig
-cKu
-cKu
-cKu
-cKu
-tGt
-hoE
+vfC
+vfC
+vfC
+vfC
+hbQ
+sLF
eSV
eSV
eSV
@@ -336954,54 +338888,54 @@ wWR
lyG
mhk
ryE
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
gSa
-cKu
-cKu
+vfC
+vfC
hig
cLZ
wea
hig
-cKu
-cKu
+vfC
+vfC
lTN
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -337210,56 +339144,56 @@ wWR
wWR
wWR
wWR
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-dQL
-cKu
-cKu
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+wzz
+vfC
+vfC
hig
wBi
pwn
hig
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-tGt
-hoE
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+hbQ
+sLF
eSV
eSV
eSV
@@ -337465,58 +339399,58 @@ wWR
wWR
wWR
wWR
-iJX
-dbd
-gFJ
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+wAf
+icV
+psu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
rwJ
uOC
fZg
hig
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -337722,59 +339656,59 @@ wWR
wWR
wWR
wWR
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
gSa
-cKu
-cKu
+vfC
+vfC
asF
lKy
jjV
hig
-cKu
-cKu
+vfC
+vfC
gSa
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-tGt
-hoE
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+hbQ
+sLF
eSV
eSV
eSV
@@ -337979,59 +339913,59 @@ wWR
wWR
wWR
wWR
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-rVj
-cKu
-cKu
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+tAV
+vfC
+vfC
asF
oro
rxr
hig
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -338235,45 +340169,45 @@ wWR
wWR
wWR
wWR
-iJX
-gFJ
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-dQL
-cKu
-cKu
-cKu
-cKu
+wAf
+psu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+ioS
+ioS
+ioS
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+wzz
+vfC
+vfC
+vfC
+vfC
eYq
-dbd
-gFJ
-cKu
-cKu
+icV
+psu
+vfC
+vfC
hig
tkB
sez
@@ -338281,16 +340215,16 @@ hig
hig
hig
hig
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-tGt
-dbd
-hoE
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+hbQ
+icV
+sLF
eSV
eSV
eSV
@@ -338492,36 +340426,36 @@ wWR
wWR
wWR
wWR
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-dQL
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+ioS
+wzz
+ioS
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
wEr
wEr
cFE
@@ -338538,16 +340472,16 @@ rgk
vyb
nIz
wUJ
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -338749,25 +340683,25 @@ wWR
wWR
wWR
wWR
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+ioS
+ioS
wvs
bnv
nzM
@@ -338795,16 +340729,16 @@ rrS
jyW
nIz
hig
-cKu
-cKu
-dQL
-cKu
-cKu
-cKu
-cKu
-pWB
-hCm
-lEF
+vfC
+vfC
+wzz
+vfC
+vfC
+vfC
+vfC
+hZl
+lpj
+fmW
eSV
eSV
eSV
@@ -338994,37 +340928,37 @@ wWR
wWR
wWR
wWR
-iJX
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-gFJ
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-dQL
-cKu
-cKu
-cKu
-cKu
+wAf
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+psu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+wzz
+vfC
+vfC
+vfC
+vfC
wlQ
oyp
iLs
@@ -339058,8 +340992,8 @@ lYg
sIm
kxZ
uBs
-cKu
-uYQ
+vfC
+aGc
wWR
eSV
eSV
@@ -339247,37 +341181,37 @@ wWR
wWR
wWR
jhY
-hDB
-hDB
-hDB
-hDB
-dQL
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+xjN
+xjN
+xjN
+xjN
+wzz
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
ykc
xAE
mYm
@@ -339315,8 +341249,8 @@ uyj
tXJ
eVH
iRy
-cKu
-uYQ
+vfC
+aGc
wWR
eSV
eSV
@@ -339503,38 +341437,38 @@ wWR
wWR
wWR
wWR
-gDh
-iJX
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+kFV
+wAf
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
ach
tKO
tMs
@@ -339572,8 +341506,8 @@ pnM
pnM
aoT
stX
-dQL
-uYQ
+wzz
+aGc
wWR
eSV
eSV
@@ -339760,38 +341694,38 @@ wWR
wWR
wWR
jhY
-cKu
+vfC
rdm
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
fKY
wFQ
cug
@@ -339829,8 +341763,8 @@ jQf
pzD
ago
stX
-cKu
-uYQ
+vfC
+aGc
wWR
eSV
eSV
@@ -340016,39 +341950,39 @@ wWR
wWR
wWR
jhY
-iJX
-dbd
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-dQL
-cKu
-cKu
-cKu
-cKu
-cKu
+wAf
+icV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+wzz
+vfC
+vfC
+vfC
+vfC
+vfC
xoK
lOJ
cug
@@ -340086,8 +342020,8 @@ pnM
pnM
mQh
stX
-cKu
-uYQ
+vfC
+aGc
wWR
eSV
eSV
@@ -340272,40 +342206,40 @@ wWR
wWR
wWR
wWR
-gDh
+kFV
rdm
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
nqk
nqk
nqk
-cKu
-cKu
+vfC
+vfC
xoK
hnu
oGv
@@ -340343,8 +342277,8 @@ qyE
uqT
wtE
qDU
-cKu
-uYQ
+vfC
+aGc
wWR
eSV
eSV
@@ -340528,36 +342462,36 @@ wWR
wWR
wWR
wWR
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-dQL
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+wzz
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
nqk
kbP
qsY
@@ -340600,8 +342534,8 @@ tnl
czh
qDU
jkx
-cKu
-uYQ
+vfC
+aGc
wWR
eSV
eSV
@@ -340785,27 +342719,27 @@ wWR
wWR
wWR
wWR
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
nqk
nqk
dSC
@@ -340857,8 +342791,8 @@ otk
jVM
gdG
stX
-cKu
-uYQ
+vfC
+aGc
wWR
eSV
eSV
@@ -341041,25 +342975,25 @@ wWR
wWR
wWR
wWR
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
nqk
nqk
nqk
@@ -341114,10 +343048,10 @@ pnM
pcY
kRT
stX
-cKu
-tGt
-dbd
-hoE
+vfC
+hbQ
+icV
+sLF
eSV
eSV
eSV
@@ -341297,33 +343231,33 @@ wWR
wWR
wWR
wWR
-gDh
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+kFV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
nqk
qLN
siv
nqk
qmH
cev
-hTl
+uxQ
wFH
sAp
bPE
@@ -341371,10 +343305,10 @@ pnM
sMU
ejj
stX
-dQL
-cKu
-cKu
-uYQ
+wzz
+vfC
+vfC
+aGc
wWR
eSV
eSV
@@ -341554,26 +343488,26 @@ wWR
wWR
wWR
jhY
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+gXr
eyc
jJr
cBI
@@ -341583,7 +343517,7 @@ ttm
wqg
olm
bTe
-rjd
+hHF
nzt
nKW
eAX
@@ -341628,10 +343562,10 @@ hsU
iwv
mQh
stX
-cKu
-pWB
-hCm
-lEF
+vfC
+hZl
+lpj
+fmW
wWR
eSV
eSV
@@ -341810,27 +343744,27 @@ wWR
wWR
wWR
wWR
-gDh
-iJX
-dQL
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-dQL
+kFV
+wAf
+wzz
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+wzz
nqk
vge
dvk
@@ -341841,7 +343775,7 @@ tkY
hTl
eDs
dHm
-yiS
+kYu
nKW
jZB
mfe
@@ -341885,8 +343819,8 @@ cVN
oOg
eTu
stX
-cKu
-uYQ
+vfC
+aGc
wWR
wWR
wWR
@@ -342067,25 +344001,25 @@ wWR
wWR
wWR
wWR
-gDh
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-dQL
+kFV
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+wzz
kYp
kYp
kYp
@@ -342142,8 +344076,8 @@ tnl
iQK
qDU
qDU
-cKu
-uYQ
+vfC
+aGc
wWR
eSV
eSV
@@ -342324,25 +344258,25 @@ wWR
wWR
wWR
wWR
-gDh
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+kFV
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
kYp
xDn
goX
@@ -342358,7 +344292,7 @@ bom
nKW
cgO
qTR
-mfe
+gla
nZt
ofr
eai
@@ -342399,8 +344333,8 @@ pYe
mea
azd
stX
-cKu
-uYQ
+vfC
+aGc
wWR
eSV
eSV
@@ -342581,25 +344515,25 @@ wWR
wWR
wWR
wWR
-gDh
-sIA
-dQL
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+kFV
+jXG
+wzz
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
kYp
tzh
sMj
@@ -342613,9 +344547,9 @@ ltD
fLk
hHF
gGk
-gGk
-gGk
-mfe
+ekN
+pMv
+gla
xQw
ofr
eai
@@ -342656,8 +344590,8 @@ ckQ
tjy
abB
cDb
-cKu
-uYQ
+vfC
+aGc
wWR
eSV
eSV
@@ -342838,25 +344772,25 @@ wWR
wWR
wWR
wWR
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
kYp
eQe
mIh
@@ -342870,8 +344804,8 @@ gdB
fLk
mFK
hBM
-gGk
-mfe
+gla
+gla
vKx
ofr
bMX
@@ -342913,8 +344847,8 @@ bOw
kSG
fOn
stX
-dQL
-uYQ
+wzz
+aGc
wWR
eSV
eSV
@@ -343095,25 +345029,25 @@ wWR
wWR
wWR
wWR
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
kYp
mnq
pHn
@@ -343170,8 +345104,8 @@ mQh
snC
abB
stX
-cKu
-uYQ
+vfC
+aGc
wWR
eSV
eSV
@@ -343352,25 +345286,25 @@ wWR
wWR
wWR
wWR
-gDh
-iJX
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-dQL
+kFV
+wAf
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+wzz
kYp
tzh
oXr
@@ -343427,8 +345361,8 @@ oRO
vZc
ePm
stX
-cKu
-lEF
+vfC
+fmW
wWR
wWR
eSV
@@ -343609,25 +345543,25 @@ wWR
wWR
wWR
wWR
-gDh
-sIA
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+kFV
+jXG
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
kYp
cnO
bDf
@@ -343866,25 +345800,25 @@ wWR
wWR
wWR
wWR
-gDh
-cKu
-dQL
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+kFV
+vfC
+wzz
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
kYp
gwM
mEj
@@ -344124,24 +346058,24 @@ wWR
wWR
wWR
nzV
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
kYp
nRo
opn
@@ -344381,24 +346315,24 @@ wWR
wWR
wWR
wWR
-gDh
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+kFV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
kYp
sbk
quG
@@ -344639,23 +346573,23 @@ wWR
wWR
wWR
wWR
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
kYp
mnq
ctf
@@ -344899,20 +346833,20 @@ wWR
wWR
cMs
tml
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
kYp
tzh
uHh
@@ -345155,21 +347089,21 @@ wWR
wWR
wWR
cMs
-uYQ
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-dQL
+aGc
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+wzz
kYp
foK
tdC
@@ -345412,21 +347346,21 @@ wWR
wWR
wWR
cMs
-uYQ
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+aGc
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
kYp
mnq
xxY
@@ -345469,7 +347403,7 @@ phb
fZL
mOz
iPC
-hkE
+iVG
tZu
tJp
bpu
@@ -345670,20 +347604,20 @@ wWR
wWR
nRs
iDg
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
kYp
eaS
lnj
@@ -345926,21 +347860,21 @@ wWR
wWR
wWR
wWR
-wDF
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+tbF
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
kYp
uwr
gEU
@@ -346185,19 +348119,19 @@ wWR
wWR
iiI
ryE
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
kYp
tzh
aDN
@@ -346441,20 +348375,20 @@ wWR
wWR
wWR
wWR
-sIA
-hCm
-hCm
-xKD
-xKD
-xKD
-hCm
-eTg
-cKu
-cKu
-cKu
-cKu
-cKu
-dQL
+jXG
+lpj
+lpj
+tTo
+tTo
+tTo
+ryE
+wzz
+vfC
+vfC
+vfC
+vfC
+vfC
+wzz
kYp
sgy
dqK
@@ -346699,13 +348633,13 @@ wWR
wWR
wWR
nCC
-dJM
-qfo
-qfo
-qfo
-qfo
-qfo
-rVj
+lmS
+vPA
+vPA
+vPA
+vPA
+tAV
+vfC
jQk
jQk
jQk
@@ -346956,13 +348890,13 @@ wWR
wWR
wWR
hXw
-dJM
-qfo
-qfo
-qfo
-qfo
-qfo
-rVj
+lmS
+vPA
+vPA
+vPA
+vPA
+tAV
+vfC
jQk
qbV
cZX
@@ -347213,13 +349147,13 @@ wWR
wWR
wWR
bcZ
-dJM
-qfo
-qfo
-qfo
-qfo
-qfo
-rVj
+lmS
+vPA
+vPA
+vPA
+vPA
+tAV
+vfC
dZK
dFc
osf
@@ -347470,13 +349404,13 @@ eSV
eSV
eSV
bcZ
-dJM
-qfo
-qfo
-qfo
-qfo
-qfo
-rVj
+lmS
+vPA
+vPA
+vPA
+vPA
+tAV
+vfC
dZK
itl
lBr
@@ -347727,13 +349661,13 @@ eSV
eSV
eSV
bcZ
-dJM
-qfo
-qfo
-qfo
-qfo
-qfo
-rVj
+lmS
+vPA
+vPA
+vPA
+vPA
+tAV
+vfC
dZK
myx
jsf
@@ -347742,10 +349676,10 @@ mBr
kQc
jGE
fvx
-vvr
+sFX
sFX
geN
-vvr
+sFX
dUo
eFc
hll
@@ -347984,13 +349918,13 @@ eSV
eSV
eSV
bcZ
-dJM
-qfo
-qfo
-qfo
-qfo
-qfo
-rVj
+lmS
+vPA
+vPA
+vPA
+vPA
+tAV
+vfC
jQk
jjI
oXu
@@ -348241,13 +350175,13 @@ eSV
eSV
eSV
bcZ
-krQ
+aBb
nGb
nGb
nGb
nGb
-nGb
-bcN
+tAV
+wzz
jQk
jGE
xhV
@@ -348498,13 +350432,13 @@ eSV
eSV
eSV
bcZ
-dJM
-qfo
-qfo
-qfo
-qfo
-qfo
-rVj
+lmS
+vPA
+vPA
+vPA
+vPA
+tAV
+vfC
aPs
koJ
qBI
@@ -348755,13 +350689,13 @@ eSV
eSV
eSV
bcZ
-dJM
-qfo
-qfo
-qfo
-qfo
-qfo
-rVj
+lmS
+vPA
+vPA
+vPA
+vPA
+tAV
+vfC
nKm
uni
hJA
@@ -349012,13 +350946,13 @@ eSV
eSV
eSV
bcZ
-dJM
-qfo
-qfo
-qfo
-qfo
-qfo
-rVj
+lmS
+vPA
+vPA
+vPA
+vPA
+tAV
+vfC
pBZ
xTM
nqE
@@ -349269,13 +351203,13 @@ eSV
eSV
eSV
bcZ
-eVT
+fhX
qUW
qUW
jsF
-qfo
-qfo
-rVj
+vPA
+tAV
+vfC
nKm
igj
oOI
@@ -349526,18 +351460,18 @@ eSV
eSV
eSV
xbR
-eVT
-eVT
-eWI
-dJM
-qfo
-qfo
-rVj
+fhX
+fhX
+dqJ
+lmS
+vPA
+tAV
+vfC
pXI
cfh
nKc
hZG
-dMP
+kGJ
meo
fyf
fyf
@@ -349783,13 +351717,13 @@ eSV
eSV
eSV
nCC
-eVT
-qfR
-qfR
+fhX
+qJW
+qJW
xYC
-qfo
-qfo
-rVj
+vPA
+tAV
+vfC
pBZ
igj
ycI
@@ -350036,17 +351970,17 @@ eSV
eSV
eSV
eSV
-iJX
-dbd
+wAf
+icV
fDA
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-gFJ
+icV
+icV
+icV
+icV
+icV
+icV
+psu
+vfC
nKm
lxY
nqE
@@ -350292,18 +352226,18 @@ eSV
eSV
eSV
eSV
-iJX
-gFJ
-cKu
-jkB
-cKu
-cKu
-cKu
-cKu
-dQL
-cKu
-cKu
-cKu
+wAf
+psu
+vfC
+fZT
+vfC
+vfC
+vfC
+vfC
+wzz
+vfC
+vfC
+vfC
nKm
hqN
rxf
@@ -350549,18 +352483,18 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
+tAV
+vfC
+vfC
tml
-cKu
-xLZ
-xLZ
-xLZ
-xLZ
-xLZ
-xLZ
-xLZ
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
aPs
lxr
etJ
@@ -350595,11 +352529,11 @@ wZG
kcX
nFG
twr
-rag
+hHr
nZM
xCI
hSB
-fFN
+xVE
bdD
wZG
cah
@@ -350806,12 +352740,12 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-jkB
-cKu
-xLZ
+tAV
+vfC
+vfC
+fZT
+vfC
+vfC
kcC
kcC
kcC
@@ -350835,7 +352769,7 @@ xrU
iyG
biD
lXK
-mgM
+riV
abT
iyG
iyG
@@ -351063,12 +352997,12 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-jkB
-cKu
-cKu
+tAV
+vfC
+vfC
+fZT
+vfC
+vfC
kcC
wNN
wNN
@@ -351320,12 +353254,12 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
+tAV
+vfC
+vfC
tml
-cKu
-cKu
+vfC
+vfC
kcC
wNN
lrn
@@ -351575,14 +353509,14 @@ eSV
eSV
eSV
krb
-dbd
-dbd
-gFJ
-cKu
-cKu
-jkB
-cKu
-cKu
+icV
+icV
+psu
+vfC
+vfC
+fZT
+vfC
+vfC
kcC
wNN
eRN
@@ -351604,7 +353538,7 @@ xZa
wyv
hxs
iyG
-mgM
+tEj
pAi
mgM
glg
@@ -351830,16 +353764,16 @@ eSV
eSV
eSV
eSV
-iJX
-gFJ
-cKu
-cKu
-cKu
-cKu
-cKu
-jkB
-cKu
-cKu
+wAf
+psu
+vfC
+vfC
+vfC
+vfC
+vfC
+fZT
+vfC
+vfC
kcC
wNN
wYH
@@ -352087,16 +354021,16 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
tml
-cKu
-cKu
+vfC
+vfC
kcC
wNN
wNN
@@ -352343,16 +354277,16 @@ eSV
eSV
eSV
eSV
-iJX
-gFJ
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-jkB
-cKu
+wAf
+psu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+fZT
+vfC
rWq
kcC
wNN
@@ -352382,7 +354316,7 @@ iyG
iyG
iyG
rJP
-vrr
+dlo
jQL
lzr
nLb
@@ -352600,17 +354534,17 @@ eSV
eSV
eSV
eSV
-rVj
-xLZ
-xLZ
-xLZ
-ioS
-xLZ
-xLZ
-xLZ
-xLZ
-xLZ
-xLZ
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
kcC
wNN
iRm
@@ -352639,7 +354573,7 @@ wyA
dAg
uDM
oZY
-vrr
+dlo
pKC
oyv
nLb
@@ -352857,8 +354791,8 @@ eSV
eSV
eSV
eSV
-rVj
-gkW
+tAV
+vfC
qWk
qWk
qWk
@@ -352892,13 +354826,13 @@ pzX
syg
bhb
dTO
-oZY
-hNu
-hNu
-iVb
-oZY
+dlo
+dlo
+dlo
+dlo
+dlo
pKC
-jQL
+nPv
nLb
nLb
nLb
@@ -353114,8 +355048,8 @@ eSV
eSV
eSV
eSV
-rVj
-xLZ
+tAV
+vfC
qWk
qGv
qGv
@@ -353150,7 +355084,7 @@ fNL
bhb
hTF
fHu
-oZY
+eks
dQk
qbh
vrr
@@ -353371,11 +355305,11 @@ eSV
eSV
eSV
eSV
-rVj
-xLZ
+tAV
+vfC
qWk
qGv
-tOi
+bvM
wQG
lLC
bOg
@@ -353628,8 +355562,8 @@ eSV
eSV
eSV
eSV
-rVj
-xLZ
+tAV
+vfC
qWk
qGv
wfY
@@ -353667,7 +355601,7 @@ pPT
sph
xvQ
qpd
-oUx
+dlo
xVC
moQ
tOS
@@ -353885,8 +355819,8 @@ eSV
eSV
eSV
eSV
-rVj
-xLZ
+tAV
+vfC
qWk
qGv
tOi
@@ -354142,8 +356076,8 @@ eSV
eSV
eSV
eSV
-rVj
-xLZ
+tAV
+vfC
qWk
qGv
tnk
@@ -354160,7 +356094,7 @@ eyA
ngB
rvn
nDP
-vpt
+dnX
oBb
wNN
wNN
@@ -354399,8 +356333,8 @@ eSV
eSV
eSV
eSV
-rVj
-xLZ
+tAV
+vfC
miS
uyp
jIt
@@ -354656,8 +356590,8 @@ eSV
eSV
eSV
eSV
-rVj
-xLZ
+tAV
+vfC
miS
uyp
oRf
@@ -354669,7 +356603,7 @@ uyp
eyg
mgc
eJt
-rOO
+lqg
lBL
ngB
hap
@@ -354680,14 +356614,14 @@ wNN
wNN
hUv
pHG
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-dQL
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+wzz
+vfC
pHG
qpS
jCj
@@ -354913,8 +356847,8 @@ eSV
eSV
eSV
eSV
-rVj
-xLZ
+tAV
+vfC
miS
uyp
hLV
@@ -354937,19 +356871,19 @@ oKR
oKR
pHG
pHG
-cKu
-dQL
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+wzz
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
phj
jCj
jCj
kEf
-eeO
+iqR
mGA
avK
xZA
@@ -355170,8 +357104,8 @@ eSV
eSV
eSV
eSV
-rVj
-xLZ
+tAV
+vfC
miS
uyp
bgt
@@ -355192,22 +357126,22 @@ aky
iVt
oKR
oKR
-sRg
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+pHG
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
phj
gIo
fpL
oPN
knB
-eeO
+fLP
jcR
jpk
xNS
@@ -355427,8 +357361,8 @@ eSV
eSV
eSV
eSV
-sIA
-gMA
+jXG
+ryE
miS
uyp
uyp
@@ -355442,23 +357376,23 @@ cJa
mSl
ngB
oKR
-mEk
-naT
-pqm
-pTN
-ihL
+auD
+tEm
+tEm
+sbd
+qIf
oKR
oKR
-sRg
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+pHG
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
phj
sBi
tnn
@@ -355685,7 +357619,7 @@ eSV
eSV
eSV
eSV
-naR
+tAV
miS
miS
miS
@@ -355700,28 +357634,28 @@ ngB
ngB
oKR
xtc
-hCL
+tEm
wZJ
-pvs
+sbd
jBf
oKR
oKR
-sRg
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+pHG
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
phj
gIo
wed
qfD
til
-cLM
+bdz
sWq
usQ
jCj
@@ -355942,13 +357876,13 @@ eSV
eSV
eSV
eSV
-puX
-xLZ
-xLZ
-xLZ
-xLZ
-xLZ
-xLZ
+jXG
+ryE
+vfC
+vfC
+vfC
+vfC
+vfC
mUn
mUn
bsu
@@ -355957,28 +357891,28 @@ tnJ
mUn
oKR
auD
-pqm
-tEm
-pqm
+xoq
+aPJ
+kWH
qIf
oKR
oKR
-sRg
-dQL
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+pHG
+wzz
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
phj
ajx
-oPN
+fHH
fXs
eeO
-cLM
+jMM
eXX
sJX
jCj
@@ -356201,39 +358135,39 @@ eSV
eSV
eSV
xVO
-hCm
-hCm
-hCm
+lpj
+lpj
+lpj
ryE
-imA
-xLZ
+vfC
+vfC
mUn
wmT
eli
mUn
xut
oKR
-vsg
-vUc
-vUc
+pqm
+mvR
vUc
+cxP
vsg
oKR
xut
-sRg
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+pHG
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
phj
dnd
cLM
-oPN
+lwq
pKr
uqO
izG
@@ -356461,13 +358395,13 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-imA
-xLZ
-dQL
-cKu
-xLZ
+tAV
+vfC
+vfC
+vfC
+wzz
+yfa
+wzz
xut
oKR
oKR
@@ -356477,16 +358411,16 @@ oKR
oKR
oKR
xut
-xLZ
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
phj
jCj
jCj
@@ -356718,13 +358652,13 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-xLZ
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
xut
xut
xut
@@ -356734,16 +358668,16 @@ xut
xut
xut
xut
-xLZ
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
uez
dlo
uiw
@@ -356975,31 +358909,31 @@ eSV
eSV
eSV
eSV
-sIA
-hCm
-hCm
-hCm
-hCm
+jXG
+lpj
+lpj
+lpj
+lpj
ryE
-xLZ
-xLZ
-xLZ
-xLZ
-xLZ
-xLZ
-xLZ
-xLZ
-xLZ
-xLZ
-xLZ
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+wzz
+vfC
+vfC
+wzz
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
vRE
vRE
lTO
@@ -357237,26 +359171,26 @@ eSV
eSV
eSV
eSV
-sIA
-hCm
-hCm
-hCm
+jXG
+lpj
+lpj
+lpj
ryE
-cKu
-cKu
-cKu
-dQL
-cKu
-cKu
-cKu
-dQL
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
vRE
hYp
nEU
@@ -357499,21 +359433,21 @@ eSV
eSV
pvl
xVO
-hCm
-hCm
-hCm
+lpj
+lpj
+lpj
ryE
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
sGC
ffb
ssL
@@ -357755,22 +359689,22 @@ eSV
eSV
eSV
pvl
-tDE
+uDA
hOo
hOo
ijb
-sIA
+jXG
ryE
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
sGC
ffb
czP
@@ -357803,9 +359737,9 @@ vVZ
vVZ
vVZ
vVZ
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
hVC
iXw
wPe
@@ -358013,21 +359947,21 @@ eSV
eSV
eWn
gMT
-eSV
-eSV
-eSV
-eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+tOa
+tOa
+tOa
+tOa
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
sGC
ttV
czP
@@ -358049,20 +359983,20 @@ gdw
dqW
hUw
nao
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
hgg
-hCm
-cKu
-cKu
-cKu
-cKu
+lpj
+vfC
+vfC
+vfC
+vfC
eYq
-hCm
+lpj
ryE
-cKu
+vfC
bXy
pDQ
ddB
@@ -358270,21 +360204,21 @@ eSV
eSV
eWn
gMT
-eSV
-eSV
-eSV
-eSV
-sIA
-hCm
+tOa
+tOa
+tOa
+tOa
+jXG
+lpj
ryE
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
vRE
uUA
bas
@@ -358306,20 +360240,20 @@ qfV
kan
hUw
nao
-cKu
-cKu
-cKu
-cKu
-uYQ
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-rVj
-cKu
+vfC
+vfC
+vfC
+vfC
+aGc
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+tAV
+vfC
bXy
meJ
ily
@@ -358327,12 +360261,12 @@ hVC
hVC
hVC
hVC
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
lYK
uYQ
jGo
@@ -358527,21 +360461,21 @@ eSV
eSV
eWn
gMT
-eSV
-eSV
-eSV
-eSV
-eSV
-eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+tOa
+tOa
+tOa
+tOa
+tOa
+tOa
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
vRE
vRE
jnz
@@ -358563,33 +360497,33 @@ bAm
oAa
bAm
evf
-dQL
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+wzz
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
gSa
-cKu
+vfC
bXy
oxt
cQS
bXy
-cKu
-cKu
+vfC
+vfC
gSa
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
cKu
uYQ
qlr
@@ -358790,16 +360724,16 @@ lMz
gHX
kqU
bxb
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
rNO
mcW
aUV
@@ -358820,35 +360754,35 @@ nmE
kan
hUw
nao
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
hVC
ehx
uhS
bXy
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
wWR
wWR
wWR
@@ -359048,15 +360982,15 @@ eSV
eSV
eSV
xVO
-hCm
-hCm
-hCm
-hCm
-hCm
+lpj
+lpj
+lpj
+lpj
+lpj
ryE
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
dZW
jyk
hSe
@@ -359077,35 +361011,35 @@ lGt
cTD
hUw
nao
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
hVC
old
pwV
bXy
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-pWB
-lEF
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+hZl
+fmW
wWR
wWR
wWR
@@ -359310,10 +361244,10 @@ wWR
wWR
wWR
wWR
-sIA
+jXG
ryE
-cKu
-cKu
+vfC
+vfC
dZW
mVw
rka
@@ -359334,34 +361268,34 @@ oRK
tPB
gUM
evf
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
gSa
-cKu
+vfC
hVC
esk
fxL
hVC
-cKu
-cKu
+vfC
+vfC
gSa
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
wWR
wWR
wWR
@@ -359568,9 +361502,9 @@ eSV
eSV
wWR
wWR
-rVj
-cKu
-cKu
+tAV
+vfC
+vfC
rNO
jyk
kVR
@@ -359591,34 +361525,34 @@ olj
cLX
cLX
was
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
hVC
umX
fOW
hVC
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-pWB
-lEF
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+hZl
+fmW
wWR
wWR
eSV
@@ -359825,9 +361759,9 @@ eSV
eSV
wWR
wWR
-rVj
-cKu
-cKu
+tAV
+vfC
+vfC
rNO
rNO
xyo
@@ -359848,33 +361782,33 @@ sCL
sLH
ljy
was
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
hVC
geG
gih
onl
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
wWR
wWR
eSV
@@ -360082,10 +362016,10 @@ eSV
eSV
wWR
wWR
-sIA
+jXG
eTg
-cKu
-cKu
+vfC
+vfC
dZW
rfe
hSe
@@ -360105,33 +362039,33 @@ uhp
bnM
jzl
was
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
lTq
-cKu
+vfC
hVC
wLF
dCh
hVC
-cKu
-cKu
+vfC
+vfC
jNG
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
wWR
wWR
eSV
@@ -360340,9 +362274,9 @@ eSV
wWR
wWR
wWR
-rVj
-cKu
-cKu
+tAV
+vfC
+vfC
dZW
pdd
ekw
@@ -360362,18 +362296,18 @@ xmT
nMT
nQJ
was
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
hVC
sZz
hVC
@@ -360383,12 +362317,12 @@ hVC
ugF
hVC
hVC
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
wWR
wWR
eSV
@@ -360597,9 +362531,9 @@ eSV
wWR
wWR
wWR
-rVj
-cKu
-cKu
+tAV
+vfC
+vfC
rNO
tGI
dtE
@@ -360619,18 +362553,18 @@ oOj
xCL
jIO
was
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
uMf
lxa
dJp
@@ -360640,12 +362574,12 @@ hTL
bcA
sws
rAm
-cKu
-cKu
-cKu
-pWB
-hCm
-lEF
+vfC
+vfC
+vfC
+hZl
+lpj
+fmW
wWR
wWR
eSV
@@ -360854,9 +362788,9 @@ eSV
wWR
wWR
wWR
-rVj
-cKu
-cKu
+tAV
+vfC
+vfC
gZB
skv
skv
@@ -360876,18 +362810,18 @@ xmT
nMT
eIM
was
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
qxh
jKL
fCe
@@ -360897,10 +362831,10 @@ spB
ldA
omJ
fPv
-cKu
-cKu
-cKu
-nTE
+vfC
+vfC
+vfC
+xPB
wWR
wWR
wWR
@@ -361111,9 +363045,9 @@ eSV
wWR
wWR
wWR
-rVj
-cKu
-cKu
+tAV
+vfC
+vfC
kIT
msq
xUa
@@ -361133,18 +363067,18 @@ xgr
dSc
qGa
was
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
hVC
hVC
hVC
@@ -361154,10 +363088,10 @@ hVC
hVC
ugF
hVC
-cKu
-cKu
-pWB
-lEF
+vfC
+vfC
+hZl
+fmW
eSV
eSV
eSV
@@ -361369,8 +363303,8 @@ wWR
wWR
wWR
bcN
-cKu
-cKu
+vfC
+vfC
kIT
vxL
aTc
@@ -361390,30 +363324,30 @@ bhI
bhI
rIj
was
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
lTq
-cKu
+vfC
oQv
gtn
fkY
bXy
-cKu
-cKu
+vfC
+vfC
jNG
-cKu
-cKu
-uYQ
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -361625,9 +363559,9 @@ eSV
wWR
wWR
wWR
-rVj
-cKu
-cKu
+tAV
+vfC
+vfC
gZB
dPN
frv
@@ -361647,30 +363581,30 @@ fWg
fWg
was
was
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
hVC
imj
wUs
hVC
-cKu
-cKu
-cKu
-cKu
-pWB
-lEF
+vfC
+vfC
+vfC
+vfC
+hZl
+fmW
eSV
eSV
eSV
@@ -361882,9 +363816,9 @@ eSV
wWR
wWR
wWR
-rVj
-cKu
-cKu
+tAV
+vfC
+vfC
gZB
lqx
frv
@@ -361897,36 +363831,36 @@ vPd
vPd
vPd
aSZ
-dQL
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-dQL
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+wzz
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+wzz
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
bXy
hRP
cae
hVC
-cKu
-cKu
-cKu
-cKu
-uYQ
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -362139,9 +364073,9 @@ eSV
wWR
wWR
wWR
-rVj
-cKu
-cKu
+tAV
+vfC
+vfC
kIT
eUB
jBK
@@ -362154,36 +364088,36 @@ vPd
vPd
vPd
aSZ
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
gSa
-cKu
+vfC
hVC
jmZ
rZt
bXy
-cKu
-cKu
+vfC
+vfC
gSa
-pWB
-lEF
+hZl
+fmW
eSV
eSV
eSV
@@ -362396,9 +364330,9 @@ eSV
wWR
wWR
wWR
-rVj
-cKu
-cKu
+tAV
+vfC
+vfC
kIT
kIT
dOH
@@ -362411,34 +364345,34 @@ ctH
ctH
ghD
xAo
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
eYq
-cKu
-cKu
+vfC
+vfC
eYq
-cKu
-cKu
+vfC
+vfC
eYq
hVC
gKf
uve
hVC
eYq
-cKu
-cKu
+vfC
+vfC
quS
eSV
eSV
@@ -362653,10 +364587,10 @@ eSV
eSV
wWR
wWR
-rVj
-cKu
-cKu
-cKu
+tAV
+vfC
+vfC
+vfC
kIT
kIT
hyK
@@ -362668,35 +364602,35 @@ bRs
bRs
bRs
xAo
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-pWB
-lEF
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+hZl
+fmW
eSV
eSV
eSV
@@ -362910,11 +364844,11 @@ eSV
eSV
wWR
eSV
-rVj
-cKu
-cKu
-dQL
-cKu
+tAV
+vfC
+vfC
+wzz
+vfC
kIT
rqy
ruu
@@ -362925,33 +364859,33 @@ fXu
xAo
xAo
xAo
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
gSa
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
jNG
eSV
eSV
@@ -363167,49 +365101,49 @@ eSV
eSV
eSV
eSV
-sIA
-hCm
-hCm
-hCm
+jXG
+lpj
+lpj
+lpj
ryE
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
gSa
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-pWB
-lEF
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+hZl
+fmW
eSV
eSV
eSV
@@ -363428,44 +365362,44 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-dQL
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-dQL
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
+tAV
+vfC
+vfC
+wzz
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+wzz
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
eYq
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
npI
@@ -363685,44 +365619,44 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-pWB
-lEF
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+hZl
+fmW
eSV
eSV
eSV
@@ -363942,43 +365876,43 @@ eSV
eSV
eSV
eSV
-sIA
+jXG
ryE
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -364200,42 +366134,42 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-pWB
-lEF
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+hZl
+fmW
eSV
eSV
eSV
@@ -364457,41 +366391,41 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -364714,41 +366648,41 @@ eSV
eSV
eSV
eSV
-sIA
+jXG
ryE
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-pWB
-lEF
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+hZl
+fmW
eSV
eSV
eSV
@@ -364972,39 +366906,39 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -365229,39 +367163,39 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-pWB
-lEF
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+hZl
+fmW
eSV
eSV
eSV
@@ -365486,38 +367420,38 @@ eSV
eSV
eSV
eSV
-sIA
+jXG
ryE
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -365744,37 +367678,37 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-pWB
-lEF
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+hZl
+fmW
eSV
eSV
eSV
@@ -366001,36 +367935,36 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -366258,36 +368192,36 @@ eSV
eSV
eSV
eSV
-sIA
+jXG
ryE
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-pWB
-lEF
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+hZl
+fmW
eSV
eSV
eSV
@@ -366516,34 +368450,34 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -366773,34 +368707,34 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -367027,47 +368961,47 @@ eSV
eSV
eSV
eSV
-iJX
-dbd
-dbd
-gFJ
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-tGt
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-dbd
-hoE
+wAf
+icV
+icV
+psu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+hbQ
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+icV
+sLF
eSV
eSV
eSV
@@ -367283,49 +369217,49 @@ eSV
eSV
eSV
eSV
-iJX
-gFJ
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-tGt
-hoE
+wAf
+psu
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+hbQ
+sLF
eSV
eSV
eSV
@@ -367540,49 +369474,49 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -367797,49 +369731,49 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -368054,49 +369988,49 @@ eSV
eSV
eSV
eSV
-rVj
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-uYQ
+tAV
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+aGc
eSV
eSV
eSV
@@ -368311,49 +370245,49 @@ eSV
eSV
eSV
eSV
-sIA
+jXG
ryE
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-cKu
-pWB
-lEF
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+vfC
+hZl
+fmW
eSV
eSV
eSV
@@ -368569,47 +370503,47 @@ eSV
eSV
eSV
eSV
-sIA
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-hCm
-lEF
+jXG
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+lpj
+fmW
eSV
eSV
eSV
@@ -395110,7 +397044,7 @@ eSV
eSV
fVU
oUd
-bdp
+vKe
qDD
qDD
qDD
diff --git a/nano/TemplatesGuide.txt b/nano/TemplatesGuide.txt
deleted file mode 100644
index cbfb9241771..00000000000
--- a/nano/TemplatesGuide.txt
+++ /dev/null
@@ -1,10 +0,0 @@
---------------------------------
-Nano UI Template Guide
---------------------------------
-
-Nano UI uses templates, which are comprised of HTML and a markup syntax. The markup allows you
-to easily add conditionals (if statements), loops (for loops) and custom formatting (using helpers).
-
-Templates are stored in the /nano/templates folder and the file extension is .tmpl.
-
-This guide is being replaced with a wiki entry, found here: https://bay.ss13.me/en/Guides/coderbus/nanoui
diff --git a/nano/To BYOND Cache.bat b/nano/To BYOND Cache.bat
deleted file mode 100644
index 486b8d1beaa..00000000000
--- a/nano/To BYOND Cache.bat
+++ /dev/null
@@ -1,4 +0,0 @@
-copy css\* "%USERPROFILE%\Documents\BYOND\cache" /y
-copy images\* "%USERPROFILE%\Documents\BYOND\cache" /y
-copy js\* "%USERPROFILE%\Documents\BYOND\cache" /y
-copy templates\* "%USERPROFILE%\Documents\BYOND\cache" /y
diff --git a/nano/css/icons.css b/nano/css/icons.css
deleted file mode 100644
index cb2fd42a250..00000000000
--- a/nano/css/icons.css
+++ /dev/null
@@ -1,315 +0,0 @@
-/* Icons
-----------------------------------*/
-
-.icon24
-{
- width: 24px;
- height: 24px;
-}
-
-.icon24.uiStatusGood
-{
- background: url(uiIcons24.png) 0 0 no-repeat;
-}
-
-.icon24.uiStatusAverage
-{
- background: url(uiIcons24.png) 0 -24px no-repeat;
-}
-
-.icon24.uiStatusBad
-{
- background: url(uiIcons24.png) 0 -48px no-repeat;
-}
-
-/* states and images */
-.uiIcon16 {
- float: left;
- width: 16px;
- height: 16px;
- margin: 2px 2px 0 2px;
- background-image: url(uiIcons16.png);
-}
-
-.uiLinkPendingIcon {
- display: none;
- float: left;
- width: 16px;
- height: 16px;
- margin: 2px 2px 0 2px;
- background-image: url(uiLinkPendingIcon.gif);
-}
-
-.linkPending .uiIcon16 {
- display: none;
-}
-
-.linkPending .uiLinkPendingIcon {
- display: block;
-}
-
-/* positioning */
-.uiIcon16.icon-blank { background-position: 16px 16px; }
-.uiIcon16.icon-carat-1-n { background-position: 0 0; }
-.uiIcon16.icon-carat-1-ne { background-position: -16px 0; }
-.uiIcon16.icon-carat-1-e { background-position: -32px 0; }
-.uiIcon16.icon-carat-1-se { background-position: -48px 0; }
-.uiIcon16.icon-carat-1-s { background-position: -64px 0; }
-.uiIcon16.icon-carat-1-sw { background-position: -80px 0; }
-.uiIcon16.icon-carat-1-w { background-position: -96px 0; }
-.uiIcon16.icon-carat-1-nw { background-position: -112px 0; }
-.uiIcon16.icon-carat-2-n-s { background-position: -128px 0; }
-.uiIcon16.icon-carat-2-e-w { background-position: -144px 0; }
-.uiIcon16.icon-triangle-1-n { background-position: 0 -16px; }
-.uiIcon16.icon-triangle-1-ne { background-position: -16px -16px; }
-.uiIcon16.icon-triangle-1-e { background-position: -32px -16px; }
-.uiIcon16.icon-triangle-1-se { background-position: -48px -16px; }
-.uiIcon16.icon-triangle-1-s { background-position: -64px -16px; }
-.uiIcon16.icon-triangle-1-sw { background-position: -80px -16px; }
-.uiIcon16.icon-triangle-1-w { background-position: -96px -16px; }
-.uiIcon16.icon-triangle-1-nw { background-position: -112px -16px; }
-.uiIcon16.icon-triangle-2-n-s { background-position: -128px -16px; }
-.uiIcon16.icon-triangle-2-e-w { background-position: -144px -16px; }
-.uiIcon16.icon-arrow-1-n { background-position: 0 -32px; }
-.uiIcon16.icon-arrow-1-ne { background-position: -16px -32px; }
-.uiIcon16.icon-arrow-1-e { background-position: -32px -32px; }
-.uiIcon16.icon-arrow-1-se { background-position: -48px -32px; }
-.uiIcon16.icon-arrow-1-s { background-position: -64px -32px; }
-.uiIcon16.icon-arrow-1-sw { background-position: -80px -32px; }
-.uiIcon16.icon-arrow-1-w { background-position: -96px -32px; }
-.uiIcon16.icon-arrow-1-nw { background-position: -112px -32px; }
-.uiIcon16.icon-arrow-2-n-s { background-position: -128px -32px; }
-.uiIcon16.icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.uiIcon16.icon-arrow-2-e-w { background-position: -160px -32px; }
-.uiIcon16.icon-arrow-2-se-nw { background-position: -176px -32px; }
-.uiIcon16.icon-arrowstop-1-n { background-position: -192px -32px; }
-.uiIcon16.icon-arrowstop-1-e { background-position: -208px -32px; }
-.uiIcon16.icon-arrowstop-1-s { background-position: -224px -32px; }
-.uiIcon16.icon-arrowstop-1-w { background-position: -240px -32px; }
-.uiIcon16.icon-arrowthick-1-n { background-position: 0 -48px; }
-.uiIcon16.icon-arrowthick-1-ne { background-position: -16px -48px; }
-.uiIcon16.icon-arrowthick-1-e { background-position: -32px -48px; }
-.uiIcon16.icon-arrowthick-1-se { background-position: -48px -48px; }
-.uiIcon16.icon-arrowthick-1-s { background-position: -64px -48px; }
-.uiIcon16.icon-arrowthick-1-sw { background-position: -80px -48px; }
-.uiIcon16.icon-arrowthick-1-w { background-position: -96px -48px; }
-.uiIcon16.icon-arrowthick-1-nw { background-position: -112px -48px; }
-.uiIcon16.icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.uiIcon16.icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.uiIcon16.icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.uiIcon16.icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.uiIcon16.icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.uiIcon16.icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.uiIcon16.icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.uiIcon16.icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.uiIcon16.icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.uiIcon16.icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.uiIcon16.icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.uiIcon16.icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.uiIcon16.icon-arrowreturn-1-w { background-position: -64px -64px; }
-.uiIcon16.icon-arrowreturn-1-n { background-position: -80px -64px; }
-.uiIcon16.icon-arrowreturn-1-e { background-position: -96px -64px; }
-.uiIcon16.icon-arrowreturn-1-s { background-position: -112px -64px; }
-.uiIcon16.icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.uiIcon16.icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.uiIcon16.icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.uiIcon16.icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.uiIcon16.icon-arrow-4 { background-position: 0 -80px; }
-.uiIcon16.icon-arrow-4-diag { background-position: -16px -80px; }
-.uiIcon16.icon-extlink { background-position: -32px -80px; }
-.uiIcon16.icon-newwin { background-position: -48px -80px; }
-.uiIcon16.icon-refresh { background-position: -64px -80px; }
-.uiIcon16.icon-shuffle { background-position: -80px -80px; }
-.uiIcon16.icon-transfer-e-w { background-position: -96px -80px; }
-.uiIcon16.icon-transferthick-e-w { background-position: -112px -80px; }
-.uiIcon16.icon-radiation { background-position: -128px -80px; }
-.uiIcon16.icon-folder-collapsed { background-position: 0 -96px; }
-.uiIcon16.icon-folder-open { background-position: -16px -96px; }
-.uiIcon16.icon-document { background-position: -32px -96px; }
-.uiIcon16.icon-document-b { background-position: -48px -96px; }
-.uiIcon16.icon-note { background-position: -64px -96px; }
-.uiIcon16.icon-mail-closed { background-position: -80px -96px; }
-.uiIcon16.icon-mail-open { background-position: -96px -96px; }
-.uiIcon16.icon-suitcase { background-position: -112px -96px; }
-.uiIcon16.icon-comment { background-position: -128px -96px; }
-.uiIcon16.icon-person { background-position: -144px -96px; }
-.uiIcon16.icon-print { background-position: -160px -96px; }
-.uiIcon16.icon-trash { background-position: -176px -96px; }
-.uiIcon16.icon-locked { background-position: -192px -96px; }
-.uiIcon16.icon-unlocked { background-position: -208px -96px; }
-.uiIcon16.icon-bookmark { background-position: -224px -96px; }
-.uiIcon16.icon-tag { background-position: -240px -96px; }
-.uiIcon16.icon-home { background-position: 0 -112px; }
-.uiIcon16.icon-flag { background-position: -16px -112px; }
-.uiIcon16.icon-calendar { background-position: -32px -112px; }
-.uiIcon16.icon-cart { background-position: -48px -112px; }
-.uiIcon16.icon-pencil { background-position: -64px -112px; }
-.uiIcon16.icon-clock { background-position: -80px -112px; }
-.uiIcon16.icon-disk { background-position: -96px -112px; }
-.uiIcon16.icon-calculator { background-position: -112px -112px; }
-.uiIcon16.icon-zoomin { background-position: -128px -112px; }
-.uiIcon16.icon-zoomout { background-position: -144px -112px; }
-.uiIcon16.icon-search { background-position: -160px -112px; }
-.uiIcon16.icon-wrench { background-position: -176px -112px; }
-.uiIcon16.icon-gear { background-position: -192px -112px; }
-.uiIcon16.icon-heart { background-position: -208px -112px; }
-.uiIcon16.icon-star { background-position: -224px -112px; }
-.uiIcon16.icon-link { background-position: -240px -112px; }
-.uiIcon16.icon-cancel { background-position: 0 -128px; }
-.uiIcon16.icon-plus { background-position: -16px -128px; }
-.uiIcon16.icon-plusthick { background-position: -32px -128px; }
-.uiIcon16.icon-minus { background-position: -48px -128px; }
-.uiIcon16.icon-minusthick { background-position: -64px -128px; }
-.uiIcon16.icon-close { background-position: -80px -128px; }
-.uiIcon16.icon-closethick { background-position: -96px -128px; }
-.uiIcon16.icon-key { background-position: -112px -128px; }
-.uiIcon16.icon-lightbulb { background-position: -128px -128px; }
-.uiIcon16.icon-scissors { background-position: -144px -128px; }
-.uiIcon16.icon-clipboard { background-position: -160px -128px; }
-.uiIcon16.icon-copy { background-position: -176px -128px; }
-.uiIcon16.icon-contact { background-position: -192px -128px; }
-.uiIcon16.icon-image { background-position: -208px -128px; }
-.uiIcon16.icon-video { background-position: -224px -128px; }
-.uiIcon16.icon-script { background-position: -240px -128px; }
-.uiIcon16.icon-alert { background-position: 0 -144px; }
-.uiIcon16.icon-info { background-position: -16px -144px; }
-.uiIcon16.icon-notice { background-position: -32px -144px; }
-.uiIcon16.icon-help { background-position: -48px -144px; }
-.uiIcon16.icon-check { background-position: -64px -144px; }
-.uiIcon16.icon-bullet { background-position: -80px -144px; }
-.uiIcon16.icon-radio-on { background-position: -96px -144px; }
-.uiIcon16.icon-radio-off { background-position: -112px -144px; }
-.uiIcon16.icon-pin-w { background-position: -128px -144px; }
-.uiIcon16.icon-pin-s { background-position: -144px -144px; }
-.uiIcon16.icon-night { background-position: -160px -144px; }
-.uiIcon16.icon-play { background-position: 0 -160px; }
-.uiIcon16.icon-pause { background-position: -16px -160px; }
-.uiIcon16.icon-seek-next { background-position: -32px -160px; }
-.uiIcon16.icon-seek-prev { background-position: -48px -160px; }
-.uiIcon16.icon-seek-end { background-position: -64px -160px; }
-.uiIcon16.icon-seek-start { background-position: -80px -160px; }
-/* uiIcon-seek-first is deprecated, use uiIcon-seek-start instead */
-.uiIcon16.icon-seek-first { background-position: -80px -160px; }
-.uiIcon16.icon-stop { background-position: -96px -160px; }
-.uiIcon16.icon-eject { background-position: -112px -160px; }
-.uiIcon16.icon-volume-off { background-position: -128px -160px; }
-.uiIcon16.icon-volume-on { background-position: -144px -160px; }
-.uiIcon16.icon-power { background-position: 0 -176px; }
-.uiIcon16.icon-signal-diag { background-position: -16px -176px; }
-.uiIcon16.icon-signal { background-position: -32px -176px; }
-.uiIcon16.icon-battery-0 { background-position: -48px -176px; }
-.uiIcon16.icon-battery-1 { background-position: -64px -176px; }
-.uiIcon16.icon-battery-2 { background-position: -80px -176px; }
-.uiIcon16.icon-battery-3 { background-position: -96px -176px; }
-.uiIcon16.icon-circle-plus { background-position: 0 -192px; }
-.uiIcon16.icon-circle-minus { background-position: -16px -192px; }
-.uiIcon16.icon-circle-close { background-position: -32px -192px; }
-.uiIcon16.icon-circle-triangle-e { background-position: -48px -192px; }
-.uiIcon16.icon-circle-triangle-s { background-position: -64px -192px; }
-.uiIcon16.icon-circle-triangle-w { background-position: -80px -192px; }
-.uiIcon16.icon-circle-triangle-n { background-position: -96px -192px; }
-.uiIcon16.icon-circle-arrow-e { background-position: -112px -192px; }
-.uiIcon16.icon-circle-arrow-s { background-position: -128px -192px; }
-.uiIcon16.icon-circle-arrow-w { background-position: -144px -192px; }
-.uiIcon16.icon-circle-arrow-n { background-position: -160px -192px; }
-.uiIcon16.icon-circle-zoomin { background-position: -176px -192px; }
-.uiIcon16.icon-circle-zoomout { background-position: -192px -192px; }
-.uiIcon16.icon-circle-check { background-position: -208px -192px; }
-.uiIcon16.icon-circlesmall-plus { background-position: 0 -208px; }
-.uiIcon16.icon-circlesmall-minus { background-position: -16px -208px; }
-.uiIcon16.icon-circlesmall-close { background-position: -32px -208px; }
-.uiIcon16.icon-squaresmall-plus { background-position: -48px -208px; }
-.uiIcon16.icon-squaresmall-minus { background-position: -64px -208px; }
-.uiIcon16.icon-squaresmall-close { background-position: -80px -208px; }
-.uiIcon16.icon-grip-dotted-vertical { background-position: 0 -224px; }
-.uiIcon16.icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.uiIcon16.icon-grip-solid-vertical { background-position: -32px -224px; }
-.uiIcon16.icon-grip-solid-horizontal { background-position: -48px -224px; }
-.uiIcon16.icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.uiIcon16.icon-grip-diagonal-se { background-position: -80px -224px; }
-.uiIcon16.icon-batt_full { background-image: url(c_max.gif); background-position: 0px 0px }
-.uiIcon16.icon-batt_disc { background-image: url(c_discharging.gif); background-position: 0px 0px }
-.uiIcon16.icon-batt_chrg { background-image: url(c_charging.gif); background-position: 0px 0px }
-
-.mapIcon16 {
- position: absolute;
- width: 16px;
- height: 16px;
- background-image: url(uiIcons16Green.png);
- background-position: -144px -96px;
- background-repeat: no-repeat;
- zoom: 0.125;
- margin-left: -1px;
- /*margin-bottom: -1px;*/
-}
-.mapIcon16.dead {
- background-image: url(uiIcons16Red.png);
-}
-
-/* Command Positions */
-.mapIcon16.rank-captain {
- background-position: -224px -112px;
-}
-.mapIcon16.rank-headofpersonnel {
- background-position: -112px -96px;
-}
-.mapIcon16.rank-headofsecurity {
- background-position: -112px -128px;
-}
-.mapIcon16.rank-chiefengineer {
- background-position: -176px -112px;
-}
-.mapIcon16.rank-researchdirector {
- background-position: -128px -128px;
-}
-.mapIcon16.rank-chiefmedicalofficer {
- background-position: -32px -128px;
-}
-
-/* Engineering Positions */
-.mapIcon16.rank-stationengineer {
- background-position: -176px -112px;
-}
-.mapIcon16.rank-atmospherictechnician {
- background-position: -176px -112px;
-}
-
-/* Medical Positions */
-.mapIcon16.rank-medicaldoctor {
- background-position: -32px -128px;
-}
-.mapIcon16.rank-geneticist {
- background-position: -32px -128px;
-}
-.mapIcon16.rank-psychiatrist {
- background-position: -32px -128px;
-}
-.mapIcon16.rank-chemist {
- background-position: -32px -128px;
-}
-
-/* Science Positions */
-.mapIcon16.rank-scientist {
- background-position: -128px -128px;
-}
-.mapIcon16.rank-geneticist {
- background-position: -128px -128px;
-}
-.mapIcon16.rank-roboticist {
- background-position: -128px -128px;
-}
-.mapIcon16.rank-xenobiologist {
- background-position: -128px -128px;
-}
-
-/* Security Positions */
-.mapIcon16.rank-warden {
- background-position: -112px -128px;
-}
-.mapIcon16.rank-detective {
- background-position: -112px -128px;
-}
-.mapIcon16.rank-securityofficer {
- background-position: -112px -128px;
-}
-
diff --git a/nano/css/layout_basic.css b/nano/css/layout_basic.css
deleted file mode 100644
index 30a75490f39..00000000000
--- a/nano/css/layout_basic.css
+++ /dev/null
@@ -1,21 +0,0 @@
-body {
- background: #272727 url(uiBasicBackground.png) 50% 0 repeat-x;
-}
-
-#uiContent {
- clear: both;
- padding: 8px;
-}
-
-#uiLoadingNotice {
- position: relative;
- background: url(uiNoticeBackground.jpg) 50% 50%;
- color: #000000;
- font-size: 14px;
- font-style: italic;
- font-weight: bold;
- padding: 3px 4px 3px 4px;
- margin: 4px 0 4px 0;
-}
-
-
diff --git a/nano/css/layout_default.css b/nano/css/layout_default.css
deleted file mode 100644
index 109beb2c72e..00000000000
--- a/nano/css/layout_default.css
+++ /dev/null
@@ -1,128 +0,0 @@
-body {
- background: #272727 url(uiBackground.png) 50% 0 repeat-x;
-}
-
-#uiWrapper {
- width: 100%;
- height: 100%;
- -ms-user-select: none;
- user-select: none;
-}
-
-#uiTitleWrapper {
- position: relative;
- height: 30px;
-}
-
-#uiTitleText {
- position: absolute;
- top: 6px;
- left: 44px;
- width: 66%;
- overflow: hidden;
- color: #E9C183;
- font-size: 16px;
-}
-
-#uiTitle.icon {
- padding: 6px 8px 6px 42px;
- background-position: 2px 50%;
- background-repeat: no-repeat;
-}
-
-#uiTitleFluff {
- position: absolute;
- top: 4px;
- right: 12px;
- width: 42px;
- height: 24px;
- background: url(uiTitleFluff.png) 50% 50% no-repeat;
-}
-
-#uiStatusIcon {
- position: absolute;
- top: 4px;
- left: 12px;
- width: 24px;
- height: 24px;
-}
-
-#uiMapWrapper {
- clear: both;
- padding: 8px;
-}
-
-#uiMapHeader {
- position: relative;
- clear: both;
-}
-
-#uiMapContainer {
- position: relative;
- width: 100%;
- height: 600px;
- overflow: hidden;
- border: 1px solid #40628a;
- background: url(nanomapBackground.png);
-}
-
-#uiMap {
- position: absolute;
- top: 50%;
- left: 50%;
- margin: -512px 0 0 -512px;
- width: 256px;
- height: 256px;
- overflow: hidden;
- zoom: 4;
-}
-
-#uiMapImage {
- position: absolute;
- bottom: 1px;
- left: 1px;
- width: 256px;
- height: 256px;
-}
-
-#uiMapContent {
- position: absolute;
- bottom: 0px;
- left: 0px;
- width: 256px;
- height: 256px;
-}
-
-#uiMapFooter {
- position: relative;
- clear: both;
-}
-
-#uiContent {
- clear: both;
- padding: 8px;
-}
-
-#uiMapTooltip {
- position: absolute;
- right: 10px;
- top: 10px;
- border: 1px solid #40628a;
- background-color: #272727;
- padding: 8px;
- display: none;
- z-index: 9999;
-}
-
-#uiLoadingNotice {
- position: relative;
- background: url(uiNoticeBackground.jpg) 50% 50%;
- color: #000000;
- font-size: 14px;
- font-style: italic;
- font-weight: bold;
- padding: 3px 4px 3px 4px;
- margin: 4px 0 4px 0;
-}
-
-
diff --git a/nano/css/shared.css b/nano/css/shared.css
deleted file mode 100644
index fad7c0dcd78..00000000000
--- a/nano/css/shared.css
+++ /dev/null
@@ -1,599 +0,0 @@
-body {
- padding: 0;
- margin: 0;
- font-size: 12px;
- color: #ffffff;
- line-height: 170%;
- font-family: Verdana, Geneva, sans-serif;
- background: #202020;
-}
-
-#uiNoScript {
- position: fixed;
- top: 50%;
- left: 50%;
- margin: -60px 0 0 -150px;
- width: 280px;
- height: 120px;
- background: #ffffff;
- border: 2px solid #ff0000;
- color: #000000;
- font-size: 10px;
- font-weight: bold;
- z-index: 9999;
- padding: 0px 10px;
- text-align: center;
-}
-
-hr {
- background-color: #40628a;
- height: 1px;
-}
-
-.link, .linkOn, .linkOff, .selected, .disabled, .yellowButton, .redButton {
- float: left;
- min-width: 15px;
- height: 16px;
- text-align: center;
- color: #ffffff;
- text-decoration: none;
- background: #40628a;
- border: 1px solid rgba(0, 0, 0, 0.2);
- border-radius: 4px;
- padding: 0px 4px 4px 4px;
- margin: 0 2px 2px 0;
- cursor: default;
- white-space: nowrap;
-}
-
-.hasIcon {
- padding: 0px 4px 4px 0px;
-}
-
-a:hover, .zoomLink:hover, .linkActive:hover {
- background: #507aac;
-}
-
-.linkPending, .linkPending:hover {
- color: #ffffff;
- background: #507aac;
-}
-
-a.white, a.white:link, a.white:visited, a.white:active {
- color: #40628a;
- text-decoration: none;
- background: #ffffff;
- border: 1px solid rgba(0, 0, 0, 0.2);
- border-radius: 4px;
- padding: 1px 4px 1px 4px;
- margin: 0 2px 0 0;
- cursor: default;
-}
-
-a.white:hover {
- color: #ffffff;
- background: #40628a;
-}
-
-.hidden {
- display: none;
-}
-
-.linkOn, a.linkOn:link, a.linkOn:visited, a.linkOn:active, a.linkOn:hover, .selected, a.selected:link, a.selected:visited, a.selected:active, a.selected:hover {
- color: #ffffff;
- background: #2f943c;
-}
-
-.linkOff, a.linkOff:link, a.linkOff:visited, a.linkOff:active, a.linkOff:hover, .disabled, a.disabled:link, a.disabled:visited, a.disabled:active, a.disabled:hover {
- color: #ffffff;
- background: #999999;
- border-color: #666666;
-}
-
-a.icon, .linkOn.icon, .linkOff.icon, .selected.icon, .disabled.icon {
- position: relative;
- padding: 1px 4px 2px 20px;
-}
-
-a.icon img, .linkOn.icon img, .linkOff.icon img, .selected.icon img, .disabled.icon img {
- position: absolute;
- top: 0;
- left: 0;
- width: 18px;
- height: 18px;
-}
-
-.linkDanger, a.linkDanger:link, a.linkDanger:visited, a.linkDanger:active {
- color: #ffffff;
- background-color: #ff0000;
- border-color: #aa0000;
-}
-
-.linkDanger:hover {
- background-color: #ff6666;
-}
-
-ul {
- padding: 4px 0 0 10px;
- margin: 0;
- list-style-type: none;
-}
-
-li {
- padding: 0 0 2px 0;
-}
-
-img, a img {
- border-style: none;
-}
-
-h1, h2, h3, h4, h5, h6 {
- margin: 0;
- padding: 12px 0 6px 0;
- color: #FFFFFF;
- clear: both;
-}
-
-h1 {
- font-size: 18px;
-}
-
-h2 {
- font-size: 16px;
-}
-
-h3 {
- font-size: 14px;
-}
-
-h4 {
- font-size: 12px;
-}
-
-.white {
- color: white;
- font-weight: bold;
-}
-
-.good {
- color: #4f7529;
- font-weight: bold;
-}
-
-.average {
- color: #cd6500;
- font-weight: bold;
-}
-
-.bad {
- color: #ee0000;
- font-weight: bold;
-}
-
-.idle {
- color: #272727;
- font-weight: bold;
-}
-
-.redButton {
- background: #ea0000;
-}
-
-.yellowButton {
- background: #cacc00;
-}
-
-.highlight {
- color: #8BA5C4;
-}
-
-.dark {
- color: #272727;
-}
-
-.caption {
- font-size: 10px;
- font-weight: bold;
- padding: 5px;
-}
-
-.footer {
- font-size: 10px;
-}
-
-.noticePlaceholder {
- position: relative;
- font-size: 12px;
- font-style: italic;
- font-weight: bold;
- padding: 3px 4px 3px 4px;
- margin: 4px 0 4px 0;
-}
-
-.notice {
- position: relative;
- background: url(uiNoticeBackground.jpg) 50% 50%;
- color: #000000;
- font-size: 12px;
- font-style: italic;
- font-weight: bold;
- padding: 3px 4px 3px 4px;
- margin: 4px 0 4px 0;
-}
-
-.notice.icon {
- padding: 2px 4px 0 20px;
-}
-
-.notice img {
- position: absolute;
- top: 0;
- left: 0;
- width: 16px;
- height: 16px;
-}
-
-div.notice {
- clear: both;
-}
-
-.itemGroup {
- border: 1px solid #e9c183;
- background: #2c2c2c;
- padding: 4px;
- clear: both;
-}
-
-.item {
- width: 100%;
- margin: 4px 0 0 0;
- clear: both;
-}
-
-.itemContentNarrow, .itemContent {
- float: left;
-}
-
-.itemContentNarrow {
- width: 30%;
-}
-
-.itemContent {
- width: 69%;
-}
-
-.itemLabelNarrow, .itemLabel, .itemLabelWide, .itemLabelWider, .itemLabelWidest {
- float: left;
- color: #e9c183;
-}
-
-.itemLabelNarrow {
- width: 20%;
-}
-
-.itemLabel {
- width: 30%;
-}
-
-.itemLabelWide {
- width: 45%;
-}
-
-.itemLabelWider {
- width: 69%;
-}
-
-.itemLabelWidest {
- width: 100%;
-}
-
-.itemContentWide {
- float: left;
- width: 79%;
-}
-
-.itemContentSmall {
- float: left;
- width: 33%;
-}
-
-.itemContentMedium {
- float: left;
- width: 55%;
-}
-
-.statusDisplay {
- background: #000000;
- color: #ffffff;
- border: 1px solid #40628a;
- padding: 4px;
- margin: 3px 0;
-}
-
-.statusDisplayRecords {
- background: #000000;
- color: #ffffff;
- border: 1px solid #40628a;
- padding: 4px;
- margin: 3px 0;
- overflow-x: hidden;
- overflow-y: auto;
-}
-
-.statusLabel {
- width: 138px;
- float: left;
- overflow: hidden;
- color: #98B0C3;
-}
-
-.statusValue {
- float: left;
-}
-
-.block {
- padding: 8px;
- margin: 10px 4px 4px 4px;
- border: 1px solid #40628a;
- background-color: #202020;
-}
-
-.block h3 {
- padding: 0;
-}
-
-.displayBar {
- position: relative;
- width: 236px;
- height: 16px;
- border: 1px solid #666666;
- float: left;
- margin: 0 5px 0 0;
- overflow: hidden;
- background: #000000;
-}
-
-.displayBarText {
- position: absolute;
- top: -2px;
- left: 5px;
- width: 100%;
- height: 100%;
- color: #ffffff;
- font-weight: normal;
-}
-
-.displayBarFill {
- width: 0%;
- height: 100%;
- background: #40628a;
- overflow: hidden;
- float: left;
-}
-
-.displayBarFill.alignRight {
- float: right;
-}
-
-.displayBarFill.good {
- color: #ffffff;
- background: #4f7529;
-}
-
-.displayBarFill.average {
- color: #ffffff;
- background: #cd6500;
-}
-
-.displayBarFill.bad {
- color: #ffffff;
- background: #ee0000;
-}
-
-.displayBarFill.highlight {
- color: #ffffff;
- background: #8BA5C4;
-}
-
-.clearBoth {
- clear: both;
-}
-
-.clearLeft {
- clear: left;
-}
-
-.clearRight {
- clear: right;
-}
-
-.line {
- width: 100%;
- clear: both;
-}
-
-.inactive, a.inactive:link, a.inactive:visited, a.inactive:active, a.inactive:hover {
- color: #ffffff;
- background: #999999;
- border-color: #666666;
-}
-
-.fixedLeft {
- width: 110px;
- float: left;
-}
-
-.fixedLeftWide {
- width: 165px;
- float: left;
-}
-
-.fixedLeftWider {
- width: 220px;
- float: left;
-}
-
-.fixedLeftWidest {
- width: 250px;
- float: left;
-}
-
-.fixedLeftWiderRed {
- width: 220px;
- float: left;
- background: #ee0000;
-}
-
-.floatRight {
- float: right;
-}
-
-/* Used in PDA */
-
-.wholeScreen {
- position: absolute;
- color: #517087;
- font-size: 16px;
- font-weight: bold;
- text-align: center;
-}
-
-.pdalink {
- float: left;
- white-space: nowrap;
-}
-
-/* DNA Modifier UI (dna_modifier.tmpl) */
-
-.dnaBlock {
- float: left;
- width: 90px;
- padding: 0 0 5px 0;
-}
-
-.dnaBlockNumber {
- font-family: Fixed, monospace;
- float: left;
- color: #ffffff;
- background: #363636;
- min-width: 20px;
- height: 20px;
- padding: 0;
- text-align: center;
-}
-
-.dnaSubBlock {
- font-family: Fixed, monospace;
- float: left;
- padding: 0;
- min-width: 16px;
- height: 20px;
- text-align: center;
-}
-
-.mask {
- position: fixed;
- left: 0;
- top: 0;
- width: 100%;
- height: 100%;
- background: url(uiMaskBackground.png);
-}
-
-.maskContent {
- width: 100%;
- height: 200px;
- margin: 200px 0;
- text-align: center;
-}
-
-table.fixed {
- table-layout:fixed;
-}
-
-table.fixed td {
- overflow: hidden;
-}
-
-/* Table stuffs for power monitor */
-table.pmon {
- border: 2px solid RoyalBlue;
-}
-
-table.pmon td, table.pmon th {
- border-bottom: 1px dotted black;
- padding: 0px 5px 0px 5px;
-}
-
-/* Table Stuffs for manifest*/
-
-th.command {
- background: #3333FF;
- font-weight: bold;
- color: #ffffff;
-}
-
-th.sec {
- background: #8e0000;
- font-weight: bold;
- color: #ffffff;
-}
-
-th.med {
- background: #006600;
- font-weight: bold;
- color: #ffffff;
-}
-
-th.eng {
- background: #b27300;
- font-weight: bold;
- color: #ffffff;
-}
-
-th.sci {
- background: #a65ba6;
- font-weight: bold;
- color: #ffffff;
-}
-
-th.car {
- background: #bb9040;
- font-weight: bold;
- color: #ffffff;
-}
-
-th.civ {
- background: #a32800;
- font-weight: bold;
- color: #ffffff;
-}
-
-th.misc {
- background: #666666;
- font-weight: bold;
- color: #ffffff;
-}
-
-/* Damage colors for crew monitoring computer */
-
-.burn {
- color: orange;
-}
-
-.brute {
- color: red;
-}
-
-.toxin {
- color: #8ac44c;
-}
-
-.oxyloss {
- color: #00baee;
-}
-
-/* 75px width used in power monitoring console buttons */
-.width75btn {
- width: 75px;
-}
\ No newline at end of file
diff --git a/nano/images/c_charging.gif b/nano/images/c_charging.gif
deleted file mode 100644
index e080e27cfc6..00000000000
Binary files a/nano/images/c_charging.gif and /dev/null differ
diff --git a/nano/images/c_discharging.gif b/nano/images/c_discharging.gif
deleted file mode 100644
index 793fa589c2f..00000000000
Binary files a/nano/images/c_discharging.gif and /dev/null differ
diff --git a/nano/images/c_max.gif b/nano/images/c_max.gif
deleted file mode 100644
index 7f26e51d20e..00000000000
Binary files a/nano/images/c_max.gif and /dev/null differ
diff --git a/nano/images/status_icons/alarm_green.gif b/nano/images/status_icons/alarm_green.gif
deleted file mode 100644
index 7c2570c8ce3..00000000000
Binary files a/nano/images/status_icons/alarm_green.gif and /dev/null differ
diff --git a/nano/images/status_icons/alarm_red.gif b/nano/images/status_icons/alarm_red.gif
deleted file mode 100644
index 327d58e4db8..00000000000
Binary files a/nano/images/status_icons/alarm_red.gif and /dev/null differ
diff --git a/nano/images/status_icons/batt_100.gif b/nano/images/status_icons/batt_100.gif
deleted file mode 100644
index ccdbd4333e9..00000000000
Binary files a/nano/images/status_icons/batt_100.gif and /dev/null differ
diff --git a/nano/images/status_icons/batt_20.gif b/nano/images/status_icons/batt_20.gif
deleted file mode 100644
index 1d5e38fc888..00000000000
Binary files a/nano/images/status_icons/batt_20.gif and /dev/null differ
diff --git a/nano/images/status_icons/batt_40.gif b/nano/images/status_icons/batt_40.gif
deleted file mode 100644
index d5cedb99675..00000000000
Binary files a/nano/images/status_icons/batt_40.gif and /dev/null differ
diff --git a/nano/images/status_icons/batt_5.gif b/nano/images/status_icons/batt_5.gif
deleted file mode 100644
index ceac8f3a945..00000000000
Binary files a/nano/images/status_icons/batt_5.gif and /dev/null differ
diff --git a/nano/images/status_icons/batt_60.gif b/nano/images/status_icons/batt_60.gif
deleted file mode 100644
index d39534c8cb0..00000000000
Binary files a/nano/images/status_icons/batt_60.gif and /dev/null differ
diff --git a/nano/images/status_icons/batt_80.gif b/nano/images/status_icons/batt_80.gif
deleted file mode 100644
index 9c299773f01..00000000000
Binary files a/nano/images/status_icons/batt_80.gif and /dev/null differ
diff --git a/nano/images/status_icons/charging.gif b/nano/images/status_icons/charging.gif
deleted file mode 100644
index cf19ca72876..00000000000
Binary files a/nano/images/status_icons/charging.gif and /dev/null differ
diff --git a/nano/images/status_icons/downloader_finished.gif b/nano/images/status_icons/downloader_finished.gif
deleted file mode 100644
index f01b7c42af8..00000000000
Binary files a/nano/images/status_icons/downloader_finished.gif and /dev/null differ
diff --git a/nano/images/status_icons/downloader_running.gif b/nano/images/status_icons/downloader_running.gif
deleted file mode 100644
index 68fb977c86d..00000000000
Binary files a/nano/images/status_icons/downloader_running.gif and /dev/null differ
diff --git a/nano/images/status_icons/ntnrc_idle.gif b/nano/images/status_icons/ntnrc_idle.gif
deleted file mode 100644
index d47c01d5800..00000000000
Binary files a/nano/images/status_icons/ntnrc_idle.gif and /dev/null differ
diff --git a/nano/images/status_icons/ntnrc_new.gif b/nano/images/status_icons/ntnrc_new.gif
deleted file mode 100644
index af72a8b332f..00000000000
Binary files a/nano/images/status_icons/ntnrc_new.gif and /dev/null differ
diff --git a/nano/images/status_icons/power_norm.gif b/nano/images/status_icons/power_norm.gif
deleted file mode 100644
index 2b8d60edfa5..00000000000
Binary files a/nano/images/status_icons/power_norm.gif and /dev/null differ
diff --git a/nano/images/status_icons/power_warn.gif b/nano/images/status_icons/power_warn.gif
deleted file mode 100644
index 0c85b3a85a1..00000000000
Binary files a/nano/images/status_icons/power_warn.gif and /dev/null differ
diff --git a/nano/images/status_icons/sig_high.gif b/nano/images/status_icons/sig_high.gif
deleted file mode 100644
index efb20f67306..00000000000
Binary files a/nano/images/status_icons/sig_high.gif and /dev/null differ
diff --git a/nano/images/status_icons/sig_lan.gif b/nano/images/status_icons/sig_lan.gif
deleted file mode 100644
index 07ba929f7f3..00000000000
Binary files a/nano/images/status_icons/sig_lan.gif and /dev/null differ
diff --git a/nano/images/status_icons/sig_low.gif b/nano/images/status_icons/sig_low.gif
deleted file mode 100644
index 08f98baea8e..00000000000
Binary files a/nano/images/status_icons/sig_low.gif and /dev/null differ
diff --git a/nano/images/status_icons/sig_none.gif b/nano/images/status_icons/sig_none.gif
deleted file mode 100644
index 79840d8a2bd..00000000000
Binary files a/nano/images/status_icons/sig_none.gif and /dev/null differ
diff --git a/nano/images/uiBackground-Syndicate.png b/nano/images/uiBackground-Syndicate.png
deleted file mode 100644
index f7f7fa2f18e..00000000000
Binary files a/nano/images/uiBackground-Syndicate.png and /dev/null differ
diff --git a/nano/images/uiBackground.png b/nano/images/uiBackground.png
deleted file mode 100644
index 1943543a526..00000000000
Binary files a/nano/images/uiBackground.png and /dev/null differ
diff --git a/nano/images/uiBasicBackground.png b/nano/images/uiBasicBackground.png
deleted file mode 100644
index 572b1f1400a..00000000000
Binary files a/nano/images/uiBasicBackground.png and /dev/null differ
diff --git a/nano/images/uiIcons16.png b/nano/images/uiIcons16.png
deleted file mode 100644
index a337345e765..00000000000
Binary files a/nano/images/uiIcons16.png and /dev/null differ
diff --git a/nano/images/uiIcons16Green.png b/nano/images/uiIcons16Green.png
deleted file mode 100644
index 1ca23cb81d5..00000000000
Binary files a/nano/images/uiIcons16Green.png and /dev/null differ
diff --git a/nano/images/uiIcons16Red.png b/nano/images/uiIcons16Red.png
deleted file mode 100644
index 3af11de93a2..00000000000
Binary files a/nano/images/uiIcons16Red.png and /dev/null differ
diff --git a/nano/images/uiIcons24.png b/nano/images/uiIcons24.png
deleted file mode 100644
index ee51c2386bf..00000000000
Binary files a/nano/images/uiIcons24.png and /dev/null differ
diff --git a/nano/images/uiLinkPendingIcon.gif b/nano/images/uiLinkPendingIcon.gif
deleted file mode 100644
index c3070fd157a..00000000000
Binary files a/nano/images/uiLinkPendingIcon.gif and /dev/null differ
diff --git a/nano/images/uiMaskBackground.png b/nano/images/uiMaskBackground.png
deleted file mode 100644
index babc9a855e8..00000000000
Binary files a/nano/images/uiMaskBackground.png and /dev/null differ
diff --git a/nano/images/uiNoticeBackground.jpg b/nano/images/uiNoticeBackground.jpg
deleted file mode 100644
index dffe2f296b8..00000000000
Binary files a/nano/images/uiNoticeBackground.jpg and /dev/null differ
diff --git a/nano/images/uiTitleFluff-Syndicate.png b/nano/images/uiTitleFluff-Syndicate.png
deleted file mode 100644
index 675f302b9bd..00000000000
Binary files a/nano/images/uiTitleFluff-Syndicate.png and /dev/null differ
diff --git a/nano/images/uiTitleFluff.png b/nano/images/uiTitleFluff.png
deleted file mode 100644
index 99a14e66a31..00000000000
Binary files a/nano/images/uiTitleFluff.png and /dev/null differ
diff --git a/nano/js/libraries.min.js b/nano/js/libraries.min.js
deleted file mode 100644
index f27e98c7331..00000000000
--- a/nano/js/libraries.min.js
+++ /dev/null
@@ -1 +0,0 @@
-jQuery.fn.extend({everyTime:function(e,t,r,n){return this.each(function(){jQuery.timer.add(this,e,t,r,n)})},oneTime:function(e,t,r){return this.each(function(){jQuery.timer.add(this,e,t,r,1)})},stopTime:function(e,t){return this.each(function(){jQuery.timer.remove(this,e,t)})}}),jQuery.extend({timer:{global:[],guid:1,dataKey:"jQuery.timer",regex:/^([0-9]+(?:\.[0-9]*)?)\s*(.*s)?$/,powers:{ms:1,cs:10,ds:100,s:1e3,das:1e4,hs:1e5,ks:1e6},timeParse:function(e){if(null==e||null==e)return null;var t=this.regex.exec(jQuery.trim(e.toString()));return t[2]?parseFloat(t[1])*(this.powers[t[2]]||1):e},add:function(e,t,r,n,i){var o,a,u=0;jQuery.isFunction(r)&&(i=i||n,n=r,r=t),"number"!=typeof(t=jQuery.timer.timeParse(t))||isNaN(t)||t<0||(("number"!=typeof i||isNaN(i)||i<0)&&(i=0),i=i||0,(o=jQuery.data(e,this.dataKey)||jQuery.data(e,this.dataKey,{}))[r]||(o[r]={}),n.timerID=n.timerID||this.guid++,(a=function(){(++u>i&&0!==i||!1===n.call(e,u))&&jQuery.timer.remove(e,r,n)}).timerID=n.timerID,o[r][n.timerID]||(o[r][n.timerID]=window.setInterval(a,t)),this.global.push(e))},remove:function(e,t,r){var n,i=jQuery.data(e,this.dataKey);if(i){if(t){if(i[t]){if(r)r.timerID&&(window.clearInterval(i[t][r.timerID]),delete i[t][r.timerID]);else for(r in i[t])window.clearInterval(i[t][r]),delete i[t][r];for(n in i[t])break;n||(n=null,delete i[t])}}else for(t in i)this.remove(e,t,r);for(n in i)break;n||jQuery.removeData(e,this.dataKey)}}}}),jQuery(window).bind("unload",function(){jQuery.each(jQuery.timer.global,function(e,t){jQuery.timer.remove(t)})}),function(){"use strict";var u={version:"1.0.1-nanoui",templateSettings:{evaluate:/\{\{([\s\S]+?)\}\}/g,interpolate:/\{\{:([\s\S]+?)\}\}/g,encode:/\{\{>([\s\S]+?)\}\}/g,use:/\{\{#([\s\S]+?)\}\}/g,define:/\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g,conditional:/\{\{\/?if\s*([\s\S]*?)\s*\}\}/g,conditionalElse:/\{\{else\s*([\s\S]*?)\s*\}\}/g,iterate:/\{\{\/?for\s*(?:\}\}|([\s\S]+?)\s*(?:\:\s*([\w$]+))?\s*(?:\:\s*([\w$]+))?\s*\}\})/g,props:/\{\{\/?props\s*(?:\}\}|([\s\S]+?)\s*(?:\:\s*([\w$]+))?\s*(?:\:\s*([\w$]+))?\s*\}\})/g,empty:/\{\{empty\}\}/g,varname:"data, config, helper",strip:!0,append:!0,selfcontained:!1},template:void 0,compile:void 0};function s(){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"},e=/&(?!#?\w+;)|<|>|"|'|\//g;return function(){return this?this.replace(e,function(e){return t[e]||e}):this}}"undefined"!=typeof module&&module.exports?module.exports=u:"function"==typeof define&&define.amd?define(function(){return u}):function(){return this||(0,eval)("this")}().doT=u,String.prototype.encodeHTML=s();var c={append:{start:"'+(",end:")+'",endencode:"||'').toString().encodeHTML()+'"},split:{start:"';out+=(",end:");out+='",endencode:"||'').toString().encodeHTML();out+='"}},l=/$^/;function f(e){return e.replace(/\\('|\\)/g,"$1").replace(/[\r\t\n]/g," ")}u.template=function(e,t,r){var n,i=(t=t||u.templateSettings).append?c.append:c.split,o=0,a=t.use||t.define?function n(i,e,o){return("string"==typeof e?e:e.toString()).replace(i.define||l,function(e,n,t,r){return 0===n.indexOf("def.")&&(n=n.substring(4)),n in o||(":"===t?(i.defineParams&&r.replace(i.defineParams,function(e,t,r){o[n]={arg:t,text:r}}),n in o||(o[n]=r)):new Function("def","def['"+n+"']="+r)(o)),""}).replace(i.use||l,function(e,t){i.useParams&&(t=t.replace(i.useParams,function(e,t,r,n){if(o[r]&&o[r].arg&&n){var i=(r+":"+n).replace(/'|\\/g,"_");return o.__exp=o.__exp||{},o.__exp[i]=o[r].text.replace(new RegExp("(^|[^\\w$])"+o[r].arg+"([^\\w$])","g"),"$1"+n+"$2"),t+"def.__exp['"+i+"']"}}));var r=new Function("def","return "+t)(o);return r?n(i,r,o):r})}(t,e,r||{}):e,a=("var out='"+(t.strip?a.replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g," ").replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g,""):a).replace(/'|\\/g,"\\$&").replace(t.interpolate||l,function(e,t){return i.start+f(t)+i.end}).replace(t.encode||l,function(e,t){return n=!0,i.start+f(t)+i.endencode}).replace(t.conditional||l,function(e,t){return t?"';if("+f(t)+"){out+='":"';}out+='"}).replace(t.conditionalElse||l,function(e,t){return t?"';}else if("+f(t)+"){out+='":"';}else{out+='"}).replace(t.iterate||l,function(e,t,r,n){if(!t)return"';} } out+='";o+=1,r=r||"value",n=n||"index",t=f(t);var i="arr"+o;return"';var "+i+"="+t+";if("+i+" && "+i+".length > 0){var "+r+","+n+"=-1,l"+o+"="+i+".length-1;while("+n+" 0){var "+r+";for( var "+n+" in "+i+"){ if (!"+i+".hasOwnProperty("+n+")) continue; "+r+"="+i+"["+n+"];out+='"}).replace(t.empty||l,function(e){return"';}}else{if(true){out+='"}).replace(t.evaluate||l,function(e,t){return"';"+f(t)+"out+='"})+"';return out;").replace(/\n/g,"\\n").replace(/\t/g,"\\t").replace(/\r/g,"\\r").replace(/(\s|;|\}|^|\{)out\+='';/g,"$1").replace(/\+''/g,"").replace(/(\s|;|\}|^|\{)out\+=''\+/g,"$1out+=");n&&t.selfcontained&&(a="String.prototype.encodeHTML=("+s.toString()+"());"+a);try{return new Function(t.varname,a)}catch(e){throw"undefined"!=typeof console&&console.log("Could not create a template function: "+a),e}},u.compile=function(e,t){return u.template(e,null,t)}}();
\ No newline at end of file
diff --git a/nano/js/libraries/doT.js b/nano/js/libraries/doT.js
deleted file mode 100644
index a0ec5520c02..00000000000
--- a/nano/js/libraries/doT.js
+++ /dev/null
@@ -1,157 +0,0 @@
-(function () {
- "use strict";
-
- var doT = {
- version: '1.0.1-nanoui',
- templateSettings: {
- evaluate: /\{\{([\s\S]+?)\}\}/g,
- interpolate: /\{\{:([\s\S]+?)\}\}/g,
- encode: /\{\{>([\s\S]+?)\}\}/g,
- use: /\{\{#([\s\S]+?)\}\}/g,
- define: /\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g,
- conditional: /\{\{\/?if\s*([\s\S]*?)\s*\}\}/g,
- conditionalElse: /\{\{else\s*([\s\S]*?)\s*\}\}/g,
- iterate: /\{\{\/?for\s*(?:\}\}|([\s\S]+?)\s*(?:\:\s*([\w$]+))?\s*(?:\:\s*([\w$]+))?\s*\}\})/g,
- props: /\{\{\/?props\s*(?:\}\}|([\s\S]+?)\s*(?:\:\s*([\w$]+))?\s*(?:\:\s*([\w$]+))?\s*\}\})/g,
- empty: /\{\{empty\}\}/g,
- varname: 'data, config, helper',
- strip: true,
- append: true,
- selfcontained: false
- },
- template: undefined, //fn, compile template
- compile: undefined //fn, for express
- }, global;
-
- if (typeof module !== 'undefined' && module.exports) {
- module.exports = doT;
- } else if (typeof define === 'function' && define.amd) {
- define(function () {
- return doT;
- });
- } else {
- global = (function () {
- return this || (0, eval)('this');
- }());
- global.doT = doT;
- }
-
- function encodeHTMLSource() {
- var encodeHTMLRules = { "&": "&", "<": "<", ">": ">", '"': '"', "'": ''', "/": '/' },
- matchHTML = /&(?!#?\w+;)|<|>|"|'|\//g;
- return function () {
- return this ? this.replace(matchHTML, function (m) {
- return encodeHTMLRules[m] || m;
- }) : this;
- };
- }
-
- String.prototype.encodeHTML = encodeHTMLSource();
-
- var startend = {
- append: { start: "'+(", end: ")+'", endencode: "||'').toString().encodeHTML()+'" },
- split: { start: "';out+=(", end: ");out+='", endencode: "||'').toString().encodeHTML();out+='"}
- }, skip = /$^/;
-
- function resolveDefs(c, block, def) {
- return ((typeof block === 'string') ? block : block.toString())
- .replace(c.define || skip, function (m, code, assign, value) {
- if (code.indexOf('def.') === 0) {
- code = code.substring(4);
- }
- if (!(code in def)) {
- if (assign === ':') {
- if (c.defineParams) value.replace(c.defineParams, function (m, param, v) {
- def[code] = {arg: param, text: v};
- });
- if (!(code in def)) def[code] = value;
- } else {
- new Function("def", "def['" + code + "']=" + value)(def);
- }
- }
- return '';
- })
- .replace(c.use || skip, function (m, code) {
- if (c.useParams) code = code.replace(c.useParams, function (m, s, d, param) {
- if (def[d] && def[d].arg && param) {
- var rw = (d + ":" + param).replace(/'|\\/g, '_');
- def.__exp = def.__exp || {};
- def.__exp[rw] = def[d].text.replace(new RegExp("(^|[^\\w$])" + def[d].arg + "([^\\w$])", "g"), "$1" + param + "$2");
- return s + "def.__exp['" + rw + "']";
- }
- });
- var v = new Function("def", "return " + code)(def);
- return v ? resolveDefs(c, v, def) : v;
- });
- }
-
- function unescape(code) {
- return code.replace(/\\('|\\)/g, "$1").replace(/[\r\t\n]/g, ' ');
- }
-
- doT.template = function (tmpl, c, def) {
- c = c || doT.templateSettings;
- var cse = c.append ? startend.append : startend.split, needhtmlencode, sid = 0,
- str = (c.use || c.define) ? resolveDefs(c, tmpl, def || {}) : tmpl;
-
- str = ("var out='" + (c.strip ? str.replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g, ' ')
- .replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g, '') : str)
- .replace(/'|\\/g, '\\$&')
- .replace(c.interpolate || skip, function (m, code) {
- return cse.start + unescape(code) + cse.end;
- })
- .replace(c.encode || skip, function (m, code) {
- needhtmlencode = true;
- return cse.start + unescape(code) + cse.endencode;
- })
- .replace(c.conditional || skip, function (m, code) {
- return (code ? "';if(" + unescape(code) + "){out+='" : "';}out+='");
- })
- .replace(c.conditionalElse || skip, function (m, code) {
- return (code ? "';}else if(" + unescape(code) + "){out+='" : "';}else{out+='");
- })
- .replace(c.iterate || skip, function (m, iterate, vname, iname) {
- if (!iterate) return "';} } out+='";
- sid += 1;
- vname = vname || "value";
- iname = iname || "index";
- iterate = unescape(iterate);
- var arrayName = "arr" + sid;
- return "';var " + arrayName + "=" + iterate + ";if(" + arrayName + " && " + arrayName + ".length > 0){var " + vname + "," + iname + "=-1,l" + sid + "=" + arrayName + ".length-1;while(" + iname + " 0){var " + vname + ";for( var " + iname + " in " + objectName + "){ if (!" + objectName + ".hasOwnProperty(" + iname + ")) continue; " + vname + "=" + objectName + "[" + iname + "];out+='";
- })
- .replace(c.empty || skip, function (m) {
- return "';}}else{if(true){out+='"; // The "if(true)" condition is required to account for the for tag closing with two brackets
- })
- .replace(c.evaluate || skip, function (m, code) {
- return "';" + unescape(code) + "out+='";
- })
- + "';return out;")
- .replace(/\n/g, '\\n').replace(/\t/g, '\\t').replace(/\r/g, '\\r')
- .replace(/(\s|;|\}|^|\{)out\+='';/g, '$1').replace(/\+''/g, '')
- .replace(/(\s|;|\}|^|\{)out\+=''\+/g, '$1out+=');
-
- if (needhtmlencode && c.selfcontained) {
- str = "String.prototype.encodeHTML=(" + encodeHTMLSource.toString() + "());" + str;
- }
- try {
- return new Function(c.varname, str);
- } catch (e) {
- if (typeof console !== 'undefined') console.log("Could not create a template function: " + str);
- throw e;
- }
- };
-
- doT.compile = function (tmpl, def) {
- return doT.template(tmpl, null, def);
- };
-}());
\ No newline at end of file
diff --git a/nano/js/libraries/jquery.timers.js b/nano/js/libraries/jquery.timers.js
deleted file mode 100644
index 7001e503108..00000000000
--- a/nano/js/libraries/jquery.timers.js
+++ /dev/null
@@ -1,4 +0,0 @@
-jQuery.fn.extend({everyTime:function(c,a,d,b){return this.each(function(){jQuery.timer.add(this,c,a,d,b)})},oneTime:function(c,a,d){return this.each(function(){jQuery.timer.add(this,c,a,d,1)})},stopTime:function(c,a){return this.each(function(){jQuery.timer.remove(this,c,a)})}});
-jQuery.extend({timer:{global:[],guid:1,dataKey:"jQuery.timer",regex:/^([0-9]+(?:\.[0-9]*)?)\s*(.*s)?$/,powers:{ms:1,cs:10,ds:100,s:1E3,das:1E4,hs:1E5,ks:1E6},timeParse:function(c){if(c==undefined||c==null)return null;var a=this.regex.exec(jQuery.trim(c.toString()));return a[2]?parseFloat(a[1])*(this.powers[a[2]]||1):c},add:function(c,a,d,b,e){var g=0;if(jQuery.isFunction(d)){e||(e=b);b=d;d=a}a=jQuery.timer.timeParse(a);if(!(typeof a!="number"||isNaN(a)||a<0)){if(typeof e!="number"||isNaN(e)||e<0)e=
-0;e=e||0;var f=jQuery.data(c,this.dataKey)||jQuery.data(c,this.dataKey,{});f[d]||(f[d]={});b.timerID=b.timerID||this.guid++;var h=function(){if(++g>e&&e!==0||b.call(c,g)===false)jQuery.timer.remove(c,d,b)};h.timerID=b.timerID;f[d][b.timerID]||(f[d][b.timerID]=window.setInterval(h,a));this.global.push(c)}},remove:function(c,a,d){var b=jQuery.data(c,this.dataKey),e;if(b){if(a){if(b[a]){if(d){if(d.timerID){window.clearInterval(b[a][d.timerID]);delete b[a][d.timerID]}}else for(d in b[a]){window.clearInterval(b[a][d]);
-delete b[a][d]}for(e in b[a])break;if(!e){e=null;delete b[a]}}}else for(a in b)this.remove(c,a,d);for(e in b)break;e||jQuery.removeData(c,this.dataKey)}}}});jQuery(window).bind("unload",function(){jQuery.each(jQuery.timer.global,function(c,a){jQuery.timer.remove(a)})});
\ No newline at end of file
diff --git a/nano/js/nano_base_callbacks.js b/nano/js/nano_base_callbacks.js
deleted file mode 100644
index 889c6a80424..00000000000
--- a/nano/js/nano_base_callbacks.js
+++ /dev/null
@@ -1,126 +0,0 @@
-// NanoBaseCallbacks is where the base callbacks (common to all templates) are stored
-NanoBaseCallbacks = function ()
-{
- // _canClick is used to disable clicks for a short period after each click (to avoid mis-clicks)
- var _canClick = true;
-
- var _baseBeforeUpdateCallbacks = {}
-
- var _baseAfterUpdateCallbacks = {
- // this callback is triggered after new data is processed
- // it updates the status/visibility icon and adds click event handling to buttons/links
- status: function (updateData) {
- var uiStatusClass;
- if (updateData['config']['status'] == 2)
- {
- uiStatusClass = 'icon24 uiStatusGood';
- $('.linkActive').removeClass('inactive');
- }
- else if (updateData['config']['status'] == 1)
- {
- uiStatusClass = 'icon24 uiStatusAverage';
- $('.linkActive').addClass('inactive');
- }
- else
- {
- uiStatusClass = 'icon24 uiStatusBad'
- $('.linkActive').addClass('inactive');
- }
- $('#uiStatusIcon').attr('class', uiStatusClass);
-
- $('.linkActive').stopTime('linkPending');
- $('.linkActive').removeClass('linkPending');
-
- $('.linkActive')
- .off('click')
- .on('click', function (event) {
- event.preventDefault();
- var href = $(this).data('href');
- if (href != null && _canClick)
- {
- _canClick = false;
- $('body').oneTime(300, 'enableClick', function () {
- _canClick = true;
- });
- if (updateData['config']['status'] == 2)
- {
- $(this).oneTime(300, 'linkPending', function () {
- $(this).addClass('linkPending');
- });
- }
- window.location.href = href;
- }
- });
-
- return updateData;
- },
- nanomap: function (updateData) {
- $('.mapIcon')
- .off('mouseenter mouseleave')
- .on('mouseenter',
- function (event) {
- var self = this;
- $('#uiMapTooltip')
- .html($(this).children('.tooltip').html())
- .show()
- .stopTime()
- .oneTime(5000, 'hideTooltip', function () {
- $(this).fadeOut(500);
- });
- }
- );
-
- $('.zoomLink')
- .off('click')
- .on('click', function (event) {
- event.preventDefault();
- var zoomLevel = $(this).data('zoomLevel');
- var uiMapObject = $('#uiMap');
- var uiMapWidth = uiMapObject.width() * zoomLevel;
- var uiMapHeight = uiMapObject.height() * zoomLevel;
-
- uiMapObject.css({
- zoom: zoomLevel,
- left: '50%',
- top: '50%',
- marginLeft: '-' + Math.floor(uiMapWidth / 2) + 'px',
- marginTop: '-' + Math.floor(uiMapHeight / 2) + 'px'
- });
- });
-
- $('#uiMapImage').attr('src', updateData['config']['mapName'] + '-' + updateData['config']['mapZLevel'] + '.png');
-
- return updateData;
- }
- };
-
- return {
- addCallbacks: function () {
- NanoStateManager.addBeforeUpdateCallbacks(_baseBeforeUpdateCallbacks);
- NanoStateManager.addAfterUpdateCallbacks(_baseAfterUpdateCallbacks);
- },
- removeCallbacks: function () {
- for (var callbackKey in _baseBeforeUpdateCallbacks)
- {
- if (_baseBeforeUpdateCallbacks.hasOwnProperty(callbackKey))
- {
- NanoStateManager.removeBeforeUpdateCallback(callbackKey);
- }
- }
- for (var callbackKey in _baseAfterUpdateCallbacks)
- {
- if (_baseAfterUpdateCallbacks.hasOwnProperty(callbackKey))
- {
- NanoStateManager.removeAfterUpdateCallback(callbackKey);
- }
- }
- }
- };
-} ();
-
-
-
-
-
-
-
diff --git a/nano/js/nano_base_helpers.js b/nano/js/nano_base_helpers.js
deleted file mode 100644
index 20e6160fed4..00000000000
--- a/nano/js/nano_base_helpers.js
+++ /dev/null
@@ -1,213 +0,0 @@
-// NanoBaseHelpers is where the base template helpers (common to all templates) are stored
-NanoBaseHelpers = function ()
-{
- var _baseHelpers = {
- // change ui styling to "syndicate mode"
- syndicateMode: function() {
- $('body').css("background-color","#8f1414");
- $('body').css("background-image","url('uiBackground-Syndicate.png')");
- $('body').css("background-position","50% 0");
- $('body').css("background-repeat","repeat-x");
-
- $('#uiTitleFluff').css("background-image","url('uiTitleFluff-Syndicate.png')");
- $('#uiTitleFluff').css("background-position","50% 50%");
- $('#uiTitleFluff').css("background-repeat", "no-repeat");
-
- return '';
- },
- // Generate a Byond link
- link: function( text, icon, parameters, status, elementClass, elementId) {
-
- var iconHtml = '';
- var iconClass = 'noIcon';
- if (typeof icon != 'undefined' && icon)
- {
- iconHtml = '
';
- iconClass = 'hasIcon';
- }
-
- if (typeof elementClass == 'undefined' || !elementClass)
- {
- elementClass = 'link';
- }
-
- var elementIdHtml = '';
- if (typeof elementId != 'undefined' && elementId)
- {
- elementIdHtml = 'id="' + elementId + '"';
- }
-
- if (typeof status != 'undefined' && status)
- {
- return '' + iconHtml + text + '
';
- }
-
- return '' + iconHtml + text + '
';
- },
- // Round a number to the nearest integer
- round: function(number) {
- return Math.round(number);
- },
- // Returns the number fixed to 1 decimal
- fixed: function(number) {
- return Math.round(number * 10) / 10;
- },
- // Round a number down to integer
- floor: function(number) {
- return Math.floor(number);
- },
- // Round a number up to integer
- ceil: function(number) {
- return Math.ceil(number);
- },
- // Format a string (~string("Hello {0}, how are {1}?", 'Martin', 'you') becomes "Hello Martin, how are you?")
- string: function() {
- if (arguments.length == 0)
- {
- return '';
- }
- else if (arguments.length == 1)
- {
- return arguments[0];
- }
- else if (arguments.length > 1)
- {
- stringArgs = [];
- for (var i = 1; i < arguments.length; i++)
- {
- stringArgs.push(arguments[i]);
- }
- return arguments[0].format(stringArgs);
- }
- return '';
- },
- formatNumber: function(x) {
- // From http://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript
- var parts = x.toString().split(".");
- parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
- return parts.join(".");
- },
- // Capitalize the first letter of a string. From http://stackoverflow.com/questions/1026069/capitalize-the-first-letter-of-string-in-javascript
- capitalizeFirstLetter: function(string) {
- return string.charAt(0).toUpperCase() + string.slice(1);
- },
- // Display a bar. Used to show health, capacity, etc.
- displayBar: function(value, rangeMin, rangeMax, styleClass, showText) {
-
- if (rangeMin < rangeMax)
- {
- if (value < rangeMin)
- {
- value = rangeMin;
- }
- else if (value > rangeMax)
- {
- value = rangeMax;
- }
- }
- else
- {
- if (value > rangeMin)
- {
- value = rangeMin;
- }
- else if (value < rangeMax)
- {
- value = rangeMax;
- }
- }
-
- if (typeof styleClass == 'undefined' || !styleClass)
- {
- styleClass = '';
- }
-
- if (typeof showText == 'undefined' || !showText)
- {
- showText = '';
- }
-
- var percentage = Math.round((value - rangeMin) / (rangeMax - rangeMin) * 100);
-
- return '';
- },
- // Display DNA Blocks (for the DNA Modifier UI)
- displayDNABlocks: function(dnaString, selectedBlock, selectedSubblock, blockSize, paramKey) {
- if (!dnaString)
- {
- return 'Please place a valid subject into the DNA modifier.
';
- }
-
- var characters = dnaString.split('');
-
- var html = '1
';
- var block = 1;
- var subblock = 1;
- for (index in characters)
- {
- if (!characters.hasOwnProperty(index) || typeof characters[index] === 'object')
- {
- continue;
- }
-
- var parameters;
- if (paramKey.toUpperCase() == 'UI')
- {
- parameters = { 'selectUIBlock' : block, 'selectUISubblock' : subblock };
- }
- else
- {
- parameters = { 'selectSEBlock' : block, 'selectSESubblock' : subblock };
- }
-
- var status = 'linkActive';
- if (block == selectedBlock && subblock == selectedSubblock)
- {
- status = 'selected';
- }
-
- html += '
' + characters[index] + '
'
-
- index++;
- if (index % blockSize == 0 && index < characters.length)
- {
- block++;
- subblock = 1;
- html += '
' + block + '
';
- }
- else
- {
- subblock++;
- }
- }
-
- html += '
';
-
- return html;
- }
- };
-
- return {
- addHelpers: function ()
- {
- NanoTemplate.addHelpers(_baseHelpers);
- },
- removeHelpers: function ()
- {
- for (var helperKey in _baseHelpers)
- {
- if (_baseHelpers.hasOwnProperty(helperKey))
- {
- NanoTemplate.removeHelper(helperKey);
- }
- }
- }
- };
-} ();
-
-
-
-
-
-
-
diff --git a/nano/js/nano_state.js b/nano/js/nano_state.js
deleted file mode 100644
index 198fa451246..00000000000
--- a/nano/js/nano_state.js
+++ /dev/null
@@ -1,121 +0,0 @@
-// This is the base state class, it is not to be used directly
-
-function NanoStateClass() {
- /*if (typeof this.key != 'string' || !this.key.length)
- {
- alert('ERROR: Tried to create a state with an invalid state key: ' + this.key);
- return;
- }
-
- this.key = this.key.toLowerCase();
-
- NanoStateManager.addState(this);*/
-}
-
-NanoStateClass.prototype.key = null;
-NanoStateClass.prototype.layoutRendered = false;
-NanoStateClass.prototype.contentRendered = false;
-NanoStateClass.prototype.mapInitialised = false;
-
-NanoStateClass.prototype.isCurrent = function () {
- return NanoStateManager.getCurrentState() == this;
-};
-
-NanoStateClass.prototype.onAdd = function (previousState) {
- // Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function
-
- NanoBaseCallbacks.addCallbacks();
- NanoBaseHelpers.addHelpers();
-};
-
-NanoStateClass.prototype.onRemove = function (nextState) {
- // Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function
-
- NanoBaseCallbacks.removeCallbacks();
- NanoBaseHelpers.removeHelpers();
-};
-
-NanoStateClass.prototype.onBeforeUpdate = function (data) {
- // Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function
-
- data = NanoStateManager.executeBeforeUpdateCallbacks(data);
-
- return data; // Return data to continue, return false to prevent onUpdate and onAfterUpdate
-};
-
-NanoStateClass.prototype.onUpdate = function (data) {
- // Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function
-
- try
- {
- if (!this.layoutRendered || (data['config'].hasOwnProperty('autoUpdateLayout') && data['config']['autoUpdateLayout']))
- {
- $("#uiLayout").html(NanoTemplate.parse('layout', data)); // render the 'mail' template to the #mainTemplate div
- this.layoutRendered = true;
- }
- if (!this.contentRendered || (data['config'].hasOwnProperty('autoUpdateContent') && data['config']['autoUpdateContent']))
- {
- $("#uiContent").html(NanoTemplate.parse('main', data)); // render the 'mail' template to the #mainTemplate div
- this.contentRendered = true;
- }
- if (NanoTemplate.templateExists('mapContent'))
- {
- if (!this.mapInitialised)
- {
- // Add drag functionality to the map ui
- $('#uiMap').draggable({
- handle : '#uiMapImage'
- });
-
- $('#uiMapTooltip')
- .off('click')
- .on('click', function (event) {
- event.preventDefault();
- $(this).fadeOut(400);
- });
-
- this.mapInitialised = true;
- }
-
- $("#uiMapContent").html(NanoTemplate.parse('mapContent', data)); // render the 'mapContent' template to the #uiMapContent div
-
- if (data['config'].hasOwnProperty('showMap') && data['config']['showMap'])
- {
- $('#uiContent').addClass('hidden');
- $('#uiMapWrapper').removeClass('hidden');
- }
- else
- {
- $('#uiMapWrapper').addClass('hidden');
- $('#uiContent').removeClass('hidden');
- }
- }
- if (NanoTemplate.templateExists('mapHeader'))
- {
- $("#uiMapHeader").html(NanoTemplate.parse('mapHeader', data)); // render the 'mapHeader' template to the #uiMapHeader div
- }
- if (NanoTemplate.templateExists('mapFooter'))
- {
- $("#uiMapFooter").html(NanoTemplate.parse('mapFooter', data)); // render the 'mapFooter' template to the #uiMapFooter div
- }
- }
- catch(error)
- {
- alert('ERROR: An error occurred while rendering the UI: ' + error.message);
- return;
- }
-};
-
-NanoStateClass.prototype.onAfterUpdate = function (data) {
- // Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function
-
- NanoStateManager.executeAfterUpdateCallbacks(data);
-};
-
-NanoStateClass.prototype.alertText = function (text) {
- // Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function
-
- alert(text);
-};
-
-
diff --git a/nano/js/nano_state_default.js b/nano/js/nano_state_default.js
deleted file mode 100644
index 65493b8c87e..00000000000
--- a/nano/js/nano_state_default.js
+++ /dev/null
@@ -1,14 +0,0 @@
-
-NanoStateDefaultClass.inheritsFrom(NanoStateClass);
-var NanoStateDefault = new NanoStateDefaultClass();
-
-function NanoStateDefaultClass() {
-
- this.key = 'default';
-
- //this.parent.constructor.call(this);
-
- this.key = this.key.toLowerCase();
-
- NanoStateManager.addState(this);
-}
\ No newline at end of file
diff --git a/nano/js/nano_state_manager.js b/nano/js/nano_state_manager.js
deleted file mode 100644
index 84de1d1c89e..00000000000
--- a/nano/js/nano_state_manager.js
+++ /dev/null
@@ -1,220 +0,0 @@
-// NanoStateManager handles data from the server and uses it to render templates
-NanoStateManager = function ()
-{
- // _isInitialised is set to true when all of this ui's templates have been processed/rendered
- var _isInitialised = false;
-
- // the data for this ui
- var _data = null;
-
- // this is an array of callbacks which are called when new data arrives, before it is processed
- var _beforeUpdateCallbacks = {};
- // this is an array of callbacks which are called when new data arrives, before it is processed
- var _afterUpdateCallbacks = {};
-
- // this is an array of state objects, these can be used to provide custom javascript logic
- var _states = {};
-
- var _currentState = null;
-
- // the init function is called when the ui has loaded
- // this function sets up the templates and base functionality
- var init = function ()
- {
- // We store initialData and templateData in the body tag, it's as good a place as any
- _data = $('body').data('initialData');
-
- if (_data == null || !_data.hasOwnProperty('config') || !_data.hasOwnProperty('data'))
- {
- alert('Error: Initial data did not load correctly.');
- }
-
- var stateKey = 'default';
- if (_data['config'].hasOwnProperty('stateKey') && _data['config']['stateKey'])
- {
- stateKey = _data['config']['stateKey'].toLowerCase();
- }
-
- NanoStateManager.setCurrentState(stateKey);
-
- $(document).on('templatesLoaded', function () {
- doUpdate(_data);
-
- _isInitialised = true;
- });
- };
-
- // Receive update data from the server
- var receiveUpdateData = function (jsonString)
- {
- var updateData;
- try
- {
- // parse the JSON string from the server into a JSON object
- updateData = jQuery.parseJSON(jsonString);
- }
- catch (error)
- {
- alert(error.Message);
- return;
- }
-
- if (!updateData.hasOwnProperty('data'))
- {
- if (_data && _data.hasOwnProperty('data'))
- {
- updateData['data'] = _data['data'];
- }
- else
- {
- updateData['data'] = {};
- }
- }
-
- if (_isInitialised) // all templates have been registered, so render them
- {
- doUpdate(updateData);
- }
- else
- {
- _data = updateData; // all templates have not been registered. We set _data directly here which will be applied after the template is loaded with the initial data
- }
- };
-
- // This function does the update by calling the methods on the current state
- var doUpdate = function (data)
- {
- if (_currentState == null)
- {
- return;
- }
-
- data = _currentState.onBeforeUpdate(data);
-
- if (data === false)
- {
- alert('data is false, return');
- return; // A beforeUpdateCallback returned a false value, this prevents the render from occuring
- }
-
- _data = data;
-
- _currentState.onUpdate(_data);
-
- _currentState.onAfterUpdate(_data);
- };
-
- // Execute all callbacks in the callbacks array/object provided, updateData is passed to them for processing and potential modification
- var executeCallbacks = function (callbacks, data)
- {
- for (var key in callbacks)
- {
- if (callbacks.hasOwnProperty(key) && jQuery.isFunction(callbacks[key]))
- {
- data = callbacks[key].call(this, data);
- }
- }
-
- return data;
- };
-
- return {
- init: function ()
- {
- init();
- },
- receiveUpdateData: function (jsonString)
- {
- receiveUpdateData(jsonString);
- },
- addBeforeUpdateCallback: function (key, callbackFunction)
- {
- _beforeUpdateCallbacks[key] = callbackFunction;
- },
- addBeforeUpdateCallbacks: function (callbacks) {
- for (var callbackKey in callbacks) {
- if (!callbacks.hasOwnProperty(callbackKey))
- {
- continue;
- }
- NanoStateManager.addBeforeUpdateCallback(callbackKey, callbacks[callbackKey]);
- }
- },
- removeBeforeUpdateCallback: function (key)
- {
- if (_beforeUpdateCallbacks.hasOwnProperty(key))
- {
- delete _beforeUpdateCallbacks[key];
- }
- },
- executeBeforeUpdateCallbacks: function (data) {
- return executeCallbacks(_beforeUpdateCallbacks, data);
- },
- addAfterUpdateCallback: function (key, callbackFunction)
- {
- _afterUpdateCallbacks[key] = callbackFunction;
- },
- addAfterUpdateCallbacks: function (callbacks) {
- for (var callbackKey in callbacks) {
- if (!callbacks.hasOwnProperty(callbackKey))
- {
- continue;
- }
- NanoStateManager.addAfterUpdateCallback(callbackKey, callbacks[callbackKey]);
- }
- },
- removeAfterUpdateCallback: function (key)
- {
- if (_afterUpdateCallbacks.hasOwnProperty(key))
- {
- delete _afterUpdateCallbacks[key];
- }
- },
- executeAfterUpdateCallbacks: function (data) {
- return executeCallbacks(_afterUpdateCallbacks, data);
- },
- addState: function (state)
- {
- if (!(state instanceof NanoStateClass))
- {
- alert('ERROR: Attempted to add a state which is not instanceof NanoStateClass');
- return;
- }
- if (!state.key)
- {
- alert('ERROR: Attempted to add a state with an invalid stateKey');
- return;
- }
- _states[state.key] = state;
- },
- setCurrentState: function (stateKey)
- {
- if (typeof stateKey == 'undefined' || !stateKey) {
- alert('ERROR: No state key was passed!');
- return false;
- }
- if (!_states.hasOwnProperty(stateKey))
- {
- alert('ERROR: Attempted to set a current state which does not exist: ' + stateKey);
- return false;
- }
-
- var previousState = _currentState;
-
- _currentState = _states[stateKey];
-
- if (previousState != null) {
- previousState.onRemove(_currentState);
- }
-
- _currentState.onAdd(previousState);
-
- return true;
- },
- getCurrentState: function ()
- {
- return _currentState;
- }
- };
-} ();
-
\ No newline at end of file
diff --git a/nano/js/nano_template.js b/nano/js/nano_template.js
deleted file mode 100644
index 877f2315bf1..00000000000
--- a/nano/js/nano_template.js
+++ /dev/null
@@ -1,135 +0,0 @@
-
-var NanoTemplate = function () {
-
- var _templateData = {};
-
- var _templates = {};
- var _compiledTemplates = {};
-
- var _helpers = {};
-
- var init = function () {
- // We store templateData in the body tag, it's as good a place as any
- _templateData = $('body').data('templateData');
-
- if (_templateData == null)
- {
- alert('Error: Template data did not load correctly.');
- }
-
- loadNextTemplate();
- };
-
- var loadNextTemplate = function () {
- // we count the number of templates for this ui so that we know when they've all been rendered
- var templateCount = Object.size(_templateData);
-
- if (!templateCount)
- {
- $(document).trigger('templatesLoaded');
- return;
- }
-
- // load markup for each template and register it
- for (var key in _templateData)
- {
- if (!_templateData.hasOwnProperty(key))
- {
- continue;
- }
-
- $.when($.ajax({
- url: _templateData[key],
- cache: false,
- dataType: 'text'
- }))
- .done(function(templateMarkup) {
-
- templateMarkup += '
';
-
- try
- {
- NanoTemplate.addTemplate(key, templateMarkup);
- }
- catch(error)
- {
- alert('ERROR: An error occurred while loading the UI: ' + error.message);
- return;
- }
-
- delete _templateData[key];
-
- loadNextTemplate();
- })
- .fail(function () {
- alert('ERROR: Loading template ' + key + '(' + _templateData[key] + ') failed!');
- });
-
- return;
- }
- }
-
- var compileTemplates = function () {
-
- for (var key in _templates) {
- try {
- _compiledTemplates[key] = doT.template(_templates[key], null, _templates)
- }
- catch (error) {
- alert(error.message);
- }
- }
- };
-
- return {
- init: function () {
- init();
- },
- addTemplate: function (key, templateString) {
- _templates[key] = templateString;
- },
- templateExists: function (key) {
- return _templates.hasOwnProperty(key);
- },
- parse: function (templateKey, data) {
- if (!_compiledTemplates.hasOwnProperty(templateKey) || !_compiledTemplates[templateKey]) {
- if (!_templates.hasOwnProperty(templateKey)) {
- alert('ERROR: Template "' + templateKey + '" does not exist in _compiledTemplates!');
- return 'Template error (does not exist) ';
- }
- compileTemplates();
- }
- if (typeof _compiledTemplates[templateKey] != 'function') {
- alert(_compiledTemplates[templateKey]);
- alert('ERROR: Template "' + templateKey + '" failed to compile!');
- return 'Template error (failed to compile) ';
- }
- return _compiledTemplates[templateKey].call(this, data['data'], data['config'], _helpers);
- },
- addHelper: function (helperName, helperFunction) {
- if (!jQuery.isFunction(helperFunction)) {
- alert('NanoTemplate.addHelper failed to add ' + helperName + ' as it is not a function.');
- return;
- }
-
- _helpers[helperName] = helperFunction;
- },
- addHelpers: function (helpers) {
- for (var helperName in helpers) {
- if (!helpers.hasOwnProperty(helperName))
- {
- continue;
- }
- NanoTemplate.addHelper(helperName, helpers[helperName]);
- }
- },
- removeHelper: function (helperName) {
- if (helpers.hasOwnProperty(helperName))
- {
- delete _helpers[helperName];
- }
- }
- }
-}();
-
-
diff --git a/nano/js/nano_utility.js b/nano/js/nano_utility.js
deleted file mode 100644
index 59a4b2a24a6..00000000000
--- a/nano/js/nano_utility.js
+++ /dev/null
@@ -1,161 +0,0 @@
-// NanoUtility is the place to store utility functions
-var NanoUtility = function ()
-{
- var _urlParameters = {}; // This is populated with the base url parameters (used by all links), which is probaby just the "src" parameter
-
- return {
- init: function ()
- {
- var body = $('body'); // We store data in the body tag, it's as good a place as any
-
- _urlParameters = body.data('urlParameters');
- },
- // generate a Byond href, combines _urlParameters with parameters
- generateHref: function (parameters)
- {
- var queryString = '?';
-
- for (var key in _urlParameters)
- {
- if (_urlParameters.hasOwnProperty(key))
- {
- if (queryString !== '?')
- {
- queryString += ';';
- }
- queryString += key + '=' + _urlParameters[key];
- }
- }
-
- for (var key in parameters)
- {
- if (parameters.hasOwnProperty(key))
- {
- if (queryString !== '?')
- {
- queryString += ';';
- }
- queryString += key + '=' + parameters[key];
- }
- }
- return queryString;
- }
- }
-} ();
-
-if (typeof jQuery == 'undefined') {
- alert('ERROR: Javascript library failed to load!');
-}
-if (typeof doT == 'undefined') {
- alert('ERROR: Template engine failed to load!');
-}
-
-// All scripts are initialised here, this allows control of init order
-$(document).ready(function () {
- NanoUtility.init();
- NanoStateManager.init();
- NanoTemplate.init();
-});
-
-if (!Array.prototype.indexOf)
-{
- Array.prototype.indexOf = function(elt /*, from*/)
- {
- var len = this.length;
-
- var from = Number(arguments[1]) || 0;
- from = (from < 0)
- ? Math.ceil(from)
- : Math.floor(from);
- if (from < 0)
- from += len;
-
- for (; from < len; from++)
- {
- if (from in this &&
- this[from] === elt)
- return from;
- }
- return -1;
- };
-};
-
-if (!String.prototype.format)
-{
- String.prototype.format = function (args) {
- var str = this;
- return str.replace(String.prototype.format.regex, function(item) {
- var intVal = parseInt(item.substring(1, item.length - 1));
- var replace;
- if (intVal >= 0) {
- replace = args[intVal];
- } else if (intVal === -1) {
- replace = "{";
- } else if (intVal === -2) {
- replace = "}";
- } else {
- replace = "";
- }
- return replace;
- });
- };
- String.prototype.format.regex = new RegExp("{-?[0-9]+}", "g");
-};
-
-Object.size = function(obj) {
- var size = 0, key;
- for (var key in obj) {
- if (obj.hasOwnProperty(key)) size++;
- }
- return size;
-};
-
-if(!window.console) {
- window.console = {
- log : function(str) {
- return false;
- }
- };
-};
-
-String.prototype.toTitleCase = function () {
- var smallWords = /^(a|an|and|as|at|but|by|en|for|if|in|of|on|or|the|to|vs?\.?|via)$/i;
-
- return this.replace(/([^\W_]+[^\s-]*) */g, function (match, p1, index, title) {
- if (index > 0 && index + p1.length !== title.length &&
- p1.search(smallWords) > -1 && title.charAt(index - 2) !== ":" &&
- title.charAt(index - 1).search(/[^\s-]/) < 0) {
- return match.toLowerCase();
- }
-
- if (p1.substr(1).search(/[A-Z]|\../) > -1) {
- return match;
- }
-
- return match.charAt(0).toUpperCase() + match.substr(1);
- });
-};
-
-$.ajaxSetup({
- cache: false
-});
-
-Function.prototype.inheritsFrom = function (parentClassOrObject) {
- this.prototype = new parentClassOrObject;
- this.prototype.constructor = this;
- this.prototype.parent = parentClassOrObject.prototype;
- return this;
-};
-
-if (!String.prototype.trim) {
- String.prototype.trim = function () {
- return this.replace(/^\s+|\s+$/g, '');
- };
-}
-
-// Replicate the ckey proc from BYOND
-if (!String.prototype.ckey) {
- String.prototype.ckey = function () {
- return this.replace(/\W/g, '').toLowerCase();
- };
-}
\ No newline at end of file
diff --git a/nano/mapbase1024.png b/nano/mapbase1024.png
deleted file mode 100644
index a927a71b6e7..00000000000
Binary files a/nano/mapbase1024.png and /dev/null differ
diff --git a/nano/templates/engines_control.tmpl b/nano/templates/engines_control.tmpl
deleted file mode 100644
index 56c783d94de..00000000000
--- a/nano/templates/engines_control.tmpl
+++ /dev/null
@@ -1,110 +0,0 @@
-
- {{:helper.link('Overall info', 'note', {'state' :'status'}, null, data.state == 'status' ? 'selected' : null)}}
- {{:helper.link('Details', 'note', {'state' : 'engines'}, null, data.state == 'engines' ? 'selected' : null)}}
-
-
-
-
- Global controls:
-
-
- {{:helper.link(data.global_state ? 'Shut all down' : 'Power all up', 'power', {'global_toggle' : 1}, null, data.global_state ? 'selected' : null)}}
-
-
-
-
- Thrust limit:
-
-
- {{:helper.link('', 'circle-plus', { 'global_limit' : 0.1}, null, null)}}
- {{:helper.link(data.global_limit+'%', null, { 'set_global_limit' : 1 }, null, null)}}
- {{:helper.link('', 'circle-minus', { 'global_limit' : -0.1}, null, null)}}
-
-
-
-
- Total thrust:
-
-
- {{:data.total_thrust}}
-
-
-
-{{if data.state == "engines"}}
- {{if data.engines_info}}
- {{for data.engines_info}}
-
-
- Engine #{{:(index + 1)}}:
-
-
- {{:helper.link(value.eng_on ? 'Shutdown' : 'Power up', 'power', { 'toggle' : 1, 'engine' : value.eng_reference }, null, value.eng_on ? value.eng_on == 1 ? 'linkOn' : 'yellowButton' : null)}}
-
-
-
-
- Type:
-
-
- {{:value.eng_type}}
-
-
-
-
- Status:
-
-
- {{:value.eng_on ? value.eng_on == 1 ? 'Online' : 'Booting' : 'Offline'}}
- {{:value.eng_status}}
-
-
-
-
- Current thrust:
-
-
- {{:value.eng_thrust}}
-
-
-
-
- Thrust limit:
-
-
- {{:helper.link('', 'circle-plus', { 'limit' : 0.1, 'engine' : value.eng_reference }, null, null)}}
- {{:helper.link(value.eng_thrust_limiter+'%', null, { 'set_limit' : 1, 'engine' : value.eng_reference }, null, null)}}
- {{:helper.link('', 'circle-minus', { 'limit' : -0.1, 'engine' : value.eng_reference }, null, null)}}
-
-
-
- {{/for}}
- {{/if}}
-{{/if}}
-{{if data.state == "status"}}
- {{if data.engines_info}}
- {{for data.engines_info}}
-
-
-
- Engine #{{:(index + 1)}}:
-
-
- {{:helper.link(value.eng_on ? 'Shutdown' : 'Power up', 'power', { 'toggle' : 1, 'engine' : value.eng_reference }, null, value.eng_on ? value.eng_on == 1 ? 'linkOn' : 'yellowButton' : null)}}
-
-
-
-
- Thrust:
-
- Thrust limit:
-
-
- {{:value.eng_thrust}}
-
- {{:value.eng_thrust_limiter}}%
-
-
-
- {{/for}}
- {{/if}}
-{{/if}}
\ No newline at end of file
diff --git a/nano/templates/hardsuit.tmpl b/nano/templates/hardsuit.tmpl
deleted file mode 100644
index b32bb621c8e..00000000000
--- a/nano/templates/hardsuit.tmpl
+++ /dev/null
@@ -1,257 +0,0 @@
-
-
-
-
-{{if data.interfacelock || data.malf > 0}}
-
-- HARDSUIT INTERFACE OFFLINE --
-{{else}}
- {{if data.aicontrol && data.ai != 1}}
-
-- HARDSUIT CONTROL OVERRIDDEN BY AI --
- {{else}}
-
-
-
-
-
-
- Suit status:
-
-
- {{if data.sealing == 1}}
-
PROCESSING
- {{else}}
- {{if data.seals == 1}}
-
INACTIVE
- {{else}}
-
ACTIVE
- {{/if}}
- {{/if}}
-
-
- {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_seals' : 1}, null)}}
-
-
-
-
- Cover status:
-
-
- {{if data.emagged || !data.securitycheck}}
-
ERROR - MAINTENANCE LOCK CONTROL OFFLINE
- {{else}}
- {{if data.coverlock}}
-
LOCKED
- {{else}}
-
UNLOCKED
- {{/if}}
- {{/if}}
-
-
- {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_suit_lock' : 1}, null)}}
-
-
-
-
-
-
Hardware
-
Suit pieces
-
-
-
-
- Helmet:
-
-
- {{:helper.capitalizeFirstLetter(data.helmet)}}
-
- {{if data.sealing != 1}}
-
- {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_piece' : 'helmet'}, null)}}
-
- {{/if}}
-
-
-
- Gauntlets:
-
-
- {{:helper.capitalizeFirstLetter(data.gauntlets)}}
-
- {{if data.sealing != 1}}
-
- {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_piece' : 'gauntlets'}, null)}}
-
- {{/if}}
-
-
-
- Boots:
-
-
- {{:helper.capitalizeFirstLetter(data.boots)}}
-
- {{if data.sealing != 1}}
-
- {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_piece' : 'boots'}, null)}}
-
- {{/if}}
-
-
-
- Chestpiece:
-
-
- {{:helper.capitalizeFirstLetter(data.chest)}}
-
- {{if data.sealing != 1}}
-
- {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_piece' : 'chest'}, null)}}
-
- {{/if}}
-
-
-
-
System modules
- {{if data.seals == 1 || data.sealing == 1}}
-
HARDSUIT SYSTEMS OFFLINE
- {{else}}
-
Selected primary system:
- {{if data.primarysystem}}
- {{:helper.capitalizeFirstLetter(data.primarysystem)}}
- {{else}}
- None
- {{/if}}
-
- {{if data.modules}}
-
- {{for data.modules}}
-
-
-
-
{{:helper.capitalizeFirstLetter(value.name)}}
- {{if value.damage > 0}}
-
- {{if value.damage == 1}}
- (
damaged
)
- {{else}}
- (
destroyed
)
- {{/if}}
-
- {{/if}}
-
-
- Engage: {{:value.engagecost}}
- Activate: {{:value.activecost}}
- Passive: {{:value.passivecost}}
-
-
- {{:value.desc}}
-
-
- {{if value.can_use == 1}}
-
- {{:helper.link(value.engagestring, 'circle-arrow-s', {'interact_module' : value.index, 'module_mode' : 'engage'}, null)}}
-
- {{/if}}
- {{if value.can_select == 1}}
-
- {{if value.name == data.primarysystem}}
-
SELECTED
- {{else}}
- {{:helper.link('Select', 'circle-arrow-s', {'interact_module' : value.index, 'module_mode' : 'select'}, null)}}
- {{/if}}
-
- {{/if}}
- {{if value.can_toggle == 1}}
-
- {{if value.is_active == 1}}
- {{:helper.link(value.deactivatestring, 'circle-arrow-s', {'interact_module' : value.index, 'module_mode' : 'deactivate'}, null)}}
- {{else}}
- {{:helper.link(value.activatestring, 'circle-arrow-s', {'interact_module' : value.index, 'module_mode' : 'activate'}, null)}}
- {{/if}}
-
- {{/if}}
-
-
-
-
- {{if value.charges}}
-
Stored charges
-
Selected:
{{:helper.capitalizeFirstLetter(value.chargetype)}}
- {{for value.charges :itemValue:itemIndex}}
-
- {{:helper.link(helper.capitalizeFirstLetter(itemValue.caption), null, {'interact_module' : value.index, 'module_mode' : 'select_charge_type', 'charge_type' : itemValue.index}, null)}}
-
- {{/for}}
- {{/if}}
-
-
-
- {{/for}}
-
- {{else}}
- None.
- {{/if}}
- {{/if}}
- {{/if}}
-{{/if}}
\ No newline at end of file
diff --git a/nano/templates/layout_basic.tmpl b/nano/templates/layout_basic.tmpl
deleted file mode 100644
index 67fcd51f805..00000000000
--- a/nano/templates/layout_basic.tmpl
+++ /dev/null
@@ -1,3 +0,0 @@
-
\ No newline at end of file
diff --git a/nano/templates/layout_default.tmpl b/nano/templates/layout_default.tmpl
deleted file mode 100644
index 45c304ae745..00000000000
--- a/nano/templates/layout_default.tmpl
+++ /dev/null
@@ -1,73 +0,0 @@
-{{if data._PC}}
-
-
-
- {{if data._PC.showexitprogram}}
- {{:helper.link('Minimize', null, {'PC_minimize' : 1})}}
- {{:helper.link('Exit', null, {'PC_exit' : 1})}}
- {{/if}}
-
-
-
-{{/if}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/package.json b/package.json
new file mode 100644
index 00000000000..1d123f3ffce
--- /dev/null
+++ b/package.json
@@ -0,0 +1,10 @@
+{
+ "devDependencies": {
+ "@biomejs/biome": "^2.1.2",
+ "prettier": "^3.6.2"
+ },
+ "scripts": {
+ "tgui:fix": "biome check --write --unsafe tgui",
+ "tgui:lint": "biome lint tgui"
+ }
+}
diff --git a/tgui/.eslintignore b/tgui/.eslintignore
deleted file mode 100644
index a59187b933a..00000000000
--- a/tgui/.eslintignore
+++ /dev/null
@@ -1,6 +0,0 @@
-/.yarn/**
-/**/node_modules
-/**/*.bundle.*
-/**/*.chunk.*
-/**/*.hot-update.*
-/packages/inferno/**
diff --git a/tgui/.eslintrc-sonar.yml b/tgui/.eslintrc-sonar.yml
deleted file mode 100644
index 3cdd49f889e..00000000000
--- a/tgui/.eslintrc-sonar.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-rules:
- # radar/cognitive-complexity: error
- radar/max-switch-cases: error
- radar/no-all-duplicated-branches: error
- radar/no-collapsible-if: error
- radar/no-collection-size-mischeck: error
- radar/no-duplicate-string: error
- radar/no-duplicated-branches: error
- radar/no-element-overwrite: error
- radar/no-extra-arguments: error
- radar/no-identical-conditions: error
- radar/no-identical-expressions: error
- radar/no-identical-functions: error
- radar/no-inverted-boolean-check: error
- radar/no-one-iteration-loop: error
- radar/no-redundant-boolean: error
- radar/no-redundant-jump: error
- radar/no-same-line-conditional: error
- radar/no-small-switch: error
- radar/no-unused-collection: error
- radar/no-use-of-empty-return-value: error
- radar/no-useless-catch: error
- radar/prefer-immediate-return: error
- radar/prefer-object-literal: error
- radar/prefer-single-boolean-return: error
- radar/prefer-while: error
diff --git a/tgui/.eslintrc.yml b/tgui/.eslintrc.yml
deleted file mode 100644
index 4ab8f84dccc..00000000000
--- a/tgui/.eslintrc.yml
+++ /dev/null
@@ -1,766 +0,0 @@
-root: true
-extends: prettier
-parser: '@typescript-eslint/parser'
-parserOptions:
- ecmaVersion: 2020
- sourceType: module
- ecmaFeatures:
- jsx: true
-env:
- es6: true
- browser: true
- node: true
-plugins:
- - radar
- - react
- - unused-imports
-settings:
- react:
- version: '16.10'
-rules:
- ## Possible Errors
- ## ----------------------------------------
- ## Enforce “for” loop update clause moving the counter in the right
- ## direction.
- # for-direction: error
- ## Enforce return statements in getters
- # getter-return: error
- ## Disallow using an async function as a Promise executor
- no-async-promise-executor: error
- ## Disallow await inside of loops
- # no-await-in-loop: error
- ## Disallow comparing against -0
- # no-compare-neg-zero: error
- ## Disallow assignment operators in conditional expressions
- no-cond-assign: error
- ## Disallow the use of console
- # no-console: error
- ## Disallow constant expressions in conditions
- # no-constant-condition: error
- ## Disallow control characters in regular expressions
- # no-control-regex: error
- ## Disallow the use of debugger
- no-debugger: error
- ## Disallow duplicate arguments in function definitions
- no-dupe-args: error
- ## Disallow duplicate keys in object literals
- no-dupe-keys: error
- ## Disallow duplicate case labels
- no-duplicate-case: error
- ## Disallow empty block statements
- # no-empty: error
- ## Disallow empty character classes in regular expressions
- no-empty-character-class: error
- ## Disallow reassigning exceptions in catch clauses
- no-ex-assign: error
- ## Disallow unnecessary boolean casts
- no-extra-boolean-cast: error
- ## Disallow unnecessary parentheses
- # no-extra-parens: warn
- ## Disallow unnecessary semicolons
- no-extra-semi: error
- ## Disallow reassigning function declarations
- no-func-assign: error
- ## Disallow assigning to imported bindings
- no-import-assign: error
- ## Disallow variable or function declarations in nested blocks
- no-inner-declarations: error
- ## Disallow invalid regular expression strings in RegExp constructors
- no-invalid-regexp: error
- ## Disallow irregular whitespace
- no-irregular-whitespace: error
- ## Disallow characters which are made with multiple code points in character
- ## class syntax
- no-misleading-character-class: error
- ## Disallow calling global object properties as functions
- no-obj-calls: error
- ## Disallow calling some Object.prototype methods directly on objects
- no-prototype-builtins: error
- ## Disallow multiple spaces in regular expressions
- no-regex-spaces: error
- ## Disallow sparse arrays
- no-sparse-arrays: error
- ## Disallow template literal placeholder syntax in regular strings
- no-template-curly-in-string: error
- ## Disallow confusing multiline expressions
- no-unexpected-multiline: error
- ## Disallow unreachable code after return, throw, continue, and break
- ## statements
- # no-unreachable: warn
- ## Disallow control flow statements in finally blocks
- no-unsafe-finally: error
- ## Disallow negating the left operand of relational operators
- no-unsafe-negation: error
- ## Disallow assignments that can lead to race conditions due to usage of
- ## await or yield
- # require-atomic-updates: error
- ## Require calls to isNaN() when checking for NaN
- use-isnan: error
- ## Enforce comparing typeof expressions against valid strings
- valid-typeof: error
-
- ## Best practices
- ## ----------------------------------------
- ## Enforce getter and setter pairs in objects and classes
- # accessor-pairs: error
- ## Enforce return statements in callbacks of array methods
- # array-callback-return: error
- ## Enforce the use of variables within the scope they are defined
- # block-scoped-var: error
- ## Enforce that class methods utilize this
- # class-methods-use-this: error
- ## Enforce a maximum cyclomatic complexity allowed in a program
- complexity: [error, { max: 50 }]
- ## Require return statements to either always or never specify values
- # consistent-return: error
- ## Enforce consistent brace style for all control statements
- curly: [error, multi-line]
- ## Require default cases in switch statements
- # default-case: error
- ## Enforce default parameters to be last
- # default-param-last: error
- ## Enforce consistent newlines before and after dots
- dot-location: [error, property]
- ## Enforce dot notation whenever possible
- # dot-notation: error
- ## Require the use of === and !==
- eqeqeq: [error, always]
- ## Require for-in loops to include an if statement
- # guard-for-in: error
- ## Enforce a maximum number of classes per file
- # max-classes-per-file: error
- ## Disallow the use of alert, confirm, and prompt
- # no-alert: error
- ## Disallow the use of arguments.caller or arguments.callee
- # no-caller: error
- ## Disallow lexical declarations in case clauses
- no-case-declarations: error
- ## Disallow division operators explicitly at the beginning of regular
- ## expressions
- # no-div-regex: error
- ## Disallow else blocks after return statements in if statements
- # no-else-return: error
- ## Disallow empty functions
- # no-empty-function: error
- ## Disallow empty destructuring patterns
- no-empty-pattern: error
- ## Disallow null comparisons without type-checking operators
- # no-eq-null: error
- ## Disallow the use of eval()
- # no-eval: error
- ## Disallow extending native types
- # no-extend-native: error
- ## Disallow unnecessary calls to .bind()
- # no-extra-bind: error
- ## Disallow unnecessary labels
- # no-extra-label: error
- ## Disallow fallthrough of case statements
- no-fallthrough: error
- ## Disallow leading or trailing decimal points in numeric literals
- # no-floating-decimal: error
- ## Disallow assignments to native objects or read-only global variables
- no-global-assign: error
- ## Disallow shorthand type conversions
- # no-implicit-coercion: error
- ## Disallow variable and function declarations in the global scope
- # no-implicit-globals: error
- ## Disallow the use of eval()-like methods
- # no-implied-eval: error
- ## Disallow this keywords outside of classes or class-like objects
- # no-invalid-this: error
- ## Disallow the use of the __iterator__ property
- # no-iterator: error
- ## Disallow labeled statements
- # no-labels: error
- ## Disallow unnecessary nested blocks
- # no-lone-blocks: error
- ## Disallow function declarations that contain unsafe references inside
- ## loop statements
- # no-loop-func: error
- ## Disallow magic numbers
- # no-magic-numbers: error
- ## Disallow multiple spaces
- no-multi-spaces: warn
- ## Disallow multiline strings
- # no-multi-str: error
- ## Disallow new operators outside of assignments or comparisons
- # no-new: error
- ## Disallow new operators with the Function object
- # no-new-func: error
- ## Disallow new operators with the String, Number, and Boolean objects
- # no-new-wrappers: error
- ## Disallow octal literals
- no-octal: error
- ## Disallow octal escape sequences in string literals
- no-octal-escape: error
- ## Disallow reassigning function parameters
- # no-param-reassign: error
- ## Disallow the use of the __proto__ property
- # no-proto: error
- ## Disallow variable redeclaration
- no-redeclare: error
- ## Disallow certain properties on certain objects
- # no-restricted-properties: error
- ## Disallow assignment operators in return statements
- no-return-assign: error
- ## Disallow unnecessary return await
- # no-return-await: error
- ## Disallow javascript: urls
- # no-script-url: error
- ## Disallow assignments where both sides are exactly the same
- no-self-assign: error
- ## Disallow comparisons where both sides are exactly the same
- # no-self-compare: error
- ## Disallow comma operators
- no-sequences: error
- ## Disallow throwing literals as exceptions
- # no-throw-literal: error
- ## Disallow unmodified loop conditions
- # no-unmodified-loop-condition: error
- ## Disallow unused expressions
- # no-unused-expressions: error
- ## Disallow unused labels
- no-unused-labels: warn
- ## Disallow unnecessary calls to .call() and .apply()
- # no-useless-call: error
- ## Disallow unnecessary catch clauses
- # no-useless-catch: error
- ## Disallow unnecessary concatenation of literals or template literals
- # no-useless-concat: error
- ## Disallow unnecessary escape characters
- no-useless-escape: warn
- ## Disallow redundant return statements
- # no-useless-return: error
- ## Disallow void operators
- # no-void: error
- ## Disallow specified warning terms in comments
- # no-warning-comments: error
- ## Disallow with statements
- no-with: error
- ## Enforce using named capture group in regular expression
- # prefer-named-capture-group: error
- ## Require using Error objects as Promise rejection reasons
- # prefer-promise-reject-errors: error
- ## Disallow use of the RegExp constructor in favor of regular expression
- ## literals
- # prefer-regex-literals: error
- ## Enforce the consistent use of the radix argument when using parseInt()
- radix: error
- ## Disallow async functions which have no await expression
- # require-await: error
- ## Enforce the use of u flag on RegExp
- # require-unicode-regexp: error
- ## Require var declarations be placed at the top of their containing scope
- # vars-on-top: error
- ## Require parentheses around immediate function invocations
- # wrap-iife: error
- ## Require or disallow “Yoda” conditions
- # yoda: error
-
- ## Strict mode
- ## ----------------------------------------
- ## Require or disallow strict mode directives
- strict: error
-
- ## Variables
- ## ----------------------------------------
- ## Require or disallow initialization in variable declarations
- # init-declarations: error
- ## Disallow deleting variables
- no-delete-var: error
- ## Disallow labels that share a name with a variable
- # no-label-var: error
- ## Disallow specified global variables
- # no-restricted-globals: error
- ## Disallow variable declarations from shadowing variables declared in
- ## the outer scope
- # no-shadow: error
- ## Disallow identifiers from shadowing restricted names
- no-shadow-restricted-names: error
- ## Disallow the use of undeclared variables unless mentioned
- ## in /*global*/ comments
- ## NOTE: Pointless when TypeScript can check for this
- # no-undef: error
- ## Disallow initializing variables to undefined
- no-undef-init: error
- ## Disallow the use of undefined as an identifier
- # no-undefined: error
- ## Disallow unused variables
- # no-unused-vars: error
- ## Disallow the use of variables before they are defined
- # no-use-before-define: error
-
- ## Code style
- ## ----------------------------------------
- ## Enforce linebreaks after opening and before closing array brackets
- array-bracket-newline: [error, consistent]
- ## Enforce consistent spacing inside array brackets
- array-bracket-spacing: [error, never]
- ## Enforce line breaks after each array element
- # array-element-newline: error
- ## Disallow or enforce spaces inside of blocks after opening block and
- ## before closing block
- block-spacing: [error, always]
- ## Enforce consistent brace style for blocks
- # brace-style: [error, stroustrup, { allowSingleLine: false }]
- ## Enforce camelcase naming convention
- # camelcase: error
- ## Enforce or disallow capitalization of the first letter of a comment
- # capitalized-comments: error
- ## Require or disallow trailing commas
- comma-dangle: [
- error,
- {
- arrays: always-multiline,
- objects: always-multiline,
- imports: always-multiline,
- exports: always-multiline,
- functions: only-multiline, ## Optional on functions
- },
- ]
- ## Enforce consistent spacing before and after commas
- comma-spacing: [error, { before: false, after: true }]
- ## Enforce consistent comma style
- comma-style: [error, last]
- ## Enforce consistent spacing inside computed property brackets
- computed-property-spacing: [error, never]
- ## Enforce consistent naming when capturing the current execution context
- # consistent-this: error
- ## Require or disallow newline at the end of files
- # eol-last: error
- ## Require or disallow spacing between function identifiers and their
- ## invocations
- func-call-spacing: [error, never]
- ## Require function names to match the name of the variable or property
- ## to which they are assigned
- # func-name-matching: error
- ## Require or disallow named function expressions
- # func-names: error
- ## Enforce the consistent use of either function declarations or expressions
- # func-style: [error, expression]
- ## Enforce line breaks between arguments of a function call
- # function-call-argument-newline: error
- ## Enforce consistent line breaks inside function parentheses
- ## NOTE: This rule does not honor a newline on opening paren.
- # function-paren-newline: [error, never]
- ## Disallow specified identifiers
- # id-blacklist: error
- ## Enforce minimum and maximum identifier lengths
- # id-length: error
- ## Require identifiers to match a specified regular expression
- # id-match: error
- ## Enforce the location of arrow function bodies
- # implicit-arrow-linebreak: error
- ## Enforce consistent indentation
- # indent: [error, 2, { SwitchCase: 1 }]
- ## Enforce the consistent use of either double or single quotes in JSX
- ## attributes
- # jsx-quotes: [error, prefer-double]
- ## Enforce consistent spacing between keys and values in object literal
- ## properties
- # key-spacing: [error, { beforeColon: false, afterColon: true }]
- ## Enforce consistent spacing before and after keywords
- # keyword-spacing: [error, { before: true, after: true }]
- ## Enforce position of line comments
- # line-comment-position: error
- ## Enforce consistent linebreak style
- # linebreak-style: error
- ## Require empty lines around comments
- # lines-around-comment: error
- ## Require or disallow an empty line between class members
- # lines-between-class-members: error
- ## Enforce a maximum depth that blocks can be nested
- # max-depth: error
- ## Enforce a maximum line length
- # max-len: [error, {
- # code: 80,
- # ## Ignore imports
- # ignorePattern: '^(import\s.+\sfrom\s|.*require\()',
- # ignoreUrls: true,
- # ignoreRegExpLiterals: true,
- # ignoreStrings: true,
- # ignoreTemplateLiterals: true,
- # }]
- ## Enforce a maximum number of lines per file
- # max-lines: error
- ## Enforce a maximum number of line of code in a function
- # max-lines-per-function: error
- ## Enforce a maximum depth that callbacks can be nested
- # max-nested-callbacks: error
- ## Enforce a maximum number of parameters in function definitions
- # max-params: error
- ## Enforce a maximum number of statements allowed in function blocks
- # max-statements: error
- ## Enforce a maximum number of statements allowed per line
- # max-statements-per-line: error
- ## Enforce a particular style for multiline comments
- # multiline-comment-style: error
- ## Enforce newlines between operands of ternary expressions
- # multiline-ternary: [error, always-multiline]
- ## Require constructor names to begin with a capital letter
- # new-cap: error
- ## Enforce or disallow parentheses when invoking a constructor with no
- ## arguments
- # new-parens: error
- ## Require a newline after each call in a method chain
- # newline-per-chained-call: error
- ## Disallow Array constructors
- # no-array-constructor: error
- ## Disallow bitwise operators
- # no-bitwise: error
- ## Disallow continue statements
- # no-continue: error
- ## Disallow inline comments after code
- # no-inline-comments: error
- ## Disallow if statements as the only statement in else blocks
- # no-lonely-if: error
- ## Disallow mixed binary operators
- # no-mixed-operators: error
- ## Disallow mixed spaces and tabs for indentation
- # no-mixed-spaces-and-tabs: error
- ## Disallow use of chained assignment expressions
- # no-multi-assign: error
- ## Disallow multiple empty lines
- # no-multiple-empty-lines: error
- ## Disallow negated conditions
- # no-negated-condition: error
- ## Disallow nested ternary expressions
- # no-nested-ternary: error
- ## Disallow Object constructors
- # no-new-object: error
- ## Disallow the unary operators ++ and --
- # no-plusplus: error
- ## Disallow specified syntax
- # no-restricted-syntax: error
- ## Disallow all tabs
- # no-tabs: error
- ## Disallow ternary operators
- # no-ternary: error
- ## Disallow trailing whitespace at the end of lines
- # no-trailing-spaces: error
- ## Disallow dangling underscores in identifiers
- # no-underscore-dangle: error
- ## Disallow ternary operators when simpler alternatives exist
- # no-unneeded-ternary: error
- ## Disallow whitespace before properties
- # no-whitespace-before-property: error
- ## Enforce the location of single-line statements
- # nonblock-statement-body-position: error
- ## Enforce consistent line breaks inside braces
- # object-curly-newline: [error, { multiline: true }]
- ## Enforce consistent spacing inside braces
- object-curly-spacing: [error, always]
- ## Enforce placing object properties on separate lines
- # object-property-newline: error
- ## Enforce variables to be declared either together or separately in
- ## functions
- # one-var: error
- ## Require or disallow newlines around variable declarations
- # one-var-declaration-per-line: error
- ## Require or disallow assignment operator shorthand where possible
- # operator-assignment: error
- ## Enforce consistent linebreak style for operators
- # operator-linebreak: [error, before]
- ## Require or disallow padding within blocks
- # padded-blocks: error
- ## Require or disallow padding lines between statements
- # padding-line-between-statements: error
- ## Disallow using Object.assign with an object literal as the first
- ## argument and prefer the use of object spread instead.
- # prefer-object-spread: error
- ## Require quotes around object literal property names
- # quote-props: error
- ## Enforce the consistent use of either backticks, double, or single quotes
- # quotes: [error, single]
- ## Require or disallow semicolons instead of ASI
- semi: error
- ## Enforce consistent spacing before and after semicolons
- semi-spacing: [error, { before: false, after: true }]
- ## Enforce location of semicolons
- semi-style: [error, last]
- ## Require object keys to be sorted
- # sort-keys: error
- ## Require variables within the same declaration block to be sorted
- # sort-vars: error
- ## Enforce consistent spacing before blocks
- space-before-blocks: [error, always]
- ## Enforce consistent spacing before function definition opening parenthesis
- # space-before-function-paren: [error, {
- # anonymous: always,
- # named: never,
- # asyncArrow: always,
- # }]
- ## Enforce consistent spacing inside parentheses
- space-in-parens: [error, never]
- ## Require spacing around infix operators
- # space-infix-ops: error
- ## Enforce consistent spacing before or after unary operators
- # space-unary-ops: error
- ## Enforce consistent spacing after the // or /* in a comment
- spaced-comment: [error, always]
- ## Enforce spacing around colons of switch statements
- switch-colon-spacing: [error, { before: false, after: true }]
- ## Require or disallow spacing between template tags and their literals
- template-tag-spacing: [error, never]
- ## Require or disallow Unicode byte order mark (BOM)
- # unicode-bom: [error, never]
- ## Require parenthesis around regex literals
- # wrap-regex: error
-
- ## ES6
- ## ----------------------------------------
- ## Require braces around arrow function bodies
- # arrow-body-style: error
- ## Require parentheses around arrow function arguments
- # arrow-parens: [error, as-needed]
- ## Enforce consistent spacing before and after the arrow in arrow functions
- arrow-spacing: [error, { before: true, after: true }]
- ## Require super() calls in constructors
- # constructor-super: error
- ## Enforce consistent spacing around * operators in generator functions
- generator-star-spacing: [error, { before: false, after: true }]
- ## Disallow reassigning class members
- no-class-assign: error
- ## Disallow arrow functions where they could be confused with comparisons
- # no-confusing-arrow: error
- ## Disallow reassigning const variables
- no-const-assign: error
- ## Disallow duplicate class members
- no-dupe-class-members: error
- ## Disallow duplicate module imports
- # no-duplicate-imports: error
- ## Disallow new operators with the Symbol object
- no-new-symbol: error
- ## Disallow specified modules when loaded by import
- # no-restricted-imports: error
- ## Disallow this/super before calling super() in constructors
- no-this-before-super: error
- ## Disallow unnecessary computed property keys in object literals
- # no-useless-computed-key: error
- ## Disallow unnecessary constructors
- # no-useless-constructor: error
- ## Disallow renaming import, export, and destructured assignments to the
- ## same name
- # no-useless-rename: error
- ## Require let or const instead of var
- no-var: error
- ## Require or disallow method and property shorthand syntax for object
- ## literals
- # object-shorthand: error
- ## Require using arrow functions for callbacks
- prefer-arrow-callback: error
- ## Require const declarations for variables that are never reassigned after
- ## declared
- # prefer-const: error
- ## Require destructuring from arrays and/or objects
- # prefer-destructuring: error
- ## Disallow parseInt() and Number.parseInt() in favor of binary, octal, and
- ## hexadecimal literals
- # prefer-numeric-literals: error
- ## Require rest parameters instead of arguments
- # prefer-rest-params: error
- ## Require spread operators instead of .apply()
- # prefer-spread: error
- ## Require template literals instead of string concatenation
- # prefer-template: error
- ## Require generator functions to contain yield
- # require-yield: error
- ## Enforce spacing between rest and spread operators and their expressions
- # rest-spread-spacing: error
- ## Enforce sorted import declarations within modules
- # sort-imports: error
- ## Require symbol descriptions
- # symbol-description: error
- ## Require or disallow spacing around embedded expressions of template
- ## strings
- # template-curly-spacing: error
- ## Require or disallow spacing around the * in yield* expressions
- yield-star-spacing: [error, { before: false, after: true }]
-
- ## React
- ## ----------------------------------------
- ## Enforces consistent naming for boolean props
- react/boolean-prop-naming: error
- ## Forbid "button" element without an explicit "type" attribute
- react/button-has-type: error
- ## Prevent extraneous defaultProps on components
- react/default-props-match-prop-types: error
- ## Rule enforces consistent usage of destructuring assignment in component
- # react/destructuring-assignment: [error, always, { ignoreClassFields: true }]
- ## Prevent missing displayName in a React component definition
- # react/display-name: error
- ## Forbid certain props on Components
- # react/forbid-component-props: error
- ## Forbid certain props on DOM Nodes
- # react/forbid-dom-props: error
- ## Forbid certain elements
- # react/forbid-elements: error
- ## Forbid certain propTypes
- # react/forbid-prop-types: error
- ## Forbid foreign propTypes
- # react/forbid-foreign-prop-types: error
- ## Prevent using this.state inside this.setState
- react/no-access-state-in-setstate: error
- ## Prevent using Array index in key props
- # react/no-array-index-key: error
- ## Prevent passing children as props
- react/no-children-prop: error
- ## Prevent usage of dangerous JSX properties
- react/no-danger: error
- ## Prevent problem with children and props.dangerouslySetInnerHTML
- react/no-danger-with-children: error
- ## Prevent usage of deprecated methods, including component lifecycle
- ## methods
- react/no-deprecated: error
- ## Prevent usage of setState in componentDidMount
- react/no-did-mount-set-state: error
- ## Prevent usage of setState in componentDidUpdate
- react/no-did-update-set-state: error
- ## Prevent direct mutation of this.state
- react/no-direct-mutation-state: error
- ## Prevent usage of findDOMNode
- react/no-find-dom-node: error
- ## Prevent usage of isMounted
- react/no-is-mounted: error
- ## Prevent multiple component definition per file
- # react/no-multi-comp: error
- ## Prevent usage of shouldComponentUpdate when extending React.PureComponent
- react/no-redundant-should-component-update: error
- ## Prevent usage of the return value of React.render
- react/no-render-return-value: error
- ## Prevent usage of setState
- # react/no-set-state: error
- ## Prevent common casing typos
- react/no-typos: error
- ## Prevent using string references in ref attribute.
- react/no-string-refs: error
- ## Prevent using this in stateless functional components
- react/no-this-in-sfc: error
- ## Prevent invalid characters from appearing in markup
- react/no-unescaped-entities: error
- ## Prevent usage of unknown DOM property (fixable)
- # react/no-unknown-property: error
- ## Prevent usage of unsafe lifecycle methods
- react/no-unsafe: error
- ## Prevent definitions of unused prop types
- react/no-unused-prop-types: error
- ## Prevent definitions of unused state properties
- react/no-unused-state: error
- ## Prevent usage of setState in componentWillUpdate
- react/no-will-update-set-state: error
- ## Enforce ES5 or ES6 class for React Components
- react/prefer-es6-class: error
- ## Enforce that props are read-only
- react/prefer-read-only-props: error
- ## Enforce stateless React Components to be written as a pure function
- react/prefer-stateless-function: error
- ## Prevent missing props validation in a React component definition
- # react/prop-types: error
- ## Prevent missing React when using JSX
- # react/react-in-jsx-scope: error
- ## Enforce a defaultProps definition for every prop that is not a required
- ## prop
- # react/require-default-props: error
- ## Enforce React components to have a shouldComponentUpdate method
- # react/require-optimization: error
- ## Enforce ES5 or ES6 class for returning value in render function
- react/require-render-return: error
- ## Prevent extra closing tags for components without children (fixable)
- react/self-closing-comp: error
- ## Enforce component methods order (fixable)
- # react/sort-comp: error
- ## Enforce propTypes declarations alphabetical sorting
- # react/sort-prop-types: error
- ## Enforce the state initialization style to be either in a constructor or
- ## with a class property
- # react/state-in-constructor: error
- ## Enforces where React component static properties should be positioned.
- # react/static-property-placement: error
- ## Enforce style prop value being an object
- react/style-prop-object: error
- ## Prevent void DOM elements (e.g.
,
) from receiving children
- react/void-dom-elements-no-children: error
-
- ## JSX-specific rules
- ## ----------------------------------------
- ## Enforce boolean attributes notation in JSX (fixable)
- react/jsx-boolean-value: error
- ## Enforce or disallow spaces inside of curly braces in JSX attributes and
- ## expressions.
- # react/jsx-child-element-spacing: error
- ## Validate closing bracket location in JSX (fixable)
- # react/jsx-closing-bracket-location: [error, {
- # ## NOTE: Not really sure about enforcing this one
- # selfClosing: false,
- # nonEmpty: after-props,
- # }]
- ## Validate closing tag location in JSX (fixable)
- react/jsx-closing-tag-location: error
- ## Enforce or disallow newlines inside of curly braces in JSX attributes and
- ## expressions (fixable)
- # react/jsx-curly-newline: error
- ## Enforce or disallow spaces inside of curly braces in JSX attributes and
- ## expressions (fixable)
- react/jsx-curly-spacing: error
- ## Enforce or disallow spaces around equal signs in JSX attributes (fixable)
- react/jsx-equals-spacing: error
- ## Restrict file extensions that may contain JSX
- # react/jsx-filename-extension: error
- ## Enforce position of the first prop in JSX (fixable)
- # react/jsx-first-prop-new-line: error
- ## Enforce event handler naming conventions in JSX
- react/jsx-handler-names: error
- ## Validate JSX indentation (fixable)
- # react/jsx-indent: [error, 2, {
- # checkAttributes: true,
- # }]
- ## Validate props indentation in JSX (fixable)
- # react/jsx-indent-props: [error, 2]
- ## Validate JSX has key prop when in array or iterator
- react/jsx-key: error
- ## Validate JSX maximum depth
- react/jsx-max-depth: [error, { max: 10 }] ## Generous
- ## Limit maximum of props on a single line in JSX (fixable)
- # react/jsx-max-props-per-line: error
- ## Prevent usage of .bind() and arrow functions in JSX props
- # react/jsx-no-bind: error
- ## Prevent comments from being inserted as text nodes
- react/jsx-no-comment-textnodes: error
- ## Prevent duplicate props in JSX
- react/jsx-no-duplicate-props: error
- ## Prevent usage of unwrapped JSX strings
- # react/jsx-no-literals: error
- ## Prevent usage of unsafe target='_blank'
- react/jsx-no-target-blank: error
- ## Disallow undeclared variables in JSX
- react/jsx-no-undef: error
- ## Disallow unnecessary fragments (fixable)
- react/jsx-no-useless-fragment: error
- ## Limit to one expression per line in JSX
- # react/jsx-one-expression-per-line: error
- ## Enforce curly braces or disallow unnecessary curly braces in JSX
- # react/jsx-curly-brace-presence: error
- ## Enforce shorthand or standard form for React fragments
- react/jsx-fragments: error
- ## Enforce PascalCase for user-defined JSX components
- react/jsx-pascal-case: error
- ## Disallow multiple spaces between inline JSX props (fixable)
- react/jsx-props-no-multi-spaces: error
- ## Disallow JSX props spreading
- # react/jsx-props-no-spreading: error
- ## Enforce default props alphabetical sorting
- # react/jsx-sort-default-props: error
- ## Enforce props alphabetical sorting (fixable)
- # react/jsx-sort-props: error
- ## Validate whitespace in and around the JSX opening and closing brackets
- ## (fixable)
- react/jsx-tag-spacing: error
- ## Prevent React to be incorrectly marked as unused
- react/jsx-uses-react: error
- ## Prevent variables used in JSX to be incorrectly marked as unused
- react/jsx-uses-vars: error
- ## Prevent missing parentheses around multilines JSX (fixable)
- react/jsx-wrap-multilines: error
- ## Prevents the use of unused imports.
- ## This could be done by enabling no-unused-vars, but we're doing this for now
- unused-imports/no-unused-imports: error
diff --git a/tgui/.gitattributes b/tgui/.gitattributes
index 482063210d3..3103a46c242 100644
--- a/tgui/.gitattributes
+++ b/tgui/.gitattributes
@@ -6,7 +6,6 @@
*.ts text eol=lf
*.tsx text eol=lf
*.css text eol=lf
-*.cjs text eol=lf
*.scss text eol=lf
*.html text eol=lf
*.json text eol=lf
diff --git a/tgui/.gitignore b/tgui/.gitignore
index 4d0dd666d88..46b4182f604 100644
--- a/tgui/.gitignore
+++ b/tgui/.gitignore
@@ -1,24 +1,9 @@
## NPM garbage
node_modules
*.log
-package-lock.json
-
-## Yarn stuff
-/.pnp.*
-/.yarn/*
-!/.yarn/releases
-!/.yarn/plugins
-!/.yarn/sdks
-!/.yarn/versions
-!/.yarn/lock.yml
## Build artifacts
-/public/.tmp/**/*
/public/**/*
!/public/*.html
-!/public/tgui-polyfill.min.js
-/coverage
-
-## Previously ignored locations that are kept to avoid confusing git
-## while transitioning to a new project structure.
-/packages/tgui/public/**
+!/public/ntos-error.min.css
+!/public/helpers.min.js
diff --git a/tgui/.prettierignore b/tgui/.prettierignore
index 97d37c5a6fa..64ad6361de2 100644
--- a/tgui/.prettierignore
+++ b/tgui/.prettierignore
@@ -1,8 +1,12 @@
-.pnp.*
-.yarn
node_modules
+public
+
+*.js
+*.ts
+*.tsx
+*.css
+*.jsx
+*.json
-# Avoid running on any bundles.
-/public/**/*
# Running it on tgui.html is fine, however.
!/public/tgui.html
diff --git a/tgui/.prettierrc.yml b/tgui/.prettierrc.yml
index e3cf66636e8..64d6436bcd0 100644
--- a/tgui/.prettierrc.yml
+++ b/tgui/.prettierrc.yml
@@ -1,6 +1,6 @@
singleQuote: true
overrides:
- - files: 'public/tgui.html'
+ - files: 'packages/tgui-setup/helpers.js'
options:
trailingComma: es5
arrowParens: always
diff --git a/tgui/.swcrc b/tgui/.swcrc
new file mode 100644
index 00000000000..5cc7c7f5dec
--- /dev/null
+++ b/tgui/.swcrc
@@ -0,0 +1,15 @@
+{
+ "$schema": "https://swc.rs/schema.json",
+ "jsc": {
+ "loose": true,
+ "parser": {
+ "syntax": "typescript",
+ "tsx": true
+ },
+ "transform": {
+ "react": {
+ "runtime": "automatic"
+ }
+ }
+ }
+}
diff --git a/tgui/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs b/tgui/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
deleted file mode 100644
index 527659ff97f..00000000000
--- a/tgui/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
+++ /dev/null
@@ -1,363 +0,0 @@
-/* eslint-disable */
-//prettier-ignore
-module.exports = {
-name: "@yarnpkg/plugin-interactive-tools",
-factory: function (require) {
-var plugin=(()=>{var PR=Object.create,J1=Object.defineProperty,MR=Object.defineProperties,FR=Object.getOwnPropertyDescriptor,LR=Object.getOwnPropertyDescriptors,RR=Object.getOwnPropertyNames,hh=Object.getOwnPropertySymbols,NR=Object.getPrototypeOf,Z4=Object.prototype.hasOwnProperty,aD=Object.prototype.propertyIsEnumerable;var dD=(i,u,f)=>u in i?J1(i,u,{enumerable:!0,configurable:!0,writable:!0,value:f}):i[u]=f,dt=(i,u)=>{for(var f in u||(u={}))Z4.call(u,f)&&dD(i,f,u[f]);if(hh)for(var f of hh(u))aD.call(u,f)&&dD(i,f,u[f]);return i},zn=(i,u)=>MR(i,LR(u)),BR=i=>J1(i,"__esModule",{value:!0});var Si=(i,u)=>{var f={};for(var c in i)Z4.call(i,c)&&u.indexOf(c)<0&&(f[c]=i[c]);if(i!=null&&hh)for(var c of hh(i))u.indexOf(c)<0&&aD.call(i,c)&&(f[c]=i[c]);return f};var Me=(i,u)=>()=>(u||i((u={exports:{}}).exports,u),u.exports),jR=(i,u)=>{for(var f in u)J1(i,f,{get:u[f],enumerable:!0})},UR=(i,u,f)=>{if(u&&typeof u=="object"||typeof u=="function")for(let c of RR(u))!Z4.call(i,c)&&c!=="default"&&J1(i,c,{get:()=>u[c],enumerable:!(f=FR(u,c))||f.enumerable});return i},Er=i=>UR(BR(J1(i!=null?PR(NR(i)):{},"default",i&&i.__esModule&&"default"in i?{get:()=>i.default,enumerable:!0}:{value:i,enumerable:!0})),i);var ey=Me((YH,pD)=>{"use strict";var hD=Object.getOwnPropertySymbols,qR=Object.prototype.hasOwnProperty,zR=Object.prototype.propertyIsEnumerable;function WR(i){if(i==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(i)}function HR(){try{if(!Object.assign)return!1;var i=new String("abc");if(i[5]="de",Object.getOwnPropertyNames(i)[0]==="5")return!1;for(var u={},f=0;f<10;f++)u["_"+String.fromCharCode(f)]=f;var c=Object.getOwnPropertyNames(u).map(function(t){return u[t]});if(c.join("")!=="0123456789")return!1;var g={};return"abcdefghijklmnopqrst".split("").forEach(function(t){g[t]=t}),Object.keys(Object.assign({},g)).join("")==="abcdefghijklmnopqrst"}catch(t){return!1}}pD.exports=HR()?Object.assign:function(i,u){for(var f,c=WR(i),g,t=1;t
{"use strict";var ty=ey(),as=typeof Symbol=="function"&&Symbol.for,Q1=as?Symbol.for("react.element"):60103,bR=as?Symbol.for("react.portal"):60106,GR=as?Symbol.for("react.fragment"):60107,VR=as?Symbol.for("react.strict_mode"):60108,YR=as?Symbol.for("react.profiler"):60114,$R=as?Symbol.for("react.provider"):60109,KR=as?Symbol.for("react.context"):60110,XR=as?Symbol.for("react.forward_ref"):60112,JR=as?Symbol.for("react.suspense"):60113,QR=as?Symbol.for("react.memo"):60115,ZR=as?Symbol.for("react.lazy"):60116,mD=typeof Symbol=="function"&&Symbol.iterator;function Z1(i){for(var u="https://reactjs.org/docs/error-decoder.html?invariant="+i,f=1;fmh.length&&mh.push(i)}function uy(i,u,f,c){var g=typeof i;(g==="undefined"||g==="boolean")&&(i=null);var t=!1;if(i===null)t=!0;else switch(g){case"string":case"number":t=!0;break;case"object":switch(i.$$typeof){case Q1:case bR:t=!0}}if(t)return f(c,i,u===""?"."+sy(i,0):u),1;if(t=0,u=u===""?".":u+":",Array.isArray(i))for(var C=0;C{"use strict";kD.exports=xD()});var AD=Me((ga,e2)=>{(function(){var i,u="4.17.21",f=200,c="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",g="Expected a function",t="Invalid `variable` option passed into `_.template`",C="__lodash_hash_undefined__",A=500,x="__lodash_placeholder__",D=1,L=2,N=4,j=1,$=2,h=1,re=2,ce=4,Q=8,oe=16,Se=32,me=64,De=128,J=256,Te=512,Oe=30,Le="...",ot=800,ct=16,Ue=1,be=2,At=3,Ot=1/0,Nt=9007199254740991,Je=17976931348623157e292,V=0/0,ne=4294967295,ge=ne-1,Z=ne>>>1,Ae=[["ary",De],["bind",h],["bindKey",re],["curry",Q],["curryRight",oe],["flip",Te],["partial",Se],["partialRight",me],["rearg",J]],at="[object Arguments]",it="[object Array]",Ft="[object AsyncFunction]",jt="[object Boolean]",hn="[object Date]",Un="[object DOMException]",Jt="[object Error]",Yt="[object Function]",cr="[object GeneratorFunction]",w="[object Map]",pt="[object Number]",Mn="[object Null]",Bn="[object Object]",Xn="[object Promise]",vr="[object Proxy]",gr="[object RegExp]",r0="[object Set]",Ci="[object String]",yo="[object Symbol]",Ds="[object Undefined]",Mu="[object WeakMap]",Gf="[object WeakSet]",iu="[object ArrayBuffer]",ou="[object DataView]",ol="[object Float32Array]",ul="[object Float64Array]",Es="[object Int8Array]",Uo="[object Int16Array]",sl="[object Int32Array]",Ss="[object Uint8Array]",Cs="[object Uint8ClampedArray]",Ti="[object Uint16Array]",Fu="[object Uint32Array]",ll=/\b__p \+= '';/g,fl=/\b(__p \+=) '' \+/g,cl=/(__e\(.*?\)|\b__t\)) \+\n'';/g,al=/&(?:amp|lt|gt|quot|#39);/g,Ui=/[&<>"']/g,Mr=RegExp(al.source),Ac=RegExp(Ui.source),of=/<%-([\s\S]+?)%>/g,Ts=/<%([\s\S]+?)%>/g,xs=/<%=([\s\S]+?)%>/g,dl=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,qi=/^\w*$/,qo=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,kr=/[\\^$.*+?()[\]{}|]/g,Fr=RegExp(kr.source),si=/^\s+/,H0=/\s/,b0=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Bt=/\{\n\/\* \[wrapped with (.+)\] \*/,Lu=/,? & /,c0=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Ru=/[()=,{}\[\]\/\s]/,ks=/\\(\\)?/g,As=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,uu=/\w*$/,wo=/^[-+]0x[0-9a-f]+$/i,zo=/^0b[01]+$/i,Os=/^\[object .+?Constructor\]$/,Is=/^0o[0-7]+$/i,uf=/^(?:0|[1-9]\d*)$/,_n=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Nu=/($^)/,Wo=/['\n\r\u2028\u2029\\]/g,su="\\ud800-\\udfff",Ps="\\u0300-\\u036f",pl="\\ufe20-\\ufe2f",Vf="\\u20d0-\\u20ff",hl=Ps+pl+Vf,Bu="\\u2700-\\u27bf",ju="a-z\\xdf-\\xf6\\xf8-\\xff",sf="\\xac\\xb1\\xd7\\xf7",ro="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",Ms="\\u2000-\\u206f",ml=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Uu="A-Z\\xc0-\\xd6\\xd8-\\xde",G0="\\ufe0e\\ufe0f",Fs=sf+ro+Ms+ml,tt="['\u2019]",zi="["+su+"]",lu="["+Fs+"]",Ho="["+hl+"]",O0="\\d+",vl="["+Bu+"]",gl="["+ju+"]",fu="[^"+su+Fs+O0+Bu+ju+Uu+"]",_l="\\ud83c[\\udffb-\\udfff]",Sn="(?:"+Ho+"|"+_l+")",gt="[^"+su+"]",en="(?:\\ud83c[\\udde6-\\uddff]){2}",I0="[\\ud800-\\udbff][\\udc00-\\udfff]",li="["+Uu+"]",qu="\\u200d",Wi="(?:"+gl+"|"+fu+")",zu="(?:"+li+"|"+fu+")",Wu="(?:"+tt+"(?:d|ll|m|re|s|t|ve))?",Ls="(?:"+tt+"(?:D|LL|M|RE|S|T|VE))?",fi=Sn+"?",e0="["+G0+"]?",io="(?:"+qu+"(?:"+[gt,en,I0].join("|")+")"+e0+fi+")*",D0="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Do="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",i0=e0+fi+io,Rs="(?:"+[vl,en,I0].join("|")+")"+i0,a0="(?:"+[gt+Ho+"?",Ho,en,I0,zi].join("|")+")",Hu=RegExp(tt,"g"),V0=RegExp(Ho,"g"),bu=RegExp(_l+"(?="+_l+")|"+a0+i0,"g"),Ns=RegExp([li+"?"+gl+"+"+Wu+"(?="+[lu,li,"$"].join("|")+")",zu+"+"+Ls+"(?="+[lu,li+Wi,"$"].join("|")+")",li+"?"+Wi+"+"+Wu,li+"+"+Ls,Do,D0,O0,Rs].join("|"),"g"),bo=RegExp("["+qu+su+hl+G0+"]"),P0=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ln=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],lf=-1,nr={};nr[ol]=nr[ul]=nr[Es]=nr[Uo]=nr[sl]=nr[Ss]=nr[Cs]=nr[Ti]=nr[Fu]=!0,nr[at]=nr[it]=nr[iu]=nr[jt]=nr[ou]=nr[hn]=nr[Jt]=nr[Yt]=nr[w]=nr[pt]=nr[Bn]=nr[gr]=nr[r0]=nr[Ci]=nr[Mu]=!1;var rr={};rr[at]=rr[it]=rr[iu]=rr[ou]=rr[jt]=rr[hn]=rr[ol]=rr[ul]=rr[Es]=rr[Uo]=rr[sl]=rr[w]=rr[pt]=rr[Bn]=rr[gr]=rr[r0]=rr[Ci]=rr[yo]=rr[Ss]=rr[Cs]=rr[Ti]=rr[Fu]=!0,rr[Jt]=rr[Yt]=rr[Mu]=!1;var Go={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u00C7:"C",\u00E7:"c",\u00D0:"D",\u00F0:"d",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u00D1:"N",\u00F1:"n",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00DD:"Y",\u00FD:"y",\u00FF:"y",\u00C6:"Ae",\u00E6:"ae",\u00DE:"Th",\u00FE:"th",\u00DF:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010A:"C",\u010C:"C",\u0107:"c",\u0109:"c",\u010B:"c",\u010D:"c",\u010E:"D",\u0110:"D",\u010F:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011A:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011B:"e",\u011C:"G",\u011E:"G",\u0120:"G",\u0122:"G",\u011D:"g",\u011F:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012A:"I",\u012C:"I",\u012E:"I",\u0130:"I",\u0129:"i",\u012B:"i",\u012D:"i",\u012F:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013B:"L",\u013D:"L",\u013F:"L",\u0141:"L",\u013A:"l",\u013C:"l",\u013E:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014A:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014B:"n",\u014C:"O",\u014E:"O",\u0150:"O",\u014D:"o",\u014F:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015A:"S",\u015C:"S",\u015E:"S",\u0160:"S",\u015B:"s",\u015D:"s",\u015F:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016A:"U",\u016C:"U",\u016E:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016B:"u",\u016D:"u",\u016F:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017B:"Z",\u017D:"Z",\u017A:"z",\u017C:"z",\u017E:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017F:"s"},Gu={"&":"&","<":"<",">":">",'"':""","'":"'"},yl={"&":"&","<":"<",">":">",""":'"',"'":"'"},cu={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Bs=parseFloat,Vu=parseInt,M0=typeof global=="object"&&global&&global.Object===Object&&global,au=typeof self=="object"&&self&&self.Object===Object&&self,Lr=M0||au||Function("return this")(),F=typeof ga=="object"&&ga&&!ga.nodeType&&ga,R=F&&typeof e2=="object"&&e2&&!e2.nodeType&&e2,U=R&&R.exports===F,H=U&&M0.process,fe=function(){try{var ae=R&&R.require&&R.require("util").types;return ae||H&&H.binding&&H.binding("util")}catch(Be){}}(),ue=fe&&fe.isArrayBuffer,de=fe&&fe.isDate,W=fe&&fe.isMap,ve=fe&&fe.isRegExp,Fe=fe&&fe.isSet,Ge=fe&&fe.isTypedArray;function K(ae,Be,Ie){switch(Ie.length){case 0:return ae.call(Be);case 1:return ae.call(Be,Ie[0]);case 2:return ae.call(Be,Ie[0],Ie[1]);case 3:return ae.call(Be,Ie[0],Ie[1],Ie[2])}return ae.apply(Be,Ie)}function xe(ae,Be,Ie,ht){for(var mt=-1,wn=ae==null?0:ae.length;++mt-1}function wt(ae,Be,Ie){for(var ht=-1,mt=ae==null?0:ae.length;++ht-1;);return Ie}function js(ae,Be){for(var Ie=ae.length;Ie--&&Qe(Be,ae[Ie],0)>-1;);return Ie}function Dl(ae,Be){for(var Ie=ae.length,ht=0;Ie--;)ae[Ie]===Be&&++ht;return ht}var du=Cn(Go),Yu=Cn(Gu);function Us(ae){return"\\"+cu[ae]}function oo(ae,Be){return ae==null?i:ae[Be]}function Hi(ae){return bo.test(ae)}function qs(ae){return P0.test(ae)}function F0(ae){for(var Be,Ie=[];!(Be=ae.next()).done;)Ie.push(Be.value);return Ie}function Gr(ae){var Be=-1,Ie=Array(ae.size);return ae.forEach(function(ht,mt){Ie[++Be]=[mt,ht]}),Ie}function ir(ae,Be){return function(Ie){return ae(Be(Ie))}}function L0(ae,Be){for(var Ie=-1,ht=ae.length,mt=0,wn=[];++Ie-1}function Ju(a,p){var E=this.__data__,I=hf(E,a);return I<0?(++this.size,E.push([a,p])):E[I][1]=p,this}Z0.prototype.clear=df,Z0.prototype.delete=Ba,Z0.prototype.get=Oc,Z0.prototype.has=mu,Z0.prototype.set=Ju;function ei(a){var p=-1,E=a==null?0:a.length;for(this.clear();++p=p?a:p)),a}function vi(a,p,E,I,B,G){var te,se=p&D,Ee=p&L,$e=p&N;if(E&&(te=B?E(a,I,B,G):E(a)),te!==i)return te;if(!Jr(a))return a;var Ke=On(a);if(Ke){if(te=f1(a),!se)return Xr(a,te)}else{var nt=U0(a),Ct=nt==Yt||nt==cr;if(Eu(a))return Od(a,se);if(nt==Bn||nt==at||Ct&&!B){if(te=Ee||Ct?{}:zd(a),!se)return Ee?Zu(a,Wa(te,a)):j0(a,mf(te,a))}else{if(!rr[nt])return B?a:{};te=Wd(a,nt,se)}}G||(G=new co);var Gt=G.get(a);if(Gt)return Gt;G.set(a,te),kp(a)?a.forEach(function(dn){te.add(vi(dn,p,E,dn,a,G))}):Tp(a)&&a.forEach(function(dn,Yn){te.set(Yn,vi(dn,p,E,Yn,a,G))});var an=$e?Ee?Dn:r1:Ee?Yi:q0,qn=Ke?i:an(a);return je(qn||a,function(dn,Yn){qn&&(Yn=dn,dn=a[Yn]),xl(te,Yn,vi(dn,p,E,Yn,a,G))}),te}function Xf(a){var p=q0(a);return function(E){return Rc(E,a,p)}}function Rc(a,p,E){var I=E.length;if(a==null)return!I;for(a=$t(a);I--;){var B=E[I],G=p[B],te=a[B];if(te===i&&!(B in a)||!G(te))return!1}return!0}function Jf(a,p,E){if(typeof a!="function")throw new Yr(g);return wf(function(){a.apply(i,E)},p)}function ao(a,p,E,I){var B=-1,G=xt,te=!0,se=a.length,Ee=[],$e=p.length;if(!se)return Ee;E&&(p=lt(p,qr(E))),I?(G=wt,te=!1):p.length>=f&&(G=So,te=!1,p=new vu(p));e:for(;++BB?0:B+E),I=I===i||I>B?B:jn(I),I<0&&(I+=B),I=E>I?0:Ip(I);E0&&E(se)?p>1?k0(se,p-1,E,I,B):Rt(B,se):I||(B[B.length]=se)}return B}var v=ec(),m=ec(!0);function S(a,p){return a&&v(a,p,q0)}function O(a,p){return a&&m(a,p,q0)}function M(a,p){return st(p,function(E){return rs(a[E])})}function b(a,p){p=Gs(p,a);for(var E=0,I=p.length;a!=null&&Ep}function ut(a,p){return a!=null&&or.call(a,p)}function In(a,p){return a!=null&&p in $t(a)}function A0(a,p,E){return a>=kn(p,E)&&a=120&&Ke.length>=120)?new vu(te&&Ke):i}Ke=a[0];var nt=-1,Ct=se[0];e:for(;++nt-1;)se!==a&&C0.call(se,Ee,1),C0.call(a,Ee,1);return a}function jc(a,p){for(var E=a?p.length:0,I=E-1;E--;){var B=p[E];if(E==I||B!==G){var G=B;es(B)?C0.call(a,B,1):$a(a,B)}}return a}function Ga(a,p){return a+hu(Ai()*(p-a+1))}function Lm(a,p,E,I){for(var B=-1,G=wr(B0((p-a)/(E||1)),0),te=Ie(G);G--;)te[I?G:++B]=a,a+=E;return te}function Va(a,p){var E="";if(!a||p<1||p>Nt)return E;do p%2&&(E+=a),p=hu(p/2),p&&(a+=a);while(p);return E}function Wn(a,p){return m1(Gd(a,p,$i),a+"")}function wd(a){return Fc(Ef(a))}function Dd(a,p){var E=Ef(a);return Yc(E,mi(p,0,E.length))}function Ol(a,p,E,I){if(!Jr(a))return a;p=Gs(p,a);for(var B=-1,G=p.length,te=G-1,se=a;se!=null&&++BB?0:B+p),E=E>B?B:E,E<0&&(E+=B),B=p>E?0:E-p>>>0,p>>>=0;for(var G=Ie(B);++I>>1,te=a[G];te!==null&&!mo(te)&&(E?te<=p:te =f){var $e=p?null:bm(a);if($e)return Y0($e);te=!1,B=So,Ee=new vu}else Ee=p?[]:se;e:for(;++I=I?a:Oo(a,p,E)}var Ad=pu||function(a){return Lr.clearTimeout(a)};function Od(a,p){if(p)return a.slice();var E=a.length,I=Nr?Nr(E):new a.constructor(E);return a.copy(I),I}function Qa(a){var p=new a.constructor(a.byteLength);return new R0(p).set(new R0(a)),p}function jm(a,p){var E=p?Qa(a.buffer):a.buffer;return new a.constructor(E,a.byteOffset,a.byteLength)}function Um(a){var p=new a.constructor(a.source,uu.exec(a));return p.lastIndex=a.lastIndex,p}function qm(a){return Wr?$t(Wr.call(a)):{}}function Id(a,p){var E=p?Qa(a.buffer):a.buffer;return new a.constructor(E,a.byteOffset,a.length)}function Pd(a,p){if(a!==p){var E=a!==i,I=a===null,B=a===a,G=mo(a),te=p!==i,se=p===null,Ee=p===p,$e=mo(p);if(!se&&!$e&&!G&&a>p||G&&te&&Ee&&!se&&!$e||I&&te&&Ee||!E&&Ee||!B)return 1;if(!I&&!G&&!$e&&a=se)return Ee;var $e=E[I];return Ee*($e=="desc"?-1:1)}}return a.index-p.index}function gf(a,p,E,I){for(var B=-1,G=a.length,te=E.length,se=-1,Ee=p.length,$e=wr(G-te,0),Ke=Ie(Ee+$e),nt=!I;++se1?E[B-1]:i,te=B>2?E[2]:i;for(G=a.length>3&&typeof G=="function"?(B--,G):i,te&&Ii(E[0],E[1],te)&&(G=B<3?i:G,B=1),p=$t(p);++I-1?B[G?p[te]:te]:i}}function Rd(a){return yu(function(p){var E=p.length,I=E,B=Qn.prototype.thru;for(a&&p.reverse();I--;){var G=p[I];if(typeof G!="function")throw new Yr(g);if(B&&!te&&Gc(G)=="wrapper")var te=new Qn([],!0)}for(I=te?I:E;++I1&&er.reverse(),Ke&&Eese))return!1;var $e=G.get(a),Ke=G.get(p);if($e&&Ke)return $e==p&&Ke==a;var nt=-1,Ct=!0,Gt=E&$?new vu:i;for(G.set(a,p),G.set(p,a);++nt1?"& ":"")+p[I],p=p.join(E>2?", ":" "),a.replace(b0,`{
-/* [wrapped with `+p+`] */
-`)}function Xm(a){return On(a)||Ll(a)||!!(di&&a&&a[di])}function es(a,p){var E=typeof a;return p=p==null?Nt:p,!!p&&(E=="number"||E!="symbol"&&uf.test(a))&&a>-1&&a%1==0&&a0){if(++p>=ot)return arguments[0]}else p=0;return a.apply(i,arguments)}}function Yc(a,p){var E=-1,I=a.length,B=I-1;for(p=p===i?I:p;++E
1?a[p-1]:i;return E=typeof E=="function"?(a.pop(),E):i,sp(a,E)});function fp(a){var p=z(a);return p.__chain__=!0,p}function cp(a,p){return p(a),a}function Kc(a,p){return p(a)}var Wv=yu(function(a){var p=a.length,E=p?a[0]:0,I=this.__wrapped__,B=function(G){return Hs(G,a)};return p>1||this.__actions__.length||!(I instanceof nn)||!es(E)?this.thru(B):(I=I.slice(E,+E+(p?1:0)),I.__actions__.push({func:Kc,args:[B],thisArg:i}),new Qn(I,this.__chain__).thru(function(G){return p&&!G.length&&G.push(i),G}))});function Hv(){return fp(this)}function bv(){return new Qn(this.value(),this.__chain__)}function Gv(){this.__values__===i&&(this.__values__=Op(this.value()));var a=this.__index__>=this.__values__.length,p=a?i:this.__values__[this.__index__++];return{done:a,value:p}}function Vv(){return this}function Yv(a){for(var p,E=this;E instanceof Or;){var I=Jd(E);I.__index__=0,I.__values__=i,p?B.__wrapped__=I:p=I;var B=I;E=E.__wrapped__}return B.__wrapped__=a,p}function Ml(){var a=this.__wrapped__;if(a instanceof nn){var p=a;return this.__actions__.length&&(p=new nn(this)),p=p.reverse(),p.__actions__.push({func:Kc,args:[g1],thisArg:i}),new Qn(p,this.__chain__)}return this.thru(g1)}function Fl(){return xd(this.__wrapped__,this.__actions__)}var Xc=_f(function(a,p,E){or.call(a,E)?++a[E]:ti(a,E,1)});function $v(a,p,E){var I=On(a)?rt:Nc;return E&&Ii(a,p,E)&&(p=i),I(a,cn(p,3))}function Kv(a,p){var E=On(a)?st:Qf;return E(a,cn(p,3))}var Xv=Ld(Qd),D1=Ld($c);function Jv(a,p){return k0(Jc(a,p),1)}function Qv(a,p){return k0(Jc(a,p),Ot)}function ap(a,p,E){return E=E===i?1:jn(E),k0(Jc(a,p),E)}function dp(a,p){var E=On(a)?je:$o;return E(a,cn(p,3))}function pp(a,p){var E=On(a)?Xe:kl;return E(a,cn(p,3))}var Zv=_f(function(a,p,E){or.call(a,E)?a[E].push(p):ti(a,E,[p])});function eg(a,p,E,I){a=Vi(a)?a:Ef(a),E=E&&!I?jn(E):0;var B=a.length;return E<0&&(E=wr(B+E,0)),ia(a)?E<=B&&a.indexOf(p,E)>-1:!!B&&Qe(a,p,E)>-1}var tg=Wn(function(a,p,E){var I=-1,B=typeof p=="function",G=Vi(a)?Ie(a.length):[];return $o(a,function(te){G[++I]=B?K(p,te,E):po(te,p,E)}),G}),hp=_f(function(a,p,E){ti(a,E,p)});function Jc(a,p){var E=On(a)?lt:vd;return E(a,cn(p,3))}function ng(a,p,E,I){return a==null?[]:(On(p)||(p=p==null?[]:[p]),E=I?i:E,On(E)||(E=E==null?[]:[E]),Oi(a,p,E))}var rg=_f(function(a,p,E){a[E?0:1].push(p)},function(){return[[],[]]});function mp(a,p,E){var I=On(a)?yn:bn,B=arguments.length<3;return I(a,cn(p,4),E,B,$o)}function ig(a,p,E){var I=On(a)?sn:bn,B=arguments.length<3;return I(a,cn(p,4),E,B,kl)}function og(a,p){var E=On(a)?st:Qf;return E(a,Zc(cn(p,3)))}function ug(a){var p=On(a)?Fc:wd;return p(a)}function sg(a,p,E){(E?Ii(a,p,E):p===i)?p=1:p=jn(p);var I=On(a)?Lc:Dd;return I(a,p)}function lg(a){var p=On(a)?Kf:Ao;return p(a)}function E1(a){if(a==null)return 0;if(Vi(a))return ia(a)?Rr(a):a.length;var p=U0(a);return p==w||p==r0?a.size:Zf(a).length}function fg(a,p,E){var I=On(a)?ar:Nm;return E&&Ii(a,p,E)&&(p=i),I(a,cn(p,3))}var cg=Wn(function(a,p){if(a==null)return[];var E=p.length;return E>1&&Ii(a,p[0],p[1])?p=[]:E>2&&Ii(p[0],p[1],p[2])&&(p=[p[0]]),Oi(a,k0(p,1),[])}),rc=Sl||function(){return Lr.Date.now()};function ag(a,p){if(typeof p!="function")throw new Yr(g);return a=jn(a),function(){if(--a<1)return p.apply(this,arguments)}}function vp(a,p,E){return p=E?i:p,p=a&&p==null?a.length:p,Lt(a,De,i,i,i,i,p)}function gp(a,p){var E;if(typeof p!="function")throw new Yr(g);return a=jn(a),function(){return--a>0&&(E=p.apply(this,arguments)),a<=1&&(p=i),E}}var S1=Wn(function(a,p,E){var I=h;if(E.length){var B=L0(E,An(S1));I|=Se}return Lt(a,I,p,E,B)}),_p=Wn(function(a,p,E){var I=h|re;if(E.length){var B=L0(E,An(_p));I|=Se}return Lt(p,I,a,E,B)});function C1(a,p,E){p=E?i:p;var I=Lt(a,Q,i,i,i,i,i,p);return I.placeholder=C1.placeholder,I}function yp(a,p,E){p=E?i:p;var I=Lt(a,oe,i,i,i,i,i,p);return I.placeholder=yp.placeholder,I}function wp(a,p,E){var I,B,G,te,se,Ee,$e=0,Ke=!1,nt=!1,Ct=!0;if(typeof a!="function")throw new Yr(g);p=Fo(p)||0,Jr(E)&&(Ke=!!E.leading,nt="maxWait"in E,G=nt?wr(Fo(E.maxWait)||0,p):G,Ct="trailing"in E?!!E.trailing:Ct);function Gt(f0){var Jo=I,Su=B;return I=B=i,$e=f0,te=a.apply(Su,Jo),te}function an(f0){return $e=f0,se=wf(Yn,p),Ke?Gt(f0):te}function qn(f0){var Jo=f0-Ee,Su=f0-$e,Zp=p-Jo;return nt?kn(Zp,G-Su):Zp}function dn(f0){var Jo=f0-Ee,Su=f0-$e;return Ee===i||Jo>=p||Jo<0||nt&&Su>=G}function Yn(){var f0=rc();if(dn(f0))return er(f0);se=wf(Yn,qn(f0))}function er(f0){return se=i,Ct&&I?Gt(f0):(I=B=i,te)}function vo(){se!==i&&Ad(se),$e=0,I=Ee=B=se=i}function Pi(){return se===i?te:er(rc())}function Mi(){var f0=rc(),Jo=dn(f0);if(I=arguments,B=this,Ee=f0,Jo){if(se===i)return an(Ee);if(nt)return Ad(se),se=wf(Yn,p),Gt(Ee)}return se===i&&(se=wf(Yn,p)),te}return Mi.cancel=vo,Mi.flush=Pi,Mi}var dg=Wn(function(a,p){return Jf(a,1,p)}),Dp=Wn(function(a,p,E){return Jf(a,Fo(p)||0,E)});function pg(a){return Lt(a,Te)}function Qc(a,p){if(typeof a!="function"||p!=null&&typeof p!="function")throw new Yr(g);var E=function(){var I=arguments,B=p?p.apply(this,I):I[0],G=E.cache;if(G.has(B))return G.get(B);var te=a.apply(this,I);return E.cache=G.set(B,te)||G,te};return E.cache=new(Qc.Cache||ei),E}Qc.Cache=ei;function Zc(a){if(typeof a!="function")throw new Yr(g);return function(){var p=arguments;switch(p.length){case 0:return!a.call(this);case 1:return!a.call(this,p[0]);case 2:return!a.call(this,p[0],p[1]);case 3:return!a.call(this,p[0],p[1],p[2])}return!a.apply(this,p)}}function ea(a){return gp(2,a)}var hg=Bm(function(a,p){p=p.length==1&&On(p[0])?lt(p[0],qr(cn())):lt(k0(p,1),qr(cn()));var E=p.length;return Wn(function(I){for(var B=-1,G=kn(I.length,E);++B=p}),Ll=_i(function(){return arguments}())?_i:function(a){return n0(a)&&or.call(a,"callee")&&!N0.call(a,"callee")},On=Ie.isArray,x1=ue?qr(ue):Re;function Vi(a){return a!=null&&na(a.length)&&!rs(a)}function l0(a){return n0(a)&&Vi(a)}function kg(a){return a===!0||a===!1||n0(a)&&Ye(a)==jt}var Eu=pi||W1,Ag=de?qr(de):Ce;function Og(a){return n0(a)&&a.nodeType===1&&!ic(a)}function Cp(a){if(a==null)return!0;if(Vi(a)&&(On(a)||typeof a=="string"||typeof a.splice=="function"||Eu(a)||Df(a)||Ll(a)))return!a.length;var p=U0(a);if(p==w||p==r0)return!a.size;if(nc(a))return!Zf(a).length;for(var E in a)if(or.call(a,E))return!1;return!0}function Ig(a,p){return ze(a,p)}function Pg(a,p,E){E=typeof E=="function"?E:i;var I=E?E(a,p):i;return I===i?ze(a,p,i,E):!!I}function k1(a){if(!n0(a))return!1;var p=Ye(a);return p==Jt||p==Un||typeof a.message=="string"&&typeof a.name=="string"&&!ic(a)}function Mg(a){return typeof a=="number"&&Br(a)}function rs(a){if(!Jr(a))return!1;var p=Ye(a);return p==Yt||p==cr||p==Ft||p==vr}function A1(a){return typeof a=="number"&&a==jn(a)}function na(a){return typeof a=="number"&&a>-1&&a%1==0&&a<=Nt}function Jr(a){var p=typeof a;return a!=null&&(p=="object"||p=="function")}function n0(a){return a!=null&&typeof a=="object"}var Tp=W?qr(W):on;function Fg(a,p){return a===p||sr(a,p,Nn(p))}function Lg(a,p,E){return E=typeof E=="function"?E:i,sr(a,p,Nn(p),E)}function Rg(a){return xp(a)&&a!=+a}function Ng(a){if(Zm(a))throw new mt(c);return mn(a)}function Bg(a){return a===null}function O1(a){return a==null}function xp(a){return typeof a=="number"||n0(a)&&Ye(a)==pt}function ic(a){if(!n0(a)||Ye(a)!=Bn)return!1;var p=uo(a);if(p===null)return!0;var E=or.call(p,"constructor")&&p.constructor;return typeof E=="function"&&E instanceof E&&bi.call(E)==af}var ra=ve?qr(ve):pr;function jg(a){return A1(a)&&a>=-Nt&&a<=Nt}var kp=Fe?qr(Fe):Hr;function ia(a){return typeof a=="string"||!On(a)&&n0(a)&&Ye(a)==Ci}function mo(a){return typeof a=="symbol"||n0(a)&&Ye(a)==yo}var Df=Ge?qr(Ge):Vn;function Ap(a){return a===i}function Ug(a){return n0(a)&&U0(a)==Mu}function qg(a){return n0(a)&&Ye(a)==Gf}var zg=bc(Ha),Wg=bc(function(a,p){return a<=p});function Op(a){if(!a)return[];if(Vi(a))return ia(a)?Jn(a):Xr(a);if(u0&&a[u0])return F0(a[u0]());var p=U0(a),E=p==w?Gr:p==r0?Y0:Ef;return E(a)}function is(a){if(!a)return a===0?a:0;if(a=Fo(a),a===Ot||a===-Ot){var p=a<0?-1:1;return p*Je}return a===a?a:0}function jn(a){var p=is(a),E=p%1;return p===p?E?p-E:p:0}function Ip(a){return a?mi(jn(a),0,ne):0}function Fo(a){if(typeof a=="number")return a;if(mo(a))return V;if(Jr(a)){var p=typeof a.valueOf=="function"?a.valueOf():a;a=Jr(p)?p+"":p}if(typeof a!="string")return a===0?a:+a;a=E0(a);var E=zo.test(a);return E||Is.test(a)?Vu(a.slice(2),E?2:8):wo.test(a)?V:+a}function oa(a){return yi(a,Yi(a))}function Hg(a){return a?mi(jn(a),-Nt,Nt):a===0?a:0}function yr(a){return a==null?"":ho(a)}var Pp=Io(function(a,p){if(nc(p)||Vi(p)){yi(p,q0(p),a);return}for(var E in p)or.call(p,E)&&xl(a,E,p[E])}),Mp=Io(function(a,p){yi(p,Yi(p),a)}),ua=Io(function(a,p,E,I){yi(p,Yi(p),a,I)}),bg=Io(function(a,p,E,I){yi(p,q0(p),a,I)}),Gg=yu(Hs);function Vg(a,p){var E=dr(a);return p==null?E:mf(E,p)}var Fp=Wn(function(a,p){a=$t(a);var E=-1,I=p.length,B=I>2?p[2]:i;for(B&&Ii(p[0],p[1],B)&&(I=1);++E1),G}),yi(a,Dn(a),E),I&&(E=vi(E,D|L|N,Gm));for(var B=p.length;B--;)$a(E,p[B]);return E});function l_(a,p){return Bp(a,Zc(cn(p)))}var f_=yu(function(a,p){return a==null?{}:Fm(a,p)});function Bp(a,p){if(a==null)return{};var E=lt(Dn(a),function(I){return[I]});return p=cn(p),yd(a,E,function(I,B){return p(I,B[0])})}function c_(a,p,E){p=Gs(p,a);var I=-1,B=p.length;for(B||(B=1,a=i);++Ip){var I=a;a=p,p=I}if(E||a%1||p%1){var B=Ai();return kn(a+B*(p-a+Bs("1e-"+((B+"").length-1))),p)}return Ga(a,p)}var __=yf(function(a,p,E){return p=p.toLowerCase(),a+(E?Wp(p):p)});function Wp(a){return L1(yr(a).toLowerCase())}function Hp(a){return a=yr(a),a&&a.replace(_n,du).replace(V0,"")}function y_(a,p,E){a=yr(a),p=ho(p);var I=a.length;E=E===i?I:mi(jn(E),0,I);var B=E;return E-=p.length,E>=0&&a.slice(E,B)==p}function M1(a){return a=yr(a),a&&Ac.test(a)?a.replace(Ui,Yu):a}function w_(a){return a=yr(a),a&&Fr.test(a)?a.replace(kr,"\\$&"):a}var D_=yf(function(a,p,E){return a+(E?"-":"")+p.toLowerCase()}),bp=yf(function(a,p,E){return a+(E?" ":"")+p.toLowerCase()}),E_=Fd("toLowerCase");function S_(a,p,E){a=yr(a),p=jn(p);var I=p?Rr(a):0;if(!p||I>=p)return a;var B=(p-I)/2;return Hc(hu(B),E)+a+Hc(B0(B),E)}function C_(a,p,E){a=yr(a),p=jn(p);var I=p?Rr(a):0;return p&&I >>0,E?(a=yr(a),a&&(typeof p=="string"||p!=null&&!ra(p))&&(p=ho(p),!p&&Hi(a))?Vs(Jn(a),0,E):a.split(p,E)):[]}var I_=yf(function(a,p,E){return a+(E?" ":"")+L1(p)});function P_(a,p,E){return a=yr(a),E=E==null?0:mi(jn(E),0,a.length),p=ho(p),a.slice(E,E+p.length)==p}function M_(a,p,E){var I=z.templateSettings;E&&Ii(a,p,E)&&(p=i),a=yr(a),p=ua({},p,I,n1);var B=ua({},p.imports,I.imports,n1),G=q0(B),te=Eo(B,G),se,Ee,$e=0,Ke=p.interpolate||Nu,nt="__p += '",Ct=X0((p.escape||Nu).source+"|"+Ke.source+"|"+(Ke===xs?As:Nu).source+"|"+(p.evaluate||Nu).source+"|$","g"),Gt="//# sourceURL="+(or.call(p,"sourceURL")?(p.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++lf+"]")+`
-`;a.replace(Ct,function(dn,Yn,er,vo,Pi,Mi){return er||(er=vo),nt+=a.slice($e,Mi).replace(Wo,Us),Yn&&(se=!0,nt+=`' +
-__e(`+Yn+`) +
-'`),Pi&&(Ee=!0,nt+=`';
-`+Pi+`;
-__p += '`),er&&(nt+=`' +
-((__t = (`+er+`)) == null ? '' : __t) +
-'`),$e=Mi+dn.length,dn}),nt+=`';
-`;var an=or.call(p,"variable")&&p.variable;if(!an)nt=`with (obj) {
-`+nt+`
-}
-`;else if(Ru.test(an))throw new mt(t);nt=(Ee?nt.replace(ll,""):nt).replace(fl,"$1").replace(cl,"$1;"),nt="function("+(an||"obj")+`) {
-`+(an?"":`obj || (obj = {});
-`)+"var __t, __p = ''"+(se?", __e = _.escape":"")+(Ee?`, __j = Array.prototype.join;
-function print() { __p += __j.call(arguments, '') }
-`:`;
-`)+nt+`return __p
-}`;var qn=$p(function(){return wn(G,Gt+"return "+nt).apply(i,te)});if(qn.source=nt,k1(qn))throw qn;return qn}function F_(a){return yr(a).toLowerCase()}function L_(a){return yr(a).toUpperCase()}function R_(a,p,E){if(a=yr(a),a&&(E||p===i))return E0(a);if(!a||!(p=ho(p)))return a;var I=Jn(a),B=Jn(p),G=wl(I,B),te=js(I,B)+1;return Vs(I,G,te).join("")}function F1(a,p,E){if(a=yr(a),a&&(E||p===i))return a.slice(0,ai(a)+1);if(!a||!(p=ho(p)))return a;var I=Jn(a),B=js(I,Jn(p))+1;return Vs(I,0,B).join("")}function N_(a,p,E){if(a=yr(a),a&&(E||p===i))return a.replace(si,"");if(!a||!(p=ho(p)))return a;var I=Jn(a),B=wl(I,Jn(p));return Vs(I,B).join("")}function B_(a,p){var E=Oe,I=Le;if(Jr(p)){var B="separator"in p?p.separator:B;E="length"in p?jn(p.length):E,I="omission"in p?ho(p.omission):I}a=yr(a);var G=a.length;if(Hi(a)){var te=Jn(a);G=te.length}if(E>=G)return a;var se=E-Rr(I);if(se<1)return I;var Ee=te?Vs(te,0,se).join(""):a.slice(0,se);if(B===i)return Ee+I;if(te&&(se+=Ee.length-se),ra(B)){if(a.slice(se).search(B)){var $e,Ke=Ee;for(B.global||(B=X0(B.source,yr(uu.exec(B))+"g")),B.lastIndex=0;$e=B.exec(Ke);)var nt=$e.index;Ee=Ee.slice(0,nt===i?se:nt)}}else if(a.indexOf(ho(B),se)!=se){var Ct=Ee.lastIndexOf(B);Ct>-1&&(Ee=Ee.slice(0,Ct))}return Ee+I}function Vp(a){return a=yr(a),a&&Mr.test(a)?a.replace(al,o0):a}var j_=yf(function(a,p,E){return a+(E?" ":"")+p.toUpperCase()}),L1=Fd("toUpperCase");function Yp(a,p,E){return a=yr(a),p=E?i:p,p===i?qs(a)?cf(a):d0(a):a.match(p)||[]}var $p=Wn(function(a,p){try{return K(a,i,p)}catch(E){return k1(E)?E:new mt(E)}}),U_=yu(function(a,p){return je(p,function(E){E=Xo(E),ti(a,E,S1(a[E],a))}),a});function Kp(a){var p=a==null?0:a.length,E=cn();return a=p?lt(a,function(I){if(typeof I[1]!="function")throw new Yr(g);return[E(I[0]),I[1]]}):[],Wn(function(I){for(var B=-1;++B
Nt)return[];var E=ne,I=kn(a,ne);p=cn(p),a-=ne;for(var B=ci(I,p);++E0||p<0)?new nn(E):(a<0?E=E.takeRight(-a):a&&(E=E.drop(a)),p!==i&&(p=jn(p),E=p<0?E.dropRight(-p):E.take(p-a)),E)},nn.prototype.takeRightWhile=function(a){return this.reverse().takeWhile(a).reverse()},nn.prototype.toArray=function(){return this.take(ne)},S(nn.prototype,function(a,p){var E=/^(?:filter|find|map|reject)|While$/.test(p),I=/^(?:head|last)$/.test(p),B=z[I?"take"+(p=="last"?"Right":""):p],G=I||/^find/.test(p);!B||(z.prototype[p]=function(){var te=this.__wrapped__,se=I?[1]:arguments,Ee=te instanceof nn,$e=se[0],Ke=Ee||On(te),nt=function(Yn){var er=B.apply(z,Rt([Yn],se));return I&&Ct?er[0]:er};Ke&&E&&typeof $e=="function"&&$e.length!=1&&(Ee=Ke=!1);var Ct=this.__chain__,Gt=!!this.__actions__.length,an=G&&!Ct,qn=Ee&&!Gt;if(!G&&Ke){te=qn?te:new nn(this);var dn=a.apply(te,se);return dn.__actions__.push({func:Kc,args:[nt],thisArg:i}),new Qn(dn,Ct)}return an&&qn?a.apply(this,se):(dn=this.thru(nt),an?I?dn.value()[0]:dn.value():dn)})}),je(["pop","push","shift","sort","splice","unshift"],function(a){var p=$r[a],E=/^(?:push|sort|unshift)$/.test(a)?"tap":"thru",I=/^(?:pop|shift)$/.test(a);z.prototype[a]=function(){var B=arguments;if(I&&!this.__chain__){var G=this.value();return p.apply(On(G)?G:[],B)}return this[E](function(te){return p.apply(On(te)?te:[],B)})}}),S(nn.prototype,function(a,p){var E=z[p];if(E){var I=E.name+"";or.call(bt,I)||(bt[I]=[]),bt[I].push({name:p,func:E})}}),bt[zc(i,re).name]=[{name:"wrapper",func:i}],nn.prototype.clone=s0,nn.prototype.reverse=t0,nn.prototype.value=g0,z.prototype.at=Wv,z.prototype.chain=Hv,z.prototype.commit=bv,z.prototype.next=Gv,z.prototype.plant=Yv,z.prototype.reverse=Ml,z.prototype.toJSON=z.prototype.valueOf=z.prototype.value=Fl,z.prototype.first=z.prototype.head,u0&&(z.prototype[u0]=Vv),z},K0=$0();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(Lr._=K0,define(function(){return K0})):R?((R.exports=K0)._=K0,F._=K0):Lr._=K0}).call(ga)});var ay=Me((XH,cy)=>{"use strict";var fr=cy.exports;cy.exports.default=fr;var Pr="[",t2="]",ya="\x07",vh=";",OD=process.env.TERM_PROGRAM==="Apple_Terminal";fr.cursorTo=(i,u)=>{if(typeof i!="number")throw new TypeError("The `x` argument is required");return typeof u!="number"?Pr+(i+1)+"G":Pr+(u+1)+";"+(i+1)+"H"};fr.cursorMove=(i,u)=>{if(typeof i!="number")throw new TypeError("The `x` argument is required");let f="";return i<0?f+=Pr+-i+"D":i>0&&(f+=Pr+i+"C"),u<0?f+=Pr+-u+"A":u>0&&(f+=Pr+u+"B"),f};fr.cursorUp=(i=1)=>Pr+i+"A";fr.cursorDown=(i=1)=>Pr+i+"B";fr.cursorForward=(i=1)=>Pr+i+"C";fr.cursorBackward=(i=1)=>Pr+i+"D";fr.cursorLeft=Pr+"G";fr.cursorSavePosition=OD?"7":Pr+"s";fr.cursorRestorePosition=OD?"8":Pr+"u";fr.cursorGetPosition=Pr+"6n";fr.cursorNextLine=Pr+"E";fr.cursorPrevLine=Pr+"F";fr.cursorHide=Pr+"?25l";fr.cursorShow=Pr+"?25h";fr.eraseLines=i=>{let u="";for(let f=0;f[t2,"8",vh,vh,u,ya,i,t2,"8",vh,vh,ya].join("");fr.image=(i,u={})=>{let f=`${t2}1337;File=inline=1`;return u.width&&(f+=`;width=${u.width}`),u.height&&(f+=`;height=${u.height}`),u.preserveAspectRatio===!1&&(f+=";preserveAspectRatio=0"),f+":"+i.toString("base64")+ya};fr.iTerm={setCwd:(i=process.cwd())=>`${t2}50;CurrentDir=${i}${ya}`,annotation:(i,u={})=>{let f=`${t2}1337;`,c=typeof u.x!="undefined",g=typeof u.y!="undefined";if((c||g)&&!(c&&g&&typeof u.length!="undefined"))throw new Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");return i=i.replace(/\|/g,""),f+=u.isHidden?"AddHiddenAnnotation=":"AddAnnotation=",u.length>0?f+=(c?[i,u.length,u.x,u.y]:[u.length,i]).join("|"):f+=i,f+ya}}});var PD=Me((JH,dy)=>{"use strict";var ID=(i,u)=>{for(let f of Reflect.ownKeys(u))Object.defineProperty(i,f,Object.getOwnPropertyDescriptor(u,f));return i};dy.exports=ID;dy.exports.default=ID});var FD=Me((QH,gh)=>{"use strict";var oN=PD(),_h=new WeakMap,MD=(i,u={})=>{if(typeof i!="function")throw new TypeError("Expected a function");let f,c=!1,g=0,t=i.displayName||i.name||"",C=function(...A){if(_h.set(C,++g),c){if(u.throw===!0)throw new Error(`Function \`${t}\` can only be called once`);return f}return c=!0,f=i.apply(this,A),i=null,f};return oN(C,i),_h.set(C,g),C};gh.exports=MD;gh.exports.default=MD;gh.exports.callCount=i=>{if(!_h.has(i))throw new Error(`The given function \`${i.name}\` is not wrapped by the \`onetime\` package`);return _h.get(i)}});var LD=Me((ZH,yh)=>{yh.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&yh.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&yh.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var vy=Me((eb,n2)=>{var uN=require("assert"),r2=LD(),sN=/^win/i.test(process.platform),wh=require("events");typeof wh!="function"&&(wh=wh.EventEmitter);var Bi;process.__signal_exit_emitter__?Bi=process.__signal_exit_emitter__:(Bi=process.__signal_exit_emitter__=new wh,Bi.count=0,Bi.emitted={});Bi.infinite||(Bi.setMaxListeners(Infinity),Bi.infinite=!0);n2.exports=function(i,u){uN.equal(typeof i,"function","a callback must be provided for exit handler"),i2===!1&&RD();var f="exit";u&&u.alwaysLast&&(f="afterexit");var c=function(){Bi.removeListener(f,i),Bi.listeners("exit").length===0&&Bi.listeners("afterexit").length===0&&py()};return Bi.on(f,i),c};n2.exports.unload=py;function py(){!i2||(i2=!1,r2.forEach(function(i){try{process.removeListener(i,hy[i])}catch(u){}}),process.emit=my,process.reallyExit=ND,Bi.count-=1)}function wa(i,u,f){Bi.emitted[i]||(Bi.emitted[i]=!0,Bi.emit(i,u,f))}var hy={};r2.forEach(function(i){hy[i]=function(){var f=process.listeners(i);f.length===Bi.count&&(py(),wa("exit",null,i),wa("afterexit",null,i),sN&&i==="SIGHUP"&&(i="SIGINT"),process.kill(process.pid,i))}});n2.exports.signals=function(){return r2};n2.exports.load=RD;var i2=!1;function RD(){i2||(i2=!0,Bi.count+=1,r2=r2.filter(function(i){try{return process.on(i,hy[i]),!0}catch(u){return!1}}),process.emit=fN,process.reallyExit=lN)}var ND=process.reallyExit;function lN(i){process.exitCode=i||0,wa("exit",process.exitCode,null),wa("afterexit",process.exitCode,null),ND.call(process,process.exitCode)}var my=process.emit;function fN(i,u){if(i==="exit"){u!==void 0&&(process.exitCode=u);var f=my.apply(this,arguments);return wa("exit",process.exitCode,null),wa("afterexit",process.exitCode,null),f}else return my.apply(this,arguments)}});var jD=Me((tb,BD)=>{"use strict";var cN=FD(),aN=vy();BD.exports=cN(()=>{aN(()=>{process.stderr.write("[?25h")},{alwaysLast:!0})})});var gy=Me(Da=>{"use strict";var dN=jD(),Dh=!1;Da.show=(i=process.stderr)=>{!i.isTTY||(Dh=!1,i.write("[?25h"))};Da.hide=(i=process.stderr)=>{!i.isTTY||(dN(),Dh=!0,i.write("[?25l"))};Da.toggle=(i,u)=>{i!==void 0&&(Dh=i),Dh?Da.show(u):Da.hide(u)}});var WD=Me(o2=>{"use strict";var UD=o2&&o2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(o2,"__esModule",{value:!0});var qD=UD(ay()),zD=UD(gy()),pN=(i,{showCursor:u=!1}={})=>{let f=0,c="",g=!1,t=C=>{!u&&!g&&(zD.default.hide(),g=!0);let A=C+`
-`;A!==c&&(c=A,i.write(qD.default.eraseLines(f)+A),f=A.split(`
-`).length)};return t.clear=()=>{i.write(qD.default.eraseLines(f)),c="",f=0},t.done=()=>{c="",f=0,u||(zD.default.show(),g=!1)},t};o2.default={create:pN}});var bD=Me((ib,HD)=>{HD.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY_BUILD_BASE",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}}]});var YD=Me(ru=>{"use strict";var GD=bD(),nl=process.env;Object.defineProperty(ru,"_vendors",{value:GD.map(function(i){return i.constant})});ru.name=null;ru.isPR=null;GD.forEach(function(i){var u=Array.isArray(i.env)?i.env:[i.env],f=u.every(function(c){return VD(c)});if(ru[i.constant]=f,f)switch(ru.name=i.name,typeof i.pr){case"string":ru.isPR=!!nl[i.pr];break;case"object":"env"in i.pr?ru.isPR=i.pr.env in nl&&nl[i.pr.env]!==i.pr.ne:"any"in i.pr?ru.isPR=i.pr.any.some(function(c){return!!nl[c]}):ru.isPR=VD(i.pr);break;default:ru.isPR=null}});ru.isCI=!!(nl.CI||nl.CONTINUOUS_INTEGRATION||nl.BUILD_NUMBER||nl.RUN_ID||ru.name);function VD(i){return typeof i=="string"?!!nl[i]:Object.keys(i).every(function(u){return nl[u]===i[u]})}});var KD=Me((ub,$D)=>{"use strict";$D.exports=YD().isCI});var JD=Me((sb,XD)=>{"use strict";var hN=i=>{let u=new Set;do for(let f of Reflect.ownKeys(i))u.add([i,f]);while((i=Reflect.getPrototypeOf(i))&&i!==Object.prototype);return u};XD.exports=(i,{include:u,exclude:f}={})=>{let c=g=>{let t=C=>typeof C=="string"?g===C:C.test(g);return u?u.some(t):f?!f.some(t):!0};for(let[g,t]of hN(i.constructor.prototype)){if(t==="constructor"||!c(t))continue;let C=Reflect.getOwnPropertyDescriptor(g,t);C&&typeof C.value=="function"&&(i[t]=i[t].bind(i))}return i}});var iE=Me(Sr=>{"use strict";Object.defineProperty(Sr,"__esModule",{value:!0});var Ea,u2,Eh,Sh,_y;typeof window=="undefined"||typeof MessageChannel!="function"?(Sa=null,yy=null,wy=function(){if(Sa!==null)try{var i=Sr.unstable_now();Sa(!0,i),Sa=null}catch(u){throw setTimeout(wy,0),u}},QD=Date.now(),Sr.unstable_now=function(){return Date.now()-QD},Ea=function(i){Sa!==null?setTimeout(Ea,0,i):(Sa=i,setTimeout(wy,0))},u2=function(i,u){yy=setTimeout(i,u)},Eh=function(){clearTimeout(yy)},Sh=function(){return!1},_y=Sr.unstable_forceFrameRate=function(){}):(Ch=window.performance,Dy=window.Date,ZD=window.setTimeout,eE=window.clearTimeout,typeof console!="undefined"&&(tE=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),typeof tE!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")),typeof Ch=="object"&&typeof Ch.now=="function"?Sr.unstable_now=function(){return Ch.now()}:(nE=Dy.now(),Sr.unstable_now=function(){return Dy.now()-nE}),s2=!1,l2=null,Th=-1,Ey=5,Sy=0,Sh=function(){return Sr.unstable_now()>=Sy},_y=function(){},Sr.unstable_forceFrameRate=function(i){0>i||125kh(C,f))x!==void 0&&0>kh(x,C)?(i[c]=x,i[A]=f,c=A):(i[c]=C,i[t]=f,c=t);else if(x!==void 0&&0>kh(x,f))i[c]=x,i[A]=f,c=A;else break e}}return u}return null}function kh(i,u){var f=i.sortIndex-u.sortIndex;return f!==0?f:i.id-u.id}var ds=[],Nf=[],mN=1,_o=null,to=3,Oh=!1,pc=!1,f2=!1;function Ih(i){for(var u=Iu(Nf);u!==null;){if(u.callback===null)Ah(Nf);else if(u.startTime<=i)Ah(Nf),u.sortIndex=u.expirationTime,Ty(ds,u);else break;u=Iu(Nf)}}function xy(i){if(f2=!1,Ih(i),!pc)if(Iu(ds)!==null)pc=!0,Ea(ky);else{var u=Iu(Nf);u!==null&&u2(xy,u.startTime-i)}}function ky(i,u){pc=!1,f2&&(f2=!1,Eh()),Oh=!0;var f=to;try{for(Ih(u),_o=Iu(ds);_o!==null&&(!(_o.expirationTime>u)||i&&!Sh());){var c=_o.callback;if(c!==null){_o.callback=null,to=_o.priorityLevel;var g=c(_o.expirationTime<=u);u=Sr.unstable_now(),typeof g=="function"?_o.callback=g:_o===Iu(ds)&&Ah(ds),Ih(u)}else Ah(ds);_o=Iu(ds)}if(_o!==null)var t=!0;else{var C=Iu(Nf);C!==null&&u2(xy,C.startTime-u),t=!1}return t}finally{_o=null,to=f,Oh=!1}}function rE(i){switch(i){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var vN=_y;Sr.unstable_ImmediatePriority=1;Sr.unstable_UserBlockingPriority=2;Sr.unstable_NormalPriority=3;Sr.unstable_IdlePriority=5;Sr.unstable_LowPriority=4;Sr.unstable_runWithPriority=function(i,u){switch(i){case 1:case 2:case 3:case 4:case 5:break;default:i=3}var f=to;to=i;try{return u()}finally{to=f}};Sr.unstable_next=function(i){switch(to){case 1:case 2:case 3:var u=3;break;default:u=to}var f=to;to=u;try{return i()}finally{to=f}};Sr.unstable_scheduleCallback=function(i,u,f){var c=Sr.unstable_now();if(typeof f=="object"&&f!==null){var g=f.delay;g=typeof g=="number"&&0c?(i.sortIndex=g,Ty(Nf,i),Iu(ds)===null&&i===Iu(Nf)&&(f2?Eh():f2=!0,u2(xy,g-c))):(i.sortIndex=f,Ty(ds,i),pc||Oh||(pc=!0,Ea(ky))),i};Sr.unstable_cancelCallback=function(i){i.callback=null};Sr.unstable_wrapCallback=function(i){var u=to;return function(){var f=to;to=u;try{return i.apply(this,arguments)}finally{to=f}}};Sr.unstable_getCurrentPriorityLevel=function(){return to};Sr.unstable_shouldYield=function(){var i=Sr.unstable_now();Ih(i);var u=Iu(ds);return u!==_o&&_o!==null&&u!==null&&u.callback!==null&&u.startTime<=i&&u.expirationTime<_o.expirationTime||Sh()};Sr.unstable_requestPaint=vN;Sr.unstable_continueExecution=function(){pc||Oh||(pc=!0,Ea(ky))};Sr.unstable_pauseExecution=function(){};Sr.unstable_getFirstCallbackNode=function(){return Iu(ds)};Sr.unstable_Profiling=null});var Ay=Me((fb,oE)=>{"use strict";oE.exports=iE()});var uE=Me((cb,c2)=>{c2.exports=function i(u){"use strict";var f=ey(),c=lr(),g=Ay();function t(v){for(var m="https://reactjs.org/docs/error-decoder.html?invariant="+v,S=1;Sqo||(v.current=qi[qo],qi[qo]=null,qo--)}function Fr(v,m){qo++,qi[qo]=v.current,v.current=m}var si={},H0={current:si},b0={current:!1},Bt=si;function Lu(v,m){var S=v.type.contextTypes;if(!S)return si;var O=v.stateNode;if(O&&O.__reactInternalMemoizedUnmaskedChildContext===m)return O.__reactInternalMemoizedMaskedChildContext;var M={},b;for(b in S)M[b]=m[b];return O&&(v=v.stateNode,v.__reactInternalMemoizedUnmaskedChildContext=m,v.__reactInternalMemoizedMaskedChildContext=M),M}function c0(v){return v=v.childContextTypes,v!=null}function Ru(v){kr(b0,v),kr(H0,v)}function ks(v){kr(b0,v),kr(H0,v)}function As(v,m,S){if(H0.current!==si)throw Error(t(168));Fr(H0,m,v),Fr(b0,S,v)}function uu(v,m,S){var O=v.stateNode;if(v=m.childContextTypes,typeof O.getChildContext!="function")return S;O=O.getChildContext();for(var M in O)if(!(M in v))throw Error(t(108,Oe(m)||"Unknown",M));return f({},S,{},O)}function wo(v){var m=v.stateNode;return m=m&&m.__reactInternalMemoizedMergedChildContext||si,Bt=H0.current,Fr(H0,m,v),Fr(b0,b0.current,v),!0}function zo(v,m,S){var O=v.stateNode;if(!O)throw Error(t(169));S?(m=uu(v,m,Bt),O.__reactInternalMemoizedMergedChildContext=m,kr(b0,v),kr(H0,v),Fr(H0,m,v)):kr(b0,v),Fr(b0,S,v)}var Os=g.unstable_runWithPriority,Is=g.unstable_scheduleCallback,uf=g.unstable_cancelCallback,_n=g.unstable_shouldYield,Nu=g.unstable_requestPaint,Wo=g.unstable_now,su=g.unstable_getCurrentPriorityLevel,Ps=g.unstable_ImmediatePriority,pl=g.unstable_UserBlockingPriority,Vf=g.unstable_NormalPriority,hl=g.unstable_LowPriority,Bu=g.unstable_IdlePriority,ju={},sf=Nu!==void 0?Nu:function(){},ro=null,Ms=null,ml=!1,Uu=Wo(),G0=1e4>Uu?Wo:function(){return Wo()-Uu};function Fs(){switch(su()){case Ps:return 99;case pl:return 98;case Vf:return 97;case hl:return 96;case Bu:return 95;default:throw Error(t(332))}}function tt(v){switch(v){case 99:return Ps;case 98:return pl;case 97:return Vf;case 96:return hl;case 95:return Bu;default:throw Error(t(332))}}function zi(v,m){return v=tt(v),Os(v,m)}function lu(v,m,S){return v=tt(v),Is(v,m,S)}function Ho(v){return ro===null?(ro=[v],Ms=Is(Ps,vl)):ro.push(v),ju}function O0(){if(Ms!==null){var v=Ms;Ms=null,uf(v)}vl()}function vl(){if(!ml&&ro!==null){ml=!0;var v=0;try{var m=ro;zi(99,function(){for(;v=m&&(ai=!0),v.firstContext=null)}function D0(v,m){if(zu!==v&&m!==!1&&m!==0)if((typeof m!="number"||m===1073741823)&&(zu=v,m=1073741823),m={context:v,observedBits:m,next:null},Wi===null){if(qu===null)throw Error(t(308));Wi=m,qu.dependencies={expirationTime:0,firstContext:m,responders:null}}else Wi=Wi.next=m;return Jt?v._currentValue:v._currentValue2}var Do=!1;function i0(v){return{baseState:v,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Rs(v){return{baseState:v.baseState,firstUpdate:v.firstUpdate,lastUpdate:v.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function a0(v,m){return{expirationTime:v,suspenseConfig:m,tag:0,payload:null,callback:null,next:null,nextEffect:null}}function Hu(v,m){v.lastUpdate===null?v.firstUpdate=v.lastUpdate=m:(v.lastUpdate.next=m,v.lastUpdate=m)}function V0(v,m){var S=v.alternate;if(S===null){var O=v.updateQueue,M=null;O===null&&(O=v.updateQueue=i0(v.memoizedState))}else O=v.updateQueue,M=S.updateQueue,O===null?M===null?(O=v.updateQueue=i0(v.memoizedState),M=S.updateQueue=i0(S.memoizedState)):O=v.updateQueue=Rs(M):M===null&&(M=S.updateQueue=Rs(O));M===null||O===M?Hu(O,m):O.lastUpdate===null||M.lastUpdate===null?(Hu(O,m),Hu(M,m)):(Hu(O,m),M.lastUpdate=m)}function bu(v,m){var S=v.updateQueue;S=S===null?v.updateQueue=i0(v.memoizedState):Ns(v,S),S.lastCapturedUpdate===null?S.firstCapturedUpdate=S.lastCapturedUpdate=m:(S.lastCapturedUpdate.next=m,S.lastCapturedUpdate=m)}function Ns(v,m){var S=v.alternate;return S!==null&&m===S.updateQueue&&(m=v.updateQueue=Rs(m)),m}function bo(v,m,S,O,M,b){switch(S.tag){case 1:return v=S.payload,typeof v=="function"?v.call(b,O,M):v;case 3:v.effectTag=v.effectTag&-4097|64;case 0:if(v=S.payload,M=typeof v=="function"?v.call(b,O,M):v,M==null)break;return f({},O,M);case 2:Do=!0}return O}function P0(v,m,S,O,M){Do=!1,m=Ns(v,m);for(var b=m.baseState,ee=null,Ye=0,Ze=m.firstUpdate,ut=b;Ze!==null;){var In=Ze.expirationTime;Inpr?(Hr=mn,mn=null):Hr=mn.sibling;var Vn=jr(Re,mn,ze[pr],Et);if(Vn===null){mn===null&&(mn=Hr);break}v&&mn&&Vn.alternate===null&&m(Re,mn),Ce=b(Vn,Ce,pr),sr===null?on=Vn:sr.sibling=Vn,sr=Vn,mn=Hr}if(pr===ze.length)return S(Re,mn),on;if(mn===null){for(;prpr?(Hr=mn,mn=null):Hr=mn.sibling;var ni=jr(Re,mn,Vn.value,Et);if(ni===null){mn===null&&(mn=Hr);break}v&&mn&&ni.alternate===null&&m(Re,mn),Ce=b(ni,Ce,pr),sr===null?on=ni:sr.sibling=ni,sr=ni,mn=Hr}if(Vn.done)return S(Re,mn),on;if(mn===null){for(;!Vn.done;pr++,Vn=ze.next())Vn=A0(Re,Vn.value,Et),Vn!==null&&(Ce=b(Vn,Ce,pr),sr===null?on=Vn:sr.sibling=Vn,sr=Vn);return on}for(mn=O(Re,mn);!Vn.done;pr++,Vn=ze.next())Vn=gi(mn,Re,pr,Vn.value,Et),Vn!==null&&(v&&Vn.alternate!==null&&mn.delete(Vn.key===null?pr:Vn.key),Ce=b(Vn,Ce,pr),sr===null?on=Vn:sr.sibling=Vn,sr=Vn);return v&&mn.forEach(function(Zf){return m(Re,Zf)}),on}return function(Re,Ce,ze,Et){var on=typeof ze=="object"&&ze!==null&&ze.type===L&&ze.key===null;on&&(ze=ze.props.children);var sr=typeof ze=="object"&&ze!==null;if(sr)switch(ze.$$typeof){case x:e:{for(sr=ze.key,on=Ce;on!==null;){if(on.key===sr)if(on.tag===7?ze.type===L:on.elementType===ze.type){S(Re,on.sibling),Ce=M(on,ze.type===L?ze.props.children:ze.props,Et),Ce.ref=au(Re,on,ze),Ce.return=Re,Re=Ce;break e}else{S(Re,on);break}else m(Re,on);on=on.sibling}ze.type===L?(Ce=mi(ze.props.children,Re.mode,Et,ze.key),Ce.return=Re,Re=Ce):(Et=Hs(ze.type,ze.key,ze.props,null,Re.mode,Et),Et.ref=au(Re,Ce,ze),Et.return=Re,Re=Et)}return ee(Re);case D:e:{for(on=ze.key;Ce!==null;){if(Ce.key===on)if(Ce.tag===4&&Ce.stateNode.containerInfo===ze.containerInfo&&Ce.stateNode.implementation===ze.implementation){S(Re,Ce.sibling),Ce=M(Ce,ze.children||[],Et),Ce.return=Re,Re=Ce;break e}else{S(Re,Ce);break}else m(Re,Ce);Ce=Ce.sibling}Ce=Xf(ze,Re.mode,Et),Ce.return=Re,Re=Ce}return ee(Re)}if(typeof ze=="string"||typeof ze=="number")return ze=""+ze,Ce!==null&&Ce.tag===6?(S(Re,Ce.sibling),Ce=M(Ce,ze,Et),Ce.return=Re,Re=Ce):(S(Re,Ce),Ce=vi(ze,Re.mode,Et),Ce.return=Re,Re=Ce),ee(Re);if(M0(ze))return po(Re,Ce,ze,Et);if(J(ze))return _i(Re,Ce,ze,Et);if(sr&&Lr(Re,ze),typeof ze=="undefined"&&!on)switch(Re.tag){case 1:case 0:throw Re=Re.type,Error(t(152,Re.displayName||Re.name||"Component"))}return S(Re,Ce)}}var R=F(!0),U=F(!1),H={},fe={current:H},ue={current:H},de={current:H};function W(v){if(v===H)throw Error(t(174));return v}function ve(v,m){Fr(de,m,v),Fr(ue,v,v),Fr(fe,H,v),m=Ot(m),kr(fe,v),Fr(fe,m,v)}function Fe(v){kr(fe,v),kr(ue,v),kr(de,v)}function Ge(v){var m=W(de.current),S=W(fe.current);m=Nt(S,v.type,m),S!==m&&(Fr(ue,v,v),Fr(fe,m,v))}function K(v){ue.current===v&&(kr(fe,v),kr(ue,v))}var xe={current:0};function je(v){for(var m=v;m!==null;){if(m.tag===13){var S=m.memoizedState;if(S!==null&&(S=S.dehydrated,S===null||ll(S)||fl(S)))return m}else if(m.tag===19&&m.memoizedProps.revealOrder!==void 0){if((m.effectTag&64)!=0)return m}else if(m.child!==null){m.child.return=m,m=m.child;continue}if(m===v)break;for(;m.sibling===null;){if(m.return===null||m.return===v)return null;m=m.return}m.sibling.return=m.return,m=m.sibling}return null}function Xe(v,m){return{responder:v,props:m}}var rt=C.ReactCurrentDispatcher,st=C.ReactCurrentBatchConfig,xt=0,wt=null,lt=null,Rt=null,yn=null,sn=null,ar=null,rn=0,Hn=null,d0=0,Cr=!1,He=null,Qe=0;function Ne(){throw Error(t(321))}function ft(v,m){if(m===null)return!1;for(var S=0;Srn&&(rn=In,pf(rn))):(Yf(In,Ze.suspenseConfig),b=Ze.eagerReducer===v?Ze.eagerState:v(b,Ze.action)),ee=Ze,Ze=Ze.next}while(Ze!==null&&Ze!==O);ut||(Ye=ee,M=b),Sn(b,m.memoizedState)||(ai=!0),m.memoizedState=b,m.baseUpdate=Ye,m.baseState=M,S.lastRenderedState=b}return[m.memoizedState,S.dispatch]}function ci(v){var m=Cn();return typeof v=="function"&&(v=v()),m.memoizedState=m.baseState=v,v=m.queue={last:null,dispatch:null,lastRenderedReducer:p0,lastRenderedState:v},v=v.dispatch=Us.bind(null,wt,v),[m.memoizedState,v]}function xi(v){return h0(p0,v)}function E0(v,m,S,O){return v={tag:v,create:m,destroy:S,deps:O,next:null},Hn===null?(Hn={lastEffect:null},Hn.lastEffect=v.next=v):(m=Hn.lastEffect,m===null?Hn.lastEffect=v.next=v:(S=m.next,m.next=v,v.next=S,Hn.lastEffect=v)),v}function qr(v,m,S,O){var M=Cn();d0|=v,M.memoizedState=E0(m,S,void 0,O===void 0?null:O)}function Eo(v,m,S,O){var M=bn();O=O===void 0?null:O;var b=void 0;if(lt!==null){var ee=lt.memoizedState;if(b=ee.destroy,O!==null&&ft(O,ee.deps)){E0(0,S,b,O);return}}d0|=v,M.memoizedState=E0(m,S,b,O)}function So(v,m){return qr(516,192,v,m)}function wl(v,m){return Eo(516,192,v,m)}function js(v,m){if(typeof m=="function")return v=v(),m(v),function(){m(null)};if(m!=null)return v=v(),m.current=v,function(){m.current=null}}function Dl(){}function du(v,m){return Cn().memoizedState=[v,m===void 0?null:m],v}function Yu(v,m){var S=bn();m=m===void 0?null:m;var O=S.memoizedState;return O!==null&&m!==null&&ft(m,O[1])?O[0]:(S.memoizedState=[v,m],v)}function Us(v,m,S){if(!(25>Qe))throw Error(t(301));var O=v.alternate;if(v===wt||O!==null&&O===wt)if(Cr=!0,v={expirationTime:xt,suspenseConfig:null,action:S,eagerReducer:null,eagerState:null,next:null},He===null&&(He=new Map),S=He.get(m),S===void 0)He.set(m,v);else{for(m=S;m.next!==null;)m=m.next;m.next=v}else{var M=g0(),b=nr.suspense;M=Kr(M,v,b),b={expirationTime:M,suspenseConfig:b,action:S,eagerReducer:null,eagerState:null,next:null};var ee=m.last;if(ee===null)b.next=b;else{var Ye=ee.next;Ye!==null&&(b.next=Ye),ee.next=b}if(m.last=b,v.expirationTime===0&&(O===null||O.expirationTime===0)&&(O=m.lastRenderedReducer,O!==null))try{var Ze=m.lastRenderedState,ut=O(Ze,S);if(b.eagerReducer=O,b.eagerState=ut,Sn(ut,Ze))return}catch(In){}finally{}_0(v,M)}}var oo={readContext:D0,useCallback:Ne,useContext:Ne,useEffect:Ne,useImperativeHandle:Ne,useLayoutEffect:Ne,useMemo:Ne,useReducer:Ne,useRef:Ne,useState:Ne,useDebugValue:Ne,useResponder:Ne,useDeferredValue:Ne,useTransition:Ne},Hi={readContext:D0,useCallback:du,useContext:D0,useEffect:So,useImperativeHandle:function(v,m,S){return S=S!=null?S.concat([v]):null,qr(4,36,js.bind(null,m,v),S)},useLayoutEffect:function(v,m){return qr(4,36,v,m)},useMemo:function(v,m){var S=Cn();return m=m===void 0?null:m,v=v(),S.memoizedState=[v,m],v},useReducer:function(v,m,S){var O=Cn();return m=S!==void 0?S(m):m,O.memoizedState=O.baseState=m,v=O.queue={last:null,dispatch:null,lastRenderedReducer:v,lastRenderedState:m},v=v.dispatch=Us.bind(null,wt,v),[O.memoizedState,v]},useRef:function(v){var m=Cn();return v={current:v},m.memoizedState=v},useState:ci,useDebugValue:Dl,useResponder:Xe,useDeferredValue:function(v,m){var S=ci(v),O=S[0],M=S[1];return So(function(){g.unstable_next(function(){var b=st.suspense;st.suspense=m===void 0?null:m;try{M(v)}finally{st.suspense=b}})},[v,m]),O},useTransition:function(v){var m=ci(!1),S=m[0],O=m[1];return[du(function(M){O(!0),g.unstable_next(function(){var b=st.suspense;st.suspense=v===void 0?null:v;try{O(!1),M()}finally{st.suspense=b}})},[v,S]),S]}},qs={readContext:D0,useCallback:Yu,useContext:D0,useEffect:wl,useImperativeHandle:function(v,m,S){return S=S!=null?S.concat([v]):null,Eo(4,36,js.bind(null,m,v),S)},useLayoutEffect:function(v,m){return Eo(4,36,v,m)},useMemo:function(v,m){var S=bn();m=m===void 0?null:m;var O=S.memoizedState;return O!==null&&m!==null&&ft(m,O[1])?O[0]:(v=v(),S.memoizedState=[v,m],v)},useReducer:h0,useRef:function(){return bn().memoizedState},useState:xi,useDebugValue:Dl,useResponder:Xe,useDeferredValue:function(v,m){var S=xi(v),O=S[0],M=S[1];return wl(function(){g.unstable_next(function(){var b=st.suspense;st.suspense=m===void 0?null:m;try{M(v)}finally{st.suspense=b}})},[v,m]),O},useTransition:function(v){var m=xi(!1),S=m[0],O=m[1];return[Yu(function(M){O(!0),g.unstable_next(function(){var b=st.suspense;st.suspense=v===void 0?null:v;try{O(!1),M()}finally{st.suspense=b}})},[v,S]),S]}},F0=null,Gr=null,ir=!1;function L0(v,m){var S=xo(5,null,null,0);S.elementType="DELETED",S.type="DELETED",S.stateNode=m,S.return=v,S.effectTag=8,v.lastEffect!==null?(v.lastEffect.nextEffect=S,v.lastEffect=S):v.firstEffect=v.lastEffect=S}function Y0(v,m){switch(v.tag){case 5:return m=Ti(m,v.type,v.pendingProps),m!==null?(v.stateNode=m,!0):!1;case 6:return m=Fu(m,v.pendingProps),m!==null?(v.stateNode=m,!0):!1;case 13:return!1;default:return!1}}function Co(v){if(ir){var m=Gr;if(m){var S=m;if(!Y0(v,m)){if(m=cl(S),!m||!Y0(v,m)){v.effectTag=v.effectTag&-1025|2,ir=!1,F0=v;return}L0(F0,S)}F0=v,Gr=al(m)}else v.effectTag=v.effectTag&-1025|2,ir=!1,F0=v}}function $u(v){for(v=v.return;v!==null&&v.tag!==5&&v.tag!==3&&v.tag!==13;)v=v.return;F0=v}function Vo(v){if(!w||v!==F0)return!1;if(!ir)return $u(v),ir=!0,!1;var m=v.type;if(v.tag!==5||m!=="head"&&m!=="body"&&!at(m,v.memoizedProps))for(m=Gr;m;)L0(v,m),m=cl(m);if($u(v),v.tag===13){if(!w)throw Error(t(316));if(v=v.memoizedState,v=v!==null?v.dehydrated:null,!v)throw Error(t(317));Gr=Ac(v)}else Gr=F0?cl(v.stateNode):null;return!0}function Rr(){w&&(Gr=F0=null,ir=!1)}var Jn=C.ReactCurrentOwner,ai=!1;function o0(v,m,S,O){m.child=v===null?U(m,null,S,O):R(m,v.child,S,O)}function Vr(v,m,S,O,M){S=S.render;var b=m.ref;return io(m,M),O=St(v,m,S,O,b,M),v!==null&&!ai?(m.updateQueue=v.updateQueue,m.effectTag&=-517,v.expirationTime<=M&&(v.expirationTime=0),X0(v,m,M)):(m.effectTag|=1,o0(v,m,O,M),m.child)}function ff(v,m,S,O,M,b){if(v===null){var ee=S.type;return typeof ee=="function"&&!mf(ee)&&ee.defaultProps===void 0&&S.compare===null&&S.defaultProps===void 0?(m.tag=15,m.type=ee,cf(v,m,ee,O,M,b)):(v=Hs(S.type,null,O,null,m.mode,b),v.ref=m.ref,v.return=m,m.child=v)}return ee=v.child,Mm)&&Qn.set(v,m)))}}function Gi(v,m){v.expirationTimev?m:v)}function x0(v){if(v.lastExpiredTime!==0)v.callbackExpirationTime=1073741823,v.callbackPriority=99,v.callbackNode=Ho(Z0.bind(null,v));else{var m=fo(v),S=v.callbackNode;if(m===0)S!==null&&(v.callbackNode=null,v.callbackExpirationTime=0,v.callbackPriority=90);else{var O=g0();if(m===1073741823?O=99:m===1||m===2?O=95:(O=10*(1073741821-m)-10*(1073741821-O),O=0>=O?99:250>=O?98:5250>=O?97:95),S!==null){var M=v.callbackPriority;if(v.callbackExpirationTime===m&&M>=O)return;S!==ju&&uf(S)}v.callbackExpirationTime=m,v.callbackPriority=O,m=m===1073741823?Ho(Z0.bind(null,v)):lu(O,Xu.bind(null,v),{timeout:10*(1073741821-m)-G0()}),v.callbackNode=m}}}function Xu(v,m){if(t0=0,m)return m=g0(),kl(v,m),x0(v),null;var S=fo(v);if(S!==0){if(m=v.callbackNode,(Kt&(Br|zr))!==Fn)throw Error(t(327));if(Ws(),v===X&&S===ye||mu(v,S),Y!==null){var O=Kt;Kt|=Br;var M=ei(v);do try{Ua();break}catch(Ye){Ju(v,Ye)}while(1);if(Wu(),Kt=O,B0.current=M,he===wr)throw m=We,mu(v,S),ao(v,S),x0(v),m;if(Y===null)switch(M=v.finishedWork=v.current.alternate,v.finishedExpirationTime=S,O=he,X=null,O){case lo:case wr:throw Error(t(345));case kn:kl(v,2=S){v.lastPingedTime=S,mu(v,S);break}}if(b=fo(v),b!==0&&b!==S)break;if(O!==0&&O!==S){v.lastPingedTime=O;break}v.timeoutHandle=jt(gu.bind(null,v),M);break}gu(v);break;case hi:if(ao(v,S),O=v.lastSuspendedTime,S===O&&(v.nextKnownPendingLevel=$f(M)),qt&&(M=v.lastPingedTime,M===0||M>=S)){v.lastPingedTime=S,mu(v,S);break}if(M=fo(v),M!==0&&M!==S)break;if(O!==0&&O!==S){v.lastPingedTime=O;break}if(Dt!==1073741823?O=10*(1073741821-Dt)-G0():et===1073741823?O=0:(O=10*(1073741821-et)-5e3,M=G0(),S=10*(1073741821-S)-M,O=M-O,0>O&&(O=0),O=(120>O?120:480>O?480:1080>O?1080:1920>O?1920:3e3>O?3e3:4320>O?4320:1960*Cl(O/1960))-O,S=O?O=0:(M=ee.busyDelayMs|0,b=G0()-(10*(1073741821-b)-(ee.timeoutMs|0||5e3)),O=b<=M?0:M+O-b),10 component higher in the tree to provide a loading indicator or placeholder to display.`+dl(M))}he!==Ai&&(he=kn),b=zs(b,M),Ze=O;do{switch(Ze.tag){case 3:ee=b,Ze.effectTag|=4096,Ze.expirationTime=m;var Ce=pu(Ze,ee,m);bu(Ze,Ce);break e;case 1:ee=b;var ze=Ze.type,Et=Ze.stateNode;if((Ze.effectTag&64)==0&&(typeof ze.getDerivedStateFromError=="function"||Et!==null&&typeof Et.componentDidCatch=="function"&&(Ar===null||!Ar.has(Et)))){Ze.effectTag|=4096,Ze.expirationTime=m;var on=Sl(Ze,ee,m);bu(Ze,on);break e}}Ze=Ze.return}while(Ze!==null)}Y=vu(Y)}catch(sr){m=sr;continue}break}while(1)}function ei(){var v=B0.current;return B0.current=oo,v===null?oo:v}function Yf(v,m){vZt&&(Zt=v)}function ja(){for(;Y!==null;)Y=Ic(Y)}function Ua(){for(;Y!==null&&!_n();)Y=Ic(Y)}function Ic(v){var m=Lc(v.alternate,v,ye);return v.memoizedProps=v.pendingProps,m===null&&(m=vu(v)),hu.current=null,m}function vu(v){Y=v;do{var m=Y.alternate;if(v=Y.return,(Y.effectTag&2048)==0){e:{var S=m;m=Y;var O=ye,M=m.pendingProps;switch(m.tag){case 2:break;case 16:break;case 15:case 0:break;case 1:c0(m.type)&&Ru(m);break;case 3:Fe(m),ks(m),M=m.stateNode,M.pendingContext&&(M.context=M.pendingContext,M.pendingContext=null),(S===null||S.child===null)&&Vo(m)&&ki(m),$r(m);break;case 5:K(m);var b=W(de.current);if(O=m.type,S!==null&&m.stateNode!=null)m0(S,m,O,M,b),S.ref!==m.ref&&(m.effectTag|=128);else if(M){if(S=W(fe.current),Vo(m)){if(M=m,!w)throw Error(t(175));S=Ui(M.stateNode,M.type,M.memoizedProps,b,S,M),M.updateQueue=S,S=S!==null,S&&ki(m)}else{var ee=ne(O,M,b,S,m);Yr(ee,m,!1,!1),m.stateNode=ee,Z(ee,O,M,b,S)&&ki(m)}m.ref!==null&&(m.effectTag|=128)}else if(m.stateNode===null)throw Error(t(166));break;case 6:if(S&&m.stateNode!=null)Tn(S,m,S.memoizedProps,M);else{if(typeof M!="string"&&m.stateNode===null)throw Error(t(166));if(S=W(de.current),b=W(fe.current),Vo(m)){if(S=m,!w)throw Error(t(176));(S=Mr(S.stateNode,S.memoizedProps,S))&&ki(m)}else m.stateNode=Ft(M,S,b,m)}break;case 11:break;case 13:if(kr(xe,m),M=m.memoizedState,(m.effectTag&64)!=0){m.expirationTime=O;break e}M=M!==null,b=!1,S===null?m.memoizedProps.fallback!==void 0&&Vo(m):(O=S.memoizedState,b=O!==null,M||O===null||(O=S.child.sibling,O!==null&&(ee=m.firstEffect,ee!==null?(m.firstEffect=O,O.nextEffect=ee):(m.firstEffect=m.lastEffect=O,O.nextEffect=null),O.effectTag=8))),M&&!b&&(m.mode&2)!=0&&(S===null&&m.memoizedProps.unstable_avoidThisFallback!==!0||(xe.current&1)!=0?he===lo&&(he=T0):((he===lo||he===T0)&&(he=hi),Zt!==0&&X!==null&&(ao(X,ye),$o(X,Zt)))),cr&&M&&(m.effectTag|=4),Yt&&(M||b)&&(m.effectTag|=4);break;case 7:break;case 8:break;case 12:break;case 4:Fe(m),$r(m);break;case 10:fi(m);break;case 9:break;case 14:break;case 17:c0(m.type)&&Ru(m);break;case 19:if(kr(xe,m),M=m.memoizedState,M===null)break;if(b=(m.effectTag&64)!=0,ee=M.rendering,ee===null){if(b)bi(M,!1);else if(he!==lo||S!==null&&(S.effectTag&64)!=0)for(S=m.child;S!==null;){if(ee=je(S),ee!==null){for(m.effectTag|=64,bi(M,!1),S=ee.updateQueue,S!==null&&(m.updateQueue=S,m.effectTag|=4),M.lastEffect===null&&(m.firstEffect=null),m.lastEffect=M.lastEffect,S=O,M=m.child;M!==null;)b=M,O=S,b.effectTag&=2,b.nextEffect=null,b.firstEffect=null,b.lastEffect=null,ee=b.alternate,ee===null?(b.childExpirationTime=0,b.expirationTime=O,b.child=null,b.memoizedProps=null,b.memoizedState=null,b.updateQueue=null,b.dependencies=null):(b.childExpirationTime=ee.childExpirationTime,b.expirationTime=ee.expirationTime,b.child=ee.child,b.memoizedProps=ee.memoizedProps,b.memoizedState=ee.memoizedState,b.updateQueue=ee.updateQueue,O=ee.dependencies,b.dependencies=O===null?null:{expirationTime:O.expirationTime,firstContext:O.firstContext,responders:O.responders}),M=M.sibling;Fr(xe,xe.current&1|2,m),m=m.child;break e}S=S.sibling}}else{if(!b)if(S=je(ee),S!==null){if(m.effectTag|=64,b=!0,S=S.updateQueue,S!==null&&(m.updateQueue=S,m.effectTag|=4),bi(M,!0),M.tail===null&&M.tailMode==="hidden"&&!ee.alternate){m=m.lastEffect=M.lastEffect,m!==null&&(m.nextEffect=null);break}}else G0()>M.tailExpiration&&1M&&(M=O),ee>M&&(M=ee),b=b.sibling;S.childExpirationTime=M}if(m!==null)return m;v!==null&&(v.effectTag&2048)==0&&(v.firstEffect===null&&(v.firstEffect=Y.firstEffect),Y.lastEffect!==null&&(v.lastEffect!==null&&(v.lastEffect.nextEffect=Y.firstEffect),v.lastEffect=Y.lastEffect),1v?m:v}function gu(v){var m=Fs();return zi(99,co.bind(null,v,m)),null}function co(v,m){do Ws();while(dr!==null);if((Kt&(Br|zr))!==Fn)throw Error(t(327));var S=v.finishedWork,O=v.finishedExpirationTime;if(S===null)return null;if(v.finishedWork=null,v.finishedExpirationTime=0,S===v.current)throw Error(t(177));v.callbackNode=null,v.callbackExpirationTime=0,v.callbackPriority=90,v.nextKnownPendingLevel=0;var M=$f(S);if(v.firstPendingTime=M,O<=v.lastSuspendedTime?v.firstSuspendedTime=v.lastSuspendedTime=v.nextKnownPendingLevel=0:O<=v.firstSuspendedTime&&(v.firstSuspendedTime=O-1),O<=v.lastPingedTime&&(v.lastPingedTime=0),O<=v.lastExpiredTime&&(v.lastExpiredTime=0),v===X&&(Y=X=null,ye=0),1=S?mt(v,m,S):(Fr(xe,xe.current&1,m),m=X0(v,m,S),m!==null?m.sibling:null);Fr(xe,xe.current&1,m);break;case 19:if(O=m.childExpirationTime>=S,(v.effectTag&64)!=0){if(O)return $t(v,m,S);m.effectTag|=64}if(M=m.memoizedState,M!==null&&(M.rendering=null,M.tail=null),Fr(xe,xe.current,m),!O)return null}return X0(v,m,S)}ai=!1}}else ai=!1;switch(m.expirationTime=0,m.tag){case 2:if(O=m.type,v!==null&&(v.alternate=null,m.alternate=null,m.effectTag|=2),v=m.pendingProps,M=Lu(m,H0.current),io(m,S),M=St(null,m,O,v,M,S),m.effectTag|=1,typeof M=="object"&&M!==null&&typeof M.render=="function"&&M.$$typeof===void 0){if(m.tag=1,Qt(),c0(O)){var b=!0;wo(m)}else b=!1;m.memoizedState=M.state!==null&&M.state!==void 0?M.state:null;var ee=O.getDerivedStateFromProps;typeof ee=="function"&&Go(m,O,ee,v),M.updater=Gu,m.stateNode=M,M._reactInternalFiber=m,Vu(m,O,v,S),m=Be(null,m,O,!0,b,S)}else m.tag=0,o0(null,m,M,S),m=m.child;return m;case 16:if(M=m.elementType,v!==null&&(v.alternate=null,m.alternate=null,m.effectTag|=2),v=m.pendingProps,Te(M),M._status!==1)throw M._result;switch(M=M._result,m.type=M,b=m.tag=Wa(M),v=I0(M,v),b){case 0:m=K0(null,m,M,v,S);break;case 1:m=ae(null,m,M,v,S);break;case 11:m=Vr(null,m,M,v,S);break;case 14:m=ff(null,m,M,I0(M.type,v),O,S);break;default:throw Error(t(306,M,""))}return m;case 0:return O=m.type,M=m.pendingProps,M=m.elementType===O?M:I0(O,M),K0(v,m,O,M,S);case 1:return O=m.type,M=m.pendingProps,M=m.elementType===O?M:I0(O,M),ae(v,m,O,M,S);case 3:if(Ie(m),O=m.updateQueue,O===null)throw Error(t(282));if(M=m.memoizedState,M=M!==null?M.element:null,P0(m,O,m.pendingProps,null,S),O=m.memoizedState.element,O===M)Rr(),m=X0(v,m,S);else{if((M=m.stateNode.hydrate)&&(w?(Gr=al(m.stateNode.containerInfo),F0=m,M=ir=!0):M=!1),M)for(S=U(m,null,O,S),m.child=S;S;)S.effectTag=S.effectTag&-3|1024,S=S.sibling;else o0(v,m,O,S),Rr();m=m.child}return m;case 5:return Ge(m),v===null&&Co(m),O=m.type,M=m.pendingProps,b=v!==null?v.memoizedProps:null,ee=M.children,at(O,M)?ee=null:b!==null&&at(O,b)&&(m.effectTag|=16),$0(v,m),m.mode&4&&S!==1&&it(O,M)?(m.expirationTime=m.childExpirationTime=1,m=null):(o0(v,m,ee,S),m=m.child),m;case 6:return v===null&&Co(m),null;case 13:return mt(v,m,S);case 4:return ve(m,m.stateNode.containerInfo),O=m.pendingProps,v===null?m.child=R(m,null,O,S):o0(v,m,O,S),m.child;case 11:return O=m.type,M=m.pendingProps,M=m.elementType===O?M:I0(O,M),Vr(v,m,O,M,S);case 7:return o0(v,m,m.pendingProps,S),m.child;case 8:return o0(v,m,m.pendingProps.children,S),m.child;case 12:return o0(v,m,m.pendingProps.children,S),m.child;case 10:e:{if(O=m.type._context,M=m.pendingProps,ee=m.memoizedProps,b=M.value,Ls(m,b),ee!==null){var Ye=ee.value;if(b=Sn(Ye,b)?0:(typeof O._calculateChangedBits=="function"?O._calculateChangedBits(Ye,b):1073741823)|0,b===0){if(ee.children===M.children&&!b0.current){m=X0(v,m,S);break e}}else for(Ye=m.child,Ye!==null&&(Ye.return=m);Ye!==null;){var Ze=Ye.dependencies;if(Ze!==null){ee=Ye.child;for(var ut=Ze.firstContext;ut!==null;){if(ut.context===O&&(ut.observedBits&b)!=0){Ye.tag===1&&(ut=a0(S,null),ut.tag=2,V0(Ye,ut)),Ye.expirationTime=m&&v<=m}function ao(v,m){var S=v.firstSuspendedTime,O=v.lastSuspendedTime;Sm||S===0)&&(v.lastSuspendedTime=m),m<=v.lastPingedTime&&(v.lastPingedTime=0),m<=v.lastExpiredTime&&(v.lastExpiredTime=0)}function $o(v,m){m>v.firstPendingTime&&(v.firstPendingTime=m);var S=v.firstSuspendedTime;S!==0&&(m>=S?v.firstSuspendedTime=v.lastSuspendedTime=v.nextKnownPendingLevel=0:m>=v.lastSuspendedTime&&(v.lastSuspendedTime=m+1),m>v.nextKnownPendingLevel&&(v.nextKnownPendingLevel=m))}function kl(v,m){var S=v.lastExpiredTime;(S===0||S>m)&&(v.lastExpiredTime=m)}function Nc(v){var m=v._reactInternalFiber;if(m===void 0)throw typeof v.render=="function"?Error(t(188)):Error(t(268,Object.keys(v)));return v=Ue(m),v===null?null:v.stateNode}function Al(v,m){v=v.memoizedState,v!==null&&v.dehydrated!==null&&v.retryTime{"use strict";sE.exports=uE()});var cE=Me((db,fE)=>{"use strict";var gN={ALIGN_COUNT:8,ALIGN_AUTO:0,ALIGN_FLEX_START:1,ALIGN_CENTER:2,ALIGN_FLEX_END:3,ALIGN_STRETCH:4,ALIGN_BASELINE:5,ALIGN_SPACE_BETWEEN:6,ALIGN_SPACE_AROUND:7,DIMENSION_COUNT:2,DIMENSION_WIDTH:0,DIMENSION_HEIGHT:1,DIRECTION_COUNT:3,DIRECTION_INHERIT:0,DIRECTION_LTR:1,DIRECTION_RTL:2,DISPLAY_COUNT:2,DISPLAY_FLEX:0,DISPLAY_NONE:1,EDGE_COUNT:9,EDGE_LEFT:0,EDGE_TOP:1,EDGE_RIGHT:2,EDGE_BOTTOM:3,EDGE_START:4,EDGE_END:5,EDGE_HORIZONTAL:6,EDGE_VERTICAL:7,EDGE_ALL:8,EXPERIMENTAL_FEATURE_COUNT:1,EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS:0,FLEX_DIRECTION_COUNT:4,FLEX_DIRECTION_COLUMN:0,FLEX_DIRECTION_COLUMN_REVERSE:1,FLEX_DIRECTION_ROW:2,FLEX_DIRECTION_ROW_REVERSE:3,JUSTIFY_COUNT:6,JUSTIFY_FLEX_START:0,JUSTIFY_CENTER:1,JUSTIFY_FLEX_END:2,JUSTIFY_SPACE_BETWEEN:3,JUSTIFY_SPACE_AROUND:4,JUSTIFY_SPACE_EVENLY:5,LOG_LEVEL_COUNT:6,LOG_LEVEL_ERROR:0,LOG_LEVEL_WARN:1,LOG_LEVEL_INFO:2,LOG_LEVEL_DEBUG:3,LOG_LEVEL_VERBOSE:4,LOG_LEVEL_FATAL:5,MEASURE_MODE_COUNT:3,MEASURE_MODE_UNDEFINED:0,MEASURE_MODE_EXACTLY:1,MEASURE_MODE_AT_MOST:2,NODE_TYPE_COUNT:2,NODE_TYPE_DEFAULT:0,NODE_TYPE_TEXT:1,OVERFLOW_COUNT:3,OVERFLOW_VISIBLE:0,OVERFLOW_HIDDEN:1,OVERFLOW_SCROLL:2,POSITION_TYPE_COUNT:2,POSITION_TYPE_RELATIVE:0,POSITION_TYPE_ABSOLUTE:1,PRINT_OPTIONS_COUNT:3,PRINT_OPTIONS_LAYOUT:1,PRINT_OPTIONS_STYLE:2,PRINT_OPTIONS_CHILDREN:4,UNIT_COUNT:4,UNIT_UNDEFINED:0,UNIT_POINT:1,UNIT_PERCENT:2,UNIT_AUTO:3,WRAP_COUNT:3,WRAP_NO_WRAP:0,WRAP_WRAP:1,WRAP_WRAP_REVERSE:2};fE.exports=gN});var hE=Me((pb,aE)=>{"use strict";var _N=Object.assign||function(i){for(var u=1;u"}}]),i}(),dE=function(){Ph(i,null,[{key:"fromJS",value:function(f){var c=f.width,g=f.height;return new i(c,g)}}]);function i(u,f){Iy(this,i),this.width=u,this.height=f}return Ph(i,[{key:"fromJS",value:function(f){f(this.width,this.height)}},{key:"toString",value:function(){return""}}]),i}(),pE=function(){function i(u,f){Iy(this,i),this.unit=u,this.value=f}return Ph(i,[{key:"fromJS",value:function(f){f(this.unit,this.value)}},{key:"toString",value:function(){switch(this.unit){case ps.UNIT_POINT:return String(this.value);case ps.UNIT_PERCENT:return this.value+"%";case ps.UNIT_AUTO:return"auto";default:return this.value+"?"}}},{key:"valueOf",value:function(){return this.value}}]),i}();aE.exports=function(i,u){function f(C,A,x){var D=C[A];C[A]=function(){for(var L=arguments.length,N=Array(L),j=0;j1?N-1:0),$=1;$1&&arguments[1]!==void 0?arguments[1]:NaN,x=arguments.length>2&&arguments[2]!==void 0?arguments[2]:NaN,D=arguments.length>3&&arguments[3]!==void 0?arguments[3]:ps.DIRECTION_LTR;return C.call(this,A,x,D)}),_N({Config:u.Config,Node:u.Node,Layout:i("Layout",yN),Size:i("Size",dE),Value:i("Value",pE),getInstanceCount:function(){return u.getInstanceCount.apply(u,arguments)}},ps)}});var mE=Me((exports,module)=>{(function(i,u){typeof define=="function"&&define.amd?define([],function(){return u}):typeof module=="object"&&module.exports?module.exports=u:(i.nbind=i.nbind||{}).init=u})(exports,function(Module,cb){typeof Module=="function"&&(cb=Module,Module={}),Module.onRuntimeInitialized=function(i,u){return function(){i&&i.apply(this,arguments);try{Module.ccall("nbind_init")}catch(f){u(f);return}u(null,{bind:Module._nbind_value,reflect:Module.NBind.reflect,queryType:Module.NBind.queryType,toggleLightGC:Module.toggleLightGC,lib:Module})}}(Module.onRuntimeInitialized,cb);var Module;Module||(Module=(typeof Module!="undefined"?Module:null)||{});var moduleOverrides={};for(var key in Module)Module.hasOwnProperty(key)&&(moduleOverrides[key]=Module[key]);var ENVIRONMENT_IS_WEB=!1,ENVIRONMENT_IS_WORKER=!1,ENVIRONMENT_IS_NODE=!1,ENVIRONMENT_IS_SHELL=!1;if(Module.ENVIRONMENT)if(Module.ENVIRONMENT==="WEB")ENVIRONMENT_IS_WEB=!0;else if(Module.ENVIRONMENT==="WORKER")ENVIRONMENT_IS_WORKER=!0;else if(Module.ENVIRONMENT==="NODE")ENVIRONMENT_IS_NODE=!0;else if(Module.ENVIRONMENT==="SHELL")ENVIRONMENT_IS_SHELL=!0;else throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.");else ENVIRONMENT_IS_WEB=typeof window=="object",ENVIRONMENT_IS_WORKER=typeof importScripts=="function",ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof require=="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){Module.print||(Module.print=console.log),Module.printErr||(Module.printErr=console.warn);var nodeFS,nodePath;Module.read=function(u,f){nodeFS||(nodeFS={}("")),nodePath||(nodePath={}("")),u=nodePath.normalize(u);var c=nodeFS.readFileSync(u);return f?c:c.toString()},Module.readBinary=function(u){var f=Module.read(u,!0);return f.buffer||(f=new Uint8Array(f)),assert(f.buffer),f},Module.load=function(u){globalEval(read(u))},Module.thisProgram||(process.argv.length>1?Module.thisProgram=process.argv[1].replace(/\\/g,"/"):Module.thisProgram="unknown-program"),Module.arguments=process.argv.slice(2),typeof module!="undefined"&&(module.exports=Module),Module.inspect=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL)Module.print||(Module.print=print),typeof printErr!="undefined"&&(Module.printErr=printErr),typeof read!="undefined"?Module.read=read:Module.read=function(){throw"no read() available"},Module.readBinary=function(u){if(typeof readbuffer=="function")return new Uint8Array(readbuffer(u));var f=read(u,"binary");return assert(typeof f=="object"),f},typeof scriptArgs!="undefined"?Module.arguments=scriptArgs:typeof arguments!="undefined"&&(Module.arguments=arguments),typeof quit=="function"&&(Module.quit=function(i,u){quit(i)});else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(Module.read=function(u){var f=new XMLHttpRequest;return f.open("GET",u,!1),f.send(null),f.responseText},ENVIRONMENT_IS_WORKER&&(Module.readBinary=function(u){var f=new XMLHttpRequest;return f.open("GET",u,!1),f.responseType="arraybuffer",f.send(null),new Uint8Array(f.response)}),Module.readAsync=function(u,f,c){var g=new XMLHttpRequest;g.open("GET",u,!0),g.responseType="arraybuffer",g.onload=function(){g.status==200||g.status==0&&g.response?f(g.response):c()},g.onerror=c,g.send(null)},typeof arguments!="undefined"&&(Module.arguments=arguments),typeof console!="undefined")Module.print||(Module.print=function(u){console.log(u)}),Module.printErr||(Module.printErr=function(u){console.warn(u)});else{var TRY_USE_DUMP=!1;Module.print||(Module.print=TRY_USE_DUMP&&typeof dump!="undefined"?function(i){dump(i)}:function(i){})}ENVIRONMENT_IS_WORKER&&(Module.load=importScripts),typeof Module.setWindowTitle=="undefined"&&(Module.setWindowTitle=function(i){document.title=i})}else throw"Unknown runtime environment. Where are we?";function globalEval(i){eval.call(null,i)}!Module.load&&Module.read&&(Module.load=function(u){globalEval(Module.read(u))}),Module.print||(Module.print=function(){}),Module.printErr||(Module.printErr=Module.print),Module.arguments||(Module.arguments=[]),Module.thisProgram||(Module.thisProgram="./this.program"),Module.quit||(Module.quit=function(i,u){throw u}),Module.print=Module.print,Module.printErr=Module.printErr,Module.preRun=[],Module.postRun=[];for(var key in moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);moduleOverrides=void 0;var Runtime={setTempRet0:function(i){return tempRet0=i,i},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(i){STACKTOP=i},getNativeTypeSize:function(i){switch(i){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(i[i.length-1]==="*")return Runtime.QUANTUM_SIZE;if(i[0]==="i"){var u=parseInt(i.substr(1));return assert(u%8==0),u/8}else return 0}}},getNativeFieldSize:function(i){return Math.max(Runtime.getNativeTypeSize(i),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(i,u){return u==="double"||u==="i64"?i&7&&(assert((i&7)==4),i+=4):assert((i&3)==0),i},getAlignSize:function(i,u,f){return!f&&(i=="i64"||i=="double")?8:i?Math.min(u||(i?Runtime.getNativeFieldSize(i):0),Runtime.QUANTUM_SIZE):Math.min(u,8)},dynCall:function(i,u,f){return f&&f.length?Module["dynCall_"+i].apply(null,[u].concat(f)):Module["dynCall_"+i].call(null,u)},functionPointers:[],addFunction:function(i){for(var u=0;u>2],f=(u+i+15|0)&-16;if(HEAP32[DYNAMICTOP_PTR>>2]=f,f>=TOTAL_MEMORY){var c=enlargeMemory();if(!c)return HEAP32[DYNAMICTOP_PTR>>2]=u,0}return u},alignMemory:function(i,u){var f=i=Math.ceil(i/(u||16))*(u||16);return f},makeBigInt:function(i,u,f){var c=f?+(i>>>0)+ +(u>>>0)*4294967296:+(i>>>0)+ +(u|0)*4294967296;return c},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var ABORT=0,EXITSTATUS=0;function assert(i,u){i||abort("Assertion failed: "+u)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(i){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}var cwrap,ccall;(function(){var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(i){var u=Runtime.stackAlloc(i.length);return writeArrayToMemory(i,u),u},stringToC:function(i){var u=0;if(i!=null&&i!==0){var f=(i.length<<2)+1;u=Runtime.stackAlloc(f),stringToUTF8(i,u,f)}return u}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(u,f,c,g,t){var C=getCFunc(u),A=[],x=0;if(g)for(var D=0;D>0]=u;break;case"i8":HEAP8[i>>0]=u;break;case"i16":HEAP16[i>>1]=u;break;case"i32":HEAP32[i>>2]=u;break;case"i64":tempI64=[u>>>0,(tempDouble=u,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[i>>2]=tempI64[0],HEAP32[i+4>>2]=tempI64[1];break;case"float":HEAPF32[i>>2]=u;break;case"double":HEAPF64[i>>3]=u;break;default:abort("invalid type for setValue: "+f)}}Module.setValue=setValue;function getValue(i,u,f){switch(u=u||"i8",u.charAt(u.length-1)==="*"&&(u="i32"),u){case"i1":return HEAP8[i>>0];case"i8":return HEAP8[i>>0];case"i16":return HEAP16[i>>1];case"i32":return HEAP32[i>>2];case"i64":return HEAP32[i>>2];case"float":return HEAPF32[i>>2];case"double":return HEAPF64[i>>3];default:abort("invalid type for setValue: "+u)}return null}Module.getValue=getValue;var ALLOC_NORMAL=0,ALLOC_STACK=1,ALLOC_STATIC=2,ALLOC_DYNAMIC=3,ALLOC_NONE=4;Module.ALLOC_NORMAL=ALLOC_NORMAL,Module.ALLOC_STACK=ALLOC_STACK,Module.ALLOC_STATIC=ALLOC_STATIC,Module.ALLOC_DYNAMIC=ALLOC_DYNAMIC,Module.ALLOC_NONE=ALLOC_NONE;function allocate(i,u,f,c){var g,t;typeof i=="number"?(g=!0,t=i):(g=!1,t=i.length);var C=typeof u=="string"?u:null,A;if(f==ALLOC_NONE?A=c:A=[typeof _malloc=="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][f===void 0?ALLOC_STATIC:f](Math.max(t,C?1:u.length)),g){var c=A,x;for(assert((A&3)==0),x=A+(t&~3);c>2]=0;for(x=A+t;c>0]=0;return A}if(C==="i8")return i.subarray||i.slice?HEAPU8.set(i,A):HEAPU8.set(new Uint8Array(i),A),A;for(var D=0,L,N,j;D>0],f|=c,!(c==0&&!u||(g++,u&&g==u)););u||(u=g);var t="";if(f<128){for(var C=1024,A;u>0;)A=String.fromCharCode.apply(String,HEAPU8.subarray(i,i+Math.min(u,C))),t=t?t+A:A,i+=C,u-=C;return t}return Module.UTF8ToString(i)}Module.Pointer_stringify=Pointer_stringify;function AsciiToString(i){for(var u="";;){var f=HEAP8[i++>>0];if(!f)return u;u+=String.fromCharCode(f)}}Module.AsciiToString=AsciiToString;function stringToAscii(i,u){return writeAsciiToMemory(i,u,!1)}Module.stringToAscii=stringToAscii;var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function UTF8ArrayToString(i,u){for(var f=u;i[f];)++f;if(f-u>16&&i.subarray&&UTF8Decoder)return UTF8Decoder.decode(i.subarray(u,f));for(var c,g,t,C,A,x,D="";;){if(c=i[u++],!c)return D;if(!(c&128)){D+=String.fromCharCode(c);continue}if(g=i[u++]&63,(c&224)==192){D+=String.fromCharCode((c&31)<<6|g);continue}if(t=i[u++]&63,(c&240)==224?c=(c&15)<<12|g<<6|t:(C=i[u++]&63,(c&248)==240?c=(c&7)<<18|g<<12|t<<6|C:(A=i[u++]&63,(c&252)==248?c=(c&3)<<24|g<<18|t<<12|C<<6|A:(x=i[u++]&63,c=(c&1)<<30|g<<24|t<<18|C<<12|A<<6|x))),c<65536)D+=String.fromCharCode(c);else{var L=c-65536;D+=String.fromCharCode(55296|L>>10,56320|L&1023)}}}Module.UTF8ArrayToString=UTF8ArrayToString;function UTF8ToString(i){return UTF8ArrayToString(HEAPU8,i)}Module.UTF8ToString=UTF8ToString;function stringToUTF8Array(i,u,f,c){if(!(c>0))return 0;for(var g=f,t=f+c-1,C=0;C=55296&&A<=57343&&(A=65536+((A&1023)<<10)|i.charCodeAt(++C)&1023),A<=127){if(f>=t)break;u[f++]=A}else if(A<=2047){if(f+1>=t)break;u[f++]=192|A>>6,u[f++]=128|A&63}else if(A<=65535){if(f+2>=t)break;u[f++]=224|A>>12,u[f++]=128|A>>6&63,u[f++]=128|A&63}else if(A<=2097151){if(f+3>=t)break;u[f++]=240|A>>18,u[f++]=128|A>>12&63,u[f++]=128|A>>6&63,u[f++]=128|A&63}else if(A<=67108863){if(f+4>=t)break;u[f++]=248|A>>24,u[f++]=128|A>>18&63,u[f++]=128|A>>12&63,u[f++]=128|A>>6&63,u[f++]=128|A&63}else{if(f+5>=t)break;u[f++]=252|A>>30,u[f++]=128|A>>24&63,u[f++]=128|A>>18&63,u[f++]=128|A>>12&63,u[f++]=128|A>>6&63,u[f++]=128|A&63}}return u[f]=0,f-g}Module.stringToUTF8Array=stringToUTF8Array;function stringToUTF8(i,u,f){return stringToUTF8Array(i,HEAPU8,u,f)}Module.stringToUTF8=stringToUTF8;function lengthBytesUTF8(i){for(var u=0,f=0;f=55296&&c<=57343&&(c=65536+((c&1023)<<10)|i.charCodeAt(++f)&1023),c<=127?++u:c<=2047?u+=2:c<=65535?u+=3:c<=2097151?u+=4:c<=67108863?u+=5:u+=6}return u}Module.lengthBytesUTF8=lengthBytesUTF8;var UTF16Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf-16le"):void 0;function demangle(i){var u=Module.___cxa_demangle||Module.__cxa_demangle;if(u){try{var f=i.substr(1),c=lengthBytesUTF8(f)+1,g=_malloc(c);stringToUTF8(f,g,c);var t=_malloc(4),C=u(g,0,0,t);if(getValue(t,"i32")===0&&C)return Pointer_stringify(C)}catch(A){}finally{g&&_free(g),t&&_free(t),C&&_free(C)}return i}return Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling"),i}function demangleAll(i){var u=/__Z[\w\d_]+/g;return i.replace(u,function(f){var c=demangle(f);return f===c?f:f+" ["+c+"]"})}function jsStackTrace(){var i=new Error;if(!i.stack){try{throw new Error(0)}catch(u){i=u}if(!i.stack)return"(no stack trace available)"}return i.stack.toString()}function stackTrace(){var i=jsStackTrace();return Module.extraStackTrace&&(i+=`
-`+Module.extraStackTrace()),demangleAll(i)}Module.stackTrace=stackTrace;var HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module.HEAP8=HEAP8=new Int8Array(buffer),Module.HEAP16=HEAP16=new Int16Array(buffer),Module.HEAP32=HEAP32=new Int32Array(buffer),Module.HEAPU8=HEAPU8=new Uint8Array(buffer),Module.HEAPU16=HEAPU16=new Uint16Array(buffer),Module.HEAPU32=HEAPU32=new Uint32Array(buffer),Module.HEAPF32=HEAPF32=new Float32Array(buffer),Module.HEAPF64=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed,STACK_BASE,STACKTOP,STACK_MAX,DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0,staticSealed=!1;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||134217728;TOTAL_MEMORY0;){var u=i.shift();if(typeof u=="function"){u();continue}var f=u.func;typeof f=="number"?u.arg===void 0?Module.dynCall_v(f):Module.dynCall_vi(f,u.arg):f(u.arg===void 0?null:u.arg)}}var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1,runtimeExited=!1;function preRun(){if(Module.preRun)for(typeof Module.preRun=="function"&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){runtimeInitialized||(runtimeInitialized=!0,callRuntimeCallbacks(__ATINIT__))}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__),runtimeExited=!0}function postRun(){if(Module.postRun)for(typeof Module.postRun=="function"&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(i){__ATPRERUN__.unshift(i)}Module.addOnPreRun=addOnPreRun;function addOnInit(i){__ATINIT__.unshift(i)}Module.addOnInit=addOnInit;function addOnPreMain(i){__ATMAIN__.unshift(i)}Module.addOnPreMain=addOnPreMain;function addOnExit(i){__ATEXIT__.unshift(i)}Module.addOnExit=addOnExit;function addOnPostRun(i){__ATPOSTRUN__.unshift(i)}Module.addOnPostRun=addOnPostRun;function intArrayFromString(i,u,f){var c=f>0?f:lengthBytesUTF8(i)+1,g=new Array(c),t=stringToUTF8Array(i,g,0,g.length);return u&&(g.length=t),g}Module.intArrayFromString=intArrayFromString;function intArrayToString(i){for(var u=[],f=0;f255&&(c&=255),u.push(String.fromCharCode(c))}return u.join("")}Module.intArrayToString=intArrayToString;function writeStringToMemory(i,u,f){Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var c,g;f&&(g=u+lengthBytesUTF8(i),c=HEAP8[g]),stringToUTF8(i,u,Infinity),f&&(HEAP8[g]=c)}Module.writeStringToMemory=writeStringToMemory;function writeArrayToMemory(i,u){HEAP8.set(i,u)}Module.writeArrayToMemory=writeArrayToMemory;function writeAsciiToMemory(i,u,f){for(var c=0;c>0]=i.charCodeAt(c);f||(HEAP8[u>>0]=0)}if(Module.writeAsciiToMemory=writeAsciiToMemory,(!Math.imul||Math.imul(4294967295,5)!==-5)&&(Math.imul=function(u,f){var c=u>>>16,g=u&65535,t=f>>>16,C=f&65535;return g*C+(c*C+g*t<<16)|0}),Math.imul=Math.imul,!Math.fround){var froundBuffer=new Float32Array(1);Math.fround=function(i){return froundBuffer[0]=i,froundBuffer[0]}}Math.fround=Math.fround,Math.clz32||(Math.clz32=function(i){i=i>>>0;for(var u=0;u<32;u++)if(i&1<<31-u)return u;return 32}),Math.clz32=Math.clz32,Math.trunc||(Math.trunc=function(i){return i<0?Math.ceil(i):Math.floor(i)}),Math.trunc=Math.trunc;var Math_abs=Math.abs,Math_cos=Math.cos,Math_sin=Math.sin,Math_tan=Math.tan,Math_acos=Math.acos,Math_asin=Math.asin,Math_atan=Math.atan,Math_atan2=Math.atan2,Math_exp=Math.exp,Math_log=Math.log,Math_sqrt=Math.sqrt,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_pow=Math.pow,Math_imul=Math.imul,Math_fround=Math.fround,Math_round=Math.round,Math_min=Math.min,Math_clz32=Math.clz32,Math_trunc=Math.trunc,runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;function getUniqueRunDependency(i){return i}function addRunDependency(i){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}Module.addRunDependency=addRunDependency;function removeRunDependency(i){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),runDependencies==0&&(runDependencyWatcher!==null&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var u=dependenciesFulfilled;dependenciesFulfilled=null,u()}}Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={};var ASM_CONSTS=[function(i,u,f,c,g,t,C,A){return _nbind.callbackSignatureList[i].apply(this,arguments)}];function _emscripten_asm_const_iiiiiiii(i,u,f,c,g,t,C,A){return ASM_CONSTS[i](u,f,c,g,t,C,A)}function _emscripten_asm_const_iiiii(i,u,f,c,g){return ASM_CONSTS[i](u,f,c,g)}function _emscripten_asm_const_iiidddddd(i,u,f,c,g,t,C,A,x){return ASM_CONSTS[i](u,f,c,g,t,C,A,x)}function _emscripten_asm_const_iiididi(i,u,f,c,g,t,C){return ASM_CONSTS[i](u,f,c,g,t,C)}function _emscripten_asm_const_iiii(i,u,f,c){return ASM_CONSTS[i](u,f,c)}function _emscripten_asm_const_iiiid(i,u,f,c,g){return ASM_CONSTS[i](u,f,c,g)}function _emscripten_asm_const_iiiiii(i,u,f,c,g,t){return ASM_CONSTS[i](u,f,c,g,t)}STATIC_BASE=Runtime.GLOBAL_BASE,STATICTOP=STATIC_BASE+12800,__ATINIT__.push({func:function(){__GLOBAL__sub_I_Yoga_cpp()}},{func:function(){__GLOBAL__sub_I_nbind_cc()}},{func:function(){__GLOBAL__sub_I_common_cc()}},{func:function(){__GLOBAL__sub_I_Binding_cc()}}),allocate([0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,192,127,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,128,191,0,0,128,191,0,0,192,127,0,0,0,0,0,0,0,0,0,0,128,63,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,190,12,0,0,200,12,0,0,208,12,0,0,216,12,0,0,230,12,0,0,242,12,0,0,1,0,0,0,3,0,0,0,0,0,0,0,2,0,0,0,0,0,192,127,3,0,0,0,180,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,182,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,4,0,0,0,183,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,184,45,0,0,185,45,0,0,181,45,0,0,181,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,148,4,0,0,3,0,0,0,187,45,0,0,164,4,0,0,188,45,0,0,2,0,0,0,189,45,0,0,164,4,0,0,188,45,0,0,185,45,0,0,164,4,0,0,185,45,0,0,164,4,0,0,188,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,6,0,0,0,1,0,0,0,7,0,0,0,183,45,0,0,182,45,0,0,181,45,0,0,190,45,0,0,190,45,0,0,182,45,0,0,182,45,0,0,185,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,185,45,0,0,48,5,0,0,3,0,0,0,56,5,0,0,1,0,0,0,189,45,0,0,185,45,0,0,164,4,0,0,76,5,0,0,2,0,0,0,191,45,0,0,186,45,0,0,182,45,0,0,185,45,0,0,192,45,0,0,185,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,76,5,0,0,76,5,0,0,136,5,0,0,182,45,0,0,181,45,0,0,2,0,0,0,190,45,0,0,136,5,0,0,56,19,0,0,156,5,0,0,2,0,0,0,184,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,9,0,0,0,1,0,0,0,10,0,0,0,204,5,0,0,181,45,0,0,181,45,0,0,2,0,0,0,180,45,0,0,204,5,0,0,2,0,0,0,195,45,0,0,236,5,0,0,97,19,0,0,198,45,0,0,211,45,0,0,212,45,0,0,213,45,0,0,214,45,0,0,215,45,0,0,188,45,0,0,182,45,0,0,216,45,0,0,217,45,0,0,218,45,0,0,219,45,0,0,192,45,0,0,181,45,0,0,0,0,0,0,185,45,0,0,110,19,0,0,186,45,0,0,115,19,0,0,221,45,0,0,120,19,0,0,148,4,0,0,132,19,0,0,96,6,0,0,145,19,0,0,222,45,0,0,164,19,0,0,223,45,0,0,173,19,0,0,0,0,0,0,3,0,0,0,104,6,0,0,1,0,0,0,187,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,11,0,0,0,12,0,0,0,1,0,0,0,13,0,0,0,185,45,0,0,224,45,0,0,164,6,0,0,188,45,0,0,172,6,0,0,180,6,0,0,2,0,0,0,188,6,0,0,7,0,0,0,224,45,0,0,7,0,0,0,164,6,0,0,1,0,0,0,213,45,0,0,185,45,0,0,224,45,0,0,172,6,0,0,185,45,0,0,224,45,0,0,164,6,0,0,185,45,0,0,224,45,0,0,211,45,0,0,211,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,172,6,0,0,222,45,0,0,211,45,0,0,224,45,0,0,188,45,0,0,222,45,0,0,211,45,0,0,40,7,0,0,188,45,0,0,2,0,0,0,224,45,0,0,185,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,222,45,0,0,224,45,0,0,148,4,0,0,185,45,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,185,45,0,0,164,6,0,0,148,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,14,0,0,0,15,0,0,0,1,0,0,0,16,0,0,0,148,7,0,0,2,0,0,0,225,45,0,0,183,45,0,0,188,45,0,0,168,7,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,234,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,148,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,9,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,242,45,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,110,111,100,101,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,119,104,105,99,104,32,115,116,105,108,108,32,104,97,115,32,99,104,105,108,100,114,101,110,32,97,116,116,97,99,104,101,100,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,115,116,105,108,108,32,97,116,116,97,99,104,101,100,32,116,111,32,97,32,112,97,114,101,110,116,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,99,111,110,102,105,103,0,67,97,110,110,111,116,32,115,101,116,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,67,104,105,108,100,32,97,108,114,101,97,100,121,32,104,97,115,32,97,32,112,97,114,101,110,116,44,32,105,116,32,109,117,115,116,32,98,101,32,114,101,109,111,118,101,100,32,102,105,114,115,116,46,0,67,97,110,110,111,116,32,97,100,100,32,99,104,105,108,100,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,79,110,108,121,32,108,101,97,102,32,110,111,100,101,115,32,119,105,116,104,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,115,104,111,117,108,100,32,109,97,110,117,97,108,108,121,32,109,97,114,107,32,116,104,101,109,115,101,108,118,101,115,32,97,115,32,100,105,114,116,121,0,67,97,110,110,111,116,32,103,101,116,32,108,97,121,111,117,116,32,112,114,111,112,101,114,116,105,101,115,32,111,102,32,109,117,108,116,105,45,101,100,103,101,32,115,104,111,114,116,104,97,110,100,115,0,37,115,37,100,46,123,91,115,107,105,112,112,101,100,93,32,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,61,62,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,37,115,37,100,46,123,37,115,0,42,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,37,115,10,0,37,115,37,100,46,125,37,115,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,79,117,116,32,111,102,32,99,97,99,104,101,32,101,110,116,114,105,101,115,33,10,0,83,99,97,108,101,32,102,97,99,116,111,114,32,115,104,111,117,108,100,32,110,111,116,32,98,101,32,108,101,115,115,32,116,104,97,110,32,122,101,114,111,0,105,110,105,116,105,97,108,0,37,115,10,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,85,78,68,69,70,73,78,69,68,0,69,88,65,67,84,76,89,0,65,84,95,77,79,83,84,0,76,65,89,95,85,78,68,69,70,73,78,69,68,0,76,65,89,95,69,88,65,67,84,76,89,0,76,65,89,95,65,84,95,77,79,83,84,0,97,118,97,105,108,97,98,108,101,87,105,100,116,104,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,119,105,100,116,104,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,97,118,97,105,108,97,98,108,101,72,101,105,103,104,116,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,104,101,105,103,104,116,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,102,108,101,120,0,115,116,114,101,116,99,104,0,109,117,108,116,105,108,105,110,101,45,115,116,114,101,116,99,104,0,69,120,112,101,99,116,101,100,32,110,111,100,101,32,116,111,32,104,97,118,101,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,0,109,101,97,115,117,114,101,0,69,120,112,101,99,116,32,99,117,115,116,111,109,32,98,97,115,101,108,105,110,101,32,102,117,110,99,116,105,111,110,32,116,111,32,110,111,116,32,114,101,116,117,114,110,32,78,97,78,0,97,98,115,45,109,101,97,115,117,114,101,0,97,98,115,45,108,97,121,111,117,116,0,78,111,100,101,0,99,114,101,97,116,101,68,101,102,97,117,108,116,0,99,114,101,97,116,101,87,105,116,104,67,111,110,102,105,103,0,100,101,115,116,114,111,121,0,114,101,115,101,116,0,99,111,112,121,83,116,121,108,101,0,115,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,115,101,116,80,111,115,105,116,105,111,110,0,115,101,116,80,111,115,105,116,105,111,110,80,101,114,99,101,110,116,0,115,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,115,101,116,65,108,105,103,110,73,116,101,109,115,0,115,101,116,65,108,105,103,110,83,101,108,102,0,115,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,115,101,116,70,108,101,120,87,114,97,112,0,115,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,115,101,116,77,97,114,103,105,110,0,115,101,116,77,97,114,103,105,110,80,101,114,99,101,110,116,0,115,101,116,77,97,114,103,105,110,65,117,116,111,0,115,101,116,79,118,101,114,102,108,111,119,0,115,101,116,68,105,115,112,108,97,121,0,115,101,116,70,108,101,120,0,115,101,116,70,108,101,120,66,97,115,105,115,0,115,101,116,70,108,101,120,66,97,115,105,115,80,101,114,99,101,110,116,0,115,101,116,70,108,101,120,71,114,111,119,0,115,101,116,70,108,101,120,83,104,114,105,110,107,0,115,101,116,87,105,100,116,104,0,115,101,116,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,87,105,100,116,104,65,117,116,111,0,115,101,116,72,101,105,103,104,116,0,115,101,116,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,72,101,105,103,104,116,65,117,116,111,0,115,101,116,77,105,110,87,105,100,116,104,0,115,101,116,77,105,110,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,105,110,72,101,105,103,104,116,0,115,101,116,77,105,110,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,77,97,120,87,105,100,116,104,0,115,101,116,77,97,120,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,97,120,72,101,105,103,104,116,0,115,101,116,77,97,120,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,65,115,112,101,99,116,82,97,116,105,111,0,115,101,116,66,111,114,100,101,114,0,115,101,116,80,97,100,100,105,110,103,0,115,101,116,80,97,100,100,105,110,103,80,101,114,99,101,110,116,0,103,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,103,101,116,80,111,115,105,116,105,111,110,0,103,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,103,101,116,65,108,105,103,110,73,116,101,109,115,0,103,101,116,65,108,105,103,110,83,101,108,102,0,103,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,103,101,116,70,108,101,120,87,114,97,112,0,103,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,103,101,116,77,97,114,103,105,110,0,103,101,116,70,108,101,120,66,97,115,105,115,0,103,101,116,70,108,101,120,71,114,111,119,0,103,101,116,70,108,101,120,83,104,114,105,110,107,0,103,101,116,87,105,100,116,104,0,103,101,116,72,101,105,103,104,116,0,103,101,116,77,105,110,87,105,100,116,104,0,103,101,116,77,105,110,72,101,105,103,104,116,0,103,101,116,77,97,120,87,105,100,116,104,0,103,101,116,77,97,120,72,101,105,103,104,116,0,103,101,116,65,115,112,101,99,116,82,97,116,105,111,0,103,101,116,66,111,114,100,101,114,0,103,101,116,79,118,101,114,102,108,111,119,0,103,101,116,68,105,115,112,108,97,121,0,103,101,116,80,97,100,100,105,110,103,0,105,110,115,101,114,116,67,104,105,108,100,0,114,101,109,111,118,101,67,104,105,108,100,0,103,101,116,67,104,105,108,100,67,111,117,110,116,0,103,101,116,80,97,114,101,110,116,0,103,101,116,67,104,105,108,100,0,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,117,110,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,109,97,114,107,68,105,114,116,121,0,105,115,68,105,114,116,121,0,99,97,108,99,117,108,97,116,101,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,76,101,102,116,0,103,101,116,67,111,109,112,117,116,101,100,82,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,84,111,112,0,103,101,116,67,111,109,112,117,116,101,100,66,111,116,116,111,109,0,103,101,116,67,111,109,112,117,116,101,100,87,105,100,116,104,0,103,101,116,67,111,109,112,117,116,101,100,72,101,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,77,97,114,103,105,110,0,103,101,116,67,111,109,112,117,116,101,100,66,111,114,100,101,114,0,103,101,116,67,111,109,112,117,116,101,100,80,97,100,100,105,110,103,0,67,111,110,102,105,103,0,99,114,101,97,116,101,0,115,101,116,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,115,101,116,80,111,105,110,116,83,99,97,108,101,70,97,99,116,111,114,0,105,115,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,86,97,108,117,101,0,76,97,121,111,117,116,0,83,105,122,101,0,103,101,116,73,110,115,116,97,110,99,101,67,111,117,110,116,0,73,110,116,54,52,0,1,1,1,2,2,4,4,4,4,8,8,4,8,118,111,105,100,0,98,111,111,108,0,115,116,100,58,58,115,116,114,105,110,103,0,99,98,70,117,110,99,116,105,111,110,32,38,0,99,111,110,115,116,32,99,98,70,117,110,99,116,105,111,110,32,38,0,69,120,116,101,114,110,97,108,0,66,117,102,102,101,114,0,78,66,105,110,100,73,68,0,78,66,105,110,100,0,98,105,110,100,95,118,97,108,117,101,0,114,101,102,108,101,99,116,0,113,117,101,114,121,84,121,112,101,0,108,97,108,108,111,99,0,108,114,101,115,101,116,0,123,114,101,116,117,114,110,40,95,110,98,105,110,100,46,99,97,108,108,98,97,99,107,83,105,103,110,97,116,117,114,101,76,105,115,116,91,36,48,93,46,97,112,112,108,121,40,116,104,105,115,44,97,114,103,117,109,101,110,116,115,41,41,59,125,0,95,110,98,105,110,100,95,110,101,119,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,46,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=STATICTOP;STATICTOP+=16;function _atexit(i,u){__ATEXIT__.unshift({func:i,arg:u})}function ___cxa_atexit(){return _atexit.apply(null,arguments)}function _abort(){Module.abort()}function __ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj(){Module.printErr("missing function: _ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj"),abort(-1)}function __decorate(i,u,f,c){var g=arguments.length,t=g<3?u:c===null?c=Object.getOwnPropertyDescriptor(u,f):c,C;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")t=Reflect.decorate(i,u,f,c);else for(var A=i.length-1;A>=0;A--)(C=i[A])&&(t=(g<3?C(t):g>3?C(u,f,t):C(u,f))||t);return g>3&&t&&Object.defineProperty(u,f,t),t}function _defineHidden(i){return function(u,f){Object.defineProperty(u,f,{configurable:!1,enumerable:!1,value:i,writable:!0})}}var _nbind={};function __nbind_free_external(i){_nbind.externalList[i].dereference(i)}function __nbind_reference_external(i){_nbind.externalList[i].reference()}function _llvm_stackrestore(i){var u=_llvm_stacksave,f=u.LLVM_SAVEDSTACKS[i];u.LLVM_SAVEDSTACKS.splice(i,1),Runtime.stackRestore(f)}function __nbind_register_pool(i,u,f,c){_nbind.Pool.pageSize=i,_nbind.Pool.usedPtr=u/4,_nbind.Pool.rootPtr=f,_nbind.Pool.pagePtr=c/4,HEAP32[u/4]=16909060,HEAP8[u]==1&&(_nbind.bigEndian=!0),HEAP32[u/4]=0,_nbind.makeTypeKindTbl=(t={},t[1024]=_nbind.PrimitiveType,t[64]=_nbind.Int64Type,t[2048]=_nbind.BindClass,t[3072]=_nbind.BindClassPtr,t[4096]=_nbind.SharedClassPtr,t[5120]=_nbind.ArrayType,t[6144]=_nbind.ArrayType,t[7168]=_nbind.CStringType,t[9216]=_nbind.CallbackType,t[10240]=_nbind.BindType,t),_nbind.makeTypeNameTbl={Buffer:_nbind.BufferType,External:_nbind.ExternalType,Int64:_nbind.Int64Type,_nbind_new:_nbind.CreateValueType,bool:_nbind.BooleanType,"cbFunction &":_nbind.CallbackType,"const cbFunction &":_nbind.CallbackType,"const std::string &":_nbind.StringType,"std::string":_nbind.StringType},Module.toggleLightGC=_nbind.toggleLightGC,_nbind.callUpcast=Module.dynCall_ii;var g=_nbind.makeType(_nbind.constructType,{flags:2048,id:0,name:""});g.proto=Module,_nbind.BindClass.list.push(g);var t}function _emscripten_set_main_loop_timing(i,u){if(Browser.mainLoop.timingMode=i,Browser.mainLoop.timingValue=u,!Browser.mainLoop.func)return 1;if(i==0)Browser.mainLoop.scheduler=function(){var C=Math.max(0,Browser.mainLoop.tickStartTime+u-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,C)},Browser.mainLoop.method="timeout";else if(i==1)Browser.mainLoop.scheduler=function(){Browser.requestAnimationFrame(Browser.mainLoop.runner)},Browser.mainLoop.method="rAF";else if(i==2){if(!window.setImmediate){let t=function(C){C.source===window&&C.data===c&&(C.stopPropagation(),f.shift()())};var g=t,f=[],c="setimmediate";window.addEventListener("message",t,!0),window.setImmediate=function(A){f.push(A),ENVIRONMENT_IS_WORKER?(Module.setImmediates===void 0&&(Module.setImmediates=[]),Module.setImmediates.push(A),window.postMessage({target:c})):window.postMessage(c,"*")}}Browser.mainLoop.scheduler=function(){window.setImmediate(Browser.mainLoop.runner)},Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(i,u,f,c,g){Module.noExitRuntime=!0,assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."),Browser.mainLoop.func=i,Browser.mainLoop.arg=c;var t;typeof c!="undefined"?t=function(){Module.dynCall_vi(i,c)}:t=function(){Module.dynCall_v(i)};var C=Browser.mainLoop.currentlyRunningMainloop;if(Browser.mainLoop.runner=function(){if(!ABORT){if(Browser.mainLoop.queue.length>0){var x=Date.now(),D=Browser.mainLoop.queue.shift();if(D.func(D.arg),Browser.mainLoop.remainingBlockers){var L=Browser.mainLoop.remainingBlockers,N=L%1==0?L-1:Math.floor(L);D.counted?Browser.mainLoop.remainingBlockers=N:(N=N+.5,Browser.mainLoop.remainingBlockers=(8*L+N)/9)}if(console.log('main loop blocker "'+D.name+'" took '+(Date.now()-x)+" ms"),Browser.mainLoop.updateStatus(),C1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else Browser.mainLoop.timingMode==0&&(Browser.mainLoop.tickStartTime=_emscripten_get_now());Browser.mainLoop.method==="timeout"&&Module.ctx&&(Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"),Browser.mainLoop.method=""),Browser.mainLoop.runIter(t),!(C0?_emscripten_set_main_loop_timing(0,1e3/u):_emscripten_set_main_loop_timing(1,1),Browser.mainLoop.scheduler()),f)throw"SimulateInfiniteLoop"}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null,Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var i=Browser.mainLoop.timingMode,u=Browser.mainLoop.timingValue,f=Browser.mainLoop.func;Browser.mainLoop.func=null,_emscripten_set_main_loop(f,0,!1,Browser.mainLoop.arg,!0),_emscripten_set_main_loop_timing(i,u),Browser.mainLoop.scheduler()},updateStatus:function(){if(Module.setStatus){var i=Module.statusMessage||"Please wait...",u=Browser.mainLoop.remainingBlockers,f=Browser.mainLoop.expectedBlockers;u?u=6;){var Le=J>>Te-6&63;Te-=6,De+=Se[Le]}return Te==2?(De+=Se[(J&3)<<4],De+=me+me):Te==4&&(De+=Se[(J&15)<<2],De+=me),De}h.src="data:audio/x-"+C.substr(-3)+";base64,"+Q(t),L(h)},h.src=$,Browser.safeSetTimeout(function(){L(h)},1e4)}else return N()},Module.preloadPlugins.push(u);function f(){Browser.pointerLock=document.pointerLockElement===Module.canvas||document.mozPointerLockElement===Module.canvas||document.webkitPointerLockElement===Module.canvas||document.msPointerLockElement===Module.canvas}var c=Module.canvas;c&&(c.requestPointerLock=c.requestPointerLock||c.mozRequestPointerLock||c.webkitRequestPointerLock||c.msRequestPointerLock||function(){},c.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){},c.exitPointerLock=c.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",f,!1),document.addEventListener("mozpointerlockchange",f,!1),document.addEventListener("webkitpointerlockchange",f,!1),document.addEventListener("mspointerlockchange",f,!1),Module.elementPointerLock&&c.addEventListener("click",function(g){!Browser.pointerLock&&Module.canvas.requestPointerLock&&(Module.canvas.requestPointerLock(),g.preventDefault())},!1))},createContext:function(i,u,f,c){if(u&&Module.ctx&&i==Module.canvas)return Module.ctx;var g,t;if(u){var C={antialias:!1,alpha:!1};if(c)for(var A in c)C[A]=c[A];t=GL.createContext(i,C),t&&(g=GL.getContext(t).GLctx)}else g=i.getContext("2d");return g?(f&&(u||assert(typeof GLctx=="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),Module.ctx=g,u&&GL.makeContextCurrent(t),Module.useWebGL=u,Browser.moduleContextCreatedCallbacks.forEach(function(x){x()}),Browser.init()),g):null},destroyContext:function(i,u,f){},fullscreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullscreen:function(i,u,f){Browser.lockPointer=i,Browser.resizeCanvas=u,Browser.vrDevice=f,typeof Browser.lockPointer=="undefined"&&(Browser.lockPointer=!0),typeof Browser.resizeCanvas=="undefined"&&(Browser.resizeCanvas=!1),typeof Browser.vrDevice=="undefined"&&(Browser.vrDevice=null);var c=Module.canvas;function g(){Browser.isFullscreen=!1;var C=c.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===C?(c.exitFullscreen=document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){},c.exitFullscreen=c.exitFullscreen.bind(document),Browser.lockPointer&&c.requestPointerLock(),Browser.isFullscreen=!0,Browser.resizeCanvas&&Browser.setFullscreenCanvasSize()):(C.parentNode.insertBefore(c,C),C.parentNode.removeChild(C),Browser.resizeCanvas&&Browser.setWindowedCanvasSize()),Module.onFullScreen&&Module.onFullScreen(Browser.isFullscreen),Module.onFullscreen&&Module.onFullscreen(Browser.isFullscreen),Browser.updateCanvasDimensions(c)}Browser.fullscreenHandlersInstalled||(Browser.fullscreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",g,!1),document.addEventListener("mozfullscreenchange",g,!1),document.addEventListener("webkitfullscreenchange",g,!1),document.addEventListener("MSFullscreenChange",g,!1));var t=document.createElement("div");c.parentNode.insertBefore(t,c),t.appendChild(c),t.requestFullscreen=t.requestFullscreen||t.mozRequestFullScreen||t.msRequestFullscreen||(t.webkitRequestFullscreen?function(){t.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}:null)||(t.webkitRequestFullScreen?function(){t.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null),f?t.requestFullscreen({vrDisplay:f}):t.requestFullscreen()},requestFullScreen:function(i,u,f){return Module.printErr("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead."),Browser.requestFullScreen=function(c,g,t){return Browser.requestFullscreen(c,g,t)},Browser.requestFullscreen(i,u,f)},nextRAF:0,fakeRequestAnimationFrame:function(i){var u=Date.now();if(Browser.nextRAF===0)Browser.nextRAF=u+1e3/60;else for(;u+2>=Browser.nextRAF;)Browser.nextRAF+=1e3/60;var f=Math.max(Browser.nextRAF-u,0);setTimeout(i,f)},requestAnimationFrame:function(u){typeof window=="undefined"?Browser.fakeRequestAnimationFrame(u):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||Browser.fakeRequestAnimationFrame),window.requestAnimationFrame(u))},safeCallback:function(i){return function(){if(!ABORT)return i.apply(null,arguments)}},allowAsyncCallbacks:!0,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=!1},resumeAsyncCallbacks:function(){if(Browser.allowAsyncCallbacks=!0,Browser.queuedAsyncCallbacks.length>0){var i=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[],i.forEach(function(u){u()})}},safeRequestAnimationFrame:function(i){return Browser.requestAnimationFrame(function(){ABORT||(Browser.allowAsyncCallbacks?i():Browser.queuedAsyncCallbacks.push(i))})},safeSetTimeout:function(i,u){return Module.noExitRuntime=!0,setTimeout(function(){ABORT||(Browser.allowAsyncCallbacks?i():Browser.queuedAsyncCallbacks.push(i))},u)},safeSetInterval:function(i,u){return Module.noExitRuntime=!0,setInterval(function(){ABORT||Browser.allowAsyncCallbacks&&i()},u)},getMimetype:function(i){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[i.substr(i.lastIndexOf(".")+1)]},getUserMedia:function(i){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia),window.getUserMedia(i)},getMovementX:function(i){return i.movementX||i.mozMovementX||i.webkitMovementX||0},getMovementY:function(i){return i.movementY||i.mozMovementY||i.webkitMovementY||0},getMouseWheelDelta:function(i){var u=0;switch(i.type){case"DOMMouseScroll":u=i.detail;break;case"mousewheel":u=i.wheelDelta;break;case"wheel":u=i.deltaY;break;default:throw"unrecognized mouse wheel event: "+i.type}return u},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(i){if(Browser.pointerLock)i.type!="mousemove"&&"mozMovementX"in i?Browser.mouseMovementX=Browser.mouseMovementY=0:(Browser.mouseMovementX=Browser.getMovementX(i),Browser.mouseMovementY=Browser.getMovementY(i)),typeof SDL!="undefined"?(Browser.mouseX=SDL.mouseX+Browser.mouseMovementX,Browser.mouseY=SDL.mouseY+Browser.mouseMovementY):(Browser.mouseX+=Browser.mouseMovementX,Browser.mouseY+=Browser.mouseMovementY);else{var u=Module.canvas.getBoundingClientRect(),f=Module.canvas.width,c=Module.canvas.height,g=typeof window.scrollX!="undefined"?window.scrollX:window.pageXOffset,t=typeof window.scrollY!="undefined"?window.scrollY:window.pageYOffset;if(i.type==="touchstart"||i.type==="touchend"||i.type==="touchmove"){var C=i.touch;if(C===void 0)return;var A=C.pageX-(g+u.left),x=C.pageY-(t+u.top);A=A*(f/u.width),x=x*(c/u.height);var D={x:A,y:x};if(i.type==="touchstart")Browser.lastTouches[C.identifier]=D,Browser.touches[C.identifier]=D;else if(i.type==="touchend"||i.type==="touchmove"){var L=Browser.touches[C.identifier];L||(L=D),Browser.lastTouches[C.identifier]=L,Browser.touches[C.identifier]=D}return}var N=i.pageX-(g+u.left),j=i.pageY-(t+u.top);N=N*(f/u.width),j=j*(c/u.height),Browser.mouseMovementX=N-Browser.mouseX,Browser.mouseMovementY=j-Browser.mouseY,Browser.mouseX=N,Browser.mouseY=j}},asyncLoad:function(i,u,f,c){var g=c?"":getUniqueRunDependency("al "+i);Module.readAsync(i,function(t){assert(t,'Loading data file "'+i+'" failed (no arrayBuffer).'),u(new Uint8Array(t)),g&&removeRunDependency(g)},function(t){if(f)f();else throw'Loading data file "'+i+'" failed.'}),g&&addRunDependency(g)},resizeListeners:[],updateResizeListeners:function(){var i=Module.canvas;Browser.resizeListeners.forEach(function(u){u(i.width,i.height)})},setCanvasSize:function(i,u,f){var c=Module.canvas;Browser.updateCanvasDimensions(c,i,u),f||Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var i=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];i=i|8388608,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=i}Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var i=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];i=i&~8388608,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=i}Browser.updateResizeListeners()},updateCanvasDimensions:function(i,u,f){u&&f?(i.widthNative=u,i.heightNative=f):(u=i.widthNative,f=i.heightNative);var c=u,g=f;if(Module.forcedAspectRatio&&Module.forcedAspectRatio>0&&(c/g>2];return u},getStr:function(){var i=Pointer_stringify(SYSCALLS.get());return i},get64:function(){var i=SYSCALLS.get(),u=SYSCALLS.get();return i>=0?assert(u===0):assert(u===-1),i},getZero:function(){assert(SYSCALLS.get()===0)}};function ___syscall6(i,u){SYSCALLS.varargs=u;try{var f=SYSCALLS.getStreamFromFD();return FS.close(f),0}catch(c){return(typeof FS=="undefined"||!(c instanceof FS.ErrnoError))&&abort(c),-c.errno}}function ___syscall54(i,u){SYSCALLS.varargs=u;try{return 0}catch(f){return(typeof FS=="undefined"||!(f instanceof FS.ErrnoError))&&abort(f),-f.errno}}function _typeModule(i){var u=[[0,1,"X"],[1,1,"const X"],[128,1,"X *"],[256,1,"X &"],[384,1,"X &&"],[512,1,"std::shared_ptr"],[640,1,"std::unique_ptr"],[5120,1,"std::vector"],[6144,2,"std::array"],[9216,-1,"std::function"]];function f(x,D,L,N,j,$){if(D==1){var h=N&896;(h==128||h==256||h==384)&&(x="X const")}var re;return $?re=L.replace("X",x).replace("Y",j):re=x.replace("X",L).replace("Y",j),re.replace(/([*&]) (?=[*&])/g,"$1")}function c(x,D,L,N,j){throw new Error(x+" type "+L.replace("X",D+"?")+(N?" with flag "+N:"")+" in "+j)}function g(x,D,L,N,j,$,h,re){$===void 0&&($="X"),re===void 0&&(re=1);var ce=L(x);if(ce)return ce;var Q=N(x),oe=Q.placeholderFlag,Se=u[oe];h&&Se&&($=f(h[2],h[0],$,Se[0],"?",!0));var me;oe==0&&(me="Unbound"),oe>=10&&(me="Corrupt"),re>20&&(me="Deeply nested"),me&&c(me,x,$,oe,j||"?");var De=Q.paramList[0],J=g(De,D,L,N,j,$,Se,re+1),Te,Oe={flags:Se[0],id:x,name:"",paramList:[J]},Le=[],ot="?";switch(Q.placeholderFlag){case 1:Te=J.spec;break;case 2:if((J.flags&15360)==1024&&J.spec.ptrSize==1){Oe.flags=7168;break}case 3:case 6:case 5:Te=J.spec,(J.flags&15360)!=2048;break;case 8:ot=""+Q.paramList[1],Oe.paramList.push(Q.paramList[1]);break;case 9:for(var ct=0,Ue=Q.paramList[1];ct>2]=i),i}function _llvm_stacksave(){var i=_llvm_stacksave;return i.LLVM_SAVEDSTACKS||(i.LLVM_SAVEDSTACKS=[]),i.LLVM_SAVEDSTACKS.push(Runtime.stackSave()),i.LLVM_SAVEDSTACKS.length-1}function ___syscall140(i,u){SYSCALLS.varargs=u;try{var f=SYSCALLS.getStreamFromFD(),c=SYSCALLS.get(),g=SYSCALLS.get(),t=SYSCALLS.get(),C=SYSCALLS.get(),A=g;return FS.llseek(f,A,C),HEAP32[t>>2]=f.position,f.getdents&&A===0&&C===0&&(f.getdents=null),0}catch(x){return(typeof FS=="undefined"||!(x instanceof FS.ErrnoError))&&abort(x),-x.errno}}function ___syscall146(i,u){SYSCALLS.varargs=u;try{var f=SYSCALLS.get(),c=SYSCALLS.get(),g=SYSCALLS.get(),t=0;___syscall146.buffer||(___syscall146.buffers=[null,[],[]],___syscall146.printChar=function(L,N){var j=___syscall146.buffers[L];assert(j),N===0||N===10?((L===1?Module.print:Module.printErr)(UTF8ArrayToString(j,0)),j.length=0):j.push(N)});for(var C=0;C>2],x=HEAP32[c+(C*8+4)>>2],D=0;Di.pageSize/2||u>i.pageSize-f){var c=_nbind.typeNameTbl.NBind.proto;return c.lalloc(u)}else return HEAPU32[i.usedPtr]=f+u,i.rootPtr+f},i.lreset=function(u,f){var c=HEAPU32[i.pagePtr];if(c){var g=_nbind.typeNameTbl.NBind.proto;g.lreset(u,f)}else HEAPU32[i.usedPtr]=u},i}();_nbind.Pool=Pool;function constructType(i,u){var f=i==10240?_nbind.makeTypeNameTbl[u.name]||_nbind.BindType:_nbind.makeTypeKindTbl[i],c=new f(u);return typeIdTbl[u.id]=c,_nbind.typeNameTbl[u.name]=c,c}_nbind.constructType=constructType;function getType(i){return typeIdTbl[i]}_nbind.getType=getType;function queryType(i){var u=HEAPU8[i],f=_nbind.structureList[u][1];i/=4,f<0&&(++i,f=HEAPU32[i]+1);var c=Array.prototype.slice.call(HEAPU32.subarray(i+1,i+1+f));return u==9&&(c=[c[0],c.slice(1)]),{paramList:c,placeholderFlag:u}}_nbind.queryType=queryType;function getTypes(i,u){return i.map(function(f){return typeof f=="number"?_nbind.getComplexType(f,constructType,getType,queryType,u):_nbind.typeNameTbl[f]})}_nbind.getTypes=getTypes;function readTypeIdList(i,u){return Array.prototype.slice.call(HEAPU32,i/4,i/4+u)}_nbind.readTypeIdList=readTypeIdList;function readAsciiString(i){for(var u=i;HEAPU8[u++];);return String.fromCharCode.apply("",HEAPU8.subarray(i,u-1))}_nbind.readAsciiString=readAsciiString;function readPolicyList(i){var u={};if(i)for(;;){var f=HEAPU32[i/4];if(!f)break;u[readAsciiString(f)]=!0,i+=4}return u}_nbind.readPolicyList=readPolicyList;function getDynCall(i,u){var f={float32_t:"d",float64_t:"d",int64_t:"d",uint64_t:"d",void:"v"},c=i.map(function(t){return f[t.name]||"i"}).join(""),g=Module["dynCall_"+c];if(!g)throw new Error("dynCall_"+c+" not found for "+u+"("+i.map(function(t){return t.name}).join(", ")+")");return g}_nbind.getDynCall=getDynCall;function addMethod(i,u,f,c){var g=i[u];i.hasOwnProperty(u)&&g?((g.arity||g.arity===0)&&(g=_nbind.makeOverloader(g,g.arity),i[u]=g),g.addMethod(f,c)):(f.arity=c,i[u]=f)}_nbind.addMethod=addMethod;function throwError(i){throw new Error(i)}_nbind.throwError=throwError,_nbind.bigEndian=!1,_a=_typeModule(_typeModule),_nbind.Type=_a.Type,_nbind.makeType=_a.makeType,_nbind.getComplexType=_a.getComplexType,_nbind.structureList=_a.structureList;var BindType=function(i){__extends(u,i);function u(){var f=i!==null&&i.apply(this,arguments)||this;return f.heap=HEAPU32,f.ptrSize=4,f}return u.prototype.needsWireRead=function(f){return!!this.wireRead||!!this.makeWireRead},u.prototype.needsWireWrite=function(f){return!!this.wireWrite||!!this.makeWireWrite},u}(_nbind.Type);_nbind.BindType=BindType;var PrimitiveType=function(i){__extends(u,i);function u(f){var c=i.call(this,f)||this,g=f.flags&32?{32:HEAPF32,64:HEAPF64}:f.flags&8?{8:HEAPU8,16:HEAPU16,32:HEAPU32}:{8:HEAP8,16:HEAP16,32:HEAP32};return c.heap=g[f.ptrSize*8],c.ptrSize=f.ptrSize,c}return u.prototype.needsWireWrite=function(f){return!!f&&!!f.Strict},u.prototype.makeWireWrite=function(f,c){return c&&c.Strict&&function(g){if(typeof g=="number")return g;throw new Error("Type mismatch")}},u}(BindType);_nbind.PrimitiveType=PrimitiveType;function pushCString(i,u){if(i==null){if(u&&u.Nullable)return 0;throw new Error("Type mismatch")}if(u&&u.Strict){if(typeof i!="string")throw new Error("Type mismatch")}else i=i.toString();var f=Module.lengthBytesUTF8(i)+1,c=_nbind.Pool.lalloc(f);return Module.stringToUTF8Array(i,HEAPU8,c,f),c}_nbind.pushCString=pushCString;function popCString(i){return i===0?null:Module.Pointer_stringify(i)}_nbind.popCString=popCString;var CStringType=function(i){__extends(u,i);function u(){var f=i!==null&&i.apply(this,arguments)||this;return f.wireRead=popCString,f.wireWrite=pushCString,f.readResources=[_nbind.resources.pool],f.writeResources=[_nbind.resources.pool],f}return u.prototype.makeWireWrite=function(f,c){return function(g){return pushCString(g,c)}},u}(BindType);_nbind.CStringType=CStringType;var BooleanType=function(i){__extends(u,i);function u(){var f=i!==null&&i.apply(this,arguments)||this;return f.wireRead=function(c){return!!c},f}return u.prototype.needsWireWrite=function(f){return!!f&&!!f.Strict},u.prototype.makeWireRead=function(f){return"!!("+f+")"},u.prototype.makeWireWrite=function(f,c){return c&&c.Strict&&function(g){if(typeof g=="boolean")return g;throw new Error("Type mismatch")}||f},u}(BindType);_nbind.BooleanType=BooleanType;var Wrapper=function(){function i(){}return i.prototype.persist=function(){this.__nbindState|=1},i}();_nbind.Wrapper=Wrapper;function makeBound(i,u){var f=function(c){__extends(g,c);function g(t,C,A,x){var D=c.call(this)||this;if(!(D instanceof g))return new(Function.prototype.bind.apply(g,Array.prototype.concat.apply([null],arguments)));var L=C,N=A,j=x;if(t!==_nbind.ptrMarker){var $=D.__nbindConstructor.apply(D,arguments);L=4096|512,j=HEAPU32[$/4],N=HEAPU32[$/4+1]}var h={configurable:!0,enumerable:!1,value:null,writable:!1},re={__nbindFlags:L,__nbindPtr:N};j&&(re.__nbindShared=j,_nbind.mark(D));for(var ce=0,Q=Object.keys(re);ce>=1;var f=_nbind.valueList[i];return _nbind.valueList[i]=firstFreeValue,firstFreeValue=i,f}else{if(u)return _nbind.popShared(i,u);throw new Error("Invalid value slot "+i)}}_nbind.popValue=popValue;var valueBase=18446744073709552e3;function push64(i){return typeof i=="number"?i:pushValue(i)*4096+valueBase}function pop64(i){return i=3?C=Buffer.from(t):C=new Buffer(t),C.copy(c)}else getBuffer(c).set(t)}}_nbind.commitBuffer=commitBuffer;var dirtyList=[],gcTimer=0;function sweep(){for(var i=0,u=dirtyList;i>2]=DYNAMIC_BASE,staticSealed=!0;function invoke_viiiii(i,u,f,c,g,t){try{Module.dynCall_viiiii(i,u,f,c,g,t)}catch(C){if(typeof C!="number"&&C!=="longjmp")throw C;Module.setThrew(1,0)}}function invoke_vif(i,u,f){try{Module.dynCall_vif(i,u,f)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_vid(i,u,f){try{Module.dynCall_vid(i,u,f)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_fiff(i,u,f,c){try{return Module.dynCall_fiff(i,u,f,c)}catch(g){if(typeof g!="number"&&g!=="longjmp")throw g;Module.setThrew(1,0)}}function invoke_vi(i,u){try{Module.dynCall_vi(i,u)}catch(f){if(typeof f!="number"&&f!=="longjmp")throw f;Module.setThrew(1,0)}}function invoke_vii(i,u,f){try{Module.dynCall_vii(i,u,f)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_ii(i,u){try{return Module.dynCall_ii(i,u)}catch(f){if(typeof f!="number"&&f!=="longjmp")throw f;Module.setThrew(1,0)}}function invoke_viddi(i,u,f,c,g){try{Module.dynCall_viddi(i,u,f,c,g)}catch(t){if(typeof t!="number"&&t!=="longjmp")throw t;Module.setThrew(1,0)}}function invoke_vidd(i,u,f,c){try{Module.dynCall_vidd(i,u,f,c)}catch(g){if(typeof g!="number"&&g!=="longjmp")throw g;Module.setThrew(1,0)}}function invoke_iiii(i,u,f,c){try{return Module.dynCall_iiii(i,u,f,c)}catch(g){if(typeof g!="number"&&g!=="longjmp")throw g;Module.setThrew(1,0)}}function invoke_diii(i,u,f,c){try{return Module.dynCall_diii(i,u,f,c)}catch(g){if(typeof g!="number"&&g!=="longjmp")throw g;Module.setThrew(1,0)}}function invoke_di(i,u){try{return Module.dynCall_di(i,u)}catch(f){if(typeof f!="number"&&f!=="longjmp")throw f;Module.setThrew(1,0)}}function invoke_iid(i,u,f){try{return Module.dynCall_iid(i,u,f)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_iii(i,u,f){try{return Module.dynCall_iii(i,u,f)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_viiddi(i,u,f,c,g,t){try{Module.dynCall_viiddi(i,u,f,c,g,t)}catch(C){if(typeof C!="number"&&C!=="longjmp")throw C;Module.setThrew(1,0)}}function invoke_viiiiii(i,u,f,c,g,t,C){try{Module.dynCall_viiiiii(i,u,f,c,g,t,C)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_dii(i,u,f){try{return Module.dynCall_dii(i,u,f)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_i(i){try{return Module.dynCall_i(i)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_iiiiii(i,u,f,c,g,t){try{return Module.dynCall_iiiiii(i,u,f,c,g,t)}catch(C){if(typeof C!="number"&&C!=="longjmp")throw C;Module.setThrew(1,0)}}function invoke_viiid(i,u,f,c,g){try{Module.dynCall_viiid(i,u,f,c,g)}catch(t){if(typeof t!="number"&&t!=="longjmp")throw t;Module.setThrew(1,0)}}function invoke_viififi(i,u,f,c,g,t,C){try{Module.dynCall_viififi(i,u,f,c,g,t,C)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_viii(i,u,f,c){try{Module.dynCall_viii(i,u,f,c)}catch(g){if(typeof g!="number"&&g!=="longjmp")throw g;Module.setThrew(1,0)}}function invoke_v(i){try{Module.dynCall_v(i)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_viid(i,u,f,c){try{Module.dynCall_viid(i,u,f,c)}catch(g){if(typeof g!="number"&&g!=="longjmp")throw g;Module.setThrew(1,0)}}function invoke_idd(i,u,f){try{return Module.dynCall_idd(i,u,f)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_viiii(i,u,f,c,g){try{Module.dynCall_viiii(i,u,f,c,g)}catch(t){if(typeof t!="number"&&t!=="longjmp")throw t;Module.setThrew(1,0)}}Module.asmGlobalArg={Math,Int8Array,Int16Array,Int32Array,Uint8Array,Uint16Array,Uint32Array,Float32Array,Float64Array,NaN:NaN,Infinity:Infinity},Module.asmLibraryArg={abort,assert,enlargeMemory,getTotalMemory,abortOnCannotGrowMemory,invoke_viiiii,invoke_vif,invoke_vid,invoke_fiff,invoke_vi,invoke_vii,invoke_ii,invoke_viddi,invoke_vidd,invoke_iiii,invoke_diii,invoke_di,invoke_iid,invoke_iii,invoke_viiddi,invoke_viiiiii,invoke_dii,invoke_i,invoke_iiiiii,invoke_viiid,invoke_viififi,invoke_viii,invoke_v,invoke_viid,invoke_idd,invoke_viiii,_emscripten_asm_const_iiiii,_emscripten_asm_const_iiidddddd,_emscripten_asm_const_iiiid,__nbind_reference_external,_emscripten_asm_const_iiiiiiii,_removeAccessorPrefix,_typeModule,__nbind_register_pool,__decorate,_llvm_stackrestore,___cxa_atexit,__extends,__nbind_get_value_object,__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,_emscripten_set_main_loop_timing,__nbind_register_primitive,__nbind_register_type,_emscripten_memcpy_big,__nbind_register_function,___setErrNo,__nbind_register_class,__nbind_finish,_abort,_nbind_value,_llvm_stacksave,___syscall54,_defineHidden,_emscripten_set_main_loop,_emscripten_get_now,__nbind_register_callback_signature,_emscripten_asm_const_iiiiii,__nbind_free_external,_emscripten_asm_const_iiii,_emscripten_asm_const_iiididi,___syscall6,_atexit,___syscall140,___syscall146,DYNAMICTOP_PTR,tempDoublePtr,ABORT,STACKTOP,STACK_MAX,cttz_i8,___dso_handle};var asm=function(i,u,f){var c=new i.Int8Array(f),g=new i.Int16Array(f),t=new i.Int32Array(f),C=new i.Uint8Array(f),A=new i.Uint16Array(f),x=new i.Uint32Array(f),D=new i.Float32Array(f),L=new i.Float64Array(f),N=u.DYNAMICTOP_PTR|0,j=u.tempDoublePtr|0,$=u.ABORT|0,h=u.STACKTOP|0,re=u.STACK_MAX|0,ce=u.cttz_i8|0,Q=u.___dso_handle|0,oe=0,Se=0,me=0,De=0,J=i.NaN,Te=i.Infinity,Oe=0,Le=0,ot=0,ct=0,Ue=0,be=0,At=i.Math.floor,Ot=i.Math.abs,Nt=i.Math.sqrt,Je=i.Math.pow,V=i.Math.cos,ne=i.Math.sin,ge=i.Math.tan,Z=i.Math.acos,Ae=i.Math.asin,at=i.Math.atan,it=i.Math.atan2,Ft=i.Math.exp,jt=i.Math.log,hn=i.Math.ceil,Un=i.Math.imul,Jt=i.Math.min,Yt=i.Math.max,cr=i.Math.clz32,w=i.Math.fround,pt=u.abort,Mn=u.assert,Bn=u.enlargeMemory,Xn=u.getTotalMemory,vr=u.abortOnCannotGrowMemory,gr=u.invoke_viiiii,r0=u.invoke_vif,Ci=u.invoke_vid,yo=u.invoke_fiff,Ds=u.invoke_vi,Mu=u.invoke_vii,Gf=u.invoke_ii,iu=u.invoke_viddi,ou=u.invoke_vidd,ol=u.invoke_iiii,ul=u.invoke_diii,Es=u.invoke_di,Uo=u.invoke_iid,sl=u.invoke_iii,Ss=u.invoke_viiddi,Cs=u.invoke_viiiiii,Ti=u.invoke_dii,Fu=u.invoke_i,ll=u.invoke_iiiiii,fl=u.invoke_viiid,cl=u.invoke_viififi,al=u.invoke_viii,Ui=u.invoke_v,Mr=u.invoke_viid,Ac=u.invoke_idd,of=u.invoke_viiii,Ts=u._emscripten_asm_const_iiiii,xs=u._emscripten_asm_const_iiidddddd,dl=u._emscripten_asm_const_iiiid,qi=u.__nbind_reference_external,qo=u._emscripten_asm_const_iiiiiiii,kr=u._removeAccessorPrefix,Fr=u._typeModule,si=u.__nbind_register_pool,H0=u.__decorate,b0=u._llvm_stackrestore,Bt=u.___cxa_atexit,Lu=u.__extends,c0=u.__nbind_get_value_object,Ru=u.__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,ks=u._emscripten_set_main_loop_timing,As=u.__nbind_register_primitive,uu=u.__nbind_register_type,wo=u._emscripten_memcpy_big,zo=u.__nbind_register_function,Os=u.___setErrNo,Is=u.__nbind_register_class,uf=u.__nbind_finish,_n=u._abort,Nu=u._nbind_value,Wo=u._llvm_stacksave,su=u.___syscall54,Ps=u._defineHidden,pl=u._emscripten_set_main_loop,Vf=u._emscripten_get_now,hl=u.__nbind_register_callback_signature,Bu=u._emscripten_asm_const_iiiiii,ju=u.__nbind_free_external,sf=u._emscripten_asm_const_iiii,ro=u._emscripten_asm_const_iiididi,Ms=u.___syscall6,ml=u._atexit,Uu=u.___syscall140,G0=u.___syscall146,Fs=w(0);let tt=w(0);function zi(e){e=e|0;var n=0;return n=h,h=h+e|0,h=h+15&-16,n|0}function lu(){return h|0}function Ho(e){e=e|0,h=e}function O0(e,n){e=e|0,n=n|0,h=e,re=n}function vl(e,n){e=e|0,n=n|0,oe||(oe=e,Se=n)}function gl(e){e=e|0,be=e}function fu(){return be|0}function _l(){var e=0,n=0;vn(8104,8,400)|0,vn(8504,408,540)|0,e=9044,n=e+44|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));c[9088]=0,c[9089]=1,t[2273]=0,t[2274]=948,t[2275]=948,Bt(17,8104,Q|0)|0}function Sn(e){e=e|0,lf(e+948|0)}function gt(e){return e=w(e),((Ar(e)|0)&2147483647)>>>0>2139095040|0}function en(e,n,r){e=e|0,n=n|0,r=r|0;e:do if(t[e+(n<<3)+4>>2]|0)e=e+(n<<3)|0;else{if((n|2|0)==3?t[e+60>>2]|0:0){e=e+56|0;break}switch(n|0){case 0:case 2:case 4:case 5:{if(t[e+52>>2]|0){e=e+48|0;break e}break}default:}if(t[e+68>>2]|0){e=e+64|0;break}else{e=(n|1|0)==5?948:r;break}}while(0);return e|0}function I0(e){e=e|0;var n=0;return n=uh(1e3)|0,li(e,(n|0)!=0,2456),t[2276]=(t[2276]|0)+1,vn(n|0,8104,1e3)|0,c[e+2>>0]|0&&(t[n+4>>2]=2,t[n+12>>2]=4),t[n+976>>2]=e,n|0}function li(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;s=h,h=h+16|0,o=s,n||(t[o>>2]=r,zs(e,5,3197,o)),h=s}function qu(){return I0(956)|0}function Wi(e){e=e|0;var n=0;return n=Tt(1e3)|0,zu(n,e),li(t[e+976>>2]|0,1,2456),t[2276]=(t[2276]|0)+1,t[n+944>>2]=0,n|0}function zu(e,n){e=e|0,n=n|0;var r=0;vn(e|0,n|0,948)|0,af(e+948|0,n+948|0),r=e+960|0,e=n+960|0,n=r+40|0;do t[r>>2]=t[e>>2],r=r+4|0,e=e+4|0;while((r|0)<(n|0))}function Wu(e){e=e|0;var n=0,r=0,o=0,s=0;if(n=e+944|0,r=t[n>>2]|0,r|0&&(Ls(r+948|0,e)|0,t[n>>2]=0),r=fi(e)|0,r|0){n=0;do t[(e0(e,n)|0)+944>>2]=0,n=n+1|0;while((n|0)!=(r|0))}r=e+948|0,o=t[r>>2]|0,s=e+952|0,n=t[s>>2]|0,(n|0)!=(o|0)&&(t[s>>2]=n+(~((n+-4-o|0)>>>2)<<2)),io(r),sh(e),t[2276]=(t[2276]|0)+-1}function Ls(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0;o=t[e>>2]|0,_=e+4|0,r=t[_>>2]|0,l=r;e:do if((o|0)==(r|0))s=o,d=4;else for(e=o;;){if((t[e>>2]|0)==(n|0)){s=e,d=4;break e}if(e=e+4|0,(e|0)==(r|0)){e=0;break}}while(0);return(d|0)==4&&((s|0)!=(r|0)?(o=s+4|0,e=l-o|0,n=e>>2,n&&(Y1(s|0,o|0,e|0)|0,r=t[_>>2]|0),e=s+(n<<2)|0,(r|0)==(e|0)||(t[_>>2]=r+(~((r+-4-e|0)>>>2)<<2)),e=1):e=0),e|0}function fi(e){return e=e|0,(t[e+952>>2]|0)-(t[e+948>>2]|0)>>2|0}function e0(e,n){e=e|0,n=n|0;var r=0;return r=t[e+948>>2]|0,(t[e+952>>2]|0)-r>>2>>>0>n>>>0?e=t[r+(n<<2)>>2]|0:e=0,e|0}function io(e){e=e|0;var n=0,r=0,o=0,s=0;o=h,h=h+32|0,n=o,s=t[e>>2]|0,r=(t[e+4>>2]|0)-s|0,((t[e+8>>2]|0)-s|0)>>>0>r>>>0&&(s=r>>2,z(n,s,s,e+8|0),dr(e,n),Or(n)),h=o}function D0(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0;k=fi(e)|0;do if(k|0){if((t[(e0(e,0)|0)+944>>2]|0)==(e|0)){if(!(Ls(e+948|0,n)|0))break;vn(n+400|0,8504,540)|0,t[n+944>>2]=0,ln(e);break}d=t[(t[e+976>>2]|0)+12>>2]|0,_=e+948|0,y=(d|0)==0,r=0,l=0;do o=t[(t[_>>2]|0)+(l<<2)>>2]|0,(o|0)==(n|0)?ln(e):(s=Wi(o)|0,t[(t[_>>2]|0)+(r<<2)>>2]=s,t[s+944>>2]=e,y||Q4[d&15](o,s,e,r),r=r+1|0),l=l+1|0;while((l|0)!=(k|0));if(r>>>0>>0){y=e+948|0,_=e+952|0,d=r,r=t[_>>2]|0;do l=(t[y>>2]|0)+(d<<2)|0,o=l+4|0,s=r-o|0,n=s>>2,n&&(Y1(l|0,o|0,s|0)|0,r=t[_>>2]|0),s=r,o=l+(n<<2)|0,(s|0)!=(o|0)&&(r=s+(~((s+-4-o|0)>>>2)<<2)|0,t[_>>2]=r),d=d+1|0;while((d|0)!=(k|0))}}while(0)}function Do(e){e=e|0;var n=0,r=0,o=0,s=0;i0(e,(fi(e)|0)==0,2491),i0(e,(t[e+944>>2]|0)==0,2545),n=e+948|0,r=t[n>>2]|0,o=e+952|0,s=t[o>>2]|0,(s|0)!=(r|0)&&(t[o>>2]=s+(~((s+-4-r|0)>>>2)<<2)),io(n),n=e+976|0,r=t[n>>2]|0,vn(e|0,8104,1e3)|0,c[r+2>>0]|0&&(t[e+4>>2]=2,t[e+12>>2]=4),t[n>>2]=r}function i0(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;s=h,h=h+16|0,o=s,n||(t[o>>2]=r,wn(e,5,3197,o)),h=s}function Rs(){return t[2276]|0}function a0(){var e=0;return e=uh(20)|0,Hu((e|0)!=0,2592),t[2277]=(t[2277]|0)+1,t[e>>2]=t[239],t[e+4>>2]=t[240],t[e+8>>2]=t[241],t[e+12>>2]=t[242],t[e+16>>2]=t[243],e|0}function Hu(e,n){e=e|0,n=n|0;var r=0,o=0;o=h,h=h+16|0,r=o,e||(t[r>>2]=n,wn(0,5,3197,r)),h=o}function V0(e){e=e|0,sh(e),t[2277]=(t[2277]|0)+-1}function bu(e,n){e=e|0,n=n|0;var r=0;n?(i0(e,(fi(e)|0)==0,2629),r=1):(r=0,n=0),t[e+964>>2]=n,t[e+988>>2]=r}function Ns(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,l=o+8|0,s=o+4|0,d=o,t[s>>2]=n,i0(e,(t[n+944>>2]|0)==0,2709),i0(e,(t[e+964>>2]|0)==0,2763),bo(e),n=e+948|0,t[d>>2]=(t[n>>2]|0)+(r<<2),t[l>>2]=t[d>>2],P0(n,l,s)|0,t[(t[s>>2]|0)+944>>2]=e,ln(e),h=o}function bo(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0;if(r=fi(e)|0,r|0?(t[(e0(e,0)|0)+944>>2]|0)!=(e|0):0){o=t[(t[e+976>>2]|0)+12>>2]|0,s=e+948|0,l=(o|0)==0,n=0;do d=t[(t[s>>2]|0)+(n<<2)>>2]|0,_=Wi(d)|0,t[(t[s>>2]|0)+(n<<2)>>2]=_,t[_+944>>2]=e,l||Q4[o&15](d,_,e,n),n=n+1|0;while((n|0)!=(r|0))}}function P0(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0,Pe=0,ke=0;Pe=h,h=h+64|0,P=Pe+52|0,_=Pe+48|0,q=Pe+28|0,we=Pe+24|0,le=Pe+20|0,ie=Pe,o=t[e>>2]|0,l=o,n=o+((t[n>>2]|0)-l>>2<<2)|0,o=e+4|0,s=t[o>>2]|0,d=e+8|0;do if(s>>>0<(t[d>>2]|0)>>>0){if((n|0)==(s|0)){t[n>>2]=t[r>>2],t[o>>2]=(t[o>>2]|0)+4;break}Qn(e,n,s,n+4|0),n>>>0<=r>>>0&&(r=(t[o>>2]|0)>>>0>r>>>0?r+4|0:r),t[n>>2]=t[r>>2]}else{o=(s-l>>2)+1|0,s=Q0(e)|0,s>>>0>>0&&$n(e),T=t[e>>2]|0,k=(t[d>>2]|0)-T|0,l=k>>1,z(ie,k>>2>>>0>>1>>>0?l>>>0>>0?o:l:s,n-T>>2,e+8|0),T=ie+8|0,o=t[T>>2]|0,l=ie+12|0,k=t[l>>2]|0,d=k,y=o;do if((o|0)==(k|0)){if(k=ie+4|0,o=t[k>>2]|0,ke=t[ie>>2]|0,s=ke,o>>>0<=ke>>>0){o=d-s>>1,o=(o|0)==0?1:o,z(q,o,o>>>2,t[ie+16>>2]|0),t[we>>2]=t[k>>2],t[le>>2]=t[T>>2],t[_>>2]=t[we>>2],t[P>>2]=t[le>>2],s0(q,_,P),o=t[ie>>2]|0,t[ie>>2]=t[q>>2],t[q>>2]=o,o=q+4|0,ke=t[k>>2]|0,t[k>>2]=t[o>>2],t[o>>2]=ke,o=q+8|0,ke=t[T>>2]|0,t[T>>2]=t[o>>2],t[o>>2]=ke,o=q+12|0,ke=t[l>>2]|0,t[l>>2]=t[o>>2],t[o>>2]=ke,Or(q),o=t[T>>2]|0;break}l=o,d=((l-s>>2)+1|0)/-2|0,_=o+(d<<2)|0,s=y-l|0,l=s>>2,l&&(Y1(_|0,o|0,s|0)|0,o=t[k>>2]|0),ke=_+(l<<2)|0,t[T>>2]=ke,t[k>>2]=o+(d<<2),o=ke}while(0);t[o>>2]=t[r>>2],t[T>>2]=(t[T>>2]|0)+4,n=nn(e,ie,n)|0,Or(ie)}while(0);return h=Pe,n|0}function ln(e){e=e|0;var n=0;do{if(n=e+984|0,c[n>>0]|0)break;c[n>>0]=1,D[e+504>>2]=w(J),e=t[e+944>>2]|0}while((e|0)!=0)}function lf(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-4-o|0)>>>2)<<2)),Ve(r))}function nr(e){return e=e|0,t[e+944>>2]|0}function rr(e){e=e|0,i0(e,(t[e+964>>2]|0)!=0,2832),ln(e)}function Go(e){return e=e|0,(c[e+984>>0]|0)!=0|0}function Gu(e,n){e=e|0,n=n|0,fL(e,n,400)|0&&(vn(e|0,n|0,400)|0,ln(e))}function yl(e){e=e|0;var n=tt;return n=w(D[e+44>>2]),e=gt(n)|0,w(e?w(0):n)}function cu(e){e=e|0;var n=tt;return n=w(D[e+48>>2]),gt(n)|0&&(n=c[(t[e+976>>2]|0)+2>>0]|0?w(1):w(0)),w(n)}function Bs(e,n){e=e|0,n=n|0,t[e+980>>2]=n}function Vu(e){return e=e|0,t[e+980>>2]|0}function M0(e,n){e=e|0,n=n|0;var r=0;r=e+4|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function au(e){return e=e|0,t[e+4>>2]|0}function Lr(e,n){e=e|0,n=n|0;var r=0;r=e+8|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function F(e){return e=e|0,t[e+8>>2]|0}function R(e,n){e=e|0,n=n|0;var r=0;r=e+12|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function U(e){return e=e|0,t[e+12>>2]|0}function H(e,n){e=e|0,n=n|0;var r=0;r=e+16|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function fe(e){return e=e|0,t[e+16>>2]|0}function ue(e,n){e=e|0,n=n|0;var r=0;r=e+20|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function de(e){return e=e|0,t[e+20>>2]|0}function W(e,n){e=e|0,n=n|0;var r=0;r=e+24|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function ve(e){return e=e|0,t[e+24>>2]|0}function Fe(e,n){e=e|0,n=n|0;var r=0;r=e+28|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function Ge(e){return e=e|0,t[e+28>>2]|0}function K(e,n){e=e|0,n=n|0;var r=0;r=e+32|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function xe(e){return e=e|0,t[e+32>>2]|0}function je(e,n){e=e|0,n=n|0;var r=0;r=e+36|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function Xe(e){return e=e|0,t[e+36>>2]|0}function rt(e,n){e=e|0,n=w(n);var r=0;r=e+40|0,w(D[r>>2])!=n&&(D[r>>2]=n,ln(e))}function st(e,n){e=e|0,n=w(n);var r=0;r=e+44|0,w(D[r>>2])!=n&&(D[r>>2]=n,ln(e))}function xt(e,n){e=e|0,n=w(n);var r=0;r=e+48|0,w(D[r>>2])!=n&&(D[r>>2]=n,ln(e))}function wt(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=(l^1)&1,o=e+52|0,s=e+56|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function lt(e,n){e=e|0,n=w(n);var r=0,o=0;o=e+52|0,r=e+56|0,(w(D[o>>2])==n?(t[r>>2]|0)==2:0)||(D[o>>2]=n,o=gt(n)|0,t[r>>2]=o?3:2,ln(e))}function Rt(e,n){e=e|0,n=n|0;var r=0,o=0;o=n+52|0,r=t[o+4>>2]|0,n=e,t[n>>2]=t[o>>2],t[n+4>>2]=r}function yn(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0,l=0;l=gt(r)|0,o=(l^1)&1,s=e+132+(n<<3)|0,n=e+132+(n<<3)+4|0,(l|w(D[s>>2])==r?(t[n>>2]|0)==(o|0):0)||(D[s>>2]=r,t[n>>2]=o,ln(e))}function sn(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0,l=0;l=gt(r)|0,o=l?0:2,s=e+132+(n<<3)|0,n=e+132+(n<<3)+4|0,(l|w(D[s>>2])==r?(t[n>>2]|0)==(o|0):0)||(D[s>>2]=r,t[n>>2]=o,ln(e))}function ar(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=n+132+(r<<3)|0,n=t[o+4>>2]|0,r=e,t[r>>2]=t[o>>2],t[r+4>>2]=n}function rn(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0,l=0;l=gt(r)|0,o=(l^1)&1,s=e+60+(n<<3)|0,n=e+60+(n<<3)+4|0,(l|w(D[s>>2])==r?(t[n>>2]|0)==(o|0):0)||(D[s>>2]=r,t[n>>2]=o,ln(e))}function Hn(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0,l=0;l=gt(r)|0,o=l?0:2,s=e+60+(n<<3)|0,n=e+60+(n<<3)+4|0,(l|w(D[s>>2])==r?(t[n>>2]|0)==(o|0):0)||(D[s>>2]=r,t[n>>2]=o,ln(e))}function d0(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=n+60+(r<<3)|0,n=t[o+4>>2]|0,r=e,t[r>>2]=t[o>>2],t[r+4>>2]=n}function Cr(e,n){e=e|0,n=n|0;var r=0;r=e+60+(n<<3)+4|0,(t[r>>2]|0)!=3&&(D[e+60+(n<<3)>>2]=w(J),t[r>>2]=3,ln(e))}function He(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0,l=0;l=gt(r)|0,o=(l^1)&1,s=e+204+(n<<3)|0,n=e+204+(n<<3)+4|0,(l|w(D[s>>2])==r?(t[n>>2]|0)==(o|0):0)||(D[s>>2]=r,t[n>>2]=o,ln(e))}function Qe(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0,l=0;l=gt(r)|0,o=l?0:2,s=e+204+(n<<3)|0,n=e+204+(n<<3)+4|0,(l|w(D[s>>2])==r?(t[n>>2]|0)==(o|0):0)||(D[s>>2]=r,t[n>>2]=o,ln(e))}function Ne(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=n+204+(r<<3)|0,n=t[o+4>>2]|0,r=e,t[r>>2]=t[o>>2],t[r+4>>2]=n}function ft(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0,l=0;l=gt(r)|0,o=(l^1)&1,s=e+276+(n<<3)|0,n=e+276+(n<<3)+4|0,(l|w(D[s>>2])==r?(t[n>>2]|0)==(o|0):0)||(D[s>>2]=r,t[n>>2]=o,ln(e))}function St(e,n){return e=e|0,n=n|0,w(D[e+276+(n<<3)>>2])}function Qt(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=(l^1)&1,o=e+348|0,s=e+352|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function Cn(e,n){e=e|0,n=w(n);var r=0,o=0;o=e+348|0,r=e+352|0,(w(D[o>>2])==n?(t[r>>2]|0)==2:0)||(D[o>>2]=n,o=gt(n)|0,t[r>>2]=o?3:2,ln(e))}function bn(e){e=e|0;var n=0;n=e+352|0,(t[n>>2]|0)!=3&&(D[e+348>>2]=w(J),t[n>>2]=3,ln(e))}function p0(e,n){e=e|0,n=n|0;var r=0,o=0;o=n+348|0,r=t[o+4>>2]|0,n=e,t[n>>2]=t[o>>2],t[n+4>>2]=r}function h0(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=(l^1)&1,o=e+356|0,s=e+360|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function ci(e,n){e=e|0,n=w(n);var r=0,o=0;o=e+356|0,r=e+360|0,(w(D[o>>2])==n?(t[r>>2]|0)==2:0)||(D[o>>2]=n,o=gt(n)|0,t[r>>2]=o?3:2,ln(e))}function xi(e){e=e|0;var n=0;n=e+360|0,(t[n>>2]|0)!=3&&(D[e+356>>2]=w(J),t[n>>2]=3,ln(e))}function E0(e,n){e=e|0,n=n|0;var r=0,o=0;o=n+356|0,r=t[o+4>>2]|0,n=e,t[n>>2]=t[o>>2],t[n+4>>2]=r}function qr(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=(l^1)&1,o=e+364|0,s=e+368|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function Eo(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=l?0:2,o=e+364|0,s=e+368|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function So(e,n){e=e|0,n=n|0;var r=0,o=0;o=n+364|0,r=t[o+4>>2]|0,n=e,t[n>>2]=t[o>>2],t[n+4>>2]=r}function wl(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=(l^1)&1,o=e+372|0,s=e+376|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function js(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=l?0:2,o=e+372|0,s=e+376|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function Dl(e,n){e=e|0,n=n|0;var r=0,o=0;o=n+372|0,r=t[o+4>>2]|0,n=e,t[n>>2]=t[o>>2],t[n+4>>2]=r}function du(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=(l^1)&1,o=e+380|0,s=e+384|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function Yu(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=l?0:2,o=e+380|0,s=e+384|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function Us(e,n){e=e|0,n=n|0;var r=0,o=0;o=n+380|0,r=t[o+4>>2]|0,n=e,t[n>>2]=t[o>>2],t[n+4>>2]=r}function oo(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=(l^1)&1,o=e+388|0,s=e+392|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function Hi(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=l?0:2,o=e+388|0,s=e+392|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function qs(e,n){e=e|0,n=n|0;var r=0,o=0;o=n+388|0,r=t[o+4>>2]|0,n=e,t[n>>2]=t[o>>2],t[n+4>>2]=r}function F0(e,n){e=e|0,n=w(n);var r=0;r=e+396|0,w(D[r>>2])!=n&&(D[r>>2]=n,ln(e))}function Gr(e){return e=e|0,w(D[e+396>>2])}function ir(e){return e=e|0,w(D[e+400>>2])}function L0(e){return e=e|0,w(D[e+404>>2])}function Y0(e){return e=e|0,w(D[e+408>>2])}function Co(e){return e=e|0,w(D[e+412>>2])}function $u(e){return e=e|0,w(D[e+416>>2])}function Vo(e){return e=e|0,w(D[e+420>>2])}function Rr(e,n){switch(e=e|0,n=n|0,i0(e,(n|0)<6,2918),n|0){case 0:{n=(t[e+496>>2]|0)==2?5:4;break}case 2:{n=(t[e+496>>2]|0)==2?4:5;break}default:}return w(D[e+424+(n<<2)>>2])}function Jn(e,n){switch(e=e|0,n=n|0,i0(e,(n|0)<6,2918),n|0){case 0:{n=(t[e+496>>2]|0)==2?5:4;break}case 2:{n=(t[e+496>>2]|0)==2?4:5;break}default:}return w(D[e+448+(n<<2)>>2])}function ai(e,n){switch(e=e|0,n=n|0,i0(e,(n|0)<6,2918),n|0){case 0:{n=(t[e+496>>2]|0)==2?5:4;break}case 2:{n=(t[e+496>>2]|0)==2?4:5;break}default:}return w(D[e+472+(n<<2)>>2])}function o0(e,n){e=e|0,n=n|0;var r=0,o=tt;return r=t[e+4>>2]|0,(r|0)==(t[n+4>>2]|0)?r?(o=w(D[e>>2]),e=w(Ot(w(o-w(D[n>>2]))))>2]=0,t[o+4>>2]=0,t[o+8>>2]=0,Ru(o|0,e|0,n|0,0),wn(e,3,(c[o+11>>0]|0)<0?t[o>>2]|0:o,r),ML(o),h=r}function $0(e,n,r,o){e=w(e),n=w(n),r=r|0,o=o|0;var s=tt;e=w(e*n),s=w(V4(e,w(1)));do if(Vr(s,w(0))|0)e=w(e-s);else{if(e=w(e-s),Vr(s,w(1))|0){e=w(e+w(1));break}if(r){e=w(e+w(1));break}o||(s>w(.5)?s=w(1):(o=Vr(s,w(.5))|0,s=w(o?1:0)),e=w(e+s))}while(0);return w(e/n)}function K0(e,n,r,o,s,l,d,_,y,k,T,P,q){e=e|0,n=w(n),r=r|0,o=w(o),s=s|0,l=w(l),d=d|0,_=w(_),y=w(y),k=w(k),T=w(T),P=w(P),q=q|0;var we=0,le=tt,ie=tt,Pe=tt,ke=tt,qe=tt,pe=tt;return y>2]),le!=w(0)):0)?(Pe=w($0(n,le,0,0)),ke=w($0(o,le,0,0)),ie=w($0(l,le,0,0)),le=w($0(_,le,0,0))):(ie=l,Pe=n,le=_,ke=o),(s|0)==(e|0)?we=Vr(ie,Pe)|0:we=0,(d|0)==(r|0)?q=Vr(le,ke)|0:q=0,((we?0:(qe=w(n-T),!(ae(e,qe,y)|0)))?!(Be(e,qe,s,y)|0):0)?we=Ie(e,qe,s,l,y)|0:we=1,((q?0:(pe=w(o-P),!(ae(r,pe,k)|0)))?!(Be(r,pe,d,k)|0):0)?q=Ie(r,pe,d,_,k)|0:q=1,q=we&q),q|0}function ae(e,n,r){return e=e|0,n=w(n),r=w(r),(e|0)==1?e=Vr(n,r)|0:e=0,e|0}function Be(e,n,r,o){return e=e|0,n=w(n),r=r|0,o=w(o),(e|0)==2&(r|0)==0?n>=o?e=1:e=Vr(n,o)|0:e=0,e|0}function Ie(e,n,r,o,s){return e=e|0,n=w(n),r=r|0,o=w(o),s=w(s),(e|0)==2&(r|0)==2&o>n?s<=n?e=1:e=Vr(n,s)|0:e=0,e|0}function ht(e,n,r,o,s,l,d,_,y,k,T){e=e|0,n=w(n),r=w(r),o=o|0,s=s|0,l=l|0,d=w(d),_=w(_),y=y|0,k=k|0,T=T|0;var P=0,q=0,we=0,le=0,ie=tt,Pe=tt,ke=0,qe=0,pe=0,_e=0,vt=0,Ln=0,Ht=0,It=0,gn=0,Pn=0,zt=0,Dr=tt,Ki=tt,Xi=tt,Ji=0,Ro=0;zt=h,h=h+160|0,It=zt+152|0,Ht=zt+120|0,Ln=zt+104|0,pe=zt+72|0,le=zt+56|0,vt=zt+8|0,qe=zt,_e=(t[2279]|0)+1|0,t[2279]=_e,gn=e+984|0,((c[gn>>0]|0)!=0?(t[e+512>>2]|0)!=(t[2278]|0):0)?ke=4:(t[e+516>>2]|0)==(o|0)?Pn=0:ke=4,(ke|0)==4&&(t[e+520>>2]=0,t[e+924>>2]=-1,t[e+928>>2]=-1,D[e+932>>2]=w(-1),D[e+936>>2]=w(-1),Pn=1);e:do if(t[e+964>>2]|0)if(ie=w(mt(e,2,d)),Pe=w(mt(e,0,d)),P=e+916|0,Xi=w(D[P>>2]),Ki=w(D[e+920>>2]),Dr=w(D[e+932>>2]),K0(s,n,l,r,t[e+924>>2]|0,Xi,t[e+928>>2]|0,Ki,Dr,w(D[e+936>>2]),ie,Pe,T)|0)ke=22;else if(we=t[e+520>>2]|0,!we)ke=21;else for(q=0;;){if(P=e+524+(q*24|0)|0,Dr=w(D[P>>2]),Ki=w(D[e+524+(q*24|0)+4>>2]),Xi=w(D[e+524+(q*24|0)+16>>2]),K0(s,n,l,r,t[e+524+(q*24|0)+8>>2]|0,Dr,t[e+524+(q*24|0)+12>>2]|0,Ki,Xi,w(D[e+524+(q*24|0)+20>>2]),ie,Pe,T)|0){ke=22;break e}if(q=q+1|0,q>>>0>=we>>>0){ke=21;break}}else{if(y){if(P=e+916|0,!(Vr(w(D[P>>2]),n)|0)){ke=21;break}if(!(Vr(w(D[e+920>>2]),r)|0)){ke=21;break}if((t[e+924>>2]|0)!=(s|0)){ke=21;break}P=(t[e+928>>2]|0)==(l|0)?P:0,ke=22;break}if(we=t[e+520>>2]|0,!we)ke=21;else for(q=0;;){if(P=e+524+(q*24|0)|0,((Vr(w(D[P>>2]),n)|0?Vr(w(D[e+524+(q*24|0)+4>>2]),r)|0:0)?(t[e+524+(q*24|0)+8>>2]|0)==(s|0):0)?(t[e+524+(q*24|0)+12>>2]|0)==(l|0):0){ke=22;break e}if(q=q+1|0,q>>>0>=we>>>0){ke=21;break}}}while(0);do if((ke|0)==21)c[11697]|0?(P=0,ke=28):(P=0,ke=31);else if((ke|0)==22){if(q=(c[11697]|0)!=0,!((P|0)!=0&(Pn^1)))if(q){ke=28;break}else{ke=31;break}le=P+16|0,t[e+908>>2]=t[le>>2],we=P+20|0,t[e+912>>2]=t[we>>2],(c[11698]|0)==0|q^1||(t[qe>>2]=Gn(_e)|0,t[qe+4>>2]=_e,wn(e,4,2972,qe),q=t[e+972>>2]|0,q|0&&Nl[q&127](e),s=$t(s,y)|0,l=$t(l,y)|0,Ro=+w(D[le>>2]),Ji=+w(D[we>>2]),t[vt>>2]=s,t[vt+4>>2]=l,L[vt+8>>3]=+n,L[vt+16>>3]=+r,L[vt+24>>3]=Ro,L[vt+32>>3]=Ji,t[vt+40>>2]=k,wn(e,4,2989,vt))}while(0);return(ke|0)==28&&(q=Gn(_e)|0,t[le>>2]=q,t[le+4>>2]=_e,t[le+8>>2]=Pn?3047:11699,wn(e,4,3038,le),q=t[e+972>>2]|0,q|0&&Nl[q&127](e),vt=$t(s,y)|0,ke=$t(l,y)|0,t[pe>>2]=vt,t[pe+4>>2]=ke,L[pe+8>>3]=+n,L[pe+16>>3]=+r,t[pe+24>>2]=k,wn(e,4,3049,pe),ke=31),(ke|0)==31&&(X0(e,n,r,o,s,l,d,_,y,T),c[11697]|0&&(q=t[2279]|0,vt=Gn(q)|0,t[Ln>>2]=vt,t[Ln+4>>2]=q,t[Ln+8>>2]=Pn?3047:11699,wn(e,4,3083,Ln),q=t[e+972>>2]|0,q|0&&Nl[q&127](e),vt=$t(s,y)|0,Ln=$t(l,y)|0,Ji=+w(D[e+908>>2]),Ro=+w(D[e+912>>2]),t[Ht>>2]=vt,t[Ht+4>>2]=Ln,L[Ht+8>>3]=Ji,L[Ht+16>>3]=Ro,t[Ht+24>>2]=k,wn(e,4,3092,Ht)),t[e+516>>2]=o,P||(q=e+520|0,P=t[q>>2]|0,(P|0)==16&&(c[11697]|0&&wn(e,4,3124,It),t[q>>2]=0,P=0),y?P=e+916|0:(t[q>>2]=P+1,P=e+524+(P*24|0)|0),D[P>>2]=n,D[P+4>>2]=r,t[P+8>>2]=s,t[P+12>>2]=l,t[P+16>>2]=t[e+908>>2],t[P+20>>2]=t[e+912>>2],P=0)),y&&(t[e+416>>2]=t[e+908>>2],t[e+420>>2]=t[e+912>>2],c[e+985>>0]=1,c[gn>>0]=0),t[2279]=(t[2279]|0)+-1,t[e+512>>2]=t[2278],h=zt,Pn|(P|0)==0|0}function mt(e,n,r){e=e|0,n=n|0,r=w(r);var o=tt;return o=w(Tr(e,n,r)),w(o+w(R0(e,n,r)))}function wn(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=h,h=h+16|0,s=l,t[s>>2]=o,e?o=t[e+976>>2]|0:o=0,Ku(o,e,n,r,s),h=l}function Gn(e){return e=e|0,(e>>>0>60?3201:3201+(60-e)|0)|0}function $t(e,n){e=e|0,n=n|0;var r=0,o=0,s=0;return s=h,h=h+32|0,r=s+12|0,o=s,t[r>>2]=t[254],t[r+4>>2]=t[255],t[r+8>>2]=t[256],t[o>>2]=t[257],t[o+4>>2]=t[258],t[o+8>>2]=t[259],(e|0)>2?e=11699:e=t[(n?o:r)+(e<<2)>>2]|0,h=s,e|0}function X0(e,n,r,o,s,l,d,_,y,k){e=e|0,n=w(n),r=w(r),o=o|0,s=s|0,l=l|0,d=w(d),_=w(_),y=y|0,k=k|0;var T=0,P=0,q=0,we=0,le=tt,ie=tt,Pe=tt,ke=tt,qe=tt,pe=tt,_e=tt,vt=0,Ln=0,Ht=0,It=tt,gn=tt,Pn=0,zt=tt,Dr=0,Ki=0,Xi=0,Ji=0,Ro=0,kf=0,Af=0,Cu=0,Of=0,Js=0,Qs=0,If=0,Pf=0,Mf=0,Kn=0,Tu=0,Ff=0,us=0,Lf=tt,Rf=tt,Zs=tt,el=tt,ss=tt,Fi=0,nu=0,go=0,xu=0,jl=0,Ul=tt,tl=tt,ql=tt,zl=tt,Li=tt,Di=tt,ku=0,xr=tt,Wl=tt,Qi=tt,ls=tt,Zi=tt,fs=tt,Hl=0,bl=0,cs=tt,Ri=tt,Au=0,Gl=0,Vl=0,Yl=0,En=tt,br=0,Ei=0,eo=0,Ni=0,xn=0,Vt=0,Ou=0,kt=tt,$l=0,Qr=0;Ou=h,h=h+16|0,Fi=Ou+12|0,nu=Ou+8|0,go=Ou+4|0,xu=Ou,i0(e,(s|0)==0|(gt(n)|0)^1,3326),i0(e,(l|0)==0|(gt(r)|0)^1,3406),Ei=so(e,o)|0,t[e+496>>2]=Ei,xn=N0(2,Ei)|0,Vt=N0(0,Ei)|0,D[e+440>>2]=w(Tr(e,xn,d)),D[e+444>>2]=w(R0(e,xn,d)),D[e+428>>2]=w(Tr(e,Vt,d)),D[e+436>>2]=w(R0(e,Vt,d)),D[e+464>>2]=w(C0(e,xn)),D[e+468>>2]=w(di(e,xn)),D[e+452>>2]=w(C0(e,Vt)),D[e+460>>2]=w(di(e,Vt)),D[e+488>>2]=w(u0(e,xn,d)),D[e+492>>2]=w(v0(e,xn,d)),D[e+476>>2]=w(u0(e,Vt,d)),D[e+484>>2]=w(v0(e,Vt,d));do if(t[e+964>>2]|0)To(e,n,r,s,l,d,_);else{if(eo=e+948|0,Ni=(t[e+952>>2]|0)-(t[eo>>2]|0)>>2,!Ni){pu(e,n,r,s,l,d,_);break}if(y?0:Sl(e,n,r,s,l,d,_)|0)break;bo(e),Tu=e+508|0,c[Tu>>0]=0,xn=N0(t[e+4>>2]|0,Ei)|0,Vt=Cl(xn,Ei)|0,br=Nr(xn)|0,Ff=t[e+8>>2]|0,Gl=e+28|0,us=(t[Gl>>2]|0)!=0,Zi=br?d:_,cs=br?_:d,Lf=w(B0(e,xn,d)),Rf=w(hu(e,xn,d)),le=w(B0(e,Vt,d)),fs=w(Fn(e,xn,d)),Ri=w(Fn(e,Vt,d)),Ht=br?s:l,Au=br?l:s,En=br?fs:Ri,qe=br?Ri:fs,ls=w(mt(e,2,d)),ke=w(mt(e,0,d)),ie=w(w(Tn(e+364|0,d))-En),Pe=w(w(Tn(e+380|0,d))-En),pe=w(w(Tn(e+372|0,_))-qe),_e=w(w(Tn(e+388|0,_))-qe),Zs=br?ie:pe,el=br?Pe:_e,ls=w(n-ls),n=w(ls-En),gt(n)|0?En=n:En=w(Ur(w(cc(n,Pe)),ie)),Wl=w(r-ke),n=w(Wl-qe),gt(n)|0?Qi=n:Qi=w(Ur(w(cc(n,_e)),pe)),ie=br?En:Qi,xr=br?Qi:En;e:do if((Ht|0)==1)for(o=0,P=0;;){if(T=e0(e,P)|0,!o)(w(Br(T))>w(0)?w(zr(T))>w(0):0)?o=T:o=0;else if(pi(T)|0){we=0;break e}if(P=P+1|0,P>>>0>=Ni>>>0){we=o;break}}else we=0;while(0);vt=we+500|0,Ln=we+504|0,o=0,T=0,n=w(0),q=0;do{if(P=t[(t[eo>>2]|0)+(q<<2)>>2]|0,(t[P+36>>2]|0)==1)lo(P),c[P+985>>0]=1,c[P+984>>0]=0;else{$r(P),y&&Yo(P,so(P,Ei)|0,ie,xr,En);do if((t[P+24>>2]|0)!=1)if((P|0)==(we|0)){t[vt>>2]=t[2278],D[Ln>>2]=w(0);break}else{wr(e,P,En,s,Qi,En,Qi,l,Ei,k);break}else T|0&&(t[T+960>>2]=P),t[P+960>>2]=0,T=P,o=(o|0)==0?P:o;while(0);Di=w(D[P+504>>2]),n=w(n+w(Di+w(mt(P,xn,En))))}q=q+1|0}while((q|0)!=(Ni|0));for(Xi=n>ie,ku=us&((Ht|0)==2&Xi)?1:Ht,Dr=(Au|0)==1,Ro=Dr&(y^1),kf=(ku|0)==1,Af=(ku|0)==2,Cu=976+(xn<<2)|0,Of=(Au|2|0)==2,Mf=Dr&(us^1),Js=1040+(Vt<<2)|0,Qs=1040+(xn<<2)|0,If=976+(Vt<<2)|0,Pf=(Au|0)!=1,Xi=us&((Ht|0)!=0&Xi),Ki=e+976|0,Dr=Dr^1,n=ie,Pn=0,Ji=0,Di=w(0),ss=w(0);;){e:do if(Pn>>>0>>0)for(Ln=t[eo>>2]|0,q=0,_e=w(0),pe=w(0),Pe=w(0),ie=w(0),P=0,T=0,we=Pn;;){if(vt=t[Ln+(we<<2)>>2]|0,(t[vt+36>>2]|0)!=1?(t[vt+940>>2]=Ji,(t[vt+24>>2]|0)!=1):0){if(ke=w(mt(vt,xn,En)),Kn=t[Cu>>2]|0,r=w(Tn(vt+380+(Kn<<3)|0,Zi)),qe=w(D[vt+504>>2]),r=w(cc(r,qe)),r=w(Ur(w(Tn(vt+364+(Kn<<3)|0,Zi)),r)),us&(q|0)!=0&w(ke+w(pe+r))>n){l=q,ke=_e,Ht=we;break e}ke=w(ke+r),r=w(pe+ke),ke=w(_e+ke),pi(vt)|0&&(Pe=w(Pe+w(Br(vt))),ie=w(ie-w(qe*w(zr(vt))))),T|0&&(t[T+960>>2]=vt),t[vt+960>>2]=0,q=q+1|0,T=vt,P=(P|0)==0?vt:P}else ke=_e,r=pe;if(we=we+1|0,we>>>0>>0)_e=ke,pe=r;else{l=q,Ht=we;break}}else l=0,ke=w(0),Pe=w(0),ie=w(0),P=0,Ht=Pn;while(0);Kn=Pe>w(0)&Pew(0)&ieel&((gt(el)|0)^1))n=el,Kn=51;else if(c[(t[Ki>>2]|0)+3>>0]|0)Kn=51;else{if(It!=w(0)?w(Br(e))!=w(0):0){Kn=53;break}n=ke,Kn=53}while(0);if((Kn|0)==51&&(Kn=0,gt(n)|0?Kn=53:(gn=w(n-ke),zt=n)),(Kn|0)==53&&(Kn=0,ke>2]|0,we=gnw(0),pe=w(gn/It),Pe=w(0),ke=w(0),n=w(0),T=P;do r=w(Tn(T+380+(q<<3)|0,Zi)),ie=w(Tn(T+364+(q<<3)|0,Zi)),ie=w(cc(r,w(Ur(ie,w(D[T+504>>2]))))),we?(r=w(ie*w(zr(T))),(r!=w(-0)?(kt=w(ie-w(qe*r)),Ul=w(kn(T,xn,kt,zt,En)),kt!=Ul):0)&&(Pe=w(Pe-w(Ul-ie)),n=w(n+r))):((vt?(tl=w(Br(T)),tl!=w(0)):0)?(kt=w(ie+w(pe*tl)),ql=w(kn(T,xn,kt,zt,En)),kt!=ql):0)&&(Pe=w(Pe-w(ql-ie)),ke=w(ke-tl)),T=t[T+960>>2]|0;while((T|0)!=0);if(n=w(_e+n),ie=w(gn+Pe),jl)n=w(0);else{qe=w(It+ke),we=t[Cu>>2]|0,vt=iew(0),qe=w(ie/qe),n=w(0);do{kt=w(Tn(P+380+(we<<3)|0,Zi)),Pe=w(Tn(P+364+(we<<3)|0,Zi)),Pe=w(cc(kt,w(Ur(Pe,w(D[P+504>>2]))))),vt?(kt=w(Pe*w(zr(P))),ie=w(-kt),kt!=w(-0)?(kt=w(pe*ie),ie=w(kn(P,xn,w(Pe+(Ln?ie:kt)),zt,En))):ie=Pe):(q?(zl=w(Br(P)),zl!=w(0)):0)?ie=w(kn(P,xn,w(Pe+w(qe*zl)),zt,En)):ie=Pe,n=w(n-w(ie-Pe)),ke=w(mt(P,xn,En)),r=w(mt(P,Vt,En)),ie=w(ie+ke),D[nu>>2]=ie,t[xu>>2]=1,Pe=w(D[P+396>>2]);e:do if(gt(Pe)|0){T=gt(xr)|0;do if(!T){if(Xi|(m0(P,Vt,xr)|0|Dr)||(T0(e,P)|0)!=4||(t[(hi(P,Vt)|0)+4>>2]|0)==3||(t[(Ai(P,Vt)|0)+4>>2]|0)==3)break;D[Fi>>2]=xr,t[go>>2]=1;break e}while(0);if(m0(P,Vt,xr)|0){T=t[P+992+(t[If>>2]<<2)>>2]|0,kt=w(r+w(Tn(T,xr))),D[Fi>>2]=kt,T=Pf&(t[T+4>>2]|0)==2,t[go>>2]=((gt(kt)|0|T)^1)&1;break}else{D[Fi>>2]=xr,t[go>>2]=T?0:2;break}}else kt=w(ie-ke),It=w(kt/Pe),kt=w(Pe*kt),t[go>>2]=1,D[Fi>>2]=w(r+(br?It:kt));while(0);Kt(P,xn,zt,En,xu,nu),Kt(P,Vt,xr,En,go,Fi);do if(m0(P,Vt,xr)|0?0:(T0(e,P)|0)==4){if((t[(hi(P,Vt)|0)+4>>2]|0)==3){T=0;break}T=(t[(Ai(P,Vt)|0)+4>>2]|0)!=3}else T=0;while(0);kt=w(D[nu>>2]),It=w(D[Fi>>2]),$l=t[xu>>2]|0,Qr=t[go>>2]|0,ht(P,br?kt:It,br?It:kt,Ei,br?$l:Qr,br?Qr:$l,En,Qi,y&(T^1),3488,k)|0,c[Tu>>0]=c[Tu>>0]|c[P+508>>0],P=t[P+960>>2]|0}while((P|0)!=0)}}else n=w(0);if(n=w(gn+n),Qr=n>0]=Qr|C[Tu>>0],Af&n>w(0)?(T=t[Cu>>2]|0,((t[e+364+(T<<3)+4>>2]|0)!=0?(Li=w(Tn(e+364+(T<<3)|0,Zi)),Li>=w(0)):0)?ie=w(Ur(w(0),w(Li-w(zt-n)))):ie=w(0)):ie=n,vt=Pn>>>0>>0,vt){we=t[eo>>2]|0,q=Pn,T=0;do P=t[we+(q<<2)>>2]|0,t[P+24>>2]|0||(T=((t[(hi(P,xn)|0)+4>>2]|0)==3&1)+T|0,T=T+((t[(Ai(P,xn)|0)+4>>2]|0)==3&1)|0),q=q+1|0;while((q|0)!=(Ht|0));T?(ke=w(0),r=w(0)):Kn=101}else Kn=101;e:do if((Kn|0)==101)switch(Kn=0,Ff|0){case 1:{T=0,ke=w(ie*w(.5)),r=w(0);break e}case 2:{T=0,ke=ie,r=w(0);break e}case 3:{if(l>>>0<=1){T=0,ke=w(0),r=w(0);break e}r=w((l+-1|0)>>>0),T=0,ke=w(0),r=w(w(Ur(ie,w(0)))/r);break e}case 5:{r=w(ie/w((l+1|0)>>>0)),T=0,ke=r;break e}case 4:{r=w(ie/w(l>>>0)),T=0,ke=w(r*w(.5));break e}default:{T=0,ke=w(0),r=w(0);break e}}while(0);if(n=w(Lf+ke),vt){Pe=w(ie/w(T|0)),q=t[eo>>2]|0,P=Pn,ie=w(0);do{T=t[q+(P<<2)>>2]|0;e:do if((t[T+36>>2]|0)!=1){switch(t[T+24>>2]|0){case 1:{if(X(T,xn)|0){if(!y)break e;kt=w(Y(T,xn,zt)),kt=w(kt+w(C0(e,xn))),kt=w(kt+w(Tr(T,xn,En))),D[T+400+(t[Qs>>2]<<2)>>2]=kt;break e}break}case 0:if(Qr=(t[(hi(T,xn)|0)+4>>2]|0)==3,kt=w(Pe+n),n=Qr?kt:n,y&&(Qr=T+400+(t[Qs>>2]<<2)|0,D[Qr>>2]=w(n+w(D[Qr>>2]))),Qr=(t[(Ai(T,xn)|0)+4>>2]|0)==3,kt=w(Pe+n),n=Qr?kt:n,Ro){kt=w(r+w(mt(T,xn,En))),ie=xr,n=w(n+w(kt+w(D[T+504>>2])));break e}else{n=w(n+w(r+w(ye(T,xn,En)))),ie=w(Ur(ie,w(ye(T,Vt,En))));break e}default:}y&&(kt=w(ke+w(C0(e,xn))),Qr=T+400+(t[Qs>>2]<<2)|0,D[Qr>>2]=w(kt+w(D[Qr>>2])))}while(0);P=P+1|0}while((P|0)!=(Ht|0))}else ie=w(0);if(r=w(Rf+n),Of?ke=w(w(kn(e,Vt,w(Ri+ie),cs,d))-Ri):ke=xr,Pe=w(w(kn(e,Vt,w(Ri+(Mf?xr:ie)),cs,d))-Ri),vt&y){P=Pn;do{q=t[(t[eo>>2]|0)+(P<<2)>>2]|0;do if((t[q+36>>2]|0)!=1){if((t[q+24>>2]|0)==1){if(X(q,Vt)|0){if(kt=w(Y(q,Vt,xr)),kt=w(kt+w(C0(e,Vt))),kt=w(kt+w(Tr(q,Vt,En))),T=t[Js>>2]|0,D[q+400+(T<<2)>>2]=kt,!(gt(kt)|0))break}else T=t[Js>>2]|0;kt=w(C0(e,Vt)),D[q+400+(T<<2)>>2]=w(kt+w(Tr(q,Vt,En)));break}T=T0(e,q)|0;do if((T|0)==4){if((t[(hi(q,Vt)|0)+4>>2]|0)==3){Kn=139;break}if((t[(Ai(q,Vt)|0)+4>>2]|0)==3){Kn=139;break}if(m0(q,Vt,xr)|0){n=le;break}$l=t[q+908+(t[Cu>>2]<<2)>>2]|0,t[Fi>>2]=$l,n=w(D[q+396>>2]),Qr=gt(n)|0,ie=(t[j>>2]=$l,w(D[j>>2])),Qr?n=Pe:(gn=w(mt(q,Vt,En)),kt=w(ie/n),n=w(n*ie),n=w(gn+(br?kt:n))),D[nu>>2]=n,D[Fi>>2]=w(w(mt(q,xn,En))+ie),t[go>>2]=1,t[xu>>2]=1,Kt(q,xn,zt,En,go,Fi),Kt(q,Vt,xr,En,xu,nu),n=w(D[Fi>>2]),gn=w(D[nu>>2]),kt=br?n:gn,n=br?gn:n,Qr=((gt(kt)|0)^1)&1,ht(q,kt,n,Ei,Qr,((gt(n)|0)^1)&1,En,Qi,1,3493,k)|0,n=le}else Kn=139;while(0);e:do if((Kn|0)==139){Kn=0,n=w(ke-w(ye(q,Vt,En)));do if((t[(hi(q,Vt)|0)+4>>2]|0)==3){if((t[(Ai(q,Vt)|0)+4>>2]|0)!=3)break;n=w(le+w(Ur(w(0),w(n*w(.5)))));break e}while(0);if((t[(Ai(q,Vt)|0)+4>>2]|0)==3){n=le;break}if((t[(hi(q,Vt)|0)+4>>2]|0)==3){n=w(le+w(Ur(w(0),n)));break}switch(T|0){case 1:{n=le;break e}case 2:{n=w(le+w(n*w(.5)));break e}default:{n=w(le+n);break e}}}while(0);kt=w(Di+n),Qr=q+400+(t[Js>>2]<<2)|0,D[Qr>>2]=w(kt+w(D[Qr>>2]))}while(0);P=P+1|0}while((P|0)!=(Ht|0))}if(Di=w(Di+Pe),ss=w(Ur(ss,r)),l=Ji+1|0,Ht>>>0>=Ni>>>0)break;n=zt,Pn=Ht,Ji=l}do if(y){if(T=l>>>0>1,T?0:!(he(e)|0))break;if(!(gt(xr)|0)){n=w(xr-Di);e:do switch(t[e+12>>2]|0){case 3:{le=w(le+n),pe=w(0);break}case 2:{le=w(le+w(n*w(.5))),pe=w(0);break}case 4:{xr>Di?pe=w(n/w(l>>>0)):pe=w(0);break}case 7:if(xr>Di){le=w(le+w(n/w(l<<1>>>0))),pe=w(n/w(l>>>0)),pe=T?pe:w(0);break e}else{le=w(le+w(n*w(.5))),pe=w(0);break e}case 6:{pe=w(n/w(Ji>>>0)),pe=xr>Di&T?pe:w(0);break}default:pe=w(0)}while(0);if(l|0)for(vt=1040+(Vt<<2)|0,Ln=976+(Vt<<2)|0,we=0,P=0;;){e:do if(P>>>0>>0)for(ie=w(0),Pe=w(0),n=w(0),q=P;;){T=t[(t[eo>>2]|0)+(q<<2)>>2]|0;do if((t[T+36>>2]|0)!=1?(t[T+24>>2]|0)==0:0){if((t[T+940>>2]|0)!=(we|0))break e;if(We(T,Vt)|0&&(kt=w(D[T+908+(t[Ln>>2]<<2)>>2]),n=w(Ur(n,w(kt+w(mt(T,Vt,En)))))),(T0(e,T)|0)!=5)break;Li=w(et(T)),Li=w(Li+w(Tr(T,0,En))),kt=w(D[T+912>>2]),kt=w(w(kt+w(mt(T,0,En)))-Li),Li=w(Ur(Pe,Li)),kt=w(Ur(ie,kt)),ie=kt,Pe=Li,n=w(Ur(n,w(Li+kt)))}while(0);if(T=q+1|0,T>>>0>>0)q=T;else{q=T;break}}else Pe=w(0),n=w(0),q=P;while(0);if(qe=w(pe+n),r=le,le=w(le+qe),P>>>0>>0){ke=w(r+Pe),T=P;do{P=t[(t[eo>>2]|0)+(T<<2)>>2]|0;e:do if((t[P+36>>2]|0)!=1?(t[P+24>>2]|0)==0:0)switch(T0(e,P)|0){case 1:{kt=w(r+w(Tr(P,Vt,En))),D[P+400+(t[vt>>2]<<2)>>2]=kt;break e}case 3:{kt=w(w(le-w(R0(P,Vt,En)))-w(D[P+908+(t[Ln>>2]<<2)>>2])),D[P+400+(t[vt>>2]<<2)>>2]=kt;break e}case 2:{kt=w(r+w(w(qe-w(D[P+908+(t[Ln>>2]<<2)>>2]))*w(.5))),D[P+400+(t[vt>>2]<<2)>>2]=kt;break e}case 4:{if(kt=w(r+w(Tr(P,Vt,En))),D[P+400+(t[vt>>2]<<2)>>2]=kt,m0(P,Vt,xr)|0||(br?(ie=w(D[P+908>>2]),n=w(ie+w(mt(P,xn,En))),Pe=qe):(Pe=w(D[P+912>>2]),Pe=w(Pe+w(mt(P,Vt,En))),n=qe,ie=w(D[P+908>>2])),Vr(n,ie)|0?Vr(Pe,w(D[P+912>>2]))|0:0))break e;ht(P,n,Pe,Ei,1,1,En,Qi,1,3501,k)|0;break e}case 5:{D[P+404>>2]=w(w(ke-w(et(P)))+w(Y(P,0,xr)));break e}default:break e}while(0);T=T+1|0}while((T|0)!=(q|0))}if(we=we+1|0,(we|0)==(l|0))break;P=q}}}while(0);if(D[e+908>>2]=w(kn(e,2,ls,d,d)),D[e+912>>2]=w(kn(e,0,Wl,_,d)),((ku|0)!=0?(Hl=t[e+32>>2]|0,bl=(ku|0)==2,!(bl&(Hl|0)!=2)):0)?bl&(Hl|0)==2&&(n=w(fs+zt),n=w(Ur(w(cc(n,w(Dt(e,xn,ss,Zi)))),fs)),Kn=198):(n=w(kn(e,xn,ss,Zi,d)),Kn=198),(Kn|0)==198&&(D[e+908+(t[976+(xn<<2)>>2]<<2)>>2]=n),((Au|0)!=0?(Vl=t[e+32>>2]|0,Yl=(Au|0)==2,!(Yl&(Vl|0)!=2)):0)?Yl&(Vl|0)==2&&(n=w(Ri+xr),n=w(Ur(w(cc(n,w(Dt(e,Vt,w(Ri+Di),cs)))),Ri)),Kn=204):(n=w(kn(e,Vt,w(Ri+Di),cs,d)),Kn=204),(Kn|0)==204&&(D[e+908+(t[976+(Vt<<2)>>2]<<2)>>2]=n),y){if((t[Gl>>2]|0)==2){P=976+(Vt<<2)|0,q=1040+(Vt<<2)|0,T=0;do we=e0(e,T)|0,t[we+24>>2]|0||($l=t[P>>2]|0,kt=w(D[e+908+($l<<2)>>2]),Qr=we+400+(t[q>>2]<<2)|0,kt=w(kt-w(D[Qr>>2])),D[Qr>>2]=w(kt-w(D[we+908+($l<<2)>>2]))),T=T+1|0;while((T|0)!=(Ni|0))}if(o|0){T=br?ku:s;do bt(e,o,En,T,Qi,Ei,k),o=t[o+960>>2]|0;while((o|0)!=0)}if(T=(xn|2|0)==3,P=(Vt|2|0)==3,T|P){o=0;do q=t[(t[eo>>2]|0)+(o<<2)>>2]|0,(t[q+36>>2]|0)!=1&&(T&&Zt(e,q,xn),P&&Zt(e,q,Vt)),o=o+1|0;while((o|0)!=(Ni|0))}}}while(0);h=Ou}function ki(e,n){e=e|0,n=w(n);var r=0;li(e,n>=w(0),3147),r=n==w(0),D[e+4>>2]=r?w(0):n}function Yr(e,n,r,o){e=e|0,n=w(n),r=w(r),o=o|0;var s=tt,l=tt,d=0,_=0,y=0;t[2278]=(t[2278]|0)+1,$r(e),m0(e,2,n)|0?(s=w(Tn(t[e+992>>2]|0,n)),y=1,s=w(s+w(mt(e,2,n)))):(s=w(Tn(e+380|0,n)),s>=w(0)?y=2:(y=((gt(n)|0)^1)&1,s=n)),m0(e,0,r)|0?(l=w(Tn(t[e+996>>2]|0,r)),_=1,l=w(l+w(mt(e,0,n)))):(l=w(Tn(e+388|0,r)),l>=w(0)?_=2:(_=((gt(r)|0)^1)&1,l=r)),d=e+976|0,(ht(e,s,l,o,y,_,n,r,1,3189,t[d>>2]|0)|0?(Yo(e,t[e+496>>2]|0,n,r,n),bi(e,w(D[(t[d>>2]|0)+4>>2]),w(0),w(0)),c[11696]|0):0)&&ff(e,7)}function $r(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;_=h,h=h+32|0,d=_+24|0,l=_+16|0,o=_+8|0,s=_,r=0;do n=e+380+(r<<3)|0,((t[e+380+(r<<3)+4>>2]|0)!=0?(y=n,k=t[y+4>>2]|0,T=o,t[T>>2]=t[y>>2],t[T+4>>2]=k,T=e+364+(r<<3)|0,k=t[T+4>>2]|0,y=s,t[y>>2]=t[T>>2],t[y+4>>2]=k,t[l>>2]=t[o>>2],t[l+4>>2]=t[o+4>>2],t[d>>2]=t[s>>2],t[d+4>>2]=t[s+4>>2],o0(l,d)|0):0)||(n=e+348+(r<<3)|0),t[e+992+(r<<2)>>2]=n,r=r+1|0;while((r|0)!=2);h=_}function m0(e,n,r){e=e|0,n=n|0,r=w(r);var o=0;switch(e=t[e+992+(t[976+(n<<2)>>2]<<2)>>2]|0,t[e+4>>2]|0){case 0:case 3:{e=0;break}case 1:{w(D[e>>2])>2])>2]|0){case 2:{n=w(w(w(D[e>>2])*n)/w(100));break}case 1:{n=w(D[e>>2]);break}default:n=w(J)}return w(n)}function Yo(e,n,r,o,s){e=e|0,n=n|0,r=w(r),o=w(o),s=w(s);var l=0,d=tt;n=t[e+944>>2]|0?n:1,l=N0(t[e+4>>2]|0,n)|0,n=Cl(l,n)|0,r=w(Wr(e,l,r)),o=w(Wr(e,n,o)),d=w(r+w(Tr(e,l,s))),D[e+400+(t[1040+(l<<2)>>2]<<2)>>2]=d,r=w(r+w(R0(e,l,s))),D[e+400+(t[1e3+(l<<2)>>2]<<2)>>2]=r,r=w(o+w(Tr(e,n,s))),D[e+400+(t[1040+(n<<2)>>2]<<2)>>2]=r,s=w(o+w(R0(e,n,s))),D[e+400+(t[1e3+(n<<2)>>2]<<2)>>2]=s}function bi(e,n,r,o){e=e|0,n=w(n),r=w(r),o=w(o);var s=0,l=0,d=tt,_=tt,y=0,k=0,T=tt,P=0,q=tt,we=tt,le=tt,ie=tt;if(n!=w(0)&&(s=e+400|0,ie=w(D[s>>2]),l=e+404|0,le=w(D[l>>2]),P=e+416|0,we=w(D[P>>2]),k=e+420|0,d=w(D[k>>2]),q=w(ie+r),T=w(le+o),o=w(q+we),_=w(T+d),y=(t[e+988>>2]|0)==1,D[s>>2]=w($0(ie,n,0,y)),D[l>>2]=w($0(le,n,0,y)),r=w(V4(w(we*n),w(1))),Vr(r,w(0))|0?l=0:l=(Vr(r,w(1))|0)^1,r=w(V4(w(d*n),w(1))),Vr(r,w(0))|0?s=0:s=(Vr(r,w(1))|0)^1,ie=w($0(o,n,y&l,y&(l^1))),D[P>>2]=w(ie-w($0(q,n,0,y))),ie=w($0(_,n,y&s,y&(s^1))),D[k>>2]=w(ie-w($0(T,n,0,y))),l=(t[e+952>>2]|0)-(t[e+948>>2]|0)>>2,l|0)){s=0;do bi(e0(e,s)|0,n,q,T),s=s+1|0;while((s|0)!=(l|0))}}function or(e,n,r,o,s){switch(e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,r|0){case 5:case 0:{e=q8(t[489]|0,o,s)|0;break}default:e=AL(o,s)|0}return e|0}function zs(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;s=h,h=h+16|0,l=s,t[l>>2]=o,Ku(e,0,n,r,l),h=s}function Ku(e,n,r,o,s){if(e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,e=e|0?e:956,sD[t[e+8>>2]&1](e,n,r,o,s)|0,(r|0)==5)_n();else return}function J0(e,n,r){e=e|0,n=n|0,r=r|0,c[e+n>>0]=r&1}function af(e,n){e=e|0,n=n|0;var r=0,o=0;t[e>>2]=0,t[e+4>>2]=0,t[e+8>>2]=0,r=n+4|0,o=(t[r>>2]|0)-(t[n>>2]|0)>>2,o|0&&(S0(e,o),El(e,t[n>>2]|0,t[r>>2]|0,o))}function S0(e,n){e=e|0,n=n|0;var r=0;if((Q0(e)|0)>>>0>>0&&$n(e),n>>>0>1073741823)_n();else{r=Tt(n<<2)|0,t[e+4>>2]=r,t[e>>2]=r,t[e+8>>2]=r+(n<<2);return}}function El(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,o=e+4|0,e=r-n|0,(e|0)>0&&(vn(t[o>>2]|0,n|0,e|0)|0,t[o>>2]=(t[o>>2]|0)+(e>>>2<<2))}function Q0(e){return e=e|0,1073741823}function Tr(e,n,r){return e=e|0,n=n|0,r=w(r),(Nr(n)|0?(t[e+96>>2]|0)!=0:0)?e=e+92|0:e=en(e+60|0,t[1040+(n<<2)>>2]|0,992)|0,w(uo(e,r))}function R0(e,n,r){return e=e|0,n=n|0,r=w(r),(Nr(n)|0?(t[e+104>>2]|0)!=0:0)?e=e+100|0:e=en(e+60|0,t[1e3+(n<<2)>>2]|0,992)|0,w(uo(e,r))}function Nr(e){return e=e|0,(e|1|0)==3|0}function uo(e,n){return e=e|0,n=w(n),(t[e+4>>2]|0)==3?n=w(0):n=w(Tn(e,n)),w(n)}function so(e,n){return e=e|0,n=n|0,e=t[e>>2]|0,((e|0)==0?(n|0)>1?n:1:e)|0}function N0(e,n){e=e|0,n=n|0;var r=0;e:do if((n|0)==2){switch(e|0){case 2:{e=3;break e}case 3:break;default:{r=4;break e}}e=2}else r=4;while(0);return e|0}function C0(e,n){e=e|0,n=n|0;var r=tt;return((Nr(n)|0?(t[e+312>>2]|0)!=0:0)?(r=w(D[e+308>>2]),r>=w(0)):0)||(r=w(Ur(w(D[(en(e+276|0,t[1040+(n<<2)>>2]|0,992)|0)>>2]),w(0)))),w(r)}function di(e,n){e=e|0,n=n|0;var r=tt;return((Nr(n)|0?(t[e+320>>2]|0)!=0:0)?(r=w(D[e+316>>2]),r>=w(0)):0)||(r=w(Ur(w(D[(en(e+276|0,t[1e3+(n<<2)>>2]|0,992)|0)>>2]),w(0)))),w(r)}function u0(e,n,r){e=e|0,n=n|0,r=w(r);var o=tt;return((Nr(n)|0?(t[e+240>>2]|0)!=0:0)?(o=w(Tn(e+236|0,r)),o>=w(0)):0)||(o=w(Ur(w(Tn(en(e+204|0,t[1040+(n<<2)>>2]|0,992)|0,r)),w(0)))),w(o)}function v0(e,n,r){e=e|0,n=n|0,r=w(r);var o=tt;return((Nr(n)|0?(t[e+248>>2]|0)!=0:0)?(o=w(Tn(e+244|0,r)),o>=w(0)):0)||(o=w(Ur(w(Tn(en(e+204|0,t[1e3+(n<<2)>>2]|0,992)|0,r)),w(0)))),w(o)}function To(e,n,r,o,s,l,d){e=e|0,n=w(n),r=w(r),o=o|0,s=s|0,l=w(l),d=w(d);var _=tt,y=tt,k=tt,T=tt,P=tt,q=tt,we=0,le=0,ie=0;ie=h,h=h+16|0,we=ie,le=e+964|0,i0(e,(t[le>>2]|0)!=0,3519),_=w(Fn(e,2,n)),y=w(Fn(e,0,n)),k=w(mt(e,2,n)),T=w(mt(e,0,n)),gt(n)|0?P=n:P=w(Ur(w(0),w(w(n-k)-_))),gt(r)|0?q=r:q=w(Ur(w(0),w(w(r-T)-y))),(o|0)==1&(s|0)==1?(D[e+908>>2]=w(kn(e,2,w(n-k),l,l)),n=w(kn(e,0,w(r-T),d,l))):(lD[t[le>>2]&1](we,e,P,o,q,s),P=w(_+w(D[we>>2])),q=w(n-k),D[e+908>>2]=w(kn(e,2,(o|2|0)==2?P:q,l,l)),q=w(y+w(D[we+4>>2])),n=w(r-T),n=w(kn(e,0,(s|2|0)==2?q:n,d,l))),D[e+912>>2]=n,h=ie}function pu(e,n,r,o,s,l,d){e=e|0,n=w(n),r=w(r),o=o|0,s=s|0,l=w(l),d=w(d);var _=tt,y=tt,k=tt,T=tt;k=w(Fn(e,2,l)),_=w(Fn(e,0,l)),T=w(mt(e,2,l)),y=w(mt(e,0,l)),n=w(n-T),D[e+908>>2]=w(kn(e,2,(o|2|0)==2?k:n,l,l)),r=w(r-y),D[e+912>>2]=w(kn(e,0,(s|2|0)==2?_:r,d,l))}function Sl(e,n,r,o,s,l,d){e=e|0,n=w(n),r=w(r),o=o|0,s=s|0,l=w(l),d=w(d);var _=0,y=tt,k=tt;return _=(o|0)==2,((n<=w(0)&_?0:!(r<=w(0)&(s|0)==2))?!((o|0)==1&(s|0)==1):0)?e=0:(y=w(mt(e,0,l)),k=w(mt(e,2,l)),_=n>2]=w(kn(e,2,_?w(0):n,l,l)),n=w(r-y),_=r>2]=w(kn(e,0,_?w(0):n,d,l)),e=1),e|0}function Cl(e,n){return e=e|0,n=n|0,qt(e)|0?e=N0(2,n)|0:e=0,e|0}function B0(e,n,r){return e=e|0,n=n|0,r=w(r),r=w(u0(e,n,r)),w(r+w(C0(e,n)))}function hu(e,n,r){return e=e|0,n=n|0,r=w(r),r=w(v0(e,n,r)),w(r+w(di(e,n)))}function Fn(e,n,r){e=e|0,n=n|0,r=w(r);var o=tt;return o=w(B0(e,n,r)),w(o+w(hu(e,n,r)))}function pi(e){return e=e|0,t[e+24>>2]|0?e=0:w(Br(e))!=w(0)?e=1:e=w(zr(e))!=w(0),e|0}function Br(e){e=e|0;var n=tt;if(t[e+944>>2]|0){if(n=w(D[e+44>>2]),gt(n)|0)return n=w(D[e+40>>2]),e=n>w(0)&((gt(n)|0)^1),w(e?n:w(0))}else n=w(0);return w(n)}function zr(e){e=e|0;var n=tt,r=0,o=tt;do if(t[e+944>>2]|0){if(n=w(D[e+48>>2]),gt(n)|0){if(r=c[(t[e+976>>2]|0)+2>>0]|0,r<<24>>24==0?(o=w(D[e+40>>2]),o>24?w(1):w(0)}}else n=w(0);while(0);return w(n)}function lo(e){e=e|0;var n=0,r=0;if(pa(e+400|0,0,540)|0,c[e+985>>0]=1,bo(e),r=fi(e)|0,r|0){n=e+948|0,e=0;do lo(t[(t[n>>2]|0)+(e<<2)>>2]|0),e=e+1|0;while((e|0)!=(r|0))}}function wr(e,n,r,o,s,l,d,_,y,k){e=e|0,n=n|0,r=w(r),o=o|0,s=w(s),l=w(l),d=w(d),_=_|0,y=y|0,k=k|0;var T=0,P=tt,q=0,we=0,le=tt,ie=tt,Pe=0,ke=tt,qe=0,pe=tt,_e=0,vt=0,Ln=0,Ht=0,It=0,gn=0,Pn=0,zt=0,Dr=0,Ki=0;Dr=h,h=h+16|0,Ln=Dr+12|0,Ht=Dr+8|0,It=Dr+4|0,gn=Dr,zt=N0(t[e+4>>2]|0,y)|0,_e=Nr(zt)|0,P=w(Tn(Ut(n)|0,_e?l:d)),vt=m0(n,2,l)|0,Pn=m0(n,0,d)|0;do if(gt(P)|0?0:!(gt(_e?r:s)|0)){if(T=n+504|0,!(gt(w(D[T>>2]))|0)&&(!(fn(t[n+976>>2]|0,0)|0)||(t[n+500>>2]|0)==(t[2278]|0)))break;D[T>>2]=w(Ur(P,w(Fn(n,zt,l))))}else q=7;while(0);do if((q|0)==7){if(qe=_e^1,!(qe|vt^1)){d=w(Tn(t[n+992>>2]|0,l)),D[n+504>>2]=w(Ur(d,w(Fn(n,2,l))));break}if(!(_e|Pn^1)){d=w(Tn(t[n+996>>2]|0,d)),D[n+504>>2]=w(Ur(d,w(Fn(n,0,l))));break}D[Ln>>2]=w(J),D[Ht>>2]=w(J),t[It>>2]=0,t[gn>>2]=0,ke=w(mt(n,2,l)),pe=w(mt(n,0,l)),vt?(le=w(ke+w(Tn(t[n+992>>2]|0,l))),D[Ln>>2]=le,t[It>>2]=1,we=1):(we=0,le=w(J)),Pn?(P=w(pe+w(Tn(t[n+996>>2]|0,d))),D[Ht>>2]=P,t[gn>>2]=1,T=1):(T=0,P=w(J)),q=t[e+32>>2]|0,_e&(q|0)==2?q=2:(gt(le)|0?!(gt(r)|0):0)&&(D[Ln>>2]=r,t[It>>2]=2,we=2,le=r),(((q|0)==2&qe?0:gt(P)|0)?!(gt(s)|0):0)&&(D[Ht>>2]=s,t[gn>>2]=2,T=2,P=s),ie=w(D[n+396>>2]),Pe=gt(ie)|0;do if(Pe)q=we;else{if((we|0)==1&qe){D[Ht>>2]=w(w(le-ke)/ie),t[gn>>2]=1,T=1,q=1;break}_e&(T|0)==1?(D[Ln>>2]=w(ie*w(P-pe)),t[It>>2]=1,T=1,q=1):q=we}while(0);Ki=gt(r)|0,we=(T0(e,n)|0)!=4,(_e|vt|((o|0)!=1|Ki)|(we|(q|0)==1)?0:(D[Ln>>2]=r,t[It>>2]=1,!Pe))&&(D[Ht>>2]=w(w(r-ke)/ie),t[gn>>2]=1,T=1),(Pn|qe|((_|0)!=1|(gt(s)|0))|(we|(T|0)==1)?0:(D[Ht>>2]=s,t[gn>>2]=1,!Pe))&&(D[Ln>>2]=w(ie*w(s-pe)),t[It>>2]=1),Kt(n,2,l,l,It,Ln),Kt(n,0,d,l,gn,Ht),r=w(D[Ln>>2]),s=w(D[Ht>>2]),ht(n,r,s,y,t[It>>2]|0,t[gn>>2]|0,l,d,0,3565,k)|0,d=w(D[n+908+(t[976+(zt<<2)>>2]<<2)>>2]),D[n+504>>2]=w(Ur(d,w(Fn(n,zt,l))))}while(0);t[n+500>>2]=t[2278],h=Dr}function kn(e,n,r,o,s){return e=e|0,n=n|0,r=w(r),o=w(o),s=w(s),o=w(Dt(e,n,r,o)),w(Ur(o,w(Fn(e,n,s))))}function T0(e,n){return e=e|0,n=n|0,n=n+20|0,n=t[((t[n>>2]|0)==0?e+16|0:n)>>2]|0,((n|0)==5?qt(t[e+4>>2]|0)|0:0)&&(n=1),n|0}function hi(e,n){return e=e|0,n=n|0,(Nr(n)|0?(t[e+96>>2]|0)!=0:0)?n=4:n=t[1040+(n<<2)>>2]|0,e+60+(n<<3)|0}function Ai(e,n){return e=e|0,n=n|0,(Nr(n)|0?(t[e+104>>2]|0)!=0:0)?n=5:n=t[1e3+(n<<2)>>2]|0,e+60+(n<<3)|0}function Kt(e,n,r,o,s,l){switch(e=e|0,n=n|0,r=w(r),o=w(o),s=s|0,l=l|0,r=w(Tn(e+380+(t[976+(n<<2)>>2]<<3)|0,r)),r=w(r+w(mt(e,n,o))),t[s>>2]|0){case 2:case 1:{s=gt(r)|0,o=w(D[l>>2]),D[l>>2]=s|o>2]=2,D[l>>2]=r);break}default:}}function X(e,n){return e=e|0,n=n|0,e=e+132|0,(Nr(n)|0?(t[(en(e,4,948)|0)+4>>2]|0)!=0:0)?e=1:e=(t[(en(e,t[1040+(n<<2)>>2]|0,948)|0)+4>>2]|0)!=0,e|0}function Y(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0;return e=e+132|0,(Nr(n)|0?(o=en(e,4,948)|0,(t[o+4>>2]|0)!=0):0)?s=4:(o=en(e,t[1040+(n<<2)>>2]|0,948)|0,t[o+4>>2]|0?s=4:r=w(0)),(s|0)==4&&(r=w(Tn(o,r))),w(r)}function ye(e,n,r){e=e|0,n=n|0,r=w(r);var o=tt;return o=w(D[e+908+(t[976+(n<<2)>>2]<<2)>>2]),o=w(o+w(Tr(e,n,r))),w(o+w(R0(e,n,r)))}function he(e){e=e|0;var n=0,r=0,o=0;e:do if(qt(t[e+4>>2]|0)|0)n=0;else if((t[e+16>>2]|0)!=5)if(r=fi(e)|0,!r)n=0;else for(n=0;;){if(o=e0(e,n)|0,(t[o+24>>2]|0)==0?(t[o+20>>2]|0)==5:0){n=1;break e}if(n=n+1|0,n>>>0>=r>>>0){n=0;break}}else n=1;while(0);return n|0}function We(e,n){e=e|0,n=n|0;var r=tt;return r=w(D[e+908+(t[976+(n<<2)>>2]<<2)>>2]),r>=w(0)&((gt(r)|0)^1)|0}function et(e){e=e|0;var n=tt,r=0,o=0,s=0,l=0,d=0,_=0,y=tt;if(r=t[e+968>>2]|0,r)y=w(D[e+908>>2]),n=w(D[e+912>>2]),n=w(rD[r&0](e,y,n)),i0(e,(gt(n)|0)^1,3573);else{l=fi(e)|0;do if(l|0){for(r=0,s=0;;){if(o=e0(e,s)|0,t[o+940>>2]|0){d=8;break}if((t[o+24>>2]|0)!=1)if(_=(T0(e,o)|0)==5,_){r=o;break}else r=(r|0)==0?o:r;if(s=s+1|0,s>>>0>=l>>>0){d=8;break}}if((d|0)==8&&!r)break;return n=w(et(r)),w(n+w(D[r+404>>2]))}while(0);n=w(D[e+912>>2])}return w(n)}function Dt(e,n,r,o){e=e|0,n=n|0,r=w(r),o=w(o);var s=tt,l=0;return qt(n)|0?(n=1,l=3):Nr(n)|0?(n=0,l=3):(o=w(J),s=w(J)),(l|0)==3&&(s=w(Tn(e+364+(n<<3)|0,o)),o=w(Tn(e+380+(n<<3)|0,o))),l=o=w(0)&((gt(o)|0)^1)),r=l?o:r,l=s>=w(0)&((gt(s)|0)^1)&r>2]|0,l)|0,le=Cl(Pe,l)|0,ie=Nr(Pe)|0,P=w(mt(n,2,r)),q=w(mt(n,0,r)),m0(n,2,r)|0?_=w(P+w(Tn(t[n+992>>2]|0,r))):(X(n,2)|0?_t(n,2)|0:0)?(_=w(D[e+908>>2]),y=w(C0(e,2)),y=w(_-w(y+w(di(e,2)))),_=w(Y(n,2,r)),_=w(kn(n,2,w(y-w(_+w(_r(n,2,r)))),r,r))):_=w(J),m0(n,0,s)|0?y=w(q+w(Tn(t[n+996>>2]|0,s))):(X(n,0)|0?_t(n,0)|0:0)?(y=w(D[e+912>>2]),qe=w(C0(e,0)),qe=w(y-w(qe+w(di(e,0)))),y=w(Y(n,0,s)),y=w(kn(n,0,w(qe-w(y+w(_r(n,0,s)))),s,r))):y=w(J),k=gt(_)|0,T=gt(y)|0;do if(k^T?(we=w(D[n+396>>2]),!(gt(we)|0)):0)if(k){_=w(P+w(w(y-q)*we));break}else{qe=w(q+w(w(_-P)/we)),y=T?qe:y;break}while(0);T=gt(_)|0,k=gt(y)|0,T|k&&(pe=(T^1)&1,o=r>w(0)&((o|0)!=0&T),_=ie?_:o?r:_,ht(n,_,y,l,ie?pe:o?2:pe,T&(k^1)&1,_,y,0,3623,d)|0,_=w(D[n+908>>2]),_=w(_+w(mt(n,2,r))),y=w(D[n+912>>2]),y=w(y+w(mt(n,0,r)))),ht(n,_,y,l,1,1,_,y,1,3635,d)|0,(_t(n,Pe)|0?!(X(n,Pe)|0):0)?(pe=t[976+(Pe<<2)>>2]|0,qe=w(D[e+908+(pe<<2)>>2]),qe=w(qe-w(D[n+908+(pe<<2)>>2])),qe=w(qe-w(di(e,Pe))),qe=w(qe-w(R0(n,Pe,r))),qe=w(qe-w(_r(n,Pe,ie?r:s))),D[n+400+(t[1040+(Pe<<2)>>2]<<2)>>2]=qe):ke=21;do if((ke|0)==21){if(X(n,Pe)|0?0:(t[e+8>>2]|0)==1){pe=t[976+(Pe<<2)>>2]|0,qe=w(D[e+908+(pe<<2)>>2]),qe=w(w(qe-w(D[n+908+(pe<<2)>>2]))*w(.5)),D[n+400+(t[1040+(Pe<<2)>>2]<<2)>>2]=qe;break}(X(n,Pe)|0?0:(t[e+8>>2]|0)==2)&&(pe=t[976+(Pe<<2)>>2]|0,qe=w(D[e+908+(pe<<2)>>2]),qe=w(qe-w(D[n+908+(pe<<2)>>2])),D[n+400+(t[1040+(Pe<<2)>>2]<<2)>>2]=qe)}while(0);(_t(n,le)|0?!(X(n,le)|0):0)?(pe=t[976+(le<<2)>>2]|0,qe=w(D[e+908+(pe<<2)>>2]),qe=w(qe-w(D[n+908+(pe<<2)>>2])),qe=w(qe-w(di(e,le))),qe=w(qe-w(R0(n,le,r))),qe=w(qe-w(_r(n,le,ie?s:r))),D[n+400+(t[1040+(le<<2)>>2]<<2)>>2]=qe):ke=30;do if((ke|0)==30?!(X(n,le)|0):0){if((T0(e,n)|0)==2){pe=t[976+(le<<2)>>2]|0,qe=w(D[e+908+(pe<<2)>>2]),qe=w(w(qe-w(D[n+908+(pe<<2)>>2]))*w(.5)),D[n+400+(t[1040+(le<<2)>>2]<<2)>>2]=qe;break}pe=(T0(e,n)|0)==3,pe^(t[e+28>>2]|0)==2&&(pe=t[976+(le<<2)>>2]|0,qe=w(D[e+908+(pe<<2)>>2]),qe=w(qe-w(D[n+908+(pe<<2)>>2])),D[n+400+(t[1040+(le<<2)>>2]<<2)>>2]=qe)}while(0)}function Zt(e,n,r){e=e|0,n=n|0,r=r|0;var o=tt,s=0;s=t[976+(r<<2)>>2]|0,o=w(D[n+908+(s<<2)>>2]),o=w(w(D[e+908+(s<<2)>>2])-o),o=w(o-w(D[n+400+(t[1040+(r<<2)>>2]<<2)>>2])),D[n+400+(t[1e3+(r<<2)>>2]<<2)>>2]=o}function qt(e){return e=e|0,(e|1|0)==1|0}function Ut(e){e=e|0;var n=tt;switch(t[e+56>>2]|0){case 0:case 3:{n=w(D[e+40>>2]),n>w(0)&((gt(n)|0)^1)?e=c[(t[e+976>>2]|0)+2>>0]|0?1056:992:e=1056;break}default:e=e+52|0}return e|0}function fn(e,n){return e=e|0,n=n|0,(c[e+n>>0]|0)!=0|0}function _t(e,n){return e=e|0,n=n|0,e=e+132|0,(Nr(n)|0?(t[(en(e,5,948)|0)+4>>2]|0)!=0:0)?e=1:e=(t[(en(e,t[1e3+(n<<2)>>2]|0,948)|0)+4>>2]|0)!=0,e|0}function _r(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0;return e=e+132|0,(Nr(n)|0?(o=en(e,5,948)|0,(t[o+4>>2]|0)!=0):0)?s=4:(o=en(e,t[1e3+(n<<2)>>2]|0,948)|0,t[o+4>>2]|0?s=4:r=w(0)),(s|0)==4&&(r=w(Tn(o,r))),w(r)}function Wr(e,n,r){return e=e|0,n=n|0,r=w(r),X(e,n)|0?r=w(Y(e,n,r)):r=w(-w(_r(e,n,r))),w(r)}function Ar(e){return e=w(e),D[j>>2]=e,t[j>>2]|0|0}function z(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>1073741823)_n();else{s=Tt(n<<2)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<2)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<2)}function dr(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>2)<<2)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Or(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-4-n|0)>>>2)<<2)),e=t[e>>2]|0,e|0&&Ve(e)}function Qn(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;if(d=e+4|0,_=t[d>>2]|0,s=_-o|0,l=s>>2,e=n+(l<<2)|0,e>>>0>>0){o=_;do t[o>>2]=t[e>>2],e=e+4|0,o=(t[d>>2]|0)+4|0,t[d>>2]=o;while(e>>>0>>0)}l|0&&Y1(_+(0-l<<2)|0,n|0,s|0)|0}function nn(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0;return _=n+4|0,y=t[_>>2]|0,s=t[e>>2]|0,d=r,l=d-s|0,o=y+(0-(l>>2)<<2)|0,t[_>>2]=o,(l|0)>0&&vn(o|0,s|0,l|0)|0,s=e+4|0,l=n+8|0,o=(t[s>>2]|0)-d|0,(o|0)>0&&(vn(t[l>>2]|0,r|0,o|0)|0,t[l>>2]=(t[l>>2]|0)+(o>>>2<<2)),d=t[e>>2]|0,t[e>>2]=t[_>>2],t[_>>2]=d,d=t[s>>2]|0,t[s>>2]=t[l>>2],t[l>>2]=d,d=e+8|0,r=n+12|0,e=t[d>>2]|0,t[d>>2]=t[r>>2],t[r>>2]=e,t[n>>2]=t[_>>2],y|0}function s0(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;if(d=t[n>>2]|0,l=t[r>>2]|0,(d|0)!=(l|0)){s=e+8|0,r=((l+-4-d|0)>>>2)+1|0,e=d,o=t[s>>2]|0;do t[o>>2]=t[e>>2],o=(t[s>>2]|0)+4|0,t[s>>2]=o,e=e+4|0;while((e|0)!=(l|0));t[n>>2]=d+(r<<2)}}function t0(){_l()}function g0(){var e=0;return e=Tt(4)|0,Kr(e),e|0}function Kr(e){e=e|0,t[e>>2]=a0()|0}function _0(e){e=e|0,e|0&&(Gi(e),Ve(e))}function Gi(e){e=e|0,V0(t[e>>2]|0)}function fo(e,n,r){e=e|0,n=n|0,r=r|0,J0(t[e>>2]|0,n,r)}function x0(e,n){e=e|0,n=w(n),ki(t[e>>2]|0,n)}function Xu(e,n){return e=e|0,n=n|0,fn(t[e>>2]|0,n)|0}function Z0(){var e=0;return e=Tt(8)|0,df(e,0),e|0}function df(e,n){e=e|0,n=n|0,n?n=I0(t[n>>2]|0)|0:n=qu()|0,t[e>>2]=n,t[e+4>>2]=0,Bs(n,e)}function Ba(e){e=e|0;var n=0;return n=Tt(8)|0,df(n,e),n|0}function Oc(e){e=e|0,e|0&&(mu(e),Ve(e))}function mu(e){e=e|0;var n=0;Wu(t[e>>2]|0),n=e+4|0,e=t[n>>2]|0,t[n>>2]=0,e|0&&(Ju(e),Ve(e))}function Ju(e){e=e|0,ei(e)}function ei(e){e=e|0,e=t[e>>2]|0,e|0&&ju(e|0)}function Yf(e){return e=e|0,Vu(e)|0}function pf(e){e=e|0;var n=0,r=0;r=e+4|0,n=t[r>>2]|0,t[r>>2]=0,n|0&&(Ju(n),Ve(n)),Do(t[e>>2]|0)}function ja(e,n){e=e|0,n=n|0,Gu(t[e>>2]|0,t[n>>2]|0)}function Ua(e,n){e=e|0,n=n|0,W(t[e>>2]|0,n)}function Ic(e,n,r){e=e|0,n=n|0,r=+r,yn(t[e>>2]|0,n,w(r))}function vu(e,n,r){e=e|0,n=n|0,r=+r,sn(t[e>>2]|0,n,w(r))}function $f(e,n){e=e|0,n=n|0,R(t[e>>2]|0,n)}function gu(e,n){e=e|0,n=n|0,H(t[e>>2]|0,n)}function co(e,n){e=e|0,n=n|0,ue(t[e>>2]|0,n)}function qa(e,n){e=e|0,n=n|0,M0(t[e>>2]|0,n)}function Ws(e,n){e=e|0,n=n|0,Fe(t[e>>2]|0,n)}function za(e,n){e=e|0,n=n|0,Lr(t[e>>2]|0,n)}function Pc(e,n,r){e=e|0,n=n|0,r=+r,rn(t[e>>2]|0,n,w(r))}function Qu(e,n,r){e=e|0,n=n|0,r=+r,Hn(t[e>>2]|0,n,w(r))}function Mc(e,n){e=e|0,n=n|0,Cr(t[e>>2]|0,n)}function Fc(e,n){e=e|0,n=n|0,K(t[e>>2]|0,n)}function Lc(e,n){e=e|0,n=n|0,je(t[e>>2]|0,n)}function Kf(e,n){e=e|0,n=+n,rt(t[e>>2]|0,w(n))}function Tl(e,n){e=e|0,n=+n,wt(t[e>>2]|0,w(n))}function xl(e,n){e=e|0,n=+n,lt(t[e>>2]|0,w(n))}function hf(e,n){e=e|0,n=+n,st(t[e>>2]|0,w(n))}function xo(e,n){e=e|0,n=+n,xt(t[e>>2]|0,w(n))}function mf(e,n){e=e|0,n=+n,Qt(t[e>>2]|0,w(n))}function Wa(e,n){e=e|0,n=+n,Cn(t[e>>2]|0,w(n))}function ti(e){e=e|0,bn(t[e>>2]|0)}function Hs(e,n){e=e|0,n=+n,h0(t[e>>2]|0,w(n))}function mi(e,n){e=e|0,n=+n,ci(t[e>>2]|0,w(n))}function vi(e){e=e|0,xi(t[e>>2]|0)}function Xf(e,n){e=e|0,n=+n,qr(t[e>>2]|0,w(n))}function Rc(e,n){e=e|0,n=+n,Eo(t[e>>2]|0,w(n))}function Jf(e,n){e=e|0,n=+n,wl(t[e>>2]|0,w(n))}function ao(e,n){e=e|0,n=+n,js(t[e>>2]|0,w(n))}function $o(e,n){e=e|0,n=+n,du(t[e>>2]|0,w(n))}function kl(e,n){e=e|0,n=+n,Yu(t[e>>2]|0,w(n))}function Nc(e,n){e=e|0,n=+n,oo(t[e>>2]|0,w(n))}function Al(e,n){e=e|0,n=+n,Hi(t[e>>2]|0,w(n))}function vf(e,n){e=e|0,n=+n,F0(t[e>>2]|0,w(n))}function Qf(e,n,r){e=e|0,n=n|0,r=+r,ft(t[e>>2]|0,n,w(r))}function k0(e,n,r){e=e|0,n=n|0,r=+r,He(t[e>>2]|0,n,w(r))}function v(e,n,r){e=e|0,n=n|0,r=+r,Qe(t[e>>2]|0,n,w(r))}function m(e){return e=e|0,ve(t[e>>2]|0)|0}function S(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;o=h,h=h+16|0,s=o,ar(s,t[n>>2]|0,r),O(e,s),h=o}function O(e,n){e=e|0,n=n|0,M(e,t[n+4>>2]|0,+w(D[n>>2]))}function M(e,n,r){e=e|0,n=n|0,r=+r,t[e>>2]=n,L[e+8>>3]=r}function b(e){return e=e|0,U(t[e>>2]|0)|0}function ee(e){return e=e|0,fe(t[e>>2]|0)|0}function Ye(e){return e=e|0,de(t[e>>2]|0)|0}function Ze(e){return e=e|0,au(t[e>>2]|0)|0}function ut(e){return e=e|0,Ge(t[e>>2]|0)|0}function In(e){return e=e|0,F(t[e>>2]|0)|0}function A0(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;o=h,h=h+16|0,s=o,d0(s,t[n>>2]|0,r),O(e,s),h=o}function jr(e){return e=e|0,xe(t[e>>2]|0)|0}function gi(e){return e=e|0,Xe(t[e>>2]|0)|0}function po(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,Rt(o,t[n>>2]|0),O(e,o),h=r}function _i(e){return e=e|0,+ +w(yl(t[e>>2]|0))}function Re(e){return e=e|0,+ +w(cu(t[e>>2]|0))}function Ce(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,p0(o,t[n>>2]|0),O(e,o),h=r}function ze(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,E0(o,t[n>>2]|0),O(e,o),h=r}function Et(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,So(o,t[n>>2]|0),O(e,o),h=r}function on(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,Dl(o,t[n>>2]|0),O(e,o),h=r}function sr(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,Us(o,t[n>>2]|0),O(e,o),h=r}function mn(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,qs(o,t[n>>2]|0),O(e,o),h=r}function pr(e){return e=e|0,+ +w(Gr(t[e>>2]|0))}function Hr(e,n){return e=e|0,n=n|0,+ +w(St(t[e>>2]|0,n))}function Vn(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;o=h,h=h+16|0,s=o,Ne(s,t[n>>2]|0,r),O(e,s),h=o}function ni(e,n,r){e=e|0,n=n|0,r=r|0,Ns(t[e>>2]|0,t[n>>2]|0,r)}function Zf(e,n){e=e|0,n=n|0,D0(t[e>>2]|0,t[n>>2]|0)}function Pm(e){return e=e|0,fi(t[e>>2]|0)|0}function Ha(e){return e=e|0,e=nr(t[e>>2]|0)|0,e?e=Yf(e)|0:e=0,e|0}function vd(e,n){return e=e|0,n=n|0,e=e0(t[e>>2]|0,n)|0,e?e=Yf(e)|0:e=0,e|0}function gd(e,n){e=e|0,n=n|0;var r=0,o=0;o=Tt(4)|0,ba(o,n),r=e+4|0,n=t[r>>2]|0,t[r>>2]=o,n|0&&(Ju(n),Ve(n)),bu(t[e>>2]|0,1)}function ba(e,n){e=e|0,n=n|0,Oo(e,n)}function Bc(e,n,r,o,s,l){e=e|0,n=n|0,r=w(r),o=o|0,s=w(s),l=l|0;var d=0,_=0;d=h,h=h+16|0,_=d,Mm(_,Vu(n)|0,+r,o,+s,l),D[e>>2]=w(+L[_>>3]),D[e+4>>2]=w(+L[_+8>>3]),h=d}function Mm(e,n,r,o,s,l){e=e|0,n=n|0,r=+r,o=o|0,s=+s,l=l|0;var d=0,_=0,y=0,k=0,T=0;d=h,h=h+32|0,T=d+8|0,k=d+20|0,y=d,_=d+16|0,L[T>>3]=r,t[k>>2]=o,L[y>>3]=s,t[_>>2]=l,_d(e,t[n+4>>2]|0,T,k,y,_),h=d}function _d(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0;var d=0,_=0;d=h,h=h+16|0,_=d,Zo(_),n=Oi(n)|0,Fm(e,n,+L[r>>3],t[o>>2]|0,+L[s>>3],t[l>>2]|0),eu(_),h=d}function Oi(e){return e=e|0,t[e>>2]|0}function Fm(e,n,r,o,s,l){e=e|0,n=n|0,r=+r,o=o|0,s=+s,l=l|0;var d=0;d=ko(yd()|0)|0,r=+Ko(r),o=jc(o)|0,s=+Ko(s),Ga(e,ro(0,d|0,n|0,+r,o|0,+s,jc(l)|0)|0)}function yd(){var e=0;return c[7608]|0||(Ed(9120),e=7608,t[e>>2]=1,t[e+4>>2]=0),9120}function ko(e){return e=e|0,t[e+8>>2]|0}function Ko(e){return e=+e,+ +Ol(e)}function jc(e){return e=e|0,Dd(e)|0}function Ga(e,n){e=e|0,n=n|0;var r=0,o=0,s=0;s=h,h=h+32|0,r=s,o=n,o&1?(Lm(r,0),c0(o|0,r|0)|0,Va(e,r),Wn(r)):(t[e>>2]=t[n>>2],t[e+4>>2]=t[n+4>>2],t[e+8>>2]=t[n+8>>2],t[e+12>>2]=t[n+12>>2]),h=s}function Lm(e,n){e=e|0,n=n|0,wd(e,n),t[e+8>>2]=0,c[e+24>>0]=0}function Va(e,n){e=e|0,n=n|0,n=n+8|0,t[e>>2]=t[n>>2],t[e+4>>2]=t[n+4>>2],t[e+8>>2]=t[n+8>>2],t[e+12>>2]=t[n+12>>2]}function Wn(e){e=e|0,c[e+24>>0]=0}function wd(e,n){e=e|0,n=n|0,t[e>>2]=n}function Dd(e){return e=e|0,e|0}function Ol(e){return e=+e,+e}function Ed(e){e=e|0,Ao(e,Rm()|0,4)}function Rm(){return 1064}function Ao(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r,t[e+8>>2]=hl(n|0,r+1|0)|0}function Oo(e,n){e=e|0,n=n|0,n=t[n>>2]|0,t[e>>2]=n,qi(n|0)}function Nm(e){e=e|0;var n=0,r=0;r=e+4|0,n=t[r>>2]|0,t[r>>2]=0,n|0&&(Ju(n),Ve(n)),bu(t[e>>2]|0,0)}function Uc(e){e=e|0,rr(t[e>>2]|0)}function Ya(e){return e=e|0,Go(t[e>>2]|0)|0}function Sd(e,n,r,o){e=e|0,n=+n,r=+r,o=o|0,Yr(t[e>>2]|0,w(n),w(r),o)}function Cd(e){return e=e|0,+ +w(ir(t[e>>2]|0))}function ho(e){return e=e|0,+ +w(Y0(t[e>>2]|0))}function bs(e){return e=e|0,+ +w(L0(t[e>>2]|0))}function $a(e){return e=e|0,+ +w(Co(t[e>>2]|0))}function Td(e){return e=e|0,+ +w($u(t[e>>2]|0))}function qc(e){return e=e|0,+ +w(Vo(t[e>>2]|0))}function xd(e,n){e=e|0,n=n|0,L[e>>3]=+w(ir(t[n>>2]|0)),L[e+8>>3]=+w(Y0(t[n>>2]|0)),L[e+16>>3]=+w(L0(t[n>>2]|0)),L[e+24>>3]=+w(Co(t[n>>2]|0)),L[e+32>>3]=+w($u(t[n>>2]|0)),L[e+40>>3]=+w(Vo(t[n>>2]|0))}function Ka(e,n){return e=e|0,n=n|0,+ +w(Rr(t[e>>2]|0,n))}function kd(e,n){return e=e|0,n=n|0,+ +w(Jn(t[e>>2]|0,n))}function Xa(e,n){return e=e|0,n=n|0,+ +w(ai(t[e>>2]|0,n))}function Ja(){return Rs()|0}function Gs(){Bm(),Vs(),Ad(),Od(),Qa(),jm()}function Bm(){hO(11713,4938,1)}function Vs(){FA(10448)}function Ad(){hA(10408)}function Od(){Bk(10324)}function Qa(){Gx(10096)}function jm(){Um(9132)}function Um(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0,Pe=0,ke=0,qe=0,pe=0,_e=0,vt=0,Ln=0,Ht=0,It=0,gn=0,Pn=0,zt=0,Dr=0,Ki=0,Xi=0,Ji=0,Ro=0,kf=0,Af=0,Cu=0,Of=0,Js=0,Qs=0,If=0,Pf=0,Mf=0,Kn=0,Tu=0,Ff=0,us=0,Lf=0,Rf=0,Zs=0,el=0,ss=0,Fi=0,nu=0,go=0,xu=0,jl=0,Ul=0,tl=0,ql=0,zl=0,Li=0,Di=0,ku=0,xr=0,Wl=0,Qi=0,ls=0,Zi=0,fs=0,Hl=0,bl=0,cs=0,Ri=0,Au=0,Gl=0,Vl=0,Yl=0,En=0,br=0,Ei=0,eo=0,Ni=0,xn=0,Vt=0,Ou=0;n=h,h=h+672|0,r=n+656|0,Ou=n+648|0,Vt=n+640|0,xn=n+632|0,Ni=n+624|0,eo=n+616|0,Ei=n+608|0,br=n+600|0,En=n+592|0,Yl=n+584|0,Vl=n+576|0,Gl=n+568|0,Au=n+560|0,Ri=n+552|0,cs=n+544|0,bl=n+536|0,Hl=n+528|0,fs=n+520|0,Zi=n+512|0,ls=n+504|0,Qi=n+496|0,Wl=n+488|0,xr=n+480|0,ku=n+472|0,Di=n+464|0,Li=n+456|0,zl=n+448|0,ql=n+440|0,tl=n+432|0,Ul=n+424|0,jl=n+416|0,xu=n+408|0,go=n+400|0,nu=n+392|0,Fi=n+384|0,ss=n+376|0,el=n+368|0,Zs=n+360|0,Rf=n+352|0,Lf=n+344|0,us=n+336|0,Ff=n+328|0,Tu=n+320|0,Kn=n+312|0,Mf=n+304|0,Pf=n+296|0,If=n+288|0,Qs=n+280|0,Js=n+272|0,Of=n+264|0,Cu=n+256|0,Af=n+248|0,kf=n+240|0,Ro=n+232|0,Ji=n+224|0,Xi=n+216|0,Ki=n+208|0,Dr=n+200|0,zt=n+192|0,Pn=n+184|0,gn=n+176|0,It=n+168|0,Ht=n+160|0,Ln=n+152|0,vt=n+144|0,_e=n+136|0,pe=n+128|0,qe=n+120|0,ke=n+112|0,Pe=n+104|0,ie=n+96|0,le=n+88|0,we=n+80|0,q=n+72|0,P=n+64|0,T=n+56|0,k=n+48|0,y=n+40|0,_=n+32|0,d=n+24|0,l=n+16|0,s=n+8|0,o=n,qm(e,3646),Id(e,3651,2)|0,Pd(e,3665,2)|0,zm(e,3682,18)|0,t[Ou>>2]=19,t[Ou+4>>2]=0,t[r>>2]=t[Ou>>2],t[r+4>>2]=t[Ou+4>>2],gf(e,3690,r)|0,t[Vt>>2]=1,t[Vt+4>>2]=0,t[r>>2]=t[Vt>>2],t[r+4>>2]=t[Vt+4>>2],Md(e,3696,r)|0,t[xn>>2]=2,t[xn+4>>2]=0,t[r>>2]=t[xn>>2],t[r+4>>2]=t[xn+4>>2],Xr(e,3706,r)|0,t[Ni>>2]=1,t[Ni+4>>2]=0,t[r>>2]=t[Ni>>2],t[r+4>>2]=t[Ni+4>>2],yi(e,3722,r)|0,t[eo>>2]=2,t[eo+4>>2]=0,t[r>>2]=t[eo>>2],t[r+4>>2]=t[eo+4>>2],yi(e,3734,r)|0,t[Ei>>2]=3,t[Ei+4>>2]=0,t[r>>2]=t[Ei>>2],t[r+4>>2]=t[Ei+4>>2],Xr(e,3753,r)|0,t[br>>2]=4,t[br+4>>2]=0,t[r>>2]=t[br>>2],t[r+4>>2]=t[br+4>>2],Xr(e,3769,r)|0,t[En>>2]=5,t[En+4>>2]=0,t[r>>2]=t[En>>2],t[r+4>>2]=t[En+4>>2],Xr(e,3783,r)|0,t[Yl>>2]=6,t[Yl+4>>2]=0,t[r>>2]=t[Yl>>2],t[r+4>>2]=t[Yl+4>>2],Xr(e,3796,r)|0,t[Vl>>2]=7,t[Vl+4>>2]=0,t[r>>2]=t[Vl>>2],t[r+4>>2]=t[Vl+4>>2],Xr(e,3813,r)|0,t[Gl>>2]=8,t[Gl+4>>2]=0,t[r>>2]=t[Gl>>2],t[r+4>>2]=t[Gl+4>>2],Xr(e,3825,r)|0,t[Au>>2]=3,t[Au+4>>2]=0,t[r>>2]=t[Au>>2],t[r+4>>2]=t[Au+4>>2],yi(e,3843,r)|0,t[Ri>>2]=4,t[Ri+4>>2]=0,t[r>>2]=t[Ri>>2],t[r+4>>2]=t[Ri+4>>2],yi(e,3853,r)|0,t[cs>>2]=9,t[cs+4>>2]=0,t[r>>2]=t[cs>>2],t[r+4>>2]=t[cs+4>>2],Xr(e,3870,r)|0,t[bl>>2]=10,t[bl+4>>2]=0,t[r>>2]=t[bl>>2],t[r+4>>2]=t[bl+4>>2],Xr(e,3884,r)|0,t[Hl>>2]=11,t[Hl+4>>2]=0,t[r>>2]=t[Hl>>2],t[r+4>>2]=t[Hl+4>>2],Xr(e,3896,r)|0,t[fs>>2]=1,t[fs+4>>2]=0,t[r>>2]=t[fs>>2],t[r+4>>2]=t[fs+4>>2],j0(e,3907,r)|0,t[Zi>>2]=2,t[Zi+4>>2]=0,t[r>>2]=t[Zi>>2],t[r+4>>2]=t[Zi+4>>2],j0(e,3915,r)|0,t[ls>>2]=3,t[ls+4>>2]=0,t[r>>2]=t[ls>>2],t[r+4>>2]=t[ls+4>>2],j0(e,3928,r)|0,t[Qi>>2]=4,t[Qi+4>>2]=0,t[r>>2]=t[Qi>>2],t[r+4>>2]=t[Qi+4>>2],j0(e,3948,r)|0,t[Wl>>2]=5,t[Wl+4>>2]=0,t[r>>2]=t[Wl>>2],t[r+4>>2]=t[Wl+4>>2],j0(e,3960,r)|0,t[xr>>2]=6,t[xr+4>>2]=0,t[r>>2]=t[xr>>2],t[r+4>>2]=t[xr+4>>2],j0(e,3974,r)|0,t[ku>>2]=7,t[ku+4>>2]=0,t[r>>2]=t[ku>>2],t[r+4>>2]=t[ku+4>>2],j0(e,3983,r)|0,t[Di>>2]=20,t[Di+4>>2]=0,t[r>>2]=t[Di>>2],t[r+4>>2]=t[Di+4>>2],gf(e,3999,r)|0,t[Li>>2]=8,t[Li+4>>2]=0,t[r>>2]=t[Li>>2],t[r+4>>2]=t[Li+4>>2],j0(e,4012,r)|0,t[zl>>2]=9,t[zl+4>>2]=0,t[r>>2]=t[zl>>2],t[r+4>>2]=t[zl+4>>2],j0(e,4022,r)|0,t[ql>>2]=21,t[ql+4>>2]=0,t[r>>2]=t[ql>>2],t[r+4>>2]=t[ql+4>>2],gf(e,4039,r)|0,t[tl>>2]=10,t[tl+4>>2]=0,t[r>>2]=t[tl>>2],t[r+4>>2]=t[tl+4>>2],j0(e,4053,r)|0,t[Ul>>2]=11,t[Ul+4>>2]=0,t[r>>2]=t[Ul>>2],t[r+4>>2]=t[Ul+4>>2],j0(e,4065,r)|0,t[jl>>2]=12,t[jl+4>>2]=0,t[r>>2]=t[jl>>2],t[r+4>>2]=t[jl+4>>2],j0(e,4084,r)|0,t[xu>>2]=13,t[xu+4>>2]=0,t[r>>2]=t[xu>>2],t[r+4>>2]=t[xu+4>>2],j0(e,4097,r)|0,t[go>>2]=14,t[go+4>>2]=0,t[r>>2]=t[go>>2],t[r+4>>2]=t[go+4>>2],j0(e,4117,r)|0,t[nu>>2]=15,t[nu+4>>2]=0,t[r>>2]=t[nu>>2],t[r+4>>2]=t[nu+4>>2],j0(e,4129,r)|0,t[Fi>>2]=16,t[Fi+4>>2]=0,t[r>>2]=t[Fi>>2],t[r+4>>2]=t[Fi+4>>2],j0(e,4148,r)|0,t[ss>>2]=17,t[ss+4>>2]=0,t[r>>2]=t[ss>>2],t[r+4>>2]=t[ss+4>>2],j0(e,4161,r)|0,t[el>>2]=18,t[el+4>>2]=0,t[r>>2]=t[el>>2],t[r+4>>2]=t[el+4>>2],j0(e,4181,r)|0,t[Zs>>2]=5,t[Zs+4>>2]=0,t[r>>2]=t[Zs>>2],t[r+4>>2]=t[Zs+4>>2],yi(e,4196,r)|0,t[Rf>>2]=6,t[Rf+4>>2]=0,t[r>>2]=t[Rf>>2],t[r+4>>2]=t[Rf+4>>2],yi(e,4206,r)|0,t[Lf>>2]=7,t[Lf+4>>2]=0,t[r>>2]=t[Lf>>2],t[r+4>>2]=t[Lf+4>>2],yi(e,4217,r)|0,t[us>>2]=3,t[us+4>>2]=0,t[r>>2]=t[us>>2],t[r+4>>2]=t[us+4>>2],Zu(e,4235,r)|0,t[Ff>>2]=1,t[Ff+4>>2]=0,t[r>>2]=t[Ff>>2],t[r+4>>2]=t[Ff+4>>2],_f(e,4251,r)|0,t[Tu>>2]=4,t[Tu+4>>2]=0,t[r>>2]=t[Tu>>2],t[r+4>>2]=t[Tu+4>>2],Zu(e,4263,r)|0,t[Kn>>2]=5,t[Kn+4>>2]=0,t[r>>2]=t[Kn>>2],t[r+4>>2]=t[Kn+4>>2],Zu(e,4279,r)|0,t[Mf>>2]=6,t[Mf+4>>2]=0,t[r>>2]=t[Mf>>2],t[r+4>>2]=t[Mf+4>>2],Zu(e,4293,r)|0,t[Pf>>2]=7,t[Pf+4>>2]=0,t[r>>2]=t[Pf>>2],t[r+4>>2]=t[Pf+4>>2],Zu(e,4306,r)|0,t[If>>2]=8,t[If+4>>2]=0,t[r>>2]=t[If>>2],t[r+4>>2]=t[If+4>>2],Zu(e,4323,r)|0,t[Qs>>2]=9,t[Qs+4>>2]=0,t[r>>2]=t[Qs>>2],t[r+4>>2]=t[Qs+4>>2],Zu(e,4335,r)|0,t[Js>>2]=2,t[Js+4>>2]=0,t[r>>2]=t[Js>>2],t[r+4>>2]=t[Js+4>>2],_f(e,4353,r)|0,t[Of>>2]=12,t[Of+4>>2]=0,t[r>>2]=t[Of>>2],t[r+4>>2]=t[Of+4>>2],Io(e,4363,r)|0,t[Cu>>2]=1,t[Cu+4>>2]=0,t[r>>2]=t[Cu>>2],t[r+4>>2]=t[Cu+4>>2],_u(e,4376,r)|0,t[Af>>2]=2,t[Af+4>>2]=0,t[r>>2]=t[Af>>2],t[r+4>>2]=t[Af+4>>2],_u(e,4388,r)|0,t[kf>>2]=13,t[kf+4>>2]=0,t[r>>2]=t[kf>>2],t[r+4>>2]=t[kf+4>>2],Io(e,4402,r)|0,t[Ro>>2]=14,t[Ro+4>>2]=0,t[r>>2]=t[Ro>>2],t[r+4>>2]=t[Ro+4>>2],Io(e,4411,r)|0,t[Ji>>2]=15,t[Ji+4>>2]=0,t[r>>2]=t[Ji>>2],t[r+4>>2]=t[Ji+4>>2],Io(e,4421,r)|0,t[Xi>>2]=16,t[Xi+4>>2]=0,t[r>>2]=t[Xi>>2],t[r+4>>2]=t[Xi+4>>2],Io(e,4433,r)|0,t[Ki>>2]=17,t[Ki+4>>2]=0,t[r>>2]=t[Ki>>2],t[r+4>>2]=t[Ki+4>>2],Io(e,4446,r)|0,t[Dr>>2]=18,t[Dr+4>>2]=0,t[r>>2]=t[Dr>>2],t[r+4>>2]=t[Dr+4>>2],Io(e,4458,r)|0,t[zt>>2]=3,t[zt+4>>2]=0,t[r>>2]=t[zt>>2],t[r+4>>2]=t[zt+4>>2],_u(e,4471,r)|0,t[Pn>>2]=1,t[Pn+4>>2]=0,t[r>>2]=t[Pn>>2],t[r+4>>2]=t[Pn+4>>2],ec(e,4486,r)|0,t[gn>>2]=10,t[gn+4>>2]=0,t[r>>2]=t[gn>>2],t[r+4>>2]=t[gn+4>>2],Zu(e,4496,r)|0,t[It>>2]=11,t[It+4>>2]=0,t[r>>2]=t[It>>2],t[r+4>>2]=t[It+4>>2],Zu(e,4508,r)|0,t[Ht>>2]=3,t[Ht+4>>2]=0,t[r>>2]=t[Ht>>2],t[r+4>>2]=t[Ht+4>>2],_f(e,4519,r)|0,t[Ln>>2]=4,t[Ln+4>>2]=0,t[r>>2]=t[Ln>>2],t[r+4>>2]=t[Ln+4>>2],Wm(e,4530,r)|0,t[vt>>2]=19,t[vt+4>>2]=0,t[r>>2]=t[vt>>2],t[r+4>>2]=t[vt+4>>2],Fd(e,4542,r)|0,t[_e>>2]=12,t[_e+4>>2]=0,t[r>>2]=t[_e>>2],t[r+4>>2]=t[_e+4>>2],yf(e,4554,r)|0,t[pe>>2]=13,t[pe+4>>2]=0,t[r>>2]=t[pe>>2],t[r+4>>2]=t[pe+4>>2],tc(e,4568,r)|0,t[qe>>2]=2,t[qe+4>>2]=0,t[r>>2]=t[qe>>2],t[r+4>>2]=t[qe+4>>2],Hm(e,4578,r)|0,t[ke>>2]=20,t[ke+4>>2]=0,t[r>>2]=t[ke>>2],t[r+4>>2]=t[ke+4>>2],Ld(e,4587,r)|0,t[Pe>>2]=22,t[Pe+4>>2]=0,t[r>>2]=t[Pe>>2],t[r+4>>2]=t[Pe+4>>2],gf(e,4602,r)|0,t[ie>>2]=23,t[ie+4>>2]=0,t[r>>2]=t[ie>>2],t[r+4>>2]=t[ie+4>>2],gf(e,4619,r)|0,t[le>>2]=14,t[le+4>>2]=0,t[r>>2]=t[le>>2],t[r+4>>2]=t[le+4>>2],Rd(e,4629,r)|0,t[we>>2]=1,t[we+4>>2]=0,t[r>>2]=t[we>>2],t[r+4>>2]=t[we+4>>2],zc(e,4637,r)|0,t[q>>2]=4,t[q+4>>2]=0,t[r>>2]=t[q>>2],t[r+4>>2]=t[q+4>>2],_u(e,4653,r)|0,t[P>>2]=5,t[P+4>>2]=0,t[r>>2]=t[P>>2],t[r+4>>2]=t[P+4>>2],_u(e,4669,r)|0,t[T>>2]=6,t[T+4>>2]=0,t[r>>2]=t[T>>2],t[r+4>>2]=t[T+4>>2],_u(e,4686,r)|0,t[k>>2]=7,t[k+4>>2]=0,t[r>>2]=t[k>>2],t[r+4>>2]=t[k+4>>2],_u(e,4701,r)|0,t[y>>2]=8,t[y+4>>2]=0,t[r>>2]=t[y>>2],t[r+4>>2]=t[y+4>>2],_u(e,4719,r)|0,t[_>>2]=9,t[_+4>>2]=0,t[r>>2]=t[_>>2],t[r+4>>2]=t[_+4>>2],_u(e,4736,r)|0,t[d>>2]=21,t[d+4>>2]=0,t[r>>2]=t[d>>2],t[r+4>>2]=t[d+4>>2],Nd(e,4754,r)|0,t[l>>2]=2,t[l+4>>2]=0,t[r>>2]=t[l>>2],t[r+4>>2]=t[l+4>>2],ec(e,4772,r)|0,t[s>>2]=3,t[s+4>>2]=0,t[r>>2]=t[s>>2],t[r+4>>2]=t[s+4>>2],ec(e,4790,r)|0,t[o>>2]=4,t[o+4>>2]=0,t[r>>2]=t[o>>2],t[r+4>>2]=t[o+4>>2],ec(e,4808,r)|0,h=n}function qm(e,n){e=e|0,n=n|0;var r=0;r=Nx()|0,t[e>>2]=r,Bx(r,n),Cf(t[e>>2]|0)}function Id(e,n,r){return e=e|0,n=n|0,r=r|0,Ex(e,Zn(n)|0,r,0),e|0}function Pd(e,n,r){return e=e|0,n=n|0,r=r|0,ux(e,Zn(n)|0,r,0),e|0}function zm(e,n,r){return e=e|0,n=n|0,r=r|0,V9(e,Zn(n)|0,r,0),e|0}function gf(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],I9(e,n,s),h=o,e|0}function Md(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],vo(e,n,s),h=o,e|0}function Xr(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],a(e,n,s),h=o,e|0}function yi(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],n4(e,n,s),h=o,e|0}function j0(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],b_(e,n,s),h=o,e|0}function Zu(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],L_(e,n,s),h=o,e|0}function _f(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Hp(e,n,s),h=o,e|0}function Io(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],e_(e,n,s),h=o,e|0}function _u(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Ip(e,n,s),h=o,e|0}function ec(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Ng(e,n,s),h=o,e|0}function Wm(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],l0(e,n,s),h=o,e|0}function Fd(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],hg(e,n,s),h=o,e|0}function yf(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],sg(e,n,s),h=o,e|0}function tc(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Kv(e,n,s),h=o,e|0}function Hm(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],y1(e,n,s),h=o,e|0}function Ld(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],wv(e,n,s),h=o,e|0}function Rd(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],fv(e,n,s),h=o,e|0}function zc(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Gd(e,n,s),h=o,e|0}function Nd(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Wc(e,n,s),h=o,e|0}function Wc(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Hc(e,r,s,1),h=o}function Zn(e){return e=e|0,e|0}function Hc(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=Za()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=Bd(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,bc(l,o)|0,o),h=s}function Za(){var e=0,n=0;if(c[7616]|0||(yu(9136),Bt(24,9136,Q|0)|0,n=7616,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9136)|0)){e=9136,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));yu(9136)}return 9136}function Bd(e){return e=e|0,0}function bc(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=Za()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],n1(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(jd(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function ur(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0;var d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0;d=h,h=h+32|0,q=d+24|0,P=d+20|0,y=d+16|0,T=d+12|0,k=d+8|0,_=d+4|0,we=d,t[P>>2]=n,t[y>>2]=r,t[T>>2]=o,t[k>>2]=s,t[_>>2]=l,l=e+28|0,t[we>>2]=t[l>>2],t[q>>2]=t[we>>2],e1(e+24|0,q,P,T,k,y,_)|0,t[l>>2]=t[t[l>>2]>>2],h=d}function e1(e,n,r,o,s,l,d){return e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,d=d|0,e=bm(n)|0,n=Tt(24)|0,t1(n+4|0,t[r>>2]|0,t[o>>2]|0,t[s>>2]|0,t[l>>2]|0,t[d>>2]|0),t[n>>2]=t[e>>2],t[e>>2]=n,n|0}function bm(e){return e=e|0,t[e>>2]|0}function t1(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,t[e>>2]=n,t[e+4>>2]=r,t[e+8>>2]=o,t[e+12>>2]=s,t[e+16>>2]=l}function Lt(e,n){return e=e|0,n=n|0,n|e|0}function n1(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function jd(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=Gm(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,Ud(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],n1(l,o,r),t[y>>2]=(t[y>>2]|0)+12,Vm(e,_),Ym(_),h=k;return}}function Gm(e){return e=e|0,357913941}function Ud(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function Vm(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Ym(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function yu(e){e=e|0,Gc(e)}function r1(e){e=e|0,i1(e+24|0)}function Dn(e){return e=e|0,t[e>>2]|0}function i1(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Gc(e){e=e|0;var n=0;n=An()|0,Nn(e,2,3,n,cn()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function An(){return 9228}function cn(){return 1140}function Vc(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0;return r=h,h=h+16|0,o=r+8|0,s=r,l=Il(e)|0,e=t[l+4>>2]|0,t[s>>2]=t[l>>2],t[s+4>>2]=e,t[o>>2]=t[s>>2],t[o+4>>2]=t[s+4>>2],n=$m(n,o)|0,h=r,n|0}function Nn(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,t[e>>2]=n,t[e+4>>2]=r,t[e+8>>2]=o,t[e+12>>2]=s,t[e+16>>2]=l}function Il(e){return e=e|0,(t[(Za()|0)+24>>2]|0)+(e*12|0)|0}function $m(e,n){e=e|0,n=n|0;var r=0,o=0,s=0;return s=h,h=h+48|0,o=s,r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),Bl[r&31](o,e),o=o1(o)|0,h=s,o|0}function o1(e){e=e|0;var n=0,r=0,o=0,s=0;return s=h,h=h+32|0,n=s+12|0,r=s,o=U0(u1()|0)|0,o?(s1(n,o),l1(r,n),qd(e,r),e=f1(n)|0):e=zd(e)|0,h=s,e|0}function u1(){var e=0;return c[7632]|0||(nc(9184),Bt(25,9184,Q|0)|0,e=7632,t[e>>2]=1,t[e+4>>2]=0),9184}function U0(e){return e=e|0,t[e+36>>2]|0}function s1(e,n){e=e|0,n=n|0,t[e>>2]=n,t[e+4>>2]=e,t[e+8>>2]=0}function l1(e,n){e=e|0,n=n|0,t[e>>2]=t[n>>2],t[e+4>>2]=t[n+4>>2],t[e+8>>2]=0}function qd(e,n){e=e|0,n=n|0,Ii(n,e,e+8|0,e+16|0,e+24|0,e+32|0,e+40|0)|0}function f1(e){return e=e|0,t[(t[e+4>>2]|0)+8>>2]|0}function zd(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0,y=0;y=h,h=h+16|0,r=y+4|0,o=y,s=Qo(8)|0,l=s,d=Tt(48)|0,_=d,n=_+48|0;do t[_>>2]=t[e>>2],_=_+4|0,e=e+4|0;while((_|0)<(n|0));return n=l+4|0,t[n>>2]=d,_=Tt(8)|0,d=t[n>>2]|0,t[o>>2]=0,t[r>>2]=t[o>>2],Wd(_,d,r),t[s>>2]=_,h=y,l|0}function Wd(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=Tt(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1092,t[r+12>>2]=n,t[e+4>>2]=r}function Km(e){e=e|0,da(e),Ve(e)}function Xm(e){e=e|0,e=t[e+12>>2]|0,e|0&&Ve(e)}function es(e){e=e|0,Ve(e)}function Ii(e,n,r,o,s,l,d){return e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,d=d|0,l=c1(t[e>>2]|0,n,r,o,s,l,d)|0,d=e+4|0,t[(t[d>>2]|0)+8>>2]=l,t[(t[d>>2]|0)+8>>2]|0}function c1(e,n,r,o,s,l,d){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,d=d|0;var _=0,y=0;return _=h,h=h+16|0,y=_,Zo(y),e=Oi(e)|0,d=Jm(e,+L[n>>3],+L[r>>3],+L[o>>3],+L[s>>3],+L[l>>3],+L[d>>3])|0,eu(y),h=_,d|0}function Jm(e,n,r,o,s,l,d){e=e|0,n=+n,r=+r,o=+o,s=+s,l=+l,d=+d;var _=0;return _=ko(a1()|0)|0,n=+Ko(n),r=+Ko(r),o=+Ko(o),s=+Ko(s),l=+Ko(l),xs(0,_|0,e|0,+n,+r,+o,+s,+l,+ +Ko(d))|0}function a1(){var e=0;return c[7624]|0||(Qm(9172),e=7624,t[e>>2]=1,t[e+4>>2]=0),9172}function Qm(e){e=e|0,Ao(e,Zm()|0,6)}function Zm(){return 1112}function nc(e){e=e|0,Ys(e)}function Hd(e){e=e|0,d1(e+24|0),bd(e+16|0)}function d1(e){e=e|0,tv(e)}function bd(e){e=e|0,ev(e)}function ev(e){e=e|0;var n=0,r=0;if(n=t[e>>2]|0,n|0)do r=n,n=t[n>>2]|0,Ve(r);while((n|0)!=0);t[e>>2]=0}function tv(e){e=e|0;var n=0,r=0;if(n=t[e>>2]|0,n|0)do r=n,n=t[n>>2]|0,Ve(r);while((n|0)!=0);t[e>>2]=0}function Ys(e){e=e|0;var n=0;t[e+16>>2]=0,t[e+20>>2]=0,n=e+24|0,t[n>>2]=0,t[e+28>>2]=n,t[e+36>>2]=0,c[e+40>>0]=0,c[e+41>>0]=0}function Gd(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Vd(e,r,s,0),h=o}function Vd(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=p1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=h1(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,Yd(l,o)|0,o),h=s}function p1(){var e=0,n=0;if(c[7640]|0||(Xo(9232),Bt(26,9232,Q|0)|0,n=7640,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9232)|0)){e=9232,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Xo(9232)}return 9232}function h1(e){return e=e|0,0}function Yd(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=p1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],wf(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(m1(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function wf(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function m1(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=$d(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,Kd(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],wf(l,o,r),t[y>>2]=(t[y>>2]|0)+12,Yc(e,_),Xd(_),h=k;return}}function $d(e){return e=e|0,357913941}function Kd(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function Yc(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Xd(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Xo(e){e=e|0,Jd(e)}function Pl(e){e=e|0,nv(e+24|0)}function nv(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Jd(e){e=e|0;var n=0;n=An()|0,Nn(e,2,1,n,rv()|0,3),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function rv(){return 1144}function iv(e,n,r,o,s){e=e|0,n=n|0,r=+r,o=+o,s=s|0;var l=0,d=0,_=0,y=0;l=h,h=h+16|0,d=l+8|0,_=l,y=ov(e)|0,e=t[y+4>>2]|0,t[_>>2]=t[y>>2],t[_+4>>2]=e,t[d>>2]=t[_>>2],t[d+4>>2]=t[_+4>>2],uv(n,d,r,o,s),h=l}function ov(e){return e=e|0,(t[(p1()|0)+24>>2]|0)+(e*12|0)|0}function uv(e,n,r,o,s){e=e|0,n=n|0,r=+r,o=+o,s=s|0;var l=0,d=0,_=0,y=0,k=0;k=h,h=h+16|0,d=k+2|0,_=k+1|0,y=k,l=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(l=t[(t[e>>2]|0)+l>>2]|0),wu(d,r),r=+Du(d,r),wu(_,o),o=+Du(_,o),ts(y,s),y=ns(y,s)|0,iD[l&1](e,r,o,y),h=k}function wu(e,n){e=e|0,n=+n}function Du(e,n){return e=e|0,n=+n,+ +lv(n)}function ts(e,n){e=e|0,n=n|0}function ns(e,n){return e=e|0,n=n|0,sv(n)|0}function sv(e){return e=e|0,e|0}function lv(e){return e=+e,+e}function fv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Qd(e,r,s,1),h=o}function Qd(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=$c()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=Zd(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,cv(l,o)|0,o),h=s}function $c(){var e=0,n=0;if(c[7648]|0||(np(9268),Bt(27,9268,Q|0)|0,n=7648,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9268)|0)){e=9268,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));np(9268)}return 9268}function Zd(e){return e=e|0,0}function cv(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=$c()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],ep(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(av(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function ep(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function av(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=tp(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,dv(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],ep(l,o,r),t[y>>2]=(t[y>>2]|0)+12,pv(e,_),hv(_),h=k;return}}function tp(e){return e=e|0,357913941}function dv(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function pv(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function hv(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function np(e){e=e|0,Po(e)}function mv(e){e=e|0,vv(e+24|0)}function vv(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Po(e){e=e|0;var n=0;n=An()|0,Nn(e,2,4,n,gv()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function gv(){return 1160}function _v(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0;return r=h,h=h+16|0,o=r+8|0,s=r,l=yv(e)|0,e=t[l+4>>2]|0,t[s>>2]=t[l>>2],t[s+4>>2]=e,t[o>>2]=t[s>>2],t[o+4>>2]=t[s+4>>2],n=rp(n,o)|0,h=r,n|0}function yv(e){return e=e|0,(t[($c()|0)+24>>2]|0)+(e*12|0)|0}function rp(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),ip(dc[r&31](e)|0)|0}function ip(e){return e=e|0,e&1|0}function wv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Dv(e,r,s,0),h=o}function Dv(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=v1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=g1(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,Ev(l,o)|0,o),h=s}function v1(){var e=0,n=0;if(c[7656]|0||(up(9304),Bt(28,9304,Q|0)|0,n=7656,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9304)|0)){e=9304,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));up(9304)}return 9304}function g1(e){return e=e|0,0}function Ev(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=v1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],op(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Sv(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function op(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function Sv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=Cv(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,Tv(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],op(l,o,r),t[y>>2]=(t[y>>2]|0)+12,xv(e,_),kv(_),h=k;return}}function Cv(e){return e=e|0,357913941}function Tv(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function xv(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function kv(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function up(e){e=e|0,Iv(e)}function Av(e){e=e|0,Ov(e+24|0)}function Ov(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Iv(e){e=e|0;var n=0;n=An()|0,Nn(e,2,5,n,Pv()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Pv(){return 1164}function Mv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,s=o+8|0,l=o,d=Fv(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Lv(n,s,r),h=o}function Fv(e){return e=e|0,(t[(v1()|0)+24>>2]|0)+(e*12|0)|0}function Lv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),$s(s,r),r=Ks(s,r)|0,Bl[o&31](e,r),Xs(s),h=l}function $s(e,n){e=e|0,n=n|0,Rv(e,n)}function Ks(e,n){return e=e|0,n=n|0,e|0}function Xs(e){e=e|0,Ju(e)}function Rv(e,n){e=e|0,n=n|0,_1(e,n)}function _1(e,n){e=e|0,n=n|0,t[e>>2]=n}function y1(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],sp(e,r,s,0),h=o}function sp(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=w1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=Nv(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,Bv(l,o)|0,o),h=s}function w1(){var e=0,n=0;if(c[7664]|0||(cp(9340),Bt(29,9340,Q|0)|0,n=7664,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9340)|0)){e=9340,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));cp(9340)}return 9340}function Nv(e){return e=e|0,0}function Bv(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=w1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],lp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(jv(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function lp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function jv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=Uv(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,qv(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],lp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,zv(e,_),fp(_),h=k;return}}function Uv(e){return e=e|0,357913941}function qv(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function zv(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function fp(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function cp(e){e=e|0,Hv(e)}function Kc(e){e=e|0,Wv(e+24|0)}function Wv(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Hv(e){e=e|0;var n=0;n=An()|0,Nn(e,2,4,n,bv()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function bv(){return 1180}function Gv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=Vv(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],r=Yv(n,s,r)|0,h=o,r|0}function Vv(e){return e=e|0,(t[(w1()|0)+24>>2]|0)+(e*12|0)|0}function Yv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;return l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),Ml(s,r),s=Fl(s,r)|0,s=Xc(J4[o&15](e,s)|0)|0,h=l,s|0}function Ml(e,n){e=e|0,n=n|0}function Fl(e,n){return e=e|0,n=n|0,$v(n)|0}function Xc(e){return e=e|0,e|0}function $v(e){return e=e|0,e|0}function Kv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Xv(e,r,s,0),h=o}function Xv(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=D1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=Jv(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,Qv(l,o)|0,o),h=s}function D1(){var e=0,n=0;if(c[7672]|0||(hp(9376),Bt(30,9376,Q|0)|0,n=7672,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9376)|0)){e=9376,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));hp(9376)}return 9376}function Jv(e){return e=e|0,0}function Qv(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=D1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],ap(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(dp(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function ap(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function dp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=pp(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,Zv(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],ap(l,o,r),t[y>>2]=(t[y>>2]|0)+12,eg(e,_),tg(_),h=k;return}}function pp(e){return e=e|0,357913941}function Zv(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function eg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function tg(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function hp(e){e=e|0,rg(e)}function Jc(e){e=e|0,ng(e+24|0)}function ng(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function rg(e){e=e|0;var n=0;n=An()|0,Nn(e,2,5,n,mp()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function mp(){return 1196}function ig(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0;return r=h,h=h+16|0,o=r+8|0,s=r,l=og(e)|0,e=t[l+4>>2]|0,t[s>>2]=t[l>>2],t[s+4>>2]=e,t[o>>2]=t[s>>2],t[o+4>>2]=t[s+4>>2],n=ug(n,o)|0,h=r,n|0}function og(e){return e=e|0,(t[(D1()|0)+24>>2]|0)+(e*12|0)|0}function ug(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),Xc(dc[r&31](e)|0)|0}function sg(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],lg(e,r,s,1),h=o}function lg(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=E1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=fg(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,cg(l,o)|0,o),h=s}function E1(){var e=0,n=0;if(c[7680]|0||(C1(9412),Bt(31,9412,Q|0)|0,n=7680,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9412)|0)){e=9412,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));C1(9412)}return 9412}function fg(e){return e=e|0,0}function cg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=E1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],rc(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(ag(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function rc(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function ag(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=vp(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,gp(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],rc(l,o,r),t[y>>2]=(t[y>>2]|0)+12,S1(e,_),_p(_),h=k;return}}function vp(e){return e=e|0,357913941}function gp(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function S1(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function _p(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function C1(e){e=e|0,dg(e)}function yp(e){e=e|0,wp(e+24|0)}function wp(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function dg(e){e=e|0;var n=0;n=An()|0,Nn(e,2,6,n,Dp()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Dp(){return 1200}function pg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0;return r=h,h=h+16|0,o=r+8|0,s=r,l=Qc(e)|0,e=t[l+4>>2]|0,t[s>>2]=t[l>>2],t[s+4>>2]=e,t[o>>2]=t[s>>2],t[o+4>>2]=t[s+4>>2],n=Zc(n,o)|0,h=r,n|0}function Qc(e){return e=e|0,(t[(E1()|0)+24>>2]|0)+(e*12|0)|0}function Zc(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),ea(dc[r&31](e)|0)|0}function ea(e){return e=e|0,e|0}function hg(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],T1(e,r,s,0),h=o}function T1(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=ta()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=mg(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,vg(l,o)|0,o),h=s}function ta(){var e=0,n=0;if(c[7688]|0||(Sp(9448),Bt(32,9448,Q|0)|0,n=7688,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9448)|0)){e=9448,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Sp(9448)}return 9448}function mg(e){return e=e|0,0}function vg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=ta()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Ep(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(gg(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Ep(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function gg(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=_g(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,yg(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Ep(l,o,r),t[y>>2]=(t[y>>2]|0)+12,wg(e,_),Dg(_),h=k;return}}function _g(e){return e=e|0,357913941}function yg(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function wg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Dg(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Sp(e){e=e|0,Cg(e)}function Eg(e){e=e|0,Sg(e+24|0)}function Sg(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Cg(e){e=e|0;var n=0;n=An()|0,Nn(e,2,6,n,Mo()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Mo(){return 1204}function Tg(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,s=o+8|0,l=o,d=xg(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Ll(n,s,r),h=o}function xg(e){return e=e|0,(t[(ta()|0)+24>>2]|0)+(e*12|0)|0}function Ll(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),On(s,r),s=x1(s,r)|0,Bl[o&31](e,s),h=l}function On(e,n){e=e|0,n=n|0}function x1(e,n){return e=e|0,n=n|0,Vi(n)|0}function Vi(e){return e=e|0,e|0}function l0(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],kg(e,r,s,0),h=o}function kg(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=Eu()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=Ag(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,Og(l,o)|0,o),h=s}function Eu(){var e=0,n=0;if(c[7696]|0||(A1(9484),Bt(33,9484,Q|0)|0,n=7696,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9484)|0)){e=9484,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));A1(9484)}return 9484}function Ag(e){return e=e|0,0}function Og(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=Eu()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Cp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Ig(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Cp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function Ig(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=Pg(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,k1(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Cp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,Mg(e,_),rs(_),h=k;return}}function Pg(e){return e=e|0,357913941}function k1(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function Mg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function rs(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function A1(e){e=e|0,n0(e)}function na(e){e=e|0,Jr(e+24|0)}function Jr(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function n0(e){e=e|0;var n=0;n=An()|0,Nn(e,2,1,n,Tp()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Tp(){return 1212}function Fg(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;s=h,h=h+16|0,l=s+8|0,d=s,_=Lg(e)|0,e=t[_+4>>2]|0,t[d>>2]=t[_>>2],t[d+4>>2]=e,t[l>>2]=t[d>>2],t[l+4>>2]=t[d+4>>2],Rg(n,l,r,o),h=s}function Lg(e){return e=e|0,(t[(Eu()|0)+24>>2]|0)+(e*12|0)|0}function Rg(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;_=h,h=h+16|0,l=_+1|0,d=_,s=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(s=t[(t[e>>2]|0)+s>>2]|0),On(l,r),l=x1(l,r)|0,Ml(d,o),d=Fl(d,o)|0,X1[s&15](e,l,d),h=_}function Ng(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Bg(e,r,s,1),h=o}function Bg(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=O1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=xp(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,ic(l,o)|0,o),h=s}function O1(){var e=0,n=0;if(c[7704]|0||(Ap(9520),Bt(34,9520,Q|0)|0,n=7704,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9520)|0)){e=9520,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Ap(9520)}return 9520}function xp(e){return e=e|0,0}function ic(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=O1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],ra(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(jg(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function ra(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function jg(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=kp(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,ia(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],ra(l,o,r),t[y>>2]=(t[y>>2]|0)+12,mo(e,_),Df(_),h=k;return}}function kp(e){return e=e|0,357913941}function ia(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function mo(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Df(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Ap(e){e=e|0,zg(e)}function Ug(e){e=e|0,qg(e+24|0)}function qg(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function zg(e){e=e|0;var n=0;n=An()|0,Nn(e,2,1,n,Wg()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Wg(){return 1224}function Op(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;return s=h,h=h+16|0,l=s+8|0,d=s,_=is(e)|0,e=t[_+4>>2]|0,t[d>>2]=t[_>>2],t[d+4>>2]=e,t[l>>2]=t[d>>2],t[l+4>>2]=t[d+4>>2],o=+jn(n,l,r),h=s,+o}function is(e){return e=e|0,(t[(O1()|0)+24>>2]|0)+(e*12|0)|0}function jn(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),ts(s,r),s=ns(s,r)|0,d=+Ol(+uD[o&7](e,s)),h=l,+d}function Ip(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Fo(e,r,s,1),h=o}function Fo(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=oa()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=Hg(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,yr(l,o)|0,o),h=s}function oa(){var e=0,n=0;if(c[7712]|0||(Fp(9556),Bt(35,9556,Q|0)|0,n=7712,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9556)|0)){e=9556,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Fp(9556)}return 9556}function Hg(e){return e=e|0,0}function yr(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=oa()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Pp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Mp(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Pp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function Mp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=ua(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,bg(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Pp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,Gg(e,_),Vg(_),h=k;return}}function ua(e){return e=e|0,357913941}function bg(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function Gg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Vg(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Fp(e){e=e|0,Kg(e)}function Yg(e){e=e|0,$g(e+24|0)}function $g(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Kg(e){e=e|0;var n=0;n=An()|0,Nn(e,2,5,n,Xg()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Xg(){return 1232}function Jg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=Qg(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],r=+Zg(n,s),h=o,+r}function Qg(e){return e=e|0,(t[(oa()|0)+24>>2]|0)+(e*12|0)|0}function Zg(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),+ +Ol(+oD[r&15](e))}function e_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],t_(e,r,s,1),h=o}function t_(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=oc()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=n_(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,I1(l,o)|0,o),h=s}function oc(){var e=0,n=0;if(c[7720]|0||(Rp(9592),Bt(36,9592,Q|0)|0,n=7720,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9592)|0)){e=9592,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Rp(9592)}return 9592}function n_(e){return e=e|0,0}function I1(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=oc()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Lp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(r_(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Lp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function r_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=i_(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,q0(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Lp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,Yi(e,_),o_(_),h=k;return}}function i_(e){return e=e|0,357913941}function q0(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function Yi(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function o_(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Rp(e){e=e|0,s_(e)}function u_(e){e=e|0,Np(e+24|0)}function Np(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function s_(e){e=e|0;var n=0;n=An()|0,Nn(e,2,7,n,l_()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function l_(){return 1276}function f_(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0;return r=h,h=h+16|0,o=r+8|0,s=r,l=Bp(e)|0,e=t[l+4>>2]|0,t[s>>2]=t[l>>2],t[s+4>>2]=e,t[o>>2]=t[s>>2],t[o+4>>2]=t[s+4>>2],n=c_(n,o)|0,h=r,n|0}function Bp(e){return e=e|0,(t[(oc()|0)+24>>2]|0)+(e*12|0)|0}function c_(e,n){e=e|0,n=n|0;var r=0,o=0,s=0;return s=h,h=h+16|0,o=s,r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),Bl[r&31](o,e),o=jp(o)|0,h=s,o|0}function jp(e){e=e|0;var n=0,r=0,o=0,s=0;return s=h,h=h+32|0,n=s+12|0,r=s,o=U0(Up()|0)|0,o?(s1(n,o),l1(r,n),qp(e,r),e=f1(n)|0):e=zp(e)|0,h=s,e|0}function Up(){var e=0;return c[7736]|0||(Wp(9640),Bt(25,9640,Q|0)|0,e=7736,t[e>>2]=1,t[e+4>>2]=0),9640}function qp(e,n){e=e|0,n=n|0,Ef(n,e,e+8|0)|0}function zp(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0;return r=h,h=h+16|0,s=r+4|0,d=r,o=Qo(8)|0,n=o,_=Tt(16)|0,t[_>>2]=t[e>>2],t[_+4>>2]=t[e+4>>2],t[_+8>>2]=t[e+8>>2],t[_+12>>2]=t[e+12>>2],l=n+4|0,t[l>>2]=_,e=Tt(8)|0,l=t[l>>2]|0,t[d>>2]=0,t[s>>2]=t[d>>2],P1(e,l,s),t[o>>2]=e,h=r,n|0}function P1(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=Tt(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1244,t[r+12>>2]=n,t[e+4>>2]=r}function a_(e){e=e|0,da(e),Ve(e)}function d_(e){e=e|0,e=t[e+12>>2]|0,e|0&&Ve(e)}function p_(e){e=e|0,Ve(e)}function Ef(e,n,r){return e=e|0,n=n|0,r=r|0,n=h_(t[e>>2]|0,n,r)|0,r=e+4|0,t[(t[r>>2]|0)+8>>2]=n,t[(t[r>>2]|0)+8>>2]|0}function h_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;return o=h,h=h+16|0,s=o,Zo(s),e=Oi(e)|0,r=m_(e,t[n>>2]|0,+L[r>>3])|0,eu(s),h=o,r|0}function m_(e,n,r){e=e|0,n=n|0,r=+r;var o=0;return o=ko(v_()|0)|0,n=jc(n)|0,dl(0,o|0,e|0,n|0,+ +Ko(r))|0}function v_(){var e=0;return c[7728]|0||(g_(9628),e=7728,t[e>>2]=1,t[e+4>>2]=0),9628}function g_(e){e=e|0,Ao(e,__()|0,2)}function __(){return 1264}function Wp(e){e=e|0,Ys(e)}function Hp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],y_(e,r,s,1),h=o}function y_(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=M1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=w_(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,D_(l,o)|0,o),h=s}function M1(){var e=0,n=0;if(c[7744]|0||(Gp(9684),Bt(37,9684,Q|0)|0,n=7744,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9684)|0)){e=9684,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Gp(9684)}return 9684}function w_(e){return e=e|0,0}function D_(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=M1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],bp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(E_(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function bp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function E_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=S_(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,C_(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],bp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,T_(e,_),x_(_),h=k;return}}function S_(e){return e=e|0,357913941}function C_(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function T_(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function x_(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Gp(e){e=e|0,O_(e)}function k_(e){e=e|0,A_(e+24|0)}function A_(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function O_(e){e=e|0;var n=0;n=An()|0,Nn(e,2,5,n,I_()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function I_(){return 1280}function P_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=M_(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],r=F_(n,s,r)|0,h=o,r|0}function M_(e){return e=e|0,(t[(M1()|0)+24>>2]|0)+(e*12|0)|0}function F_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return d=h,h=h+32|0,s=d,l=d+16|0,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),ts(l,r),l=ns(l,r)|0,X1[o&15](s,e,l),l=jp(s)|0,h=d,l|0}function L_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],R_(e,r,s,1),h=o}function R_(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=F1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=N_(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,B_(l,o)|0,o),h=s}function F1(){var e=0,n=0;if(c[7752]|0||(Kp(9720),Bt(38,9720,Q|0)|0,n=7752,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9720)|0)){e=9720,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Kp(9720)}return 9720}function N_(e){return e=e|0,0}function B_(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=F1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Vp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(j_(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Vp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function j_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=L1(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,Yp(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Vp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,$p(e,_),U_(_),h=k;return}}function L1(e){return e=e|0,357913941}function Yp(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function $p(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function U_(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Kp(e){e=e|0,z_(e)}function q_(e){e=e|0,R1(e+24|0)}function R1(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function z_(e){e=e|0;var n=0;n=An()|0,Nn(e,2,8,n,W_()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function W_(){return 1288}function H_(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0;return r=h,h=h+16|0,o=r+8|0,s=r,l=$i(e)|0,e=t[l+4>>2]|0,t[s>>2]=t[l>>2],t[s+4>>2]=e,t[o>>2]=t[s>>2],t[o+4>>2]=t[s+4>>2],n=N1(n,o)|0,h=r,n|0}function $i(e){return e=e|0,(t[(F1()|0)+24>>2]|0)+(e*12|0)|0}function N1(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),Dd(dc[r&31](e)|0)|0}function b_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],G_(e,r,s,0),h=o}function G_(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=B1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=V_(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,j1(l,o)|0,o),h=s}function B1(){var e=0,n=0;if(c[7760]|0||(q1(9756),Bt(39,9756,Q|0)|0,n=7760,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9756)|0)){e=9756,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));q1(9756)}return 9756}function V_(e){return e=e|0,0}function j1(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=B1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Xp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(U1(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Xp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function U1(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=Y_(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,$_(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Xp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,K_(e,_),X_(_),h=k;return}}function Y_(e){return e=e|0,357913941}function $_(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function K_(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function X_(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function q1(e){e=e|0,Z_(e)}function J_(e){e=e|0,Q_(e+24|0)}function Q_(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Z_(e){e=e|0;var n=0;n=An()|0,Nn(e,2,8,n,z1()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function z1(){return 1292}function W1(e,n,r){e=e|0,n=n|0,r=+r;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,s=o+8|0,l=o,d=e4(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],t4(n,s,r),h=o}function e4(e){return e=e|0,(t[(B1()|0)+24>>2]|0)+(e*12|0)|0}function t4(e,n,r){e=e|0,n=n|0,r=+r;var o=0,s=0,l=0;l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),wu(s,r),r=+Du(s,r),nD[o&31](e,r),h=l}function n4(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],r4(e,r,s,0),h=o}function r4(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=H1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=i4(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,o4(l,o)|0,o),h=s}function H1(){var e=0,n=0;if(c[7768]|0||(Qp(9792),Bt(40,9792,Q|0)|0,n=7768,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9792)|0)){e=9792,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Qp(9792)}return 9792}function i4(e){return e=e|0,0}function o4(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=H1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Jp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(u4(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Jp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function u4(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=s4(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,l4(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Jp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,f4(e,_),c4(_),h=k;return}}function s4(e){return e=e|0,357913941}function l4(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function f4(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function c4(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Qp(e){e=e|0,p4(e)}function a4(e){e=e|0,d4(e+24|0)}function d4(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function p4(e){e=e|0;var n=0;n=An()|0,Nn(e,2,1,n,h4()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function h4(){return 1300}function m4(e,n,r,o){e=e|0,n=n|0,r=r|0,o=+o;var s=0,l=0,d=0,_=0;s=h,h=h+16|0,l=s+8|0,d=s,_=v4(e)|0,e=t[_+4>>2]|0,t[d>>2]=t[_>>2],t[d+4>>2]=e,t[l>>2]=t[d>>2],t[l+4>>2]=t[d+4>>2],g4(n,l,r,o),h=s}function v4(e){return e=e|0,(t[(H1()|0)+24>>2]|0)+(e*12|0)|0}function g4(e,n,r,o){e=e|0,n=n|0,r=r|0,o=+o;var s=0,l=0,d=0,_=0;_=h,h=h+16|0,l=_+1|0,d=_,s=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(s=t[(t[e>>2]|0)+s>>2]|0),ts(l,r),l=ns(l,r)|0,wu(d,o),o=+Du(d,o),cD[s&15](e,l,o),h=_}function a(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],p(e,r,s,0),h=o}function p(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=E()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=I(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,B(l,o)|0,o),h=s}function E(){var e=0,n=0;if(c[7776]|0||(nt(9828),Bt(41,9828,Q|0)|0,n=7776,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9828)|0)){e=9828,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));nt(9828)}return 9828}function I(e){return e=e|0,0}function B(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=E()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],G(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(te(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function G(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function te(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=se(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,Ee(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],G(l,o,r),t[y>>2]=(t[y>>2]|0)+12,$e(e,_),Ke(_),h=k;return}}function se(e){return e=e|0,357913941}function Ee(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function $e(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Ke(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function nt(e){e=e|0,an(e)}function Ct(e){e=e|0,Gt(e+24|0)}function Gt(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function an(e){e=e|0;var n=0;n=An()|0,Nn(e,2,7,n,qn()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function qn(){return 1312}function dn(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,s=o+8|0,l=o,d=Yn(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],er(n,s,r),h=o}function Yn(e){return e=e|0,(t[(E()|0)+24>>2]|0)+(e*12|0)|0}function er(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),ts(s,r),s=ns(s,r)|0,Bl[o&31](e,s),h=l}function vo(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Pi(e,r,s,0),h=o}function Pi(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=Mi()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=f0(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,Jo(l,o)|0,o),h=s}function Mi(){var e=0,n=0;if(c[7784]|0||(kw(9864),Bt(42,9864,Q|0)|0,n=7784,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9864)|0)){e=9864,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));kw(9864)}return 9864}function f0(e){return e=e|0,0}function Jo(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=Mi()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Su(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Zp(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Su(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function Zp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=v9(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,g9(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Su(l,o,r),t[y>>2]=(t[y>>2]|0)+12,_9(e,_),y9(_),h=k;return}}function v9(e){return e=e|0,357913941}function g9(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function _9(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function y9(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function kw(e){e=e|0,E9(e)}function w9(e){e=e|0,D9(e+24|0)}function D9(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function E9(e){e=e|0;var n=0;n=An()|0,Nn(e,2,8,n,S9()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function S9(){return 1320}function C9(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,s=o+8|0,l=o,d=T9(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],x9(n,s,r),h=o}function T9(e){return e=e|0,(t[(Mi()|0)+24>>2]|0)+(e*12|0)|0}function x9(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),k9(s,r),s=A9(s,r)|0,Bl[o&31](e,s),h=l}function k9(e,n){e=e|0,n=n|0}function A9(e,n){return e=e|0,n=n|0,O9(n)|0}function O9(e){return e=e|0,e|0}function I9(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],P9(e,r,s,0),h=o}function P9(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=_4()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=M9(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,F9(l,o)|0,o),h=s}function _4(){var e=0,n=0;if(c[7792]|0||(Ow(9900),Bt(43,9900,Q|0)|0,n=7792,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9900)|0)){e=9900,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Ow(9900)}return 9900}function M9(e){return e=e|0,0}function F9(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=_4()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Aw(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(L9(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Aw(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function L9(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=R9(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,N9(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Aw(l,o,r),t[y>>2]=(t[y>>2]|0)+12,B9(e,_),j9(_),h=k;return}}function R9(e){return e=e|0,357913941}function N9(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function B9(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function j9(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Ow(e){e=e|0,z9(e)}function U9(e){e=e|0,q9(e+24|0)}function q9(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function z9(e){e=e|0;var n=0;n=An()|0,Nn(e,2,22,n,W9()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function W9(){return 1344}function H9(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0;r=h,h=h+16|0,o=r+8|0,s=r,l=b9(e)|0,e=t[l+4>>2]|0,t[s>>2]=t[l>>2],t[s+4>>2]=e,t[o>>2]=t[s>>2],t[o+4>>2]=t[s+4>>2],G9(n,o),h=r}function b9(e){return e=e|0,(t[(_4()|0)+24>>2]|0)+(e*12|0)|0}function G9(e,n){e=e|0,n=n|0;var r=0;r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),Nl[r&127](e)}function V9(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=y4()|0,e=Y9(r)|0,ur(l,n,s,e,$9(r,o)|0,o)}function y4(){var e=0,n=0;if(c[7800]|0||(Pw(9936),Bt(44,9936,Q|0)|0,n=7800,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9936)|0)){e=9936,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Pw(9936)}return 9936}function Y9(e){return e=e|0,e|0}function $9(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=y4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(Iw(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(K9(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function Iw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function K9(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=X9(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,J9(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,Iw(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,Q9(e,s),Z9(s),h=_;return}}function X9(e){return e=e|0,536870911}function J9(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function Q9(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Z9(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function Pw(e){e=e|0,nx(e)}function ex(e){e=e|0,tx(e+24|0)}function tx(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function nx(e){e=e|0;var n=0;n=An()|0,Nn(e,1,23,n,Mo()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function rx(e,n){e=e|0,n=n|0,ox(t[(ix(e)|0)>>2]|0,n)}function ix(e){return e=e|0,(t[(y4()|0)+24>>2]|0)+(e<<3)|0}function ox(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,On(o,n),n=x1(o,n)|0,Nl[e&127](n),h=r}function ux(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=w4()|0,e=sx(r)|0,ur(l,n,s,e,lx(r,o)|0,o)}function w4(){var e=0,n=0;if(c[7808]|0||(Fw(9972),Bt(45,9972,Q|0)|0,n=7808,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9972)|0)){e=9972,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Fw(9972)}return 9972}function sx(e){return e=e|0,e|0}function lx(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=w4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(Mw(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(fx(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function Mw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function fx(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=cx(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,ax(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,Mw(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,dx(e,s),px(s),h=_;return}}function cx(e){return e=e|0,536870911}function ax(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function dx(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function px(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function Fw(e){e=e|0,vx(e)}function hx(e){e=e|0,mx(e+24|0)}function mx(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function vx(e){e=e|0;var n=0;n=An()|0,Nn(e,1,9,n,gx()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function gx(){return 1348}function _x(e,n){return e=e|0,n=n|0,wx(t[(yx(e)|0)>>2]|0,n)|0}function yx(e){return e=e|0,(t[(w4()|0)+24>>2]|0)+(e<<3)|0}function wx(e,n){e=e|0,n=n|0;var r=0,o=0;return r=h,h=h+16|0,o=r,Lw(o,n),n=Rw(o,n)|0,n=Xc(dc[e&31](n)|0)|0,h=r,n|0}function Lw(e,n){e=e|0,n=n|0}function Rw(e,n){return e=e|0,n=n|0,Dx(n)|0}function Dx(e){return e=e|0,e|0}function Ex(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=D4()|0,e=Sx(r)|0,ur(l,n,s,e,Cx(r,o)|0,o)}function D4(){var e=0,n=0;if(c[7816]|0||(Bw(10008),Bt(46,10008,Q|0)|0,n=7816,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10008)|0)){e=10008,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Bw(10008)}return 10008}function Sx(e){return e=e|0,e|0}function Cx(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=D4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(Nw(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(Tx(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function Nw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function Tx(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=xx(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,kx(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,Nw(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,Ax(e,s),Ox(s),h=_;return}}function xx(e){return e=e|0,536870911}function kx(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function Ax(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Ox(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function Bw(e){e=e|0,Mx(e)}function Ix(e){e=e|0,Px(e+24|0)}function Px(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function Mx(e){e=e|0;var n=0;n=An()|0,Nn(e,1,15,n,mp()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Fx(e){return e=e|0,Rx(t[(Lx(e)|0)>>2]|0)|0}function Lx(e){return e=e|0,(t[(D4()|0)+24>>2]|0)+(e<<3)|0}function Rx(e){return e=e|0,Xc(ph[e&7]()|0)|0}function Nx(){var e=0;return c[7832]|0||(bx(10052),Bt(25,10052,Q|0)|0,e=7832,t[e>>2]=1,t[e+4>>2]=0),10052}function Bx(e,n){e=e|0,n=n|0,t[e>>2]=jx()|0,t[e+4>>2]=Ux()|0,t[e+12>>2]=n,t[e+8>>2]=qx()|0,t[e+32>>2]=2}function jx(){return 11709}function Ux(){return 1188}function qx(){return eh()|0}function zx(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(Wx(r),Ve(r)):n|0&&(mu(n),Ve(n))}function Sf(e,n){return e=e|0,n=n|0,n&e|0}function Wx(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function eh(){var e=0;return c[7824]|0||(t[2511]=Hx()|0,t[2512]=0,e=7824,t[e>>2]=1,t[e+4>>2]=0),10044}function Hx(){return 0}function bx(e){e=e|0,Ys(e)}function Gx(e){e=e|0;var n=0,r=0,o=0,s=0,l=0;n=h,h=h+32|0,r=n+24|0,l=n+16|0,s=n+8|0,o=n,Vx(e,4827),Yx(e,4834,3)|0,$x(e,3682,47)|0,t[l>>2]=9,t[l+4>>2]=0,t[r>>2]=t[l>>2],t[r+4>>2]=t[l+4>>2],Kx(e,4841,r)|0,t[s>>2]=1,t[s+4>>2]=0,t[r>>2]=t[s>>2],t[r+4>>2]=t[s+4>>2],Xx(e,4871,r)|0,t[o>>2]=10,t[o+4>>2]=0,t[r>>2]=t[o>>2],t[r+4>>2]=t[o+4>>2],Jx(e,4891,r)|0,h=n}function Vx(e,n){e=e|0,n=n|0;var r=0;r=Ok()|0,t[e>>2]=r,Ik(r,n),Cf(t[e>>2]|0)}function Yx(e,n,r){return e=e|0,n=n|0,r=r|0,pk(e,Zn(n)|0,r,0),e|0}function $x(e,n,r){return e=e|0,n=n|0,r=r|0,Q7(e,Zn(n)|0,r,0),e|0}function Kx(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],F7(e,n,s),h=o,e|0}function Xx(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],h7(e,n,s),h=o,e|0}function Jx(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Qx(e,n,s),h=o,e|0}function Qx(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Zx(e,r,s,1),h=o}function Zx(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=E4()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=e7(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,t7(l,o)|0,o),h=s}function E4(){var e=0,n=0;if(c[7840]|0||(Uw(10100),Bt(48,10100,Q|0)|0,n=7840,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10100)|0)){e=10100,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Uw(10100)}return 10100}function e7(e){return e=e|0,0}function t7(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=E4()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],jw(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(n7(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function jw(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function n7(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=r7(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,i7(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],jw(l,o,r),t[y>>2]=(t[y>>2]|0)+12,o7(e,_),u7(_),h=k;return}}function r7(e){return e=e|0,357913941}function i7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function o7(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function u7(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Uw(e){e=e|0,f7(e)}function s7(e){e=e|0,l7(e+24|0)}function l7(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function f7(e){e=e|0;var n=0;n=An()|0,Nn(e,2,6,n,c7()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function c7(){return 1364}function a7(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=d7(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],r=p7(n,s,r)|0,h=o,r|0}function d7(e){return e=e|0,(t[(E4()|0)+24>>2]|0)+(e*12|0)|0}function p7(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;return l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),ts(s,r),s=ns(s,r)|0,s=ip(J4[o&15](e,s)|0)|0,h=l,s|0}function h7(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],m7(e,r,s,0),h=o}function m7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=S4()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=v7(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,g7(l,o)|0,o),h=s}function S4(){var e=0,n=0;if(c[7848]|0||(zw(10136),Bt(49,10136,Q|0)|0,n=7848,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10136)|0)){e=10136,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));zw(10136)}return 10136}function v7(e){return e=e|0,0}function g7(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=S4()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],qw(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(_7(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function qw(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function _7(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=y7(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,w7(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],qw(l,o,r),t[y>>2]=(t[y>>2]|0)+12,D7(e,_),E7(_),h=k;return}}function y7(e){return e=e|0,357913941}function w7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function D7(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function E7(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function zw(e){e=e|0,T7(e)}function S7(e){e=e|0,C7(e+24|0)}function C7(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function T7(e){e=e|0;var n=0;n=An()|0,Nn(e,2,9,n,x7()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function x7(){return 1372}function k7(e,n,r){e=e|0,n=n|0,r=+r;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,s=o+8|0,l=o,d=A7(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],O7(n,s,r),h=o}function A7(e){return e=e|0,(t[(S4()|0)+24>>2]|0)+(e*12|0)|0}function O7(e,n,r){e=e|0,n=n|0,r=+r;var o=0,s=0,l=0,d=tt;l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),I7(s,r),d=w(P7(s,r)),tD[o&1](e,d),h=l}function I7(e,n){e=e|0,n=+n}function P7(e,n){return e=e|0,n=+n,w(M7(n))}function M7(e){return e=+e,w(e)}function F7(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],L7(e,r,s,0),h=o}function L7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=C4()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=R7(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,N7(l,o)|0,o),h=s}function C4(){var e=0,n=0;if(c[7856]|0||(Hw(10172),Bt(50,10172,Q|0)|0,n=7856,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10172)|0)){e=10172,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Hw(10172)}return 10172}function R7(e){return e=e|0,0}function N7(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=C4()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Ww(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(B7(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Ww(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function B7(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=j7(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,U7(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Ww(l,o,r),t[y>>2]=(t[y>>2]|0)+12,q7(e,_),z7(_),h=k;return}}function j7(e){return e=e|0,357913941}function U7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function q7(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function z7(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Hw(e){e=e|0,b7(e)}function W7(e){e=e|0,H7(e+24|0)}function H7(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function b7(e){e=e|0;var n=0;n=An()|0,Nn(e,2,3,n,G7()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function G7(){return 1380}function V7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;s=h,h=h+16|0,l=s+8|0,d=s,_=Y7(e)|0,e=t[_+4>>2]|0,t[d>>2]=t[_>>2],t[d+4>>2]=e,t[l>>2]=t[d>>2],t[l+4>>2]=t[d+4>>2],$7(n,l,r,o),h=s}function Y7(e){return e=e|0,(t[(C4()|0)+24>>2]|0)+(e*12|0)|0}function $7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;_=h,h=h+16|0,l=_+1|0,d=_,s=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(s=t[(t[e>>2]|0)+s>>2]|0),ts(l,r),l=ns(l,r)|0,K7(d,o),d=X7(d,o)|0,X1[s&15](e,l,d),h=_}function K7(e,n){e=e|0,n=n|0}function X7(e,n){return e=e|0,n=n|0,J7(n)|0}function J7(e){return e=e|0,(e|0)!=0|0}function Q7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=T4()|0,e=Z7(r)|0,ur(l,n,s,e,ek(r,o)|0,o)}function T4(){var e=0,n=0;if(c[7864]|0||(Gw(10208),Bt(51,10208,Q|0)|0,n=7864,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10208)|0)){e=10208,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Gw(10208)}return 10208}function Z7(e){return e=e|0,e|0}function ek(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=T4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(bw(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(tk(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function bw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function tk(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=nk(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,rk(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,bw(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,ik(e,s),ok(s),h=_;return}}function nk(e){return e=e|0,536870911}function rk(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function ik(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function ok(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function Gw(e){e=e|0,lk(e)}function uk(e){e=e|0,sk(e+24|0)}function sk(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function lk(e){e=e|0;var n=0;n=An()|0,Nn(e,1,24,n,fk()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function fk(){return 1392}function ck(e,n){e=e|0,n=n|0,dk(t[(ak(e)|0)>>2]|0,n)}function ak(e){return e=e|0,(t[(T4()|0)+24>>2]|0)+(e<<3)|0}function dk(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,Lw(o,n),n=Rw(o,n)|0,Nl[e&127](n),h=r}function pk(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=x4()|0,e=hk(r)|0,ur(l,n,s,e,mk(r,o)|0,o)}function x4(){var e=0,n=0;if(c[7872]|0||(Yw(10244),Bt(52,10244,Q|0)|0,n=7872,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10244)|0)){e=10244,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Yw(10244)}return 10244}function hk(e){return e=e|0,e|0}function mk(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=x4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(Vw(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(vk(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function Vw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function vk(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=gk(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,_k(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,Vw(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,yk(e,s),wk(s),h=_;return}}function gk(e){return e=e|0,536870911}function _k(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function yk(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function wk(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function Yw(e){e=e|0,Sk(e)}function Dk(e){e=e|0,Ek(e+24|0)}function Ek(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function Sk(e){e=e|0;var n=0;n=An()|0,Nn(e,1,16,n,Ck()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Ck(){return 1400}function Tk(e){return e=e|0,kk(t[(xk(e)|0)>>2]|0)|0}function xk(e){return e=e|0,(t[(x4()|0)+24>>2]|0)+(e<<3)|0}function kk(e){return e=e|0,Ak(ph[e&7]()|0)|0}function Ak(e){return e=e|0,e|0}function Ok(){var e=0;return c[7880]|0||(Nk(10280),Bt(25,10280,Q|0)|0,e=7880,t[e>>2]=1,t[e+4>>2]=0),10280}function Ik(e,n){e=e|0,n=n|0,t[e>>2]=Pk()|0,t[e+4>>2]=Mk()|0,t[e+12>>2]=n,t[e+8>>2]=Fk()|0,t[e+32>>2]=4}function Pk(){return 11711}function Mk(){return 1356}function Fk(){return eh()|0}function Lk(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(Rk(r),Ve(r)):n|0&&(Gi(n),Ve(n))}function Rk(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function Nk(e){e=e|0,Ys(e)}function Bk(e){e=e|0,jk(e,4920),Uk(e)|0,qk(e)|0}function jk(e,n){e=e|0,n=n|0;var r=0;r=Up()|0,t[e>>2]=r,sA(r,n),Cf(t[e>>2]|0)}function Uk(e){e=e|0;var n=0;return n=t[e>>2]|0,uc(n,Jk()|0),e|0}function qk(e){e=e|0;var n=0;return n=t[e>>2]|0,uc(n,zk()|0),e|0}function zk(){var e=0;return c[7888]|0||($w(10328),Bt(53,10328,Q|0)|0,e=7888,t[e>>2]=1,t[e+4>>2]=0),Dn(10328)|0||$w(10328),10328}function uc(e,n){e=e|0,n=n|0,ur(e,0,n,0,0,0)}function $w(e){e=e|0,bk(e),sc(e,10)}function Wk(e){e=e|0,Hk(e+24|0)}function Hk(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function bk(e){e=e|0;var n=0;n=An()|0,Nn(e,5,1,n,$k()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Gk(e,n,r){e=e|0,n=n|0,r=+r,Vk(e,n,r)}function sc(e,n){e=e|0,n=n|0,t[e+20>>2]=n}function Vk(e,n,r){e=e|0,n=n|0,r=+r;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,l=o+8|0,_=o+13|0,s=o,d=o+12|0,ts(_,n),t[l>>2]=ns(_,n)|0,wu(d,r),L[s>>3]=+Du(d,r),Yk(e,l,s),h=o}function Yk(e,n,r){e=e|0,n=n|0,r=r|0,M(e+8|0,t[n>>2]|0,+L[r>>3]),c[e+24>>0]=1}function $k(){return 1404}function Kk(e,n){return e=e|0,n=+n,Xk(e,n)|0}function Xk(e,n){e=e|0,n=+n;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return o=h,h=h+16|0,l=o+4|0,d=o+8|0,_=o,s=Qo(8)|0,r=s,y=Tt(16)|0,ts(l,e),e=ns(l,e)|0,wu(d,n),M(y,e,+Du(d,n)),d=r+4|0,t[d>>2]=y,e=Tt(8)|0,d=t[d>>2]|0,t[_>>2]=0,t[l>>2]=t[_>>2],P1(e,d,l),t[s>>2]=e,h=o,r|0}function Jk(){var e=0;return c[7896]|0||(Kw(10364),Bt(54,10364,Q|0)|0,e=7896,t[e>>2]=1,t[e+4>>2]=0),Dn(10364)|0||Kw(10364),10364}function Kw(e){e=e|0,eA(e),sc(e,55)}function Qk(e){e=e|0,Zk(e+24|0)}function Zk(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function eA(e){e=e|0;var n=0;n=An()|0,Nn(e,5,4,n,iA()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function tA(e){e=e|0,nA(e)}function nA(e){e=e|0,rA(e)}function rA(e){e=e|0,Xw(e+8|0),c[e+24>>0]=1}function Xw(e){e=e|0,t[e>>2]=0,L[e+8>>3]=0}function iA(){return 1424}function oA(){return uA()|0}function uA(){var e=0,n=0,r=0,o=0,s=0,l=0,d=0;return n=h,h=h+16|0,s=n+4|0,d=n,r=Qo(8)|0,e=r,o=Tt(16)|0,Xw(o),l=e+4|0,t[l>>2]=o,o=Tt(8)|0,l=t[l>>2]|0,t[d>>2]=0,t[s>>2]=t[d>>2],P1(o,l,s),t[r>>2]=o,h=n,e|0}function sA(e,n){e=e|0,n=n|0,t[e>>2]=lA()|0,t[e+4>>2]=fA()|0,t[e+12>>2]=n,t[e+8>>2]=cA()|0,t[e+32>>2]=5}function lA(){return 11710}function fA(){return 1416}function cA(){return th()|0}function aA(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(dA(r),Ve(r)):n|0&&Ve(n)}function dA(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function th(){var e=0;return c[7904]|0||(t[2600]=pA()|0,t[2601]=0,e=7904,t[e>>2]=1,t[e+4>>2]=0),10400}function pA(){return t[357]|0}function hA(e){e=e|0,mA(e,4926),vA(e)|0}function mA(e,n){e=e|0,n=n|0;var r=0;r=u1()|0,t[e>>2]=r,kA(r,n),Cf(t[e>>2]|0)}function vA(e){e=e|0;var n=0;return n=t[e>>2]|0,uc(n,gA()|0),e|0}function gA(){var e=0;return c[7912]|0||(Jw(10412),Bt(56,10412,Q|0)|0,e=7912,t[e>>2]=1,t[e+4>>2]=0),Dn(10412)|0||Jw(10412),10412}function Jw(e){e=e|0,wA(e),sc(e,57)}function _A(e){e=e|0,yA(e+24|0)}function yA(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function wA(e){e=e|0;var n=0;n=An()|0,Nn(e,5,5,n,CA()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function DA(e){e=e|0,EA(e)}function EA(e){e=e|0,SA(e)}function SA(e){e=e|0;var n=0,r=0;n=e+8|0,r=n+48|0;do t[n>>2]=0,n=n+4|0;while((n|0)<(r|0));c[e+56>>0]=1}function CA(){return 1432}function TA(){return xA()|0}function xA(){var e=0,n=0,r=0,o=0,s=0,l=0,d=0,_=0;d=h,h=h+16|0,e=d+4|0,n=d,r=Qo(8)|0,o=r,s=Tt(48)|0,l=s,_=l+48|0;do t[l>>2]=0,l=l+4|0;while((l|0)<(_|0));return l=o+4|0,t[l>>2]=s,_=Tt(8)|0,l=t[l>>2]|0,t[n>>2]=0,t[e>>2]=t[n>>2],Wd(_,l,e),t[r>>2]=_,h=d,o|0}function kA(e,n){e=e|0,n=n|0,t[e>>2]=AA()|0,t[e+4>>2]=OA()|0,t[e+12>>2]=n,t[e+8>>2]=IA()|0,t[e+32>>2]=6}function AA(){return 11704}function OA(){return 1436}function IA(){return th()|0}function PA(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(MA(r),Ve(r)):n|0&&Ve(n)}function MA(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function FA(e){e=e|0,LA(e,4933),RA(e)|0,NA(e)|0}function LA(e,n){e=e|0,n=n|0;var r=0;r=uO()|0,t[e>>2]=r,sO(r,n),Cf(t[e>>2]|0)}function RA(e){e=e|0;var n=0;return n=t[e>>2]|0,uc(n,XA()|0),e|0}function NA(e){e=e|0;var n=0;return n=t[e>>2]|0,uc(n,BA()|0),e|0}function BA(){var e=0;return c[7920]|0||(Qw(10452),Bt(58,10452,Q|0)|0,e=7920,t[e>>2]=1,t[e+4>>2]=0),Dn(10452)|0||Qw(10452),10452}function Qw(e){e=e|0,qA(e),sc(e,1)}function jA(e){e=e|0,UA(e+24|0)}function UA(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function qA(e){e=e|0;var n=0;n=An()|0,Nn(e,5,1,n,bA()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function zA(e,n,r){e=e|0,n=+n,r=+r,WA(e,n,r)}function WA(e,n,r){e=e|0,n=+n,r=+r;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+32|0,l=o+8|0,_=o+17|0,s=o,d=o+16|0,wu(_,n),L[l>>3]=+Du(_,n),wu(d,r),L[s>>3]=+Du(d,r),HA(e,l,s),h=o}function HA(e,n,r){e=e|0,n=n|0,r=r|0,Zw(e+8|0,+L[n>>3],+L[r>>3]),c[e+24>>0]=1}function Zw(e,n,r){e=e|0,n=+n,r=+r,L[e>>3]=n,L[e+8>>3]=r}function bA(){return 1472}function GA(e,n){return e=+e,n=+n,VA(e,n)|0}function VA(e,n){e=+e,n=+n;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return o=h,h=h+16|0,d=o+4|0,_=o+8|0,y=o,s=Qo(8)|0,r=s,l=Tt(16)|0,wu(d,e),e=+Du(d,e),wu(_,n),Zw(l,e,+Du(_,n)),_=r+4|0,t[_>>2]=l,l=Tt(8)|0,_=t[_>>2]|0,t[y>>2]=0,t[d>>2]=t[y>>2],e8(l,_,d),t[s>>2]=l,h=o,r|0}function e8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=Tt(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1452,t[r+12>>2]=n,t[e+4>>2]=r}function YA(e){e=e|0,da(e),Ve(e)}function $A(e){e=e|0,e=t[e+12>>2]|0,e|0&&Ve(e)}function KA(e){e=e|0,Ve(e)}function XA(){var e=0;return c[7928]|0||(t8(10488),Bt(59,10488,Q|0)|0,e=7928,t[e>>2]=1,t[e+4>>2]=0),Dn(10488)|0||t8(10488),10488}function t8(e){e=e|0,ZA(e),sc(e,60)}function JA(e){e=e|0,QA(e+24|0)}function QA(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function ZA(e){e=e|0;var n=0;n=An()|0,Nn(e,5,6,n,rO()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function eO(e){e=e|0,tO(e)}function tO(e){e=e|0,nO(e)}function nO(e){e=e|0,n8(e+8|0),c[e+24>>0]=1}function n8(e){e=e|0,t[e>>2]=0,t[e+4>>2]=0,t[e+8>>2]=0,t[e+12>>2]=0}function rO(){return 1492}function iO(){return oO()|0}function oO(){var e=0,n=0,r=0,o=0,s=0,l=0,d=0;return n=h,h=h+16|0,s=n+4|0,d=n,r=Qo(8)|0,e=r,o=Tt(16)|0,n8(o),l=e+4|0,t[l>>2]=o,o=Tt(8)|0,l=t[l>>2]|0,t[d>>2]=0,t[s>>2]=t[d>>2],e8(o,l,s),t[r>>2]=o,h=n,e|0}function uO(){var e=0;return c[7936]|0||(pO(10524),Bt(25,10524,Q|0)|0,e=7936,t[e>>2]=1,t[e+4>>2]=0),10524}function sO(e,n){e=e|0,n=n|0,t[e>>2]=lO()|0,t[e+4>>2]=fO()|0,t[e+12>>2]=n,t[e+8>>2]=cO()|0,t[e+32>>2]=7}function lO(){return 11700}function fO(){return 1484}function cO(){return th()|0}function aO(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(dO(r),Ve(r)):n|0&&Ve(n)}function dO(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function pO(e){e=e|0,Ys(e)}function hO(e,n,r){e=e|0,n=n|0,r=r|0,e=Zn(n)|0,n=mO(r)|0,r=vO(r,0)|0,VO(e,n,r,k4()|0,0)}function mO(e){return e=e|0,e|0}function vO(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=k4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(i8(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(SO(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function k4(){var e=0,n=0;if(c[7944]|0||(r8(10568),Bt(61,10568,Q|0)|0,n=7944,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10568)|0)){e=10568,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));r8(10568)}return 10568}function r8(e){e=e|0,yO(e)}function gO(e){e=e|0,_O(e+24|0)}function _O(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function yO(e){e=e|0;var n=0;n=An()|0,Nn(e,1,17,n,Dp()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function wO(e){return e=e|0,EO(t[(DO(e)|0)>>2]|0)|0}function DO(e){return e=e|0,(t[(k4()|0)+24>>2]|0)+(e<<3)|0}function EO(e){return e=e|0,ea(ph[e&7]()|0)|0}function i8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function SO(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=CO(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,TO(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,i8(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,xO(e,s),kO(s),h=_;return}}function CO(e){return e=e|0,536870911}function TO(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function xO(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function kO(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function AO(){OO()}function OO(){IO(10604)}function IO(e){e=e|0,PO(e,4955)}function PO(e,n){e=e|0,n=n|0;var r=0;r=MO()|0,t[e>>2]=r,FO(r,n),Cf(t[e>>2]|0)}function MO(){var e=0;return c[7952]|0||(WO(10612),Bt(25,10612,Q|0)|0,e=7952,t[e>>2]=1,t[e+4>>2]=0),10612}function FO(e,n){e=e|0,n=n|0,t[e>>2]=BO()|0,t[e+4>>2]=jO()|0,t[e+12>>2]=n,t[e+8>>2]=UO()|0,t[e+32>>2]=8}function Cf(e){e=e|0;var n=0,r=0;n=h,h=h+16|0,r=n,sa()|0,t[r>>2]=e,LO(10608,r),h=n}function sa(){return c[11714]|0||(t[2652]=0,Bt(62,10608,Q|0)|0,c[11714]=1),10608}function LO(e,n){e=e|0,n=n|0;var r=0;r=Tt(8)|0,t[r+4>>2]=t[n>>2],t[r>>2]=t[e>>2],t[e>>2]=r}function RO(e){e=e|0,NO(e)}function NO(e){e=e|0;var n=0,r=0;if(n=t[e>>2]|0,n|0)do r=n,n=t[n>>2]|0,Ve(r);while((n|0)!=0);t[e>>2]=0}function BO(){return 11715}function jO(){return 1496}function UO(){return eh()|0}function qO(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(zO(r),Ve(r)):n|0&&Ve(n)}function zO(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function WO(e){e=e|0,Ys(e)}function HO(e,n){e=e|0,n=n|0;var r=0,o=0;sa()|0,r=t[2652]|0;e:do if(r|0){for(;o=t[r+4>>2]|0,!(o|0?(U8(A4(o)|0,e)|0)==0:0);)if(r=t[r>>2]|0,!r)break e;bO(o,n)}while(0)}function A4(e){return e=e|0,t[e+12>>2]|0}function bO(e,n){e=e|0,n=n|0;var r=0;e=e+36|0,r=t[e>>2]|0,r|0&&(Ju(r),Ve(r)),r=Tt(4)|0,ba(r,n),t[e>>2]=r}function O4(){return c[11716]|0||(t[2664]=0,Bt(63,10656,Q|0)|0,c[11716]=1),10656}function o8(){var e=0;return c[11717]|0?e=t[2665]|0:(GO(),t[2665]=1504,c[11717]=1,e=1504),e|0}function GO(){c[11740]|0||(c[11718]=Lt(Lt(8,0)|0,0)|0,c[11719]=Lt(Lt(0,0)|0,0)|0,c[11720]=Lt(Lt(0,16)|0,0)|0,c[11721]=Lt(Lt(8,0)|0,0)|0,c[11722]=Lt(Lt(0,0)|0,0)|0,c[11723]=Lt(Lt(8,0)|0,0)|0,c[11724]=Lt(Lt(0,0)|0,0)|0,c[11725]=Lt(Lt(8,0)|0,0)|0,c[11726]=Lt(Lt(0,0)|0,0)|0,c[11727]=Lt(Lt(8,0)|0,0)|0,c[11728]=Lt(Lt(0,0)|0,0)|0,c[11729]=Lt(Lt(0,0)|0,32)|0,c[11730]=Lt(Lt(0,0)|0,32)|0,c[11740]=1)}function u8(){return 1572}function VO(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0,k=0,T=0;l=h,h=h+32|0,T=l+16|0,k=l+12|0,y=l+8|0,_=l+4|0,d=l,t[T>>2]=e,t[k>>2]=n,t[y>>2]=r,t[_>>2]=o,t[d>>2]=s,O4()|0,YO(10656,T,k,y,_,d),h=l}function YO(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0;var d=0;d=Tt(24)|0,t1(d+4|0,t[n>>2]|0,t[r>>2]|0,t[o>>2]|0,t[s>>2]|0,t[l>>2]|0),t[d>>2]=t[e>>2],t[e>>2]=d}function s8(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0,Pe=0,ke=0,qe=0;if(qe=h,h=h+32|0,le=qe+20|0,ie=qe+8|0,Pe=qe+4|0,ke=qe,n=t[n>>2]|0,n|0){we=le+4|0,y=le+8|0,k=ie+4|0,T=ie+8|0,P=ie+8|0,q=le+8|0;do{if(d=n+4|0,_=I4(d)|0,_|0){if(s=b1(_)|0,t[le>>2]=0,t[we>>2]=0,t[y>>2]=0,o=(G1(_)|0)+1|0,$O(le,o),o|0)for(;o=o+-1|0,os(ie,t[s>>2]|0),l=t[we>>2]|0,l>>>0<(t[q>>2]|0)>>>0?(t[l>>2]=t[ie>>2],t[we>>2]=(t[we>>2]|0)+4):P4(le,ie),o;)s=s+4|0;o=V1(_)|0,t[ie>>2]=0,t[k>>2]=0,t[T>>2]=0;e:do if(t[o>>2]|0)for(s=0,l=0;;){if((s|0)==(l|0)?KO(ie,o):(t[s>>2]=t[o>>2],t[k>>2]=(t[k>>2]|0)+4),o=o+4|0,!(t[o>>2]|0))break e;s=t[k>>2]|0,l=t[P>>2]|0}while(0);t[Pe>>2]=nh(d)|0,t[ke>>2]=Dn(_)|0,XO(r,e,Pe,ke,le,ie),M4(ie),Rl(le)}n=t[n>>2]|0}while((n|0)!=0)}h=qe}function I4(e){return e=e|0,t[e+12>>2]|0}function b1(e){return e=e|0,t[e+12>>2]|0}function G1(e){return e=e|0,t[e+16>>2]|0}function $O(e,n){e=e|0,n=n|0;var r=0,o=0,s=0;s=h,h=h+32|0,r=s,o=t[e>>2]|0,(t[e+8>>2]|0)-o>>2>>>0>>0&&(m8(r,n,(t[e+4>>2]|0)-o>>2,e+8|0),v8(e,r),g8(r)),h=s}function P4(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0;if(d=h,h=h+32|0,r=d,o=e+4|0,s=((t[o>>2]|0)-(t[e>>2]|0)>>2)+1|0,l=h8(e)|0,l>>>0>>0)$n(e);else{_=t[e>>2]|0,k=(t[e+8>>2]|0)-_|0,y=k>>1,m8(r,k>>2>>>0>>1>>>0?y>>>0>>0?s:y:l,(t[o>>2]|0)-_>>2,e+8|0),l=r+8|0,t[t[l>>2]>>2]=t[n>>2],t[l>>2]=(t[l>>2]|0)+4,v8(e,r),g8(r),h=d;return}}function V1(e){return e=e|0,t[e+8>>2]|0}function KO(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0;if(d=h,h=h+32|0,r=d,o=e+4|0,s=((t[o>>2]|0)-(t[e>>2]|0)>>2)+1|0,l=p8(e)|0,l>>>0>>0)$n(e);else{_=t[e>>2]|0,k=(t[e+8>>2]|0)-_|0,y=k>>1,mI(r,k>>2>>>0>>1>>>0?y>>>0>>0?s:y:l,(t[o>>2]|0)-_>>2,e+8|0),l=r+8|0,t[t[l>>2]>>2]=t[n>>2],t[l>>2]=(t[l>>2]|0)+4,vI(e,r),gI(r),h=d;return}}function nh(e){return e=e|0,t[e>>2]|0}function XO(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,JO(e,n,r,o,s,l)}function M4(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-4-o|0)>>>2)<<2)),Ve(r))}function Rl(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-4-o|0)>>>2)<<2)),Ve(r))}function JO(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0;var d=0,_=0,y=0,k=0,T=0,P=0;d=h,h=h+48|0,T=d+40|0,_=d+32|0,P=d+24|0,y=d+12|0,k=d,Zo(_),e=Oi(e)|0,t[P>>2]=t[n>>2],r=t[r>>2]|0,o=t[o>>2]|0,F4(y,s),QO(k,l),t[T>>2]=t[P>>2],ZO(e,T,r,o,y,k),M4(k),Rl(y),eu(_),h=d}function F4(e,n){e=e|0,n=n|0;var r=0,o=0;t[e>>2]=0,t[e+4>>2]=0,t[e+8>>2]=0,r=n+4|0,o=(t[r>>2]|0)-(t[n>>2]|0)>>2,o|0&&(pI(e,o),hI(e,t[n>>2]|0,t[r>>2]|0,o))}function QO(e,n){e=e|0,n=n|0;var r=0,o=0;t[e>>2]=0,t[e+4>>2]=0,t[e+8>>2]=0,r=n+4|0,o=(t[r>>2]|0)-(t[n>>2]|0)>>2,o|0&&(aI(e,o),dI(e,t[n>>2]|0,t[r>>2]|0,o))}function ZO(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0;var d=0,_=0,y=0,k=0,T=0,P=0;d=h,h=h+32|0,T=d+28|0,P=d+24|0,_=d+12|0,y=d,k=ko(eI()|0)|0,t[P>>2]=t[n>>2],t[T>>2]=t[P>>2],n=lc(T)|0,r=l8(r)|0,o=L4(o)|0,t[_>>2]=t[s>>2],T=s+4|0,t[_+4>>2]=t[T>>2],P=s+8|0,t[_+8>>2]=t[P>>2],t[P>>2]=0,t[T>>2]=0,t[s>>2]=0,s=R4(_)|0,t[y>>2]=t[l>>2],T=l+4|0,t[y+4>>2]=t[T>>2],P=l+8|0,t[y+8>>2]=t[P>>2],t[P>>2]=0,t[T>>2]=0,t[l>>2]=0,qo(0,k|0,e|0,n|0,r|0,o|0,s|0,tI(y)|0)|0,M4(y),Rl(_),h=d}function eI(){var e=0;return c[7968]|0||(fI(10708),e=7968,t[e>>2]=1,t[e+4>>2]=0),10708}function lc(e){return e=e|0,c8(e)|0}function l8(e){return e=e|0,f8(e)|0}function L4(e){return e=e|0,ea(e)|0}function R4(e){return e=e|0,rI(e)|0}function tI(e){return e=e|0,nI(e)|0}function nI(e){e=e|0;var n=0,r=0,o=0;if(o=(t[e+4>>2]|0)-(t[e>>2]|0)|0,r=o>>2,o=Qo(o+4|0)|0,t[o>>2]=r,r|0){n=0;do t[o+4+(n<<2)>>2]=f8(t[(t[e>>2]|0)+(n<<2)>>2]|0)|0,n=n+1|0;while((n|0)!=(r|0))}return o|0}function f8(e){return e=e|0,e|0}function rI(e){e=e|0;var n=0,r=0,o=0;if(o=(t[e+4>>2]|0)-(t[e>>2]|0)|0,r=o>>2,o=Qo(o+4|0)|0,t[o>>2]=r,r|0){n=0;do t[o+4+(n<<2)>>2]=c8((t[e>>2]|0)+(n<<2)|0)|0,n=n+1|0;while((n|0)!=(r|0))}return o|0}function c8(e){e=e|0;var n=0,r=0,o=0,s=0;return s=h,h=h+32|0,n=s+12|0,r=s,o=U0(a8()|0)|0,o?(s1(n,o),l1(r,n),UF(e,r),e=f1(n)|0):e=iI(e)|0,h=s,e|0}function a8(){var e=0;return c[7960]|0||(lI(10664),Bt(25,10664,Q|0)|0,e=7960,t[e>>2]=1,t[e+4>>2]=0),10664}function iI(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0;return r=h,h=h+16|0,s=r+4|0,d=r,o=Qo(8)|0,n=o,_=Tt(4)|0,t[_>>2]=t[e>>2],l=n+4|0,t[l>>2]=_,e=Tt(8)|0,l=t[l>>2]|0,t[d>>2]=0,t[s>>2]=t[d>>2],d8(e,l,s),t[o>>2]=e,h=r,n|0}function d8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=Tt(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1656,t[r+12>>2]=n,t[e+4>>2]=r}function oI(e){e=e|0,da(e),Ve(e)}function uI(e){e=e|0,e=t[e+12>>2]|0,e|0&&Ve(e)}function sI(e){e=e|0,Ve(e)}function lI(e){e=e|0,Ys(e)}function fI(e){e=e|0,Ao(e,cI()|0,5)}function cI(){return 1676}function aI(e,n){e=e|0,n=n|0;var r=0;if((p8(e)|0)>>>0>>0&&$n(e),n>>>0>1073741823)_n();else{r=Tt(n<<2)|0,t[e+4>>2]=r,t[e>>2]=r,t[e+8>>2]=r+(n<<2);return}}function dI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,o=e+4|0,e=r-n|0,(e|0)>0&&(vn(t[o>>2]|0,n|0,e|0)|0,t[o>>2]=(t[o>>2]|0)+(e>>>2<<2))}function p8(e){return e=e|0,1073741823}function pI(e,n){e=e|0,n=n|0;var r=0;if((h8(e)|0)>>>0>>0&&$n(e),n>>>0>1073741823)_n();else{r=Tt(n<<2)|0,t[e+4>>2]=r,t[e>>2]=r,t[e+8>>2]=r+(n<<2);return}}function hI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,o=e+4|0,e=r-n|0,(e|0)>0&&(vn(t[o>>2]|0,n|0,e|0)|0,t[o>>2]=(t[o>>2]|0)+(e>>>2<<2))}function h8(e){return e=e|0,1073741823}function mI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>1073741823)_n();else{s=Tt(n<<2)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<2)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<2)}function vI(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>2)<<2)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function gI(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-4-n|0)>>>2)<<2)),e=t[e>>2]|0,e|0&&Ve(e)}function m8(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>1073741823)_n();else{s=Tt(n<<2)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<2)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<2)}function v8(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>2)<<2)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function g8(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-4-n|0)>>>2)<<2)),e=t[e>>2]|0,e|0&&Ve(e)}function _I(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0;if(ie=h,h=h+32|0,T=ie+20|0,P=ie+12|0,k=ie+16|0,q=ie+4|0,we=ie,le=ie+8|0,_=o8()|0,l=t[_>>2]|0,d=t[l>>2]|0,d|0)for(y=t[_+8>>2]|0,_=t[_+4>>2]|0;os(T,d),yI(e,T,_,y),l=l+4|0,d=t[l>>2]|0,d;)y=y+1|0,_=_+1|0;if(l=u8()|0,d=t[l>>2]|0,d|0)do os(T,d),t[P>>2]=t[l+4>>2],wI(n,T,P),l=l+8|0,d=t[l>>2]|0;while((d|0)!=0);if(l=t[(sa()|0)>>2]|0,l|0)do n=t[l+4>>2]|0,os(T,t[(la(n)|0)>>2]|0),t[P>>2]=A4(n)|0,DI(r,T,P),l=t[l>>2]|0;while((l|0)!=0);if(os(k,0),l=O4()|0,t[T>>2]=t[k>>2],s8(T,l,s),l=t[(sa()|0)>>2]|0,l|0){e=T+4|0,n=T+8|0,r=T+8|0;do{if(y=t[l+4>>2]|0,os(P,t[(la(y)|0)>>2]|0),EI(q,_8(y)|0),d=t[q>>2]|0,d|0){t[T>>2]=0,t[e>>2]=0,t[n>>2]=0;do os(we,t[(la(t[d+4>>2]|0)|0)>>2]|0),_=t[e>>2]|0,_>>>0<(t[r>>2]|0)>>>0?(t[_>>2]=t[we>>2],t[e>>2]=(t[e>>2]|0)+4):P4(T,we),d=t[d>>2]|0;while((d|0)!=0);SI(o,P,T),Rl(T)}t[le>>2]=t[P>>2],k=y8(y)|0,t[T>>2]=t[le>>2],s8(T,k,s),bd(q),l=t[l>>2]|0}while((l|0)!=0)}h=ie}function yI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,RI(e,n,r,o)}function wI(e,n,r){e=e|0,n=n|0,r=r|0,LI(e,n,r)}function la(e){return e=e|0,e|0}function DI(e,n,r){e=e|0,n=n|0,r=r|0,II(e,n,r)}function _8(e){return e=e|0,e+16|0}function EI(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;if(l=h,h=h+16|0,s=l+8|0,r=l,t[e>>2]=0,o=t[n>>2]|0,t[s>>2]=o,t[r>>2]=e,r=OI(r)|0,o|0){if(o=Tt(12)|0,d=(w8(s)|0)+4|0,e=t[d+4>>2]|0,n=o+4|0,t[n>>2]=t[d>>2],t[n+4>>2]=e,n=t[t[s>>2]>>2]|0,t[s>>2]=n,!n)e=o;else for(n=o;e=Tt(12)|0,y=(w8(s)|0)+4|0,_=t[y+4>>2]|0,d=e+4|0,t[d>>2]=t[y>>2],t[d+4>>2]=_,t[n>>2]=e,d=t[t[s>>2]>>2]|0,t[s>>2]=d,d;)n=e;t[e>>2]=t[r>>2],t[r>>2]=o}h=l}function SI(e,n,r){e=e|0,n=n|0,r=r|0,CI(e,n,r)}function y8(e){return e=e|0,e+24|0}function CI(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+32|0,d=o+24|0,s=o+16|0,_=o+12|0,l=o,Zo(s),e=Oi(e)|0,t[_>>2]=t[n>>2],F4(l,r),t[d>>2]=t[_>>2],TI(e,d,l),Rl(l),eu(s),h=o}function TI(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+32|0,d=o+16|0,_=o+12|0,s=o,l=ko(xI()|0)|0,t[_>>2]=t[n>>2],t[d>>2]=t[_>>2],n=lc(d)|0,t[s>>2]=t[r>>2],d=r+4|0,t[s+4>>2]=t[d>>2],_=r+8|0,t[s+8>>2]=t[_>>2],t[_>>2]=0,t[d>>2]=0,t[r>>2]=0,Ts(0,l|0,e|0,n|0,R4(s)|0)|0,Rl(s),h=o}function xI(){var e=0;return c[7976]|0||(kI(10720),e=7976,t[e>>2]=1,t[e+4>>2]=0),10720}function kI(e){e=e|0,Ao(e,AI()|0,2)}function AI(){return 1732}function OI(e){return e=e|0,t[e>>2]|0}function w8(e){return e=e|0,t[e>>2]|0}function II(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+32|0,l=o+16|0,s=o+8|0,d=o,Zo(s),e=Oi(e)|0,t[d>>2]=t[n>>2],r=t[r>>2]|0,t[l>>2]=t[d>>2],D8(e,l,r),eu(s),h=o}function D8(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,l=o+4|0,d=o,s=ko(PI()|0)|0,t[d>>2]=t[n>>2],t[l>>2]=t[d>>2],n=lc(l)|0,Ts(0,s|0,e|0,n|0,l8(r)|0)|0,h=o}function PI(){var e=0;return c[7984]|0||(MI(10732),e=7984,t[e>>2]=1,t[e+4>>2]=0),10732}function MI(e){e=e|0,Ao(e,FI()|0,2)}function FI(){return 1744}function LI(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+32|0,l=o+16|0,s=o+8|0,d=o,Zo(s),e=Oi(e)|0,t[d>>2]=t[n>>2],r=t[r>>2]|0,t[l>>2]=t[d>>2],D8(e,l,r),eu(s),h=o}function RI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;s=h,h=h+32|0,d=s+16|0,l=s+8|0,_=s,Zo(l),e=Oi(e)|0,t[_>>2]=t[n>>2],r=c[r>>0]|0,o=c[o>>0]|0,t[d>>2]=t[_>>2],NI(e,d,r,o),eu(l),h=s}function NI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;s=h,h=h+16|0,d=s+4|0,_=s,l=ko(BI()|0)|0,t[_>>2]=t[n>>2],t[d>>2]=t[_>>2],n=lc(d)|0,r=fa(r)|0,Bu(0,l|0,e|0,n|0,r|0,fa(o)|0)|0,h=s}function BI(){var e=0;return c[7992]|0||(UI(10744),e=7992,t[e>>2]=1,t[e+4>>2]=0),10744}function fa(e){return e=e|0,jI(e)|0}function jI(e){return e=e|0,e&255|0}function UI(e){e=e|0,Ao(e,qI()|0,3)}function qI(){return 1756}function zI(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;switch(q=h,h=h+32|0,_=q+8|0,y=q+4|0,k=q+20|0,T=q,_1(e,0),o=jF(n)|0,t[_>>2]=0,P=_+4|0,t[P>>2]=0,t[_+8>>2]=0,o<<24>>24){case 0:{c[k>>0]=0,WI(y,r,k),rh(e,y)|0,ei(y);break}case 8:{P=z4(n)|0,c[k>>0]=8,os(T,t[P+4>>2]|0),HI(y,r,k,T,P+8|0),rh(e,y)|0,ei(y);break}case 9:{if(l=z4(n)|0,n=t[l+4>>2]|0,n|0)for(d=_+8|0,s=l+12|0;n=n+-1|0,os(y,t[s>>2]|0),o=t[P>>2]|0,o>>>0<(t[d>>2]|0)>>>0?(t[o>>2]=t[y>>2],t[P>>2]=(t[P>>2]|0)+4):P4(_,y),n;)s=s+4|0;c[k>>0]=9,os(T,t[l+8>>2]|0),bI(y,r,k,T,_),rh(e,y)|0,ei(y);break}default:P=z4(n)|0,c[k>>0]=o,os(T,t[P+4>>2]|0),GI(y,r,k,T),rh(e,y)|0,ei(y)}Rl(_),h=q}function WI(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;o=h,h=h+16|0,s=o,Zo(s),n=Oi(n)|0,iP(e,n,c[r>>0]|0),eu(s),h=o}function rh(e,n){e=e|0,n=n|0;var r=0;return r=t[e>>2]|0,r|0&&ju(r|0),t[e>>2]=t[n>>2],t[n>>2]=0,e|0}function HI(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0;l=h,h=h+32|0,_=l+16|0,d=l+8|0,y=l,Zo(d),n=Oi(n)|0,r=c[r>>0]|0,t[y>>2]=t[o>>2],s=t[s>>2]|0,t[_>>2]=t[y>>2],eP(e,n,r,_,s),eu(d),h=l}function bI(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0,k=0;l=h,h=h+32|0,y=l+24|0,d=l+16|0,k=l+12|0,_=l,Zo(d),n=Oi(n)|0,r=c[r>>0]|0,t[k>>2]=t[o>>2],F4(_,s),t[y>>2]=t[k>>2],XI(e,n,r,y,_),Rl(_),eu(d),h=l}function GI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;s=h,h=h+32|0,d=s+16|0,l=s+8|0,_=s,Zo(l),n=Oi(n)|0,r=c[r>>0]|0,t[_>>2]=t[o>>2],t[d>>2]=t[_>>2],VI(e,n,r,d),eu(l),h=s}function VI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;s=h,h=h+16|0,l=s+4|0,_=s,d=ko(YI()|0)|0,r=fa(r)|0,t[_>>2]=t[o>>2],t[l>>2]=t[_>>2],ih(e,Ts(0,d|0,n|0,r|0,lc(l)|0)|0),h=s}function YI(){var e=0;return c[8e3]|0||($I(10756),e=8e3,t[e>>2]=1,t[e+4>>2]=0),10756}function ih(e,n){e=e|0,n=n|0,_1(e,n)}function $I(e){e=e|0,Ao(e,KI()|0,2)}function KI(){return 1772}function XI(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0,k=0;l=h,h=h+32|0,y=l+16|0,k=l+12|0,d=l,_=ko(JI()|0)|0,r=fa(r)|0,t[k>>2]=t[o>>2],t[y>>2]=t[k>>2],o=lc(y)|0,t[d>>2]=t[s>>2],y=s+4|0,t[d+4>>2]=t[y>>2],k=s+8|0,t[d+8>>2]=t[k>>2],t[k>>2]=0,t[y>>2]=0,t[s>>2]=0,ih(e,Bu(0,_|0,n|0,r|0,o|0,R4(d)|0)|0),Rl(d),h=l}function JI(){var e=0;return c[8008]|0||(QI(10768),e=8008,t[e>>2]=1,t[e+4>>2]=0),10768}function QI(e){e=e|0,Ao(e,ZI()|0,3)}function ZI(){return 1784}function eP(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0;l=h,h=h+16|0,_=l+4|0,y=l,d=ko(tP()|0)|0,r=fa(r)|0,t[y>>2]=t[o>>2],t[_>>2]=t[y>>2],o=lc(_)|0,ih(e,Bu(0,d|0,n|0,r|0,o|0,L4(s)|0)|0),h=l}function tP(){var e=0;return c[8016]|0||(nP(10780),e=8016,t[e>>2]=1,t[e+4>>2]=0),10780}function nP(e){e=e|0,Ao(e,rP()|0,3)}function rP(){return 1800}function iP(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=ko(oP()|0)|0,ih(e,sf(0,o|0,n|0,fa(r)|0)|0)}function oP(){var e=0;return c[8024]|0||(uP(10792),e=8024,t[e>>2]=1,t[e+4>>2]=0),10792}function uP(e){e=e|0,Ao(e,sP()|0,1)}function sP(){return 1816}function lP(){fP(),cP(),aP()}function fP(){t[2702]=K8(65536)|0}function cP(){PP(10856)}function aP(){dP(10816)}function dP(e){e=e|0,pP(e,5044),hP(e)|0}function pP(e,n){e=e|0,n=n|0;var r=0;r=a8()|0,t[e>>2]=r,TP(r,n),Cf(t[e>>2]|0)}function hP(e){e=e|0;var n=0;return n=t[e>>2]|0,uc(n,mP()|0),e|0}function mP(){var e=0;return c[8032]|0||(E8(10820),Bt(64,10820,Q|0)|0,e=8032,t[e>>2]=1,t[e+4>>2]=0),Dn(10820)|0||E8(10820),10820}function E8(e){e=e|0,_P(e),sc(e,25)}function vP(e){e=e|0,gP(e+24|0)}function gP(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function _P(e){e=e|0;var n=0;n=An()|0,Nn(e,5,18,n,EP()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function yP(e,n){e=e|0,n=n|0,wP(e,n)}function wP(e,n){e=e|0,n=n|0;var r=0,o=0,s=0;r=h,h=h+16|0,o=r,s=r+4|0,Ml(s,n),t[o>>2]=Fl(s,n)|0,DP(e,o),h=r}function DP(e,n){e=e|0,n=n|0,S8(e+4|0,t[n>>2]|0),c[e+8>>0]=1}function S8(e,n){e=e|0,n=n|0,t[e>>2]=n}function EP(){return 1824}function SP(e){return e=e|0,CP(e)|0}function CP(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0;return r=h,h=h+16|0,s=r+4|0,d=r,o=Qo(8)|0,n=o,_=Tt(4)|0,Ml(s,e),S8(_,Fl(s,e)|0),l=n+4|0,t[l>>2]=_,e=Tt(8)|0,l=t[l>>2]|0,t[d>>2]=0,t[s>>2]=t[d>>2],d8(e,l,s),t[o>>2]=e,h=r,n|0}function Qo(e){e=e|0;var n=0,r=0;return e=e+7&-8,(e>>>0<=32768?(n=t[2701]|0,e>>>0<=(65536-n|0)>>>0):0)?(r=(t[2702]|0)+n|0,t[2701]=n+e,e=r):(e=K8(e+8|0)|0,t[e>>2]=t[2703],t[2703]=e,e=e+8|0),e|0}function TP(e,n){e=e|0,n=n|0,t[e>>2]=xP()|0,t[e+4>>2]=kP()|0,t[e+12>>2]=n,t[e+8>>2]=AP()|0,t[e+32>>2]=9}function xP(){return 11744}function kP(){return 1832}function AP(){return th()|0}function OP(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(IP(r),Ve(r)):n|0&&Ve(n)}function IP(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function PP(e){e=e|0,MP(e,5052),FP(e)|0,LP(e,5058,26)|0,RP(e,5069,1)|0,NP(e,5077,10)|0,BP(e,5087,19)|0,jP(e,5094,27)|0}function MP(e,n){e=e|0,n=n|0;var r=0;r=IF()|0,t[e>>2]=r,PF(r,n),Cf(t[e>>2]|0)}function FP(e){e=e|0;var n=0;return n=t[e>>2]|0,uc(n,vF()|0),e|0}function LP(e,n,r){return e=e|0,n=n|0,r=r|0,QM(e,Zn(n)|0,r,0),e|0}function RP(e,n,r){return e=e|0,n=n|0,r=r|0,BM(e,Zn(n)|0,r,0),e|0}function NP(e,n,r){return e=e|0,n=n|0,r=r|0,mM(e,Zn(n)|0,r,0),e|0}function BP(e,n,r){return e=e|0,n=n|0,r=r|0,eM(e,Zn(n)|0,r,0),e|0}function C8(e,n){e=e|0,n=n|0;var r=0,o=0;e:for(;;){for(r=t[2703]|0;;){if((r|0)==(n|0))break e;if(o=t[r>>2]|0,t[2703]=o,!r)r=o;else break}Ve(r)}t[2701]=e}function jP(e,n,r){return e=e|0,n=n|0,r=r|0,UP(e,Zn(n)|0,r,0),e|0}function UP(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=N4()|0,e=qP(r)|0,ur(l,n,s,e,zP(r,o)|0,o)}function N4(){var e=0,n=0;if(c[8040]|0||(x8(10860),Bt(65,10860,Q|0)|0,n=8040,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10860)|0)){e=10860,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));x8(10860)}return 10860}function qP(e){return e=e|0,e|0}function zP(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=N4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(T8(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(WP(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function T8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function WP(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=HP(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,bP(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,T8(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,GP(e,s),VP(s),h=_;return}}function HP(e){return e=e|0,536870911}function bP(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function GP(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function VP(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function x8(e){e=e|0,KP(e)}function YP(e){e=e|0,$P(e+24|0)}function $P(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function KP(e){e=e|0;var n=0;n=An()|0,Nn(e,1,11,n,XP()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function XP(){return 1840}function JP(e,n,r){e=e|0,n=n|0,r=r|0,ZP(t[(QP(e)|0)>>2]|0,n,r)}function QP(e){return e=e|0,(t[(N4()|0)+24>>2]|0)+(e<<3)|0}function ZP(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;o=h,h=h+16|0,l=o+1|0,s=o,Ml(l,n),n=Fl(l,n)|0,Ml(s,r),r=Fl(s,r)|0,Bl[e&31](n,r),h=o}function eM(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=B4()|0,e=tM(r)|0,ur(l,n,s,e,nM(r,o)|0,o)}function B4(){var e=0,n=0;if(c[8048]|0||(A8(10896),Bt(66,10896,Q|0)|0,n=8048,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10896)|0)){e=10896,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));A8(10896)}return 10896}function tM(e){return e=e|0,e|0}function nM(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=B4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(k8(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(rM(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function k8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function rM(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=iM(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,oM(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,k8(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,uM(e,s),sM(s),h=_;return}}function iM(e){return e=e|0,536870911}function oM(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function uM(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function sM(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function A8(e){e=e|0,cM(e)}function lM(e){e=e|0,fM(e+24|0)}function fM(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function cM(e){e=e|0;var n=0;n=An()|0,Nn(e,1,11,n,aM()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function aM(){return 1852}function dM(e,n){return e=e|0,n=n|0,hM(t[(pM(e)|0)>>2]|0,n)|0}function pM(e){return e=e|0,(t[(B4()|0)+24>>2]|0)+(e<<3)|0}function hM(e,n){e=e|0,n=n|0;var r=0,o=0;return r=h,h=h+16|0,o=r,Ml(o,n),n=Fl(o,n)|0,n=ea(dc[e&31](n)|0)|0,h=r,n|0}function mM(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=j4()|0,e=vM(r)|0,ur(l,n,s,e,gM(r,o)|0,o)}function j4(){var e=0,n=0;if(c[8056]|0||(I8(10932),Bt(67,10932,Q|0)|0,n=8056,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10932)|0)){e=10932,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));I8(10932)}return 10932}function vM(e){return e=e|0,e|0}function gM(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=j4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(O8(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(_M(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function O8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function _M(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=yM(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,wM(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,O8(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,DM(e,s),EM(s),h=_;return}}function yM(e){return e=e|0,536870911}function wM(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function DM(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function EM(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function I8(e){e=e|0,TM(e)}function SM(e){e=e|0,CM(e+24|0)}function CM(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function TM(e){e=e|0;var n=0;n=An()|0,Nn(e,1,7,n,xM()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function xM(){return 1860}function kM(e,n,r){return e=e|0,n=n|0,r=r|0,OM(t[(AM(e)|0)>>2]|0,n,r)|0}function AM(e){return e=e|0,(t[(j4()|0)+24>>2]|0)+(e<<3)|0}function OM(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0;return o=h,h=h+32|0,d=o+12|0,l=o+8|0,_=o,y=o+16|0,s=o+4|0,IM(y,n),PM(_,y,n),$s(s,r),r=Ks(s,r)|0,t[d>>2]=t[_>>2],X1[e&15](l,d,r),r=MM(l)|0,ei(l),Xs(s),h=o,r|0}function IM(e,n){e=e|0,n=n|0}function PM(e,n,r){e=e|0,n=n|0,r=r|0,FM(e,r)}function MM(e){return e=e|0,Oi(e)|0}function FM(e,n){e=e|0,n=n|0;var r=0,o=0,s=0;s=h,h=h+16|0,r=s,o=n,o&1?(LM(r,0),c0(o|0,r|0)|0,RM(e,r),NM(r)):t[e>>2]=t[n>>2],h=s}function LM(e,n){e=e|0,n=n|0,wd(e,n),t[e+4>>2]=0,c[e+8>>0]=0}function RM(e,n){e=e|0,n=n|0,t[e>>2]=t[n+4>>2]}function NM(e){e=e|0,c[e+8>>0]=0}function BM(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=U4()|0,e=jM(r)|0,ur(l,n,s,e,UM(r,o)|0,o)}function U4(){var e=0,n=0;if(c[8064]|0||(M8(10968),Bt(68,10968,Q|0)|0,n=8064,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10968)|0)){e=10968,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));M8(10968)}return 10968}function jM(e){return e=e|0,e|0}function UM(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=U4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(P8(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(qM(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function P8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function qM(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=zM(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,WM(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,P8(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,HM(e,s),bM(s),h=_;return}}function zM(e){return e=e|0,536870911}function WM(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function HM(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function bM(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function M8(e){e=e|0,YM(e)}function GM(e){e=e|0,VM(e+24|0)}function VM(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function YM(e){e=e|0;var n=0;n=An()|0,Nn(e,1,1,n,$M()|0,5),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function $M(){return 1872}function KM(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,JM(t[(XM(e)|0)>>2]|0,n,r,o,s,l)}function XM(e){return e=e|0,(t[(U4()|0)+24>>2]|0)+(e<<3)|0}function JM(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0;var d=0,_=0,y=0,k=0,T=0,P=0;d=h,h=h+32|0,_=d+16|0,y=d+12|0,k=d+8|0,T=d+4|0,P=d,$s(_,n),n=Ks(_,n)|0,$s(y,r),r=Ks(y,r)|0,$s(k,o),o=Ks(k,o)|0,$s(T,s),s=Ks(T,s)|0,$s(P,l),l=Ks(P,l)|0,eD[e&1](n,r,o,s,l),Xs(P),Xs(T),Xs(k),Xs(y),Xs(_),h=d}function QM(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=q4()|0,e=ZM(r)|0,ur(l,n,s,e,eF(r,o)|0,o)}function q4(){var e=0,n=0;if(c[8072]|0||(L8(11004),Bt(69,11004,Q|0)|0,n=8072,t[n>>2]=1,t[n+4>>2]=0),!(Dn(11004)|0)){e=11004,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));L8(11004)}return 11004}function ZM(e){return e=e|0,e|0}function eF(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=q4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(F8(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(tF(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function F8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function tF(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=nF(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,rF(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,F8(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,iF(e,s),oF(s),h=_;return}}function nF(e){return e=e|0,536870911}function rF(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function iF(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function oF(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function L8(e){e=e|0,lF(e)}function uF(e){e=e|0,sF(e+24|0)}function sF(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function lF(e){e=e|0;var n=0;n=An()|0,Nn(e,1,12,n,fF()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function fF(){return 1896}function cF(e,n,r){e=e|0,n=n|0,r=r|0,dF(t[(aF(e)|0)>>2]|0,n,r)}function aF(e){return e=e|0,(t[(q4()|0)+24>>2]|0)+(e<<3)|0}function dF(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;o=h,h=h+16|0,l=o+4|0,s=o,pF(l,n),n=hF(l,n)|0,$s(s,r),r=Ks(s,r)|0,Bl[e&31](n,r),Xs(s),h=o}function pF(e,n){e=e|0,n=n|0}function hF(e,n){return e=e|0,n=n|0,mF(n)|0}function mF(e){return e=e|0,e|0}function vF(){var e=0;return c[8080]|0||(R8(11040),Bt(70,11040,Q|0)|0,e=8080,t[e>>2]=1,t[e+4>>2]=0),Dn(11040)|0||R8(11040),11040}function R8(e){e=e|0,yF(e),sc(e,71)}function gF(e){e=e|0,_F(e+24|0)}function _F(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function yF(e){e=e|0;var n=0;n=An()|0,Nn(e,5,7,n,SF()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function wF(e){e=e|0,DF(e)}function DF(e){e=e|0,EF(e)}function EF(e){e=e|0,c[e+8>>0]=1}function SF(){return 1936}function CF(){return TF()|0}function TF(){var e=0,n=0,r=0,o=0,s=0,l=0,d=0;return n=h,h=h+16|0,s=n+4|0,d=n,r=Qo(8)|0,e=r,l=e+4|0,t[l>>2]=Tt(1)|0,o=Tt(8)|0,l=t[l>>2]|0,t[d>>2]=0,t[s>>2]=t[d>>2],xF(o,l,s),t[r>>2]=o,h=n,e|0}function xF(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=Tt(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1916,t[r+12>>2]=n,t[e+4>>2]=r}function kF(e){e=e|0,da(e),Ve(e)}function AF(e){e=e|0,e=t[e+12>>2]|0,e|0&&Ve(e)}function OF(e){e=e|0,Ve(e)}function IF(){var e=0;return c[8088]|0||(BF(11076),Bt(25,11076,Q|0)|0,e=8088,t[e>>2]=1,t[e+4>>2]=0),11076}function PF(e,n){e=e|0,n=n|0,t[e>>2]=MF()|0,t[e+4>>2]=FF()|0,t[e+12>>2]=n,t[e+8>>2]=LF()|0,t[e+32>>2]=10}function MF(){return 11745}function FF(){return 1940}function LF(){return eh()|0}function RF(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(NF(r),Ve(r)):n|0&&Ve(n)}function NF(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function BF(e){e=e|0,Ys(e)}function os(e,n){e=e|0,n=n|0,t[e>>2]=n}function z4(e){return e=e|0,t[e>>2]|0}function jF(e){return e=e|0,c[t[e>>2]>>0]|0}function UF(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,t[o>>2]=t[e>>2],qF(n,o)|0,h=r}function qF(e,n){e=e|0,n=n|0;var r=0;return r=zF(t[e>>2]|0,n)|0,n=e+4|0,t[(t[n>>2]|0)+8>>2]=r,t[(t[n>>2]|0)+8>>2]|0}function zF(e,n){e=e|0,n=n|0;var r=0,o=0;return r=h,h=h+16|0,o=r,Zo(o),e=Oi(e)|0,n=WF(e,t[n>>2]|0)|0,eu(o),h=r,n|0}function Zo(e){e=e|0,t[e>>2]=t[2701],t[e+4>>2]=t[2703]}function WF(e,n){e=e|0,n=n|0;var r=0;return r=ko(HF()|0)|0,sf(0,r|0,e|0,L4(n)|0)|0}function eu(e){e=e|0,C8(t[e>>2]|0,t[e+4>>2]|0)}function HF(){var e=0;return c[8096]|0||(bF(11120),e=8096,t[e>>2]=1,t[e+4>>2]=0),11120}function bF(e){e=e|0,Ao(e,GF()|0,1)}function GF(){return 1948}function VF(){YF()}function YF(){var e=0,n=0,r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0;if(le=h,h=h+16|0,T=le+4|0,P=le,si(65536,10804,t[2702]|0,10812),r=o8()|0,n=t[r>>2]|0,e=t[n>>2]|0,e|0)for(o=t[r+8>>2]|0,r=t[r+4>>2]|0;As(e|0,C[r>>0]|0|0,c[o>>0]|0),n=n+4|0,e=t[n>>2]|0,e;)o=o+1|0,r=r+1|0;if(e=u8()|0,n=t[e>>2]|0,n|0)do uu(n|0,t[e+4>>2]|0),e=e+8|0,n=t[e>>2]|0;while((n|0)!=0);uu($F()|0,5167),k=sa()|0,e=t[k>>2]|0;e:do if(e|0){do KF(t[e+4>>2]|0),e=t[e>>2]|0;while((e|0)!=0);if(e=t[k>>2]|0,e|0){y=k;do{for(;s=e,e=t[e>>2]|0,s=t[s+4>>2]|0,!!(XF(s)|0);)if(t[P>>2]=y,t[T>>2]=t[P>>2],JF(k,T)|0,!e)break e;if(QF(s),y=t[y>>2]|0,n=N8(s)|0,l=Wo()|0,d=h,h=h+((1*(n<<2)|0)+15&-16)|0,_=h,h=h+((1*(n<<2)|0)+15&-16)|0,n=t[(_8(s)|0)>>2]|0,n|0)for(r=d,o=_;t[r>>2]=t[(la(t[n+4>>2]|0)|0)>>2],t[o>>2]=t[n+8>>2],n=t[n>>2]|0,n;)r=r+4|0,o=o+4|0;ie=la(s)|0,n=ZF(s)|0,r=N8(s)|0,o=eL(s)|0,Is(ie|0,n|0,d|0,_|0,r|0,o|0,A4(s)|0),b0(l|0)}while((e|0)!=0)}}while(0);if(e=t[(O4()|0)>>2]|0,e|0)do ie=e+4|0,k=I4(ie)|0,s=V1(k)|0,l=b1(k)|0,d=(G1(k)|0)+1|0,_=oh(k)|0,y=B8(ie)|0,k=Dn(k)|0,T=nh(ie)|0,P=W4(ie)|0,zo(0,s|0,l|0,d|0,_|0,y|0,k|0,T|0,P|0,H4(ie)|0),e=t[e>>2]|0;while((e|0)!=0);e=t[(sa()|0)>>2]|0;e:do if(e|0){t:for(;;){if(n=t[e+4>>2]|0,n|0?(q=t[(la(n)|0)>>2]|0,we=t[(y8(n)|0)>>2]|0,we|0):0){r=we;do{n=r+4|0,o=I4(n)|0;n:do if(o|0)switch(Dn(o)|0){case 0:break t;case 4:case 3:case 2:{_=V1(o)|0,y=b1(o)|0,k=(G1(o)|0)+1|0,T=oh(o)|0,P=Dn(o)|0,ie=nh(n)|0,zo(q|0,_|0,y|0,k|0,T|0,0,P|0,ie|0,W4(n)|0,H4(n)|0);break n}case 1:{d=V1(o)|0,_=b1(o)|0,y=(G1(o)|0)+1|0,k=oh(o)|0,T=B8(n)|0,P=Dn(o)|0,ie=nh(n)|0,zo(q|0,d|0,_|0,y|0,k|0,T|0,P|0,ie|0,W4(n)|0,H4(n)|0);break n}case 5:{k=V1(o)|0,T=b1(o)|0,P=(G1(o)|0)+1|0,ie=oh(o)|0,zo(q|0,k|0,T|0,P|0,ie|0,tL(o)|0,Dn(o)|0,0,0,0);break n}default:break n}while(0);r=t[r>>2]|0}while((r|0)!=0)}if(e=t[e>>2]|0,!e)break e}_n()}while(0);uf(),h=le}function $F(){return 11703}function KF(e){e=e|0,c[e+40>>0]=0}function XF(e){return e=e|0,(c[e+40>>0]|0)!=0|0}function JF(e,n){return e=e|0,n=n|0,n=nL(n)|0,e=t[n>>2]|0,t[n>>2]=t[e>>2],Ve(e),t[n>>2]|0}function QF(e){e=e|0,c[e+40>>0]=1}function N8(e){return e=e|0,t[e+20>>2]|0}function ZF(e){return e=e|0,t[e+8>>2]|0}function eL(e){return e=e|0,t[e+32>>2]|0}function oh(e){return e=e|0,t[e+4>>2]|0}function B8(e){return e=e|0,t[e+4>>2]|0}function W4(e){return e=e|0,t[e+8>>2]|0}function H4(e){return e=e|0,t[e+16>>2]|0}function tL(e){return e=e|0,t[e+20>>2]|0}function nL(e){return e=e|0,t[e>>2]|0}function uh(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0,Pe=0,ke=0,qe=0,pe=0,_e=0,vt=0;vt=h,h=h+16|0,q=vt;do if(e>>>0<245){if(k=e>>>0<11?16:e+11&-8,e=k>>>3,P=t[2783]|0,r=P>>>e,r&3|0)return n=(r&1^1)+e|0,e=11172+(n<<1<<2)|0,r=e+8|0,o=t[r>>2]|0,s=o+8|0,l=t[s>>2]|0,(e|0)==(l|0)?t[2783]=P&~(1<>2]=e,t[r>>2]=l),_e=n<<3,t[o+4>>2]=_e|3,_e=o+_e+4|0,t[_e>>2]=t[_e>>2]|1,_e=s,h=vt,_e|0;if(T=t[2785]|0,k>>>0>T>>>0){if(r|0)return n=2<>>12&16,n=n>>>d,r=n>>>5&8,n=n>>>r,s=n>>>2&4,n=n>>>s,e=n>>>1&2,n=n>>>e,o=n>>>1&1,o=(r|d|s|e|o)+(n>>>o)|0,n=11172+(o<<1<<2)|0,e=n+8|0,s=t[e>>2]|0,d=s+8|0,r=t[d>>2]|0,(n|0)==(r|0)?(e=P&~(1<>2]=n,t[e>>2]=r,e=P),l=(o<<3)-k|0,t[s+4>>2]=k|3,o=s+k|0,t[o+4>>2]=l|1,t[o+l>>2]=l,T|0&&(s=t[2788]|0,n=T>>>3,r=11172+(n<<1<<2)|0,n=1<>2]|0):(t[2783]=e|n,n=r,e=r+8|0),t[e>>2]=s,t[n+12>>2]=s,t[s+8>>2]=n,t[s+12>>2]=r),t[2785]=l,t[2788]=o,_e=d,h=vt,_e|0;if(_=t[2784]|0,_){if(r=(_&0-_)+-1|0,d=r>>>12&16,r=r>>>d,l=r>>>5&8,r=r>>>l,y=r>>>2&4,r=r>>>y,o=r>>>1&2,r=r>>>o,e=r>>>1&1,e=t[11436+((l|d|y|o|e)+(r>>>e)<<2)>>2]|0,r=(t[e+4>>2]&-8)-k|0,o=t[e+16+(((t[e+16>>2]|0)==0&1)<<2)>>2]|0,!o)y=e,l=r;else{do d=(t[o+4>>2]&-8)-k|0,y=d>>>0>>0,r=y?d:r,e=y?o:e,o=t[o+16+(((t[o+16>>2]|0)==0&1)<<2)>>2]|0;while((o|0)!=0);y=e,l=r}if(d=y+k|0,y>>>0>>0){s=t[y+24>>2]|0,n=t[y+12>>2]|0;do if((n|0)==(y|0)){if(e=y+20|0,n=t[e>>2]|0,!n&&(e=y+16|0,n=t[e>>2]|0,!n)){r=0;break}for(;;){if(r=n+20|0,o=t[r>>2]|0,o|0){n=o,e=r;continue}if(r=n+16|0,o=t[r>>2]|0,o)n=o,e=r;else break}t[e>>2]=0,r=n}else r=t[y+8>>2]|0,t[r+12>>2]=n,t[n+8>>2]=r,r=n;while(0);do if(s|0){if(n=t[y+28>>2]|0,e=11436+(n<<2)|0,(y|0)==(t[e>>2]|0)){if(t[e>>2]=r,!r){t[2784]=_&~(1<>2]|0)!=(y|0)&1)<<2)>>2]=r,!r)break;t[r+24>>2]=s,n=t[y+16>>2]|0,n|0&&(t[r+16>>2]=n,t[n+24>>2]=r),n=t[y+20>>2]|0,n|0&&(t[r+20>>2]=n,t[n+24>>2]=r)}while(0);return l>>>0<16?(_e=l+k|0,t[y+4>>2]=_e|3,_e=y+_e+4|0,t[_e>>2]=t[_e>>2]|1):(t[y+4>>2]=k|3,t[d+4>>2]=l|1,t[d+l>>2]=l,T|0&&(o=t[2788]|0,n=T>>>3,r=11172+(n<<1<<2)|0,n=1<>2]|0):(t[2783]=P|n,n=r,e=r+8|0),t[e>>2]=o,t[n+12>>2]=o,t[o+8>>2]=n,t[o+12>>2]=r),t[2785]=l,t[2788]=d),_e=y+8|0,h=vt,_e|0}else P=k}else P=k}else P=k}else if(e>>>0<=4294967231)if(e=e+11|0,k=e&-8,y=t[2784]|0,y){o=0-k|0,e=e>>>8,e?k>>>0>16777215?_=31:(P=(e+1048320|0)>>>16&8,pe=e<>>16&4,pe=pe<>>16&2,_=14-(T|P|_)+(pe<<_>>>15)|0,_=k>>>(_+7|0)&1|_<<1):_=0,r=t[11436+(_<<2)>>2]|0;e:do if(!r)r=0,e=0,pe=57;else for(e=0,d=k<<((_|0)==31?0:25-(_>>>1)|0),l=0;;){if(s=(t[r+4>>2]&-8)-k|0,s>>>0>>0)if(s)e=r,o=s;else{e=r,o=0,s=r,pe=61;break e}if(s=t[r+20>>2]|0,r=t[r+16+(d>>>31<<2)>>2]|0,l=(s|0)==0|(s|0)==(r|0)?l:s,s=(r|0)==0,s){r=l,pe=57;break}else d=d<<((s^1)&1)}while(0);if((pe|0)==57){if((r|0)==0&(e|0)==0){if(e=2<<_,e=y&(e|0-e),!e){P=k;break}P=(e&0-e)+-1|0,d=P>>>12&16,P=P>>>d,l=P>>>5&8,P=P>>>l,_=P>>>2&4,P=P>>>_,T=P>>>1&2,P=P>>>T,r=P>>>1&1,e=0,r=t[11436+((l|d|_|T|r)+(P>>>r)<<2)>>2]|0}r?(s=r,pe=61):(_=e,d=o)}if((pe|0)==61)for(;;)if(pe=0,r=(t[s+4>>2]&-8)-k|0,P=r>>>0>>0,r=P?r:o,e=P?s:e,s=t[s+16+(((t[s+16>>2]|0)==0&1)<<2)>>2]|0,s)o=r,pe=61;else{_=e,d=r;break}if((_|0)!=0?d>>>0<((t[2785]|0)-k|0)>>>0:0){if(l=_+k|0,_>>>0>=l>>>0)return _e=0,h=vt,_e|0;s=t[_+24>>2]|0,n=t[_+12>>2]|0;do if((n|0)==(_|0)){if(e=_+20|0,n=t[e>>2]|0,!n&&(e=_+16|0,n=t[e>>2]|0,!n)){n=0;break}for(;;){if(r=n+20|0,o=t[r>>2]|0,o|0){n=o,e=r;continue}if(r=n+16|0,o=t[r>>2]|0,o)n=o,e=r;else break}t[e>>2]=0}else _e=t[_+8>>2]|0,t[_e+12>>2]=n,t[n+8>>2]=_e;while(0);do if(s){if(e=t[_+28>>2]|0,r=11436+(e<<2)|0,(_|0)==(t[r>>2]|0)){if(t[r>>2]=n,!n){o=y&~(1<>2]|0)!=(_|0)&1)<<2)>>2]=n,!n){o=y;break}t[n+24>>2]=s,e=t[_+16>>2]|0,e|0&&(t[n+16>>2]=e,t[e+24>>2]=n),e=t[_+20>>2]|0,e&&(t[n+20>>2]=e,t[e+24>>2]=n),o=y}else o=y;while(0);do if(d>>>0>=16){if(t[_+4>>2]=k|3,t[l+4>>2]=d|1,t[l+d>>2]=d,n=d>>>3,d>>>0<256){r=11172+(n<<1<<2)|0,e=t[2783]|0,n=1<>2]|0):(t[2783]=e|n,n=r,e=r+8|0),t[e>>2]=l,t[n+12>>2]=l,t[l+8>>2]=n,t[l+12>>2]=r;break}if(n=d>>>8,n?d>>>0>16777215?n=31:(pe=(n+1048320|0)>>>16&8,_e=n<>>16&4,_e=_e<>>16&2,n=14-(qe|pe|n)+(_e<>>15)|0,n=d>>>(n+7|0)&1|n<<1):n=0,r=11436+(n<<2)|0,t[l+28>>2]=n,e=l+16|0,t[e+4>>2]=0,t[e>>2]=0,e=1<>2]=l,t[l+24>>2]=r,t[l+12>>2]=l,t[l+8>>2]=l;break}for(e=d<<((n|0)==31?0:25-(n>>>1)|0),r=t[r>>2]|0;;){if((t[r+4>>2]&-8|0)==(d|0)){pe=97;break}if(o=r+16+(e>>>31<<2)|0,n=t[o>>2]|0,n)e=e<<1,r=n;else{pe=96;break}}if((pe|0)==96){t[o>>2]=l,t[l+24>>2]=r,t[l+12>>2]=l,t[l+8>>2]=l;break}else if((pe|0)==97){pe=r+8|0,_e=t[pe>>2]|0,t[_e+12>>2]=l,t[pe>>2]=l,t[l+8>>2]=_e,t[l+12>>2]=r,t[l+24>>2]=0;break}}else _e=d+k|0,t[_+4>>2]=_e|3,_e=_+_e+4|0,t[_e>>2]=t[_e>>2]|1;while(0);return _e=_+8|0,h=vt,_e|0}else P=k}else P=k;else P=-1;while(0);if(r=t[2785]|0,r>>>0>=P>>>0)return n=r-P|0,e=t[2788]|0,n>>>0>15?(_e=e+P|0,t[2788]=_e,t[2785]=n,t[_e+4>>2]=n|1,t[_e+n>>2]=n,t[e+4>>2]=P|3):(t[2785]=0,t[2788]=0,t[e+4>>2]=r|3,_e=e+r+4|0,t[_e>>2]=t[_e>>2]|1),_e=e+8|0,h=vt,_e|0;if(d=t[2786]|0,d>>>0>P>>>0)return qe=d-P|0,t[2786]=qe,_e=t[2789]|0,pe=_e+P|0,t[2789]=pe,t[pe+4>>2]=qe|1,t[_e+4>>2]=P|3,_e=_e+8|0,h=vt,_e|0;if(t[2901]|0?e=t[2903]|0:(t[2903]=4096,t[2902]=4096,t[2904]=-1,t[2905]=-1,t[2906]=0,t[2894]=0,e=q&-16^1431655768,t[q>>2]=e,t[2901]=e,e=4096),_=P+48|0,y=P+47|0,l=e+y|0,s=0-e|0,k=l&s,k>>>0<=P>>>0||(e=t[2893]|0,e|0?(T=t[2891]|0,q=T+k|0,q>>>0<=T>>>0|q>>>0>e>>>0):0))return _e=0,h=vt,_e|0;e:do if(t[2894]&4)n=0,pe=133;else{r=t[2789]|0;t:do if(r){for(o=11580;e=t[o>>2]|0,!(e>>>0<=r>>>0?(ie=o+4|0,(e+(t[ie>>2]|0)|0)>>>0>r>>>0):0);)if(e=t[o+8>>2]|0,e)o=e;else{pe=118;break t}if(n=l-d&s,n>>>0<2147483647)if(e=xf(n|0)|0,(e|0)==((t[o>>2]|0)+(t[ie>>2]|0)|0)){if((e|0)!=(-1|0)){d=n,l=e,pe=135;break e}}else o=e,pe=126;else n=0}else pe=118;while(0);do if((pe|0)==118)if(r=xf(0)|0,(r|0)!=(-1|0)?(n=r,we=t[2902]|0,le=we+-1|0,n=((le&n|0)==0?0:(le+n&0-we)-n|0)+k|0,we=t[2891]|0,le=n+we|0,n>>>0>P>>>0&n>>>0<2147483647):0){if(ie=t[2893]|0,ie|0?le>>>0<=we>>>0|le>>>0>ie>>>0:0){n=0;break}if(e=xf(n|0)|0,(e|0)==(r|0)){d=n,l=r,pe=135;break e}else o=e,pe=126}else n=0;while(0);do if((pe|0)==126){if(r=0-n|0,!(_>>>0>n>>>0&(n>>>0<2147483647&(o|0)!=(-1|0))))if((o|0)==(-1|0)){n=0;break}else{d=n,l=o,pe=135;break e}if(e=t[2903]|0,e=y-n+e&0-e,e>>>0>=2147483647){d=n,l=o,pe=135;break e}if((xf(e|0)|0)==(-1|0)){xf(r|0)|0,n=0;break}else{d=e+n|0,l=o,pe=135;break e}}while(0);t[2894]=t[2894]|4,pe=133}while(0);if((((pe|0)==133?k>>>0<2147483647:0)?(qe=xf(k|0)|0,ie=xf(0)|0,Pe=ie-qe|0,ke=Pe>>>0>(P+40|0)>>>0,!((qe|0)==(-1|0)|ke^1|qe>>>0>>0&((qe|0)!=(-1|0)&(ie|0)!=(-1|0))^1)):0)&&(d=ke?Pe:n,l=qe,pe=135),(pe|0)==135){n=(t[2891]|0)+d|0,t[2891]=n,n>>>0>(t[2892]|0)>>>0&&(t[2892]=n),y=t[2789]|0;do if(y){for(n=11580;;){if(e=t[n>>2]|0,r=n+4|0,o=t[r>>2]|0,(l|0)==(e+o|0)){pe=145;break}if(s=t[n+8>>2]|0,s)n=s;else break}if(((pe|0)==145?(t[n+12>>2]&8|0)==0:0)?y>>>0>>0&y>>>0>=e>>>0:0){t[r>>2]=o+d,_e=y+8|0,_e=(_e&7|0)==0?0:0-_e&7,pe=y+_e|0,_e=(t[2786]|0)+(d-_e)|0,t[2789]=pe,t[2786]=_e,t[pe+4>>2]=_e|1,t[pe+_e+4>>2]=40,t[2790]=t[2905];break}for(l>>>0<(t[2787]|0)>>>0&&(t[2787]=l),r=l+d|0,n=11580;;){if((t[n>>2]|0)==(r|0)){pe=153;break}if(e=t[n+8>>2]|0,e)n=e;else break}if((pe|0)==153?(t[n+12>>2]&8|0)==0:0){t[n>>2]=l,T=n+4|0,t[T>>2]=(t[T>>2]|0)+d,T=l+8|0,T=l+((T&7|0)==0?0:0-T&7)|0,n=r+8|0,n=r+((n&7|0)==0?0:0-n&7)|0,k=T+P|0,_=n-T-P|0,t[T+4>>2]=P|3;do if((n|0)!=(y|0)){if((n|0)==(t[2788]|0)){_e=(t[2785]|0)+_|0,t[2785]=_e,t[2788]=k,t[k+4>>2]=_e|1,t[k+_e>>2]=_e;break}if(e=t[n+4>>2]|0,(e&3|0)==1){d=e&-8,o=e>>>3;e:do if(e>>>0<256)if(e=t[n+8>>2]|0,r=t[n+12>>2]|0,(r|0)==(e|0)){t[2783]=t[2783]&~(1<>2]=r,t[r+8>>2]=e;break}else{l=t[n+24>>2]|0,e=t[n+12>>2]|0;do if((e|0)==(n|0)){if(o=n+16|0,r=o+4|0,e=t[r>>2]|0,!e)if(e=t[o>>2]|0,e)r=o;else{e=0;break}for(;;){if(o=e+20|0,s=t[o>>2]|0,s|0){e=s,r=o;continue}if(o=e+16|0,s=t[o>>2]|0,s)e=s,r=o;else break}t[r>>2]=0}else _e=t[n+8>>2]|0,t[_e+12>>2]=e,t[e+8>>2]=_e;while(0);if(!l)break;r=t[n+28>>2]|0,o=11436+(r<<2)|0;do if((n|0)!=(t[o>>2]|0)){if(t[l+16+(((t[l+16>>2]|0)!=(n|0)&1)<<2)>>2]=e,!e)break e}else{if(t[o>>2]=e,e|0)break;t[2784]=t[2784]&~(1<>2]=l,r=n+16|0,o=t[r>>2]|0,o|0&&(t[e+16>>2]=o,t[o+24>>2]=e),r=t[r+4>>2]|0,!r)break;t[e+20>>2]=r,t[r+24>>2]=e}while(0);n=n+d|0,s=d+_|0}else s=_;if(n=n+4|0,t[n>>2]=t[n>>2]&-2,t[k+4>>2]=s|1,t[k+s>>2]=s,n=s>>>3,s>>>0<256){r=11172+(n<<1<<2)|0,e=t[2783]|0,n=1<>2]|0):(t[2783]=e|n,n=r,e=r+8|0),t[e>>2]=k,t[n+12>>2]=k,t[k+8>>2]=n,t[k+12>>2]=r;break}n=s>>>8;do if(!n)n=0;else{if(s>>>0>16777215){n=31;break}pe=(n+1048320|0)>>>16&8,_e=n<>>16&4,_e=_e<>>16&2,n=14-(qe|pe|n)+(_e<>>15)|0,n=s>>>(n+7|0)&1|n<<1}while(0);if(o=11436+(n<<2)|0,t[k+28>>2]=n,e=k+16|0,t[e+4>>2]=0,t[e>>2]=0,e=t[2784]|0,r=1<>2]=k,t[k+24>>2]=o,t[k+12>>2]=k,t[k+8>>2]=k;break}for(e=s<<((n|0)==31?0:25-(n>>>1)|0),r=t[o>>2]|0;;){if((t[r+4>>2]&-8|0)==(s|0)){pe=194;break}if(o=r+16+(e>>>31<<2)|0,n=t[o>>2]|0,n)e=e<<1,r=n;else{pe=193;break}}if((pe|0)==193){t[o>>2]=k,t[k+24>>2]=r,t[k+12>>2]=k,t[k+8>>2]=k;break}else if((pe|0)==194){pe=r+8|0,_e=t[pe>>2]|0,t[_e+12>>2]=k,t[pe>>2]=k,t[k+8>>2]=_e,t[k+12>>2]=r,t[k+24>>2]=0;break}}else _e=(t[2786]|0)+_|0,t[2786]=_e,t[2789]=k,t[k+4>>2]=_e|1;while(0);return _e=T+8|0,h=vt,_e|0}for(n=11580;e=t[n>>2]|0,!(e>>>0<=y>>>0?(_e=e+(t[n+4>>2]|0)|0,_e>>>0>y>>>0):0);)n=t[n+8>>2]|0;s=_e+-47|0,e=s+8|0,e=s+((e&7|0)==0?0:0-e&7)|0,s=y+16|0,e=e>>>0>>0?y:e,n=e+8|0,r=l+8|0,r=(r&7|0)==0?0:0-r&7,pe=l+r|0,r=d+-40-r|0,t[2789]=pe,t[2786]=r,t[pe+4>>2]=r|1,t[pe+r+4>>2]=40,t[2790]=t[2905],r=e+4|0,t[r>>2]=27,t[n>>2]=t[2895],t[n+4>>2]=t[2896],t[n+8>>2]=t[2897],t[n+12>>2]=t[2898],t[2895]=l,t[2896]=d,t[2898]=0,t[2897]=n,n=e+24|0;do pe=n,n=n+4|0,t[n>>2]=7;while((pe+8|0)>>>0<_e>>>0);if((e|0)!=(y|0)){if(l=e-y|0,t[r>>2]=t[r>>2]&-2,t[y+4>>2]=l|1,t[e>>2]=l,n=l>>>3,l>>>0<256){r=11172+(n<<1<<2)|0,e=t[2783]|0,n=1<>2]|0):(t[2783]=e|n,n=r,e=r+8|0),t[e>>2]=y,t[n+12>>2]=y,t[y+8>>2]=n,t[y+12>>2]=r;break}if(n=l>>>8,n?l>>>0>16777215?r=31:(pe=(n+1048320|0)>>>16&8,_e=n<>>16&4,_e=_e<>>16&2,r=14-(qe|pe|r)+(_e<